hydra-0.5.0: src/main/haskell/Hydra/Dsl/Core.hs
module Hydra.Dsl.Core where
import Hydra.Kernel
import Hydra.Dsl.Base as Base
import qualified Data.Map as M
import qualified Data.Maybe as Y
annotatedTerm :: Datum Term -> Datum (M.Map String Term) -> Datum AnnotatedTerm
annotatedTerm subject annotation = Base.record _AnnotatedTerm [
_AnnotatedTerm_subject>>: subject,
_AnnotatedTerm_annotation>>: annotation]
annotatedTermSubject :: Datum (AnnotatedTerm -> Term)
annotatedTermSubject = project _AnnotatedTerm _AnnotatedTerm_subject
annotatedTermAnnotation :: Datum (AnnotatedTerm -> M.Map String Term)
annotatedTermAnnotation = project _AnnotatedTerm _AnnotatedTerm_annotation
annotatedType :: Datum Type -> Datum (M.Map String Term) -> Datum AnnotatedType
annotatedType subject annotation = Base.record _AnnotatedType [
_AnnotatedType_subject>>: subject,
_AnnotatedType_annotation>>: annotation]
annotatedTypeSubject :: Datum (AnnotatedType -> Type)
annotatedTypeSubject = project _AnnotatedType _AnnotatedType_subject
annotatedTypeAnnotation :: Datum (AnnotatedType -> M.Map String Term)
annotatedTypeAnnotation = project _AnnotatedType _AnnotatedType_annotation
application :: Datum Term -> Datum Term -> Datum (Application)
application function argument = Base.record _Application [
_Application_function>>: function,
_Application_argument>>: argument]
applicationFunction :: Datum (Application -> Term)
applicationFunction = project _Application _Application_function
applicationArgument :: Datum (Application -> Term)
applicationArgument = project _Application _Application_argument
applicationType :: Datum Type -> Datum Type -> Datum (ApplicationType)
applicationType function argument = Base.record _ApplicationType [
_ApplicationType_function>>: function,
_ApplicationType_argument>>: argument]
applicationTypeFunction :: Datum (ApplicationType -> Type)
applicationTypeFunction = project _ApplicationType _ApplicationType_function
applicationTypeArgument :: Datum (ApplicationType -> Type)
applicationTypeArgument = project _ApplicationType _ApplicationType_argument
caseStatement :: Datum Name -> Datum (Maybe Term) -> Datum [Field] -> Datum (CaseStatement)
caseStatement typeName defaultTerm cases = Base.record _CaseStatement [
_CaseStatement_typeName>>: typeName,
_CaseStatement_default>>: defaultTerm,
_CaseStatement_cases>>: cases]
caseStatementTypeName :: Datum (CaseStatement -> Name)
caseStatementTypeName = project _CaseStatement _CaseStatement_typeName
caseStatementDefault :: Datum (CaseStatement -> Maybe Term)
caseStatementDefault = project _CaseStatement _CaseStatement_default
caseStatementCases :: Datum (CaseStatement -> [Field])
caseStatementCases = project _CaseStatement _CaseStatement_cases
field :: Datum Name -> Datum Term -> Datum Field
field name term = Base.record _Field [
_Field_name>>: name,
_Field_term>>: term]
fieldName :: Datum (Field -> Name)
fieldName = project _Field _Field_name
fieldTerm :: Datum (Field -> Term)
fieldTerm = project _Field _Field_term
fieldType :: Datum Name -> Datum Type -> Datum (FieldType)
fieldType name typ = Base.record _FieldType [
_FieldType_name>>: name,
_FieldType_type>>: typ]
fieldTypeName :: Datum (FieldType -> Name)
fieldTypeName = project _FieldType _FieldType_name
fieldTypeType :: Datum (FieldType -> Type)
fieldTypeType = project _FieldType _FieldType_type
functionType :: Datum Type -> Datum Type -> Datum (FunctionType)
functionType domain codomain = Base.record _FunctionType [
_FunctionType_domain>>: domain,
_FunctionType_codomain>>: codomain]
functionTypeDomain :: Datum (FunctionType -> Type)
functionTypeDomain = project _FunctionType _FunctionType_domain
functionTypeCodomain :: Datum (FunctionType -> Type)
functionTypeCodomain = project _FunctionType _FunctionType_codomain
injection :: Datum Name -> Datum Field -> Datum Injection
injection typeName field = Base.record _Injection [
_Injection_typeName>>: typeName,
_Injection_field>>: field]
injectionTypeName :: Datum (Injection -> Name)
injectionTypeName = project _Injection _Injection_typeName
injectionField :: Datum (Injection -> Field)
injectionField = project _Injection _Injection_field
lambda :: Datum Name -> Datum Term -> Datum Lambda
lambda parameter body = Base.record _Lambda [
_Lambda_parameter>>: parameter,
_Lambda_body>>: body]
lambdaParameter :: Datum (Lambda -> Name)
lambdaParameter = project _Lambda _Lambda_parameter
lambdaBody :: Datum (Lambda -> Term)
lambdaBody = project _Lambda _Lambda_body
lambdaType :: Datum Name -> Datum Type -> Datum LambdaType
lambdaType parameter body = Base.record _LambdaType [
_LambdaType_parameter>>: parameter,
_LambdaType_body>>: body]
lambdaTypeParameter :: Datum (LambdaType -> Name)
lambdaTypeParameter = project _LambdaType _LambdaType_parameter
lambdaTypeBody :: Datum (LambdaType -> Type)
lambdaTypeBody = project _LambdaType _LambdaType_body
letExpression :: Datum [LetBinding] -> Datum Term -> Datum Let
letExpression bindings environment = Base.record _Let [
_Let_bindings>>: bindings,
_Let_environment>>: environment]
letBindings :: Datum (Let -> [LetBinding])
letBindings = project _Let _Let_bindings
letBindingName :: Datum (LetBinding -> Name)
letBindingName = project _LetBinding _LetBinding_name
letBindingTerm :: Datum (LetBinding -> Term)
letBindingTerm = project _LetBinding _LetBinding_term
letBindingType :: Datum (LetBinding -> Y.Maybe TypeScheme)
letBindingType = project _LetBinding _LetBinding_type
letEnvironment :: Datum (Let -> Term)
letEnvironment = project _Let _Let_environment
literalBinary :: Datum String -> Datum Literal
literalBinary = variant _Literal _Literal_binary
literalBoolean :: Datum Bool -> Datum Literal
literalBoolean = variant _Literal _Literal_boolean
literalFloat :: Datum FloatValue -> Datum Literal
literalFloat = variant _Literal _Literal_float
literalInteger :: Datum IntegerValue -> Datum Literal
literalInteger = variant _Literal _Literal_integer
mapType :: Datum Type -> Datum Type -> Datum MapType
mapType keys values = Base.record _MapType [
_MapType_keys>>: keys,
_MapType_values>>: values]
mapTypeKeys :: Datum (MapType -> Type)
mapTypeKeys = project _MapType _MapType_keys
mapTypeValues :: Datum (MapType -> Type)
mapTypeValues = project _MapType _MapType_values
optionalCases :: Datum Term -> Datum Term -> Datum OptionalCases
optionalCases nothing just = Base.record _OptionalCases [
_OptionalCases_nothing>>: nothing,
_OptionalCases_just>>: just]
optionalCasesNothing :: Datum (OptionalCases -> Term)
optionalCasesNothing = project _OptionalCases _OptionalCases_nothing
optionalCasesJust :: Datum (OptionalCases -> Term)
optionalCasesJust = project _OptionalCases _OptionalCases_just
projectionTypeName :: Datum (Projection -> Name)
projectionTypeName = project _Projection _Projection_typeName
projectionField :: Datum (Projection -> Name)
projectionField = project _Projection _Projection_field
record :: Datum Name -> Datum [Field] -> Datum Record
record typeName fields = Base.record _Record [
_Record_typeName>>: typeName,
_Record_fields>>: fields]
recordTypeName :: Datum (Record -> Name)
recordTypeName = project _Record _Record_typeName
recordFields :: Datum (Record -> [Field])
recordFields = project _Record _Record_fields
rowType :: Datum Name -> Datum (Maybe Name) -> Datum [FieldType] -> Datum (RowType)
rowType typeName extends fields = Base.record _RowType [
_RowType_typeName>>: typeName,
_RowType_extends>>: extends,
_RowType_fields>>: fields]
rowTypeTypeName :: Datum (RowType -> Name)
rowTypeTypeName = project _RowType _RowType_typeName
rowTypeExtends :: Datum (RowType -> Maybe Name)
rowTypeExtends = project _RowType _RowType_extends
rowTypeFields :: Datum (RowType -> [FieldType])
rowTypeFields = project _RowType _RowType_fields
sum :: Datum Int -> Datum Int -> Datum Term -> Datum Sum
sum index size term = Base.record _Sum [
_Sum_index>>: index,
_Sum_size>>: size,
_Sum_term>>: term]
sumIndex :: Datum (Sum -> Int)
sumIndex = project _Sum _Sum_index
sumSize :: Datum (Sum -> Int)
sumSize = project _Sum _Sum_size
sumTerm :: Datum (Sum -> Term)
sumTerm = project _Sum _Sum_term
termAnnotated :: Datum AnnotatedTerm -> Datum Term
termAnnotated = variant _Term _Term_annotated
tupleProjectionArity :: Datum (TupleProjection -> Int)
tupleProjectionArity = project _TupleProjection _TupleProjection_arity
tupleProjectionIndex :: Datum (TupleProjection -> Int)
tupleProjectionIndex = project _TupleProjection _TupleProjection_index
typeSchemeVariables :: Datum (TypeScheme -> [Name])
typeSchemeVariables = project _TypeScheme _TypeScheme_variables
typeSchemeType :: Datum (TypeScheme -> Type)
typeSchemeType = project _TypeScheme _TypeScheme_type
typedTermTerm :: Datum (TypedTerm -> Term)
typedTermTerm = project _TypedTerm _TypedTerm_term
wrappedTerm :: Datum Name -> Datum Term -> Datum WrappedTerm
wrappedTerm typeName object = Base.record _WrappedTerm [
_WrappedTerm_typeName>>: typeName,
_WrappedTerm_object>>: object]
wrappedTermTypeName :: Datum (WrappedTerm -> Name)
wrappedTermTypeName = project _WrappedTerm _WrappedTerm_typeName
wrappedTermObject :: Datum (WrappedTerm -> Term)
wrappedTermObject = project _WrappedTerm _WrappedTerm_object
wrappedType :: Datum Name -> Datum Type -> Datum WrappedType
wrappedType typeName object = Base.record _WrappedType [
_WrappedType_typeName>>: typeName,
_WrappedType_object>>: object]
wrappedTypeTypeName :: Datum (WrappedType -> Name)
wrappedTypeTypeName = project _WrappedType _WrappedType_typeName
wrappedTypeObject :: Datum (WrappedType -> Type)
wrappedTypeObject = project _WrappedType _WrappedType_object