| Copyright | (c) The University of Glasgow 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Jeffrey Young <jeffrey.young@iohk.io> Luite Stegeman <luite.stegeman@iohk.io> Sylvain Henry <sylvain.henry@iohk.io> Josh Meredith <josh.meredith@iohk.io> |
| Stability | experimental |
| Safe Haskell | None |
| Language | GHC2021 |
GHC.JS.Syntax
Description
Domain and Purpose
GHC.JS.Syntax defines the Syntax for the JS backend in GHC. It comports with the ECMA-262 although not every production rule of the standard is represented. Code in this module is a fork of JMacro (BSD 3 Clause) by Gershom Bazerman, heavily modified to accomodate GHC's constraints.
Strategy
Nothing fancy in this module, this is a classic deeply embedded AST for JS. We define numerous ADTs and pattern synonyms to make pattern matching and constructing ASTs easier.
Consumers
The entire JS backend consumes this module, e.g., the modules in GHC.StgToJS.*. Please see
Makefor a module which provides helper functions that use the deeply embedded DSL defined in this module to provide some of the benefits of a shallow embedding.
Synopsis
- data JStat
- = DeclStat !Ident !(Maybe JExpr)
- | ReturnStat JExpr
- | IfStat JExpr JStat JStat
- | WhileStat Bool JExpr JStat
- | ForStat JStat JExpr JStat JStat
- | ForInStat Bool Ident JExpr JStat
- | SwitchStat JExpr [(JExpr, JStat)] JStat
- | TryStat JStat Ident JStat JStat
- | BlockStat [JStat]
- | ApplStat JExpr [JExpr]
- | UOpStat UOp JExpr
- | AssignStat JExpr AOp JExpr
- | LabelStat JLabel JStat
- | BreakStat (Maybe JLabel)
- | ContinueStat (Maybe JLabel)
- | FuncStat !Ident [Ident] JStat
- data JExpr
- data JVal
- data Op
- = EqOp
- | StrictEqOp
- | NeqOp
- | StrictNeqOp
- | GtOp
- | GeOp
- | LtOp
- | LeOp
- | AddOp
- | SubOp
- | MulOp
- | DivOp
- | ModOp
- | LeftShiftOp
- | RightShiftOp
- | ZRightShiftOp
- | BAndOp
- | BOrOp
- | BXorOp
- | LAndOp
- | LOrOp
- | InstanceofOp
- | InOp
- data UOp
- data AOp
- newtype Ident = TxtI {}
- type JLabel = LexicalFastString
- pattern New :: JExpr -> JExpr
- pattern Not :: JExpr -> JExpr
- pattern Negate :: JExpr -> JExpr
- pattern Add :: JExpr -> JExpr -> JExpr
- pattern Sub :: JExpr -> JExpr -> JExpr
- pattern Mul :: JExpr -> JExpr -> JExpr
- pattern Div :: JExpr -> JExpr -> JExpr
- pattern Mod :: JExpr -> JExpr -> JExpr
- pattern BOr :: JExpr -> JExpr -> JExpr
- pattern BAnd :: JExpr -> JExpr -> JExpr
- pattern BXor :: JExpr -> JExpr -> JExpr
- pattern BNot :: JExpr -> JExpr
- pattern LOr :: JExpr -> JExpr -> JExpr
- pattern LAnd :: JExpr -> JExpr -> JExpr
- pattern Int :: Integer -> JExpr
- pattern String :: FastString -> JExpr
- pattern Var :: Ident -> JExpr
- pattern PreInc :: JExpr -> JExpr
- pattern PostInc :: JExpr -> JExpr
- pattern PreDec :: JExpr -> JExpr
- pattern PostDec :: JExpr -> JExpr
- newtype SaneDouble = SaneDouble {}
- var :: FastString -> JExpr
- true_ :: JExpr
- false_ :: JExpr
Deeply embedded JS datatypes
JavaScript statements, see the ECMA262 Reference for details
Constructors
| DeclStat !Ident !(Maybe JExpr) | Variable declarations: var foo [= e] |
| ReturnStat JExpr | Return |
| IfStat JExpr JStat JStat | If |
| WhileStat Bool JExpr JStat | While, bool is "do" when True |
| ForStat JStat JExpr JStat JStat | For |
| ForInStat Bool Ident JExpr JStat | For-in, bool is "each' when True |
| SwitchStat JExpr [(JExpr, JStat)] JStat | Switch |
| TryStat JStat Ident JStat JStat | Try |
| BlockStat [JStat] | Blocks |
| ApplStat JExpr [JExpr] | Application |
| UOpStat UOp JExpr | Unary operators |
| AssignStat JExpr AOp JExpr | |
| LabelStat JLabel JStat | Statement Labels, makes me nostalgic for qbasic |
| BreakStat (Maybe JLabel) | Break |
| ContinueStat (Maybe JLabel) | Continue |
| FuncStat !Ident [Ident] JStat | an explicit function definition |
Instances
JavaScript Expressions
Constructors
| ValExpr JVal | All values are trivially expressions |
| SelExpr JExpr Ident | Selection: Obj.foo, see |
| IdxExpr JExpr JExpr | Indexing: Obj[foo], see |
| InfixExpr Op JExpr JExpr | Infix Expressions, see |
| UOpExpr UOp JExpr | Unary Expressions |
| IfExpr JExpr JExpr JExpr | If-expression |
| ApplExpr JExpr [JExpr] | Application |
Instances
| JsToDoc JExpr # | |||||
| Binary JExpr # | |||||
Defined in GHC.StgToJS.Object | |||||
| Outputable JExpr # | |||||
Defined in GHC.JS.Ppr | |||||
| Eq JExpr # | |||||
| Generic JExpr # | |||||
Defined in GHC.JS.Syntax Associated Types
| |||||
| JsToDoc [JExpr] # | |||||
| type Rep JExpr # | |||||
Defined in GHC.JS.Syntax type Rep JExpr = D1 ('MetaData "JExpr" "GHC.JS.Syntax" "ghc-9.14.0.20251128-c82b" 'False) ((C1 ('MetaCons "ValExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JVal)) :+: (C1 ('MetaCons "SelExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident)) :+: C1 ('MetaCons "IdxExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr)))) :+: ((C1 ('MetaCons "InfixExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Op) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr))) :+: C1 ('MetaCons "UOpExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UOp) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr))) :+: (C1 ('MetaCons "IfExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr))) :+: C1 ('MetaCons "ApplExpr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JExpr) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [JExpr]))))) | |||||
JavaScript values
Constructors
| JVar Ident | A variable reference |
| JList [JExpr] | A JavaScript list, or what JS calls an Array |
| JDouble SaneDouble | A Double |
| JInt Integer | A BigInt |
| JStr FastString | A String |
| JRegEx FastString | A Regex |
| JBool Bool | A Boolean |
| JHash (UniqMap FastString JExpr) | A JS HashMap: |
| JFunc [Ident] JStat | A function |
Instances
| JsToDoc JVal # | |||||
| Binary JVal # | |||||
Defined in GHC.StgToJS.Object | |||||
| Outputable JVal # | |||||
Defined in GHC.JS.Ppr | |||||
| Eq JVal # | |||||
| Generic JVal # | |||||
Defined in GHC.JS.Syntax Associated Types
| |||||
| type Rep JVal # | |||||
Defined in GHC.JS.Syntax type Rep JVal = D1 ('MetaData "JVal" "GHC.JS.Syntax" "ghc-9.14.0.20251128-c82b" 'False) (((C1 ('MetaCons "JVar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Ident)) :+: C1 ('MetaCons "JList" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [JExpr]))) :+: (C1 ('MetaCons "JDouble" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 SaneDouble)) :+: C1 ('MetaCons "JInt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)))) :+: ((C1 ('MetaCons "JStr" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FastString)) :+: C1 ('MetaCons "JRegEx" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FastString))) :+: (C1 ('MetaCons "JBool" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool)) :+: (C1 ('MetaCons "JHash" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (UniqMap FastString JExpr))) :+: C1 ('MetaCons "JFunc" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Ident]) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 JStat)))))) | |||||
JS Binary Operators. We do not deeply embed the comma operator and the assignment operators
Constructors
| EqOp | Equality: |
| StrictEqOp | Strict Equality: |
| NeqOp | InEquality: |
| StrictNeqOp | Strict InEquality |
| GtOp | Greater Than: |
| GeOp | Greater Than or Equal: |
| LtOp | Less Than: < |
| LeOp | Less Than or Equal: <= |
| AddOp | Addition: + |
| SubOp | Subtraction: - |
| MulOp | Multiplication * |
| DivOp | Division: / |
| ModOp | Remainder: % |
| LeftShiftOp | Left Shift: << |
| RightShiftOp | Right Shift: >> |
| ZRightShiftOp | Unsigned RightShift: >>> |
| BAndOp | Bitwise And: & |
| BOrOp | Bitwise Or: | |
| BXorOp | Bitwise XOr: ^ |
| LAndOp | Logical And: && |
| LOrOp | Logical Or: || |
| InstanceofOp | instanceof |
| InOp | in |
Instances
| NFData Op # | |||||
Defined in GHC.JS.Syntax | |||||
| Binary Op # | |||||
Defined in GHC.StgToJS.Object | |||||
| Eq Op # | |||||
| Ord Op # | |||||
| Data Op # | |||||
Defined in GHC.JS.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Op -> c Op Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Op Source # toConstr :: Op -> Constr Source # dataTypeOf :: Op -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Op) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Op) Source # gmapT :: (forall b. Data b => b -> b) -> Op -> Op Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Op -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Op -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Op -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Op -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Op -> m Op Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Op -> m Op Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Op -> m Op Source # | |||||
| Enum Op # | |||||
Defined in GHC.JS.Syntax | |||||
| Generic Op # | |||||
Defined in GHC.JS.Syntax Associated Types
| |||||
| Show Op # | |||||
| type Rep Op # | |||||
Defined in GHC.JS.Syntax type Rep Op = D1 ('MetaData "Op" "GHC.JS.Syntax" "ghc-9.14.0.20251128-c82b" 'False) ((((C1 ('MetaCons "EqOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "StrictEqOp" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "NeqOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "StrictNeqOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "GtOp" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "GeOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "LtOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LeOp" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "AddOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SubOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MulOp" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "DivOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ModOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LeftShiftOp" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "RightShiftOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "ZRightShiftOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BAndOp" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "BOrOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "BXorOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "LAndOp" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "LOrOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "InstanceofOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "InOp" 'PrefixI 'False) (U1 :: Type -> Type)))))) | |||||
JS Unary Operators
Constructors
| NotOp | Logical Not: |
| BNotOp | Bitwise Not: |
| NegOp | Negation: |
| PlusOp | Unary Plus: |
| NewOp | new x |
| TypeofOp | typeof x |
| DeleteOp | delete x |
| YieldOp | yield x |
| VoidOp | void x |
| PreIncOp | Prefix Increment: |
| PostIncOp | Postfix Increment: |
| PreDecOp | Prefix Decrement: |
| PostDecOp | Postfix Decrement: |
Instances
| NFData UOp # | |||||
Defined in GHC.JS.Syntax | |||||
| Binary UOp # | |||||
Defined in GHC.StgToJS.Object | |||||
| Eq UOp # | |||||
| Ord UOp # | |||||
| Data UOp # | |||||
Defined in GHC.JS.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> UOp -> c UOp Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c UOp Source # toConstr :: UOp -> Constr Source # dataTypeOf :: UOp -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c UOp) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c UOp) Source # gmapT :: (forall b. Data b => b -> b) -> UOp -> UOp Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> UOp -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> UOp -> r Source # gmapQ :: (forall d. Data d => d -> u) -> UOp -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> UOp -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> UOp -> m UOp Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> UOp -> m UOp Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> UOp -> m UOp Source # | |||||
| Enum UOp # | |||||
Defined in GHC.JS.Syntax | |||||
| Generic UOp # | |||||
Defined in GHC.JS.Syntax Associated Types
| |||||
| Show UOp # | |||||
| type Rep UOp # | |||||
Defined in GHC.JS.Syntax type Rep UOp = D1 ('MetaData "UOp" "GHC.JS.Syntax" "ghc-9.14.0.20251128-c82b" 'False) (((C1 ('MetaCons "NotOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "BNotOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NegOp" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "PlusOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NewOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "TypeofOp" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "DeleteOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "YieldOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "VoidOp" 'PrefixI 'False) (U1 :: Type -> Type))) :+: ((C1 ('MetaCons "PreIncOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PostIncOp" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "PreDecOp" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "PostDecOp" 'PrefixI 'False) (U1 :: Type -> Type))))) | |||||
JS Unary Operators
Constructors
| AssignOp | Vanilla Assignment: = |
| AddAssignOp | Addition Assignment: += |
| SubAssignOp | Subtraction Assignment: -= |
Instances
| NFData AOp # | |||||
Defined in GHC.JS.Syntax | |||||
| Binary AOp # | |||||
Defined in GHC.StgToJS.Object | |||||
| Eq AOp # | |||||
| Ord AOp # | |||||
| Data AOp # | |||||
Defined in GHC.JS.Syntax Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> AOp -> c AOp Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c AOp Source # toConstr :: AOp -> Constr Source # dataTypeOf :: AOp -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c AOp) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AOp) Source # gmapT :: (forall b. Data b => b -> b) -> AOp -> AOp Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> AOp -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> AOp -> r Source # gmapQ :: (forall d. Data d => d -> u) -> AOp -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> AOp -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> AOp -> m AOp Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> AOp -> m AOp Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> AOp -> m AOp Source # | |||||
| Enum AOp # | |||||
Defined in GHC.JS.Syntax | |||||
| Generic AOp # | |||||
Defined in GHC.JS.Syntax Associated Types
| |||||
| Show AOp # | |||||
| type Rep AOp # | |||||
Defined in GHC.JS.Syntax | |||||
A newtype wrapper around FastString for JS identifiers.
Constructors
| TxtI | |
Fields | |
Instances
| JVarMagic Ident # | |
Defined in GHC.JS.Make | |
| ToJExpr Ident # | |
Defined in GHC.JS.Make | |
| JsToDoc Ident # | |
| Uniquable Ident # | |
Defined in GHC.JS.Ident | |
| Binary Ident # | |
Defined in GHC.StgToJS.Object | |
| Outputable Ident # | |
Defined in GHC.JS.Ident | |
| Eq Ident # | |
| Show Ident # | |
type JLabel = LexicalFastString #
A Label used for JStat, specifically BreakStat, ContinueStat and of
course LabelStat
pattern synonyms over JS operators
pattern String :: FastString -> JExpr #
pattern synonym to create string values
Utility
newtype SaneDouble #
A newtype wrapper around Double to ensure we never generate a Double
that becomes a NaN, see instances for details on sanity.
Constructors
| SaneDouble | |
Fields | |
Instances
| Binary SaneDouble # | |
Defined in GHC.Types.SaneDouble Methods put_ :: WriteBinHandle -> SaneDouble -> IO () # put :: WriteBinHandle -> SaneDouble -> IO (Bin SaneDouble) # get :: ReadBinHandle -> IO SaneDouble # | |
| Eq SaneDouble # | |
Defined in GHC.Types.SaneDouble Methods (==) :: SaneDouble -> SaneDouble -> Bool Source # (/=) :: SaneDouble -> SaneDouble -> Bool Source # | |
| Ord SaneDouble # | |
Defined in GHC.Types.SaneDouble Methods compare :: SaneDouble -> SaneDouble -> Ordering Source # (<) :: SaneDouble -> SaneDouble -> Bool Source # (<=) :: SaneDouble -> SaneDouble -> Bool Source # (>) :: SaneDouble -> SaneDouble -> Bool Source # (>=) :: SaneDouble -> SaneDouble -> Bool Source # max :: SaneDouble -> SaneDouble -> SaneDouble Source # min :: SaneDouble -> SaneDouble -> SaneDouble Source # | |
| Num SaneDouble # | |
Defined in GHC.Types.SaneDouble Methods (+) :: SaneDouble -> SaneDouble -> SaneDouble Source # (-) :: SaneDouble -> SaneDouble -> SaneDouble Source # (*) :: SaneDouble -> SaneDouble -> SaneDouble Source # negate :: SaneDouble -> SaneDouble Source # abs :: SaneDouble -> SaneDouble Source # signum :: SaneDouble -> SaneDouble Source # fromInteger :: Integer -> SaneDouble Source # | |
| Fractional SaneDouble # | |
Defined in GHC.Types.SaneDouble Methods (/) :: SaneDouble -> SaneDouble -> SaneDouble Source # recip :: SaneDouble -> SaneDouble Source # fromRational :: Rational -> SaneDouble Source # | |
| Show SaneDouble # | |
Defined in GHC.Types.SaneDouble | |
var :: FastString -> JExpr #
construct a JS variable reference