purescript-0.15.9: PureScript Programming Language Compiler
Safe HaskellSafe-Inferred
LanguageHaskell2010

Language.PureScript

Description

The main compiler module

Synopsis

Documentation

data Text #

A space efficient, packed, unboxed Unicode text type.

Instances

Instances details
Structured Text 
Instance details

Defined in Distribution.Utils.Structured

FromJSON Text 
Instance details

Defined in Data.Aeson.Types.FromJSON

FromJSONKey Text 
Instance details

Defined in Data.Aeson.Types.FromJSON

ToJSON Text 
Instance details

Defined in Data.Aeson.Types.ToJSON

ToJSONKey Text 
Instance details

Defined in Data.Aeson.Types.ToJSON

Chunk Text 
Instance details

Defined in Data.Attoparsec.Internal.Types

Associated Types

type ChunkElem Text #

ToMarkup Text 
Instance details

Defined in Text.Blaze

ToValue Text 
Instance details

Defined in Text.Blaze

ToLogStr Text 
Instance details

Defined in System.Log.FastLogger.LogStr

Methods

toLogStr :: Text -> LogStr #

Hashable Text 
Instance details

Defined in Data.Hashable.Class

Methods

hashWithSalt :: Int -> Text -> Int #

hash :: Text -> Int #

Ixed Text 
Instance details

Defined in Control.Lens.At

Print Text 
Instance details

Defined in Protolude.Show

Methods

hPutStr :: MonadIO m => Handle -> Text -> m () #

putStr :: MonadIO m => Text -> m () #

hPutStrLn :: MonadIO m => Handle -> Text -> m () #

putStrLn :: MonadIO m => Text -> m () #

putErrLn :: MonadIO m => Text -> m () #

Extract Text

Since: regex-base-0.94.0.0

Instance details

Defined in Text.Regex.Base.RegexLike

Methods

before :: Int -> Text -> Text #

after :: Int -> Text -> Text #

empty :: Text #

extract :: (Int, Int) -> Text -> Text #

Serialise Text

Since: serialise-0.2.0.0

Instance details

Defined in Codec.Serialise.Class

StringConv ByteString Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> ByteString -> Text #

StringConv ByteString Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> ByteString -> Text #

StringConv Text ByteString 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text -> ByteString #

StringConv Text ByteString 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text -> ByteString #

StringConv Text Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text -> Text #

StringConv Text Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text0 -> Text #

StringConv Text String 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text -> String #

StringConv Text Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> Text -> Text0 #

StringConv String Text 
Instance details

Defined in Protolude.Conv

Methods

strConv :: Leniency -> String -> Text #

ConvertText Text Text 
Instance details

Defined in Protolude.ConvertText

Methods

toS :: Text -> Text #

ConvertText Text Text 
Instance details

Defined in Protolude.ConvertText

Methods

toS :: Text0 -> Text #

ConvertText Text String 
Instance details

Defined in Protolude.ConvertText

Methods

toS :: Text -> String #

ConvertText Text Text 
Instance details

Defined in Protolude.ConvertText

Methods

toS :: Text -> Text0 #

ConvertText String Text 
Instance details

Defined in Protolude.ConvertText

Methods

toS :: String -> Text #

Monad m => Stream Text m Char 
Instance details

Defined in Text.Parsec.Prim

Methods

uncons :: Text -> m (Maybe (Char, Text)) #

Cons Text Text Char Char 
Instance details

Defined in Control.Lens.Cons

Methods

_Cons :: Prism Text Text (Char, Text) (Char, Text) #

Snoc Text Text Char Char 
Instance details

Defined in Control.Lens.Cons

Methods

_Snoc :: Prism Text Text (Text, Char) (Text, Char) #

type ChunkElem Text 
Instance details

Defined in Data.Attoparsec.Internal.Types

type State Text 
Instance details

Defined in Data.Attoparsec.Internal.Types

type State Text = Buffer
type Item Text 
Instance details

Defined in Data.Text

type Item Text = Char
type Index Text 
Instance details

Defined in Control.Lens.At

type Index Text = Int
type IxValue Text 
Instance details

Defined in Control.Lens.At

type HasCallStack = ?callStack :: CallStack #

Request a CallStack.

NOTE: The implicit parameter ?callStack :: CallStack is an implementation detail and should not be considered part of the CallStack API, we may decide to change the implementation in the future.

Since: base-4.9.0.0

newtype SupplyT m a Source #

Constructors

SupplyT 

Fields

Instances

Instances details
MonadTrans SupplyT Source # 
Instance details

Defined in Control.Monad.Supply

Methods

lift :: Monad m => m a -> SupplyT m a #

