Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type family Derived (repr :: Type -> Type -> Type) :: Type -> Type -> Type
- class Derivable repr where
- class LiftDerived repr where
- liftDerived :: Derived repr a ka -> repr a ka
- class LiftDerived1 repr where
- liftDerived1 :: (Derived repr a ka -> Derived repr b kb) -> repr a ka -> repr b kb
- class LiftDerived2 repr where
- liftDerived2 :: (Derived repr a ka -> Derived repr b kb -> Derived repr c kc) -> repr a ka -> repr b kb -> repr c kc
- class LiftDerived3 repr where
- liftDerived3 :: (Derived repr a ka -> Derived repr b kb -> Derived repr c kc -> Derived repr d kd) -> repr a ka -> repr b kb -> repr c kc -> repr d kd
- class LiftDerived4 repr where
- type FromDerived sym repr = (LiftDerived repr, sym (Derived repr))
- type FromDerived1 sym repr = (LiftDerived1 repr, sym (Derived repr))
- type FromDerived2 sym repr = (LiftDerived2 repr, sym (Derived repr))
- type FromDerived3 sym repr = (LiftDerived3 repr, sym (Derived repr))
- type FromDerived4 sym repr = (LiftDerived4 repr, sym (Derived repr))
Type family Derived
type family Derived (repr :: Type -> Type -> Type) :: Type -> Type -> Type Source #
The representation that (repr)
derives to.
Class Derivable
class Derivable repr where Source #
Derivable an interpreter to a another interpreter
determined by the Derived
open type family.
This is mostly useful when running the interpreter stack,
but also when going back from an initial encoding to a final one.
Note that derive
and liftDerived
are not necessarily reciprocical functions.
Class LiftDerived
class LiftDerived repr where Source #
Lift the Derived
interpreter of an interpreter, to that interpreter.
This is mostly useful to give default values to class methods
in order to skip their definition for interpreters
where liftDerived
can already apply the right semantic.
Note that derive
and liftDerived
are not necessarily reciprocical functions.
liftDerived :: Derived repr a ka -> repr a ka Source #
Class LiftDerived1
class LiftDerived1 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with a single argument.
Nothing
liftDerived1 :: (Derived repr a ka -> Derived repr b kb) -> repr a ka -> repr b kb Source #
default liftDerived1 :: LiftDerived repr => Derivable repr => (Derived repr a ka -> Derived repr b kb) -> repr a ka -> repr b kb Source #
Class LiftDerived2
class LiftDerived2 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with two arguments.
Nothing
liftDerived2 :: (Derived repr a ka -> Derived repr b kb -> Derived repr c kc) -> repr a ka -> repr b kb -> repr c kc Source #
default liftDerived2 :: LiftDerived repr => Derivable repr => (Derived repr a ka -> Derived repr b kb -> Derived repr c kc) -> repr a ka -> repr b kb -> repr c kc Source #
Class LiftDerived3
class LiftDerived3 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Nothing
liftDerived3 :: (Derived repr a ka -> Derived repr b kb -> Derived repr c kc -> Derived repr d kd) -> repr a ka -> repr b kb -> repr c kc -> repr d kd Source #
default liftDerived3 :: LiftDerived repr => Derivable repr => (Derived repr a ka -> Derived repr b kb -> Derived repr c kc -> Derived repr d kd) -> repr a ka -> repr b kb -> repr c kc -> repr d kd Source #
Class LiftDerived4
class LiftDerived4 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Nothing
liftDerived4 :: (Derived repr a ka -> Derived repr b kb -> Derived repr c kc -> Derived repr d kd -> Derived repr e ke) -> repr a ka -> repr b kb -> repr c kc -> repr d kd -> repr e ke Source #
default liftDerived4 :: LiftDerived repr => Derivable repr => (Derived repr a ka -> Derived repr b kb -> Derived repr c kc -> Derived repr d kd -> Derived repr e ke) -> repr a ka -> repr b kb -> repr c kc -> repr d kd -> repr e ke Source #
Type synonyms FromDerived*
type FromDerived sym repr = (LiftDerived repr, sym (Derived repr)) Source #
Convenient type synonym for using liftDerived
on symantic class (sym)
.
type FromDerived1 sym repr = (LiftDerived1 repr, sym (Derived repr)) Source #
type FromDerived2 sym repr = (LiftDerived2 repr, sym (Derived repr)) Source #
type FromDerived3 sym repr = (LiftDerived3 repr, sym (Derived repr)) Source #
type FromDerived4 sym repr = (LiftDerived4 repr, sym (Derived repr)) Source #