Safe Haskell | None |
---|---|
Language | GHC2021 |
Bowtie.Memo
Synopsis
- newtype MemoF (f :: k -> Type) k1 (r :: k) where
- memoFKey :: forall {k1} (f :: k1 -> Type) k2 (r :: k1). MemoF f k2 r -> k2
- memoFVal :: forall {k1} f k2 (r :: k1). MemoF f k2 r -> f r
- newtype Memo (f :: Type -> Type) k where
- mkMemo :: (Recursive t, Base t ~ f) => (f k -> k) -> t -> Memo f k
- mkMemoM :: (Monad m, Recursive t, Base t ~ f, Traversable f) => (f k -> m k) -> t -> m (Memo f k)
- reMkMemo :: forall (f :: Type -> Type) j k. Functor f => (MemoF f j (Memo f k) -> k) -> Memo f j -> Memo f k
- reMkMemoM :: forall (f :: Type -> Type) m j k. (Traversable f, Monad m) => (MemoF f j (Memo f k) -> m k) -> Memo f j -> m (Memo f k)
- unMkMemo :: forall t (f :: Type -> Type) k. (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 :: forall (f :: Type -> Type) k. 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 :: forall (f :: Type -> Type) k x. Functor f => (Memo f k -> x) -> Memo f k -> Memo f x
- memoFix :: forall (f :: Type -> Type) k. Functor f => Memo f k -> Fix f
- memoStructEq :: forall (f :: Type -> Type) k. (Functor f, Eq (f (Fix f))) => Memo f k -> Memo f k -> Bool
Documentation
newtype MemoF (f :: k -> Type) k1 (r :: k) Source #
The base functor for a Memo
Instances
HasAttr d s k2 => HasAttr d s (MemoF f k2 x) Source # | |
WithAttr d s k2 j => WithAttr d s (MemoF f k2 x) (MemoF f j x) Source # | |
Foldable f => Foldable (MemoF f k) Source # | |
Defined in Bowtie.Memo Methods fold :: Monoid m => MemoF f k m -> m # foldMap :: Monoid m => (a -> m) -> MemoF f k a -> m # foldMap' :: Monoid m => (a -> m) -> MemoF f k a -> m # foldr :: (a -> b -> b) -> b -> MemoF f k a -> b # foldr' :: (a -> b -> b) -> b -> MemoF f k a -> b # foldl :: (b -> a -> b) -> b -> MemoF f k a -> b # foldl' :: (b -> a -> b) -> b -> MemoF f k a -> b # foldr1 :: (a -> a -> a) -> MemoF f k a -> a # foldl1 :: (a -> a -> a) -> MemoF f k a -> a # toList :: MemoF f k a -> [a] # length :: MemoF f k a -> Int # elem :: Eq a => a -> MemoF f k a -> Bool # maximum :: Ord a => MemoF f k a -> a # minimum :: Ord a => MemoF f k a -> a # | |
Traversable f => Traversable (MemoF f k) Source # | |
Defined in Bowtie.Memo | |
(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.Memo Methods 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.Memo | |
Pretty (f r) => Pretty (MemoF f k2 r) Source # | |
Defined in Bowtie.Memo |
newtype Memo (f :: Type -> Type) k Source #
An annotated Fix
Instances
HasAttr d s k => HasAttr d s (Memo f k) Source # | |
Foldable f => Foldable (Memo f) Source # | |
Defined in Bowtie.Memo Methods 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.Memo Methods 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 # | |
Defined in Bowtie.Memo | |
Pretty (f (Memo f k)) => Pretty (Memo f k) Source # | |
Defined in Bowtie.Memo | |
Functor f => Corecursive (Memo f k) Source # | |
Defined in Bowtie.Memo Methods 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.Memo Methods 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 # | |
Defined in Bowtie.Memo |
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.
mkMemoM :: (Monad m, Recursive t, Base t ~ f, Traversable f) => (f k -> m k) -> t -> m (Memo f k) Source #
reMkMemo :: forall (f :: Type -> Type) j k. Functor f => (MemoF f j (Memo f k) -> k) -> Memo f j -> Memo f k Source #
Rebuild a memo with a new annotation.
reMkMemoM :: forall (f :: Type -> Type) m j k. (Traversable f, Monad m) => (MemoF f j (Memo f k) -> m k) -> Memo f j -> m (Memo f k) Source #
Rebuild a memo with a new annotation, effectfully.
unMkMemo :: forall t (f :: Type -> Type) k. (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
memoExtend :: forall (f :: Type -> Type) k x. Functor f => (Memo f k -> x) -> Memo f k -> Memo f x Source #
Re-annotate top-down