module Language.PureScript.Values where
import Language.PureScript.Types
import Language.PureScript.Names
import Data.Data
type Guard = Value
data UnaryOperator
= Negate
| Not
| BitwiseNot
| Positive deriving (Show, Eq, Data, Typeable)
data BinaryOperator
= Add
| Subtract
| Multiply
| Divide
| Modulus
| EqualTo
| NotEqualTo
| LessThan
| LessThanOrEqualTo
| GreaterThan
| GreaterThanOrEqualTo
| And
| Or
| BitwiseAnd
| BitwiseOr
| BitwiseXor
| ShiftLeft
| ShiftRight
| ZeroFillShiftRight
| Concat deriving (Show, Eq, Data, Typeable)
data Value
= NumericLiteral (Either Integer Double)
| StringLiteral String
| BooleanLiteral Bool
| Unary UnaryOperator Value
| Binary BinaryOperator Value Value
| BinaryNoParens (Qualified Ident) Value Value
| Parens Value
| ArrayLiteral [Value]
| Indexer Value Value
| ObjectLiteral [(String, Value)]
| Accessor String Value
| ObjectUpdate Value [(String, Value)]
| Abs [Ident] Value
| App Value [Value]
| Var (Qualified Ident)
| IfThenElse Value Value Value
| Block [Statement]
| Constructor (Qualified ProperName)
| Case [Value] [([Binder], Maybe Guard, Value)]
| TypedValue Bool Value Type
| Do [DoNotationElement]
| TypeClassDictionary (Qualified ProperName, Type) [TypeClassDictionaryInScope] deriving (Show, Data, Typeable)
data TypeClassDictionaryType
= TCDRegular
| TCDAlias (Qualified Ident) deriving (Show, Eq, Data, Typeable)
data TypeClassDictionaryInScope
= TypeClassDictionaryInScope { tcdName :: Qualified Ident
, tcdClassName :: Qualified ProperName
, tcdInstanceType :: Type
, tcdDependencies :: Maybe [(Qualified ProperName, Type)]
, tcdType :: TypeClassDictionaryType
} deriving (Show, Data, Typeable)
data DoNotationElement
= DoNotationValue Value
| DoNotationBind Binder Value
| DoNotationLet Binder Value deriving (Show, Data, Typeable)
data Statement
= VariableIntroduction Ident Value
| Assignment Ident Value
| While Value [Statement]
| For Ident Value Value [Statement]
| If IfStatement
| Return Value deriving (Show, Data, Typeable)
data IfStatement = IfStatement Value [Statement] (Maybe ElseStatement) deriving (Show, Data, Typeable)
data ElseStatement
= Else [Statement]
| ElseIf IfStatement deriving (Show, Data, Typeable)
data Binder
= NullBinder
| BooleanBinder Bool
| StringBinder String
| NumberBinder (Either Integer Double)
| VarBinder Ident
| NullaryBinder (Qualified ProperName)
| UnaryBinder (Qualified ProperName) Binder
| ObjectBinder [(String, Binder)]
| ArrayBinder [Binder]
| ConsBinder Binder Binder
| NamedBinder Ident Binder deriving (Show, Data, Typeable)