comonads-fd 1.0.0 → 1.3.0
raw patch · 12 files changed
+327/−23 lines, 12 filesdep ~comonad-transformersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: comonad-transformers
API changes (from Hackage documentation)
+ Control.Comonad.Discont.Class: callCV :: ComonadDiscont s w => w (w (w a -> a) -> b) -> b
+ Control.Comonad.Discont.Class: class Comonad w => ComonadDiscont s w | w -> s
+ Control.Comonad.Discont.Class: instance ComonadDiscont s w => ComonadDiscont s (DiscontT k w)
+ Control.Comonad.Discont.Lazy: DiscontT :: (w s -> a) -> w s -> DiscontT s a
+ Control.Comonad.Discont.Lazy: callCV :: ComonadDiscont s w => w (w (w a -> a) -> b) -> b
+ Control.Comonad.Discont.Lazy: class Comonad w => ComonadDiscont s w | w -> s
+ Control.Comonad.Discont.Lazy: data DiscontT s w :: (* -> *) a :: * -> (* -> *) -> * -> *
+ Control.Comonad.Discont.Lazy: discont :: (s -> a) -> s -> Discont s a
+ Control.Comonad.Discont.Lazy: label :: Comonad w => DiscontT s w a -> s
+ Control.Comonad.Discont.Lazy: runDiscont :: Discont s a -> (s -> a, s)
+ Control.Comonad.Discont.Lazy: runDiscontT :: DiscontT s w a -> (w s -> a, w s)
+ Control.Comonad.Discont.Lazy: type Discont s = DiscontT s Identity
+ Control.Comonad.Discont.Memo: callCV :: ComonadDiscont s w => w (w (w a -> a) -> b) -> b
+ Control.Comonad.Discont.Memo: class Comonad w => ComonadDiscont s w | w -> s
+ Control.Comonad.Discont.Memo: data DiscontT s w :: (* -> *) a :: * -> (* -> *) -> * -> *
+ Control.Comonad.Discont.Memo: discont :: (s -> a) -> s -> Discont s a
+ Control.Comonad.Discont.Memo: discontT :: (w s -> a) -> w s -> DiscontT s w a
+ Control.Comonad.Discont.Memo: label :: Comonad w => DiscontT s w a -> s
+ Control.Comonad.Discont.Memo: runDiscont :: Discont s a -> (s -> a, s)
+ Control.Comonad.Discont.Memo: runDiscontT :: DiscontT s w a -> (w s -> a, w s)
+ Control.Comonad.Discont.Memo: type Discont s = DiscontT s Identity
+ Control.Comonad.Discont.Strict: DiscontT :: (w s -> a) -> w s -> DiscontT s a
+ Control.Comonad.Discont.Strict: callCV :: ComonadDiscont s w => w (w (w a -> a) -> b) -> b
+ Control.Comonad.Discont.Strict: class Comonad w => ComonadDiscont s w | w -> s
+ Control.Comonad.Discont.Strict: data DiscontT s w :: (* -> *) a :: * -> (* -> *) -> * -> *
+ Control.Comonad.Discont.Strict: discont :: (s -> a) -> s -> Discont s a
+ Control.Comonad.Discont.Strict: label :: Comonad w => DiscontT s w a -> s
+ Control.Comonad.Discont.Strict: runDiscont :: Discont s a -> (s -> a, s)
+ Control.Comonad.Discont.Strict: runDiscontT :: DiscontT s w a -> (w s -> a, w s)
+ Control.Comonad.Discont.Strict: type Discont s = DiscontT s Identity
+ Control.Comonad.Env.Class: instance (ComonadEnv e w, Monoid m) => ComonadEnv e (TracedT m w)
+ Control.Comonad.Store.Class: instance (ComonadStore s w, Monoid m) => ComonadStore s (TracedT m w)
+ Control.Comonad.Store.Memo: class Comonad w => ComonadStore s w | w -> s
+ Control.Comonad.Store.Memo: data StoreT s w :: (* -> *) a :: * -> (* -> *) -> * -> *
+ Control.Comonad.Store.Memo: experiment :: (ComonadStore s w, Functor f) => f (s -> s) -> w a -> f a
+ Control.Comonad.Store.Memo: get :: ComonadStore s w => w a -> s
+ Control.Comonad.Store.Memo: gets :: ComonadStore s w => (s -> t) -> w a -> t
+ Control.Comonad.Store.Memo: modify :: ComonadStore s w => (s -> s) -> w a -> a
+ Control.Comonad.Store.Memo: put :: ComonadStore s w => s -> w a -> a
+ Control.Comonad.Store.Memo: runStore :: Store s a -> (s -> a, s)
+ Control.Comonad.Store.Memo: runStoreT :: StoreT s w a -> (w (s -> a), s)
+ Control.Comonad.Store.Memo: store :: (s -> a) -> s -> Store s a
+ Control.Comonad.Store.Memo: storeT :: Functor w => w (s -> a) -> s -> StoreT s w a
+ Control.Comonad.Store.Memo: type Store s = StoreT s Identity
+ Control.Comonad.Traced.Class: instance (Comonad w, Monoid m) => ComonadTraced m (TracedT m w)
+ Control.Comonad.Traced.Class: instance (Functor s, ComonadTraced m w) => ComonadTraced m (StreamT s w)
+ Control.Comonad.Traced.Memo: class Comonad w => ComonadTraced m w | w -> m
+ Control.Comonad.Traced.Memo: data TracedT m w :: (* -> *) a :: * -> (* -> *) -> * -> *
+ Control.Comonad.Traced.Memo: runTraced :: Traced m a -> m -> a
+ Control.Comonad.Traced.Memo: runTracedT :: TracedT m w a -> w (m -> a)
+ Control.Comonad.Traced.Memo: trace :: ComonadTraced m w => m -> w a -> a
+ Control.Comonad.Traced.Memo: traced :: Monoid m => (m -> a) -> Traced m a
+ Control.Comonad.Traced.Memo: tracedT :: (Functor w, Monoid m) => w (m -> a) -> TracedT m w a
+ Control.Comonad.Traced.Memo: traces :: ComonadTraced m w => (a -> m) -> w a -> a
+ Control.Comonad.Traced.Memo: type Traced m = TracedT m Identity
- Control.Comonad.Traced: runTraced :: Monoid m => Traced m a -> m -> a
+ Control.Comonad.Traced: runTraced :: Traced m a -> m -> a
Files
- Control/Comonad/Discont.hs +15/−0
- Control/Comonad/Discont/Class.hs +65/−0
- Control/Comonad/Discont/Lazy.hs +30/−0
- Control/Comonad/Discont/Memo.hs +31/−0
- Control/Comonad/Discont/Strict.hs +30/−0
- Control/Comonad/Env/Class.hs +14/−2
- Control/Comonad/Store/Class.hs +26/−7
- Control/Comonad/Store/Memo.hs +32/−0
- Control/Comonad/Stream.hs +15/−0
- Control/Comonad/Traced/Class.hs +25/−10
- Control/Comonad/Traced/Memo.hs +31/−0
- comonads-fd.cabal +13/−4
+ Control/Comonad/Discont.hs view
@@ -0,0 +1,15 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Discont+-- 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.Discont ( + module Control.Comonad.Discont.Lazy+ ) where++import Control.Comonad.Discont.Lazy
+ Control/Comonad/Discont/Class.hs view
@@ -0,0 +1,65 @@+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances #-}+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Discont.Class+-- 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.Discont.Class + ( ComonadDiscont(..)+ ) where++import Control.Comonad+import qualified Control.Comonad.Trans.Discont.Strict as Strict+import qualified Control.Comonad.Trans.Discont.Lazy as Lazy+import qualified Control.Comonad.Trans.Discont.Memo as Memo+{-+import Control.Comonad.Trans.Class+import qualified Control.Comonad.Trans.Env.Strict as Strict+import qualified Control.Comonad.Trans.Store.Strict as Strict+import qualified Control.Comonad.Trans.Env.Lazy as Lazy+import qualified Control.Comonad.Trans.Store.Lazy as Lazy+import qualified Control.Comonad.Trans.Traced as Simple+import qualified Control.Comonad.Trans.Traced.Memo as Memo+import qualified Control.Comonad.Trans.Store.Memo as Memo+import Control.Comonad.Trans.Stream+import Control.Comonad.Trans.Identity +import Data.Monoid+import Data.Semigroup+-}++class Comonad w => ComonadDiscont s w | w -> s where+ callCV :: w (w (w a -> a) -> b) -> b++instance ComonadDiscont s w => ComonadDiscont s (Lazy.DiscontT k w) where+ callCV = Lazy.callCV++instance ComonadDiscont s w => ComonadDiscont s (Memo.DiscontT k w) where+ callCV = Memo.callCV++instance ComonadDiscont s w => ComonadDiscont s (Strict.DiscontT k w) where+ callCV = Strict.callCV++{-+instance Comonad w => ComonadDiscont s (Strict.StoreT s w) where++instance Comonad w => ComonadDiscont s (Lazy.StoreT s w) where++instance Comonad w => ComonadDiscont s (Memo.StoreT s w) where++instance ComonadDiscont s w => ComonadDiscont s (IdentityT w) where++instance ComonadDiscont s w => ComonadDiscont s (Lazy.EnvT e w) where++instance ComonadDiscont s w => ComonadDiscont s (Strict.EnvT e w) where++instance (ComonadDiscont s w, Semigroup m, Monoid m) => ComonadDiscont s (Simple.TracedT m w) where++instance (ComonadDiscont s w, Monoid m) => ComonadDiscont s (Memo.TracedT m w) where++instance (ComonadDiscont s w, Functor f) => ComonadDiscont s (StreamT f w) where+-}
+ Control/Comonad/Discont/Lazy.hs view
@@ -0,0 +1,30 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Discont.Lazy+-- 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.Discont.Lazy ( + -- * ComonadDiscont class+ ComonadDiscont(..)+ , label+ -- * The Discont comonad+ , Discont+ , discont+ , runDiscont+ -- * The DiscontT comonad transformer+ , DiscontT(..)+ , runDiscontT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Discont.Class (ComonadDiscont(..))+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Discont.Lazy (Discont, discont, runDiscont, DiscontT(..), runDiscontT, label)
+ Control/Comonad/Discont/Memo.hs view
@@ -0,0 +1,31 @@+----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Discont.Memo+-- 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.Discont.Memo ( + -- * ComonadDiscont class+ ComonadDiscont(..)+ , label+ -- * The Discont comonad+ , Discont+ , discont+ , runDiscont+ -- * The DiscontT comonad transformer+ , DiscontT+ , discontT+ , runDiscontT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Discont.Class (ComonadDiscont(..))+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Discont.Memo (Discont, discont, runDiscont, DiscontT, discontT, runDiscontT, label)
+ Control/Comonad/Discont/Strict.hs view
@@ -0,0 +1,30 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Discont.Strict+-- 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.Discont.Strict ( + -- * ComonadDiscont class+ ComonadDiscont(..)+ , label+ -- * The Discont comonad+ , Discont+ , discont+ , runDiscont+ -- * The DiscontT comonad transformer+ , DiscontT(..)+ , runDiscontT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Discont.Class (ComonadDiscont(..))+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Discont.Strict (Discont, discont, runDiscont, DiscontT(..), runDiscontT, label)
Control/Comonad/Env/Class.hs view
@@ -22,7 +22,10 @@ import qualified Control.Comonad.Trans.Env.Strict as Strict import qualified Control.Comonad.Trans.Store.Strict as Strict import qualified Control.Comonad.Trans.Discont.Strict as Strict-import Control.Comonad.Trans.Traced+import qualified Control.Comonad.Trans.Traced as Simple+import qualified Control.Comonad.Trans.Traced.Memo as Memo+import qualified Control.Comonad.Trans.Store.Memo as Memo+import qualified Control.Comonad.Trans.Discont.Memo as Memo import Control.Comonad.Trans.Stream import Control.Comonad.Trans.Identity import Data.Monoid@@ -66,10 +69,19 @@ instance ComonadEnv e w => ComonadEnv e (Lazy.DiscontT t w) where ask = lowerAsk +instance ComonadEnv e w => ComonadEnv e (Memo.StoreT t w) where+ ask = lowerAsk++instance ComonadEnv e w => ComonadEnv e (Memo.DiscontT t w) where+ ask = lowerAsk+ instance ComonadEnv e w => ComonadEnv e (IdentityT w) where ask = lowerAsk -instance (ComonadEnv e w, Semigroup m, Monoid m) => ComonadEnv e (TracedT m w) where+instance (ComonadEnv e w, Semigroup m, Monoid m) => ComonadEnv e (Simple.TracedT m w) where+ ask = lowerAsk++instance (ComonadEnv e w, Monoid m) => ComonadEnv e (Memo.TracedT m w) where ask = lowerAsk instance (ComonadEnv e w, Functor f) => ComonadEnv e (StreamT f w) where
Control/Comonad/Store/Class.hs view
@@ -17,19 +17,23 @@ import Control.Comonad import Control.Comonad.Trans.Class+import qualified Control.Comonad.Trans.Env.Strict as Strict import qualified Control.Comonad.Trans.Store.Strict as Strict-import qualified Control.Comonad.Trans.Store.Lazy as Lazy import qualified Control.Comonad.Trans.Discont.Strict as Strict-import qualified Control.Comonad.Trans.Discont.Lazy as Lazy-import qualified Control.Comonad.Trans.Env.Strict as Strict+ import qualified Control.Comonad.Trans.Env.Lazy as Lazy+import qualified Control.Comonad.Trans.Store.Lazy as Lazy+import qualified Control.Comonad.Trans.Discont.Lazy as Lazy++import qualified Control.Comonad.Trans.Traced as Simple++import qualified Control.Comonad.Trans.Traced.Memo as Memo+import qualified Control.Comonad.Trans.Store.Memo as Memo+import qualified Control.Comonad.Trans.Discont.Memo as Memo import Control.Comonad.Trans.Stream import Control.Comonad.Trans.Identity -import Control.Comonad.Trans.Traced import Data.Monoid import Data.Semigroup--- import qualified Control.Comonad.Trans.Pointer as P--- import Data.Ix class Comonad w => ComonadStore s w | w -> s where get :: w a -> s@@ -56,6 +60,11 @@ put = Lazy.put modify = Lazy.modify +instance Comonad w => ComonadStore s (Memo.StoreT s w) where+ get = Memo.get+ put = Memo.put+ modify = Memo.modify+ -- All of these require UndecidableInstances because they do not satisfy the coverage condition lowerGet :: (ComonadTrans t, ComonadStore s w) => t w a -> s@@ -75,6 +84,11 @@ put = lowerPut modify = lowerModify +instance ComonadStore s w => ComonadStore s (Memo.DiscontT k w) where+ get = lowerGet+ put = lowerPut+ modify = lowerModify+ instance ComonadStore s w => ComonadStore s (Strict.DiscontT k w) where get = lowerGet put = lowerPut@@ -95,7 +109,12 @@ put = lowerPut modify = lowerModify -instance (ComonadStore s w, Semigroup m, Monoid m) => ComonadStore s (TracedT m w) where+instance (ComonadStore s w, Semigroup m, Monoid m) => ComonadStore s (Simple.TracedT m w) where+ get = lowerGet+ put = lowerPut+ modify = lowerModify++instance (ComonadStore s w, Monoid m) => ComonadStore s (Memo.TracedT m w) where get = lowerGet put = lowerPut modify = lowerModify
+ Control/Comonad/Store/Memo.hs view
@@ -0,0 +1,32 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Store.Memo+-- 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.Memo ( + -- * ComonadStore class+ ComonadStore(..)+ , gets+ , experiment+ -- * The Store comonad+ , Store+ , store+ , runStore+ -- * The StoreT comonad transformer+ , StoreT+ , storeT+ , runStoreT+ -- * Re-exported modules+ , module Control.Comonad+ , module Control.Comonad.Trans.Class+ ) where++import Control.Comonad+import Control.Comonad.Store.Class (ComonadStore(..), gets, experiment)+import Control.Comonad.Trans.Class+import Control.Comonad.Trans.Store.Memo (Store, store, runStore, StoreT, storeT, runStoreT)
+ Control/Comonad/Stream.hs view
@@ -0,0 +1,15 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Stream+-- 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.Stream ( + module Control.Comonad.Trans.Stream+ ) where++import Control.Comonad.Trans.Stream
Control/Comonad/Traced/Class.hs view
@@ -16,14 +16,17 @@ import Control.Comonad import Control.Comonad.Trans.Class-import Control.Comonad.Trans.Traced (TracedT)-import qualified Control.Comonad.Trans.Traced as TracedT-import Control.Comonad.Trans.Env.Strict as Strict-import Control.Comonad.Trans.Store.Strict as Strict-import Control.Comonad.Trans.Discont.Strict as Strict-import Control.Comonad.Trans.Env.Lazy as Lazy-import Control.Comonad.Trans.Store.Lazy as Lazy-import Control.Comonad.Trans.Discont.Lazy as Lazy+import qualified Control.Comonad.Trans.Env.Strict as Strict+import qualified Control.Comonad.Trans.Store.Strict as Strict+import qualified Control.Comonad.Trans.Discont.Strict as Strict+import qualified Control.Comonad.Trans.Env.Lazy as Lazy+import qualified Control.Comonad.Trans.Store.Lazy as Lazy+import qualified Control.Comonad.Trans.Discont.Lazy as Lazy+import qualified Control.Comonad.Trans.Traced as Simple+import qualified Control.Comonad.Trans.Traced.Memo as Memo+import qualified Control.Comonad.Trans.Store.Memo as Memo+import qualified Control.Comonad.Trans.Discont.Memo as Memo+import Control.Comonad.Trans.Stream import Control.Comonad.Trans.Identity import Data.Monoid import Data.Semigroup@@ -35,9 +38,12 @@ traces f wa = trace (f (extract wa)) wa {-# INLINE traces #-} -instance (Comonad w, Semigroup m, Monoid m) => ComonadTraced m (TracedT m w) where- trace = TracedT.trace+instance (Comonad w, Semigroup m, Monoid m) => ComonadTraced m (Simple.TracedT m w) where+ trace = Simple.trace +instance (Comonad w, Monoid m) => ComonadTraced m (Memo.TracedT m w) where+ trace = Memo.trace+ lowerTrace :: (ComonadTrans t, ComonadTraced m w) => m -> t w a -> a lowerTrace m = trace m . lower {-# INLINE lowerTrace #-}@@ -63,4 +69,13 @@ trace = lowerTrace instance ComonadTraced m w => ComonadTraced m (Lazy.StoreT s w) where+ trace = lowerTrace++instance ComonadTraced m w => ComonadTraced m (Memo.DiscontT k w) where+ trace = lowerTrace++instance ComonadTraced m w => ComonadTraced m (Memo.StoreT s w) where+ trace = lowerTrace++instance (Functor s, ComonadTraced m w) => ComonadTraced m (StreamT s w) where trace = lowerTrace
+ Control/Comonad/Traced/Memo.hs view
@@ -0,0 +1,31 @@+-----------------------------------------------------------------------------+-- |+-- Module : Control.Comonad.Traced.Memo+-- 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.Memo ( + -- * ComonadTraced class+ ComonadTraced(..)+ , traces+ -- * The Traced comonad+ , Traced+ , traced+ , runTraced+ -- * The TracedT comonad transformer+ , TracedT+ , tracedT+ , runTracedT+ -- * 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.Memo (Traced, traced, runTraced, TracedT, tracedT, runTracedT)
comonads-fd.cabal view
@@ -1,6 +1,6 @@ name: comonads-fd category: Control, Comonads-version: 1.0.0+version: 1.3.0 license: BSD3 cabal-version: >= 1.6 license-file: LICENSE@@ -9,8 +9,8 @@ stability: experimental homepage: http://github.com/ekmett/comonads-fd/ copyright: Copyright (C) 2008-2011 Edward A. Kmett-synopsis: Comonad transformers using functional dependencies.-description: Comonad transformers using functional dependencies.+synopsis: Comonad transformers using functional dependencies+description: Comonad transformers using functional dependencies build-type: Simple source-repository head@@ -23,9 +23,14 @@ transformers >= 0.2 && < 0.3, semigroups >= 0.3.4 && < 0.4, comonad >= 1.0 && < 1.1,- comonad-transformers >= 1.0 && < 1.1+ comonad-transformers >= 1.2.1 && < 1.3 exposed-modules:+ Control.Comonad.Discont+ Control.Comonad.Discont.Class+ Control.Comonad.Discont.Lazy+ Control.Comonad.Discont.Memo+ Control.Comonad.Discont.Strict Control.Comonad.Env Control.Comonad.Env.Class Control.Comonad.Env.Strict@@ -35,7 +40,11 @@ Control.Comonad.Store.Class Control.Comonad.Store.Strict Control.Comonad.Store.Lazy+ Control.Comonad.Store.Memo+ Control.Comonad.Stream Control.Comonad.Traced Control.Comonad.Traced.Class+ Control.Comonad.Traced.Memo ghc-options: -Wall +