hydra-kernel 0.17.1 → 0.17.2
raw patch · 169 files changed
+7823/−2349 lines, 169 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Hydra.Checking: checkNominalApplication :: InferenceContext -> Graph -> Name -> [Type] -> Either Error ((), InferenceContext)
- Hydra.Checking: checkType :: InferenceContext -> Graph -> Term -> Type -> Either Error ()
- Hydra.Checking: checkTypeVariables :: t0 -> t1 -> ()
- Hydra.Constants: debugInference :: Bool
- Hydra.Dsl.Checking: checkNominalApplication :: TypedTerm InferenceContext -> TypedTerm Graph -> TypedTerm Name -> TypedTerm [Type] -> TypedTerm (Either Error ((), InferenceContext))
- Hydra.Dsl.Checking: checkType :: TypedTerm InferenceContext -> TypedTerm Graph -> TypedTerm Term -> TypedTerm Type -> TypedTerm (Either Error ())
- Hydra.Dsl.Checking: checkTypeVariables :: TypedTerm t0 -> TypedTerm t1 -> TypedTerm ()
- Hydra.Dsl.Constants: debugInference :: TypedTerm Bool
- Hydra.Dsl.Show.Docs: definitionReference :: TypedTerm DefinitionReference -> TypedTerm String
- Hydra.Dsl.Show.Docs: docSegment :: TypedTerm DocSegment -> TypedTerm String
- Hydra.Dsl.Show.Docs: docSegmentWith :: TypedTerm (EntityReference -> String) -> TypedTerm DocSegment -> TypedTerm String
- Hydra.Dsl.Show.Docs: docSegments :: TypedTerm [DocSegment] -> TypedTerm String
- Hydra.Dsl.Show.Docs: docSegmentsWith :: TypedTerm (EntityReference -> String) -> TypedTerm [DocSegment] -> TypedTerm String
- Hydra.Dsl.Show.Docs: entityReference :: TypedTerm EntityReference -> TypedTerm String
- Hydra.Dsl.Show.Docs: renderDocString :: TypedTerm String -> TypedTerm String
- Hydra.Dsl.Show.Docs: renderDocStringWith :: TypedTerm (EntityReference -> String) -> TypedTerm String -> TypedTerm String
- Hydra.Inference: inferTypeOfPrimitive :: InferenceContext -> Graph -> Name -> Either Error InferenceResult
- Hydra.Read.Docs: parseDocAnnotation :: String -> Maybe EntityReference
- Hydra.Read.Docs: parseDocString :: String -> [DocSegment]
- Hydra.Show.Core: binding :: Binding -> String
- Hydra.Show.Core: caseStatement :: CaseStatement -> String
- Hydra.Show.Core: either :: (t0 -> String) -> (t1 -> String) -> Either t0 t1 -> String
- Hydra.Show.Core: field :: Field -> String
- Hydra.Show.Core: fieldType :: FieldType -> String
- Hydra.Show.Core: fields :: [Field] -> String
- Hydra.Show.Core: float :: FloatValue -> String
- Hydra.Show.Core: floatType :: FloatType -> String
- Hydra.Show.Core: injection :: Injection -> String
- Hydra.Show.Core: integer :: IntegerValue -> String
- Hydra.Show.Core: integerType :: IntegerType -> String
- Hydra.Show.Core: lambda :: Lambda -> String
- Hydra.Show.Core: let_ :: Let -> String
- Hydra.Show.Core: list :: (t0 -> String) -> [t0] -> String
- Hydra.Show.Core: literal :: Literal -> String
- Hydra.Show.Core: literalType :: LiteralType -> String
- Hydra.Show.Core: map :: Ord t0 => (t0 -> String) -> (t1 -> String) -> Map t0 t1 -> String
- Hydra.Show.Core: optional :: (t0 -> String) -> Maybe t0 -> String
- Hydra.Show.Core: pair :: (t0 -> String) -> (t1 -> String) -> (t0, t1) -> String
- Hydra.Show.Core: projection :: Projection -> String
- Hydra.Show.Core: readTerm :: String -> Maybe Term
- Hydra.Show.Core: set :: Ord t0 => (t0 -> String) -> Set t0 -> String
- Hydra.Show.Core: term :: Term -> String
- Hydra.Show.Core: typeScheme :: TypeScheme -> String
- Hydra.Show.Core: type_ :: Type -> String
- Hydra.Show.Docs: definitionReference :: DefinitionReference -> String
- Hydra.Show.Docs: docSegment :: DocSegment -> String
- Hydra.Show.Docs: docSegmentWith :: (EntityReference -> String) -> DocSegment -> String
- Hydra.Show.Docs: docSegments :: [DocSegment] -> String
- Hydra.Show.Docs: docSegmentsWith :: (EntityReference -> String) -> [DocSegment] -> String
- Hydra.Show.Docs: entityReference :: EntityReference -> String
- Hydra.Show.Docs: renderDocString :: String -> String
- Hydra.Show.Docs: renderDocStringWith :: (EntityReference -> String) -> String -> String
- Hydra.Show.Error.Core: constantConditionError :: ConstantConditionError -> String
- Hydra.Show.Error.Core: duplicateBindingError :: DuplicateBindingError -> String
- Hydra.Show.Error.Core: duplicateFieldError :: DuplicateFieldError -> String
- Hydra.Show.Error.Core: duplicateRecordTypeFieldNamesError :: DuplicateRecordTypeFieldNamesError -> String
- Hydra.Show.Error.Core: duplicateUnionTypeFieldNamesError :: DuplicateUnionTypeFieldNamesError -> String
- Hydra.Show.Error.Core: emptyCaseStatementError :: EmptyCaseStatementError -> String
- Hydra.Show.Error.Core: emptyLetBindingsError :: t0 -> String
- Hydra.Show.Error.Core: emptyRecordTypeError :: t0 -> String
- Hydra.Show.Error.Core: emptyTermAnnotationError :: t0 -> String
- Hydra.Show.Error.Core: emptyTypeAnnotationError :: t0 -> String
- Hydra.Show.Error.Core: emptyTypeNameInTermError :: t0 -> String
- Hydra.Show.Error.Core: emptyUnionTypeError :: t0 -> String
- Hydra.Show.Error.Core: invalidForallParameterNameError :: InvalidForallParameterNameError -> String
- Hydra.Show.Error.Core: invalidLambdaParameterNameError :: InvalidLambdaParameterNameError -> String
- Hydra.Show.Error.Core: invalidLetBindingNameError :: InvalidLetBindingNameError -> String
- Hydra.Show.Error.Core: invalidTermError :: InvalidTermError -> String
- Hydra.Show.Error.Core: invalidTypeError :: InvalidTypeError -> String
- Hydra.Show.Error.Core: invalidTypeLambdaParameterNameError :: InvalidTypeLambdaParameterNameError -> String
- Hydra.Show.Error.Core: invalidTypeSchemeVariableNameError :: InvalidTypeSchemeVariableNameError -> String
- Hydra.Show.Error.Core: nestedTermAnnotationError :: t0 -> String
- Hydra.Show.Error.Core: nestedTypeAnnotationError :: t0 -> String
- Hydra.Show.Error.Core: nonComparableMapKeyTypeError :: NonComparableMapKeyTypeError -> String
- Hydra.Show.Error.Core: nonComparableSetElementTypeError :: NonComparableSetElementTypeError -> String
- Hydra.Show.Error.Core: redundantWrapUnwrapError :: RedundantWrapUnwrapError -> String
- Hydra.Show.Error.Core: selfApplicationError :: SelfApplicationError -> String
- Hydra.Show.Error.Core: singleVariantUnionError :: SingleVariantUnionError -> String
- Hydra.Show.Error.Core: termVariableShadowingError :: TermVariableShadowingError -> String
- Hydra.Show.Error.Core: typeVariableShadowingInForallError :: TypeVariableShadowingInForallError -> String
- Hydra.Show.Error.Core: typeVariableShadowingInTypeLambdaError :: TypeVariableShadowingInTypeLambdaError -> String
- Hydra.Show.Error.Core: undefinedFieldError :: UndefinedFieldError -> String
- Hydra.Show.Error.Core: undefinedTermVariableError :: UndefinedTermVariableError -> String
- Hydra.Show.Error.Core: undefinedTypeVariableError :: UndefinedTypeVariableError -> String
- Hydra.Show.Error.Core: undefinedTypeVariableInBindingTypeError :: UndefinedTypeVariableInBindingTypeError -> String
- Hydra.Show.Error.Core: undefinedTypeVariableInLambdaDomainError :: UndefinedTypeVariableInLambdaDomainError -> String
- Hydra.Show.Error.Core: undefinedTypeVariableInTypeApplicationError :: UndefinedTypeVariableInTypeApplicationError -> String
- Hydra.Show.Error.Core: unexpectedTermVariantError :: UnexpectedTermVariantError -> String
- Hydra.Show.Error.Core: unexpectedTypeVariantError :: UnexpectedTypeVariantError -> String
- Hydra.Show.Error.Core: unknownPrimitiveNameError :: UnknownPrimitiveNameError -> String
- Hydra.Show.Error.Core: unnecessaryIdentityApplicationError :: t0 -> String
- Hydra.Show.Error.Core: untypedTermVariableError :: UntypedTermVariableError -> String
- Hydra.Show.Error.Core: voidInNonBottomPositionError :: t0 -> String
- Hydra.Show.Error.Packaging: conflictingModuleNameError :: ConflictingModuleNameError -> String
- Hydra.Show.Error.Packaging: conflictingVariantNameError :: ConflictingVariantNameError -> String
- Hydra.Show.Error.Packaging: definitionNotInModuleNameError :: DefinitionNotInModuleNameError -> String
- Hydra.Show.Error.Packaging: definitionsOutOfOrderError :: DefinitionsOutOfOrderError -> String
- Hydra.Show.Error.Packaging: duplicateDefinitionNameError :: DuplicateDefinitionNameError -> String
- Hydra.Show.Error.Packaging: duplicateModuleNameError :: DuplicateModuleNameError -> String
- Hydra.Show.Error.Packaging: invalidDefinitionNameError :: InvalidDefinitionNameError -> String
- Hydra.Show.Error.Packaging: invalidModuleError :: InvalidModuleError -> String
- Hydra.Show.Error.Packaging: invalidModuleNameConventionError :: InvalidModuleNameConventionError -> String
- Hydra.Show.Error.Packaging: invalidPackageError :: InvalidPackageError -> String
- Hydra.Show.Error.Packaging: invalidPackageNameError :: InvalidPackageNameError -> String
- Hydra.Show.Error.Packaging: missingDocumentationError :: MissingDocumentationError -> String
- Hydra.Show.Error.Packaging: undeclaredDependencyError :: UndeclaredDependencyError -> String
- Hydra.Show.Errors: checkingError :: CheckingError -> String
- Hydra.Show.Errors: decodingError :: DecodingError -> String
- Hydra.Show.Errors: error :: Error -> String
- Hydra.Show.Errors: incorrectUnificationError :: IncorrectUnificationError -> String
- Hydra.Show.Errors: notAForallTypeError :: NotAForallTypeError -> String
- Hydra.Show.Errors: notAFunctionTypeError :: NotAFunctionTypeError -> String
- Hydra.Show.Errors: otherError :: OtherError -> String
- Hydra.Show.Errors: resolutionError :: ResolutionError -> String
- Hydra.Show.Errors: typeArityMismatchError :: TypeArityMismatchError -> String
- Hydra.Show.Errors: typeMismatchError :: TypeMismatchError -> String
- Hydra.Show.Errors: unboundTypeVariablesError :: UnboundTypeVariablesError -> String
- Hydra.Show.Errors: unequalTypesError :: UnequalTypesError -> String
- Hydra.Show.Errors: unificationError :: UnificationError -> String
- Hydra.Show.Errors: unsupportedTermVariantError :: UnsupportedTermVariantError -> String
- Hydra.Show.Errors: untypedLambdaError :: t0 -> String
- Hydra.Show.Errors: untypedLetBindingError :: UntypedLetBindingError -> String
- Hydra.Show.Graph: graph :: [Binding] -> String
- Hydra.Show.Paths: subtermStep :: SubtermStep -> Maybe String
- Hydra.Show.Paths: termToSubtermGraph :: Map ModuleName String -> Term -> SubtermGraph
- Hydra.Show.Typing: typeConstraint :: TypeConstraint -> String
- Hydra.Show.Typing: typeSubst :: TypeSubst -> String
- Hydra.Show.Util: caseConvention :: CaseConvention -> String
- Hydra.Show.Util: comparison :: Comparison -> String
- Hydra.Show.Variants: termVariant :: TermVariant -> String
- Hydra.Show.Variants: typeVariant :: TypeVariant -> String
+ Hydra.Decode.Error.Core: missingCaseBranchesError :: Graph -> Term -> Either DecodingError MissingCaseBranchesError
+ Hydra.Decode.Error.Core: unknownCaseAlternativeError :: Graph -> Term -> Either DecodingError UnknownCaseAlternativeError
+ Hydra.Decode.Regex: alternation :: Graph -> Term -> Either DecodingError [RegexSequence]
+ Hydra.Decode.Regex: atom :: Graph -> Term -> Either DecodingError Atom
+ Hydra.Decode.Regex: characterClass :: Graph -> Term -> Either DecodingError CharacterClass
+ Hydra.Decode.Regex: characterRange :: Graph -> Term -> Either DecodingError CharacterRange
+ Hydra.Decode.Regex: classItem :: Graph -> Term -> Either DecodingError ClassItem
+ Hydra.Decode.Regex: quantified :: Graph -> Term -> Either DecodingError Quantified
+ Hydra.Decode.Regex: quantifier :: Graph -> Term -> Either DecodingError Quantifier
+ Hydra.Decode.Regex: quantifierRange :: Graph -> Term -> Either DecodingError QuantifierRange
+ Hydra.Decode.Regex: regex :: Graph -> Term -> Either DecodingError Alternation
+ Hydra.Decode.Regex: regexSequence :: Graph -> Term -> Either DecodingError [Quantified]
+ Hydra.Dsl.Error.Core: invalidTermErrorMissingCaseBranches :: TypedTerm MissingCaseBranchesError -> TypedTerm InvalidTermError
+ Hydra.Dsl.Error.Core: invalidTermErrorUnknownCaseAlternative :: TypedTerm UnknownCaseAlternativeError -> TypedTerm InvalidTermError
+ Hydra.Dsl.Error.Core: missingCaseBranchesError :: TypedTerm SubtermPath -> TypedTerm Name -> TypedTerm [Name] -> TypedTerm MissingCaseBranchesError
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorLocation :: TypedTerm MissingCaseBranchesError -> TypedTerm SubtermPath
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorMissingCaseBranchesError :: TypedName MissingCaseBranchesError
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorTypeName :: TypedTerm MissingCaseBranchesError -> TypedTerm Name
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorVariantNames :: TypedTerm MissingCaseBranchesError -> TypedTerm [Name]
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorWithLocation :: TypedTerm MissingCaseBranchesError -> TypedTerm SubtermPath -> TypedTerm MissingCaseBranchesError
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorWithTypeName :: TypedTerm MissingCaseBranchesError -> TypedTerm Name -> TypedTerm MissingCaseBranchesError
+ Hydra.Dsl.Error.Core: missingCaseBranchesErrorWithVariantNames :: TypedTerm MissingCaseBranchesError -> TypedTerm [Name] -> TypedTerm MissingCaseBranchesError
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeError :: TypedTerm SubtermPath -> TypedTerm Name -> TypedTerm Name -> TypedTerm UnknownCaseAlternativeError
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorLocation :: TypedTerm UnknownCaseAlternativeError -> TypedTerm SubtermPath
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorName :: TypedTerm UnknownCaseAlternativeError -> TypedTerm Name
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorTypeName :: TypedTerm UnknownCaseAlternativeError -> TypedTerm Name
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorUnknownCaseAlternativeError :: TypedName UnknownCaseAlternativeError
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorWithLocation :: TypedTerm UnknownCaseAlternativeError -> TypedTerm SubtermPath -> TypedTerm UnknownCaseAlternativeError
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorWithName :: TypedTerm UnknownCaseAlternativeError -> TypedTerm Name -> TypedTerm UnknownCaseAlternativeError
+ Hydra.Dsl.Error.Core: unknownCaseAlternativeErrorWithTypeName :: TypedTerm UnknownCaseAlternativeError -> TypedTerm Name -> TypedTerm UnknownCaseAlternativeError
+ Hydra.Dsl.Lib.Chars: isAlpha :: TypedTerm Int -> TypedTerm Bool
+ Hydra.Dsl.Lib.Chars: isDigit :: TypedTerm Int -> TypedTerm Bool
+ Hydra.Dsl.Lib.Eithers: apply :: TypedTerm (Either x (y -> z)) -> TypedTerm (Either x y) -> TypedTerm (Either x z)
+ Hydra.Dsl.Lib.Eithers: compose :: TypedTerm (x -> Either w y) -> TypedTerm (y -> Either w z) -> TypedTerm x -> TypedTerm (Either w z)
+ Hydra.Dsl.Lib.Eithers: foldList :: TypedTerm (x -> y -> Either z x) -> TypedTerm x -> TypedTerm [y] -> TypedTerm (Either z x)
+ Hydra.Dsl.Lib.Eithers: partition :: TypedTerm [Either x y] -> TypedTerm ([x], [y])
+ Hydra.Dsl.Lib.Eithers: pure :: TypedTerm y -> TypedTerm (Either x y)
+ Hydra.Dsl.Lib.Equality: notEqual :: TypedTerm x -> TypedTerm x -> TypedTerm Bool
+ Hydra.Dsl.Lib.Functions: compose :: TypedTerm (t2 -> t3) -> TypedTerm (t1 -> t2) -> TypedTerm t1 -> TypedTerm t3
+ Hydra.Dsl.Lib.Functions: const :: TypedTerm t1 -> TypedTerm t2 -> TypedTerm t1
+ Hydra.Dsl.Lib.Functions: flip :: TypedTerm (t1 -> t2 -> t3) -> TypedTerm t2 -> TypedTerm t1 -> TypedTerm t3
+ Hydra.Dsl.Lib.Functions: identity :: TypedTerm t1 -> TypedTerm t1
+ Hydra.Dsl.Lib.Lists: at :: TypedTerm Int -> TypedTerm [x] -> TypedTerm (Maybe x)
+ Hydra.Dsl.Lib.Lists: compose :: TypedTerm (x -> [y]) -> TypedTerm (y -> [z]) -> TypedTerm x -> TypedTerm [z]
+ Hydra.Dsl.Lib.Lists: distinct :: TypedTerm [x] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Lists: foldList :: TypedTerm (x -> y -> [x]) -> TypedTerm x -> TypedTerm [y] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Lists: head :: TypedTerm [x] -> TypedTerm (Maybe x)
+ Hydra.Dsl.Lib.Lists: init :: TypedTerm [x] -> TypedTerm (Maybe [x])
+ Hydra.Dsl.Lib.Lists: join :: TypedTerm [x] -> TypedTerm [[x]] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Lists: last :: TypedTerm [x] -> TypedTerm (Maybe x)
+ Hydra.Dsl.Lib.Lists: mapList :: TypedTerm (x -> [y]) -> TypedTerm [x] -> TypedTerm [[y]]
+ Hydra.Dsl.Lib.Lists: mapOptional :: TypedTerm (x -> [y]) -> TypedTerm (Maybe x) -> TypedTerm [Maybe y]
+ Hydra.Dsl.Lib.Lists: mapSet :: (Ord x, Ord y) => TypedTerm (x -> [y]) -> TypedTerm (Set x) -> TypedTerm [Set y]
+ Hydra.Dsl.Lib.Lists: member :: TypedTerm x -> TypedTerm [x] -> TypedTerm Bool
+ Hydra.Dsl.Lib.Lists: sortBy :: TypedTerm (x -> y) -> TypedTerm [x] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Lists: tail :: TypedTerm [x] -> TypedTerm (Maybe [x])
+ Hydra.Dsl.Lib.Lists: takeWhile :: TypedTerm (x -> Bool) -> TypedTerm [x] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Maps: difference :: Ord k => TypedTerm (Map k v) -> TypedTerm (Map k v) -> TypedTerm (Map k v)
+ Hydra.Dsl.Lib.Maps: intersection :: Ord k => TypedTerm (Map k v) -> TypedTerm (Map k v) -> TypedTerm (Map k v)
+ Hydra.Dsl.Lib.Maps: unions :: Ord k => TypedTerm [Map k v] -> TypedTerm (Map k v)
+ Hydra.Dsl.Lib.Optionals: foldList :: TypedTerm (x -> y -> Maybe x) -> TypedTerm x -> TypedTerm [y] -> TypedTerm (Maybe x)
+ Hydra.Dsl.Lib.Optionals: givens :: TypedTerm [Maybe x] -> TypedTerm [x]
+ Hydra.Dsl.Lib.Optionals: mapList :: TypedTerm (x -> Maybe y) -> TypedTerm [x] -> TypedTerm (Maybe [y])
+ Hydra.Dsl.Lib.Optionals: mapSet :: (Ord x, Ord y) => TypedTerm (x -> Maybe y) -> TypedTerm (Set x) -> TypedTerm (Maybe (Set y))
+ Hydra.Dsl.Lib.Optionals: withDefault :: TypedTerm x -> TypedTerm (Maybe x) -> TypedTerm x
+ Hydra.Dsl.Lib.Sets: filter :: Ord x => TypedTerm (x -> Bool) -> TypedTerm (Set x) -> TypedTerm (Set x)
+ Hydra.Dsl.Lib.Strings: charAt :: TypedTerm Int -> TypedTerm String -> TypedTerm (Maybe Int)
+ Hydra.Dsl.Lib.Strings: concat :: TypedTerm [String] -> TypedTerm String
+ Hydra.Dsl.Lib.Strings: concat2 :: TypedTerm String -> TypedTerm String -> TypedTerm String
+ Hydra.Dsl.Lib.Strings: join :: TypedTerm String -> TypedTerm [String] -> TypedTerm String
+ Hydra.Dsl.Print.Docs: definitionReference :: TypedTerm DefinitionReference -> TypedTerm String
+ Hydra.Dsl.Print.Docs: docSegment :: TypedTerm DocSegment -> TypedTerm String
+ Hydra.Dsl.Print.Docs: docSegmentWith :: TypedTerm (EntityReference -> String) -> TypedTerm DocSegment -> TypedTerm String
+ Hydra.Dsl.Print.Docs: docSegments :: TypedTerm [DocSegment] -> TypedTerm String
+ Hydra.Dsl.Print.Docs: docSegmentsWith :: TypedTerm (EntityReference -> String) -> TypedTerm [DocSegment] -> TypedTerm String
+ Hydra.Dsl.Print.Docs: entityReference :: TypedTerm EntityReference -> TypedTerm String
+ Hydra.Dsl.Print.Docs: renderDocString :: TypedTerm String -> TypedTerm String
+ Hydra.Dsl.Print.Docs: renderDocStringWith :: TypedTerm (EntityReference -> String) -> TypedTerm String -> TypedTerm String
+ Hydra.Dsl.Regex: atomAnchorEnd :: TypedTerm Atom
+ Hydra.Dsl.Regex: atomAnchorStart :: TypedTerm Atom
+ Hydra.Dsl.Regex: atomAny :: TypedTerm Atom
+ Hydra.Dsl.Regex: atomAtom :: TypedName Atom
+ Hydra.Dsl.Regex: atomClass :: TypedTerm CharacterClass -> TypedTerm Atom
+ Hydra.Dsl.Regex: atomGroup :: TypedTerm Alternation -> TypedTerm Atom
+ Hydra.Dsl.Regex: atomLiteral :: TypedTerm Int -> TypedTerm Atom
+ Hydra.Dsl.Regex: characterClass :: TypedTerm Bool -> TypedTerm [ClassItem] -> TypedTerm CharacterClass
+ Hydra.Dsl.Regex: characterClassCharacterClass :: TypedName CharacterClass
+ Hydra.Dsl.Regex: characterClassItems :: TypedTerm CharacterClass -> TypedTerm [ClassItem]
+ Hydra.Dsl.Regex: characterClassNegated :: TypedTerm CharacterClass -> TypedTerm Bool
+ Hydra.Dsl.Regex: characterClassWithItems :: TypedTerm CharacterClass -> TypedTerm [ClassItem] -> TypedTerm CharacterClass
+ Hydra.Dsl.Regex: characterClassWithNegated :: TypedTerm CharacterClass -> TypedTerm Bool -> TypedTerm CharacterClass
+ Hydra.Dsl.Regex: characterRange :: TypedTerm Int -> TypedTerm Int -> TypedTerm CharacterRange
+ Hydra.Dsl.Regex: characterRangeCharacterRange :: TypedName CharacterRange
+ Hydra.Dsl.Regex: characterRangeFrom :: TypedTerm CharacterRange -> TypedTerm Int
+ Hydra.Dsl.Regex: characterRangeTo :: TypedTerm CharacterRange -> TypedTerm Int
+ Hydra.Dsl.Regex: characterRangeWithFrom :: TypedTerm CharacterRange -> TypedTerm Int -> TypedTerm CharacterRange
+ Hydra.Dsl.Regex: characterRangeWithTo :: TypedTerm CharacterRange -> TypedTerm Int -> TypedTerm CharacterRange
+ Hydra.Dsl.Regex: classItemCharacter :: TypedTerm Int -> TypedTerm ClassItem
+ Hydra.Dsl.Regex: classItemClassItem :: TypedName ClassItem
+ Hydra.Dsl.Regex: classItemRange :: TypedTerm CharacterRange -> TypedTerm ClassItem
+ Hydra.Dsl.Regex: quantified :: TypedTerm Atom -> TypedTerm Quantifier -> TypedTerm Quantified
+ Hydra.Dsl.Regex: quantifiedAtom :: TypedTerm Quantified -> TypedTerm Atom
+ Hydra.Dsl.Regex: quantifiedQuantified :: TypedName Quantified
+ Hydra.Dsl.Regex: quantifiedQuantifier :: TypedTerm Quantified -> TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifiedWithAtom :: TypedTerm Quantified -> TypedTerm Atom -> TypedTerm Quantified
+ Hydra.Dsl.Regex: quantifiedWithQuantifier :: TypedTerm Quantified -> TypedTerm Quantifier -> TypedTerm Quantified
+ Hydra.Dsl.Regex: quantifierAtLeast :: TypedTerm Int -> TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierExactly :: TypedTerm Int -> TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierOne :: TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierOneOrMore :: TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierQuantifier :: TypedName Quantifier
+ Hydra.Dsl.Regex: quantifierRange :: TypedTerm QuantifierRange -> TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierRange2 :: TypedTerm Int -> TypedTerm Int -> TypedTerm QuantifierRange
+ Hydra.Dsl.Regex: quantifierRangeMax :: TypedTerm QuantifierRange -> TypedTerm Int
+ Hydra.Dsl.Regex: quantifierRangeMin :: TypedTerm QuantifierRange -> TypedTerm Int
+ Hydra.Dsl.Regex: quantifierRangeQuantifierRange :: TypedName QuantifierRange
+ Hydra.Dsl.Regex: quantifierRangeWithMax :: TypedTerm QuantifierRange -> TypedTerm Int -> TypedTerm QuantifierRange
+ Hydra.Dsl.Regex: quantifierRangeWithMin :: TypedTerm QuantifierRange -> TypedTerm Int -> TypedTerm QuantifierRange
+ Hydra.Dsl.Regex: quantifierZeroOrMore :: TypedTerm Quantifier
+ Hydra.Dsl.Regex: quantifierZeroOrOne :: TypedTerm Quantifier
+ Hydra.Encode.Error.Core: missingCaseBranchesError :: MissingCaseBranchesError -> Term
+ Hydra.Encode.Error.Core: unknownCaseAlternativeError :: UnknownCaseAlternativeError -> Term
+ Hydra.Encode.Regex: alternation :: [RegexSequence] -> Term
+ Hydra.Encode.Regex: atom :: Atom -> Term
+ Hydra.Encode.Regex: characterClass :: CharacterClass -> Term
+ Hydra.Encode.Regex: characterRange :: CharacterRange -> Term
+ Hydra.Encode.Regex: classItem :: ClassItem -> Term
+ Hydra.Encode.Regex: quantified :: Quantified -> Term
+ Hydra.Encode.Regex: quantifier :: Quantifier -> Term
+ Hydra.Encode.Regex: quantifierRange :: QuantifierRange -> Term
+ Hydra.Encode.Regex: regex :: Alternation -> Term
+ Hydra.Encode.Regex: regexSequence :: [Quantified] -> Term
+ Hydra.Error.Core: InvalidTermErrorMissingCaseBranches :: MissingCaseBranchesError -> InvalidTermError
+ Hydra.Error.Core: InvalidTermErrorUnknownCaseAlternative :: UnknownCaseAlternativeError -> InvalidTermError
+ Hydra.Error.Core: MissingCaseBranchesError :: SubtermPath -> Name -> [Name] -> MissingCaseBranchesError
+ Hydra.Error.Core: UnknownCaseAlternativeError :: SubtermPath -> Name -> Name -> UnknownCaseAlternativeError
+ Hydra.Error.Core: [missingCaseBranchesErrorLocation] :: MissingCaseBranchesError -> SubtermPath
+ Hydra.Error.Core: [missingCaseBranchesErrorTypeName] :: MissingCaseBranchesError -> Name
+ Hydra.Error.Core: [missingCaseBranchesErrorVariantNames] :: MissingCaseBranchesError -> [Name]
+ Hydra.Error.Core: [unknownCaseAlternativeErrorLocation] :: UnknownCaseAlternativeError -> SubtermPath
+ Hydra.Error.Core: [unknownCaseAlternativeErrorName] :: UnknownCaseAlternativeError -> Name
+ Hydra.Error.Core: [unknownCaseAlternativeErrorTypeName] :: UnknownCaseAlternativeError -> Name
+ Hydra.Error.Core: _InvalidTermError_missingCaseBranches :: Name
+ Hydra.Error.Core: _InvalidTermError_unknownCaseAlternative :: Name
+ Hydra.Error.Core: _MissingCaseBranchesError :: Name
+ Hydra.Error.Core: _MissingCaseBranchesError_location :: Name
+ Hydra.Error.Core: _MissingCaseBranchesError_typeName :: Name
+ Hydra.Error.Core: _MissingCaseBranchesError_variantNames :: Name
+ Hydra.Error.Core: _UnknownCaseAlternativeError :: Name
+ Hydra.Error.Core: _UnknownCaseAlternativeError_location :: Name
+ Hydra.Error.Core: _UnknownCaseAlternativeError_name :: Name
+ Hydra.Error.Core: _UnknownCaseAlternativeError_typeName :: Name
+ Hydra.Error.Core: data MissingCaseBranchesError
+ Hydra.Error.Core: data UnknownCaseAlternativeError
+ Hydra.Error.Core: instance GHC.Classes.Eq Hydra.Error.Core.MissingCaseBranchesError
+ Hydra.Error.Core: instance GHC.Classes.Eq Hydra.Error.Core.UnknownCaseAlternativeError
+ Hydra.Error.Core: instance GHC.Classes.Ord Hydra.Error.Core.MissingCaseBranchesError
+ Hydra.Error.Core: instance GHC.Classes.Ord Hydra.Error.Core.UnknownCaseAlternativeError
+ Hydra.Error.Core: instance GHC.Read.Read Hydra.Error.Core.MissingCaseBranchesError
+ Hydra.Error.Core: instance GHC.Read.Read Hydra.Error.Core.UnknownCaseAlternativeError
+ Hydra.Error.Core: instance GHC.Show.Show Hydra.Error.Core.MissingCaseBranchesError
+ Hydra.Error.Core: instance GHC.Show.Show Hydra.Error.Core.UnknownCaseAlternativeError
+ Hydra.Lib.Chars: isAlpha :: PrimitiveDefinition
+ Hydra.Lib.Chars: isDigit :: PrimitiveDefinition
+ Hydra.Lib.Effects: foldList :: PrimitiveDefinition
+ Hydra.Lib.Effects: mapSet :: PrimitiveDefinition
+ Hydra.Lib.Eithers: apply :: PrimitiveDefinition
+ Hydra.Lib.Eithers: compose :: PrimitiveDefinition
+ Hydra.Lib.Eithers: foldList :: PrimitiveDefinition
+ Hydra.Lib.Eithers: partition :: PrimitiveDefinition
+ Hydra.Lib.Eithers: pure :: PrimitiveDefinition
+ Hydra.Lib.Equality: notEqual :: PrimitiveDefinition
+ Hydra.Lib.Functions: compose :: PrimitiveDefinition
+ Hydra.Lib.Functions: const :: PrimitiveDefinition
+ Hydra.Lib.Functions: flip :: PrimitiveDefinition
+ Hydra.Lib.Functions: identity :: PrimitiveDefinition
+ Hydra.Lib.Lists: at :: PrimitiveDefinition
+ Hydra.Lib.Lists: compose :: PrimitiveDefinition
+ Hydra.Lib.Lists: distinct :: PrimitiveDefinition
+ Hydra.Lib.Lists: foldList :: PrimitiveDefinition
+ Hydra.Lib.Lists: head :: PrimitiveDefinition
+ Hydra.Lib.Lists: init :: PrimitiveDefinition
+ Hydra.Lib.Lists: join :: PrimitiveDefinition
+ Hydra.Lib.Lists: last :: PrimitiveDefinition
+ Hydra.Lib.Lists: mapList :: PrimitiveDefinition
+ Hydra.Lib.Lists: mapOptional :: PrimitiveDefinition
+ Hydra.Lib.Lists: mapSet :: PrimitiveDefinition
+ Hydra.Lib.Lists: member :: PrimitiveDefinition
+ Hydra.Lib.Lists: sortBy :: PrimitiveDefinition
+ Hydra.Lib.Lists: tail :: PrimitiveDefinition
+ Hydra.Lib.Lists: takeWhile :: PrimitiveDefinition
+ Hydra.Lib.Maps: difference :: PrimitiveDefinition
+ Hydra.Lib.Maps: intersection :: PrimitiveDefinition
+ Hydra.Lib.Maps: unions :: PrimitiveDefinition
+ Hydra.Lib.Optionals: foldList :: PrimitiveDefinition
+ Hydra.Lib.Optionals: givens :: PrimitiveDefinition
+ Hydra.Lib.Optionals: mapList :: PrimitiveDefinition
+ Hydra.Lib.Optionals: mapSet :: PrimitiveDefinition
+ Hydra.Lib.Optionals: withDefault :: PrimitiveDefinition
+ Hydra.Lib.Sets: filter :: PrimitiveDefinition
+ Hydra.Lib.Strings: charAt :: PrimitiveDefinition
+ Hydra.Lib.Strings: concat :: PrimitiveDefinition
+ Hydra.Lib.Strings: concat2 :: PrimitiveDefinition
+ Hydra.Lib.Strings: join :: PrimitiveDefinition
+ Hydra.Lib.System: readStdin :: PrimitiveDefinition
+ Hydra.Lib.System: writeStderr :: PrimitiveDefinition
+ Hydra.Lib.System: writeStdout :: PrimitiveDefinition
+ Hydra.Overlay.Haskell.Dsl.Typed.Phantoms: sigWithParams :: [(String, String)] -> TypeScheme -> TermSignature
+ Hydra.Overlay.Haskell.Lib.Chars: isAlpha :: Int -> Bool
+ Hydra.Overlay.Haskell.Lib.Chars: isDigit :: Int -> Bool
+ Hydra.Overlay.Haskell.Lib.Effects: foldList :: (a -> b -> IO a) -> a -> [b] -> IO a
+ Hydra.Overlay.Haskell.Lib.Effects: mapSet :: Ord b => (a -> IO b) -> Set a -> IO (Set b)
+ Hydra.Overlay.Haskell.Lib.Eithers: apply :: Either a (b -> c) -> Either a b -> Either a c
+ Hydra.Overlay.Haskell.Lib.Eithers: compose :: (a -> Either e b) -> (b -> Either e c) -> a -> Either e c
+ Hydra.Overlay.Haskell.Lib.Eithers: foldList :: (a -> b -> Either c a) -> a -> [b] -> Either c a
+ Hydra.Overlay.Haskell.Lib.Eithers: partition :: [Either a b] -> ([a], [b])
+ Hydra.Overlay.Haskell.Lib.Eithers: pure :: b -> Either a b
+ Hydra.Overlay.Haskell.Lib.Equality: notEqual :: Eq a => a -> a -> Bool
+ Hydra.Overlay.Haskell.Lib.Functions: compose :: (b -> c) -> (a -> b) -> a -> c
+ Hydra.Overlay.Haskell.Lib.Functions: const :: a -> b -> a
+ Hydra.Overlay.Haskell.Lib.Functions: flip :: (a -> b -> c) -> b -> a -> c
+ Hydra.Overlay.Haskell.Lib.Functions: identity :: a -> a
+ Hydra.Overlay.Haskell.Lib.Lists: at :: Int -> [a] -> Maybe a
+ Hydra.Overlay.Haskell.Lib.Lists: compose :: (a -> [b]) -> (b -> [c]) -> a -> [c]
+ Hydra.Overlay.Haskell.Lib.Lists: distinct :: Eq a => [a] -> [a]
+ Hydra.Overlay.Haskell.Lib.Lists: foldList :: (a -> b -> [a]) -> a -> [b] -> [a]
+ Hydra.Overlay.Haskell.Lib.Lists: head :: [a] -> Maybe a
+ Hydra.Overlay.Haskell.Lib.Lists: init :: [a] -> Maybe [a]
+ Hydra.Overlay.Haskell.Lib.Lists: join :: [a] -> [[a]] -> [a]
+ Hydra.Overlay.Haskell.Lib.Lists: last :: [a] -> Maybe a
+ Hydra.Overlay.Haskell.Lib.Lists: mapList :: (a -> [b]) -> [a] -> [[b]]
+ Hydra.Overlay.Haskell.Lib.Lists: mapOptional :: (a -> [b]) -> Maybe a -> [Maybe b]
+ Hydra.Overlay.Haskell.Lib.Lists: mapSet :: Ord b => (a -> [b]) -> Set a -> [Set b]
+ Hydra.Overlay.Haskell.Lib.Lists: member :: Eq a => a -> [a] -> Bool
+ Hydra.Overlay.Haskell.Lib.Lists: sortBy :: Ord b => (a -> b) -> [a] -> [a]
+ Hydra.Overlay.Haskell.Lib.Lists: tail :: [a] -> Maybe [a]
+ Hydra.Overlay.Haskell.Lib.Lists: takeWhile :: (a -> Bool) -> [a] -> [a]
+ Hydra.Overlay.Haskell.Lib.Maps: difference :: Ord k => Map k v -> Map k v -> Map k v
+ Hydra.Overlay.Haskell.Lib.Maps: intersection :: Ord k => Map k v -> Map k v -> Map k v
+ Hydra.Overlay.Haskell.Lib.Maps: unions :: Ord k => [Map k v] -> Map k v
+ Hydra.Overlay.Haskell.Lib.Optionals: foldList :: (a -> b -> Maybe a) -> a -> [b] -> Maybe a
+ Hydra.Overlay.Haskell.Lib.Optionals: givens :: [Maybe a] -> [a]
+ Hydra.Overlay.Haskell.Lib.Optionals: mapList :: (a -> Maybe b) -> [a] -> Maybe [b]
+ Hydra.Overlay.Haskell.Lib.Optionals: mapSet :: Ord b => (a -> Maybe b) -> Set a -> Maybe (Set b)
+ Hydra.Overlay.Haskell.Lib.Optionals: withDefault :: a -> Maybe a -> a
+ Hydra.Overlay.Haskell.Lib.Sets: filter :: Ord x => (x -> Bool) -> Set x -> Set x
+ Hydra.Overlay.Haskell.Lib.Strings: charAt :: Int -> String -> Maybe Int
+ Hydra.Overlay.Haskell.Lib.Strings: concat :: [String] -> String
+ Hydra.Overlay.Haskell.Lib.Strings: concat2 :: String -> String -> String
+ Hydra.Overlay.Haskell.Lib.Strings: join :: String -> [String] -> String
+ Hydra.Overlay.Haskell.Lib.System: readStdin :: IO (Either SystemError ByteString)
+ Hydra.Overlay.Haskell.Lib.System: withStdioError :: (Handle -> IO a) -> Handle -> IO (Either SystemError a)
+ Hydra.Overlay.Haskell.Lib.System: withStdioError' :: (Handle -> a -> IO ()) -> Handle -> a -> IO (Either SystemError ())
+ Hydra.Overlay.Haskell.Lib.System: writeStderr :: ByteString -> IO (Either SystemError ())
+ Hydra.Overlay.Haskell.Lib.System: writeStdout :: ByteString -> IO (Either SystemError ())
+ Hydra.Overlay.Haskell.Libraries: hydraLibFunctions :: Library
+ Hydra.Parse.Docs: parseDocAnnotation :: String -> Maybe EntityReference
+ Hydra.Parse.Docs: parseDocString :: String -> [DocSegment]
+ Hydra.Parse.Regex: alternation :: Parser [[Quantified]]
+ Hydra.Parse.Regex: atom :: Parser Atom
+ Hydra.Parse.Regex: characterClass :: Parser Atom
+ Hydra.Parse.Regex: classItem :: Parser ClassItem
+ Hydra.Parse.Regex: escapedChar :: Parser Int
+ Hydra.Parse.Regex: isMetachar :: Int -> Bool
+ Hydra.Parse.Regex: literalAtom :: Parser Atom
+ Hydra.Parse.Regex: parseRegex :: String -> Maybe [[Quantified]]
+ Hydra.Parse.Regex: quantified :: Parser Quantified
+ Hydra.Parse.Regex: quantifier :: Parser Quantifier
+ Hydra.Parse.Regex: regex :: Parser [[Quantified]]
+ Hydra.Parse.Regex: regexSequence :: Parser [Quantified]
+ Hydra.Parse.Regex: unsignedInt :: Parser Int
+ Hydra.Print.Core: binding :: Binding -> String
+ Hydra.Print.Core: caseStatement :: CaseStatement -> String
+ Hydra.Print.Core: either :: (t0 -> String) -> (t1 -> String) -> Either t0 t1 -> String
+ Hydra.Print.Core: field :: Field -> String
+ Hydra.Print.Core: fieldType :: FieldType -> String
+ Hydra.Print.Core: fields :: [Field] -> String
+ Hydra.Print.Core: float :: FloatValue -> String
+ Hydra.Print.Core: floatType :: FloatType -> String
+ Hydra.Print.Core: injection :: Injection -> String
+ Hydra.Print.Core: integer :: IntegerValue -> String
+ Hydra.Print.Core: integerType :: IntegerType -> String
+ Hydra.Print.Core: lambda :: Lambda -> String
+ Hydra.Print.Core: let_ :: Let -> String
+ Hydra.Print.Core: list :: (t0 -> String) -> [t0] -> String
+ Hydra.Print.Core: literal :: Literal -> String
+ Hydra.Print.Core: literalType :: LiteralType -> String
+ Hydra.Print.Core: map :: Ord t0 => (t0 -> String) -> (t1 -> String) -> Map t0 t1 -> String
+ Hydra.Print.Core: optional :: (t0 -> String) -> Maybe t0 -> String
+ Hydra.Print.Core: pair :: (t0 -> String) -> (t1 -> String) -> (t0, t1) -> String
+ Hydra.Print.Core: projection :: Projection -> String
+ Hydra.Print.Core: readTerm :: String -> Maybe Term
+ Hydra.Print.Core: set :: Ord t0 => (t0 -> String) -> Set t0 -> String
+ Hydra.Print.Core: term :: Term -> String
+ Hydra.Print.Core: typeScheme :: TypeScheme -> String
+ Hydra.Print.Core: type_ :: Type -> String
+ Hydra.Print.Docs: definitionReference :: DefinitionReference -> String
+ Hydra.Print.Docs: docSegment :: DocSegment -> String
+ Hydra.Print.Docs: docSegmentWith :: (EntityReference -> String) -> DocSegment -> String
+ Hydra.Print.Docs: docSegments :: [DocSegment] -> String
+ Hydra.Print.Docs: docSegmentsWith :: (EntityReference -> String) -> [DocSegment] -> String
+ Hydra.Print.Docs: entityReference :: EntityReference -> String
+ Hydra.Print.Docs: renderDocString :: String -> String
+ Hydra.Print.Docs: renderDocStringWith :: (EntityReference -> String) -> String -> String
+ Hydra.Print.Emacs.Regex: alternation :: [[Quantified]] -> String
+ Hydra.Print.Emacs.Regex: anyClass :: String
+ Hydra.Print.Emacs.Regex: atom :: Atom -> String
+ Hydra.Print.Emacs.Regex: characterClass :: CharacterClass -> String
+ Hydra.Print.Emacs.Regex: classItem :: ClassItem -> String
+ Hydra.Print.Emacs.Regex: escapeClassChar :: Int -> String
+ Hydra.Print.Emacs.Regex: escapeLiteral :: Int -> String
+ Hydra.Print.Emacs.Regex: printRegex :: [[Quantified]] -> String
+ Hydra.Print.Emacs.Regex: quantified :: Quantified -> String
+ Hydra.Print.Emacs.Regex: quantifier :: Quantifier -> String
+ Hydra.Print.Emacs.Regex: regexSequence :: [Quantified] -> String
+ Hydra.Print.Emacs.Regex: showCodePoint :: Int -> String
+ Hydra.Print.Error.Core: constantConditionError :: ConstantConditionError -> String
+ Hydra.Print.Error.Core: duplicateBindingError :: DuplicateBindingError -> String
+ Hydra.Print.Error.Core: duplicateFieldError :: DuplicateFieldError -> String
+ Hydra.Print.Error.Core: duplicateRecordTypeFieldNamesError :: DuplicateRecordTypeFieldNamesError -> String
+ Hydra.Print.Error.Core: duplicateUnionTypeFieldNamesError :: DuplicateUnionTypeFieldNamesError -> String
+ Hydra.Print.Error.Core: emptyCaseStatementError :: EmptyCaseStatementError -> String
+ Hydra.Print.Error.Core: emptyLetBindingsError :: t0 -> String
+ Hydra.Print.Error.Core: emptyRecordTypeError :: t0 -> String
+ Hydra.Print.Error.Core: emptyTermAnnotationError :: t0 -> String
+ Hydra.Print.Error.Core: emptyTypeAnnotationError :: t0 -> String
+ Hydra.Print.Error.Core: emptyTypeNameInTermError :: t0 -> String
+ Hydra.Print.Error.Core: emptyUnionTypeError :: t0 -> String
+ Hydra.Print.Error.Core: invalidForallParameterNameError :: InvalidForallParameterNameError -> String
+ Hydra.Print.Error.Core: invalidLambdaParameterNameError :: InvalidLambdaParameterNameError -> String
+ Hydra.Print.Error.Core: invalidLetBindingNameError :: InvalidLetBindingNameError -> String
+ Hydra.Print.Error.Core: invalidTermError :: InvalidTermError -> String
+ Hydra.Print.Error.Core: invalidTypeError :: InvalidTypeError -> String
+ Hydra.Print.Error.Core: invalidTypeLambdaParameterNameError :: InvalidTypeLambdaParameterNameError -> String
+ Hydra.Print.Error.Core: invalidTypeSchemeVariableNameError :: InvalidTypeSchemeVariableNameError -> String
+ Hydra.Print.Error.Core: missingCaseBranchesError :: MissingCaseBranchesError -> String
+ Hydra.Print.Error.Core: nestedTermAnnotationError :: t0 -> String
+ Hydra.Print.Error.Core: nestedTypeAnnotationError :: t0 -> String
+ Hydra.Print.Error.Core: nonComparableMapKeyTypeError :: NonComparableMapKeyTypeError -> String
+ Hydra.Print.Error.Core: nonComparableSetElementTypeError :: NonComparableSetElementTypeError -> String
+ Hydra.Print.Error.Core: redundantWrapUnwrapError :: RedundantWrapUnwrapError -> String
+ Hydra.Print.Error.Core: selfApplicationError :: SelfApplicationError -> String
+ Hydra.Print.Error.Core: singleVariantUnionError :: SingleVariantUnionError -> String
+ Hydra.Print.Error.Core: termVariableShadowingError :: TermVariableShadowingError -> String
+ Hydra.Print.Error.Core: typeVariableShadowingInForallError :: TypeVariableShadowingInForallError -> String
+ Hydra.Print.Error.Core: typeVariableShadowingInTypeLambdaError :: TypeVariableShadowingInTypeLambdaError -> String
+ Hydra.Print.Error.Core: undefinedFieldError :: UndefinedFieldError -> String
+ Hydra.Print.Error.Core: undefinedTermVariableError :: UndefinedTermVariableError -> String
+ Hydra.Print.Error.Core: undefinedTypeVariableError :: UndefinedTypeVariableError -> String
+ Hydra.Print.Error.Core: undefinedTypeVariableInBindingTypeError :: UndefinedTypeVariableInBindingTypeError -> String
+ Hydra.Print.Error.Core: undefinedTypeVariableInLambdaDomainError :: UndefinedTypeVariableInLambdaDomainError -> String
+ Hydra.Print.Error.Core: undefinedTypeVariableInTypeApplicationError :: UndefinedTypeVariableInTypeApplicationError -> String
+ Hydra.Print.Error.Core: unexpectedTermVariantError :: UnexpectedTermVariantError -> String
+ Hydra.Print.Error.Core: unexpectedTypeVariantError :: UnexpectedTypeVariantError -> String
+ Hydra.Print.Error.Core: unknownCaseAlternativeError :: UnknownCaseAlternativeError -> String
+ Hydra.Print.Error.Core: unknownPrimitiveNameError :: UnknownPrimitiveNameError -> String
+ Hydra.Print.Error.Core: unnecessaryIdentityApplicationError :: t0 -> String
+ Hydra.Print.Error.Core: untypedTermVariableError :: UntypedTermVariableError -> String
+ Hydra.Print.Error.Core: voidInNonBottomPositionError :: t0 -> String
+ Hydra.Print.Error.Packaging: conflictingModuleNameError :: ConflictingModuleNameError -> String
+ Hydra.Print.Error.Packaging: conflictingVariantNameError :: ConflictingVariantNameError -> String
+ Hydra.Print.Error.Packaging: definitionNotInModuleNameError :: DefinitionNotInModuleNameError -> String
+ Hydra.Print.Error.Packaging: definitionsOutOfOrderError :: DefinitionsOutOfOrderError -> String
+ Hydra.Print.Error.Packaging: duplicateDefinitionNameError :: DuplicateDefinitionNameError -> String
+ Hydra.Print.Error.Packaging: duplicateModuleNameError :: DuplicateModuleNameError -> String
+ Hydra.Print.Error.Packaging: invalidDefinitionNameError :: InvalidDefinitionNameError -> String
+ Hydra.Print.Error.Packaging: invalidModuleError :: InvalidModuleError -> String
+ Hydra.Print.Error.Packaging: invalidModuleNameConventionError :: InvalidModuleNameConventionError -> String
+ Hydra.Print.Error.Packaging: invalidPackageError :: InvalidPackageError -> String
+ Hydra.Print.Error.Packaging: invalidPackageNameError :: InvalidPackageNameError -> String
+ Hydra.Print.Error.Packaging: missingDocumentationError :: MissingDocumentationError -> String
+ Hydra.Print.Error.Packaging: undeclaredDependencyError :: UndeclaredDependencyError -> String
+ Hydra.Print.Errors: checkingError :: CheckingError -> String
+ Hydra.Print.Errors: decodingError :: DecodingError -> String
+ Hydra.Print.Errors: error :: Error -> String
+ Hydra.Print.Errors: incorrectUnificationError :: IncorrectUnificationError -> String
+ Hydra.Print.Errors: notAForallTypeError :: NotAForallTypeError -> String
+ Hydra.Print.Errors: notAFunctionTypeError :: NotAFunctionTypeError -> String
+ Hydra.Print.Errors: otherError :: OtherError -> String
+ Hydra.Print.Errors: resolutionError :: ResolutionError -> String
+ Hydra.Print.Errors: typeArityMismatchError :: TypeArityMismatchError -> String
+ Hydra.Print.Errors: typeMismatchError :: TypeMismatchError -> String
+ Hydra.Print.Errors: unboundTypeVariablesError :: UnboundTypeVariablesError -> String
+ Hydra.Print.Errors: unequalTypesError :: UnequalTypesError -> String
+ Hydra.Print.Errors: unificationError :: UnificationError -> String
+ Hydra.Print.Errors: unsupportedTermVariantError :: UnsupportedTermVariantError -> String
+ Hydra.Print.Errors: untypedLambdaError :: t0 -> String
+ Hydra.Print.Errors: untypedLetBindingError :: UntypedLetBindingError -> String
+ Hydra.Print.Graph: graph :: [Binding] -> String
+ Hydra.Print.Paths: subtermStep :: SubtermStep -> Maybe String
+ Hydra.Print.Paths: termToSubtermGraph :: Map ModuleName String -> Term -> SubtermGraph
+ Hydra.Print.Pcre.Regex: alternation :: [[Quantified]] -> String
+ Hydra.Print.Pcre.Regex: atom :: Atom -> String
+ Hydra.Print.Pcre.Regex: characterClass :: CharacterClass -> String
+ Hydra.Print.Pcre.Regex: classItem :: ClassItem -> String
+ Hydra.Print.Pcre.Regex: escapeClassChar :: Int -> String
+ Hydra.Print.Pcre.Regex: escapeLiteral :: Int -> String
+ Hydra.Print.Pcre.Regex: printRegex :: [[Quantified]] -> String
+ Hydra.Print.Pcre.Regex: quantified :: Quantified -> String
+ Hydra.Print.Pcre.Regex: quantifier :: Quantifier -> String
+ Hydra.Print.Pcre.Regex: regexSequence :: [Quantified] -> String
+ Hydra.Print.Pcre.Regex: showCodePoint :: Int -> String
+ Hydra.Print.Posix.Regex: alternation :: [[Quantified]] -> String
+ Hydra.Print.Posix.Regex: anyClass :: String
+ Hydra.Print.Posix.Regex: atom :: Atom -> String
+ Hydra.Print.Posix.Regex: characterClass :: CharacterClass -> String
+ Hydra.Print.Posix.Regex: classItem :: ClassItem -> String
+ Hydra.Print.Posix.Regex: escapeClassChar :: Int -> String
+ Hydra.Print.Posix.Regex: escapeLiteral :: Int -> String
+ Hydra.Print.Posix.Regex: printRegex :: [[Quantified]] -> String
+ Hydra.Print.Posix.Regex: quantified :: Quantified -> String
+ Hydra.Print.Posix.Regex: quantifier :: Quantifier -> String
+ Hydra.Print.Posix.Regex: regexSequence :: [Quantified] -> String
+ Hydra.Print.Posix.Regex: showCodePoint :: Int -> String
+ Hydra.Print.Regex: alternation :: [[Quantified]] -> String
+ Hydra.Print.Regex: atom :: Atom -> String
+ Hydra.Print.Regex: characterClass :: CharacterClass -> String
+ Hydra.Print.Regex: classItem :: ClassItem -> String
+ Hydra.Print.Regex: escapeClassChar :: Int -> String
+ Hydra.Print.Regex: escapeLiteral :: Int -> String
+ Hydra.Print.Regex: printRegex :: [[Quantified]] -> String
+ Hydra.Print.Regex: quantified :: Quantified -> String
+ Hydra.Print.Regex: quantifier :: Quantifier -> String
+ Hydra.Print.Regex: regexSequence :: [Quantified] -> String
+ Hydra.Print.Regex: showCodePoint :: Int -> String
+ Hydra.Print.Typing: typeConstraint :: TypeConstraint -> String
+ Hydra.Print.Typing: typeSubst :: TypeSubst -> String
+ Hydra.Print.Util: caseConvention :: CaseConvention -> String
+ Hydra.Print.Util: comparison :: Comparison -> String
+ Hydra.Print.Variants: termVariant :: TermVariant -> String
+ Hydra.Print.Variants: typeVariant :: TypeVariant -> String
+ Hydra.Regex: AtomAnchorEnd :: Atom
+ Hydra.Regex: AtomAnchorStart :: Atom
+ Hydra.Regex: AtomAny :: Atom
+ Hydra.Regex: AtomClass :: CharacterClass -> Atom
+ Hydra.Regex: AtomGroup :: Alternation -> Atom
+ Hydra.Regex: AtomLiteral :: Int -> Atom
+ Hydra.Regex: CharacterClass :: Bool -> [ClassItem] -> CharacterClass
+ Hydra.Regex: CharacterRange :: Int -> Int -> CharacterRange
+ Hydra.Regex: ClassItemCharacter :: Int -> ClassItem
+ Hydra.Regex: ClassItemRange :: CharacterRange -> ClassItem
+ Hydra.Regex: Quantified :: Atom -> Quantifier -> Quantified
+ Hydra.Regex: QuantifierAtLeast :: Int -> Quantifier
+ Hydra.Regex: QuantifierExactly :: Int -> Quantifier
+ Hydra.Regex: QuantifierOne :: Quantifier
+ Hydra.Regex: QuantifierOneOrMore :: Quantifier
+ Hydra.Regex: QuantifierRange :: Int -> Int -> QuantifierRange
+ Hydra.Regex: QuantifierRange_ :: QuantifierRange -> Quantifier
+ Hydra.Regex: QuantifierZeroOrMore :: Quantifier
+ Hydra.Regex: QuantifierZeroOrOne :: Quantifier
+ Hydra.Regex: [characterClassItems] :: CharacterClass -> [ClassItem]
+ Hydra.Regex: [characterClassNegated] :: CharacterClass -> Bool
+ Hydra.Regex: [characterRangeFrom] :: CharacterRange -> Int
+ Hydra.Regex: [characterRangeTo] :: CharacterRange -> Int
+ Hydra.Regex: [quantifiedAtom] :: Quantified -> Atom
+ Hydra.Regex: [quantifiedQuantifier] :: Quantified -> Quantifier
+ Hydra.Regex: [quantifierRangeMax] :: QuantifierRange -> Int
+ Hydra.Regex: [quantifierRangeMin] :: QuantifierRange -> Int
+ Hydra.Regex: _Alternation :: Name
+ Hydra.Regex: _Atom :: Name
+ Hydra.Regex: _Atom_anchorEnd :: Name
+ Hydra.Regex: _Atom_anchorStart :: Name
+ Hydra.Regex: _Atom_any :: Name
+ Hydra.Regex: _Atom_class :: Name
+ Hydra.Regex: _Atom_group :: Name
+ Hydra.Regex: _Atom_literal :: Name
+ Hydra.Regex: _CharacterClass :: Name
+ Hydra.Regex: _CharacterClass_items :: Name
+ Hydra.Regex: _CharacterClass_negated :: Name
+ Hydra.Regex: _CharacterRange :: Name
+ Hydra.Regex: _CharacterRange_from :: Name
+ Hydra.Regex: _CharacterRange_to :: Name
+ Hydra.Regex: _ClassItem :: Name
+ Hydra.Regex: _ClassItem_character :: Name
+ Hydra.Regex: _ClassItem_range :: Name
+ Hydra.Regex: _Quantified :: Name
+ Hydra.Regex: _Quantified_atom :: Name
+ Hydra.Regex: _Quantified_quantifier :: Name
+ Hydra.Regex: _Quantifier :: Name
+ Hydra.Regex: _QuantifierRange :: Name
+ Hydra.Regex: _QuantifierRange_max :: Name
+ Hydra.Regex: _QuantifierRange_min :: Name
+ Hydra.Regex: _Quantifier_atLeast :: Name
+ Hydra.Regex: _Quantifier_exactly :: Name
+ Hydra.Regex: _Quantifier_one :: Name
+ Hydra.Regex: _Quantifier_oneOrMore :: Name
+ Hydra.Regex: _Quantifier_range :: Name
+ Hydra.Regex: _Quantifier_zeroOrMore :: Name
+ Hydra.Regex: _Quantifier_zeroOrOne :: Name
+ Hydra.Regex: _Regex :: Name
+ Hydra.Regex: _RegexSequence :: Name
+ Hydra.Regex: data Atom
+ Hydra.Regex: data CharacterClass
+ Hydra.Regex: data CharacterRange
+ Hydra.Regex: data ClassItem
+ Hydra.Regex: data Quantified
+ Hydra.Regex: data Quantifier
+ Hydra.Regex: data QuantifierRange
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.Atom
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.CharacterClass
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.CharacterRange
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.ClassItem
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.Quantified
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.Quantifier
+ Hydra.Regex: instance GHC.Classes.Eq Hydra.Regex.QuantifierRange
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.Atom
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.CharacterClass
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.CharacterRange
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.ClassItem
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.Quantified
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.Quantifier
+ Hydra.Regex: instance GHC.Classes.Ord Hydra.Regex.QuantifierRange
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.Atom
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.CharacterClass
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.CharacterRange
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.ClassItem
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.Quantified
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.Quantifier
+ Hydra.Regex: instance GHC.Read.Read Hydra.Regex.QuantifierRange
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.Atom
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.CharacterClass
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.CharacterRange
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.ClassItem
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.Quantified
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.Quantifier
+ Hydra.Regex: instance GHC.Show.Show Hydra.Regex.QuantifierRange
+ Hydra.Regex: type Alternation = [RegexSequence]
+ Hydra.Regex: type Regex = Alternation
+ Hydra.Regex: type RegexSequence = [Quantified]
+ Hydra.Validate.Core: resolveUnionFields :: Graph -> Name -> Maybe [FieldType]
Files
- CHANGELOG.md +173/−118
- hydra-kernel.cabal +26/−14
- src/main/haskell/Hydra/Adapt.hs +7/−6
- src/main/haskell/Hydra/Analysis.hs +1/−0
- src/main/haskell/Hydra/Annotations.hs +3/−2
- src/main/haskell/Hydra/Arity.hs +1/−0
- src/main/haskell/Hydra/Checking.hs +37/−64
- src/main/haskell/Hydra/Classes.hs +1/−0
- src/main/haskell/Hydra/Codegen.hs +6/−5
- src/main/haskell/Hydra/Constants.hs +1/−4
- src/main/haskell/Hydra/Decode/Error/Core.hs +30/−0
- src/main/haskell/Hydra/Decode/Regex.hs +199/−0
- src/main/haskell/Hydra/Decoding.hs +2/−1
- src/main/haskell/Hydra/Dependencies.hs +1/−0
- src/main/haskell/Hydra/Differentiation.hs +1/−0
- src/main/haskell/Hydra/Dsl/Analysis.hs +2/−0
- src/main/haskell/Hydra/Dsl/Annotations.hs +4/−2
- src/main/haskell/Hydra/Dsl/Arity.hs +2/−0
- src/main/haskell/Hydra/Dsl/Checking.hs +5/−38
- src/main/haskell/Hydra/Dsl/Constants.hs +2/−4
- src/main/haskell/Hydra/Dsl/Dependencies.hs +2/−0
- src/main/haskell/Hydra/Dsl/Environment.hs +2/−0
- src/main/haskell/Hydra/Dsl/Error/Core.hs +257/−0
- src/main/haskell/Hydra/Dsl/Extract/Json.hs +2/−0
- src/main/haskell/Hydra/Dsl/Formatting.hs +2/−0
- src/main/haskell/Hydra/Dsl/Json/Decode.hs +3/−1
- src/main/haskell/Hydra/Dsl/Json/Decoding.hs +2/−0
- src/main/haskell/Hydra/Dsl/Json/Encode.hs +3/−1
- src/main/haskell/Hydra/Dsl/Json/Parser.hs +2/−0
- src/main/haskell/Hydra/Dsl/Json/Writer.hs +2/−0
- src/main/haskell/Hydra/Dsl/Json/Yaml/Decode.hs +2/−0
- src/main/haskell/Hydra/Dsl/Json/Yaml/Encode.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lexical.hs +4/−2
- src/main/haskell/Hydra/Dsl/Lib/Chars.hs +16/−0
- src/main/haskell/Hydra/Dsl/Lib/Eithers.hs +47/−0
- src/main/haskell/Hydra/Dsl/Lib/Equality.hs +11/−0
- src/main/haskell/Hydra/Dsl/Lib/Functions.hs +103/−0
- src/main/haskell/Hydra/Dsl/Lib/Lists.hs +132/−0
- src/main/haskell/Hydra/Dsl/Lib/Literals.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lib/Logic.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lib/Maps.hs +27/−0
- src/main/haskell/Hydra/Dsl/Lib/Math.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lib/Optionals.hs +48/−0
- src/main/haskell/Hydra/Dsl/Lib/Pairs.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lib/Regex.hs +2/−0
- src/main/haskell/Hydra/Dsl/Lib/Sets.hs +11/−0
- src/main/haskell/Hydra/Dsl/Lib/Strings.hs +36/−0
- src/main/haskell/Hydra/Dsl/Names.hs +2/−0
- src/main/haskell/Hydra/Dsl/Predicates.hs +2/−0
- src/main/haskell/Hydra/Dsl/Print/Docs.hs +129/−0
- src/main/haskell/Hydra/Dsl/Reduction.hs +4/−2
- src/main/haskell/Hydra/Dsl/Refs.hs +2/−0
- src/main/haskell/Hydra/Dsl/Regex.hs +436/−0
- src/main/haskell/Hydra/Dsl/Resolution.hs +3/−1
- src/main/haskell/Hydra/Dsl/Rewriting.hs +2/−0
- src/main/haskell/Hydra/Dsl/Scoping.hs +2/−0
- src/main/haskell/Hydra/Dsl/Serialization.hs +2/−0
- src/main/haskell/Hydra/Dsl/Show/Docs.hs +0/−127
- src/main/haskell/Hydra/Dsl/Sorting.hs +2/−0
- src/main/haskell/Hydra/Dsl/Strip.hs +2/−0
- src/main/haskell/Hydra/Dsl/Test/Transform.hs +2/−0
- src/main/haskell/Hydra/Dsl/Test/Utils.hs +3/−1
- src/main/haskell/Hydra/Dsl/Variables.hs +2/−0
- src/main/haskell/Hydra/Dsls.hs +1/−0
- src/main/haskell/Hydra/Encode/Error/Core.hs +43/−0
- src/main/haskell/Hydra/Encode/Regex.hs +165/−0
- src/main/haskell/Hydra/Encoding.hs +1/−0
- src/main/haskell/Hydra/Environment.hs +1/−0
- src/main/haskell/Hydra/Error/Core.hs +46/−0
- src/main/haskell/Hydra/Extract/Core.hs +45/−44
- src/main/haskell/Hydra/Extract/Json.hs +1/−0
- src/main/haskell/Hydra/Extract/Util.hs +2/−1
- src/main/haskell/Hydra/Formatting.hs +1/−0
- src/main/haskell/Hydra/Hoisting.hs +1/−0
- src/main/haskell/Hydra/Inference.hs +32/−42
- src/main/haskell/Hydra/Json/Decode.hs +4/−3
- src/main/haskell/Hydra/Json/Decoding.hs +1/−0
- src/main/haskell/Hydra/Json/Encode.hs +5/−4
- src/main/haskell/Hydra/Json/Parser.hs +1/−0
- src/main/haskell/Hydra/Json/Writer.hs +1/−0
- src/main/haskell/Hydra/Json/Yaml/Decode.hs +1/−0
- src/main/haskell/Hydra/Json/Yaml/Encode.hs +1/−0
- src/main/haskell/Hydra/Kernel.hs +2/−2
- src/main/haskell/Hydra/Languages.hs +1/−0
- src/main/haskell/Hydra/Lexical.hs +6/−5
- src/main/haskell/Hydra/Lib/Chars.hs +56/−0
- src/main/haskell/Hydra/Lib/Defaults.hs +359/−0
- src/main/haskell/Hydra/Lib/Effects.hs +88/−0
- src/main/haskell/Hydra/Lib/Eithers.hs +350/−0
- src/main/haskell/Hydra/Lib/Equality.hs +49/−0
- src/main/haskell/Hydra/Lib/Files.hs +1/−0
- src/main/haskell/Hydra/Lib/Functions.hs +240/−0
- src/main/haskell/Hydra/Lib/Hashing.hs +1/−0
- src/main/haskell/Hydra/Lib/Lists.hs +568/−0
- src/main/haskell/Hydra/Lib/Literals.hs +1/−0
- src/main/haskell/Hydra/Lib/Logic.hs +1/−0
- src/main/haskell/Hydra/Lib/Maps.hs +132/−0
- src/main/haskell/Hydra/Lib/Math.hs +1/−0
- src/main/haskell/Hydra/Lib/Optionals.hs +362/−0
- src/main/haskell/Hydra/Lib/Pairs.hs +1/−0
- src/main/haskell/Hydra/Lib/Regex.hs +1/−0
- src/main/haskell/Hydra/Lib/Sets.hs +53/−0
- src/main/haskell/Hydra/Lib/Strings.hs +124/−0
- src/main/haskell/Hydra/Lib/System.hs +77/−0
- src/main/haskell/Hydra/Lib/Text.hs +1/−0
- src/main/haskell/Hydra/Literals.hs +1/−0
- src/main/haskell/Hydra/Names.hs +1/−0
- src/main/haskell/Hydra/Overlay/Haskell/Dsl/Prims.hs +2/−2
- src/main/haskell/Hydra/Overlay/Haskell/Dsl/Typed/Phantoms.hs +25/−2
- src/main/haskell/Hydra/Overlay/Haskell/Dsl/Typed/Testing.hs +6/−6
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Chars.hs +8/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Effects.hs +9/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Eithers.hs +21/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Equality.hs +4/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Functions.hs +22/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Lists.hs +69/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Maps.hs +12/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Optionals.hs +23/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Sets.hs +5/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/Strings.hs +19/−0
- src/main/haskell/Hydra/Overlay/Haskell/Lib/System.hs +21/−0
- src/main/haskell/Hydra/Overlay/Haskell/Libraries.hs +55/−4
- src/main/haskell/Hydra/Parse/Docs.hs +70/−0
- src/main/haskell/Hydra/Parse/Regex.hs +145/−0
- src/main/haskell/Hydra/Parsers.hs +1/−0
- src/main/haskell/Hydra/Predicates.hs +1/−0
- src/main/haskell/Hydra/Print/Core.hs +536/−0
- src/main/haskell/Hydra/Print/Docs.hs +88/−0
- src/main/haskell/Hydra/Print/Emacs/Regex.hs +152/−0
- src/main/haskell/Hydra/Print/Error/Core.hs +373/−0
- src/main/haskell/Hydra/Print/Error/Packaging.hs +169/−0
- src/main/haskell/Hydra/Print/Errors.hs +215/−0
- src/main/haskell/Hydra/Print/Graph.hs +50/−0
- src/main/haskell/Hydra/Print/Paths.hs +141/−0
- src/main/haskell/Hydra/Print/Pcre/Regex.hs +153/−0
- src/main/haskell/Hydra/Print/Posix/Regex.hs +163/−0
- src/main/haskell/Hydra/Print/Regex.hs +153/−0
- src/main/haskell/Hydra/Print/Typing.hs +73/−0
- src/main/haskell/Hydra/Print/Util.hs +54/−0
- src/main/haskell/Hydra/Print/Variants.hs +86/−0
- src/main/haskell/Hydra/Read/Docs.hs +0/−69
- src/main/haskell/Hydra/Reduction.hs +4/−3
- src/main/haskell/Hydra/Reflect.hs +1/−0
- src/main/haskell/Hydra/Refs.hs +1/−0
- src/main/haskell/Hydra/Regex.hs +162/−0
- src/main/haskell/Hydra/Resolution.hs +4/−3
- src/main/haskell/Hydra/Rewriting.hs +17/−7
- src/main/haskell/Hydra/Scoping.hs +1/−0
- src/main/haskell/Hydra/Serialization.hs +1/−0
- src/main/haskell/Hydra/Show/Core.hs +0/−535
- src/main/haskell/Hydra/Show/Docs.hs +0/−87
- src/main/haskell/Hydra/Show/Error/Core.hs +0/−345
- src/main/haskell/Hydra/Show/Error/Packaging.hs +0/−168
- src/main/haskell/Hydra/Show/Errors.hs +0/−214
- src/main/haskell/Hydra/Show/Graph.hs +0/−49
- src/main/haskell/Hydra/Show/Paths.hs +0/−140
- src/main/haskell/Hydra/Show/Typing.hs +0/−72
- src/main/haskell/Hydra/Show/Util.hs +0/−53
- src/main/haskell/Hydra/Show/Variants.hs +0/−85
- src/main/haskell/Hydra/Sorting.hs +1/−0
- src/main/haskell/Hydra/Strip.hs +1/−0
- src/main/haskell/Hydra/Substitution.hs +1/−0
- src/main/haskell/Hydra/Templates.hs +2/−1
- src/main/haskell/Hydra/Test/Transform.hs +1/−0
- src/main/haskell/Hydra/Test/Utils.hs +3/−2
- src/main/haskell/Hydra/Unification.hs +4/−3
- src/main/haskell/Hydra/Validate/Core.hs +34/−1
- src/main/haskell/Hydra/Validate/Packaging.hs +5/−4
- src/main/haskell/Hydra/Variables.hs +1/−0
CHANGELOG.md view
@@ -15,142 +15,197 @@ --- -## [0.17.1] - unreleased+## [0.17.2] - 2026-07-28 -Development version. Opens the 0.17.x line — the first release built entirely against-published 0.17.0 hosts (Hackage / PyPI / Maven Central), with the `hostOverrides` shims-that were needed while 0.16.1 lacked the effect type and I/O primitives removed.+Point release on the 0.17.x line. Themes: promotion of the generator's routing and manifest+logic into Hydra (`hydra.build.*`), per-package API-doc publishing across Java/Scala/Python,+constraint-polymorphic arithmetic, and new effectful stream/file primitives. Includes the base64+binary-literal rename `literals.binaryToString`/`stringToBinary` → `binaryToBase64`/`base64ToBinary`,+a step toward [#417](https://github.com/CategoricalData/hydra/issues/417) (which remains in progress). +### Highlights++- **Build system promoted into Hydra**: the three generator drivers now consume `hydra.build.routing`+ ([#560](https://github.com/CategoricalData/hydra/issues/560)) and `hydra.build.manifest`+ ([#607](https://github.com/CategoricalData/hydra/issues/607)), retiring the legacy static prefix+ tables; the cold-seeder oil-and-water violation is fixed+ ([#608](https://github.com/CategoricalData/hydra/issues/608)) and guarded+ ([#617](https://github.com/CategoricalData/hydra/issues/617)).+- **Per-package API docs** for all doc-bearing hosts: JavaDoc restructured with cross-links and a fixed+ tag→CI→Pages chain ([#616](https://github.com/CategoricalData/hydra/issues/616)), plus mirrored+ Scaladoc ([#619](https://github.com/CategoricalData/hydra/issues/619)) and Python API docs+ ([#620](https://github.com/CategoricalData/hydra/issues/620)).+- **Constraint-polymorphic arithmetic**: a `numeric` type class with enforcement and value-level dispatch+ ([#566](https://github.com/CategoricalData/hydra/issues/566)), reflected on the target hosts+ ([#618](https://github.com/CategoricalData/hydra/issues/618)).+ ### New features +- Standard-stream primitives: `stdin`/`stdout`/`stderr` ([#526](https://github.com/CategoricalData/hydra/issues/526)).+- Recursive flag for `hydra.lib.files.listDirectory` ([#527](https://github.com/CategoricalData/hydra/issues/527)).+- Hydra-specific regex syntax with per-target translation (`hydra.read.regex` / `hydra.show.regex`)+ ([#567](https://github.com/CategoricalData/hydra/issues/567)).+- Constraint-polymorphic arithmetic: `numeric` type class + value-level dispatch+ ([#566](https://github.com/CategoricalData/hydra/issues/566)).+- Aggregated Java + Scala Maven publishing into a single Central Portal deployment+ ([#591](https://github.com/CategoricalData/hydra/issues/591)).++### Improvements++- Generator drivers consume `hydra.build.routing` ([#560](https://github.com/CategoricalData/hydra/issues/560))+ and `hydra.build.manifest` ([#607](https://github.com/CategoricalData/hydra/issues/607)).+- Fixed the cold-seeder oil-and-water violation ([#608](https://github.com/CategoricalData/hydra/issues/608))+ and extended `check-oil-and-water.py` to catch cold-seeder imports of unpublished `Hydra.Build.*`+ ([#617](https://github.com/CategoricalData/hydra/issues/617)).+- Moved non-kernel packages to strict validation, clearing the #575 backlog+ ([#580](https://github.com/CategoricalData/hydra/issues/580)).+- Decoupled `Hydra.Sources.Test.All` from `Hydra.Sources.All`'s re-export list+ ([#601](https://github.com/CategoricalData/hydra/issues/601)).+- Renamed `hydra.json.schema` to resolve the module-vs-namespace-prefix conflict that broke+ file-per-module hosts ([#532](https://github.com/CategoricalData/hydra/issues/532)).+- Coders route `hydra.lib.*` overlay imports by overlay-module existence, not name-matching+ `hydra.lib.defaults` ([#568](https://github.com/CategoricalData/hydra/issues/568)).+- Per-package JavaDoc/Scaladoc/Python-doc publishing+ ([#616](https://github.com/CategoricalData/hydra/issues/616),+ [#619](https://github.com/CategoricalData/hydra/issues/619),+ [#620](https://github.com/CategoricalData/hydra/issues/620)).+- Aligned Java-host Scala/TypeScript generation with Haskell on expression layout (line-wrapping,+ declaration order) ([#612](https://github.com/CategoricalData/hydra/issues/612)).++### Bug fixes++- **TypeScript** — added the missing CI job (zero prior coverage)+ ([#571](https://github.com/CategoricalData/hydra/issues/571)); fixed the+ `verify-distribution.sh` smoke-test import so the gate actually gates+ ([#578](https://github.com/CategoricalData/hydra/issues/578)); emit `hydra.parse.regex`'s+ `regexSequence` before its alternation use (TS2448)+ ([#604](https://github.com/CategoricalData/hydra/issues/604)).+- **Build and sync** — `sync.sh` Phase 3 digest-cache now sees cross-package deps on moved kernel+ symbols, fixing stale downstream output ([#606](https://github.com/CategoricalData/hydra/issues/606)).+- **Numeric constraints** — `#566` polymorphism now reflected on the target hosts (targets were+ monomorphizing `int32->int32->int32`) ([#618](https://github.com/CategoricalData/hydra/issues/618)).++---++## [0.17.1] - 2026-07-18++Consolidation release on the 0.17.x line, built against published 0.17.0 hosts. Themes:+generated term-reference DSLs, a translingual package-validation framework, promotion of the+build system into Hydra (`hydra-build`), and broad TypeScript-host and cross-host hardening.++### Highlights+ - **Generated term-reference DSLs** ([#467](https://github.com/CategoricalData/hydra/issues/467)):- kernel *term* modules now project generated DSL surfaces, completing the story begun with- type-module DSLs and the generated primitive wrappers (`hydra.dsl.lib.*`, 0.17.0). A- signature read-back in the DSL pass reuses the main pass's inference, and a demand-curated- set of 19 kernel term modules (plus the json/test/extract modules) emits one typed,- rename-safe reference per definition into every target language — e.g. Haskell- `Hydra.Dsl.Strip.deannotateType`, Java `hydra.dsl.Strip.deannotateType(...)`, Python- `hydra.dsl.strip.deannotate_type(...)`. The Java and Python coder sources were pivoted onto- the generated references, retiring ~700 stringly-typed inline `var("hydra....")` references- and shrinking Python's hand registry to the non-generatable remainder (byte-identical- generated output before and after). Follow-ups:- [#555](https://github.com/CategoricalData/hydra/issues/555) (typed references to derived- encode/decode/show functions via `TypedName`),- [#556](https://github.com/CategoricalData/hydra/issues/556) (non-kernel packages).+ kernel term modules now emit one typed, rename-safe reference per definition into every target+ language; the Java and Python coder sources were pivoted onto them, retiring ~700 stringly-typed+ inline references. - **Package validation** ([#574](https://github.com/CategoricalData/hydra/issues/574), [#575](https://github.com/CategoricalData/hydra/issues/575)): a translingual `hydra.validate.*`- framework carries per-package `ValidationProfile`s (error/warning rules, error/warning caps) and a- catalog of checks — undeclared-package-dependency detection (now a fatal gate, #574),- definition-name convention (PascalCase), definition ordering, documentation completeness, and- conflicting-variant-name detection — layered on the existing core term/type well-formedness rules.- A kernel-strict / others-relaxed policy keeps `/sync` green fleet-wide while the documentation- backlog drains. See the new [Validation](https://github.com/CategoricalData/hydra/wiki/Validation)- wiki page for the full per-package constraint specification.-- **DSL-authoring registration guards** ([#554](https://github.com/CategoricalData/hydra/issues/554)):- fail-fast authoring-time validation for the host-native DSL sources — every DSL-authoring module in- Java/`hydra-jvm`, Python, and Scala now asserts its definitions are fully registered- (`Defs.checkComplete` / `check_complete`), backed by a Haskell kernel-source registration-completeness- scanner, so a definition added to a source file but omitted from its `definitions` list fails loudly- instead of silently vanishing from the generated output.-- **`hydra-build` package** ([#546](https://github.com/CategoricalData/hydra/issues/546),- [#529](https://github.com/CategoricalData/hydra/issues/529),- [#530](https://github.com/CategoricalData/hydra/issues/530)): the build-orchestration logic that had- lived only in host scripts is now translingual Hydra. Pure module-list utilities became- `hydra.build.modules` (#529) and the orphan-reconcile decision became `hydra.build.reconcile` (#530),- each with a translingual test suite; the `hydra.build.*` modules were then extracted into a dedicated- `hydra-build` package (#546), separate from the kernel.-- **Metadata sidecar + content/version-addressed freshness**- ([#415](https://github.com/CategoricalData/hydra/issues/415)): dist manifests now carry a- `moduleFormatVersion` field, and the generator's freshness basis is content/version-addressed — the- groundwork for reproducible, cache-correct incremental generation.-- **Structured generation-provenance record**- ([#523](https://github.com/CategoricalData/hydra/issues/523)): each generation run now records a- structured `Generation` provenance entry (digest v2), replacing the ad-hoc shell threading of- generation metadata.-- **Worker + issue hierarchy** ([#557](https://github.com/CategoricalData/hydra/issues/557)): a- principled agent/worker framework — roles and parentage mirroring the GitHub issue tree, a- cross-worktree message transport with a verify-after-copy protocol, a blocking-aware design-question- (`decisions/`) channel, an issue-proposal queue with the `/issues` command, an autonomy-dial banner,- and cross-machine staging coordination. Contributor-facing process only; no change to generated code.+ framework with per-package `ValidationProfile`s (undeclared-dependency gate, naming/ordering/docs+ checks). See the [Validation](https://github.com/CategoricalData/hydra/wiki/Validation) wiki page.+- **`hydra-build` package** ([#546](https://github.com/CategoricalData/hydra/issues/546)):+ build-orchestration logic that lived only in host scripts is now translingual Hydra+ (`hydra.build.*`), extracted into a dedicated package. -### API and usability+### New features -- **DSL usability passes** ([#430](https://github.com/CategoricalData/hydra/issues/430),- [#553](https://github.com/CategoricalData/hydra/issues/553)): reviewed the host-native Java, Python,- and Scala DSL surfaces for ergonomics and cross-host parity (documented def shapes, added a Scala- projection helper), bringing the three authoring dialects into closer alignment.+- Generated term-reference DSLs ([#467](https://github.com/CategoricalData/hydra/issues/467));+ follow-ups: `TypedName` refs to derived encode/decode/show+ ([#555](https://github.com/CategoricalData/hydra/issues/555)), non-kernel packages+ ([#556](https://github.com/CategoricalData/hydra/issues/556)).+- Translingual package-validation framework ([#574](https://github.com/CategoricalData/hydra/issues/574),+ [#575](https://github.com/CategoricalData/hydra/issues/575)).+- DSL-authoring registration guards: fail-fast completeness checks for the Java/Python/Scala DSL sources+ ([#554](https://github.com/CategoricalData/hydra/issues/554)).+- `hydra-build` package: `hydra.build.modules`+ ([#529](https://github.com/CategoricalData/hydra/issues/529)), `hydra.build.reconcile`+ ([#530](https://github.com/CategoricalData/hydra/issues/530)), extracted from the kernel+ ([#546](https://github.com/CategoricalData/hydra/issues/546)).+- Effectful `hydra.lib.system` primitive library ([#498](https://github.com/CategoricalData/hydra/issues/498)).+- SHA-256 cryptographic hash primitive in `hydra.lib` ([#524](https://github.com/CategoricalData/hydra/issues/524)).+- `hydra-jvm` package: shared JVM serde helpers relocated out of `hydra.java.serde`+ ([#505](https://github.com/CategoricalData/hydra/issues/505)).+- Internalized the Hydra-TinkerPop bindings (formerly HydraPop)+ ([#442](https://github.com/CategoricalData/hydra/issues/442)).+- Compact unit-valued variants in the JSON encoding ([#520](https://github.com/CategoricalData/hydra/issues/520)).+- Structured generation-provenance record (digest v2) ([#413](https://github.com/CategoricalData/hydra/issues/413),+ [#523](https://github.com/CategoricalData/hydra/issues/523)).+- Metadata sidecar + content/version-addressed freshness (`moduleFormatVersion`)+ ([#415](https://github.com/CategoricalData/hydra/issues/415)).+- Worker + issue hierarchy: agent/worker framework, cross-worktree messaging, issue-proposal queue+ (contributor process only) ([#557](https://github.com/CategoricalData/hydra/issues/557)). -### Fixed+### Improvements -Bug fixes landed this cycle, grouped by area (see each issue for detail):+- Type inference for annotations ([#229](https://github.com/CategoricalData/hydra/issues/229)).+- Fixed the signature / definition split in primitive definitions+ ([#502](https://github.com/CategoricalData/hydra/issues/502)).+- DSL usability passes across the host-native Java/Python/Scala surfaces+ ([#430](https://github.com/CategoricalData/hydra/issues/430),+ [#553](https://github.com/CategoricalData/hydra/issues/553)).+- Audited the Scala and Lisp-family coders for the unconditional `hydra.lib.*` overlay-import rewrite+ ([#569](https://github.com/CategoricalData/hydra/issues/569)). -- **TypeScript** — reactivated `hydra.lib.*` primitive tests surfaced encoder gaps: lazy show-calling- let bindings and compact bare-string `LiteralType` expansion in the test converter- ([#564](https://github.com/CategoricalData/hydra/issues/564)),- `binaryToBytes` registration + base64 binary decode in `decodeUtf8`- ([#561](https://github.com/CategoricalData/hydra/issues/561)),+### Bug fixes++- **TypeScript host** — V8 stack budget on ts→Java ([#390](https://github.com/CategoricalData/hydra/issues/390));+ effectful libs not generated / 484 tsc errors ([#503](https://github.com/CategoricalData/hydra/issues/503));+ 15 effect/file inference cases ([#504](https://github.com/CategoricalData/hydra/issues/504));+ ts→ts self-host regression ([#507](https://github.com/CategoricalData/hydra/issues/507)); npm packages+ bundling a duplicate kernel ([#584](https://github.com/CategoricalData/hydra/issues/584)); broken npm+ entry points ([#587](https://github.com/CategoricalData/hydra/issues/587));+ `hydra.test.build.modules.allTests` gen-universe gap ([#588](https://github.com/CategoricalData/hydra/issues/588)).+- **TypeScript coder** — reactivated `hydra.lib.*` tests: lazy show-calling let bindings + compact+ `LiteralType` expansion ([#564](https://github.com/CategoricalData/hydra/issues/564)); `binaryToBytes`+ registration + base64 decode in `decodeUtf8` ([#561](https://github.com/CategoricalData/hydra/issues/561)); `hydra.test.build.*` emission after the #546 split- ([#570](https://github.com/CategoricalData/hydra/issues/570)), and `HYDRA_DEFAULT_IMPLS` support in- the test runner ([#536](https://github.com/CategoricalData/hydra/issues/536)).-- **Tests and CI** — restored the default-primitive-implementation testing solution- ([#388](https://github.com/CategoricalData/hydra/issues/388),- [#549](https://github.com/CategoricalData/hydra/issues/549)), reactivated previously-ignored kernel- test cases ([#513](https://github.com/CategoricalData/hydra/issues/513),- [#550](https://github.com/CategoricalData/hydra/issues/550)), wired the regression harnesses into CI- and split them out of the monolithic Haskell job for timeout headroom- ([#535](https://github.com/CategoricalData/hydra/issues/535),- [#563](https://github.com/CategoricalData/hydra/issues/563)), added Scala/Go/Lisp- self-containment gates to `verify-distribution.sh`- ([#537](https://github.com/CategoricalData/hydra/issues/537)), a manifest-JSON-tracked CI check- ([#541](https://github.com/CategoricalData/hydra/issues/541)), a per-package test-digest freshness- fix ([#551](https://github.com/CategoricalData/hydra/issues/551)), overlay-file restoration in- `test-stale-output-prune.sh` ([#558](https://github.com/CategoricalData/hydra/issues/558)), and a- sync-freshness fingerprint that now sees host-native DSL sources- ([#562](https://github.com/CategoricalData/hydra/issues/562)).+ ([#570](https://github.com/CategoricalData/hydra/issues/570)); `HYDRA_DEFAULT_IMPLS` in the test runner+ ([#536](https://github.com/CategoricalData/hydra/issues/536)); overlay-import rewrite no longer captures+ `hydra.lib.defaults` ([#565](https://github.com/CategoricalData/hydra/issues/565)).+- **Lisp family** — clj→clj bootstrap hang in `generate_source_files`+ ([#479](https://github.com/CategoricalData/hydra/issues/479)); Common Lisp `test_graph.lisp` loader+ forward-reference ([#496](https://github.com/CategoricalData/hydra/issues/496)); Scheme maps+ last-writer-wins in `union` ([#545](https://github.com/CategoricalData/hydra/issues/545)); Emacs Lisp+ bootstrap `wrong-type-argument (listp :string)` ([#586](https://github.com/CategoricalData/hydra/issues/586));+ `hydra.build.*` regeneration into the Lisp dialects ([#544](https://github.com/CategoricalData/hydra/issues/544)). - **Kernel and coders** — Java binary-literal signed-byte emission- ([#528](https://github.com/CategoricalData/hydra/issues/528)), `hydra.json.Decode.fromJson`- parametric-type (Application/Forall) support- ([#531](https://github.com/CategoricalData/hydra/issues/531)), stale 2-param `Coder` shape in- Java/Scala test bootstrap ([#552](https://github.com/CategoricalData/hydra/issues/552)), and a- kernel dead-code/TODO cleanup ([#538](https://github.com/CategoricalData/hydra/issues/538)).+ ([#528](https://github.com/CategoricalData/hydra/issues/528)); `hydra.json.Decode.fromJson`+ parametric-type support ([#531](https://github.com/CategoricalData/hydra/issues/531)); stale 2-param+ `Coder` shape in Java/Scala test bootstrap ([#552](https://github.com/CategoricalData/hydra/issues/552));+ Java Javadoc ampersand escaping ([#493](https://github.com/CategoricalData/hydra/issues/493)); Scala+ coder over-generalizing `Schema[S,T,V,E]` args, breaking `hydra-pg`+ ([#589](https://github.com/CategoricalData/hydra/issues/589)); kernel dead-code/TODO cleanup+ ([#538](https://github.com/CategoricalData/hydra/issues/538)).+- **Publishing and packaging** — self-broken 0.16.0 `hydra-kernel`/`hydra-python` wheels+ ([#472](https://github.com/CategoricalData/hydra/issues/472)). - **Lib and build** — `hydra.lib.files` copy/removeDirectory/status overlays across all nine hosts- ([#525](https://github.com/CategoricalData/hydra/issues/525)), `hydra.build.*` regeneration into the- Lisp dialects ([#544](https://github.com/CategoricalData/hydra/issues/544)), Scheme maps- last-writer-wins in `union` ([#545](https://github.com/CategoricalData/hydra/issues/545)),- standalone-kernel SHA dependency ([#542](https://github.com/CategoricalData/hydra/issues/542)),- the lexicon's empty Types section ([#539](https://github.com/CategoricalData/hydra/issues/539)), and- a duplicated generated-file header in `generate-head-haskell-build.py`- ([#540](https://github.com/CategoricalData/hydra/issues/540)).--- **TypeScript overlay-import rewrite** ([#565](https://github.com/CategoricalData/hydra/issues/565)):- the TypeScript coder's lib overlay-import rewrite no longer captures `hydra.lib.defaults`, which is a- generated (not overlaid) module; excluding it fixes spurious import references in generated TypeScript.--- **Lexicon generation** (`bin/regenerate-lexicon.sh`): the generator had been failing- silently since the encoder/decoder modules moved to in-memory synthesis- ([#448](https://github.com/CategoricalData/hydra/issues/448)) — the script masked the- failure and left a stale `docs/hydra-lexicon.txt` missing the four effectful primitive- libraries (`hydra.lib.{effects,files,system,text}`). The synthesized coder modules are- now included in the lexicon universe, the script fails loudly, and the regenerated- lexicon covers all 267 primitives across 17 library modules.-- **`bin/prepare-release.sh`**: the non-blocking Java quality check invoked Gradle- subprojects (`:hydra-rdf4j:test` etc.) that were removed in- [#511](https://github.com/CategoricalData/hydra/issues/511), so it always warned without- checking anything; it now runs the `dist/java/hydra-pg` package tests (the current home- of the former binding tests).-- **`.gitignore`**: the ignore rules for the overlaid hand-written Haskell runtime still- named pre-[#501](https://github.com/CategoricalData/hydra/issues/501) paths, so 41- duplicate copies under `dist/haskell/` had become tracked; the rules now match the- `Hydra/Overlay/` location and the duplicates are untracked.+ ([#525](https://github.com/CategoricalData/hydra/issues/525)); standalone-kernel SHA dependency+ ([#542](https://github.com/CategoricalData/hydra/issues/542)); lexicon's empty Types section+ ([#539](https://github.com/CategoricalData/hydra/issues/539)); silent lexicon-generation failure since+ the coders moved to in-memory synthesis ([#448](https://github.com/CategoricalData/hydra/issues/448));+ duplicated generated-file header in `generate-head-haskell-build.py`+ ([#540](https://github.com/CategoricalData/hydra/issues/540)); `.gitignore` untracking 41 duplicate+ overlaid-runtime copies under `dist/haskell/` ([#501](https://github.com/CategoricalData/hydra/issues/501));+ `bin/prepare-release.sh` Java quality check repointed to `dist/java/hydra-pg` tests after+ ([#511](https://github.com/CategoricalData/hydra/issues/511)).+- **Tests and CI** — restored default-primitive-implementation testing+ ([#388](https://github.com/CategoricalData/hydra/issues/388),+ [#549](https://github.com/CategoricalData/hydra/issues/549)); reactivated ignored kernel test cases+ ([#513](https://github.com/CategoricalData/hydra/issues/513),+ [#550](https://github.com/CategoricalData/hydra/issues/550)); wired + split out the regression harnesses+ ([#535](https://github.com/CategoricalData/hydra/issues/535),+ [#563](https://github.com/CategoricalData/hydra/issues/563)); Scala/Go/Lisp self-containment gates+ ([#537](https://github.com/CategoricalData/hydra/issues/537)); manifest-JSON-tracked CI check+ ([#541](https://github.com/CategoricalData/hydra/issues/541)); per-package test-digest freshness+ ([#551](https://github.com/CategoricalData/hydra/issues/551)); overlay-file restoration in+ `test-stale-output-prune.sh` ([#558](https://github.com/CategoricalData/hydra/issues/558)); DSL-aware+ sync-freshness fingerprint ([#562](https://github.com/CategoricalData/hydra/issues/562)). ### Documentation -- Corrected the 0.17.0 Maven coordinates throughout (Java artifacts publish under group- `net.fortytwo.hydra.java`, Scala under `net.fortytwo.hydra.scala`,- [#519](https://github.com/CategoricalData/hydra/issues/519)); added the npm and Scala- release channels to the README; added TypeScript/Scala/Lisp sections to Getting started;- repointed stale pre-#418/#501 DSL paths in the architecture docs; added GitHub issue and- PR templates.+- Corrected 0.17.0 Maven coordinates and added npm/Scala release channels, TypeScript/Scala/Lisp+ Getting-started sections, and issue/PR templates+ ([#519](https://github.com/CategoricalData/hydra/issues/519)). ---
hydra-kernel.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.38.1.+-- This file has been generated from package.yaml by hpack version 0.39.1. -- -- see: https://github.com/sol/hpack name: hydra-kernel-version: 0.17.1+version: 0.17.2 synopsis: The Hydra kernel: core types, terms, inference, and DSL runtime description: Hydra is an implementation of the LambdaGraph data model, which takes advantage of an isomorphism between labeled hypergraphs and typed lambda calculus: in Hydra, "graphs are programs, and programs are graphs". This package is the Hydra kernel: the core type and term model, type inference, the term rewriting and reduction engine, the primitive library, and the DSL runtime — the code that must be present in every Hydra implementation. The convenient entry point is the Hydra.Kernel module, which re-exports the kernel's collision-free surface. category: Data@@ -54,6 +54,7 @@ Hydra.Decode.Parsing Hydra.Decode.Paths Hydra.Decode.Query+ Hydra.Decode.Regex Hydra.Decode.Relational Hydra.Decode.System Hydra.Decode.Tabular@@ -105,6 +106,7 @@ Hydra.Dsl.Lib.Defaults Hydra.Dsl.Lib.Eithers Hydra.Dsl.Lib.Equality+ Hydra.Dsl.Lib.Functions Hydra.Dsl.Lib.Lists Hydra.Dsl.Lib.Literals Hydra.Dsl.Lib.Logic@@ -120,15 +122,16 @@ Hydra.Dsl.Parsing Hydra.Dsl.Paths Hydra.Dsl.Predicates+ Hydra.Dsl.Print.Docs Hydra.Dsl.Query Hydra.Dsl.Reduction Hydra.Dsl.Refs+ Hydra.Dsl.Regex Hydra.Dsl.Relational Hydra.Dsl.Resolution Hydra.Dsl.Rewriting Hydra.Dsl.Scoping Hydra.Dsl.Serialization- Hydra.Dsl.Show.Docs Hydra.Dsl.Sorting Hydra.Dsl.Strip Hydra.Dsl.System@@ -161,6 +164,7 @@ Hydra.Encode.Parsing Hydra.Encode.Paths Hydra.Encode.Query+ Hydra.Encode.Regex Hydra.Encode.Relational Hydra.Encode.System Hydra.Encode.Tabular@@ -207,6 +211,7 @@ Hydra.Lib.Eithers Hydra.Lib.Equality Hydra.Lib.Files+ Hydra.Lib.Functions Hydra.Lib.Hashing Hydra.Lib.Lists Hydra.Lib.Literals@@ -250,6 +255,7 @@ Hydra.Overlay.Haskell.Lib.Eithers Hydra.Overlay.Haskell.Lib.Equality Hydra.Overlay.Haskell.Lib.Files+ Hydra.Overlay.Haskell.Lib.Functions Hydra.Overlay.Haskell.Lib.Hashing Hydra.Overlay.Haskell.Lib.Lists Hydra.Overlay.Haskell.Lib.Literals@@ -265,31 +271,37 @@ Hydra.Overlay.Haskell.Lib.Text Hydra.Overlay.Haskell.Libraries Hydra.Packaging+ Hydra.Parse.Docs+ Hydra.Parse.Regex Hydra.Parsers Hydra.Parsing Hydra.Paths Hydra.Predicates+ Hydra.Print.Core+ Hydra.Print.Docs+ Hydra.Print.Emacs.Regex+ Hydra.Print.Error.Core+ Hydra.Print.Error.Packaging+ Hydra.Print.Errors+ Hydra.Print.Graph+ Hydra.Print.Paths+ Hydra.Print.Pcre.Regex+ Hydra.Print.Posix.Regex+ Hydra.Print.Regex+ Hydra.Print.Typing+ Hydra.Print.Util+ Hydra.Print.Variants Hydra.Query- Hydra.Read.Docs Hydra.Reduction Hydra.Reflect Hydra.Refs+ Hydra.Regex Hydra.Relational Hydra.Resolution Hydra.Rewriting Hydra.Scoping Hydra.Serialization Hydra.Settings- Hydra.Show.Core- Hydra.Show.Docs- Hydra.Show.Error.Core- Hydra.Show.Error.Packaging- Hydra.Show.Errors- Hydra.Show.Graph- Hydra.Show.Paths- Hydra.Show.Typing- Hydra.Show.Util- Hydra.Show.Variants Hydra.Sorting Hydra.Strip Hydra.Substitution
src/main/haskell/Hydra/Adapt.hs view
@@ -38,16 +38,17 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors+import qualified Hydra.Print.Graph as PrintGraph import qualified Hydra.Query as Query import qualified Hydra.Reduction as Reduction import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors-import qualified Hydra.Show.Graph as ShowGraph import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular@@ -214,7 +215,7 @@ -- | Adapt a literal value using the given language constraints adaptLiteralValue :: Ord t0 => (M.Map t0 Core.LiteralType -> t0 -> Core.Literal -> Core.Literal) adaptLiteralValue litmap lt l =- Optionals.cases (Maps.lookup lt litmap) (Core.LiteralString (ShowCore.literal l)) (\lt2 -> adaptLiteral lt2 l)+ Optionals.cases (Maps.lookup lt litmap) (Core.LiteralString (PrintCore.literal l)) (\lt2 -> adaptLiteral lt2 l) -- | Rewrite callback for adapting nested let binding TypeSchemes in a term adaptNestedTypes :: Coders.LanguageConstraints -> M.Map Core.LiteralType Core.LiteralType -> (t0 -> Either Errors.Error Core.Term) -> t0 -> Either Errors.Error Core.Term@@ -276,7 +277,7 @@ Core.typeApplicationTermBody = (Core.typeApplicationTermBody v0), Core.typeApplicationTermType = atyp}))) Core.TermTypeLambda _ -> Right term1- _ -> Eithers.bind (tryTerm term1) (\mterm -> Optionals.cases mterm (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "no alternatives for term: " (ShowCore.term term1))))) (\term2 -> Right term2))))+ _ -> Eithers.bind (tryTerm term1) (\mterm -> Optionals.cases mterm (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "no alternatives for term: " (PrintCore.term term1))))) (\term2 -> Right term2)))) in (Rewriting.rewriteTermM rewrite term0) -- | Adapt a term using the constraints of a given language@@ -322,7 +323,7 @@ let supportedVariant = Sets.member (Reflect.typeVariant typ) (Coders.languageConstraintsTypeVariants constraints) in (Logic.ifElse supportedVariant (forSupported typ) (forUnsupported typ)) rewrite =- \recurse -> \typ -> Eithers.bind (recurse typ) (\type1 -> Optionals.cases (tryType type1) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "no alternatives for type: " (ShowCore.type_ typ))))) (\type2 -> Right type2))+ \recurse -> \typ -> Eithers.bind (recurse typ) (\type1 -> Optionals.cases (tryType type1) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "no alternatives for type: " (PrintCore.type_ typ))))) (\type2 -> Right type2)) in (Rewriting.rewriteTypeM rewrite type0) -- | Adapt a type using the constraints of a given language
src/main/haskell/Hydra/Analysis.hs view
@@ -39,6 +39,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Predicates as Predicates import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
src/main/haskell/Hydra/Annotations.hs view
@@ -33,10 +33,11 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
src/main/haskell/Hydra/Arity.hs view
@@ -23,6 +23,7 @@ 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
src/main/haskell/Hydra/Checking.hs view
@@ -36,15 +36,16 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors+import qualified Hydra.Print.Variants as PrintVariants import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors-import qualified Hydra.Show.Variants as ShowVariants import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -71,7 +72,7 @@ t = Pairs.second uc in (Lists.foldl (\b -> \x -> Logic.and b (Equality.equal x h)) True t)) --- | Apply type arguments to a type, substituting forall-bound variables+-- | Apply type arguments to a type, substituting forall-bound variables. Paper: inference.tex, 'Checking the witness' (consuming the pending-type-argument stack). applyTypeArgumentsToType :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Type -> Either Errors.Error Core.Type applyTypeArgumentsToType cx tx typeArgs t = Optionals.cases (Lists.uncons typeArgs) (Right t) (\uc ->@@ -85,11 +86,11 @@ Core.TypeVariable v0 -> Eithers.either (\_ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "forall type", Errors.unexpectedShapeErrorActual = (Strings.cat [- ShowCore.type_ t,+ PrintCore.type_ t, ". Trying to apply ", (Literals.showInt32 (Lists.length typeArgs)), " type args: ",- (Formatting.showList ShowCore.type_ typeArgs)])})))) (\schemaRes ->+ (Formatting.showList PrintCore.type_ typeArgs)])})))) (\schemaRes -> let schemaType = Pairs.first schemaRes schemaBody = Strip.deannotateType (Core.typeSchemeBody schemaType) in case schemaBody of@@ -98,16 +99,16 @@ _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "forall type", Errors.unexpectedShapeErrorActual = (Strings.cat [- ShowCore.type_ t,+ PrintCore.type_ t, ". Trying to apply ", (Literals.showInt32 (Lists.length typeArgs)), " type args: ",- (Formatting.showList ShowCore.type_ typeArgs),+ (Formatting.showList PrintCore.type_ typeArgs), ". Context has vars: {", (Strings.intercalate ", " (Lists.map Core.unName (Maps.keys (Graph.graphBoundTypes tx)))), "}"])})))) --- | Check that a term has no unbound type variables (Either version)+-- | Check that a term has no unbound type variables (Either version). Paper: inference.tex, 'Checking the witness' (always-on finalization invariant). checkForUnboundTypeVariables :: t0 -> Graph.Graph -> Core.Term -> Either Errors.Error () checkForUnboundTypeVariables cx tx term0 = @@ -141,21 +142,6 @@ in (checkRecursive Sets.empty [ "top level"] Nothing term0) --- | Check that a nominal type is applied to the correct number of type arguments (Either version)-checkNominalApplication :: Typing.InferenceContext -> Graph.Graph -> Core.Name -> [Core.Type] -> Either Errors.Error ((), Typing.InferenceContext)-checkNominalApplication cx tx tname typeArgs =- Eithers.bind (Resolution.requireSchemaType cx (Graph.graphSchemaTypes tx) tname) (\result ->- let schemaType = Pairs.first result- cx2 = Pairs.second result- vars = Core.typeSchemeVariables schemaType- varslen = Lists.length vars- argslen = Lists.length typeArgs- in (Logic.ifElse (Equality.equal varslen argslen) (Right ((), cx2)) (Left (Errors.ErrorChecking (Checking.CheckingErrorTypeArityMismatch (Checking.TypeArityMismatchError {- Checking.typeArityMismatchErrorType = (Core.TypeVariable tname),- Checking.typeArityMismatchErrorExpectedArity = varslen,- Checking.typeArityMismatchErrorActualArity = argslen,- Checking.typeArityMismatchErrorTypeArguments = typeArgs}))))))- -- | Ensure all types in a list are equal and return the common type checkSameType :: t0 -> Graph.Graph -> String -> [Core.Type] -> Either Errors.Error Core.Type checkSameType cx tx desc types =@@ -166,16 +152,7 @@ Checking.unequalTypesErrorDescription = desc}))) in (Logic.ifElse (typesAllEffectivelyEqual tx types) (Optionals.cases (Lists.maybeHead types) unequalErr (\t -> Right t)) unequalErr) --- | Check that a term has the expected type-checkType :: Typing.InferenceContext -> Graph.Graph -> Core.Term -> Core.Type -> Either Errors.Error ()-checkType cx tx term typ =-- let vars = Graph.graphTypeVariables tx- in (Logic.ifElse Constants.debugInference (Eithers.bind (Eithers.map (\_p -> Pairs.first _p) (typeOf cx tx [] term)) (\t0 -> Logic.ifElse (typesEffectivelyEqual tx t0 typ) (Right ()) (Left (Errors.ErrorChecking (Checking.CheckingErrorTypeMismatch (Checking.TypeMismatchError {- Checking.typeMismatchErrorExpectedType = typ,- Checking.typeMismatchErrorActualType = t0})))))) (Right ()))---- | Sanity-check a type substitution arising from unification. Specifically, check that schema types have not been inappropriately unified with type variables inferred from terms.+-- | Sanity-check a type substitution arising from unification. Specifically, check that schema types have not been inappropriately unified with type variables inferred from terms. Paper: inference.tex, 'Checking the witness' (always-on invariant: a substitution may not bind a type name as if it were an inference variable). checkTypeSubst :: t0 -> Graph.Graph -> Typing.TypeSubst -> Either Errors.Error Typing.TypeSubst checkTypeSubst cx tx subst = @@ -191,14 +168,10 @@ badVars = Sets.fromList (Lists.filter (\v -> Optionals.cases (Lexical.dereferenceSchemaType v (Graph.graphSchemaTypes tx)) False isNominal) (Sets.toList suspectVars)) badPairs = Lists.filter (\p -> Sets.member (Pairs.first p) badVars) (Maps.toList s)- printPair = \p -> Strings.cat2 (Strings.cat2 (Core.unName (Pairs.first p)) " --> ") (ShowCore.type_ (Pairs.second p))+ printPair = \p -> Strings.cat2 (Strings.cat2 (Core.unName (Pairs.first p)) " --> ") (PrintCore.type_ (Pairs.second p)) in (Logic.ifElse (Sets.null badVars) (Right subst) (Left (Errors.ErrorChecking (Checking.CheckingErrorIncorrectUnification (Checking.IncorrectUnificationError { Checking.incorrectUnificationErrorSubstitution = subst}))))) --- | Check that all type variables in a type are bound. NOTE: This check is currently disabled to allow phantom type variables from polymorphic instantiation to pass through. The proper fix is to ensure `typeOf` doesn't create fresh variables for post-inference code.-checkTypeVariables :: t0 -> t1 -> ()-checkTypeVariables _tx _typ = ()- -- | Check if a type contains any type variable from the current scope containsInScopeTypeVars :: Graph.Graph -> Core.Type -> Bool containsInScopeTypeVars tx t =@@ -207,7 +180,7 @@ freeVars = Variables.freeVariablesInTypeSimple t in (Logic.not (Sets.null (Sets.intersection vars freeVars))) --- | Normalize free type variables in a type to canonical names based on order of first occurrence. This allows comparing types that differ only in the naming of free type variables.+-- | Normalize free type variables in a type to canonical names based on order of first occurrence. This allows comparing types that differ only in the naming of free type variables. Paper: inference.tex, 'Checking the witness' (effective equality). normalizeTypeFreeVars :: Core.Type -> Core.Type normalizeTypeFreeVars typ = @@ -227,7 +200,7 @@ typeListsEffectivelyEqual tx tlist1 tlist2 = Logic.ifElse (Equality.equal (Lists.length tlist1) (Lists.length tlist2)) (Lists.foldl Logic.and True (Lists.zipWith (typesEffectivelyEqual tx) tlist1 tlist2)) False --- | Given a type context, reconstruct the type of a System F term+-- | Given a type context, reconstruct the type of a System F term. Paper: inference.tex, 'Checking the witness' -- the executable form of the System F typing judgment in the soundness theorem. typeOf :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Term -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOf cx tx typeArgs term = @@ -257,11 +230,11 @@ _ -> Left (Errors.ErrorChecking (Checking.CheckingErrorUnsupportedTermVariant (Checking.UnsupportedTermVariantError { Checking.unsupportedTermVariantErrorTermVariant = (Reflect.termVariant term)}))) --- | Reconstruct the type of an annotated term (Either/InferenceContext version)+-- | Reconstruct the type of an annotated term (Either/InferenceContext version). Paper: inference.tex, rule Ann (checking side). typeOfAnnotatedTerm :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.AnnotatedTerm -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfAnnotatedTerm cx tx typeArgs at = typeOf cx tx typeArgs (Core.annotatedTermBody at) --- | Reconstruct the type of an application term (Either/InferenceContext version)+-- | Reconstruct the type of an application term (Either/InferenceContext version). Paper: inference.tex, rule App (checking side). typeOfApplication :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Application -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfApplication cx tx typeArgs app = @@ -294,7 +267,7 @@ cx4 = Pairs.second result3 in (Eithers.bind (applyTypeArgumentsToType cx4 tx typeArgs t) (\applied -> Right (applied, cx4))))))))) --- | Reconstruct the type of a case statement (Either/InferenceContext version)+-- | Reconstruct the type of a case statement (Either/InferenceContext version). Paper: inference.tex, rules Case and Case_d (checking side). typeOfCaseStatement :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.CaseStatement -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfCaseStatement cx tx typeArgs cs = @@ -329,7 +302,7 @@ Core.functionTypeCodomain = cod}), cx3))))))))) --- | Reconstruct the type of an either value (Either/InferenceContext version)+-- | Reconstruct the type of an either value (Either/InferenceContext version). Paper: inference.tex, rules Eith_L and Eith_R (checking side). typeOfEither :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Either Core.Term Core.Term -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfEither cx tx typeArgs et = @@ -362,7 +335,7 @@ Core.eitherTypeRight = rightType}), cx2)))) et) arityErr))))) --- | Reconstruct the type of a union injection (Either/InferenceContext version)+-- | Reconstruct the type of a union injection (Either/InferenceContext version). Paper: inference.tex, rule Inj (checking side). typeOfInjection :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Injection -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfInjection cx tx typeArgs injection = @@ -377,7 +350,7 @@ sbody = Core.typeSchemeBody schemaType in (Eithers.bind (ExtractCore.unionType tname sbody) (\sfields -> Eithers.bind (Resolution.findFieldType cx2 fname sfields) (\ftyp -> Right (Resolution.nominalApplication tname typeArgs, cx2)))))) --- | Reconstruct the type of a lambda function (Either/InferenceContext version)+-- | Reconstruct the type of a lambda function (Either/InferenceContext version). Paper: inference.tex, rule Abs (checking side). typeOfLambda :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Lambda -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfLambda cx tx typeArgs l = @@ -407,7 +380,7 @@ cx3 = Pairs.second tbodyResult in (Eithers.bind (applyTypeArgumentsToType cx3 tx typeArgs tbody) (\applied -> Right (applied, cx3))))) --- | Reconstruct the type of a let binding (Either/InferenceContext version)+-- | Reconstruct the type of a let binding (Either/InferenceContext version). Paper: inference.tex, rule Let (checking side). typeOfLet :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Let -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfLet cx tx typeArgs letTerm = @@ -438,7 +411,7 @@ cx2 = Pairs.second tResult in (Eithers.bind (applyTypeArgumentsToType cx2 tx typeArgs t) (\applied -> Right (applied, cx2))))))) --- | Reconstruct the type of a list (Either/InferenceContext version)+-- | Reconstruct the type of a list (Either/InferenceContext version). Paper: inference.tex, rules Lst_0 and Lst_+ (checking side). typeOfList :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> [Core.Term] -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfList cx tx typeArgs els = @@ -462,14 +435,14 @@ cx2 = Pairs.second foldR in (Eithers.bind (checkSameType cx2 tx "list elements" eltypes) (\unifiedType -> Right (Core.TypeList unifiedType, cx2))))))) --- | Reconstruct the type of a literal (Either/InferenceContext version)+-- | Reconstruct the type of a literal (Either/InferenceContext version). Paper: inference.tex, rule Lit (checking side). typeOfLiteral :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Literal -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfLiteral cx tx typeArgs lit = let t = Core.TypeLiteral (Reflect.literalType lit) in (Eithers.bind (applyTypeArgumentsToType cx tx typeArgs t) (\applied -> Right (applied, cx))) --- | Reconstruct the type of a map (Either/InferenceContext version)+-- | Reconstruct the type of a map (Either/InferenceContext version). Paper: inference.tex, rules Map_0 and Map_+ (checking side). typeOfMap :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> M.Map Core.Term Core.Term -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfMap cx tx typeArgs m = @@ -518,7 +491,7 @@ Core.mapTypeKeys = kt, Core.mapTypeValues = vt}))) (\applied -> Right (applied, cx3)))))))))))) --- | Reconstruct the type of an optional value (Either/InferenceContext version)+-- | Reconstruct the type of an optional value (Either/InferenceContext version). Paper: inference.tex, rules Opt_0 and Opt_1 (checking side). typeOfMaybe :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Maybe Core.Term -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfMaybe cx tx typeArgs mt = @@ -540,7 +513,7 @@ in (Eithers.bind (applyTypeArgumentsToType cx2 tx typeArgs t) (\applied -> Right (applied, cx2)))) in (Optionals.cases mt forNothing forJust) --- | Reconstruct the type of a pair (Either/InferenceContext version)+-- | Reconstruct the type of a pair (Either/InferenceContext version). Paper: inference.tex, rule Pair (checking side). typeOfPair :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> (Core.Term, Core.Term) -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfPair cx tx typeArgs p = @@ -566,7 +539,7 @@ Checking.typeArityMismatchErrorActualArity = n, Checking.typeArityMismatchErrorTypeArguments = typeArgs}))))) --- | Reconstruct the type of a primitive function (Either/InferenceContext version)+-- | Reconstruct the type of a primitive function (Either/InferenceContext version). Paper: inference.tex, rule Prim (checking side). typeOfPrimitive :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Name -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfPrimitive cx tx typeArgs name = @@ -581,7 +554,7 @@ t = Scoping.typeSchemeToFType ts in (Eithers.bind (applyTypeArgumentsToType cx2 tx typeArgs t) (\applied -> Right (applied, cx2))))) --- | Reconstruct the type of a record projection (Either/InferenceContext version)+-- | Reconstruct the type of a record projection (Either/InferenceContext version). Paper: inference.tex, rule Proj (checking side). typeOfProjection :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Projection -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfProjection cx tx typeArgs p = @@ -601,7 +574,7 @@ Core.functionTypeCodomain = sftyp}), cx2))))))) --- | Reconstruct the type of a record (Either/InferenceContext version)+-- | Reconstruct the type of a record (Either/InferenceContext version). Paper: inference.tex, rule Rec (checking side). typeOfRecord :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Record -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfRecord cx tx typeArgs record = @@ -619,7 +592,7 @@ let cx2 = Pairs.second foldR in (Right (Resolution.nominalApplication tname typeArgs, cx2)))) --- | Reconstruct the type of a set (Either/InferenceContext version)+-- | Reconstruct the type of a set (Either/InferenceContext version). Paper: inference.tex, rules Set_0 and Set_+ (checking side). typeOfSet :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> S.Set Core.Term -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfSet cx tx typeArgs els = @@ -647,7 +620,7 @@ typeOfTerm :: Typing.InferenceContext -> Graph.Graph -> Core.Term -> Either Errors.Error Core.Type typeOfTerm cx g term = Eithers.map Pairs.first (typeOf cx g [] term) --- | Reconstruct the type of a type application term (Either/InferenceContext version)+-- | Reconstruct the type of a type application term (Either/InferenceContext version). Paper: inference.tex, 'Checking the witness' (pushes onto the pending-type-argument stack). typeOfTypeApplication :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.TypeApplicationTerm -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfTypeApplication cx tx typeArgs tyapp = @@ -655,7 +628,7 @@ t = Core.typeApplicationTermType tyapp in (typeOf cx tx (Lists.cons t typeArgs) body) --- | Reconstruct the type of a type lambda (type abstraction) term (Either/InferenceContext version)+-- | Reconstruct the type of a type lambda (type abstraction) term (Either/InferenceContext version). Paper: inference.tex, type abstraction terms in the elaborated Term grammar. typeOfTypeLambda :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.TypeLambda -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfTypeLambda cx tx typeArgs tl = @@ -679,12 +652,12 @@ Core.forallTypeParameter = v, Core.forallTypeBody = t1}))) (\applied -> Right (applied, cx2))))) --- | Reconstruct the type of the unit term (Either/InferenceContext version)+-- | Reconstruct the type of the unit term (Either/InferenceContext version). Paper: inference.tex, rule Unit (checking side). typeOfUnit :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfUnit cx tx typeArgs = Eithers.bind (applyTypeArgumentsToType cx tx typeArgs Core.TypeUnit) (\applied -> Right (applied, cx)) --- | Reconstruct the type of an unwrap operation (Either/InferenceContext version)+-- | Reconstruct the type of an unwrap operation (Either/InferenceContext version). Paper: inference.tex, rule Unwr (checking side). typeOfUnwrap :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Name -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfUnwrap cx tx typeArgs tname = Eithers.bind (Resolution.requireSchemaType cx (Graph.graphSchemaTypes tx) tname) (\schemaResult ->@@ -701,7 +674,7 @@ Core.functionTypeCodomain = swrapped}), cx2))))) --- | Reconstruct the type of a variable (Either/InferenceContext version)+-- | Reconstruct the type of a variable (Either/InferenceContext version). Paper: inference.tex, rules Var and Prim (checking side); note the primitives-first lookup order, the reverse of inference. typeOfVariable :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.Name -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfVariable cx tx typeArgs name = @@ -718,7 +691,7 @@ ErrorCore.untypedTermVariableErrorLocation = (Paths.SubtermPath []), ErrorCore.untypedTermVariableErrorName = name}))) forScheme) forScheme) --- | Reconstruct the type of a wrapped term (Either/InferenceContext version)+-- | Reconstruct the type of a wrapped term (Either/InferenceContext version). Paper: inference.tex, rule Wrp (checking side). typeOfWrappedTerm :: Typing.InferenceContext -> Graph.Graph -> [Core.Type] -> Core.WrappedTerm -> Either Errors.Error (Core.Type, Typing.InferenceContext) typeOfWrappedTerm cx tx typeArgs wt = @@ -741,7 +714,7 @@ anyContainsFreeVar = Lists.foldl (\acc -> \t -> Logic.or acc (containsFreeVar t)) False tlist in (Logic.ifElse anyContainsFreeVar True (Logic.ifElse (allEqual (Lists.map (\t -> normalizeTypeFreeVars t) tlist)) True (allEqual (Lists.map (\t -> normalizeTypeFreeVars (Strip.deannotateTypeRecursive (Dependencies.replaceTypedefs types t))) tlist)))) --- | Check whether two types are effectively equal, disregarding type aliases, forall quantifiers, and treating in-scope type variables as wildcards+-- | Check whether two types are effectively equal, disregarding type aliases, forall quantifiers, and treating in-scope type variables as wildcards. Paper: inference.tex, 'Checking the witness' (effective equality, the type-level analogue of the referential-transparency equality of terms). typesEffectivelyEqual :: Graph.Graph -> Core.Type -> Core.Type -> Bool typesEffectivelyEqual tx t1 t2 = Logic.or (containsInScopeTypeVars tx t1) (Logic.or (containsInScopeTypeVars tx t2) (typesAllEffectivelyEqual tx [
src/main/haskell/Hydra/Classes.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Codegen.hs view
@@ -46,11 +46,12 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular@@ -106,7 +107,7 @@ let name = Core.unName (Packaging.primitiveDefinitionName (Graph.primitiveDefinition prim)) typ = Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition prim))- typeStr = ShowCore.typeScheme typ+ typeStr = PrintCore.typeScheme typ in (Strings.cat2 (Strings.cat2 (Strings.cat2 " " name) " : ") typeStr) -- | Format a term binding for the lexicon@@ -114,13 +115,13 @@ formatTermBinding binding = let name = Core.unName (Core.bindingName binding)- typeStr = Optionals.cases (Core.bindingTypeScheme binding) "?" (\scheme -> ShowCore.typeScheme scheme)+ typeStr = Optionals.cases (Core.bindingTypeScheme binding) "?" (\scheme -> PrintCore.typeScheme scheme) in (Strings.cat2 (Strings.cat2 (Strings.cat2 " " name) " : ") typeStr) -- | Format a type binding for the lexicon formatTypeBinding :: Graph.Graph -> Core.Binding -> Either Errors.Error String formatTypeBinding graph binding =- Eithers.bind (Eithers.bimap (\_e -> Errors.ErrorDecoding _e) (\_a -> _a) (DecodeCore.type_ graph (Core.bindingTerm binding))) (\typ -> Right (Strings.cat2 (Strings.cat2 (Strings.cat2 " " (Core.unName (Core.bindingName binding))) " = ") (ShowCore.type_ typ)))+ Eithers.bind (Eithers.bimap (\_e -> Errors.ErrorDecoding _e) (\_a -> _a) (DecodeCore.type_ graph (Core.bindingTerm binding))) (\typ -> Right (Strings.cat2 (Strings.cat2 (Strings.cat2 " " (Core.unName (Core.bindingName binding))) " = ") (PrintCore.type_ typ))) -- | Generate encoder or decoder modules for a list of type modules generateCoderModules :: (t0 -> Graph.Graph -> t1 -> Either t2 (Maybe t3)) -> Graph.Graph -> [Packaging.Module] -> [t1] -> t0 -> Either t2 [t3]
src/main/haskell/Hydra/Constants.hs view
@@ -21,6 +21,7 @@ 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@@ -34,10 +35,6 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci---- | Disable type checking by default, for better performance-debugInference :: Bool-debugInference = True -- | The name used for ignored variables ignoredVariable :: String
src/main/haskell/Hydra/Decode/Error/Core.hs view
@@ -245,6 +245,9 @@ Core.Name "invalidTypeLambdaParameterName", (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorInvalidTypeLambdaParameterName t) (invalidTypeLambdaParameterNameError cx input))), (+ Core.Name "missingCaseBranches",+ (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorMissingCaseBranches t) (missingCaseBranchesError cx input))),+ ( Core.Name "nestedTermAnnotation", (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorNestedTermAnnotation t) (nestedTermAnnotationError cx input))), (@@ -272,6 +275,9 @@ Core.Name "undefinedTypeVariableInTypeApplication", (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorUndefinedTypeVariableInTypeApplication t) (undefinedTypeVariableInTypeApplicationError cx input))), (+ Core.Name "unknownCaseAlternative",+ (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorUnknownCaseAlternative t) (unknownCaseAlternativeError cx input))),+ ( Core.Name "unknownPrimitiveName", (\input -> Eithers.map (\t -> ErrorCore.InvalidTermErrorUnknownPrimitiveName t) (unknownPrimitiveNameError cx input))), (@@ -377,6 +383,18 @@ ErrorCore.literalTypeMismatchErrorActualType = field_actualType})))) _ -> Left (Errors.DecodingError "expected a record of type hydra.error.core.LiteralTypeMismatchError")) (ExtractCore.stripWithDecodingError cx raw) +-- | Decoder for hydra.error.core.MissingCaseBranchesError+missingCaseBranchesError :: Graph.Graph -> Core.Term -> Either Errors.DecodingError ErrorCore.MissingCaseBranchesError+missingCaseBranchesError cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "location" Paths.subtermPath fieldMap cx) (\field_location -> Eithers.bind (ExtractCore.requireField "typeName" DecodeCore.name fieldMap cx) (\field_typeName -> Eithers.bind (ExtractCore.requireField "variantNames" (ExtractCore.decodeList DecodeCore.name) fieldMap cx) (\field_variantNames -> Right (ErrorCore.MissingCaseBranchesError {+ ErrorCore.missingCaseBranchesErrorLocation = field_location,+ ErrorCore.missingCaseBranchesErrorTypeName = field_typeName,+ ErrorCore.missingCaseBranchesErrorVariantNames = field_variantNames})))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.error.core.MissingCaseBranchesError")) (ExtractCore.stripWithDecodingError cx raw)+ -- | Decoder for hydra.error.core.NestedTermAnnotationError nestedTermAnnotationError :: Graph.Graph -> Core.Term -> Either Errors.DecodingError ErrorCore.NestedTermAnnotationError nestedTermAnnotationError cx raw =@@ -572,6 +590,18 @@ ErrorCore.unexpectedTypeVariantErrorExpectedVariant = field_expectedVariant, ErrorCore.unexpectedTypeVariantErrorActualType = field_actualType})))) _ -> Left (Errors.DecodingError "expected a record of type hydra.error.core.UnexpectedTypeVariantError")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeError :: Graph.Graph -> Core.Term -> Either Errors.DecodingError ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeError cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "location" Paths.subtermPath fieldMap cx) (\field_location -> Eithers.bind (ExtractCore.requireField "typeName" DecodeCore.name fieldMap cx) (\field_typeName -> Eithers.bind (ExtractCore.requireField "name" DecodeCore.name fieldMap cx) (\field_name -> Right (ErrorCore.UnknownCaseAlternativeError {+ ErrorCore.unknownCaseAlternativeErrorLocation = field_location,+ ErrorCore.unknownCaseAlternativeErrorTypeName = field_typeName,+ ErrorCore.unknownCaseAlternativeErrorName = field_name})))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.error.core.UnknownCaseAlternativeError")) (ExtractCore.stripWithDecodingError cx raw) -- | Decoder for hydra.error.core.UnknownPrimitiveNameError unknownPrimitiveNameError :: Graph.Graph -> Core.Term -> Either Errors.DecodingError ErrorCore.UnknownPrimitiveNameError
+ src/main/haskell/Hydra/Decode/Regex.hs view
@@ -0,0 +1,199 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Term decoders for hydra.regex++module Hydra.Decode.Regex where++import qualified Hydra.Core as Core+import qualified Hydra.Errors as Errors+import qualified Hydra.Extract.Core as ExtractCore+import qualified Hydra.Graph as Graph+import qualified Hydra.Lexical as Lexical+import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Regex as Regex+import qualified Hydra.Rewriting as Rewriting+import qualified Hydra.Util as Util+import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | Decoder for hydra.regex.Alternation+alternation :: Graph.Graph -> Core.Term -> Either Errors.DecodingError [Regex.RegexSequence]+alternation = ExtractCore.decodeList regexSequence++-- | Decoder for hydra.regex.Atom+atom :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.Atom+atom cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermInject v0 ->+ let field = Core.injectionField v0+ fname = Core.fieldName field+ fterm = Core.fieldTerm field+ variantMap =+ Maps.fromList [+ (+ Core.Name "literal",+ (\input -> Eithers.map (\t -> Regex.AtomLiteral t) (Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx input)))),+ (Core.Name "any", (\input -> Eithers.map (\t -> Regex.AtomAny) (ExtractCore.decodeUnit cx input))),+ (Core.Name "anchorStart", (\input -> Eithers.map (\t -> Regex.AtomAnchorStart) (ExtractCore.decodeUnit cx input))),+ (Core.Name "anchorEnd", (\input -> Eithers.map (\t -> Regex.AtomAnchorEnd) (ExtractCore.decodeUnit cx input))),+ (Core.Name "group", (\input -> Eithers.map (\t -> Regex.AtomGroup t) (alternation cx input))),+ (Core.Name "class", (\input -> Eithers.map (\t -> Regex.AtomClass t) (characterClass cx input)))]+ in (Optionals.cases (Maps.lookup fname variantMap) (Left (Errors.DecodingError (Strings.cat [+ "no such field ",+ (Core.unName fname),+ " in union"]))) (\f -> f fterm))+ _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.CharacterClass+characterClass :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.CharacterClass+characterClass cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "negated" (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralBoolean v2 -> Right v2+ _ -> Left (Errors.DecodingError "expected boolean literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2)) fieldMap cx) (\field_negated -> Eithers.bind (ExtractCore.requireField "items" (ExtractCore.decodeList classItem) fieldMap cx) (\field_items -> Right (Regex.CharacterClass {+ Regex.characterClassNegated = field_negated,+ Regex.characterClassItems = field_items}))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.regex.CharacterClass")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.CharacterRange+characterRange :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.CharacterRange+characterRange cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "from" (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2)) fieldMap cx) (\field_from -> Eithers.bind (ExtractCore.requireField "to" (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2)) fieldMap cx) (\field_to -> Right (Regex.CharacterRange {+ Regex.characterRangeFrom = field_from,+ Regex.characterRangeTo = field_to}))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.regex.CharacterRange")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.ClassItem+classItem :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.ClassItem+classItem cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermInject v0 ->+ let field = Core.injectionField v0+ fname = Core.fieldName field+ fterm = Core.fieldTerm field+ variantMap =+ Maps.fromList [+ (+ Core.Name "character",+ (\input -> Eithers.map (\t -> Regex.ClassItemCharacter t) (Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx input)))),+ (Core.Name "range", (\input -> Eithers.map (\t -> Regex.ClassItemRange t) (characterRange cx input)))]+ in (Optionals.cases (Maps.lookup fname variantMap) (Left (Errors.DecodingError (Strings.cat [+ "no such field ",+ (Core.unName fname),+ " in union"]))) (\f -> f fterm))+ _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.Quantified+quantified :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.Quantified+quantified cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "atom" atom fieldMap cx) (\field_atom -> Eithers.bind (ExtractCore.requireField "quantifier" quantifier fieldMap cx) (\field_quantifier -> Right (Regex.Quantified {+ Regex.quantifiedAtom = field_atom,+ Regex.quantifiedQuantifier = field_quantifier}))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.regex.Quantified")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.Quantifier+quantifier :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.Quantifier+quantifier cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermInject v0 ->+ let field = Core.injectionField v0+ fname = Core.fieldName field+ fterm = Core.fieldTerm field+ variantMap =+ Maps.fromList [+ (Core.Name "one", (\input -> Eithers.map (\t -> Regex.QuantifierOne) (ExtractCore.decodeUnit cx input))),+ (Core.Name "zeroOrOne", (\input -> Eithers.map (\t -> Regex.QuantifierZeroOrOne) (ExtractCore.decodeUnit cx input))),+ (Core.Name "zeroOrMore", (\input -> Eithers.map (\t -> Regex.QuantifierZeroOrMore) (ExtractCore.decodeUnit cx input))),+ (Core.Name "oneOrMore", (\input -> Eithers.map (\t -> Regex.QuantifierOneOrMore) (ExtractCore.decodeUnit cx input))),+ (+ Core.Name "exactly",+ (\input -> Eithers.map (\t -> Regex.QuantifierExactly t) (Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx input)))),+ (+ Core.Name "atLeast",+ (\input -> Eithers.map (\t -> Regex.QuantifierAtLeast t) (Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx input)))),+ (Core.Name "range", (\input -> Eithers.map (\t -> Regex.QuantifierRange_ t) (quantifierRange cx input)))]+ in (Optionals.cases (Maps.lookup fname variantMap) (Left (Errors.DecodingError (Strings.cat [+ "no such field ",+ (Core.unName fname),+ " in union"]))) (\f -> f fterm))+ _ -> Left (Errors.DecodingError "expected union")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.QuantifierRange+quantifierRange :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.QuantifierRange+quantifierRange cx raw =+ Eithers.either (\err -> Left err) (\stripped -> case stripped of+ Core.TermRecord v0 ->+ let fieldMap = ExtractCore.toFieldMap v0+ in (Eithers.bind (ExtractCore.requireField "min" (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2)) fieldMap cx) (\field_min -> Eithers.bind (ExtractCore.requireField "max" (\cx2 -> \raw2 -> Eithers.either (\err -> Left err) (\stripped2 -> case stripped2 of+ Core.TermLiteral v1 -> case v1 of+ Core.LiteralInteger v2 -> case v2 of+ Core.IntegerValueInt32 v3 -> Right v3+ _ -> Left (Errors.DecodingError "expected int32 value")+ _ -> Left (Errors.DecodingError "expected int32 literal")+ _ -> Left (Errors.DecodingError "expected literal")) (ExtractCore.stripWithDecodingError cx2 raw2)) fieldMap cx) (\field_max -> Right (Regex.QuantifierRange {+ Regex.quantifierRangeMin = field_min,+ Regex.quantifierRangeMax = field_max}))))+ _ -> Left (Errors.DecodingError "expected a record of type hydra.regex.QuantifierRange")) (ExtractCore.stripWithDecodingError cx raw)++-- | Decoder for hydra.regex.Regex+regex :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Regex.Alternation+regex = alternation++-- | Decoder for hydra.regex.RegexSequence+regexSequence :: Graph.Graph -> Core.Term -> Either Errors.DecodingError [Regex.Quantified]+regexSequence = ExtractCore.decodeList quantified
src/main/haskell/Hydra/Decoding.hs view
@@ -35,11 +35,12 @@ import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths import qualified Hydra.Predicates as Predicates+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing
src/main/haskell/Hydra/Dependencies.hs view
@@ -36,6 +36,7 @@ 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.Rewriting as Rewriting import qualified Hydra.Sorting as Sorting
src/main/haskell/Hydra/Differentiation.hs view
@@ -26,6 +26,7 @@ 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.Strip as Strip import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Analysis.hs view
@@ -40,6 +40,7 @@ import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Predicates as DslPredicates import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Rewriting as DslRewriting import qualified Hydra.Dsl.Scoping as DslScoping@@ -70,6 +71,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Predicates as Predicates import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
src/main/haskell/Hydra/Dsl/Annotations.hs view
@@ -30,6 +30,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Strip as DslStrip import qualified Hydra.Dsl.System as DslSystem@@ -56,10 +57,11 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
src/main/haskell/Hydra/Dsl/Arity.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -49,6 +50,7 @@ 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
src/main/haskell/Hydra/Dsl/Checking.hs view
@@ -33,6 +33,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Resolution as DslResolution import qualified Hydra.Dsl.Rewriting as DslRewriting@@ -64,15 +65,16 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors+import qualified Hydra.Print.Variants as PrintVariants import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors-import qualified Hydra.Show.Variants as ShowVariants import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -122,19 +124,6 @@ Core.applicationArgument = (Typed.unTypedTerm arg1)})), Core.applicationArgument = (Typed.unTypedTerm arg2)})) --- | DSL reference to hydra.checking.checkNominalApplication-checkNominalApplication :: Typed.TypedTerm Typing.InferenceContext -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Core.Name -> Typed.TypedTerm [Core.Type] -> Typed.TypedTerm (Either Errors.Error ((), Typing.InferenceContext))-checkNominalApplication arg0 arg1 arg2 arg3 =- Typed.TypedTerm (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.TermVariable (Core.Name "hydra.checking.checkNominalApplication")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)})),- Core.applicationArgument = (Typed.unTypedTerm arg2)})),- Core.applicationArgument = (Typed.unTypedTerm arg3)}))- -- | DSL reference to hydra.checking.checkSameType checkSameType :: Typed.TypedTerm t0 -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm String -> Typed.TypedTerm [Core.Type] -> Typed.TypedTerm (Either Errors.Error Core.Type) checkSameType arg0 arg1 arg2 arg3 =@@ -148,19 +137,6 @@ Core.applicationArgument = (Typed.unTypedTerm arg2)})), Core.applicationArgument = (Typed.unTypedTerm arg3)})) --- | DSL reference to hydra.checking.checkType-checkType :: Typed.TypedTerm Typing.InferenceContext -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Core.Term -> Typed.TypedTerm Core.Type -> Typed.TypedTerm (Either Errors.Error ())-checkType arg0 arg1 arg2 arg3 =- Typed.TypedTerm (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.TermVariable (Core.Name "hydra.checking.checkType")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)})),- Core.applicationArgument = (Typed.unTypedTerm arg2)})),- Core.applicationArgument = (Typed.unTypedTerm arg3)}))- -- | DSL reference to hydra.checking.checkTypeSubst checkTypeSubst :: Typed.TypedTerm t0 -> Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Typing.TypeSubst -> Typed.TypedTerm (Either Errors.Error Typing.TypeSubst) checkTypeSubst arg0 arg1 arg2 =@@ -171,15 +147,6 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})), Core.applicationArgument = (Typed.unTypedTerm arg2)}))---- | DSL reference to hydra.checking.checkTypeVariables-checkTypeVariables :: Typed.TypedTerm t0 -> Typed.TypedTerm t1 -> Typed.TypedTerm ()-checkTypeVariables arg0 arg1 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.checking.checkTypeVariables")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)})) -- | DSL reference to hydra.checking.containsInScopeTypeVars containsInScopeTypeVars :: Typed.TypedTerm Graph.Graph -> Typed.TypedTerm Core.Type -> Typed.TypedTerm Bool
src/main/haskell/Hydra/Dsl/Constants.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -49,6 +50,7 @@ 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@@ -62,10 +64,6 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci---- | DSL reference to hydra.constants.debugInference-debugInference :: Typed.TypedTerm Bool-debugInference = Typed.TypedTerm (Core.TermVariable (Core.Name "hydra.constants.debugInference")) -- | DSL reference to hydra.constants.ignoredVariable ignoredVariable :: Typed.TypedTerm String
src/main/haskell/Hydra/Dsl/Dependencies.hs view
@@ -32,6 +32,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Rewriting as DslRewriting import qualified Hydra.Dsl.Sorting as DslSorting@@ -61,6 +62,7 @@ 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.Rewriting as Rewriting import qualified Hydra.Sorting as Sorting
src/main/haskell/Hydra/Dsl/Environment.hs view
@@ -27,6 +27,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Scoping as DslScoping import qualified Hydra.Dsl.Sorting as DslSorting@@ -57,6 +58,7 @@ 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.Scoping as Scoping import qualified Hydra.Sorting as Sorting
src/main/haskell/Hydra/Dsl/Error/Core.hs view
@@ -948,6 +948,15 @@ Core.fieldName = (Core.Name "invalidTypeLambdaParameterName"), Core.fieldTerm = (Typed.unTypedTerm x)}})) +-- | DSL injection for the missingCaseBranches variant of hydra.error.core.InvalidTermError+invalidTermErrorMissingCaseBranches :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm ErrorCore.InvalidTermError+invalidTermErrorMissingCaseBranches x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "missingCaseBranches"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))+ -- | DSL injection for the nestedTermAnnotation variant of hydra.error.core.InvalidTermError invalidTermErrorNestedTermAnnotation :: Typed.TypedTerm ErrorCore.NestedTermAnnotationError -> Typed.TypedTerm ErrorCore.InvalidTermError invalidTermErrorNestedTermAnnotation x =@@ -1029,6 +1038,15 @@ Core.fieldName = (Core.Name "undefinedTypeVariableInTypeApplication"), Core.fieldTerm = (Typed.unTypedTerm x)}})) +-- | DSL injection for the unknownCaseAlternative variant of hydra.error.core.InvalidTermError+invalidTermErrorUnknownCaseAlternative :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm ErrorCore.InvalidTermError+invalidTermErrorUnknownCaseAlternative x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "unknownCaseAlternative"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))+ -- | DSL injection for the unknownPrimitiveName variant of hydra.error.core.InvalidTermError invalidTermErrorUnknownPrimitiveName :: Typed.TypedTerm ErrorCore.UnknownPrimitiveNameError -> Typed.TypedTerm ErrorCore.InvalidTermError invalidTermErrorUnknownPrimitiveName x =@@ -1395,6 +1413,125 @@ Core.projectionFieldName = (Core.Name "actualType")})), Core.applicationArgument = (Typed.unTypedTerm original)}))}]})) +-- | DSL constructor for hydra.error.core.MissingCaseBranchesError+missingCaseBranchesError :: Typed.TypedTerm Paths.SubtermPath -> Typed.TypedTerm Core.Name -> Typed.TypedTerm [Core.Name] -> Typed.TypedTerm ErrorCore.MissingCaseBranchesError+missingCaseBranchesError location typeName variantNames =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Typed.unTypedTerm location)},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Typed.unTypedTerm typeName)},+ Core.Field {+ Core.fieldName = (Core.Name "variantNames"),+ Core.fieldTerm = (Typed.unTypedTerm variantNames)}]}))++-- | DSL accessor for the location field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorLocation :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm Paths.SubtermPath+missingCaseBranchesErrorLocation x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL name token for hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorMissingCaseBranchesError :: Typed.TypedName ErrorCore.MissingCaseBranchesError+missingCaseBranchesErrorMissingCaseBranchesError = Typed.TypedName (Core.Name "hydra.error.core.MissingCaseBranchesError")++-- | DSL accessor for the typeName field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorTypeName :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm Core.Name+missingCaseBranchesErrorTypeName x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the variantNames field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorVariantNames :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm [Core.Name]+missingCaseBranchesErrorVariantNames x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "variantNames")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the location field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorWithLocation :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm Paths.SubtermPath -> Typed.TypedTerm ErrorCore.MissingCaseBranchesError+missingCaseBranchesErrorWithLocation original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "variantNames"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "variantNames")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the typeName field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorWithTypeName :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm Core.Name -> Typed.TypedTerm ErrorCore.MissingCaseBranchesError+missingCaseBranchesErrorWithTypeName original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "variantNames"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "variantNames")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the variantNames field of hydra.error.core.MissingCaseBranchesError+missingCaseBranchesErrorWithVariantNames :: Typed.TypedTerm ErrorCore.MissingCaseBranchesError -> Typed.TypedTerm [Core.Name] -> Typed.TypedTerm ErrorCore.MissingCaseBranchesError+missingCaseBranchesErrorWithVariantNames original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "variantNames"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))+ -- | DSL constructor for hydra.error.core.NestedTermAnnotationError nestedTermAnnotationError :: Typed.TypedTerm Paths.SubtermPath -> Typed.TypedTerm ErrorCore.NestedTermAnnotationError nestedTermAnnotationError location =@@ -2577,6 +2714,126 @@ Core.applicationFunction = (Core.TermProject (Core.Projection { Core.projectionTypeName = (Core.Name "hydra.error.core.UnexpectedTypeVariantError"), Core.projectionFieldName = (Core.Name "actualType")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeError :: Typed.TypedTerm Paths.SubtermPath -> Typed.TypedTerm Core.Name -> Typed.TypedTerm Core.Name -> Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeError location typeName name =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Typed.unTypedTerm location)},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Typed.unTypedTerm typeName)},+ Core.Field {+ Core.fieldName = (Core.Name "name"),+ Core.fieldTerm = (Typed.unTypedTerm name)}]}))++-- | DSL accessor for the location field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorLocation :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Paths.SubtermPath+unknownCaseAlternativeErrorLocation x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the name field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorName :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Core.Name+unknownCaseAlternativeErrorName x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "name")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the typeName field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorTypeName :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Core.Name+unknownCaseAlternativeErrorTypeName x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL name token for hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorUnknownCaseAlternativeError :: Typed.TypedName ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeErrorUnknownCaseAlternativeError =+ Typed.TypedName (Core.Name "hydra.error.core.UnknownCaseAlternativeError")++-- | DSL updater for the location field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithLocation :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Paths.SubtermPath -> Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithLocation original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "name"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "name")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the name field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithName :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Core.Name -> Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithName original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "typeName")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "name"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the typeName field of hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithTypeName :: Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError -> Typed.TypedTerm Core.Name -> Typed.TypedTerm ErrorCore.UnknownCaseAlternativeError+unknownCaseAlternativeErrorWithTypeName original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "location")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "name"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.projectionFieldName = (Core.Name "name")})), Core.applicationArgument = (Typed.unTypedTerm original)}))}]})) -- | DSL constructor for hydra.error.core.UnknownPrimitiveNameError
src/main/haskell/Hydra/Dsl/Extract/Json.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -51,6 +52,7 @@ 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
src/main/haskell/Hydra/Dsl/Formatting.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -49,6 +50,7 @@ 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
src/main/haskell/Hydra/Dsl/Json/Decode.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Strip as DslStrip import qualified Hydra.Dsl.System as DslSystem@@ -51,9 +52,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Json/Decoding.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -49,6 +50,7 @@ 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
src/main/haskell/Hydra/Dsl/Json/Encode.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Strip as DslStrip import qualified Hydra.Dsl.System as DslSystem@@ -51,9 +52,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Json/Parser.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -50,6 +51,7 @@ 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
src/main/haskell/Hydra/Dsl/Json/Writer.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Serialization as DslSerialization import qualified Hydra.Dsl.System as DslSystem@@ -50,6 +51,7 @@ 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.Serialization as Serialization import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Json/Yaml/Decode.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -52,6 +53,7 @@ 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
src/main/haskell/Hydra/Dsl/Json/Yaml/Encode.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -52,6 +53,7 @@ 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
src/main/haskell/Hydra/Dsl/Lexical.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Scoping as DslScoping import qualified Hydra.Dsl.Strip as DslStrip@@ -50,11 +51,12 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
src/main/haskell/Hydra/Dsl/Lib/Chars.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -62,11 +64,25 @@ import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci +-- | DSL reference to hydra.lib.chars.isAlpha+isAlpha :: Typed.TypedTerm Int -> Typed.TypedTerm Bool+isAlpha arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.chars.isAlpha")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.chars.isAlphaNum isAlphaNum :: Typed.TypedTerm Int -> Typed.TypedTerm Bool isAlphaNum arg0 = Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.chars.isAlphaNum")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.lib.chars.isDigit+isDigit :: Typed.TypedTerm Int -> Typed.TypedTerm Bool+isDigit arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.chars.isDigit")), Core.applicationArgument = (Typed.unTypedTerm arg0)})) -- | DSL reference to hydra.lib.chars.isLower
src/main/haskell/Hydra/Dsl/Lib/Eithers.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -63,6 +65,15 @@ import qualified Data.Scientific as Sci import qualified Data.Set as S +-- | DSL reference to hydra.lib.eithers.apply+apply :: Typed.TypedTerm (Either x (y -> z)) -> Typed.TypedTerm (Either x y) -> Typed.TypedTerm (Either x z)+apply arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.apply")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.eithers.bimap bimap :: Typed.TypedTerm (x -> z) -> Typed.TypedTerm (y -> w) -> Typed.TypedTerm (Either x y) -> Typed.TypedTerm (Either z w) bimap arg0 arg1 arg2 =@@ -83,6 +94,17 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.eithers.compose+compose :: Typed.TypedTerm (x -> Either w y) -> Typed.TypedTerm (y -> Either w z) -> Typed.TypedTerm x -> Typed.TypedTerm (Either w z)+compose arg0 arg1 arg2 =+ Typed.TypedTerm (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.compose")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))+ -- | DSL reference to hydra.lib.eithers.either either :: Typed.TypedTerm (x -> z) -> Typed.TypedTerm (y -> z) -> Typed.TypedTerm (Either x y) -> Typed.TypedTerm z either arg0 arg1 arg2 =@@ -94,6 +116,17 @@ Core.applicationArgument = (Typed.unTypedTerm arg1)})), Core.applicationArgument = (Typed.unTypedTerm arg2)})) +-- | DSL reference to hydra.lib.eithers.foldList+foldList :: Typed.TypedTerm (x -> y -> Either z x) -> Typed.TypedTerm x -> Typed.TypedTerm [y] -> Typed.TypedTerm (Either z x)+foldList arg0 arg1 arg2 =+ Typed.TypedTerm (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.foldList")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))+ -- | DSL reference to hydra.lib.eithers.foldl foldl :: Typed.TypedTerm (x -> y -> Either z x) -> Typed.TypedTerm x -> Typed.TypedTerm [y] -> Typed.TypedTerm (Either z x) foldl arg0 arg1 arg2 =@@ -180,11 +213,25 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.eithers.partition+partition :: Typed.TypedTerm [Either x y] -> Typed.TypedTerm ([x], [y])+partition arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.partition")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.eithers.partitionEithers partitionEithers :: Typed.TypedTerm [Either x y] -> Typed.TypedTerm ([x], [y]) partitionEithers arg0 = Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.partitionEithers")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.lib.eithers.pure+pure :: Typed.TypedTerm y -> Typed.TypedTerm (Either x y)+pure arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.eithers.pure")), Core.applicationArgument = (Typed.unTypedTerm arg0)})) -- | DSL reference to hydra.lib.eithers.rights
src/main/haskell/Hydra/Dsl/Lib/Equality.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -138,5 +140,14 @@ Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.equality.min")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.equality.notEqual+notEqual :: Typed.TypedTerm x -> Typed.TypedTerm x -> Typed.TypedTerm Bool+notEqual arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.equality.notEqual")), Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)}))
+ src/main/haskell/Hydra/Dsl/Lib/Functions.hs view
@@ -0,0 +1,103 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.lib.functions++module Hydra.Dsl.Lib.Functions 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.Dsl.Ast as DslAst+import qualified Hydra.Dsl.Coders as DslCoders+import qualified Hydra.Dsl.Core as DslCore+import qualified Hydra.Dsl.Docs as DslDocs+import qualified Hydra.Dsl.Error.Checking as ErrorChecking+import qualified Hydra.Dsl.Error.Core as DslErrorCore+import qualified Hydra.Dsl.Error.File as DslErrorFile+import qualified Hydra.Dsl.Error.Packaging as DslErrorPackaging+import qualified Hydra.Dsl.Error.System as DslErrorSystem+import qualified Hydra.Dsl.Errors as DslErrors+import qualified Hydra.Dsl.File as DslFile+import qualified Hydra.Dsl.Graph as DslGraph+import qualified Hydra.Dsl.Json.Model as JsonModel+import qualified Hydra.Dsl.Packaging as DslPackaging+import qualified Hydra.Dsl.Parsing as DslParsing+import qualified Hydra.Dsl.Paths as DslPaths+import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex+import qualified Hydra.Dsl.Relational as DslRelational+import qualified Hydra.Dsl.System as DslSystem+import qualified Hydra.Dsl.Tabular as DslTabular+import qualified Hydra.Dsl.Testing as DslTesting+import qualified Hydra.Dsl.Time as DslTime+import qualified Hydra.Dsl.Topology as DslTopology+import qualified Hydra.Dsl.Typing as DslTyping+import qualified Hydra.Dsl.Util as DslUtil+import qualified Hydra.Dsl.Validation as DslValidation+import qualified Hydra.Dsl.Variants as DslVariants+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++-- | DSL reference to hydra.lib.functions.compose+compose :: Typed.TypedTerm (t2 -> t3) -> Typed.TypedTerm (t1 -> t2) -> Typed.TypedTerm t1 -> Typed.TypedTerm t3+compose arg0 arg1 arg2 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.functions.compose")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))++-- | DSL reference to hydra.lib.functions.const+const :: Typed.TypedTerm t1 -> Typed.TypedTerm t2 -> Typed.TypedTerm t1+const arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.functions.const")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.functions.flip+flip :: Typed.TypedTerm (t1 -> t2 -> t3) -> Typed.TypedTerm t2 -> Typed.TypedTerm t1 -> Typed.TypedTerm t3+flip arg0 arg1 arg2 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.functions.flip")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))++-- | DSL reference to hydra.lib.functions.identity+identity :: Typed.TypedTerm t1 -> Typed.TypedTerm t1+identity arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.functions.identity")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))
src/main/haskell/Hydra/Dsl/Lib/Lists.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -61,6 +63,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci+import qualified Data.Set as S -- | DSL reference to hydra.lib.lists.apply apply :: Typed.TypedTerm [x -> y] -> Typed.TypedTerm [x] -> Typed.TypedTerm [y]@@ -71,6 +74,15 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.at+at :: Typed.TypedTerm Int -> Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe x)+at arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.at")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.lists.bind bind :: Typed.TypedTerm [x] -> Typed.TypedTerm (x -> [y]) -> Typed.TypedTerm [y] bind arg0 arg1 =@@ -80,6 +92,17 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.compose+compose :: Typed.TypedTerm (x -> [y]) -> Typed.TypedTerm (y -> [z]) -> Typed.TypedTerm x -> Typed.TypedTerm [z]+compose arg0 arg1 arg2 =+ Typed.TypedTerm (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.compose")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))+ -- | DSL reference to hydra.lib.lists.concat concat :: Typed.TypedTerm [[x]] -> Typed.TypedTerm [x] concat arg0 =@@ -105,6 +128,13 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.distinct+distinct :: Typed.TypedTerm [x] -> Typed.TypedTerm [x]+distinct arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.distinct")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.lists.drop drop :: Typed.TypedTerm Int -> Typed.TypedTerm [x] -> Typed.TypedTerm [x] drop arg0 arg1 =@@ -150,6 +180,17 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.foldList+foldList :: Typed.TypedTerm (x -> y -> [x]) -> Typed.TypedTerm x -> Typed.TypedTerm [y] -> Typed.TypedTerm [x]+foldList arg0 arg1 arg2 =+ Typed.TypedTerm (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.foldList")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))+ -- | DSL reference to hydra.lib.lists.foldl foldl :: Typed.TypedTerm (y -> x -> y) -> Typed.TypedTerm y -> Typed.TypedTerm [x] -> Typed.TypedTerm y foldl arg0 arg1 arg2 =@@ -179,6 +220,20 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.group")), Core.applicationArgument = (Typed.unTypedTerm arg0)})) +-- | DSL reference to hydra.lib.lists.head+head :: Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe x)+head arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.head")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.lib.lists.init+init :: Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe [x])+init arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.init")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.lists.intercalate intercalate :: Typed.TypedTerm [x] -> Typed.TypedTerm [[x]] -> Typed.TypedTerm [x] intercalate arg0 arg1 =@@ -197,6 +252,22 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.join+join :: Typed.TypedTerm [x] -> Typed.TypedTerm [[x]] -> Typed.TypedTerm [x]+join arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.join")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.lists.last+last :: Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe x)+last arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.last")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.lists.length length :: Typed.TypedTerm [x] -> Typed.TypedTerm Int length arg0 =@@ -213,6 +284,33 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.mapList+mapList :: Typed.TypedTerm (x -> [y]) -> Typed.TypedTerm [x] -> Typed.TypedTerm [[y]]+mapList arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.mapList")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.lists.mapOptional+mapOptional :: Typed.TypedTerm (x -> [y]) -> Typed.TypedTerm (Maybe x) -> Typed.TypedTerm [Maybe y]+mapOptional arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.mapOptional")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.lists.mapSet+mapSet :: (Ord x, Ord y) => (Typed.TypedTerm (x -> [y]) -> Typed.TypedTerm (S.Set x) -> Typed.TypedTerm [S.Set y])+mapSet arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.mapSet")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.lists.maybeAt maybeAt :: Typed.TypedTerm Int -> Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe x) maybeAt arg0 arg1 =@@ -250,6 +348,15 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.maybeTail")), Core.applicationArgument = (Typed.unTypedTerm arg0)})) +-- | DSL reference to hydra.lib.lists.member+member :: Typed.TypedTerm x -> Typed.TypedTerm [x] -> Typed.TypedTerm Bool+member arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.member")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.lists.nub nub :: Typed.TypedTerm [x] -> Typed.TypedTerm [x] nub arg0 =@@ -310,6 +417,15 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.sort")), Core.applicationArgument = (Typed.unTypedTerm arg0)})) +-- | DSL reference to hydra.lib.lists.sortBy+sortBy :: Typed.TypedTerm (x -> y) -> Typed.TypedTerm [x] -> Typed.TypedTerm [x]+sortBy arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.sortBy")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.lists.sortOn sortOn :: Typed.TypedTerm (x -> y) -> Typed.TypedTerm [x] -> Typed.TypedTerm [x] sortOn arg0 arg1 =@@ -328,12 +444,28 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.lists.tail+tail :: Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe [x])+tail arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.tail")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.lists.take take :: Typed.TypedTerm Int -> Typed.TypedTerm [x] -> Typed.TypedTerm [x] take arg0 arg1 = Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.take")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.lists.takeWhile+takeWhile :: Typed.TypedTerm (x -> Bool) -> Typed.TypedTerm [x] -> Typed.TypedTerm [x]+takeWhile arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.takeWhile")), Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)}))
src/main/haskell/Hydra/Dsl/Lib/Literals.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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
src/main/haskell/Hydra/Dsl/Lib/Logic.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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
src/main/haskell/Hydra/Dsl/Lib/Maps.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -94,6 +96,15 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.maps.difference+difference :: Ord k => (Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm (M.Map k v))+difference arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.maps.difference")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.maps.elems elems :: Ord k => (Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm [v]) elems arg0 =@@ -152,6 +163,15 @@ Core.applicationArgument = (Typed.unTypedTerm arg1)})), Core.applicationArgument = (Typed.unTypedTerm arg2)})) +-- | DSL reference to hydra.lib.maps.intersection+intersection :: Ord k => (Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm (M.Map k v))+intersection arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.maps.intersection")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.maps.keys keys :: Ord k => (Typed.TypedTerm (M.Map k v) -> Typed.TypedTerm [k]) keys arg0 =@@ -233,3 +253,10 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.maps.union")), Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.maps.unions+unions :: Ord k => (Typed.TypedTerm [M.Map k v] -> Typed.TypedTerm (M.Map k v))+unions arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.maps.unions")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))
src/main/haskell/Hydra/Dsl/Lib/Math.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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
src/main/haskell/Hydra/Dsl/Lib/Optionals.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -61,6 +63,7 @@ import qualified Hydra.Variants as Variants import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci+import qualified Data.Set as S -- | DSL reference to hydra.lib.optionals.apply apply :: Typed.TypedTerm (Maybe (x -> y)) -> Typed.TypedTerm (Maybe x) -> Typed.TypedTerm (Maybe y)@@ -109,6 +112,17 @@ Core.applicationArgument = (Typed.unTypedTerm arg1)})), Core.applicationArgument = (Typed.unTypedTerm arg2)})) +-- | DSL reference to hydra.lib.optionals.foldList+foldList :: Typed.TypedTerm (x -> y -> Maybe x) -> Typed.TypedTerm x -> Typed.TypedTerm [y] -> Typed.TypedTerm (Maybe x)+foldList arg0 arg1 arg2 =+ Typed.TypedTerm (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.foldList")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})),+ Core.applicationArgument = (Typed.unTypedTerm arg2)}))+ -- | DSL reference to hydra.lib.optionals.fromOptional fromOptional :: Typed.TypedTerm x -> Typed.TypedTerm (Maybe x) -> Typed.TypedTerm x fromOptional arg0 arg1 =@@ -118,6 +132,13 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.optionals.givens+givens :: Typed.TypedTerm [Maybe x] -> Typed.TypedTerm [x]+givens arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.givens")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))+ -- | DSL reference to hydra.lib.optionals.isGiven isGiven :: Typed.TypedTerm (Maybe x) -> Typed.TypedTerm Bool isGiven arg0 =@@ -141,6 +162,15 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.optionals.mapList+mapList :: Typed.TypedTerm (x -> Maybe y) -> Typed.TypedTerm [x] -> Typed.TypedTerm (Maybe [y])+mapList arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.mapList")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.optionals.mapOptional mapOptional :: Typed.TypedTerm (x -> Maybe y) -> Typed.TypedTerm [x] -> Typed.TypedTerm [y] mapOptional arg0 arg1 =@@ -150,6 +180,15 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.optionals.mapSet+mapSet :: (Ord x, Ord y) => (Typed.TypedTerm (x -> Maybe y) -> Typed.TypedTerm (S.Set x) -> Typed.TypedTerm (Maybe (S.Set y)))+mapSet arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.mapSet")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.optionals.pure pure :: Typed.TypedTerm x -> Typed.TypedTerm (Maybe x) pure arg0 =@@ -163,3 +202,12 @@ Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.toList")), Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.lib.optionals.withDefault+withDefault :: Typed.TypedTerm x -> Typed.TypedTerm (Maybe x) -> Typed.TypedTerm x+withDefault arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.withDefault")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))
src/main/haskell/Hydra/Dsl/Lib/Pairs.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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
src/main/haskell/Hydra/Dsl/Lib/Regex.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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
src/main/haskell/Hydra/Dsl/Lib/Sets.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -84,6 +86,15 @@ -- | DSL reference to hydra.lib.sets.empty empty :: Ord x => (Typed.TypedTerm (S.Set x)) empty = Typed.TypedTerm (Core.TermVariable (Core.Name "hydra.lib.sets.empty"))++-- | DSL reference to hydra.lib.sets.filter+filter :: Ord x => (Typed.TypedTerm (x -> Bool) -> Typed.TypedTerm (S.Set x) -> Typed.TypedTerm (S.Set x))+filter arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.filter")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)})) -- | DSL reference to hydra.lib.sets.fromList fromList :: Ord x => (Typed.TypedTerm [x] -> Typed.TypedTerm (S.Set x))
src/main/haskell/Hydra/Dsl/Lib/Strings.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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@@ -78,6 +80,31 @@ Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)})) +-- | DSL reference to hydra.lib.strings.charAt+charAt :: Typed.TypedTerm Int -> Typed.TypedTerm String -> Typed.TypedTerm (Maybe Int)+charAt arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.strings.charAt")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.strings.concat+concat :: Typed.TypedTerm [String] -> Typed.TypedTerm String+concat arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.strings.concat")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.lib.strings.concat2+concat2 :: Typed.TypedTerm String -> Typed.TypedTerm String -> Typed.TypedTerm String+concat2 arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.strings.concat2")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))+ -- | DSL reference to hydra.lib.strings.fromList fromList :: Typed.TypedTerm [Int] -> Typed.TypedTerm String fromList arg0 =@@ -91,6 +118,15 @@ Typed.TypedTerm (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.strings.intercalate")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.lib.strings.join+join :: Typed.TypedTerm String -> Typed.TypedTerm [String] -> Typed.TypedTerm String+join arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.strings.join")), Core.applicationArgument = (Typed.unTypedTerm arg0)})), Core.applicationArgument = (Typed.unTypedTerm arg1)}))
src/main/haskell/Hydra/Dsl/Names.hs view
@@ -30,6 +30,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -55,6 +56,7 @@ 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
src/main/haskell/Hydra/Dsl/Predicates.hs view
@@ -31,6 +31,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Rewriting as DslRewriting import qualified Hydra.Dsl.Scoping as DslScoping@@ -60,6 +61,7 @@ import qualified Hydra.Predicates as Predicates import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
+ src/main/haskell/Hydra/Dsl/Print/Docs.hs view
@@ -0,0 +1,129 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.print.docs++module Hydra.Dsl.Print.Docs 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.Dsl.Ast as DslAst+import qualified Hydra.Dsl.Coders as DslCoders+import qualified Hydra.Dsl.Core as DslCore+import qualified Hydra.Dsl.Docs as DslDocs+import qualified Hydra.Dsl.Error.Checking as ErrorChecking+import qualified Hydra.Dsl.Error.Core as DslErrorCore+import qualified Hydra.Dsl.Error.File as DslErrorFile+import qualified Hydra.Dsl.Error.Packaging as DslErrorPackaging+import qualified Hydra.Dsl.Error.System as DslErrorSystem+import qualified Hydra.Dsl.Errors as DslErrors+import qualified Hydra.Dsl.File as DslFile+import qualified Hydra.Dsl.Graph as DslGraph+import qualified Hydra.Dsl.Json.Model as JsonModel+import qualified Hydra.Dsl.Packaging as DslPackaging+import qualified Hydra.Dsl.Parsing as DslParsing+import qualified Hydra.Dsl.Paths as DslPaths+import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex+import qualified Hydra.Dsl.Relational as DslRelational+import qualified Hydra.Dsl.System as DslSystem+import qualified Hydra.Dsl.Tabular as DslTabular+import qualified Hydra.Dsl.Testing as DslTesting+import qualified Hydra.Dsl.Time as DslTime+import qualified Hydra.Dsl.Topology as DslTopology+import qualified Hydra.Dsl.Typing as DslTyping+import qualified Hydra.Dsl.Util as DslUtil+import qualified Hydra.Dsl.Validation as DslValidation+import qualified Hydra.Dsl.Variants as DslVariants+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.Parse.Docs as ParseDocs+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Docs as PrintDocs+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++-- | DSL reference to hydra.print.docs.definitionReference+definitionReference :: Typed.TypedTerm Packaging.DefinitionReference -> Typed.TypedTerm String+definitionReference arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.definitionReference")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.print.docs.docSegment+docSegment :: Typed.TypedTerm Docs.DocSegment -> Typed.TypedTerm String+docSegment arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.docSegment")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.print.docs.docSegmentWith+docSegmentWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm Docs.DocSegment -> Typed.TypedTerm String+docSegmentWith arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.docSegmentWith")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.print.docs.docSegments+docSegments :: Typed.TypedTerm [Docs.DocSegment] -> Typed.TypedTerm String+docSegments arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.docSegments")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.print.docs.docSegmentsWith+docSegmentsWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm [Docs.DocSegment] -> Typed.TypedTerm String+docSegmentsWith arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.docSegmentsWith")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))++-- | DSL reference to hydra.print.docs.entityReference+entityReference :: Typed.TypedTerm Packaging.EntityReference -> Typed.TypedTerm String+entityReference arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.entityReference")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.print.docs.renderDocString+renderDocString :: Typed.TypedTerm String -> Typed.TypedTerm String+renderDocString arg0 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.renderDocString")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)}))++-- | DSL reference to hydra.print.docs.renderDocStringWith+renderDocStringWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm String -> Typed.TypedTerm String+renderDocStringWith arg0 arg1 =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.print.docs.renderDocStringWith")),+ Core.applicationArgument = (Typed.unTypedTerm arg0)})),+ Core.applicationArgument = (Typed.unTypedTerm arg1)}))
src/main/haskell/Hydra/Dsl/Reduction.hs view
@@ -32,6 +32,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Resolution as DslResolution import qualified Hydra.Dsl.Rewriting as DslRewriting@@ -63,14 +64,15 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query import qualified Hydra.Reduction as Reduction+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
src/main/haskell/Hydra/Dsl/Refs.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -51,6 +52,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Query as Query import qualified Hydra.Refs as Refs+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
+ src/main/haskell/Hydra/Dsl/Regex.hs view
@@ -0,0 +1,436 @@+-- Note: this is an automatically generated file. Do not edit.++-- | DSL functions for hydra.regex++module Hydra.Dsl.Regex where++import qualified Hydra.Core as Core+import qualified Hydra.Decode.Regex as DecodeRegex+import qualified Hydra.Encode.Regex as EncodeRegex+import qualified Hydra.Regex as Regex+import qualified Hydra.Typed as Typed+import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | DSL injection for the anchorEnd variant of hydra.regex.Atom+atomAnchorEnd :: Typed.TypedTerm Regex.Atom+atomAnchorEnd =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "anchorEnd"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the anchorStart variant of hydra.regex.Atom+atomAnchorStart :: Typed.TypedTerm Regex.Atom+atomAnchorStart =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "anchorStart"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the any variant of hydra.regex.Atom+atomAny :: Typed.TypedTerm Regex.Atom+atomAny =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "any"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL name token for hydra.regex.Atom+atomAtom :: Typed.TypedName Regex.Atom+atomAtom = Typed.TypedName (Core.Name "hydra.regex.Atom")++-- | DSL injection for the class variant of hydra.regex.Atom+atomClass :: Typed.TypedTerm Regex.CharacterClass -> Typed.TypedTerm Regex.Atom+atomClass x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "class"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the group variant of hydra.regex.Atom+atomGroup :: Typed.TypedTerm Regex.Alternation -> Typed.TypedTerm Regex.Atom+atomGroup x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "group"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the literal variant of hydra.regex.Atom+atomLiteral :: Typed.TypedTerm Int -> Typed.TypedTerm Regex.Atom+atomLiteral x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "literal"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.regex.CharacterClass+characterClass :: Typed.TypedTerm Bool -> Typed.TypedTerm [Regex.ClassItem] -> Typed.TypedTerm Regex.CharacterClass+characterClass negated items =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "negated"),+ Core.fieldTerm = (Typed.unTypedTerm negated)},+ Core.Field {+ Core.fieldName = (Core.Name "items"),+ Core.fieldTerm = (Typed.unTypedTerm items)}]}))++-- | DSL name token for hydra.regex.CharacterClass+characterClassCharacterClass :: Typed.TypedName Regex.CharacterClass+characterClassCharacterClass = Typed.TypedName (Core.Name "hydra.regex.CharacterClass")++-- | DSL accessor for the items field of hydra.regex.CharacterClass+characterClassItems :: Typed.TypedTerm Regex.CharacterClass -> Typed.TypedTerm [Regex.ClassItem]+characterClassItems x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.projectionFieldName = (Core.Name "items")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the negated field of hydra.regex.CharacterClass+characterClassNegated :: Typed.TypedTerm Regex.CharacterClass -> Typed.TypedTerm Bool+characterClassNegated x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.projectionFieldName = (Core.Name "negated")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the items field of hydra.regex.CharacterClass+characterClassWithItems :: Typed.TypedTerm Regex.CharacterClass -> Typed.TypedTerm [Regex.ClassItem] -> Typed.TypedTerm Regex.CharacterClass+characterClassWithItems original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "negated"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.projectionFieldName = (Core.Name "negated")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "items"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the negated field of hydra.regex.CharacterClass+characterClassWithNegated :: Typed.TypedTerm Regex.CharacterClass -> Typed.TypedTerm Bool -> Typed.TypedTerm Regex.CharacterClass+characterClassWithNegated original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "negated"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "items"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.projectionFieldName = (Core.Name "items")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL constructor for hydra.regex.CharacterRange+characterRange :: Typed.TypedTerm Int -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.CharacterRange+characterRange from to =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "from"),+ Core.fieldTerm = (Typed.unTypedTerm from)},+ Core.Field {+ Core.fieldName = (Core.Name "to"),+ Core.fieldTerm = (Typed.unTypedTerm to)}]}))++-- | DSL name token for hydra.regex.CharacterRange+characterRangeCharacterRange :: Typed.TypedName Regex.CharacterRange+characterRangeCharacterRange = Typed.TypedName (Core.Name "hydra.regex.CharacterRange")++-- | DSL accessor for the from field of hydra.regex.CharacterRange+characterRangeFrom :: Typed.TypedTerm Regex.CharacterRange -> Typed.TypedTerm Int+characterRangeFrom x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.projectionFieldName = (Core.Name "from")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the to field of hydra.regex.CharacterRange+characterRangeTo :: Typed.TypedTerm Regex.CharacterRange -> Typed.TypedTerm Int+characterRangeTo x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.projectionFieldName = (Core.Name "to")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the from field of hydra.regex.CharacterRange+characterRangeWithFrom :: Typed.TypedTerm Regex.CharacterRange -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.CharacterRange+characterRangeWithFrom original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "from"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "to"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.projectionFieldName = (Core.Name "to")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the to field of hydra.regex.CharacterRange+characterRangeWithTo :: Typed.TypedTerm Regex.CharacterRange -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.CharacterRange+characterRangeWithTo original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "from"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.projectionFieldName = (Core.Name "from")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "to"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the character variant of hydra.regex.ClassItem+classItemCharacter :: Typed.TypedTerm Int -> Typed.TypedTerm Regex.ClassItem+classItemCharacter x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.ClassItem"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "character"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL name token for hydra.regex.ClassItem+classItemClassItem :: Typed.TypedName Regex.ClassItem+classItemClassItem = Typed.TypedName (Core.Name "hydra.regex.ClassItem")++-- | DSL injection for the range variant of hydra.regex.ClassItem+classItemRange :: Typed.TypedTerm Regex.CharacterRange -> Typed.TypedTerm Regex.ClassItem+classItemRange x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.ClassItem"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "range"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.regex.Quantified+quantified :: Typed.TypedTerm Regex.Atom -> Typed.TypedTerm Regex.Quantifier -> Typed.TypedTerm Regex.Quantified+quantified atom quantifier =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "atom"),+ Core.fieldTerm = (Typed.unTypedTerm atom)},+ Core.Field {+ Core.fieldName = (Core.Name "quantifier"),+ Core.fieldTerm = (Typed.unTypedTerm quantifier)}]}))++-- | DSL accessor for the atom field of hydra.regex.Quantified+quantifiedAtom :: Typed.TypedTerm Regex.Quantified -> Typed.TypedTerm Regex.Atom+quantifiedAtom x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.projectionFieldName = (Core.Name "atom")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL name token for hydra.regex.Quantified+quantifiedQuantified :: Typed.TypedName Regex.Quantified+quantifiedQuantified = Typed.TypedName (Core.Name "hydra.regex.Quantified")++-- | DSL accessor for the quantifier field of hydra.regex.Quantified+quantifiedQuantifier :: Typed.TypedTerm Regex.Quantified -> Typed.TypedTerm Regex.Quantifier+quantifiedQuantifier x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.projectionFieldName = (Core.Name "quantifier")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL updater for the atom field of hydra.regex.Quantified+quantifiedWithAtom :: Typed.TypedTerm Regex.Quantified -> Typed.TypedTerm Regex.Atom -> Typed.TypedTerm Regex.Quantified+quantifiedWithAtom original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "atom"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "quantifier"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.projectionFieldName = (Core.Name "quantifier")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL updater for the quantifier field of hydra.regex.Quantified+quantifiedWithQuantifier :: Typed.TypedTerm Regex.Quantified -> Typed.TypedTerm Regex.Quantifier -> Typed.TypedTerm Regex.Quantified+quantifiedWithQuantifier original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "atom"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.projectionFieldName = (Core.Name "atom")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "quantifier"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL injection for the atLeast variant of hydra.regex.Quantifier+quantifierAtLeast :: Typed.TypedTerm Int -> Typed.TypedTerm Regex.Quantifier+quantifierAtLeast x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "atLeast"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the exactly variant of hydra.regex.Quantifier+quantifierExactly :: Typed.TypedTerm Int -> Typed.TypedTerm Regex.Quantifier+quantifierExactly x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "exactly"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL injection for the one variant of hydra.regex.Quantifier+quantifierOne :: Typed.TypedTerm Regex.Quantifier+quantifierOne =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "one"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the oneOrMore variant of hydra.regex.Quantifier+quantifierOneOrMore :: Typed.TypedTerm Regex.Quantifier+quantifierOneOrMore =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "oneOrMore"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL name token for hydra.regex.Quantifier+quantifierQuantifier :: Typed.TypedName Regex.Quantifier+quantifierQuantifier = Typed.TypedName (Core.Name "hydra.regex.Quantifier")++-- | DSL injection for the range variant of hydra.regex.Quantifier+quantifierRange :: Typed.TypedTerm Regex.QuantifierRange -> Typed.TypedTerm Regex.Quantifier+quantifierRange x =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "range"),+ Core.fieldTerm = (Typed.unTypedTerm x)}}))++-- | DSL constructor for hydra.regex.QuantifierRange+quantifierRange2 :: Typed.TypedTerm Int -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.QuantifierRange+quantifierRange2 min max =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "min"),+ Core.fieldTerm = (Typed.unTypedTerm min)},+ Core.Field {+ Core.fieldName = (Core.Name "max"),+ Core.fieldTerm = (Typed.unTypedTerm max)}]}))++-- | DSL accessor for the max field of hydra.regex.QuantifierRange+quantifierRangeMax :: Typed.TypedTerm Regex.QuantifierRange -> Typed.TypedTerm Int+quantifierRangeMax x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.projectionFieldName = (Core.Name "max")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL accessor for the min field of hydra.regex.QuantifierRange+quantifierRangeMin :: Typed.TypedTerm Regex.QuantifierRange -> Typed.TypedTerm Int+quantifierRangeMin x =+ Typed.TypedTerm (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.projectionFieldName = (Core.Name "min")})),+ Core.applicationArgument = (Typed.unTypedTerm x)}))++-- | DSL name token for hydra.regex.QuantifierRange+quantifierRangeQuantifierRange :: Typed.TypedName Regex.QuantifierRange+quantifierRangeQuantifierRange = Typed.TypedName (Core.Name "hydra.regex.QuantifierRange")++-- | DSL updater for the max field of hydra.regex.QuantifierRange+quantifierRangeWithMax :: Typed.TypedTerm Regex.QuantifierRange -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.QuantifierRange+quantifierRangeWithMax original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "min"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.projectionFieldName = (Core.Name "min")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))},+ Core.Field {+ Core.fieldName = (Core.Name "max"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)}]}))++-- | DSL updater for the min field of hydra.regex.QuantifierRange+quantifierRangeWithMin :: Typed.TypedTerm Regex.QuantifierRange -> Typed.TypedTerm Int -> Typed.TypedTerm Regex.QuantifierRange+quantifierRangeWithMin original newVal =+ Typed.TypedTerm (Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "min"),+ Core.fieldTerm = (Typed.unTypedTerm newVal)},+ Core.Field {+ Core.fieldName = (Core.Name "max"),+ Core.fieldTerm = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermProject (Core.Projection {+ Core.projectionTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.projectionFieldName = (Core.Name "max")})),+ Core.applicationArgument = (Typed.unTypedTerm original)}))}]}))++-- | DSL injection for the zeroOrMore variant of hydra.regex.Quantifier+quantifierZeroOrMore :: Typed.TypedTerm Regex.Quantifier+quantifierZeroOrMore =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "zeroOrMore"),+ Core.fieldTerm = Core.TermUnit}}))++-- | DSL injection for the zeroOrOne variant of hydra.regex.Quantifier+quantifierZeroOrOne :: Typed.TypedTerm Regex.Quantifier+quantifierZeroOrOne =+ Typed.TypedTerm (Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "zeroOrOne"),+ Core.fieldTerm = Core.TermUnit}}))
src/main/haskell/Hydra/Dsl/Resolution.hs view
@@ -27,6 +27,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Scoping as DslScoping import qualified Hydra.Dsl.Strip as DslStrip@@ -54,11 +55,12 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Rewriting.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Scoping as DslScoping import qualified Hydra.Dsl.System as DslSystem@@ -49,6 +50,7 @@ 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.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
src/main/haskell/Hydra/Dsl/Scoping.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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.Scoping as Scoping import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Serialization.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -48,6 +49,7 @@ 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.Serialization as Serialization import qualified Hydra.System as System
− src/main/haskell/Hydra/Dsl/Show/Docs.hs
@@ -1,127 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | DSL functions for hydra.show.docs--module Hydra.Dsl.Show.Docs 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.Dsl.Ast as DslAst-import qualified Hydra.Dsl.Coders as DslCoders-import qualified Hydra.Dsl.Core as DslCore-import qualified Hydra.Dsl.Docs as DslDocs-import qualified Hydra.Dsl.Error.Checking as ErrorChecking-import qualified Hydra.Dsl.Error.Core as DslErrorCore-import qualified Hydra.Dsl.Error.File as DslErrorFile-import qualified Hydra.Dsl.Error.Packaging as DslErrorPackaging-import qualified Hydra.Dsl.Error.System as DslErrorSystem-import qualified Hydra.Dsl.Errors as DslErrors-import qualified Hydra.Dsl.File as DslFile-import qualified Hydra.Dsl.Graph as DslGraph-import qualified Hydra.Dsl.Json.Model as JsonModel-import qualified Hydra.Dsl.Packaging as DslPackaging-import qualified Hydra.Dsl.Parsing as DslParsing-import qualified Hydra.Dsl.Paths as DslPaths-import qualified Hydra.Dsl.Query as DslQuery-import qualified Hydra.Dsl.Relational as DslRelational-import qualified Hydra.Dsl.System as DslSystem-import qualified Hydra.Dsl.Tabular as DslTabular-import qualified Hydra.Dsl.Testing as DslTesting-import qualified Hydra.Dsl.Time as DslTime-import qualified Hydra.Dsl.Topology as DslTopology-import qualified Hydra.Dsl.Typing as DslTyping-import qualified Hydra.Dsl.Util as DslUtil-import qualified Hydra.Dsl.Validation as DslValidation-import qualified Hydra.Dsl.Variants as DslVariants-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.Read.Docs as ReadDocs-import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Docs as ShowDocs-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---- | DSL reference to hydra.show.docs.definitionReference-definitionReference :: Typed.TypedTerm Packaging.DefinitionReference -> Typed.TypedTerm String-definitionReference arg0 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.definitionReference")),- Core.applicationArgument = (Typed.unTypedTerm arg0)}))---- | DSL reference to hydra.show.docs.docSegment-docSegment :: Typed.TypedTerm Docs.DocSegment -> Typed.TypedTerm String-docSegment arg0 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.docSegment")),- Core.applicationArgument = (Typed.unTypedTerm arg0)}))---- | DSL reference to hydra.show.docs.docSegmentWith-docSegmentWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm Docs.DocSegment -> Typed.TypedTerm String-docSegmentWith arg0 arg1 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.docSegmentWith")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)}))---- | DSL reference to hydra.show.docs.docSegments-docSegments :: Typed.TypedTerm [Docs.DocSegment] -> Typed.TypedTerm String-docSegments arg0 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.docSegments")),- Core.applicationArgument = (Typed.unTypedTerm arg0)}))---- | DSL reference to hydra.show.docs.docSegmentsWith-docSegmentsWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm [Docs.DocSegment] -> Typed.TypedTerm String-docSegmentsWith arg0 arg1 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.docSegmentsWith")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)}))---- | DSL reference to hydra.show.docs.entityReference-entityReference :: Typed.TypedTerm Packaging.EntityReference -> Typed.TypedTerm String-entityReference arg0 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.entityReference")),- Core.applicationArgument = (Typed.unTypedTerm arg0)}))---- | DSL reference to hydra.show.docs.renderDocString-renderDocString :: Typed.TypedTerm String -> Typed.TypedTerm String-renderDocString arg0 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.renderDocString")),- Core.applicationArgument = (Typed.unTypedTerm arg0)}))---- | DSL reference to hydra.show.docs.renderDocStringWith-renderDocStringWith :: Typed.TypedTerm (Packaging.EntityReference -> String) -> Typed.TypedTerm String -> Typed.TypedTerm String-renderDocStringWith arg0 arg1 =- Typed.TypedTerm (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermApplication (Core.Application {- Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.show.docs.renderDocStringWith")),- Core.applicationArgument = (Typed.unTypedTerm arg0)})),- Core.applicationArgument = (Typed.unTypedTerm arg1)}))
src/main/haskell/Hydra/Dsl/Sorting.hs view
@@ -27,6 +27,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -50,6 +51,7 @@ 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.Sorting as Sorting import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Strip.hs view
@@ -25,6 +25,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Rewriting as DslRewriting import qualified Hydra.Dsl.System as DslSystem@@ -49,6 +50,7 @@ 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.Rewriting as Rewriting import qualified Hydra.Strip as Strip
src/main/haskell/Hydra/Dsl/Test/Transform.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Sorting as DslSorting import qualified Hydra.Dsl.System as DslSystem@@ -51,6 +52,7 @@ 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.Sorting as Sorting import qualified Hydra.System as System
src/main/haskell/Hydra/Dsl/Test/Utils.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.System as DslSystem import qualified Hydra.Dsl.Tabular as DslTabular@@ -50,9 +51,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Test.Utils as Utils
src/main/haskell/Hydra/Dsl/Variables.hs view
@@ -26,6 +26,7 @@ import qualified Hydra.Dsl.Parsing as DslParsing import qualified Hydra.Dsl.Paths as DslPaths import qualified Hydra.Dsl.Query as DslQuery+import qualified Hydra.Dsl.Regex as DslRegex import qualified Hydra.Dsl.Relational as DslRelational import qualified Hydra.Dsl.Rewriting as DslRewriting import qualified Hydra.Dsl.System as DslSystem@@ -51,6 +52,7 @@ 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.Rewriting as Rewriting import qualified Hydra.System as System
src/main/haskell/Hydra/Dsls.hs view
@@ -37,6 +37,7 @@ 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.Scoping as Scoping import qualified Hydra.Strip as Strip
src/main/haskell/Hydra/Encode/Error/Core.hs view
@@ -9,6 +9,7 @@ import qualified Hydra.Encode.Paths as Paths import qualified Hydra.Encode.Variants as Variants import qualified Hydra.Error.Core as ErrorCore+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci @@ -253,6 +254,11 @@ Core.injectionField = Core.Field { Core.fieldName = (Core.Name "invalidTypeLambdaParameterName"), Core.fieldTerm = (invalidTypeLambdaParameterNameError v0)}})+ ErrorCore.InvalidTermErrorMissingCaseBranches v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "missingCaseBranches"),+ Core.fieldTerm = (missingCaseBranchesError v0)}}) ErrorCore.InvalidTermErrorNestedTermAnnotation v0 -> Core.TermInject (Core.Injection { Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"), Core.injectionField = Core.Field {@@ -298,6 +304,11 @@ Core.injectionField = Core.Field { Core.fieldName = (Core.Name "undefinedTypeVariableInTypeApplication"), Core.fieldTerm = (undefinedTypeVariableInTypeApplicationError v0)}})+ ErrorCore.InvalidTermErrorUnknownCaseAlternative v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "unknownCaseAlternative"),+ Core.fieldTerm = (unknownCaseAlternativeError v0)}}) ErrorCore.InvalidTermErrorUnknownPrimitiveName v0 -> Core.TermInject (Core.Injection { Core.injectionTypeName = (Core.Name "hydra.error.core.InvalidTermError"), Core.injectionField = Core.Field {@@ -428,6 +439,22 @@ Core.fieldName = (Core.Name "actualType"), Core.fieldTerm = (EncodeCore.literalType (ErrorCore.literalTypeMismatchErrorActualType x))}]}) +-- | Encoder for hydra.error.core.MissingCaseBranchesError+missingCaseBranchesError :: ErrorCore.MissingCaseBranchesError -> Core.Term+missingCaseBranchesError x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.MissingCaseBranchesError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Paths.subtermPath (ErrorCore.missingCaseBranchesErrorLocation x))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (EncodeCore.name (ErrorCore.missingCaseBranchesErrorTypeName x))},+ Core.Field {+ Core.fieldName = (Core.Name "variantNames"),+ Core.fieldTerm = ((\xs -> Core.TermList (Lists.map EncodeCore.name xs)) (ErrorCore.missingCaseBranchesErrorVariantNames x))}]})+ -- | Encoder for hydra.error.core.NestedTermAnnotationError nestedTermAnnotationError :: ErrorCore.NestedTermAnnotationError -> Core.Term nestedTermAnnotationError x =@@ -655,6 +682,22 @@ Core.Field { Core.fieldName = (Core.Name "actualType"), Core.fieldTerm = (EncodeCore.type_ (ErrorCore.unexpectedTypeVariantErrorActualType x))}]})++-- | Encoder for hydra.error.core.UnknownCaseAlternativeError+unknownCaseAlternativeError :: ErrorCore.UnknownCaseAlternativeError -> Core.Term+unknownCaseAlternativeError x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.error.core.UnknownCaseAlternativeError"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "location"),+ Core.fieldTerm = (Paths.subtermPath (ErrorCore.unknownCaseAlternativeErrorLocation x))},+ Core.Field {+ Core.fieldName = (Core.Name "typeName"),+ Core.fieldTerm = (EncodeCore.name (ErrorCore.unknownCaseAlternativeErrorTypeName x))},+ Core.Field {+ Core.fieldName = (Core.Name "name"),+ Core.fieldTerm = (EncodeCore.name (ErrorCore.unknownCaseAlternativeErrorName x))}]}) -- | Encoder for hydra.error.core.UnknownPrimitiveNameError unknownPrimitiveNameError :: ErrorCore.UnknownPrimitiveNameError -> Core.Term
+ src/main/haskell/Hydra/Encode/Regex.hs view
@@ -0,0 +1,165 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Term encoders for hydra.regex++module Hydra.Encode.Regex where++import qualified Hydra.Core as Core+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Regex as Regex+import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | Encoder for hydra.regex.Alternation+alternation :: [Regex.RegexSequence] -> Core.Term+alternation xs = Core.TermList (Lists.map regexSequence xs)++-- | Encoder for hydra.regex.Atom+atom :: Regex.Atom -> Core.Term+atom x =+ case x of+ Regex.AtomLiteral v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "literal"),+ Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 v0)))}})+ Regex.AtomAny -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "any"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.AtomAnchorStart -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "anchorStart"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.AtomAnchorEnd -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "anchorEnd"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.AtomGroup v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "group"),+ Core.fieldTerm = (alternation v0)}})+ Regex.AtomClass v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Atom"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "class"),+ Core.fieldTerm = (characterClass v0)}})++-- | Encoder for hydra.regex.CharacterClass+characterClass :: Regex.CharacterClass -> Core.Term+characterClass x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterClass"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "negated"),+ Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralBoolean x2)) (Regex.characterClassNegated x))},+ Core.Field {+ Core.fieldName = (Core.Name "items"),+ Core.fieldTerm = ((\xs -> Core.TermList (Lists.map classItem xs)) (Regex.characterClassItems x))}]})++-- | Encoder for hydra.regex.CharacterRange+characterRange :: Regex.CharacterRange -> Core.Term+characterRange x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.CharacterRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "from"),+ Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Regex.characterRangeFrom x))},+ Core.Field {+ Core.fieldName = (Core.Name "to"),+ Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Regex.characterRangeTo x))}]})++-- | Encoder for hydra.regex.ClassItem+classItem :: Regex.ClassItem -> Core.Term+classItem x =+ case x of+ Regex.ClassItemCharacter v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.ClassItem"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "character"),+ Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 v0)))}})+ Regex.ClassItemRange v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.ClassItem"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "range"),+ Core.fieldTerm = (characterRange v0)}})++-- | Encoder for hydra.regex.Quantified+quantified :: Regex.Quantified -> Core.Term+quantified x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.Quantified"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "atom"),+ Core.fieldTerm = (atom (Regex.quantifiedAtom x))},+ Core.Field {+ Core.fieldName = (Core.Name "quantifier"),+ Core.fieldTerm = (quantifier (Regex.quantifiedQuantifier x))}]})++-- | Encoder for hydra.regex.Quantifier+quantifier :: Regex.Quantifier -> Core.Term+quantifier x =+ case x of+ Regex.QuantifierOne -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "one"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.QuantifierZeroOrOne -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "zeroOrOne"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.QuantifierZeroOrMore -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "zeroOrMore"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.QuantifierOneOrMore -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "oneOrMore"),+ Core.fieldTerm = Core.TermUnit}})+ Regex.QuantifierExactly v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "exactly"),+ Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 v0)))}})+ Regex.QuantifierAtLeast v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "atLeast"),+ Core.fieldTerm = (Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 v0)))}})+ Regex.QuantifierRange_ v0 -> Core.TermInject (Core.Injection {+ Core.injectionTypeName = (Core.Name "hydra.regex.Quantifier"),+ Core.injectionField = Core.Field {+ Core.fieldName = (Core.Name "range"),+ Core.fieldTerm = (quantifierRange v0)}})++-- | Encoder for hydra.regex.QuantifierRange+quantifierRange :: Regex.QuantifierRange -> Core.Term+quantifierRange x =+ Core.TermRecord (Core.Record {+ Core.recordTypeName = (Core.Name "hydra.regex.QuantifierRange"),+ Core.recordFields = [+ Core.Field {+ Core.fieldName = (Core.Name "min"),+ Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Regex.quantifierRangeMin x))},+ Core.Field {+ Core.fieldName = (Core.Name "max"),+ Core.fieldTerm = ((\x2 -> Core.TermLiteral (Core.LiteralInteger (Core.IntegerValueInt32 x2))) (Regex.quantifierRangeMax x))}]})++-- | Encoder for hydra.regex.Regex+regex :: Regex.Alternation -> Core.Term+regex = alternation++-- | Encoder for hydra.regex.RegexSequence+regexSequence :: [Regex.Quantified] -> Core.Term+regexSequence xs = Core.TermList (Lists.map quantified xs)
src/main/haskell/Hydra/Encoding.hs view
@@ -34,6 +34,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Predicates as Predicates import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
src/main/haskell/Hydra/Environment.hs view
@@ -32,6 +32,7 @@ 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.Scoping as Scoping import qualified Hydra.Sorting as Sorting
src/main/haskell/Hydra/Error/Core.hs view
@@ -243,6 +243,8 @@ InvalidTermErrorInvalidLetBindingName InvalidLetBindingNameError | -- | A type lambda parameter name violating naming conventions (optional) InvalidTermErrorInvalidTypeLambdaParameterName InvalidTypeLambdaParameterNameError |+ -- | A case statement that does not cover every variant of the union it matches+ InvalidTermErrorMissingCaseBranches MissingCaseBranchesError | -- | Nested term annotations that should be merged (optional) InvalidTermErrorNestedTermAnnotation NestedTermAnnotationError | -- | A no-op unwrap-of-wrap round-trip (optional)@@ -261,6 +263,8 @@ InvalidTermErrorUndefinedTypeVariableInLambdaDomain UndefinedTypeVariableInLambdaDomainError | -- | An unbound type variable in a type application term InvalidTermErrorUndefinedTypeVariableInTypeApplication UndefinedTypeVariableInTypeApplicationError |+ -- | A case statement alternative naming a field that does not exist in the union it matches+ InvalidTermErrorUnknownCaseAlternative UnknownCaseAlternativeError | -- | A reference to an unknown primitive function InvalidTermErrorUnknownPrimitiveName UnknownPrimitiveNameError | -- | An identity lambda applied to an argument (optional)@@ -291,6 +295,8 @@ _InvalidTermError_invalidTypeLambdaParameterName = Core.Name "invalidTypeLambdaParameterName" +_InvalidTermError_missingCaseBranches = Core.Name "missingCaseBranches"+ _InvalidTermError_nestedTermAnnotation = Core.Name "nestedTermAnnotation" _InvalidTermError_redundantWrapUnwrap = Core.Name "redundantWrapUnwrap"@@ -309,6 +315,8 @@ _InvalidTermError_undefinedTypeVariableInTypeApplication = Core.Name "undefinedTypeVariableInTypeApplication" +_InvalidTermError_unknownCaseAlternative = Core.Name "unknownCaseAlternative"+ _InvalidTermError_unknownPrimitiveName = Core.Name "unknownPrimitiveName" _InvalidTermError_unnecessaryIdentityApplication = Core.Name "unnecessaryIdentityApplication"@@ -422,6 +430,25 @@ _LiteralTypeMismatchError_actualType = Core.Name "actualType" +-- | A case statement without a default branch that fails to cover every variant of the union it matches+data MissingCaseBranchesError =+ MissingCaseBranchesError {+ -- | The path to the case statement within the term+ missingCaseBranchesErrorLocation :: Paths.SubtermPath,+ -- | The name of the union type being matched+ missingCaseBranchesErrorTypeName :: Core.Name,+ -- | The names of the uncovered variants+ missingCaseBranchesErrorVariantNames :: [Core.Name]}+ deriving (Eq, Ord, Read, Show)++_MissingCaseBranchesError = Core.Name "hydra.error.core.MissingCaseBranchesError"++_MissingCaseBranchesError_location = Core.Name "location"++_MissingCaseBranchesError_typeName = Core.Name "typeName"++_MissingCaseBranchesError_variantNames = Core.Name "variantNames"+ -- | A term annotation directly wrapping another term annotation; annotations should be merged (optional) data NestedTermAnnotationError = NestedTermAnnotationError {@@ -683,6 +710,25 @@ _UnexpectedTypeVariantError_expectedVariant = Core.Name "expectedVariant" _UnexpectedTypeVariantError_actualType = Core.Name "actualType"++-- | A case statement alternative naming a field that does not exist in the union it matches+data UnknownCaseAlternativeError =+ UnknownCaseAlternativeError {+ -- | The path to the case statement within the term+ unknownCaseAlternativeErrorLocation :: Paths.SubtermPath,+ -- | The name of the union type being matched+ unknownCaseAlternativeErrorTypeName :: Core.Name,+ -- | The unknown alternative name+ unknownCaseAlternativeErrorName :: Core.Name}+ deriving (Eq, Ord, Read, Show)++_UnknownCaseAlternativeError = Core.Name "hydra.error.core.UnknownCaseAlternativeError"++_UnknownCaseAlternativeError_location = Core.Name "location"++_UnknownCaseAlternativeError_typeName = Core.Name "typeName"++_UnknownCaseAlternativeError_name = Core.Name "name" -- | A primitive function reference to a name not in the known primitive registry data UnknownPrimitiveNameError =
src/main/haskell/Hydra/Extract/Core.hs view
@@ -31,10 +31,11 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular@@ -64,7 +65,7 @@ Core.IntegerValueBigint v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "bigint",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract a binary data value from a term binary :: Graph.Graph -> Core.Term -> Either Errors.Error B.ByteString@@ -77,7 +78,7 @@ Core.LiteralBinary v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "binary",- Errors.unexpectedShapeErrorActual = (ShowCore.literal v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal v)}))) -- | Extract a boolean value from a term boolean :: Graph.Graph -> Core.Term -> Either Errors.Error Bool@@ -90,7 +91,7 @@ Core.LiteralBoolean v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "boolean",- Errors.unexpectedShapeErrorActual = (ShowCore.literal v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal v)}))) -- | Extract case statement from a term cases :: Core.Name -> Graph.Graph -> Core.Term -> Either Errors.Error Core.CaseStatement@@ -98,10 +99,10 @@ Eithers.bind (Lexical.stripAndDereferenceTerm graph term0) (\term -> case term of Core.TermCases v0 -> Logic.ifElse (Equality.equal (Core.unName (Core.caseStatementTypeName v0)) (Core.unName name)) (Right v0) (Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = (Strings.cat2 "case statement for type " (Core.unName name)),- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "case statement",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract an arbitrary-precision decimal value from a term decimal :: Graph.Graph -> Core.Term -> Either Errors.Error Sci.Scientific@@ -114,7 +115,7 @@ Core.LiteralDecimal v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "decimal",- Errors.unexpectedShapeErrorActual = (ShowCore.literal v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal v)}))) -- | Decode an Either value using the provided left and right decoders decodeEither :: (Graph.Graph -> Core.Term -> Either Errors.DecodingError t0) -> (Graph.Graph -> Core.Term -> Either Errors.DecodingError t1) -> Graph.Graph -> Core.Term -> Either Errors.DecodingError (Either t0 t1)@@ -172,7 +173,7 @@ Core.TermEither v0 -> Eithers.either (\l -> Eithers.map (\x -> Left x) (leftFun l)) (\r -> Eithers.map (\x -> Right x) (rightFun r)) v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "either value",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract the left and right types from an either type eitherType :: Core.Type -> Either Errors.Error Core.EitherType@@ -183,7 +184,7 @@ Core.TypeEither v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "either type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a field value from a list of fields field :: Core.Name -> (Core.Term -> Either Errors.Error t0) -> Graph.Graph -> [Core.Field] -> Either Errors.Error t0@@ -209,7 +210,7 @@ Core.FloatValueFloat32 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "float32",- Errors.unexpectedShapeErrorActual = (ShowCore.float v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.float v)}))) -- | Extract a 64-bit floating-point value from a term float64 :: Graph.Graph -> Core.Term -> Either Errors.Error Double@@ -222,7 +223,7 @@ Core.FloatValueFloat64 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "float64",- Errors.unexpectedShapeErrorActual = (ShowCore.float v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.float v)}))) -- | Extract a floating-point literal from a Literal value floatLiteral :: Core.Literal -> Either Errors.Error Core.FloatValue@@ -231,7 +232,7 @@ Core.LiteralFloat v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "floating-point value",- Errors.unexpectedShapeErrorActual = (ShowCore.literal lit)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal lit)}))) -- | Extract a float value from a term floatValue :: Graph.Graph -> Core.Term -> Either Errors.Error Core.FloatValue@@ -246,7 +247,7 @@ Core.TypeFunction v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "function type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a field from a union term injection :: Core.Name -> Graph.Graph -> Core.Term -> Either Errors.Error Core.Field@@ -257,7 +258,7 @@ Errors.unexpectedShapeErrorActual = (Core.unName (Core.injectionTypeName v0))})))) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "injection",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract a 16-bit signed integer value from a term int16 :: Graph.Graph -> Core.Term -> Either Errors.Error I.Int16@@ -270,7 +271,7 @@ Core.IntegerValueInt16 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "int16",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract a 32-bit signed integer value from a term int32 :: Graph.Graph -> Core.Term -> Either Errors.Error Int@@ -283,7 +284,7 @@ Core.IntegerValueInt32 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "int32",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract a 64-bit signed integer value from a term int64 :: Graph.Graph -> Core.Term -> Either Errors.Error I.Int64@@ -296,7 +297,7 @@ Core.IntegerValueInt64 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "int64",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract an 8-bit signed integer value from a term int8 :: Graph.Graph -> Core.Term -> Either Errors.Error I.Int8@@ -309,7 +310,7 @@ Core.IntegerValueInt8 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "int8",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract an integer literal from a Literal value integerLiteral :: Core.Literal -> Either Errors.Error Core.IntegerValue@@ -318,7 +319,7 @@ Core.LiteralInteger v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "integer value",- Errors.unexpectedShapeErrorActual = (ShowCore.literal lit)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal lit)}))) -- | Extract an integer value from a term integerValue :: Graph.Graph -> Core.Term -> Either Errors.Error Core.IntegerValue@@ -331,7 +332,7 @@ Core.TermLambda v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "lambda",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract the body of a lambda term lambdaBody :: Graph.Graph -> Core.Term -> Either Errors.Error Core.Term@@ -344,7 +345,7 @@ Core.TermLet v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "let term",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract a binding with the given name from a let term letBinding :: String -> Graph.Graph -> Core.Term -> Either Errors.Error Core.Term@@ -367,7 +368,7 @@ Core.TermList v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "list",- Errors.unexpectedShapeErrorActual = (ShowCore.term stripped)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term stripped)})))) -- | Extract a list of values from a term, mapping a function over each element listOf :: (Core.Term -> Either Errors.Error t0) -> Graph.Graph -> Core.Term -> Either Errors.Error [t0]@@ -382,7 +383,7 @@ Core.TypeList v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "list type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a literal value from a term literal :: Graph.Graph -> Core.Term -> Either Errors.Error Core.Literal@@ -391,7 +392,7 @@ Core.TermLiteral v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "literal",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract a map of key-value pairs from a term, mapping functions over each key and value map :: Ord t0 => ((Core.Term -> Either Errors.Error t0) -> (Core.Term -> Either Errors.Error t1) -> Graph.Graph -> Core.Term -> Either Errors.Error (M.Map t0 t1))@@ -406,7 +407,7 @@ Core.TermMap v0 -> Eithers.map Maps.fromList (Eithers.mapList pair (Maps.toList v0)) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "map",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)})))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)}))))) -- | Extract the key and value types from a map type mapType :: Core.Type -> Either Errors.Error Core.MapType@@ -417,7 +418,7 @@ Core.TypeMap v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "map type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Ensure a function has the expected number of arguments nArgs :: Core.Name -> Int -> [t0] -> Either Errors.Error ()@@ -436,7 +437,7 @@ Core.TermOptional v0 -> Optionals.cases v0 (Right Nothing) (\t -> Eithers.map Optionals.pure (f t)) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "optional value",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract the base type from an optional type optionalType :: Core.Type -> Either Errors.Error Core.Type@@ -447,7 +448,7 @@ Core.TypeOptional v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "optional type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a pair of values from a term, applying functions to each component pair :: (Core.Term -> Either Errors.Error t0) -> (Core.Term -> Either Errors.Error t1) -> Graph.Graph -> Core.Term -> Either Errors.Error (t0, t1)@@ -456,7 +457,7 @@ Core.TermPair v0 -> Eithers.bind (kf (Pairs.first v0)) (\kVal -> Eithers.bind (vf (Pairs.second v0)) (\vVal -> Right (kVal, vVal))) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "pair",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract a record's fields from a term record :: Core.Name -> Graph.Graph -> Core.Term -> Either Errors.Error [Core.Field]@@ -474,7 +475,7 @@ Core.TypeRecord v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "record type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Require a field from a record's field map and decode it requireField :: String -> (t0 -> t1 -> Either Errors.DecodingError t2) -> M.Map Core.Name t1 -> t0 -> Either Errors.DecodingError t2@@ -491,7 +492,7 @@ Core.TermSet v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "set",- Errors.unexpectedShapeErrorActual = (ShowCore.term stripped)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term stripped)})))) -- | Extract a set of values from a term, mapping a function over each element setOf :: Ord t0 => ((Core.Term -> Either Errors.Error t0) -> Graph.Graph -> Core.Term -> Either Errors.Error (S.Set t0))@@ -506,7 +507,7 @@ Core.TypeSet v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "set type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a string value from a term string :: Graph.Graph -> Core.Term -> Either Errors.Error String@@ -519,12 +520,12 @@ Core.LiteralString v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "string",- Errors.unexpectedShapeErrorActual = (ShowCore.literal v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.literal v)}))) -- | Strip annotations and dereference variables, returning Either DecodingError Term stripWithDecodingError :: Graph.Graph -> Core.Term -> Either Errors.DecodingError Core.Term stripWithDecodingError g term =- Eithers.bimap (\_e -> Errors.DecodingError (ShowErrors.error _e)) (\x -> x) (Lexical.stripAndDereferenceTermEither g term)+ Eithers.bimap (\_e -> Errors.DecodingError (PrintErrors.error _e)) (\x -> x) (Lexical.stripAndDereferenceTermEither g term) -- | Extract a record from a term termRecord :: Graph.Graph -> Core.Term -> Either Errors.Error Core.Record@@ -533,7 +534,7 @@ Core.TermRecord v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "record",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Convert a Record's fields to a Map from Name to Term toFieldMap :: Core.Record -> M.Map Core.Name Core.Term@@ -550,7 +551,7 @@ Core.IntegerValueUint16 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "uint16",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract a 32-bit unsigned integer value from a term uint32 :: Graph.Graph -> Core.Term -> Either Errors.Error I.Int64@@ -563,7 +564,7 @@ Core.IntegerValueUint32 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "uint32",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract a 64-bit unsigned integer value from a term uint64 :: Graph.Graph -> Core.Term -> Either Errors.Error Integer@@ -576,7 +577,7 @@ Core.IntegerValueUint64 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "uint64",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract an 8-bit unsigned integer value from a term uint8 :: Graph.Graph -> Core.Term -> Either Errors.Error I.Int16@@ -589,7 +590,7 @@ Core.IntegerValueUint8 v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "uint8",- Errors.unexpectedShapeErrorActual = (ShowCore.integer v)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.integer v)}))) -- | Extract the field types from a union type unionType :: t0 -> Core.Type -> Either Errors.Error [Core.FieldType]@@ -600,7 +601,7 @@ Core.TypeUnion v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "union type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)}))) -- | Extract a unit value from a term unit :: Core.Term -> Either Errors.Error ()@@ -609,7 +610,7 @@ Core.TermUnit -> Right () _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "unit",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)}))) -- | Extract a unit variant (a variant with an empty record value) from a union term unitVariant :: Core.Name -> Graph.Graph -> Core.Term -> Either Errors.Error Core.Name@@ -625,7 +626,7 @@ Errors.unexpectedShapeErrorActual = (Core.unName (Core.wrappedTermTypeName v0))})))) _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = (Strings.cat2 (Strings.cat2 "wrap(" (Core.unName expected)) ")"),- Errors.unexpectedShapeErrorActual = (ShowCore.term term)}))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)})))) -- | Extract the wrapped type from a wrapper type wrappedType :: t0 -> Core.Type -> Either Errors.Error Core.Type@@ -636,4 +637,4 @@ Core.TypeWrap v0 -> Right v0 _ -> Left (Errors.ErrorExtraction (Errors.ExtractionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "wrapped type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ typ)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ typ)})))
src/main/haskell/Hydra/Extract/Json.hs view
@@ -26,6 +26,7 @@ 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
src/main/haskell/Hydra/Extract/Util.hs view
@@ -24,9 +24,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing
src/main/haskell/Hydra/Formatting.hs view
@@ -31,6 +31,7 @@ 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
src/main/haskell/Hydra/Hoisting.hs view
@@ -33,6 +33,7 @@ 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.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting
src/main/haskell/Hydra/Inference.hs view
@@ -36,15 +36,16 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors+import qualified Hydra.Print.Typing as PrintTyping import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors-import qualified Hydra.Show.Typing as ShowTyping import qualified Hydra.Sorting as Sorting import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -164,7 +165,7 @@ cx2 = Pairs.second result in (Core.TypeVariable name, cx2) --- | Generalize a type to a type scheme+-- | Generalize a type to a type scheme. Paper: inference.tex, gen() and rule Gen. generalize :: Graph.Graph -> Core.Type -> Core.TypeScheme generalize cx typ = @@ -188,7 +189,7 @@ headOrFail desc xs = Optionals.cases (Lists.maybeHead xs) (Left (Errors.ErrorOther (Errors.OtherError (Strings.cat2 "headOrFail: " desc)))) (\x -> Right x) --- | Infer types for all elements in a graph, using the provided ordered bindings. Returns both the inferred graph and the ordered inferred bindings.+-- | Infer types for all elements in a graph, using the provided ordered bindings. Returns both the inferred graph and the ordered inferred bindings. Paper: inference.tex, the SCC treatment of cycles (section introduction); the whole graph is one mutually recursive let. inferGraphTypes :: Typing.InferenceContext -> [Core.Binding] -> Graph.Graph -> Either Errors.Error ((Graph.Graph, [Core.Binding]), Typing.InferenceContext) inferGraphTypes fcx0 bindings0 g0 = @@ -288,7 +289,7 @@ (Literals.showInt32 (Lists.length bindings)), " bindings"])})))))))))) --- | Infer the type of an annotated term (Either version)+-- | Infer the type of an annotated term (Either version). Paper: inference.tex, rule Ann. inferTypeOfAnnotatedTerm :: Typing.InferenceContext -> Graph.Graph -> Core.AnnotatedTerm -> Either Errors.Error Typing.InferenceResult inferTypeOfAnnotatedTerm fcx cx at = @@ -310,7 +311,7 @@ Typing.inferenceResultClassConstraints = iconstraints, Typing.inferenceResultContext = fcx2})))) --- | Infer the type of a function application (Either version)+-- | Infer the type of a function application (Either version). Paper: inference.tex, rule App (elaboration form). inferTypeOfApplication :: Typing.InferenceContext -> Graph.Graph -> Core.Application -> Either Errors.Error Typing.InferenceResult inferTypeOfApplication fcx0 cx app = @@ -358,7 +359,7 @@ Typing.inferenceResultClassConstraints = rConstraints, Typing.inferenceResultContext = fcx4}))))))))) --- | Infer the type of a case statement (Either version)+-- | Infer the type of a case statement (Either version). Paper: inference.tex, rules Case and Case_d. inferTypeOfCaseStatement :: Typing.InferenceContext -> Graph.Graph -> Core.CaseStatement -> Either Errors.Error Typing.InferenceResult inferTypeOfCaseStatement fcx cx caseStmt = @@ -427,7 +428,7 @@ dfltConstraints, caseConstraints])) (\mcResult -> Right mcResult)))))))))) --- | Infer the type of a collection. The classNames parameter specifies type classes (e.g. ordering) that the element type variable must satisfy.+-- | Infer the type of a collection. The classNames parameter specifies type classes (e.g. ordering) that the element type variable must satisfy. Paper: inference.tex, shared implementation of the collection introduction rules (Lst_0/Lst_+, Set_0/Set_+). inferTypeOfCollection :: Typing.InferenceContext -> Graph.Graph -> (Core.Type -> Core.Type) -> ([Core.Term] -> Core.Term) -> String -> S.Set Core.Name -> [Core.Term] -> Either Errors.Error Typing.InferenceResult inferTypeOfCollection fcx cx typCons trmCons desc classNames els = @@ -459,7 +460,7 @@ isubst = Substitution.composeTypeSubst subst1 subst2 in (yieldWithConstraints fcx3 iterm itype isubst (Substitution.substInClassConstraints subst2 allConstraints))) constraints) (\mcResult -> Right mcResult))))) --- | Infer the type of an either value (Either version)+-- | Infer the type of an either value (Either version). Paper: inference.tex, rules Eith_L and Eith_R. inferTypeOfEither :: Typing.InferenceContext -> Graph.Graph -> Either Core.Term Core.Term -> Either Errors.Error Typing.InferenceResult inferTypeOfEither fcx cx e = Eithers.either (\l -> Eithers.bind (inferTypeOfTerm fcx cx l "either left value") (\r1 ->@@ -506,7 +507,7 @@ Core.eitherTypeRight = rightType}) in (Right (yieldChecked fcx3 termWithBothTypes eitherType subst)))) e --- | Infer the type of a union injection (Either version)+-- | Infer the type of a union injection (Either version). Paper: inference.tex, rule Inj. inferTypeOfInjection :: Typing.InferenceContext -> Graph.Graph -> Core.Injection -> Either Errors.Error Typing.InferenceResult inferTypeOfInjection fcx cx injection = @@ -535,7 +536,7 @@ Typing.typeConstraintRight = ityp, Typing.typeConstraintComment = "schema type of injected field"}]) (\mcResult -> Right mcResult)))))))) --- | Infer the type of a lambda function (Either version)+-- | Infer the type of a lambda function (Either version). Paper: inference.tex, rule Abs (elaboration form). inferTypeOfLambda :: Typing.InferenceContext -> Graph.Graph -> Core.Lambda -> Either Errors.Error Typing.InferenceResult inferTypeOfLambda fcx cx lambda = @@ -583,7 +584,7 @@ Typing.inferenceResultClassConstraints = iconstraints, Typing.inferenceResultContext = fcx3})))) --- | Normalize a let term before inferring its type (Either version). The bindings are partitioned into strongly connected components and reorganized as nested lets, one let per SCC, in dependency order. This is the standard Hindley-Milner treatment of mutual recursion: each SCC is generalized once at its boundary (sound, because nothing inside the cluster sees a polymorphic instance of its siblings), and acyclic bindings generalize individually as usual.+-- | Normalize a let term before inferring its type (Either version). The bindings are partitioned into strongly connected components and reorganized as nested lets, one let per SCC, in dependency order. This is the standard Hindley-Milner treatment of mutual recursion: each SCC is generalized once at its boundary (sound, because nothing inside the cluster sees a polymorphic instance of its siblings), and acyclic bindings generalize individually as usual. Paper: inference.tex, the SCC treatment of cycles (section introduction) and the remark following the elaboration-form Let rule. inferTypeOfLet :: Typing.InferenceContext -> Graph.Graph -> Core.Let -> Either Errors.Error Typing.InferenceResult inferTypeOfLet fcx0 cx let0 = @@ -644,7 +645,7 @@ _ -> inferTypeOfTerm fcx cx rewrittenLet "empty let term" in (Eithers.map rewriteResult res) --- | Infer the type of a let (letrec) term which is already in a normal form (Either version)+-- | Infer the type of a let (letrec) term which is already in a normal form (Either version). Paper: inference.tex, rule Let (elaboration form). inferTypeOfLetNormalized :: Typing.InferenceContext -> Graph.Graph -> Core.Let -> Either Errors.Error Typing.InferenceResult inferTypeOfLetNormalized fcx0 cx0 letTerm = @@ -734,12 +735,12 @@ Typing.inferenceResultClassConstraints = allConstraints, Typing.inferenceResultContext = fcx4}))))))))) --- | Infer the type of a list (Either version)+-- | Infer the type of a list (Either version). Paper: inference.tex, rules Lst_0 and Lst_+. inferTypeOfList :: Typing.InferenceContext -> Graph.Graph -> [Core.Term] -> Either Errors.Error Typing.InferenceResult inferTypeOfList fcx cx = inferTypeOfCollection fcx cx (\x -> Core.TypeList x) (\x -> Core.TermList x) "list element" Sets.empty --- | Infer the type of a literal+-- | Infer the type of a literal. Paper: inference.tex, rule Lit. inferTypeOfLiteral :: Typing.InferenceContext -> Core.Literal -> Typing.InferenceResult inferTypeOfLiteral fcx lit = Typing.InferenceResult {@@ -749,7 +750,7 @@ Typing.inferenceResultClassConstraints = Maps.empty, Typing.inferenceResultContext = fcx} --- | Infer the type of a map (Either version)+-- | Infer the type of a map (Either version). Paper: inference.tex, rules Map_0 and Map_+. inferTypeOfMap :: Typing.InferenceContext -> Graph.Graph -> M.Map Core.Term Core.Term -> Either Errors.Error Typing.InferenceResult inferTypeOfMap fcx cx m = @@ -801,14 +802,14 @@ kcons, vcons])) (\mcResult -> Right mcResult))))))) --- | Infer the type of a Maybe value+-- | Infer the type of a Maybe value. Paper: inference.tex, rules Opt_0 and Opt_1. inferTypeOfOptional :: Typing.InferenceContext -> Graph.Graph -> Maybe Core.Term -> Either Errors.Error Typing.InferenceResult inferTypeOfOptional fcx cx m = let trmCons = \terms -> Core.TermOptional (Lists.maybeHead terms) in (inferTypeOfCollection fcx cx (\x -> Core.TypeOptional x) trmCons "optional element" Sets.empty (Optionals.cases m [] Lists.singleton)) --- | Infer the type of a pair (Either version)+-- | Infer the type of a pair (Either version). Paper: inference.tex, rule Pair. inferTypeOfPair :: Typing.InferenceContext -> Graph.Graph -> (Core.Term, Core.Term) -> Either Errors.Error Typing.InferenceResult inferTypeOfPair fcx cx p = Eithers.bind (inferMany fcx cx [@@ -832,18 +833,7 @@ Core.pairTypeFirst = tyFst, Core.pairTypeSecond = tySnd})) isubst pairElemConstraints)))))))) --- | Infer the type of a primitive function (Either version)-inferTypeOfPrimitive :: Typing.InferenceContext -> Graph.Graph -> Core.Name -> Either Errors.Error Typing.InferenceResult-inferTypeOfPrimitive fcx cx name =- Optionals.cases (Optionals.map (\_p -> Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition _p))) (Maps.lookup name (Graph.graphPrimitives cx))) (Left (Errors.ErrorResolution (Errors.ResolutionErrorNoSuchPrimitive (Errors.NoSuchPrimitiveError {- Errors.noSuchPrimitiveErrorName = name})))) (\scheme ->- let tsResult = Resolution.instantiateTypeScheme fcx scheme- ts = Pairs.first tsResult- fcx2 = Pairs.second tsResult- constraints = Optionals.fromOptional Maps.empty (Core.typeSchemeConstraints ts)- in (Right (yieldCheckedWithConstraints fcx2 (buildTypeApplicationTerm (Core.typeSchemeVariables ts) (Core.TermVariable name)) (Core.typeSchemeBody ts) Substitution.idTypeSubst constraints)))---- | Infer the type of a record projection (Either version)+-- | Infer the type of a record projection (Either version). Paper: inference.tex, rule Proj. inferTypeOfProjection :: Typing.InferenceContext -> Graph.Graph -> Core.Projection -> Either Errors.Error Typing.InferenceResult inferTypeOfProjection fcx cx proj = @@ -860,7 +850,7 @@ Core.functionTypeDomain = (Resolution.nominalApplication tname (Lists.map (\x -> Core.TypeVariable x) svars)), Core.functionTypeCodomain = ftyp})) Substitution.idTypeSubst)))))) --- | Infer the type of a record (Either version)+-- | Infer the type of a record (Either version). Paper: inference.tex, rule Rec. inferTypeOfRecord :: Typing.InferenceContext -> Graph.Graph -> Core.Record -> Either Errors.Error Typing.InferenceResult inferTypeOfRecord fcx cx record = @@ -893,7 +883,7 @@ Typing.typeConstraintRight = ityp, Typing.typeConstraintComment = "schema type of record"}]) (\mcResult -> Right mcResult)))))) --- | Infer the type of a set (Either version)+-- | Infer the type of a set (Either version). Paper: inference.tex, rules Set_0 and Set_+. inferTypeOfSet :: Typing.InferenceContext -> Graph.Graph -> S.Set Core.Term -> Either Errors.Error Typing.InferenceResult inferTypeOfSet fcx cx s = inferTypeOfCollection fcx cx (\x -> Core.TypeSet x) (\terms -> Core.TermSet (Sets.fromList terms)) "set element" (Sets.singleton (Core.Name "ordering")) (Sets.toList s)@@ -926,7 +916,7 @@ Core.TermVariable v0 -> inferTypeOfVariable fcx2 cx v0 Core.TermWrap v0 -> inferTypeOfWrappedTerm fcx2 cx v0 --- | Infer the type of a type application (Either version)+-- | Infer the type of a type application (Either version). Paper: inference.tex, type application terms in the elaborated Term grammar. inferTypeOfTypeApplication :: Typing.InferenceContext -> Graph.Graph -> Core.TypeApplicationTerm -> Either Errors.Error Typing.InferenceResult inferTypeOfTypeApplication fcx cx tt = @@ -940,7 +930,7 @@ Typing.inferenceResultClassConstraints = (Typing.inferenceResultClassConstraints result), Typing.inferenceResultContext = fcx2})))) --- | Infer the type of a type abstraction (Either version)+-- | Infer the type of a type abstraction (Either version). Paper: inference.tex, type abstraction terms in the elaborated Term grammar. inferTypeOfTypeLambda :: Typing.InferenceContext -> Graph.Graph -> Core.TypeLambda -> Either Errors.Error Typing.InferenceResult inferTypeOfTypeLambda fcx cx ta = @@ -954,7 +944,7 @@ Typing.inferenceResultClassConstraints = (Typing.inferenceResultClassConstraints result), Typing.inferenceResultContext = fcx2})))) --- | The trivial inference rule for the unit term+-- | The trivial inference rule for the unit term. Paper: inference.tex, rule Unit. inferTypeOfUnit :: Typing.InferenceContext -> Typing.InferenceResult inferTypeOfUnit fcx = Typing.InferenceResult {@@ -964,7 +954,7 @@ Typing.inferenceResultClassConstraints = Maps.empty, Typing.inferenceResultContext = fcx} --- | Infer the type of an unwrap operation (Either version)+-- | Infer the type of an unwrap operation (Either version). Paper: inference.tex, rule Unwr. inferTypeOfUnwrap :: Typing.InferenceContext -> Graph.Graph -> Core.Name -> Either Errors.Error Typing.InferenceResult inferTypeOfUnwrap fcx cx tname = Eithers.bind (Resolution.requireSchemaType fcx (Graph.graphSchemaTypes cx) tname) (\stRp ->@@ -976,7 +966,7 @@ Core.functionTypeDomain = (Resolution.nominalApplication tname (Lists.map (\x -> Core.TypeVariable x) svars)), Core.functionTypeCodomain = wtyp})) Substitution.idTypeSubst)))) --- | Infer the type of a variable (Either version)+-- | Infer the type of a variable (Either version). Paper: inference.tex, rule Var (elaboration form), with rule Prim as the primitive-namespace fallback. inferTypeOfVariable :: Typing.InferenceContext -> Graph.Graph -> Core.Name -> Either Errors.Error Typing.InferenceResult inferTypeOfVariable fcx cx name = Optionals.cases (Maps.lookup name (Graph.graphBoundTypes cx)) (Optionals.cases (Optionals.map (\_p -> Scoping.termSignatureToTypeScheme (Packaging.primitiveDefinitionSignature (Graph.primitiveDefinition _p))) (Maps.lookup name (Graph.graphPrimitives cx))) (Left (Errors.ErrorResolution (Errors.ResolutionErrorNoSuchBinding (Errors.NoSuchBindingError {@@ -997,7 +987,7 @@ Typing.inferenceResultClassConstraints = constraints, Typing.inferenceResultContext = fcx2}))) --- | Infer the type of a wrapped term (Either version)+-- | Infer the type of a wrapped term (Either version). Paper: inference.tex, rule Wrp. inferTypeOfWrappedTerm :: Typing.InferenceContext -> Graph.Graph -> Core.WrappedTerm -> Either Errors.Error Typing.InferenceResult inferTypeOfWrappedTerm fcx cx wt = @@ -1102,11 +1092,11 @@ subst = Typing.inferenceResultSubst result in (Strings.cat [ "{term=",- (ShowCore.term term),+ (PrintCore.term term), ", type=",- (ShowCore.type_ typ),+ (PrintCore.type_ typ), ", subst=",- (ShowTyping.typeSubst subst),+ (PrintTyping.typeSubst subst), "}"]) -- | Create an inference result with no class constraints
src/main/haskell/Hydra/Json/Decode.hs view
@@ -31,9 +31,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -186,7 +187,7 @@ Core.applicationTypeArgument = arg}))) _ -> Left (Strings.cat [ "cannot apply a non-parametric type: ",- (ShowCore.type_ fn)])+ (PrintCore.type_ fn)]) in case stripped of Core.TypeApplication v0 -> Eithers.either (\err -> Left err) (\reducedType -> fromJson types tname reducedType value) (reduceApp v0) Core.TypeForall v0 -> fromJson types tname (Core.forallTypeBody v0) value@@ -333,7 +334,7 @@ (Core.unName v0)])) (\resolvedType -> fromJson types v0 resolvedType value)) _ -> Left (Strings.cat [ "unsupported type for JSON decoding: ",- (ShowCore.type_ typ)])+ (PrintCore.type_ typ)]) -- | Parse an IEEE sentinel string (NaN, Infinity, -Infinity, -0.0) to a float64. Returns Nothing for unrecognized strings. parseSpecialFloat :: String -> Maybe Double
src/main/haskell/Hydra/Json/Decoding.hs view
@@ -25,6 +25,7 @@ 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
src/main/haskell/Hydra/Json/Encode.hs view
@@ -32,9 +32,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -116,7 +117,7 @@ Core.applicationTypeArgument = arg}))) _ -> Left (Strings.cat [ "cannot apply a non-parametric type: ",- (ShowCore.type_ fn)])+ (PrintCore.type_ fn)]) in case stripped of Core.TypeApplication v0 -> Eithers.either (\err -> Left err) (\reducedType -> toJson types tname reducedType term) (reduceApp v0) Core.TypeForall v0 -> toJson types tname (Core.forallTypeBody v0) term@@ -247,7 +248,7 @@ in (Optionals.cases lookedUp (toJsonUntyped term) (\resolvedType -> toJson types v0 resolvedType term)) _ -> Left (Strings.cat [ "unsupported type for JSON encoding: ",- (ShowCore.type_ typ)])+ (PrintCore.type_ typ)]) -- | Encode a Hydra term to a JSON value without type information. Falls back to array-wrapped Maybe encoding. toJsonUntyped :: Core.Term -> Either String Model.Value@@ -321,4 +322,4 @@ ("right", v)]) encodedR)) v0 _ -> Left (Strings.cat [ "unsupported term variant for JSON encoding: ",- (ShowCore.term term)])+ (PrintCore.term term)])
src/main/haskell/Hydra/Json/Parser.hs view
@@ -28,6 +28,7 @@ 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
src/main/haskell/Hydra/Json/Writer.hs view
@@ -29,6 +29,7 @@ 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.Serialization as Serialization import qualified Hydra.System as System
src/main/haskell/Hydra/Json/Yaml/Decode.hs view
@@ -26,6 +26,7 @@ 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
src/main/haskell/Hydra/Json/Yaml/Encode.hs view
@@ -26,6 +26,7 @@ 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
src/main/haskell/Hydra/Kernel.hs view
@@ -6,12 +6,12 @@ - Hydra.Encode.Core - Hydra.Extract.Core - Hydra.Extract.Util-- Hydra.Show.Variants+- Hydra.Print.Variants - Hydra.Codegen - Hydra.Json.Parser - Hydra.Json.Writer - Hydra.Parsers-- Hydra.Show.Core+- Hydra.Print.Core - Hydra.Topology -}
src/main/haskell/Hydra/Languages.hs view
@@ -23,6 +23,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular
src/main/haskell/Hydra/Lexical.hs view
@@ -31,11 +31,12 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular@@ -213,7 +214,7 @@ Core.TermRecord v0 -> decode (Maps.fromList (Lists.map (\field -> (Core.fieldName field, (Core.fieldTerm field))) (Core.recordFields v0))) _ -> Left (Errors.ErrorResolution (Errors.ResolutionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "record",- Errors.unexpectedShapeErrorActual = (ShowCore.term term)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)}))) -- | Match a term against a union type, dispatching on the injected variant to the appropriate decoder. Variable terms are dereferenced through the graph before matching. matchUnion :: Graph.Graph -> Core.Name -> [(Core.Name, (Core.Term -> Either Errors.Error t0))] -> Core.Term -> Either Errors.Error t0@@ -232,10 +233,10 @@ Errors.noMatchingFieldErrorFieldName = fname})))) (\f -> f val)) in (Logic.ifElse (Equality.equal (Core.unName (Core.injectionTypeName v0)) (Core.unName tname)) exp (Left (Errors.ErrorResolution (Errors.ResolutionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = (Strings.cat2 "injection for type " (Core.unName tname)),- Errors.unexpectedShapeErrorActual = (ShowCore.term term)})))))+ Errors.unexpectedShapeErrorActual = (PrintCore.term term)}))))) _ -> Left (Errors.ErrorResolution (Errors.ResolutionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = (Strings.cat2 "injection for type " (Core.unName tname)),- Errors.unexpectedShapeErrorActual = (ShowCore.term stripped)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.term stripped)}))) -- | Build a (fieldName, decoder) pair for a unit-valued union variant: the decoder ignores its argument and returns a fixed value matchUnitField :: t0 -> t1 -> (t0, (t2 -> Either t3 t1))
src/main/haskell/Hydra/Lib/Chars.hs view
@@ -21,6 +21,7 @@ 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@@ -35,6 +36,34 @@ import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum) import qualified Data.Scientific as Sci +isAlpha :: Packaging.PrimitiveDefinition+isAlpha =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.chars.isAlpha"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Check whether a character is alphabetic."),+ Packaging.entityMetadataComments = [+ "True if the argument is a Unicode letter \8212 any of the general categories L* (Lu, Ll, Lt, Lm, Lo) \8212 and false otherwise.",+ "The argument is interpreted as a Unicode code point: arguments outside the valid code-point range [0, 0x10FFFF] yield an implementation-defined result (typically false).",+ "Alphabetic is broader than cased: letters in scripts without a case distinction are included. isAlphaNum is true whenever isAlpha is true.",+ "Total. Corresponds to Haskell's Data.Char.isAlpha :: Char -> Bool."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral (Core.LiteralTypeInteger Core.IntegerTypeInt32)),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeBoolean)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ isAlphaNum :: Packaging.PrimitiveDefinition isAlphaNum = Packaging.PrimitiveDefinition {@@ -46,6 +75,33 @@ "The argument is interpreted as a Unicode code point: arguments outside the valid code-point range [0, 0x10FFFF] yield an implementation-defined result (typically false).", "The classification is based on Unicode general categories (any of L*, Nd, Nl, No).", "Total. Corresponds to Haskell's Data.Char.isAlphaNum :: Char -> Bool."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral (Core.LiteralTypeInteger Core.IntegerTypeInt32)),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeBoolean)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++isDigit :: Packaging.PrimitiveDefinition+isDigit =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.chars.isDigit"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Check whether a character is an ASCII decimal digit."),+ Packaging.entityMetadataComments = [+ "True if the argument is one of the ten code points '0' through '9' (U+0030 to U+0039), and false otherwise.",+ "Unlike the other predicates in this module, this one is deliberately ASCII-only: decimal digits outside the ASCII range (general category Nd) are rejected here, though isAlphaNum accepts them.",+ "Total. Corresponds to Haskell's Data.Char.isDigit :: Char -> Bool."], Packaging.entityMetadataSeeAlso = [], Packaging.entityMetadataLifecycle = Nothing})), Packaging.primitiveDefinitionSignature = Typing.TermSignature {
src/main/haskell/Hydra/Lib/Defaults.hs view
@@ -14,6 +14,26 @@ defaultImplementations = M.fromList [ (+ Core.Name "hydra.lib.eithers.apply",+ (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"))}))}))}))}))}))),+ ( Core.Name "hydra.lib.eithers.bimap", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "f"),@@ -60,6 +80,59 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "f"))})), Core.applicationArgument = (Core.TermVariable (Core.Name "e"))}))}))}))), (+ Core.Name "hydra.lib.eithers.compose",+ (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"))}))}))}))}))),+ (+ Core.Name "hydra.lib.eithers.foldList",+ (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"))}))}))}))}))),+ ( Core.Name "hydra.lib.eithers.foldl", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "f"),@@ -350,6 +423,56 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.toList")), Core.applicationArgument = (Core.TermVariable (Core.Name "s"))}))}))}))}))}))), (+ Core.Name "hydra.lib.eithers.partition",+ (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"))}))}))),+ ( Core.Name "hydra.lib.eithers.partitionEithers", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "xs"),@@ -400,6 +523,12 @@ Core.applicationArgument = (Core.TermPair (Core.TermList [], (Core.TermList [])))})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))), (+ Core.Name "hydra.lib.eithers.pure",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermEither (Right (Core.TermVariable (Core.Name "x"))))}))),+ ( Core.Name "hydra.lib.eithers.rights", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "xs"),@@ -478,6 +607,21 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})), Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))}))), (+ Core.Name "hydra.lib.equality.notEqual",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "y"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.logic.not")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.equality.equal")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))}))}))),+ ( Core.Name "hydra.lib.lists.bind", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "xs"),@@ -690,6 +834,21 @@ Core.applicationArgument = (Core.TermPair (Core.TermList [], (Core.TermList [])))})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))), (+ Core.Name "hydra.lib.lists.takeWhile",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "p"),+ 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.TermVariable (Core.Name "hydra.lib.pairs.first")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.span")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "p"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))}))),+ ( Core.Name "hydra.lib.logic.and", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "a"),@@ -1047,6 +1206,43 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))})), Core.applicationArgument = (Core.TermVariable (Core.Name "g"))}))}))}))}))), (+ Core.Name "hydra.lib.optionals.foldList",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "f"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "acc"),+ 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 "m"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (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.optionals.bind")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "m"))})),+ 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 "f")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))}))}))}))})),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))}))),+ ( Core.Name "hydra.lib.optionals.fromOptional", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "def"),@@ -1065,6 +1261,37 @@ Core.lambdaDomain = Nothing, Core.lambdaBody = (Core.TermVariable (Core.Name "x"))}))}))}))}))), (+ Core.Name "hydra.lib.optionals.givens",+ (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 "m"),+ 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.optionals.cases")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "m"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))})),+ Core.applicationArgument = (Core.TermLambda (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.TermVariable (Core.Name "hydra.lib.lists.cons")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "v"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))}))}))}))})),+ Core.applicationArgument = (Core.TermList [])})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))),+ ( Core.Name "hydra.lib.optionals.isGiven", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "m"),@@ -1115,6 +1342,49 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "f")), Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))))}))}))}))}))), (+ Core.Name "hydra.lib.optionals.mapList",+ (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.optionals.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.optionals.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.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (Core.TermList [])}))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))),+ ( Core.Name "hydra.lib.optionals.mapOptional", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "f"),@@ -1130,6 +1400,60 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "f"))})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))}))), (+ Core.Name "hydra.lib.optionals.mapSet",+ (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.optionals.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.optionals.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.optionals.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.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (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"))}))}))}))}))}))),+ ( Core.Name "hydra.lib.optionals.pure", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "x"),@@ -1152,6 +1476,24 @@ Core.lambdaBody = (Core.TermList [ Core.TermVariable (Core.Name "x")])}))}))}))), (+ Core.Name "hydra.lib.optionals.withDefault",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "def"),+ 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.TermVariable (Core.Name "def"))})),+ Core.applicationArgument = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermVariable (Core.Name "x"))}))}))}))}))),+ ( Core.Name "hydra.lib.pairs.bimap", (Core.TermLambda (Core.Lambda { Core.lambdaParameter = (Core.Name "f"),@@ -1210,6 +1552,23 @@ Core.applicationArgument = (Core.TermApplication (Core.Application { Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.toList")), Core.applicationArgument = (Core.TermVariable (Core.Name "s1"))}))}))}))}))),+ (+ Core.Name "hydra.lib.sets.filter",+ (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "p"),+ 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.TermVariable (Core.Name "hydra.lib.sets.fromList")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.filter")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "p"))})),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.toList")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "s"))}))}))}))}))}))), ( Core.Name "hydra.lib.sets.intersection", (Core.TermLambda (Core.Lambda {
src/main/haskell/Hydra/Lib/Effects.hs view
@@ -21,6 +21,7 @@ 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@@ -160,6 +161,52 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +foldList :: Packaging.PrimitiveDefinition+foldList =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.effects.foldList"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Left-fold over a list with an effect-returning function."),+ Packaging.entityMetadataComments = [+ "foldList(f, acc0, xs) describes an effectful left fold over xs, sequencing applications of f from left to right.",+ "New name for foldl (retained as a deprecated alias until the #417 breaking wave removes it)."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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.TypeEffect (Core.TypeVariable (Core.Name "x")))}))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "y"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeEffect (Core.TypeVariable (Core.Name "x")))}},+ Packaging.primitiveDefinitionIsPure = False,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ foldl :: Packaging.PrimitiveDefinition foldl = Packaging.PrimitiveDefinition {@@ -316,6 +363,47 @@ Typing.termSignatureResult = Typing.Result { Typing.resultDescription = Nothing, Typing.resultType = (Core.TypeEffect (Core.TypeOptional (Core.TypeVariable (Core.Name "y"))))}},+ Packaging.primitiveDefinitionIsPure = False,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++mapSet :: Packaging.PrimitiveDefinition+mapSet =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.effects.mapSet"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Map an effect-returning function over a set."),+ Packaging.entityMetadataComments = [+ "mapSet(f, s) describes an effectful computation which applies f to each element of s, sequencing the effects in ascending element order (the order is normative, since the effects are observable), and collects the results as a set, deduplicated by the result type's ordering.",+ "Requires 'ordering' constraints on both element types (the set type contract)."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "y"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeEffect (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeSet (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeEffect (Core.TypeSet (Core.TypeVariable (Core.Name "y"))))}}, Packaging.primitiveDefinitionIsPure = False, Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing}
src/main/haskell/Hydra/Lib/Eithers.hs view
@@ -21,6 +21,7 @@ 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@@ -35,6 +36,73 @@ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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 "arg1"),+ Typing.parameterDescription = Nothing,+ 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 {@@ -180,6 +248,80 @@ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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 "arg1"),+ Typing.parameterDescription = Nothing,+ 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 "arg2"),+ Typing.parameterDescription = Nothing,+ 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 {@@ -232,6 +374,92 @@ 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.",+ "New name for foldl (retained as a deprecated alias until the #417 breaking wave removes it).",+ "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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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 "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ 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"))}))}))}))})))}+ foldl :: Packaging.PrimitiveDefinition foldl = Packaging.PrimitiveDefinition {@@ -911,6 +1139,90 @@ 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.",+ "New name for partitionEithers (which is retained as a deprecated alias until the #417 breaking wave removes it).",+ "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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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"))}))})))}+ partitionEithers :: Packaging.PrimitiveDefinition partitionEithers = Packaging.PrimitiveDefinition {@@ -993,6 +1305,44 @@ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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 =
src/main/haskell/Hydra/Lib/Equality.hs view
@@ -21,6 +21,7 @@ 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@@ -388,3 +389,51 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))})), Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})), Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))})))}++notEqual :: Packaging.PrimitiveDefinition+notEqual =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.equality.notEqual"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Check whether two values are unequal."),+ Packaging.entityMetadataComments = [+ "notEqual(x, y) = logic.not(equal(x, y)); this defining equation is the specification, and the default implementation.",+ "Requires an 'equality' type-class constraint on the argument type.",+ "Total. Corresponds to Haskell's (/=) :: Eq a => a -> a -> Bool."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "equality")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ 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 "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "y"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.logic.not")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.equality.equal")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))}))})))}
src/main/haskell/Hydra/Lib/Files.hs view
@@ -21,6 +21,7 @@ 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
+ src/main/haskell/Hydra/Lib/Functions.hs view
@@ -0,0 +1,240 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Primitives in the hydra.lib.functions module.++module Hydra.Lib.Functions 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++compose :: Packaging.PrimitiveDefinition+compose =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.functions.compose"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Compose two functions."),+ Packaging.entityMetadataComments = [+ "compose(g, f, x) = g(f(x)); this defining equation is the specification.",+ "The outer function comes first: f is applied to x, and g is applied to the result.",+ "This is ordinary function composition, distinct from the Kleisli compose primitives of the monad modules.",+ "Total. Corresponds to Haskell's (.) :: (b -> c) -> (a -> b) -> a -> c."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t1"),+ Typing.typeParameterConstraints = []},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t2"),+ Typing.typeParameterConstraints = []},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t3"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t2")),+ Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "t3"))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t1")),+ Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "t2"))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t1")),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeVariable (Core.Name "t3"))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "g"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "f"),+ 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.TermVariable (Core.Name "g")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "f")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))}))}))}))})))}++const :: Packaging.PrimitiveDefinition+const =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.functions.const"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the first argument, ignoring the second."),+ Packaging.entityMetadataComments = [+ "const(x, y) = x; this defining equation is the specification.",+ "Partially applied, const(x) is the constant function which returns x on every input.",+ "Total. Corresponds to Haskell's const :: a -> b -> a."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t1"),+ Typing.typeParameterConstraints = []},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t2"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t1")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t2")),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeVariable (Core.Name "t1"))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "y"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermVariable (Core.Name "x"))}))})))}++flip :: Packaging.PrimitiveDefinition+flip =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.functions.flip"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Swap the argument order of a binary function."),+ Packaging.entityMetadataComments = [+ "flip(f, x, y) = f(y, x); this defining equation is the specification.",+ "Total. Corresponds to Haskell's flip :: (a -> b -> c) -> b -> a -> c."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t1"),+ Typing.typeParameterConstraints = []},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t2"),+ Typing.typeParameterConstraints = []},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t3"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t1")),+ Core.functionTypeCodomain = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "t2")),+ Core.functionTypeCodomain = (Core.TypeVariable (Core.Name "t3"))}))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t2")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t1")),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeVariable (Core.Name "t3"))}},+ 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 "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (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 "f")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))}))}))})))}++identity :: Packaging.PrimitiveDefinition+identity =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.functions.identity"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the argument unchanged."),+ Packaging.entityMetadataComments = [+ "identity(x) = x; this defining equation is the specification. The polymorphic identity function.",+ "identity is the unit of compose: compose(identity, f) and compose(f, identity) are both f.",+ "Total. Corresponds to Haskell's id :: a -> a."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "t1"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "t1")),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeVariable (Core.Name "t1"))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermVariable (Core.Name "x"))})))}
src/main/haskell/Hydra/Lib/Hashing.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Lists.hs view
@@ -21,6 +21,7 @@ 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@@ -75,6 +76,41 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +at :: Packaging.PrimitiveDefinition+at =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.at"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the element at the given index, or Nothing if out of bounds."),+ Packaging.entityMetadataComments = [+ "at(i, xs) returns Just(xs[i]) if 0 <= i < length(xs), or Nothing otherwise.",+ "New name for maybeAt (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Wraps the Haskell (!!) operator, which is partial, in maybe to make out-of-bounds total."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral (Core.LiteralTypeInteger Core.IntegerTypeInt32)),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x")))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ bind :: Packaging.PrimitiveDefinition bind = Packaging.PrimitiveDefinition {@@ -138,6 +174,55 @@ Core.applicationArgument = (Core.TermList [])})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))})))} +compose :: Packaging.PrimitiveDefinition+compose =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.compose"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Compose two functions that return lists (Kleisli composition in the list monad)."),+ Packaging.entityMetadataComments = [+ "compose(f, g, x) is bind(f(x), g); this defining equation is the specification. The results of applying g to each element of f(x) are concatenated in order.",+ "Total. Corresponds to Kleisli composition (>=>) in the list monad."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeList (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "y")),+ Core.functionTypeCodomain = (Core.TypeList (Core.TypeVariable (Core.Name "z")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeList (Core.TypeVariable (Core.Name "z")))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ concat :: Packaging.PrimitiveDefinition concat = Packaging.PrimitiveDefinition {@@ -235,6 +320,38 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +distinct :: Packaging.PrimitiveDefinition+distinct =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.distinct"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Remove duplicate elements from a list."),+ Packaging.entityMetadataComments = [+ "distinct(xs) returns the list of distinct elements of xs, in the order of their first occurrence.",+ "New name for nub (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Requires an 'equality' constraint on the element type.",+ "Total. Corresponds to Haskell's Data.List.nub :: Eq a => [a] -> [a]."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "equality")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ 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 = Nothing}+ drop :: Packaging.PrimitiveDefinition drop = Packaging.PrimitiveDefinition {@@ -481,6 +598,53 @@ Core.applicationArgument = (Core.TermOptional Nothing)})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))})))} +foldList :: Packaging.PrimitiveDefinition+foldList =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.foldList"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Left-fold a list in the list monad (a nondeterministic fold)."),+ Packaging.entityMetadataComments = [+ "foldList(f, acc0, xs) folds xs from the left, branching the accumulator over every result of the step function at each element: after each element the set of accumulators is replaced by all results of applying f to each current accumulator and that element.",+ "foldList(f, acc0, xs) is foldl(\\macc el -> bind(macc, \\acc -> f(acc, el)), pure(acc0), xs); this defining equation is the specification. For the empty list the result is pure(acc0).",+ "Total on finite inputs. The list-monad instance of the monadic left fold."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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.TypeList (Core.TypeVariable (Core.Name "x")))}))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (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 = Nothing}+ foldl :: Packaging.PrimitiveDefinition foldl = Packaging.PrimitiveDefinition {@@ -605,6 +769,66 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +head :: Packaging.PrimitiveDefinition+head =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.head"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the first element, or Nothing if the list is empty."),+ Packaging.entityMetadataComments = [+ "head(xs) returns Just(x) where x is the first element of xs, or Nothing if xs is empty.",+ "New name for maybeHead (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Wraps Haskell's partial head in maybe."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x")))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++init :: Packaging.PrimitiveDefinition+init =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.init"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return all elements except the last, or Nothing if the list is empty."),+ Packaging.entityMetadataComments = [+ "init(xs) returns Just(ys) where ys is xs with its last element removed, or Nothing if xs is empty.",+ "New name for maybeInit (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Wraps Haskell's partial init in maybe."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeList (Core.TypeVariable (Core.Name "x"))))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ intercalate :: Packaging.PrimitiveDefinition intercalate = Packaging.PrimitiveDefinition {@@ -673,6 +897,71 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +join :: Packaging.PrimitiveDefinition+join =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.join"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Intercalate a list of lists with a separator list between each."),+ Packaging.entityMetadataComments = [+ "join(sep, xss) returns the concatenation of xss with sep inserted between consecutive lists. Equivalent to concat(intersperse(sep, xss)).",+ "New name for intercalate (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Corresponds to Haskell's intercalate :: [a] -> [[a]] -> [a]."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeList (Core.TypeVariable (Core.Name "x")))),+ 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 = Nothing}++last :: Packaging.PrimitiveDefinition+last =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.last"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the last element, or Nothing if the list is empty."),+ Packaging.entityMetadataComments = [+ "last(xs) returns Just(x) where x is the last element of xs, or Nothing if xs is empty.",+ "New name for maybeLast (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Wraps Haskell's partial last in maybe."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x")))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ length :: Packaging.PrimitiveDefinition length = Packaging.PrimitiveDefinition {@@ -742,6 +1031,127 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +mapList :: Packaging.PrimitiveDefinition+mapList =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.mapList"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Traverse a list in the list monad."),+ Packaging.entityMetadataComments = [+ "mapList(f, xs) returns all combinations obtainable by choosing one element from f(x) for each x in xs: each result list has the same length as xs, with its element at each position drawn from the corresponding f(x).",+ "Results appear in the lexicographic order of the choices, with the choice for the first element varying slowest. The number of results is the product of the lengths of the lists f(x); if f(x) is empty for any element, the result is the empty list; mapList(f, []) is pure([]).",+ "Total on finite inputs. The list-monad instance of the traversal family."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeList (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeList (Core.TypeList (Core.TypeVariable (Core.Name "y"))))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++mapOptional :: Packaging.PrimitiveDefinition+mapOptional =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.mapOptional"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Traverse an optional value in the list monad."),+ Packaging.entityMetadataComments = [+ "mapOptional(f, m) returns the single-element list containing none when m is none; for given(x) it returns given(y) for each element y of f(x), in order.",+ "Total on finite inputs. The list-monad instance of the traversal family, applied to the optional container."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeList (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeList (Core.TypeOptional (Core.TypeVariable (Core.Name "y"))))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++mapSet :: Packaging.PrimitiveDefinition+mapSet =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.mapSet"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Traverse a set in the list monad."),+ Packaging.entityMetadataComments = [+ "mapSet(f, s) returns all sets obtainable by choosing one element from f(x) for each element x of s. Elements of s are traversed in ascending order, and results appear in the lexicographic order of the choices, with the choice for the least element varying slowest.",+ "A result set may have fewer elements than s when distinct choices coincide. If f(x) is empty for any element, the result is the empty list; for the empty set the result is the single-element list containing the empty set.",+ "Requires 'ordering' constraints on both element types (the set type contract)."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "y"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeList (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeSet (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeList (Core.TypeSet (Core.TypeVariable (Core.Name "y"))))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ maybeAt :: Packaging.PrimitiveDefinition maybeAt = Packaging.PrimitiveDefinition {@@ -892,6 +1302,43 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +member :: Packaging.PrimitiveDefinition+member =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.member"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Test whether an element is in a list."),+ Packaging.entityMetadataComments = [+ "member(x, xs) returns true iff some element of xs is equal to x.",+ "New name for elem (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Requires an 'equality' constraint on the element type.",+ "Total. Corresponds to Haskell's elem :: Eq a => a -> [a] -> Bool."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "equality")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeBoolean)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ nub :: Packaging.PrimitiveDefinition nub = Packaging.PrimitiveDefinition {@@ -1189,6 +1636,48 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +sortBy :: Packaging.PrimitiveDefinition+sortBy =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.sortBy"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Sort a list using a key-extraction function."),+ Packaging.entityMetadataComments = [+ "sortBy(f, xs) returns xs sorted in ascending order by f(x) for each element x. Sort is stable: elements with equal keys preserve their original relative order.",+ "New name for sortOn (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Requires an 'ordering' constraint on the key type.",+ "Total. Corresponds to Haskell's Data.List.sortOn :: Ord b => (a -> b) -> [a] -> [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 = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ 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 "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ 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 = Nothing}+ sortOn :: Packaging.PrimitiveDefinition sortOn = Packaging.PrimitiveDefinition {@@ -1324,6 +1813,36 @@ Core.applicationArgument = (Core.TermPair (Core.TermList [], (Core.TermList [])))})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))})))} +tail :: Packaging.PrimitiveDefinition+tail =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.tail"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return all elements except the first, or Nothing if the list is empty."),+ Packaging.entityMetadataComments = [+ "tail(xs) returns Just(ys) where ys is xs with its first element removed, or Nothing if xs is empty.",+ "New name for maybeTail (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Wraps Haskell's partial tail in maybe."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeList (Core.TypeVariable (Core.Name "x"))))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ take :: Packaging.PrimitiveDefinition take = Packaging.PrimitiveDefinition {@@ -1357,6 +1876,55 @@ Packaging.primitiveDefinitionIsPure = True, Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing}++takeWhile :: Packaging.PrimitiveDefinition+takeWhile =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.lists.takeWhile"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Take elements from the beginning of a list while a predicate holds."),+ Packaging.entityMetadataComments = [+ "takeWhile(p, xs) returns the longest prefix of xs whose elements all satisfy p. If p fails for the first element the result is the empty list; if p holds for every element the result is xs unchanged.",+ "dropWhile returns the complementary suffix, and span(p, xs) returns the pair of takeWhile(p, xs) and dropWhile(p, xs).",+ "Total. Corresponds to Haskell's takeWhile :: (a -> Bool) -> [a] -> [a]."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeLiteral Core.LiteralTypeBoolean)})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ 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 "p"),+ 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.TermVariable (Core.Name "hydra.lib.pairs.first")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.span")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "p"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))})))} transpose :: Packaging.PrimitiveDefinition transpose =
src/main/haskell/Hydra/Lib/Literals.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Logic.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Maps.hs view
@@ -21,6 +21,7 @@ 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@@ -253,6 +254,52 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +difference :: Packaging.PrimitiveDefinition+difference =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.maps.difference"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Compute the difference of two maps by key."),+ Packaging.entityMetadataComments = [+ "difference(m1, m2) returns the map containing exactly the bindings of m1 whose keys do not appear in m2. Only the key set of m2 matters; its values are ignored.",+ "The key-set analogue is hydra.lib.sets.difference.",+ "Requires an 'ordering' constraint on the key type.",+ "Total. Corresponds to Haskell's Data.Map.difference :: Ord k => Map k v -> Map k v -> Map k v."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "k"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "v"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))})),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))}))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ elems :: Packaging.PrimitiveDefinition elems = Packaging.PrimitiveDefinition {@@ -607,6 +654,52 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +intersection :: Packaging.PrimitiveDefinition+intersection =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.maps.intersection"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Compute the intersection of two maps by key."),+ Packaging.entityMetadataComments = [+ "intersection(m1, m2) returns the map containing exactly the bindings of m1 whose keys also appear in m2. On each common key the value is taken from m1; only the key set of m2 matters, and its values are ignored.",+ "The key-set analogue is hydra.lib.sets.intersection.",+ "Requires an 'ordering' constraint on the key type.",+ "Total. Corresponds to Haskell's Data.Map.intersection :: Ord k => Map k v -> Map k v -> Map k v."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "k"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "v"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))})),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))}))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ keys :: Packaging.PrimitiveDefinition keys = Packaging.PrimitiveDefinition {@@ -1058,6 +1151,45 @@ Typing.parameterType = (Core.TypeMap (Core.MapType { Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")), Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))})),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))}))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++unions :: Packaging.PrimitiveDefinition+unions =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.maps.unions"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Compute the left-biased union of a list of maps."),+ Packaging.entityMetadataComments = [+ "unions(ms) returns the map containing every binding of every map in ms; when a key occurs in more than one map, the binding from the earliest such map in the list wins.",+ "unions(ms) is equivalent to folding union over ms from the left, starting from empty; unions([]) is empty, and the bias matches union and hydra.lib.sets.unions.",+ "Requires an 'ordering' constraint on the key type.",+ "Total. Corresponds to Haskell's Data.Map.unions :: Ord k => [Map k v] -> Map k v."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "k"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "v"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeMap (Core.MapType {+ Core.mapTypeKeys = (Core.TypeVariable (Core.Name "k")),+ Core.mapTypeValues = (Core.TypeVariable (Core.Name "v"))}))), Typing.parameterIsLazy = False}], Typing.termSignatureResult = Typing.Result { Typing.resultDescription = Nothing,
src/main/haskell/Hydra/Lib/Math.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Optionals.hs view
@@ -21,6 +21,7 @@ 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@@ -316,6 +317,87 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))})), Core.applicationArgument = (Core.TermVariable (Core.Name "g"))}))}))}))})))} +foldList :: Packaging.PrimitiveDefinition+foldList =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.optionals.foldList"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Left-fold over a list with an optional-returning function, short-circuiting on none."),+ Packaging.entityMetadataComments = [+ "foldList(f, acc, xs) folds f over xs from the left, iterating while each application yields given, and returns none as soon as any step yields none. If every element is processed, the result is given of the final accumulator.",+ "foldList(f, acc, xs) is lists.foldl(\\m y -> bind(m, \\x -> f(x, y)), pure(acc), xs); this defining equation is the specification, and the default implementation.",+ "Total. Corresponds to a short-circuiting foldM specialised to Maybe."],+ 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 "arg0"),+ Typing.parameterDescription = Nothing,+ 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.TypeOptional (Core.TypeVariable (Core.Name "x")))}))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg2"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "y"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (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 "acc"),+ 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 "m"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (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.optionals.bind")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "m"))})),+ 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 "f")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "x"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "y"))}))}))}))}))}))})),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))})))}+ fromOptional :: Packaging.PrimitiveDefinition fromOptional = Packaging.PrimitiveDefinition {@@ -365,6 +447,64 @@ Core.lambdaDomain = Nothing, Core.lambdaBody = (Core.TermVariable (Core.Name "x"))}))}))}))})))} +givens :: Packaging.PrimitiveDefinition+givens =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.optionals.givens"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Concatenate optionals, keeping only the present values."),+ Packaging.entityMetadataComments = [+ "givens(xs) returns the list of contained values from given elements of xs, in original order; none elements are discarded.",+ "New name for cat (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Corresponds to Haskell's Data.Maybe.catMaybes :: [Maybe a] -> [a]."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeOptional (Core.TypeVariable (Core.Name "x")))),+ 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 "m"),+ 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.optionals.cases")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "m"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))})),+ Core.applicationArgument = (Core.TermLambda (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.TermVariable (Core.Name "hydra.lib.lists.cons")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "v"))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "acc"))}))}))}))}))}))})),+ Core.applicationArgument = (Core.TermList [])})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))})))}+ isGiven :: Packaging.PrimitiveDefinition isGiven = Packaging.PrimitiveDefinition {@@ -504,6 +644,85 @@ Core.applicationFunction = (Core.TermVariable (Core.Name "f")), Core.applicationArgument = (Core.TermVariable (Core.Name "x"))}))))}))}))}))})))} +mapList :: Packaging.PrimitiveDefinition+mapList =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.optionals.mapList"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Traverse a list in the optional monad."),+ Packaging.entityMetadataComments = [+ "mapList(f, xs) applies f to each element of xs. If every application yields given, the result is given of the list of contained values, in their original order. The result is none as soon as any application yields none.",+ "Total. Corresponds to Haskell's traverse :: (a -> Maybe b) -> [a] -> 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.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeOptional (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (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.optionals.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.optionals.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.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (Core.TermList [])}))})),+ Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))})))}+ mapOptional :: Packaging.PrimitiveDefinition mapOptional = Packaging.PrimitiveDefinition {@@ -555,6 +774,99 @@ Core.applicationArgument = (Core.TermVariable (Core.Name "f"))})), Core.applicationArgument = (Core.TermVariable (Core.Name "xs"))}))}))}))})))} +mapSet :: Packaging.PrimitiveDefinition+mapSet =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.optionals.mapSet"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Traverse a set in the optional monad."),+ Packaging.entityMetadataComments = [+ "mapSet(f, s) applies f to each element of s. If every application yields given, the result is given of the set of contained values, deduplicated by the result type's ordering. The result is none as soon as any application yields none.",+ "Requires 'ordering' constraints on both element types (the set type contract).",+ "Total. Corresponds to a traverse-style operation specialised to Set in the Maybe monad."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]},+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "y"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeOptional (Core.TypeVariable (Core.Name "y")))})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeSet (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (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.optionals.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.optionals.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.optionals.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.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.optionals.pure")),+ Core.applicationArgument = (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"))}))}))}))}))})))}+ pure :: Packaging.PrimitiveDefinition pure = Packaging.PrimitiveDefinition {@@ -628,3 +940,53 @@ Core.lambdaDomain = Nothing, Core.lambdaBody = (Core.TermList [ Core.TermVariable (Core.Name "x")])}))}))})))}++withDefault :: Packaging.PrimitiveDefinition+withDefault =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.optionals.withDefault"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Return the value contained in an optional, falling back to a default if absent."),+ Packaging.entityMetadataComments = [+ "withDefault(def, m) returns x when m is given(x), and def when m is none.",+ "New name for fromOptional (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Corresponds to Haskell's Data.Maybe.fromMaybe :: a -> Maybe a -> a."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = []}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeVariable (Core.Name "x")),+ Typing.parameterIsLazy = True},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeOptional (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeVariable (Core.Name "x"))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "def"),+ 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.TermVariable (Core.Name "def"))})),+ Core.applicationArgument = (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "x"),+ Core.lambdaDomain = Nothing,+ Core.lambdaBody = (Core.TermVariable (Core.Name "x"))}))}))}))})))}
src/main/haskell/Hydra/Lib/Pairs.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Regex.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Lib/Sets.hs view
@@ -21,6 +21,7 @@ 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@@ -166,6 +167,58 @@ Packaging.primitiveDefinitionIsPure = True, Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing}++filter :: Packaging.PrimitiveDefinition+filter =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.sets.filter"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Filter a set by a predicate."),+ Packaging.entityMetadataComments = [+ "filter(p, s) returns the subset of s containing exactly the elements x for which p(x) is true.",+ "Requires an 'ordering' constraint on the element type.",+ "Total. Corresponds to Haskell's Data.Set.filter :: (a -> Bool) -> Set a -> Set a."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [+ Typing.TypeParameter {+ Typing.typeParameterName = (Core.Name "x"),+ Typing.typeParameterConstraints = [+ Core.TypeClassConstraintSimple (Core.Name "ordering")]}],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeFunction (Core.FunctionType {+ Core.functionTypeDomain = (Core.TypeVariable (Core.Name "x")),+ Core.functionTypeCodomain = (Core.TypeLiteral Core.LiteralTypeBoolean)})),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeSet (Core.TypeVariable (Core.Name "x"))),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeSet (Core.TypeVariable (Core.Name "x")))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = (Just (Core.TermLambda (Core.Lambda {+ Core.lambdaParameter = (Core.Name "p"),+ 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.TermVariable (Core.Name "hydra.lib.sets.fromList")),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.lists.filter")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "p"))})),+ Core.applicationArgument = (Core.TermApplication (Core.Application {+ Core.applicationFunction = (Core.TermVariable (Core.Name "hydra.lib.sets.toList")),+ Core.applicationArgument = (Core.TermVariable (Core.Name "s"))}))}))}))}))})))} fromList :: Packaging.PrimitiveDefinition fromList =
src/main/haskell/Hydra/Lib/Strings.hs view
@@ -21,6 +21,7 @@ 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@@ -92,6 +93,97 @@ Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing} +charAt :: Packaging.PrimitiveDefinition+charAt =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.strings.charAt"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Get the Unicode code point of the character at a specific index, returning Nothing if out of bounds."),+ Packaging.entityMetadataComments = [+ "charAt(i, s) returns Just(c) where c is the Unicode code point at position i in s, or Nothing if i is negative or i >= length(s).",+ "New name for maybeCharAt (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral (Core.LiteralTypeInteger Core.IntegerTypeInt32)),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeString),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeOptional (Core.TypeLiteral (Core.LiteralTypeInteger Core.IntegerTypeInt32)))}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++concat :: Packaging.PrimitiveDefinition+concat =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.strings.concat"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Concatenate a list of strings into a single string."),+ Packaging.entityMetadataComments = [+ "concat(xs) returns the string formed by concatenating every string in xs in order.",+ "New name for cat (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Corresponds to Haskell's concat :: [String] -> String."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeLiteral Core.LiteralTypeString)),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeString)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++concat2 :: Packaging.PrimitiveDefinition+concat2 =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.strings.concat2"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Concatenate two strings."),+ Packaging.entityMetadataComments = [+ "concat2(s, t) returns the concatenation of s and t.",+ "New name for cat2 (retained as a deprecated alias until the #417 breaking wave removes it).",+ "Total. Corresponds to Haskell's (++) :: String -> String -> String."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeString),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeString),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeString)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}+ fromList :: Packaging.PrimitiveDefinition fromList = Packaging.PrimitiveDefinition {@@ -127,6 +219,38 @@ Packaging.entityMetadataDescription = (Just "Join a list of strings with a separator between each element."), Packaging.entityMetadataComments = [ "intercalate(sep, xs) returns the strings in xs concatenated with sep inserted between each pair of adjacent strings; for the empty list the result is the empty string, and for a singleton list the result is the single string.",+ "Total. Corresponds to Haskell's Data.List.intercalate :: String -> [String] -> String."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeString),+ Typing.parameterIsLazy = False},+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg1"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeList (Core.TypeLiteral Core.LiteralTypeString)),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeLiteral Core.LiteralTypeString)}},+ Packaging.primitiveDefinitionIsPure = True,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++join :: Packaging.PrimitiveDefinition+join =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.strings.join"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Join a list of strings with a separator between each element."),+ Packaging.entityMetadataComments = [+ "join(sep, xs) returns the strings in xs concatenated with sep inserted between each pair of adjacent strings; for the empty list the result is the empty string, and for a singleton list the result is the single string.",+ "New name for intercalate (retained as a deprecated alias until the #417 breaking wave removes it).", "Total. Corresponds to Haskell's Data.List.intercalate :: String -> [String] -> String."], Packaging.entityMetadataSeeAlso = [], Packaging.entityMetadataLifecycle = Nothing})),
src/main/haskell/Hydra/Lib/System.hs view
@@ -21,6 +21,7 @@ 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@@ -172,6 +173,82 @@ Typing.resultType = (Core.TypeEffect (Core.TypeEither (Core.EitherType { Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "hydra.error.system.SystemError")), Core.eitherTypeRight = (Core.TypeVariable (Core.Name "hydra.file.FilePath"))})))}},+ Packaging.primitiveDefinitionIsPure = False,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++readStdin :: Packaging.PrimitiveDefinition+readStdin =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.system.readStdin"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Read the complete contents of standard input as raw bytes."),+ Packaging.entityMetadataComments = [+ "readStdin describes an effectful computation which reads standard input (POSIX file descriptor 0) until end-of-file and returns the complete contents as raw bytes, with no character decoding or newline translation -- the POSIX read() function (XSH, https://pubs.opengroup.org/onlinepubs/9799919799/functions/read.html) applied repeatedly to fd 0 until it signals end-of-file. To interpret the result as text, decode it (e.g. via hydra.lib.text.decodeUtf8). A recoverable I/O failure is returned as left(error); success is returned as right(contents), including the empty byte string if stdin is closed or empty."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeEffect (Core.TypeEither (Core.EitherType {+ Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "hydra.error.system.SystemError")),+ Core.eitherTypeRight = (Core.TypeLiteral Core.LiteralTypeBinary)})))}},+ Packaging.primitiveDefinitionIsPure = False,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++writeStderr :: Packaging.PrimitiveDefinition+writeStderr =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.system.writeStderr"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Write raw bytes to standard error."),+ Packaging.entityMetadataComments = [+ "writeStderr(bytes) describes an effectful computation which writes bytes to standard error (POSIX file descriptor 2), with no character encoding or newline translation -- the POSIX write() function (XSH, https://pubs.opengroup.org/onlinepubs/9799919799/functions/write.html) applied repeatedly to fd 2 until all bytes are written. To write text, encode it first (e.g. via hydra.lib.text.encodeUtf8). A recoverable I/O failure (for example a closed pipe, POSIX EPIPE) is returned as left(error); success is returned as right(unit)."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeBinary),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeEffect (Core.TypeEither (Core.EitherType {+ Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "hydra.error.system.SystemError")),+ Core.eitherTypeRight = Core.TypeUnit})))}},+ Packaging.primitiveDefinitionIsPure = False,+ Packaging.primitiveDefinitionIsTotal = True,+ Packaging.primitiveDefinitionDefaultImplementation = Nothing}++writeStdout :: Packaging.PrimitiveDefinition+writeStdout =+ Packaging.PrimitiveDefinition {+ Packaging.primitiveDefinitionName = (Core.Name "hydra.lib.system.writeStdout"),+ Packaging.primitiveDefinitionMetadata = (Just (Packaging.EntityMetadata {+ Packaging.entityMetadataDescription = (Just "Write raw bytes to standard output."),+ Packaging.entityMetadataComments = [+ "writeStdout(bytes) describes an effectful computation which writes bytes to standard output (POSIX file descriptor 1), with no character encoding or newline translation -- the POSIX write() function (XSH, https://pubs.opengroup.org/onlinepubs/9799919799/functions/write.html) applied repeatedly to fd 1 until all bytes are written. To write text, encode it first (e.g. via hydra.lib.text.encodeUtf8). A recoverable I/O failure (for example a closed pipe, POSIX EPIPE) is returned as left(error); success is returned as right(unit)."],+ Packaging.entityMetadataSeeAlso = [],+ Packaging.entityMetadataLifecycle = Nothing})),+ Packaging.primitiveDefinitionSignature = Typing.TermSignature {+ Typing.termSignatureTypeParameters = [],+ Typing.termSignatureParameters = [+ Typing.Parameter {+ Typing.parameterName = (Core.Name "arg0"),+ Typing.parameterDescription = Nothing,+ Typing.parameterType = (Core.TypeLiteral Core.LiteralTypeBinary),+ Typing.parameterIsLazy = False}],+ Typing.termSignatureResult = Typing.Result {+ Typing.resultDescription = Nothing,+ Typing.resultType = (Core.TypeEffect (Core.TypeEither (Core.EitherType {+ Core.eitherTypeLeft = (Core.TypeVariable (Core.Name "hydra.error.system.SystemError")),+ Core.eitherTypeRight = Core.TypeUnit})))}}, Packaging.primitiveDefinitionIsPure = False, Packaging.primitiveDefinitionIsTotal = True, Packaging.primitiveDefinitionDefaultImplementation = Nothing}
src/main/haskell/Hydra/Lib/Text.hs view
@@ -21,6 +21,7 @@ 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
src/main/haskell/Hydra/Literals.hs view
@@ -22,6 +22,7 @@ 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
src/main/haskell/Hydra/Names.hs view
@@ -34,6 +34,7 @@ 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
src/main/haskell/Hydra/Overlay/Haskell/Dsl/Prims.hs view
@@ -17,7 +17,7 @@ import qualified Hydra.Overlay.Haskell.Dsl.Terms as Terms import Hydra.Overlay.Haskell.Dsl.Terms (ToPrimName(..)) import qualified Hydra.Overlay.Haskell.Dsl.Types as Types-import qualified Hydra.Show.Core as ShowCore+import qualified Hydra.Print.Core as PrintCore import Data.Int import qualified Data.ByteString as B@@ -171,7 +171,7 @@ function :: TermCoder x -> TermCoder y -> TermCoder (x -> y) function dom cod = TermCoder (Types.function (termCoderType dom) (termCoderType cod)) encode decode where- encode cx _g term = Left $ otherErr cx $ "cannot encode term to a function: " ++ ShowCore.term term+ encode cx _g term = Left $ otherErr cx $ "cannot encode term to a function: " ++ PrintCore.term term decode cx _val = Left $ otherErr cx "cannot decode functions to terms" -- | A graph-free TermCoder for function types (issue #446). Instead of calling the reducer to
src/main/haskell/Hydra/Overlay/Haskell/Dsl/Typed/Phantoms.hs view
@@ -14,7 +14,7 @@ import Hydra.Overlay.Haskell.Dsl.Typed.Literals import qualified Hydra.Overlay.Haskell.Dsl.Annotations as Ann import qualified Hydra.Overlay.Haskell.Dsl.Terms as Terms-import qualified Hydra.Show.Core as ShowCore+import qualified Hydra.Print.Core as PrintCore import Hydra.Encoding (encodeBindingName) import Hydra.Decoding (decodeBindingName) @@ -389,7 +389,7 @@ reify2 :: (TypedTerm a -> TypedTerm b -> TypedTerm c) -> TypedTerm (a -> b -> c) reify2 f = case (unTypedTerm $ f (var "x") (var "y")) of TermApplication (Application (TermApplication (Application lhs _)) _) -> TypedTerm lhs- t -> TypedTerm $ Terms.string $ "unexpected term as binary function: " <> ShowCore.term t+ t -> TypedTerm $ Terms.string $ "unexpected term as binary function: " <> PrintCore.term t @@ -457,6 +457,29 @@ termSignatureParameters = zipWith (\i p -> if i `elem` idxs then p {parameterIsLazy = True} else p) [0..] (termSignatureParameters ts)}++-- | Convert a TypeScheme to a TermSignature, replacing the synthesized @arg0, arg1, ...@ parameter+-- names and empty descriptions with an authored @(name, description)@ pair per value parameter.+-- Arity-checked: fails immediately if the number of pairs does not match the number of value+-- parameters peeled from the type (this catches signature/name drift at DSL-load time).+-- Example: sigWithParams [("x", "the value to compare"), ("y", "the value to compare against")] $+-- TypeScheme [Name "x"] (tx ~> tx ~> boolean) Nothing+sigWithParams :: [(String, String)] -> TypeScheme -> TermSignature+sigWithParams pairs ts =+ let s = sig ts+ params = termSignatureParameters s+ n = L.length params+ m = L.length pairs+ in if m /= n+ then error (L.concat ["sigWithParams: ", show m, " (name, description) pair(s) provided for a ",+ show n, "-parameter signature"])+ else s {+ termSignatureParameters =+ zipWith+ (\p (nm, desc) -> p {+ parameterName = Name nm,+ parameterDescription = if L.null desc then Nothing else Just desc})+ params pairs} -- | Build the entity metadata for a primitive from its (always-present) one-line description and -- long-form comments. Each comments element is one logical observation, kept distinct rather than concatenated.
src/main/haskell/Hydra/Overlay/Haskell/Dsl/Typed/Testing.hs view
@@ -234,22 +234,22 @@ removeTypesFromTermRef = TypedTerm $ TermVariable $ Name "hydra.strip.removeTypesFromTerm" showInvalidModuleErrorRef :: TypedTerm (InvalidModuleError -> String)-showInvalidModuleErrorRef = TypedTerm $ TermVariable $ Name "hydra.show.error.packaging.invalidModuleError"+showInvalidModuleErrorRef = TypedTerm $ TermVariable $ Name "hydra.print.error.packaging.invalidModuleError" showInvalidPackageErrorRef :: TypedTerm (InvalidPackageError -> String)-showInvalidPackageErrorRef = TypedTerm $ TermVariable $ Name "hydra.show.error.packaging.invalidPackageError"+showInvalidPackageErrorRef = TypedTerm $ TermVariable $ Name "hydra.print.error.packaging.invalidPackageError" showInvalidTermErrorRef :: TypedTerm (InvalidTermError -> String)-showInvalidTermErrorRef = TypedTerm $ TermVariable $ Name "hydra.show.error.core.invalidTermError"+showInvalidTermErrorRef = TypedTerm $ TermVariable $ Name "hydra.print.error.core.invalidTermError" showTermRef :: TypedTerm (Term -> String)-showTermRef = TypedTerm $ TermVariable $ Name "hydra.show.core.term"+showTermRef = TypedTerm $ TermVariable $ Name "hydra.print.core.term" showTypeRef :: TypedTerm (Type -> String)-showTypeRef = TypedTerm $ TermVariable $ Name "hydra.show.core.type"+showTypeRef = TypedTerm $ TermVariable $ Name "hydra.print.core.type" showTypeSchemeRef :: TypedTerm (TypeScheme -> String)-showTypeSchemeRef = TypedTerm $ TermVariable $ Name "hydra.show.core.typeScheme"+showTypeSchemeRef = TypedTerm $ TermVariable $ Name "hydra.print.core.typeScheme" -- | evalPair for String-typed expressions (identity show) stringEvalPair :: String -> TypedTerm String -> TypedTerm String -> TypedTerm TestCaseWithMetadata
src/main/haskell/Hydra/Overlay/Haskell/Lib/Chars.hs view
@@ -6,9 +6,17 @@ import qualified Data.Char as C +-- | Check whether a character is alphabetic.+isAlpha :: Int -> Bool+isAlpha = C.isAlpha . C.chr+ -- | Check whether a character is alphanumeric. isAlphaNum :: Int -> Bool isAlphaNum = C.isAlphaNum . C.chr++-- | Check whether a character is an ASCII decimal digit.+isDigit :: Int -> Bool+isDigit = C.isDigit . C.chr -- | Check whether a character is lowercase. isLower :: Int -> Bool
src/main/haskell/Hydra/Overlay/Haskell/Lib/Effects.hs view
@@ -3,6 +3,7 @@ module Hydra.Overlay.Haskell.Lib.Effects where import qualified Control.Monad as CM+import qualified Data.Set as S import Prelude hiding (foldl, map, pure) import qualified Prelude as P @@ -19,6 +20,10 @@ compose :: (a -> IO b) -> (b -> IO c) -> a -> IO c compose f g = \x -> f x P.>>= g +-- | Left-fold over a list with an effect-returning function. (Alias of foldl.)+foldList :: (a -> b -> IO a) -> a -> [b] -> IO a+foldList = CM.foldM+ -- | Left-fold over a list with an effect-returning function. foldl :: (a -> b -> IO a) -> a -> [b] -> IO a foldl = CM.foldM@@ -34,6 +39,10 @@ -- | Map an effect-returning function over an optional. mapOptional :: (a -> IO b) -> Maybe a -> IO (Maybe b) mapOptional = CM.mapM++-- | Map an effect-returning function over a set.+mapSet :: Ord b => (a -> IO b) -> S.Set a -> IO (S.Set b)+mapSet f s = P.fmap S.fromList (CM.mapM f (S.toList s)) -- | Lift a pure value into an effect. pure :: a -> IO a
src/main/haskell/Hydra/Overlay/Haskell/Lib/Eithers.hs view
@@ -2,12 +2,17 @@ module Hydra.Overlay.Haskell.Lib.Eithers where +import Prelude hiding (either, map, pure) import qualified Control.Monad as CM import qualified Data.Bifunctor as BF import qualified Data.Either as E import qualified Data.Set as S +-- | Applicative apply for Either: combine a function under Either and an argument under Either.+apply :: Either a (b -> c) -> Either a b -> Either a c+apply ef ex = bind ef (\f -> map f ex)+ -- | Map over both sides of an Either value. bimap :: (a -> c) -> (b -> d) -> Either a b -> Either c d bimap = BF.bimap@@ -16,10 +21,18 @@ bind :: Either a b -> (b -> Either a c) -> Either a c bind = (>>=) +-- | Kleisli composition for Either.+compose :: (a -> Either e b) -> (b -> Either e c) -> a -> Either e c+compose f g x = bind (f x) g+ -- | Eliminate an Either value by applying one of two functions. either :: (a -> c) -> (b -> c) -> Either a b -> c either = E.either +-- | Left-fold over a list with an Either-returning function, short-circuiting on Left. (Alias of foldl.)+foldList :: (a -> b -> Either c a) -> a -> [b] -> Either c a+foldList = CM.foldM+ -- | Left-fold over a list with an Either-returning function, short-circuiting on Left. foldl :: (a -> b -> Either c a) -> a -> [b] -> Either c a foldl = CM.foldM@@ -60,9 +73,17 @@ mapSet :: Ord b => (a -> Either c b) -> S.Set a -> Either c (S.Set b) mapSet f s = fmap S.fromList (CM.mapM f (S.toList s)) +-- | Partition a list of Eithers into lefts and rights. (Alias of partitionEithers.)+partition :: [Either a b] -> ([a], [b])+partition = E.partitionEithers+ -- | Partition a list of Eithers into lefts and rights. partitionEithers :: [Either a b] -> ([a], [b]) partitionEithers = E.partitionEithers++-- | Wrap a value as a Right.+pure :: b -> Either a b+pure = Right -- | Extract all Right values from a list of Eithers. rights :: [Either a b] -> [b]
src/main/haskell/Hydra/Overlay/Haskell/Lib/Equality.hs view
@@ -45,3 +45,7 @@ -- | Return the minimum of two values. min :: Ord a => a -> a -> a min = Prelude.min++-- | Check if two values are unequal.+notEqual :: Eq a => a -> a -> Bool+notEqual = (/=)
+ src/main/haskell/Hydra/Overlay/Haskell/Lib/Functions.hs view
@@ -0,0 +1,22 @@+-- | Haskell implementations of hydra.lib.functions primitives.++module Hydra.Overlay.Haskell.Lib.Functions where++import qualified Prelude as P+++-- | Compose two functions: compose g f x = g (f x).+compose :: (b -> c) -> (a -> b) -> a -> c+compose g f = \x -> g (f x)++-- | Return the first argument, ignoring the second.+const :: a -> b -> a+const x _ = x++-- | Swap the argument order of a binary function.+flip :: (a -> b -> c) -> b -> a -> c+flip f x y = f y x++-- | Return the argument unchanged.+identity :: a -> a+identity = P.id
src/main/haskell/Hydra/Overlay/Haskell/Lib/Lists.hs view
@@ -2,22 +2,35 @@ module Hydra.Overlay.Haskell.Lib.Lists where +import Prelude hiding (compose, head, init, last, map, pure, tail, takeWhile) import Hydra.Util import Hydra.Core import Hydra.Graph import qualified Hydra.Overlay.Haskell.Dsl.Terms as Terms +import qualified Control.Monad as CM import qualified Data.List as L+import qualified Data.Set as S -- | Apply a list of functions to a list of values (applicative style). apply :: [a -> b] -> [a] -> [b] apply = (<*>) +-- | Return the element at the given index, or Nothing if out of bounds. (Alias of maybeAt.)+at :: Int -> [a] -> Maybe a+at i l+ | i < 0 || i >= L.length l = Nothing+ | otherwise = Just (l !! i)+ -- | Apply a function that returns lists to each element and flatten results. bind :: [a] -> (a -> [b]) -> [b] bind = (>>=) +-- | Compose two list-returning functions (Kleisli composition in the list monad).+compose :: (a -> [b]) -> (b -> [c]) -> a -> [c]+compose f g x = f x >>= g+ -- | Concatenate a list of lists. concat :: [[a]] -> [a] concat = L.concat@@ -30,6 +43,10 @@ cons :: a -> [a] -> [a] cons = (:) +-- | Remove duplicate elements from a list. (Alias of nub.)+distinct :: Eq a => [a] -> [a]+distinct = L.nub+ -- | Drop the first n elements from a list. drop :: Int -> [a] -> [a] drop = L.drop@@ -50,6 +67,10 @@ find :: (a -> Bool) -> [a] -> Maybe a find = L.find +-- | Left-fold a list in the list monad (a nondeterministic fold).+foldList :: (a -> b -> [a]) -> a -> [b] -> [a]+foldList = CM.foldM+ -- | Fold a list from the left. -- Strict left fold. Lazy foldl can pile up thunks for accumulator types -- that are field-update records (e.g. PythonModuleMetadata in@@ -67,10 +88,24 @@ group :: Eq a => [a] -> [[a]] group = L.group +-- | Return the first element, or Nothing if the list is empty. (Alias of maybeHead.)+head :: [a] -> Maybe a+head [] = Nothing+head (x:_) = Just x++-- | Return all elements except the last, or Nothing if the list is empty. (Alias of maybeInit.)+init :: [a] -> Maybe [a]+init [] = Nothing+init xs = Just (L.init xs)+ -- | Intercalate a list of lists with a separator list between each. intercalate :: [a] -> [[a]] -> [a] intercalate = L.intercalate +-- | Intercalate a list of lists with a separator list between each. (Alias of intercalate.)+join :: [a] -> [[a]] -> [a]+join = L.intercalate+ -- | Intersperse a value between elements of a list. intersperse :: a -> [a] -> [a] intersperse = L.intersperse@@ -83,6 +118,27 @@ map :: (a -> b) -> [a] -> [b] map = fmap +-- | Traverse a list in the list monad.+mapList :: (a -> [b]) -> [a] -> [[b]]+mapList = CM.mapM++-- | Traverse an optional value in the list monad.+mapOptional :: (a -> [b]) -> Maybe a -> [Maybe b]+mapOptional = traverse++-- | Traverse a set in the list monad.+mapSet :: Ord b => (a -> [b]) -> S.Set a -> [S.Set b]+mapSet f s = fmap S.fromList (CM.mapM f (S.toList s))++-- | Return the last element, or Nothing if the list is empty. (Alias of maybeLast.)+last :: [a] -> Maybe a+last [] = Nothing+last xs = Just (L.last xs)++-- | Test whether an element is in a list. (Alias of elem.)+member :: Eq a => a -> [a] -> Bool+member = L.elem+ -- | Get the element at a specified index in a list, returning Nothing if out of bounds. maybeAt :: Int -> [a] -> Maybe a maybeAt i l@@ -141,6 +197,10 @@ sort :: Ord a => [a] -> [a] sort = L.sort +-- | Sort a list based on a key function. (Alias of sortOn.)+sortBy :: Ord b => (a -> b) -> [a] -> [a]+sortBy = L.sortOn+ -- | Sort a list based on a key function. sortOn :: Ord b => (a -> b) -> [a] -> [a] sortOn = L.sortOn@@ -149,9 +209,18 @@ span :: (a -> Bool) -> [a] -> ([a], [a]) span = L.span +-- | Return all elements except the first, or Nothing if the list is empty. (Alias of maybeTail.)+tail :: [a] -> Maybe [a]+tail [] = Nothing+tail (_:xs) = Just xs+ -- | Take the first n elements from a list. take :: Int -> [a] -> [a] take = L.take++-- | Take elements from the beginning of a list while a predicate holds.+takeWhile :: (a -> Bool) -> [a] -> [a]+takeWhile = L.takeWhile -- | Transpose a list of lists. transpose :: [[a]] -> [[a]]
src/main/haskell/Hydra/Overlay/Haskell/Lib/Maps.hs view
@@ -17,6 +17,10 @@ delete :: Ord k => k -> M.Map k v -> M.Map k v delete = M.delete +-- | Compute the difference of two maps by key.+difference :: Ord k => M.Map k v -> M.Map k v -> M.Map k v+difference = M.difference+ -- | Get the values of a map. elems :: M.Map k v -> [v] elems = M.elems@@ -45,6 +49,10 @@ insert :: Ord k => k -> v -> M.Map k v -> M.Map k v insert = M.insert +-- | Compute the intersection of two maps by key (values from the first map).+intersection :: Ord k => M.Map k v -> M.Map k v -> M.Map k v+intersection = M.intersection+ -- | Get the keys of a map. keys :: M.Map k v -> [k] keys = M.keys@@ -84,3 +92,7 @@ -- | Union two maps, with the first taking precedence. union :: Ord k => M.Map k v -> M.Map k v -> M.Map k v union = M.union++-- | Compute the left-biased union of a list of maps.+unions :: Ord k => [M.Map k v] -> M.Map k v+unions = M.unions
src/main/haskell/Hydra/Overlay/Haskell/Lib/Optionals.hs view
@@ -2,7 +2,10 @@ module Hydra.Overlay.Haskell.Lib.Optionals where +import Prelude hiding (map, pure)+import qualified Control.Monad as CM import qualified Data.Maybe as Y+import qualified Data.Set as S -- | Apply a function to an argument (applicative).@@ -25,10 +28,18 @@ compose :: (a -> Y.Maybe b) -> (b -> Y.Maybe c) -> (a -> Y.Maybe c) compose f g = \x -> f x >>= g +-- | Left-fold over a list with an optional-returning function, short-circuiting on none.+foldList :: (a -> b -> Y.Maybe a) -> a -> [b] -> Y.Maybe a+foldList = CM.foldM+ -- | Get a value from an optional value, or return a default value. fromOptional :: a -> Y.Maybe a -> a fromOptional = Y.fromMaybe +-- | Filter out absent values from a list. (Alias of cat.)+givens :: [Y.Maybe a] -> [a]+givens = Y.catMaybes+ -- | Check if a value is present. isGiven :: Y.Maybe a -> Bool isGiven = Y.isJust@@ -41,10 +52,18 @@ map :: (a -> b) -> Y.Maybe a -> Y.Maybe b map = fmap +-- | Traverse a list in the optional monad.+mapList :: (a -> Y.Maybe b) -> [a] -> Y.Maybe [b]+mapList = CM.mapM+ -- | Map a function over a list and collect present results. mapOptional :: (a -> Y.Maybe b) -> [a] -> [b] mapOptional = Y.mapMaybe +-- | Traverse a set in the optional monad.+mapSet :: Ord b => (a -> Y.Maybe b) -> S.Set a -> Y.Maybe (S.Set b)+mapSet f s = fmap S.fromList (CM.mapM f (S.toList s))+ -- | Lift a value into the optional type. pure :: a -> Y.Maybe a pure = Just@@ -52,3 +71,7 @@ -- | Convert an optional value to a list: a present value becomes [x], an absent value becomes []. toList :: Y.Maybe a -> [a] toList = Y.maybeToList++-- | Get a value from an optional value, or return a default value. (Alias of fromOptional.)+withDefault :: a -> Y.Maybe a -> a+withDefault = Y.fromMaybe
src/main/haskell/Hydra/Overlay/Haskell/Lib/Sets.hs view
@@ -2,6 +2,7 @@ module Hydra.Overlay.Haskell.Lib.Sets where +import Prelude hiding (filter) import qualified Data.Set as S @@ -16,6 +17,10 @@ -- | Create an empty set. empty :: S.Set x empty = S.empty++-- | Filter a set by a predicate.+filter :: Ord x => (x -> Bool) -> S.Set x -> S.Set x+filter = S.filter -- | Create a set from a list. fromList :: Ord x => [x] -> S.Set x
src/main/haskell/Hydra/Overlay/Haskell/Lib/Strings.hs view
@@ -2,6 +2,7 @@ module Hydra.Overlay.Haskell.Lib.Strings where +import Prelude hiding (concat, length, null) import qualified Data.Char as C import qualified Data.List as L import qualified Data.List.Split as LS@@ -15,6 +16,20 @@ cat2 :: String -> String -> String cat2 s1 s2 = s1 ++ s2 +-- | Get the Unicode code point of the character at a specific index. (Alias of maybeCharAt.)+charAt :: Int -> String -> Maybe Int+charAt i s+ | i < 0 || i >= L.length s = Nothing+ | otherwise = Just (C.ord (s !! i))++-- | Concatenate a list of strings into a single string. (Alias of cat.)+concat :: [String] -> String+concat = L.concat++-- | Concatenate two strings. (Alias of cat2.)+concat2 :: String -> String -> String+concat2 s1 s2 = s1 ++ s2+ -- | Convert a list of Unicode code points to a string. fromList :: [Int] -> String fromList = fmap C.chr@@ -22,6 +37,10 @@ -- | Join a list of strings with a separator between each element. intercalate :: String -> [String] -> String intercalate = L.intercalate++-- | Join a list of strings with a separator between each element. (Alias of intercalate.)+join :: String -> [String] -> String+join = L.intercalate -- | Return the length of a string. length :: String -> Int
src/main/haskell/Hydra/Overlay/Haskell/Lib/System.hs view
@@ -14,6 +14,7 @@ import System.Exit (ExitCode(..), exitWith) import qualified System.Directory as Dir import qualified System.Environment as Env+import qualified System.IO as SIO import qualified System.IO.Error as IOE import qualified System.Process as P @@ -66,7 +67,27 @@ E.catch (Right . File.FilePath <$> Dir.getCurrentDirectory) (\e -> pure $ Left $ SystemError.SystemErrorOther (IOE.ioeGetErrorString (e :: IOError))) +-- | Read the complete contents of standard input as raw bytes.+readStdin :: IO (Either SystemError.SystemError BS.ByteString)+readStdin = withStdioError BS.hGetContents SIO.stdin++-- | Write raw bytes to standard error.+writeStderr :: BS.ByteString -> IO (Either SystemError.SystemError ())+writeStderr = withStdioError' BS.hPut SIO.stderr++-- | Write raw bytes to standard output.+writeStdout :: BS.ByteString -> IO (Either SystemError.SystemError ())+writeStdout = withStdioError' BS.hPut SIO.stdout+ -- Helpers (not primitives)++withStdioError :: (SIO.Handle -> IO a) -> SIO.Handle -> IO (Either SystemError.SystemError a)+withStdioError action handle =+ E.catch (Right <$> action handle)+ (\e -> pure $ Left $ SystemError.SystemErrorOther (IOE.ioeGetErrorString (e :: IOError)))++withStdioError' :: (SIO.Handle -> a -> IO ()) -> SIO.Handle -> a -> IO (Either SystemError.SystemError ())+withStdioError' action handle x = withStdioError (`action` x) handle -- | Convert the environment map to the association list System.Process expects. toEnvList :: M.Map System.EnvironmentVariable String -> [(String, String)]
src/main/haskell/Hydra/Overlay/Haskell/Libraries.hs view
@@ -12,6 +12,7 @@ import qualified Hydra.Overlay.Haskell.Lib.Chars as Chars import qualified Hydra.Overlay.Haskell.Lib.Eithers as Eithers import qualified Hydra.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Functions as Functions import qualified Hydra.Overlay.Haskell.Lib.Hashing as Hashing import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals@@ -29,6 +30,7 @@ import qualified Hydra.Lib.Eithers as DefEithers import qualified Hydra.Lib.Equality as DefEquality import qualified Hydra.Lib.Files as DefFiles+import qualified Hydra.Lib.Functions as DefFunctions import qualified Hydra.Lib.Hashing as DefHashing import qualified Hydra.Lib.Lists as DefLists import qualified Hydra.Lib.Literals as DefLiterals@@ -114,7 +116,9 @@ hydraLibChars :: Library hydraLibChars = standardLibrary [+ prim1 DefChars.isAlpha Chars.isAlpha [] int32 boolean, prim1 DefChars.isAlphaNum Chars.isAlphaNum [] int32 boolean,+ prim1 DefChars.isDigit Chars.isDigit [] int32 boolean, prim1 DefChars.isLower Chars.isLower [] int32 boolean, prim1 DefChars.isSpace Chars.isSpace [] int32 boolean, prim1 DefChars.isUpper Chars.isUpper [] int32 boolean,@@ -126,10 +130,12 @@ unsupportedEffectPrimitive DefEffects.apply, unsupportedEffectPrimitive DefEffects.bind, unsupportedEffectPrimitive DefEffects.compose,+ unsupportedEffectPrimitive DefEffects.foldList, unsupportedEffectPrimitive DefEffects.foldl, unsupportedEffectPrimitive DefEffects.map, unsupportedEffectPrimitive DefEffects.mapList, unsupportedEffectPrimitive DefEffects.mapOptional,+ unsupportedEffectPrimitive DefEffects.mapSet, unsupportedEffectPrimitive DefEffects.pure] hydraLibFiles :: Library@@ -148,9 +154,12 @@ hydraLibEithers :: Library hydraLibEithers = standardLibrary [+ prim2 DefEithers.apply Eithers.apply [_x, _y, _z] (Prims.either_ x_ (funT y_ z_)) (Prims.either_ x_ y_) (Prims.either_ x_ z_), prim3 DefEithers.bimap Eithers.bimap [_x, _y, _z, _w] (funT x_ z_) (funT y_ w_) (Prims.either_ x_ y_) (Prims.either_ z_ w_), prim2 DefEithers.bind Eithers.bind [_x, _y, _z] (Prims.either_ x_ y_) (fun y_ (Prims.either_ x_ z_)) (Prims.either_ x_ z_),+ prim3 DefEithers.compose Eithers.compose [_x, _y, _z, _w] (fun x_ (Prims.either_ w_ y_)) (fun y_ (Prims.either_ w_ z_)) x_ (Prims.either_ w_ z_), prim3 DefEithers.either Eithers.either [_x, _y, _z] (funT x_ z_) (funT y_ z_) (Prims.either_ x_ y_) z_,+ prim3 DefEithers.foldList Eithers.foldList [_x, _y, _z] (fun x_ (fun y_ (Prims.either_ z_ x_))) x_ (list y_) (Prims.either_ z_ x_), prim3 DefEithers.foldl Eithers.foldl [_x, _y, _z] (fun x_ (fun y_ (Prims.either_ z_ x_))) x_ (list y_) (Prims.either_ z_ x_), Prims.lazyArgs [0] $ prim2 DefEithers.fromLeft Eithers.fromLeft [_x, _y] x_ (Prims.either_ x_ y_) x_, Prims.lazyArgs [0] $ prim2 DefEithers.fromRight Eithers.fromRight [_x, _y] y_ (Prims.either_ x_ y_) y_,@@ -161,7 +170,9 @@ prim2 DefEithers.mapList Eithers.mapList [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (list x_) (Prims.either_ z_ (list y_)), prim2 DefEithers.mapOptional Eithers.mapOptional [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (optional x_) (Prims.either_ z_ (optional y_)), prim2 DefEithers.mapSet Eithers.mapSet [_x, _y, _z] (fun x_ (Prims.either_ z_ y_)) (set x_) (Prims.either_ z_ (set y_)),+ prim1 DefEithers.partition Eithers.partition [_x, _y] (list $ Prims.either_ x_ y_) (pair (list x_) (list y_)), prim1 DefEithers.partitionEithers Eithers.partitionEithers [_x, _y] (list $ Prims.either_ x_ y_) (pair (list x_) (list y_)),+ prim1 DefEithers.pure Eithers.pure [_x, _y] y_ (Prims.either_ x_ y_), prim1 DefEithers.rights Eithers.rights [_x, _y] (list $ Prims.either_ x_ y_) (list y_)] hydraLibEquality :: Library@@ -174,27 +185,47 @@ prim2 DefEquality.lt Equality.lt [_xOrd] x_ x_ boolean, prim2 DefEquality.lte Equality.lte [_xOrd] x_ x_ boolean, prim2 DefEquality.max Equality.max [_xOrd] x_ x_ x_,- prim2 DefEquality.min Equality.min [_xOrd] x_ x_ x_]+ prim2 DefEquality.min Equality.min [_xOrd] x_ x_ x_,+ prim2 DefEquality.notEqual Equality.notEqual [_xEq] x_ x_ boolean] +hydraLibFunctions :: Library+hydraLibFunctions = standardLibrary [+ prim3 DefFunctions.compose Functions.compose [_x, _y, _z] (funT y_ z_) (funT x_ y_) x_ z_,+ prim2 DefFunctions.const Functions.const [_x, _y] x_ y_ x_,+ prim3 DefFunctions.flip Functions.flip [_x, _y, _z] (funT x_ (funT y_ z_)) y_ x_ z_,+ prim1 DefFunctions.identity Functions.identity [_x] x_ x_]+ hydraLibLists :: Library hydraLibLists = standardLibrary [ prim2 DefLists.apply Lists.apply [_x, _y] (list $ funT x_ y_) (list x_) (list y_),+ prim2 DefLists.at Lists.at [_x] int32 (list x_) (optional x_), prim2 DefLists.bind Lists.bind [_x, _y] (list x_) (fun x_ (list y_)) (list y_),+ prim3 DefLists.compose Lists.compose [_x, _y, _z] (fun x_ (list y_)) (fun y_ (list z_)) x_ (list z_), prim1 DefLists.concat Lists.concat [_x] (list (list x_)) (list x_), prim2 DefLists.concat2 Lists.concat2 [_x] (list x_) (list x_) (list x_), prim2 DefLists.cons Lists.cons [_x] x_ (list x_) (list x_),+ prim1 DefLists.distinct Lists.distinct [_xEq] (list x_) (list x_), prim2 DefLists.drop Lists.drop [_x] int32 (list x_) (list x_), prim2 DefLists.dropWhile Lists.dropWhile [_x] (fun x_ boolean) (list x_) (list x_), prim2 DefLists.elem Lists.elem [_xEq] x_ (list x_) boolean, prim2 DefLists.filter Lists.filter [_x] (fun x_ boolean) (list x_) (list x_), prim2 DefLists.find Lists.find [_x] (fun x_ boolean) (list x_) (optional x_),+ prim3 DefLists.foldList Lists.foldList [_x, _y] (fun x_ (fun y_ (list x_))) x_ (list y_) (list x_), prim3 DefLists.foldl Lists.foldl [_y, _x] (funT y_ (funT x_ y_)) y_ (list x_) y_, prim3 DefLists.foldr Lists.foldr [_x, _y] (funT x_ (funT y_ y_)) y_ (list x_) y_, prim1 DefLists.group Lists.group [_xEq] (list x_) (list (list x_)),+ prim1 DefLists.head Lists.head [_x] (list x_) (optional x_),+ prim1 DefLists.init Lists.init [_x] (list x_) (optional (list x_)), prim2 DefLists.intercalate Lists.intercalate [_x] (list x_) (list (list x_)) (list x_),+ prim2 DefLists.join Lists.join [_x] (list x_) (list (list x_)) (list x_), prim2 DefLists.intersperse Lists.intersperse [_x] x_ (list x_) (list x_),+ prim1 DefLists.last Lists.last [_x] (list x_) (optional x_), prim1 DefLists.length Lists.length [_x] (list x_) int32, prim2 DefLists.map Lists.map [_x, _y] (funT x_ y_) (list x_) (list y_),+ prim2 DefLists.mapList Lists.mapList [_x, _y] (fun x_ (list y_)) (list x_) (list (list y_)),+ prim2 DefLists.mapOptional Lists.mapOptional [_x, _y] (fun x_ (list y_)) (optional x_) (list (optional y_)),+ prim2 DefLists.mapSet Lists.mapSet [_xOrd, _yOrd] (fun x_ (list y_)) (set x_) (list (set y_)),+ prim2 DefLists.member Lists.member [_xEq] x_ (list x_) boolean, prim2 DefLists.maybeAt Lists.maybeAt [_x] int32 (list x_) (optional x_), prim1 DefLists.maybeHead Lists.maybeHead [_x] (list x_) (optional x_), prim1 DefLists.maybeInit Lists.maybeInit [_x] (list x_) (optional (list x_)),@@ -208,9 +239,12 @@ prim1 DefLists.reverse Lists.reverse [_x] (list x_) (list x_), prim1 DefLists.singleton Lists.singleton [_x] x_ (list x_), prim1 DefLists.sort Lists.sort [_xOrd] (list x_) (list x_),+ prim2 DefLists.sortBy Lists.sortBy [_x, _yOrd] (fun x_ y_) (list x_) (list x_), prim2 DefLists.sortOn Lists.sortOn [_x, _yOrd] (fun x_ y_) (list x_) (list x_), prim2 DefLists.span Lists.span [_x] (fun x_ boolean) (list x_) (pair (list x_) (list x_)),+ prim1 DefLists.tail Lists.tail [_x] (list x_) (optional (list x_)), prim2 DefLists.take Lists.take [_x] int32 (list x_) (list x_),+ prim2 DefLists.takeWhile Lists.takeWhile [_x] (fun x_ boolean) (list x_) (list x_), prim1 DefLists.transpose Lists.transpose [_x] (list (list x_)) (list (list x_)), prim1 DefLists.uncons Lists.uncons [_x] (list x_) (optional (pair x_ (list x_))), prim2 DefLists.zip Lists.zip [_x, _y] (list x_) (list y_) (list (pair x_ y_)),@@ -286,6 +320,7 @@ prim3 DefMaps.alter Maps.alter [_v, _kOrd] (fun (optional v_) (optional v_)) k_ mapKv mapKv, prim3 DefMaps.bimap Maps.bimap [_k1Ord, _k2Ord, _v1, _v2] (fun k1_ k2_) (fun v1_ v2_) (Prims.map k1_ v1_) (Prims.map k2_ v2_), prim2 DefMaps.delete Maps.delete [_kOrd, _v] k_ mapKv mapKv,+ prim2 DefMaps.difference Maps.difference [_kOrd, _v] mapKv mapKv mapKv, prim1 DefMaps.elems Maps.elems [_kOrd, _v] mapKv (list v_), prim0 DefMaps.empty Maps.empty [_kOrd, _v] mapKv, prim2 DefMaps.filter Maps.filter [_v, _kOrd] (fun v_ boolean) mapKv mapKv,@@ -293,6 +328,7 @@ Prims.lazyArgs [0] $ prim3 DefMaps.findWithDefault Maps.findWithDefault [_v, _kOrd] v_ k_ mapKv v_, prim1 DefMaps.fromList Maps.fromList [_kOrd, _v] (list $ pair k_ v_) mapKv, prim3 DefMaps.insert Maps.insert [_kOrd, _v] k_ v_ mapKv mapKv,+ prim2 DefMaps.intersection Maps.intersection [_kOrd, _v] mapKv mapKv mapKv, prim1 DefMaps.keys Maps.keys [_kOrd, _v] mapKv (list k_), prim2 DefMaps.lookup Maps.lookup [_kOrd, _v] k_ mapKv (optional v_), prim2 DefMaps.map Maps.map [_v1, _v2, _kOrd] (funT v1_ v2_) (Prims.map k_ v1_) (Prims.map k_ v2_),@@ -302,7 +338,8 @@ prim2 DefMaps.singleton Maps.singleton [_kOrd, _v] k_ v_ mapKv, prim1 DefMaps.size Maps.size [_kOrd, _v] mapKv int32, prim1 DefMaps.toList Maps.toList [_kOrd, _v] mapKv (list $ pair k_ v_),- prim2 DefMaps.union Maps.union [_kOrd, _v] mapKv mapKv mapKv]+ prim2 DefMaps.union Maps.union [_kOrd, _v] mapKv mapKv mapKv,+ prim1 DefMaps.unions Maps.unions [_kOrd, _v] (list mapKv) mapKv] where mapKv = Prims.map k_ v_ @@ -365,13 +402,18 @@ Prims.lazyArgs [1] $ prim3 DefOptionals.cases Optionals.cases [_x, _y] (optional x_) y_ (funT x_ y_) y_, prim1 DefOptionals.cat Optionals.cat [_x] (list $ optional x_) (list x_), prim3 DefOptionals.compose Optionals.compose [_x, _y, _z] (fun x_ $ optional y_) (fun y_ $ optional z_) x_ (optional z_),+ prim3 DefOptionals.foldList Optionals.foldList [_x, _y] (fun x_ (fun y_ (optional x_))) x_ (list y_) (optional x_), Prims.lazyArgs [0] $ prim2 DefOptionals.fromOptional Optionals.fromOptional [_x] x_ (optional x_) x_,+ prim1 DefOptionals.givens Optionals.givens [_x] (list $ optional x_) (list x_), prim1 DefOptionals.isGiven Optionals.isGiven [_x] (optional x_) boolean, prim1 DefOptionals.isNone Optionals.isNone [_x] (optional x_) boolean, prim2 DefOptionals.map Optionals.map [_x, _y] (funT x_ y_) (optional x_) (optional y_),+ prim2 DefOptionals.mapList Optionals.mapList [_x, _y] (fun x_ (optional y_)) (list x_) (optional (list y_)), prim2 DefOptionals.mapOptional Optionals.mapOptional [_x, _y] (fun x_ $ optional y_) (list x_) (list y_),+ prim2 DefOptionals.mapSet Optionals.mapSet [_xOrd, _yOrd] (fun x_ (optional y_)) (set x_) (optional (set y_)), prim1 DefOptionals.pure Optionals.pure [_x] x_ (optional x_),- prim1 DefOptionals.toList Optionals.toList [_x] (optional x_) (list x_)]+ prim1 DefOptionals.toList Optionals.toList [_x] (optional x_) (list x_),+ Prims.lazyArgs [0] $ prim2 DefOptionals.withDefault Optionals.withDefault [_x] x_ (optional x_) x_] hydraLibPairs :: Library hydraLibPairs = standardLibrary [@@ -393,6 +435,7 @@ prim2 DefSets.delete Sets.delete [_xOrd] x_ (set x_) (set x_), prim2 DefSets.difference Sets.difference [_xOrd] (set x_) (set x_) (set x_), prim0 DefSets.empty Sets.empty [_xOrd] (set x_),+ prim2 DefSets.filter Sets.filter [_xOrd] (fun x_ boolean) (set x_) (set x_), prim1 DefSets.fromList Sets.fromList [_xOrd] (list x_) (set x_), prim2 DefSets.insert Sets.insert [_xOrd] x_ (set x_) (set x_), prim2 DefSets.intersection Sets.intersection [_xOrd] (set x_) (set x_) (set x_),@@ -409,8 +452,12 @@ hydraLibStrings = standardLibrary [ prim1 DefStrings.cat Strings.cat [] (list string) string, prim2 DefStrings.cat2 Strings.cat2 [] string string string,+ prim2 DefStrings.charAt Strings.charAt [] int32 string (optional int32),+ prim1 DefStrings.concat Strings.concat [] (list string) string,+ prim2 DefStrings.concat2 Strings.concat2 [] string string string, prim1 DefStrings.fromList Strings.fromList [] (list int32) string, prim2 DefStrings.intercalate Strings.intercalate [] string (list string) string,+ prim2 DefStrings.join Strings.join [] string (list string) string, prim1 DefStrings.length Strings.length [] string int32, prim1 DefStrings.lines Strings.lines [] string (list string), prim2 DefStrings.maybeCharAt Strings.maybeCharAt [] int32 string (optional int32),@@ -428,7 +475,10 @@ unsupportedEffectPrimitive DefSystem.getEnvironment, unsupportedEffectPrimitive DefSystem.getEnvironmentVariable, unsupportedEffectPrimitive DefSystem.getTime,- unsupportedEffectPrimitive DefSystem.getWorkingDirectory]+ unsupportedEffectPrimitive DefSystem.getWorkingDirectory,+ unsupportedEffectPrimitive DefSystem.readStdin,+ unsupportedEffectPrimitive DefSystem.writeStderr,+ unsupportedEffectPrimitive DefSystem.writeStdout] hydraLibHashing :: Library hydraLibHashing = standardLibrary [@@ -447,6 +497,7 @@ hydraLibEithers, hydraLibEquality, hydraLibFiles,+ hydraLibFunctions, hydraLibHashing, hydraLibLists, hydraLibLiterals,
+ src/main/haskell/Hydra/Parse/Docs.hs view
@@ -0,0 +1,70 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Parser for Hydra documentation strings, producing DocSegment lists++module Hydra.Parse.Docs 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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++-- | Parse the content between the doc-escape delimiters into an EntityReference. The input is the inner content (tag and optional rhs), e.g. "type hydra.core.Lambda". Returns nothing for unrecognized tags.+parseDocAnnotation :: String -> Maybe Packaging.EntityReference+parseDocAnnotation inner =++ let parts = Strings.splitOn " " inner+ tag = Optionals.fromOptional "" (Lists.maybeHead parts)+ rhs = Strings.intercalate " " (Lists.drop 1 parts)+ in (Logic.ifElse (Equality.equal tag "primitive") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferencePrimitive (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "term") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferenceTerm (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "type") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferenceType (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "module") (Just (Packaging.EntityReferenceModule (Packaging.ModuleName rhs))) (Logic.ifElse (Equality.equal tag "package") (Just (Packaging.EntityReferencePackage (Packaging.PackageName rhs))) (Logic.ifElse (Equality.equal tag "term-expr") (Just (Packaging.EntityReferenceTermExpr rhs)) (Logic.ifElse (Equality.equal tag "type-expr") (Just (Packaging.EntityReferenceTypeExpr rhs)) Nothing)))))))++-- | Parse a documentation string into a list of 'DocSegment's. Recognized doc-escape tags become DocSegment.ref segments (wrapping a 'EntityReference'); all other text (including unrecognized doc-escape blocks) becomes DocSegment.text segments. Adjacent text fragments are not merged.+parseDocString :: String -> [Docs.DocSegment]+parseDocString s =++ let parts = Strings.splitOn "{@" s+ head_ = Optionals.fromOptional "" (Lists.maybeHead parts)+ tail_ = Lists.drop 1 parts+ toSeg =+ \part ->+ let subparts = Strings.splitOn "}" part+ inner = Optionals.fromOptional "" (Lists.maybeHead subparts)+ after = Strings.intercalate "}" (Lists.drop 1 subparts)+ mref = parseDocAnnotation inner+ in (Optionals.cases mref [+ Docs.DocSegmentText (Strings.cat2 "{@" part)] (\ref -> Optionals.cat [+ Just (Docs.DocSegmentRef ref),+ (Logic.ifElse (Equality.equal after "") Nothing (Just (Docs.DocSegmentText after)))]))+ in (Lists.cons (Docs.DocSegmentText head_) (Lists.concat (Lists.map toSeg tail_)))
+ src/main/haskell/Hydra/Parse/Regex.hs view
@@ -0,0 +1,145 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Parser for Hydra's translingual regular-expression syntax (docs/specification/regex.md): text -> hydra.regex AST. Built on the hydra.parsers combinators. Rejects ill-formed patterns (empty alternation branches, empty classes, out-of-range code points) via the ParseResult failure channel, so 'well-formed' is portable across hosts. See issue #567.++module Hydra.Parse.Regex 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Math as Math+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsers as Parsers+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++-- | Parse an alternation of sequences separated by |. When there is more than one branch, each branch must be non-empty; empty branches (a|, |b, a||b, and the nested (a|)) are rejected at every level. A single empty branch is the legal empty case (empty whole pattern / empty group).+alternation :: Parsing.Parser [[Regex.Quantified]]+alternation =+ Parsers.bind (Parsers.sepBy1 regexSequence (Parsers.char 124)) (\branches ->+ let hasEmpty = Lists.foldl (\acc -> \b -> Logic.or acc (Lists.null b)) False branches+ multi = Equality.gt (Lists.length branches) 1+ in (Logic.ifElse (Logic.and hasEmpty multi) (Parsers.fail "empty alternation branch") (Parsers.pure branches)))++-- | Parse a single atom: a group ( ... ), a class [ ... ], ., an anchor ^ or $, or a literal.+atom :: Parsing.Parser Regex.Atom+atom =+ Parsers.choice [+ Parsers.map (\g -> Regex.AtomGroup g) (Parsers.between (Parsers.char 40) (Parsers.char 41) (Parsers.lazy (\_ -> alternation))),+ characterClass,+ (Parsers.bind (Parsers.char 46) (\_ -> Parsers.pure Regex.AtomAny)),+ (Parsers.bind (Parsers.char 94) (\_ -> Parsers.pure Regex.AtomAnchorStart)),+ (Parsers.bind (Parsers.char 36) (\_ -> Parsers.pure Regex.AtomAnchorEnd)),+ literalAtom]++-- | Parse a character class [ ... ] or [^ ... ]; the class must be non-empty.+characterClass :: Parsing.Parser Regex.Atom+characterClass =+ Parsers.bind (Parsers.char 91) (\_ -> Parsers.bind (Parsers.optional (Parsers.char 94)) (\neg -> Parsers.bind (Parsers.some classItem) (\items -> Parsers.bind (Parsers.char 93) (\_2 -> Parsers.pure (Regex.AtomClass (Regex.CharacterClass {+ Regex.characterClassNegated = (Optionals.cases neg False (\_3 -> True)),+ Regex.characterClassItems = items}))))))++-- | Parse one member of a character class: a range like a-z, or a single character (escapes allowed).+classItem :: Parsing.Parser Regex.ClassItem+classItem =+ Parsers.bind classChar (\from -> Parsers.alt (Parsers.bind (Parsers.char 45) (\_ -> Parsers.map (\to -> Regex.ClassItemRange (Regex.CharacterRange {+ Regex.characterRangeFrom = from,+ Regex.characterRangeTo = to})) classChar)) (Parsers.pure (Regex.ClassItemCharacter from)))+ where+ classChar =+ Parsers.alt escapedChar (Parsers.satisfy (\c -> Logic.and (Logic.not (Equality.equal c 93)) (Logic.not (Equality.equal c 92))))++-- | Parse a backslash followed by any character; yields that character's codepoint (the escape is consumed).+escapedChar :: Parsing.Parser Int+escapedChar = Parsers.bind (Parsers.char 92) (\_ -> Parsers.anyChar)++-- | True if the codepoint is a top-level regex metacharacter that must be escaped to match literally.+isMetachar :: Int -> Bool+isMetachar c =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 46,+ 94,+ 36,+ 42,+ 43,+ 63,+ 40,+ 41,+ 91,+ 93,+ 123,+ 125,+ 124,+ 92]++-- | Parse a literal character (an escaped metacharacter, or any ordinary non-metacharacter) into an Atom.+literalAtom :: Parsing.Parser Regex.Atom+literalAtom =+ Parsers.map (\c -> Regex.AtomLiteral c) (Parsers.alt escapedChar (Parsers.satisfy (\c -> Logic.not (isMetachar c))))++-- | Parse a full regex pattern string into a hydra.regex AST. Returns nothing if the pattern is ill-formed or does not consume all input; a well-formed pattern is exactly one that parses here, so 'well-formed' is portable across all hosts.+parseRegex :: String -> Maybe [[Regex.Quantified]]+parseRegex input =+ (\x -> case x of+ Parsing.ParseResultSuccess v0 -> Logic.ifElse (Equality.equal (Parsing.parseSuccessRemainder v0) "") (Just (Parsing.parseSuccessValue v0)) Nothing+ Parsing.ParseResultFailure _ -> Nothing) (Parsers.runParser regex input)++-- | Parse an atom followed by an optional quantifier.+quantified :: Parsing.Parser Regex.Quantified+quantified =+ Parsers.bind atom (\a -> Parsers.map (\q -> Regex.Quantified {+ Regex.quantifiedAtom = a,+ Regex.quantifiedQuantifier = q}) quantifier)++-- | Parse an optional quantifier following an atom; yields 'one' when no quantifier is present.+quantifier :: Parsing.Parser Regex.Quantifier+quantifier =+ Parsers.alt (Parsers.choice [+ Parsers.bind (Parsers.char 42) (\_ -> Parsers.pure Regex.QuantifierZeroOrMore),+ (Parsers.bind (Parsers.char 43) (\_ -> Parsers.pure Regex.QuantifierOneOrMore)),+ (Parsers.bind (Parsers.char 63) (\_ -> Parsers.pure Regex.QuantifierZeroOrOne)),+ (Parsers.bind (Parsers.char 123) (\_ -> Parsers.bind unsignedInt (\n -> Parsers.bind (Parsers.optional (Parsers.char 44)) (\comma -> Optionals.cases comma (Parsers.bind (Parsers.char 125) (\_2 -> Parsers.pure (Regex.QuantifierExactly n))) (\_2 -> Parsers.bind (Parsers.optional unsignedInt) (\mm -> Parsers.bind (Parsers.char 125) (\_3 -> Optionals.cases mm (Parsers.pure (Regex.QuantifierAtLeast n)) (\m -> Parsers.pure (Regex.QuantifierRange_ (Regex.QuantifierRange {+ Regex.quantifierRangeMin = n,+ Regex.quantifierRangeMax = m}))))))))))]) (Parsers.pure Regex.QuantifierOne)++-- | Parse a complete regex (an alternation). The empty pattern parses to a single empty sequence.+regex :: Parsing.Parser [[Regex.Quantified]]+regex = alternation++-- | Parse a sequence of quantified atoms (a single alternation branch). May be empty only as the whole pattern; as an alternation branch it is constrained to be non-empty by the alternation parser's use of sepBy1 plus a non-empty check.+regexSequence :: Parsing.Parser [Regex.Quantified]+regexSequence = Parsers.many quantified++-- | Parse a non-negative decimal integer (one or more digits).+unsignedInt :: Parsing.Parser Int+unsignedInt =+ Parsers.map (\digits -> Lists.foldl (\acc -> \d -> Math.add (Math.mul acc 10) (Math.sub d 48)) 0 digits) (Parsers.some (Parsers.satisfy (\c -> Logic.and (Equality.gte c 48) (Equality.lte c 57))))
src/main/haskell/Hydra/Parsers.hs view
@@ -26,6 +26,7 @@ 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
src/main/haskell/Hydra/Predicates.hs view
@@ -35,6 +35,7 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping
+ src/main/haskell/Hydra/Print/Core.hs view
@@ -0,0 +1,536 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.core types++module Hydra.Print.Core 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.Overlay.Haskell.Lib.Eithers as Eithers+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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+import qualified Data.Map as M+import qualified Data.Set as S++-- | Show a binding as a string+binding :: Core.Binding -> String+binding el =++ let name = Core.unName (Core.bindingName el)+ t = Core.bindingTerm el+ typeStr =+ Optionals.cases (Core.bindingTypeScheme el) "" (\ts -> Strings.cat [+ ":(",+ (typeScheme ts),+ ")"])+ in (Strings.cat [+ name,+ typeStr,+ " = ",+ (term t)])++-- | Show a case statement as a string+caseStatement :: Core.CaseStatement -> String+caseStatement cs =++ let tname = Core.unName (Core.caseStatementTypeName cs)+ mdef = Core.caseStatementDefault cs+ csCases = Core.caseStatementCases cs+ caseFields =+ Lists.map (\alt -> Core.Field {+ Core.fieldName = (Core.caseAlternativeName alt),+ Core.fieldTerm = (Core.caseAlternativeHandler alt)}) csCases+ defaultField =+ Optionals.cases mdef [] (\d -> [+ Core.Field {+ Core.fieldName = (Core.Name "[default]"),+ Core.fieldTerm = d}])+ allFields =+ Lists.concat [+ caseFields,+ defaultField]+ in (Strings.cat [+ "case(",+ tname,+ ")",+ (fields allFields)])++-- | Show an Either value using given functions for left and right+either :: (t0 -> String) -> (t1 -> String) -> Either t0 t1 -> String+either showA showB e =+ Eithers.either (\a -> Strings.cat2 "left(" (Strings.cat2 (showA a) ")")) (\b -> Strings.cat2 "right(" (Strings.cat2 (showB b) ")")) e++-- | Show a field as a string+field :: Core.Field -> String+field field =++ let fname = Core.unName (Core.fieldName field)+ fterm = Core.fieldTerm field+ in (Strings.cat [+ fname,+ "=",+ (term fterm)])++-- | Show a field type as a string+fieldType :: Core.FieldType -> String+fieldType ft =++ let fname = Core.unName (Core.fieldTypeName ft)+ ftyp = Core.fieldTypeType ft+ in (Strings.cat [+ fname,+ ":",+ (type_ ftyp)])++-- | Show a list of fields as a string+fields :: [Core.Field] -> String+fields flds =++ let fieldStrs = Lists.map field flds+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " fieldStrs),+ "}"])++-- | Show a float value as a string+float :: Core.FloatValue -> String+float fv =+ case fv of+ Core.FloatValueFloat32 v0 -> Strings.cat2 (Literals.showFloat32 v0) ":float32"+ Core.FloatValueFloat64 v0 -> Strings.cat2 (Literals.showFloat64 v0) ":float64"++-- | Show a float type as a string+floatType :: Core.FloatType -> String+floatType ft =+ case ft of+ Core.FloatTypeFloat32 -> "float32"+ Core.FloatTypeFloat64 -> "float64"++-- | Show an injection as a string+injection :: Core.Injection -> String+injection inj =++ let tname = Core.injectionTypeName inj+ f = Core.injectionField inj+ in (Strings.cat [+ "inject(",+ (Core.unName tname),+ ")",+ (fields [+ f])])++-- | Show an integer value as a string+integer :: Core.IntegerValue -> String+integer iv =+ case iv of+ Core.IntegerValueBigint v0 -> Strings.cat2 (Literals.showBigint v0) ":bigint"+ Core.IntegerValueInt8 v0 -> Strings.cat2 (Literals.showInt8 v0) ":int8"+ Core.IntegerValueInt16 v0 -> Strings.cat2 (Literals.showInt16 v0) ":int16"+ Core.IntegerValueInt32 v0 -> Strings.cat2 (Literals.showInt32 v0) ":int32"+ Core.IntegerValueInt64 v0 -> Strings.cat2 (Literals.showInt64 v0) ":int64"+ Core.IntegerValueUint8 v0 -> Strings.cat2 (Literals.showUint8 v0) ":uint8"+ Core.IntegerValueUint16 v0 -> Strings.cat2 (Literals.showUint16 v0) ":uint16"+ Core.IntegerValueUint32 v0 -> Strings.cat2 (Literals.showUint32 v0) ":uint32"+ Core.IntegerValueUint64 v0 -> Strings.cat2 (Literals.showUint64 v0) ":uint64"++-- | Show an integer type as a string+integerType :: Core.IntegerType -> String+integerType it =+ case it of+ Core.IntegerTypeBigint -> "bigint"+ Core.IntegerTypeInt8 -> "int8"+ Core.IntegerTypeInt16 -> "int16"+ Core.IntegerTypeInt32 -> "int32"+ Core.IntegerTypeInt64 -> "int64"+ Core.IntegerTypeUint8 -> "uint8"+ Core.IntegerTypeUint16 -> "uint16"+ Core.IntegerTypeUint32 -> "uint32"+ Core.IntegerTypeUint64 -> "uint64"++-- | Show a lambda as a string+lambda :: Core.Lambda -> String+lambda l =++ let v = Core.unName (Core.lambdaParameter l)+ mt = Core.lambdaDomain l+ body = Core.lambdaBody l+ typeStr = Optionals.cases mt "" (\t -> Strings.cat2 ":" (type_ t))+ in (Strings.cat [+ "\955",+ v,+ typeStr,+ ".",+ (term body)])++-- | Show a let expression as a string+let_ :: Core.Let -> String+let_ l =++ let bindings = Core.letBindings l+ env = Core.letBody l+ bindingStrs = Lists.map binding bindings+ in (Strings.cat [+ "let ",+ (Strings.intercalate ", " bindingStrs),+ " in ",+ (term env)])++-- | Show a list using a given function to show each element+list :: (t0 -> String) -> [t0] -> String+list f xs =++ let elementStrs = Lists.map f xs+ in (Strings.cat [+ "[",+ (Strings.intercalate ", " elementStrs),+ "]"])++-- | Show a literal as a string+literal :: Core.Literal -> String+literal l =+ case l of+ Core.LiteralBinary _ -> "[binary]"+ Core.LiteralBoolean v0 -> Logic.ifElse v0 "true" "false"+ Core.LiteralDecimal v0 -> Literals.showDecimal v0+ Core.LiteralFloat v0 -> float v0+ Core.LiteralInteger v0 -> integer v0+ Core.LiteralString v0 -> Literals.showString v0++-- | Show a literal type as a string+literalType :: Core.LiteralType -> String+literalType lt =+ case lt of+ Core.LiteralTypeBinary -> "binary"+ Core.LiteralTypeBoolean -> "boolean"+ Core.LiteralTypeDecimal -> "decimal"+ Core.LiteralTypeFloat v0 -> floatType v0+ Core.LiteralTypeInteger v0 -> integerType v0+ Core.LiteralTypeString -> "string"++-- | Show a map using given functions to show keys and values+map :: Ord t0 => ((t0 -> String) -> (t1 -> String) -> M.Map t0 t1 -> String)+map showK showV m =++ let pairStrs =+ Lists.map (\p -> Strings.cat [+ showK (Pairs.first p),+ ": ",+ (showV (Pairs.second p))]) (Maps.toList m)+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " pairStrs),+ "}"])++-- | Show an optional value using a given function to show the element+optional :: (t0 -> String) -> Maybe t0 -> String+optional f mx = Optionals.cases mx "none" (\x -> Strings.cat2 "given(" (Strings.cat2 (f x) ")"))++-- | Show a pair using given functions to show each element+pair :: (t0 -> String) -> (t1 -> String) -> (t0, t1) -> String+pair showA showB p =+ Strings.cat [+ "(",+ (showA (Pairs.first p)),+ ", ",+ (showB (Pairs.second p)),+ ")"]++-- | Show a projection as a string+projection :: Core.Projection -> String+projection proj =++ let tname = Core.unName (Core.projectionTypeName proj)+ fname = Core.unName (Core.projectionFieldName proj)+ in (Strings.cat [+ "project(",+ tname,+ "){",+ fname,+ "}"])++-- | A placeholder for reading terms from their serialized form. Not implemented.+readTerm :: String -> Maybe Core.Term+readTerm s = Just (Core.TermLiteral (Core.LiteralString s))++-- | Show a set using a given function to show each element+set :: Ord t0 => ((t0 -> String) -> S.Set t0 -> String)+set f xs =++ let elementStrs = Lists.map f (Sets.toList xs)+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " elementStrs),+ "}"])++-- | Show a term as a string+term :: Core.Term -> String+term t =++ let gatherTerms =+ \prev -> \app ->+ let lhs = Core.applicationFunction app+ rhs = Core.applicationArgument app+ in case lhs of+ Core.TermApplication v0 -> gatherTerms (Lists.cons rhs prev) v0+ _ -> Lists.cons lhs (Lists.cons rhs prev)+ in case t of+ Core.TermAnnotated v0 -> term (Core.annotatedTermBody v0)+ Core.TermApplication v0 ->+ let terms = gatherTerms [] v0+ termStrs = Lists.map term terms+ in (Strings.cat [+ "(",+ (Strings.intercalate " @ " termStrs),+ ")"])+ Core.TermCases v0 -> caseStatement v0+ Core.TermEither v0 -> Eithers.either (\l -> Strings.cat [+ "left(",+ (term l),+ ")"]) (\r -> Strings.cat [+ "right(",+ (term r),+ ")"]) v0+ Core.TermLambda v0 -> lambda v0+ Core.TermLet v0 -> let_ v0+ Core.TermList v0 ->+ let termStrs = Lists.map term v0+ in (Strings.cat [+ "[",+ (Strings.intercalate ", " termStrs),+ "]"])+ Core.TermLiteral v0 -> literal v0+ Core.TermMap v0 ->+ let entry =+ \p -> Strings.cat [+ term (Pairs.first p),+ "=",+ (term (Pairs.second p))]+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " (Lists.map entry (Maps.toList v0))),+ "}"])+ Core.TermOptional v0 -> Optionals.cases v0 "none" (\t2 -> Strings.cat [+ "given(",+ (term t2),+ ")"])+ Core.TermPair v0 -> Strings.cat [+ "(",+ (term (Pairs.first v0)),+ ", ",+ (term (Pairs.second v0)),+ ")"]+ Core.TermProject v0 -> projection v0+ Core.TermRecord v0 ->+ let tname = Core.unName (Core.recordTypeName v0)+ flds = Core.recordFields v0+ in (Strings.cat [+ "record(",+ tname,+ ")",+ (fields flds)])+ Core.TermSet v0 -> Strings.cat [+ "{",+ (Strings.intercalate ", " (Lists.map term (Sets.toList v0))),+ "}"]+ Core.TermTypeLambda v0 ->+ let param = Core.unName (Core.typeLambdaParameter v0)+ body = Core.typeLambdaBody v0+ in (Strings.cat [+ "\923",+ param,+ ".",+ (term body)])+ Core.TermTypeApplication v0 ->+ let t2 = Core.typeApplicationTermBody v0+ typ = Core.typeApplicationTermType v0+ in (Strings.cat [+ term t2,+ "\10216",+ (type_ typ),+ "\10217"])+ Core.TermInject v0 -> injection v0+ Core.TermUnit -> "unit"+ Core.TermUnwrap v0 -> Strings.cat [+ "unwrap(",+ (Core.unName v0),+ ")"]+ Core.TermVariable v0 -> Core.unName v0+ Core.TermWrap v0 ->+ let tname = Core.unName (Core.wrappedTermTypeName v0)+ term1 = Core.wrappedTermBody v0+ in (Strings.cat [+ "wrap(",+ tname,+ "){",+ (term term1),+ "}"])++-- | Show a type as a string+type_ :: Core.Type -> String+type_ typ =++ let showRowType =+ \flds ->+ let fieldStrs = Lists.map fieldType flds+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " fieldStrs),+ "}"])+ gatherTypes =+ \prev -> \app ->+ let lhs = Core.applicationTypeFunction app+ rhs = Core.applicationTypeArgument app+ in case lhs of+ Core.TypeApplication v0 -> gatherTypes (Lists.cons rhs prev) v0+ _ -> Lists.cons lhs (Lists.cons rhs prev)+ gatherFunctionTypes =+ \prev -> \t -> case t of+ Core.TypeFunction v0 ->+ let dom = Core.functionTypeDomain v0+ cod = Core.functionTypeCodomain v0+ in (gatherFunctionTypes (Lists.cons dom prev) cod)+ _ -> Lists.reverse (Lists.cons t prev)+ in case typ of+ Core.TypeAnnotated v0 -> type_ (Core.annotatedTypeBody v0)+ Core.TypeApplication v0 ->+ let types = gatherTypes [] v0+ typeStrs = Lists.map type_ types+ in (Strings.cat [+ "(",+ (Strings.intercalate " @ " typeStrs),+ ")"])+ Core.TypeEffect v0 -> Strings.cat [+ "effect<",+ (type_ v0),+ ">"]+ Core.TypeEither v0 ->+ let leftTyp = Core.eitherTypeLeft v0+ rightTyp = Core.eitherTypeRight v0+ in (Strings.cat [+ "either<",+ (type_ leftTyp),+ ", ",+ (type_ rightTyp),+ ">"])+ Core.TypeForall v0 ->+ let var = Core.unName (Core.forallTypeParameter v0)+ body = Core.forallTypeBody v0+ in (Strings.cat [+ "(\8704",+ var,+ ".",+ (type_ body),+ ")"])+ Core.TypeFunction _ ->+ let types = gatherFunctionTypes [] typ+ typeStrs = Lists.map type_ types+ in (Strings.cat [+ "(",+ (Strings.intercalate " \8594 " typeStrs),+ ")"])+ Core.TypeList v0 -> Strings.cat [+ "list<",+ (type_ v0),+ ">"]+ Core.TypeLiteral v0 -> literalType v0+ Core.TypeMap v0 ->+ let keyTyp = Core.mapTypeKeys v0+ valTyp = Core.mapTypeValues v0+ in (Strings.cat [+ "map<",+ (type_ keyTyp),+ ", ",+ (type_ valTyp),+ ">"])+ Core.TypeOptional v0 -> Strings.cat [+ "optional<",+ (type_ v0),+ ">"]+ Core.TypePair v0 ->+ let firstTyp = Core.pairTypeFirst v0+ secondTyp = Core.pairTypeSecond v0+ in (Strings.cat [+ "(",+ (type_ firstTyp),+ ", ",+ (type_ secondTyp),+ ")"])+ Core.TypeRecord v0 -> Strings.cat2 "record" (showRowType v0)+ Core.TypeSet v0 -> Strings.cat [+ "set<",+ (type_ v0),+ ">"]+ Core.TypeUnion v0 -> Strings.cat2 "union" (showRowType v0)+ Core.TypeUnit -> "unit"+ Core.TypeVariable v0 -> Core.unName v0+ Core.TypeVoid -> "void"+ Core.TypeWrap v0 -> Strings.cat [+ "wrap(",+ (type_ v0),+ ")"]++-- | Show a type scheme as a string+typeScheme :: Core.TypeScheme -> String+typeScheme ts =++ let vars = Core.typeSchemeVariables ts+ body = Core.typeSchemeBody ts+ varNames = Lists.map Core.unName vars+ fa =+ Logic.ifElse (Lists.null vars) "" (Strings.cat [+ "forall ",+ (Strings.intercalate "," varNames),+ ". "])+ toConstraintPair =+ \v -> \c -> Strings.cat [+ case c of+ Core.TypeClassConstraintSimple v0 -> Core.unName v0,+ " ",+ (Core.unName v)]+ toConstraintPairs =+ \p -> Lists.map (toConstraintPair (Pairs.first p)) (Core.typeVariableConstraintsClasses (Pairs.second p))+ tc = Optionals.cases (Core.typeSchemeConstraints ts) [] (\m -> Lists.concat (Lists.map toConstraintPairs (Maps.toList m)))+ in (Strings.cat [+ "(",+ fa,+ (Logic.ifElse (Lists.null tc) "" (Strings.cat [+ "(",+ (Strings.intercalate ", " tc),+ ") => "])),+ (type_ body),+ ")"])
+ src/main/haskell/Hydra/Print/Docs.hs view
@@ -0,0 +1,88 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.docs types++module Hydra.Print.Docs 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.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parse.Docs as ParseDocs+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++-- | Render a DefinitionReference as its fully-qualified name+definitionReference :: Packaging.DefinitionReference -> String+definitionReference x =+ case x of+ Packaging.DefinitionReferencePrimitive v0 -> Core.unName v0+ Packaging.DefinitionReferenceTerm v0 -> Core.unName v0+ Packaging.DefinitionReferenceType v0 -> Core.unName v0++-- | Render a single DocSegment back to its source string form+docSegment :: Docs.DocSegment -> String+docSegment seg = docSegmentWith entityReference seg++-- | Render a single DocSegment using a custom 'EntityReference' renderer+docSegmentWith :: (Packaging.EntityReference -> String) -> Docs.DocSegment -> String+docSegmentWith render x =+ case x of+ Docs.DocSegmentRef v0 -> render v0+ Docs.DocSegmentText v0 -> v0++-- | Render a list of DocSegments back to a plain documentation string+docSegments :: [Docs.DocSegment] -> String+docSegments segs = Strings.cat (Lists.map docSegment segs)++-- | Render a list of DocSegments using a custom 'EntityReference' renderer+docSegmentsWith :: (Packaging.EntityReference -> String) -> [Docs.DocSegment] -> String+docSegmentsWith render segs = Strings.cat (Lists.map (docSegmentWith render) segs)++-- | Render a 'EntityReference' as its doc-escape tag string (without the surrounding braces)+entityReference :: Packaging.EntityReference -> String+entityReference x =+ case x of+ Packaging.EntityReferenceDefinition v0 -> Strings.cat2 (case v0 of+ Packaging.DefinitionReferencePrimitive _ -> "primitive"+ Packaging.DefinitionReferenceTerm _ -> "term"+ Packaging.DefinitionReferenceType _ -> "type") (Strings.cat2 " " (definitionReference v0))+ Packaging.EntityReferenceModule v0 -> Strings.cat2 "module " (Packaging.unModuleName v0)+ Packaging.EntityReferencePackage v0 -> Strings.cat2 "package " (Packaging.unPackageName v0)+ Packaging.EntityReferenceTermExpr v0 -> Strings.cat2 "term-expr " v0+ Packaging.EntityReferenceTypeExpr v0 -> Strings.cat2 "type-expr " v0++-- | Parse a documentation string and re-render it, converting doc-escape tags through their canonical form+renderDocString :: String -> String+renderDocString s = renderDocStringWith entityReference s++-- | Parse a documentation string and render it using a custom 'EntityReference' renderer. Text segments are passed through; ref segments are rendered by the provided function. Unrecognized doc-escape blocks are passed through as text.+renderDocStringWith :: (Packaging.EntityReference -> String) -> String -> String+renderDocStringWith render s = docSegmentsWith render (ParseDocs.parseDocString s)
+ src/main/haskell/Hydra/Print/Emacs/Regex.hs view
@@ -0,0 +1,152 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Per-dialect printer rendering the hydra.regex AST into GNU Emacs regexp syntax. Emacs inverts several escaping conventions relative to POSIX ERE (probe-verified, Emacs 28.2): alternation is \| (bare | is literal), grouping is \( \) (bare ( ) are literal), and bounded quantifiers are \{n,m\} (bare braces are literal). The quantifiers * + ? are bare as usual, and character classes are POSIX-like. Hydra's . (any incl. newline) renders as [^z-a] — an empty negated range that matches every character including newline (Emacs . excludes newline). See docs/specification/regex.md and issue #567.++module Hydra.Print.Emacs.Regex 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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++-- | Render an alternation, joining its branches with Emacs's \| operator.+alternation :: [[Regex.Quantified]] -> String+alternation alt = Strings.intercalate "\\|" (Lists.map regexSequence alt)++-- | The Emacs rendering of Hydra's . (any character incl. newline): the empty-negated-range [^z-a].+anyClass :: String+anyClass = "[^z-a]"++-- | Render a single atom; . -> [^z-a], and groups use Emacs's \( \) escaping.+atom :: Regex.Atom -> String+atom a =+ case a of+ Regex.AtomLiteral v0 -> escapeLiteral v0+ Regex.AtomAny -> anyClass+ Regex.AtomAnchorStart -> "^"+ Regex.AtomAnchorEnd -> "$"+ Regex.AtomGroup v0 -> Strings.cat [+ "\\(",+ (alternation v0),+ "\\)"]+ Regex.AtomClass v0 -> characterClass v0++-- | Render a character class, including the leading ^ for a negated class (POSIX-like in Emacs).+characterClass :: Regex.CharacterClass -> String+characterClass cc =+ Strings.cat [+ "[",+ (Logic.ifElse (Regex.characterClassNegated cc) "^" ""),+ (Strings.cat (Lists.map classItem (Regex.characterClassItems cc))),+ "]"]++-- | Render one character-class member (a single character or an inclusive range).+classItem :: Regex.ClassItem -> String+classItem item =+ case item of+ Regex.ClassItemCharacter v0 -> escapeClassChar v0+ Regex.ClassItemRange v0 -> Strings.cat [+ escapeClassChar (Regex.characterRangeFrom v0),+ "-",+ (escapeClassChar (Regex.characterRangeTo v0))]++-- | Render a code point inside a character class, uniformly escaping the class metacharacters \ ] ^ -.+escapeClassChar :: Int -> String+escapeClassChar c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 92,+ 93,+ 94,+ 45]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a literal code point in top-level context under Emacs regexp, escaping only the characters that are special bare in Emacs: . * + ? [ ] ^ $ \. Note | ( ) { } are literal in Emacs and are NOT escaped here.+escapeLiteral :: Int -> String+escapeLiteral c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 46,+ 42,+ 43,+ 63,+ 91,+ 93,+ 94,+ 36,+ 92]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a hydra.regex AST into GNU Emacs regexp syntax (escaped \| \( \) \{..\}, . as [^z-a]).+printRegex :: [[Regex.Quantified]] -> String+printRegex r = alternation r++-- | Render an atom followed by its quantifier suffix.+quantified :: Regex.Quantified -> String+quantified qa = Strings.cat2 (atom (Regex.quantifiedAtom qa)) (quantifier (Regex.quantifiedQuantifier qa))++-- | Render a quantifier suffix; bounded {..} forms use Emacs's escaped braces \{..\}.+quantifier :: Regex.Quantifier -> String+quantifier q =+ case q of+ Regex.QuantifierOne -> ""+ Regex.QuantifierZeroOrOne -> "?"+ Regex.QuantifierZeroOrMore -> "*"+ Regex.QuantifierOneOrMore -> "+"+ Regex.QuantifierExactly v0 -> Strings.cat [+ "\\{",+ (Literals.showInt32 v0),+ "\\}"]+ Regex.QuantifierAtLeast v0 -> Strings.cat [+ "\\{",+ (Literals.showInt32 v0),+ ",\\}"]+ Regex.QuantifierRange_ v0 -> Strings.cat [+ "\\{",+ (Literals.showInt32 (Regex.quantifierRangeMin v0)),+ ",",+ (Literals.showInt32 (Regex.quantifierRangeMax v0)),+ "\\}"]++-- | Render a sequence of quantified atoms by concatenation.+regexSequence :: [Regex.Quantified] -> String+regexSequence s = Strings.cat (Lists.map quantified s)++-- | Render a single Unicode code point as a one-character string.+showCodePoint :: Int -> String+showCodePoint c = Strings.fromList [+ c]
+ src/main/haskell/Hydra/Print/Error/Core.hs view
@@ -0,0 +1,373 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.error.core types++module Hydra.Print.Error.Core 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.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Variants as PrintVariants+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++-- | Show a constant condition error as a string+constantConditionError :: ErrorCore.ConstantConditionError -> String+constantConditionError e =+ Strings.cat [+ "constant condition: ifElse with literal ",+ (Literals.showBoolean (ErrorCore.constantConditionErrorValue e))]++-- | Show a duplicate binding error as a string+duplicateBindingError :: ErrorCore.DuplicateBindingError -> String+duplicateBindingError e =+ Strings.cat [+ "duplicate binding: ",+ (Core.unName (ErrorCore.duplicateBindingErrorName e))]++-- | Show a duplicate field error as a string+duplicateFieldError :: ErrorCore.DuplicateFieldError -> String+duplicateFieldError e =+ Strings.cat [+ "duplicate field: ",+ (Core.unName (ErrorCore.duplicateFieldErrorName e))]++-- | Show a duplicate record type field names error as a string+duplicateRecordTypeFieldNamesError :: ErrorCore.DuplicateRecordTypeFieldNamesError -> String+duplicateRecordTypeFieldNamesError e =+ Strings.cat [+ "duplicate field in record type: ",+ (Core.unName (ErrorCore.duplicateRecordTypeFieldNamesErrorName e))]++-- | Show a duplicate union type field names error as a string+duplicateUnionTypeFieldNamesError :: ErrorCore.DuplicateUnionTypeFieldNamesError -> String+duplicateUnionTypeFieldNamesError e =+ Strings.cat [+ "duplicate field in union type: ",+ (Core.unName (ErrorCore.duplicateUnionTypeFieldNamesErrorName e))]++-- | Show an empty case statement error as a string+emptyCaseStatementError :: ErrorCore.EmptyCaseStatementError -> String+emptyCaseStatementError e =+ Strings.cat [+ "empty case statement for type: ",+ (Core.unName (ErrorCore.emptyCaseStatementErrorTypeName e))]++-- | Show an empty let bindings error as a string+emptyLetBindingsError :: t0 -> String+emptyLetBindingsError e = "let expression with no bindings"++-- | Show an empty record type error as a string+emptyRecordTypeError :: t0 -> String+emptyRecordTypeError e = "record type with no fields (use TypeUnit instead)"++-- | Show an empty term annotation error as a string+emptyTermAnnotationError :: t0 -> String+emptyTermAnnotationError e = "term annotation with empty annotation map"++-- | Show an empty type annotation error as a string+emptyTypeAnnotationError :: t0 -> String+emptyTypeAnnotationError e = "type annotation with empty annotation map"++-- | Show an empty type name in term error as a string+emptyTypeNameInTermError :: t0 -> String+emptyTypeNameInTermError e = "term with empty type name"++-- | Show an empty union type error as a string+emptyUnionTypeError :: t0 -> String+emptyUnionTypeError e = "union type with no alternatives (use TypeVoid instead)"++-- | Show an invalid forall parameter name error as a string+invalidForallParameterNameError :: ErrorCore.InvalidForallParameterNameError -> String+invalidForallParameterNameError e =+ Strings.cat [+ "invalid forall parameter name: ",+ (Core.unName (ErrorCore.invalidForallParameterNameErrorName e))]++-- | Show an invalid lambda parameter name error as a string+invalidLambdaParameterNameError :: ErrorCore.InvalidLambdaParameterNameError -> String+invalidLambdaParameterNameError e =+ Strings.cat [+ "invalid lambda parameter name: ",+ (Core.unName (ErrorCore.invalidLambdaParameterNameErrorName e))]++-- | Show an invalid let binding name error as a string+invalidLetBindingNameError :: ErrorCore.InvalidLetBindingNameError -> String+invalidLetBindingNameError e =+ Strings.cat [+ "invalid let binding name: ",+ (Core.unName (ErrorCore.invalidLetBindingNameErrorName e))]++-- | Show an invalid term error as a string+invalidTermError :: ErrorCore.InvalidTermError -> String+invalidTermError e =+ Strings.cat2 "invalid term: " (case e of+ ErrorCore.InvalidTermErrorConstantCondition v0 -> constantConditionError v0+ ErrorCore.InvalidTermErrorDuplicateBinding v0 -> duplicateBindingError v0+ ErrorCore.InvalidTermErrorDuplicateField v0 -> duplicateFieldError v0+ ErrorCore.InvalidTermErrorEmptyCaseStatement v0 -> emptyCaseStatementError v0+ ErrorCore.InvalidTermErrorEmptyLetBindings v0 -> emptyLetBindingsError v0+ ErrorCore.InvalidTermErrorEmptyTermAnnotation v0 -> emptyTermAnnotationError v0+ ErrorCore.InvalidTermErrorEmptyTypeNameInTerm v0 -> emptyTypeNameInTermError v0+ ErrorCore.InvalidTermErrorInvalidLambdaParameterName v0 -> invalidLambdaParameterNameError v0+ ErrorCore.InvalidTermErrorInvalidLetBindingName v0 -> invalidLetBindingNameError v0+ ErrorCore.InvalidTermErrorInvalidTypeLambdaParameterName v0 -> invalidTypeLambdaParameterNameError v0+ ErrorCore.InvalidTermErrorMissingCaseBranches v0 -> missingCaseBranchesError v0+ ErrorCore.InvalidTermErrorNestedTermAnnotation v0 -> nestedTermAnnotationError v0+ ErrorCore.InvalidTermErrorRedundantWrapUnwrap v0 -> redundantWrapUnwrapError v0+ ErrorCore.InvalidTermErrorSelfApplication v0 -> selfApplicationError v0+ ErrorCore.InvalidTermErrorTermVariableShadowing v0 -> termVariableShadowingError v0+ ErrorCore.InvalidTermErrorTypeVariableShadowingInTypeLambda v0 -> typeVariableShadowingInTypeLambdaError v0+ ErrorCore.InvalidTermErrorUndefinedTermVariable v0 -> undefinedTermVariableError v0+ ErrorCore.InvalidTermErrorUndefinedTypeVariableInBindingType v0 -> undefinedTypeVariableInBindingTypeError v0+ ErrorCore.InvalidTermErrorUndefinedTypeVariableInLambdaDomain v0 -> undefinedTypeVariableInLambdaDomainError v0+ ErrorCore.InvalidTermErrorUndefinedTypeVariableInTypeApplication v0 -> undefinedTypeVariableInTypeApplicationError v0+ ErrorCore.InvalidTermErrorUnknownCaseAlternative v0 -> unknownCaseAlternativeError v0+ ErrorCore.InvalidTermErrorUnknownPrimitiveName v0 -> unknownPrimitiveNameError v0+ ErrorCore.InvalidTermErrorUnnecessaryIdentityApplication v0 -> unnecessaryIdentityApplicationError v0+ ErrorCore.InvalidTermErrorUntypedTermVariable v0 -> untypedTermVariableError v0)++-- | Show an invalid type error as a string+invalidTypeError :: ErrorCore.InvalidTypeError -> String+invalidTypeError e =+ Strings.cat2 "invalid type: " (case e of+ ErrorCore.InvalidTypeErrorDuplicateRecordTypeFieldNames v0 -> duplicateRecordTypeFieldNamesError v0+ ErrorCore.InvalidTypeErrorDuplicateUnionTypeFieldNames v0 -> duplicateUnionTypeFieldNamesError v0+ ErrorCore.InvalidTypeErrorEmptyRecordType v0 -> emptyRecordTypeError v0+ ErrorCore.InvalidTypeErrorEmptyTypeAnnotation v0 -> emptyTypeAnnotationError v0+ ErrorCore.InvalidTypeErrorEmptyUnionType v0 -> emptyUnionTypeError v0+ ErrorCore.InvalidTypeErrorInvalidForallParameterName v0 -> invalidForallParameterNameError v0+ ErrorCore.InvalidTypeErrorInvalidTypeSchemeVariableName v0 -> invalidTypeSchemeVariableNameError v0+ ErrorCore.InvalidTypeErrorNestedTypeAnnotation v0 -> nestedTypeAnnotationError v0+ ErrorCore.InvalidTypeErrorNonComparableMapKeyType v0 -> nonComparableMapKeyTypeError v0+ ErrorCore.InvalidTypeErrorNonComparableSetElementType v0 -> nonComparableSetElementTypeError v0+ ErrorCore.InvalidTypeErrorSingleVariantUnion v0 -> singleVariantUnionError v0+ ErrorCore.InvalidTypeErrorTypeVariableShadowingInForall v0 -> typeVariableShadowingInForallError v0+ ErrorCore.InvalidTypeErrorUndefinedTypeVariable v0 -> undefinedTypeVariableError v0+ ErrorCore.InvalidTypeErrorVoidInNonBottomPosition v0 -> voidInNonBottomPositionError v0)++-- | Show an invalid type lambda parameter name error as a string+invalidTypeLambdaParameterNameError :: ErrorCore.InvalidTypeLambdaParameterNameError -> String+invalidTypeLambdaParameterNameError e =+ Strings.cat [+ "invalid type lambda parameter name: ",+ (Core.unName (ErrorCore.invalidTypeLambdaParameterNameErrorName e))]++-- | Show an invalid type scheme variable name error as a string+invalidTypeSchemeVariableNameError :: ErrorCore.InvalidTypeSchemeVariableNameError -> String+invalidTypeSchemeVariableNameError e =+ Strings.cat [+ "invalid type scheme variable name: ",+ (Core.unName (ErrorCore.invalidTypeSchemeVariableNameErrorName e))]++-- | Show a missing case branches error as a string+missingCaseBranchesError :: ErrorCore.MissingCaseBranchesError -> String+missingCaseBranchesError e =++ let tname = ErrorCore.missingCaseBranchesErrorTypeName e+ variantNames = ErrorCore.missingCaseBranchesErrorVariantNames e+ in (Strings.cat [+ "case statement for type ",+ (Core.unName tname),+ " does not cover variant(s): ",+ (Strings.intercalate ", " (Lists.map Core.unName variantNames))])++-- | Show a nested term annotation error as a string+nestedTermAnnotationError :: t0 -> String+nestedTermAnnotationError e = "nested term annotations should be merged"++-- | Show a nested type annotation error as a string+nestedTypeAnnotationError :: t0 -> String+nestedTypeAnnotationError e = "nested type annotations should be merged"++-- | Show a non-comparable map key type error as a string+nonComparableMapKeyTypeError :: ErrorCore.NonComparableMapKeyTypeError -> String+nonComparableMapKeyTypeError e =+ Strings.cat [+ "map key type contains a function type: ",+ (PrintCore.type_ (ErrorCore.nonComparableMapKeyTypeErrorKeyType e))]++-- | Show a non-comparable set element type error as a string+nonComparableSetElementTypeError :: ErrorCore.NonComparableSetElementTypeError -> String+nonComparableSetElementTypeError e =+ Strings.cat [+ "set element type contains a function type: ",+ (PrintCore.type_ (ErrorCore.nonComparableSetElementTypeErrorElementType e))]++-- | Show a redundant wrap/unwrap error as a string+redundantWrapUnwrapError :: ErrorCore.RedundantWrapUnwrapError -> String+redundantWrapUnwrapError e =+ Strings.cat [+ "redundant wrap/unwrap for type: ",+ (Core.unName (ErrorCore.redundantWrapUnwrapErrorTypeName e))]++-- | Show a self-application error as a string+selfApplicationError :: ErrorCore.SelfApplicationError -> String+selfApplicationError e =+ Strings.cat [+ "self-application of variable: ",+ (Core.unName (ErrorCore.selfApplicationErrorName e))]++-- | Show a single variant union error as a string+singleVariantUnionError :: ErrorCore.SingleVariantUnionError -> String+singleVariantUnionError e =+ Strings.cat [+ "union type with single variant: ",+ (Core.unName (ErrorCore.singleVariantUnionErrorFieldName e))]++-- | Show a term variable shadowing error as a string+termVariableShadowingError :: ErrorCore.TermVariableShadowingError -> String+termVariableShadowingError e =+ Strings.cat [+ "variable shadowing: ",+ (Core.unName (ErrorCore.termVariableShadowingErrorName e))]++-- | Show a type variable shadowing in forall error as a string+typeVariableShadowingInForallError :: ErrorCore.TypeVariableShadowingInForallError -> String+typeVariableShadowingInForallError e =+ Strings.cat [+ "type variable shadowing in forall: ",+ (Core.unName (ErrorCore.typeVariableShadowingInForallErrorName e))]++-- | Show a type variable shadowing in type lambda error as a string+typeVariableShadowingInTypeLambdaError :: ErrorCore.TypeVariableShadowingInTypeLambdaError -> String+typeVariableShadowingInTypeLambdaError e =+ Strings.cat [+ "type variable shadowing in type lambda: ",+ (Core.unName (ErrorCore.typeVariableShadowingInTypeLambdaErrorName e))]++-- | Show an undefined field error as a string+undefinedFieldError :: ErrorCore.UndefinedFieldError -> String+undefinedFieldError e =++ let fname = ErrorCore.undefinedFieldErrorFieldName e+ tname = ErrorCore.undefinedFieldErrorTypeName e+ in (Strings.cat [+ "no such field \"",+ (Core.unName fname),+ "\" in type \"",+ (Core.unName tname),+ "\""])++-- | Show an undefined term variable error as a string+undefinedTermVariableError :: ErrorCore.UndefinedTermVariableError -> String+undefinedTermVariableError e =+ Strings.cat [+ "undefined term variable: ",+ (Core.unName (ErrorCore.undefinedTermVariableErrorName e))]++-- | Show an undefined type variable error as a string+undefinedTypeVariableError :: ErrorCore.UndefinedTypeVariableError -> String+undefinedTypeVariableError e =+ Strings.cat [+ "undefined type variable: ",+ (Core.unName (ErrorCore.undefinedTypeVariableErrorName e))]++-- | Show an undefined type variable in binding type error as a string+undefinedTypeVariableInBindingTypeError :: ErrorCore.UndefinedTypeVariableInBindingTypeError -> String+undefinedTypeVariableInBindingTypeError e =+ Strings.cat [+ "undefined type variable in binding type: ",+ (Core.unName (ErrorCore.undefinedTypeVariableInBindingTypeErrorName e))]++-- | Show an undefined type variable in lambda domain error as a string+undefinedTypeVariableInLambdaDomainError :: ErrorCore.UndefinedTypeVariableInLambdaDomainError -> String+undefinedTypeVariableInLambdaDomainError e =+ Strings.cat [+ "undefined type variable in lambda domain: ",+ (Core.unName (ErrorCore.undefinedTypeVariableInLambdaDomainErrorName e))]++-- | Show an undefined type variable in type application error as a string+undefinedTypeVariableInTypeApplicationError :: ErrorCore.UndefinedTypeVariableInTypeApplicationError -> String+undefinedTypeVariableInTypeApplicationError e =+ Strings.cat [+ "undefined type variable in type application: ",+ (Core.unName (ErrorCore.undefinedTypeVariableInTypeApplicationErrorName e))]++-- | Show an unexpected term variant error as a string+unexpectedTermVariantError :: ErrorCore.UnexpectedTermVariantError -> String+unexpectedTermVariantError e =++ let expected = ErrorCore.unexpectedTermVariantErrorExpectedVariant e+ actual = ErrorCore.unexpectedTermVariantErrorActualTerm e+ in (Strings.cat [+ "expected ",+ (PrintVariants.termVariant expected),+ " term but found ",+ (PrintCore.term actual)])++-- | Show an unexpected type variant error as a string+unexpectedTypeVariantError :: ErrorCore.UnexpectedTypeVariantError -> String+unexpectedTypeVariantError e =++ let expected = ErrorCore.unexpectedTypeVariantErrorExpectedVariant e+ actual = ErrorCore.unexpectedTypeVariantErrorActualType e+ in (Strings.cat [+ "expected ",+ (PrintVariants.typeVariant expected),+ " type but found ",+ (PrintCore.type_ actual)])++-- | Show an unknown case alternative error as a string+unknownCaseAlternativeError :: ErrorCore.UnknownCaseAlternativeError -> String+unknownCaseAlternativeError e =++ let tname = ErrorCore.unknownCaseAlternativeErrorTypeName e+ name = ErrorCore.unknownCaseAlternativeErrorName e+ in (Strings.cat [+ "case alternative ",+ (Core.unName name),+ " is not a variant of type ",+ (Core.unName tname)])++-- | Show an unknown primitive name error as a string+unknownPrimitiveNameError :: ErrorCore.UnknownPrimitiveNameError -> String+unknownPrimitiveNameError e =+ Strings.cat [+ "unknown primitive: ",+ (Core.unName (ErrorCore.unknownPrimitiveNameErrorName e))]++-- | Show an unnecessary identity application error as a string+unnecessaryIdentityApplicationError :: t0 -> String+unnecessaryIdentityApplicationError e = "unnecessary application of identity lambda"++-- | Show an untyped term variable error as a string+untypedTermVariableError :: ErrorCore.UntypedTermVariableError -> String+untypedTermVariableError e =+ Strings.cat [+ "untyped term variable: ",+ (Core.unName (ErrorCore.untypedTermVariableErrorName e))]++-- | Show a void in non-bottom position error as a string+voidInNonBottomPositionError :: t0 -> String+voidInNonBottomPositionError e = "TypeVoid in a position where no value can be constructed"
+ src/main/haskell/Hydra/Print/Error/Packaging.hs view
@@ -0,0 +1,169 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.error.packaging types++module Hydra.Print.Error.Packaging 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.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Util as PrintUtil+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++-- | Show a conflicting module namespace error as a string+conflictingModuleNameError :: ErrorPackaging.ConflictingModuleNameError -> String+conflictingModuleNameError e =+ Strings.cat [+ "module namespaces conflict when mapped to target language path: ",+ (Packaging.unModuleName (ErrorPackaging.conflictingModuleNameErrorFirst e)),+ " vs ",+ (Packaging.unModuleName (ErrorPackaging.conflictingModuleNameErrorSecond e))]++-- | Show a conflicting variant name error as a string+conflictingVariantNameError :: ErrorPackaging.ConflictingVariantNameError -> String+conflictingVariantNameError e =+ Strings.cat [+ "in module ",+ (Packaging.unModuleName (ErrorPackaging.conflictingVariantNameErrorModuleName e)),+ ": variant ",+ (Core.unName (ErrorPackaging.conflictingVariantNameErrorVariantName e)),+ " of type ",+ (Core.unName (ErrorPackaging.conflictingVariantNameErrorTypeName e)),+ " produces constructor name ",+ (Core.unName (ErrorPackaging.conflictingVariantNameErrorConflictingName e)),+ " which conflicts with another type definition"]++-- | Show a definition-not-in-module-namespace error as a string+definitionNotInModuleNameError :: ErrorPackaging.DefinitionNotInModuleNameError -> String+definitionNotInModuleNameError e =+ Strings.cat [+ "definition ",+ (Core.unName (ErrorPackaging.definitionNotInModuleNameErrorName e)),+ " is not in module namespace ",+ (Packaging.unModuleName (ErrorPackaging.definitionNotInModuleNameErrorModuleName e))]++-- | Show a definitions-out-of-order error as a string+definitionsOutOfOrderError :: ErrorPackaging.DefinitionsOutOfOrderError -> String+definitionsOutOfOrderError e =+ Strings.cat [+ "in module ",+ (Packaging.unModuleName (ErrorPackaging.definitionsOutOfOrderErrorModuleName e)),+ ": definitions out of order: ",+ (Core.unName (ErrorPackaging.definitionsOutOfOrderErrorPrecedingName e)),+ " precedes ",+ (Core.unName (ErrorPackaging.definitionsOutOfOrderErrorFollowingName e))]++-- | Show a duplicate definition name error as a string+duplicateDefinitionNameError :: ErrorPackaging.DuplicateDefinitionNameError -> String+duplicateDefinitionNameError e =+ Strings.cat [+ "in module ",+ (Packaging.unModuleName (ErrorPackaging.duplicateDefinitionNameErrorModuleName e)),+ ": duplicate definition name ",+ (Core.unName (ErrorPackaging.duplicateDefinitionNameErrorName e))]++-- | Show a duplicate module namespace error as a string+duplicateModuleNameError :: ErrorPackaging.DuplicateModuleNameError -> String+duplicateModuleNameError e =+ Strings.cat [+ "duplicate module namespace ",+ (Packaging.unModuleName (ErrorPackaging.duplicateModuleNameErrorModuleName e))]++-- | Show an invalid definition name error as a string+invalidDefinitionNameError :: ErrorPackaging.InvalidDefinitionNameError -> String+invalidDefinitionNameError e =+ Strings.cat [+ "in module ",+ (Packaging.unModuleName (ErrorPackaging.invalidDefinitionNameErrorModuleName e)),+ ": definition ",+ (Core.unName (ErrorPackaging.invalidDefinitionNameErrorName e)),+ " does not match expected ",+ (PrintUtil.caseConvention (ErrorPackaging.invalidDefinitionNameErrorExpectedConvention e))]++-- | Show an invalid module error as a string+invalidModuleError :: ErrorPackaging.InvalidModuleError -> String+invalidModuleError e =+ Strings.cat2 "invalid module: " (case e of+ ErrorPackaging.InvalidModuleErrorConflictingVariantName v0 -> conflictingVariantNameError v0+ ErrorPackaging.InvalidModuleErrorDefinitionNotInModuleName v0 -> definitionNotInModuleNameError v0+ ErrorPackaging.InvalidModuleErrorDefinitionsOutOfOrder v0 -> definitionsOutOfOrderError v0+ ErrorPackaging.InvalidModuleErrorDuplicateDefinitionName v0 -> duplicateDefinitionNameError v0+ ErrorPackaging.InvalidModuleErrorInvalidDefinitionName v0 -> invalidDefinitionNameError v0+ ErrorPackaging.InvalidModuleErrorInvalidModuleNameConvention v0 -> invalidModuleNameConventionError v0+ ErrorPackaging.InvalidModuleErrorMissingDocumentation v0 -> missingDocumentationError v0)++-- | Show an invalid namespace convention error as a string+invalidModuleNameConventionError :: ErrorPackaging.InvalidModuleNameConventionError -> String+invalidModuleNameConventionError e =+ Strings.cat [+ "namespace ",+ (Packaging.unModuleName (ErrorPackaging.invalidModuleNameConventionErrorModuleName e)),+ " does not match the dotted-camelCase naming convention"]++-- | Show an invalid package error as a string+invalidPackageError :: ErrorPackaging.InvalidPackageError -> String+invalidPackageError e =+ Strings.cat2 "invalid package: " (case e of+ ErrorPackaging.InvalidPackageErrorConflictingModuleName v0 -> conflictingModuleNameError v0+ ErrorPackaging.InvalidPackageErrorDuplicateModuleName v0 -> duplicateModuleNameError v0+ ErrorPackaging.InvalidPackageErrorInvalidModule v0 -> invalidModuleError v0+ ErrorPackaging.InvalidPackageErrorInvalidPackageName v0 -> invalidPackageNameError v0+ ErrorPackaging.InvalidPackageErrorUndeclaredDependency v0 -> undeclaredDependencyError v0)++-- | Show an invalid package name error as a string+invalidPackageNameError :: ErrorPackaging.InvalidPackageNameError -> String+invalidPackageNameError e =+ Strings.cat [+ "package name ",+ (Packaging.unPackageName (ErrorPackaging.invalidPackageNameErrorPackageName e)),+ " does not match the hyphen-separated lowercase naming convention"]++-- | Show a missing documentation error as a string+missingDocumentationError :: ErrorPackaging.MissingDocumentationError -> String+missingDocumentationError e =+ Strings.cat [+ "in module ",+ (Packaging.unModuleName (ErrorPackaging.missingDocumentationErrorModuleName e)),+ ": definition ",+ (Core.unName (ErrorPackaging.missingDocumentationErrorName e)),+ " lacks a description annotation"]++-- | Show an undeclared dependency error as a string+undeclaredDependencyError :: ErrorPackaging.UndeclaredDependencyError -> String+undeclaredDependencyError e =+ Strings.cat [+ "module ",+ (Packaging.unModuleName (ErrorPackaging.undeclaredDependencyErrorModuleName e)),+ " references ",+ (Core.unName (ErrorPackaging.undeclaredDependencyErrorReferencedName e)),+ ", whose owning module ",+ (Packaging.unModuleName (ErrorPackaging.undeclaredDependencyErrorOwningModuleName e)),+ " is not among its declared dependencies; add it to moduleDependencies"]
+ src/main/haskell/Hydra/Print/Errors.hs view
@@ -0,0 +1,215 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.error types++module Hydra.Print.Errors 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.Formatting as Formatting+import qualified Hydra.Graph as Graph+import qualified Hydra.Json.Model as Model+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Error.Core as PrintErrorCore+import qualified Hydra.Print.Typing as PrintTyping+import qualified Hydra.Print.Variants as PrintVariants+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++-- | Show a checking error as a string+checkingError :: Checking.CheckingError -> String+checkingError ce =+ case ce of+ Checking.CheckingErrorIncorrectUnification v0 -> incorrectUnificationError v0+ Checking.CheckingErrorNotAForallType v0 -> notAForallTypeError v0+ Checking.CheckingErrorNotAFunctionType v0 -> notAFunctionTypeError v0+ Checking.CheckingErrorTypeArityMismatch v0 -> typeArityMismatchError v0+ Checking.CheckingErrorTypeMismatch v0 -> typeMismatchError v0+ Checking.CheckingErrorUnboundTypeVariables v0 -> unboundTypeVariablesError v0+ Checking.CheckingErrorUnequalTypes v0 -> unequalTypesError v0+ Checking.CheckingErrorUnsupportedTermVariant v0 -> unsupportedTermVariantError v0+ Checking.CheckingErrorUntypedLambda v0 -> untypedLambdaError v0+ Checking.CheckingErrorUntypedLetBinding v0 -> untypedLetBindingError v0++-- | Show a decoding error as a string+decodingError :: Errors.DecodingError -> String+decodingError de = Strings.cat2 "decoding error: " (Errors.unDecodingError de)++-- | Show an error as a string+error :: Errors.Error -> String+error e =+ case e of+ Errors.ErrorChecking v0 -> checkingError v0+ Errors.ErrorDecoding v0 -> decodingError v0+ Errors.ErrorDuplicateBinding v0 -> PrintErrorCore.duplicateBindingError v0+ Errors.ErrorDuplicateField v0 -> PrintErrorCore.duplicateFieldError v0+ Errors.ErrorExtraction _ -> "extraction error"+ Errors.ErrorInference _ -> "inference error"+ Errors.ErrorOther v0 -> otherError v0+ Errors.ErrorResolution v0 -> resolutionError v0+ Errors.ErrorUndefinedField v0 -> PrintErrorCore.undefinedFieldError v0+ Errors.ErrorUndefinedTermVariable v0 -> PrintErrorCore.undefinedTermVariableError v0+ Errors.ErrorUntypedTermVariable v0 -> PrintErrorCore.untypedTermVariableError v0+ Errors.ErrorUnexpectedTermVariant v0 -> PrintErrorCore.unexpectedTermVariantError v0+ Errors.ErrorUnexpectedTypeVariant v0 -> PrintErrorCore.unexpectedTypeVariantError v0+ Errors.ErrorUnification v0 -> unificationError v0++-- | Show an incorrect unification error as a string+incorrectUnificationError :: Checking.IncorrectUnificationError -> String+incorrectUnificationError e =++ let subst = Checking.incorrectUnificationErrorSubstitution e+ in (Strings.cat2 "incorrect unification: " (PrintTyping.typeSubst subst))++-- | Show a not-a-forall-type error as a string+notAForallTypeError :: Checking.NotAForallTypeError -> String+notAForallTypeError e =++ let typ = Checking.notAForallTypeErrorType e+ args = Checking.notAForallTypeErrorTypeArguments e+ in (Strings.cat [+ "not a forall type: ",+ (PrintCore.type_ typ),+ ". Trying to apply ",+ (Literals.showInt32 (Lists.length args)),+ " type argument(s): ",+ (Formatting.showList PrintCore.type_ args)])++-- | Show a not-a-function-type error as a string+notAFunctionTypeError :: Checking.NotAFunctionTypeError -> String+notAFunctionTypeError e =++ let typ = Checking.notAFunctionTypeErrorType e+ in (Strings.cat2 "not a function type: " (PrintCore.type_ typ))++-- | Show an other error as a string+otherError :: Errors.OtherError -> String+otherError oe = Errors.unOtherError oe++-- | Show a resolution error as a string, including the offending name or shape+resolutionError :: Errors.ResolutionError -> String+resolutionError re =+ case re of+ Errors.ResolutionErrorNoSuchBinding v0 -> Strings.cat2 "no such binding: " (Core.unName (Errors.noSuchBindingErrorName v0))+ Errors.ResolutionErrorNoSuchPrimitive v0 -> Strings.cat2 "no such primitive: " (Core.unName (Errors.noSuchPrimitiveErrorName v0))+ Errors.ResolutionErrorNoMatchingField v0 -> Strings.cat2 "no matching field: " (Core.unName (Errors.noMatchingFieldErrorFieldName v0))+ Errors.ResolutionErrorOther v0 -> Strings.cat2 "resolution error: " (Errors.unOtherResolutionError v0)+ Errors.ResolutionErrorUnexpectedShape v0 -> Strings.cat [+ "unexpected shape: expected ",+ (Errors.unexpectedShapeErrorExpected v0),+ " but got ",+ (Errors.unexpectedShapeErrorActual v0)]++-- | Show a type arity mismatch error as a string+typeArityMismatchError :: Checking.TypeArityMismatchError -> String+typeArityMismatchError e =++ let typ = Checking.typeArityMismatchErrorType e+ expected = Checking.typeArityMismatchErrorExpectedArity e+ actual = Checking.typeArityMismatchErrorActualArity e+ args = Checking.typeArityMismatchErrorTypeArguments e+ in (Strings.cat [+ "type ",+ (PrintCore.type_ typ),+ " applied to the wrong number of type arguments (expected ",+ (Literals.showInt32 expected),+ ", got ",+ (Literals.showInt32 actual),+ "): ",+ (Formatting.showList PrintCore.type_ args)])++-- | Show a type mismatch error as a string+typeMismatchError :: Checking.TypeMismatchError -> String+typeMismatchError e =++ let expected = Checking.typeMismatchErrorExpectedType e+ actual = Checking.typeMismatchErrorActualType e+ in (Strings.cat [+ "type mismatch: expected ",+ (PrintCore.type_ expected),+ " but found ",+ (PrintCore.type_ actual)])++-- | Show an unbound type variables error as a string+unboundTypeVariablesError :: Checking.UnboundTypeVariablesError -> String+unboundTypeVariablesError e =++ let vars = Checking.unboundTypeVariablesErrorVariables e+ typ = Checking.unboundTypeVariablesErrorType e+ in (Strings.cat [+ "unbound type variables: {",+ (Strings.intercalate ", " (Lists.map Core.unName (Sets.toList vars))),+ "} in type ",+ (PrintCore.type_ typ)])++-- | Show an unequal types error as a string+unequalTypesError :: Checking.UnequalTypesError -> String+unequalTypesError e =++ let types = Checking.unequalTypesErrorTypes e+ desc = Checking.unequalTypesErrorDescription e+ in (Strings.cat [+ "unequal types ",+ (Formatting.showList PrintCore.type_ types),+ " in ",+ desc])++-- | Show a unification error as a string+unificationError :: Errors.UnificationError -> String+unificationError e =++ let lt = Errors.unificationErrorLeftType e+ rt = Errors.unificationErrorRightType e+ msg = Errors.unificationErrorMessage e+ in (Strings.cat [+ "unification error: cannot unify ",+ (PrintCore.type_ lt),+ " with ",+ (PrintCore.type_ rt),+ ": ",+ msg])++-- | Show an unsupported term variant error as a string+unsupportedTermVariantError :: Checking.UnsupportedTermVariantError -> String+unsupportedTermVariantError e =+ Strings.cat2 "unsupported term variant: " (PrintVariants.termVariant (Checking.unsupportedTermVariantErrorTermVariant e))++-- | Show an untyped lambda error as a string+untypedLambdaError :: t0 -> String+untypedLambdaError _ = "untyped lambda"++-- | Show an untyped let binding error as a string+untypedLetBindingError :: Checking.UntypedLetBindingError -> String+untypedLetBindingError e =++ let b = Checking.untypedLetBindingErrorBinding e+ in (Strings.cat2 "untyped let binding: " (PrintCore.binding b))
+ src/main/haskell/Hydra/Print/Graph.hs view
@@ -0,0 +1,50 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.graph types++module Hydra.Print.Graph 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.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+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++-- | Show a list of bindings as a string+graph :: [Core.Binding] -> String+graph elements =++ let elementStrs = Lists.map PrintCore.binding elements+ in (Strings.cat [+ "{",+ (Strings.intercalate ", " elementStrs),+ "}"])
+ src/main/haskell/Hydra/Print/Paths.hs view
@@ -0,0 +1,141 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Utilities for working with subterm steps and paths.++module Hydra.Print.Paths 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.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Names as Names+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.Rewriting as Rewriting+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+import qualified Data.Map as M++-- | Convert a subterm step to a string representation+subtermStep :: Paths.SubtermStep -> Maybe String+subtermStep step =++ let idx = \i -> Nothing+ idxSuff = \suffix -> \i -> Optionals.map (\s -> Strings.cat2 s suffix) (idx i)+ in case step of+ Paths.SubtermStepAnnotatedBody -> Nothing+ Paths.SubtermStepApplicationFunction -> Just "fun"+ Paths.SubtermStepApplicationArgument -> Just "arg"+ Paths.SubtermStepLambdaBody -> Just "body"+ Paths.SubtermStepUnionCasesDefault -> Just "default"+ Paths.SubtermStepUnionCasesBranch v0 -> Just (Strings.cat2 "." (Core.unName v0))+ Paths.SubtermStepLetBody -> Just "in"+ Paths.SubtermStepLetBinding v0 -> Just (Strings.cat2 (Core.unName v0) "=")+ Paths.SubtermStepListElement v0 -> idx v0+ Paths.SubtermStepMapKey v0 -> idxSuff ".key" v0+ Paths.SubtermStepMapValue v0 -> idxSuff ".value" v0+ Paths.SubtermStepOptionalTerm -> Just "given"+ Paths.SubtermStepProductTerm v0 -> idx v0+ Paths.SubtermStepRecordField v0 -> Just (Strings.cat2 "." (Core.unName v0))+ Paths.SubtermStepSetElement v0 -> idx v0+ Paths.SubtermStepSumTerm -> Nothing+ Paths.SubtermStepTypeLambdaBody -> Nothing+ Paths.SubtermStepTypeApplicationTerm -> Nothing+ Paths.SubtermStepInjectionTerm -> Nothing+ Paths.SubtermStepWrappedTerm -> Nothing++-- | Build a subterm graph from a term+termToSubtermGraph :: M.Map Packaging.ModuleName String -> Core.Term -> Paths.SubtermGraph+termToSubtermGraph namespaces term =++ let dontCareStep = Paths.SubtermStepAnnotatedBody+ helper =+ \ids -> \mroot -> \path -> \state -> \stepTerm ->+ let step = Pairs.first stepTerm+ currentTerm = Pairs.second stepTerm+ nodesEdges = Pairs.first state+ visited = Pairs.second state+ nodes = Pairs.first nodesEdges+ edges = Pairs.second nodesEdges+ nextPath = Lists.cons step path+ in case currentTerm of+ Core.TermLet v0 ->+ let bindings = Core.letBindings v0+ env = Core.letBody v0+ bindingNames = Lists.map Core.bindingName bindings+ addBindingName =+ \nodesVisitedIds -> \name ->+ let currentNodesVisited = Pairs.first nodesVisitedIds+ currentIds = Pairs.second nodesVisitedIds+ currentNodes = Pairs.first currentNodesVisited+ currentVisited = Pairs.second currentNodesVisited+ rawLabel = Names.compactName namespaces name+ uniqueLabel = Names.chooseUniqueLabel currentVisited rawLabel+ node =+ Paths.SubtermNode {+ Paths.subtermNodeName = name,+ Paths.subtermNodeLabel = rawLabel,+ Paths.subtermNodeId = uniqueLabel}+ newVisited = Sets.insert uniqueLabel currentVisited+ newNodes = Lists.cons node currentNodes+ newIds = Maps.insert name node currentIds+ in ((newNodes, newVisited), newIds)+ nodesVisitedIds1 = Lists.foldl addBindingName (([], visited), ids) bindingNames+ nodes1 = Pairs.first (Pairs.first nodesVisitedIds1)+ visited1 = Pairs.second (Pairs.first nodesVisitedIds1)+ ids1 = Pairs.second nodesVisitedIds1+ addBindingTerm =+ \currentState -> \nodeBinding ->+ let root = Pairs.first nodeBinding+ binding = Pairs.second nodeBinding+ term1 = Core.bindingTerm binding+ in (helper ids1 (Just root) [] currentState (dontCareStep, term1))+ nodeBindingPairs = Lists.zip nodes1 bindings+ stateAfterBindings = Lists.foldl addBindingTerm ((Lists.concat2 nodes1 nodes, edges), visited1) nodeBindingPairs+ in (helper ids1 mroot nextPath stateAfterBindings (Paths.SubtermStepLetBody, env))+ Core.TermVariable v0 -> Optionals.cases mroot state (\root -> Optionals.cases (Maps.lookup v0 ids) state (\node ->+ let edge =+ Paths.SubtermEdge {+ Paths.subtermEdgeSource = root,+ Paths.subtermEdgePath = (Paths.SubtermPath (Lists.reverse nextPath)),+ Paths.subtermEdgeTarget = node}+ newEdges = Lists.cons edge edges+ in ((nodes, newEdges), visited)))+ _ -> Lists.foldl (helper ids mroot nextPath) state (Rewriting.subtermsWithSteps currentTerm)+ initialState = (([], []), Sets.empty)+ result = helper Maps.empty Nothing [] initialState (dontCareStep, term)+ finalNodesEdges = Pairs.first result+ finalNodes = Pairs.first finalNodesEdges+ finalEdges = Pairs.second finalNodesEdges+ in Paths.SubtermGraph {+ Paths.subtermGraphNodes = finalNodes,+ Paths.subtermGraphEdges = finalEdges}
+ src/main/haskell/Hydra/Print/Pcre/Regex.hs view
@@ -0,0 +1,153 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Per-dialect printer rendering the hydra.regex AST into the PCRE / java.util.regex / ECMA family syntax (Java, Scala, Clojure, Python, Common Lisp, TypeScript). Differs from the canonical hydra.print.regex in exactly one place: Hydra's . (any character INCLUDING newline) renders as [\s\S] rather than a bare . (whose native meaning excludes newline in these engines). All other productions match the canonical form. See docs/specification/regex.md and issue #567.++module Hydra.Print.Pcre.Regex 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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++-- | Render an alternation, joining its branches with the | operator.+alternation :: [[Regex.Quantified]] -> String+alternation alt = Strings.intercalate "|" (Lists.map regexSequence alt)++-- | Render a single atom; the . metacharacter renders as [\s\S] to preserve newline-inclusive 'any'.+atom :: Regex.Atom -> String+atom a =+ case a of+ Regex.AtomLiteral v0 -> escapeLiteral v0+ Regex.AtomAny -> "[\\s\\S]"+ Regex.AtomAnchorStart -> "^"+ Regex.AtomAnchorEnd -> "$"+ Regex.AtomGroup v0 -> Strings.cat [+ "(",+ (alternation v0),+ ")"]+ Regex.AtomClass v0 -> characterClass v0++-- | Render a character class, including the leading ^ for a negated class.+characterClass :: Regex.CharacterClass -> String+characterClass cc =+ Strings.cat [+ "[",+ (Logic.ifElse (Regex.characterClassNegated cc) "^" ""),+ (Strings.cat (Lists.map classItem (Regex.characterClassItems cc))),+ "]"]++-- | Render one character-class member (a single character or an inclusive range).+classItem :: Regex.ClassItem -> String+classItem item =+ case item of+ Regex.ClassItemCharacter v0 -> escapeClassChar v0+ Regex.ClassItemRange v0 -> Strings.cat [+ escapeClassChar (Regex.characterRangeFrom v0),+ "-",+ (escapeClassChar (Regex.characterRangeTo v0))]++-- | Render a code point inside a character class, uniformly escaping the class metacharacters \ ] ^ -.+escapeClassChar :: Int -> String+escapeClassChar c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 92,+ 93,+ 94,+ 45]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a literal code point in top-level context, backslash-escaping PCRE/ECMA metacharacters.+escapeLiteral :: Int -> String+escapeLiteral c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 46,+ 94,+ 36,+ 42,+ 43,+ 63,+ 40,+ 41,+ 91,+ 93,+ 123,+ 125,+ 124,+ 92]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a hydra.regex AST into PCRE / java.util.regex / ECMA syntax. Identical to the canonical printer except that . (any incl. newline) becomes [\s\S].+printRegex :: [[Regex.Quantified]] -> String+printRegex r = alternation r++-- | Render an atom followed by its quantifier suffix.+quantified :: Regex.Quantified -> String+quantified qa = Strings.cat2 (atom (Regex.quantifiedAtom qa)) (quantifier (Regex.quantifiedQuantifier qa))++-- | Render a quantifier suffix; the 'one' quantifier renders as the empty string.+quantifier :: Regex.Quantifier -> String+quantifier q =+ case q of+ Regex.QuantifierOne -> ""+ Regex.QuantifierZeroOrOne -> "?"+ Regex.QuantifierZeroOrMore -> "*"+ Regex.QuantifierOneOrMore -> "+"+ Regex.QuantifierExactly v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ "}"]+ Regex.QuantifierAtLeast v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ ",}"]+ Regex.QuantifierRange_ v0 -> Strings.cat [+ "{",+ (Literals.showInt32 (Regex.quantifierRangeMin v0)),+ ",",+ (Literals.showInt32 (Regex.quantifierRangeMax v0)),+ "}"]++-- | Render a sequence of quantified atoms by concatenation.+regexSequence :: [Regex.Quantified] -> String+regexSequence s = Strings.cat (Lists.map quantified s)++-- | Render a single Unicode code point as a one-character string.+showCodePoint :: Int -> String+showCodePoint c = Strings.fromList [+ c]
+ src/main/haskell/Hydra/Print/Posix/Regex.hs view
@@ -0,0 +1,163 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Per-dialect printer rendering the hydra.regex AST into POSIX ERE syntax (Haskell Text.Regex.TDFA, Scheme Guile (ice-9 regex)). Differs from the canonical hydra.print.regex in one place: Hydra's . (any character INCLUDING newline) renders as the explicit full-code-point-range class [<U+0000>-<U+10FFFF>], because POSIX ERE's native . excludes newline and POSIX ERE does not support the \s / \S shorthands (confirmed by TDFA probe). All other productions are native POSIX ERE. See docs/specification/regex.md and issue #567.++module Hydra.Print.Posix.Regex 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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++-- | Render an alternation, joining its branches with the | operator.+alternation :: [[Regex.Quantified]] -> String+alternation alt = Strings.intercalate "|" (Lists.map regexSequence alt)++-- | The POSIX ERE rendering of Hydra's . (any character incl. newline): an explicit character-class range spanning the whole Unicode scalar range, which POSIX ERE engines match literally.+anyClass :: String+anyClass =+ Strings.cat [+ "[",+ (showCodePoint 0),+ "-",+ (showCodePoint 1114111),+ "]"]++-- | Render a single atom; . renders as the explicit full-code-point-range class (POSIX-safe).+atom :: Regex.Atom -> String+atom a =+ case a of+ Regex.AtomLiteral v0 -> escapeLiteral v0+ Regex.AtomAny -> anyClass+ Regex.AtomAnchorStart -> "^"+ Regex.AtomAnchorEnd -> "$"+ Regex.AtomGroup v0 -> Strings.cat [+ "(",+ (alternation v0),+ ")"]+ Regex.AtomClass v0 -> characterClass v0++-- | Render a character class, including the leading ^ for a negated class.+characterClass :: Regex.CharacterClass -> String+characterClass cc =+ Strings.cat [+ "[",+ (Logic.ifElse (Regex.characterClassNegated cc) "^" ""),+ (Strings.cat (Lists.map classItem (Regex.characterClassItems cc))),+ "]"]++-- | Render one character-class member (a single character or an inclusive range).+classItem :: Regex.ClassItem -> String+classItem item =+ case item of+ Regex.ClassItemCharacter v0 -> escapeClassChar v0+ Regex.ClassItemRange v0 -> Strings.cat [+ escapeClassChar (Regex.characterRangeFrom v0),+ "-",+ (escapeClassChar (Regex.characterRangeTo v0))]++-- | Render a code point inside a character class, uniformly escaping the class metacharacters \ ] ^ -.+escapeClassChar :: Int -> String+escapeClassChar c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 92,+ 93,+ 94,+ 45]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a literal code point in top-level context, backslash-escaping POSIX ERE metacharacters.+escapeLiteral :: Int -> String+escapeLiteral c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 46,+ 94,+ 36,+ 42,+ 43,+ 63,+ 40,+ 41,+ 91,+ 93,+ 123,+ 125,+ 124,+ 92]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a hydra.regex AST into POSIX ERE syntax. Identical to the canonical printer except that . (any incl. newline) becomes the explicit full-code-point-range class.+printRegex :: [[Regex.Quantified]] -> String+printRegex r = alternation r++-- | Render an atom followed by its quantifier suffix.+quantified :: Regex.Quantified -> String+quantified qa = Strings.cat2 (atom (Regex.quantifiedAtom qa)) (quantifier (Regex.quantifiedQuantifier qa))++-- | Render a quantifier suffix; the 'one' quantifier renders as the empty string.+quantifier :: Regex.Quantifier -> String+quantifier q =+ case q of+ Regex.QuantifierOne -> ""+ Regex.QuantifierZeroOrOne -> "?"+ Regex.QuantifierZeroOrMore -> "*"+ Regex.QuantifierOneOrMore -> "+"+ Regex.QuantifierExactly v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ "}"]+ Regex.QuantifierAtLeast v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ ",}"]+ Regex.QuantifierRange_ v0 -> Strings.cat [+ "{",+ (Literals.showInt32 (Regex.quantifierRangeMin v0)),+ ",",+ (Literals.showInt32 (Regex.quantifierRangeMax v0)),+ "}"]++-- | Render a sequence of quantified atoms by concatenation.+regexSequence :: [Regex.Quantified] -> String+regexSequence s = Strings.cat (Lists.map quantified s)++-- | Render a single Unicode code point as a one-character string.+showCodePoint :: Int -> String+showCodePoint c = Strings.fromList [+ c]
+ src/main/haskell/Hydra/Print/Regex.hs view
@@ -0,0 +1,153 @@+-- Note: this is an automatically generated file. Do not edit.++-- | Canonical printer for Hydra's translingual regular-expression syntax (docs/specification/regex.md): hydra.regex AST -> canonical text. Escapes minimally (a character is escaped only where it is special in its context), so that print.regex . parse.regex is idempotent on well-formed input. Per-dialect renderers (hydra.print.<dialect>.regex) build on this. See issue #567.++module Hydra.Print.Regex 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.Overlay.Haskell.Lib.Equality as Equality+import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals+import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+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++-- | Render an alternation, joining its branches with the | operator.+alternation :: [[Regex.Quantified]] -> String+alternation alt = Strings.intercalate "|" (Lists.map regexSequence alt)++-- | Render a single atom (literal, ., anchor, group, or class) to canonical text.+atom :: Regex.Atom -> String+atom a =+ case a of+ Regex.AtomLiteral v0 -> escapeLiteral v0+ Regex.AtomAny -> "."+ Regex.AtomAnchorStart -> "^"+ Regex.AtomAnchorEnd -> "$"+ Regex.AtomGroup v0 -> Strings.cat [+ "(",+ (alternation v0),+ ")"]+ Regex.AtomClass v0 -> characterClass v0++-- | Render a character class, including the leading ^ for a negated class.+characterClass :: Regex.CharacterClass -> String+characterClass cc =+ Strings.cat [+ "[",+ (Logic.ifElse (Regex.characterClassNegated cc) "^" ""),+ (Strings.cat (Lists.map classItem (Regex.characterClassItems cc))),+ "]"]++-- | Render one character-class member (a single character or an inclusive range) to canonical text.+classItem :: Regex.ClassItem -> String+classItem item =+ case item of+ Regex.ClassItemCharacter v0 -> escapeClassChar v0+ Regex.ClassItemRange v0 -> Strings.cat [+ escapeClassChar (Regex.characterRangeFrom v0),+ "-",+ (escapeClassChar (Regex.characterRangeTo v0))]++-- | Render a code point inside a character class, backslash-escaping it iff it is one of the class metacharacters \ ] ^ -. Escaping is uniform, with no positional exceptions (a literal '-' always prints as \-).+escapeClassChar :: Int -> String+escapeClassChar c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 92,+ 93,+ 94,+ 45]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a literal code point in top-level context, backslash-escaping it iff it is one of the top-level metacharacters . ^ $ * + ? ( ) [ ] { } | \. A '-' is not special at top level and prints bare.+escapeLiteral :: Int -> String+escapeLiteral c =++ let isMeta =+ Lists.foldl (\acc -> \m -> Logic.or acc (Equality.equal c m)) False [+ 46,+ 94,+ 36,+ 42,+ 43,+ 63,+ 40,+ 41,+ 91,+ 93,+ 123,+ 125,+ 124,+ 92]+ in (Logic.ifElse isMeta (Strings.cat2 "\\" (showCodePoint c)) (showCodePoint c))++-- | Render a hydra.regex AST to canonical Hydra regex text. Escapes minimally, so that printRegex . parseRegex is the identity on well-formed patterns.+printRegex :: [[Regex.Quantified]] -> String+printRegex r = alternation r++-- | Render an atom followed by its quantifier suffix.+quantified :: Regex.Quantified -> String+quantified qa = Strings.cat2 (atom (Regex.quantifiedAtom qa)) (quantifier (Regex.quantifiedQuantifier qa))++-- | Render a quantifier suffix; the 'one' quantifier renders as the empty string.+quantifier :: Regex.Quantifier -> String+quantifier q =+ case q of+ Regex.QuantifierOne -> ""+ Regex.QuantifierZeroOrOne -> "?"+ Regex.QuantifierZeroOrMore -> "*"+ Regex.QuantifierOneOrMore -> "+"+ Regex.QuantifierExactly v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ "}"]+ Regex.QuantifierAtLeast v0 -> Strings.cat [+ "{",+ (Literals.showInt32 v0),+ ",}"]+ Regex.QuantifierRange_ v0 -> Strings.cat [+ "{",+ (Literals.showInt32 (Regex.quantifierRangeMin v0)),+ ",",+ (Literals.showInt32 (Regex.quantifierRangeMax v0)),+ "}"]++-- | Render a sequence of quantified atoms by concatenation.+regexSequence :: [Regex.Quantified] -> String+regexSequence s = Strings.cat (Lists.map quantified s)++-- | Render a single Unicode code point as a one-character string.+showCodePoint :: Int -> String+showCodePoint c = Strings.fromList [+ c]
+ src/main/haskell/Hydra/Print/Typing.hs view
@@ -0,0 +1,73 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.typing types++module Hydra.Print.Typing 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.Overlay.Haskell.Lib.Lists as Lists+import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps+import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs+import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings+import qualified Hydra.Packaging as Packaging+import qualified Hydra.Parsing as Parsing+import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+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++-- | Show a type constraint as a string+typeConstraint :: Typing.TypeConstraint -> String+typeConstraint tc =++ let ltyp = Typing.typeConstraintLeft tc+ rtyp = Typing.typeConstraintRight tc+ in (Strings.cat [+ PrintCore.type_ ltyp,+ "\8801",+ (PrintCore.type_ rtyp)])++-- | Show a type substitution as a string+typeSubst :: Typing.TypeSubst -> String+typeSubst ts =++ let subst = Typing.unTypeSubst ts+ pairs = Maps.toList subst+ showPair =+ \pair ->+ let name = Core.unName (Pairs.first pair)+ typ = Pairs.second pair+ in (Strings.cat [+ name,+ "\8614",+ (PrintCore.type_ typ)])+ pairStrs = Lists.map showPair pairs+ in (Strings.cat [+ "{",+ (Strings.intercalate "," pairStrs),+ "}"])
+ src/main/haskell/Hydra/Print/Util.hs view
@@ -0,0 +1,54 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.util types++module Hydra.Print.Util 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++-- | Show a case convention as a string+caseConvention :: Util.CaseConvention -> String+caseConvention c =+ case c of+ Util.CaseConventionLowerSnake -> "lower_snake_case"+ Util.CaseConventionUpperSnake -> "UPPER_SNAKE_CASE"+ Util.CaseConventionCamel -> "camelCase"+ Util.CaseConventionPascal -> "PascalCase"++-- | Show a comparison result as a string+comparison :: Util.Comparison -> String+comparison c =+ case c of+ Util.ComparisonLessThan -> "lessThan"+ Util.ComparisonEqualTo -> "equalTo"+ Util.ComparisonGreaterThan -> "greaterThan"
+ src/main/haskell/Hydra/Print/Variants.hs view
@@ -0,0 +1,86 @@+-- Note: this is an automatically generated file. Do not edit.++-- | String representations of hydra.variants types++module Hydra.Print.Variants 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++-- | Show a term variant as a string+termVariant :: Variants.TermVariant -> String+termVariant x =+ case x of+ Variants.TermVariantAnnotated -> "annotated"+ Variants.TermVariantApplication -> "application"+ Variants.TermVariantCases -> "cases"+ Variants.TermVariantEither -> "either"+ Variants.TermVariantLambda -> "lambda"+ Variants.TermVariantLet -> "let"+ Variants.TermVariantList -> "list"+ Variants.TermVariantLiteral -> "literal"+ Variants.TermVariantMap -> "map"+ Variants.TermVariantOptional -> "optional"+ Variants.TermVariantPair -> "pair"+ Variants.TermVariantProject -> "project"+ Variants.TermVariantRecord -> "record"+ Variants.TermVariantSet -> "set"+ Variants.TermVariantTypeLambda -> "typeLambda"+ Variants.TermVariantTypeApplication -> "typeApplication"+ Variants.TermVariantInject -> "inject"+ Variants.TermVariantUnit -> "unit"+ Variants.TermVariantUnwrap -> "unwrap"+ Variants.TermVariantVariable -> "variable"+ Variants.TermVariantWrap -> "wrap"++-- | Show a type variant as a string+typeVariant :: Variants.TypeVariant -> String+typeVariant x =+ case x of+ Variants.TypeVariantAnnotated -> "annotated"+ Variants.TypeVariantApplication -> "application"+ Variants.TypeVariantEffect -> "effect"+ Variants.TypeVariantEither -> "either"+ Variants.TypeVariantForall -> "forall"+ Variants.TypeVariantFunction -> "function"+ Variants.TypeVariantList -> "list"+ Variants.TypeVariantLiteral -> "literal"+ Variants.TypeVariantMap -> "map"+ Variants.TypeVariantOptional -> "optional"+ Variants.TypeVariantPair -> "pair"+ Variants.TypeVariantRecord -> "record"+ Variants.TypeVariantSet -> "set"+ Variants.TypeVariantUnion -> "union"+ Variants.TypeVariantUnit -> "unit"+ Variants.TypeVariantVariable -> "variable"+ Variants.TypeVariantVoid -> "void"+ Variants.TypeVariantWrap -> "wrap"
− src/main/haskell/Hydra/Read/Docs.hs
@@ -1,69 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | Parser for Hydra documentation strings, producing DocSegment lists--module Hydra.Read.Docs 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.Overlay.Haskell.Lib.Equality as Equality-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.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---- | Parse the content between the doc-escape delimiters into an EntityReference. The input is the inner content (tag and optional rhs), e.g. "type hydra.core.Lambda". Returns nothing for unrecognized tags.-parseDocAnnotation :: String -> Maybe Packaging.EntityReference-parseDocAnnotation inner =-- let parts = Strings.splitOn " " inner- tag = Optionals.fromOptional "" (Lists.maybeHead parts)- rhs = Strings.intercalate " " (Lists.drop 1 parts)- in (Logic.ifElse (Equality.equal tag "primitive") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferencePrimitive (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "term") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferenceTerm (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "type") (Just (Packaging.EntityReferenceDefinition (Packaging.DefinitionReferenceType (Core.Name rhs)))) (Logic.ifElse (Equality.equal tag "module") (Just (Packaging.EntityReferenceModule (Packaging.ModuleName rhs))) (Logic.ifElse (Equality.equal tag "package") (Just (Packaging.EntityReferencePackage (Packaging.PackageName rhs))) (Logic.ifElse (Equality.equal tag "term-expr") (Just (Packaging.EntityReferenceTermExpr rhs)) (Logic.ifElse (Equality.equal tag "type-expr") (Just (Packaging.EntityReferenceTypeExpr rhs)) Nothing)))))))---- | Parse a documentation string into a list of 'DocSegment's. Recognized doc-escape tags become DocSegment.ref segments (wrapping a 'EntityReference'); all other text (including unrecognized doc-escape blocks) becomes DocSegment.text segments. Adjacent text fragments are not merged.-parseDocString :: String -> [Docs.DocSegment]-parseDocString s =-- let parts = Strings.splitOn "{@" s- head_ = Optionals.fromOptional "" (Lists.maybeHead parts)- tail_ = Lists.drop 1 parts- toSeg =- \part ->- let subparts = Strings.splitOn "}" part- inner = Optionals.fromOptional "" (Lists.maybeHead subparts)- after = Strings.intercalate "}" (Lists.drop 1 subparts)- mref = parseDocAnnotation inner- in (Optionals.cases mref [- Docs.DocSegmentText (Strings.cat2 "{@" part)] (\ref -> Optionals.cat [- Just (Docs.DocSegmentRef ref),- (Logic.ifElse (Equality.equal after "") Nothing (Just (Docs.DocSegmentText after)))]))- in (Lists.cons (Docs.DocSegmentText head_) (Lists.concat (Lists.map toSeg tail_)))
src/main/haskell/Hydra/Reduction.hs view
@@ -39,13 +39,14 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Resolution as Resolution import qualified Hydra.Rewriting as Rewriting import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular@@ -505,7 +506,7 @@ \fun -> \args -> Optionals.cases (Lists.uncons args) fun (\uc -> applyToArguments (Core.TermApplication (Core.Application { Core.applicationFunction = fun, Core.applicationArgument = (Pairs.first uc)})) (Pairs.second uc))- mapErrorToString = \e -> Errors.ErrorOther (Errors.OtherError (ShowErrors.error e))+ mapErrorToString = \e -> Errors.ErrorOther (Errors.OtherError (PrintErrors.error e)) applyProjection = \proj -> \reducedArg -> Eithers.bind (ExtractCore.record (Core.projectionTypeName proj) graph (Strip.deannotateTerm reducedArg)) (\fields -> let matching = Lists.find (\f -> Equality.equal (Core.fieldName f) (Core.projectionFieldName proj)) fields
src/main/haskell/Hydra/Reflect.hs view
@@ -22,6 +22,7 @@ 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
src/main/haskell/Hydra/Refs.hs view
@@ -27,6 +27,7 @@ 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
+ src/main/haskell/Hydra/Regex.hs view
@@ -0,0 +1,162 @@+-- Note: this is an automatically generated file. Do not edit.++-- | A model for Hydra's translingual regular-expression syntax: the abstract syntax tree (AST) into which hydra.parse.regex parses a pattern and from which hydra.print.regex (and the per-dialect hydra.print.<dialect>.regex renderers) emit target syntax. Covers the minimal core defined in docs/specification/regex.md (literals, character classes, ., quantifiers, alternation, anchors, grouping). See issue #567.++module Hydra.Regex where++import qualified Hydra.Core as Core+import Prelude hiding (Enum, Ordering, decodeFloat, encodeFloat, fail, map, pure, sum)+import qualified Data.Scientific as Sci++-- | A non-empty list of alternative sequences, joined by the | operator. Matches if any alternative matches.+type Alternation = [RegexSequence]++_Alternation = Core.Name "hydra.regex.Alternation"++-- | A single, unquantified regex element: the smallest unit to which a quantifier may apply.+data Atom =+ -- | A literal character, matched exactly. The character is a Unicode scalar value in the range [U+0000, U+10FFFF] (surrogates excluded), held as an int32 code point (the range fits in signed 32-bit, and int32 matches Hydra's string/parser code-point representation). In concrete syntax, a metacharacter is written escaped (e.g. \.); escaping is purely a concrete-syntax concern, so the AST holds the bare code point.+ AtomLiteral Int |+ -- | The . metacharacter; matches any single character, INCLUDING newline (unlike most host engines, whose native . excludes newline). To exclude newline, write [^\n] explicitly.+ AtomAny |+ -- | The ^ anchor; matches the empty string at the start of input.+ AtomAnchorStart |+ -- | The $ anchor; matches the empty string at the end of input.+ AtomAnchorEnd |+ -- | A parenthesized sub-expression, ( ... ); groups an alternation for quantification.+ AtomGroup Alternation |+ -- | A character class, [ ... ]; matches any single character in (or, if negated, not in) the set.+ AtomClass CharacterClass+ deriving (Eq, Ord, Read, Show)++_Atom = Core.Name "hydra.regex.Atom"++_Atom_literal = Core.Name "literal"++_Atom_any = Core.Name "any"++_Atom_anchorStart = Core.Name "anchorStart"++_Atom_anchorEnd = Core.Name "anchorEnd"++_Atom_group = Core.Name "group"++_Atom_class = Core.Name "class"++-- | A bracketed character class, [ ... ] or [^ ... ].+data CharacterClass =+ CharacterClass {+ -- | True for a negated class ([^ ... ]), which matches any character NOT listed.+ characterClassNegated :: Bool,+ -- | The class members: individual characters and/or character ranges. Must be non-empty; the empty class [] and negated-empty class [^] are excluded from the core (they are not in the POSIX/PCRE/ECMA intersection). hydra.parse.regex rejects an empty class.+ characterClassItems :: [ClassItem]}+ deriving (Eq, Ord, Read, Show)++_CharacterClass = Core.Name "hydra.regex.CharacterClass"++_CharacterClass_negated = Core.Name "negated"++_CharacterClass_items = Core.Name "items"++-- | An inclusive range of characters within a character class, e.g. a-z.+data CharacterRange =+ CharacterRange {+ -- | The first character of the range (inclusive), as an int32 Unicode scalar value.+ characterRangeFrom :: Int,+ -- | The last character of the range (inclusive), as an int32 Unicode scalar value.+ characterRangeTo :: Int}+ deriving (Eq, Ord, Read, Show)++_CharacterRange = Core.Name "hydra.regex.CharacterRange"++_CharacterRange_from = Core.Name "from"++_CharacterRange_to = Core.Name "to"++-- | A member of a character class: either a single character or an inclusive character range.+data ClassItem =+ -- | A single character (int32 Unicode scalar value) in the class.+ ClassItemCharacter Int |+ -- | An inclusive range of characters, e.g. a-z.+ ClassItemRange CharacterRange+ deriving (Eq, Ord, Read, Show)++_ClassItem = Core.Name "hydra.regex.ClassItem"++_ClassItem_character = Core.Name "character"++_ClassItem_range = Core.Name "range"++-- | An atom together with an optional quantifier applied to it.+data Quantified =+ Quantified {+ -- | The atom being quantified.+ quantifiedAtom :: Atom,+ -- | The quantifier; use 'one' for an unquantified atom.+ quantifiedQuantifier :: Quantifier}+ deriving (Eq, Ord, Read, Show)++_Quantified = Core.Name "hydra.regex.Quantified"++_Quantified_atom = Core.Name "atom"++_Quantified_quantifier = Core.Name "quantifier"++-- | A regular-expression quantifier. Mirrors hydra.query.RegexQuantifier, which models the same set of quantifiers for graph-path queries; a future refactor may hoist a shared type (see #567 findings).+data Quantifier =+ -- | No quantifier; matches exactly one occurrence.+ QuantifierOne |+ -- | The ? quantifier; matches zero or one occurrence.+ QuantifierZeroOrOne |+ -- | The * quantifier; matches zero or more occurrences.+ QuantifierZeroOrMore |+ -- | The + quantifier; matches one or more occurrences.+ QuantifierOneOrMore |+ -- | The {n} quantifier; matches exactly n occurrences.+ QuantifierExactly Int |+ -- | The {n,} quantifier; matches at least n occurrences.+ QuantifierAtLeast Int |+ -- | The {n,m} quantifier; matches between n and m (inclusive) occurrences.+ QuantifierRange_ QuantifierRange+ deriving (Eq, Ord, Read, Show)++_Quantifier = Core.Name "hydra.regex.Quantifier"++_Quantifier_one = Core.Name "one"++_Quantifier_zeroOrOne = Core.Name "zeroOrOne"++_Quantifier_zeroOrMore = Core.Name "zeroOrMore"++_Quantifier_oneOrMore = Core.Name "oneOrMore"++_Quantifier_exactly = Core.Name "exactly"++_Quantifier_atLeast = Core.Name "atLeast"++_Quantifier_range = Core.Name "range"++-- | The bounds of a {n,m} quantifier: between min and max (inclusive) occurrences.+data QuantifierRange =+ QuantifierRange {+ -- | The minimum number of occurrences (inclusive).+ quantifierRangeMin :: Int,+ -- | The maximum number of occurrences (inclusive).+ quantifierRangeMax :: Int}+ deriving (Eq, Ord, Read, Show)++_QuantifierRange = Core.Name "hydra.regex.QuantifierRange"++_QuantifierRange_min = Core.Name "min"++_QuantifierRange_max = Core.Name "max"++-- | A complete Hydra regular expression: the root of the AST. A regex is an alternation of sequences.+type Regex = Alternation++_Regex = Core.Name "hydra.regex.Regex"++-- | A (possibly empty) sequence of quantified atoms, matched in order. An empty sequence matches the empty string. (Named RegexSequence rather than Sequence to avoid the generated coder binding colliding with the host's built-in sequence.)+type RegexSequence = [Quantified]++_RegexSequence = Core.Name "hydra.regex.RegexSequence"
src/main/haskell/Hydra/Resolution.hs view
@@ -33,10 +33,11 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Scoping as Scoping-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -99,7 +100,7 @@ Errors.unexpectedShapeErrorActual = (Errors.unDecodingError _e)}))) (\_a -> _a) (DecodeCore.type_ graph (Core.bindingTerm el))) (\decodedType -> fieldTypes cx graph decodedType))) (\ts -> fieldTypes cx graph (Core.typeSchemeBody ts)) _ -> Left (Errors.ErrorResolution (Errors.ResolutionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = "record or union type",- Errors.unexpectedShapeErrorActual = (ShowCore.type_ t)})))+ Errors.unexpectedShapeErrorActual = (PrintCore.type_ t)}))) -- | Find a field type by name in a list of field types findFieldType :: t0 -> Core.Name -> [Core.FieldType] -> Either Errors.Error Core.Type@@ -189,7 +190,7 @@ _ -> t in (Eithers.bind (requireType cx graph name) (\t -> Optionals.cases (getter (rawType t)) (Left (Errors.ErrorResolution (Errors.ResolutionErrorUnexpectedShape (Errors.UnexpectedShapeError { Errors.unexpectedShapeErrorExpected = (Strings.cat2 label " type"),- Errors.unexpectedShapeErrorActual = (Strings.cat2 (Core.unName name) (Strings.cat2 ": " (ShowCore.type_ t)))})))) (\x -> Right x)))+ Errors.unexpectedShapeErrorActual = (Strings.cat2 (Core.unName name) (Strings.cat2 ": " (PrintCore.type_ t)))})))) (\x -> Right x))) -- | Look up a schema type and instantiate it, threading InferenceContext requireSchemaType :: Typing.InferenceContext -> M.Map Core.Name Core.TypeScheme -> Core.Name -> Either Errors.Error (Core.TypeScheme, Typing.InferenceContext)
src/main/haskell/Hydra/Rewriting.hs view
@@ -28,6 +28,7 @@ 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.Scoping as Scoping import qualified Hydra.System as System@@ -931,21 +932,30 @@ (Paths.SubtermStepApplicationArgument, (Core.applicationArgument v0))] Core.TermCases v0 -> Lists.concat2 (Optionals.cases (Core.caseStatementDefault v0) [] (\t -> [ (Paths.SubtermStepUnionCasesDefault, t)])) (Lists.map (\f -> (Paths.SubtermStepUnionCasesBranch (Core.caseAlternativeName f), (Core.caseAlternativeHandler f))) (Core.caseStatementCases v0))- Core.TermEither _ -> []+ Core.TermEither v0 -> [+ (Paths.SubtermStepSumTerm, (Eithers.either (\l -> l) (\r -> r) v0))] Core.TermLambda v0 -> [ (Paths.SubtermStepLambdaBody, (Core.lambdaBody v0))] Core.TermLet v0 -> Lists.cons (Paths.SubtermStepLetBody, (Core.letBody v0)) (Lists.map (\b -> (Paths.SubtermStepLetBinding (Core.bindingName b), (Core.bindingTerm b))) (Core.letBindings v0))- Core.TermList v0 -> Lists.map (\e -> (Paths.SubtermStepListElement 0, e)) v0+ Core.TermList v0 -> Lists.map (\ip -> (Paths.SubtermStepListElement (Pairs.first ip), (Pairs.second ip))) (Lists.reverse (Pairs.second (Lists.foldl (\r -> \el ->+ let idx = Pairs.first r+ in (Math.add idx 1, (Lists.cons (idx, el) (Pairs.second r)))) (0, []) v0))) Core.TermLiteral _ -> []- Core.TermMap v0 -> Lists.concat (Lists.map (\p -> [- (Paths.SubtermStepMapKey 0, (Pairs.first p)),- (Paths.SubtermStepMapValue 0, (Pairs.second p))]) (Maps.toList v0))+ Core.TermMap v0 -> Lists.concat (Lists.map (\ip -> [+ (Paths.SubtermStepMapKey (Pairs.first ip), (Pairs.first (Pairs.second ip))),+ (Paths.SubtermStepMapValue (Pairs.first ip), (Pairs.second (Pairs.second ip)))]) (Lists.reverse (Pairs.second (Lists.foldl (\r -> \el ->+ let idx = Pairs.first r+ in (Math.add idx 1, (Lists.cons (idx, el) (Pairs.second r)))) (0, []) (Maps.toList v0))))) Core.TermOptional v0 -> Optionals.cases v0 [] (\t -> [ (Paths.SubtermStepOptionalTerm, t)])- Core.TermPair _ -> []+ Core.TermPair v0 -> [+ (Paths.SubtermStepProductTerm 0, (Pairs.first v0)),+ (Paths.SubtermStepProductTerm 1, (Pairs.second v0))] Core.TermProject _ -> [] Core.TermRecord v0 -> Lists.map (\f -> (Paths.SubtermStepRecordField (Core.fieldName f), (Core.fieldTerm f))) (Core.recordFields v0)- Core.TermSet v0 -> Lists.map (\e -> (Paths.SubtermStepListElement 0, e)) (Sets.toList v0)+ Core.TermSet v0 -> Lists.map (\ip -> (Paths.SubtermStepSetElement (Pairs.first ip), (Pairs.second ip))) (Lists.reverse (Pairs.second (Lists.foldl (\r -> \el ->+ let idx = Pairs.first r+ in (Math.add idx 1, (Lists.cons (idx, el) (Pairs.second r)))) (0, []) (Sets.toList v0)))) Core.TermTypeApplication v0 -> [ (Paths.SubtermStepTypeApplicationTerm, (Core.typeApplicationTermBody v0))] Core.TermTypeLambda v0 -> [
src/main/haskell/Hydra/Scoping.hs view
@@ -30,6 +30,7 @@ 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
src/main/haskell/Hydra/Serialization.hs view
@@ -29,6 +29,7 @@ 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
− src/main/haskell/Hydra/Show/Core.hs
@@ -1,535 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.core types--module Hydra.Show.Core 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.Overlay.Haskell.Lib.Eithers as Eithers-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals-import qualified Hydra.Overlay.Haskell.Lib.Logic as Logic-import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals-import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.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-import qualified Data.Map as M-import qualified Data.Set as S---- | Show a binding as a string-binding :: Core.Binding -> String-binding el =-- let name = Core.unName (Core.bindingName el)- t = Core.bindingTerm el- typeStr =- Optionals.cases (Core.bindingTypeScheme el) "" (\ts -> Strings.cat [- ":(",- (typeScheme ts),- ")"])- in (Strings.cat [- name,- typeStr,- " = ",- (term t)])---- | Show a case statement as a string-caseStatement :: Core.CaseStatement -> String-caseStatement cs =-- let tname = Core.unName (Core.caseStatementTypeName cs)- mdef = Core.caseStatementDefault cs- csCases = Core.caseStatementCases cs- caseFields =- Lists.map (\alt -> Core.Field {- Core.fieldName = (Core.caseAlternativeName alt),- Core.fieldTerm = (Core.caseAlternativeHandler alt)}) csCases- defaultField =- Optionals.cases mdef [] (\d -> [- Core.Field {- Core.fieldName = (Core.Name "[default]"),- Core.fieldTerm = d}])- allFields =- Lists.concat [- caseFields,- defaultField]- in (Strings.cat [- "case(",- tname,- ")",- (fields allFields)])---- | Show an Either value using given functions for left and right-either :: (t0 -> String) -> (t1 -> String) -> Either t0 t1 -> String-either showA showB e =- Eithers.either (\a -> Strings.cat2 "left(" (Strings.cat2 (showA a) ")")) (\b -> Strings.cat2 "right(" (Strings.cat2 (showB b) ")")) e---- | Show a field as a string-field :: Core.Field -> String-field field =-- let fname = Core.unName (Core.fieldName field)- fterm = Core.fieldTerm field- in (Strings.cat [- fname,- "=",- (term fterm)])---- | Show a field type as a string-fieldType :: Core.FieldType -> String-fieldType ft =-- let fname = Core.unName (Core.fieldTypeName ft)- ftyp = Core.fieldTypeType ft- in (Strings.cat [- fname,- ":",- (type_ ftyp)])---- | Show a list of fields as a string-fields :: [Core.Field] -> String-fields flds =-- let fieldStrs = Lists.map field flds- in (Strings.cat [- "{",- (Strings.intercalate ", " fieldStrs),- "}"])---- | Show a float value as a string-float :: Core.FloatValue -> String-float fv =- case fv of- Core.FloatValueFloat32 v0 -> Strings.cat2 (Literals.showFloat32 v0) ":float32"- Core.FloatValueFloat64 v0 -> Strings.cat2 (Literals.showFloat64 v0) ":float64"---- | Show a float type as a string-floatType :: Core.FloatType -> String-floatType ft =- case ft of- Core.FloatTypeFloat32 -> "float32"- Core.FloatTypeFloat64 -> "float64"---- | Show an injection as a string-injection :: Core.Injection -> String-injection inj =-- let tname = Core.injectionTypeName inj- f = Core.injectionField inj- in (Strings.cat [- "inject(",- (Core.unName tname),- ")",- (fields [- f])])---- | Show an integer value as a string-integer :: Core.IntegerValue -> String-integer iv =- case iv of- Core.IntegerValueBigint v0 -> Strings.cat2 (Literals.showBigint v0) ":bigint"- Core.IntegerValueInt8 v0 -> Strings.cat2 (Literals.showInt8 v0) ":int8"- Core.IntegerValueInt16 v0 -> Strings.cat2 (Literals.showInt16 v0) ":int16"- Core.IntegerValueInt32 v0 -> Strings.cat2 (Literals.showInt32 v0) ":int32"- Core.IntegerValueInt64 v0 -> Strings.cat2 (Literals.showInt64 v0) ":int64"- Core.IntegerValueUint8 v0 -> Strings.cat2 (Literals.showUint8 v0) ":uint8"- Core.IntegerValueUint16 v0 -> Strings.cat2 (Literals.showUint16 v0) ":uint16"- Core.IntegerValueUint32 v0 -> Strings.cat2 (Literals.showUint32 v0) ":uint32"- Core.IntegerValueUint64 v0 -> Strings.cat2 (Literals.showUint64 v0) ":uint64"---- | Show an integer type as a string-integerType :: Core.IntegerType -> String-integerType it =- case it of- Core.IntegerTypeBigint -> "bigint"- Core.IntegerTypeInt8 -> "int8"- Core.IntegerTypeInt16 -> "int16"- Core.IntegerTypeInt32 -> "int32"- Core.IntegerTypeInt64 -> "int64"- Core.IntegerTypeUint8 -> "uint8"- Core.IntegerTypeUint16 -> "uint16"- Core.IntegerTypeUint32 -> "uint32"- Core.IntegerTypeUint64 -> "uint64"---- | Show a lambda as a string-lambda :: Core.Lambda -> String-lambda l =-- let v = Core.unName (Core.lambdaParameter l)- mt = Core.lambdaDomain l- body = Core.lambdaBody l- typeStr = Optionals.cases mt "" (\t -> Strings.cat2 ":" (type_ t))- in (Strings.cat [- "\955",- v,- typeStr,- ".",- (term body)])---- | Show a let expression as a string-let_ :: Core.Let -> String-let_ l =-- let bindings = Core.letBindings l- env = Core.letBody l- bindingStrs = Lists.map binding bindings- in (Strings.cat [- "let ",- (Strings.intercalate ", " bindingStrs),- " in ",- (term env)])---- | Show a list using a given function to show each element-list :: (t0 -> String) -> [t0] -> String-list f xs =-- let elementStrs = Lists.map f xs- in (Strings.cat [- "[",- (Strings.intercalate ", " elementStrs),- "]"])---- | Show a literal as a string-literal :: Core.Literal -> String-literal l =- case l of- Core.LiteralBinary _ -> "[binary]"- Core.LiteralBoolean v0 -> Logic.ifElse v0 "true" "false"- Core.LiteralDecimal v0 -> Literals.showDecimal v0- Core.LiteralFloat v0 -> float v0- Core.LiteralInteger v0 -> integer v0- Core.LiteralString v0 -> Literals.showString v0---- | Show a literal type as a string-literalType :: Core.LiteralType -> String-literalType lt =- case lt of- Core.LiteralTypeBinary -> "binary"- Core.LiteralTypeBoolean -> "boolean"- Core.LiteralTypeDecimal -> "decimal"- Core.LiteralTypeFloat v0 -> floatType v0- Core.LiteralTypeInteger v0 -> integerType v0- Core.LiteralTypeString -> "string"---- | Show a map using given functions to show keys and values-map :: Ord t0 => ((t0 -> String) -> (t1 -> String) -> M.Map t0 t1 -> String)-map showK showV m =-- let pairStrs =- Lists.map (\p -> Strings.cat [- showK (Pairs.first p),- ": ",- (showV (Pairs.second p))]) (Maps.toList m)- in (Strings.cat [- "{",- (Strings.intercalate ", " pairStrs),- "}"])---- | Show an optional value using a given function to show the element-optional :: (t0 -> String) -> Maybe t0 -> String-optional f mx = Optionals.cases mx "none" (\x -> Strings.cat2 "given(" (Strings.cat2 (f x) ")"))---- | Show a pair using given functions to show each element-pair :: (t0 -> String) -> (t1 -> String) -> (t0, t1) -> String-pair showA showB p =- Strings.cat [- "(",- (showA (Pairs.first p)),- ", ",- (showB (Pairs.second p)),- ")"]---- | Show a projection as a string-projection :: Core.Projection -> String-projection proj =-- let tname = Core.unName (Core.projectionTypeName proj)- fname = Core.unName (Core.projectionFieldName proj)- in (Strings.cat [- "project(",- tname,- "){",- fname,- "}"])---- | A placeholder for reading terms from their serialized form. Not implemented.-readTerm :: String -> Maybe Core.Term-readTerm s = Just (Core.TermLiteral (Core.LiteralString s))---- | Show a set using a given function to show each element-set :: Ord t0 => ((t0 -> String) -> S.Set t0 -> String)-set f xs =-- let elementStrs = Lists.map f (Sets.toList xs)- in (Strings.cat [- "{",- (Strings.intercalate ", " elementStrs),- "}"])---- | Show a term as a string-term :: Core.Term -> String-term t =-- let gatherTerms =- \prev -> \app ->- let lhs = Core.applicationFunction app- rhs = Core.applicationArgument app- in case lhs of- Core.TermApplication v0 -> gatherTerms (Lists.cons rhs prev) v0- _ -> Lists.cons lhs (Lists.cons rhs prev)- in case t of- Core.TermAnnotated v0 -> term (Core.annotatedTermBody v0)- Core.TermApplication v0 ->- let terms = gatherTerms [] v0- termStrs = Lists.map term terms- in (Strings.cat [- "(",- (Strings.intercalate " @ " termStrs),- ")"])- Core.TermCases v0 -> caseStatement v0- Core.TermEither v0 -> Eithers.either (\l -> Strings.cat [- "left(",- (term l),- ")"]) (\r -> Strings.cat [- "right(",- (term r),- ")"]) v0- Core.TermLambda v0 -> lambda v0- Core.TermLet v0 -> let_ v0- Core.TermList v0 ->- let termStrs = Lists.map term v0- in (Strings.cat [- "[",- (Strings.intercalate ", " termStrs),- "]"])- Core.TermLiteral v0 -> literal v0- Core.TermMap v0 ->- let entry =- \p -> Strings.cat [- term (Pairs.first p),- "=",- (term (Pairs.second p))]- in (Strings.cat [- "{",- (Strings.intercalate ", " (Lists.map entry (Maps.toList v0))),- "}"])- Core.TermOptional v0 -> Optionals.cases v0 "none" (\t2 -> Strings.cat [- "given(",- (term t2),- ")"])- Core.TermPair v0 -> Strings.cat [- "(",- (term (Pairs.first v0)),- ", ",- (term (Pairs.second v0)),- ")"]- Core.TermProject v0 -> projection v0- Core.TermRecord v0 ->- let tname = Core.unName (Core.recordTypeName v0)- flds = Core.recordFields v0- in (Strings.cat [- "record(",- tname,- ")",- (fields flds)])- Core.TermSet v0 -> Strings.cat [- "{",- (Strings.intercalate ", " (Lists.map term (Sets.toList v0))),- "}"]- Core.TermTypeLambda v0 ->- let param = Core.unName (Core.typeLambdaParameter v0)- body = Core.typeLambdaBody v0- in (Strings.cat [- "\923",- param,- ".",- (term body)])- Core.TermTypeApplication v0 ->- let t2 = Core.typeApplicationTermBody v0- typ = Core.typeApplicationTermType v0- in (Strings.cat [- term t2,- "\10216",- (type_ typ),- "\10217"])- Core.TermInject v0 -> injection v0- Core.TermUnit -> "unit"- Core.TermUnwrap v0 -> Strings.cat [- "unwrap(",- (Core.unName v0),- ")"]- Core.TermVariable v0 -> Core.unName v0- Core.TermWrap v0 ->- let tname = Core.unName (Core.wrappedTermTypeName v0)- term1 = Core.wrappedTermBody v0- in (Strings.cat [- "wrap(",- tname,- "){",- (term term1),- "}"])---- | Show a type as a string-type_ :: Core.Type -> String-type_ typ =-- let showRowType =- \flds ->- let fieldStrs = Lists.map fieldType flds- in (Strings.cat [- "{",- (Strings.intercalate ", " fieldStrs),- "}"])- gatherTypes =- \prev -> \app ->- let lhs = Core.applicationTypeFunction app- rhs = Core.applicationTypeArgument app- in case lhs of- Core.TypeApplication v0 -> gatherTypes (Lists.cons rhs prev) v0- _ -> Lists.cons lhs (Lists.cons rhs prev)- gatherFunctionTypes =- \prev -> \t -> case t of- Core.TypeFunction v0 ->- let dom = Core.functionTypeDomain v0- cod = Core.functionTypeCodomain v0- in (gatherFunctionTypes (Lists.cons dom prev) cod)- _ -> Lists.reverse (Lists.cons t prev)- in case typ of- Core.TypeAnnotated v0 -> type_ (Core.annotatedTypeBody v0)- Core.TypeApplication v0 ->- let types = gatherTypes [] v0- typeStrs = Lists.map type_ types- in (Strings.cat [- "(",- (Strings.intercalate " @ " typeStrs),- ")"])- Core.TypeEffect v0 -> Strings.cat [- "effect<",- (type_ v0),- ">"]- Core.TypeEither v0 ->- let leftTyp = Core.eitherTypeLeft v0- rightTyp = Core.eitherTypeRight v0- in (Strings.cat [- "either<",- (type_ leftTyp),- ", ",- (type_ rightTyp),- ">"])- Core.TypeForall v0 ->- let var = Core.unName (Core.forallTypeParameter v0)- body = Core.forallTypeBody v0- in (Strings.cat [- "(\8704",- var,- ".",- (type_ body),- ")"])- Core.TypeFunction _ ->- let types = gatherFunctionTypes [] typ- typeStrs = Lists.map type_ types- in (Strings.cat [- "(",- (Strings.intercalate " \8594 " typeStrs),- ")"])- Core.TypeList v0 -> Strings.cat [- "list<",- (type_ v0),- ">"]- Core.TypeLiteral v0 -> literalType v0- Core.TypeMap v0 ->- let keyTyp = Core.mapTypeKeys v0- valTyp = Core.mapTypeValues v0- in (Strings.cat [- "map<",- (type_ keyTyp),- ", ",- (type_ valTyp),- ">"])- Core.TypeOptional v0 -> Strings.cat [- "optional<",- (type_ v0),- ">"]- Core.TypePair v0 ->- let firstTyp = Core.pairTypeFirst v0- secondTyp = Core.pairTypeSecond v0- in (Strings.cat [- "(",- (type_ firstTyp),- ", ",- (type_ secondTyp),- ")"])- Core.TypeRecord v0 -> Strings.cat2 "record" (showRowType v0)- Core.TypeSet v0 -> Strings.cat [- "set<",- (type_ v0),- ">"]- Core.TypeUnion v0 -> Strings.cat2 "union" (showRowType v0)- Core.TypeUnit -> "unit"- Core.TypeVariable v0 -> Core.unName v0- Core.TypeVoid -> "void"- Core.TypeWrap v0 -> Strings.cat [- "wrap(",- (type_ v0),- ")"]---- | Show a type scheme as a string-typeScheme :: Core.TypeScheme -> String-typeScheme ts =-- let vars = Core.typeSchemeVariables ts- body = Core.typeSchemeBody ts- varNames = Lists.map Core.unName vars- fa =- Logic.ifElse (Lists.null vars) "" (Strings.cat [- "forall ",- (Strings.intercalate "," varNames),- ". "])- toConstraintPair =- \v -> \c -> Strings.cat [- case c of- Core.TypeClassConstraintSimple v0 -> Core.unName v0,- " ",- (Core.unName v)]- toConstraintPairs =- \p -> Lists.map (toConstraintPair (Pairs.first p)) (Core.typeVariableConstraintsClasses (Pairs.second p))- tc = Optionals.cases (Core.typeSchemeConstraints ts) [] (\m -> Lists.concat (Lists.map toConstraintPairs (Maps.toList m)))- in (Strings.cat [- "(",- fa,- (Logic.ifElse (Lists.null tc) "" (Strings.cat [- "(",- (Strings.intercalate ", " tc),- ") => "])),- (type_ body),- ")"])
− src/main/haskell/Hydra/Show/Docs.hs
@@ -1,87 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.docs types--module Hydra.Show.Docs 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.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.Read.Docs as ReadDocs-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---- | Render a DefinitionReference as its fully-qualified name-definitionReference :: Packaging.DefinitionReference -> String-definitionReference x =- case x of- Packaging.DefinitionReferencePrimitive v0 -> Core.unName v0- Packaging.DefinitionReferenceTerm v0 -> Core.unName v0- Packaging.DefinitionReferenceType v0 -> Core.unName v0---- | Render a single DocSegment back to its source string form-docSegment :: Docs.DocSegment -> String-docSegment seg = docSegmentWith entityReference seg---- | Render a single DocSegment using a custom 'EntityReference' renderer-docSegmentWith :: (Packaging.EntityReference -> String) -> Docs.DocSegment -> String-docSegmentWith render x =- case x of- Docs.DocSegmentRef v0 -> render v0- Docs.DocSegmentText v0 -> v0---- | Render a list of DocSegments back to a plain documentation string-docSegments :: [Docs.DocSegment] -> String-docSegments segs = Strings.cat (Lists.map docSegment segs)---- | Render a list of DocSegments using a custom 'EntityReference' renderer-docSegmentsWith :: (Packaging.EntityReference -> String) -> [Docs.DocSegment] -> String-docSegmentsWith render segs = Strings.cat (Lists.map (docSegmentWith render) segs)---- | Render a 'EntityReference' as its doc-escape tag string (without the surrounding braces)-entityReference :: Packaging.EntityReference -> String-entityReference x =- case x of- Packaging.EntityReferenceDefinition v0 -> Strings.cat2 (case v0 of- Packaging.DefinitionReferencePrimitive _ -> "primitive"- Packaging.DefinitionReferenceTerm _ -> "term"- Packaging.DefinitionReferenceType _ -> "type") (Strings.cat2 " " (definitionReference v0))- Packaging.EntityReferenceModule v0 -> Strings.cat2 "module " (Packaging.unModuleName v0)- Packaging.EntityReferencePackage v0 -> Strings.cat2 "package " (Packaging.unPackageName v0)- Packaging.EntityReferenceTermExpr v0 -> Strings.cat2 "term-expr " v0- Packaging.EntityReferenceTypeExpr v0 -> Strings.cat2 "type-expr " v0---- | Parse a documentation string and re-render it, converting doc-escape tags through their canonical form-renderDocString :: String -> String-renderDocString s = renderDocStringWith entityReference s---- | Parse a documentation string and render it using a custom 'EntityReference' renderer. Text segments are passed through; ref segments are rendered by the provided function. Unrecognized doc-escape blocks are passed through as text.-renderDocStringWith :: (Packaging.EntityReference -> String) -> String -> String-renderDocStringWith render s = docSegmentsWith render (ReadDocs.parseDocString s)
− src/main/haskell/Hydra/Show/Error/Core.hs
@@ -1,345 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.error.core types--module Hydra.Show.Error.Core 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.Overlay.Haskell.Lib.Literals as Literals-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Variants as ShowVariants-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---- | Show a constant condition error as a string-constantConditionError :: ErrorCore.ConstantConditionError -> String-constantConditionError e =- Strings.cat [- "constant condition: ifElse with literal ",- (Literals.showBoolean (ErrorCore.constantConditionErrorValue e))]---- | Show a duplicate binding error as a string-duplicateBindingError :: ErrorCore.DuplicateBindingError -> String-duplicateBindingError e =- Strings.cat [- "duplicate binding: ",- (Core.unName (ErrorCore.duplicateBindingErrorName e))]---- | Show a duplicate field error as a string-duplicateFieldError :: ErrorCore.DuplicateFieldError -> String-duplicateFieldError e =- Strings.cat [- "duplicate field: ",- (Core.unName (ErrorCore.duplicateFieldErrorName e))]---- | Show a duplicate record type field names error as a string-duplicateRecordTypeFieldNamesError :: ErrorCore.DuplicateRecordTypeFieldNamesError -> String-duplicateRecordTypeFieldNamesError e =- Strings.cat [- "duplicate field in record type: ",- (Core.unName (ErrorCore.duplicateRecordTypeFieldNamesErrorName e))]---- | Show a duplicate union type field names error as a string-duplicateUnionTypeFieldNamesError :: ErrorCore.DuplicateUnionTypeFieldNamesError -> String-duplicateUnionTypeFieldNamesError e =- Strings.cat [- "duplicate field in union type: ",- (Core.unName (ErrorCore.duplicateUnionTypeFieldNamesErrorName e))]---- | Show an empty case statement error as a string-emptyCaseStatementError :: ErrorCore.EmptyCaseStatementError -> String-emptyCaseStatementError e =- Strings.cat [- "empty case statement for type: ",- (Core.unName (ErrorCore.emptyCaseStatementErrorTypeName e))]---- | Show an empty let bindings error as a string-emptyLetBindingsError :: t0 -> String-emptyLetBindingsError e = "let expression with no bindings"---- | Show an empty record type error as a string-emptyRecordTypeError :: t0 -> String-emptyRecordTypeError e = "record type with no fields (use TypeUnit instead)"---- | Show an empty term annotation error as a string-emptyTermAnnotationError :: t0 -> String-emptyTermAnnotationError e = "term annotation with empty annotation map"---- | Show an empty type annotation error as a string-emptyTypeAnnotationError :: t0 -> String-emptyTypeAnnotationError e = "type annotation with empty annotation map"---- | Show an empty type name in term error as a string-emptyTypeNameInTermError :: t0 -> String-emptyTypeNameInTermError e = "term with empty type name"---- | Show an empty union type error as a string-emptyUnionTypeError :: t0 -> String-emptyUnionTypeError e = "union type with no alternatives (use TypeVoid instead)"---- | Show an invalid forall parameter name error as a string-invalidForallParameterNameError :: ErrorCore.InvalidForallParameterNameError -> String-invalidForallParameterNameError e =- Strings.cat [- "invalid forall parameter name: ",- (Core.unName (ErrorCore.invalidForallParameterNameErrorName e))]---- | Show an invalid lambda parameter name error as a string-invalidLambdaParameterNameError :: ErrorCore.InvalidLambdaParameterNameError -> String-invalidLambdaParameterNameError e =- Strings.cat [- "invalid lambda parameter name: ",- (Core.unName (ErrorCore.invalidLambdaParameterNameErrorName e))]---- | Show an invalid let binding name error as a string-invalidLetBindingNameError :: ErrorCore.InvalidLetBindingNameError -> String-invalidLetBindingNameError e =- Strings.cat [- "invalid let binding name: ",- (Core.unName (ErrorCore.invalidLetBindingNameErrorName e))]---- | Show an invalid term error as a string-invalidTermError :: ErrorCore.InvalidTermError -> String-invalidTermError e =- Strings.cat2 "invalid term: " (case e of- ErrorCore.InvalidTermErrorConstantCondition v0 -> constantConditionError v0- ErrorCore.InvalidTermErrorDuplicateBinding v0 -> duplicateBindingError v0- ErrorCore.InvalidTermErrorDuplicateField v0 -> duplicateFieldError v0- ErrorCore.InvalidTermErrorEmptyCaseStatement v0 -> emptyCaseStatementError v0- ErrorCore.InvalidTermErrorEmptyLetBindings v0 -> emptyLetBindingsError v0- ErrorCore.InvalidTermErrorEmptyTermAnnotation v0 -> emptyTermAnnotationError v0- ErrorCore.InvalidTermErrorEmptyTypeNameInTerm v0 -> emptyTypeNameInTermError v0- ErrorCore.InvalidTermErrorInvalidLambdaParameterName v0 -> invalidLambdaParameterNameError v0- ErrorCore.InvalidTermErrorInvalidLetBindingName v0 -> invalidLetBindingNameError v0- ErrorCore.InvalidTermErrorInvalidTypeLambdaParameterName v0 -> invalidTypeLambdaParameterNameError v0- ErrorCore.InvalidTermErrorNestedTermAnnotation v0 -> nestedTermAnnotationError v0- ErrorCore.InvalidTermErrorRedundantWrapUnwrap v0 -> redundantWrapUnwrapError v0- ErrorCore.InvalidTermErrorSelfApplication v0 -> selfApplicationError v0- ErrorCore.InvalidTermErrorTermVariableShadowing v0 -> termVariableShadowingError v0- ErrorCore.InvalidTermErrorTypeVariableShadowingInTypeLambda v0 -> typeVariableShadowingInTypeLambdaError v0- ErrorCore.InvalidTermErrorUndefinedTermVariable v0 -> undefinedTermVariableError v0- ErrorCore.InvalidTermErrorUndefinedTypeVariableInBindingType v0 -> undefinedTypeVariableInBindingTypeError v0- ErrorCore.InvalidTermErrorUndefinedTypeVariableInLambdaDomain v0 -> undefinedTypeVariableInLambdaDomainError v0- ErrorCore.InvalidTermErrorUndefinedTypeVariableInTypeApplication v0 -> undefinedTypeVariableInTypeApplicationError v0- ErrorCore.InvalidTermErrorUnknownPrimitiveName v0 -> unknownPrimitiveNameError v0- ErrorCore.InvalidTermErrorUnnecessaryIdentityApplication v0 -> unnecessaryIdentityApplicationError v0- ErrorCore.InvalidTermErrorUntypedTermVariable v0 -> untypedTermVariableError v0)---- | Show an invalid type error as a string-invalidTypeError :: ErrorCore.InvalidTypeError -> String-invalidTypeError e =- Strings.cat2 "invalid type: " (case e of- ErrorCore.InvalidTypeErrorDuplicateRecordTypeFieldNames v0 -> duplicateRecordTypeFieldNamesError v0- ErrorCore.InvalidTypeErrorDuplicateUnionTypeFieldNames v0 -> duplicateUnionTypeFieldNamesError v0- ErrorCore.InvalidTypeErrorEmptyRecordType v0 -> emptyRecordTypeError v0- ErrorCore.InvalidTypeErrorEmptyTypeAnnotation v0 -> emptyTypeAnnotationError v0- ErrorCore.InvalidTypeErrorEmptyUnionType v0 -> emptyUnionTypeError v0- ErrorCore.InvalidTypeErrorInvalidForallParameterName v0 -> invalidForallParameterNameError v0- ErrorCore.InvalidTypeErrorInvalidTypeSchemeVariableName v0 -> invalidTypeSchemeVariableNameError v0- ErrorCore.InvalidTypeErrorNestedTypeAnnotation v0 -> nestedTypeAnnotationError v0- ErrorCore.InvalidTypeErrorNonComparableMapKeyType v0 -> nonComparableMapKeyTypeError v0- ErrorCore.InvalidTypeErrorNonComparableSetElementType v0 -> nonComparableSetElementTypeError v0- ErrorCore.InvalidTypeErrorSingleVariantUnion v0 -> singleVariantUnionError v0- ErrorCore.InvalidTypeErrorTypeVariableShadowingInForall v0 -> typeVariableShadowingInForallError v0- ErrorCore.InvalidTypeErrorUndefinedTypeVariable v0 -> undefinedTypeVariableError v0- ErrorCore.InvalidTypeErrorVoidInNonBottomPosition v0 -> voidInNonBottomPositionError v0)---- | Show an invalid type lambda parameter name error as a string-invalidTypeLambdaParameterNameError :: ErrorCore.InvalidTypeLambdaParameterNameError -> String-invalidTypeLambdaParameterNameError e =- Strings.cat [- "invalid type lambda parameter name: ",- (Core.unName (ErrorCore.invalidTypeLambdaParameterNameErrorName e))]---- | Show an invalid type scheme variable name error as a string-invalidTypeSchemeVariableNameError :: ErrorCore.InvalidTypeSchemeVariableNameError -> String-invalidTypeSchemeVariableNameError e =- Strings.cat [- "invalid type scheme variable name: ",- (Core.unName (ErrorCore.invalidTypeSchemeVariableNameErrorName e))]---- | Show a nested term annotation error as a string-nestedTermAnnotationError :: t0 -> String-nestedTermAnnotationError e = "nested term annotations should be merged"---- | Show a nested type annotation error as a string-nestedTypeAnnotationError :: t0 -> String-nestedTypeAnnotationError e = "nested type annotations should be merged"---- | Show a non-comparable map key type error as a string-nonComparableMapKeyTypeError :: ErrorCore.NonComparableMapKeyTypeError -> String-nonComparableMapKeyTypeError e =- Strings.cat [- "map key type contains a function type: ",- (ShowCore.type_ (ErrorCore.nonComparableMapKeyTypeErrorKeyType e))]---- | Show a non-comparable set element type error as a string-nonComparableSetElementTypeError :: ErrorCore.NonComparableSetElementTypeError -> String-nonComparableSetElementTypeError e =- Strings.cat [- "set element type contains a function type: ",- (ShowCore.type_ (ErrorCore.nonComparableSetElementTypeErrorElementType e))]---- | Show a redundant wrap/unwrap error as a string-redundantWrapUnwrapError :: ErrorCore.RedundantWrapUnwrapError -> String-redundantWrapUnwrapError e =- Strings.cat [- "redundant wrap/unwrap for type: ",- (Core.unName (ErrorCore.redundantWrapUnwrapErrorTypeName e))]---- | Show a self-application error as a string-selfApplicationError :: ErrorCore.SelfApplicationError -> String-selfApplicationError e =- Strings.cat [- "self-application of variable: ",- (Core.unName (ErrorCore.selfApplicationErrorName e))]---- | Show a single variant union error as a string-singleVariantUnionError :: ErrorCore.SingleVariantUnionError -> String-singleVariantUnionError e =- Strings.cat [- "union type with single variant: ",- (Core.unName (ErrorCore.singleVariantUnionErrorFieldName e))]---- | Show a term variable shadowing error as a string-termVariableShadowingError :: ErrorCore.TermVariableShadowingError -> String-termVariableShadowingError e =- Strings.cat [- "variable shadowing: ",- (Core.unName (ErrorCore.termVariableShadowingErrorName e))]---- | Show a type variable shadowing in forall error as a string-typeVariableShadowingInForallError :: ErrorCore.TypeVariableShadowingInForallError -> String-typeVariableShadowingInForallError e =- Strings.cat [- "type variable shadowing in forall: ",- (Core.unName (ErrorCore.typeVariableShadowingInForallErrorName e))]---- | Show a type variable shadowing in type lambda error as a string-typeVariableShadowingInTypeLambdaError :: ErrorCore.TypeVariableShadowingInTypeLambdaError -> String-typeVariableShadowingInTypeLambdaError e =- Strings.cat [- "type variable shadowing in type lambda: ",- (Core.unName (ErrorCore.typeVariableShadowingInTypeLambdaErrorName e))]---- | Show an undefined field error as a string-undefinedFieldError :: ErrorCore.UndefinedFieldError -> String-undefinedFieldError e =-- let fname = ErrorCore.undefinedFieldErrorFieldName e- tname = ErrorCore.undefinedFieldErrorTypeName e- in (Strings.cat [- "no such field \"",- (Core.unName fname),- "\" in type \"",- (Core.unName tname),- "\""])---- | Show an undefined term variable error as a string-undefinedTermVariableError :: ErrorCore.UndefinedTermVariableError -> String-undefinedTermVariableError e =- Strings.cat [- "undefined term variable: ",- (Core.unName (ErrorCore.undefinedTermVariableErrorName e))]---- | Show an undefined type variable error as a string-undefinedTypeVariableError :: ErrorCore.UndefinedTypeVariableError -> String-undefinedTypeVariableError e =- Strings.cat [- "undefined type variable: ",- (Core.unName (ErrorCore.undefinedTypeVariableErrorName e))]---- | Show an undefined type variable in binding type error as a string-undefinedTypeVariableInBindingTypeError :: ErrorCore.UndefinedTypeVariableInBindingTypeError -> String-undefinedTypeVariableInBindingTypeError e =- Strings.cat [- "undefined type variable in binding type: ",- (Core.unName (ErrorCore.undefinedTypeVariableInBindingTypeErrorName e))]---- | Show an undefined type variable in lambda domain error as a string-undefinedTypeVariableInLambdaDomainError :: ErrorCore.UndefinedTypeVariableInLambdaDomainError -> String-undefinedTypeVariableInLambdaDomainError e =- Strings.cat [- "undefined type variable in lambda domain: ",- (Core.unName (ErrorCore.undefinedTypeVariableInLambdaDomainErrorName e))]---- | Show an undefined type variable in type application error as a string-undefinedTypeVariableInTypeApplicationError :: ErrorCore.UndefinedTypeVariableInTypeApplicationError -> String-undefinedTypeVariableInTypeApplicationError e =- Strings.cat [- "undefined type variable in type application: ",- (Core.unName (ErrorCore.undefinedTypeVariableInTypeApplicationErrorName e))]---- | Show an unexpected term variant error as a string-unexpectedTermVariantError :: ErrorCore.UnexpectedTermVariantError -> String-unexpectedTermVariantError e =-- let expected = ErrorCore.unexpectedTermVariantErrorExpectedVariant e- actual = ErrorCore.unexpectedTermVariantErrorActualTerm e- in (Strings.cat [- "expected ",- (ShowVariants.termVariant expected),- " term but found ",- (ShowCore.term actual)])---- | Show an unexpected type variant error as a string-unexpectedTypeVariantError :: ErrorCore.UnexpectedTypeVariantError -> String-unexpectedTypeVariantError e =-- let expected = ErrorCore.unexpectedTypeVariantErrorExpectedVariant e- actual = ErrorCore.unexpectedTypeVariantErrorActualType e- in (Strings.cat [- "expected ",- (ShowVariants.typeVariant expected),- " type but found ",- (ShowCore.type_ actual)])---- | Show an unknown primitive name error as a string-unknownPrimitiveNameError :: ErrorCore.UnknownPrimitiveNameError -> String-unknownPrimitiveNameError e =- Strings.cat [- "unknown primitive: ",- (Core.unName (ErrorCore.unknownPrimitiveNameErrorName e))]---- | Show an unnecessary identity application error as a string-unnecessaryIdentityApplicationError :: t0 -> String-unnecessaryIdentityApplicationError e = "unnecessary application of identity lambda"---- | Show an untyped term variable error as a string-untypedTermVariableError :: ErrorCore.UntypedTermVariableError -> String-untypedTermVariableError e =- Strings.cat [- "untyped term variable: ",- (Core.unName (ErrorCore.untypedTermVariableErrorName e))]---- | Show a void in non-bottom position error as a string-voidInNonBottomPositionError :: t0 -> String-voidInNonBottomPositionError e = "TypeVoid in a position where no value can be constructed"
− src/main/haskell/Hydra/Show/Error/Packaging.hs
@@ -1,168 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.error.packaging types--module Hydra.Show.Error.Packaging 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.Overlay.Haskell.Lib.Strings as Strings-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.Relational as Relational-import qualified Hydra.Show.Util as ShowUtil-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---- | Show a conflicting module namespace error as a string-conflictingModuleNameError :: ErrorPackaging.ConflictingModuleNameError -> String-conflictingModuleNameError e =- Strings.cat [- "module namespaces conflict when mapped to target language path: ",- (Packaging.unModuleName (ErrorPackaging.conflictingModuleNameErrorFirst e)),- " vs ",- (Packaging.unModuleName (ErrorPackaging.conflictingModuleNameErrorSecond e))]---- | Show a conflicting variant name error as a string-conflictingVariantNameError :: ErrorPackaging.ConflictingVariantNameError -> String-conflictingVariantNameError e =- Strings.cat [- "in module ",- (Packaging.unModuleName (ErrorPackaging.conflictingVariantNameErrorModuleName e)),- ": variant ",- (Core.unName (ErrorPackaging.conflictingVariantNameErrorVariantName e)),- " of type ",- (Core.unName (ErrorPackaging.conflictingVariantNameErrorTypeName e)),- " produces constructor name ",- (Core.unName (ErrorPackaging.conflictingVariantNameErrorConflictingName e)),- " which conflicts with another type definition"]---- | Show a definition-not-in-module-namespace error as a string-definitionNotInModuleNameError :: ErrorPackaging.DefinitionNotInModuleNameError -> String-definitionNotInModuleNameError e =- Strings.cat [- "definition ",- (Core.unName (ErrorPackaging.definitionNotInModuleNameErrorName e)),- " is not in module namespace ",- (Packaging.unModuleName (ErrorPackaging.definitionNotInModuleNameErrorModuleName e))]---- | Show a definitions-out-of-order error as a string-definitionsOutOfOrderError :: ErrorPackaging.DefinitionsOutOfOrderError -> String-definitionsOutOfOrderError e =- Strings.cat [- "in module ",- (Packaging.unModuleName (ErrorPackaging.definitionsOutOfOrderErrorModuleName e)),- ": definitions out of order: ",- (Core.unName (ErrorPackaging.definitionsOutOfOrderErrorPrecedingName e)),- " precedes ",- (Core.unName (ErrorPackaging.definitionsOutOfOrderErrorFollowingName e))]---- | Show a duplicate definition name error as a string-duplicateDefinitionNameError :: ErrorPackaging.DuplicateDefinitionNameError -> String-duplicateDefinitionNameError e =- Strings.cat [- "in module ",- (Packaging.unModuleName (ErrorPackaging.duplicateDefinitionNameErrorModuleName e)),- ": duplicate definition name ",- (Core.unName (ErrorPackaging.duplicateDefinitionNameErrorName e))]---- | Show a duplicate module namespace error as a string-duplicateModuleNameError :: ErrorPackaging.DuplicateModuleNameError -> String-duplicateModuleNameError e =- Strings.cat [- "duplicate module namespace ",- (Packaging.unModuleName (ErrorPackaging.duplicateModuleNameErrorModuleName e))]---- | Show an invalid definition name error as a string-invalidDefinitionNameError :: ErrorPackaging.InvalidDefinitionNameError -> String-invalidDefinitionNameError e =- Strings.cat [- "in module ",- (Packaging.unModuleName (ErrorPackaging.invalidDefinitionNameErrorModuleName e)),- ": definition ",- (Core.unName (ErrorPackaging.invalidDefinitionNameErrorName e)),- " does not match expected ",- (ShowUtil.caseConvention (ErrorPackaging.invalidDefinitionNameErrorExpectedConvention e))]---- | Show an invalid module error as a string-invalidModuleError :: ErrorPackaging.InvalidModuleError -> String-invalidModuleError e =- Strings.cat2 "invalid module: " (case e of- ErrorPackaging.InvalidModuleErrorConflictingVariantName v0 -> conflictingVariantNameError v0- ErrorPackaging.InvalidModuleErrorDefinitionNotInModuleName v0 -> definitionNotInModuleNameError v0- ErrorPackaging.InvalidModuleErrorDefinitionsOutOfOrder v0 -> definitionsOutOfOrderError v0- ErrorPackaging.InvalidModuleErrorDuplicateDefinitionName v0 -> duplicateDefinitionNameError v0- ErrorPackaging.InvalidModuleErrorInvalidDefinitionName v0 -> invalidDefinitionNameError v0- ErrorPackaging.InvalidModuleErrorInvalidModuleNameConvention v0 -> invalidModuleNameConventionError v0- ErrorPackaging.InvalidModuleErrorMissingDocumentation v0 -> missingDocumentationError v0)---- | Show an invalid namespace convention error as a string-invalidModuleNameConventionError :: ErrorPackaging.InvalidModuleNameConventionError -> String-invalidModuleNameConventionError e =- Strings.cat [- "namespace ",- (Packaging.unModuleName (ErrorPackaging.invalidModuleNameConventionErrorModuleName e)),- " does not match the dotted-camelCase naming convention"]---- | Show an invalid package error as a string-invalidPackageError :: ErrorPackaging.InvalidPackageError -> String-invalidPackageError e =- Strings.cat2 "invalid package: " (case e of- ErrorPackaging.InvalidPackageErrorConflictingModuleName v0 -> conflictingModuleNameError v0- ErrorPackaging.InvalidPackageErrorDuplicateModuleName v0 -> duplicateModuleNameError v0- ErrorPackaging.InvalidPackageErrorInvalidModule v0 -> invalidModuleError v0- ErrorPackaging.InvalidPackageErrorInvalidPackageName v0 -> invalidPackageNameError v0- ErrorPackaging.InvalidPackageErrorUndeclaredDependency v0 -> undeclaredDependencyError v0)---- | Show an invalid package name error as a string-invalidPackageNameError :: ErrorPackaging.InvalidPackageNameError -> String-invalidPackageNameError e =- Strings.cat [- "package name ",- (Packaging.unPackageName (ErrorPackaging.invalidPackageNameErrorPackageName e)),- " does not match the hyphen-separated lowercase naming convention"]---- | Show a missing documentation error as a string-missingDocumentationError :: ErrorPackaging.MissingDocumentationError -> String-missingDocumentationError e =- Strings.cat [- "in module ",- (Packaging.unModuleName (ErrorPackaging.missingDocumentationErrorModuleName e)),- ": definition ",- (Core.unName (ErrorPackaging.missingDocumentationErrorName e)),- " lacks a description annotation"]---- | Show an undeclared dependency error as a string-undeclaredDependencyError :: ErrorPackaging.UndeclaredDependencyError -> String-undeclaredDependencyError e =- Strings.cat [- "module ",- (Packaging.unModuleName (ErrorPackaging.undeclaredDependencyErrorModuleName e)),- " references ",- (Core.unName (ErrorPackaging.undeclaredDependencyErrorReferencedName e)),- ", whose owning module ",- (Packaging.unModuleName (ErrorPackaging.undeclaredDependencyErrorOwningModuleName e)),- " is not among its declared dependencies; add it to moduleDependencies"]
− src/main/haskell/Hydra/Show/Errors.hs
@@ -1,214 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.error types--module Hydra.Show.Errors 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.Formatting as Formatting-import qualified Hydra.Graph as Graph-import qualified Hydra.Json.Model as Model-import qualified Hydra.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Literals as Literals-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-import qualified Hydra.Show.Error.Core as ShowErrorCore-import qualified Hydra.Show.Typing as ShowTyping-import qualified Hydra.Show.Variants as ShowVariants-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---- | Show a checking error as a string-checkingError :: Checking.CheckingError -> String-checkingError ce =- case ce of- Checking.CheckingErrorIncorrectUnification v0 -> incorrectUnificationError v0- Checking.CheckingErrorNotAForallType v0 -> notAForallTypeError v0- Checking.CheckingErrorNotAFunctionType v0 -> notAFunctionTypeError v0- Checking.CheckingErrorTypeArityMismatch v0 -> typeArityMismatchError v0- Checking.CheckingErrorTypeMismatch v0 -> typeMismatchError v0- Checking.CheckingErrorUnboundTypeVariables v0 -> unboundTypeVariablesError v0- Checking.CheckingErrorUnequalTypes v0 -> unequalTypesError v0- Checking.CheckingErrorUnsupportedTermVariant v0 -> unsupportedTermVariantError v0- Checking.CheckingErrorUntypedLambda v0 -> untypedLambdaError v0- Checking.CheckingErrorUntypedLetBinding v0 -> untypedLetBindingError v0---- | Show a decoding error as a string-decodingError :: Errors.DecodingError -> String-decodingError de = Strings.cat2 "decoding error: " (Errors.unDecodingError de)---- | Show an error as a string-error :: Errors.Error -> String-error e =- case e of- Errors.ErrorChecking v0 -> checkingError v0- Errors.ErrorDecoding v0 -> decodingError v0- Errors.ErrorDuplicateBinding v0 -> ShowErrorCore.duplicateBindingError v0- Errors.ErrorDuplicateField v0 -> ShowErrorCore.duplicateFieldError v0- Errors.ErrorExtraction _ -> "extraction error"- Errors.ErrorInference _ -> "inference error"- Errors.ErrorOther v0 -> otherError v0- Errors.ErrorResolution v0 -> resolutionError v0- Errors.ErrorUndefinedField v0 -> ShowErrorCore.undefinedFieldError v0- Errors.ErrorUndefinedTermVariable v0 -> ShowErrorCore.undefinedTermVariableError v0- Errors.ErrorUntypedTermVariable v0 -> ShowErrorCore.untypedTermVariableError v0- Errors.ErrorUnexpectedTermVariant v0 -> ShowErrorCore.unexpectedTermVariantError v0- Errors.ErrorUnexpectedTypeVariant v0 -> ShowErrorCore.unexpectedTypeVariantError v0- Errors.ErrorUnification v0 -> unificationError v0---- | Show an incorrect unification error as a string-incorrectUnificationError :: Checking.IncorrectUnificationError -> String-incorrectUnificationError e =-- let subst = Checking.incorrectUnificationErrorSubstitution e- in (Strings.cat2 "incorrect unification: " (ShowTyping.typeSubst subst))---- | Show a not-a-forall-type error as a string-notAForallTypeError :: Checking.NotAForallTypeError -> String-notAForallTypeError e =-- let typ = Checking.notAForallTypeErrorType e- args = Checking.notAForallTypeErrorTypeArguments e- in (Strings.cat [- "not a forall type: ",- (ShowCore.type_ typ),- ". Trying to apply ",- (Literals.showInt32 (Lists.length args)),- " type argument(s): ",- (Formatting.showList ShowCore.type_ args)])---- | Show a not-a-function-type error as a string-notAFunctionTypeError :: Checking.NotAFunctionTypeError -> String-notAFunctionTypeError e =-- let typ = Checking.notAFunctionTypeErrorType e- in (Strings.cat2 "not a function type: " (ShowCore.type_ typ))---- | Show an other error as a string-otherError :: Errors.OtherError -> String-otherError oe = Errors.unOtherError oe---- | Show a resolution error as a string, including the offending name or shape-resolutionError :: Errors.ResolutionError -> String-resolutionError re =- case re of- Errors.ResolutionErrorNoSuchBinding v0 -> Strings.cat2 "no such binding: " (Core.unName (Errors.noSuchBindingErrorName v0))- Errors.ResolutionErrorNoSuchPrimitive v0 -> Strings.cat2 "no such primitive: " (Core.unName (Errors.noSuchPrimitiveErrorName v0))- Errors.ResolutionErrorNoMatchingField v0 -> Strings.cat2 "no matching field: " (Core.unName (Errors.noMatchingFieldErrorFieldName v0))- Errors.ResolutionErrorOther v0 -> Strings.cat2 "resolution error: " (Errors.unOtherResolutionError v0)- Errors.ResolutionErrorUnexpectedShape v0 -> Strings.cat [- "unexpected shape: expected ",- (Errors.unexpectedShapeErrorExpected v0),- " but got ",- (Errors.unexpectedShapeErrorActual v0)]---- | Show a type arity mismatch error as a string-typeArityMismatchError :: Checking.TypeArityMismatchError -> String-typeArityMismatchError e =-- let typ = Checking.typeArityMismatchErrorType e- expected = Checking.typeArityMismatchErrorExpectedArity e- actual = Checking.typeArityMismatchErrorActualArity e- args = Checking.typeArityMismatchErrorTypeArguments e- in (Strings.cat [- "type ",- (ShowCore.type_ typ),- " applied to the wrong number of type arguments (expected ",- (Literals.showInt32 expected),- ", got ",- (Literals.showInt32 actual),- "): ",- (Formatting.showList ShowCore.type_ args)])---- | Show a type mismatch error as a string-typeMismatchError :: Checking.TypeMismatchError -> String-typeMismatchError e =-- let expected = Checking.typeMismatchErrorExpectedType e- actual = Checking.typeMismatchErrorActualType e- in (Strings.cat [- "type mismatch: expected ",- (ShowCore.type_ expected),- " but found ",- (ShowCore.type_ actual)])---- | Show an unbound type variables error as a string-unboundTypeVariablesError :: Checking.UnboundTypeVariablesError -> String-unboundTypeVariablesError e =-- let vars = Checking.unboundTypeVariablesErrorVariables e- typ = Checking.unboundTypeVariablesErrorType e- in (Strings.cat [- "unbound type variables: {",- (Strings.intercalate ", " (Lists.map Core.unName (Sets.toList vars))),- "} in type ",- (ShowCore.type_ typ)])---- | Show an unequal types error as a string-unequalTypesError :: Checking.UnequalTypesError -> String-unequalTypesError e =-- let types = Checking.unequalTypesErrorTypes e- desc = Checking.unequalTypesErrorDescription e- in (Strings.cat [- "unequal types ",- (Formatting.showList ShowCore.type_ types),- " in ",- desc])---- | Show a unification error as a string-unificationError :: Errors.UnificationError -> String-unificationError e =-- let lt = Errors.unificationErrorLeftType e- rt = Errors.unificationErrorRightType e- msg = Errors.unificationErrorMessage e- in (Strings.cat [- "unification error: cannot unify ",- (ShowCore.type_ lt),- " with ",- (ShowCore.type_ rt),- ": ",- msg])---- | Show an unsupported term variant error as a string-unsupportedTermVariantError :: Checking.UnsupportedTermVariantError -> String-unsupportedTermVariantError e =- Strings.cat2 "unsupported term variant: " (ShowVariants.termVariant (Checking.unsupportedTermVariantErrorTermVariant e))---- | Show an untyped lambda error as a string-untypedLambdaError :: t0 -> String-untypedLambdaError _ = "untyped lambda"---- | Show an untyped let binding error as a string-untypedLetBindingError :: Checking.UntypedLetBindingError -> String-untypedLetBindingError e =-- let b = Checking.untypedLetBindingErrorBinding e- in (Strings.cat2 "untyped let binding: " (ShowCore.binding b))
− src/main/haskell/Hydra/Show/Graph.hs
@@ -1,49 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.graph types--module Hydra.Show.Graph 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.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-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---- | Show a list of bindings as a string-graph :: [Core.Binding] -> String-graph elements =-- let elementStrs = Lists.map ShowCore.binding elements- in (Strings.cat [- "{",- (Strings.intercalate ", " elementStrs),- "}"])
− src/main/haskell/Hydra/Show/Paths.hs
@@ -1,140 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | Utilities for working with subterm steps and paths.--module Hydra.Show.Paths 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.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps-import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals-import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs-import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-import qualified Hydra.Names as Names-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.Relational as Relational-import qualified Hydra.Rewriting as Rewriting-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-import qualified Data.Map as M---- | Convert a subterm step to a string representation-subtermStep :: Paths.SubtermStep -> Maybe String-subtermStep step =-- let idx = \i -> Nothing- idxSuff = \suffix -> \i -> Optionals.map (\s -> Strings.cat2 s suffix) (idx i)- in case step of- Paths.SubtermStepAnnotatedBody -> Nothing- Paths.SubtermStepApplicationFunction -> Just "fun"- Paths.SubtermStepApplicationArgument -> Just "arg"- Paths.SubtermStepLambdaBody -> Just "body"- Paths.SubtermStepUnionCasesDefault -> Just "default"- Paths.SubtermStepUnionCasesBranch v0 -> Just (Strings.cat2 "." (Core.unName v0))- Paths.SubtermStepLetBody -> Just "in"- Paths.SubtermStepLetBinding v0 -> Just (Strings.cat2 (Core.unName v0) "=")- Paths.SubtermStepListElement v0 -> idx v0- Paths.SubtermStepMapKey v0 -> idxSuff ".key" v0- Paths.SubtermStepMapValue v0 -> idxSuff ".value" v0- Paths.SubtermStepOptionalTerm -> Just "given"- Paths.SubtermStepProductTerm v0 -> idx v0- Paths.SubtermStepRecordField v0 -> Just (Strings.cat2 "." (Core.unName v0))- Paths.SubtermStepSetElement v0 -> idx v0- Paths.SubtermStepSumTerm -> Nothing- Paths.SubtermStepTypeLambdaBody -> Nothing- Paths.SubtermStepTypeApplicationTerm -> Nothing- Paths.SubtermStepInjectionTerm -> Nothing- Paths.SubtermStepWrappedTerm -> Nothing---- | Build a subterm graph from a term-termToSubtermGraph :: M.Map Packaging.ModuleName String -> Core.Term -> Paths.SubtermGraph-termToSubtermGraph namespaces term =-- let dontCareStep = Paths.SubtermStepAnnotatedBody- helper =- \ids -> \mroot -> \path -> \state -> \stepTerm ->- let step = Pairs.first stepTerm- currentTerm = Pairs.second stepTerm- nodesEdges = Pairs.first state- visited = Pairs.second state- nodes = Pairs.first nodesEdges- edges = Pairs.second nodesEdges- nextPath = Lists.cons step path- in case currentTerm of- Core.TermLet v0 ->- let bindings = Core.letBindings v0- env = Core.letBody v0- bindingNames = Lists.map Core.bindingName bindings- addBindingName =- \nodesVisitedIds -> \name ->- let currentNodesVisited = Pairs.first nodesVisitedIds- currentIds = Pairs.second nodesVisitedIds- currentNodes = Pairs.first currentNodesVisited- currentVisited = Pairs.second currentNodesVisited- rawLabel = Names.compactName namespaces name- uniqueLabel = Names.chooseUniqueLabel currentVisited rawLabel- node =- Paths.SubtermNode {- Paths.subtermNodeName = name,- Paths.subtermNodeLabel = rawLabel,- Paths.subtermNodeId = uniqueLabel}- newVisited = Sets.insert uniqueLabel currentVisited- newNodes = Lists.cons node currentNodes- newIds = Maps.insert name node currentIds- in ((newNodes, newVisited), newIds)- nodesVisitedIds1 = Lists.foldl addBindingName (([], visited), ids) bindingNames- nodes1 = Pairs.first (Pairs.first nodesVisitedIds1)- visited1 = Pairs.second (Pairs.first nodesVisitedIds1)- ids1 = Pairs.second nodesVisitedIds1- addBindingTerm =- \currentState -> \nodeBinding ->- let root = Pairs.first nodeBinding- binding = Pairs.second nodeBinding- term1 = Core.bindingTerm binding- in (helper ids1 (Just root) [] currentState (dontCareStep, term1))- nodeBindingPairs = Lists.zip nodes1 bindings- stateAfterBindings = Lists.foldl addBindingTerm ((Lists.concat2 nodes1 nodes, edges), visited1) nodeBindingPairs- in (helper ids1 mroot nextPath stateAfterBindings (Paths.SubtermStepLetBody, env))- Core.TermVariable v0 -> Optionals.cases mroot state (\root -> Optionals.cases (Maps.lookup v0 ids) state (\node ->- let edge =- Paths.SubtermEdge {- Paths.subtermEdgeSource = root,- Paths.subtermEdgePath = (Paths.SubtermPath (Lists.reverse nextPath)),- Paths.subtermEdgeTarget = node}- newEdges = Lists.cons edge edges- in ((nodes, newEdges), visited)))- _ -> Lists.foldl (helper ids mroot nextPath) state (Rewriting.subtermsWithSteps currentTerm)- initialState = (([], []), Sets.empty)- result = helper Maps.empty Nothing [] initialState (dontCareStep, term)- finalNodesEdges = Pairs.first result- finalNodes = Pairs.first finalNodesEdges- finalEdges = Pairs.second finalNodesEdges- in Paths.SubtermGraph {- Paths.subtermGraphNodes = finalNodes,- Paths.subtermGraphEdges = finalEdges}
− src/main/haskell/Hydra/Show/Typing.hs
@@ -1,72 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.typing types--module Hydra.Show.Typing 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.Overlay.Haskell.Lib.Lists as Lists-import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps-import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs-import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings-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.Relational as Relational-import qualified Hydra.Show.Core as ShowCore-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---- | Show a type constraint as a string-typeConstraint :: Typing.TypeConstraint -> String-typeConstraint tc =-- let ltyp = Typing.typeConstraintLeft tc- rtyp = Typing.typeConstraintRight tc- in (Strings.cat [- ShowCore.type_ ltyp,- "\8801",- (ShowCore.type_ rtyp)])---- | Show a type substitution as a string-typeSubst :: Typing.TypeSubst -> String-typeSubst ts =-- let subst = Typing.unTypeSubst ts- pairs = Maps.toList subst- showPair =- \pair ->- let name = Core.unName (Pairs.first pair)- typ = Pairs.second pair- in (Strings.cat [- name,- "\8614",- (ShowCore.type_ typ)])- pairStrs = Lists.map showPair pairs- in (Strings.cat [- "{",- (Strings.intercalate "," pairStrs),- "}"])
− src/main/haskell/Hydra/Show/Util.hs
@@ -1,53 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.util types--module Hydra.Show.Util 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.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---- | Show a case convention as a string-caseConvention :: Util.CaseConvention -> String-caseConvention c =- case c of- Util.CaseConventionLowerSnake -> "lower_snake_case"- Util.CaseConventionUpperSnake -> "UPPER_SNAKE_CASE"- Util.CaseConventionCamel -> "camelCase"- Util.CaseConventionPascal -> "PascalCase"---- | Show a comparison result as a string-comparison :: Util.Comparison -> String-comparison c =- case c of- Util.ComparisonLessThan -> "lessThan"- Util.ComparisonEqualTo -> "equalTo"- Util.ComparisonGreaterThan -> "greaterThan"
− src/main/haskell/Hydra/Show/Variants.hs
@@ -1,85 +0,0 @@--- Note: this is an automatically generated file. Do not edit.---- | String representations of hydra.variants types--module Hydra.Show.Variants 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.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---- | Show a term variant as a string-termVariant :: Variants.TermVariant -> String-termVariant x =- case x of- Variants.TermVariantAnnotated -> "annotated"- Variants.TermVariantApplication -> "application"- Variants.TermVariantCases -> "cases"- Variants.TermVariantEither -> "either"- Variants.TermVariantLambda -> "lambda"- Variants.TermVariantLet -> "let"- Variants.TermVariantList -> "list"- Variants.TermVariantLiteral -> "literal"- Variants.TermVariantMap -> "map"- Variants.TermVariantOptional -> "optional"- Variants.TermVariantPair -> "pair"- Variants.TermVariantProject -> "project"- Variants.TermVariantRecord -> "record"- Variants.TermVariantSet -> "set"- Variants.TermVariantTypeLambda -> "typeLambda"- Variants.TermVariantTypeApplication -> "typeApplication"- Variants.TermVariantInject -> "inject"- Variants.TermVariantUnit -> "unit"- Variants.TermVariantUnwrap -> "unwrap"- Variants.TermVariantVariable -> "variable"- Variants.TermVariantWrap -> "wrap"---- | Show a type variant as a string-typeVariant :: Variants.TypeVariant -> String-typeVariant x =- case x of- Variants.TypeVariantAnnotated -> "annotated"- Variants.TypeVariantApplication -> "application"- Variants.TypeVariantEffect -> "effect"- Variants.TypeVariantEither -> "either"- Variants.TypeVariantForall -> "forall"- Variants.TypeVariantFunction -> "function"- Variants.TypeVariantList -> "list"- Variants.TypeVariantLiteral -> "literal"- Variants.TypeVariantMap -> "map"- Variants.TypeVariantOptional -> "optional"- Variants.TypeVariantPair -> "pair"- Variants.TypeVariantRecord -> "record"- Variants.TypeVariantSet -> "set"- Variants.TypeVariantUnion -> "union"- Variants.TypeVariantUnit -> "unit"- Variants.TypeVariantVariable -> "variable"- Variants.TypeVariantVoid -> "void"- Variants.TypeVariantWrap -> "wrap"
src/main/haskell/Hydra/Sorting.hs view
@@ -30,6 +30,7 @@ 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
src/main/haskell/Hydra/Strip.hs view
@@ -22,6 +22,7 @@ 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.Rewriting as Rewriting import qualified Hydra.System as System
src/main/haskell/Hydra/Substitution.hs view
@@ -27,6 +27,7 @@ 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.Rewriting as Rewriting import qualified Hydra.System as System
src/main/haskell/Hydra/Templates.hs view
@@ -28,9 +28,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing
src/main/haskell/Hydra/Test/Transform.hs view
@@ -28,6 +28,7 @@ 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.Sorting as Sorting import qualified Hydra.System as System
src/main/haskell/Hydra/Test/Utils.hs view
@@ -23,9 +23,10 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Errors as PrintErrors import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational-import qualified Hydra.Show.Errors as ShowErrors import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing@@ -42,7 +43,7 @@ -- | Run type inference on a single term inferTerm :: Graph.Graph -> Core.Term -> Either String Core.Term inferTerm g term =- Eithers.bimap (\e -> ShowErrors.error e) (\x -> Typing.inferenceResultTerm x) (Inference.inferInGraphContext Lexical.emptyInferenceContext g term)+ Eithers.bimap (\e -> PrintErrors.error e) (\x -> Typing.inferenceResultTerm x) (Inference.inferInGraphContext Lexical.emptyInferenceContext g term) -- | Run type inference on the terms in a test case inferTestCase :: t0 -> Testing.TestCaseWithMetadata -> Either t1 Testing.TestCaseWithMetadata
src/main/haskell/Hydra/Unification.hs view
@@ -28,10 +28,11 @@ import qualified Hydra.Packaging as Packaging import qualified Hydra.Parsing as Parsing import qualified Hydra.Paths as Paths+import qualified Hydra.Print.Core as PrintCore import qualified Hydra.Query as Query+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting-import qualified Hydra.Show.Core as ShowCore import qualified Hydra.Strip as Strip import qualified Hydra.Substitution as Substitution import qualified Hydra.System as System@@ -63,7 +64,7 @@ Left (Errors.UnificationError { Errors.unificationErrorLeftType = sleft, Errors.unificationErrorRightType = sright,- Errors.unificationErrorMessage = (Strings.cat2 (Strings.cat2 (Strings.cat2 "cannot unify " (ShowCore.type_ sleft)) " with ") (ShowCore.type_ sright))})+ Errors.unificationErrorMessage = (Strings.cat2 (Strings.cat2 (Strings.cat2 "cannot unify " (PrintCore.type_ sleft)) " with ") (PrintCore.type_ sright))}) assertEqual = Logic.ifElse (Equality.equal sleft sright) (Right []) cannotUnify joinList = \lefts -> \rights -> Logic.ifElse (Equality.equal (Lists.length lefts) (Lists.length rights)) (Right (Lists.zipWith joinOne lefts rights)) cannotUnify@@ -153,7 +154,7 @@ \v -> \t -> Logic.ifElse (variableOccursInType v t) (Left (Errors.UnificationError { Errors.unificationErrorLeftType = sleft, Errors.unificationErrorRightType = sright,- Errors.unificationErrorMessage = (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 "Variable " (Core.unName v)) " appears free in type ") (ShowCore.type_ t)) " (") comment) ")")})) (bind v t)+ Errors.unificationErrorMessage = (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 (Strings.cat2 "Variable " (Core.unName v)) " appears free in type ") (PrintCore.type_ t)) " (") comment) ")")})) (bind v t) noVars = let withConstraints = \constraints2 -> unifyTypeConstraints cx schemaTypes (Lists.concat2 constraints2 rest)
src/main/haskell/Hydra/Validate/Core.hs view
@@ -30,8 +30,11 @@ import qualified Hydra.Paths as Paths import qualified Hydra.Query as Query import qualified Hydra.Reflect as Reflect+import qualified Hydra.Regex as Regex import qualified Hydra.Relational as Relational import qualified Hydra.Rewriting as Rewriting+import qualified Hydra.Scoping as Scoping+import qualified Hydra.Strip as Strip import qualified Hydra.System as System import qualified Hydra.Tabular as Tabular import qualified Hydra.Testing as Testing@@ -218,13 +221,29 @@ let tname = Core.caseStatementTypeName v0 csDefault = Core.caseStatementDefault v0 csCases = Core.caseStatementCases v0+ altNames = Sets.fromList (Lists.map Core.caseAlternativeName csCases)+ unionFields = resolveUnionFields cx tname in (firstFinding [ Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.emptyTypeNameInTerm")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.emptyTypeNameInTerm", f)) (Logic.ifElse (Equality.equal (Core.unName tname) "") (Just (ErrorCore.InvalidTermErrorEmptyTypeNameInTerm (ErrorCore.EmptyTypeNameInTermError { ErrorCore.emptyTypeNameInTermErrorLocation = path}))) Nothing)) Nothing, (Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.emptyCaseStatement")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.emptyCaseStatement", f)) (Logic.ifElse (Logic.and (Lists.null csCases) (Optionals.isNone csDefault)) (Just (ErrorCore.InvalidTermErrorEmptyCaseStatement (ErrorCore.EmptyCaseStatementError { ErrorCore.emptyCaseStatementErrorLocation = path, ErrorCore.emptyCaseStatementErrorTypeName = tname}))) Nothing)) Nothing),- (Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.duplicateField")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.duplicateField", f)) (checkDuplicateFields path (Lists.map Core.caseAlternativeName csCases))) Nothing)])+ (Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.duplicateField")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.duplicateField", f)) (checkDuplicateFields path (Lists.map Core.caseAlternativeName csCases))) Nothing),+ (Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.missingCaseBranches")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.missingCaseBranches", f)) (Logic.ifElse (Optionals.isNone csDefault) (Optionals.cases unionFields Nothing (\fields ->+ let variantNames = Sets.fromList (Lists.map Core.fieldTypeName fields)+ uncovered = Sets.difference variantNames altNames+ in (Logic.ifElse (Sets.null uncovered) Nothing (Just (ErrorCore.InvalidTermErrorMissingCaseBranches (ErrorCore.MissingCaseBranchesError {+ ErrorCore.missingCaseBranchesErrorLocation = path,+ ErrorCore.missingCaseBranchesErrorTypeName = tname,+ ErrorCore.missingCaseBranchesErrorVariantNames = (Sets.toList uncovered)})))))) Nothing)) Nothing),+ (Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.unknownCaseAlternative")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.unknownCaseAlternative", f)) (Optionals.cases unionFields Nothing (\fields ->+ let variantNames = Sets.fromList (Lists.map Core.fieldTypeName fields)+ unknown = Sets.difference altNames variantNames+ in (Optionals.cases (Lists.maybeHead (Sets.toList unknown)) Nothing (\firstUnknown -> Just (ErrorCore.InvalidTermErrorUnknownCaseAlternative (ErrorCore.UnknownCaseAlternativeError {+ ErrorCore.unknownCaseAlternativeErrorLocation = path,+ ErrorCore.unknownCaseAlternativeErrorTypeName = tname,+ ErrorCore.unknownCaseAlternativeErrorName = firstUnknown}))))))) Nothing)]) Core.TermTypeApplication v0 -> Logic.ifElse (enabled p (Core.Name "hydra.error.core.InvalidTermError.undefinedTypeVariableInTypeApplication")) (Optionals.map (\f -> (Core.Name "hydra.error.core.InvalidTermError.undefinedTypeVariableInTypeApplication", f)) (Logic.ifElse typed (checkUndefinedTypeVariablesInType path cx (Core.typeApplicationTermType v0) (\uvName -> Just (ErrorCore.InvalidTermErrorUndefinedTypeVariableInTypeApplication (ErrorCore.UndefinedTypeVariableInTypeApplicationError { ErrorCore.undefinedTypeVariableInTypeApplicationErrorLocation = path, ErrorCore.undefinedTypeVariableInTypeApplicationErrorName = uvName})))) Nothing)) Nothing@@ -334,6 +353,7 @@ (Core.Name "hydra.error.core.InvalidTermError.invalidLambdaParameterName"), (Core.Name "hydra.error.core.InvalidTermError.invalidLetBindingName"), (Core.Name "hydra.error.core.InvalidTermError.invalidTypeLambdaParameterName"),+ (Core.Name "hydra.error.core.InvalidTermError.missingCaseBranches"), (Core.Name "hydra.error.core.InvalidTermError.nestedTermAnnotation"), (Core.Name "hydra.error.core.InvalidTermError.redundantWrapUnwrap"), (Core.Name "hydra.error.core.InvalidTermError.selfApplication"),@@ -343,6 +363,7 @@ (Core.Name "hydra.error.core.InvalidTermError.undefinedTypeVariableInBindingType"), (Core.Name "hydra.error.core.InvalidTermError.undefinedTypeVariableInLambdaDomain"), (Core.Name "hydra.error.core.InvalidTermError.undefinedTypeVariableInTypeApplication"),+ (Core.Name "hydra.error.core.InvalidTermError.unknownCaseAlternative"), (Core.Name "hydra.error.core.InvalidTermError.unknownPrimitiveName"), (Core.Name "hydra.error.core.InvalidTermError.unnecessaryIdentityApplication"), (Core.Name "hydra.error.core.InvalidTermError.untypedTermVariable"),@@ -363,6 +384,18 @@ Core.Name "hydra.error.core.InvalidTypeError.singleVariantUnion"]), Validation.validationProfileMaxErrors = 1, Validation.validationProfileMaxWarnings = 20}++-- | Resolve a type name to the field list of the union type it names, or Nothing if it does not resolve to a union type.+resolveUnionFields :: Graph.Graph -> Core.Name -> Maybe [Core.FieldType]+resolveUnionFields cx tname =++ let toFields =+ \ts ->+ let stripped = Strip.deannotateType (Core.typeSchemeBody ts)+ in case stripped of+ Core.TypeUnion v0 -> Just v0+ _ -> Nothing+ in (Optionals.cases (Maps.lookup tname (Graph.graphSchemaTypes cx)) (Optionals.cases (Maps.lookup tname (Graph.graphBoundTypes cx)) Nothing toFields) toFields) -- | Validate a term against the given ValidationProfile, returning a ValidationResult. Errors hard-stop traversal once maxErrors is reached; warnings are bounded by maxWarnings without causing termination. term :: Validation.ValidationProfile -> Bool -> Graph.Graph -> Core.Term -> Validation.ValidationResult ErrorCore.InvalidTermError
src/main/haskell/Hydra/Validate/Packaging.hs view
@@ -27,7 +27,7 @@ import qualified Hydra.Overlay.Haskell.Lib.Maps as Maps import qualified Hydra.Overlay.Haskell.Lib.Optionals as Optionals import qualified Hydra.Overlay.Haskell.Lib.Pairs as Pairs-import qualified Hydra.Overlay.Haskell.Lib.Regex as Regex+import qualified Hydra.Overlay.Haskell.Lib.Regex as LibRegex import qualified Hydra.Overlay.Haskell.Lib.Sets as Sets import qualified Hydra.Overlay.Haskell.Lib.Strings as Strings import qualified Hydra.Names as Names@@ -35,6 +35,7 @@ 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@@ -184,7 +185,7 @@ Packaging.DefinitionType _ -> Constants.regexPascalCase Packaging.DefinitionPrimitive _ -> Constants.regexCamelCase _ -> Constants.regexCamelCase- in (Logic.ifElse (Regex.matches pattern local) Nothing (Just (ErrorPackaging.InvalidModuleErrorInvalidDefinitionName (ErrorPackaging.InvalidDefinitionNameError {+ in (Logic.ifElse (LibRegex.matches pattern local) Nothing (Just (ErrorPackaging.InvalidModuleErrorInvalidDefinitionName (ErrorPackaging.InvalidDefinitionNameError { ErrorPackaging.invalidDefinitionNameErrorModuleName = ns, ErrorPackaging.invalidDefinitionNameErrorName = name, ErrorPackaging.invalidDefinitionNameErrorExpectedConvention = expected}))))) (\_ -> acc)) Nothing (Packaging.moduleDefinitions mod))@@ -250,7 +251,7 @@ checkModuleNameConvention mod = let ns = Packaging.moduleName mod- in (Logic.ifElse (Regex.matches Constants.regexNamespace (Packaging.unModuleName ns)) Nothing (Just (ErrorPackaging.InvalidModuleErrorInvalidModuleNameConvention (ErrorPackaging.InvalidModuleNameConventionError {+ in (Logic.ifElse (LibRegex.matches Constants.regexNamespace (Packaging.unModuleName ns)) Nothing (Just (ErrorPackaging.InvalidModuleErrorInvalidModuleNameConvention (ErrorPackaging.InvalidModuleNameConventionError { ErrorPackaging.invalidModuleNameConventionErrorModuleName = ns})))) -- | Check that the package's name matches the hyphen-separated lowercase naming convention@@ -258,7 +259,7 @@ checkPackageNameConvention pkg = let pname = Packaging.packageName pkg- in (Logic.ifElse (Regex.matches Constants.regexPackageName (Packaging.unPackageName pname)) Nothing (Just (ErrorPackaging.InvalidPackageErrorInvalidPackageName (ErrorPackaging.InvalidPackageNameError {+ in (Logic.ifElse (LibRegex.matches Constants.regexPackageName (Packaging.unPackageName pname)) Nothing (Just (ErrorPackaging.InvalidPackageErrorInvalidPackageName (ErrorPackaging.InvalidPackageNameError { ErrorPackaging.invalidPackageNameErrorPackageName = pname})))) -- | Check a module's definitions for free names whose owning module is not among its declared dependencies
src/main/haskell/Hydra/Variables.hs view
@@ -32,6 +32,7 @@ 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.Rewriting as Rewriting import qualified Hydra.System as System