packages feed

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 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 (..))