hydra-0.15.0: src/main/haskell/Hydra/Encode/Core.hs
-- Note: this is an automatically generated file. Do not edit.
-- | Term encoders for hydra.core
module Hydra.Encode.Core where
import qualified Hydra.Core as Core
import qualified Hydra.Lib.Eithers as Eithers
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Maps as Maps
import qualified Hydra.Lib.Maybes as Maybes
import qualified Hydra.Lib.Pairs as Pairs
import qualified Hydra.Lib.Sets as Sets
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
annotatedTerm :: Core.AnnotatedTerm -> Core.Term
annotatedTerm x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.AnnotatedTerm"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.annotatedTermBody x))},
Core.Field {
Core.fieldName = (Core.Name "annotation"),
Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap name term m)) (Core.annotatedTermAnnotation x))}]})
annotatedType :: Core.AnnotatedType -> Core.Term
annotatedType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.AnnotatedType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (type_ (Core.annotatedTypeBody x))},
Core.Field {
Core.fieldName = (Core.Name "annotation"),
Core.fieldTerm = ((\m -> Core.TermMap (Maps.bimap name term m)) (Core.annotatedTypeAnnotation x))}]})
application :: Core.Application -> Core.Term
application x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Application"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "function"),
Core.fieldTerm = (term (Core.applicationFunction x))},
Core.Field {
Core.fieldName = (Core.Name "argument"),
Core.fieldTerm = (term (Core.applicationArgument x))}]})
applicationType :: Core.ApplicationType -> Core.Term
applicationType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.ApplicationType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "function"),
Core.fieldTerm = (type_ (Core.applicationTypeFunction x))},
Core.Field {
Core.fieldName = (Core.Name "argument"),
Core.fieldTerm = (type_ (Core.applicationTypeArgument x))}]})
binding :: Core.Binding -> Core.Term
binding x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Binding"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "name"),
Core.fieldTerm = (name (Core.bindingName x))},
Core.Field {
Core.fieldName = (Core.Name "term"),
Core.fieldTerm = (term (Core.bindingTerm x))},
Core.Field {
Core.fieldName = (Core.Name "typeScheme"),
Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map typeScheme opt)) (Core.bindingTypeScheme x))}]})
caseStatement :: Core.CaseStatement -> Core.Term
caseStatement x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.CaseStatement"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "typeName"),
Core.fieldTerm = (name (Core.caseStatementTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "default"),
Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map term opt)) (Core.caseStatementDefault x))},
Core.Field {
Core.fieldName = (Core.Name "cases"),
Core.fieldTerm = ((\xs -> Core.TermList (Lists.map field xs)) (Core.caseStatementCases x))}]})
eitherType :: Core.EitherType -> Core.Term
eitherType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.EitherType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "left"),
Core.fieldTerm = (type_ (Core.eitherTypeLeft x))},
Core.Field {
Core.fieldName = (Core.Name "right"),
Core.fieldTerm = (type_ (Core.eitherTypeRight x))}]})
field :: Core.Field -> Core.Term
field x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Field"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "name"),
Core.fieldTerm = (name (Core.fieldName x))},
Core.Field {
Core.fieldName = (Core.Name "term"),
Core.fieldTerm = (term (Core.fieldTerm x))}]})
fieldType :: Core.FieldType -> Core.Term
fieldType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.FieldType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "name"),
Core.fieldTerm = (name (Core.fieldTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "type"),
Core.fieldTerm = (type_ (Core.fieldTypeType x))}]})
floatType :: Core.FloatType -> Core.Term
floatType x =
case x of
Core.FloatTypeBigfloat -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "bigfloat"),
Core.fieldTerm = Core.TermUnit}})
Core.FloatTypeFloat32 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float32"),
Core.fieldTerm = Core.TermUnit}})
Core.FloatTypeFloat64 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float64"),
Core.fieldTerm = Core.TermUnit}})
floatValue :: Core.FloatValue -> Core.Term
floatValue x =
case x of
Core.FloatValueBigfloat v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "bigfloat"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralFloat (Core.FloatValueBigfloat v0)))}})
Core.FloatValueFloat32 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float32"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralFloat (Core.FloatValueFloat32 v0)))}})
Core.FloatValueFloat64 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.FloatValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float64"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralFloat (Core.FloatValueFloat64 v0)))}})
forallType :: Core.ForallType -> Core.Term
forallType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.ForallType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "parameter"),
Core.fieldTerm = (name (Core.forallTypeParameter x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (type_ (Core.forallTypeBody x))}]})
functionType :: Core.FunctionType -> Core.Term
functionType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.FunctionType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "domain"),
Core.fieldTerm = (type_ (Core.functionTypeDomain x))},
Core.Field {
Core.fieldName = (Core.Name "codomain"),
Core.fieldTerm = (type_ (Core.functionTypeCodomain x))}]})
injection :: Core.Injection -> Core.Term
injection x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Injection"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "typeName"),
Core.fieldTerm = (name (Core.injectionTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "field"),
Core.fieldTerm = (field (Core.injectionField x))}]})
integerType :: Core.IntegerType -> Core.Term
integerType x =
case x of
Core.IntegerTypeBigint -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "bigint"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeInt8 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int8"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeInt16 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int16"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeInt32 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int32"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeInt64 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int64"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeUint8 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint8"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeUint16 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint16"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeUint32 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint32"),
Core.fieldTerm = Core.TermUnit}})
Core.IntegerTypeUint64 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint64"),
Core.fieldTerm = Core.TermUnit}})
integerValue :: Core.IntegerValue -> Core.Term
integerValue x =
case x of
Core.IntegerValueBigint v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "bigint"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueBigint v0)))}})
Core.IntegerValueInt8 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int8"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt8 v0)))}})
Core.IntegerValueInt16 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int16"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt16 v0)))}})
Core.IntegerValueInt32 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int32"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 v0)))}})
Core.IntegerValueInt64 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "int64"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt64 v0)))}})
Core.IntegerValueUint8 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint8"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueUint8 v0)))}})
Core.IntegerValueUint16 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint16"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueUint16 v0)))}})
Core.IntegerValueUint32 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint32"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueUint32 v0)))}})
Core.IntegerValueUint64 v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.IntegerValue"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "uint64"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueUint64 v0)))}})
lambda :: Core.Lambda -> Core.Term
lambda x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Lambda"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "parameter"),
Core.fieldTerm = (name (Core.lambdaParameter x))},
Core.Field {
Core.fieldName = (Core.Name "domain"),
Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map type_ opt)) (Core.lambdaDomain x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.lambdaBody x))}]})
let_ :: Core.Let -> Core.Term
let_ x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Let"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "bindings"),
Core.fieldTerm = ((\xs -> Core.TermList (Lists.map binding xs)) (Core.letBindings x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.letBody x))}]})
literal :: Core.Literal -> Core.Term
literal x =
case x of
Core.LiteralBinary v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "binary"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralBinary v0))}})
Core.LiteralBoolean v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "boolean"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralBoolean v0))}})
Core.LiteralDecimal v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "decimal"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralDecimal v0))}})
Core.LiteralFloat v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float"),
Core.fieldTerm = (floatValue v0)}})
Core.LiteralInteger v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "integer"),
Core.fieldTerm = (integerValue v0)}})
Core.LiteralString v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Literal"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "string"),
Core.fieldTerm = (Core.TermLiteral (Core.LiteralString v0))}})
literalType :: Core.LiteralType -> Core.Term
literalType x =
case x of
Core.LiteralTypeBinary -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "binary"),
Core.fieldTerm = Core.TermUnit}})
Core.LiteralTypeBoolean -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "boolean"),
Core.fieldTerm = Core.TermUnit}})
Core.LiteralTypeDecimal -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "decimal"),
Core.fieldTerm = Core.TermUnit}})
Core.LiteralTypeFloat v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "float"),
Core.fieldTerm = (floatType v0)}})
Core.LiteralTypeInteger v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "integer"),
Core.fieldTerm = (integerType v0)}})
Core.LiteralTypeString -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.LiteralType"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "string"),
Core.fieldTerm = Core.TermUnit}})
mapType :: Core.MapType -> Core.Term
mapType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.MapType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "keys"),
Core.fieldTerm = (type_ (Core.mapTypeKeys x))},
Core.Field {
Core.fieldName = (Core.Name "values"),
Core.fieldTerm = (type_ (Core.mapTypeValues x))}]})
name :: Core.Name -> Core.Term
name x =
Core.TermWrap (Core.WrappedTerm {
Core.wrappedTermTypeName = (Core.Name "hydra.core.Name"),
Core.wrappedTermBody = ((\x2 -> Core.TermLiteral (Core.LiteralString x2)) (Core.unName x))})
pairType :: Core.PairType -> Core.Term
pairType x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.PairType"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "first"),
Core.fieldTerm = (type_ (Core.pairTypeFirst x))},
Core.Field {
Core.fieldName = (Core.Name "second"),
Core.fieldTerm = (type_ (Core.pairTypeSecond x))}]})
projection :: Core.Projection -> Core.Term
projection x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Projection"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "typeName"),
Core.fieldTerm = (name (Core.projectionTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "field"),
Core.fieldTerm = (name (Core.projectionField x))}]})
record :: Core.Record -> Core.Term
record x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.Record"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "typeName"),
Core.fieldTerm = (name (Core.recordTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "fields"),
Core.fieldTerm = ((\xs -> Core.TermList (Lists.map field xs)) (Core.recordFields x))}]})
term :: Core.Term -> Core.Term
term x =
case x of
Core.TermAnnotated v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "annotated"),
Core.fieldTerm = (annotatedTerm v0)}})
Core.TermApplication v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "application"),
Core.fieldTerm = (application v0)}})
Core.TermCases v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "cases"),
Core.fieldTerm = (caseStatement v0)}})
Core.TermEither v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "either"),
Core.fieldTerm = (Core.TermEither (Eithers.bimap term term v0))}})
Core.TermInject v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "inject"),
Core.fieldTerm = (injection v0)}})
Core.TermLambda v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "lambda"),
Core.fieldTerm = (lambda v0)}})
Core.TermLet v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "let"),
Core.fieldTerm = (let_ v0)}})
Core.TermList v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "list"),
Core.fieldTerm = (Core.TermList (Lists.map term v0))}})
Core.TermLiteral v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "literal"),
Core.fieldTerm = (literal v0)}})
Core.TermMap v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "map"),
Core.fieldTerm = (Core.TermMap (Maps.bimap term term v0))}})
Core.TermMaybe v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "maybe"),
Core.fieldTerm = (Core.TermMaybe (Maybes.map term v0))}})
Core.TermPair v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "pair"),
Core.fieldTerm = (Core.TermPair (Pairs.bimap term term v0))}})
Core.TermProject v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "project"),
Core.fieldTerm = (projection v0)}})
Core.TermRecord v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "record"),
Core.fieldTerm = (record v0)}})
Core.TermSet v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "set"),
Core.fieldTerm = (Core.TermSet (Sets.map term v0))}})
Core.TermTypeApplication v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "typeApplication"),
Core.fieldTerm = (typeApplicationTerm v0)}})
Core.TermTypeLambda v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "typeLambda"),
Core.fieldTerm = (typeLambda v0)}})
Core.TermUnit -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "unit"),
Core.fieldTerm = Core.TermUnit}})
Core.TermUnwrap v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "unwrap"),
Core.fieldTerm = (name v0)}})
Core.TermVariable v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "variable"),
Core.fieldTerm = (name v0)}})
Core.TermWrap v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Term"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "wrap"),
Core.fieldTerm = (wrappedTerm v0)}})
type_ :: Core.Type -> Core.Term
type_ x =
case x of
Core.TypeAnnotated v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "annotated"),
Core.fieldTerm = (annotatedType v0)}})
Core.TypeApplication v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "application"),
Core.fieldTerm = (applicationType v0)}})
Core.TypeEither v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "either"),
Core.fieldTerm = (eitherType v0)}})
Core.TypeForall v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "forall"),
Core.fieldTerm = (forallType v0)}})
Core.TypeFunction v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "function"),
Core.fieldTerm = (functionType v0)}})
Core.TypeList v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "list"),
Core.fieldTerm = (type_ v0)}})
Core.TypeLiteral v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "literal"),
Core.fieldTerm = (literalType v0)}})
Core.TypeMap v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "map"),
Core.fieldTerm = (mapType v0)}})
Core.TypeMaybe v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "maybe"),
Core.fieldTerm = (type_ v0)}})
Core.TypePair v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "pair"),
Core.fieldTerm = (pairType v0)}})
Core.TypeRecord v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "record"),
Core.fieldTerm = (Core.TermList (Lists.map fieldType v0))}})
Core.TypeSet v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "set"),
Core.fieldTerm = (type_ v0)}})
Core.TypeUnion v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "union"),
Core.fieldTerm = (Core.TermList (Lists.map fieldType v0))}})
Core.TypeUnit -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "unit"),
Core.fieldTerm = Core.TermUnit}})
Core.TypeVariable v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "variable"),
Core.fieldTerm = (name v0)}})
Core.TypeVoid -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "void"),
Core.fieldTerm = Core.TermUnit}})
Core.TypeWrap v0 -> Core.TermInject (Core.Injection {
Core.injectionTypeName = (Core.Name "hydra.core.Type"),
Core.injectionField = Core.Field {
Core.fieldName = (Core.Name "wrap"),
Core.fieldTerm = (type_ v0)}})
typeApplicationTerm :: Core.TypeApplicationTerm -> Core.Term
typeApplicationTerm x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.TypeApplicationTerm"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.typeApplicationTermBody x))},
Core.Field {
Core.fieldName = (Core.Name "type"),
Core.fieldTerm = (type_ (Core.typeApplicationTermType x))}]})
typeLambda :: Core.TypeLambda -> Core.Term
typeLambda x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.TypeLambda"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "parameter"),
Core.fieldTerm = (name (Core.typeLambdaParameter x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.typeLambdaBody x))}]})
typeScheme :: Core.TypeScheme -> Core.Term
typeScheme x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.TypeScheme"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "variables"),
Core.fieldTerm = ((\xs -> Core.TermList (Lists.map name xs)) (Core.typeSchemeVariables x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (type_ (Core.typeSchemeBody x))},
Core.Field {
Core.fieldName = (Core.Name "constraints"),
Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map (\m -> Core.TermMap (Maps.bimap name typeVariableMetadata m)) opt)) (Core.typeSchemeConstraints x))}]})
typeVariableMetadata :: Core.TypeVariableMetadata -> Core.Term
typeVariableMetadata x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.TypeVariableMetadata"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "classes"),
Core.fieldTerm = ((\s -> Core.TermSet (Sets.map name s)) (Core.typeVariableMetadataClasses x))}]})
wrappedTerm :: Core.WrappedTerm -> Core.Term
wrappedTerm x =
Core.TermRecord (Core.Record {
Core.recordTypeName = (Core.Name "hydra.core.WrappedTerm"),
Core.recordFields = [
Core.Field {
Core.fieldName = (Core.Name "typeName"),
Core.fieldTerm = (name (Core.wrappedTermTypeName x))},
Core.Field {
Core.fieldName = (Core.Name "body"),
Core.fieldTerm = (term (Core.wrappedTermBody x))}]})