Copyright | (c) 2023 Yamada Ryo |
---|---|
License | MPL-2.0 (see the file LICENSE) |
Maintainer | ymdfield@outlook.jp |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | GHC2021 |
Control.Freer
Description
A type class to abstract away the encoding details of the Freer carriers.
Synopsis
- class (forall e. c (f e)) => Freer c f | f -> c where
- liftIns :: e a -> f e a
- interpretFreer :: c m => (e ~> m) -> f e a -> m a
- retractFreer :: c m => f m a -> m a
- transformFreer :: (e ~> e') -> f e a -> f e' a
- reinterpretFreer :: (e ~> f e) -> f e a -> f e a
- newtype ViaFreer (fr :: InsClass -> Type -> Type) (e :: InsClass) (a :: Type) = ViaFreer {
- viaFreer :: fr e a
- class InjectIns e (e' :: InsClass) where
- class InjectInsBy key e (e' :: InsClass) | key e' -> e where
- injectInsBy :: e ~> e'
- overFreer :: (fr e a -> fr' e' b) -> ViaFreer fr e a -> ViaFreer fr' e' b
- reencodeFreer :: (Freer c fr, Freer c' fr', c (fr' f)) => fr f ~> fr' f
- data StateKey
Documentation
class (forall e. c (f e)) => Freer c f | f -> c where Source #
A type class to abstract away the encoding details of the Freer carrier.
Minimal complete definition
Methods
liftIns :: e a -> f e a Source #
Lift a instruction into a Freer carrier.
interpretFreer :: c m => (e ~> m) -> f e a -> m a Source #
retractFreer :: c m => f m a -> m a Source #
transformFreer :: (e ~> e') -> f e a -> f e' a Source #
Translate instructions embedded in a Freer carrier.
reinterpretFreer :: (e ~> f e) -> f e a -> f e a Source #
Instances
Freer Applicative Ap Source # | |
Defined in Control.Freer Methods liftIns :: e a -> Ap e a Source # interpretFreer :: forall m (e :: Type -> Type) a. Applicative m => (e ~> m) -> Ap e a -> m a Source # retractFreer :: Applicative m => Ap m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Ap e a -> Ap e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Ap e) -> Ap e a -> Ap e a Source # | |
Freer Applicative Ap Source # | |
Defined in Control.Freer Methods liftIns :: e a -> Ap e a Source # interpretFreer :: forall m (e :: Type -> Type) a. Applicative m => (e ~> m) -> Ap e a -> m a Source # retractFreer :: Applicative m => Ap m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Ap e a -> Ap e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Ap e) -> Ap e a -> Ap e a Source # | |
Freer Functor Coyoneda Source # | |
Defined in Control.Freer Methods liftIns :: e a -> Coyoneda e a Source # interpretFreer :: forall m (e :: Type -> Type) a. Functor m => (e ~> m) -> Coyoneda e a -> m a Source # retractFreer :: Functor m => Coyoneda m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> Coyoneda e a -> Coyoneda e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> Coyoneda e) -> Coyoneda e a -> Coyoneda e a Source # | |
Freer Monad FreerChurch Source # | |
Defined in Control.Monad.Freer.Church Methods liftIns :: e a -> FreerChurch e a Source # interpretFreer :: forall m (e :: Type -> Type) a. Monad m => (e ~> m) -> FreerChurch e a -> m a Source # retractFreer :: Monad m => FreerChurch m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerChurch e a -> FreerChurch e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerChurch e) -> FreerChurch e a -> FreerChurch e a Source # | |
Freer Monad FreerTree Source # | |
Defined in Control.Monad.Freer.Tree Methods liftIns :: e a -> FreerTree e a Source # interpretFreer :: forall m (e :: Type -> Type) a. Monad m => (e ~> m) -> FreerTree e a -> m a Source # retractFreer :: Monad m => FreerTree m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerTree e a -> FreerTree e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerTree e) -> FreerTree e a -> FreerTree e a Source # | |
(Freer c fr, forall (e :: InsClass). c (ViaFreer fr e)) => Freer c (ViaFreer fr) Source # | |
Defined in Control.Freer Methods liftIns :: e a -> ViaFreer fr e a Source # interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> ViaFreer fr e a -> m a Source # retractFreer :: c m => ViaFreer fr m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> ViaFreer fr e a -> ViaFreer fr e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> ViaFreer fr e) -> ViaFreer fr e a -> ViaFreer fr e a Source # | |
(forall (e :: Type -> Type). c (FreerFinal c e)) => Freer c (FreerFinal c) Source # | |
Defined in Control.Freer.Final Methods liftIns :: e a -> FreerFinal c e a Source # interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> FreerFinal c e a -> m a Source # retractFreer :: c m => FreerFinal c m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> FreerFinal c e a -> FreerFinal c e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> FreerFinal c e) -> FreerFinal c e a -> FreerFinal c e a Source # |
newtype ViaFreer (fr :: InsClass -> Type -> Type) (e :: InsClass) (a :: Type) Source #
Instances
(Freer c fr, InjectInsBy key e e') => SendInsBy (key :: k) e (ViaFreer fr e') Source # | |
Defined in Control.Freer | |
(Freer c fr, forall (e :: InsClass). c (ViaFreer fr e)) => Freer c (ViaFreer fr) Source # | |
Defined in Control.Freer Methods liftIns :: e a -> ViaFreer fr e a Source # interpretFreer :: forall m (e :: Type -> Type) a. c m => (e ~> m) -> ViaFreer fr e a -> m a Source # retractFreer :: c m => ViaFreer fr m a -> m a Source # transformFreer :: forall (e :: Type -> Type) (e' :: Type -> Type) a. (e ~> e') -> ViaFreer fr e a -> ViaFreer fr e' a Source # reinterpretFreer :: forall (e :: Type -> Type) a. (e ~> ViaFreer fr e) -> ViaFreer fr e a -> ViaFreer fr e a Source # | |
(Freer c fr, InjectIns e e') => SendIns e (ViaFreer fr e') Source # | |
Defined in Control.Freer | |
(Freer c fr, InjectInsBy StateKey (State s) e, Monad (fr e)) => MonadState s (ViaFreer fr e) Source # | |
(MonadBase b (fr e), Monad b) => MonadBase b (ViaFreer fr e) Source # | |
Defined in Control.Freer | |
(Freer c fr, InjectIns Fail e, Monad (fr e)) => MonadFail (ViaFreer fr e) Source # | |
Defined in Control.Freer | |
(Freer c fr, InjectIns IO e, Monad (fr e)) => MonadIO (ViaFreer fr e) Source # | |
Defined in Control.Freer | |
Foldable (fr e) => Foldable (ViaFreer fr e) Source # | |
Defined in Control.Freer Methods fold :: Monoid m => ViaFreer fr e m -> m # foldMap :: Monoid m => (a -> m) -> ViaFreer fr e a -> m # foldMap' :: Monoid m => (a -> m) -> ViaFreer fr e a -> m # foldr :: (a -> b -> b) -> b -> ViaFreer fr e a -> b # foldr' :: (a -> b -> b) -> b -> ViaFreer fr e a -> b # foldl :: (b -> a -> b) -> b -> ViaFreer fr e a -> b # foldl' :: (b -> a -> b) -> b -> ViaFreer fr e a -> b # foldr1 :: (a -> a -> a) -> ViaFreer fr e a -> a # foldl1 :: (a -> a -> a) -> ViaFreer fr e a -> a # toList :: ViaFreer fr e a -> [a] # null :: ViaFreer fr e a -> Bool # length :: ViaFreer fr e a -> Int # elem :: Eq a => a -> ViaFreer fr e a -> Bool # maximum :: Ord a => ViaFreer fr e a -> a # minimum :: Ord a => ViaFreer fr e a -> a # | |
Traversable (fr e) => Traversable (ViaFreer fr e) Source # | |
Defined in Control.Freer Methods traverse :: Applicative f => (a -> f b) -> ViaFreer fr e a -> f (ViaFreer fr e b) # sequenceA :: Applicative f => ViaFreer fr e (f a) -> f (ViaFreer fr e a) # mapM :: Monad m => (a -> m b) -> ViaFreer fr e a -> m (ViaFreer fr e b) # sequence :: Monad m => ViaFreer fr e (m a) -> m (ViaFreer fr e a) # | |
(Freer c fr, InjectIns Empty e, InjectIns Choose e, Monad (fr e)) => Alternative (ViaFreer fr e) Source # | |
Applicative (fr e) => Applicative (ViaFreer fr e) Source # | |
Defined in Control.Freer Methods pure :: a -> ViaFreer fr e a # (<*>) :: ViaFreer fr e (a -> b) -> ViaFreer fr e a -> ViaFreer fr e b # liftA2 :: (a -> b -> c) -> ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e c # (*>) :: ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e b # (<*) :: ViaFreer fr e a -> ViaFreer fr e b -> ViaFreer fr e a # | |
Functor (fr e) => Functor (ViaFreer fr e) Source # | |
Monad (fr e) => Monad (ViaFreer fr e) Source # | |
(Freer c fr, InjectIns Empty e, InjectIns Choose e, Monad (fr e)) => MonadPlus (ViaFreer fr e) Source # | |
Read (fr e a) => Read (ViaFreer fr e a) Source # | |
Show (fr e a) => Show (ViaFreer fr e a) Source # | |
Eq (fr e a) => Eq (ViaFreer fr e a) Source # | |
Ord (fr e a) => Ord (ViaFreer fr e a) Source # | |
Defined in Control.Freer Methods compare :: ViaFreer fr e a -> ViaFreer fr e a -> Ordering # (<) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool # (<=) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool # (>) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool # (>=) :: ViaFreer fr e a -> ViaFreer fr e a -> Bool # max :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a # min :: ViaFreer fr e a -> ViaFreer fr e a -> ViaFreer fr e a # |
class InjectInsBy key e (e' :: InsClass) | key e' -> e where Source #
Methods
injectInsBy :: e ~> e' Source #