symantic-base-0.5.0.20221211: Basic symantic combinators for Embedded Domain-Specific Languages (EDSL)
Safe HaskellSafe-Inferred
LanguageHaskell2010

Symantic.Syntaxes.Data

Synopsis

Type SomeData

data SomeData sem a Source #

Constructors

forall able.(Derivable (Data able sem), Typeable able) => SomeData (Data able sem a) 

Instances

Instances details
(Constantable c sem, Typeable c) => Constantable c (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

constant :: c -> SomeData sem c Source #

Abstractable sem => Abstractable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

lam :: (SomeData sem a -> SomeData sem b) -> SomeData sem (a -> b) Source #

lam1 :: (SomeData sem a -> SomeData sem b) -> SomeData sem (a -> b) Source #

var :: SomeData sem a -> SomeData sem a Source #

Anythingable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

anything :: SomeData sem a -> SomeData sem a Source #

Eitherable sem => Eitherable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

either :: SomeData sem ((l -> a) -> (r -> a) -> Either l r -> a) Source #

left :: SomeData sem (l -> Either l r) Source #

right :: SomeData sem (r -> Either l r) Source #

Emptyable sem => Emptyable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

empty :: SomeData sem a Source #

Equalable sem => Equalable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

equal :: Eq a => SomeData sem (a -> a -> Bool) Source #

Abstractable sem => Functionable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

const :: SomeData sem (a -> b -> a) Source #

flip :: SomeData sem ((a -> b -> c) -> b -> a -> c) Source #

id :: SomeData sem (a -> a) Source #

(.) :: SomeData sem ((b -> c) -> (a -> b) -> a -> c) Source #

($) :: SomeData sem ((a -> b) -> a -> b) Source #

IfThenElseable sem => IfThenElseable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

ifThenElse :: SomeData sem Bool -> SomeData sem a -> SomeData sem a -> SomeData sem a Source #

Listable sem => Listable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

cons :: SomeData sem (a -> [a] -> [a]) Source #

nil :: SomeData sem [a] Source #

Maybeable sem => Maybeable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

nothing :: SomeData sem (Maybe a) Source #

just :: SomeData sem (a -> Maybe a) Source #

Semigroupable sem => Semigroupable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

concat :: Semigroup a => SomeData sem (a -> a -> a) Source #

Unabstractable sem => Unabstractable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

(.@) :: SomeData sem (a -> b) -> SomeData sem a -> SomeData sem b Source #

Derivable (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: SomeData sem a -> Derived (SomeData sem) a Source #

Show (SomeData Viewer a) Source # 
Instance details

Defined in Symantic.Semantics.Viewer

type Derived (SomeData sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

type Derived (SomeData sem) = sem

Type Data

data family Data (able :: Syntax) :: Semantic -> Semantic infixr 4 `Cons`, `Concat` Source #

Instances

Instances details
Constantable c (Data (Constantable c) sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

constant :: c -> Data (Constantable c) sem c Source #

Anythingable (Data Anythingable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Eitherable (Data Eitherable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

either :: Data Eitherable sem ((l -> a) -> (r -> a) -> Either l r -> a) Source #

left :: Data Eitherable sem (l -> Either l r) Source #

right :: Data Eitherable sem (r -> Either l r) Source #

Emptyable (Data Emptyable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

empty :: Data Emptyable sem a Source #

Equalable (Data Equalable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

equal :: Eq a => Data Equalable sem (a -> a -> Bool) Source #

IfThenElseable sem => IfThenElseable (Data IfThenElseable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Listable (Data Listable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

cons :: Data Listable sem (a -> [a] -> [a]) Source #

nil :: Data Listable sem [a] Source #

Maybeable (Data Maybeable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

nothing :: Data Maybeable sem (Maybe a) Source #

just :: Data Maybeable sem (a -> Maybe a) Source #

Semigroupable (Data Semigroupable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

concat :: Semigroup a => Data Semigroupable sem (a -> a -> a) Source #

Abstractable sem => Derivable (Data Abstractable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Anythingable sem => Derivable (Data Anythingable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Bottomable sem => Derivable (Data Bottomable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Bottomable sem a -> Derived (Data Bottomable sem) a Source #

Constantable c sem => Derivable (Data (Constantable c) sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data (Constantable c) sem a -> Derived (Data (Constantable c) sem) a Source #

Eitherable sem => Derivable (Data Eitherable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Eitherable sem a -> Derived (Data Eitherable sem) a Source #

Emptyable sem => Derivable (Data Emptyable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Emptyable sem a -> Derived (Data Emptyable sem) a Source #

Equalable sem => Derivable (Data Equalable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Equalable sem a -> Derived (Data Equalable sem) a Source #

IfThenElseable sem => Derivable (Data IfThenElseable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Listable sem => Derivable (Data Listable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Listable sem a -> Derived (Data Listable sem) a Source #

Maybeable sem => Derivable (Data Maybeable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Methods

derive :: Data Maybeable sem a -> Derived (Data Maybeable sem) a Source #

Semigroupable sem => Derivable (Data Semigroupable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

Unabstractable sem => Derivable (Data Unabstractable sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Abstractable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Abstractable sem a where
data Data Anythingable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Anythingable sem a where
data Data Bottomable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Bottomable sem a where
data Data Eitherable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Eitherable sem a where
data Data Emptyable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Emptyable sem a where
data Data Equalable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Equalable sem a where
data Data IfThenElseable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data IfThenElseable sem a where
data Data Listable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Listable sem a where
data Data Maybeable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Maybeable sem a where
data Data Semigroupable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Semigroupable sem a where
data Data Unabstractable sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data Unabstractable sem a where
data Data (Constantable c) sem a Source # 
Instance details

Defined in Symantic.Syntaxes.Data

data Data (Constantable c) sem a where
type Derived (Data able sem) Source # 
Instance details

Defined in Symantic.Syntaxes.Data

type Derived (Data able sem) = sem

pattern Data :: Typeable able => Data able sem a -> SomeData sem a Source #

Convenient utility to pattern-match a SomeData.

unSomeData :: forall able sem a. Typeable able => SomeData sem a -> Maybe (Data able sem a) Source #

(unSomeData c :: Maybe (Data able sem a)) extract the data-constructor from the given SomeData iif. it belongs to the (Data able sem a) data-instance.

normalOrderReduction :: forall sem a. Abstractable sem => IfThenElseable sem => SomeData sem a -> SomeData sem a Source #

Beta-reduce the left-most outer-most lambda abstraction (aka. normal-order reduction), but to avoid duplication of work, only those manually marked as using their variable at most once.

DOC: Demonstrating Lambda Calculus Reduction, Peter Sestoft, 2001, https://www.itu.dk/people/sestoft/papers/sestoft-lamreduce.pdf