packages feed

hydra-0.13.0: src/gen-main/haskell/Hydra/Encode/Testing.hs

-- Note: this is an automatically generated file. Do not edit.

-- | Term encoders for hydra.testing

module Hydra.Encode.Testing where

import qualified Hydra.Core as Core
import qualified Hydra.Encode.Ast as Ast
import qualified Hydra.Encode.Coders as Coders
import qualified Hydra.Encode.Core as Core_
import qualified Hydra.Encode.Json.Model as Model
import qualified Hydra.Encode.Parsing as Parsing
import qualified Hydra.Encode.Typing as Typing
import qualified Hydra.Encode.Util as Util
import qualified Hydra.Json.Model as Model_
import qualified Hydra.Lib.Eithers as Eithers
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Maybes as Maybes
import qualified Hydra.Lib.Pairs as Pairs
import qualified Hydra.Lib.Sets as Sets
import qualified Hydra.Testing as Testing
import Prelude hiding  (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.ByteString as B
import qualified Data.Int as I
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S

alphaConversionTestCase :: (Testing.AlphaConversionTestCase -> Core.Term)
alphaConversionTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.AlphaConversionTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "term"),
      Core.fieldTerm = (Core_.term (Testing.alphaConversionTestCaseTerm x))},
    Core.Field {
      Core.fieldName = (Core.Name "oldVariable"),
      Core.fieldTerm = (Core_.name (Testing.alphaConversionTestCaseOldVariable x))},
    Core.Field {
      Core.fieldName = (Core.Name "newVariable"),
      Core.fieldTerm = (Core_.name (Testing.alphaConversionTestCaseNewVariable x))},
    Core.Field {
      Core.fieldName = (Core.Name "result"),
      Core.fieldTerm = (Core_.term (Testing.alphaConversionTestCaseResult x))}]}))

evaluationStyle :: (Testing.EvaluationStyle -> Core.Term)
evaluationStyle x = case x of
  Testing.EvaluationStyleEager -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.EvaluationStyle"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "eager"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.EvaluationStyleLazy -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.EvaluationStyle"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "lazy"),
      Core.fieldTerm = Core.TermUnit}}))

caseConversionTestCase :: (Testing.CaseConversionTestCase -> Core.Term)
caseConversionTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.CaseConversionTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "fromConvention"),
      Core.fieldTerm = (Util.caseConvention (Testing.caseConversionTestCaseFromConvention x))},
    Core.Field {
      Core.fieldName = (Core.Name "toConvention"),
      Core.fieldTerm = (Util.caseConvention (Testing.caseConversionTestCaseToConvention x))},
    Core.Field {
      Core.fieldName = (Core.Name "fromString"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.caseConversionTestCaseFromString x))},
    Core.Field {
      Core.fieldName = (Core.Name "toString"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.caseConversionTestCaseToString x))}]}))

delegatedEvaluationTestCase :: (Testing.DelegatedEvaluationTestCase -> Core.Term)
delegatedEvaluationTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.DelegatedEvaluationTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.delegatedEvaluationTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.delegatedEvaluationTestCaseOutput x))}]}))

etaExpansionTestCase :: (Testing.EtaExpansionTestCase -> Core.Term)
etaExpansionTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.EtaExpansionTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.etaExpansionTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.etaExpansionTestCaseOutput x))}]}))

deannotateTermTestCase :: (Testing.DeannotateTermTestCase -> Core.Term)
deannotateTermTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.DeannotateTermTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.deannotateTermTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.deannotateTermTestCaseOutput x))}]}))

deannotateTypeTestCase :: (Testing.DeannotateTypeTestCase -> Core.Term)
deannotateTypeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.DeannotateTypeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.type_ (Testing.deannotateTypeTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.type_ (Testing.deannotateTypeTestCaseOutput x))}]}))

