Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- type Semantic = Type -> Type
- type family Derived (sem :: Semantic) :: Semantic
- class Derivable sem where
- class LiftDerived sem where
- liftDerived :: Derived sem a -> sem a
- class LiftDerived1 sem where
- liftDerived1 :: (Derived sem a -> Derived sem b) -> sem a -> sem b
- class LiftDerived2 sem where
- liftDerived2 :: (Derived sem a -> Derived sem b -> Derived sem c) -> sem a -> sem b -> sem c
- class LiftDerived3 sem where
- liftDerived3 :: (Derived sem a -> Derived sem b -> Derived sem c -> Derived sem d) -> sem a -> sem b -> sem c -> sem d
- class LiftDerived4 sem where
- type FromDerived syn sem = (LiftDerived sem, syn (Derived sem))
- type FromDerived1 syn sem = (LiftDerived1 sem, syn (Derived sem))
- type FromDerived2 syn sem = (LiftDerived2 sem, syn (Derived sem))
- type FromDerived3 syn sem = (LiftDerived3 sem, syn (Derived sem))
- type FromDerived4 syn sem = (LiftDerived4 sem, syn (Derived sem))
Type Semantic
Type family Derived
type family Derived (sem :: Semantic) :: Semantic Source #
The next Semantic
that (sem)
derives to.
Instances
type Derived Viewer Source # | Unusual, but enables to leverage default definition of methods. |
Defined in Symantic.Semantics.Viewer | |
type Derived (SomeData sem) Source # | |
Defined in Symantic.Syntaxes.Data | |
type Derived (Reader r sem) Source # | |
Defined in Symantic.Semantics.Reader | |
type Derived (SharingFinalizer _letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver | |
type Derived (SharingObserver letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver | |
type Derived (Data able sem) Source # | |
Defined in Symantic.Syntaxes.Data |
Class Derivable
class Derivable sem where Source #
Derive an interpreter to 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.
Instances
Class LiftDerived
class LiftDerived sem 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 sem a -> sem a Source #
Instances
LiftDerived Viewer Source # | |
Defined in Symantic.Semantics.Viewer | |
LiftDerived (Reader r sem) Source # | |
Defined in Symantic.Semantics.Reader | |
(Eq letName, Hashable letName) => LiftDerived (SharingFinalizer letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived :: Derived (SharingFinalizer letName sem) a -> SharingFinalizer letName sem a Source # | |
(Referenceable letName sem, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived (SharingObserver letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived :: Derived (SharingObserver letName sem) a -> SharingObserver letName sem a Source # |
Class LiftDerived1
class LiftDerived1 sem where Source #
Convenient wrapper of derive
and liftDerived
for functions with a single argument.
Nothing
liftDerived1 :: (Derived sem a -> Derived sem b) -> sem a -> sem b Source #
default liftDerived1 :: LiftDerived sem => Derivable sem => (Derived sem a -> Derived sem b) -> sem a -> sem b Source #
Instances
LiftDerived1 (Reader r sem) Source # | |
Defined in Symantic.Semantics.Reader | |
(Eq letName, Hashable letName) => LiftDerived1 (SharingFinalizer letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived1 :: (Derived (SharingFinalizer letName sem) a -> Derived (SharingFinalizer letName sem) b) -> SharingFinalizer letName sem a -> SharingFinalizer letName sem b Source # | |
(Referenceable letName sem, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived1 (SharingObserver letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived1 :: (Derived (SharingObserver letName sem) a -> Derived (SharingObserver letName sem) b) -> SharingObserver letName sem a -> SharingObserver letName sem b Source # |
Class LiftDerived2
class LiftDerived2 sem where Source #
Convenient wrapper of derive
and liftDerived
for functions with two arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived1
.
Nothing
liftDerived2 :: (Derived sem a -> Derived sem b -> Derived sem c) -> sem a -> sem b -> sem c Source #
default liftDerived2 :: LiftDerived sem => Derivable sem => (Derived sem a -> Derived sem b -> Derived sem c) -> sem a -> sem b -> sem c Source #
Instances
LiftDerived2 (Reader r sem) Source # | |
(Eq letName, Hashable letName) => LiftDerived2 (SharingFinalizer letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived2 :: (Derived (SharingFinalizer letName sem) a -> Derived (SharingFinalizer letName sem) b -> Derived (SharingFinalizer letName sem) c) -> SharingFinalizer letName sem a -> SharingFinalizer letName sem b -> SharingFinalizer letName sem c Source # | |
(Referenceable letName sem, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived2 (SharingObserver letName sem) Source # | |
Defined in Symantic.Semantics.SharingObserver liftDerived2 :: (Derived (SharingObserver letName sem) a -> Derived (SharingObserver letName sem) b -> Derived (SharingObserver letName sem) c) -> SharingObserver letName sem a -> SharingObserver letName sem b -> SharingObserver letName sem c Source # |
Class LiftDerived3
class LiftDerived3 sem where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived2
.
Nothing
liftDerived3 :: (Derived sem a -> Derived sem b -> Derived sem c -> Derived sem d) -> sem a -> sem b -> sem c -> sem d Source #
default liftDerived3 :: LiftDerived sem => Derivable sem => (Derived sem a -> Derived sem b -> Derived sem c -> Derived sem d) -> sem a -> sem b -> sem c -> sem d Source #
Instances
Class LiftDerived4
class LiftDerived4 sem where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived3
.
Nothing
liftDerived4 :: (Derived sem a -> Derived sem b -> Derived sem c -> Derived sem d -> Derived sem e) -> sem a -> sem b -> sem c -> sem d -> sem e Source #
default liftDerived4 :: LiftDerived sem => Derivable sem => (Derived sem a -> Derived sem b -> Derived sem c -> Derived sem d -> Derived sem e) -> sem a -> sem b -> sem c -> sem d -> sem e Source #
Instances
Type synonyms FromDerived*
type FromDerived syn sem = (LiftDerived sem, syn (Derived sem)) Source #
Convenient type synonym for using liftDerived
on Syntax
(syn)
.
type FromDerived1 syn sem = (LiftDerived1 sem, syn (Derived sem)) Source #
type FromDerived2 syn sem = (LiftDerived2 sem, syn (Derived sem)) Source #
type FromDerived3 syn sem = (LiftDerived3 sem, syn (Derived sem)) Source #
type FromDerived4 syn sem = (LiftDerived4 sem, syn (Derived sem)) Source #