-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Heterogenous memoisation monad
--
-- See README.md for details
@package tangle
@version 0.1
module Control.Monad.Tangle
-- | TangleFT is a higher-kinded heterogeneous memoisation monad
-- transformer. t represents the shape of the underlying data
-- structure, and f is the wrapper type of each field. This
-- monad represents computations that depend on the contents of t
-- f.
newtype TangleFT t f m a
TangleFT :: (t (Compose (TangleFT t f m) f) -> t (Compose Maybe f) -> m (t (Compose Maybe f), a)) -> TangleFT t f m a
[runTangleFT] :: TangleFT t f m a -> t (Compose (TangleFT t f m) f) -> t (Compose Maybe f) -> m (t (Compose Maybe f), a)
-- | Obtain a value from the tangle. The result gets memoised.
hitchF :: Monad m => (forall h g. Functor g => (h a -> g (h a)) -> t h -> g (t h)) -> TangleFT t f m (f a)
evalTangleFT :: (ApplicativeB t, Functor m) => TangleFT t f m a -> t (Compose (TangleFT t f m) f) -> m a
-- | Lift a collection of TangleTs so that it fits the argument of
-- runTangleFT.
liftTangles :: (FunctorB b, Functor m) => b (TangleT b m) -> b (Compose (TangleT b m) Identity)
-- | A product where all the elements are Compose Nothing
blank :: ApplicativeB b => b (Compose Maybe f)
-- | Bare variant of hitchF
hitch :: Monad m => (forall h g. Functor g => (h a -> g (h a)) -> t h -> g (t h)) -> TangleT t m a
-- | Collect all results in the tangle.
gather :: (TraversableB t, Monad m) => TangleFT t f m (t f)
-- | Non-transformer version of TangleFT
type TangleF t f = TangleFT t f Identity
evalTangleF :: ApplicativeB t => TangleF t f a -> t (Compose (TangleF t f) f) -> a
-- | Bare version of TangleFT
type TangleT t = TangleFT t Identity
evalTangleT :: (Functor m, ApplicativeB t) => TangleT t m a -> t (TangleT t m) -> m a
-- | Bare non-transformer tangle
type Tangle t = TangleFT t Identity Identity
evalTangle :: ApplicativeB t => Tangle t a -> t (Tangle t) -> a
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Tangle.TangleFT t f m)
instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Tangle.TangleFT t f m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Tangle.TangleFT t f m)
instance (GHC.Base.Monad m, GHC.Base.Semigroup a) => GHC.Base.Semigroup (Control.Monad.Tangle.TangleFT t f m a)
instance (GHC.Base.Monad m, GHC.Base.Monoid a) => GHC.Base.Monoid (Control.Monad.Tangle.TangleFT t f m a)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Tangle.TangleFT t f)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Tangle.TangleFT t f m)