Safe Haskell | None |
---|---|
Language | Haskell98 |
Data types for modules and declarations
- type Context = [(Ident, Type)]
- data TypeSearch
- data SimpleErrorMessage
- = ErrorParsingFFIModule FilePath (Maybe ErrorMessage)
- | ErrorParsingModule ParseError
- | MissingFFIModule ModuleName
- | MultipleFFIModules ModuleName [FilePath]
- | UnnecessaryFFIModule ModuleName FilePath
- | MissingFFIImplementations ModuleName [Ident]
- | UnusedFFIImplementations ModuleName [Ident]
- | InvalidFFIIdentifier ModuleName Text
- | CannotGetFileInfo FilePath
- | CannotReadFile FilePath
- | CannotWriteFile FilePath
- | InfiniteType Type
- | InfiniteKind Kind
- | MultipleValueOpFixities (OpName ValueOpName)
- | MultipleTypeOpFixities (OpName TypeOpName)
- | OrphanTypeDeclaration Ident
- | RedefinedIdent Ident
- | OverlappingNamesInLet
- | UnknownName (Qualified Name)
- | UnknownImport ModuleName Name
- | UnknownImportDataConstructor ModuleName (ProperName TypeName) (ProperName ConstructorName)
- | UnknownExport Name
- | UnknownExportDataConstructor (ProperName TypeName) (ProperName ConstructorName)
- | ScopeConflict Name [ModuleName]
- | ScopeShadowing Name (Maybe ModuleName) [ModuleName]
- | DeclConflict Name Name
- | ExportConflict (Qualified Name) (Qualified Name)
- | DuplicateModule ModuleName [SourceSpan]
- | DuplicateTypeArgument Text
- | InvalidDoBind
- | InvalidDoLet
- | CycleInDeclaration Ident
- | CycleInTypeSynonym (Maybe (ProperName TypeName))
- | CycleInModules [ModuleName]
- | NameIsUndefined Ident
- | UndefinedTypeVariable (ProperName TypeName)
- | PartiallyAppliedSynonym (Qualified (ProperName TypeName))
- | EscapedSkolem (Maybe Expr)
- | TypesDoNotUnify Type Type
- | KindsDoNotUnify Kind Kind
- | ConstrainedTypeUnified Type Type
- | OverlappingInstances (Qualified (ProperName ClassName)) [Type] [Qualified Ident]
- | NoInstanceFound Constraint
- | AmbiguousTypeVariables Type Constraint
- | UnknownClass (Qualified (ProperName ClassName))
- | PossiblyInfiniteInstance (Qualified (ProperName ClassName)) [Type]
- | CannotDerive (Qualified (ProperName ClassName)) [Type]
- | InvalidNewtypeInstance (Qualified (ProperName ClassName)) [Type]
- | CannotFindDerivingType (ProperName TypeName)
- | DuplicateLabel Text (Maybe Expr)
- | DuplicateValueDeclaration Ident
- | ArgListLengthsDiffer Ident
- | OverlappingArgNames (Maybe Ident)
- | MissingClassMember Ident
- | ExtraneousClassMember Ident (Qualified (ProperName ClassName))
- | ExpectedType Type Kind
- | IncorrectConstructorArity (Qualified (ProperName ConstructorName))
- | ExprDoesNotHaveType Expr Type
- | PropertyIsMissing Text
- | AdditionalProperty Text
- | TypeSynonymInstance
- | OrphanInstance Ident (Qualified (ProperName ClassName)) [Type]
- | InvalidNewtype (ProperName TypeName)
- | InvalidInstanceHead Type
- | TransitiveExportError DeclarationRef [DeclarationRef]
- | TransitiveDctorExportError DeclarationRef (ProperName ConstructorName)
- | ShadowedName Ident
- | ShadowedTypeVar Text
- | UnusedTypeVar Text
- | WildcardInferredType Type Context
- | HoleInferredType Text Type Context TypeSearch
- | MissingTypeDeclaration Ident Type
- | OverlappingPattern [[Binder]] Bool
- | IncompleteExhaustivityCheck
- | MisleadingEmptyTypeImport ModuleName (ProperName TypeName)
- | ImportHidingModule ModuleName
- | UnusedImport ModuleName
- | UnusedExplicitImport ModuleName [Name] (Maybe ModuleName) [DeclarationRef]
- | UnusedDctorImport ModuleName (ProperName TypeName) (Maybe ModuleName) [DeclarationRef]
- | UnusedDctorExplicitImport ModuleName (ProperName TypeName) [ProperName ConstructorName] (Maybe ModuleName) [DeclarationRef]
- | DuplicateSelectiveImport ModuleName
- | DuplicateImport ModuleName ImportDeclarationType (Maybe ModuleName)
- | DuplicateImportRef Name
- | DuplicateExportRef Name
- | IntOutOfRange Integer Text Integer Integer
- | ImplicitQualifiedImport ModuleName ModuleName [DeclarationRef]
- | ImplicitImport ModuleName [DeclarationRef]
- | HidingImport ModuleName [DeclarationRef]
- | CaseBinderLengthDiffers Int [Binder]
- | IncorrectAnonymousArgument
- | InvalidOperatorInBinder (Qualified (OpName ValueOpName)) (Qualified Ident)
- | DeprecatedRequirePath
- | CannotGeneralizeRecursiveFunction Ident Type
- | CannotDeriveNewtypeForData (ProperName TypeName)
- | ExpectedWildcard (ProperName TypeName)
- data ErrorMessageHint
- = ErrorUnifyingTypes Type Type
- | ErrorInExpression Expr
- | ErrorInModule ModuleName
- | ErrorInInstance (Qualified (ProperName ClassName)) [Type]
- | ErrorInSubsumption Type Type
- | ErrorCheckingAccessor Expr Text
- | ErrorCheckingType Expr Type
- | ErrorCheckingKind Type
- | ErrorCheckingGuard
- | ErrorInferringType Expr
- | ErrorInApplication Expr Type Expr
- | ErrorInDataConstructor (ProperName ConstructorName)
- | ErrorInTypeConstructor (ProperName TypeName)
- | ErrorInBindingGroup [Ident]
- | ErrorInDataBindingGroup [ProperName TypeName]
- | ErrorInTypeSynonym (ProperName TypeName)
- | ErrorInValueDeclaration Ident
- | ErrorInTypeDeclaration Ident
- | ErrorInTypeClassDeclaration (ProperName ClassName)
- | ErrorInForeignImport Ident
- | ErrorSolvingConstraint Constraint
- | PositionedError SourceSpan
- data HintCategory
- data ErrorMessage = ErrorMessage [ErrorMessageHint] SimpleErrorMessage
- data Module = Module SourceSpan [Comment] ModuleName [Declaration] (Maybe [DeclarationRef])
- getModuleName :: Module -> ModuleName
- getModuleSourceSpan :: Module -> SourceSpan
- addDefaultImport :: ModuleName -> Module -> Module
- data DeclarationRef
- = TypeRef (ProperName TypeName) (Maybe [ProperName ConstructorName])
- | TypeOpRef (OpName TypeOpName)
- | ValueRef Ident
- | ValueOpRef (OpName ValueOpName)
- | TypeClassRef (ProperName ClassName)
- | TypeInstanceRef Ident
- | ModuleRef ModuleName
- | KindRef (ProperName KindName)
- | ReExportRef ModuleName DeclarationRef
- | PositionedDeclarationRef SourceSpan [Comment] DeclarationRef
- compDecRef :: DeclarationRef -> DeclarationRef -> Ordering
- getTypeRef :: DeclarationRef -> Maybe (ProperName TypeName, Maybe [ProperName ConstructorName])
- getTypeOpRef :: DeclarationRef -> Maybe (OpName TypeOpName)
- getValueRef :: DeclarationRef -> Maybe Ident
- getValueOpRef :: DeclarationRef -> Maybe (OpName ValueOpName)
- getTypeClassRef :: DeclarationRef -> Maybe (ProperName ClassName)
- getKindRef :: DeclarationRef -> Maybe (ProperName KindName)
- isModuleRef :: DeclarationRef -> Bool
- data ImportDeclarationType
- isImplicit :: ImportDeclarationType -> Bool
- isExplicit :: ImportDeclarationType -> Bool
- data Declaration
- = DataDeclaration DataDeclType (ProperName TypeName) [(Text, Maybe Kind)] [(ProperName ConstructorName, [Type])]
- | DataBindingGroupDeclaration [Declaration]
- | TypeSynonymDeclaration (ProperName TypeName) [(Text, Maybe Kind)] Type
- | TypeDeclaration Ident Type
- | ValueDeclaration Ident NameKind [Binder] (Either [(Guard, Expr)] Expr)
- | BindingGroupDeclaration [(Ident, NameKind, Expr)]
- | ExternDeclaration Ident Type
- | ExternDataDeclaration (ProperName TypeName) Kind
- | ExternKindDeclaration (ProperName KindName)
- | FixityDeclaration (Either ValueFixity TypeFixity)
- | ImportDeclaration ModuleName ImportDeclarationType (Maybe ModuleName)
- | TypeClassDeclaration (ProperName ClassName) [(Text, Maybe Kind)] [Constraint] [FunctionalDependency] [Declaration]
- | TypeInstanceDeclaration Ident [Constraint] (Qualified (ProperName ClassName)) [Type] TypeInstanceBody
- | PositionedDeclaration SourceSpan [Comment] Declaration
- data ValueFixity = ValueFixity Fixity (Qualified (Either Ident (ProperName ConstructorName))) (OpName ValueOpName)
- data TypeFixity = TypeFixity Fixity (Qualified (ProperName TypeName)) (OpName TypeOpName)
- pattern ValueFixityDeclaration :: Fixity -> Qualified (Either Ident (ProperName ConstructorName)) -> OpName ValueOpName -> Declaration
- pattern TypeFixityDeclaration :: Fixity -> Qualified (ProperName TypeName) -> OpName TypeOpName -> Declaration
- data TypeInstanceBody
- mapTypeInstanceBody :: ([Declaration] -> [Declaration]) -> TypeInstanceBody -> TypeInstanceBody
- traverseTypeInstanceBody :: Applicative f => ([Declaration] -> f [Declaration]) -> TypeInstanceBody -> f TypeInstanceBody
- isValueDecl :: Declaration -> Bool
- isDataDecl :: Declaration -> Bool
- isImportDecl :: Declaration -> Bool
- isExternDataDecl :: Declaration -> Bool
- isExternKindDecl :: Declaration -> Bool
- isFixityDecl :: Declaration -> Bool
- getFixityDecl :: Declaration -> Maybe (Either ValueFixity TypeFixity)
- isExternDecl :: Declaration -> Bool
- isTypeClassInstanceDeclaration :: Declaration -> Bool
- isTypeClassDeclaration :: Declaration -> Bool
- flattenDecls :: [Declaration] -> [Declaration]
- type Guard = Expr
- data Expr
- = Literal (Literal Expr)
- | UnaryMinus Expr
- | BinaryNoParens Expr Expr Expr
- | Parens Expr
- | Accessor Text Expr
- | ObjectUpdate Expr [(Text, Expr)]
- | Abs (Either Ident Binder) Expr
- | App Expr Expr
- | Var (Qualified Ident)
- | Op (Qualified (OpName ValueOpName))
- | IfThenElse Expr Expr Expr
- | Constructor (Qualified (ProperName ConstructorName))
- | Case [Expr] [CaseAlternative]
- | TypedValue Bool Expr Type
- | Let [Declaration] Expr
- | Do [DoNotationElement]
- | TypeClassDictionaryConstructorApp (Qualified (ProperName ClassName)) Expr
- | TypeClassDictionary Constraint (Map (Maybe ModuleName) (Map (Qualified (ProperName ClassName)) (Map (Qualified Ident) NamedDict))) [ErrorMessageHint]
- | TypeClassDictionaryAccessor (Qualified (ProperName ClassName)) Ident
- | DeferredDictionary (Qualified (ProperName ClassName)) [Type]
- | AnonymousArgument
- | Hole Text
- | PositionedValue SourceSpan [Comment] Expr
- data CaseAlternative = CaseAlternative {
- caseAlternativeBinders :: [Binder]
- caseAlternativeResult :: Either [(Guard, Expr)] Expr
- data DoNotationElement
Documentation
data TypeSearch Source #
Holds the data necessary to do type directed search for typed holes
data SimpleErrorMessage Source #
A type of error messages
data ErrorMessageHint Source #
Error message hints, providing more detailed information about failure.
data HintCategory Source #
Categories of hints
data ErrorMessage Source #
A module declaration, consisting of comments about the module, a module name, a list of declarations, and a list of the declarations that are explicitly exported. If the export list is Nothing, everything is exported.
getModuleName :: Module -> ModuleName Source #
Return a module's name.
getModuleSourceSpan :: Module -> SourceSpan Source #
Return a module's source span.
addDefaultImport :: ModuleName -> Module -> Module Source #
Add an import declaration for a module if it does not already explicitly import it.
data DeclarationRef Source #
An item in a list of explicit imports or exports
TypeRef (ProperName TypeName) (Maybe [ProperName ConstructorName]) | A type constructor with data constructors |
TypeOpRef (OpName TypeOpName) | A type operator |
ValueRef Ident | A value |
ValueOpRef (OpName ValueOpName) | A value-level operator |
TypeClassRef (ProperName ClassName) | A type class |
TypeInstanceRef Ident | A type class instance, created during typeclass desugaring (name, class name, instance types) |
ModuleRef ModuleName | A module, in its entirety |
KindRef (ProperName KindName) | A named kind |
ReExportRef ModuleName DeclarationRef | A value re-exported from another module. These will be inserted during elaboration in name desugaring. |
PositionedDeclarationRef SourceSpan [Comment] DeclarationRef | A declaration reference with source position information |
compDecRef :: DeclarationRef -> DeclarationRef -> Ordering Source #
getTypeRef :: DeclarationRef -> Maybe (ProperName TypeName, Maybe [ProperName ConstructorName]) Source #
getTypeOpRef :: DeclarationRef -> Maybe (OpName TypeOpName) Source #
getValueRef :: DeclarationRef -> Maybe Ident Source #
getValueOpRef :: DeclarationRef -> Maybe (OpName ValueOpName) Source #
getKindRef :: DeclarationRef -> Maybe (ProperName KindName) Source #
isModuleRef :: DeclarationRef -> Bool Source #
data ImportDeclarationType Source #
The data type which specifies type of import declaration
Implicit | An import with no explicit list: `import M`. |
Explicit [DeclarationRef] | An import with an explicit list of references to import: `import M (foo)` |
Hiding [DeclarationRef] | An import with a list of references to hide: `import M hiding (foo)` |
data Declaration Source #
The data type of declarations
DataDeclaration DataDeclType (ProperName TypeName) [(Text, Maybe Kind)] [(ProperName ConstructorName, [Type])] | A data type declaration (data or newtype, name, arguments, data constructors) |
DataBindingGroupDeclaration [Declaration] | A minimal mutually recursive set of data type declarations |
TypeSynonymDeclaration (ProperName TypeName) [(Text, Maybe Kind)] Type | A type synonym declaration (name, arguments, type) |
TypeDeclaration Ident Type | A type declaration for a value (name, ty) |
ValueDeclaration Ident NameKind [Binder] (Either [(Guard, Expr)] Expr) | A value declaration (name, top-level binders, optional guard, value) |
BindingGroupDeclaration [(Ident, NameKind, Expr)] | A minimal mutually recursive set of value declarations |
ExternDeclaration Ident Type | A foreign import declaration (name, type) |
ExternDataDeclaration (ProperName TypeName) Kind | A data type foreign import (name, kind) |
ExternKindDeclaration (ProperName KindName) | A foreign kind import (name) |
FixityDeclaration (Either ValueFixity TypeFixity) | A fixity declaration |
ImportDeclaration ModuleName ImportDeclarationType (Maybe ModuleName) | A module import (module name, qualifiedunqualifiedhiding, optional "qualified as" name) |
TypeClassDeclaration (ProperName ClassName) [(Text, Maybe Kind)] [Constraint] [FunctionalDependency] [Declaration] | A type class declaration (name, argument, implies, member declarations) |
TypeInstanceDeclaration Ident [Constraint] (Qualified (ProperName ClassName)) [Type] TypeInstanceBody | A type instance declaration (name, dependencies, class name, instance types, member declarations) |
PositionedDeclaration SourceSpan [Comment] Declaration | A declaration with source position information |
data ValueFixity Source #
data TypeFixity Source #
pattern ValueFixityDeclaration :: Fixity -> Qualified (Either Ident (ProperName ConstructorName)) -> OpName ValueOpName -> Declaration Source #
pattern TypeFixityDeclaration :: Fixity -> Qualified (ProperName TypeName) -> OpName TypeOpName -> Declaration Source #
data TypeInstanceBody Source #
The members of a type class instance declaration
DerivedInstance | This is a derived instance |
NewtypeInstance | This is an instance derived from a newtype |
NewtypeInstanceWithDictionary Expr | This is an instance derived from a newtype, desugared to include a dictionary for the type under the newtype. |
ExplicitInstance [Declaration] | This is a regular (explicit) instance |
mapTypeInstanceBody :: ([Declaration] -> [Declaration]) -> TypeInstanceBody -> TypeInstanceBody Source #
traverseTypeInstanceBody :: Applicative f => ([Declaration] -> f [Declaration]) -> TypeInstanceBody -> f TypeInstanceBody Source #
A traversal for TypeInstanceBody
isValueDecl :: Declaration -> Bool Source #
Test if a declaration is a value declaration
isDataDecl :: Declaration -> Bool Source #
Test if a declaration is a data type or type synonym declaration
isImportDecl :: Declaration -> Bool Source #
Test if a declaration is a module import
isExternDataDecl :: Declaration -> Bool Source #
Test if a declaration is a data type foreign import
isExternKindDecl :: Declaration -> Bool Source #
Test if a declaration is a foreign kind import
isFixityDecl :: Declaration -> Bool Source #
Test if a declaration is a fixity declaration
isExternDecl :: Declaration -> Bool Source #
Test if a declaration is a foreign import
isTypeClassInstanceDeclaration :: Declaration -> Bool Source #
Test if a declaration is a type class instance declaration
isTypeClassDeclaration :: Declaration -> Bool Source #
Test if a declaration is a type class declaration
flattenDecls :: [Declaration] -> [Declaration] Source #
Recursively flatten data binding groups in the list of declarations
A guard is just a boolean-valued expression that appears alongside a set of binders
Data type for expressions and terms
Literal (Literal Expr) | A literal value |
UnaryMinus Expr | A prefix -, will be desugared |
BinaryNoParens Expr Expr Expr | Binary operator application. During the rebracketing phase of desugaring, this data constructor will be removed. |
Parens Expr | Explicit parentheses. During the rebracketing phase of desugaring, this data constructor will be removed. Note: although it seems this constructor is not used, it _is_ useful, since it prevents certain traversals from matching. |
Accessor Text Expr | An record property accessor expression (e.g. `obj.x` or `_.x`). Anonymous arguments will be removed during desugaring and expanded into a lambda that reads a property from a record. |
ObjectUpdate Expr [(Text, Expr)] | Partial record update |
Abs (Either Ident Binder) Expr | Function introduction |
App Expr Expr | Function application |
Var (Qualified Ident) | Variable |
Op (Qualified (OpName ValueOpName)) | An operator. This will be desugared into a function during the "operators" phase of desugaring. |
IfThenElse Expr Expr Expr | Conditional (if-then-else expression) |
Constructor (Qualified (ProperName ConstructorName)) | A data constructor |
Case [Expr] [CaseAlternative] | A case expression. During the case expansion phase of desugaring, top-level binders will get desugared into case expressions, hence the need for guards and multiple binders per branch here. |
TypedValue Bool Expr Type | A value with a type annotation |
Let [Declaration] Expr | A let binding |
Do [DoNotationElement] | A do-notation block |
TypeClassDictionaryConstructorApp (Qualified (ProperName ClassName)) Expr | An application of a typeclass dictionary constructor. The value should be an ObjectLiteral. |
TypeClassDictionary Constraint (Map (Maybe ModuleName) (Map (Qualified (ProperName ClassName)) (Map (Qualified Ident) NamedDict))) [ErrorMessageHint] | A placeholder for a type class dictionary to be inserted later. At the end of type checking, these placeholders will be replaced with actual expressions representing type classes dictionaries which can be evaluated at runtime. The constructor arguments represent (in order): whether or not to look at superclass implementations when searching for a dictionary, the type class name and instance type, and the type class dictionaries in scope. |
TypeClassDictionaryAccessor (Qualified (ProperName ClassName)) Ident | A typeclass dictionary accessor, the implementation is left unspecified until CoreFn desugaring. |
DeferredDictionary (Qualified (ProperName ClassName)) [Type] | A placeholder for a superclass dictionary to be turned into a TypeClassDictionary during typechecking |
AnonymousArgument | A placeholder for an anonymous function argument |
Hole Text | A typed hole that will be turned into a hint/error duing typechecking |
PositionedValue SourceSpan [Comment] Expr | A value with source position information |
data CaseAlternative Source #
An alternative in a case statement
CaseAlternative | |
|
data DoNotationElement Source #
A statement in a do-notation block
DoNotationValue Expr | A monadic value without a binder |
DoNotationBind Binder Expr | A monadic value with a binder |
DoNotationLet [Declaration] | A let statement, i.e. a pure value with a binder |
PositionedDoNotationElement SourceSpan [Comment] DoNotationElement | A do notation element with source position information |