hydra-kernel-0.17.3: src/main/haskell/Hydra/Lib/Eithers.hs
-- Note: this is an automatically generated file. Do not edit.
-- | Primitives in the hydra.lib.eithers module.
module Hydra.Lib.Eithers where
import qualified Hydra.Ast as Ast
import qualified Hydra.Coders as Coders
import qualified Hydra.Core as Core
import qualified Hydra.Docs as Docs
import qualified Hydra.Error.Checking as Checking
import qualified Hydra.Error.Core as ErrorCore
import qualified Hydra.Error.File as ErrorFile
import qualified Hydra.Error.Packaging as ErrorPackaging
import qualified Hydra.Error.System as ErrorSystem
import qualified Hydra.Errors as Errors
import qualified Hydra.File as File
import qualified Hydra.Graph as Graph
import qualified Hydra.Json.Model as Model
import qualified Hydra.Packaging as Packaging
import qualified Hydra.Parsing as Parsing
import qualified Hydra.Paths as Paths
import qualified Hydra.Query as Query
import qualified Hydra.Regex as Regex
import qualified Hydra.Relational as Relational
import qualified Hydra.System as System
import qualified Hydra.Tabular as Tabular
import qualified Hydra.Testing as Testing
import qualified Hydra.Time as Time
import qualified Hydra.Topology as Topology
import qualified Hydra.Typed as Typed
import qualified Hydra.Typing as Typing
import qualified Hydra.Util as Util
import qualified Hydra.Validation as Validation
import qualified Hydra.Variants as Variants
import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)
import qualified Data.Scientific as Sci
apply :: Packaging.PrimitiveDefinition
apply =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.apply"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Applicative apply for either: combine a function under either and an argument under either."),
Packaging.entityMetadataComments = [
"apply(ef, ex) returns right(f(x)) when ef is right(f) and ex is right(x).",
"If either argument is a left, the result is that left; when both arguments are left, the first (function-side) left is returned \8212 first error wins, and ex is not consulted once ef is known to be a left.",
"apply(ef, ex) is bind(ef, \\f -> map(f, ex)); this defining equation is the specification, and the default implementation.",
"Total. Corresponds to Haskell's (<*>) :: Either a (b -> c) -> Either a b -> Either a c."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "ef"),
Typing.parameterDescription = (Just "the either containing the function to apply"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "z"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "ex"),
Typing.parameterDescription = (Just "the either containing the argument"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "z"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "ef"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "ex"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.bind")),
Core.applicationArgument = (Core.TermVariable (Core.Name "ef"))})),
Core.applicationArgument = (Core.TermLambda (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.TermVariable (Core.Name "hydra.lib.eithers.map")),
Core.applicationArgument = (Core.TermVariable (Core.Name "f"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "ex"))}))}))}))}))})))}
bimap :: Packaging.PrimitiveDefinition
bimap =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.bimap"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Map over both sides of an either value."),
Packaging.entityMetadataComments = [
"bimap(f, g, e) applies f to the contained value if e is a Left, or g if e is a Right; the result retains the same Left/Right variant.",
"Total. Corresponds to Haskell's Data.Bifunctor.bimap :: (a -> c) -> (b -> d) -> Either a b -> Either c d."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "w"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the function to apply to a Left value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "z"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "g"),
Typing.parameterDescription = (Just "the function to apply to a Right value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "w"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to map over"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "w"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "g"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Left (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Right (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "g")),
Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))}))})))}
bind :: Packaging.PrimitiveDefinition
bind =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.bind"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Bind (flatMap) for either: if Right, apply the function; if Left, return unchanged."),
Packaging.entityMetadataComments = [
"bind(e, f) is the monadic bind for either with a fixed Left type: if e is Right v, the result is f(v); if e is Left x, the result is Left x with the Left type preserved.",
"Used to chain computations that may fail with a common error type.",
"Total. Corresponds to Haskell's (>>=) :: Either a b -> (b -> Either a c) -> Either a c."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to bind"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the function to apply to a Right value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "z"))}))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "z"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (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.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Left (Core.TermVariable (Core.Name "x"))))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "f"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))})))}
compose :: Packaging.PrimitiveDefinition
compose =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.compose"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Kleisli composition for either."),
Packaging.entityMetadataComments = [
"compose(f, g, x) is bind(f(x), g); this defining equation is the specification, and the default implementation.",
"If either f(x) or the second stage produces a left, the result is that left.",
"Total. Corresponds to Kleisli composition (>=>) specialised to Either with a fixed Left type."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "w"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the first Kleisli arrow to apply"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "w")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "g"),
Typing.parameterDescription = (Just "the second Kleisli arrow to apply"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "w")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "z"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "x"),
Typing.parameterDescription = (Just "the input value"),
Typing.parameterType = (Core.TypeVariable (Core.Name "x")),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "w")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "z"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "g"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.bind")),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "g"))}))}))}))})))}
either :: Packaging.PrimitiveDefinition
either =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.either"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Eliminate an either value by applying one of two functions."),
Packaging.entityMetadataComments = [
"either(f, g, e) returns f(x) if e is Left x and g(y) if e is Right y.",
"The fundamental eliminator for the either type; every other primitive in this namespace can be derived from it.",
"Total. Corresponds to Haskell's either :: (a -> c) -> (b -> c) -> Either a b -> c."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the function to apply to a Left value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "z"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "g"),
Typing.parameterDescription = (Just "the function to apply to a Right value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "z"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to eliminate"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeVariable (Core.Name "z"))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = Nothing}
foldList :: Packaging.PrimitiveDefinition
foldList =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.foldList"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Left-fold over a list with an Either-returning function, short-circuiting on Left."),
Packaging.entityMetadataComments = [
"foldList(f, acc0, xs) folds f over xs from the left, threading an accumulator of type a, where each application may fail with Left e: it iterates while f returns Right, propagates Left on the first failure, and returns Right (final accumulator) if all elements were processed.",
"Corresponds to a short-circuiting variant of Haskell's foldM specialised to Either."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the Either-returning folding function"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "x"))}))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "acc0"),
Typing.parameterDescription = (Just "the initial accumulator value"),
Typing.parameterType = (Core.TypeVariable (Core.Name "x")),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "xs"),
Typing.parameterDescription = (Just "the list to fold over"),
Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "y"))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "x"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc0"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "xs"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldl")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "el"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.bind")),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "a"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "a"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "el"))}))}))}))}))}))})),
Core.applicationArgument = (Core.TermEither (Right (Core.TermVariable (Core.Name "acc0"))))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))})))}
isLeft :: Packaging.PrimitiveDefinition
isLeft =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.isLeft"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Check whether an either is a Left value."),
Packaging.entityMetadataComments = [
"True if the argument is a Left variant, false if a Right.",
"Total. Corresponds to Haskell's Data.Either.isLeft :: Either a b -> Bool."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to test"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeLiteral Core.LiteralTypeBoolean)}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLiteral (Core.LiteralBoolean True))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLiteral (Core.LiteralBoolean False))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))})))}
isRight :: Packaging.PrimitiveDefinition
isRight =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.isRight"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Check whether an either is a Right value."),
Packaging.entityMetadataComments = [
"True if the argument is a Right variant, false if a Left.",
"Total. Corresponds to Haskell's Data.Either.isRight :: Either a b -> Bool."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to test"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeLiteral Core.LiteralTypeBoolean)}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLiteral (Core.LiteralBoolean False))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLiteral (Core.LiteralBoolean True))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))})))}
lefts :: Packaging.PrimitiveDefinition
lefts =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.lefts"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Extract all Left values from a list of either values."),
Packaging.entityMetadataComments = [
"lefts(xs) returns a list containing every Left value in xs, in original order, with Right values discarded.",
"Total. Corresponds to Haskell's Data.Either.lefts :: [Either a b] -> [a]."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "xs"),
Typing.parameterDescription = (Just "the list of either values to extract Lefts from"),
Typing.parameterType = (Core.TypeList (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeList (Core.TypeVariable (Core.Name "x")))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "xs"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldr")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "l"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "l"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "acc"))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))}))})),
Core.applicationArgument = (Core.TermList [])})),
Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))})))}
map :: Packaging.PrimitiveDefinition
map =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.map"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Map a function over the Right side of an either (standard functor map)."),
Packaging.entityMetadataComments = [
"map(f, e) returns Right (f y) if e is Right y, or Left x unchanged if e is Left x.",
"The functor instance for either; treats the Right variant as the focus and leaves the Left variant alone.",
"Total. Corresponds to Haskell's fmap :: (a -> b) -> Either e a -> Either e b."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the function to apply to a Right value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "y"))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "e"),
Typing.parameterDescription = (Just "the either value to map over"),
Typing.parameterType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "x"))})),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Left (Core.TermVariable (Core.Name "x"))))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Right (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))})))}
mapList :: Packaging.PrimitiveDefinition
mapList =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.mapList"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Map a function returning either over a list, collecting results or short-circuiting on Left."),
Packaging.entityMetadataComments = [
"mapList(f, xs) applies f to each element of xs. If every application returns Right, the result is Right of the list of contained values, in original order. The first application that returns Left short-circuits the whole result to that Left.",
"Total. Corresponds to Haskell's traverse :: (a -> Either e b) -> [a] -> Either e [b]."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the either-returning function to apply to each element"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "xs"),
Typing.parameterDescription = (Just "the list to map over"),
Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeList (Core.TypeVariable (Core.Name "y")))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "xs"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldr")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.bind")),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.map")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "ys"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "y"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "ys"))}))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))}))}))}))})),
Core.applicationArgument = (Core.TermEither (Right (Core.TermList [])))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))})))}
mapOptional :: Packaging.PrimitiveDefinition
mapOptional =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.mapOptional"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Map a function returning either over an optional, or return Right none if none."),
Packaging.entityMetadataComments = [
"mapOptional(f, m) returns Right none if m is none; otherwise applies f to the contained value and returns the result with Right wrapped around given.",
"Total. Corresponds to Haskell's traverse :: (a -> Either e b) -> Maybe a -> Either e (Maybe b)."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the either-returning function to apply to the contained value"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "m"),
Typing.parameterDescription = (Just "the optional to map over"),
Typing.parameterType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x"))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeOptional (Core.TypeVariable (Core.Name "y")))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "m"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.cases")),
Core.applicationArgument = (Core.TermVariable (Core.Name "m"))})),
Core.applicationArgument = (Core.TermEither (Right (Core.TermOptional Nothing)))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.map")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermOptional (Just (Core.TermVariable (Core.Name "y"))))}))})),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))}))}))}))}))})))}
mapSet :: Packaging.PrimitiveDefinition
mapSet =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.mapSet"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Map a function returning either over a set, collecting results or short-circuiting on Left."),
Packaging.entityMetadataComments = [
"mapSet(f, s) applies f to each element of s in unspecified order. If every application returns Right, the result is Right of the set of contained values (deduplicated by the result type's ordering); the first application returning Left short-circuits the whole result to that Left.",
"Total. Corresponds to Haskell's traverse-style operation specialised to Set."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "z"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "f"),
Typing.parameterDescription = (Just "the either-returning function to apply to each element"),
Typing.parameterType = (Core.TypeFunction (Core.FunctionType {
Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),
Core.functionTypeCodomain = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))})),
Typing.parameterIsLazy = False},
Typing.Parameter {
Typing.parameterName = (Core.Name "s"),
Typing.parameterDescription = (Just "the set to map over"),
Typing.parameterType = (Core.TypeSet (Core.TypeVariable (Core.Name "x"))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "z")),
Core.eitherTypeRight = (Core.TypeSet (Core.TypeVariable (Core.Name "y")))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "f"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "s"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.map")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "ys"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.fromList")),
Core.applicationArgument = (Core.TermVariable (Core.Name "ys"))}))}))})),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldr")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.bind")),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "f")),
Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "y"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.map")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "ys"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "y"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "ys"))}))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))}))}))}))})),
Core.applicationArgument = (Core.TermEither (Right (Core.TermList [])))})),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.toList")),
Core.applicationArgument = (Core.TermVariable (Core.Name "s"))}))}))}))}))})))}
partition :: Packaging.PrimitiveDefinition
partition =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.partition"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Partition a list of either values into lefts and rights."),
Packaging.entityMetadataComments = [
"partition(xs) returns a pair (lefts, rights) where lefts contains every Left value from xs in original order and rights contains every Right value from xs in original order.",
"Total. Corresponds to Haskell's Data.Either.partitionEithers :: [Either a b] -> ([a], [b])."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "xs"),
Typing.parameterDescription = (Just "the list of either values to partition"),
Typing.parameterType = (Core.TypeList (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypePair (Core.PairType {
Core.pairTypeFirst = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),
Core.pairTypeSecond = (Core.TypeList (Core.TypeVariable (Core.Name "y")))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "xs"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldr")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "l"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermPair (
Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "l"))})),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.pairs.first")),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}),
(Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.pairs.second")),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "r"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermPair (
Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.pairs.first")),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}),
(Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "r"))})),
Core.applicationArgument = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.pairs.second")),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))}))})),
Core.applicationArgument = (Core.TermPair (Core.TermList [], (Core.TermList [])))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))})))}
pure :: Packaging.PrimitiveDefinition
pure =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.pure"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Wrap a value as a right."),
Packaging.entityMetadataComments = [
"pure(x) is right(x); this defining equation is the specification, and the default implementation.",
"This is the unit of the either monad; it exists so that code written generically over a monad can reach the unit.",
"Total. Corresponds to Haskell's pure / Right for Either."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "x"),
Typing.parameterDescription = (Just "the value to wrap as a Right"),
Typing.parameterType = (Core.TypeVariable (Core.Name "y")),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "x"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermEither (Right (Core.TermVariable (Core.Name "x"))))})))}
rights :: Packaging.PrimitiveDefinition
rights =
Packaging.PrimitiveDefinition {
Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.eithers.rights"),
Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {
Packaging.entityMetadataDescription = (Just "Extract all Right values from a list of either values."),
Packaging.entityMetadataComments = [
"rights(xs) returns a list containing every Right value in xs, in original order, with Left values discarded.",
"Total. Corresponds to Haskell's Data.Either.rights :: [Either a b] -> [b]."],
Packaging.entityMetadataSeeAlso = [],
Packaging.entityMetadataLifecycle = Nothing})),
Packaging.primitiveDefinitionSignature = Typing.TermSignature {
Typing.termSignatureTypeParameters = [
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "x"),
Typing.typeParameterConstraints = []},
Typing.TypeParameter {
Typing.typeParameterName = (Core.Name "y"),
Typing.typeParameterConstraints = []}],
Typing.termSignatureParameters = [
Typing.Parameter {
Typing.parameterName = (Core.Name "xs"),
Typing.parameterDescription = (Just "the list of either values to extract Rights from"),
Typing.parameterType = (Core.TypeList (Core.TypeEither (Core.EitherType {
Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "x")),
Core.eitherTypeRight = (Core.TypeVariable (Core.Name "y"))}))),
Typing.parameterIsLazy = False}],
Typing.termSignatureResult = Typing.Result {
Typing.resultDescription = Nothing,
Typing.resultType = (Core.TypeList (Core.TypeVariable (Core.Name "y")))}},
Packaging.primitiveDefinitionIsPure = True,
Packaging.primitiveDefinitionIsTotal = True,
Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "xs"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.foldr")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "e"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "acc"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.either")),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "_"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermVariable (Core.Name "acc"))}))})),
Core.applicationArgument = (Core.TermLambda (Core.Lambda {
Core.lambdaParameter = (Core.Name "r"),
Core.lambdaDomain = Nothing,
Core.lambdaBody = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermApplication (Core.Application {
Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.cons")),
Core.applicationArgument = (Core.TermVariable (Core.Name "r"))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))})),
Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))}))})),
Core.applicationArgument = (Core.TermList [])})),
Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))})))}