sexp-grammar-2.0.0: Invertible grammar combinators for S-expressions

Safe HaskellNone
LanguageHaskell2010

Language.Sexp.Located

Contents

Synopsis

Parse and print

decode :: ByteString -> Either String Sexp Source #

Deserialise a Sexp from a string

parseSexp :: FilePath -> ByteString -> Either String Sexp Source #

Parse a Sexp from a string.

parseSexps :: FilePath -> ByteString -> Either String [Sexp] Source #

Parse multiple Sexp from a string.

parseSexpWithPos :: Position -> ByteString -> Either String Sexp Source #

Parse a Sexp from a string, starting from a given position. Useful for embedding into other parsers.

parseSexpsWithPos :: Position -> ByteString -> Either String [Sexp] Source #

Parse multiple Sexp from a string, starting from a given position. Useful for embedding into other parsers.

encode :: Sexp -> ByteString Source #

Serialise a Sexp into a compact string

format :: Sexp -> ByteString Source #

Serialise a Sexp into a pretty-printed string

Type

type Sexp = Fix (Compose (LocatedBy Position) SexpF) Source #

S-expression type annotated with positions. Useful for further parsing.

pattern Atom :: Atom -> Sexp Source #

pattern Number :: Scientific -> Sexp Source #

pattern Symbol :: Text -> Sexp Source #

pattern String :: Text -> Sexp Source #

pattern ParenList :: [Sexp] -> Sexp Source #

pattern BracketList :: [Sexp] -> Sexp Source #

pattern BraceList :: [Sexp] -> Sexp Source #

pattern Modified :: Prefix -> Sexp -> Sexp Source #

Internal types

data SexpF e Source #

S-expression functor

Constructors

AtomF !Atom 
ParenListF [e] 
BracketListF [e] 
BraceListF [e] 
ModifiedF !Prefix e 

Instances

Functor SexpF Source # 

Methods

fmap :: (a -> b) -> SexpF a -> SexpF b #

(<$) :: a -> SexpF b -> SexpF a #

Foldable SexpF Source # 

Methods

fold :: Monoid m => SexpF m -> m #

foldMap :: Monoid m => (a -> m) -> SexpF a -> m #

foldr :: (a -> b -> b) -> b -> SexpF a -> b #

foldr' :: (a -> b -> b) -> b -> SexpF a -> b #

foldl :: (b -> a -> b) -> b -> SexpF a -> b #

foldl' :: (b -> a -> b) -> b -> SexpF a -> b #

foldr1 :: (a -> a -> a) -> SexpF a -> a #

foldl1 :: (a -> a -> a) -> SexpF a -> a #

toList :: SexpF a -> [a] #

null :: SexpF a -> Bool #

length :: SexpF a -> Int #

elem :: Eq a => a -> SexpF a -> Bool #

maximum :: Ord a => SexpF a -> a #

minimum :: Ord a => SexpF a -> a #

sum :: Num a => SexpF a -> a #

product :: Num a => SexpF a -> a #

Traversable SexpF Source # 

Methods

traverse :: Applicative f => (a -> f b) -> SexpF a -> f (SexpF b) #

sequenceA :: Applicative f => SexpF (f a) -> f (SexpF a) #

mapM :: Monad m => (a -> m b) -> SexpF a -> m (SexpF b) #

sequence :: Monad m => SexpF (m a) -> m (SexpF a) #

Eq1 SexpF Source # 

Methods

liftEq :: (a -> b -> Bool) -> SexpF a -> SexpF b -> Bool #

Generic (SexpF e) Source # 

Associated Types

type Rep (SexpF e) :: * -> * #

Methods

from :: SexpF e -> Rep (SexpF e) x #

to :: Rep (SexpF e) x -> SexpF e #

NFData (Fix (Compose * * (LocatedBy Position) SexpF)) Source # 

Methods

rnf :: Fix (Compose * * (LocatedBy Position) SexpF) -> () #

