hydra-0.5.1: 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 :: Datum a -> [Field] -> Datum a Source #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(-->) :: Case a -> Datum (a -> b) -> Field infixr 0 Source #

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

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

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

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

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

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

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

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

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

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

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

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

fld :: Name -> Datum a -> Fld a Source #

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

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

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

caseField :: Case a -> Datum (a -> b) -> Field Source #

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

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

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

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

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

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

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

Orphan instances

IsString (Datum a) Source # 
Instance details

Methods

fromString :: String -> Datum a #