barbies 0.1.0.0 → 0.1.0.1
raw patch · 4 files changed
+133/−77 lines, 4 filesdep +bifunctorsPVP ok
version bump matches the API change (PVP)
Dependencies added: bifunctors
API changes (from Hackage documentation)
Files
- ChangeLog.md +6/−1
- barbies.cabal +2/−1
- src/Data/Barbie/Internal/Instances.hs +7/−1
- test/Barbies.hs +118/−74
ChangeLog.md view
@@ -1,3 +1,8 @@ # Changelog for barbies -0.1.0.0 Initial release+## 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.+++## 0.1.0.0 - Initial release
barbies.cabal view
@@ -1,5 +1,5 @@ name: barbies-version: 0.1.0.0+version: 0.1.0.1 synopsis: Classes for working with types that can change clothes. description: Types that are parametric on a functor are like Barbies that have an outfit for each role. This package provides the basic abstractions to work with them comfortably. category: Data-structures@@ -49,6 +49,7 @@ build-depends: base >=4.7 && <5+ ,bifunctors ghc-options: -Wall
src/Data/Barbie/Internal/Instances.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} module Data.Barbie.Internal.Instances ( Barbie(..) ) @@ -16,7 +17,12 @@ -- | A wrapper for Barbie-types, providing useful instances. newtype Barbie b (f :: * -> *) = Barbie { getBarbie :: b f }- deriving (FunctorB, ProductB, BareB, ConstraintsB, ProofB)+ deriving (FunctorB, ProductB, BareB, ProofB)++-- Need to derive it manually to make GHC 8.0.2 happy+instance ConstraintsB b => ConstraintsB (Barbie b) where+ type ConstraintsOf c f (Barbie b) = ConstraintsOf c f b+ adjProof = Barbie . adjProof . getBarbie instance TraversableB b => TraversableB (Barbie b) where btraverse f = fmap Barbie . btraverse f . getBarbie
test/Barbies.hs view
@@ -45,14 +45,15 @@ --------------------------------------------------- data Void (f :: * -> *)- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ConstraintsB, BareB- )+ deriving (Generic, Typeable) instance Eq (Void f) where (==) v = case v of instance Show (Void f) where showsPrec _ v = case v of +instance FunctorB Void+instance TraversableB Void+instance ConstraintsB Void+instance BareB Void ---------------------------------------------------- -- Product Barbies@@ -63,19 +64,29 @@ deriving ( Generic, Typeable , Eq, Show- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB, BareB ) +instance FunctorB Record0+instance TraversableB Record0+instance ProductB Record0+instance ConstraintsB Record0+instance ProofB Record0+instance BareB Record0+ instance Arbitrary (Record0 f) where arbitrary = pure Record0 data Record1 f = Record1 { rec1_f1 :: f Int }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- )+ deriving (Generic, Typeable) ++instance FunctorB Record1+instance TraversableB Record1+instance ProductB Record1+instance ConstraintsB Record1+instance ProofB Record1+ deriving instance ConstraintsOf Show f Record1 => Show (Record1 f) deriving instance ConstraintsOf Eq f Record1 => Eq (Record1 f) @@ -85,12 +96,17 @@ data Record1W f = Record1W { rec1w_f1 :: Wear f Int }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- , BareB- )+ deriving (Generic, Typeable) ++instance FunctorB Record1W+instance TraversableB Record1W+instance ProductB Record1W+instance ConstraintsB Record1W+instance ProofB Record1W+instance BareB Record1W++ deriving instance ConstraintsOf Show f Record1W => Show (Record1W f) deriving instance ConstraintsOf Eq f Record1W => Eq (Record1W f) @@ -105,11 +121,15 @@ , rec3_f2 :: f Bool , rec3_f3 :: f Char }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- )+ deriving (Generic, Typeable) ++instance FunctorB Record3+instance TraversableB Record3+instance ProductB Record3+instance ConstraintsB Record3+instance ProofB Record3+ deriving instance ConstraintsOf Show f Record3 => Show (Record3 f) deriving instance ConstraintsOf Eq f Record3 => Eq (Record3 f) @@ -123,12 +143,17 @@ , rec3w_f2 :: Wear f Bool , rec3w_f3 :: Wear f Char }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- , BareB- )+ deriving (Generic, Typeable) ++instance FunctorB Record3W+instance TraversableB Record3W+instance ProductB Record3W+instance ConstraintsB Record3W+instance ProofB Record3W++instance BareB Record3W+ deriving instance ConstraintsOf Show f Record3W => Show (Record3W f) deriving instance ConstraintsOf Eq f Record3W => Eq (Record3W f) @@ -142,12 +167,12 @@ data Ignore1 (f :: * -> *) = Ignore1 { ign1_f1 :: Int }- deriving- ( Generic, Typeable- , Eq, Show- , FunctorB, TraversableB, ConstraintsB- )+ deriving (Generic, Typeable, Eq, Show) +instance FunctorB Ignore1+instance TraversableB Ignore1+instance ConstraintsB Ignore1+ instance Arbitrary (Ignore1 f) where arbitrary = Ignore1 <$> arbitrary @@ -159,11 +184,12 @@ = Sum3_0 | Sum3_1 (f Int) | Sum3_2 (f Int) (f Bool)- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ConstraintsB- )+ deriving (Generic, Typeable) +instance FunctorB Sum3+instance TraversableB Sum3+instance ConstraintsB Sum3+ deriving instance ConstraintsOf Show f Sum3 => Show (Sum3 f) deriving instance ConstraintsOf Eq f Sum3 => Eq (Sum3 f) @@ -179,12 +205,13 @@ = Sum3W_0 | Sum3W_1 (Wear f Int) | Sum3W_2 (Wear f Int) (Wear f Bool)- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ConstraintsB- , BareB- )+ deriving (Generic, Typeable) +instance FunctorB Sum3W+instance TraversableB Sum3W+instance ConstraintsB Sum3W+instance BareB Sum3W+ deriving instance ConstraintsOf Show f Sum3W => Show (Sum3W f) deriving instance ConstraintsOf Eq f Sum3W => Eq (Sum3W f) @@ -208,11 +235,14 @@ , crec_f3 :: Record3 f , crec_f4 :: Record1 f }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- )+ deriving (Generic, Typeable) +instance FunctorB CompositeRecord+instance TraversableB CompositeRecord+instance ProductB CompositeRecord+instance ConstraintsB CompositeRecord+instance ProofB CompositeRecord+ deriving instance ConstraintsOf Show f CompositeRecord => Show (CompositeRecord f) deriving instance ConstraintsOf Eq f CompositeRecord => Eq (CompositeRecord f) @@ -227,12 +257,15 @@ , crecw_f3 :: Record3W f , crecw_f4 :: Record1W f }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- , BareB- )+ deriving (Generic, Typeable) +instance FunctorB CompositeRecordW+instance TraversableB CompositeRecordW+instance ProductB CompositeRecordW+instance ConstraintsB CompositeRecordW+instance ProofB CompositeRecordW+instance BareB CompositeRecordW+ deriving instance ConstraintsOf Show f CompositeRecordW => Show (CompositeRecordW f) deriving instance ConstraintsOf Eq f CompositeRecordW => Eq (CompositeRecordW f) @@ -245,11 +278,12 @@ = SumRec_0 | SumRec_1 (f Int) | SumRec_2 (f Int) (SumRec f)- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ConstraintsB- )+ deriving (Generic, Typeable) +instance FunctorB SumRec+instance TraversableB SumRec+instance ConstraintsB SumRec+ deriving instance ConstraintsOf Show f SumRec => Show (SumRec f) deriving instance ConstraintsOf Eq f SumRec => Eq (SumRec f) @@ -265,12 +299,13 @@ = SumRecW_0 | SumRecW_1 (Wear f Int) | SumRecW_2 (Wear f Int) (SumRecW f)- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ConstraintsB- , BareB- )+ deriving (Generic, Typeable) +instance FunctorB SumRecW+instance TraversableB SumRecW+instance ConstraintsB SumRecW+instance BareB SumRecW+ deriving instance ConstraintsOf Show f SumRecW => Show (SumRecW f) deriving instance ConstraintsOf Eq f SumRecW => Eq (SumRecW f) @@ -285,22 +320,29 @@ data InfRec f = InfRec { ir_1 :: f Int, ir_2 :: InfRec f }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- )+ deriving (Generic, Typeable) +instance FunctorB InfRec+instance TraversableB InfRec+instance ProductB InfRec+instance ConstraintsB InfRec+instance ProofB InfRec+ deriving instance ConstraintsOf Show f InfRec => Show (InfRec f) deriving instance ConstraintsOf Eq f InfRec => Eq (InfRec f) data InfRecW f = InfRecW { irw_1 :: Wear f Int, irw_2 :: InfRecW f }- deriving- ( Generic, Typeable- , FunctorB, TraversableB, ProductB, ConstraintsB, ProofB- , BareB- )+ deriving (Generic, Typeable) ++instance FunctorB InfRecW+instance TraversableB InfRecW+instance ProductB InfRecW+instance ConstraintsB InfRecW+instance ProofB InfRecW+instance BareB InfRecW+ deriving instance ConstraintsOf Show f InfRecW => Show (InfRecW f) deriving instance ConstraintsOf Eq f InfRecW => Eq (InfRecW f) @@ -316,11 +358,11 @@ , npf_3 :: Maybe (Sum3 f) , npf_4 :: Maybe (NestedF f) }- deriving- ( Generic, Typeable- , FunctorB, TraversableB- )+ deriving (Generic, Typeable) +instance FunctorB NestedF+instance TraversableB NestedF+ deriving instance (Show (f Int), Show (Record3 f), Show (Sum3 f)) => Show (NestedF f) deriving instance (Eq (f Int), Eq (Record3 f), Eq (Sum3 f)) => Eq (NestedF f) @@ -335,12 +377,14 @@ , npfw_3 :: Maybe (Sum3W f) , npfw_4 :: Maybe (NestedFW f) }- deriving- ( Generic, Typeable- , FunctorB, TraversableB- , BareB- -- , ConstraintsB- )+ deriving (Generic, Typeable)++++instance FunctorB NestedFW+instance TraversableB NestedFW+instance BareB NestedFW+-- instance ConstraintsB NetedFW deriving instance (Wear f Int ~ f Int, Show (f Int), Show (Record3W f), Show (Sum3W f)) => Show (NestedFW f) deriving instance (Wear f Int ~ f Int, Eq (f Int), Eq (Record3W f), Eq (Sum3W f)) => Eq (NestedFW f)