NFData (Fix SexpF) Source # 

Methods

rnf :: Fix SexpF -> () #

type Rep (SexpF e) Source # 

data Atom Source #

S-expression atom type

Instances

Eq Atom Source # 

Methods

(==) :: Atom -> Atom -> Bool #

(/=) :: Atom -> Atom -> Bool #

Ord Atom Source # 

Methods

compare :: Atom -> Atom -> Ordering #

(<) :: Atom -> Atom -> Bool #

(<=) :: Atom -> Atom -> Bool #

(>) :: Atom -> Atom -> Bool #

(>=) :: Atom -> Atom -> Bool #

max :: Atom -> Atom -> Atom #

min :: Atom -> Atom -> Atom #

Show Atom Source # 

Methods

showsPrec :: Int -> Atom -> ShowS #

show :: Atom -> String #

showList :: [Atom] -> ShowS #

Generic Atom Source # 

Associated Types

type Rep Atom :: * -> * #

Methods

from :: Atom -> Rep Atom x #

to :: Rep Atom x -> Atom #

NFData Atom Source # 

Methods

rnf :: Atom -> () #

type Rep Atom Source # 
type Rep Atom = D1 * (MetaData "Atom" "Language.Sexp.Types" "sexp-grammar-2.0.0-7H6WbiqRhQHGwWvTncrSQw" False) ((:+:) * (C1 * (MetaCons "AtomNumber" PrefixI False) (S1 * (MetaSel (Nothing Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 * Scientific))) ((:+:) * (C1 * (MetaCons "AtomString" PrefixI False) (S1 * (MetaSel (Nothing Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 * Text))) (C1 * (MetaCons "AtomSymbol" PrefixI False) (S1 * (MetaSel (Nothing Symbol) SourceUnpack SourceStrict DecidedStrict) (Rec0 * Text)))))

data Prefix Source #

S-expression quotation type

Constructors

Quote 
Backtick 
Comma 
CommaAt 
Hash 

Instances

Eq Prefix Source # 

Methods

(==) :: Prefix -> Prefix -> Bool #

(/=) :: Prefix -> Prefix -> Bool #

Ord Prefix Source # 
Show Prefix Source # 
Generic Prefix Source # 

Associated Types

type Rep Prefix :: * -> * #

Methods

from :: Prefix -> Rep Prefix x #

to :: Rep Prefix x -> Prefix #

NFData Prefix Source # 

Methods

rnf :: Prefix -> () #

type Rep Prefix Source # 
type Rep Prefix = D1 * (MetaData "Prefix" "Language.Sexp.Types" "sexp-grammar-2.0.0-7H6WbiqRhQHGwWvTncrSQw" False) ((:+:) * ((:+:) * (C1 * (MetaCons "Quote" PrefixI False) (U1 *)) (C1 * (MetaCons "Backtick" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "Comma" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "CommaAt" PrefixI False) (U1 *)) (C1 * (MetaCons "Hash" PrefixI False) (U1 *)))))

data LocatedBy a e Source #

Annotation functor for positions

Constructors

!a :< e 

Instances

Bifunctor LocatedBy Source # 

Methods

bimap :: (a -> b) -> (c -> d) -> LocatedBy a c -> LocatedBy b d #

first :: (a -> b) -> LocatedBy a c -> LocatedBy b c #

second :: (b -> c) -> LocatedBy a b -> LocatedBy a c #

Functor (LocatedBy a) Source # 

Methods

fmap :: (a -> b) -> LocatedBy a a -> LocatedBy a b #

(<$) :: a -> LocatedBy a b -> LocatedBy a a #

Foldable (LocatedBy a) Source # 

Methods

fold :: Monoid m => LocatedBy a m -> m #

foldMap :: Monoid m => (a -> m) -> LocatedBy a a -> m #

foldr :: (a -> b -> b) -> b -> LocatedBy a a -> b #

foldr' :: (a -> b -> b) -> b -> LocatedBy a a -> b #

foldl :: (b -> a -> b) -> b -> LocatedBy a a -> b #

foldl' :: (b -> a -> b) -> b -> LocatedBy a a -> b #

foldr1 :: (a -> a -> a) -> LocatedBy a a -> a #

foldl1 :: (a -> a -> a) -> LocatedBy a a -> a #

toList :: LocatedBy a a -> [a] #

null :: LocatedBy a a -> Bool #

length :: LocatedBy a a -> Int #

elem :: Eq a => a -> LocatedBy a a -> Bool #

maximum :: Ord a => LocatedBy a a -> a #

minimum :: Ord a => LocatedBy a a -> a #

sum :: Num a => LocatedBy a a -> a #

product :: Num a => LocatedBy a a -> a #

Traversable (LocatedBy a) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> LocatedBy a a -> f (LocatedBy a b) #

sequenceA :: Applicative f => LocatedBy a (f a) -> f (LocatedBy a a) #

mapM :: Monad m => (a -> m b) -> LocatedBy a a -> m (LocatedBy a b) #

sequence :: Monad m => LocatedBy a (m a) -> m (LocatedBy a a) #

Eq p => Eq1 (LocatedBy p) Source # 

Methods

liftEq :: (a -> b -> Bool) -> LocatedBy p a -> LocatedBy p b -> Bool #

NFData (Fix (Compose * * (LocatedBy Position) SexpF)) Source # 

Methods

rnf :: Fix (Compose * * (LocatedBy Position) SexpF) -> () #

(Eq e, Eq a) => Eq (LocatedBy a e) Source # 

Methods

(==) :: LocatedBy a e -> LocatedBy a e -> Bool #

(/=) :: LocatedBy a e -> LocatedBy a e -> Bool #

(Ord e, Ord a) => Ord (LocatedBy a e) Source # 

Methods

compare :: LocatedBy a e -> LocatedBy a e -> Ordering #

(<) :: LocatedBy a e -> LocatedBy a e -> Bool #

(<=) :: LocatedBy a e -> LocatedBy a e -> Bool #

(>) :: LocatedBy a e -> LocatedBy a e -> Bool #

(>=) :: LocatedBy a e -> LocatedBy a e -> Bool #

max :: LocatedBy a e -> LocatedBy a e -> LocatedBy a e #

min :: LocatedBy a e -> LocatedBy a e -> LocatedBy a e #

(Show e, Show a) => Show (LocatedBy a e) Source # 

Methods

showsPrec :: Int -> LocatedBy a e -> ShowS #

show :: LocatedBy a e -> String #

showList :: [LocatedBy a e] -> ShowS #

Generic (LocatedBy a e) Source # 

Associated Types

type Rep (LocatedBy a e) :: * -> * #

Methods

from :: LocatedBy a e -> Rep (LocatedBy a e) x #

to :: Rep (LocatedBy a e) x -> LocatedBy a e #

type Rep (LocatedBy a e) Source # 
type Rep (LocatedBy a e) = D1 * (MetaData "LocatedBy" "Language.Sexp.Types" "sexp-grammar-2.0.0-7H6WbiqRhQHGwWvTncrSQw" False) (C1 * (MetaCons ":<" (InfixI LeftAssociative 9) False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * a)) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * e))))