flattenLetTermsTestCase :: (Testing.FlattenLetTermsTestCase -> Core.Term)
flattenLetTermsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.FlattenLetTermsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.flattenLetTermsTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.flattenLetTermsTestCaseOutput x))}]}))

foldOperation :: (Testing.FoldOperation -> Core.Term)
foldOperation x = case x of
  Testing.FoldOperationSumInt32Literals -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.FoldOperation"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "sumInt32Literals"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.FoldOperationCollectListLengths -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.FoldOperation"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "collectListLengths"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.FoldOperationCollectLabels -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.FoldOperation"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "collectLabels"),
      Core.fieldTerm = Core.TermUnit}}))

foldOverTermTestCase :: (Testing.FoldOverTermTestCase -> Core.Term)
foldOverTermTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.FoldOverTermTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.foldOverTermTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "traversalOrder"),
      Core.fieldTerm = (Coders.traversalOrder (Testing.foldOverTermTestCaseTraversalOrder x))},
    Core.Field {
      Core.fieldName = (Core.Name "operation"),
      Core.fieldTerm = (foldOperation (Testing.foldOverTermTestCaseOperation x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.foldOverTermTestCaseOutput x))}]}))

freeVariablesTestCase :: (Testing.FreeVariablesTestCase -> Core.Term)
freeVariablesTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.FreeVariablesTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.freeVariablesTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = ((\s -> Core.TermSet (Sets.map Core_.name s)) (Testing.freeVariablesTestCaseOutput x))}]}))

hoistPredicate :: (Testing.HoistPredicate -> Core.Term)
hoistPredicate x = case x of
  Testing.HoistPredicateCaseStatements -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.HoistPredicate"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "caseStatements"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.HoistPredicateApplications -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.HoistPredicate"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "applications"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.HoistPredicateLists -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.HoistPredicate"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "lists"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.HoistPredicateNothing -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.HoistPredicate"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "nothing"),
      Core.fieldTerm = Core.TermUnit}}))

hoistLetBindingsTestCase :: (Testing.HoistLetBindingsTestCase -> Core.Term)
hoistLetBindingsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.HoistLetBindingsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.let_ (Testing.hoistLetBindingsTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.let_ (Testing.hoistLetBindingsTestCaseOutput x))}]}))

hoistPolymorphicLetBindingsTestCase :: (Testing.HoistPolymorphicLetBindingsTestCase -> Core.Term)
hoistPolymorphicLetBindingsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.HoistPolymorphicLetBindingsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.let_ (Testing.hoistPolymorphicLetBindingsTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.let_ (Testing.hoistPolymorphicLetBindingsTestCaseOutput x))}]}))

hoistSubtermsTestCase :: (Testing.HoistSubtermsTestCase -> Core.Term)
hoistSubtermsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.HoistSubtermsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "predicate"),
      Core.fieldTerm = (hoistPredicate (Testing.hoistSubtermsTestCasePredicate x))},
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.hoistSubtermsTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.hoistSubtermsTestCaseOutput x))}]}))

hoistCaseStatementsTestCase :: (Testing.HoistCaseStatementsTestCase -> Core.Term)
hoistCaseStatementsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.HoistCaseStatementsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.hoistCaseStatementsTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.hoistCaseStatementsTestCaseOutput x))}]}))

termRewriter :: (Testing.TermRewriter -> Core.Term)
termRewriter x = case x of
  Testing.TermRewriterReplaceFooWithBar -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TermRewriter"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "replaceFooWithBar"),
      Core.fieldTerm = Core.TermUnit}}))
  Testing.TermRewriterReplaceInt32WithInt64 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TermRewriter"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "replaceInt32WithInt64"),
      Core.fieldTerm = Core.TermUnit}}))

rewriteTermTestCase :: (Testing.RewriteTermTestCase -> Core.Term)
rewriteTermTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.RewriteTermTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.rewriteTermTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "rewriter"),
      Core.fieldTerm = (termRewriter (Testing.rewriteTermTestCaseRewriter x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.rewriteTermTestCaseOutput x))}]}))

