packages feed

hydra-0.13.0: src/gen-main/haskell/Hydra/Eval/Lib/Flows.hs

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

-- | Evaluation-level implementations of Flow functions for the Hydra interpreter.

module Hydra.Eval.Lib.Flows where

import qualified Hydra.Compute as Compute
import qualified Hydra.Core as Core
import qualified Hydra.Extract.Core as Core_
import qualified Hydra.Graph as Graph
import qualified Hydra.Lib.Flows as Flows
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Maps as Maps
import qualified Hydra.Lib.Pairs as Pairs
import qualified Hydra.Lib.Sets as Sets
import qualified Hydra.Monads as Monads
import qualified Hydra.Show.Core as Core__
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

-- | Interpreter-friendly applicative apply for Flow.
apply :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
apply flowFun flowArg = (Flows.pure (Core.TermApplication (Core.Application {
  Core.applicationFunction = (Core.TermApplication (Core.Application {
    Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.bind"))),
    Core.applicationArgument = flowFun})),
  Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
    Core.lambdaParameter = (Core.Name "f"),
    Core.lambdaDomain = Nothing,
    Core.lambdaBody = (Core.TermApplication (Core.Application {
      Core.applicationFunction = (Core.TermApplication (Core.Application {
        Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.bind"))),
        Core.applicationArgument = flowArg})),
      Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "x"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.pure"))),
          Core.applicationArgument = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
            Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))}))})))}))})))})))

-- | Interpreter-friendly monadic bind for Flow.
bind :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
bind flowTerm funTerm = ((\x -> case x of
  Core.TermWrap v1 ->  
    let innerFun = (Core.wrappedTermBody v1)
    in (Flows.pure (Core.TermWrap (Core.WrappedTerm {
      Core.wrappedTermTypeName = (Core.Name "hydra.compute.Flow"),
      Core.wrappedTermBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "s"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
          Core.lambdaParameter = (Core.Name "t"),
          Core.lambdaDomain = Nothing,
          Core.lambdaBody = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermApplication (Core.Application {
              Core.applicationFunction = (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maybes.maybe"))),
                Core.applicationArgument = (Core.TermRecord (Core.Record {
                  Core.recordTypeName = (Core.Name "hydra.compute.FlowState"),
                  Core.recordFields = [
                    Core.Field {
                      Core.fieldName = (Core.Name "value"),
                      Core.fieldTerm = (Core.TermMaybe Nothing)},
                    Core.Field {
                      Core.fieldName = (Core.Name "state"),
                      Core.fieldTerm = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                          Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                          Core.projectionField = (Core.Name "state")})))),
                        Core.applicationArgument = (Core.TermApplication (Core.Application {
                          Core.applicationFunction = (Core.TermApplication (Core.Application {
                            Core.applicationFunction = innerFun,
                            Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                          Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))},
                    Core.Field {
                      Core.fieldName = (Core.Name "trace"),
                      Core.fieldTerm = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                          Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                          Core.projectionField = (Core.Name "trace")})))),
                        Core.applicationArgument = (Core.TermApplication (Core.Application {
                          Core.applicationFunction = (Core.TermApplication (Core.Application {
                            Core.applicationFunction = innerFun,
                            Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                          Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}]}))})),
              Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
                Core.lambdaParameter = (Core.Name "v"),
                Core.lambdaDomain = Nothing,
                Core.lambdaBody = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationWrap (Core.Name "hydra.compute.Flow")))),
                    Core.applicationArgument = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = funTerm,
                      Core.applicationArgument = (Core.TermVariable (Core.Name "v"))}))})),
                  Core.applicationArgument = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                        Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                        Core.projectionField = (Core.Name "state")})))),
                      Core.applicationArgument = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = (Core.TermApplication (Core.Application {
                          Core.applicationFunction = innerFun,
                          Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                        Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))})),
                    Core.applicationArgument = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                        Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                        Core.projectionField = (Core.Name "trace")})))),
                      Core.applicationArgument = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = (Core.TermApplication (Core.Application {
                          Core.applicationFunction = innerFun,
                          Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                        Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}))}))})))})),
            Core.applicationArgument = (Core.TermApplication (Core.Application {
              Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                Core.projectionField = (Core.Name "value")})))),
              Core.applicationArgument = (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = innerFun,
                  Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}))})))})))})))
  _ -> (Monads.unexpected "flow term" (Core__.term flowTerm))) flowTerm)

