packages feed

ix 0.1.0.0 → 0.1.1.0

raw patch · 3 files changed

+67/−4 lines, 3 filesdep +categorydep +transformers

Dependencies added: category, transformers

Files

ix.cabal view
@@ -1,5 +1,5 @@ name:                ix-version:             0.1.0.0+version:             0.1.1.0 synopsis:            Indexed monads -- description: license:             BSD3@@ -10,13 +10,16 @@ -- category:             build-type:          Simple extra-source-files:  README.md-cabal-version:       >=1.10+cabal-version:       >=2.0  library-  hs-source-dirs:      .-  exposed-modules:     +  hs-source-dirs:      src+  exposed-modules:     Control.Categorical.Monad.Indexed+  other-modules:       Prelude   build-depends:       base >= 4.7 && < 5                      , base-unicode-symbols+                     , category ^>= 0.2.5+                     , transformers ^>= 0.5                      , util   default-language:    Haskell2010   default-extensions:  UnicodeSyntax@@ -28,6 +31,7 @@                      , ConstraintKinds                      , FlexibleContexts                      , FlexibleInstances+                     , MultiParamTypeClasses                      , MonadComprehensions                      , StandaloneDeriving                      , DeriveFunctor, DeriveFoldable, DeriveTraversable
+ src/Control/Categorical/Monad/Indexed.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE QuantifiedConstraints #-}+{-# LANGUAGE TypeOperators #-}+module Control.Categorical.Monad.Indexed (Monad (..), (<=<), (>=>), Comonad (..), (=<=), (=>=)) where++import Data.Function (flip)++import Control.Categorical.Functor+import Control.Category.Dual++infixr 1 >=>, <=<, =>=, =<=++class (∀ i j . Endofunctor s (m i j)) => Monad s m where+    unit :: a `s` m k k a++    join :: m i j (m j k a) `s` m i k a+    join = bind id++    bind :: a `s` m j k b -> m i j a `s` m i k b+    bind f = join . map f++(<=<) :: Monad s m => b `s` m j k c -> a `s` m i j b -> a `s` m i k c+f <=< g = bind f . bind g . unit++(>=>) :: Monad s m => a `s` m i j b -> b `s` m j k c -> a `s` m i k c+(>=>) = flip (<=<)++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 (∀ i j . Endofunctor s (ɯ i j)) => Comonad s ɯ where+    counit :: ɯ k k a `s` a++    cut :: ɯ i k a `s` ɯ i j (ɯ j k a)+    cut = cobind id++    cobind :: ɯ j k a `s` b -> ɯ i k a `s` ɯ i j b+    cobind f = map f . cut++(=<=) :: Comonad s ɯ => ɯ i j b `s` c -> ɯ j k a `s` b -> ɯ i k a `s` c+f =<= g = counit . cobind f . cobind g++(=>=) :: Comonad s ɯ => ɯ j k a `s` b -> ɯ i j b `s` c -> ɯ i k a `s` c+(=>=) = flip (=<=)
+ src/Prelude.hs view
@@ -0,0 +1,9 @@+module Prelude (module Control.Category,+                module Data.Either,+                Semigroup (..), Monoid (..)) where++--import Algebra (Group)+import Control.Category+import Data.Either+import Data.Monoid (Monoid (..))+import Data.Semigroup (Semigroup (..))