typeRewriter :: (Testing.TypeRewriter -> Core.Term)
typeRewriter x = case x of
  Testing.TypeRewriterReplaceStringWithInt32 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TypeRewriter"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "replaceStringWithInt32"),
      Core.fieldTerm = Core.TermUnit}}))

rewriteTypeTestCase :: (Testing.RewriteTypeTestCase -> Core.Term)
rewriteTypeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.RewriteTypeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.type_ (Testing.rewriteTypeTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "rewriter"),
      Core.fieldTerm = (typeRewriter (Testing.rewriteTypeTestCaseRewriter x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.type_ (Testing.rewriteTypeTestCaseOutput x))}]}))

evaluationTestCase :: (Testing.EvaluationTestCase -> Core.Term)
evaluationTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.EvaluationTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "evaluationStyle"),
      Core.fieldTerm = (evaluationStyle (Testing.evaluationTestCaseEvaluationStyle x))},
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.evaluationTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.evaluationTestCaseOutput x))}]}))

inferenceFailureTestCase :: (Testing.InferenceFailureTestCase -> Core.Term)
inferenceFailureTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.InferenceFailureTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.inferenceFailureTestCaseInput x))}]}))

inferenceTestCase :: (Testing.InferenceTestCase -> Core.Term)
inferenceTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.InferenceTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.inferenceTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.typeScheme (Testing.inferenceTestCaseOutput x))}]}))

jsonCoderTestCase :: (Testing.JsonCoderTestCase -> Core.Term)
jsonCoderTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.JsonCoderTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "type"),
      Core.fieldTerm = (Core_.type_ (Testing.jsonCoderTestCaseType x))},
    Core.Field {
      Core.fieldName = (Core.Name "term"),
      Core.fieldTerm = (Core_.term (Testing.jsonCoderTestCaseTerm x))},
    Core.Field {
      Core.fieldName = (Core.Name "json"),
      Core.fieldTerm = (Model.value (Testing.jsonCoderTestCaseJson x))}]}))

jsonDecodeTestCase :: (Testing.JsonDecodeTestCase -> Core.Term)
jsonDecodeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.JsonDecodeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "type"),
      Core.fieldTerm = (Core_.type_ (Testing.jsonDecodeTestCaseType x))},
    Core.Field {
      Core.fieldName = (Core.Name "json"),
      Core.fieldTerm = (Model.value (Testing.jsonDecodeTestCaseJson x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\e -> Core.TermEither (Eithers.bimap (\x -> Core.TermLiteral (Core.LiteralString x)) Core_.term e)) (Testing.jsonDecodeTestCaseExpected x))}]}))

jsonEncodeTestCase :: (Testing.JsonEncodeTestCase -> Core.Term)
jsonEncodeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.JsonEncodeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "term"),
      Core.fieldTerm = (Core_.term (Testing.jsonEncodeTestCaseTerm x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\e -> Core.TermEither (Eithers.bimap (\x -> Core.TermLiteral (Core.LiteralString x)) Model.value e)) (Testing.jsonEncodeTestCaseExpected x))}]}))

jsonParserTestCase :: (Testing.ParserTestCase Model_.Value -> Core.Term)
jsonParserTestCase = (parserTestCase Model.value)

jsonRoundtripTestCase :: (Testing.JsonRoundtripTestCase -> Core.Term)
jsonRoundtripTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.JsonRoundtripTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "type"),
      Core.fieldTerm = (Core_.type_ (Testing.jsonRoundtripTestCaseType x))},
    Core.Field {
      Core.fieldName = (Core.Name "term"),
      Core.fieldTerm = (Core_.term (Testing.jsonRoundtripTestCaseTerm x))}]}))

