The Wear type-function allows one to define a Barbie-type as
data B t f
= B { f1 :: Wear t f Int
, f2 :: Wear t f Bool
}
This gives rise to two rather different types:
B Covered fis a normal Barbie-type, in the sense thatf1 :: B Covered f -> f Int, etc.B Bare f, on the other hand, is a normal record with no functor around the type:
B { f1 :: 5, f2 = True } :: B Bare f