data Position Source #

Position: file name, line number, column number

Constructors

Position FilePath !Int !Int 

newtype Compose k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1) :: forall k k1. (k -> *) -> (k1 -> k) -> k1 -> * infixr 9 #

Right-to-left composition of functors. The composition of applicative functors is always applicative, but the composition of monads is not always a monad.

Constructors

Compose infixr 9 

Fields

Instances

Functor f => Generic1 k (Compose * k f g) 

Associated Types

type Rep1 (Compose * k f g) (f :: Compose * k f g -> *) :: k -> * #

Methods

from1 :: f a -> Rep1 (Compose * k f g) f a #

to1 :: Rep1 (Compose * k f g) f a -> f a #

NFData (Fix (Compose * * (LocatedBy Position) SexpF)) # 

Methods

rnf :: Fix (Compose * * (LocatedBy Position) SexpF) -> () #

(Functor f, Functor g) => Functor (Compose * * f g)

Since: 4.9.0.0

Methods

fmap :: (a -> b) -> Compose * * f g a -> Compose * * f g b #

(<$) :: a -> Compose * * f g b -> Compose * * f g a #

(Applicative f, Applicative g) => Applicative (Compose * * f g)

Since: 4.9.0.0

Methods

pure :: a -> Compose * * f g a #

(<*>) :: Compose * * f g (a -> b) -> Compose * * f g a -> Compose * * f g b #

