{-# LANGUAGE Rank2Types #-}
{-# OPTIONS_GHC -Wall -fwarn-tabs #-}
module Data.Functor.Fixedpoint
(
Data.Fix.Fix(..)
, hmap, hmapM, hoistFixM'
, ymap, ymapM
, build
, cata, cataM
, ycata, ycataM
, ana, anaM
, hylo, hyloM
) where
import Prelude hiding (mapM, sequence)
import Control.Monad hiding (mapM, sequence)
import Data.Traversable
import Data.Fix (Fix())
import qualified Data.Fix
hmap :: (Functor f, Functor g) => (forall a. f a -> g a) -> Fix f -> Fix g
hmap :: forall (f :: * -> *) (g :: * -> *).
(Functor f, Functor g) =>
(forall a. f a -> g a) -> Fix f -> Fix g
hmap = (forall a. f a -> g a) -> Fix f -> Fix g
forall (g :: * -> *) (f :: * -> *).
Functor g =>
(forall a. f a -> g a) -> Fix f -> Fix g
Data.Fix.hoistFix'
{-# DEPRECATED hmap "Use Data.Fix.hoistFix'" #-}
hmapM
:: (Functor f, Traversable g, Monad m)
=> (forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
hmapM :: forall (f :: * -> *) (g :: * -> *) (m :: * -> *).
(Functor f, Traversable g, Monad m) =>
(forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
hmapM = (forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
forall (f :: * -> *) (g :: * -> *) (m :: * -> *).
(Functor f, Traversable g, Monad m) =>
(forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
hoistFixM'
{-# DEPRECATED hmapM "Use hoistFixM'" #-}
hoistFixM'
:: (Functor f, Traversable g, Monad m)
=> (forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
hoistFixM' :: forall (f :: * -> *) (g :: * -> *) (m :: * -> *).
(Functor f, Traversable g, Monad m) =>
(forall a. f a -> m (g a)) -> Fix f -> m (Fix g)
hoistFixM' forall a. f a -> m (g a)
eps = (Fix f -> m (g (Fix f))) -> Fix f -> m (Fix g)
forall (m :: * -> *) (t :: * -> *) a.
(Monad m, Traversable t) =>
(a -> m (t a)) -> a -> m (Fix t)
Data.Fix.unfoldFixM (f (Fix f) -> m (g (Fix f))
forall a. f a -> m (g a)
eps (f (Fix f) -> m (g (Fix f)))
-> (Fix f -> f (Fix f)) -> Fix f -> m (g (Fix f))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fix f -> f (Fix f)
forall (f :: * -> *). Fix f -> f (Fix f)
Data.Fix.unFix)
ymap :: (Functor f) => (Fix f -> Fix f) -> Fix f -> Fix f
ymap :: forall (f :: * -> *).
Functor f =>
(Fix f -> Fix f) -> Fix f -> Fix f
ymap Fix f -> Fix f
f = f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
Data.Fix.Fix (f (Fix f) -> Fix f) -> (Fix f -> f (Fix f)) -> Fix f -> Fix f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Fix f -> Fix f) -> f (Fix f) -> f (Fix f)
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Fix f -> Fix f
f (f (Fix f) -> f (Fix f))
-> (Fix f -> f (Fix f)) -> Fix f -> f (Fix f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fix f -> f (Fix f)
forall (f :: * -> *). Fix f -> f (Fix f)
Data.Fix.unFix
ymapM :: (Traversable f, Monad m)
=> (Fix f -> m (Fix f)) -> Fix f -> m (Fix f)
ymapM :: forall (f :: * -> *) (m :: * -> *).
(Traversable f, Monad m) =>
(Fix f -> m (Fix f)) -> Fix f -> m (Fix f)
ymapM Fix f -> m (Fix f)
f = (f (Fix f) -> Fix f) -> m (f (Fix f)) -> m (Fix f)
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
Data.Fix.Fix (m (f (Fix f)) -> m (Fix f))
-> (Fix f -> m (f (Fix f))) -> Fix f -> m (Fix f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Fix f -> m (Fix f)) -> f (Fix f) -> m (f (Fix f))
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> f a -> m (f b)
mapM Fix f -> m (Fix f)
f (f (Fix f) -> m (f (Fix f)))
-> (Fix f -> f (Fix f)) -> Fix f -> m (f (Fix f))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Fix f -> f (Fix f)
forall (f :: * -> *). Fix f -> f (Fix f)
Data.Fix.unFix
build :: (Functor f) => (forall r. (f r -> r) -> r) -> Fix f
build :: forall (f :: * -> *).
Functor f =>
(forall r. (f r -> r) -> r) -> Fix f
build forall r. (f r -> r) -> r
g = (f (Fix f) -> Fix f) -> Fix f
forall r. (f r -> r) -> r
g f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
Data.Fix.Fix
cata :: (Functor f) => (f a -> a) -> (Fix f -> a)
cata :: forall (f :: * -> *) a. Functor f => (f a -> a) -> Fix f -> a
cata = (f a -> a) -> Fix f -> a
forall (f :: * -> *) a. Functor f => (f a -> a) -> Fix f -> a
Data.Fix.foldFix
{-# DEPRECATED cata "Use Data.Fix.foldFix" #-}
cataM :: (Traversable f, Monad m) => (f a -> m a) -> (Fix f -> m a)
cataM :: forall (f :: * -> *) (m :: * -> *) a.
(Traversable f, Monad m) =>
(f a -> m a) -> Fix f -> m a
cataM = (f a -> m a) -> Fix f -> m a
forall (m :: * -> *) (t :: * -> *) a.
(Monad m, Traversable t) =>
(t a -> m a) -> Fix t -> m a
Data.Fix.foldFixM
{-# DEPRECATED cataM "Use Data.Fix.foldFixM" #-}
ycata :: (Functor f) => (Fix f -> Fix f) -> Fix f -> Fix f
ycata :: forall (f :: * -> *).
Functor f =>
(Fix f -> Fix f) -> Fix f -> Fix f
ycata Fix f -> Fix f
f = (f (Fix f) -> Fix f) -> Fix f -> Fix f
forall (f :: * -> *) a. Functor f => (f a -> a) -> Fix f -> a
Data.Fix.foldFix (Fix f -> Fix f
f (Fix f -> Fix f) -> (f (Fix f) -> Fix f) -> f (Fix f) -> Fix f
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
Data.Fix.Fix)
ycataM :: (Traversable f, Monad m)
=> (Fix f -> m (Fix f)) -> Fix f -> m (Fix f)
ycataM :: forall (f :: * -> *) (m :: * -> *).
(Traversable f, Monad m) =>
(Fix f -> m (Fix f)) -> Fix f -> m (Fix f)
ycataM Fix f -> m (Fix f)
f = (f (Fix f) -> m (Fix f)) -> Fix f -> m (Fix f)
forall (m :: * -> *) (t :: * -> *) a.
(Monad m, Traversable t) =>
(t a -> m a) -> Fix t -> m a
Data.Fix.foldFixM (Fix f -> m (Fix f)
f (Fix f -> m (Fix f))
-> (f (Fix f) -> Fix f) -> f (Fix f) -> m (Fix f)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. f (Fix f) -> Fix f
forall (f :: * -> *). f (Fix f) -> Fix f
Data.Fix.Fix)
ana :: (Functor f) => (a -> f a) -> (a -> Fix f)
ana :: forall (f :: * -> *) a. Functor f => (a -> f a) -> a -> Fix f
ana = (a -> f a) -> a -> Fix f
forall (f :: * -> *) a. Functor f => (a -> f a) -> a -> Fix f
Data.Fix.unfoldFix
{-# DEPRECATED ana "Use Data.Fix.unfoldFix" #-}
anaM :: (Traversable f, Monad m) => (a -> m (f a)) -> (a -> m (Fix f))
anaM :: forall (f :: * -> *) (m :: * -> *) a.
(Traversable f, Monad m) =>
(a -> m (f a)) -> a -> m (Fix f)
anaM = (a -> m (f a)) -> a -> m (Fix f)
forall (m :: * -> *) (t :: * -> *) a.
(Monad m, Traversable t) =>
(a -> m (t a)) -> a -> m (Fix t)
Data.Fix.unfoldFixM
{-# DEPRECATED anaM "Use Data.Fix.unfoldFixM" #-}
hylo :: (Functor f) => (f b -> b) -> (a -> f a) -> (a -> b)
hylo :: forall (f :: * -> *) b a.
Functor f =>
(f b -> b) -> (a -> f a) -> a -> b
hylo = (f b -> b) -> (a -> f a) -> a -> b
forall (f :: * -> *) b a.
Functor f =>
(f b -> b) -> (a -> f a) -> a -> b
Data.Fix.refold
{-# DEPRECATED hylo "Use Data.Fix.refold" #-}
hyloM :: (Traversable f, Monad m)
=> (f b -> m b) -> (a -> m (f a)) -> (a -> m b)
hyloM :: forall (f :: * -> *) (m :: * -> *) b a.
(Traversable f, Monad m) =>
(f b -> m b) -> (a -> m (f a)) -> a -> m b
hyloM = (f b -> m b) -> (a -> m (f a)) -> a -> m b
forall (m :: * -> *) (t :: * -> *) b a.
(Monad m, Traversable t) =>
(t b -> m b) -> (a -> m (t a)) -> a -> m b
Data.Fix.refoldM
{-# DEPRECATED hyloM "Use Data.Fix.refoldM" #-}