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

Symantic.Typed.Lang

Synopsis

Class Abstractable

class Abstractable repr where Source #

Minimal complete definition

Nothing

Methods

(.@) :: repr (a -> b) -> repr a -> repr b infixl 9 Source #

Application, aka. unabstract.

default (.@) :: FromDerived2 Abstractable repr => repr (a -> b) -> repr a -> repr b Source #

lam :: (repr a -> repr b) -> repr (a -> b) Source #

Lambda term abstraction, in HOAS (Higher-Order Abstract Syntax) style.

default lam :: FromDerived Abstractable repr => Derivable repr => (repr a -> repr b) -> repr (a -> b) Source #

lam1 :: (repr a -> repr b) -> repr (a -> b) Source #

Like lam but whose argument is used only once, hence safe to beta-reduce (inline) without duplicating work.

default lam1 :: FromDerived Abstractable repr => Derivable repr => (repr a -> repr b) -> repr (a -> b) Source #

const :: repr (a -> b -> a) Source #

default const :: FromDerived Abstractable repr => repr (a -> b -> a) Source #

flip :: repr ((a -> b -> c) -> b -> a -> c) Source #

default flip :: FromDerived Abstractable repr => repr ((a -> b -> c) -> b -> a -> c) Source #

id :: repr (a -> a) Source #

default id :: FromDerived Abstractable repr => repr (a -> a) Source #

(.) :: repr ((b -> c) -> (a -> b) -> a -> c) infixr 9 Source #

default (.) :: FromDerived Abstractable repr => repr ((b -> c) -> (a -> b) -> a -> c) Source #

($) :: repr ((a -> b) -> a -> b) infixr 0 Source #

default ($) :: FromDerived Abstractable repr => repr ((a -> b) -> a -> b) Source #

var :: repr a -> repr a Source #

default var :: FromDerived1 Abstractable repr => repr a -> repr a Source #

Instances

Instances details
Abstractable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

(.@) :: View (a -> b) -> View a -> View b Source #

lam :: (View a -> View b) -> View (a -> b) Source #

lam1 :: (View a -> View b) -> View (a -> b) Source #

const :: View (a -> b -> a) Source #

flip :: View ((a -> b -> c) -> b -> a -> c) Source #

id :: View (a -> a) Source #

(.) :: View ((b -> c) -> (a -> b) -> a -> c) Source #

($) :: View ((a -> b) -> a -> b) Source #

var :: View a -> View a Source #

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

Defined in Symantic.Typed.Data

Methods

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

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

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

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

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

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

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

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

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

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

Defined in Symantic.Typed.Data

Methods

derive :: Data Abstractable repr a -> Derived (Data Abstractable repr) a Source #

data Data Abstractable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Abstractable repr a where

Class Anythingable

class Anythingable repr where Source #

Minimal complete definition

Nothing

Methods

anything :: repr a -> repr a Source #

Instances

Instances details
Anythingable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

anything :: View a -> View a Source #

