hydra-0.15.0: src/main/haskell/Hydra/Sources/Libraries.hs
-- | Implementations of the Hydra standard libraries in Haskell
module Hydra.Sources.Libraries (
module Hydra.Sources.Libraries,
) where
import Hydra.Kernel
import qualified Hydra.Lib.Names as LibNames
import Hydra.Dsl.Prims as Prims
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import qualified Hydra.Lib.Chars as Chars
import qualified Hydra.Lib.Eithers as Eithers
import qualified Hydra.Lib.Equality as Equality
import qualified Hydra.Lib.Lists as Lists
import qualified Hydra.Lib.Literals as Literals
import qualified Hydra.Lib.Logic as Logic
import qualified Hydra.Lib.Maps as Maps
import qualified Hydra.Lib.Math as Math
import qualified Hydra.Lib.Maybes as Maybes
import qualified Hydra.Lib.Pairs as Pairs
import qualified Hydra.Lib.Regex as Regex
import qualified Hydra.Lib.Sets as Sets
import qualified Hydra.Lib.Strings as Strings
import qualified Data.List as L
-- Compatibility aliases for legacy _* names (from the old Staging.Lib.Names module).
-- These map old names to the new generated Hydra.Lib.Names constants.
-- Namespace aliases
_hydra_lib_chars = LibNames.chars
_hydra_lib_eithers = LibNames.eithers
_hydra_lib_equality = LibNames.equality
_hydra_lib_lists = LibNames.lists
_hydra_lib_literals = LibNames.literals
_hydra_lib_logic = LibNames.logic
_hydra_lib_maps = LibNames.maps
_hydra_lib_math = LibNames.math
_hydra_lib_maybes = LibNames.maybes
_hydra_lib_pairs = LibNames.pairs
_hydra_lib_regex = LibNames.regex
_hydra_lib_sets = LibNames.sets
_hydra_lib_strings = LibNames.strings
_hydra_typeclass = LibNames.typeclass
-- Chars
_chars_isAlphaNum = LibNames.charsIsAlphaNum
_chars_isLower = LibNames.charsIsLower
_chars_isSpace = LibNames.charsIsSpace
_chars_isUpper = LibNames.charsIsUpper
_chars_toLower = LibNames.charsToLower
_chars_toUpper = LibNames.charsToUpper
-- Eithers
_eithers_bimap = LibNames.eithersBimap
_eithers_bind = LibNames.eithersBind
_eithers_either = LibNames.eithersEither
_eithers_foldl = LibNames.eithersFoldl
_eithers_fromLeft = LibNames.eithersFromLeft
_eithers_fromRight = LibNames.eithersFromRight
_eithers_isLeft = LibNames.eithersIsLeft
_eithers_isRight = LibNames.eithersIsRight
_eithers_lefts = LibNames.eithersLefts
_eithers_map = LibNames.eithersMap
_eithers_mapList = LibNames.eithersMapList
_eithers_mapMaybe = LibNames.eithersMapMaybe
_eithers_mapSet = LibNames.eithersMapSet
_eithers_partitionEithers = LibNames.eithersPartitionEithers
_eithers_rights = LibNames.eithersRights
-- Equality
_equality_compare = LibNames.equalityCompare
_equality_equal = LibNames.equalityEqual
_equality_gt = LibNames.equalityGt
_equality_gte = LibNames.equalityGte
_equality_identity = LibNames.equalityIdentity
_equality_lt = LibNames.equalityLt
_equality_lte = LibNames.equalityLte
_equality_max = LibNames.equalityMax
_equality_min = LibNames.equalityMin
-- Lists
_lists_apply = LibNames.listsApply
_lists_bind = LibNames.listsBind
_lists_concat = LibNames.listsConcat
_lists_concat2 = LibNames.listsConcat2
_lists_cons = LibNames.listsCons
_lists_drop = LibNames.listsDrop
_lists_dropWhile = LibNames.listsDropWhile
_lists_elem = LibNames.listsElem
_lists_filter = LibNames.listsFilter
_lists_find = LibNames.listsFind
_lists_foldl = LibNames.listsFoldl
_lists_foldr = LibNames.listsFoldr
_lists_group = LibNames.listsGroup
_lists_intercalate = LibNames.listsIntercalate
_lists_intersperse = LibNames.listsIntersperse
_lists_length = LibNames.listsLength
_lists_map = LibNames.listsMap
_lists_maybeAt = LibNames.listsMaybeAt
_lists_maybeHead = LibNames.listsMaybeHead
_lists_maybeInit = LibNames.listsMaybeInit
_lists_maybeLast = LibNames.listsMaybeLast
_lists_maybeTail = LibNames.listsMaybeTail
_lists_nub = LibNames.listsNub
_lists_null = LibNames.listsNull
_lists_partition = LibNames.listsPartition
_lists_pure = LibNames.listsPure
_lists_replicate = LibNames.listsReplicate
_lists_reverse = LibNames.listsReverse
_lists_singleton = LibNames.listsSingleton
_lists_sort = LibNames.listsSort
_lists_sortOn = LibNames.listsSortOn
_lists_span = LibNames.listsSpan
_lists_take = LibNames.listsTake
_lists_transpose = LibNames.listsTranspose
_lists_uncons = LibNames.listsUncons
_lists_zip = LibNames.listsZip
_lists_zipWith = LibNames.listsZipWith
-- Literals
_literals_bigfloatToBigint = LibNames.literalsBigfloatToBigint
_literals_bigfloatToFloat32 = LibNames.literalsBigfloatToFloat32
_literals_bigfloatToFloat64 = LibNames.literalsBigfloatToFloat64
_literals_bigintToBigfloat = LibNames.literalsBigintToBigfloat
_literals_bigintToDecimal = LibNames.literalsBigintToDecimal
_literals_bigintToInt8 = LibNames.literalsBigintToInt8
_literals_bigintToInt16 = LibNames.literalsBigintToInt16
_literals_bigintToInt32 = LibNames.literalsBigintToInt32
_literals_bigintToInt64 = LibNames.literalsBigintToInt64
_literals_bigintToUint8 = LibNames.literalsBigintToUint8
_literals_bigintToUint16 = LibNames.literalsBigintToUint16
_literals_bigintToUint32 = LibNames.literalsBigintToUint32
_literals_bigintToUint64 = LibNames.literalsBigintToUint64
_literals_binaryToBytes = LibNames.literalsBinaryToBytes
_literals_binaryToString = LibNames.literalsBinaryToString
_literals_decimalToBigint = LibNames.literalsDecimalToBigint
_literals_decimalToFloat32 = LibNames.literalsDecimalToFloat32
_literals_decimalToFloat64 = LibNames.literalsDecimalToFloat64
_literals_float32ToBigfloat = LibNames.literalsFloat32ToBigfloat
_literals_float32ToDecimal = LibNames.literalsFloat32ToDecimal
_literals_float64ToBigfloat = LibNames.literalsFloat64ToBigfloat
_literals_float64ToDecimal = LibNames.literalsFloat64ToDecimal
_literals_int8ToBigint = LibNames.literalsInt8ToBigint
_literals_int16ToBigint = LibNames.literalsInt16ToBigint
_literals_int32ToBigint = LibNames.literalsInt32ToBigint
_literals_int64ToBigint = LibNames.literalsInt64ToBigint
_literals_readBigfloat = LibNames.literalsReadBigfloat
_literals_readBigint = LibNames.literalsReadBigint
_literals_readBoolean = LibNames.literalsReadBoolean
_literals_readDecimal = LibNames.literalsReadDecimal
_literals_readFloat32 = LibNames.literalsReadFloat32
_literals_readFloat64 = LibNames.literalsReadFloat64
_literals_readInt8 = LibNames.literalsReadInt8
_literals_readInt16 = LibNames.literalsReadInt16
_literals_readInt32 = LibNames.literalsReadInt32
_literals_readInt64 = LibNames.literalsReadInt64
_literals_readString = LibNames.literalsReadString
_literals_readUint8 = LibNames.literalsReadUint8
_literals_readUint16 = LibNames.literalsReadUint16
_literals_readUint32 = LibNames.literalsReadUint32
_literals_readUint64 = LibNames.literalsReadUint64
_literals_showBigfloat = LibNames.literalsShowBigfloat
_literals_showBigint = LibNames.literalsShowBigint
_literals_showBoolean = LibNames.literalsShowBoolean
_literals_showDecimal = LibNames.literalsShowDecimal
_literals_showFloat32 = LibNames.literalsShowFloat32
_literals_showFloat64 = LibNames.literalsShowFloat64
_literals_showInt8 = LibNames.literalsShowInt8
_literals_showInt16 = LibNames.literalsShowInt16
_literals_showInt32 = LibNames.literalsShowInt32
_literals_showInt64 = LibNames.literalsShowInt64
_literals_showString = LibNames.literalsShowString
_literals_showUint8 = LibNames.literalsShowUint8
_literals_showUint16 = LibNames.literalsShowUint16
_literals_showUint32 = LibNames.literalsShowUint32
_literals_showUint64 = LibNames.literalsShowUint64
_literals_stringToBinary = LibNames.literalsStringToBinary
_literals_uint8ToBigint = LibNames.literalsUint8ToBigint
_literals_uint16ToBigint = LibNames.literalsUint16ToBigint
_literals_uint32ToBigint = LibNames.literalsUint32ToBigint
_literals_uint64ToBigint = LibNames.literalsUint64ToBigint
-- Logic
_logic_and = LibNames.logicAnd
_logic_ifElse = LibNames.logicIfElse
_logic_not = LibNames.logicNot
_logic_or = LibNames.logicOr
-- Maps
_maps_alter = LibNames.mapsAlter
_maps_bimap = LibNames.mapsBimap
_maps_delete = LibNames.mapsDelete
_maps_elems = LibNames.mapsElems
_maps_empty = LibNames.mapsEmpty
_maps_filter = LibNames.mapsFilter
_maps_filterWithKey = LibNames.mapsFilterWithKey
_maps_findWithDefault = LibNames.mapsFindWithDefault
_maps_fromList = LibNames.mapsFromList
_maps_insert = LibNames.mapsInsert
_maps_keys = LibNames.mapsKeys
_maps_lookup = LibNames.mapsLookup
_maps_map = LibNames.mapsMap
_maps_mapKeys = LibNames.mapsMapKeys
_maps_member = LibNames.mapsMember
_maps_null = LibNames.mapsNull
_maps_singleton = LibNames.mapsSingleton
_maps_size = LibNames.mapsSize
_maps_toList = LibNames.mapsToList
_maps_union = LibNames.mapsUnion
-- Math
_math_abs = LibNames.mathAbs
_math_acos = LibNames.mathAcos
_math_acosh = LibNames.mathAcosh
_math_add = LibNames.mathAdd
_math_addFloat64 = LibNames.mathAddFloat64
_math_asin = LibNames.mathAsin
_math_asinh = LibNames.mathAsinh
_math_atan = LibNames.mathAtan
_math_atan2 = LibNames.mathAtan2
_math_atanh = LibNames.mathAtanh
_math_ceiling = LibNames.mathCeiling
_math_cos = LibNames.mathCos
_math_cosh = LibNames.mathCosh
_math_e = LibNames.mathE
_math_even = LibNames.mathEven
_math_exp = LibNames.mathExp
_math_floor = LibNames.mathFloor
_math_log = LibNames.mathLog
_math_logBase = LibNames.mathLogBase
_math_max = LibNames.mathMax
_math_maybeDiv = LibNames.mathMaybeDiv
_math_min = LibNames.mathMin
_math_maybeMod = LibNames.mathMaybeMod
_math_mul = LibNames.mathMul
_math_mulFloat64 = LibNames.mathMulFloat64
_math_negate = LibNames.mathNegate
_math_negateFloat64 = LibNames.mathNegateFloat64
_math_odd = LibNames.mathOdd
_math_pi = LibNames.mathPi
_math_pow = LibNames.mathPow
_math_maybePred = LibNames.mathMaybePred
_math_range = LibNames.mathRange
_math_maybeRem = LibNames.mathMaybeRem
_math_round = LibNames.mathRound
_math_roundBigfloat = LibNames.mathRoundBigfloat
_math_roundFloat32 = LibNames.mathRoundFloat32
_math_roundFloat64 = LibNames.mathRoundFloat64
_math_signum = LibNames.mathSignum
_math_sin = LibNames.mathSin
_math_sinh = LibNames.mathSinh
_math_sqrt = LibNames.mathSqrt
_math_sub = LibNames.mathSub
_math_subFloat64 = LibNames.mathSubFloat64
_math_maybeSucc = LibNames.mathMaybeSucc
_math_tan = LibNames.mathTan
_math_tanh = LibNames.mathTanh
_math_truncate = LibNames.mathTruncate
-- Maybes
_maybes_apply = LibNames.maybesApply
_maybes_bind = LibNames.maybesBind
_maybes_cases = LibNames.maybesCases
_maybes_cat = LibNames.maybesCat
_maybes_compose = LibNames.maybesCompose
_maybes_fromMaybe = LibNames.maybesFromMaybe
_maybes_isJust = LibNames.maybesIsJust
_maybes_isNothing = LibNames.maybesIsNothing
_maybes_map = LibNames.maybesMap
_maybes_mapMaybe = LibNames.maybesMapMaybe
_maybes_maybe = LibNames.maybesMaybe
_maybes_pure = LibNames.maybesPure
_maybes_toList = LibNames.maybesToList
-- Pairs
_pairs_bimap = LibNames.pairsBimap
_pairs_first = LibNames.pairsFirst
_pairs_second = LibNames.pairsSecond
-- Sets
_sets_delete = LibNames.setsDelete
_sets_difference = LibNames.setsDifference
_sets_empty = LibNames.setsEmpty
_sets_fromList = LibNames.setsFromList
_sets_insert = LibNames.setsInsert
_sets_intersection = LibNames.setsIntersection
_sets_map = LibNames.setsMap
_sets_member = LibNames.setsMember
_sets_null = LibNames.setsNull
_sets_singleton = LibNames.setsSingleton
_sets_size = LibNames.setsSize
_sets_toList = LibNames.setsToList
_sets_union = LibNames.setsUnion
_sets_unions = LibNames.setsUnions
-- Regex
_regex_find = LibNames.regexFind
_regex_findAll = LibNames.regexFindAll
_regex_matches = LibNames.regexMatches
_regex_replace = LibNames.regexReplace
_regex_replaceAll = LibNames.regexReplaceAll
_regex_split = LibNames.regexSplit
-- Strings
_strings_cat = LibNames.stringsCat
_strings_cat2 = LibNames.stringsCat2
_strings_fromList = LibNames.stringsFromList
_strings_intercalate = LibNames.stringsIntercalate
_strings_length = LibNames.stringsLength
_strings_lines = LibNames.stringsLines
_strings_maybeCharAt = LibNames.stringsMaybeCharAt
_strings_null = LibNames.stringsNull
_strings_splitOn = LibNames.stringsSplitOn
_strings_toList = LibNames.stringsToList
_strings_toLower = LibNames.stringsToLower
_strings_toUpper = LibNames.stringsToUpper
_strings_unlines = LibNames.stringsUnlines
-- Type classes
_typeclass_Eq = LibNames.typeclassEq
_typeclass_Ord = LibNames.typeclassOrd
-- Type variables (TypeVar) for primitive type schemes
-- Unconstrained
_a, _b, _c, _d, _k, _k1, _k2, _s, _v, _v1, _v2, _w, _x, _y, _z :: TypeVar
_a = v "a"
_b = v "b"
_c = v "c"
_d = v "d"
_k = v "k"
_k1 = v "k1"
_k2 = v "k2"
_s = v "s"
_v = v "v"
_v1 = v "v1"
_v2 = v "v2"
_w = v "w"
_x = v "x"
_y = v "y"
_z = v "z"
-- Ord-constrained
_kOrd, _k1Ord, _k2Ord, _xOrd, _yOrd :: TypeVar
_kOrd = vOrd "k"
_k1Ord = vOrd "k1"
_k2Ord = vOrd "k2"
_xOrd = vOrd "x"
_yOrd = vOrd "y"
-- Eq-constrained
_xEq :: TypeVar
_xEq = vEq "x"
-- Term coders for type variables (used in primitive implementations)
a_, b_, c_, d_, k_, k1_, k2_, s_, v_, v1_, v2_, w_, x_, y_, z_ :: TermCoder Term
a_ = variable "a"
b_ = variable "b"
c_ = variable "c"
d_ = variable "d"
k_ = variable "k"
k1_ = variable "k1"
k2_ = variable "k2"
s_ = variable "s"
v_ = variable "v"
v1_ = variable "v1"
v2_ = variable "v2"
w_ = variable "w"
x_ = variable "x"
y_ = variable "y"
z_ = variable "z"
standardLibraries :: [Library]
standardLibraries = [
hydraLibChars,
hydraLibEithers,
hydraLibEquality,
hydraLibLists,
hydraLibLiterals,
hydraLibLogic,
hydraLibMaps,
hydraLibMathFloat64,
hydraLibMathInt32,
hydraLibMaybes,
hydraLibPairs,
hydraLibRegex,
hydraLibSets,
hydraLibStrings]
standardLibrary :: Namespace -> [Primitive] -> Library
standardLibrary ns prims = Library {
libraryNamespace = ns,
libraryPrefix = L.drop (L.length ("hydra.lib." :: String)) $ unNamespace ns,
libraryPrimitives = prims}
-- | A TermCoder for function types which uses beta reduction to bridge term-level
-- functions to native functions. This allows higher-order primitives like map,
-- filter, foldl, etc. to use native implementations rather than eval-level ones.
fun :: TermCoder x -> TermCoder y -> TermCoder (x -> y)
fun = Prims.functionWithReduce (\cx g t -> reduceTerm cx g True t)
hydraLibChars :: Library
hydraLibChars = standardLibrary _hydra_lib_chars [
prim1 _chars_isAlphaNum Chars.isAlphaNum [] int32 boolean,
prim1 _chars_isLower Chars.isLower [] int32 boolean,
prim1 _chars_isSpace Chars.isSpace [] int32 boolean,
prim1 _chars_isUpper Chars.isUpper [] int32 boolean,
prim1 _chars_toLower Chars.toLower [] int32 int32,
prim1 _chars_toUpper Chars.toUpper [] int32 int32]
hydraLibEithers :: Library
hydraLibEithers = standardLibrary _hydra_lib_eithers [
prim3 _eithers_bimap Eithers.bimap [_x, _y, _z, _w] (fun x_ z_) (fun y_ w_) (Prims.either_ x_ y_) (Prims.either_ z_ w_),
prim2 _eithers_bind Eithers.bind [_x, _y, _z] (Prims.either_ x_ y_) (fun y_ (Prims.either_ x_ z_)) (Prims.either_ x_ z_),
prim3 _eithers_either Eithers.either [_x, _y, _z] (fun x_ z_) (fun y_ z_) (Prims.either_ x_ y_) z_,
prim3 _eithers_foldl Eithers.foldl [_x, _y, _z] (fun x_ (fun y_ (Prims.either_ z_ x_))) x_ (list y_) (Prims.either_ z_ x_),
prim2 _eithers_fromLeft Eithers.fromLeft [_x, _y] x_ (Prims.either_ x_ y_) x_,
prim2 _eithers_fromRight Eithers.fromRight [_x, _y] y_ (Prims.either_ x_ y_) y_,
prim1 _eithers_isLeft Eithers.isLeft [_x, _y] (Prims.either_ x_ y_) boolean,
prim1 _eithers_isRight Eithers.isRight [_x, _y] (Prims.either_ x_ y_) boolean,
prim1 _eithers_lefts Eithers.lefts [_x, _y] (list $ Prims.either_ x_ y_) (list x_),
prim2 _eithers_map Eithers.map [_x, _y, _z] (fun x_ y_) (Prims.either_ z_ x_) (Prims.either_ z_ y_),
prim2 _eithers_mapList Eithers.mapList [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (list x_) (Prims.either_ z_ (list y_)),
prim2 _eithers_mapMaybe Eithers.mapMaybe [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (optional x_) (Prims.either_ z_ (optional y_)),
prim2 _eithers_mapSet Eithers.mapSet [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (set x_) (Prims.either_ z_ (set y_)),
prim1 _eithers_partitionEithers Eithers.partitionEithers [_x, _y] (list $ Prims.either_ x_ y_) (pair (list x_) (list y_)),
prim1 _eithers_rights Eithers.rights [_x, _y] (list $ Prims.either_ x_ y_) (list y_)]
hydraLibEquality :: Library
hydraLibEquality = standardLibrary _hydra_lib_equality [
prim2 _equality_compare Equality.compare [_xOrd] x_ x_ comparison,
prim2 _equality_equal Equality.equal [_xEq] x_ x_ boolean,
prim2 _equality_gt Equality.gt [_xOrd] x_ x_ boolean,
prim2 _equality_gte Equality.gte [_xOrd] x_ x_ boolean,
prim1 _equality_identity Equality.identity [_x] x_ x_,
prim2 _equality_lt Equality.lt [_xOrd] x_ x_ boolean,
prim2 _equality_lte Equality.lte [_xOrd] x_ x_ boolean,
prim2 _equality_max Equality.max [_xOrd] x_ x_ x_,
prim2 _equality_min Equality.min [_xOrd] x_ x_ x_]
hydraLibLists :: Library
hydraLibLists = standardLibrary _hydra_lib_lists [
prim2 _lists_apply Lists.apply [_x, _y] (list $ fun x_ y_) (list x_) (list y_),
prim2 _lists_bind Lists.bind [_x, _y] (list x_) (fun x_ (list y_)) (list y_),
prim1 _lists_concat Lists.concat [_x] (list (list x_)) (list x_),
prim2 _lists_concat2 Lists.concat2 [_x] (list x_) (list x_) (list x_),
prim2 _lists_cons Lists.cons [_x] x_ (list x_) (list x_),
prim2 _lists_drop Lists.drop [_x] int32 (list x_) (list x_),
prim2 _lists_dropWhile Lists.dropWhile [_x] (fun x_ boolean) (list x_) (list x_),
prim2 _lists_elem Lists.elem [_xEq] x_ (list x_) boolean,
prim2 _lists_filter Lists.filter [_x] (fun x_ boolean) (list x_) (list x_),
prim2 _lists_find Lists.find [_x] (fun x_ boolean) (list x_) (optional x_),
prim3 _lists_foldl Lists.foldl [_y, _x] (fun y_ (fun x_ y_)) y_ (list x_) y_,
prim3 _lists_foldr Lists.foldr [_x, _y] (fun x_ (fun y_ y_)) y_ (list x_) y_,
prim1 _lists_group Lists.group [_xEq] (list x_) (list (list x_)),
prim2 _lists_intercalate Lists.intercalate [_x] (list x_) (list (list x_)) (list x_),
prim2 _lists_intersperse Lists.intersperse [_x] x_ (list x_) (list x_),
prim1 _lists_length Lists.length [_x] (list x_) int32,
prim2 _lists_map Lists.map [_x, _y] (fun x_ y_) (list x_) (list y_),
prim2 _lists_maybeAt Lists.maybeAt [_x] int32 (list x_) (optional x_),
prim1 _lists_maybeHead Lists.maybeHead [_x] (list x_) (optional x_),
prim1 _lists_maybeInit Lists.maybeInit [_x] (list x_) (optional (list x_)),
prim1 _lists_maybeLast Lists.maybeLast [_x] (list x_) (optional x_),
prim1 _lists_maybeTail Lists.maybeTail [_x] (list x_) (optional (list x_)),
prim1 _lists_nub Lists.nub [_xEq] (list x_) (list x_),
prim1 _lists_null Lists.null [_x] (list x_) boolean,
prim2 _lists_partition Lists.partition [_x] (fun x_ boolean) (list x_) (pair (list x_) (list x_)),
prim1 _lists_pure Lists.pure [_x] x_ (list x_),
prim2 _lists_replicate Lists.replicate [_x] int32 x_ (list x_),
prim1 _lists_reverse Lists.reverse [_x] (list x_) (list x_),
prim1 _lists_singleton Lists.singleton [_x] x_ (list x_),
prim1 _lists_sort Lists.sort [_xOrd] (list x_) (list x_),
prim2 _lists_sortOn Lists.sortOn [_x, _yOrd] (fun x_ y_) (list x_) (list x_),
prim2 _lists_span Lists.span [_x] (fun x_ boolean) (list x_) (pair (list x_) (list x_)),
prim2 _lists_take Lists.take [_x] int32 (list x_) (list x_),
prim1 _lists_transpose Lists.transpose [_x] (list (list x_)) (list (list x_)),
prim1 _lists_uncons Lists.uncons [_x] (list x_) (optional (pair x_ (list x_))),
prim2 _lists_zip Lists.zip [_x, _y] (list x_) (list y_) (list (pair x_ y_)),
prim3 _lists_zipWith Lists.zipWith [_x, _y, _z] (fun x_ $ fun y_ z_) (list x_) (list y_) (list z_)]
hydraLibLiterals :: Library
hydraLibLiterals = standardLibrary _hydra_lib_literals [
prim1 _literals_bigfloatToBigint Literals.bigfloatToBigint [] bigfloat bigint,
prim1 _literals_bigfloatToFloat32 Literals.bigfloatToFloat32 [] bigfloat float32,
prim1 _literals_bigfloatToFloat64 Literals.bigfloatToFloat64 [] bigfloat float64,
prim1 _literals_bigintToBigfloat Literals.bigintToBigfloat [] bigint bigfloat,
prim1 _literals_bigintToDecimal Literals.bigintToDecimal [] bigint decimal,
prim1 _literals_bigintToInt8 Literals.bigintToInt8 [] bigint int8,
prim1 _literals_bigintToInt16 Literals.bigintToInt16 [] bigint int16,
prim1 _literals_bigintToInt32 Literals.bigintToInt32 [] bigint int32,
prim1 _literals_bigintToInt64 Literals.bigintToInt64 [] bigint int64,
prim1 _literals_bigintToUint8 Literals.bigintToUint8 [] bigint uint8,
prim1 _literals_bigintToUint16 Literals.bigintToUint16 [] bigint uint16,
prim1 _literals_bigintToUint32 Literals.bigintToUint32 [] bigint uint32,
prim1 _literals_bigintToUint64 Literals.bigintToUint64 [] bigint uint64,
prim1 _literals_binaryToBytes Literals.binaryToBytes [] binary (list int32),
prim1 _literals_binaryToString Literals.binaryToString [] binary string,
prim1 _literals_decimalToBigint Literals.decimalToBigint [] decimal bigint,
prim1 _literals_decimalToFloat32 Literals.decimalToFloat32 [] decimal float32,
prim1 _literals_decimalToFloat64 Literals.decimalToFloat64 [] decimal float64,
prim1 _literals_float32ToBigfloat Literals.float32ToBigfloat [] float32 bigfloat,
prim1 _literals_float32ToDecimal Literals.float32ToDecimal [] float32 decimal,
prim1 _literals_float64ToBigfloat Literals.float64ToBigfloat [] float64 bigfloat,
prim1 _literals_float64ToDecimal Literals.float64ToDecimal [] float64 decimal,
prim1 _literals_int8ToBigint Literals.int8ToBigint [] int8 bigint,
prim1 _literals_int16ToBigint Literals.int16ToBigint [] int16 bigint,
prim1 _literals_int32ToBigint Literals.int32ToBigint [] int32 bigint,
prim1 _literals_int64ToBigint Literals.int64ToBigint [] int64 bigint,
prim1 _literals_readBigfloat Literals.readBigfloat [] string (optional bigfloat),
prim1 _literals_readBigint Literals.readBigint [] string (optional bigint),
prim1 _literals_readBoolean Literals.readBoolean [] string (optional boolean),
prim1 _literals_readDecimal Literals.readDecimal [] string (optional decimal),
prim1 _literals_readFloat32 Literals.readFloat32 [] string (optional float32),
prim1 _literals_readFloat64 Literals.readFloat64 [] string (optional float64),
prim1 _literals_readInt8 Literals.readInt8 [] string (optional int8),
prim1 _literals_readInt16 Literals.readInt16 [] string (optional int16),
prim1 _literals_readInt32 Literals.readInt32 [] string (optional int32),
prim1 _literals_readInt64 Literals.readInt64 [] string (optional int64),
prim1 _literals_readString Literals.readString [] string (optional string),
prim1 _literals_readUint8 Literals.readUint8 [] string (optional uint8),
prim1 _literals_readUint16 Literals.readUint16 [] string (optional uint16),
prim1 _literals_readUint32 Literals.readUint32 [] string (optional uint32),
prim1 _literals_readUint64 Literals.readUint64 [] string (optional uint64),
prim1 _literals_showBigfloat Literals.showBigfloat [] bigfloat string,
prim1 _literals_showBigint Literals.showBigint [] bigint string,
prim1 _literals_showBoolean Literals.showBoolean [] boolean string,
prim1 _literals_showDecimal Literals.showDecimal [] decimal string,
prim1 _literals_showFloat32 Literals.showFloat32 [] float32 string,
prim1 _literals_showFloat64 Literals.showFloat64 [] float64 string,
prim1 _literals_showInt8 Literals.showInt8 [] int8 string,
prim1 _literals_showInt16 Literals.showInt16 [] int16 string,
prim1 _literals_showInt32 Literals.showInt32 [] int32 string,
prim1 _literals_showInt64 Literals.showInt64 [] int64 string,
prim1 _literals_showString Literals.showString [] string string,
prim1 _literals_showUint8 Literals.showUint8 [] uint8 string,
prim1 _literals_showUint16 Literals.showUint16 [] uint16 string,
prim1 _literals_showUint32 Literals.showUint32 [] uint32 string,
prim1 _literals_showUint64 Literals.showUint64 [] uint64 string,
prim1 _literals_stringToBinary Literals.stringToBinary [] string binary,
prim1 _literals_uint8ToBigint Literals.uint8ToBigint [] uint8 bigint,
prim1 _literals_uint16ToBigint Literals.uint16ToBigint [] uint16 bigint,
prim1 _literals_uint32ToBigint Literals.uint32ToBigint [] uint32 bigint,
prim1 _literals_uint64ToBigint Literals.uint64ToBigint [] uint64 bigint]
hydraLibLogic :: Library
hydraLibLogic = standardLibrary _hydra_lib_logic [
prim2 _logic_and Logic.and [] boolean boolean boolean,
prim3 _logic_ifElse Logic.ifElse [_x] boolean x_ x_ x_,
prim1 _logic_not Logic.not [] boolean boolean,
prim2 _logic_or Logic.or [] boolean boolean boolean]
hydraLibMaps :: Library
hydraLibMaps = standardLibrary _hydra_lib_maps [
prim3 _maps_alter Maps.alter [_v, _kOrd] (fun (optional v_) (optional v_)) k_ mapKv mapKv,
prim3 _maps_bimap Maps.bimap [_k1Ord, _k2Ord, _v1, _v2] (fun k1_ k2_) (fun v1_ v2_) (Prims.map k1_ v1_) (Prims.map k2_ v2_),
prim2 _maps_delete Maps.delete [_kOrd, _v] k_ mapKv mapKv,
prim1 _maps_elems Maps.elems [_kOrd, _v] mapKv (list v_),
prim0 _maps_empty Maps.empty [_kOrd, _v] mapKv,
prim2 _maps_filter Maps.filter [_v, _kOrd] (fun v_ boolean) mapKv mapKv,
prim2 _maps_filterWithKey Maps.filterWithKey [_kOrd, _v] (fun k_ (fun v_ boolean)) mapKv mapKv,
prim3 _maps_findWithDefault Maps.findWithDefault [_v, _kOrd] v_ k_ mapKv v_,
prim1 _maps_fromList Maps.fromList [_kOrd, _v] (list $ pair k_ v_) mapKv,
prim3 _maps_insert Maps.insert [_kOrd, _v] k_ v_ mapKv mapKv,
prim1 _maps_keys Maps.keys [_kOrd, _v] mapKv (list k_),
prim2 _maps_lookup Maps.lookup [_kOrd, _v] k_ mapKv (optional v_),
prim2 _maps_map Maps.map [_v1, _v2, _kOrd] (fun v1_ v2_) (Prims.map k_ v1_) (Prims.map k_ v2_),
prim2 _maps_mapKeys Maps.mapKeys [_k1Ord, _k2Ord, _v] (fun k1_ k2_) (Prims.map k1_ v_) (Prims.map k2_ v_),
prim2 _maps_member Maps.member [_kOrd, _v] k_ mapKv boolean,
prim1 _maps_null Maps.null [_kOrd, _v] mapKv boolean,
prim2 _maps_singleton Maps.singleton [_kOrd, _v] k_ v_ mapKv,
prim1 _maps_size Maps.size [_kOrd, _v] mapKv int32,
prim1 _maps_toList Maps.toList [_kOrd, _v] mapKv (list $ pair k_ v_),
prim2 _maps_union Maps.union [_kOrd, _v] mapKv mapKv mapKv]
where
mapKv = Prims.map k_ v_
hydraLibMathFloat64 :: Library
hydraLibMathFloat64 = standardLibrary _hydra_lib_math [
prim1 _math_acos Math.acos [] float64 float64,
prim1 _math_acosh Math.acosh [] float64 float64,
prim2 _math_addFloat64 Math.addFloat64 [] float64 float64 float64,
prim1 _math_asin Math.asin [] float64 float64,
prim1 _math_asinh Math.asinh [] float64 float64,
prim1 _math_atan Math.atan [] float64 float64,
prim2 _math_atan2 Math.atan2 [] float64 float64 float64,
prim1 _math_atanh Math.atanh [] float64 float64,
prim1 _math_ceiling Math.ceiling [] float64 float64,
prim1 _math_cos Math.cos [] float64 float64,
prim1 _math_cosh Math.cosh [] float64 float64,
prim0 _math_e Math.e [] float64,
prim1 _math_exp Math.exp [] float64 float64,
prim1 _math_floor Math.floor [] float64 float64,
prim1 _math_log Math.log [] float64 float64,
prim2 _math_logBase Math.logBase [] float64 float64 float64,
prim2 _math_mulFloat64 Math.mulFloat64 [] float64 float64 float64,
prim1 _math_negateFloat64 Math.negateFloat64 [] float64 float64,
prim0 _math_pi Math.pi [] float64,
prim2 _math_pow Math.pow [] float64 float64 float64,
prim1 _math_round Math.round [] float64 float64,
prim2 _math_roundBigfloat Math.roundBigfloat [] int32 bigfloat bigfloat,
prim2 _math_roundFloat32 Math.roundFloat32 [] int32 float32 float32,
prim2 _math_roundFloat64 Math.roundFloat64 [] int32 float64 float64,
prim1 _math_sin Math.sin [] float64 float64,
prim1 _math_sinh Math.sinh [] float64 float64,
prim1 _math_sqrt Math.sqrt [] float64 float64,
prim2 _math_subFloat64 Math.subFloat64 [] float64 float64 float64,
prim1 _math_tan Math.tan [] float64 float64,
prim1 _math_tanh Math.tanh [] float64 float64,
prim1 _math_truncate Math.truncate [] float64 float64]
hydraLibMathInt32 :: Library
hydraLibMathInt32 = standardLibrary _hydra_lib_math [
prim1 _math_abs Math.abs [] int32 int32,
prim2 _math_add Math.add [] int32 int32 int32,
prim1 _math_even Math.even [] int32 boolean,
prim2 _math_max Math.max [] int32 int32 int32,
prim2 _math_maybeDiv Math.maybeDiv [] int32 int32 (optional int32),
prim2 _math_min Math.min [] int32 int32 int32,
prim2 _math_maybeMod Math.maybeMod [] int32 int32 (optional int32),
prim2 _math_mul Math.mul [] int32 int32 int32,
prim1 _math_negate Math.negate [] int32 int32,
prim1 _math_odd Math.odd [] int32 boolean,
prim1 _math_maybePred Math.maybePred [] int32 (optional int32),
prim2 _math_range Math.range [] int32 int32 (list int32),
prim2 _math_maybeRem Math.maybeRem [] int32 int32 (optional int32),
prim1 _math_signum Math.signum [] int32 int32,
prim2 _math_sub Math.sub [] int32 int32 int32,
prim1 _math_maybeSucc Math.maybeSucc [] int32 (optional int32)]
hydraLibMaybes :: Library
hydraLibMaybes = standardLibrary _hydra_lib_maybes [
prim2 _maybes_apply Maybes.apply [_x, _y] (optional $ fun x_ y_) (optional x_) (optional y_),
prim2 _maybes_bind Maybes.bind [_x, _y] (optional x_) (fun x_ (optional y_)) (optional y_),
prim3 _maybes_cases Maybes.cases [_x, _y] (optional x_) y_ (fun x_ y_) y_,
prim1 _maybes_cat Maybes.cat [_x] (list $ optional x_) (list x_),
prim3 _maybes_compose Maybes.compose [_x, _y, _z] (fun x_ $ optional y_) (fun y_ $ optional z_) x_ (optional z_),
prim2 _maybes_fromMaybe Maybes.fromMaybe [_x] x_ (optional x_) x_,
prim1 _maybes_isJust Maybes.isJust [_x] (optional x_) boolean,
prim1 _maybes_isNothing Maybes.isNothing [_x] (optional x_) boolean,
prim2 _maybes_map Maybes.map [_x, _y] (fun x_ y_) (optional x_) (optional y_),
prim2 _maybes_mapMaybe Maybes.mapMaybe [_x, _y] (fun x_ $ optional y_) (list x_) (list y_),
prim3 _maybes_maybe Maybes.maybe [_y, _x] y_ (fun x_ y_) (optional x_) y_,
prim1 _maybes_pure Maybes.pure [_x] x_ (optional x_),
prim1 _maybes_toList Maybes.toList [_x] (optional x_) (list x_)]
hydraLibPairs :: Library
hydraLibPairs = standardLibrary _hydra_lib_pairs [
prim3 _pairs_bimap Pairs.bimap [_a, _b, _c, _d] (fun a_ c_) (fun b_ d_) (pair a_ b_) (pair c_ d_),
prim1 _pairs_first Pairs.first [_a, _b] (pair a_ b_) a_,
prim1 _pairs_second Pairs.second [_a, _b] (pair a_ b_) b_]
hydraLibSets :: Library
hydraLibSets = standardLibrary _hydra_lib_sets [
prim2 _sets_delete Sets.delete [_xOrd] x_ (set x_) (set x_),
prim2 _sets_difference Sets.difference [_xOrd] (set x_) (set x_) (set x_),
prim0 _sets_empty Sets.empty [_xOrd] (set x_),
prim1 _sets_fromList Sets.fromList [_xOrd] (list x_) (set x_),
prim2 _sets_insert Sets.insert [_xOrd] x_ (set x_) (set x_),
prim2 _sets_intersection Sets.intersection [_xOrd] (set x_) (set x_) (set x_),
prim2 _sets_map Sets.map [_xOrd, _yOrd] (fun x_ y_) (set x_) (set y_),
prim2 _sets_member Sets.member [_xOrd] x_ (set x_) boolean,
prim1 _sets_null Sets.null [_xOrd] (set x_) boolean,
prim1 _sets_singleton Sets.singleton [_xOrd] x_ (set x_),
prim1 _sets_size Sets.size [_xOrd] (set x_) int32,
prim1 _sets_toList Sets.toList [_xOrd] (set x_) (list x_),
prim2 _sets_union Sets.union [_xOrd] (set x_) (set x_) (set x_),
prim1 _sets_unions Sets.unions [_xOrd] (list $ set x_) (set x_)]
hydraLibRegex :: Library
hydraLibRegex = standardLibrary _hydra_lib_regex [
prim2 _regex_find Regex.find [] string string (optional string),
prim2 _regex_findAll Regex.findAll [] string string (list string),
prim2 _regex_matches Regex.matches [] string string boolean,
prim3 _regex_replace Regex.replace [] string string string string,
prim3 _regex_replaceAll Regex.replaceAll [] string string string string,
prim2 _regex_split Regex.split [] string string (list string)]
hydraLibStrings :: Library
hydraLibStrings = standardLibrary _hydra_lib_strings [
prim1 _strings_cat Strings.cat [] (list string) string,
prim2 _strings_cat2 Strings.cat2 [] string string string,
prim1 _strings_fromList Strings.fromList [] (list int32) string,
prim2 _strings_intercalate Strings.intercalate [] string (list string) string,
prim1 _strings_length Strings.length [] string int32,
prim1 _strings_lines Strings.lines [] string (list string),
prim2 _strings_maybeCharAt Strings.maybeCharAt [] int32 string (optional int32),
prim1 _strings_null Strings.null [] string boolean,
prim2 _strings_splitOn Strings.splitOn [] string string (list string),
prim1 _strings_toList Strings.toList [] string (list int32),
prim1 _strings_toLower Strings.toLower [] string string,
prim1 _strings_toUpper Strings.toUpper [] string string,
prim1 _strings_unlines Strings.unlines [] (list string) string]