category 0.2.4.2 → 0.2.5.0
raw patch · 5 files changed
+104/−62 lines, 5 filesdep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base
API changes (from Hackage documentation)
- Data.Functor.Trans.Identity: instance Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (->)) (Control.Categorical.Functor.NT (->)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Comonad (->) f => Control.Categorical.Monad.Comonad (->) (Data.Functor.Trans.Identity.IdentityT f)
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (->)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Monad (->) f => Control.Categorical.Monad.Monad (->) (Data.Functor.Trans.Identity.IdentityT f)
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (->)) Data.Functor.Trans.Identity.IdentityT
- Data.Functor.Trans.Identity: instance forall k (s :: k -> k -> *) (f :: k -> *). Control.Categorical.Functor.Functor s (->) f => Control.Categorical.Functor.Functor s (->) (Data.Functor.Trans.Identity.IdentityT f)
- Data.Functor.Trans.Identity: instance forall k (s :: k -> k -> *) (m :: * -> *) (f :: k -> *). (Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Kleisli (->) m) f, Control.Categorical.Functor.Endofunctor (->) m) => Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Kleisli (->) m) (Data.Functor.Trans.Identity.IdentityT f)
- Data.Functor.Trans.Identity: instance forall k (s :: k -> k -> *) (ɯ :: * -> *) (f :: k -> *). (Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Cokleisli (->) ɯ) f, Control.Categorical.Functor.Endofunctor (->) ɯ) => Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Cokleisli (->) ɯ) (Data.Functor.Trans.Identity.IdentityT f)
- Data.Functor.Trans.Identity: newtype IdentityT f a
+ Control.Categorical.Functor: instance Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (->)) (Control.Categorical.Functor.NT (->)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Functor: instance forall k (s :: k -> k -> *) (f :: k -> *). Control.Categorical.Functor.Functor s (->) f => Control.Categorical.Functor.Functor s (->) (Control.Monad.Trans.Identity.IdentityT f)
+ Control.Categorical.Functor: instance forall k1 k2 k3 k4 (s :: k4 -> k4 -> *) (t :: k3 -> k3 -> *) (f :: (k1 -> k4) -> k2 -> k3). (Control.Category.Category s, Control.Category.Category t, Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT s) (Control.Categorical.Functor.NT t) f) => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Category.Dual.Dual s)) (Control.Categorical.Functor.NT (Control.Category.Dual.Dual t)) f
+ Control.Categorical.Monad: instance (Data.Traversable.Traversable f, Control.Categorical.Monad.Monad (->) m) => Control.Categorical.Functor.Functor (Control.Categorical.Monad.Kleisli (->) m) (Control.Categorical.Monad.Kleisli (->) m) f
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Comonad (->) f => Control.Categorical.Monad.Comonad (->) (Control.Monad.Trans.Identity.IdentityT f)
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Comonad (->) ɯ => Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Cokleisli (->) ɯ)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (->)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) f => Control.Categorical.Monad.Monad (->) (Control.Monad.Trans.Identity.IdentityT f)
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Functor.Functor (Control.Categorical.Monad.Kleisli (->) m) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) (,)
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Functor.Functor (Control.Categorical.Monad.Kleisli (->) m) (Control.Categorical.Monad.Kleisli (->) m) ((,) a)
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (->)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance Control.Categorical.Monad.Monad (Control.Category.Dual.Dual (->)) m => Control.Categorical.Functor.Functor (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (Control.Category.Dual.Dual (->)) m)) (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (Control.Category.Dual.Dual (->)) m)) Control.Monad.Trans.Identity.IdentityT
+ Control.Categorical.Monad: instance GHC.Base.Applicative (Control.Categorical.Monad.BaseMonad m)
+ Control.Categorical.Monad: instance GHC.Base.Functor (Control.Categorical.Monad.BaseMonad f)
+ Control.Categorical.Monad: instance GHC.Base.Monad (Control.Categorical.Monad.BaseMonad m)
+ Control.Categorical.Monad: instance forall k (s :: k -> k -> *) (m :: * -> *) (f :: k -> *). (Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Kleisli (->) m) f, Control.Categorical.Functor.Endofunctor (->) m) => Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Kleisli (->) m) (Control.Monad.Trans.Identity.IdentityT f)
+ Control.Categorical.Monad: instance forall k (s :: k -> k -> *) (ɯ :: * -> *) (f :: k -> *). (Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Cokleisli (->) ɯ) f, Control.Categorical.Functor.Endofunctor (->) ɯ) => Control.Categorical.Functor.Functor s (Control.Categorical.Monad.Cokleisli (->) ɯ) (Control.Monad.Trans.Identity.IdentityT f)
+ Control.Categorical.Monad: instance forall k1 k2 (s :: k2 -> k2 -> *) (f :: (k1 -> k2) -> k1 -> k2). (Control.Category.Category s, Control.Categorical.Monad.Comonad (Control.Categorical.Functor.NT s) f) => Control.Categorical.Monad.Monad (Control.Categorical.Functor.NT (Control.Category.Dual.Dual s)) f
+ Control.Categorical.Monad: instance forall β (s :: β -> β -> *) (f :: β -> β). Control.Categorical.Monad.Comonad s f => Control.Categorical.Monad.Monad (Control.Category.Dual.Dual s) f
+ Control.Category.Const2: [getConst2] :: Const2 a b c -> a
+ Control.Category.Const2: instance Control.Categorical.Functor.Functor (->) (Control.Categorical.Functor.NT (Control.Categorical.Functor.NT (->))) Control.Category.Const2.Const2
+ Control.Category.Const2: instance Control.Categorical.Monad.Monad (->) m => Control.Categorical.Functor.Functor (Control.Categorical.Monad.Kleisli (->) m) (Control.Categorical.Functor.NT (Control.Categorical.Functor.NT (Control.Categorical.Monad.Kleisli (->) m))) Control.Category.Const2.Const2
+ Control.Category.Const2: instance forall a k1 (b :: k1) k2 (c :: k2). (Relation.Binary.Comparison.Preord a, Relation.Binary.Comparison.PartialEq a) => Relation.Binary.Comparison.Eq (Control.Category.Const2.Const2 a b c)
+ Control.Category.Const2: instance forall a k1 (b :: k1) k2 (c :: k2). Relation.Binary.Comparison.Ord a => Relation.Binary.Comparison.Ord (Control.Category.Const2.Const2 a b c)
+ Control.Category.Const2: instance forall a k1 (b :: k1) k2 (c :: k2). Relation.Binary.Comparison.PartialEq a => Relation.Binary.Comparison.PartialEq (Control.Category.Const2.Const2 a b c)
+ Control.Category.Const2: instance forall a k1 (b :: k1) k2 (c :: k2). Relation.Binary.Comparison.PartialOrd a => Relation.Binary.Comparison.PartialOrd (Control.Category.Const2.Const2 a b c)
+ Control.Category.Const2: instance forall a k1 (b :: k1) k2 (c :: k2). Relation.Binary.Comparison.Preord a => Relation.Binary.Comparison.Preord (Control.Category.Const2.Const2 a b c)
+ Data.Functor.Trans.Identity: newtype IdentityT (f :: k -> Type) (a :: k) :: forall k. () => k -> Type -> k -> Type
- Data.Functor.Trans.Identity: IdentityT :: f a -> IdentityT f a
+ Data.Functor.Trans.Identity: IdentityT :: f a -> IdentityT
- Data.Functor.Trans.Identity: [runIdentityT] :: IdentityT f a -> f a
+ Data.Functor.Trans.Identity: [runIdentityT] :: IdentityT -> f a
Files
- category.cabal +4/−3
- src/Control/Categorical/Functor.hs +10/−0
- src/Control/Categorical/Monad.hs +77/−1
- src/Control/Category/Const2.hs +11/−2
- src/Data/Functor/Trans/Identity.hs +2/−56
category.cabal view
@@ -1,5 +1,5 @@ name: category-version: 0.2.4.2+version: 0.2.5.0 synopsis: Categorical types and classes -- description: license: BSD3@@ -41,9 +41,10 @@ , MultiParamTypeClasses , FlexibleContexts , FlexibleInstances- , DerivingStrategies , StandaloneDeriving- , GeneralizedNewtypeDeriving+ , DerivingStrategies+ , DerivingVia+ , Safe ghc-options: -Wall -Wcompat -Wredundant-constraints -Wno-name-shadowing -Wincomplete-record-updates -Wincomplete-uni-patterns -Werror=incomplete-patterns
src/Control/Categorical/Functor.hs view
@@ -4,6 +4,7 @@ import Control.Category.Dual import Control.Category.Groupoid+import Control.Monad.Trans.Identity (IdentityT (..)) import qualified Data.Functor as Base import Data.Functor.Compose import Data.Functor.Identity@@ -107,3 +108,12 @@ instance (Category s, Category t, Functor s (NT (Dual t)) f) => Functor s (Dual (NT t)) f where map f = Dual (NT (dual (nt (map f))))++instance Functor (NT (->)) (NT (->)) IdentityT where+ map f = NT (\ (IdentityT x) -> IdentityT (nt f x))++instance Functor s (->) f => Functor s (->) (IdentityT f) where+ map f = IdentityT . map f . runIdentityT++instance (Category s, Category t, Functor (NT s) (NT t) f) => Functor (NT (Dual s)) (NT (Dual t)) f where+ map f = NT (Dual (nt (map (NT (dual (nt f))))))
src/Control/Categorical/Monad.hs view
@@ -1,11 +1,16 @@-module Control.Categorical.Monad where+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ExistentialQuantification #-}+module Control.Categorical.Monad (Monad (..), (<=<), (>=>), Kleisli (..), Comonad (..), (=<=), (=>=), Cokleisli (..)) where +import qualified Control.Applicative as Base import qualified Control.Monad as Base+import Control.Monad.Trans.Identity (IdentityT (..)) import Data.Function (($), flip) import Data.Functor.Identity import Data.List.NonEmpty (NonEmpty (..)) import qualified Data.List.NonEmpty as NE import Data.Semigroup (Arg (..))+import qualified Data.Traversable as Base import Control.Categorical.Functor import Control.Category.Dual@@ -38,6 +43,14 @@ join = Base.join bind = (Base.=<<) +instance Comonad s f => Monad (Dual s) f where+ unit = Dual counit+ join = Dual cut++instance (Category s, Comonad (NT s) f) => Monad (NT (Dual s)) f where+ unit = NT (Dual (nt counit))+ join = NT (Dual (nt cut))+ class Endofunctor s ɯ => Comonad s ɯ where counit :: ɯ a `s` a @@ -98,3 +111,66 @@ instance Comonad s ɯ => Functor (Cokleisli s ɯ) s ɯ where map = cobind . cokleisli++instance {-# OVERLAPPABLE #-} (Base.Traversable f, Monad (->) m) => Functor (Kleisli (->) m) (Kleisli (->) m) f where+ map (Kleisli f) = Kleisli (unBaseMonad . Base.traverse (BaseMonad . f))++data BaseMonad m a = Monad (->) m => BaseMonad { unBaseMonad :: m a }+instance Base.Functor (BaseMonad f) where fmap = map+instance Base.Applicative (BaseMonad m) where pure = unit; (<*>) = Base.ap+instance Base.Monad (BaseMonad m) where (>>=) = flip bind++instance Monad (->) m => Functor (NT (Kleisli (->) m)) (NT (Kleisli (->) m)) IdentityT where+ map f = NT (Kleisli (map IdentityT . kleisli (nt f) . runIdentityT))++instance Monad (Dual (->)) m => Functor (NT (Kleisli (Dual (->)) m)) (NT (Kleisli (Dual (->)) m)) IdentityT where+ map f = NT (Kleisli (Dual (IdentityT . dual (kleisli (nt f)) . dual (map (Dual runIdentityT)))))++instance Comonad (->) ɯ => Functor (NT (Cokleisli (->) ɯ)) (NT (Cokleisli (->) ɯ)) IdentityT where+ map f = NT (Cokleisli (IdentityT . cokleisli (nt f) . map runIdentityT))++instance Monad (NT (->)) IdentityT where+ unit = NT IdentityT+ join = NT runIdentityT++instance Comonad (NT (->)) IdentityT where+ counit = NT runIdentityT+ cut = NT IdentityT++instance Monad (->) m => Monad (NT (Kleisli (->) m)) IdentityT where+ unit = NT (Kleisli (unit . IdentityT))+ join = NT (Kleisli (unit . runIdentityT))++instance Comonad (->) ɯ => Monad (NT (Cokleisli (->) ɯ)) IdentityT where+ unit = NT (Cokleisli (IdentityT . counit))+ join = NT (Cokleisli (runIdentityT . counit))++instance Comonad (->) ɯ => Comonad (NT (Cokleisli (->) ɯ)) IdentityT where+ counit = NT (Cokleisli (runIdentityT . counit))+ cut = NT (Cokleisli (IdentityT . counit))++instance Monad (->) m => Comonad (NT (Kleisli (->) m)) IdentityT where+ counit = NT (Kleisli (unit . runIdentityT))+ cut = NT (Kleisli (unit . IdentityT))++instance Monad (->) f => Monad (->) (IdentityT f) where+ unit = IdentityT . unit+ join = IdentityT . bind runIdentityT . runIdentityT++instance Comonad (->) f => Comonad (->) (IdentityT f) where+ counit = counit . runIdentityT+ cut = runIdentityT . cobind runIdentityT . IdentityT++instance (Functor s (Kleisli (->) m) f, Endofunctor (->) m) =>+ Functor s (Kleisli (->) m) (IdentityT f) where+ map f = Kleisli (map IdentityT . kleisli (map f) . runIdentityT)++instance (Functor s (Cokleisli (->) ɯ) f, Endofunctor (->) ɯ) =>+ Functor s (Cokleisli (->) ɯ) (IdentityT f) where+ map f = Cokleisli (IdentityT . cokleisli (map f) . map runIdentityT)++instance (Monad (->) m) => Functor (Kleisli (->) m) (Kleisli (->) m) ((,) a) where+ map (Kleisli f) = Kleisli (\ (a, b) -> (,) a <$> f b)++instance (Monad (->) m) => Functor (Kleisli (->) m) (NT (Kleisli (->) m)) (,) where+ map (Kleisli f) = NT (Kleisli (\ (a, b) -> (\ a -> (a, b)) <$> f a))
src/Control/Category/Const2.hs view
@@ -1,11 +1,20 @@ module Control.Category.Const2 where import Algebra as A+import Control.Categorical.Functor+import Control.Categorical.Monad import Control.Category.Groupoid+import Relation.Binary.Comparison -- | Notes: 'Const2' '()' is the indiscrete category.-newtype Const2 a b c = Const2 a- deriving (Semigroup, Monoid, Group)+newtype Const2 a b c = Const2 { getConst2 :: a }+ deriving (Semigroup, Monoid, Group, PartialEq, Preord, Eq, PartialOrd, Ord) via a++instance Functor (->) (NT (NT (->))) Const2 where+ map f = NT (NT (\ (Const2 a) -> Const2 (f a)))++instance Monad (->) m => Functor (Kleisli (->) m) (NT (NT (Kleisli (->) m))) Const2 where+ map (Kleisli f) = NT (NT (Kleisli (\ (Const2 a) -> Const2 <$> f a))) instance (Semigroup a, Monoid a) => Category (Const2 a) where id = Const2 mempty
src/Data/Functor/Trans/Identity.hs view
@@ -1,57 +1,3 @@-module Data.Functor.Trans.Identity where--import Control.Categorical.Functor-import Control.Categorical.Monad--newtype IdentityT f a = IdentityT { runIdentityT :: f a }--instance Functor (NT (->)) (NT (->)) IdentityT where- map f = NT (\ (IdentityT x) -> IdentityT (nt f x))--instance Monad (->) m => Functor (NT (Kleisli (->) m)) (NT (Kleisli (->) m)) IdentityT where- map f = NT (Kleisli (map IdentityT . kleisli (nt f) . runIdentityT))--instance Comonad (->) ɯ => Functor (NT (Cokleisli (->) ɯ)) (NT (Cokleisli (->) ɯ)) IdentityT where- map f = NT (Cokleisli (IdentityT . cokleisli (nt f) . map runIdentityT))--instance Monad (NT (->)) IdentityT where- unit = NT IdentityT- join = NT runIdentityT--instance Comonad (NT (->)) IdentityT where- counit = NT runIdentityT- cut = NT IdentityT--instance Monad (->) m => Monad (NT (Kleisli (->) m)) IdentityT where- unit = NT (Kleisli (unit . IdentityT))- join = NT (Kleisli (unit . runIdentityT))--instance Comonad (->) ɯ => Monad (NT (Cokleisli (->) ɯ)) IdentityT where- unit = NT (Cokleisli (IdentityT . counit))- join = NT (Cokleisli (runIdentityT . counit))--instance Comonad (->) ɯ => Comonad (NT (Cokleisli (->) ɯ)) IdentityT where- counit = NT (Cokleisli (runIdentityT . counit))- cut = NT (Cokleisli (IdentityT . counit))--instance Monad (->) m => Comonad (NT (Kleisli (->) m)) IdentityT where- counit = NT (Kleisli (unit . runIdentityT))- cut = NT (Kleisli (unit . IdentityT))--deriving instance Functor s (->) f => Functor s (->) (IdentityT f)--instance Monad (->) f => Monad (->) (IdentityT f) where- unit = IdentityT . unit- join = IdentityT . bind runIdentityT . runIdentityT--instance Comonad (->) f => Comonad (->) (IdentityT f) where- counit = counit . runIdentityT- cut = runIdentityT . cobind runIdentityT . IdentityT--instance (Functor s (Kleisli (->) m) f, Endofunctor (->) m) =>- Functor s (Kleisli (->) m) (IdentityT f) where- map f = Kleisli (map IdentityT . kleisli (map f) . runIdentityT)+module Data.Functor.Trans.Identity (IdentityT (..)) where -instance (Functor s (Cokleisli (->) ɯ) f, Endofunctor (->) ɯ) =>- Functor s (Cokleisli (->) ɯ) (IdentityT f) where- map f = Cokleisli (IdentityT . cokleisli (map f) . map runIdentityT)+import Control.Monad.Trans.Identity (IdentityT (..))