Anythingable (SomeData repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

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

Defined in Symantic.Typed.Data

Methods

derive :: Data Anythingable repr a -> Derived (Data Anythingable repr) a Source #

Anythingable (Data Anythingable repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

anything :: Data Anythingable repr a -> Data Anythingable repr a Source #

data Data Anythingable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Anythingable repr a where

Class Bottomable

class Bottomable repr where Source #

Methods

bottom :: repr a Source #

Instances

Instances details
Bottomable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

bottom :: View a Source #

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

Defined in Symantic.Typed.Data

Methods

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

data Data Bottomable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Bottomable repr a where

Class Constantable

class Constantable c repr where Source #

Minimal complete definition

Nothing

Methods

constant :: c -> repr c Source #

default constant :: FromDerived (Constantable c) repr => c -> repr c Source #

Instances

Instances details
Show c => Constantable c View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

constant :: c -> View c Source #

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

Defined in Symantic.Typed.Data

Methods

constant :: c -> SomeData repr c Source #

Constantable c (Data (Constantable c) repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

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

Defined in Symantic.Typed.Data

Methods

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

data Data (Constantable c) repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data (Constantable c) repr a where

bool :: Constantable Bool repr => Bool -> repr Bool Source #

char :: Constantable Char repr => Char -> repr Char Source #

unit :: Constantable () repr => repr () Source #

Class Eitherable

class Eitherable repr where Source #

Minimal complete definition

Nothing

Methods

left :: repr (l -> Either l r) Source #

default left :: FromDerived Eitherable repr => repr (l -> Either l r) Source #

right :: repr (r -> Either l r) Source #

default right :: FromDerived Eitherable repr => repr (r -> Either l r) Source #

Instances

Instances details
Eitherable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

left :: View (l -> Either l r) Source #

right :: View (r -> Either l r) Source #

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

Defined in Symantic.Typed.Data

Methods

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

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

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

Defined in Symantic.Typed.Data

Methods

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

Eitherable (Data Eitherable repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

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

data Data Eitherable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Eitherable repr a where

Class Equalable

class Equalable repr where Source #

Minimal complete definition

Nothing

Methods

equal :: Eq a => repr (a -> a -> Bool) infix 4 Source #

default equal :: FromDerived Equalable repr => Eq a => repr (a -> a -> Bool) Source #

Instances

Instances details
Equalable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

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

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

Defined in Symantic.Typed.Data

Methods

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

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

Defined in Symantic.Typed.Data

Methods

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

Equalable (Data Equalable repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

data Data Equalable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Equalable repr a where

(==) :: (Abstractable repr, Equalable repr, Eq a) => repr (a -> a -> Bool) infix 4 Source #

Class IfThenElseable

class IfThenElseable repr where Source #

Minimal complete definition

Nothing

Methods

ifThenElse :: repr Bool -> repr a -> repr a -> repr a Source #

default ifThenElse :: FromDerived3 IfThenElseable repr => repr Bool -> repr a -> repr a -> repr a Source #

Instances

Instances details
IfThenElseable repr => IfThenElseable (SomeData repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

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

Defined in Symantic.Typed.Data

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

Defined in Symantic.Typed.Data

data Data IfThenElseable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data IfThenElseable repr a where

Class Listable

class Listable repr where Source #

Minimal complete definition

Nothing

Methods

cons :: repr (a -> [a] -> [a]) Source #

default cons :: FromDerived Listable repr => repr (a -> [a] -> [a]) Source #

nil :: repr [a] Source #

default nil :: FromDerived Listable repr => repr [a] Source #

Instances

Instances details
Listable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

cons :: View (a -> [a] -> [a]) Source #

nil :: View [a] Source #

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

Defined in Symantic.Typed.Data

Methods

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

nil :: SomeData repr [a] Source #

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

Defined in Symantic.Typed.Data

Methods

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

Listable (Data Listable repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

nil :: Data Listable repr [a] Source #

data Data Listable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Listable repr a where

Class Maybeable

class Maybeable repr where Source #

Minimal complete definition

Nothing

Methods

nothing :: repr (Maybe a) Source #

default nothing :: FromDerived Maybeable repr => repr (Maybe a) Source #

just :: repr (a -> Maybe a) Source #

default just :: FromDerived Maybeable repr => repr (a -> Maybe a) Source #

Instances

Instances details
Maybeable View Source # 
Instance details

Defined in Symantic.Typed.View

Methods

nothing :: View (Maybe a) Source #

just :: View (a -> Maybe a) Source #

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

Defined in Symantic.Typed.Data

Methods

nothing :: SomeData repr (Maybe a) Source #

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

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

Defined in Symantic.Typed.Data

Methods

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

Maybeable (Data Maybeable repr) Source # 
Instance details

Defined in Symantic.Typed.Data

Methods

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

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

data Data Maybeable repr a Source # 
Instance details

Defined in Symantic.Typed.Data

data Data Maybeable repr a where