constraint-classes 0.3.0 → 0.4.0
raw patch · 2 files changed
+119/−38 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.ConstraintClasses: type CFol f a = ();
- Control.ConstraintClasses: type CFun f a = ();
+ Control.ConstraintClasses: (!) :: (CIndexed f i, Con f a) => f a -> i -> a
+ Control.ConstraintClasses: _concatMap :: (CMonad f, Con f a, Con f b) => (a -> f b) -> f a -> f b
+ Control.ConstraintClasses: _liftA2 :: (CApplicative f, Con f a, Con f b, Con f c) => (a -> b -> c) -> f a -> f b -> f c
+ Control.ConstraintClasses: _liftA3 :: (CApplicative f, Con f a, Con f b, Con f c, Con f d) => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
+ Control.ConstraintClasses: _liftA4 :: (CApplicative f, Con f a, Con f b, Con f c, Con f d, Con f e) => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
+ Control.ConstraintClasses: _pure :: (CApplicative f, Con f a) => a -> f a
+ Control.ConstraintClasses: _traverse :: (CTraversable t, Con t a, Con t b, Monad f) => (a -> f b) -> t a -> f (t b)
+ Control.ConstraintClasses: _zipWith :: (CZippable f, Con f a, Con f b, Con f c) => (a -> b -> c) -> f a -> f b -> f c
+ Control.ConstraintClasses: _zipWith3 :: (CZippable f, Con f a, Con f b, Con f c, Con f d) => (a -> b -> c -> d) -> f a -> f b -> f c -> f d
+ Control.ConstraintClasses: _zipWith4 :: (CZippable f, Con f a, Con f b, Con f c, Con f d, Con f e) => (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e
+ Control.ConstraintClasses: class CFunctor f => CApplicative f
+ Control.ConstraintClasses: class CFunctor f => CIndexed f i | f -> i
+ Control.ConstraintClasses: class CApplicative f => CMonad f
+ Control.ConstraintClasses: class (CFunctor t, CFoldable t) => CTraversable t
+ Control.ConstraintClasses: class CFunctor f => CZippable f
+ Control.ConstraintClasses: type Con f a = ();
- Control.ConstraintClasses: _fmap :: (CFunctor f, CFun f a, CFun f b) => (a -> b) -> f a -> f b
+ Control.ConstraintClasses: _fmap :: (CFunctor f, Con f a, Con f b) => (a -> b) -> f a -> f b
- Control.ConstraintClasses: _fold :: (CFoldable f, CFol f m, Monoid m) => f m -> m
+ Control.ConstraintClasses: _fold :: (CFoldable f, Con f m, Monoid m) => f m -> m
- Control.ConstraintClasses: _foldMap :: (CFoldable f, CFol f a, CFol f m, Monoid m) => (a -> m) -> f a -> m
+ Control.ConstraintClasses: _foldMap :: (CFoldable f, Con f a, Con f m, Monoid m) => (a -> m) -> f a -> m
- Control.ConstraintClasses: _foldl :: (CFoldable f, CFol f b) => (a -> b -> a) -> a -> f b -> a
+ Control.ConstraintClasses: _foldl :: (CFoldable f, Con f b) => (a -> b -> a) -> a -> f b -> a
- Control.ConstraintClasses: _foldl' :: (CFoldable f, CFol f b) => (a -> b -> a) -> a -> f b -> a
+ Control.ConstraintClasses: _foldl' :: (CFoldable f, Con f b) => (a -> b -> a) -> a -> f b -> a
- Control.ConstraintClasses: _foldr :: (CFoldable f, CFol f a) => (a -> b -> b) -> b -> f a -> b
+ Control.ConstraintClasses: _foldr :: (CFoldable f, Con f a) => (a -> b -> b) -> b -> f a -> b
- Control.ConstraintClasses: _foldr' :: (CFoldable f, CFol f a) => (a -> b -> b) -> b -> f a -> b
+ Control.ConstraintClasses: _foldr' :: (CFoldable f, Con f a) => (a -> b -> b) -> b -> f a -> b
- Control.ConstraintClasses: _forM :: (CFoldable f, Monad m, CFol f a, CFol f b) => f a -> (a -> m b) -> m (f b)
+ Control.ConstraintClasses: _forM :: (CFoldable f, Monad m, Con f a, Con f b) => f a -> (a -> m b) -> m (f b)
- Control.ConstraintClasses: _forM_ :: (CFoldable f, Monad m, CFol f a) => f a -> (a -> m b) -> m ()
+ Control.ConstraintClasses: _forM_ :: (CFoldable f, Monad m, Con f a) => f a -> (a -> m b) -> m ()
- Control.ConstraintClasses: _length :: (CFoldable f, CFol f a) => f a -> Int
+ Control.ConstraintClasses: _length :: (CFoldable f, Con f a) => f a -> Int
- Control.ConstraintClasses: _mapM :: (CFoldable f, Monad m, CFol f a, CFol f b) => (a -> m b) -> f a -> m (f b)
+ Control.ConstraintClasses: _mapM :: (CFoldable f, Monad m, Con f a, Con f b) => (a -> m b) -> f a -> m (f b)
- Control.ConstraintClasses: _mapM_ :: (CFoldable f, Monad m, CFol f a) => (a -> m b) -> f a -> m ()
+ Control.ConstraintClasses: _mapM_ :: (CFoldable f, Monad m, Con f a) => (a -> m b) -> f a -> m ()
- Control.ConstraintClasses: class CFoldable f where type CFol f a :: Constraint type CFol f a = () _fold = _foldMap id _foldMap f = _foldr (mappend . f) mempty _length = _foldl (\ c _ -> c + 1) 0 _forM = flip _mapM _forM_ = flip _mapM_ where {
+ Control.ConstraintClasses: class CFoldable f where _fold = _foldMap id _foldMap f = _foldr (mappend . f) mempty _length = _foldl (\ c _ -> c + 1) 0 _forM = flip _mapM _forM_ = flip _mapM_
- Control.ConstraintClasses: class CFunctor f where type CFun f a :: Constraint type CFun f a = () where {
+ Control.ConstraintClasses: class CFunctor f where type Con f a :: Constraint type Con f a = () where {
- Control.ConstraintClasses: type family CFol f a :: Constraint;
+ Control.ConstraintClasses: type family Con f a :: Constraint;
Files
- constraint-classes.cabal +36/−18
- src/Control/ConstraintClasses.hs +83/−20
constraint-classes.cabal view
@@ -1,22 +1,40 @@-name: constraint-classes-version: 0.3.0-synopsis: Prelude classes using ConstraintKinds-description: Please see README.org-homepage: http://github.com/guaraqe/constraint-classes#readme-license: BSD3-license-file: LICENSE-author: guaraqe-maintainer: guaraqe@openmailbox.org-copyright: 2016 guaraqe-build-type: Simple-cabal-version: >=1.10+name:+ constraint-classes+version:+ 0.4.0+synopsis:+ Prelude classes using ConstraintKinds+description:+ Please see README.md+homepage:+ http://github.com/guaraqe/constraint-classes#readme+license:+ BSD3+license-file:+ LICENSE+author:+ guaraqe+maintainer:+ guaraqe@openmailbox.org+copyright:+ 2016 guaraqe+build-type:+ Simple+cabal-version:+ >=1.10 library- hs-source-dirs: src- exposed-modules: Control.ConstraintClasses- build-depends: base >= 4.7 && < 5- default-language: Haskell2010+ hs-source-dirs:+ src+ exposed-modules:+ Control.ConstraintClasses+ build-depends:+ base >= 4.7 && < 5+ default-language:+ Haskell2010 source-repository head- type: git- location: https://github.com/guaraqe/constraint-classes+ type:+ git+ location:+ https://github.com/guaraqe/constraint-classes
src/Control/ConstraintClasses.hs view
@@ -1,51 +1,114 @@ {-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-} module Control.ConstraintClasses- ( CFunctor (..)- , CFoldable (..) ) where+ ( CFunctor (..)+ , CApplicative (..)+ , CMonad (..)+ , CFoldable (..)+ , CTraversable (..)+ , CZippable (..)+ , CIndexed (..)+ ) where import GHC.Exts (Constraint) ---------------------------------------------------------------------- class CFunctor f where- type CFun f a :: Constraint- type CFun f a = ()+ type Con f a :: Constraint+ type Con f a = () - _fmap :: (CFun f a, CFun f b) => (a -> b) -> f a -> f b+ _fmap :: (Con f a, Con f b) => (a -> b) -> f a -> f b ---------------------------------------------------------------------- -class CFoldable f where+class CFunctor f => CApplicative f where - type CFol f a :: Constraint- type CFol f a = ()+ _pure :: (Con f a) => a -> f a - _foldr :: (CFol f a) => (a -> b -> b) -> b -> f a -> b- _foldr' :: (CFol f a) => (a -> b -> b) -> b -> f a -> b- _foldl :: (CFol f b) => (a -> b -> a) -> a -> f b -> a- _foldl' :: (CFol f b) => (a -> b -> a) -> a -> f b -> a+ _liftA2 ::+ (Con f a, Con f b, Con f c) =>+ (a -> b -> c) -> f a -> f b -> f c - _fold :: (CFol f m, Monoid m) => f m -> m+ _liftA3 ::+ (Con f a, Con f b, Con f c, Con f d) =>+ (a -> b -> c -> d) -> f a -> f b -> f c -> f d++ _liftA4 ::+ (Con f a, Con f b, Con f c, Con f d, Con f e) =>+ (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e++----------------------------------------------------------------------++class CApplicative f => CMonad f where++ _concatMap ::+ (Con f a, Con f b) =>+ (a -> f b) -> f a -> f b++----------------------------------------------------------------------++class CFoldable f where+ {-# MINIMAL _foldMap | _foldr #-}++ _foldr :: (Con f a) => (a -> b -> b) -> b -> f a -> b+ _foldr' :: (Con f a) => (a -> b -> b) -> b -> f a -> b+ _foldl :: (Con f b) => (a -> b -> a) -> a -> f b -> a+ _foldl' :: (Con f b) => (a -> b -> a) -> a -> f b -> a++ _fold :: (Con f m, Monoid m) => f m -> m _fold = _foldMap id - _foldMap :: (CFol f a, CFol f m, Monoid m) => (a -> m) -> f a -> m+ _foldMap :: (Con f a, Con f m, Monoid m) => (a -> m) -> f a -> m _foldMap f = _foldr (mappend . f) mempty+ {-# INLINE _foldMap #-} - _length :: CFol f a => f a -> Int+ _length :: Con f a => f a -> Int _length = _foldl (\c _ -> c+1) 0 - _mapM :: (Monad m, CFol f a, CFol f b)+ _mapM :: (Monad m, Con f a, Con f b) => (a -> m b) -> f a -> m (f b) - _forM :: (Monad m, CFol f a, CFol f b)+ _forM :: (Monad m, Con f a, Con f b) => f a -> (a -> m b) -> m (f b) _forM = flip _mapM - _mapM_ :: (Monad m, CFol f a)+ _mapM_ :: (Monad m, Con f a) => (a -> m b) -> f a -> m () - _forM_ :: (Monad m, CFol f a)+ _forM_ :: (Monad m, Con f a) => f a -> (a -> m b) -> m () _forM_ = flip _mapM_++----------------------------------------------------------------------++class (CFunctor t, CFoldable t) => CTraversable t where++ _traverse ::+ (Con t a, Con t b, Monad f) =>+ (a -> f b) -> t a -> f (t b)++----------------------------------------------------------------------++class CFunctor f => CZippable f where++ _zipWith ::+ (Con f a, Con f b, Con f c) =>+ (a -> b -> c) -> f a -> f b -> f c++ _zipWith3 ::+ (Con f a, Con f b, Con f c, Con f d) =>+ (a -> b -> c -> d) -> f a -> f b -> f c -> f d++ _zipWith4 ::+ (Con f a, Con f b, Con f c, Con f d, Con f e) =>+ (a -> b -> c -> d -> e) -> f a -> f b -> f c -> f d -> f e++----------------------------------------------------------------------++class CFunctor f => CIndexed f i | f -> i where++ (!) :: (Con f a) => f a -> i -> a