symantic-base-0.1.0.20210703: Commonly useful symantics for Embedded Domain-Specific Languages (EDSL)
Safe HaskellNone
LanguageHaskell2010

Symantic.Dityped.Derive

Synopsis

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.

Methods

derive :: repr a ka -> Derived repr a ka Source #

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.

Methods

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.

Minimal complete definition

Nothing

Methods

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.

Minimal complete definition

Nothing

Methods

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.

Minimal complete definition

Nothing

Methods

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.

Minimal complete definition

Nothing

Methods

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 #