Types that are parametric on unary type-constructors that control their shapes are like Barbies that can wear different clothes to become a different doll. This is a common Haskell-idiom. E.g.,
data Person f
= Person
{ name :: f String
, age :: f Int
}
b1 :: Person Last -- Barbie with a monoid structure
b2 :: Person (Const a) -- container Barbie
b3 :: Person Identity -- Barbie's new clothes
This package provides basic classes and abstractions to work with these types and easily transform them. See the docs to learn more.
- barbies-th: Use Template Haskell to derive barbie-types from declarations that look like normal types.
- higgledy: Use Generics to give a barbie-type interface to a normal type.
- harg: Program-configuration (from command-line arguments, environment variables, configuration files, etc) via barbie-types