MonadError e m => MonadError e (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

throwError :: e -> SupplyT m a #

catchError :: SupplyT m a -> (e -> SupplyT m a) -> SupplyT m a #

MonadReader r m => MonadReader r (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

ask :: SupplyT m r #

local :: (r -> r) -> SupplyT m a -> SupplyT m a #

reader :: (r -> a) -> SupplyT m a #

MonadWriter w m => MonadWriter w (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

writer :: (a, w) -> SupplyT m a #

tell :: w -> SupplyT m () #

listen :: SupplyT m a -> SupplyT m (a, w) #

pass :: SupplyT m (a, w -> w) -> SupplyT m a #

MonadPlus m => Alternative (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

empty :: SupplyT m a #

(<|>) :: SupplyT m a -> SupplyT m a -> SupplyT m a #

some :: SupplyT m a -> SupplyT m [a] #

many :: SupplyT m a -> SupplyT m [a] #

Monad m => Applicative (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

pure :: a -> SupplyT m a #

(<*>) :: SupplyT m (a -> b) -> SupplyT m a -> SupplyT m b #

liftA2 :: (a -> b -> c) -> SupplyT m a -> SupplyT m b -> SupplyT m c #

(*>) :: SupplyT m a -> SupplyT m b -> SupplyT m b #

(<*) :: SupplyT m a -> SupplyT m b -> SupplyT m a #

Functor m => Functor (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

fmap :: (a -> b) -> SupplyT m a -> SupplyT m b #

(<$) :: a -> SupplyT m b -> SupplyT m a #

Monad m => Monad (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

(>>=) :: SupplyT m a -> (a -> SupplyT m b) -> SupplyT m b #

(>>) :: SupplyT m a -> SupplyT m b -> SupplyT m b #

return :: a -> SupplyT m a #

MonadPlus m => MonadPlus (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply

Methods

mzero :: SupplyT m a #

mplus :: SupplyT m a -> SupplyT m a -> SupplyT m a #

Monad m => MonadSupply (SupplyT m) Source # 
Instance details

Defined in Control.Monad.Supply.Class

evalSupplyT :: Functor m => Integer -> SupplyT m a -> m a Source #

data Comment Source #

Instances

Instances details
FromJSON Comment Source # 
Instance details

Defined in Language.PureScript.Comments

ToJSON Comment Source # 
Instance details

Defined in Language.PureScript.Comments

Generic Comment Source # 
Instance details

Defined in Language.PureScript.Comments

Associated Types

type Rep Comment :: Type -> Type #

Methods

from :: Comment -> Rep Comment x #

to :: Rep Comment x -> Comment #

Show Comment Source # 
Instance details

Defined in Language.PureScript.Comments

NFData Comment Source # 
Instance details

Defined in Language.PureScript.Comments

Methods

rnf :: Comment -> () #

Eq Comment Source # 
Instance details

Defined in Language.PureScript.Comments

Methods

(==) :: Comment -> Comment -> Bool #

(/=) :: Comment -> Comment -> Bool #

Ord Comment Source # 
Instance details

Defined in Language.PureScript.Comments

Serialise Comment Source # 
Instance details

Defined in Language.PureScript.Comments

FromJSON (Constraint SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

FromJSON (Type SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep Comment Source # 
Instance details

Defined in Language.PureScript.Comments

type Rep Comment = D1 ('MetaData "Comment" "Language.PureScript.Comments" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "LineComment" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: C1 ('MetaCons "BlockComment" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data SourceSpan Source #

Constructors

SourceSpan 

Fields

Instances

Instances details
FromJSON SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

ToJSON SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Generic SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Associated Types

type Rep SourceSpan :: Type -> Type #

Show SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

NFData SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Methods

rnf :: SourceSpan -> () #

Eq SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Ord SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Serialise SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

FromJSON (Constraint SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

FromJSON (Type SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep SourceSpan Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

type Rep SourceSpan = D1 ('MetaData "SourceSpan" "Language.PureScript.AST.SourcePos" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "SourceSpan" 'PrefixI 'True) (S1 ('MetaSel ('Just "spanName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String) :*: (S1 ('MetaSel ('Just "spanStart") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourcePos) :*: S1 ('MetaSel ('Just "spanEnd") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourcePos))))

data SourcePos Source #

Source position information

Constructors

SourcePos 

Fields

Instances

Instances details
FromJSON SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

ToJSON SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Generic SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Associated Types

type Rep SourcePos :: Type -> Type #

Show SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

NFData SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Methods

rnf :: SourcePos -> () #

Eq SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Ord SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

Serialise SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

type Rep SourcePos Source # 
Instance details

Defined in Language.PureScript.AST.SourcePos

type Rep SourcePos = D1 ('MetaData "SourcePos" "Language.PureScript.AST.SourcePos" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "SourcePos" 'PrefixI 'True) (S1 ('MetaSel ('Just "sourcePosLine") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "sourcePosColumn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

type SourceAnn = (SourceSpan, [Comment]) Source #

Source annotation - position information and comments.

internalError :: HasCallStack => String -> a Source #

Exit with an error message and a crash report link.

data Fixity Source #

Fixity data for infix operators

Instances

Instances details
ToJSON Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Generic Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Associated Types

type Rep Fixity :: Type -> Type #

Methods

from :: Fixity -> Rep Fixity x #

to :: Rep Fixity x -> Fixity #

Show Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

NFData Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Methods

rnf :: Fixity -> () #

Eq Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Methods

(==) :: Fixity -> Fixity -> Bool #

(/=) :: Fixity -> Fixity -> Bool #

Ord Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Serialise Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

type Rep Fixity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

type Rep Fixity = D1 ('MetaData "Fixity" "Language.PureScript.AST.Operators" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Fixity" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Associativity) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Precedence)))

data Associativity Source #

Associativity for infix operators

Constructors

Infixl 
Infixr 
Infix 

Instances

Instances details
FromJSON Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

ToJSON Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Generic Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Associated Types

type Rep Associativity :: Type -> Type #

Show Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

NFData Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Methods

rnf :: Associativity -> () #

Eq Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Ord Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

Serialise Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

type Rep Associativity Source # 
Instance details

Defined in Language.PureScript.AST.Operators

type Rep Associativity = D1 ('MetaData "Associativity" "Language.PureScript.AST.Operators" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Infixl" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Infixr" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Infix" 'PrefixI 'False) (U1 :: Type -> Type)))

type Precedence = Integer Source #

A precedence level for an infix operator

data Qualified a Source #

A qualified name, i.e. a name with an optional module name

Constructors

Qualified QualifiedBy a 

Instances

Instances details
Foldable Qualified Source # 
Instance details

Defined in Language.PureScript.Names

Methods

fold :: Monoid m => Qualified m -> m #

foldMap :: Monoid m => (a -> m) -> Qualified a -> m #

foldMap' :: Monoid m => (a -> m) -> Qualified a -> m #

foldr :: (a -> b -> b) -> b -> Qualified a -> b #

foldr' :: (a -> b -> b) -> b -> Qualified a -> b #

foldl :: (b -> a -> b) -> b -> Qualified a -> b #

foldl' :: (b -> a -> b) -> b -> Qualified a -> b #

foldr1 :: (a -> a -> a) -> Qualified a -> a #

foldl1 :: (a -> a -> a) -> Qualified a -> a #

toList :: Qualified a -> [a] #

null :: Qualified a -> Bool #

length :: Qualified a -> Int #

elem :: Eq a => a -> Qualified a -> Bool #

maximum :: Ord a => Qualified a -> a #

minimum :: Ord a => Qualified a -> a #

sum :: Num a => Qualified a -> a #

product :: Num a => Qualified a -> a #

Traversable Qualified Source # 
Instance details

Defined in Language.PureScript.Names

Methods

traverse :: Applicative f => (a -> f b) -> Qualified a -> f (Qualified b) #

sequenceA :: Applicative f => Qualified (f a) -> f (Qualified a) #

mapM :: Monad m => (a -> m b) -> Qualified a -> m (Qualified b) #

sequence :: Monad m => Qualified (m a) -> m (Qualified a) #

Functor Qualified Source # 
Instance details

Defined in Language.PureScript.Names

Methods

fmap :: (a -> b) -> Qualified a -> Qualified b #

(<$) :: a -> Qualified b -> Qualified a #

FromJSON a => FromJSON (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON a => ToJSON (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

Generic (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep (Qualified a) :: Type -> Type #

Methods

from :: Qualified a -> Rep (Qualified a) x #

to :: Rep (Qualified a) x -> Qualified a #

Show a => Show (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

NFData a => NFData (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: Qualified a -> () #

Eq a => Eq (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

(==) :: Qualified a -> Qualified a -> Bool #

(/=) :: Qualified a -> Qualified a -> Bool #

Ord a => Ord (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

Serialise a => Serialise (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (Qualified a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (Qualified a) = D1 ('MetaData "Qualified" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Qualified" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 QualifiedBy) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

data QualifiedBy Source #

Instances

Instances details
Generic QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep QualifiedBy :: Type -> Type #

Show QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

NFData QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: QualifiedBy -> () #

Eq QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

Ord QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

Serialise QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

type Rep QualifiedBy Source # 
Instance details

Defined in Language.PureScript.Names

type Rep QualifiedBy = D1 ('MetaData "QualifiedBy" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "BySourcePos" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourcePos)) :+: C1 ('MetaCons "ByModuleName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)))

newtype ModuleName Source #

Module names

Constructors

ModuleName Text 

Instances

Instances details
FromJSON ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

FromJSONKey ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

ToJSONKey ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

Generic ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep ModuleName :: Type -> Type #

Show ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

NFData ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: ModuleName -> () #

Eq ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

Ord ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

Serialise ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

type Rep ModuleName Source # 
Instance details

Defined in Language.PureScript.Names

type Rep ModuleName = D1 ('MetaData "ModuleName" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'True) (C1 ('MetaCons "ModuleName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data ProperNameType Source #

The closed set of proper name types.

newtype ProperName (a :: ProperNameType) Source #

Proper names, i.e. capitalized names for e.g. module names, type//data constructors.

Constructors

ProperName 

Fields

Instances

Instances details
FromJSON (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

Generic (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep (ProperName a) :: Type -> Type #

Methods

from :: ProperName a -> Rep (ProperName a) x #

to :: Rep (ProperName a) x -> ProperName a #

Show (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

NFData (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: ProperName a -> () #

Eq (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

(==) :: ProperName a -> ProperName a -> Bool #

(/=) :: ProperName a -> ProperName a -> Bool #

Ord (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

Serialise (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (ProperName a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (ProperName a) = D1 ('MetaData "ProperName" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'True) (C1 ('MetaCons "ProperName" 'PrefixI 'True) (S1 ('MetaSel ('Just "runProperName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data OpNameType Source #

The closed set of operator alias types.

newtype OpName (a :: OpNameType) Source #

Operator alias names.

Constructors

OpName 

Fields

Instances

Instances details
FromJSON (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Generic (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep (OpName a) :: Type -> Type #

Methods

from :: OpName a -> Rep (OpName a) x #

to :: Rep (OpName a) x -> OpName a #

Show (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

showsPrec :: Int -> OpName a -> ShowS #

show :: OpName a -> String #

showList :: [OpName a] -> ShowS #

NFData (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: OpName a -> () #

Eq (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

(==) :: OpName a -> OpName a -> Bool #

(/=) :: OpName a -> OpName a -> Bool #

Ord (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

Methods

compare :: OpName a -> OpName a -> Ordering #

(<) :: OpName a -> OpName a -> Bool #

(<=) :: OpName a -> OpName a -> Bool #

(>) :: OpName a -> OpName a -> Bool #

(>=) :: OpName a -> OpName a -> Bool #

max :: OpName a -> OpName a -> OpName a #

min :: OpName a -> OpName a -> OpName a #

Serialise (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (OpName a) Source # 
Instance details

Defined in Language.PureScript.Names

type Rep (OpName a) = D1 ('MetaData "OpName" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'True) (C1 ('MetaCons "OpName" 'PrefixI 'True) (S1 ('MetaSel ('Just "runOpName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data Ident Source #

Names for value identifiers

Constructors

Ident Text

An alphanumeric identifier

GenIdent (Maybe Text) Integer

A generated name for an identifier

UnusedIdent

A generated name used only for type-checking

InternalIdent !InternalIdentData

A generated name used only for internal transformations

Instances

Instances details
FromJSON Ident Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON Ident Source # 
Instance details

Defined in Language.PureScript.Names

Generic Ident Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep Ident :: Type -> Type #

Methods

from :: Ident -> Rep Ident x #

to :: Rep Ident x -> Ident #

Show Ident Source # 
Instance details

Defined in Language.PureScript.Names

Methods

showsPrec :: Int -> Ident -> ShowS #

show :: Ident -> String #

showList :: [Ident] -> ShowS #

NFData Ident Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: Ident -> () #

Eq Ident Source # 
Instance details

Defined in Language.PureScript.Names

Methods

(==) :: Ident -> Ident -> Bool #

(/=) :: Ident -> Ident -> Bool #

Ord Ident Source # 
Instance details

Defined in Language.PureScript.Names

Methods

compare :: Ident -> Ident -> Ordering #

(<) :: Ident -> Ident -> Bool #

(<=) :: Ident -> Ident -> Bool #

(>) :: Ident -> Ident -> Bool #

(>=) :: Ident -> Ident -> Bool #

max :: Ident -> Ident -> Ident #

min :: Ident -> Ident -> Ident #

Serialise Ident Source # 
Instance details

Defined in Language.PureScript.Names

type Rep Ident Source # 
Instance details

Defined in Language.PureScript.Names

data InternalIdentData Source #

This type is meant to be extended with any new uses for idents that come along. Adding constructors to this type is cheaper than adding them to Ident because functions that match on Ident can ignore all InternalIdents with a single pattern, and thus don't have to change if a new InternalIdentData constructor is created.

Constructors

RuntimeLazyFactory 
Lazy !Text 

Instances

Instances details
FromJSON InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

ToJSON InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

Generic InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep InternalIdentData :: Type -> Type #

Show InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

NFData InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: InternalIdentData -> () #

Eq InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

Ord InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

Serialise InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

type Rep InternalIdentData Source # 
Instance details

Defined in Language.PureScript.Names

type Rep InternalIdentData = D1 ('MetaData "InternalIdentData" "Language.PureScript.Names" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "RuntimeLazyFactory" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Lazy" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)))

data Name Source #

A sum of the possible name types, useful for error and lint messages.

Instances

Instances details
Generic Name Source # 
Instance details

Defined in Language.PureScript.Names

Associated Types

type Rep Name :: Type -> Type #

Methods

from :: Name -> Rep Name x #

to :: Rep Name x -> Name #

Show Name Source # 
Instance details

Defined in Language.PureScript.Names

Methods

showsPrec :: Int -> Name -> ShowS #

show :: Name -> String #

showList :: [Name] -> ShowS #

NFData Name Source # 
Instance details

Defined in Language.PureScript.Names

Methods

rnf :: Name -> () #

Eq Name Source # 
Instance details

Defined in Language.PureScript.Names

Methods

(==) :: Name -> Name -> Bool #

(/=) :: Name -> Name -> Bool #

Ord Name Source # 
Instance details

Defined in Language.PureScript.Names

Methods

compare :: Name -> Name -> Ordering #

(<) :: Name -> Name -> Bool #

(<=) :: Name -> Name -> Bool #

(>) :: Name -> Name -> Bool #

(>=) :: Name -> Name -> Bool #

max :: Name -> Name -> Name #

min :: Name -> Name -> Name #

Serialise Name Source # 
Instance details

Defined in Language.PureScript.Names

type Rep Name Source # 
Instance details

Defined in Language.PureScript.Names

coerceProperName :: ProperName a -> ProperName b Source #

Coerces a ProperName from one ProperNameType to another. This should be used with care, and is primarily used to convert ClassNames into TypeNames after classes have been desugared.

qualify :: ModuleName -> Qualified a -> (ModuleName, a) Source #

Provide a default module name, if a name is unqualified

mkQualified :: a -> ModuleName -> Qualified a Source #

Makes a qualified value from a name and module name.

disqualify :: Qualified a -> a Source #

Remove the module name from a qualified name

disqualifyFor :: Maybe ModuleName -> Qualified a -> Maybe a Source #

Remove the qualification from a value when it is qualified with a particular module name.

isQualified :: Qualified a -> Bool Source #

Checks whether a qualified value is actually qualified with a module reference

isUnqualified :: Qualified a -> Bool Source #

Checks whether a qualified value is not actually qualified with a module reference

isQualifiedWith :: ModuleName -> Qualified a -> Bool Source #

Checks whether a qualified value is qualified with a particular module

data Options Source #

The data type of compiler options

Constructors

Options 

Fields

Instances

Instances details
Show Options Source # 
Instance details

Defined in Language.PureScript.Options

MonadReader Options Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

ask :: Make Options #

local :: (Options -> Options) -> Make a -> Make a #

reader :: (Options -> a) -> Make a #

prettyPrintString :: PSString -> Text Source #

Pretty print a PSString, using PureScript escape sequences.

data Literal a Source #

Data type for literal values. Parameterised so it can be used for Exprs and Binders.

Constructors

NumericLiteral (Either Integer Double)

A numeric literal

StringLiteral PSString

A string literal

CharLiteral Char

A character literal

BooleanLiteral Bool

A boolean literal

ArrayLiteral [a]

An array literal

ObjectLiteral [(PSString, a)]

An object literal

Instances

Instances details
Functor Literal Source # 
Instance details

Defined in Language.PureScript.AST.Literals

Methods

fmap :: (a -> b) -> Literal a -> Literal b #

(<$) :: a -> Literal b -> Literal a #

Show a => Show (Literal a) Source # 
Instance details

Defined in Language.PureScript.AST.Literals

Methods

showsPrec :: Int -> Literal a -> ShowS #

show :: Literal a -> String #

showList :: [Literal a] -> ShowS #

Eq a => Eq (Literal a) Source # 
Instance details

Defined in Language.PureScript.AST.Literals

Methods

(==) :: Literal a -> Literal a -> Bool #

(/=) :: Literal a -> Literal a -> Bool #

Ord a => Ord (Literal a) Source # 
Instance details

Defined in Language.PureScript.AST.Literals

Methods

compare :: Literal a -> Literal a -> Ordering #

(<) :: Literal a -> Literal a -> Bool #

(<=) :: Literal a -> Literal a -> Bool #

(>) :: Literal a -> Literal a -> Bool #

(>=) :: Literal a -> Literal a -> Bool #

max :: Literal a -> Literal a -> Literal a #

min :: Literal a -> Literal a -> Literal a #

data Role Source #

The role of a type constructor's parameter.

Constructors

Nominal

This parameter's identity affects the representation of the type it is parameterising.

Representational

This parameter's representation affects the representation of the type it is parameterising.

Phantom

This parameter has no effect on the representation of the type it is parameterising.

Instances

Instances details
FromJSON Role Source # 
Instance details

Defined in Language.PureScript.Roles

ToJSON Role Source # 
Instance details

Defined in Language.PureScript.Roles

Generic Role Source # 
Instance details

Defined in Language.PureScript.Roles

Associated Types

type Rep Role :: Type -> Type #

Methods

from :: Role -> Rep Role x #

to :: Rep Role x -> Role #

Show Role Source # 
Instance details

Defined in Language.PureScript.Roles

Methods

showsPrec :: Int -> Role -> ShowS #

show :: Role -> String #

showList :: [Role] -> ShowS #

NFData Role Source # 
Instance details

Defined in Language.PureScript.Roles

Methods

rnf :: Role -> () #

Eq Role Source # 
Instance details

Defined in Language.PureScript.Roles

Methods

(==) :: Role -> Role -> Bool #

(/=) :: Role -> Role -> Bool #

Ord Role Source # 
Instance details

Defined in Language.PureScript.Roles

Methods

compare :: Role -> Role -> Ordering #

(<) :: Role -> Role -> Bool #

(<=) :: Role -> Role -> Bool #

(>) :: Role -> Role -> Bool #

(>=) :: Role -> Role -> Bool #

max :: Role -> Role -> Role #

min :: Role -> Role -> Role #

Serialise Role Source # 
Instance details

Defined in Language.PureScript.Roles

type Rep Role Source # 
Instance details

Defined in Language.PureScript.Roles

type Rep Role = D1 ('MetaData "Role" "Language.PureScript.Roles" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Nominal" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Representational" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Phantom" 'PrefixI 'False) (U1 :: Type -> Type)))

data RowListItem a Source #

Constructors

RowListItem 

Instances

Instances details
Foldable RowListItem Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fold :: Monoid m => RowListItem m -> m #

foldMap :: Monoid m => (a -> m) -> RowListItem a -> m #

foldMap' :: Monoid m => (a -> m) -> RowListItem a -> m #

foldr :: (a -> b -> b) -> b -> RowListItem a -> b #

foldr' :: (a -> b -> b) -> b -> RowListItem a -> b #

foldl :: (b -> a -> b) -> b -> RowListItem a -> b #

foldl' :: (b -> a -> b) -> b -> RowListItem a -> b #

foldr1 :: (a -> a -> a) -> RowListItem a -> a #

foldl1 :: (a -> a -> a) -> RowListItem a -> a #

toList :: RowListItem a -> [a] #

null :: RowListItem a -> Bool #

length :: RowListItem a -> Int #

elem :: Eq a => a -> RowListItem a -> Bool #

maximum :: Ord a => RowListItem a -> a #

minimum :: Ord a => RowListItem a -> a #

sum :: Num a => RowListItem a -> a #

product :: Num a => RowListItem a -> a #

Traversable RowListItem Source # 
Instance details

Defined in Language.PureScript.Types

Methods

traverse :: Applicative f => (a -> f b) -> RowListItem a -> f (RowListItem b) #

sequenceA :: Applicative f => RowListItem (f a) -> f (RowListItem a) #

mapM :: Monad m => (a -> m b) -> RowListItem a -> m (RowListItem b) #

sequence :: Monad m => RowListItem (m a) -> m (RowListItem a) #

Functor RowListItem Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fmap :: (a -> b) -> RowListItem a -> RowListItem b #

(<$) :: a -> RowListItem b -> RowListItem a #

Generic (RowListItem a) Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep (RowListItem a) :: Type -> Type #

Methods

from :: RowListItem a -> Rep (RowListItem a) x #

to :: Rep (RowListItem a) x -> RowListItem a #

Show a => Show (RowListItem a) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep (RowListItem a) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep (RowListItem a) = D1 ('MetaData "RowListItem" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "RowListItem" 'PrefixI 'True) (S1 ('MetaSel ('Just "rowListAnn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Just "rowListLabel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Label) :*: S1 ('MetaSel ('Just "rowListType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)))))

data Constraint a Source #

A typeclass constraint

Constructors

Constraint 

Fields

Instances

Instances details
Foldable Constraint Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fold :: Monoid m => Constraint m -> m #

foldMap :: Monoid m => (a -> m) -> Constraint a -> m #

foldMap' :: Monoid m => (a -> m) -> Constraint a -> m #

foldr :: (a -> b -> b) -> b -> Constraint a -> b #

foldr' :: (a -> b -> b) -> b -> Constraint a -> b #

foldl :: (b -> a -> b) -> b -> Constraint a -> b #

foldl' :: (b -> a -> b) -> b -> Constraint a -> b #

foldr1 :: (a -> a -> a) -> Constraint a -> a #

foldl1 :: (a -> a -> a) -> Constraint a -> a #

toList :: Constraint a -> [a] #

null :: Constraint a -> Bool #

length :: Constraint a -> Int #

elem :: Eq a => a -> Constraint a -> Bool #

maximum :: Ord a => Constraint a -> a #

minimum :: Ord a => Constraint a -> a #

sum :: Num a => Constraint a -> a #

product :: Num a => Constraint a -> a #

Traversable Constraint Source # 
Instance details

Defined in Language.PureScript.Types

Methods

traverse :: Applicative f => (a -> f b) -> Constraint a -> f (Constraint b) #

sequenceA :: Applicative f => Constraint (f a) -> f (Constraint a) #

mapM :: Monad m => (a -> m b) -> Constraint a -> m (Constraint b) #

sequence :: Monad m => Constraint (m a) -> m (Constraint a) #

Functor Constraint Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fmap :: (a -> b) -> Constraint a -> Constraint b #

(<$) :: a -> Constraint b -> Constraint a #

FromJSON (Constraint SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

FromJSON (Constraint ()) Source # 
Instance details

Defined in Language.PureScript.Types

FromJSON a => FromJSON (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

ToJSON a => ToJSON (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

Generic (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep (Constraint a) :: Type -> Type #

Methods

from :: Constraint a -> Rep (Constraint a) x #

to :: Rep (Constraint a) x -> Constraint a #

Show a => Show (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

NFData a => NFData (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

rnf :: Constraint a -> () #

Eq (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

(==) :: Constraint a -> Constraint a -> Bool #

(/=) :: Constraint a -> Constraint a -> Bool #

Ord (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

Serialise a => Serialise (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep (Constraint a) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep (Constraint a) = D1 ('MetaData "Constraint" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Constraint" 'PrefixI 'True) ((S1 ('MetaSel ('Just "constraintAnn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "constraintClass") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (ProperName 'ClassName)))) :*: (S1 ('MetaSel ('Just "constraintKindArgs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Type a]) :*: (S1 ('MetaSel ('Just "constraintArgs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Type a]) :*: S1 ('MetaSel ('Just "constraintData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ConstraintData))))))

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.

Instances

Instances details
FromJSON ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

ToJSON ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

Generic ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep ConstraintData :: Type -> Type #

Show ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

NFData ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

Methods

rnf :: ConstraintData -> () #

Eq ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

Ord ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

Serialise ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

type Rep ConstraintData Source # 
Instance details

Defined in Language.PureScript.Types

type Rep ConstraintData = D1 ('MetaData "ConstraintData" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "PartialConstraintData" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [[Text]]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))

data Type a Source #

The type of types

Constructors

TUnknown a Int

A unification variable of type Type

TypeVar a Text

A named type variable

TypeLevelString a PSString

A type-level string

TypeLevelInt a Integer

A type-level natural

TypeWildcard a WildcardData

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

TypeConstructor a (Qualified (ProperName 'TypeName))

A type constructor

TypeOp a (Qualified (OpName 'TypeOpName))

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

TypeApp a (Type a) (Type a)

A type application

KindApp a (Type a) (Type a)

Explicit kind application

ForAll a Text (Maybe (Type a)) (Type a) (Maybe SkolemScope)

Forall quantifier

ConstrainedType a (Constraint a) (Type a)

A type with a set of type class constraints

Skolem a Text (Maybe (Type a)) Int SkolemScope

A skolem constant

REmpty a

An empty row

RCons a Label (Type a) (Type a)

A non-empty row

KindedType a (Type a) (Type a)

A type with a kind annotation

BinaryNoParensType a (Type a) (Type a) (Type a)

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

ParensInType a (Type a)

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

Instances details
Foldable Type Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fold :: Monoid m => Type m -> m #

foldMap :: Monoid m => (a -> m) -> Type a -> m #

foldMap' :: Monoid m => (a -> m) -> Type a -> m #

foldr :: (a -> b -> b) -> b -> Type a -> b #

foldr' :: (a -> b -> b) -> b -> Type a -> b #

foldl :: (b -> a -> b) -> b -> Type a -> b #

foldl' :: (b -> a -> b) -> b -> Type a -> b #

foldr1 :: (a -> a -> a) -> Type a -> a #

foldl1 :: (a -> a -> a) -> Type a -> a #

toList :: Type a -> [a] #

null :: Type a -> Bool #

length :: Type a -> Int #

elem :: Eq a => a -> Type a -> Bool #

maximum :: Ord a => Type a -> a #

minimum :: Ord a => Type a -> a #

sum :: Num a => Type a -> a #

product :: Num a => Type a -> a #

Traversable Type Source # 
Instance details

Defined in Language.PureScript.Types

Methods

traverse :: Applicative f => (a -> f b) -> Type a -> f (Type b) #

sequenceA :: Applicative f => Type (f a) -> f (Type a) #

mapM :: Monad m => (a -> m b) -> Type a -> m (Type b) #

sequence :: Monad m => Type (m a) -> m (Type a) #

Functor Type Source # 
Instance details

Defined in Language.PureScript.Types

Methods

fmap :: (a -> b) -> Type a -> Type b #

(<$) :: a -> Type b -> Type a #

FromJSON (Type SourceAnn) Source # 
Instance details

Defined in Language.PureScript.Types

FromJSON (Type ()) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

parseJSON :: Value -> Parser (Type ()) #

parseJSONList :: Value -> Parser [Type ()] #

FromJSON a => FromJSON (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

ToJSON a => ToJSON (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Generic (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep (Type a) :: Type -> Type #

Methods

from :: Type a -> Rep (Type a) x #

to :: Rep (Type a) x -> Type a #

Show a => Show (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

showsPrec :: Int -> Type a -> ShowS #

show :: Type a -> String #

showList :: [Type a] -> ShowS #

NFData a => NFData (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

rnf :: Type a -> () #

Eq (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

(==) :: Type a -> Type a -> Bool #

(/=) :: Type a -> Type a -> Bool #

Ord (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

compare :: Type a -> Type a -> Ordering #

(<) :: Type a -> Type a -> Bool #

(<=) :: Type a -> Type a -> Bool #

(>) :: Type a -> Type a -> Bool #

(>=) :: Type a -> Type a -> Bool #

max :: Type a -> Type a -> Type a #

min :: Type a -> Type a -> Type a #

Serialise a => Serialise (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

Methods

encode :: Type a -> Encoding #

decode :: Decoder s (Type a) #

encodeList :: [Type a] -> Encoding #

decodeList :: Decoder s [Type a] #

type Rep (Type a) Source # 
Instance details

Defined in Language.PureScript.Types

type Rep (Type a) = D1 ('MetaData "Type" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) ((((C1 ('MetaCons "TUnknown" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)) :+: C1 ('MetaCons "TypeVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text))) :+: (C1 ('MetaCons "TypeLevelString" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PSString)) :+: C1 ('MetaCons "TypeLevelInt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)))) :+: ((C1 ('MetaCons "TypeWildcard" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 WildcardData)) :+: C1 ('MetaCons "TypeConstructor" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (ProperName 'TypeName))))) :+: (C1 ('MetaCons "TypeOp" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (OpName 'TypeOpName)))) :+: C1 ('MetaCons "TypeApp" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a))))))) :+: (((C1 ('MetaCons "KindApp" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)))) :+: C1 ('MetaCons "ForAll" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Type a))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe SkolemScope)))))) :+: (C1 ('MetaCons "ConstrainedType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Constraint a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)))) :+: C1 ('MetaCons "Skolem" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (Type a))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SkolemScope)))))) :+: ((C1 ('MetaCons "REmpty" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)) :+: C1 ('MetaCons "RCons" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Label)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a))))) :+: (C1 ('MetaCons "KindedType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)))) :+: (C1 ('MetaCons "BinaryNoParensType" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a))) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a)))) :+: C1 ('MetaCons "ParensInType" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Type a))))))))

data WildcardData Source #

Describes how a TypeWildcard should be presented to the user during type checking: holes (?foo) are always emitted as errors, whereas unnamed wildcards (_) default to warnings, but are ignored entirely if they are contained by a binding with a complete (wildcard-free) type signature.

Instances

Instances details
FromJSON WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

ToJSON WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

Generic WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep WildcardData :: Type -> Type #

Show WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

NFData WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

Methods

rnf :: WildcardData -> () #

Eq WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

Ord WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

Serialise WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

type Rep WildcardData Source # 
Instance details

Defined in Language.PureScript.Types

type Rep WildcardData = D1 ('MetaData "WildcardData" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "HoleWildcard" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :+: (C1 ('MetaCons "UnnamedWildcard" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "IgnoredWildcard" 'PrefixI 'False) (U1 :: Type -> Type)))

newtype SkolemScope Source #

An identifier for the scope of a skolem variable

Constructors

SkolemScope 

Fields

Instances

Instances details
FromJSON SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

ToJSON SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

Generic SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

Associated Types

type Rep SkolemScope :: Type -> Type #

Show SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

NFData SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

Methods

rnf :: SkolemScope -> () #

Eq SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

Ord SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

Serialise SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

type Rep SkolemScope Source # 
Instance details

Defined in Language.PureScript.Types

type Rep SkolemScope = D1 ('MetaData "SkolemScope" "Language.PureScript.Types" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'True) (C1 ('MetaCons "SkolemScope" 'PrefixI 'True) (S1 ('MetaSel ('Just "runSkolemScope") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

pattern REmptyKinded :: forall a. a -> Maybe (Type a) -> Type a Source #

toREmptyKinded :: forall a. Type a -> Maybe (a, Maybe (Type a)) Source #

isREmpty :: forall a. Type a -> Bool Source #

overConstraintArgs :: Functor f => ([Type a] -> f [Type a]) -> Constraint a -> f (Constraint a) Source #

typeToJSON :: forall a. (a -> Value) -> Type a -> Value Source #

constraintFromJSON :: forall a. Parser a -> (Value -> Parser a) -> Value -> Parser (Constraint a) Source #

typeFromJSON :: forall a. Parser a -> (Value -> Parser a) -> Value -> Parser (Type a) Source #

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

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

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

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

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

Convert a list of labels and types to a row

alignRowsWith :: (Label -> Type a -> Type a -> r) -> Type a -> Type a -> ([r], (([RowListItem a], Type a), ([RowListItem a], Type a))) Source #

Align two rows of types, splitting them into three parts:

  • Those types which appear in both rows
  • Those which appear only on the left
  • Those which appear only on the right

Note: importantly, we preserve the order of the types with a given label.

isMonoType :: Type a -> Bool Source #

Check whether a type is a monotype

mkForAll :: [(a, (Text, Maybe (Type a)))] -> Type a -> Type a Source #

Universally quantify a type

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

Replace a type variable, taking into account variable shadowing

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

Replace named type variables with types

usedTypeVariables :: Type a -> [Text] Source #

Collect all type variables appearing in a type

freeTypeVariables :: Type a -> [Text] Source #

Collect all free type variables appearing in a type

completeBinderList :: Type a -> Maybe ([(a, (Text, Type a))], Type a) Source #

Collect a complete set of kind-annotated quantifiers at the front of a type.

quantify :: Type a -> Type a Source #

Universally quantify over all type variables appearing free in a type

moveQuantifiersToFront :: Type a -> Type a Source #

Move all universal quantifiers to the front of a type

containsForAll :: Type a -> Bool Source #

Check if a type contains forall

containsUnknowns :: Type a -> Bool Source #

Check if a type contains unknowns in a position that is relevant to constraint solving. (Kinds are not.)

unapplyTypes :: Type a -> (Type a, [Type a], [Type a]) Source #

srcInstanceType :: SourceSpan -> [(Text, SourceType)] -> Qualified (ProperName 'ClassName) -> [SourceType] -> SourceType Source #

Construct the type of an instance declaration from its parts. Used in error messages describing unnamed instances.

everywhereOnTypes :: (Type a -> Type a) -> Type a -> Type a Source #

everywhereOnTypesM :: Monad m => (Type a -> m (Type a)) -> Type a -> m (Type a) Source #

everywhereOnTypesTopDownM :: Monad m => (Type a -> m (Type a)) -> Type a -> m (Type a) Source #

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

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

setAnnForType :: a -> Type a -> Type a Source #

eqType :: Type a -> Type b -> Bool Source #

data DataDeclType Source #

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

Defined in Language.PureScript.Environment

ToJSON DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

Generic DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep DataDeclType :: Type -> Type #

Show DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

NFData DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: DataDeclType -> () #

Eq DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

Ord DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

Serialise DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep DataDeclType Source # 
Instance details

Defined in Language.PureScript.Environment

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

data TypeKind Source #

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
Generic TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep TypeKind :: Type -> Type #

Methods

from :: TypeKind -> Rep TypeKind x #

to :: Rep TypeKind x -> TypeKind #

Show TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

NFData TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: TypeKind -> () #

Eq TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

Serialise TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeKind Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeKind = D1 ('MetaData "TypeKind" "Language.PureScript.Environment" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" '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 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.

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
Generic NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep NameKind :: Type -> Type #

Methods

from :: NameKind -> Rep NameKind x #

to :: Rep NameKind x -> NameKind #

Show NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

NFData NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: NameKind -> () #

Eq NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

Serialise NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameKind Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameKind = D1 ('MetaData "NameKind" "Language.PureScript.Environment" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" '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 NameVisibility Source #

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
Generic NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep NameVisibility :: Type -> Type #

Show NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

NFData NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: NameVisibility -> () #

Eq NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

Serialise NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep NameVisibility Source # 
Instance details

Defined in Language.PureScript.Environment

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

data FunctionalDependency Source #

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

Constructors

FunctionalDependency 

Fields

Instances

Instances details
FromJSON FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

ToJSON FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

Generic FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep FunctionalDependency :: Type -> Type #

Show FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

NFData FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: FunctionalDependency -> () #

Serialise FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep FunctionalDependency Source # 
Instance details

Defined in Language.PureScript.Environment

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

data TypeClassData Source #

Information about a type class

Constructors

TypeClassData 

Fields

Instances

Instances details
Generic TypeClassData Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep TypeClassData :: Type -> Type #

Show TypeClassData Source # 
Instance details

Defined in Language.PureScript.Environment

NFData TypeClassData Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: TypeClassData -> () #

type Rep TypeClassData Source # 
Instance details

Defined in Language.PureScript.Environment

type Rep TypeClassData = D1 ('MetaData "TypeClassData" "Language.PureScript.Environment" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" '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)]) :*: 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 Environment Source #

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

Constructors

Environment 

Fields

Instances

Instances details
Generic Environment Source # 
Instance details

Defined in Language.PureScript.Environment

Associated Types

type Rep Environment :: Type -> Type #

Show Environment Source # 
Instance details

Defined in Language.PureScript.Environment

NFData Environment Source # 
Instance details

Defined in Language.PureScript.Environment

Methods

rnf :: Environment -> () #

type Rep Environment Source # 
Instance details

Defined in Language.PureScript.Environment

initEnvironment :: Environment Source #

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

makeTypeClassData :: [(Text, Maybe SourceType)] -> [(Ident, SourceType)] -> [SourceConstraint] -> [FunctionalDependency] -> Bool -> 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.

kindType :: SourceType Source #

Kind of ground types

tyFunction :: SourceType Source #

Type constructor for functions

tyString :: SourceType Source #

Type constructor for strings

tyChar :: SourceType Source #

Type constructor for strings

tyNumber :: SourceType Source #

Type constructor for numbers

tyInt :: SourceType Source #

Type constructor for integers

tyBoolean :: SourceType Source #

Type constructor for booleans

tyArray :: SourceType Source #

Type constructor for arrays

tyRecord :: SourceType Source #

Type constructor for records

function :: SourceType -> SourceType -> SourceType Source #

Smart constructor for function types

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

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

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

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

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

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

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

Finds information about data constructors from the current environment.

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

Finds information about values from the current environment.

nominalRolesForKind :: Type a -> [Role] Source #

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

data Binder Source #

Data type for binders

Constructors

NullBinder

Wildcard binder

LiteralBinder SourceSpan (Literal Binder)

A binder which matches a literal

VarBinder SourceSpan Ident

A binder which binds an identifier

ConstructorBinder SourceSpan (Qualified (ProperName 'ConstructorName)) [Binder]

A binder which matches a data constructor

OpBinder SourceSpan (Qualified (OpName 'ValueOpName))

A operator alias binder. During the rebracketing phase of desugaring, this data constructor will be removed.

BinaryNoParensBinder Binder Binder Binder

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

ParensInBinder Binder

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.

NamedBinder SourceSpan Ident Binder

A binder which binds its input to an identifier

PositionedBinder SourceSpan [Comment] Binder

A binder with source position information

TypedBinder SourceType Binder

A binder with a type annotation

Instances

Instances details
Show Binder Source # 
Instance details

Defined in Language.PureScript.AST.Binders

Eq Binder Source # 
Instance details

Defined in Language.PureScript.AST.Binders

Methods

(==) :: Binder -> Binder -> Bool #

(/=) :: Binder -> Binder -> Bool #

Ord Binder Source # 
Instance details

Defined in Language.PureScript.AST.Binders

binderNames :: Binder -> [Ident] Source #

Collect all names introduced in binders in an expression

newtype AssocList k t Source #

Constructors

AssocList 

Fields

Instances

Instances details
Foldable (AssocList k) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fold :: Monoid m => AssocList k m -> m #

foldMap :: Monoid m => (a -> m) -> AssocList k a -> m #

foldMap' :: Monoid m => (a -> m) -> AssocList k a -> m #

foldr :: (a -> b -> b) -> b -> AssocList k a -> b #

foldr' :: (a -> b -> b) -> b -> AssocList k a -> b #

foldl :: (b -> a -> b) -> b -> AssocList k a -> b #

foldl' :: (b -> a -> b) -> b -> AssocList k a -> b #

foldr1 :: (a -> a -> a) -> AssocList k a -> a #

foldl1 :: (a -> a -> a) -> AssocList k a -> a #

toList :: AssocList k a -> [a] #

null :: AssocList k a -> Bool #

length :: AssocList k a -> Int #

elem :: Eq a => a -> AssocList k a -> Bool #

maximum :: Ord a => AssocList k a -> a #

minimum :: Ord a => AssocList k a -> a #

sum :: Num a => AssocList k a -> a #

product :: Num a => AssocList k a -> a #

Traversable (AssocList k) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

traverse :: Applicative f => (a -> f b) -> AssocList k a -> f (AssocList k b) #

sequenceA :: Applicative f => AssocList k (f a) -> f (AssocList k a) #

mapM :: Monad m => (a -> m b) -> AssocList k a -> m (AssocList k b) #

sequence :: Monad m => AssocList k (m a) -> m (AssocList k a) #

Functor (AssocList k) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fmap :: (a -> b) -> AssocList k a -> AssocList k b #

(<$) :: a -> AssocList k b -> AssocList k a #

(Show k, Show t) => Show (AssocList k t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

showsPrec :: Int -> AssocList k t -> ShowS #

show :: AssocList k t -> String #

showList :: [AssocList k t] -> ShowS #

(Eq k, Eq t) => Eq (AssocList k t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

(==) :: AssocList k t -> AssocList k t -> Bool #

(/=) :: AssocList k t -> AssocList k t -> Bool #

(Ord k, Ord t) => Ord (AssocList k t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

compare :: AssocList k t -> AssocList k t -> Ordering #

(<) :: AssocList k t -> AssocList k t -> Bool #

(<=) :: AssocList k t -> AssocList k t -> Bool #

(>) :: AssocList k t -> AssocList k t -> Bool #

(>=) :: AssocList k t -> AssocList k t -> Bool #

max :: AssocList k t -> AssocList k t -> AssocList k t #

min :: AssocList k t -> AssocList k t -> AssocList k t #

data PathNode t Source #

Constructors

Leaf t 
Branch (PathTree t) 

Instances

Instances details
Foldable PathNode Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fold :: Monoid m => PathNode m -> m #

foldMap :: Monoid m => (a -> m) -> PathNode a -> m #

foldMap' :: Monoid m => (a -> m) -> PathNode a -> m #

foldr :: (a -> b -> b) -> b -> PathNode a -> b #

foldr' :: (a -> b -> b) -> b -> PathNode a -> b #

foldl :: (b -> a -> b) -> b -> PathNode a -> b #

foldl' :: (b -> a -> b) -> b -> PathNode a -> b #

foldr1 :: (a -> a -> a) -> PathNode a -> a #

foldl1 :: (a -> a -> a) -> PathNode a -> a #

toList :: PathNode a -> [a] #

null :: PathNode a -> Bool #

length :: PathNode a -> Int #

elem :: Eq a => a -> PathNode a -> Bool #

maximum :: Ord a => PathNode a -> a #

minimum :: Ord a => PathNode a -> a #

sum :: Num a => PathNode a -> a #

product :: Num a => PathNode a -> a #

Traversable PathNode Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

traverse :: Applicative f => (a -> f b) -> PathNode a -> f (PathNode b) #

sequenceA :: Applicative f => PathNode (f a) -> f (PathNode a) #

mapM :: Monad m => (a -> m b) -> PathNode a -> m (PathNode b) #

sequence :: Monad m => PathNode (m a) -> m (PathNode a) #

Functor PathNode Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fmap :: (a -> b) -> PathNode a -> PathNode b #

(<$) :: a -> PathNode b -> PathNode a #

Show t => Show (PathNode t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

showsPrec :: Int -> PathNode t -> ShowS #

show :: PathNode t -> String #

showList :: [PathNode t] -> ShowS #

Eq t => Eq (PathNode t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

(==) :: PathNode t -> PathNode t -> Bool #

(/=) :: PathNode t -> PathNode t -> Bool #

Ord t => Ord (PathNode t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

compare :: PathNode t -> PathNode t -> Ordering #

(<) :: PathNode t -> PathNode t -> Bool #

(<=) :: PathNode t -> PathNode t -> Bool #

(>) :: PathNode t -> PathNode t -> Bool #

(>=) :: PathNode t -> PathNode t -> Bool #

max :: PathNode t -> PathNode t -> PathNode t #

min :: PathNode t -> PathNode t -> PathNode t #

newtype PathTree t Source #

Constructors

PathTree (AssocList PSString (PathNode t)) 

Instances

Instances details
Foldable PathTree Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fold :: Monoid m => PathTree m -> m #

foldMap :: Monoid m => (a -> m) -> PathTree a -> m #

foldMap' :: Monoid m => (a -> m) -> PathTree a -> m #

foldr :: (a -> b -> b) -> b -> PathTree a -> b #

foldr' :: (a -> b -> b) -> b -> PathTree a -> b #

foldl :: (b -> a -> b) -> b -> PathTree a -> b #

foldl' :: (b -> a -> b) -> b -> PathTree a -> b #

foldr1 :: (a -> a -> a) -> PathTree a -> a #

foldl1 :: (a -> a -> a) -> PathTree a -> a #

toList :: PathTree a -> [a] #

null :: PathTree a -> Bool #

length :: PathTree a -> Int #

elem :: Eq a => a -> PathTree a -> Bool #

maximum :: Ord a => PathTree a -> a #

minimum :: Ord a => PathTree a -> a #

sum :: Num a => PathTree a -> a #

product :: Num a => PathTree a -> a #

Traversable PathTree Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

traverse :: Applicative f => (a -> f b) -> PathTree a -> f (PathTree b) #

sequenceA :: Applicative f => PathTree (f a) -> f (PathTree a) #

mapM :: Monad m => (a -> m b) -> PathTree a -> m (PathTree b) #

sequence :: Monad m => PathTree (m a) -> m (PathTree a) #

Functor PathTree Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fmap :: (a -> b) -> PathTree a -> PathTree b #

(<$) :: a -> PathTree b -> PathTree a #

Show t => Show (PathTree t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

showsPrec :: Int -> PathTree t -> ShowS #

show :: PathTree t -> String #

showList :: [PathTree t] -> ShowS #

Eq t => Eq (PathTree t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

(==) :: PathTree t -> PathTree t -> Bool #

(/=) :: PathTree t -> PathTree t -> Bool #

Ord t => Ord (PathTree t) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

compare :: PathTree t -> PathTree t -> Ordering #

(<) :: PathTree t -> PathTree t -> Bool #

(<=) :: PathTree t -> PathTree t -> Bool #

(>) :: PathTree t -> PathTree t -> Bool #

(>=) :: PathTree t -> PathTree t -> Bool #

max :: PathTree t -> PathTree t -> PathTree t #

min :: PathTree t -> PathTree t -> PathTree t #

data DoNotationElement Source #

A statement in a do-notation block

Constructors

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

data CaseAlternative Source #

An alternative in a case statement

Constructors

CaseAlternative 

Fields

Instances

Instances details
Show CaseAlternative Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data WhereProvenance Source #

Metadata that tells where a let binding originated

Constructors

FromWhere

The let binding was originally a where clause

FromLet

The let binding was always a let binding

Instances

Instances details
Show WhereProvenance Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data Expr Source #

Data type for expressions and terms

Constructors

Literal SourceSpan (Literal Expr)

A literal value

UnaryMinus SourceSpan 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 PSString 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 [(PSString, Expr)]

Partial record update

ObjectUpdateNested Expr (PathTree Expr)

Object updates with nested support: `x { foo { bar = e } }` Replaced during desugaring into a Let and nested ObjectUpdates

Abs Binder Expr

Function introduction

App Expr Expr

Function application

Unused Expr

Hint that an expression is unused. This is used to ignore type class dictionaries that are necessarily empty. The inner expression lets us solve subgoals before eliminating the whole expression. The code gen will render this as undefined, regardless of what the inner expression is.

Var SourceSpan (Qualified Ident)

Variable

Op SourceSpan (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 SourceSpan (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 SourceType

A value with a type annotation

Let WhereProvenance [Declaration] Expr

A let binding

Do (Maybe ModuleName) [DoNotationElement]

A do-notation block

Ado (Maybe ModuleName) [DoNotationElement] Expr

An ado-notation block

TypeClassDictionary SourceConstraint (Map QualifiedBy (Map (Qualified (ProperName 'ClassName)) (Map (Qualified Ident) (NonEmpty 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.

DeferredDictionary (Qualified (ProperName 'ClassName)) [SourceType]

A placeholder for a superclass dictionary to be turned into a TypeClassDictionary during typechecking

DerivedInstancePlaceholder (Qualified (ProperName 'ClassName)) InstanceDerivationStrategy

A placeholder for a type class instance to be derived during typechecking

AnonymousArgument

A placeholder for an anonymous function argument

Hole Text

A typed hole that will be turned into a hint/error during typechecking

PositionedValue SourceSpan [Comment] Expr

A value with source position information

Instances

Instances details
Show Expr Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

showsPrec :: Int -> Expr -> ShowS #

show :: Expr -> String #

showList :: [Expr] -> ShowS #

data GuardedExpr Source #

The right hand side of a binder in value declarations and case expressions.

Constructors

GuardedExpr [Guard] Expr 

Instances

Instances details
Show GuardedExpr Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data Guard Source #

A guard is just a boolean-valued expression that appears alongside a set of binders

Instances

Instances details
Show Guard Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

showsPrec :: Int -> Guard -> ShowS #

show :: Guard -> String #

showList :: [Guard] -> ShowS #

data KindSignatureFor Source #

What sort of declaration the kind signature applies to.

Instances

Instances details
Generic KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Associated Types

type Rep KindSignatureFor :: Type -> Type #

Show KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

NFData KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

rnf :: KindSignatureFor -> () #

Eq KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Ord KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep KindSignatureFor Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep KindSignatureFor = D1 ('MetaData "KindSignatureFor" "Language.PureScript.AST.Declarations" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) ((C1 ('MetaCons "DataSig" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NewtypeSig" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "TypeSynonymSig" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ClassSig" 'PrefixI 'False) (U1 :: Type -> Type)))

data TypeInstanceBody Source #

The members of a type class instance declaration

Constructors

DerivedInstance

This is a derived instance

NewtypeInstance

This is an instance derived from a newtype

ExplicitInstance [Declaration]

This is a regular (explicit) instance

data Declaration Source #

The data type of declarations

Constructors

DataDeclaration SourceAnn DataDeclType (ProperName 'TypeName) [(Text, Maybe SourceType)] [DataConstructorDeclaration]

A data type declaration (data or newtype, name, arguments, data constructors)

DataBindingGroupDeclaration (NonEmpty Declaration)

A minimal mutually recursive set of data type declarations

TypeSynonymDeclaration SourceAnn (ProperName 'TypeName) [(Text, Maybe SourceType)] SourceType

A type synonym declaration (name, arguments, type)

KindDeclaration SourceAnn KindSignatureFor (ProperName 'TypeName) SourceType

A kind signature declaration

RoleDeclaration !RoleDeclarationData

A role declaration (name, roles)

TypeDeclaration !TypeDeclarationData

A type declaration for a value (name, ty)

ValueDeclaration !(ValueDeclarationData [GuardedExpr])

A value declaration (name, top-level binders, optional guard, value)

BoundValueDeclaration SourceAnn Binder Expr

A declaration paired with pattern matching in let-in expression (binder, optional guard, value)

BindingGroupDeclaration (NonEmpty ((SourceAnn, Ident), NameKind, Expr))

A minimal mutually recursive set of value declarations

ExternDeclaration SourceAnn Ident SourceType

A foreign import declaration (name, type)

ExternDataDeclaration SourceAnn (ProperName 'TypeName) SourceType

A data type foreign import (name, kind)

FixityDeclaration SourceAnn (Either ValueFixity TypeFixity)

A fixity declaration

ImportDeclaration SourceAnn ModuleName ImportDeclarationType (Maybe ModuleName)

A module import (module name, qualifiedunqualifiedhiding, optional "qualified as" name)

TypeClassDeclaration SourceAnn (ProperName 'ClassName) [(Text, Maybe SourceType)] [SourceConstraint] [FunctionalDependency] [Declaration]

A type class declaration (name, argument, implies, member declarations)

TypeInstanceDeclaration SourceAnn SourceAnn ChainId Integer (Either Text Ident) [SourceConstraint] (Qualified (ProperName 'ClassName)) [SourceType] TypeInstanceBody

A type instance declaration (instance chain, chain index, name, dependencies, class name, instance types, member declarations)

The first SourceAnn serves as the annotation for the entire declaration, while the second SourceAnn serves as the annotation for the type class and its arguments.

Instances

Instances details
Show Declaration Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data ValueDeclarationData a Source #

A value declaration assigns a name and potential binders, to an expression (or multiple guarded expressions).

double x = x + x

In this example double is the identifier, x is a binder and x + x is the expression.

Constructors

ValueDeclarationData 

Fields

Instances

Instances details
Foldable ValueDeclarationData Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

fold :: Monoid m => ValueDeclarationData m -> m #

foldMap :: Monoid m => (a -> m) -> ValueDeclarationData a -> m #

foldMap' :: Monoid m => (a -> m) -> ValueDeclarationData a -> m #

foldr :: (a -> b -> b) -> b -> ValueDeclarationData a -> b #

foldr' :: (a -> b -> b) -> b -> ValueDeclarationData a -> b #

foldl :: (b -> a -> b) -> b -> ValueDeclarationData a -> b #

foldl' :: (b -> a -> b) -> b -> ValueDeclarationData a -> b #

foldr1 :: (a -> a -> a) -> ValueDeclarationData a -> a #

foldl1 :: (a -> a -> a) -> ValueDeclarationData a -> a #

toList :: ValueDeclarationData a -> [a] #

null :: ValueDeclarationData a -> Bool #

length :: ValueDeclarationData a -> Int #

elem :: Eq a => a -> ValueDeclarationData a -> Bool #

maximum :: Ord a => ValueDeclarationData a -> a #

minimum :: Ord a => ValueDeclarationData a -> a #

sum :: Num a => ValueDeclarationData a -> a #

product :: Num a => ValueDeclarationData a -> a #

Traversable ValueDeclarationData Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Functor ValueDeclarationData Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Show a => Show (ValueDeclarationData a) Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data TypeDeclarationData Source #

A type declaration assigns a type to an identifier, eg:

identity :: forall a. a -> a

In this example identity is the identifier and forall a. a -> a the type.

data RoleDeclarationData Source #

A role declaration assigns a list of roles to a type constructor's parameters, e.g.:

type role T representational phantom

In this example, T is the identifier and [representational, phantom] is the list of roles (T presumably having two parameters).

data ImportDeclarationType Source #

The data type which specifies type of import declaration

Constructors

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)`

Instances

Instances details
FromJSON ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

ToJSON ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Generic ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Associated Types

type Rep ImportDeclarationType :: Type -> Type #

Show ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Eq ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Serialise ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep ImportDeclarationType Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep ImportDeclarationType = D1 ('MetaData "ImportDeclarationType" "Language.PureScript.AST.Declarations" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "Implicit" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Explicit" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DeclarationRef])) :+: C1 ('MetaCons "Hiding" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DeclarationRef]))))

data ExportSource Source #

Instances

Instances details
FromJSON ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

ToJSON ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Generic ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Associated Types

type Rep ExportSource :: Type -> Type #

Show ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

NFData ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

rnf :: ExportSource -> () #

Eq ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Ord ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Serialise ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep ExportSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep ExportSource = D1 ('MetaData "ExportSource" "Language.PureScript.AST.Declarations" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "ExportSource" 'PrefixI 'True) (S1 ('MetaSel ('Just "exportSourceImportedFrom") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ModuleName)) :*: S1 ('MetaSel ('Just "exportSourceDefinedIn") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)))

data DeclarationRef Source #

An item in a list of explicit imports or exports

Constructors

TypeClassRef SourceSpan (ProperName 'ClassName)

A type class

TypeOpRef SourceSpan (OpName 'TypeOpName)

A type operator

TypeRef SourceSpan (ProperName 'TypeName) (Maybe [ProperName 'ConstructorName])

A type constructor with data constructors

ValueRef SourceSpan Ident

A value

ValueOpRef SourceSpan (OpName 'ValueOpName)

A value-level operator

TypeInstanceRef SourceSpan Ident NameSource

A type class instance, created during typeclass desugaring

ModuleRef SourceSpan ModuleName

A module, in its entirety

ReExportRef SourceSpan ExportSource DeclarationRef

A value re-exported from another module. These will be inserted during elaboration in name desugaring.

Instances

Instances details
FromJSON DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

ToJSON DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Generic DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Associated Types

type Rep DeclarationRef :: Type -> Type #

Show DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

NFData DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

rnf :: DeclarationRef -> () #

Eq DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Ord DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Serialise DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep DeclarationRef Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep DeclarationRef = D1 ('MetaData "DeclarationRef" "Language.PureScript.AST.Declarations" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (((C1 ('MetaCons "TypeClassRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'ClassName))) :+: C1 ('MetaCons "TypeOpRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (OpName 'TypeOpName)))) :+: (C1 ('MetaCons "TypeRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'TypeName)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe [ProperName 'ConstructorName])))) :+: C1 ('MetaCons "ValueRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident)))) :+: ((C1 ('MetaCons "ValueOpRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (OpName 'ValueOpName))) :+: C1 ('MetaCons "TypeInstanceRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NameSource)))) :+: (C1 ('MetaCons "ModuleRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName)) :+: C1 ('MetaCons "ReExportRef" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ExportSource) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DeclarationRef))))))

data NameSource Source #

Constructors

UserNamed 
CompilerNamed 

Instances

Instances details
FromJSON NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

ToJSON NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Generic NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Associated Types

type Rep NameSource :: Type -> Type #

Show NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

NFData NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

Methods

rnf :: NameSource -> () #

Serialise NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep NameSource Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Rep NameSource = D1 ('MetaData "NameSource" "Language.PureScript.AST.Declarations" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "UserNamed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CompilerNamed" 'PrefixI 'False) (U1 :: Type -> Type))

data Module 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.

Instances

Instances details
Show Module Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

data ErrorMessageHint Source #

Error message hints, providing more detailed information about failure.

data TypeSearch Source #

Holds the data necessary to do type directed search for typed holes

Constructors

TSBefore Environment

An Environment captured for later consumption by type directed search

TSAfter

Results of applying type directed search to the previously captured Environment

Fields

Instances

Instances details
Show TypeSearch Source # 
Instance details

Defined in Language.PureScript.AST.Declarations

type Context = [(Ident, SourceType)] Source #

A map of locally-bound names in scope.

getModuleName :: Module -> ModuleName Source #

Return a module's name.

getModuleSourceSpan :: Module -> SourceSpan Source #

Return a module's source span.

getModuleDeclarations :: Module -> [Declaration] Source #

Return a module's declarations.

addDefaultImport :: Qualified ModuleName -> Module -> Module Source #

Add an import declaration for a module if it does not already explicitly import it.

Will not import an unqualified module if that module has already been imported qualified. (See #2197)

importPrim :: Module -> Module Source #

Adds import declarations to a module for an implicit Prim import and Prim | qualified as Prim, as necessary.

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 declaration

isTypeSynonymDecl :: Declaration -> Bool Source #

Test if a declaration is a type synonym declaration

isImportDecl :: Declaration -> Bool Source #

Test if a declaration is a module import

isRoleDecl :: Declaration -> Bool Source #

Test if a declaration is a role declaration

isExternDataDecl :: Declaration -> Bool Source #

Test if a declaration is a data type foreign 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

isTypeClassInstanceDecl :: Declaration -> Bool Source #

Test if a declaration is a type class instance declaration

isTypeClassDecl :: Declaration -> Bool Source #

Test if a declaration is a type class declaration

isKindDecl :: Declaration -> Bool Source #

Test if a declaration is a kind signature declaration.

flattenDecls :: [Declaration] -> [Declaration] Source #

Recursively flatten data binding groups in the list of declarations

litM :: Monad m => (a -> m a) -> Literal a -> m (Literal a) Source #

everywhereOnValuesTopDownM :: forall m. Monad m => (Declaration -> m Declaration) -> (Expr -> m Expr) -> (Binder -> m Binder) -> (Declaration -> m Declaration, Expr -> m Expr, Binder -> m Binder) Source #

everywhereOnValuesM :: forall m. Monad m => (Declaration -> m Declaration) -> (Expr -> m Expr) -> (Binder -> m Binder) -> (Declaration -> m Declaration, Expr -> m Expr, Binder -> m Binder) Source #

everythingOnValues :: forall r. (r -> r -> r) -> (Declaration -> r) -> (Expr -> r) -> (Binder -> r) -> (CaseAlternative -> r) -> (DoNotationElement -> r) -> (Declaration -> r, Expr -> r, Binder -> r, CaseAlternative -> r, DoNotationElement -> r) Source #

everythingWithContextOnValues :: forall s r. s -> r -> (r -> r -> r) -> (s -> Declaration -> (s, r)) -> (s -> Expr -> (s, r)) -> (s -> Binder -> (s, r)) -> (s -> CaseAlternative -> (s, r)) -> (s -> DoNotationElement -> (s, r)) -> (Declaration -> r, Expr -> r, Binder -> r, CaseAlternative -> r, DoNotationElement -> r) Source #

everywhereWithContextOnValuesM :: forall m s. Monad m => s -> (s -> Declaration -> m (s, Declaration)) -> (s -> Expr -> m (s, Expr)) -> (s -> Binder -> m (s, Binder)) -> (s -> CaseAlternative -> m (s, CaseAlternative)) -> (s -> DoNotationElement -> m (s, DoNotationElement)) -> (s -> Guard -> m (s, Guard)) -> (Declaration -> m Declaration, Expr -> m Expr, Binder -> m Binder, CaseAlternative -> m CaseAlternative, DoNotationElement -> m DoNotationElement, Guard -> m Guard) Source #

accumTypes :: Monoid r => (SourceType -> r) -> (Declaration -> r, Expr -> r, Binder -> r, CaseAlternative -> r, DoNotationElement -> r) Source #

overTypes :: (SourceType -> SourceType) -> Expr -> Expr Source #

Map a function over type annotations appearing inside a value

exportedDeclarations :: Module -> [Declaration] Source #

Return a list of all declarations which are exported from a module. This function descends into data declarations to filter out unexported data constructors, and also filters out type instance declarations if they refer to classes or types which are not themselves exported.

Note that this function assumes that the module has already had its imports desugared using desugarImports. It will produce incorrect results if this is not the case - for example, type class instances will be incorrectly removed in some cases.

The returned declarations are in the same order as they appear in the export list, unless there is no export list, in which case they appear in the same order as they do in the source file.

Kind signatures declarations are also exported if their associated declaration is exported.

isExported :: Maybe [DeclarationRef] -> Declaration -> Bool Source #

Test if a declaration is exported, given a module's export list. Note that this function does not account for type instance declarations of non-exported types, or non-exported data constructors. Therefore, you should prefer exportedDeclarations to this function, where possible.

desugarLetPatternModule :: Module -> Module Source #

Replace every BoundValueDeclaration in Let expressions with Case expressions.

prettyPrintTypeAtom :: Int -> Type a -> String Source #

Generate a pretty-printed string representing a Type, as it should appear inside parentheses

prettyPrintType :: Int -> Type a -> String Source #

Generate a pretty-printed string representing a Type

prettyPrintTypeWithUnicode :: Int -> Type a -> String Source #

Generate a pretty-printed string representing a Type using unicode symbols where applicable

prettyPrintSuggestedType :: Type a -> String Source #

Generate a pretty-printed string representing a suggested Type

prettyPrintValue :: Int -> Expr -> Box Source #

Pretty-print an expression

prettyPrintBinder :: Binder -> Text Source #

Generate a pretty-printed string representing a Binder

data PPEOptions Source #

Constructors

PPEOptions 

Fields

data Level Source #

How critical the issue is

Constructors

Error 
Warning 

Instances

Instances details
Show Level Source # 
Instance details

Defined in Language.PureScript.Errors

Methods

showsPrec :: Int -> Level -> ShowS #

show :: Level -> String #

showList :: [Level] -> ShowS #

data TypeMap Source #

A map from rigid type variable name/unknown variable pairs to new variables.

Constructors

TypeMap 

Fields

Instances

Instances details
Show TypeMap Source # 
Instance details

Defined in Language.PureScript.Errors

data SimpleErrorMessage Source #

A type of error messages

Constructors

InternalCompilerError Text Text 
ModuleNotFound ModuleName 
ErrorParsingFFIModule FilePath (Maybe ErrorMessage) 
ErrorParsingCSTModule ParserError 
WarningParsingCSTModule ParserWarning 
MissingFFIModule ModuleName 
UnnecessaryFFIModule ModuleName FilePath 
MissingFFIImplementations ModuleName [Ident] 
UnusedFFIImplementations ModuleName [Ident] 
InvalidFFIIdentifier ModuleName Text 
DeprecatedFFIPrime ModuleName Text 
DeprecatedFFICommonJSModule ModuleName FilePath 
UnsupportedFFICommonJSExports ModuleName [Text] 
UnsupportedFFICommonJSImports ModuleName [Text] 
FileIOError Text IOError

A description of what we were trying to do, and the error which occurred

InfiniteType SourceType 
InfiniteKind SourceType 
MultipleValueOpFixities (OpName 'ValueOpName) 
MultipleTypeOpFixities (OpName 'TypeOpName) 
OrphanTypeDeclaration Ident 
OrphanKindDeclaration (ProperName 'TypeName) 
OrphanRoleDeclaration (ProperName 'TypeName) 
RedefinedIdent Ident 
OverlappingNamesInLet Ident 
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 
DuplicateTypeClass (ProperName 'ClassName) SourceSpan 
DuplicateInstance Ident SourceSpan 
DuplicateTypeArgument Text 
InvalidDoBind 
InvalidDoLet 
CycleInDeclaration Ident 
CycleInTypeSynonym (NonEmpty (ProperName 'TypeName)) 
CycleInTypeClassDeclaration (NonEmpty (Qualified (ProperName 'ClassName))) 
CycleInKindDeclaration (NonEmpty (Qualified (ProperName 'TypeName))) 
CycleInModules (NonEmpty ModuleName) 
NameIsUndefined Ident 
UndefinedTypeVariable (ProperName 'TypeName) 
PartiallyAppliedSynonym (Qualified (ProperName 'TypeName)) 
EscapedSkolem Text (Maybe SourceSpan) SourceType 
TypesDoNotUnify SourceType SourceType 
KindsDoNotUnify SourceType SourceType 
ConstrainedTypeUnified SourceType SourceType 
OverlappingInstances (Qualified (ProperName 'ClassName)) [SourceType] [Qualified (Either SourceType Ident)] 
NoInstanceFound 

Fields

AmbiguousTypeVariables SourceType [(Text, Int)] 
UnknownClass (Qualified (ProperName 'ClassName)) 
PossiblyInfiniteInstance (Qualified (ProperName 'ClassName)) [SourceType] 
PossiblyInfiniteCoercibleInstance 
CannotDerive (Qualified (ProperName 'ClassName)) [SourceType] 
InvalidDerivedInstance (Qualified (ProperName 'ClassName)) [SourceType] Int 
ExpectedTypeConstructor (Qualified (ProperName 'ClassName)) [SourceType] SourceType 
InvalidNewtypeInstance (Qualified (ProperName 'ClassName)) [SourceType] 
MissingNewtypeSuperclassInstance (Qualified (ProperName 'ClassName)) (Qualified (ProperName 'ClassName)) [SourceType] 
UnverifiableSuperclassInstance (Qualified (ProperName 'ClassName)) (Qualified (ProperName 'ClassName)) [SourceType] 
CannotFindDerivingType (ProperName 'TypeName) 
DuplicateLabel Label (Maybe Expr) 
DuplicateValueDeclaration Ident 
ArgListLengthsDiffer Ident 
OverlappingArgNames (Maybe Ident) 
MissingClassMember (NonEmpty (Ident, SourceType)) 
ExtraneousClassMember Ident (Qualified (ProperName 'ClassName)) 
ExpectedType SourceType SourceType 
IncorrectConstructorArity (Qualified (ProperName 'ConstructorName)) Int Int

constructor name, expected argument count, actual argument count

ExprDoesNotHaveType Expr SourceType 
PropertyIsMissing Label 
AdditionalProperty Label 
OrphanInstance Ident (Qualified (ProperName 'ClassName)) (Set ModuleName) [SourceType] 
InvalidNewtype (ProperName 'TypeName) 
InvalidInstanceHead SourceType 
TransitiveExportError DeclarationRef [DeclarationRef] 
TransitiveDctorExportError DeclarationRef [ProperName 'ConstructorName] 
HiddenConstructors DeclarationRef (Qualified (ProperName 'ClassName)) 
ShadowedName Ident 
ShadowedTypeVar Text 
UnusedTypeVar Text 
UnusedName Ident 
UnusedDeclaration Ident 
WildcardInferredType SourceType Context 
HoleInferredType Text SourceType Context (Maybe TypeSearch) 
MissingTypeDeclaration Ident SourceType 
MissingKindDeclaration KindSignatureFor (ProperName 'TypeName) SourceType 
OverlappingPattern [[Binder]] Bool 
IncompleteExhaustivityCheck 
ImportHidingModule ModuleName 
UnusedImport ModuleName (Maybe 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] 
ImplicitQualifiedImportReExport ModuleName ModuleName [DeclarationRef] 
ImplicitImport ModuleName [DeclarationRef] 
HidingImport ModuleName [DeclarationRef] 
CaseBinderLengthDiffers Int [Binder] 
IncorrectAnonymousArgument 
InvalidOperatorInBinder (Qualified (OpName 'ValueOpName)) (Qualified Ident) 
CannotGeneralizeRecursiveFunction Ident SourceType 
CannotDeriveNewtypeForData (ProperName 'TypeName) 
ExpectedWildcard (ProperName 'TypeName) 
CannotUseBindWithDo Ident 
ClassInstanceArityMismatch Ident (Qualified (ProperName 'ClassName)) Int Int

instance name, type class, expected argument count, actual argument count

UserDefinedWarning SourceType

a user-defined warning raised by using the Warn type class

UnusableDeclaration Ident [[Text]]

a declaration couldn't be used because it contained free variables

CannotDefinePrimModules ModuleName 
MixedAssociativityError (NonEmpty (Qualified (OpName 'AnyOpName), Associativity)) 
NonAssociativeError (NonEmpty (Qualified (OpName 'AnyOpName))) 
QuantificationCheckFailureInKind Text 
QuantificationCheckFailureInType [Int] SourceType 
VisibleQuantificationCheckFailureInType Text 
UnsupportedTypeInKind SourceType 
RoleMismatch

Declared role was more permissive than inferred.

Fields

  • Text

    Type variable in question

  • Role

    inferred role

  • Role

    declared role

InvalidCoercibleInstanceDeclaration [SourceType] 
UnsupportedRoleDeclaration 
RoleDeclarationArityMismatch (ProperName 'TypeName) Int Int 
DuplicateRoleDeclaration (ProperName 'TypeName) 
CannotDeriveInvalidConstructorArg (Qualified (ProperName 'ClassName)) [Qualified (ProperName 'ClassName)] Bool 

errorSpan :: ErrorMessage -> Maybe (NonEmpty SourceSpan) Source #

Get the source span for an error

errorModule :: ErrorMessage -> Maybe ModuleName Source #

Get the module name for an error

stripModuleAndSpan :: ErrorMessage -> ErrorMessage Source #

Remove the module name and span hints from an error

errorCode :: ErrorMessage -> Text Source #

Get the error code for a particular error type

nonEmpty :: MultipleErrors -> Bool Source #

Check whether a collection of errors is empty or not.

errorMessage :: SimpleErrorMessage -> MultipleErrors Source #

Create an error set from a single simple error message

errorMessage' :: SourceSpan -> SimpleErrorMessage -> MultipleErrors Source #

Create an error set from a single simple error message and source annotation

errorMessage'' :: NonEmpty SourceSpan -> SimpleErrorMessage -> MultipleErrors Source #

Create an error set from a single simple error message and source annotations

errorMessage''' :: [SourceSpan] -> SimpleErrorMessage -> MultipleErrors Source #

Create an error from multiple (possibly empty) source spans, reversed sorted.

singleError :: ErrorMessage -> MultipleErrors Source #

Create an error set from a single error message

onErrorMessages :: (ErrorMessage -> ErrorMessage) -> MultipleErrors -> MultipleErrors Source #

Lift a function on ErrorMessage to a function on MultipleErrors

addHint :: ErrorMessageHint -> MultipleErrors -> MultipleErrors Source #

Add a hint to an error message

addHints :: [ErrorMessageHint] -> MultipleErrors -> MultipleErrors Source #

Add hints to an error message

unwrapErrorMessage :: ErrorMessage -> SimpleErrorMessage Source #

Extract nested error messages from wrapper errors

defaultCodeColor :: (ColorIntensity, Color) Source #

Default color intensity and color for code

defaultPPEOptions :: PPEOptions Source #

Default options for PPEOptions

prettyPrintSingleError :: PPEOptions -> ErrorMessage -> Box Source #

Pretty print a single error, simplifying if necessary

prettyPrintMultipleErrors :: PPEOptions -> MultipleErrors -> String Source #

Pretty print multiple errors

prettyPrintMultipleWarnings :: PPEOptions -> MultipleErrors -> String Source #

Pretty print multiple warnings

prettyPrintMultipleWarningsBox :: PPEOptions -> MultipleErrors -> [Box] Source #

Pretty print warnings as a Box

prettyPrintMultipleErrorsBox :: PPEOptions -> MultipleErrors -> [Box] Source #

Pretty print errors as a Box

rethrow :: MonadError e m => (e -> e) -> m a -> m a Source #

Rethrow an error with a more detailed error message in the case of failure

warnAndRethrow :: (MonadError e m, MonadWriter e m) => (e -> e) -> m a -> m a Source #

rethrowWithPosition :: MonadError MultipleErrors m => SourceSpan -> m a -> m a Source #

Rethrow an error with source position information

escalateWarningWhen :: (MonadWriter MultipleErrors m, MonadError MultipleErrors m) => (ErrorMessage -> Bool) -> m a -> m a Source #

Runs a computation listening for warnings and then escalating any warnings that match the predicate to error status.

parU :: forall m a b. MonadError MultipleErrors m => [a] -> (a -> m b) -> m [b] Source #

Collect errors in in parallel

lookupRoles :: Environment -> Qualified (ProperName 'TypeName) -> [Role] Source #

Lookup the roles for a type in the environment. If the type does not have roles (e.g. is a type synonym or a type variable), then this function returns an empty list.

checkRoles Source #

Arguments

:: forall m. MonadError MultipleErrors m 
=> [(Text, Maybe SourceType, Role)]

type parameters for the data type whose roles we are checking

-> [Role]

roles declared for the data type

-> m () 

Compares the inferred roles to the explicitly declared roles and ensures that the explicitly declared roles are not more permissive than the inferred ones.

inferRoles Source #

Arguments

:: Environment 
-> ModuleName 
-> ProperName 'TypeName

The name of the data type whose roles we are checking

-> [(Text, Maybe SourceType)]

type parameters for the data type whose roles we are checking

-> [DataConstructorDeclaration]

constructors of the data type whose roles we are checking

-> [Role] 

Infers roles for the given data type declaration.

type Unknown = Int Source #

Unification variables

data CheckState Source #

State required for type checking

Constructors

CheckState 

Fields

data Substitution Source #

A substitution of unification variables for types.

Constructors

Substitution 

Fields

emptySubstitution :: Substitution Source #

An empty substitution

emptyCheckState :: Environment -> CheckState Source #

Create an empty CheckState

bindNames :: MonadState CheckState m => Map (Qualified Ident) (SourceType, NameKind, NameVisibility) -> m a -> m a Source #

Temporarily bind a collection of names to values

bindTypes :: MonadState CheckState m => Map (Qualified (ProperName 'TypeName)) (SourceType, TypeKind) -> m a -> m a Source #

Temporarily bind a collection of names to types

withScopedTypeVars :: (MonadState CheckState m, MonadWriter MultipleErrors m) => ModuleName -> [(Text, SourceType)] -> m a -> m a Source #

Temporarily bind a collection of names to types

getHints :: MonadState CheckState m => m [ErrorMessageHint] Source #

These hints are added at the front, so the most nested hint occurs at the front, but the simplifier assumes the reverse order.

withTypeClassDictionaries :: MonadState CheckState m => [NamedDict] -> m a -> m a Source #

Temporarily make a collection of type class dictionaries available

getTypeClassDictionaries :: MonadState CheckState m => m (Map QualifiedBy (Map (Qualified (ProperName 'ClassName)) (Map (Qualified Ident) (NonEmpty NamedDict)))) Source #

Get the currently available map of type class dictionaries

bindLocalVariables :: MonadState CheckState m => [(SourceSpan, Ident, SourceType, NameVisibility)] -> m a -> m a Source #

Temporarily bind a collection of names to local variables

bindLocalTypeVariables :: MonadState CheckState m => ModuleName -> [(ProperName 'TypeName, SourceType)] -> m a -> m a Source #

Temporarily bind a collection of names to local type variables

makeBindingGroupVisible :: MonadState CheckState m => m () Source #

Update the visibility of all names to Defined

withBindingGroupVisible :: MonadState CheckState m => m a -> m a Source #

Update the visibility of all names to Defined in the scope of the provided action

preservingNames :: MonadState CheckState m => m a -> m a Source #

Perform an action while preserving the names from the Environment.

lookupVariable :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m SourceType Source #

Lookup the type of a value by name in the Environment

getVisibility :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m NameVisibility Source #

Lookup the visibility of a value by name in the Environment

checkVisibility :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => Qualified Ident -> m () Source #

Assert that a name is visible

lookupTypeVariable :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => ModuleName -> Qualified (ProperName 'TypeName) -> m SourceType Source #

Lookup the kind of a type by name in the Environment

getEnv :: MonadState CheckState m => m Environment Source #

Get the current Environment

getLocalContext :: MonadState CheckState m => m Context Source #

Get locally-bound names in context, to create an error message.

putEnv :: MonadState CheckState m => Environment -> m () Source #

Update the Environment

modifyEnv :: MonadState CheckState m => (Environment -> Environment) -> m () Source #

Modify the Environment

runCheck :: Functor m => CheckState -> StateT CheckState m a -> m (a, Environment) Source #

Run a computation in the typechecking monad, failing with an error, or succeeding with a return value and the final Environment.

guardWith :: MonadError e m => e -> Bool -> m () Source #

Make an assertion, failing with an error message

withoutWarnings :: MonadWriter w m => m a -> m (a, w) Source #

type SynonymMap = Map (Qualified (ProperName 'TypeName)) ([(Text, Maybe SourceType)], SourceType) Source #

Type synonym information (arguments with kinds, aliased type), indexed by name

replaceAllTypeSynonyms :: (e ~ MultipleErrors, MonadState CheckState m, MonadError e m) => SourceType -> m SourceType Source #

Replace fully applied type synonyms

replaceAllTypeSynonymsM :: MonadError MultipleErrors m => SynonymMap -> KindMap -> SourceType -> m SourceType Source #

Replace fully applied type synonyms by explicitly providing a SynonymMap.

unifyKinds' :: (MonadError MultipleErrors m, MonadState CheckState m, HasCallStack) => SourceType -> SourceType -> m () Source #

Does not attach positions to the error node, instead relies on the | local position context. This is useful when invoking kind unification | outside of kind checker internals.

checkTypeKind :: (MonadError MultipleErrors m, MonadState CheckState m, HasCallStack) => SourceType -> SourceType -> m () Source #

Check the kind of a type, failing if it is not of kind *.

kindOfWithScopedVars :: (MonadError MultipleErrors m, MonadState CheckState m, HasCallStack) => SourceType -> m (([(Text, SourceType)], SourceType), SourceType) Source #

Infer the kind of a single type, returning the kinds of any scoped type variables

kindOfData :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => ModuleName -> DataDeclarationArgs -> m DataDeclarationResult Source #

kindOfTypeSynonym :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => ModuleName -> TypeDeclarationArgs -> m TypeDeclarationResult Source #

kindOfClass :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => ModuleName -> ClassDeclarationArgs -> m ClassDeclarationResult Source #

checkInstanceDeclaration :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => ModuleName -> InstanceDeclarationArgs -> m InstanceDeclarationResult Source #

kindsOfAll :: forall m. (MonadError MultipleErrors m, MonadState CheckState m) => ModuleName -> [TypeDeclarationArgs] -> [DataDeclarationArgs] -> [ClassDeclarationArgs] -> m ([TypeDeclarationResult], [DataDeclarationResult], [ClassDeclarationResult]) Source #

desugarTypeDeclarationsModule :: forall m. MonadError MultipleErrors m => Module -> m Module Source #

Replace all top level type declarations in a module with type annotations

type Env = Map ModuleName (SourceSpan, Imports, Exports) Source #

The imports and exports for a collection of modules. The SourceSpan is used to store the source location of the module with a given name, used to provide useful information when there is a duplicate module definition.

data Exports Source #

The exported declarations from a module.

Constructors

Exports 

Fields

Instances

Instances details
Show Exports Source # 
Instance details

Defined in Language.PureScript.Sugar.Names.Env

data Imports Source #

The imported declarations for a module, including the module's own members.

Constructors

Imports 

Fields

Instances

Instances details
Show Imports Source # 
Instance details

Defined in Language.PureScript.Sugar.Names.Env

data ImportProvenance Source #

Used to track how an import was introduced into scope. This allows us to handle the one-open-import special case that allows a name conflict to become a warning rather than being an unresolvable situation.

data ImportRecord a Source #

The details for an import: the name of the thing that is being imported (x if importing from A), the module that the thing was originally defined in (for re-export resolution), and the import provenance (see below).

primEnv :: Env Source #

Environment which only contains the Prim modules.

desugarDoModule :: forall m. (MonadSupply m, MonadError MultipleErrors m) => Module -> m Module Source #

Replace all DoNotationBind and DoNotationValue constructors with applications of the bind function in scope, and all DoNotationLet constructors with let expressions.

desugarCasesModule :: (MonadSupply m, MonadError MultipleErrors m) => Module -> m Module Source #

Replace all top-level binders in a module with case expressions.

desugarCases :: forall m. (MonadSupply m, MonadError MultipleErrors m) => [Declaration] -> m [Declaration] Source #

Replace all top-level binders with case expressions.

createBindingGroupsModule :: MonadError MultipleErrors m => Module -> m Module Source #

Replace all sets of mutually-recursive declarations in a module with binding groups

collapseBindingGroups :: [Declaration] -> [Declaration] Source #

Collapse all binding groups to individual declarations

desugarAdoModule :: forall m. (MonadSupply m, MonadError MultipleErrors m) => Module -> m Module Source #

Replace all AdoNotationBind and AdoNotationValue constructors with applications of the pure and apply functions in scope, and all AdoNotationLet constructors with let expressions.

data ModuleSignature Source #

A module signature for sorting dependencies.

type ModuleGraph = [(ModuleName, [ModuleName])] Source #

A list of modules with their transitive dependencies

sortModules :: forall m a. MonadError MultipleErrors m => DependencyDepth -> (a -> ModuleSignature) -> [a] -> m ([a], ModuleGraph) Source #

Sort a collection of modules based on module dependencies.

Reports an error if the module graph contains a cycle.

type UsedImports = Map ModuleName [Qualified Name] Source #

Map of module name to list of imported names from that module which have been used.

lintImports :: forall m. MonadWriter MultipleErrors m => Module -> Env -> UsedImports -> m () Source #

Find and warn on:

  • Unused import statements (qualified or unqualified)
  • Unused references in an explicit import list
  • Implicit imports of modules
  • Implicit imports into a virtual module (unless the virtual module only has members from one module imported)
  • Imports using hiding (this is another form of implicit importing)

checkExhaustiveExpr :: forall m. MonadWriter MultipleErrors m => SourceSpan -> Environment -> ModuleName -> Expr -> m Expr Source #

Exhaustivity checking

lint :: forall m. MonadWriter MultipleErrors m => Module -> m () Source #

Lint the PureScript AST. | | Right now, this pass performs a shadowing check and a check for unused bindings.

renameInModule :: Module Ann -> (Map Ident Ident, Module Ann) Source #

Renames within each declaration in a module. Returns the map of renamed identifiers in the top-level scope, so that they can be renamed in the externs files as well.

data ExternsDeclaration Source #

A type or value declaration appearing in an externs file

Instances

Instances details
Generic ExternsDeclaration Source # 
Instance details

Defined in Language.PureScript.Externs

Associated Types

type Rep ExternsDeclaration :: Type -> Type #

Show ExternsDeclaration Source # 
Instance details

Defined in Language.PureScript.Externs

Serialise ExternsDeclaration Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsDeclaration Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsDeclaration = D1 ('MetaData "ExternsDeclaration" "Language.PureScript.Externs" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) ((C1 ('MetaCons "EDType" 'PrefixI 'True) (S1 ('MetaSel ('Just "edTypeName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'TypeName)) :*: (S1 ('MetaSel ('Just "edTypeKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceType) :*: S1 ('MetaSel ('Just "edTypeDeclarationKind") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 TypeKind))) :+: (C1 ('MetaCons "EDTypeSynonym" 'PrefixI 'True) (S1 ('MetaSel ('Just "edTypeSynonymName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'TypeName)) :*: (S1 ('MetaSel ('Just "edTypeSynonymArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType)]) :*: S1 ('MetaSel ('Just "edTypeSynonymType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceType))) :+: C1 ('MetaCons "EDDataConstructor" 'PrefixI 'True) ((S1 ('MetaSel ('Just "edDataCtorName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'ConstructorName)) :*: S1 ('MetaSel ('Just "edDataCtorOrigin") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 DataDeclType)) :*: (S1 ('MetaSel ('Just "edDataCtorTypeCtor") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'TypeName)) :*: (S1 ('MetaSel ('Just "edDataCtorType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceType) :*: S1 ('MetaSel ('Just "edDataCtorFields") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Ident])))))) :+: (C1 ('MetaCons "EDValue" 'PrefixI 'True) (S1 ('MetaSel ('Just "edValueName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident) :*: S1 ('MetaSel ('Just "edValueType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceType)) :+: (C1 ('MetaCons "EDClass" 'PrefixI 'True) ((S1 ('MetaSel ('Just "edClassName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ProperName 'ClassName)) :*: (S1 ('MetaSel ('Just "edClassTypeArguments") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, Maybe SourceType)]) :*: S1 ('MetaSel ('Just "edClassMembers") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Ident, SourceType)]))) :*: (S1 ('MetaSel ('Just "edClassConstraints") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SourceConstraint]) :*: (S1 ('MetaSel ('Just "edFunctionalDependencies") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [FunctionalDependency]) :*: S1 ('MetaSel ('Just "edIsEmpty") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)))) :+: C1 ('MetaCons "EDInstance" 'PrefixI 'True) (((S1 ('MetaSel ('Just "edInstanceClassName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (ProperName 'ClassName))) :*: S1 ('MetaSel ('Just "edInstanceName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident)) :*: (S1 ('MetaSel ('Just "edInstanceForAll") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Text, SourceType)]) :*: (S1 ('MetaSel ('Just "edInstanceKinds") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SourceType]) :*: S1 ('MetaSel ('Just "edInstanceTypes") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [SourceType])))) :*: ((S1 ('MetaSel ('Just "edInstanceConstraints") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe [SourceConstraint])) :*: S1 ('MetaSel ('Just "edInstanceChain") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ChainId))) :*: (S1 ('MetaSel ('Just "edInstanceChainIndex") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer) :*: (S1 ('MetaSel ('Just "edInstanceNameSource") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 NameSource) :*: S1 ('MetaSel ('Just "edInstanceSourceSpan") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SourceSpan))))))))

data ExternsTypeFixity Source #

A type fixity declaration in an externs file

Constructors

ExternsTypeFixity 

Fields

Instances

Instances details
Generic ExternsTypeFixity Source # 
Instance details

Defined in Language.PureScript.Externs

Associated Types

type Rep ExternsTypeFixity :: Type -> Type #

Show ExternsTypeFixity Source # 
Instance details

Defined in Language.PureScript.Externs

Serialise ExternsTypeFixity Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsTypeFixity Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsTypeFixity = D1 ('MetaData "ExternsTypeFixity" "Language.PureScript.Externs" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "ExternsTypeFixity" 'PrefixI 'True) ((S1 ('MetaSel ('Just "efTypeAssociativity") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Associativity) :*: S1 ('MetaSel ('Just "efTypePrecedence") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Precedence)) :*: (S1 ('MetaSel ('Just "efTypeOperator") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (OpName 'TypeOpName)) :*: S1 ('MetaSel ('Just "efTypeAlias") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (ProperName 'TypeName))))))

data ExternsFixity Source #

A fixity declaration in an externs file

Constructors

ExternsFixity 

Fields

Instances

Instances details
Generic ExternsFixity Source # 
Instance details

Defined in Language.PureScript.Externs

Associated Types

type Rep ExternsFixity :: Type -> Type #

Show ExternsFixity Source # 
Instance details

Defined in Language.PureScript.Externs

Serialise ExternsFixity Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsFixity Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsFixity = D1 ('MetaData "ExternsFixity" "Language.PureScript.Externs" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "ExternsFixity" 'PrefixI 'True) ((S1 ('MetaSel ('Just "efAssociativity") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Associativity) :*: S1 ('MetaSel ('Just "efPrecedence") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Precedence)) :*: (S1 ('MetaSel ('Just "efOperator") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (OpName 'ValueOpName)) :*: S1 ('MetaSel ('Just "efAlias") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Qualified (Either Ident (ProperName 'ConstructorName)))))))

data ExternsImport Source #

A module import in an externs file

Constructors

ExternsImport 

Fields

Instances

Instances details
Generic ExternsImport Source # 
Instance details

Defined in Language.PureScript.Externs

Associated Types

type Rep ExternsImport :: Type -> Type #

Show ExternsImport Source # 
Instance details

Defined in Language.PureScript.Externs

Serialise ExternsImport Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsImport Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsImport = D1 ('MetaData "ExternsImport" "Language.PureScript.Externs" "purescript-0.15.9-73KndBh0GamC7RCYwFLhcE" 'False) (C1 ('MetaCons "ExternsImport" 'PrefixI 'True) (S1 ('MetaSel ('Just "eiModule") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ModuleName) :*: (S1 ('MetaSel ('Just "eiImportType") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ImportDeclarationType) :*: S1 ('MetaSel ('Just "eiImportedAs") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe ModuleName)))))

data ExternsFile Source #

The data which will be serialized to an externs file

Constructors

ExternsFile 

Fields

Instances

Instances details
Generic ExternsFile Source # 
Instance details

Defined in Language.PureScript.Externs

Associated Types

type Rep ExternsFile :: Type -> Type #

Show ExternsFile Source # 
Instance details

Defined in Language.PureScript.Externs

Serialise ExternsFile Source # 
Instance details

Defined in Language.PureScript.Externs

type Rep ExternsFile Source # 
Instance details

Defined in Language.PureScript.Externs

externsIsCurrentVersion :: ExternsFile -> Bool Source #

Check whether the version in an externs file matches the currently running version.

applyExternsFileToEnvironment :: ExternsFile -> Environment -> Environment Source #

Convert an externs file back into a module

moduleToExternsFile :: Module -> Environment -> Map Ident Ident -> ExternsFile Source #

Generate an externs file for all declarations in a module.

The `Map Ident Ident` argument should contain any top-level GenIdents that were rewritten to Idents when the module was compiled; this rewrite only happens in the CoreFn, not the original module AST, so it needs to be applied to the exported names here also. (The appropriate map is returned by renameInModule.)

desugarTypeClasses :: (MonadSupply m, MonadError MultipleErrors m) => [ExternsFile] -> Module -> m Module Source #

Add type synonym declarations for type class dictionary types, and value declarations for type class instance dictionary expressions.

typesOf :: (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => BindingGroupType -> ModuleName -> [((SourceAnn, Ident), Expr)] -> m [((SourceAnn, Ident), (Expr, SourceType))] Source #

Infer the types of multiple mutually-recursive values, and return elaborated values including type class dictionaries and type annotations.

checkNewtype :: forall m. MonadError MultipleErrors m => ProperName 'TypeName -> [DataConstructorDeclaration] -> m (DataConstructorDeclaration, (Ident, SourceType)) Source #

Check that a newtype has just one data constructor with just one field, or throw an error. If the newtype is valid, this function returns the single data constructor declaration and the single field, as a proof that the newtype was indeed a valid newtype.

typeCheckModule :: forall m. (MonadSupply m, MonadState CheckState m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => Map ModuleName Exports -> Module -> m Module Source #

Type check an entire module and ensure all types and classes defined within the module that are required by exported members are also exported.

deriveInstances :: forall m. (MonadError MultipleErrors m, MonadSupply m) => Module -> m Module Source #

Elaborates deriving instance declarations by code generation.

data RebracketCaller Source #

Indicates whether the rebracketModule is being called with the full desugar pass run via `purs compile` or whether only the partial desugar pass is run via `purs docs`. This indication is needed to prevent a `purs docs` error when using `case _ of` syntax in a type class instance.

desugarSignedLiterals :: Module -> Module Source #

Removes unary negation operators and replaces them with calls to negate.

rebracket :: forall m. MonadError MultipleErrors m => MonadSupply m => [ExternsFile] -> Module -> m Module Source #

Remove explicit parentheses and reorder binary operator applications.

This pass requires name desugaring and export elaboration to have run first.

rebracketFiltered :: forall m. MonadError MultipleErrors m => MonadSupply m => RebracketCaller -> (Declaration -> Bool) -> [ExternsFile] -> Module -> m Module Source #

A version of rebracket which allows you to choose which declarations should be affected. This is used in docs generation, where we want to desugar type operators in instance declarations to ensure that instances are paired up with their types correctly, but we don't want to desugar type operators in value declarations.

checkFixityExports :: forall m. MonadError MultipleErrors m => Module -> m Module Source #

Checks all the fixity exports within a module to ensure that members aliased by the operators are also exported from the module.

This pass requires name desugaring and export elaboration to have run first.

desugarImports :: forall m. (MonadError MultipleErrors m, MonadWriter MultipleErrors m, MonadState (Env, UsedImports) m) => Module -> m Module Source #

Replaces all local names with qualified names.

externsEnv :: forall m. (MonadError MultipleErrors m, MonadWriter MultipleErrors m) => Env -> ExternsFile -> m Env Source #

Create an environment from a collection of externs files

desugar :: MonadSupply m => MonadError MultipleErrors m => MonadWriter MultipleErrors m => MonadState (Env, UsedImports) m => [ExternsFile] -> Module -> m Module Source #

The desugaring pipeline proceeds as follows:

  • Remove signed literals in favour of negate applications
  • Desugar object literals with wildcards into lambdas
  • Desugar operator sections
  • Desugar do-notation
  • Desugar ado-notation
  • Desugar top-level case declarations into explicit case expressions
  • Desugar type declarations into value declarations with explicit type annotations
  • Qualify any unqualified names and types
  • Rebracket user-defined binary operators
  • Introduce newtypes for type class dictionaries and value declarations for instances
  • Group mutually recursive value and data declarations into binding groups.

newtype Make a Source #

A monad for running make actions

Instances

Instances details
MonadIO Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

liftIO :: IO a -> Make a #

Applicative Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

pure :: a -> Make a #

(<*>) :: Make (a -> b) -> Make a -> Make b #

liftA2 :: (a -> b -> c) -> Make a -> Make b -> Make c #

(*>) :: Make a -> Make b -> Make b #

(<*) :: Make a -> Make b -> Make a #

Functor Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

fmap :: (a -> b) -> Make a -> Make b #

(<$) :: a -> Make b -> Make a #

Monad Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

(>>=) :: Make a -> (a -> Make b) -> Make b #

(>>) :: Make a -> Make b -> Make b #

return :: a -> Make a #

MonadBaseControl IO Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Associated Types

type StM Make a #

Methods

liftBaseWith :: (RunInBase Make IO -> IO a) -> Make a #

restoreM :: StM Make a -> Make a #

MonadError MultipleErrors Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

MonadReader Options Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

ask :: Make Options #

local :: (Options -> Options) -> Make a -> Make a #

reader :: (Options -> a) -> Make a #

MonadWriter MultipleErrors Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

MonadBase IO Make Source # 
Instance details

Defined in Language.PureScript.Make.Monad

Methods

liftBase :: IO α -> Make α #

type StM Make a Source # 
Instance details

Defined in Language.PureScript.Make.Monad

runMake :: Options -> Make a -> IO (Either MultipleErrors a, MultipleErrors) Source #

Execute a Make monad, returning either errors, or the result of the compile plus any warnings.

makeIO :: (MonadIO m, MonadError MultipleErrors m) => Text -> IO a -> m a Source #

Run an IO action in the Make monad. The String argument should describe what we were trying to do; it is used for rendering errors in the case that an IOException is thrown.

getTimestamp :: (MonadIO m, MonadError MultipleErrors m) => FilePath -> m UTCTime Source #

Get a file's modification time in the Make monad, capturing any errors using the MonadError instance.

getTimestampMaybe :: (MonadIO m, MonadError MultipleErrors m) => FilePath -> m (Maybe UTCTime) Source #

Get a file's modification time in the Make monad, returning Nothing if the file does not exist.

readTextFile :: (MonadIO m, MonadError MultipleErrors m) => FilePath -> m Text Source #

Read a text file strictly in the Make monad, capturing any errors using the MonadError instance.

readJSONFile :: (MonadIO m, MonadError MultipleErrors m) => FromJSON a => FilePath -> m (Maybe a) Source #

Read a JSON file in the Make monad, returning Nothing if the file does not exist or could not be parsed. Errors are captured using the MonadError instance.

readCborFile :: (MonadIO m, MonadError MultipleErrors m) => Serialise a => FilePath -> m (Maybe a) Source #

Read a Cbor encoded file in the Make monad, returning Nothing if the file does not exist or could not be parsed. Errors are captured using the MonadError instance.

readExternsFile :: (MonadIO m, MonadError MultipleErrors m) => FilePath -> m (Maybe ExternsFile) Source #

Read an externs file, returning Nothing if the file does not exist, could not be parsed, or was generated by a different version of the compiler.

writeTextFile :: FilePath -> ByteString -> Make () Source #

Write a text file in the Make monad, capturing any errors using the MonadError instance.

writeJSONFile :: (MonadIO m, MonadError MultipleErrors m) => ToJSON a => FilePath -> a -> m () Source #

Write a JSON file in the Make monad, capturing any errors using the MonadError instance.

copyFile :: (MonadIO m, MonadError MultipleErrors m) => FilePath -> FilePath -> m () Source #

Copy a file in the Make monad, capturing any errors using the MonadError instance.

data MakeActions m Source #

Actions that require implementations when running in "make" mode.

This type exists to make two things abstract:

  • The particular backend being used (JavaScript, C++11, etc.)
  • The details of how files are read/written etc.

Constructors

MakeActions 

Fields

  • getInputTimestampsAndHashes :: ModuleName -> m (Either RebuildPolicy (Map FilePath (UTCTime, m ContentHash)))

    Get the timestamps and content hashes for the input files for a module. The content hash is returned as a monadic action so that the file does not have to be read if it's not necessary.

  • getOutputTimestamp :: ModuleName -> m (Maybe UTCTime)

    Get the time this module was last compiled, provided that all of the requested codegen targets were also produced then. The defaultMakeActions implementation uses the modification time of the externs file, because the externs file is written first and we always write one. If there is no externs file, or if any of the requested codegen targets were not produced the last time this module was compiled, this function must return Nothing; this indicates that the module will have to be recompiled.

  • readExterns :: ModuleName -> m (FilePath, Maybe ExternsFile)

    Read the externs file for a module as a string and also return the actual path for the file.

  • codegen :: Module Ann -> Module -> ExternsFile -> SupplyT m ()

    Run the code generator for the module and write any required output files.

  • ffiCodegen :: Module Ann -> m ()

    Check ffi and print it in the output directory.

  • progress :: ProgressMessage -> m ()

    Respond to a progress update.

  • readCacheDb :: m CacheDb

    Read the cache database (which contains timestamps and hashes for input files) from some external source, e.g. a file on disk.

  • writeCacheDb :: CacheDb -> m ()

    Write the given cache database to some external source (e.g. a file on disk).

  • writePackageJson :: m ()

    Write to the output directory the package.json file allowing Node.js to load .js files as ES modules.

  • outputPrimDocs :: m ()

    If generating docs, output the documentation for the Prim modules

renderProgressMessage :: Text -> ProgressMessage -> Text Source #

Render a progress message

cacheDbFile :: FilePath -> FilePath Source #

Given the output directory, determines the location for the CacheDb file

readCacheDb' Source #

Arguments

:: (MonadIO m, MonadError MultipleErrors m) 
=> FilePath

The path to the output directory

-> m CacheDb 

writeCacheDb' Source #

Arguments

:: (MonadIO m, MonadError MultipleErrors m) 
=> FilePath

The path to the output directory

-> CacheDb

The CacheDb to be written

-> m () 

buildMakeActions Source #

Arguments

:: FilePath

the output directory

-> Map ModuleName (Either RebuildPolicy FilePath)

a map between module names and paths to the file containing the PureScript module

-> Map ModuleName FilePath

a map between module name and the file containing the foreign javascript for the module

-> Bool

Generate a prefix comment?

-> MakeActions Make 

A set of make actions that read and write modules from the given directory.

checkForeignDecls :: Module ann -> FilePath -> Make (Either MultipleErrors (ForeignModuleType, Set Ident)) Source #

Check that the declarations in a given PureScript module match with those in its corresponding foreign module.

ffiCodegen' :: Map ModuleName FilePath -> Set CodegenTarget -> Maybe (ModuleName -> String -> FilePath) -> Module Ann -> Make () Source #

FFI check and codegen action. If path maker is supplied copies foreign module to the output.

rebuildModule :: forall m. (MonadBaseControl IO m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => MakeActions m -> [ExternsFile] -> Module -> m ExternsFile Source #

Rebuild a single module.

This function is used for fast-rebuild workflows (PSCi and psc-ide are examples).

make :: forall m. (MonadBaseControl IO m, MonadError MultipleErrors m, MonadWriter MultipleErrors m) => MakeActions m -> [PartialResult Module] -> m [ExternsFile] Source #

Compiles in "make" mode, compiling each module separately to a .js file and an externs.cbor file.

If timestamps or hashes have not changed, existing externs files can be used to provide upstream modules' types without having to typecheck those modules again.

inferForeignModules :: forall m. MonadIO m => Map ModuleName (Either RebuildPolicy FilePath) -> m (Map ModuleName FilePath) Source #

Infer the module name for a module by looking for the same filename with a .js extension.

graph :: [FilePath] -> IO (Either MultipleErrors Value, MultipleErrors) Source #

Given a set of filepaths, try to build the dependency graph and return that as its JSON representation (or a bunch of errors, if any)