purescript-0.11.1: PureScript Programming Language Compiler

Safe HaskellNone




data Environment Source #

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




data TypeClassData Source #

Information about a type class




data FunctionalDependency Source #

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




initEnvironment :: Environment Source #

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

makeTypeClassData :: [(Text, Maybe Kind)] -> [(Ident, Type)] -> [Constraint] -> [FunctionalDependency] -> TypeClassData Source #

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 Source #

The visibility of a name in scope



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


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

data NameKind Source #

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



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


A public value for a module member or foreing import declaration


A name for member introduced by foreign import

primName :: Text -> Qualified (ProperName a) Source #

Construct a ProperName in the Prim module

kindType :: Kind Source #

Kind of ground types

primTy :: Text -> Type Source #

Construct a type in the Prim module

tyFunction :: Type Source #

Type constructor for functions

tyString :: Type Source #

Type constructor for strings

tyChar :: Type Source #

Type constructor for strings

tyNumber :: Type Source #

Type constructor for numbers

tyInt :: Type Source #

Type constructor for integers

tyBoolean :: Type Source #

Type constructor for booleans

tyArray :: Type Source #

Type constructor for arrays

tyRecord :: Type Source #

Type constructor for records

isObject :: Type -> Bool Source #

Check whether a type is a record

isFunction :: Type -> Bool Source #

Check whether a type is a function

function :: Type -> Type -> Type Source #

Smart constructor for function types

primKinds :: Set (Qualified (ProperName KindName)) Source #

The primitive kinds

primTypes :: Map (Qualified (ProperName TypeName)) (Kind, TypeKind) Source #

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

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

The primitive class map. This just contains the Fail, Warn, and Partial classes. Partial is used as a kind of magic constraint for partial functions. Fail is used for user-defined type errors. Warn for user-defined warnings.

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

Finds information about data constructors from the current environment.

isNewtypeConstructor :: Environment -> Qualified (ProperName ConstructorName) -> Bool Source #

Checks whether a data constructor is for a newtype.

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

Finds information about values from the current environment.