purescript-0.15.15: PureScript Programming Language Compiler
Safe HaskellNone
LanguageHaskell2010

Language.PureScript.Environment

Synopsis

Documentation

data Environment #

The Environment defines all values and types which are currently in scope:

Constructors

Environment 

Fields

Instances

Instances details
NFData Environment # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: Environment -> () #

Generic Environment # 
Instance details

Defined in Language.PureScript.Environment

Show Environment # 
Instance details

Defined in Language.PureScript.Environment

type Rep Environment # 
Instance details

Defined in Language.PureScript.Environment

data TypeClassData #

Information about a type class

Constructors

TypeClassData 

Fields

Instances

Instances details
NFData TypeClassData # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: TypeClassData -> () #

Generic TypeClassData # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep TypeClassData 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeClassData = D1 ('MetaData "TypeClassData" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "TypeClassData" 'PrefixI 'True) ((S1 ('MetaSel ('Just "typeClassArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType)]) :*: (S1 ('MetaSel ('Just "typeClassMembers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Ident, SourceType, Maybe (Set (NonEmpty Int)))]) :*: S1 ('MetaSel ('Just "typeClassSuperclasses") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SourceConstraint]))) :*: ((S1 ('MetaSel ('Just "typeClassDependencies") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [FunctionalDependency]) :*: S1 ('MetaSel ('Just "typeClassDeterminedArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set Int))) :*: (S1 ('MetaSel ('Just "typeClassCoveringSets") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set (Set Int))) :*: S1 ('MetaSel ('Just "typeClassIsEmpty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))))
Show TypeClassData # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeClassData # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeClassData = D1 ('MetaData "TypeClassData" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "TypeClassData" 'PrefixI 'True) ((S1 ('MetaSel ('Just "typeClassArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType)]) :*: (S1 ('MetaSel ('Just "typeClassMembers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Ident, SourceType, Maybe (Set (NonEmpty Int)))]) :*: S1 ('MetaSel ('Just "typeClassSuperclasses") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SourceConstraint]))) :*: ((S1 ('MetaSel ('Just "typeClassDependencies") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [FunctionalDependency]) :*: S1 ('MetaSel ('Just "typeClassDeterminedArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set Int))) :*: (S1 ('MetaSel ('Just "typeClassCoveringSets") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set (Set Int))) :*: S1 ('MetaSel ('Just "typeClassIsEmpty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))))

data FunctionalDependency #

A functional dependency indicates a relationship between two sets of type arguments in a class declaration.

Constructors

FunctionalDependency 

Fields

Instances

Instances details
FromJSON FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

ToJSON FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

NFData FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: FunctionalDependency -> () #

Generic FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep FunctionalDependency 
Instance details

Defined in Language.PureScript.Environment

