Safe Haskell | None |
---|---|
Language | Haskell2010 |
Symantic.Derive
Synopsis
- type family Derived (repr :: Type -> Type) :: Type -> Type
- class Derivable repr where
- class LiftDerived repr where
- liftDerived :: Derived repr a -> repr a
- class LiftDerived1 repr where
- liftDerived1 :: (Derived repr a -> Derived repr b) -> repr a -> repr b
- class LiftDerived2 repr where
- liftDerived2 :: (Derived repr a -> Derived repr b -> Derived repr c) -> repr a -> repr b -> repr c
- class LiftDerived3 repr where
- liftDerived3 :: (Derived repr a -> Derived repr b -> Derived repr c -> Derived repr d) -> repr a -> repr b -> repr c -> repr d
- 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 Source #
The representation that (repr)
derives to.
Instances
type Derived Viewer Source # | Unusual, but enables to leverage default definition of methods. |
Defined in Symantic.Viewer | |
type Derived (SomeData repr) Source # | |
Defined in Symantic.Data | |
type Derived (Data able repr) Source # | |
Defined in Symantic.Data | |
type Derived (SharingFinalizer _letName repr) Source # | |
Defined in Symantic.SharingObserver | |
type Derived (SharingObserver letName repr) Source # | |
Defined in Symantic.SharingObserver |
Class Derivable
class Derivable repr 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 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 -> repr a Source #
Instances
LiftDerived Viewer Source # | |
Defined in Symantic.Viewer | |
(Eq letName, Hashable letName) => LiftDerived (SharingFinalizer letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived :: Derived (SharingFinalizer letName repr) a -> SharingFinalizer letName repr a Source # | |
(Referenceable letName repr, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived (SharingObserver letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived :: Derived (SharingObserver letName repr) a -> SharingObserver letName repr a 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 -> Derived repr b) -> repr a -> repr b Source #
default liftDerived1 :: LiftDerived repr => Derivable repr => (Derived repr a -> Derived repr b) -> repr a -> repr b Source #
Instances
(Eq letName, Hashable letName) => LiftDerived1 (SharingFinalizer letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived1 :: (Derived (SharingFinalizer letName repr) a -> Derived (SharingFinalizer letName repr) b) -> SharingFinalizer letName repr a -> SharingFinalizer letName repr b Source # | |
(Referenceable letName repr, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived1 (SharingObserver letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived1 :: (Derived (SharingObserver letName repr) a -> Derived (SharingObserver letName repr) b) -> SharingObserver letName repr a -> SharingObserver letName repr b Source # |
Class LiftDerived2
class LiftDerived2 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with two arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived1
.
Minimal complete definition
Nothing
Methods
liftDerived2 :: (Derived repr a -> Derived repr b -> Derived repr c) -> repr a -> repr b -> repr c Source #
default liftDerived2 :: LiftDerived repr => Derivable repr => (Derived repr a -> Derived repr b -> Derived repr c) -> repr a -> repr b -> repr c Source #
Instances
(Eq letName, Hashable letName) => LiftDerived2 (SharingFinalizer letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived2 :: (Derived (SharingFinalizer letName repr) a -> Derived (SharingFinalizer letName repr) b -> Derived (SharingFinalizer letName repr) c) -> SharingFinalizer letName repr a -> SharingFinalizer letName repr b -> SharingFinalizer letName repr c Source # | |
(Referenceable letName repr, MakeLetName letName, Eq letName, Hashable letName, Show letName) => LiftDerived2 (SharingObserver letName repr) Source # | |
Defined in Symantic.SharingObserver Methods liftDerived2 :: (Derived (SharingObserver letName repr) a -> Derived (SharingObserver letName repr) b -> Derived (SharingObserver letName repr) c) -> SharingObserver letName repr a -> SharingObserver letName repr b -> SharingObserver letName repr c Source # |
Class LiftDerived3
class LiftDerived3 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived2
.
Minimal complete definition
Nothing
Methods
liftDerived3 :: (Derived repr a -> Derived repr b -> Derived repr c -> Derived repr d) -> repr a -> repr b -> repr c -> repr d Source #
default liftDerived3 :: LiftDerived repr => Derivable repr => (Derived repr a -> Derived repr b -> Derived repr c -> Derived repr d) -> repr a -> repr b -> repr c -> repr d Source #
Instances
Class LiftDerived4
class LiftDerived4 repr where Source #
Convenient wrapper of derive
and liftDerived
for functions with three arguments.
Note that the default instance relies upon LiftDerived
, not LiftDerived3
.
Minimal complete definition
Nothing
Methods
liftDerived4 :: (Derived repr a -> Derived repr b -> Derived repr c -> Derived repr d -> Derived repr e) -> repr a -> repr b -> repr c -> repr d -> repr e Source #
default liftDerived4 :: LiftDerived repr => Derivable repr => (Derived repr a -> Derived repr b -> Derived repr c -> Derived repr d -> Derived repr e) -> repr a -> repr b -> repr c -> repr d -> repr e Source #
Instances
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 #