liftLambdaAboveLetTestCase :: (Testing.LiftLambdaAboveLetTestCase -> Core.Term)
liftLambdaAboveLetTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.LiftLambdaAboveLetTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.liftLambdaAboveLetTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.liftLambdaAboveLetTestCaseOutput x))}]}))

jsonWriterTestCase :: (Testing.WriterTestCase Model_.Value -> Core.Term)
jsonWriterTestCase = (writerTestCase Model.value)

parserTestCase :: ((t0 -> Core.Term) -> Testing.ParserTestCase t0 -> Core.Term)
parserTestCase a x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.ParserTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.parserTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Parsing.parseResult a (Testing.parserTestCaseOutput x))}]}))

tag :: (Testing.Tag -> Core.Term)
tag x = (Core.TermWrap (Core.WrappedTerm {
  Core.wrappedTermTypeName = (Core.Name "hydra.testing.Tag"),
  Core.wrappedTermBody = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.unTag x))}))

testCase :: (Testing.TestCase -> Core.Term)
testCase x = case x of
  Testing.TestCaseAlphaConversion v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "alphaConversion"),
      Core.fieldTerm = (alphaConversionTestCase v1)}}))
  Testing.TestCaseCaseConversion v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "caseConversion"),
      Core.fieldTerm = (caseConversionTestCase v1)}}))
  Testing.TestCaseDeannotateTerm v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "deannotateTerm"),
      Core.fieldTerm = (deannotateTermTestCase v1)}}))
  Testing.TestCaseDeannotateType v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "deannotateType"),
      Core.fieldTerm = (deannotateTypeTestCase v1)}}))
  Testing.TestCaseDelegatedEvaluation v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "delegatedEvaluation"),
      Core.fieldTerm = (delegatedEvaluationTestCase v1)}}))
  Testing.TestCaseEtaExpansion v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "etaExpansion"),
      Core.fieldTerm = (etaExpansionTestCase v1)}}))
  Testing.TestCaseFlattenLetTerms v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "flattenLetTerms"),
      Core.fieldTerm = (flattenLetTermsTestCase v1)}}))
  Testing.TestCaseFreeVariables v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "freeVariables"),
      Core.fieldTerm = (freeVariablesTestCase v1)}}))
  Testing.TestCaseEvaluation v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "evaluation"),
      Core.fieldTerm = (evaluationTestCase v1)}}))
  Testing.TestCaseInference v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "inference"),
      Core.fieldTerm = (inferenceTestCase v1)}}))
  Testing.TestCaseInferenceFailure v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "inferenceFailure"),
      Core.fieldTerm = (inferenceFailureTestCase v1)}}))
  Testing.TestCaseJsonCoder v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonCoder"),
      Core.fieldTerm = (jsonCoderTestCase v1)}}))
  Testing.TestCaseJsonDecode v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonDecode"),
      Core.fieldTerm = (jsonDecodeTestCase v1)}}))
  Testing.TestCaseJsonEncode v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonEncode"),
      Core.fieldTerm = (jsonEncodeTestCase v1)}}))
  Testing.TestCaseJsonParser v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonParser"),
      Core.fieldTerm = (jsonParserTestCase v1)}}))
  Testing.TestCaseJsonRoundtrip v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonRoundtrip"),
      Core.fieldTerm = (jsonRoundtripTestCase v1)}}))
  Testing.TestCaseJsonWriter v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "jsonWriter"),
      Core.fieldTerm = (jsonWriterTestCase v1)}}))
  Testing.TestCaseLiftLambdaAboveLet v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "liftLambdaAboveLet"),
      Core.fieldTerm = (liftLambdaAboveLetTestCase v1)}}))
  Testing.TestCaseSerialization v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "serialization"),
      Core.fieldTerm = (serializationTestCase v1)}}))
  Testing.TestCaseSimplifyTerm v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "simplifyTerm"),
      Core.fieldTerm = (simplifyTermTestCase v1)}}))
  Testing.TestCaseTopologicalSort v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "topologicalSort"),
      Core.fieldTerm = (topologicalSortTestCase v1)}}))
  Testing.TestCaseTopologicalSortBindings v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "topologicalSortBindings"),
      Core.fieldTerm = (topologicalSortBindingsTestCase v1)}}))
  Testing.TestCaseTopologicalSortSCC v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "topologicalSortSCC"),
      Core.fieldTerm = (topologicalSortSCCTestCase v1)}}))
  Testing.TestCaseTypeChecking v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "typeChecking"),
      Core.fieldTerm = (typeCheckingTestCase v1)}}))
  Testing.TestCaseTypeCheckingFailure v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "typeCheckingFailure"),
      Core.fieldTerm = (typeCheckingFailureTestCase v1)}}))
  Testing.TestCaseTypeReduction v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "typeReduction"),
      Core.fieldTerm = (typeReductionTestCase v1)}}))
  Testing.TestCaseNormalizeTypeVariables v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "normalizeTypeVariables"),
      Core.fieldTerm = (normalizeTypeVariablesTestCase v1)}}))
  Testing.TestCaseFoldOverTerm v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "foldOverTerm"),
      Core.fieldTerm = (foldOverTermTestCase v1)}}))
  Testing.TestCaseRewriteTerm v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "rewriteTerm"),
      Core.fieldTerm = (rewriteTermTestCase v1)}}))
  Testing.TestCaseRewriteType v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "rewriteType"),
      Core.fieldTerm = (rewriteTypeTestCase v1)}}))
  Testing.TestCaseHoistSubterms v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "hoistSubterms"),
      Core.fieldTerm = (hoistSubtermsTestCase v1)}}))
  Testing.TestCaseHoistCaseStatements v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "hoistCaseStatements"),
      Core.fieldTerm = (hoistCaseStatementsTestCase v1)}}))
  Testing.TestCaseHoistLetBindings v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "hoistLetBindings"),
      Core.fieldTerm = (hoistLetBindingsTestCase v1)}}))
  Testing.TestCaseHoistPolymorphicLetBindings v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "hoistPolymorphicLetBindings"),
      Core.fieldTerm = (hoistPolymorphicLetBindingsTestCase v1)}}))
  Testing.TestCaseSubstInType v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "substInType"),
      Core.fieldTerm = (substInTypeTestCase v1)}}))
  Testing.TestCaseVariableOccursInType v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "variableOccursInType"),
      Core.fieldTerm = (variableOccursInTypeTestCase v1)}}))
  Testing.TestCaseUnifyTypes v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "unifyTypes"),
      Core.fieldTerm = (unifyTypesTestCase v1)}}))
  Testing.TestCaseJoinTypes v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "joinTypes"),
      Core.fieldTerm = (joinTypesTestCase v1)}}))
  Testing.TestCaseUnshadowVariables v1 -> (Core.TermUnion (Core.Injection {
    Core.injectionTypeName = (Core.Name "hydra.testing.TestCase"),
    Core.injectionField = Core.Field {
      Core.fieldName = (Core.Name "unshadowVariables"),
      Core.fieldTerm = (unshadowVariablesTestCase v1)}}))

