purescript-0.11.3: PureScript Programming Language Compiler

Safe HaskellNone
LanguageHaskell2010

Language.PureScript.Types

Description

Data types for types

Synopsis

Documentation

data Type Source #

The type of types

Constructors

TUnknown Int

A unification variable of type Type

TypeVar Text

A named type variable

TypeLevelString PSString

A type-level string

TypeWildcard SourceSpan

A type wildcard, as would appear in a partial type synonym

TypeConstructor (Qualified (ProperName TypeName))

A type constructor

TypeOp (Qualified (OpName TypeOpName))

A type operator. This will be desugared into a type constructor during the "operators" phase of desugaring.

TypeApp Type Type

A type application

ForAll Text Type (Maybe SkolemScope)

Forall quantifier

ConstrainedType Constraint Type

A type with a set of type class constraints

Skolem Text Int SkolemScope (Maybe SourceSpan)

A skolem constant

REmpty

An empty row

RCons Label Type Type

A non-empty row

KindedType Type Kind

A type with a kind annotation

PrettyPrintFunction Type Type

A placeholder used in pretty printing

PrettyPrintObject Type

A placeholder used in pretty printing

PrettyPrintForAll [Text] Type

A placeholder used in pretty printing

BinaryNoParensType Type Type Type

Binary operator application. During the rebracketing phase of desugaring, this data constructor will be removed.

ParensInType Type

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.

Instances

data ConstraintData Source #

Additional data relevant to type class constraints

Constructors

PartialConstraintData [[Text]] Bool

Data to accompany a Partial constraint generated by the exhaustivity checker. It contains (rendered) binder information for those binders which were not matched, and a flag indicating whether the list was truncated or not. Note: we use Text here because using Binder would introduce a cyclic dependency in the module graph.

rowToList :: Type -> ([(Label, Type)], Type) Source #

Convert a row to a list of pairs of labels and types

rowToSortedList :: Type -> ([(Label, Type)], Type) Source #

Convert a row to a list of pairs of labels and types, sorted by the labels.

rowFromList :: ([(Label, Type)], Type) -> Type Source #

Convert a list of labels and types to a row

isMonoType :: Type -> Bool Source #

Check whether a type is a monotype

mkForAll :: [Text] -> Type -> Type Source #

Universally quantify a type

replaceTypeVars :: Text -> Type -> Type -> Type Source #

Replace a type variable, taking into account variable shadowing

replaceAllTypeVars :: [(Text, Type)] -> Type -> Type Source #

Replace named type variables with types

usedTypeVariables :: Type -> [Text] Source #

Collect all type variables appearing in a type

freeTypeVariables :: Type -> [Text] Source #

Collect all free type variables appearing in a type

quantify :: Type -> Type Source #

Universally quantify over all type variables appearing free in a type

moveQuantifiersToFront :: Type -> Type Source #

Move all universal quantifiers to the front of a type

containsWildcards :: Type -> Bool Source #

Check if a type contains wildcards

everythingOnTypes :: (r -> r -> r) -> (Type -> r) -> Type -> r Source #

everythingWithContextOnTypes :: s -> r -> (r -> r -> r) -> (s -> Type -> (s, r)) -> Type -> r Source #