hydra-0.8.0: Type-aware transformations for data and programs
Safe HaskellSafe-Inferred
LanguageHaskell2010

Hydra.Dsl.Base

Description

Base DSL which makes use of phantom types. Use this DSL for defining programs as opposed to data type definitions.

Documentation

with :: TTerm a -> [Field] -> TTerm a Source #

wrap :: Name -> TTerm a -> TTerm b Source #

map :: Map (TTerm a) (TTerm b) -> TTerm (Map a b) Source #

variant :: Name -> Name -> TTerm a -> TTerm b Source #

function :: Type -> Type -> TTerm a -> TTerm a Source #

apply :: TTerm (a -> b) -> TTerm a -> TTerm b Source #

pair :: TTerm a -> TTerm b -> TTerm (a, b) Source #

list :: [TTerm a] -> TTerm [a] Source #

match :: Name -> Maybe (TTerm b) -> [Field] -> TTerm (u -> b) Source #

first :: TTerm ((a, b) -> a) Source #

fold :: TTerm (b -> a -> b) -> TTerm (b -> [a] -> b) Source #

second :: TTerm ((a, b) -> b) Source #

compose :: TTerm (b -> c) -> TTerm (a -> b) -> TTerm (a -> c) Source #

(<.>) :: TTerm (b -> c) -> TTerm (a -> b) -> TTerm (a -> c) Source #

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

project :: Name -> Name -> TTerm (a -> b) Source #

set :: Set (TTerm a) -> TTerm (Set a) Source #

(>:) :: String -> TTerm a -> Field infixr 0 Source #

(-->) :: TCase a -> TTerm (a -> b) -> Field infixr 0 Source #

(@@) :: TTerm (a -> b) -> TTerm a -> TTerm b Source #

functionN :: [Type] -> TTerm a -> TTerm a Source #

lambda :: String -> TTerm x -> TTerm (a -> b) Source #

record :: Name -> [Field] -> TTerm a Source #

opt :: Maybe (TTerm a) -> TTerm (Maybe a) Source #

constant :: TTerm a -> TTerm (b -> a) Source #

identity :: TTerm (a -> a) Source #

inject :: Name -> Name -> TTerm a -> TTerm b Source #

matchOpt :: TTerm b -> TTerm (a -> b) -> TTerm (Maybe a -> b) Source #

typed :: Type -> TTerm a -> TTerm a Source #

unwrap :: Name -> TTerm (a -> b) Source #

ifElse :: TTerm Bool -> TTerm a -> TTerm a -> TTerm a Source #

doc :: String -> TTerm a -> TTerm a Source #

fld :: Name -> TTerm a -> TField a Source #

(>>:) :: Name -> TTerm a -> Field infixr 0 Source #

(@->) :: a -> b -> (a, b) infixr 0 Source #

caseField :: TCase a -> TTerm (a -> b) -> Field Source #

apply2 :: TTerm (a -> b -> c) -> TTerm a -> TTerm b -> TTerm c Source #

ifOpt :: TTerm (Maybe a) -> TTerm b -> TTerm (a -> b) -> TTerm b Source #

inject2 :: Name -> Name -> TTerm (a -> b) Source #

matchData :: Name -> Maybe (TTerm b) -> [(Name, TTerm (x -> b))] -> TTerm (a -> b) Source #

matchToEnum :: Name -> Name -> Maybe (TTerm b) -> [(Name, Name)] -> TTerm (a -> b) Source #

matchToUnion :: Name -> Name -> Maybe (TTerm b) -> [(Name, Field)] -> TTerm (a -> b) Source #

nom :: Name -> TTerm a -> TTerm b Source #

Orphan instances

IsString (TTerm a) Source # 
Instance details

Methods

fromString :: String -> TTerm a #