-- | Interpreter-friendly foldl for Flow.
foldl :: (Core.Term -> Core.Term -> Core.Term -> Compute.Flow Graph.Graph Core.Term)
foldl funTerm initTerm listTerm = (Flows.bind (Core_.list listTerm) (\elements -> Flows.pure (Lists.foldl (\acc -> \el -> Core.TermApplication (Core.Application {
  Core.applicationFunction = (Core.TermApplication (Core.Application {
    Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.bind"))),
    Core.applicationArgument = acc})),
  Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
    Core.lambdaParameter = (Core.Name "accVal"),
    Core.lambdaDomain = Nothing,
    Core.lambdaBody = (Core.TermApplication (Core.Application {
      Core.applicationFunction = (Core.TermApplication (Core.Application {
        Core.applicationFunction = funTerm,
        Core.applicationArgument = (Core.TermVariable (Core.Name "accVal"))})),
      Core.applicationArgument = el}))})))})) (Core.TermApplication (Core.Application {
  Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.pure"))),
  Core.applicationArgument = initTerm})) elements)))

-- | Interpreter-friendly functor map for Flow.
map :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
map funTerm flowTerm = ((\x -> case x of
  Core.TermWrap v1 ->  
    let innerFun = (Core.wrappedTermBody v1)
    in (Flows.pure (Core.TermWrap (Core.WrappedTerm {
      Core.wrappedTermTypeName = (Core.Name "hydra.compute.Flow"),
      Core.wrappedTermBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "s"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
          Core.lambdaParameter = (Core.Name "t"),
          Core.lambdaDomain = Nothing,
          Core.lambdaBody = (Core.TermRecord (Core.Record {
            Core.recordTypeName = (Core.Name "hydra.compute.FlowState"),
            Core.recordFields = [
              Core.Field {
                Core.fieldName = (Core.Name "value"),
                Core.fieldTerm = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maybes.map"))),
                    Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
                      Core.lambdaParameter = (Core.Name "v"),
                      Core.lambdaDomain = Nothing,
                      Core.lambdaBody = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = funTerm,
                        Core.applicationArgument = (Core.TermVariable (Core.Name "v"))}))})))})),
                  Core.applicationArgument = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                      Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                      Core.projectionField = (Core.Name "value")})))),
                    Core.applicationArgument = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = (Core.TermApplication (Core.Application {
                        Core.applicationFunction = innerFun,
                        Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                      Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}))},
              Core.Field {
                Core.fieldName = (Core.Name "state"),
                Core.fieldTerm = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                    Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                    Core.projectionField = (Core.Name "state")})))),
                  Core.applicationArgument = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = innerFun,
                      Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                    Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))},
              Core.Field {
                Core.fieldName = (Core.Name "trace"),
                Core.fieldTerm = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                    Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                    Core.projectionField = (Core.Name "trace")})))),
                  Core.applicationArgument = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = (Core.TermApplication (Core.Application {
                      Core.applicationFunction = innerFun,
                      Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                    Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}]}))})))})))})))
  _ -> (Monads.unexpected "flow term" (Core__.term flowTerm))) flowTerm)

