Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Some useful fixpoints of Functors and Bifunctors.
Synopsis
- type family Base1 (f :: Type -> Type) :: Type -> Type -> Type
- class (Bifunctor (Base1 f), Functor f) => Recursive1 f where
- class (Bifunctor (Base1 f), Functor f) => Corecursive1 f where
- cata1 :: (Recursive1 f, Base1 f ~ g) => (g a b -> b) -> f a -> b
- cata1M :: (Monad m, Recursive1 f, Base1 f ~ g, Bitraversable g) => (g a b -> m b) -> f a -> m b
- fmapViaBi :: (Recursive1 f, Corecursive1 f, Base1 f ~ g) => (a -> b) -> f a -> f b
- foldrViaBi :: (Recursive1 f, Base1 f ~ g, Bifoldable g) => (a -> b -> b) -> b -> f a -> b
- traverseViaBi :: (Recursive1 f, Corecursive1 f, Base1 f ~ g, Bitraversable g, Applicative m) => (a -> m b) -> f a -> m (f b)
- newtype Fix f = Fix {}
- mkFix :: (Recursive t, Base t ~ f) => t -> Fix f
- unMkFix :: (Corecursive t, Base t ~ f) => Fix f -> t
- transFix :: Functor f => (forall x. f x -> g x) -> Fix f -> Fix g
- newtype Knot g a = Knot {}
- mkKnot :: (Recursive1 f, Base1 f ~ g) => f a -> Knot g a
- unMkKnot :: (Corecursive1 f, Base1 f ~ g) => Knot g a -> f a
- transKnot :: Bifunctor g => (forall x y. g x y -> h x y) -> Knot g a -> Knot h a
- data Anno k v = Anno {}
- annoUnit :: v -> Reader k (Anno k v)
- annoUnitM :: Applicative m => v -> ReaderT k m (Anno k v)
- annoCounit :: Anno k (Reader k v) -> v
- annoCounitM :: Anno k (ReaderT k m v) -> m v
- annoLeft :: (Anno k v -> x) -> v -> Reader k x
- annoLeftM :: (Anno k v -> m x) -> v -> ReaderT k m x
- annoRight :: (v -> Reader k x) -> Anno k v -> x
- annoRightM :: (v -> ReaderT k m x) -> Anno k v -> m x
- newtype MemoF f k r = MemoF {}
- pattern MemoFP :: k -> f r -> MemoF f k r
- memoFKey :: MemoF f k r -> k
- memoFVal :: MemoF f k r -> f r
- newtype Memo f k = Memo {}
- pattern MemoP :: k -> f (Memo f k) -> Memo f k
- mkMemo :: (Recursive t, Base t ~ f) => (f k -> k) -> t -> Memo f k
- unMkMemo :: (Corecursive t, Base t ~ f) => Memo f k -> t
- transMemo :: Functor f => (forall x. f x -> g x) -> Memo f k -> Memo g k
- memoKey :: Memo f k -> k
- memoVal :: Memo f k -> f (Memo f k)
- memoCata :: Functor f => (f x -> Reader k x) -> Memo f k -> x
- memoCataM :: (Monad m, Traversable f) => (f x -> ReaderT k m x) -> Memo f k -> m x
- memoRight :: (f (Memo f k) -> Reader k x) -> Memo f k -> x
- memoRightM :: (f (Memo f k) -> ReaderT k m x) -> Memo f k -> m x
- memoExtend :: Functor f => (Memo f k -> x) -> Memo f k -> Memo f x
- newtype JotF g k a r = JotF {}
- pattern JotFP :: k -> g a r -> JotF g k a r
- jotFKey :: JotF g k a r -> k
- jotFVal :: JotF g k a r -> g a r
- newtype Jot g k a = Jot {}
- pattern JotP :: k -> g a (Jot g k a) -> Jot g k a
- mkJot :: (Recursive1 t, Base1 t ~ g) => (g a k -> k) -> t a -> Jot g k a
- unMkJot :: (Corecursive1 t, Base1 t ~ g) => Jot g k a -> t a
- annoJot :: Anno b (g a (Jot g b a)) -> Jot g b a
- transJot :: Bifunctor g => (forall x. g a x -> h a x) -> Jot g k a -> Jot h k a
- jotKey :: Jot g k a -> k
- jotVal :: Jot g k a -> g a (Jot g k a)
- jotCata :: Bifunctor g => (g a x -> Reader k x) -> Jot g k a -> x
- jotCataM :: Bifunctor g => (g a (m x) -> ReaderT k m x) -> Jot g k a -> m x
- jotRight :: (g a (Jot g k a) -> Reader k x) -> Jot g k a -> x
- jotRightM :: (g a (Jot g k a) -> ReaderT k m x) -> Jot g k a -> m x
- jotExtend :: Bifunctor g => (Jot g k a -> x) -> Jot g k a -> Jot g x a
Documentation
class (Bifunctor (Base1 f), Functor f) => Corecursive1 f where Source #
Corecursive
for Bifunctors
cata1M :: (Monad m, Recursive1 f, Base1 f ~ g, Bitraversable g) => (g a b -> m b) -> f a -> m b Source #
cataM
for Bifunctors
fmapViaBi :: (Recursive1 f, Corecursive1 f, Base1 f ~ g) => (a -> b) -> f a -> f b Source #
A useful default fmap
foldrViaBi :: (Recursive1 f, Base1 f ~ g, Bifoldable g) => (a -> b -> b) -> b -> f a -> b Source #
A useful default foldr
traverseViaBi :: (Recursive1 f, Corecursive1 f, Base1 f ~ g, Bitraversable g, Applicative m) => (a -> m b) -> f a -> m (f b) Source #
A useful default traverse
A basic Functor fixpoint like you'd see anywhere.
Instances
IsString (f (Fix f)) => IsString (Fix f) Source # | |
Defined in Bowtie fromString :: String -> Fix f # | |
Show (f (Fix f)) => Show (Fix f) Source # | |
Eq (f (Fix f)) => Eq (Fix f) Source # | |
Ord (f (Fix f)) => Ord (Fix f) Source # | |
Pretty (f (Fix f)) => Pretty (Fix f) Source # | |
Functor f => Corecursive (Fix f) Source # | |
Defined in Bowtie 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 # | |
Functor f => Recursive (Fix f) Source # | |
Defined in Bowtie 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 # | |
type Base (Fix f) Source # | |
mkFix :: (Recursive t, Base t ~ f) => t -> Fix f Source #
Pull a recursive structure apart and retie as a Fix
.
transFix :: Functor f => (forall x. f x -> g x) -> Fix f -> Fix g Source #
Transform the base Functor.
A fixpoint for a Bifunctor where the second type variable contains the recursive structure.
Instances
(Bifunctor g, Bifoldable g) => Foldable (Knot g) Source # | |
Defined in Bowtie fold :: Monoid m => Knot g m -> m # foldMap :: Monoid m => (a -> m) -> Knot g a -> m # foldMap' :: Monoid m => (a -> m) -> Knot g a -> m # foldr :: (a -> b -> b) -> b -> Knot g a -> b # foldr' :: (a -> b -> b) -> b -> Knot g a -> b # foldl :: (b -> a -> b) -> b -> Knot g a -> b # foldl' :: (b -> a -> b) -> b -> Knot g a -> b # foldr1 :: (a -> a -> a) -> Knot g a -> a # foldl1 :: (a -> a -> a) -> Knot g a -> a # elem :: Eq a => a -> Knot g a -> Bool # maximum :: Ord a => Knot g a -> a # minimum :: Ord a => Knot g a -> a # | |
Bitraversable g => Traversable (Knot g) Source # | |
Bifunctor g => Functor (Knot g) Source # | |
Bifunctor g => Corecursive1 (Knot g) Source # | |
Bifunctor g => Recursive1 (Knot g) Source # | |
IsString (g a (Knot g a)) => IsString (Knot g a) Source # | |
Defined in Bowtie fromString :: String -> Knot g a # | |
Show (g a (Knot g a)) => Show (Knot g a) Source # | |
Eq (g a (Knot g a)) => Eq (Knot g a) Source # | |
Ord (g a (Knot g a)) => Ord (Knot g a) Source # | |
Pretty (g a (Knot g a)) => Pretty (Knot g a) Source # | |
type Base1 (Knot g) Source # | |
mkKnot :: (Recursive1 f, Base1 f ~ g) => f a -> Knot g a Source #
Pull a recursive structure apart and retie as a Knot
.
transKnot :: Bifunctor g => (forall x y. g x y -> h x y) -> Knot g a -> Knot h a Source #
Transform the base Bifunctor.
An "annotation" with associated value.
Instances
Bifoldable Anno Source # | |
Bifunctor Anno Source # | |
Bitraversable Anno Source # | |
Defined in Bowtie bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Anno a b -> f (Anno c d) # | |
Foldable (Anno k) Source # | |
Defined in Bowtie fold :: Monoid m => Anno k m -> m # foldMap :: Monoid m => (a -> m) -> Anno k a -> m # foldMap' :: Monoid m => (a -> m) -> Anno k a -> m # foldr :: (a -> b -> b) -> b -> Anno k a -> b # foldr' :: (a -> b -> b) -> b -> Anno k a -> b # foldl :: (b -> a -> b) -> b -> Anno k a -> b # foldl' :: (b -> a -> b) -> b -> Anno k a -> b # foldr1 :: (a -> a -> a) -> Anno k a -> a # foldl1 :: (a -> a -> a) -> Anno k a -> a # elem :: Eq a => a -> Anno k a -> Bool # maximum :: Ord a => Anno k a -> a # minimum :: Ord a => Anno k a -> a # | |
Traversable (Anno k) Source # | |
Monoid k => Applicative (Anno k) Source # | |
Functor (Anno k) Source # | |
Comonad (Anno k) Source # | |
Semigroup k => Apply (Anno k) Source # | |
(Monoid k, IsString v) => IsString (Anno k v) Source # | |
Defined in Bowtie fromString :: String -> Anno k v # | |
(Show k, Typeable k, Exception v) => Exception (Anno k v) Source # | |
Defined in Bowtie toException :: Anno k v -> SomeException # fromException :: SomeException -> Maybe (Anno k v) # displayException :: Anno k v -> String # | |
(Show k, Show v) => Show (Anno k v) Source # | |
(Eq k, Eq v) => Eq (Anno k v) Source # | |
(Ord k, Ord v) => Ord (Anno k v) Source # | |
Pretty v => Pretty (Anno k v) Source # | |
annoCounit :: Anno k (Reader k v) -> v Source #
counit
from Adjunction
annoCounitM :: Anno k (ReaderT k m v) -> m v Source #
annoRightM :: (v -> ReaderT k m x) -> Anno k v -> m x Source #
The base functor for a Memo
Instances
(Applicative f, Monoid k) => Applicative (MemoF f k) Source # | |
Functor f => Functor (MemoF f k) Source # | |
(Apply f, Semigroup k) => Apply (MemoF f k) Source # | |
(Monoid k2, IsString (f r)) => IsString (MemoF f k2 r) Source # | |
Defined in Bowtie fromString :: String -> MemoF f k2 r # | |
(Show k2, Show (f r)) => Show (MemoF f k2 r) Source # | |
(Eq k2, Eq (f r)) => Eq (MemoF f k2 r) Source # | |
(Ord k2, Ord (f r)) => Ord (MemoF f k2 r) Source # | |
Defined in Bowtie | |
Pretty (f r) => Pretty (MemoF f k2 r) Source # | |
An annotated Fix
Instances
Foldable f => Foldable (Memo f) Source # | |
Defined in Bowtie fold :: Monoid m => Memo f m -> m # foldMap :: Monoid m => (a -> m) -> Memo f a -> m # foldMap' :: Monoid m => (a -> m) -> Memo f a -> m # foldr :: (a -> b -> b) -> b -> Memo f a -> b # foldr' :: (a -> b -> b) -> b -> Memo f a -> b # foldl :: (b -> a -> b) -> b -> Memo f a -> b # foldl' :: (b -> a -> b) -> b -> Memo f a -> b # foldr1 :: (a -> a -> a) -> Memo f a -> a # foldl1 :: (a -> a -> a) -> Memo f a -> a # elem :: Eq a => a -> Memo f a -> Bool # maximum :: Ord a => Memo f a -> a # minimum :: Ord a => Memo f a -> a # | |
Traversable f => Traversable (Memo f) Source # | |
Functor f => Functor (Memo f) Source # | |
(Monoid k, IsString (f (Memo f k))) => IsString (Memo f k) Source # | |
Defined in Bowtie fromString :: String -> Memo f k # | |
(Show k, Show (f (Memo f k))) => Show (Memo f k) Source # | |
(Eq k, Eq (f (Memo f k))) => Eq (Memo f k) Source # | |
(Ord k, Ord (f (Memo f k))) => Ord (Memo f k) Source # | |
Pretty (f (Memo f k)) => Pretty (Memo f k) Source # | |
Functor f => Corecursive (Memo f k) Source # | |
Defined in Bowtie embed :: Base (Memo f k) (Memo f k) -> Memo f k # ana :: (a -> Base (Memo f k) a) -> a -> Memo f k # apo :: (a -> Base (Memo f k) (Either (Memo f k) a)) -> a -> Memo f k # postpro :: Recursive (Memo f k) => (forall b. Base (Memo f k) b -> Base (Memo f k) b) -> (a -> Base (Memo f k) a) -> a -> Memo f k # gpostpro :: (Recursive (Memo f k), Monad m) => (forall b. m (Base (Memo f k) b) -> Base (Memo f k) (m b)) -> (forall c. Base (Memo f k) c -> Base (Memo f k) c) -> (a -> Base (Memo f k) (m a)) -> a -> Memo f k # | |
Functor f => Recursive (Memo f k) Source # | |
Defined in Bowtie project :: Memo f k -> Base (Memo f k) (Memo f k) # cata :: (Base (Memo f k) a -> a) -> Memo f k -> a # para :: (Base (Memo f k) (Memo f k, a) -> a) -> Memo f k -> a # gpara :: (Corecursive (Memo f k), Comonad w) => (forall b. Base (Memo f k) (w b) -> w (Base (Memo f k) b)) -> (Base (Memo f k) (EnvT (Memo f k) w a) -> a) -> Memo f k -> a # prepro :: Corecursive (Memo f k) => (forall b. Base (Memo f k) b -> Base (Memo f k) b) -> (Base (Memo f k) a -> a) -> Memo f k -> a # gprepro :: (Corecursive (Memo f k), Comonad w) => (forall b. Base (Memo f k) (w b) -> w (Base (Memo f k) b)) -> (forall c. Base (Memo f k) c -> Base (Memo f k) c) -> (Base (Memo f k) (w a) -> a) -> Memo f k -> a # | |
type Base (Memo f k) Source # | |
mkMemo :: (Recursive t, Base t ~ f) => (f k -> k) -> t -> Memo f k Source #
Pull a recursive structure apart and retie as a Memo
, using the given
function to calculate a key for every level.
unMkMemo :: (Corecursive t, Base t ~ f) => Memo f k -> t Source #
Forget keys at every level and convert back to a plain structure.
transMemo :: Functor f => (forall x. f x -> g x) -> Memo f k -> Memo g k Source #
Transform the base functor.
memoCataM :: (Monad m, Traversable f) => (f x -> ReaderT k m x) -> Memo f k -> m x Source #
cataM
but nicer
memoRight :: (f (Memo f k) -> Reader k x) -> Memo f k -> x Source #
Peek at the top value like annoRight
memoRightM :: (f (Memo f k) -> ReaderT k m x) -> Memo f k -> m x Source #
Peek at the top value like annoRightM
The base functor for a Jot
Instances
Bifoldable g => Bifoldable (JotF g k) Source # | |
Bifunctor g => Bifunctor (JotF g k) Source # | |
Bitraversable g => Bitraversable (JotF g k) Source # | |
Defined in Bowtie bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> JotF g k a b -> f (JotF g k c d) # | |
Functor (g a) => Functor (JotF g k2 a) Source # | |
(Monoid k3, IsString (g a r)) => IsString (JotF g k3 a r) Source # | |
Defined in Bowtie fromString :: String -> JotF g k3 a r # | |
(Show k3, Show (g a r)) => Show (JotF g k3 a r) Source # | |
(Eq k3, Eq (g a r)) => Eq (JotF g k3 a r) Source # | |
(Ord k3, Ord (g a r)) => Ord (JotF g k3 a r) Source # | |
Defined in Bowtie compare :: JotF g k3 a r -> JotF g k3 a r -> Ordering # (<) :: JotF g k3 a r -> JotF g k3 a r -> Bool # (<=) :: JotF g k3 a r -> JotF g k3 a r -> Bool # (>) :: JotF g k3 a r -> JotF g k3 a r -> Bool # (>=) :: JotF g k3 a r -> JotF g k3 a r -> Bool # | |
Pretty (g a r) => Pretty (JotF g k3 a r) Source # | |
An annotated Knot
Instances
Bifoldable g => Bifoldable (Jot g) Source # | |
Bifunctor g => Bifunctor (Jot g) Source # | |
Bitraversable g => Bitraversable (Jot g) Source # | |
Defined in Bowtie bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Jot g a b -> f (Jot g c d) # | |
(Bifunctor g, Bifoldable g) => Foldable (Jot g k) Source # | |
Defined in Bowtie fold :: Monoid m => Jot g k m -> m # foldMap :: Monoid m => (a -> m) -> Jot g k a -> m # foldMap' :: Monoid m => (a -> m) -> Jot g k a -> m # foldr :: (a -> b -> b) -> b -> Jot g k a -> b # foldr' :: (a -> b -> b) -> b -> Jot g k a -> b # foldl :: (b -> a -> b) -> b -> Jot g k a -> b # foldl' :: (b -> a -> b) -> b -> Jot g k a -> b # foldr1 :: (a -> a -> a) -> Jot g k a -> a # foldl1 :: (a -> a -> a) -> Jot g k a -> a # elem :: Eq a => a -> Jot g k a -> Bool # maximum :: Ord a => Jot g k a -> a # minimum :: Ord a => Jot g k a -> a # | |
Bitraversable g => Traversable (Jot g k) Source # | |
Bifunctor g => Functor (Jot g k) Source # | |
Bifunctor g => Corecursive1 (Jot g k) Source # | |
Bifunctor g => Recursive1 (Jot g k) Source # | |
(Monoid k, IsString (g a (Jot g k a))) => IsString (Jot g k a) Source # | |
Defined in Bowtie fromString :: String -> Jot g k a # | |
(Show k, Show (g a (Jot g k a))) => Show (Jot g k a) Source # | |
(Eq k, Eq (g a (Jot g k a))) => Eq (Jot g k a) Source # | |
(Ord k, Ord (g a (Jot g k a))) => Ord (Jot g k a) Source # | |
Defined in Bowtie | |
Pretty (g a (Jot g k a)) => Pretty (Jot g k a) Source # | |
type Base1 (Jot g k) Source # | |
mkJot :: (Recursive1 t, Base1 t ~ g) => (g a k -> k) -> t a -> Jot g k a Source #
Pull a recursive structure apart and retie as a Jot
, using the given
function to calculate a key for every level.
unMkJot :: (Corecursive1 t, Base1 t ~ g) => Jot g k a -> t a Source #
Forget keys at every level and convert back to a plain structure.
transJot :: Bifunctor g => (forall x. g a x -> h a x) -> Jot g k a -> Jot h k a Source #
Transform the base functor.
jotRight :: (g a (Jot g k a) -> Reader k x) -> Jot g k a -> x Source #
Peek at the top value like annoRight