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 Barbie f
= Barbie
{ name :: f String
, age :: f Int
}
b1 :: Barbie Last -- Barbie with a monoid structure
b2 :: Barbie (Const a) -- container Barbie
b3 :: Barbie Identity -- Barbie's new clothes
This package provides basic classes and abstractions to work with these types and easily transform them.
Changes
Changelog for barbies
1.1.1.0
Add bmapC (Chris Penner).
1.1.0.0
Make all classes poly-kinded (#7): a barbie can now be any type
parameterised by a type (k -> Type). In particular, a (higher-kinded)
barbie is a type parameterised by a barbie. Thanks to Ole Krüger.
Add instances for functor transformers: Proxy, Const, Product, Sum
and Compose (Ole Krüger).
1.0.0.0
Replaced ConstraintsOf in ConstraintsB by AllB, which allows
constraints to be given on a instead of on f a. The ClassF
class lets us specify constraints on f a by doing AllB (ClassF c f) b.
ConstraintsOf becomes then a type alias. Credit goes to Csongor Kiss.
ConstraintsOf was ultimately deprecated in favour of AllBF, which
is shorter and more consistent with AllB.
Renamed ConstraintsB(adjProof) to ConstraintsB(baddDicts).
Renamed ProofB(bproof) to ProductBC(bdicts).
Changed the way Wear works: now wear-types need to have an extra
type parameter that controls whether they are Bare or Covered. This
let us remove all the “magic” that was involved, in the sense that
one couldn’t have instances of FunctorB, etc, for wear-types wihtout
using unsafeCoerce (this was true also for handwritten instances).
Added bsequence', a frequent specialisation of bsequence.
Added bfoldMap.
Added buniqC and bmempty.
Improved the internal instance derivation mechanism. We no longer
need unsafeCoerce and the code should be in general indistinguishible
from hand-written instances (not currently verified).
Fixed support for barbie-types that have additional type parameters (#5).
0.1.4.0
Added btraverse_
Added the trivial Void and Unit barbies
0.1.3.1
Fixed issue on Barbie-types with strictness annotations.
0.1.3.0
Use both Monoid and Semigroup as constraints for the Monoid instance,
so that this works with ghc 8.0 to 8.4 (Fraser Murray)
0.1.2.0
Use Monoid and not Semigroup as constraints for the Monoid instance
0.1.1.0
Added instance Semigroup (Barbie b) to go along the Monoid instance
0.1.0.1
Works under GHC 8.0.2, but notice one needs to use empty instance
declarations, because ghc chokes on deriving clauses.