barbies
Classes for working with types that can change clothes.
https://github.com/jcpetruzza/barbies#readme
Version on this page: | 2.0.4.0 |
LTS Haskell 22.36: | 2.0.5.0 |
Stackage Nightly 2024-10-03: | 2.1.1.0 |
Latest on Hackage: | 2.1.1.0 |
barbies-2.0.4.0@sha256:2b1ed8b14e6ee1b5cbf81495ca5f8ff9bde519d4cec778fcdb05fdd645610716,4407
Module documentation for 2.0.4.0
barbies
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.
Related packages
- 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
Changes
Changelog for barbies
2.0.4.0
- Add FunctorT and DistributiveT instances for AccumT
2.0.3.1
- Compatibility changes for GHC 9.2 (Dan Dart)
2.0.3.0
- Add Barbies.Bi.bttraverse_
- Add Barbies.Bi.btfoldMap
- Fix failure to derive Constraints{B,T} for proper bi-barbies.
- Builds with ghc 9 (Fumiaki Kinoshita)
2.0.2.0
- Add
Barbies.Bare.WearTwo
type family to support having field-specific newtype wrappers that get applied only to the covered barbie (Lennart Spitzner).
2.0.1.0
- Add the
DistributiveB
class (Gergő Érdi).
2.0.0.0
- Builds with ghc 8.8, but drops support for ghc 8.0 and 8.2
- Fix failure to derive
TraversableB
andConstraintsB
when using a type parameter not under the functor argument. - Fix failure to derive instances for types with arguments of kind
k -> Type
. - Fix failure to derive instances where functor arg is applied under a functor.
- Derive instances for nested barbies occurring under two functors (Matthew Peddie).
- Add
foldMapC
andbzipWithxC
(Matthew Peddie). - Create a
Barbies
module, to contain wrappers, basic docs, etc.Data.Functor.Barbie
contains only functor-related stuff. - Replace
ProductB
byApplicativeB
, with more lax laws. Now we can derive more instances than before, since arbitrary monoids are allowed as fields of the record. - Add
Data.Functor.Transformer
, operations for bi-barbies, including support for nesting. - Add a
ErrorContainer
wrapper, similar toContainer
but forEither e
. - Remove
ProductBC
, sincebdicts
can now be defined in terms ofApplicativeB
andConstraintsB
. - Remove functions deprecated on release 1.0
- Deprecate
Data.Functor.Prod
,(/*)
and(/*/)
. - Deprecate
Data.Barbie
, in favor ofData.Functor.Barbie
. - Deprecate
Data.Barbie.Bare
, in favor ofBarbies.Bare
. - Deprecate
Data.Barbie.Constraints
, in favor ofBarbies.Constraints
.
1.1.3.0
Wear
will raise aTypeError
instead of getting stuck (Alex Peitsinis).
1.1.2.1
- Uploaded 1.1.2.0 was broken (missing
btraverseC
)
1.1.2.0
- Add
traverseC
(Ole Krüger). - Fix typo in ProductB laws (thanks to Ben Radford).
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
andCompose
(Ole Krüger).
1.0.0.0
-
Replaced
ConstraintsOf
inConstraintsB
byAllB
, which allows constraints to be given ona
instead of onf a
. TheClassF
class lets us specify constraints onf a
by doingAllB (ClassF c f) b
.ConstraintsOf
becomes then a type alias. Credit goes to Csongor Kiss. -
ConstraintsOf
was ultimately deprecated in favour ofAllBF
, which is shorter and more consistent withAllB
. -
Renamed
ConstraintsB(adjProof)
toConstraintsB(baddDicts)
. -
Renamed
ProofB(bproof)
toProductBC(bdicts)
. -
Changed the way
Wear
works: now wear-types need to have an extra type parameter that controls whether they areBare
orCovered
. This let us remove all the “magic” that was involved, in the sense that one couldn’t have instances ofFunctorB
, etc, for wear-types wihtout usingunsafeCoerce
(this was true also for handwritten instances). -
Added
bsequence'
, a frequent specialisation ofbsequence
. -
Added
bfoldMap
. -
Added
buniqC
andbmempty
. -
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
andUnit
barbies
0.1.3.1
- Fixed issue on Barbie-types with strictness annotations.
0.1.3.0
- Use both
Monoid
andSemigroup
as constraints for theMonoid
instance, so that this works with ghc 8.0 to 8.4 (Fraser Murray)
0.1.2.0
- Use
Monoid
and notSemigroup
as constraints for theMonoid
instance
0.1.1.0
- Added
instance Semigroup (Barbie b)
to go along theMonoid
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.