purescript-0.8.5.0: PureScript Programming Language Compiler

Safe HaskellNone
LanguageHaskell98

Language.PureScript.Types

Description

Data types for types

Synopsis

Documentation

newtype SkolemScope Source

An identifier for the scope of a skolem variable

Constructors

SkolemScope 

Fields

runSkolemScope :: Int
 

data Type Source

The type of types

Constructors

TUnknown Int

A unification variable of type Type

TypeVar String

A named type variable

TypeWildcard

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

TypeConstructor (Qualified (ProperName TypeName))

A type constructor

TypeOp (Qualified Ident)

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

TypeApp Type Type

A type application

ForAll String Type (Maybe SkolemScope)

Forall quantifier

ConstrainedType [Constraint] Type

A type with a set of type class constraints

Skolem String Int SkolemScope (Maybe SourceSpan)

A skolem constant

REmpty

An empty row

RCons String 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 [String] 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.

type Constraint = (Qualified (ProperName ClassName), [Type]) Source

A typeclass constraint

rowToList :: Type -> ([(String, Type)], Type) Source

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

rowFromList :: ([(String, 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 :: [String] -> Type -> Type Source

Universally quantify a type

replaceTypeVars :: String -> Type -> Type -> Type Source

Replace a type variable, taking into account variable shadowing

replaceAllTypeVars :: [(String, Type)] -> Type -> Type Source

Replace named type variables with types

usedTypeVariables :: Type -> [String] Source

Collect all type variables appearing in a type

freeTypeVariables :: Type -> [String] 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