testCaseWithMetadata :: (Testing.TestCaseWithMetadata -> Core.Term)
testCaseWithMetadata x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TestCaseWithMetadata"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "name"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.testCaseWithMetadataName x))},
    Core.Field {
      Core.fieldName = (Core.Name "case"),
      Core.fieldTerm = (testCase (Testing.testCaseWithMetadataCase x))},
    Core.Field {
      Core.fieldName = (Core.Name "description"),
      Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map (\x -> Core.TermLiteral (Core.LiteralString x)) opt)) (Testing.testCaseWithMetadataDescription x))},
    Core.Field {
      Core.fieldName = (Core.Name "tags"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map tag xs)) (Testing.testCaseWithMetadataTags x))}]}))

testGroup :: (Testing.TestGroup -> Core.Term)
testGroup x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TestGroup"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "name"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.testGroupName x))},
    Core.Field {
      Core.fieldName = (Core.Name "description"),
      Core.fieldTerm = ((\opt -> Core.TermMaybe (Maybes.map (\x -> Core.TermLiteral (Core.LiteralString x)) opt)) (Testing.testGroupDescription x))},
    Core.Field {
      Core.fieldName = (Core.Name "subgroups"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map testGroup xs)) (Testing.testGroupSubgroups x))},
    Core.Field {
      Core.fieldName = (Core.Name "cases"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map testCaseWithMetadata xs)) (Testing.testGroupCases x))}]}))