-- | Interpreter-friendly mapElems for Map with Flow.
mapElems :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
mapElems funTerm mapTerm = ((\x -> case x of
  Core.TermMap v1 ->  
    let pairs = (Maps.toList v1)
    in (Flows.pure (Core.TermApplication (Core.Application {
      Core.applicationFunction = (Core.TermApplication (Core.Application {
        Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.bind"))),
        Core.applicationArgument = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.sequence"))),
          Core.applicationArgument = (Core.TermList (Lists.map (\p ->  
            let k = (Pairs.first p)
            in  
              let v = (Pairs.second p)
              in (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.map"))),
                  Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
                    Core.lambdaParameter = (Core.Name "v'"),
                    Core.lambdaDomain = Nothing,
                    Core.lambdaBody = (Core.TermPair (k, (Core.TermVariable (Core.Name "v'"))))})))})),
                Core.applicationArgument = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = funTerm,
                  Core.applicationArgument = v}))}))) pairs))}))})),
      Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "newPairs"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.pure"))),
          Core.applicationArgument = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maps.fromList"))),
            Core.applicationArgument = (Core.TermVariable (Core.Name "newPairs"))}))}))})))})))
  _ -> (Monads.unexpected "map value" (Core__.term mapTerm))) mapTerm)

-- | Interpreter-friendly mapKeys for Map with Flow.
mapKeys :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
mapKeys funTerm mapTerm = ((\x -> case x of
  Core.TermMap v1 ->  
    let pairs = (Maps.toList v1)
    in (Flows.pure (Core.TermApplication (Core.Application {
      Core.applicationFunction = (Core.TermApplication (Core.Application {
        Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.bind"))),
        Core.applicationArgument = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.sequence"))),
          Core.applicationArgument = (Core.TermList (Lists.map (\p ->  
            let k = (Pairs.first p)
            in  
              let v = (Pairs.second p)
              in (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.map"))),
                  Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
                    Core.lambdaParameter = (Core.Name "k'"),
                    Core.lambdaDomain = Nothing,
                    Core.lambdaBody = (Core.TermPair (Core.TermVariable (Core.Name "k'"), v))})))})),
                Core.applicationArgument = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = funTerm,
                  Core.applicationArgument = k}))}))) pairs))}))})),
      Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "newPairs"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.pure"))),
          Core.applicationArgument = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maps.fromList"))),
            Core.applicationArgument = (Core.TermVariable (Core.Name "newPairs"))}))}))})))})))
  _ -> (Monads.unexpected "map value" (Core__.term mapTerm))) mapTerm)

-- | Interpreter-friendly mapList for List with Flow.
mapList :: (Core.Term -> Core.Term -> Compute.Flow Graph.Graph Core.Term)
mapList funTerm listTerm = (Flows.bind (Core_.list listTerm) (\elements -> Flows.pure (Core.TermApplication (Core.Application {
  Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.sequence"))),
  Core.applicationArgument = (Core.TermList (Lists.map (\el -> Core.TermApplication (Core.Application {
    Core.applicationFunction = funTerm,
    Core.applicationArgument = el})) elements))}))))

-- | Interpreter-friendly mapMaybe for Maybe with Flow.
mapMaybe :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
mapMaybe funTerm maybeTerm = ((\x -> case x of
  Core.TermMaybe v1 -> (Flows.pure (Core.TermApplication (Core.Application {
    Core.applicationFunction = (Core.TermApplication (Core.Application {
      Core.applicationFunction = (Core.TermApplication (Core.Application {
        Core.applicationFunction = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.logic.ifElse"))),
          Core.applicationArgument = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maybes.isNothing"))),
            Core.applicationArgument = (Core.TermMaybe v1)}))})),
        Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
          Core.lambdaParameter = (Core.Name "_"),
          Core.lambdaDomain = Nothing,
          Core.lambdaBody = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.pure"))),
            Core.applicationArgument = (Core.TermMaybe Nothing)}))})))})),
      Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "_"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermApplication (Core.Application {
          Core.applicationFunction = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.map"))),
            Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
              Core.lambdaParameter = (Core.Name "x"),
              Core.lambdaDomain = Nothing,
              Core.lambdaBody = (Core.TermMaybe (Just (Core.TermVariable (Core.Name "x"))))})))})),
          Core.applicationArgument = (Core.TermApplication (Core.Application {
            Core.applicationFunction = funTerm,
            Core.applicationArgument = (Core.TermApplication (Core.Application {
              Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maybes.fromJust"))),
              Core.applicationArgument = (Core.TermMaybe v1)}))}))}))})))})),
    Core.applicationArgument = Core.TermUnit})))
  _ -> (Monads.unexpected "optional value" (Core__.term maybeTerm))) maybeTerm)

