-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Monads for free -- -- Monads for free @package free @version 2.1 module Control.Comonad.Cofree.Class class (Functor f, Comonad w) => ComonadCofree f w | w -> f unwrap :: ComonadCofree f w => w a -> f (w a) instance (ComonadCofree f w, Semigroup m, Monoid m) => ComonadCofree f (TracedT m w) instance ComonadCofree f w => ComonadCofree f (StoreT s w) instance ComonadCofree f w => ComonadCofree f (EnvT e w) instance ComonadCofree f w => ComonadCofree f (IdentityT w) -- | Cofree comonads module Control.Comonad.Cofree data Cofree f a (:<) :: a -> f (Cofree f a) -> Cofree f a -- | lower . section = id section :: Comonad f => f a -> Cofree f a unwrap :: ComonadCofree f w => w a -> f (w a) coiter :: Functor f => (a -> f a) -> a -> Cofree f a unfold :: Functor f => (b -> (a, f b)) -> b -> Cofree f a extractLens :: Lens (Cofree f a) a unwrapLens :: Lens (Cofree f a) (f (Cofree f a)) -- | We'd prefer the following non-Haskell 98 type to make parametricity -- clearer, but this suffices -- --
--   telescope :: (forall b. [Lens (f b) b]) -> Lens (Cofree f a) a
--   
telescope :: [Lens (f (Cofree f a)) (Cofree f a)] -> Lens (Cofree f a) a instance ComonadTraced m w => ComonadTraced m (Cofree w) instance ComonadStore s w => ComonadStore s (Cofree w) instance ComonadEnv e w => ComonadEnv e (Cofree w) instance (Typeable1 f, Data (f (Cofree f a)), Data a) => Data (Cofree f a) instance (Typeable1 f, Typeable a) => Typeable (Cofree f a) instance Typeable1 f => Typeable1 (Cofree f) instance Traversable1 f => Traversable1 (Cofree f) instance Traversable f => Traversable (Cofree f) instance Foldable1 f => Foldable1 (Cofree f) instance Foldable f => Foldable (Cofree f) instance (Ord (f (Cofree f a)), Ord a) => Ord (Cofree f a) instance (Eq (f (Cofree f a)), Eq a) => Eq (Cofree f a) instance (Read (f (Cofree f a)), Read a) => Read (Cofree f a) instance (Show (f (Cofree f a)), Show a) => Show (Cofree f a) instance Applicative f => Applicative (Cofree f) instance Apply f => Apply (Cofree f) instance ComonadTrans Cofree instance Functor f => Comonad (Cofree f) instance Functor f => Extend (Cofree f) instance Functor f => Functor (Cofree f) instance Distributive f => Distributive (Cofree f) instance Functor f => ComonadCofree f (Cofree f) module Control.Monad.Free.Class class Monad m => MonadFree f m | m -> f wrap :: MonadFree f m => f (m a) -> m a instance (Functor f, MonadFree f m, Error e) => MonadFree f (ErrorT e m) instance (Functor f, MonadFree f m) => MonadFree f (ListT m) instance (Functor f, MonadFree f m) => MonadFree f (IdentityT m) instance (Functor f, MonadFree f m) => MonadFree f (MaybeT m) instance (Functor f, MonadFree f m, Monoid w) => MonadFree f (RWST r w s m) instance (Functor f, MonadFree f m, Monoid w) => MonadFree f (RWST r w s m) instance (Functor f, MonadFree f m, Monoid w) => MonadFree f (WriterT w m) instance (Functor f, MonadFree f m, Monoid w) => MonadFree f (WriterT w m) instance (Functor f, MonadFree f m) => MonadFree f (StateT s m) instance (Functor f, MonadFree f m) => MonadFree f (StateT s m) instance (Functor f, MonadFree f m) => MonadFree f (ReaderT e m) -- | Free monads module Control.Monad.Free class Monad m => MonadFree f m | m -> f wrap :: MonadFree f m => f (m a) -> m a data Free f a Pure :: a -> Free f a Free :: (f (Free f a)) -> Free f a -- |
--   retract . lift = id
--   retract . liftF = id
--   
retract :: Monad f => Free f a -> f a liftF :: Functor f => f a -> Free f a iter :: Functor f => (f a -> a) -> Free f a -> a instance Functor f => MonadFree f (Free f) instance (Functor m, MonadCont m) => MonadCont (Free m) instance (Functor m, MonadError e m) => MonadError e (Free m) instance (Functor m, MonadState s m) => MonadState s (Free m) instance (Functor m, MonadReader e m) => MonadReader e (Free m) instance (Functor m, MonadWriter e m) => MonadWriter e (Free m) instance Traversable1 f => Traversable1 (Free f) instance Traversable f => Traversable (Free f) instance Foldable1 f => Foldable1 (Free f) instance Foldable f => Foldable (Free f) instance MonadTrans Free instance (Functor v, MonadPlus v) => MonadPlus (Free v) instance Alternative v => Alternative (Free v) instance Functor f => Monad (Free f) instance Functor f => Bind (Free f) instance Functor f => Applicative (Free f) instance Functor f => Apply (Free f) instance Functor f => Functor (Free f) instance (Read (f (Free f a)), Read a) => Read (Free f a) instance (Show (f (Free f a)), Show a) => Show (Free f a) instance (Ord (f (Free f a)), Ord a) => Ord (Free f a) instance (Eq (f (Free f a)), Eq a) => Eq (Free f a)