liftA2 :: (a -> b -> c) -> Compose * * f g a -> Compose * * f g b -> Compose * * f g c #

(*>) :: Compose * * f g a -> Compose * * f g b -> Compose * * f g b #

(<*) :: Compose * * f g a -> Compose * * f g b -> Compose * * f g a #

(Foldable f, Foldable g) => Foldable (Compose * * f g)

Since: 4.9.0.0

Methods

fold :: Monoid m => Compose * * f g m -> m #

foldMap :: Monoid m => (a -> m) -> Compose * * f g a -> m #

foldr :: (a -> b -> b) -> b -> Compose * * f g a -> b #

foldr' :: (a -> b -> b) -> b -> Compose * * f g a -> b #

foldl :: (b -> a -> b) -> b -> Compose * * f g a -> b #

foldl' :: (b -> a -> b) -> b -> Compose * * f g a -> b #

foldr1 :: (a -> a -> a) -> Compose * * f g a -> a #

foldl1 :: (a -> a -> a) -> Compose * * f g a -> a #

toList :: Compose * * f g a -> [a] #

null :: Compose * * f g a -> Bool #

length :: Compose * * f g a -> Int #

elem :: Eq a => a -> Compose * * f g a -> Bool #

maximum :: Ord a => Compose * * f g a -> a #

minimum :: Ord a => Compose * * f g a -> a #

sum :: Num a => Compose * * f g a -> a #

product :: Num a => Compose * * f g a -> a #

(Traversable f, Traversable g) => Traversable (Compose * * f g)

Since: 4.9.0.0

Methods

traverse :: Applicative f => (a -> f b) -> Compose * * f g a -> f (Compose * * f g b) #

sequenceA :: Applicative f => Compose * * f g (f a) -> f (Compose * * f g a) #

mapM :: Monad m => (a -> m b) -> Compose * * f g a -> m (Compose * * f g b) #

sequence :: Monad m => Compose * * f g (m a) -> m (Compose * * f g a) #

(Eq1 f, Eq1 g) => Eq1 (Compose * * f g)

Since: 4.9.0.0

Methods

liftEq :: (a -> b -> Bool) -> Compose * * f g a -> Compose * * f g b -> Bool #

(Ord1 f, Ord1 g) => Ord1 (Compose * * f g)

Since: 4.9.0.0

Methods

liftCompare :: (a -> b -> Ordering) -> Compose * * f g a -> Compose * * f g b -> Ordering #

(Read1 f, Read1 g) => Read1 (Compose * * f g)

Since: 4.9.0.0

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Compose * * f g a) #

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Compose * * f g a] #

liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Compose * * f g a) #

liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Compose * * f g a] #

(Show1 f, Show1 g) => Show1 (Compose * * f g)

Since: 4.9.0.0

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Compose * * f g a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Compose * * f g a] -> ShowS #

(Alternative f, Applicative g) => Alternative (Compose * * f g)

Since: 4.9.0.0

Methods

empty :: Compose * * f g a #

(<|>) :: Compose * * f g a -> Compose * * f g a -> Compose * * f g a #

