barbies 0.1.3.1 → 0.1.4.0
raw patch · 6 files changed
+98/−20 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.Barbie: Unit :: Unit
+ Data.Barbie: btraverse_ :: (TraversableB b, Applicative t) => (forall a. f a -> t c) -> b f -> t ()
+ Data.Barbie: data Unit (f :: * -> *)
+ Data.Barbie: data Void (f :: * -> *)
+ Data.Barbie.Internal.Traversable: btraverse_ :: (TraversableB b, Applicative t) => (forall a. f a -> t c) -> b f -> t ()
Files
- ChangeLog.md +4/−0
- barbies.cabal +2/−1
- src/Data/Barbie.hs +9/−3
- src/Data/Barbie/Internal/Traversable.hs +10/−0
- src/Data/Barbie/Trivial.hs +73/−0
- test/Barbies.hs +0/−16
ChangeLog.md view
@@ -1,5 +1,9 @@ # Changelog for barbies +## 0.1.4.0+ - Add btraverse_+ - Add the trivial Void and Unit barbies+ ## 0.1.3.1 - Fix issue on Barbie-types with strictness annotations.
barbies.cabal view
@@ -1,5 +1,5 @@ name: barbies-version: 0.1.3.1+version: 0.1.4.0 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@@ -43,6 +43,7 @@ Data.Barbie.Internal.Instances Data.Barbie.Internal.Tags Data.Barbie.Internal.Wear+ Data.Barbie.Trivial hs-source-dirs: src
src/Data/Barbie.hs view
@@ -33,8 +33,8 @@ -- , 'FunctorB', 'TraversableB', 'ProductB', 'ConstraintsB', 'ProofB' -- ) ----- deriving instance 'ConstraintsOf' 'Show' f Barbie => 'Show' Barbie--- deriving instance 'ConstraintsOf' 'Eq' f Barbie => 'Eq' Barbie+-- deriving instance 'ConstraintsOf' 'Show' f Barbie => 'Show' (Barbie f)+-- deriving instance 'ConstraintsOf' 'Eq' f Barbie => 'Eq' (Barbie f) -- @ -- -- Sometimes one wants to use @Barbie 'Data.Functor.Identity.Identity'@@@ -72,6 +72,7 @@ -- * Traversable , TraversableB(btraverse)+ , btraverse_ , bsequence -- * Product@@ -92,6 +93,10 @@ -- * Wrapper , Barbie(..)++ -- * Trivial Barbies+ , Void+ , Unit (..) ) where@@ -106,4 +111,5 @@ , bzip, bunzip, bzipWith, bzipWith3, bzipWith4 , (/*/), (/*) )-import Data.Barbie.Internal.Traversable(TraversableB(..), bsequence)+import Data.Barbie.Internal.Traversable(TraversableB(..), bsequence, btraverse_)+import Data.Barbie.Trivial(Void, Unit(..))
src/Data/Barbie/Internal/Traversable.hs view
@@ -13,6 +13,7 @@ {-# LANGUAGE TypeOperators #-} module Data.Barbie.Internal.Traversable ( TraversableB(..)+ , btraverse_ , bsequence , CanDeriveGenericInstance@@ -25,7 +26,9 @@ import Data.Barbie.Internal.Functor (FunctorB(..)) import Data.Barbie.Internal.Generics import Data.Barbie.Internal.Tags (F,G)+import Data.Functor (void) import Data.Functor.Compose (Compose(..))+import Data.Functor.Const (Const(..)) import GHC.Generics @@ -48,6 +51,13 @@ => (forall a . f a -> t (g a)) -> b f -> t (b g) btraverse = gbtraverseDefault +++-- | Map each element to an action, evaluate these actions from left to right,+-- and ignore the results.+btraverse_ :: (TraversableB b, Applicative t) => (forall a. f a -> t c) -> b f -> t ()+btraverse_ f+ = void . btraverse (fmap (const $ Const ()) . f) -- | Evaluate each action in the structure from left to right,
+ src/Data/Barbie/Trivial.hs view
@@ -0,0 +1,73 @@+{-# LANGUAGE EmptyCase #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE StandaloneDeriving #-}+module Data.Barbie.Trivial+ ( Void+ , Unit (..)+ )++where++import Data.Barbie.Internal.Bare(BareB(..))+import Data.Barbie.Internal.Constraints(ConstraintsB(..))+import Data.Barbie.Internal.Functor(FunctorB(..))+import Data.Barbie.Internal.ProofB(ProofB(..))+import Data.Barbie.Internal.Product(ProductB(..))+import Data.Barbie.Internal.Traversable(TraversableB(..))++import Data.Data (Data(..))+import Data.Semigroup (Semigroup(..))+import Data.Typeable (Typeable)+import GHC.Generics (Generic)+++---------------------------------------------------+-- Trivial Barbies+---------------------------------------------------++-- | Uninhabited barbie type.+data Void (f :: * -> *)+ deriving (Generic, Typeable)++instance Eq (Void f) where+ (==) v = case v of++instance Ord (Void f) where+ compare v = case v of++instance Show (Void f) where+ showsPrec _ v = case v of++instance Semigroup (Void f) where+ (<>) v = case v of+++instance FunctorB Void+instance TraversableB Void+instance ConstraintsB Void+instance BareB Void+++-- | A barbie type without structure.+data Unit (f :: * -> *)+ = Unit+ deriving+ ( Data, Generic, Typeable+ , Eq, Ord, Read, Show+ )++instance Semigroup (Unit f) where+ Unit <> Unit = Unit++instance Monoid (Unit f) where+ mempty = Unit+ mappend = (<>)++instance FunctorB Unit+instance TraversableB Unit+instance ProductB Unit+instance ConstraintsB Unit+instance ProofB Unit+instance BareB Unit
test/Barbies.hs view
@@ -1,7 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE EmptyCase #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-}@@ -45,21 +44,6 @@ import Data.Typeable import GHC.Generics import Test.Tasty.QuickCheck-------------------------------------------------------- Trivial Barbies------------------------------------------------------data Void (f :: * -> *)- 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