type Rep FunctionalDependency = D1 ('MetaData "FunctionalDependency" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "FunctionalDependency" 'PrefixI 'True) (S1 ('MetaSel ('Just "fdDeterminers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Int]) :*: S1 ('MetaSel ('Just "fdDetermined") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Int])))
Show FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

Serialise FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

type Rep FunctionalDependency # 
Instance details

Defined in Language.PureScript.Environment

type Rep FunctionalDependency = D1 ('MetaData "FunctionalDependency" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "FunctionalDependency" 'PrefixI 'True) (S1 ('MetaSel ('Just "fdDeterminers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Int]) :*: S1 ('MetaSel ('Just "fdDetermined") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Int])))

initEnvironment :: Environment #

The initial environment with no values and only the default javascript types defined

makeTypeClassData :: [(Text, Maybe SourceType)] -> [(Ident, SourceType)] -> [SourceConstraint] -> [FunctionalDependency] -> Bool -> TypeClassData #

A constructor for TypeClassData that computes which type class arguments are fully determined and argument covering sets. Fully determined means that this argument cannot be used when selecting a type class instance. A covering set is a minimal collection of arguments that can be used to find an instance and therefore determine all other type arguments.

An example of the difference between determined and fully determined would be with the class: ```class C a b c | a -> b, b -> a, b -> c``` In this case, a must differ when b differs, and vice versa - each is determined by the other. Both a and b can be used in selecting a type class instance. However, c cannot - it is fully determined by a and b.

Define a graph of type class arguments with edges being fundep determiners to determined. Each argument also has a self looping edge. An argument is fully determined if doesn't appear at the start of a path of strongly connected components. An argument is not fully determined otherwise.

The way we compute this is by saying: an argument X is fully determined if there are arguments that determine X that X does not determine. This is the same thing: everything X determines includes everything in its SCC, and everything determining X is either before it in an SCC path, or in the same SCC.

data NameVisibility #

The visibility of a name in scope

Constructors

Undefined

The name is defined in the current binding group, but is not visible

Defined

The name is defined in the another binding group, or has been made visible by a function binder

Instances

Instances details
NFData NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: NameVisibility -> () #

Generic NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep NameVisibility 
Instance details

Defined in Language.PureScript.Environment

type Rep NameVisibility = D1 ('MetaData "NameVisibility" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Undefined" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Defined" 'PrefixI 'False) (U1 :: Type -> Type))
Show NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

Eq NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

Serialise NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameVisibility # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameVisibility = D1 ('MetaData "NameVisibility" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Undefined" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Defined" 'PrefixI 'False) (U1 :: Type -> Type))

data NameKind #

A flag for whether a name is for an private or public value - only public values will be included in a generated externs file.

Constructors

Private

A private value introduced as an artifact of code generation (class instances, class member accessors, etc.)

Public

A public value for a module member or foreign import declaration

External

A name for member introduced by foreign import

Instances

Instances details
NFData NameKind # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: NameKind -> () #

Generic NameKind # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep NameKind 
Instance details

Defined in Language.PureScript.Environment

type Rep NameKind = D1 ('MetaData "NameKind" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Private" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Public" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "External" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: NameKind -> Rep NameKind x #

to :: Rep NameKind x -> NameKind #

Show NameKind # 
Instance details

Defined in Language.PureScript.Environment

Eq NameKind # 
Instance details

Defined in Language.PureScript.Environment

Serialise NameKind # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameKind # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameKind = D1 ('MetaData "NameKind" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Private" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Public" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "External" 'PrefixI 'False) (U1 :: Type -> Type)))

data TypeKind #

The kinds of a type

Constructors

DataType DataDeclType [(Text, Maybe SourceType, Role)] [(ProperName 'ConstructorName, [SourceType])]

Data type

TypeSynonym

Type synonym

ExternData [Role]

Foreign data

LocalTypeVariable

A local type variable

ScopedTypeVar

A scoped type variable

Instances

Instances details
NFData TypeKind # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: TypeKind -> () #

Generic TypeKind # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep TypeKind 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeKind = D1 ('MetaData "TypeKind" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) ((C1 ('MetaCons "DataType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DataDeclType) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType, Role)]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(ProperName 'ConstructorName, [SourceType])]))) :+: C1 ('MetaCons "TypeSynonym" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ExternData" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Role])) :+: (C1 ('MetaCons "LocalTypeVariable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ScopedTypeVar" 'PrefixI 'False) (U1 :: Type -> Type))))

Methods

from :: TypeKind -> Rep TypeKind x #

to :: Rep TypeKind x -> TypeKind #

Show TypeKind # 
Instance details

Defined in Language.PureScript.Environment

Eq TypeKind # 
Instance details

Defined in Language.PureScript.Environment

Serialise TypeKind # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeKind # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeKind = D1 ('MetaData "TypeKind" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) ((C1 ('MetaCons "DataType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DataDeclType) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType, Role)]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(ProperName 'ConstructorName, [SourceType])]))) :+: C1 ('MetaCons "TypeSynonym" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ExternData" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Role])) :+: (C1 ('MetaCons "LocalTypeVariable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ScopedTypeVar" 'PrefixI 'False) (U1 :: Type -> Type))))

data DataDeclType #

The type ('data' or 'newtype') of a data type declaration

Constructors

Data

A standard data constructor

Newtype

A newtype constructor

Instances

Instances details
FromJSON DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

ToJSON DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

NFData DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: DataDeclType -> () #

Generic DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep DataDeclType 
Instance details

Defined in Language.PureScript.Environment

type Rep DataDeclType = D1 ('MetaData "DataDeclType" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Data" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Newtype" 'PrefixI 'False) (U1 :: Type -> Type))
Show DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

Eq DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

Ord DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

Serialise DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

type Rep DataDeclType # 
Instance details

Defined in Language.PureScript.Environment

type Rep DataDeclType = D1 ('MetaData "DataDeclType" "Language.PureScript.Environment" "purescript-0.15.15-8K0LbmS63k4ILju2RsIrDp" 'False) (C1 ('MetaCons "Data" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Newtype" 'PrefixI 'False) (U1 :: Type -> Type))

kindType :: SourceType #

Kind of ground types

tyFunction :: SourceType #

Type constructor for functions

tyString :: SourceType #

Type constructor for strings

tyChar :: SourceType #

Type constructor for strings

tyNumber :: SourceType #

Type constructor for numbers

tyInt :: SourceType #

Type constructor for integers

tyBoolean :: SourceType #

Type constructor for booleans

tyArray :: SourceType #

Type constructor for arrays

tyRecord :: SourceType #

Type constructor for records

function :: SourceType -> SourceType -> SourceType #

Smart constructor for function types

primTypes :: Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind) #

The primitive types in the external environment with their associated kinds. There are also pseudo Fail, Warn, and Partial types that correspond to the classes with the same names.

allPrimTypes :: Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind) #

This Map contains all of the prim types from all Prim modules.

primClasses :: Map (Qualified (ProperName 'ClassName)) TypeClassData #

The primitive class map. This just contains the Partial class. Partial is used as a kind of magic constraint for partial functions.

allPrimClasses :: Map (Qualified (ProperName 'ClassName)) TypeClassData #

This contains all of the type classes from all Prim modules.

lookupConstructor :: Environment -> Qualified (ProperName 'ConstructorName) -> (DataDeclType, ProperName 'TypeName, SourceType, [Ident]) #

Finds information about data constructors from the current environment.

lookupValue :: Environment -> Qualified Ident -> Maybe (SourceType, NameKind, NameVisibility) #

Finds information about values from the current environment.

nominalRolesForKind :: Type a -> [Role] #

Given the kind of a type, generate a list Nominal roles. This is used for opaque foreign types as well as type classes.

unapplyKinds :: Type a -> ([Type a], Type a) #