comonads-fd 3.0 → 3.0.1
raw patch · 16 files changed
+311/−302 lines, 16 filesdep ~comonaddep ~comonad-transformersdep ~semigroupsPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: comonad, comonad-transformers, semigroups
API changes (from Hackage documentation)
Files
- .travis.yml +7/−0
- Control/Comonad/Env.hs +0/−38
- Control/Comonad/Env/Class.hs +0/−52
- Control/Comonad/Identity.hs +0/−19
- Control/Comonad/Store.hs +0/−29
- Control/Comonad/Store/Class.hs +0/−78
- Control/Comonad/Traced.hs +0/−29
- Control/Comonad/Traced/Class.hs +0/−51
- comonads-fd.cabal +8/−6
- src/Control/Comonad/Env.hs +38/−0
- src/Control/Comonad/Env/Class.hs +52/−0
- src/Control/Comonad/Identity.hs +19/−0
- src/Control/Comonad/Store.hs +29/−0
- src/Control/Comonad/Store/Class.hs +78/−0
- src/Control/Comonad/Traced.hs +29/−0
- src/Control/Comonad/Traced/Class.hs +51/−0
.travis.yml view
@@ -1,1 +1,8 @@ language: haskell+notifications:+ irc:+ channels:+ - "irc.freenode.org#haskell-lens"+ skip_join: true+ template:+ - "\x0313comonads-fd\x03/\x0306%{branch}\x03 \x0314%{commit}\x03 %{build_url} %{message}"
− Control/Comonad/Env.hs
@@ -1,38 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Env--- Copyright : (C) 2008-2011 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------ The Env comonad (aka the Coreader, Environment, or Product comonad)------ A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow--- in the reader monad.------ (a -> e -> m) ~ (a, e) -> m ~ Env e a -> m------------------------------------------------------------------------------module Control.Comonad.Env (- -- * ComonadEnv class- ComonadEnv(..)- , asks- , local- -- * The Env comonad- , Env- , env- , runEnv- -- * The EnvT comonad transformer- , EnvT(..)- , runEnvT- -- * Re-exported modules- , module Control.Comonad- , module Control.Comonad.Trans.Class- ) where--import Control.Comonad-import Control.Comonad.Env.Class (ComonadEnv(..), asks)-import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Env (Env, env, runEnv, EnvT(..), runEnvT, local)
− Control/Comonad/Env/Class.hs
@@ -1,52 +0,0 @@-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE UndecidableInstances #-}--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Env.Class--- Copyright : (C) 2008-2012 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Env.Class- ( ComonadEnv(..)- , asks- ) where--import Control.Comonad-import Control.Comonad.Trans.Class-import qualified Control.Comonad.Trans.Env as Env-import Control.Comonad.Trans.Store-import Control.Comonad.Trans.Traced-import Control.Comonad.Trans.Identity-import Data.Semigroup--class Comonad w => ComonadEnv e w | w -> e where- ask :: w a -> e--asks :: ComonadEnv e w => (e -> e') -> w a -> e'-asks f wa = f (ask wa)-{-# INLINE asks #-}--instance Comonad w => ComonadEnv e (Env.EnvT e w) where- ask = Env.ask--instance ComonadEnv e ((,)e) where- ask = fst--lowerAsk :: (ComonadEnv e w, ComonadTrans t) => t w a -> e-lowerAsk = ask . lower-{-# INLINE lowerAsk #-}--instance ComonadEnv e w => ComonadEnv e (StoreT t w) where- ask = lowerAsk--instance ComonadEnv e w => ComonadEnv e (IdentityT w) where- ask = lowerAsk--instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) where- ask = lowerAsk
− Control/Comonad/Identity.hs
@@ -1,19 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Identity--- Copyright : (C) 2008-2012 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Identity (- module Control.Comonad- , module Data.Functor.Identity- , module Control.Comonad.Trans.Identity- ) where--import Control.Comonad-import Data.Functor.Identity-import Control.Comonad.Trans.Identity
− Control/Comonad/Store.hs
@@ -1,29 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Store--- Copyright : (C) 2008-2011 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Store (- -- * ComonadStore class- ComonadStore(..)- -- * The Store comonad- , Store- , store- , runStore- -- * The StoreT comonad transformer- , StoreT(..)- , runStoreT- -- * Re-exported modules- , module Control.Comonad- , module Control.Comonad.Trans.Class- ) where--import Control.Comonad-import Control.Comonad.Store.Class (ComonadStore(..))-import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Store (Store, store, runStore, StoreT(..), runStoreT)
− Control/Comonad/Store/Class.hs
@@ -1,78 +0,0 @@-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE UndecidableInstances #-}--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Store.Class--- Copyright : (C) 2008-2012 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Store.Class- ( ComonadStore(..)- , lowerPos- , lowerPeek- ) where--import Control.Comonad-import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Env-import qualified Control.Comonad.Trans.Store as Store-import Control.Comonad.Trans.Traced-import Control.Comonad.Trans.Identity-import Data.Semigroup--class Comonad w => ComonadStore s w | w -> s where- pos :: w a -> s- peek :: s -> w a -> a-- peeks :: (s -> s) -> w a -> a- peeks f w = peek (f (pos w)) w-- seek :: s -> w a -> w a- seek s = peek s . duplicate-- seeks :: (s -> s) -> w a -> w a- seeks f = peeks f . duplicate-- experiment :: Functor f => (s -> f s) -> w a -> f a- experiment f w = fmap (`peek` w) (f (pos w))--instance Comonad w => ComonadStore s (Store.StoreT s w) where- pos = Store.pos- peek = Store.peek- peeks = Store.peeks- seek = Store.seek- seeks = Store.seeks- experiment = Store.experiment--lowerPos :: (ComonadTrans t, ComonadStore s w) => t w a -> s-lowerPos = pos . lower-{-# INLINE lowerPos #-}--lowerPeek :: (ComonadTrans t, ComonadStore s w) => s -> t w a -> a-lowerPeek s = peek s . lower-{-# INLINE lowerPeek #-}--lowerExperiment :: (ComonadTrans t, ComonadStore s w, Functor f) => (s -> f s) -> t w a -> f a-lowerExperiment f = experiment f . lower-{-# INLINE lowerExperiment #-}--instance ComonadStore s w => ComonadStore s (IdentityT w) where- pos = lowerPos- peek = lowerPeek- experiment = lowerExperiment--instance ComonadStore s w => ComonadStore s (EnvT e w) where- pos = lowerPos- peek = lowerPeek- experiment = lowerExperiment--instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where- pos = lowerPos- peek = lowerPeek- experiment = lowerExperiment
− Control/Comonad/Traced.hs
@@ -1,29 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Traced--- Copyright : (C) 2008-2011 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Traced (- -- * ComonadTraced class- ComonadTraced(..)- , traces- -- * The Traced comonad- , Traced- , traced- , runTraced- -- * The TracedT comonad transformer- , TracedT(..)- -- * Re-exported modules- , module Control.Comonad- , module Control.Comonad.Trans.Class- ) where--import Control.Comonad-import Control.Comonad.Traced.Class (ComonadTraced(..), traces)-import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Traced (Traced, traced, runTraced, TracedT(..), runTracedT)
− Control/Comonad/Traced/Class.hs
@@ -1,51 +0,0 @@-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE UndecidableInstances #-}--------------------------------------------------------------------------------- |--- Module : Control.Comonad.Traced.Class--- Copyright : (C) 2008-2012 Edward Kmett--- License : BSD-style (see the file LICENSE)------ Maintainer : Edward Kmett <ekmett@gmail.com>--- Stability : experimental--- Portability : non-portable (fundeps, MPTCs)------------------------------------------------------------------------------module Control.Comonad.Traced.Class- ( ComonadTraced(..)- , traces- ) where--import Control.Comonad-import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Env-import Control.Comonad.Trans.Store-import qualified Control.Comonad.Trans.Traced as Traced-import Control.Comonad.Trans.Identity-import Data.Semigroup--class Comonad w => ComonadTraced m w | w -> m where- trace :: m -> w a -> a--traces :: ComonadTraced m w => (a -> m) -> w a -> a-traces f wa = trace (f (extract wa)) wa-{-# INLINE traces #-}--instance (Comonad w, Monoid m) => ComonadTraced m (Traced.TracedT m w) where- trace = Traced.trace--lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a-lowerTrace m = trace m . lower-{-# INLINE lowerTrace #-}---- All of these require UndecidableInstances because they do not satisfy the coverage condition--instance ComonadTraced m w => ComonadTraced m (IdentityT w) where- trace = lowerTrace--instance ComonadTraced m w => ComonadTraced m (EnvT e w) where- trace = lowerTrace--instance ComonadTraced m w => ComonadTraced m (StoreT s w) where- trace = lowerTrace
comonads-fd.cabal view
@@ -1,6 +1,6 @@ name: comonads-fd category: Control, Comonads-version: 3.0+version: 3.0.1 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -9,7 +9,7 @@ stability: experimental homepage: http://github.com/ekmett/comonads-fd/ bug-reports: http://github.com/ekmett/comonads-fd/issues-copyright: Copyright (C) 2008-2012 Edward A. Kmett+copyright: Copyright (C) 2008-2013 Edward A. Kmett synopsis: Comonad transformers using functional dependencies description: Comonad transformers using functional dependencies build-type: Simple@@ -25,13 +25,14 @@ FunctionalDependencies FlexibleInstances UndecidableInstances+ build-depends: base >= 4 && < 5, transformers >= 0.2 && < 0.4, mtl >= 2.0 && < 2.2,- semigroups >= 0.8.3.1 && < 0.9,- comonad >= 3.0 && < 3.1,- comonad-transformers >= 3.0 && < 3.1+ semigroups >= 0.8.3.1,+ comonad >= 3.0,+ comonad-transformers >= 3.0 exposed-modules: Control.Comonad.Env@@ -42,5 +43,6 @@ Control.Comonad.Traced Control.Comonad.Traced.Class - ghc-options: -Wall+ ghc-options: -Wall+ hs-source-dirs: src
+ src/Control/Comonad/Env.hs view
@@ -0,0 +1,38 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Env+-- Copyright : (C) 2008-2011 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+--+-- The Env comonad (aka the Coreader, Environment, or Product comonad)+--+-- A co-Kleisli arrow in the Env comonad is isomorphic to a Kleisli arrow+-- in the reader monad.+--+-- (a -> e -> m) ~ (a, e) -> m ~ Env e a -> m+----------------------------------------------------------------------------+module Control.Comonad.Env (+ -- * ComonadEnv class+ ComonadEnv(..)+ , asks+ , local+ -- * The Env comonad+ , Env+ , env+ , runEnv+ -- * The EnvT comonad transformer+ , EnvT(..)+ , runEnvT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Env.Class (ComonadEnv(..), asks)+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Env (Env, env, runEnv, EnvT(..), runEnvT, local)
+ src/Control/Comonad/Env/Class.hs view
@@ -0,0 +1,52 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Env.Class+-- Copyright : (C) 2008-2012 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Env.Class+ ( ComonadEnv(..)+ , asks+ ) where++import Control.Comonad+import Control.Comonad.Trans.Class+import qualified Control.Comonad.Trans.Env as Env+import Control.Comonad.Trans.Store+import Control.Comonad.Trans.Traced+import Control.Comonad.Trans.Identity+import Data.Semigroup++class Comonad w => ComonadEnv e w | w -> e where+ ask :: w a -> e++asks :: ComonadEnv e w => (e -> e') -> w a -> e'+asks f wa = f (ask wa)+{-# INLINE asks #-}++instance Comonad w => ComonadEnv e (Env.EnvT e w) where+ ask = Env.ask++instance ComonadEnv e ((,)e) where+ ask = fst++lowerAsk :: (ComonadEnv e w, ComonadTrans t) => t w a -> e+lowerAsk = ask . lower+{-# INLINE lowerAsk #-}++instance ComonadEnv e w => ComonadEnv e (StoreT t w) where+ ask = lowerAsk++instance ComonadEnv e w => ComonadEnv e (IdentityT w) where+ ask = lowerAsk++instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w) where+ ask = lowerAsk
+ src/Control/Comonad/Identity.hs view
@@ -0,0 +1,19 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Identity+-- Copyright : (C) 2008-2012 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Identity (+ module Control.Comonad+ , module Data.Functor.Identity+ , module Control.Comonad.Trans.Identity+ ) where++import Control.Comonad+import Data.Functor.Identity+import Control.Comonad.Trans.Identity
+ src/Control/Comonad/Store.hs view
@@ -0,0 +1,29 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Store+-- Copyright : (C) 2008-2011 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Store (+ -- * ComonadStore class+ ComonadStore(..)+ -- * The Store comonad+ , Store+ , store+ , runStore+ -- * The StoreT comonad transformer+ , StoreT(..)+ , runStoreT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Store.Class (ComonadStore(..))+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Store (Store, store, runStore, StoreT(..), runStoreT)
+ src/Control/Comonad/Store/Class.hs view
@@ -0,0 +1,78 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Store.Class+-- Copyright : (C) 2008-2012 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Store.Class+ ( ComonadStore(..)+ , lowerPos+ , lowerPeek+ ) where++import Control.Comonad+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Env+import qualified Control.Comonad.Trans.Store as Store+import Control.Comonad.Trans.Traced+import Control.Comonad.Trans.Identity+import Data.Semigroup++class Comonad w => ComonadStore s w | w -> s where+ pos :: w a -> s+ peek :: s -> w a -> a++ peeks :: (s -> s) -> w a -> a+ peeks f w = peek (f (pos w)) w++ seek :: s -> w a -> w a+ seek s = peek s . duplicate++ seeks :: (s -> s) -> w a -> w a+ seeks f = peeks f . duplicate++ experiment :: Functor f => (s -> f s) -> w a -> f a+ experiment f w = fmap (`peek` w) (f (pos w))++instance Comonad w => ComonadStore s (Store.StoreT s w) where+ pos = Store.pos+ peek = Store.peek+ peeks = Store.peeks+ seek = Store.seek+ seeks = Store.seeks+ experiment = Store.experiment++lowerPos :: (ComonadTrans t, ComonadStore s w) => t w a -> s+lowerPos = pos . lower+{-# INLINE lowerPos #-}++lowerPeek :: (ComonadTrans t, ComonadStore s w) => s -> t w a -> a+lowerPeek s = peek s . lower+{-# INLINE lowerPeek #-}++lowerExperiment :: (ComonadTrans t, ComonadStore s w, Functor f) => (s -> f s) -> t w a -> f a+lowerExperiment f = experiment f . lower+{-# INLINE lowerExperiment #-}++instance ComonadStore s w => ComonadStore s (IdentityT w) where+ pos = lowerPos+ peek = lowerPeek+ experiment = lowerExperiment++instance ComonadStore s w => ComonadStore s (EnvT e w) where+ pos = lowerPos+ peek = lowerPeek+ experiment = lowerExperiment++instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w) where+ pos = lowerPos+ peek = lowerPeek+ experiment = lowerExperiment
+ src/Control/Comonad/Traced.hs view
@@ -0,0 +1,29 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Traced+-- Copyright : (C) 2008-2011 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Traced (+ -- * ComonadTraced class+ ComonadTraced(..)+ , traces+ -- * The Traced comonad+ , Traced+ , traced+ , runTraced+ -- * The TracedT comonad transformer+ , TracedT(..)+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Traced.Class (ComonadTraced(..), traces)+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Traced (Traced, traced, runTraced, TracedT(..), runTracedT)
+ src/Control/Comonad/Traced/Class.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Traced.Class+-- Copyright : (C) 2008-2012 Edward Kmett+-- License : BSD-style (see the file LICENSE)+--+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : experimental+-- Portability : non-portable (fundeps, MPTCs)+----------------------------------------------------------------------------+module Control.Comonad.Traced.Class+ ( ComonadTraced(..)+ , traces+ ) where++import Control.Comonad+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Env+import Control.Comonad.Trans.Store+import qualified Control.Comonad.Trans.Traced as Traced+import Control.Comonad.Trans.Identity+import Data.Semigroup++class Comonad w => ComonadTraced m w | w -> m where+ trace :: m -> w a -> a++traces :: ComonadTraced m w => (a -> m) -> w a -> a+traces f wa = trace (f (extract wa)) wa+{-# INLINE traces #-}++instance (Comonad w, Monoid m) => ComonadTraced m (Traced.TracedT m w) where+ trace = Traced.trace++lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a+lowerTrace m = trace m . lower+{-# INLINE lowerTrace #-}++-- All of these require UndecidableInstances because they do not satisfy the coverage condition++instance ComonadTraced m w => ComonadTraced m (IdentityT w) where+ trace = lowerTrace++instance ComonadTraced m w => ComonadTraced m (EnvT e w) where+ trace = lowerTrace++instance ComonadTraced m w => ComonadTraced m (StoreT s w) where+ trace = lowerTrace