typeCheckingTestCase :: (Testing.TypeCheckingTestCase -> Core.Term)
typeCheckingTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TypeCheckingTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.typeCheckingTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "outputTerm"),
      Core.fieldTerm = (Core_.term (Testing.typeCheckingTestCaseOutputTerm x))},
    Core.Field {
      Core.fieldName = (Core.Name "outputType"),
      Core.fieldTerm = (Core_.type_ (Testing.typeCheckingTestCaseOutputType x))}]}))

typeCheckingFailureTestCase :: (Testing.TypeCheckingFailureTestCase -> Core.Term)
typeCheckingFailureTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TypeCheckingFailureTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.typeCheckingFailureTestCaseInput x))}]}))

topologicalSortBindingsTestCase :: (Testing.TopologicalSortBindingsTestCase -> Core.Term)
topologicalSortBindingsTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TopologicalSortBindingsTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "bindings"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\p -> Core.TermPair (Pairs.bimap Core_.name Core_.term p)) xs)) (Testing.topologicalSortBindingsTestCaseBindings x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\xs -> Core.TermList (Lists.map (\p -> Core.TermPair (Pairs.bimap Core_.name Core_.term p)) xs)) xs)) (Testing.topologicalSortBindingsTestCaseExpected x))}]}))

topologicalSortTestCase :: (Testing.TopologicalSortTestCase -> Core.Term)
topologicalSortTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TopologicalSortTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "adjacencyList"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\p -> Core.TermPair (Pairs.bimap (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) (\xs -> Core.TermList (Lists.map (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) xs)) p)) xs)) (Testing.topologicalSortTestCaseAdjacencyList x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\e -> Core.TermEither (Eithers.bimap (\xs -> Core.TermList (Lists.map (\xs -> Core.TermList (Lists.map (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) xs)) xs)) (\xs -> Core.TermList (Lists.map (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) xs)) e)) (Testing.topologicalSortTestCaseExpected x))}]}))

topologicalSortSCCTestCase :: (Testing.TopologicalSortSCCTestCase -> Core.Term)
topologicalSortSCCTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TopologicalSortSCCTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "adjacencyList"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\p -> Core.TermPair (Pairs.bimap (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) (\xs -> Core.TermList (Lists.map (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) xs)) p)) xs)) (Testing.topologicalSortSCCTestCaseAdjacencyList x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\xs -> Core.TermList (Lists.map (\x -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x))) xs)) xs)) (Testing.topologicalSortSCCTestCaseExpected x))}]}))

serializationTestCase :: (Testing.SerializationTestCase -> Core.Term)
serializationTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.SerializationTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Ast.expr (Testing.serializationTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.serializationTestCaseOutput x))}]}))

simplifyTermTestCase :: (Testing.SimplifyTermTestCase -> Core.Term)
simplifyTermTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.SimplifyTermTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.simplifyTermTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.simplifyTermTestCaseOutput x))}]}))

normalizeTypeVariablesTestCase :: (Testing.NormalizeTypeVariablesTestCase -> Core.Term)
normalizeTypeVariablesTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.NormalizeTypeVariablesTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.normalizeTypeVariablesTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.normalizeTypeVariablesTestCaseOutput x))}]}))