-- | Interpreter-friendly mapSet for Set with Flow.
mapSet :: (Core.Term -> Core.Term -> Compute.Flow Graph.Graph Core.Term)
mapSet funTerm setTerm = (Flows.bind (Core_.set setTerm) (\elements -> Flows.pure (Core.TermApplication (Core.Application {
  Core.applicationFunction = (Core.TermApplication (Core.Application {
    Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.map"))),
    Core.applicationArgument = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.sets.fromList")))})),
  Core.applicationArgument = (Core.TermApplication (Core.Application {
    Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.flows.sequence"))),
    Core.applicationArgument = (Core.TermList (Lists.map (\el -> Core.TermApplication (Core.Application {
      Core.applicationFunction = funTerm,
      Core.applicationArgument = el})) (Sets.toList elements)))}))}))))

-- | Interpreter-friendly withDefault for Flow.
withDefault :: (Core.Term -> Core.Term -> Compute.Flow t0 Core.Term)
withDefault fallbackTerm flowTerm = ((\x -> case x of
  Core.TermWrap v1 ->  
    let innerFun = (Core.wrappedTermBody v1)
    in (Flows.pure (Core.TermWrap (Core.WrappedTerm {
      Core.wrappedTermTypeName = (Core.Name "hydra.compute.Flow"),
      Core.wrappedTermBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
        Core.lambdaParameter = (Core.Name "s"),
        Core.lambdaDomain = Nothing,
        Core.lambdaBody = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
          Core.lambdaParameter = (Core.Name "t"),
          Core.lambdaDomain = Nothing,
          Core.lambdaBody = (Core.TermApplication (Core.Application {
            Core.applicationFunction = (Core.TermApplication (Core.Application {
              Core.applicationFunction = (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermFunction (Core.FunctionPrimitive (Core.Name "hydra.lib.maybes.maybe"))),
                Core.applicationArgument = (Core.TermRecord (Core.Record {
                  Core.recordTypeName = (Core.Name "hydra.compute.FlowState"),
                  Core.recordFields = [
                    Core.Field {
                      Core.fieldName = (Core.Name "value"),
                      Core.fieldTerm = (Core.TermMaybe (Just fallbackTerm))},
                    Core.Field {
                      Core.fieldName = (Core.Name "state"),
                      Core.fieldTerm = (Core.TermVariable (Core.Name "s"))},
                    Core.Field {
                      Core.fieldName = (Core.Name "trace"),
                      Core.fieldTerm = (Core.TermVariable (Core.Name "t"))}]}))})),
              Core.applicationArgument = (Core.TermFunction (Core.FunctionLambda (Core.Lambda {
                Core.lambdaParameter = (Core.Name "_"),
                Core.lambdaDomain = Nothing,
                Core.lambdaBody = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = (Core.TermApplication (Core.Application {
                    Core.applicationFunction = innerFun,
                    Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                  Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))})))})),
            Core.applicationArgument = (Core.TermApplication (Core.Application {
              Core.applicationFunction = (Core.TermFunction (Core.FunctionElimination (Core.EliminationRecord (Core.Projection {
                Core.projectionTypeName = (Core.Name "hydra.compute.FlowState"),
                Core.projectionField = (Core.Name "value")})))),
              Core.applicationArgument = (Core.TermApplication (Core.Application {
                Core.applicationFunction = (Core.TermApplication (Core.Application {
                  Core.applicationFunction = innerFun,
                  Core.applicationArgument = (Core.TermVariable (Core.Name "s"))})),
                Core.applicationArgument = (Core.TermVariable (Core.Name "t"))}))}))}))})))})))})))
  _ -> (Monads.unexpected "flow term" (Core__.term flowTerm))) flowTerm)