Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
We redefine Free here because we prefer undeciable instances
to having to derive Eq1
and so on.
See https://hackage.haskell.org/package/free-5.1.7/docs/Control-Monad-Trans-Free.html
Synopsis
- data FreeF f a r
- = FreePureF !a
- | FreeEmbedF !(f r)
- newtype Free f a = Free {}
- pattern FreeEmbed :: f (Free f a) -> Free f a
- pattern FreePure :: a -> Free f a
- substFree :: (Corecursive t, f ~ Base t) => (a -> t) -> Free f a -> t
- liftFree :: Functor f => f a -> Free f a
- iterFree :: Functor f => (f a -> a) -> Free f a -> a
- iterFreeM :: (Functor f, Monad m) => (f (m a) -> m a) -> Free f a -> m a
- newtype FreeT f m a = FreeT {}
- liftFreeT :: (Functor f, Applicative m) => f a -> FreeT f m a
- iterFreeT :: (Functor f, Monad m) => (f (m a) -> m a) -> FreeT f m a -> m a
- hoistFreeT :: (Functor f, Functor m) => (forall a. m a -> n a) -> FreeT f m b -> FreeT f n b
- transFreeT :: (Functor g, Monad m) => (forall a. f a -> g a) -> FreeT f m b -> FreeT g m b
- joinFreeT :: (Monad m, Traversable f) => FreeT f m a -> m (Free f a)
Documentation
The recursive layer of a free functor
FreePureF !a | |
FreeEmbedF !(f r) |
Instances
Foldable f => Bifoldable (FreeF f) Source # | |
Functor f => Bifunctor (FreeF f) Source # | |
Traversable f => Bitraversable (FreeF f) Source # | |
Defined in Unfree bitraverse :: Applicative f0 => (a -> f0 c) -> (b -> f0 d) -> FreeF f a b -> f0 (FreeF f c d) # | |
Foldable f => Foldable (FreeF f a) Source # | |
Defined in Unfree fold :: Monoid m => FreeF f a m -> m # foldMap :: Monoid m => (a0 -> m) -> FreeF f a a0 -> m # foldMap' :: Monoid m => (a0 -> m) -> FreeF f a a0 -> m # foldr :: (a0 -> b -> b) -> b -> FreeF f a a0 -> b # foldr' :: (a0 -> b -> b) -> b -> FreeF f a a0 -> b # foldl :: (b -> a0 -> b) -> b -> FreeF f a a0 -> b # foldl' :: (b -> a0 -> b) -> b -> FreeF f a a0 -> b # foldr1 :: (a0 -> a0 -> a0) -> FreeF f a a0 -> a0 # foldl1 :: (a0 -> a0 -> a0) -> FreeF f a a0 -> a0 # toList :: FreeF f a a0 -> [a0] # null :: FreeF f a a0 -> Bool # length :: FreeF f a a0 -> Int # elem :: Eq a0 => a0 -> FreeF f a a0 -> Bool # maximum :: Ord a0 => FreeF f a a0 -> a0 # minimum :: Ord a0 => FreeF f a a0 -> a0 # | |
Traversable f => Traversable (FreeF f a) Source # | |
Functor f => Functor (FreeF f a) Source # | |
Generic (FreeF f a r) Source # | |
(Show a, Show (f r)) => Show (FreeF f a r) Source # | |
(NFData a, NFData (f r)) => NFData (FreeF f a r) Source # | |
(Eq a, Eq (f r)) => Eq (FreeF f a r) Source # | |
(Ord a, Ord (f r)) => Ord (FreeF f a r) Source # | |
(Hashable a, Hashable (f r)) => Hashable (FreeF f a r) Source # | |
type Rep (FreeF f a r) Source # | |
Defined in Unfree type Rep (FreeF f a r) = D1 ('MetaData "FreeF" "Unfree" "unfree-0.1.0-AGvDlvd0ig1WEVWuPmmEx" 'False) (C1 ('MetaCons "FreePureF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 a)) :+: C1 ('MetaCons "FreeEmbedF" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (f r)))) |
Instances
Foldable f => Foldable (Free f) Source # | |
Defined in Unfree fold :: Monoid m => Free f m -> m # foldMap :: Monoid m => (a -> m) -> Free f a -> m # foldMap' :: Monoid m => (a -> m) -> Free f a -> m # foldr :: (a -> b -> b) -> b -> Free f a -> b # foldr' :: (a -> b -> b) -> b -> Free f a -> b # foldl :: (b -> a -> b) -> b -> Free f a -> b # foldl' :: (b -> a -> b) -> b -> Free f a -> b # foldr1 :: (a -> a -> a) -> Free f a -> a # foldl1 :: (a -> a -> a) -> Free f a -> a # elem :: Eq a => a -> Free f a -> Bool # maximum :: Ord a => Free f a -> a # minimum :: Ord a => Free f a -> a # | |
Traversable f => Traversable (Free f) Source # | |
Functor f => Applicative (Free f) Source # | |
Functor f => Functor (Free f) Source # | |
Functor f => Monad (Free f) Source # | |
(Show (f (Free f a)), Show a) => Show (Free f a) Source # | |
(NFData (f (Free f a)), NFData a) => NFData (Free f a) Source # | |
(Eq (f (Free f a)), Eq a) => Eq (Free f a) Source # | |
(Ord (f (Free f a)), Ord a) => Ord (Free f a) Source # | |
(Hashable (f (Free f a)), Hashable a) => Hashable (Free f a) Source # | |
Functor f => Corecursive (Free f a) Source # | |
Defined in Unfree embed :: Base (Free f a) (Free f a) -> Free f a # ana :: (a0 -> Base (Free f a) a0) -> a0 -> Free f a # apo :: (a0 -> Base (Free f a) (Either (Free f a) a0)) -> a0 -> Free f a # postpro :: Recursive (Free f a) => (forall b. Base (Free f a) b -> Base (Free f a) b) -> (a0 -> Base (Free f a) a0) -> a0 -> Free f a # gpostpro :: (Recursive (Free f a), Monad m) => (forall b. m (Base (Free f a) b) -> Base (Free f a) (m b)) -> (forall c. Base (Free f a) c -> Base (Free f a) c) -> (a0 -> Base (Free f a) (m a0)) -> a0 -> Free f a # | |
Functor f => Recursive (Free f a) Source # | |
Defined in Unfree project :: Free f a -> Base (Free f a) (Free f a) # cata :: (Base (Free f a) a0 -> a0) -> Free f a -> a0 # para :: (Base (Free f a) (Free f a, a0) -> a0) -> Free f a -> a0 # gpara :: (Corecursive (Free f a), Comonad w) => (forall b. Base (Free f a) (w b) -> w (Base (Free f a) b)) -> (Base (Free f a) (EnvT (Free f a) w a0) -> a0) -> Free f a -> a0 # prepro :: Corecursive (Free f a) => (forall b. Base (Free f a) b -> Base (Free f a) b) -> (Base (Free f a) a0 -> a0) -> Free f a -> a0 # gprepro :: (Corecursive (Free f a), Comonad w) => (forall b. Base (Free f a) (w b) -> w (Base (Free f a) b)) -> (forall c. Base (Free f a) c -> Base (Free f a) c) -> (Base (Free f a) (w a0) -> a0) -> Free f a -> a0 # | |
type Base (Free f a) Source # | |
substFree :: (Corecursive t, f ~ Base t) => (a -> t) -> Free f a -> t Source #
Fills all the holes in the free functor
liftFree :: Functor f => f a -> Free f a Source #
A version of lift that can be used with just a Functor for f
iterFreeM :: (Functor f, Monad m) => (f (m a) -> m a) -> Free f a -> m a Source #
Like iterFree for monadic values
Instances
(Foldable f, Foldable m) => Foldable (FreeT f m) Source # | |
Defined in Unfree fold :: Monoid m0 => FreeT f m m0 -> m0 # foldMap :: Monoid m0 => (a -> m0) -> FreeT f m a -> m0 # foldMap' :: Monoid m0 => (a -> m0) -> FreeT f m a -> m0 # foldr :: (a -> b -> b) -> b -> FreeT f m a -> b # foldr' :: (a -> b -> b) -> b -> FreeT f m a -> b # foldl :: (b -> a -> b) -> b -> FreeT f m a -> b # foldl' :: (b -> a -> b) -> b -> FreeT f m a -> b # foldr1 :: (a -> a -> a) -> FreeT f m a -> a # foldl1 :: (a -> a -> a) -> FreeT f m a -> a # toList :: FreeT f m a -> [a] # length :: FreeT f m a -> Int # elem :: Eq a => a -> FreeT f m a -> Bool # maximum :: Ord a => FreeT f m a -> a # minimum :: Ord a => FreeT f m a -> a # | |
(Traversable f, Traversable m) => Traversable (FreeT f m) Source # | |
(Functor f, Monad m) => Applicative (FreeT f m) Source # | |
(Functor f, Functor m) => Functor (FreeT f m) Source # | |
(Functor f, Monad m) => Monad (FreeT f m) Source # | |
Show (m (FreeF f a (FreeT f m a))) => Show (FreeT f m a) Source # | |
NFData (m (FreeF f a (FreeT f m a))) => NFData (FreeT f m a) Source # | |
Eq (m (FreeF f a (FreeT f m a))) => Eq (FreeT f m a) Source # | |
Ord (m (FreeF f a (FreeT f m a))) => Ord (FreeT f m a) Source # | |
Hashable (m (FreeF f a (FreeT f m a))) => Hashable (FreeT f m a) Source # | |