| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Barbie.Bare
Description
Sometimes one needs a type like
Barbie and it may feel like
a second-class record type, where one needs to
unpack values in each field. For those cases, we can leverage on
closed type-families:Identity
dataBaredataCoveredtype familyWeart f a whereWearBaref a = aWearCoveredf a = f a data SignUpForm t f = SignUpForm' { username ::Weart fString, , password ::Weart fString, mailingOk ::Weart fBool} instanceFunctorB(SignUpFormCovered) instanceTraversableB(SignUpFormCovered) ..., instanceBareBSignUpForm type SignUpRaw = SignUpFormMaybetype SignUpData = SignUpFormBareformData = SignUpForm "jbond" "shaken007" False :: SignUpData
Bare values
type family Wear t f a where ... Source #
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:
Bis a normal Barbie-type, in the sense thatCoveredff1 :: B, etc.Coveredf -> fIntB, on the other hand, is a normal record with no functor around the type:Baref
B { f1 :: 5, f2 = True } :: B Bare f
Covering and stripping
class FunctorB (b Covered) => BareB b where Source #
Class of Barbie-types defined using Wear and can therefore
have Bare versions. Must satisfy:
bcover.bstrip=idbstrip.bcover=id
Minimal complete definition
Nothing