typeReductionTestCase :: (Testing.TypeReductionTestCase -> Core.Term)
typeReductionTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.TypeReductionTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.type_ (Testing.typeReductionTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.type_ (Testing.typeReductionTestCaseOutput x))}]}))

writerTestCase :: ((t0 -> Core.Term) -> Testing.WriterTestCase t0 -> Core.Term)
writerTestCase a x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.WriterTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (a (Testing.writerTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralString x)) (Testing.writerTestCaseOutput x))}]}))

substInTypeTestCase :: (Testing.SubstInTypeTestCase -> Core.Term)
substInTypeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.SubstInTypeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "substitution"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map (\p -> Core.TermPair (Pairs.bimap Core_.name Core_.type_ p)) xs)) (Testing.substInTypeTestCaseSubstitution x))},
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.type_ (Testing.substInTypeTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.type_ (Testing.substInTypeTestCaseOutput x))}]}))

variableOccursInTypeTestCase :: (Testing.VariableOccursInTypeTestCase -> Core.Term)
variableOccursInTypeTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.VariableOccursInTypeTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "variable"),
      Core.fieldTerm = (Core_.name (Testing.variableOccursInTypeTestCaseVariable x))},
    Core.Field {
      Core.fieldName = (Core.Name "type"),
      Core.fieldTerm = (Core_.type_ (Testing.variableOccursInTypeTestCaseType x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\x -> Core.TermLiteral (Core.LiteralBoolean x)) (Testing.variableOccursInTypeTestCaseExpected x))}]}))

unshadowVariablesTestCase :: (Testing.UnshadowVariablesTestCase -> Core.Term)
unshadowVariablesTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.UnshadowVariablesTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "input"),
      Core.fieldTerm = (Core_.term (Testing.unshadowVariablesTestCaseInput x))},
    Core.Field {
      Core.fieldName = (Core.Name "output"),
      Core.fieldTerm = (Core_.term (Testing.unshadowVariablesTestCaseOutput x))}]}))

unifyTypesTestCase :: (Testing.UnifyTypesTestCase -> Core.Term)
unifyTypesTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.UnifyTypesTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "schemaTypes"),
      Core.fieldTerm = ((\xs -> Core.TermList (Lists.map Core_.name xs)) (Testing.unifyTypesTestCaseSchemaTypes x))},
    Core.Field {
      Core.fieldName = (Core.Name "left"),
      Core.fieldTerm = (Core_.type_ (Testing.unifyTypesTestCaseLeft x))},
    Core.Field {
      Core.fieldName = (Core.Name "right"),
      Core.fieldTerm = (Core_.type_ (Testing.unifyTypesTestCaseRight x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\e -> Core.TermEither (Eithers.bimap (\x -> Core.TermLiteral (Core.LiteralString x)) Typing.typeSubst e)) (Testing.unifyTypesTestCaseExpected x))}]}))

joinTypesTestCase :: (Testing.JoinTypesTestCase -> Core.Term)
joinTypesTestCase x = (Core.TermRecord (Core.Record {
  Core.recordTypeName = (Core.Name "hydra.testing.JoinTypesTestCase"),
  Core.recordFields = [
    Core.Field {
      Core.fieldName = (Core.Name "left"),
      Core.fieldTerm = (Core_.type_ (Testing.joinTypesTestCaseLeft x))},
    Core.Field {
      Core.fieldName = (Core.Name "right"),
      Core.fieldTerm = (Core_.type_ (Testing.joinTypesTestCaseRight x))},
    Core.Field {
      Core.fieldName = (Core.Name "expected"),
      Core.fieldTerm = ((\e -> Core.TermEither (Eithers.bimap (\_ -> Core.TermUnit) (\xs -> Core.TermList (Lists.map Typing.typeConstraint xs)) e)) (Testing.joinTypesTestCaseExpected x))}]}))