some :: Compose * * f g a -> Compose * * f g [a] #

many :: Compose * * f g a -> Compose * * f g [a] #

(NFData1 f, NFData1 g) => NFData1 (Compose * * f g)

Since: 1.4.3.0

Methods

liftRnf :: (a -> ()) -> Compose * * f g a -> () #

(Eq1 f, Eq1 g, Eq a) => Eq (Compose * * f g a)

Since: 4.9.0.0

Methods

(==) :: Compose * * f g a -> Compose * * f g a -> Bool #

(/=) :: Compose * * f g a -> Compose * * f g a -> Bool #

(Data (f (g a)), Typeable * k2, Typeable * k1, Typeable (k2 -> k1) g, Typeable (k1 -> *) f, Typeable k2 a) => Data (Compose k1 k2 f g a) 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall b. b -> c b) -> Compose k1 k2 f g a -> c (Compose k1 k2 f g a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Compose k1 k2 f g a) #

toConstr :: Compose k1 k2 f g a -> Constr #

dataTypeOf :: Compose k1 k2 f g a -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Compose k1 k2 f g a)) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Compose k1 k2 f g a)) #

gmapT :: (forall b. Data b => b -> b) -> Compose k1 k2 f g a -> Compose k1 k2 f g a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Compose k1 k2 f g a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Compose k1 k2 f g a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Compose k1 k2 f g a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Compose k1 k2 f g a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Compose k1 k2 f g a -> m (Compose k1 k2 f g a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Compose k1 k2 f g a -> m (Compose k1 k2 f g a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Compose k1 k2 f g a -> m (Compose k1 k2 f g a) #

(Ord1 f, Ord1 g, Ord a) => Ord (Compose * * f g a)

Since: 4.9.0.0

Methods

compare :: Compose * * f g a -> Compose * * f g a -> Ordering #

(<) :: Compose * * f g a -> Compose * * f g a -> Bool #

(<=) :: Compose * * f g a -> Compose * * f g a -> Bool #

(>) :: Compose * * f g a -> Compose * * f g a -> Bool #

(>=) :: Compose * * f g a -> Compose * * f g a -> Bool #

max :: Compose * * f g a -> Compose * * f g a -> Compose * * f g a #

min :: Compose * * f g a -> Compose * * f g a -> Compose * * f g a #

(Read1 f, Read1 g, Read a) => Read (Compose * * f g a)

Since: 4.9.0.0

Methods

readsPrec :: Int -> ReadS (Compose * * f g a) #

readList :: ReadS [Compose * * f g a] #

readPrec :: ReadPrec (Compose * * f g a) #

readListPrec :: ReadPrec [Compose * * f g a] #

(Show1 f, Show1 g, Show a) => Show (Compose * * f g a)

Since: 4.9.0.0

Methods

showsPrec :: Int -> Compose * * f g a -> ShowS #

show :: Compose * * f g a -> String #

showList :: [Compose * * f g a] -> ShowS #

Generic (Compose k1 k2 f g a) 

Associated Types

type Rep (Compose k1 k2 f g a) :: * -> * #

Methods

from :: Compose k1 k2 f g a -> Rep (Compose k1 k2 f g a) x #

to :: Rep (Compose k1 k2 f g a) x -> Compose k1 k2 f g a #

(NFData1 f, NFData1 g, NFData a) => NFData (Compose * * f g a)

Since: 1.4.3.0

Methods

rnf :: Compose * * f g a -> () #

type Rep1 k (Compose * k f g) 
type Rep1 k (Compose * k f g) = D1 k (MetaData "Compose" "Data.Functor.Compose" "base" True) (C1 k (MetaCons "Compose" PrefixI True) (S1 k (MetaSel (Just Symbol "getCompose") NoSourceUnpackedness NoSourceStrictness DecidedLazy) ((:.:) * k f (Rec1 k g))))
type Rep (Compose k1 k2 f g a) 
type Rep (Compose k1 k2 f g a) = D1 * (MetaData "Compose" "Data.Functor.Compose" "base" True) (C1 * (MetaCons "Compose" PrefixI True) (S1 * (MetaSel (Just Symbol "getCompose") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (f (g a)))))

newtype Fix (f :: * -> *) :: (* -> *) -> * #

Constructors

Fix (f (Fix f)) 

Instances

Eq1 f => Eq (Fix f) 

Methods

(==) :: Fix f -> Fix f -> Bool #

(/=) :: Fix f -> Fix f -> Bool #

(Typeable (* -> *) f, Data (f (Fix f))) => Data (Fix f) 

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Fix f -> c (Fix f) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Fix f) #

toConstr :: Fix f -> Constr #

dataTypeOf :: Fix f -> DataType #

dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c (Fix f)) #

dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Fix f)) #

gmapT :: (forall b. Data b => b -> b) -> Fix f -> Fix f #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Fix f -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Fix f -> r #

gmapQ :: (forall d. Data d => d -> u) -> Fix f -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Fix f -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Fix f -> m (Fix f) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Fix f -> m (Fix f) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Fix f -> m (Fix f) #

Ord1 f => Ord (Fix f) 

Methods

compare :: Fix f -> Fix f -> Ordering #

(<) :: Fix f -> Fix f -> Bool #

(<=) :: Fix f -> Fix f -> Bool #

(>) :: Fix f -> Fix f -> Bool #

(>=) :: Fix f -> Fix f -> Bool #

max :: Fix f -> Fix f -> Fix f #

min :: Fix f -> Fix f -> Fix f #

Read1 f => Read (Fix f) 
Show1 f => Show (Fix f) 

Methods

showsPrec :: Int -> Fix f -> ShowS #

show :: Fix f -> String #

showList :: [Fix f] -> ShowS #

NFData (Fix (Compose * * (LocatedBy Position) SexpF)) # 

Methods

rnf :: Fix (Compose * * (LocatedBy Position) SexpF) -> () #

NFData (Fix SexpF) # 

Methods

rnf :: Fix SexpF -> () #

Functor f => Recursive (Fix f) 

Methods

project :: Fix f -> Base (Fix f) (Fix f) #

cata :: (Base (Fix f) a -> a) -> Fix f -> a #

para :: (Base (Fix f) (Fix f, a) -> a) -> Fix f -> a #

gpara :: (Corecursive (Fix f), Comonad w) => (forall b. Base (Fix f) (w b) -> w (Base (Fix f) b)) -> (Base (Fix f) (EnvT (Fix f) w a) -> a) -> Fix f -> a #

prepro :: Corecursive (Fix f) => (forall b. Base (Fix f) b -> Base (Fix f) b) -> (Base (Fix f) a -> a) -> Fix f -> a #

gprepro :: (Corecursive (Fix f), Comonad w) => (forall b. Base (Fix f) (w b) -> w (Base (Fix f) b)) -> (forall c. Base (Fix f) c -> Base (Fix f) c) -> (Base (Fix f) (w a) -> a) -> Fix f -> a #

Functor f => Corecursive (Fix f) 

Methods

embed :: Base (Fix f) (Fix f) -> Fix f #

ana :: (a -> Base (Fix f) a) -> a -> Fix f #

apo :: (a -> Base (Fix f) (Either (Fix f) a)) -> a -> Fix f #

postpro :: Recursive (Fix f) => (forall b. Base (Fix f) b -> Base (Fix f) b) -> (a -> Base (Fix f) a) -> a -> Fix f #

gpostpro :: (Recursive (Fix f), Monad m) => (forall b. m (Base (Fix f) b) -> Base (Fix f) (m b)) -> (forall c. Base (Fix f) c -> Base (Fix f) c) -> (a -> Base (Fix f) (m a)) -> a -> Fix f #

type Base (Fix f) 
type Base (Fix f) = f

Conversion

Orphan instances