{-# LANGUAGE DeriveDataTypeable, FlexibleInstances #-}

module Language.JavaScript.Parser.AST
    ( JSExpression (..)
    , JSAnnot (..)
    , JSBinOp (..)
    , JSUnaryOp (..)
    , JSSemi (..)
    , JSAssignOp (..)
    , JSTryCatch (..)
    , JSTryFinally (..)
    , JSStatement (..)
    , JSBlock (..)
    , JSSwitchParts (..)
    , JSAST (..)
    , JSObjectProperty (..)
    , JSPropertyName (..)
    , JSObjectPropertyList
    , JSAccessor (..)
    , JSMethodDefinition (..)
    , JSIdent (..)
    , JSVarInitializer (..)
    , JSArrayElement (..)
    , JSCommaList (..)
    , JSCommaTrailingList (..)
    , JSArrowParameterList (..)
    , JSTemplatePart (..)
    , JSClassHeritage (..)
    , JSClassElement (..)

    -- Modules
    , JSModuleItem (..)
    , JSImportDeclaration (..)
    , JSImportClause (..)
    , JSFromClause (..)
    , JSImportNameSpace (..)
    , JSImportsNamed (..)
    , JSImportSpecifier (..)
    , JSExportDeclaration (..)
    , JSExportClause (..)
    , JSExportSpecifier (..)

    , binOpEq
    , showStripped
    ) where

import Data.Data
import Data.List
import Language.JavaScript.Parser.SrcLocation (TokenPosn (..))
import Language.JavaScript.Parser.Token

-- ---------------------------------------------------------------------

data JSAnnot
    = JSAnnot !TokenPosn ![CommentAnnotation] -- ^Annotation: position and comment/whitespace information
    | JSAnnotSpace -- ^A single space character
    | JSNoAnnot -- ^No annotation
    deriving (Typeable JSAnnot
Typeable JSAnnot =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSAnnot -> c JSAnnot)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSAnnot)
-> (JSAnnot -> Constr)
-> (JSAnnot -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSAnnot))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAnnot))
-> ((forall b. Data b => b -> b) -> JSAnnot -> JSAnnot)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAnnot -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAnnot -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSAnnot -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSAnnot -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot)
-> Data JSAnnot
JSAnnot -> Constr
JSAnnot -> DataType
(forall b. Data b => b -> b) -> JSAnnot -> JSAnnot
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSAnnot -> u
forall u. (forall d. Data d => d -> u) -> JSAnnot -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAnnot
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAnnot -> c JSAnnot
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAnnot)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAnnot)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAnnot -> c JSAnnot
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAnnot -> c JSAnnot
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAnnot
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAnnot
$ctoConstr :: JSAnnot -> Constr
toConstr :: JSAnnot -> Constr
$cdataTypeOf :: JSAnnot -> DataType
dataTypeOf :: JSAnnot -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAnnot)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAnnot)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAnnot)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAnnot)
$cgmapT :: (forall b. Data b => b -> b) -> JSAnnot -> JSAnnot
gmapT :: (forall b. Data b => b -> b) -> JSAnnot -> JSAnnot
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAnnot -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSAnnot -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSAnnot -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAnnot -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAnnot -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAnnot -> m JSAnnot
Data, JSAnnot -> JSAnnot -> Bool
(JSAnnot -> JSAnnot -> Bool)
-> (JSAnnot -> JSAnnot -> Bool) -> Eq JSAnnot
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSAnnot -> JSAnnot -> Bool
== :: JSAnnot -> JSAnnot -> Bool
$c/= :: JSAnnot -> JSAnnot -> Bool
/= :: JSAnnot -> JSAnnot -> Bool
Eq, Int -> JSAnnot -> ShowS
[JSAnnot] -> ShowS
JSAnnot -> String
(Int -> JSAnnot -> ShowS)
-> (JSAnnot -> String) -> ([JSAnnot] -> ShowS) -> Show JSAnnot
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSAnnot -> ShowS
showsPrec :: Int -> JSAnnot -> ShowS
$cshow :: JSAnnot -> String
show :: JSAnnot -> String
$cshowList :: [JSAnnot] -> ShowS
showList :: [JSAnnot] -> ShowS
Show, Typeable)


data JSAST
    = JSAstProgram ![JSStatement] !JSAnnot -- ^source elements, trailing whitespace
    | JSAstModule ![JSModuleItem] !JSAnnot
    | JSAstStatement !JSStatement !JSAnnot
    | JSAstExpression !JSExpression !JSAnnot
    | JSAstLiteral !JSExpression !JSAnnot
    deriving (Typeable JSAST
Typeable JSAST =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSAST -> c JSAST)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSAST)
-> (JSAST -> Constr)
-> (JSAST -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSAST))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAST))
-> ((forall b. Data b => b -> b) -> JSAST -> JSAST)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSAST -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSAST -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSAST -> m JSAST)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAST -> m JSAST)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAST -> m JSAST)
-> Data JSAST
JSAST -> Constr
JSAST -> DataType
(forall b. Data b => b -> b) -> JSAST -> JSAST
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSAST -> u
forall u. (forall d. Data d => d -> u) -> JSAST -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAST
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAST -> c JSAST
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAST)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAST)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAST -> c JSAST
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAST -> c JSAST
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAST
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAST
$ctoConstr :: JSAST -> Constr
toConstr :: JSAST -> Constr
$cdataTypeOf :: JSAST -> DataType
dataTypeOf :: JSAST -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAST)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAST)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAST)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAST)
$cgmapT :: (forall b. Data b => b -> b) -> JSAST -> JSAST
gmapT :: (forall b. Data b => b -> b) -> JSAST -> JSAST
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSAST -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSAST -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSAST -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAST -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAST -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAST -> m JSAST
Data, JSAST -> JSAST -> Bool
(JSAST -> JSAST -> Bool) -> (JSAST -> JSAST -> Bool) -> Eq JSAST
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSAST -> JSAST -> Bool
== :: JSAST -> JSAST -> Bool
$c/= :: JSAST -> JSAST -> Bool
/= :: JSAST -> JSAST -> Bool
Eq, Int -> JSAST -> ShowS
[JSAST] -> ShowS
JSAST -> String
(Int -> JSAST -> ShowS)
-> (JSAST -> String) -> ([JSAST] -> ShowS) -> Show JSAST
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSAST -> ShowS
showsPrec :: Int -> JSAST -> ShowS
$cshow :: JSAST -> String
show :: JSAST -> String
$cshowList :: [JSAST] -> ShowS
showList :: [JSAST] -> ShowS
Show, Typeable)

-- Shift AST
-- https://github.com/shapesecurity/shift-spec/blob/83498b92c436180cc0e2115b225a68c08f43c53e/spec.idl#L229-L234
data JSModuleItem
    = JSModuleImportDeclaration !JSAnnot !JSImportDeclaration -- ^import,decl
    | JSModuleExportDeclaration !JSAnnot !JSExportDeclaration -- ^export,decl
    | JSModuleStatementListItem !JSStatement
    deriving (Typeable JSModuleItem
Typeable JSModuleItem =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSModuleItem -> c JSModuleItem)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSModuleItem)
-> (JSModuleItem -> Constr)
-> (JSModuleItem -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSModuleItem))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSModuleItem))
-> ((forall b. Data b => b -> b) -> JSModuleItem -> JSModuleItem)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSModuleItem -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSModuleItem -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem)
-> Data JSModuleItem
JSModuleItem -> Constr
JSModuleItem -> DataType
(forall b. Data b => b -> b) -> JSModuleItem -> JSModuleItem
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSModuleItem -> u
forall u. (forall d. Data d => d -> u) -> JSModuleItem -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSModuleItem
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSModuleItem -> c JSModuleItem
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSModuleItem)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSModuleItem)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSModuleItem -> c JSModuleItem
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSModuleItem -> c JSModuleItem
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSModuleItem
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSModuleItem
$ctoConstr :: JSModuleItem -> Constr
toConstr :: JSModuleItem -> Constr
$cdataTypeOf :: JSModuleItem -> DataType
dataTypeOf :: JSModuleItem -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSModuleItem)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSModuleItem)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSModuleItem)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSModuleItem)
$cgmapT :: (forall b. Data b => b -> b) -> JSModuleItem -> JSModuleItem
gmapT :: (forall b. Data b => b -> b) -> JSModuleItem -> JSModuleItem
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSModuleItem -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSModuleItem -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSModuleItem -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSModuleItem -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSModuleItem -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSModuleItem -> m JSModuleItem
Data, JSModuleItem -> JSModuleItem -> Bool
(JSModuleItem -> JSModuleItem -> Bool)
-> (JSModuleItem -> JSModuleItem -> Bool) -> Eq JSModuleItem
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSModuleItem -> JSModuleItem -> Bool
== :: JSModuleItem -> JSModuleItem -> Bool
$c/= :: JSModuleItem -> JSModuleItem -> Bool
/= :: JSModuleItem -> JSModuleItem -> Bool
Eq, Int -> JSModuleItem -> ShowS
[JSModuleItem] -> ShowS
JSModuleItem -> String
(Int -> JSModuleItem -> ShowS)
-> (JSModuleItem -> String)
-> ([JSModuleItem] -> ShowS)
-> Show JSModuleItem
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSModuleItem -> ShowS
showsPrec :: Int -> JSModuleItem -> ShowS
$cshow :: JSModuleItem -> String
show :: JSModuleItem -> String
$cshowList :: [JSModuleItem] -> ShowS
showList :: [JSModuleItem] -> ShowS
Show, Typeable)

data JSImportDeclaration
    = JSImportDeclaration !JSImportClause !JSFromClause !JSSemi -- ^imports, module, semi
    | JSImportDeclarationBare !JSAnnot !String !JSSemi -- ^module, module, semi
    deriving (Typeable JSImportDeclaration
Typeable JSImportDeclaration =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSImportDeclaration
 -> c JSImportDeclaration)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSImportDeclaration)
-> (JSImportDeclaration -> Constr)
-> (JSImportDeclaration -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSImportDeclaration))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSImportDeclaration))
-> ((forall b. Data b => b -> b)
    -> JSImportDeclaration -> JSImportDeclaration)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSImportDeclaration -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSImportDeclaration -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSImportDeclaration -> m JSImportDeclaration)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportDeclaration -> m JSImportDeclaration)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportDeclaration -> m JSImportDeclaration)
-> Data JSImportDeclaration
JSImportDeclaration -> Constr
JSImportDeclaration -> DataType
(forall b. Data b => b -> b)
-> JSImportDeclaration -> JSImportDeclaration
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSImportDeclaration -> u
forall u.
(forall d. Data d => d -> u) -> JSImportDeclaration -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportDeclaration
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSImportDeclaration
-> c JSImportDeclaration
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportDeclaration)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportDeclaration)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSImportDeclaration
-> c JSImportDeclaration
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSImportDeclaration
-> c JSImportDeclaration
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportDeclaration
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportDeclaration
$ctoConstr :: JSImportDeclaration -> Constr
toConstr :: JSImportDeclaration -> Constr
$cdataTypeOf :: JSImportDeclaration -> DataType
dataTypeOf :: JSImportDeclaration -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportDeclaration)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportDeclaration)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportDeclaration)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportDeclaration)
$cgmapT :: (forall b. Data b => b -> b)
-> JSImportDeclaration -> JSImportDeclaration
gmapT :: (forall b. Data b => b -> b)
-> JSImportDeclaration -> JSImportDeclaration
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportDeclaration -> r
$cgmapQ :: forall u.
(forall d. Data d => d -> u) -> JSImportDeclaration -> [u]
gmapQ :: forall u.
(forall d. Data d => d -> u) -> JSImportDeclaration -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportDeclaration -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportDeclaration -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportDeclaration -> m JSImportDeclaration
Data, JSImportDeclaration -> JSImportDeclaration -> Bool
(JSImportDeclaration -> JSImportDeclaration -> Bool)
-> (JSImportDeclaration -> JSImportDeclaration -> Bool)
-> Eq JSImportDeclaration
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSImportDeclaration -> JSImportDeclaration -> Bool
== :: JSImportDeclaration -> JSImportDeclaration -> Bool
$c/= :: JSImportDeclaration -> JSImportDeclaration -> Bool
/= :: JSImportDeclaration -> JSImportDeclaration -> Bool
Eq, Int -> JSImportDeclaration -> ShowS
[JSImportDeclaration] -> ShowS
JSImportDeclaration -> String
(Int -> JSImportDeclaration -> ShowS)
-> (JSImportDeclaration -> String)
-> ([JSImportDeclaration] -> ShowS)
-> Show JSImportDeclaration
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSImportDeclaration -> ShowS
showsPrec :: Int -> JSImportDeclaration -> ShowS
$cshow :: JSImportDeclaration -> String
show :: JSImportDeclaration -> String
$cshowList :: [JSImportDeclaration] -> ShowS
showList :: [JSImportDeclaration] -> ShowS
Show, Typeable)

data JSImportClause
    = JSImportClauseDefault !JSIdent -- ^default
    | JSImportClauseNameSpace !JSImportNameSpace -- ^namespace
    | JSImportClauseNamed !JSImportsNamed -- ^named imports
    | JSImportClauseDefaultNameSpace !JSIdent !JSAnnot !JSImportNameSpace -- ^default, comma, namespace
    | JSImportClauseDefaultNamed !JSIdent !JSAnnot !JSImportsNamed -- ^default, comma, named imports
    deriving (Typeable JSImportClause
Typeable JSImportClause =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSImportClause -> c JSImportClause)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSImportClause)
-> (JSImportClause -> Constr)
-> (JSImportClause -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSImportClause))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSImportClause))
-> ((forall b. Data b => b -> b)
    -> JSImportClause -> JSImportClause)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportClause -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportClause -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSImportClause -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSImportClause -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSImportClause -> m JSImportClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportClause -> m JSImportClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportClause -> m JSImportClause)
-> Data JSImportClause
JSImportClause -> Constr
JSImportClause -> DataType
(forall b. Data b => b -> b) -> JSImportClause -> JSImportClause
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSImportClause -> u
forall u. (forall d. Data d => d -> u) -> JSImportClause -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportClause
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportClause -> c JSImportClause
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportClause)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportClause)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportClause -> c JSImportClause
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportClause -> c JSImportClause
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportClause
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportClause
$ctoConstr :: JSImportClause -> Constr
toConstr :: JSImportClause -> Constr
$cdataTypeOf :: JSImportClause -> DataType
dataTypeOf :: JSImportClause -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportClause)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportClause)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportClause)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportClause)
$cgmapT :: (forall b. Data b => b -> b) -> JSImportClause -> JSImportClause
gmapT :: (forall b. Data b => b -> b) -> JSImportClause -> JSImportClause
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportClause -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportClause -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportClause -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportClause -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportClause -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportClause -> m JSImportClause
Data, JSImportClause -> JSImportClause -> Bool
(JSImportClause -> JSImportClause -> Bool)
-> (JSImportClause -> JSImportClause -> Bool) -> Eq JSImportClause
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSImportClause -> JSImportClause -> Bool
== :: JSImportClause -> JSImportClause -> Bool
$c/= :: JSImportClause -> JSImportClause -> Bool
/= :: JSImportClause -> JSImportClause -> Bool
Eq, Int -> JSImportClause -> ShowS
[JSImportClause] -> ShowS
JSImportClause -> String
(Int -> JSImportClause -> ShowS)
-> (JSImportClause -> String)
-> ([JSImportClause] -> ShowS)
-> Show JSImportClause
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSImportClause -> ShowS
showsPrec :: Int -> JSImportClause -> ShowS
$cshow :: JSImportClause -> String
show :: JSImportClause -> String
$cshowList :: [JSImportClause] -> ShowS
showList :: [JSImportClause] -> ShowS
Show, Typeable)

data JSFromClause
    = JSFromClause !JSAnnot !JSAnnot !String -- ^ from, string literal, string literal contents
    deriving (Typeable JSFromClause
Typeable JSFromClause =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSFromClause -> c JSFromClause)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSFromClause)
-> (JSFromClause -> Constr)
-> (JSFromClause -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSFromClause))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSFromClause))
-> ((forall b. Data b => b -> b) -> JSFromClause -> JSFromClause)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSFromClause -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSFromClause -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSFromClause -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSFromClause -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause)
-> Data JSFromClause
JSFromClause -> Constr
JSFromClause -> DataType
(forall b. Data b => b -> b) -> JSFromClause -> JSFromClause
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSFromClause -> u
forall u. (forall d. Data d => d -> u) -> JSFromClause -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSFromClause
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSFromClause -> c JSFromClause
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSFromClause)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSFromClause)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSFromClause -> c JSFromClause
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSFromClause -> c JSFromClause
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSFromClause
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSFromClause
$ctoConstr :: JSFromClause -> Constr
toConstr :: JSFromClause -> Constr
$cdataTypeOf :: JSFromClause -> DataType
dataTypeOf :: JSFromClause -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSFromClause)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSFromClause)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSFromClause)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSFromClause)
$cgmapT :: (forall b. Data b => b -> b) -> JSFromClause -> JSFromClause
gmapT :: (forall b. Data b => b -> b) -> JSFromClause -> JSFromClause
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSFromClause -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSFromClause -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSFromClause -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSFromClause -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSFromClause -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSFromClause -> m JSFromClause
Data, JSFromClause -> JSFromClause -> Bool
(JSFromClause -> JSFromClause -> Bool)
-> (JSFromClause -> JSFromClause -> Bool) -> Eq JSFromClause
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSFromClause -> JSFromClause -> Bool
== :: JSFromClause -> JSFromClause -> Bool
$c/= :: JSFromClause -> JSFromClause -> Bool
/= :: JSFromClause -> JSFromClause -> Bool
Eq, Int -> JSFromClause -> ShowS
[JSFromClause] -> ShowS
JSFromClause -> String
(Int -> JSFromClause -> ShowS)
-> (JSFromClause -> String)
-> ([JSFromClause] -> ShowS)
-> Show JSFromClause
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSFromClause -> ShowS
showsPrec :: Int -> JSFromClause -> ShowS
$cshow :: JSFromClause -> String
show :: JSFromClause -> String
$cshowList :: [JSFromClause] -> ShowS
showList :: [JSFromClause] -> ShowS
Show, Typeable)

-- | Import namespace, e.g. '* as whatever'
data JSImportNameSpace
    = JSImportNameSpace !JSBinOp !JSAnnot !JSIdent -- ^ *, as, ident
    deriving (Typeable JSImportNameSpace
Typeable JSImportNameSpace =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSImportNameSpace
 -> c JSImportNameSpace)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSImportNameSpace)
-> (JSImportNameSpace -> Constr)
-> (JSImportNameSpace -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSImportNameSpace))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSImportNameSpace))
-> ((forall b. Data b => b -> b)
    -> JSImportNameSpace -> JSImportNameSpace)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSImportNameSpace -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSImportNameSpace -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSImportNameSpace -> m JSImportNameSpace)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportNameSpace -> m JSImportNameSpace)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportNameSpace -> m JSImportNameSpace)
-> Data JSImportNameSpace
JSImportNameSpace -> Constr
JSImportNameSpace -> DataType
(forall b. Data b => b -> b)
-> JSImportNameSpace -> JSImportNameSpace
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSImportNameSpace -> u
forall u. (forall d. Data d => d -> u) -> JSImportNameSpace -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportNameSpace
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportNameSpace -> c JSImportNameSpace
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportNameSpace)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportNameSpace)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportNameSpace -> c JSImportNameSpace
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportNameSpace -> c JSImportNameSpace
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportNameSpace
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportNameSpace
$ctoConstr :: JSImportNameSpace -> Constr
toConstr :: JSImportNameSpace -> Constr
$cdataTypeOf :: JSImportNameSpace -> DataType
dataTypeOf :: JSImportNameSpace -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportNameSpace)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportNameSpace)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportNameSpace)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportNameSpace)
$cgmapT :: (forall b. Data b => b -> b)
-> JSImportNameSpace -> JSImportNameSpace
gmapT :: (forall b. Data b => b -> b)
-> JSImportNameSpace -> JSImportNameSpace
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportNameSpace -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportNameSpace -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportNameSpace -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportNameSpace -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportNameSpace -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportNameSpace -> m JSImportNameSpace
Data, JSImportNameSpace -> JSImportNameSpace -> Bool
(JSImportNameSpace -> JSImportNameSpace -> Bool)
-> (JSImportNameSpace -> JSImportNameSpace -> Bool)
-> Eq JSImportNameSpace
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSImportNameSpace -> JSImportNameSpace -> Bool
== :: JSImportNameSpace -> JSImportNameSpace -> Bool
$c/= :: JSImportNameSpace -> JSImportNameSpace -> Bool
/= :: JSImportNameSpace -> JSImportNameSpace -> Bool
Eq, Int -> JSImportNameSpace -> ShowS
[JSImportNameSpace] -> ShowS
JSImportNameSpace -> String
(Int -> JSImportNameSpace -> ShowS)
-> (JSImportNameSpace -> String)
-> ([JSImportNameSpace] -> ShowS)
-> Show JSImportNameSpace
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSImportNameSpace -> ShowS
showsPrec :: Int -> JSImportNameSpace -> ShowS
$cshow :: JSImportNameSpace -> String
show :: JSImportNameSpace -> String
$cshowList :: [JSImportNameSpace] -> ShowS
showList :: [JSImportNameSpace] -> ShowS
Show, Typeable)

-- | Named imports, e.g. '{ foo, bar, baz as quux }'
data JSImportsNamed
    = JSImportsNamed !JSAnnot !(JSCommaList JSImportSpecifier) !JSAnnot -- ^lb, specifiers, rb
    deriving (Typeable JSImportsNamed
Typeable JSImportsNamed =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSImportsNamed -> c JSImportsNamed)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSImportsNamed)
-> (JSImportsNamed -> Constr)
-> (JSImportsNamed -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSImportsNamed))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSImportsNamed))
-> ((forall b. Data b => b -> b)
    -> JSImportsNamed -> JSImportsNamed)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSImportsNamed -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSImportsNamed -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSImportsNamed -> m JSImportsNamed)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportsNamed -> m JSImportsNamed)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportsNamed -> m JSImportsNamed)
-> Data JSImportsNamed
JSImportsNamed -> Constr
JSImportsNamed -> DataType
(forall b. Data b => b -> b) -> JSImportsNamed -> JSImportsNamed
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSImportsNamed -> u
forall u. (forall d. Data d => d -> u) -> JSImportsNamed -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportsNamed
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportsNamed -> c JSImportsNamed
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportsNamed)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportsNamed)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportsNamed -> c JSImportsNamed
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportsNamed -> c JSImportsNamed
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportsNamed
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportsNamed
$ctoConstr :: JSImportsNamed -> Constr
toConstr :: JSImportsNamed -> Constr
$cdataTypeOf :: JSImportsNamed -> DataType
dataTypeOf :: JSImportsNamed -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportsNamed)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportsNamed)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportsNamed)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportsNamed)
$cgmapT :: (forall b. Data b => b -> b) -> JSImportsNamed -> JSImportsNamed
gmapT :: (forall b. Data b => b -> b) -> JSImportsNamed -> JSImportsNamed
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportsNamed -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportsNamed -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportsNamed -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportsNamed -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportsNamed -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportsNamed -> m JSImportsNamed
Data, JSImportsNamed -> JSImportsNamed -> Bool
(JSImportsNamed -> JSImportsNamed -> Bool)
-> (JSImportsNamed -> JSImportsNamed -> Bool) -> Eq JSImportsNamed
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSImportsNamed -> JSImportsNamed -> Bool
== :: JSImportsNamed -> JSImportsNamed -> Bool
$c/= :: JSImportsNamed -> JSImportsNamed -> Bool
/= :: JSImportsNamed -> JSImportsNamed -> Bool
Eq, Int -> JSImportsNamed -> ShowS
[JSImportsNamed] -> ShowS
JSImportsNamed -> String
(Int -> JSImportsNamed -> ShowS)
-> (JSImportsNamed -> String)
-> ([JSImportsNamed] -> ShowS)
-> Show JSImportsNamed
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSImportsNamed -> ShowS
showsPrec :: Int -> JSImportsNamed -> ShowS
$cshow :: JSImportsNamed -> String
show :: JSImportsNamed -> String
$cshowList :: [JSImportsNamed] -> ShowS
showList :: [JSImportsNamed] -> ShowS
Show, Typeable)

-- |
-- Note that this data type is separate from ExportSpecifier because the
-- grammar is slightly different (e.g. in handling of reserved words).
data JSImportSpecifier
    = JSImportSpecifier !JSIdent -- ^ident
    | JSImportSpecifierAs !JSIdent !JSAnnot !JSIdent -- ^ident, as, ident
    deriving (Typeable JSImportSpecifier
Typeable JSImportSpecifier =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSImportSpecifier
 -> c JSImportSpecifier)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSImportSpecifier)
-> (JSImportSpecifier -> Constr)
-> (JSImportSpecifier -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSImportSpecifier))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSImportSpecifier))
-> ((forall b. Data b => b -> b)
    -> JSImportSpecifier -> JSImportSpecifier)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSImportSpecifier -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSImportSpecifier -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSImportSpecifier -> m JSImportSpecifier)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportSpecifier -> m JSImportSpecifier)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSImportSpecifier -> m JSImportSpecifier)
-> Data JSImportSpecifier
JSImportSpecifier -> Constr
JSImportSpecifier -> DataType
(forall b. Data b => b -> b)
-> JSImportSpecifier -> JSImportSpecifier
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSImportSpecifier -> u
forall u. (forall d. Data d => d -> u) -> JSImportSpecifier -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportSpecifier
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportSpecifier -> c JSImportSpecifier
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportSpecifier)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportSpecifier)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportSpecifier -> c JSImportSpecifier
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSImportSpecifier -> c JSImportSpecifier
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportSpecifier
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSImportSpecifier
$ctoConstr :: JSImportSpecifier -> Constr
toConstr :: JSImportSpecifier -> Constr
$cdataTypeOf :: JSImportSpecifier -> DataType
dataTypeOf :: JSImportSpecifier -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportSpecifier)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSImportSpecifier)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportSpecifier)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSImportSpecifier)
$cgmapT :: (forall b. Data b => b -> b)
-> JSImportSpecifier -> JSImportSpecifier
gmapT :: (forall b. Data b => b -> b)
-> JSImportSpecifier -> JSImportSpecifier
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSImportSpecifier -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportSpecifier -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSImportSpecifier -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportSpecifier -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSImportSpecifier -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSImportSpecifier -> m JSImportSpecifier
Data, JSImportSpecifier -> JSImportSpecifier -> Bool
(JSImportSpecifier -> JSImportSpecifier -> Bool)
-> (JSImportSpecifier -> JSImportSpecifier -> Bool)
-> Eq JSImportSpecifier
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSImportSpecifier -> JSImportSpecifier -> Bool
== :: JSImportSpecifier -> JSImportSpecifier -> Bool
$c/= :: JSImportSpecifier -> JSImportSpecifier -> Bool
/= :: JSImportSpecifier -> JSImportSpecifier -> Bool
Eq, Int -> JSImportSpecifier -> ShowS
[JSImportSpecifier] -> ShowS
JSImportSpecifier -> String
(Int -> JSImportSpecifier -> ShowS)
-> (JSImportSpecifier -> String)
-> ([JSImportSpecifier] -> ShowS)
-> Show JSImportSpecifier
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSImportSpecifier -> ShowS
showsPrec :: Int -> JSImportSpecifier -> ShowS
$cshow :: JSImportSpecifier -> String
show :: JSImportSpecifier -> String
$cshowList :: [JSImportSpecifier] -> ShowS
showList :: [JSImportSpecifier] -> ShowS
Show, Typeable)

data JSExportDeclaration
    -- = JSExportAllFrom
    = JSExportFrom JSExportClause JSFromClause !JSSemi -- ^exports, module, semi
    | JSExportLocals JSExportClause !JSSemi -- ^exports, autosemi
    | JSExport !JSStatement !JSSemi -- ^body, autosemi
    -- | JSExportDefault
    deriving (Typeable JSExportDeclaration
Typeable JSExportDeclaration =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSExportDeclaration
 -> c JSExportDeclaration)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSExportDeclaration)
-> (JSExportDeclaration -> Constr)
-> (JSExportDeclaration -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSExportDeclaration))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSExportDeclaration))
-> ((forall b. Data b => b -> b)
    -> JSExportDeclaration -> JSExportDeclaration)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSExportDeclaration -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSExportDeclaration -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSExportDeclaration -> m JSExportDeclaration)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportDeclaration -> m JSExportDeclaration)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportDeclaration -> m JSExportDeclaration)
-> Data JSExportDeclaration
JSExportDeclaration -> Constr
JSExportDeclaration -> DataType
(forall b. Data b => b -> b)
-> JSExportDeclaration -> JSExportDeclaration
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSExportDeclaration -> u
forall u.
(forall d. Data d => d -> u) -> JSExportDeclaration -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportDeclaration
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSExportDeclaration
-> c JSExportDeclaration
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportDeclaration)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportDeclaration)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSExportDeclaration
-> c JSExportDeclaration
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSExportDeclaration
-> c JSExportDeclaration
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportDeclaration
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportDeclaration
$ctoConstr :: JSExportDeclaration -> Constr
toConstr :: JSExportDeclaration -> Constr
$cdataTypeOf :: JSExportDeclaration -> DataType
dataTypeOf :: JSExportDeclaration -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportDeclaration)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportDeclaration)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportDeclaration)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportDeclaration)
$cgmapT :: (forall b. Data b => b -> b)
-> JSExportDeclaration -> JSExportDeclaration
gmapT :: (forall b. Data b => b -> b)
-> JSExportDeclaration -> JSExportDeclaration
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportDeclaration -> r
$cgmapQ :: forall u.
(forall d. Data d => d -> u) -> JSExportDeclaration -> [u]
gmapQ :: forall u.
(forall d. Data d => d -> u) -> JSExportDeclaration -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportDeclaration -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportDeclaration -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportDeclaration -> m JSExportDeclaration
Data, JSExportDeclaration -> JSExportDeclaration -> Bool
(JSExportDeclaration -> JSExportDeclaration -> Bool)
-> (JSExportDeclaration -> JSExportDeclaration -> Bool)
-> Eq JSExportDeclaration
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSExportDeclaration -> JSExportDeclaration -> Bool
== :: JSExportDeclaration -> JSExportDeclaration -> Bool
$c/= :: JSExportDeclaration -> JSExportDeclaration -> Bool
/= :: JSExportDeclaration -> JSExportDeclaration -> Bool
Eq, Int -> JSExportDeclaration -> ShowS
[JSExportDeclaration] -> ShowS
JSExportDeclaration -> String
(Int -> JSExportDeclaration -> ShowS)
-> (JSExportDeclaration -> String)
-> ([JSExportDeclaration] -> ShowS)
-> Show JSExportDeclaration
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSExportDeclaration -> ShowS
showsPrec :: Int -> JSExportDeclaration -> ShowS
$cshow :: JSExportDeclaration -> String
show :: JSExportDeclaration -> String
$cshowList :: [JSExportDeclaration] -> ShowS
showList :: [JSExportDeclaration] -> ShowS
Show, Typeable)

data JSExportClause
    = JSExportClause !JSAnnot !(JSCommaList JSExportSpecifier) !JSAnnot -- ^lb, specifiers, rb
    deriving (Typeable JSExportClause
Typeable JSExportClause =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSExportClause -> c JSExportClause)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSExportClause)
-> (JSExportClause -> Constr)
-> (JSExportClause -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSExportClause))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSExportClause))
-> ((forall b. Data b => b -> b)
    -> JSExportClause -> JSExportClause)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportClause -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportClause -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSExportClause -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSExportClause -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSExportClause -> m JSExportClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportClause -> m JSExportClause)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportClause -> m JSExportClause)
-> Data JSExportClause
JSExportClause -> Constr
JSExportClause -> DataType
(forall b. Data b => b -> b) -> JSExportClause -> JSExportClause
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSExportClause -> u
forall u. (forall d. Data d => d -> u) -> JSExportClause -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportClause
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportClause -> c JSExportClause
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportClause)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportClause)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportClause -> c JSExportClause
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportClause -> c JSExportClause
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportClause
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportClause
$ctoConstr :: JSExportClause -> Constr
toConstr :: JSExportClause -> Constr
$cdataTypeOf :: JSExportClause -> DataType
dataTypeOf :: JSExportClause -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportClause)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportClause)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportClause)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportClause)
$cgmapT :: (forall b. Data b => b -> b) -> JSExportClause -> JSExportClause
gmapT :: (forall b. Data b => b -> b) -> JSExportClause -> JSExportClause
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportClause -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSExportClause -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSExportClause -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportClause -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportClause -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportClause -> m JSExportClause
Data, JSExportClause -> JSExportClause -> Bool
(JSExportClause -> JSExportClause -> Bool)
-> (JSExportClause -> JSExportClause -> Bool) -> Eq JSExportClause
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSExportClause -> JSExportClause -> Bool
== :: JSExportClause -> JSExportClause -> Bool
$c/= :: JSExportClause -> JSExportClause -> Bool
/= :: JSExportClause -> JSExportClause -> Bool
Eq, Int -> JSExportClause -> ShowS
[JSExportClause] -> ShowS
JSExportClause -> String
(Int -> JSExportClause -> ShowS)
-> (JSExportClause -> String)
-> ([JSExportClause] -> ShowS)
-> Show JSExportClause
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSExportClause -> ShowS
showsPrec :: Int -> JSExportClause -> ShowS
$cshow :: JSExportClause -> String
show :: JSExportClause -> String
$cshowList :: [JSExportClause] -> ShowS
showList :: [JSExportClause] -> ShowS
Show, Typeable)

data JSExportSpecifier
    = JSExportSpecifier !JSIdent -- ^ident
    | JSExportSpecifierAs !JSIdent !JSAnnot !JSIdent -- ^ident1, as, ident2
    deriving (Typeable JSExportSpecifier
Typeable JSExportSpecifier =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSExportSpecifier
 -> c JSExportSpecifier)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSExportSpecifier)
-> (JSExportSpecifier -> Constr)
-> (JSExportSpecifier -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSExportSpecifier))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSExportSpecifier))
-> ((forall b. Data b => b -> b)
    -> JSExportSpecifier -> JSExportSpecifier)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSExportSpecifier -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSExportSpecifier -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSExportSpecifier -> m JSExportSpecifier)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportSpecifier -> m JSExportSpecifier)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSExportSpecifier -> m JSExportSpecifier)
-> Data JSExportSpecifier
JSExportSpecifier -> Constr
JSExportSpecifier -> DataType
(forall b. Data b => b -> b)
-> JSExportSpecifier -> JSExportSpecifier
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSExportSpecifier -> u
forall u. (forall d. Data d => d -> u) -> JSExportSpecifier -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportSpecifier
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportSpecifier -> c JSExportSpecifier
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportSpecifier)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportSpecifier)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportSpecifier -> c JSExportSpecifier
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExportSpecifier -> c JSExportSpecifier
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportSpecifier
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExportSpecifier
$ctoConstr :: JSExportSpecifier -> Constr
toConstr :: JSExportSpecifier -> Constr
$cdataTypeOf :: JSExportSpecifier -> DataType
dataTypeOf :: JSExportSpecifier -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportSpecifier)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExportSpecifier)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportSpecifier)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExportSpecifier)
$cgmapT :: (forall b. Data b => b -> b)
-> JSExportSpecifier -> JSExportSpecifier
gmapT :: (forall b. Data b => b -> b)
-> JSExportSpecifier -> JSExportSpecifier
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExportSpecifier -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSExportSpecifier -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSExportSpecifier -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportSpecifier -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSExportSpecifier -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSExportSpecifier -> m JSExportSpecifier
Data, JSExportSpecifier -> JSExportSpecifier -> Bool
(JSExportSpecifier -> JSExportSpecifier -> Bool)
-> (JSExportSpecifier -> JSExportSpecifier -> Bool)
-> Eq JSExportSpecifier
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSExportSpecifier -> JSExportSpecifier -> Bool
== :: JSExportSpecifier -> JSExportSpecifier -> Bool
$c/= :: JSExportSpecifier -> JSExportSpecifier -> Bool
/= :: JSExportSpecifier -> JSExportSpecifier -> Bool
Eq, Int -> JSExportSpecifier -> ShowS
[JSExportSpecifier] -> ShowS
JSExportSpecifier -> String
(Int -> JSExportSpecifier -> ShowS)
-> (JSExportSpecifier -> String)
-> ([JSExportSpecifier] -> ShowS)
-> Show JSExportSpecifier
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSExportSpecifier -> ShowS
showsPrec :: Int -> JSExportSpecifier -> ShowS
$cshow :: JSExportSpecifier -> String
show :: JSExportSpecifier -> String
$cshowList :: [JSExportSpecifier] -> ShowS
showList :: [JSExportSpecifier] -> ShowS
Show, Typeable)

data JSStatement
    = JSStatementBlock !JSAnnot ![JSStatement] !JSAnnot !JSSemi     -- ^lbrace, stmts, rbrace, autosemi
    | JSBreak !JSAnnot !JSIdent !JSSemi        -- ^break,optional identifier, autosemi
    | JSLet   !JSAnnot !(JSCommaList JSExpression) !JSSemi -- ^const, decl, autosemi
    | JSClass !JSAnnot !JSIdent !JSClassHeritage !JSAnnot ![JSClassElement] !JSAnnot !JSSemi -- ^class, name, optional extends clause, lb, body, rb, autosemi
    | JSConstant !JSAnnot !(JSCommaList JSExpression) !JSSemi -- ^const, decl, autosemi
    | JSContinue !JSAnnot !JSIdent !JSSemi     -- ^continue, optional identifier,autosemi
    | JSDoWhile !JSAnnot !JSStatement !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSSemi -- ^do,stmt,while,lb,expr,rb,autosemi
    | JSFor !JSAnnot !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSStatement -- ^for,lb,expr,semi,expr,semi,expr,rb.stmt
    | JSForIn !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,expr,in,expr,rb,stmt
    | JSForVar !JSAnnot !JSAnnot !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSStatement -- ^for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
    | JSForVarIn !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSForLet !JSAnnot !JSAnnot !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSStatement -- ^for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
    | JSForLetIn !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSForLetOf !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSForConst !JSAnnot !JSAnnot !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSStatement -- ^for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
    | JSForConstIn !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSForConstOf !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSForOf !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,expr,in,expr,rb,stmt
    | JSForVarOf !JSAnnot !JSAnnot !JSAnnot !JSExpression !JSBinOp !JSExpression !JSAnnot !JSStatement -- ^for,lb,var,vardecl,in,expr,rb,stmt
    | JSAsyncFunction !JSAnnot !JSAnnot !JSIdent !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock !JSSemi  -- ^fn,name, lb,parameter list,rb,block,autosemi
    | JSFunction !JSAnnot !JSIdent !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock !JSSemi  -- ^fn,name, lb,parameter list,rb,block,autosemi
    | JSGenerator !JSAnnot !JSAnnot !JSIdent !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock !JSSemi  -- ^fn,*,name, lb,parameter list,rb,block,autosemi
    | JSIf !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSStatement -- ^if,(,expr,),stmt
    | JSIfElse !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSStatement !JSAnnot !JSStatement -- ^if,(,expr,),stmt,else,rest
    | JSLabelled !JSIdent !JSAnnot !JSStatement -- ^identifier,colon,stmt
    | JSEmptyStatement !JSAnnot
    | JSExpressionStatement !JSExpression !JSSemi
    | JSAssignStatement !JSExpression !JSAssignOp !JSExpression !JSSemi -- ^lhs, assignop, rhs, autosemi
    | JSMethodCall !JSExpression !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSSemi
    | JSReturn !JSAnnot !(Maybe JSExpression) !JSSemi -- ^optional expression,autosemi
    | JSSwitch !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSAnnot ![JSSwitchParts] !JSAnnot !JSSemi -- ^switch,lb,expr,rb,caseblock,autosemi
    | JSThrow !JSAnnot !JSExpression !JSSemi -- ^throw val autosemi
    | JSTry !JSAnnot !JSBlock ![JSTryCatch] !JSTryFinally -- ^try,block,catches,finally
    | JSVariable !JSAnnot !(JSCommaList JSExpression) !JSSemi -- ^var, decl, autosemi
    | JSWhile !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSStatement -- ^while,lb,expr,rb,stmt
    | JSWith !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSStatement !JSSemi -- ^with,lb,expr,rb,stmt list
    deriving (Typeable JSStatement
Typeable JSStatement =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSStatement -> c JSStatement)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSStatement)
-> (JSStatement -> Constr)
-> (JSStatement -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSStatement))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSStatement))
-> ((forall b. Data b => b -> b) -> JSStatement -> JSStatement)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSStatement -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSStatement -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSStatement -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSStatement -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSStatement -> m JSStatement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSStatement -> m JSStatement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSStatement -> m JSStatement)
-> Data JSStatement
JSStatement -> Constr
JSStatement -> DataType
(forall b. Data b => b -> b) -> JSStatement -> JSStatement
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSStatement -> u
forall u. (forall d. Data d => d -> u) -> JSStatement -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSStatement
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSStatement -> c JSStatement
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSStatement)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSStatement)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSStatement -> c JSStatement
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSStatement -> c JSStatement
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSStatement
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSStatement
$ctoConstr :: JSStatement -> Constr
toConstr :: JSStatement -> Constr
$cdataTypeOf :: JSStatement -> DataType
dataTypeOf :: JSStatement -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSStatement)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSStatement)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSStatement)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSStatement)
$cgmapT :: (forall b. Data b => b -> b) -> JSStatement -> JSStatement
gmapT :: (forall b. Data b => b -> b) -> JSStatement -> JSStatement
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSStatement -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSStatement -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSStatement -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSStatement -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSStatement -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSStatement -> m JSStatement
Data, JSStatement -> JSStatement -> Bool
(JSStatement -> JSStatement -> Bool)
-> (JSStatement -> JSStatement -> Bool) -> Eq JSStatement
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSStatement -> JSStatement -> Bool
== :: JSStatement -> JSStatement -> Bool
$c/= :: JSStatement -> JSStatement -> Bool
/= :: JSStatement -> JSStatement -> Bool
Eq, Int -> JSStatement -> ShowS
[JSStatement] -> ShowS
JSStatement -> String
(Int -> JSStatement -> ShowS)
-> (JSStatement -> String)
-> ([JSStatement] -> ShowS)
-> Show JSStatement
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSStatement -> ShowS
showsPrec :: Int -> JSStatement -> ShowS
$cshow :: JSStatement -> String
show :: JSStatement -> String
$cshowList :: [JSStatement] -> ShowS
showList :: [JSStatement] -> ShowS
Show, Typeable)

data JSExpression
    -- | Terminals
    = JSIdentifier !JSAnnot !String
    | JSDecimal !JSAnnot !String
    | JSLiteral !JSAnnot !String
    | JSHexInteger !JSAnnot !String
    | JSOctal !JSAnnot !String
    | JSStringLiteral !JSAnnot !String
    | JSRegEx !JSAnnot !String

    -- | Non Terminals
    | JSArrayLiteral !JSAnnot ![JSArrayElement] !JSAnnot -- ^lb, contents, rb
    | JSAssignExpression !JSExpression !JSAssignOp !JSExpression -- ^lhs, assignop, rhs
    | JSAwaitExpression !JSAnnot !JSExpression -- ^await, expr
    | JSCallExpression !JSExpression !JSAnnot !(JSCommaList JSExpression) !JSAnnot  -- ^expr, bl, args, rb
    | JSCallExpressionDot !JSExpression !JSAnnot !JSExpression  -- ^expr, dot, expr
    | JSCallExpressionSquare !JSExpression !JSAnnot !JSExpression !JSAnnot  -- ^expr, [, expr, ]
    | JSClassExpression !JSAnnot !JSIdent !JSClassHeritage !JSAnnot ![JSClassElement] !JSAnnot -- ^class, optional identifier, optional extends clause, lb, body, rb
    | JSCommaExpression !JSExpression !JSAnnot !JSExpression          -- ^expression components
    | JSExpressionBinary !JSExpression !JSBinOp !JSExpression -- ^lhs, op, rhs
    | JSExpressionParen !JSAnnot !JSExpression !JSAnnot -- ^lb,expression,rb
    | JSExpressionPostfix !JSExpression !JSUnaryOp -- ^expression, operator
    | JSExpressionTernary !JSExpression !JSAnnot !JSExpression !JSAnnot !JSExpression -- ^cond, ?, trueval, :, falseval
    | JSArrowExpression !JSArrowParameterList !JSAnnot !JSStatement -- ^parameter list,arrow,block`
    | JSFunctionExpression !JSAnnot !JSIdent !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock -- ^fn,name,lb, parameter list,rb,block`
    | JSGeneratorExpression !JSAnnot !JSAnnot !JSIdent !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock -- ^fn,*,name,lb, parameter list,rb,block`
    | JSMemberDot !JSExpression !JSAnnot !JSExpression -- ^firstpart, dot, name
    | JSMemberExpression !JSExpression !JSAnnot !(JSCommaList JSExpression) !JSAnnot -- expr, lb, args, rb
    | JSMemberNew !JSAnnot !JSExpression !JSAnnot !(JSCommaList JSExpression) !JSAnnot -- ^new, name, lb, args, rb
    | JSMemberSquare !JSExpression !JSAnnot !JSExpression !JSAnnot -- ^firstpart, lb, expr, rb
    | JSNewExpression !JSAnnot !JSExpression -- ^new, expr
    | JSObjectLiteral !JSAnnot !JSObjectPropertyList !JSAnnot -- ^lbrace contents rbrace
    | JSSpreadExpression !JSAnnot !JSExpression
    | JSTemplateLiteral !(Maybe JSExpression) !JSAnnot !String ![JSTemplatePart] -- ^optional tag, lquot, head, parts
    | JSUnaryExpression !JSUnaryOp !JSExpression
    | JSVarInitExpression !JSExpression !JSVarInitializer -- ^identifier, initializer
    | JSYieldExpression !JSAnnot !(Maybe JSExpression) -- ^yield, optional expr
    | JSYieldFromExpression !JSAnnot !JSAnnot !JSExpression -- ^yield, *, expr
    deriving (Typeable JSExpression
Typeable JSExpression =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSExpression -> c JSExpression)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSExpression)
-> (JSExpression -> Constr)
-> (JSExpression -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSExpression))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSExpression))
-> ((forall b. Data b => b -> b) -> JSExpression -> JSExpression)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExpression -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSExpression -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSExpression -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSExpression -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSExpression -> m JSExpression)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSExpression -> m JSExpression)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSExpression -> m JSExpression)
-> Data JSExpression
JSExpression -> Constr
JSExpression -> DataType
(forall b. Data b => b -> b) -> JSExpression -> JSExpression
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSExpression -> u
forall u. (forall d. Data d => d -> u) -> JSExpression -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExpression
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExpression -> c JSExpression
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExpression)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExpression)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExpression -> c JSExpression
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSExpression -> c JSExpression
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExpression
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSExpression
$ctoConstr :: JSExpression -> Constr
toConstr :: JSExpression -> Constr
$cdataTypeOf :: JSExpression -> DataType
dataTypeOf :: JSExpression -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExpression)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSExpression)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExpression)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSExpression)
$cgmapT :: (forall b. Data b => b -> b) -> JSExpression -> JSExpression
gmapT :: (forall b. Data b => b -> b) -> JSExpression -> JSExpression
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSExpression -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSExpression -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSExpression -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSExpression -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSExpression -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSExpression -> m JSExpression
Data, JSExpression -> JSExpression -> Bool
(JSExpression -> JSExpression -> Bool)
-> (JSExpression -> JSExpression -> Bool) -> Eq JSExpression
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSExpression -> JSExpression -> Bool
== :: JSExpression -> JSExpression -> Bool
$c/= :: JSExpression -> JSExpression -> Bool
/= :: JSExpression -> JSExpression -> Bool
Eq, Int -> JSExpression -> ShowS
[JSExpression] -> ShowS
JSExpression -> String
(Int -> JSExpression -> ShowS)
-> (JSExpression -> String)
-> ([JSExpression] -> ShowS)
-> Show JSExpression
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSExpression -> ShowS
showsPrec :: Int -> JSExpression -> ShowS
$cshow :: JSExpression -> String
show :: JSExpression -> String
$cshowList :: [JSExpression] -> ShowS
showList :: [JSExpression] -> ShowS
Show, Typeable)

data JSArrowParameterList
    = JSUnparenthesizedArrowParameter !JSIdent
    | JSParenthesizedArrowParameterList !JSAnnot !(JSCommaList JSExpression) !JSAnnot
    deriving (Typeable JSArrowParameterList
Typeable JSArrowParameterList =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSArrowParameterList
 -> c JSArrowParameterList)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSArrowParameterList)
-> (JSArrowParameterList -> Constr)
-> (JSArrowParameterList -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSArrowParameterList))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSArrowParameterList))
-> ((forall b. Data b => b -> b)
    -> JSArrowParameterList -> JSArrowParameterList)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSArrowParameterList -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSArrowParameterList -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSArrowParameterList -> m JSArrowParameterList)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSArrowParameterList -> m JSArrowParameterList)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSArrowParameterList -> m JSArrowParameterList)
-> Data JSArrowParameterList
JSArrowParameterList -> Constr
JSArrowParameterList -> DataType
(forall b. Data b => b -> b)
-> JSArrowParameterList -> JSArrowParameterList
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSArrowParameterList -> u
forall u.
(forall d. Data d => d -> u) -> JSArrowParameterList -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrowParameterList
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSArrowParameterList
-> c JSArrowParameterList
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrowParameterList)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrowParameterList)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSArrowParameterList
-> c JSArrowParameterList
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSArrowParameterList
-> c JSArrowParameterList
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrowParameterList
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrowParameterList
$ctoConstr :: JSArrowParameterList -> Constr
toConstr :: JSArrowParameterList -> Constr
$cdataTypeOf :: JSArrowParameterList -> DataType
dataTypeOf :: JSArrowParameterList -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrowParameterList)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrowParameterList)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrowParameterList)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrowParameterList)
$cgmapT :: (forall b. Data b => b -> b)
-> JSArrowParameterList -> JSArrowParameterList
gmapT :: (forall b. Data b => b -> b)
-> JSArrowParameterList -> JSArrowParameterList
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrowParameterList -> r
$cgmapQ :: forall u.
(forall d. Data d => d -> u) -> JSArrowParameterList -> [u]
gmapQ :: forall u.
(forall d. Data d => d -> u) -> JSArrowParameterList -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSArrowParameterList -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSArrowParameterList -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrowParameterList -> m JSArrowParameterList
Data, JSArrowParameterList -> JSArrowParameterList -> Bool
(JSArrowParameterList -> JSArrowParameterList -> Bool)
-> (JSArrowParameterList -> JSArrowParameterList -> Bool)
-> Eq JSArrowParameterList
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSArrowParameterList -> JSArrowParameterList -> Bool
== :: JSArrowParameterList -> JSArrowParameterList -> Bool
$c/= :: JSArrowParameterList -> JSArrowParameterList -> Bool
/= :: JSArrowParameterList -> JSArrowParameterList -> Bool
Eq, Int -> JSArrowParameterList -> ShowS
[JSArrowParameterList] -> ShowS
JSArrowParameterList -> String
(Int -> JSArrowParameterList -> ShowS)
-> (JSArrowParameterList -> String)
-> ([JSArrowParameterList] -> ShowS)
-> Show JSArrowParameterList
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSArrowParameterList -> ShowS
showsPrec :: Int -> JSArrowParameterList -> ShowS
$cshow :: JSArrowParameterList -> String
show :: JSArrowParameterList -> String
$cshowList :: [JSArrowParameterList] -> ShowS
showList :: [JSArrowParameterList] -> ShowS
Show, Typeable)

data JSBinOp
    = JSBinOpAnd !JSAnnot
    | JSBinOpBitAnd !JSAnnot
    | JSBinOpBitOr !JSAnnot
    | JSBinOpBitXor !JSAnnot
    | JSBinOpDivide !JSAnnot
    | JSBinOpEq !JSAnnot
    | JSBinOpGe !JSAnnot
    | JSBinOpGt !JSAnnot
    | JSBinOpIn !JSAnnot
    | JSBinOpInstanceOf !JSAnnot
    | JSBinOpLe !JSAnnot
    | JSBinOpLsh !JSAnnot
    | JSBinOpLt !JSAnnot
    | JSBinOpMinus !JSAnnot
    | JSBinOpMod !JSAnnot
    | JSBinOpNeq !JSAnnot
    | JSBinOpOf !JSAnnot
    | JSBinOpOr !JSAnnot
    | JSBinOpPlus !JSAnnot
    | JSBinOpRsh !JSAnnot
    | JSBinOpStrictEq !JSAnnot
    | JSBinOpStrictNeq !JSAnnot
    | JSBinOpTimes !JSAnnot
    | JSBinOpUrsh !JSAnnot
    deriving (Typeable JSBinOp
Typeable JSBinOp =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSBinOp -> c JSBinOp)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSBinOp)
-> (JSBinOp -> Constr)
-> (JSBinOp -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSBinOp))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBinOp))
-> ((forall b. Data b => b -> b) -> JSBinOp -> JSBinOp)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSBinOp -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSBinOp -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSBinOp -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSBinOp -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp)
-> Data JSBinOp
JSBinOp -> Constr
JSBinOp -> DataType
(forall b. Data b => b -> b) -> JSBinOp -> JSBinOp
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSBinOp -> u
forall u. (forall d. Data d => d -> u) -> JSBinOp -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBinOp
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBinOp -> c JSBinOp
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBinOp)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBinOp)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBinOp -> c JSBinOp
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBinOp -> c JSBinOp
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBinOp
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBinOp
$ctoConstr :: JSBinOp -> Constr
toConstr :: JSBinOp -> Constr
$cdataTypeOf :: JSBinOp -> DataType
dataTypeOf :: JSBinOp -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBinOp)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBinOp)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBinOp)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBinOp)
$cgmapT :: (forall b. Data b => b -> b) -> JSBinOp -> JSBinOp
gmapT :: (forall b. Data b => b -> b) -> JSBinOp -> JSBinOp
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBinOp -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSBinOp -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSBinOp -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSBinOp -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSBinOp -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBinOp -> m JSBinOp
Data, JSBinOp -> JSBinOp -> Bool
(JSBinOp -> JSBinOp -> Bool)
-> (JSBinOp -> JSBinOp -> Bool) -> Eq JSBinOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSBinOp -> JSBinOp -> Bool
== :: JSBinOp -> JSBinOp -> Bool
$c/= :: JSBinOp -> JSBinOp -> Bool
/= :: JSBinOp -> JSBinOp -> Bool
Eq, Int -> JSBinOp -> ShowS
[JSBinOp] -> ShowS
JSBinOp -> String
(Int -> JSBinOp -> ShowS)
-> (JSBinOp -> String) -> ([JSBinOp] -> ShowS) -> Show JSBinOp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSBinOp -> ShowS
showsPrec :: Int -> JSBinOp -> ShowS
$cshow :: JSBinOp -> String
show :: JSBinOp -> String
$cshowList :: [JSBinOp] -> ShowS
showList :: [JSBinOp] -> ShowS
Show, Typeable)

data JSUnaryOp
    = JSUnaryOpDecr !JSAnnot
    | JSUnaryOpDelete !JSAnnot
    | JSUnaryOpIncr !JSAnnot
    | JSUnaryOpMinus !JSAnnot
    | JSUnaryOpNot !JSAnnot
    | JSUnaryOpPlus !JSAnnot
    | JSUnaryOpTilde !JSAnnot
    | JSUnaryOpTypeof !JSAnnot
    | JSUnaryOpVoid !JSAnnot
    deriving (Typeable JSUnaryOp
Typeable JSUnaryOp =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSUnaryOp -> c JSUnaryOp)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSUnaryOp)
-> (JSUnaryOp -> Constr)
-> (JSUnaryOp -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSUnaryOp))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSUnaryOp))
-> ((forall b. Data b => b -> b) -> JSUnaryOp -> JSUnaryOp)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSUnaryOp -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSUnaryOp -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp)
-> Data JSUnaryOp
JSUnaryOp -> Constr
JSUnaryOp -> DataType
(forall b. Data b => b -> b) -> JSUnaryOp -> JSUnaryOp
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSUnaryOp -> u
forall u. (forall d. Data d => d -> u) -> JSUnaryOp -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSUnaryOp
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSUnaryOp -> c JSUnaryOp
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSUnaryOp)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSUnaryOp)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSUnaryOp -> c JSUnaryOp
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSUnaryOp -> c JSUnaryOp
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSUnaryOp
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSUnaryOp
$ctoConstr :: JSUnaryOp -> Constr
toConstr :: JSUnaryOp -> Constr
$cdataTypeOf :: JSUnaryOp -> DataType
dataTypeOf :: JSUnaryOp -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSUnaryOp)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSUnaryOp)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSUnaryOp)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSUnaryOp)
$cgmapT :: (forall b. Data b => b -> b) -> JSUnaryOp -> JSUnaryOp
gmapT :: (forall b. Data b => b -> b) -> JSUnaryOp -> JSUnaryOp
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSUnaryOp -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSUnaryOp -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSUnaryOp -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSUnaryOp -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSUnaryOp -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSUnaryOp -> m JSUnaryOp
Data, JSUnaryOp -> JSUnaryOp -> Bool
(JSUnaryOp -> JSUnaryOp -> Bool)
-> (JSUnaryOp -> JSUnaryOp -> Bool) -> Eq JSUnaryOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSUnaryOp -> JSUnaryOp -> Bool
== :: JSUnaryOp -> JSUnaryOp -> Bool
$c/= :: JSUnaryOp -> JSUnaryOp -> Bool
/= :: JSUnaryOp -> JSUnaryOp -> Bool
Eq, Int -> JSUnaryOp -> ShowS
[JSUnaryOp] -> ShowS
JSUnaryOp -> String
(Int -> JSUnaryOp -> ShowS)
-> (JSUnaryOp -> String)
-> ([JSUnaryOp] -> ShowS)
-> Show JSUnaryOp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSUnaryOp -> ShowS
showsPrec :: Int -> JSUnaryOp -> ShowS
$cshow :: JSUnaryOp -> String
show :: JSUnaryOp -> String
$cshowList :: [JSUnaryOp] -> ShowS
showList :: [JSUnaryOp] -> ShowS
Show, Typeable)

data JSSemi
    = JSSemi !JSAnnot
    | JSSemiAuto
    deriving (Typeable JSSemi
Typeable JSSemi =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSSemi -> c JSSemi)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSSemi)
-> (JSSemi -> Constr)
-> (JSSemi -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSSemi))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSSemi))
-> ((forall b. Data b => b -> b) -> JSSemi -> JSSemi)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSSemi -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSSemi -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSSemi -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSSemi -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSSemi -> m JSSemi)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSSemi -> m JSSemi)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSSemi -> m JSSemi)
-> Data JSSemi
JSSemi -> Constr
JSSemi -> DataType
(forall b. Data b => b -> b) -> JSSemi -> JSSemi
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSSemi -> u
forall u. (forall d. Data d => d -> u) -> JSSemi -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSemi
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSemi -> c JSSemi
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSemi)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSSemi)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSemi -> c JSSemi
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSemi -> c JSSemi
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSemi
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSemi
$ctoConstr :: JSSemi -> Constr
toConstr :: JSSemi -> Constr
$cdataTypeOf :: JSSemi -> DataType
dataTypeOf :: JSSemi -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSemi)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSemi)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSSemi)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSSemi)
$cgmapT :: (forall b. Data b => b -> b) -> JSSemi -> JSSemi
gmapT :: (forall b. Data b => b -> b) -> JSSemi -> JSSemi
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> JSSemi -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSSemi -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSSemi -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSSemi -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSSemi -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSemi -> m JSSemi
Data, JSSemi -> JSSemi -> Bool
(JSSemi -> JSSemi -> Bool)
-> (JSSemi -> JSSemi -> Bool) -> Eq JSSemi
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSSemi -> JSSemi -> Bool
== :: JSSemi -> JSSemi -> Bool
$c/= :: JSSemi -> JSSemi -> Bool
/= :: JSSemi -> JSSemi -> Bool
Eq, Int -> JSSemi -> ShowS
[JSSemi] -> ShowS
JSSemi -> String
(Int -> JSSemi -> ShowS)
-> (JSSemi -> String) -> ([JSSemi] -> ShowS) -> Show JSSemi
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSSemi -> ShowS
showsPrec :: Int -> JSSemi -> ShowS
$cshow :: JSSemi -> String
show :: JSSemi -> String
$cshowList :: [JSSemi] -> ShowS
showList :: [JSSemi] -> ShowS
Show, Typeable)

data JSAssignOp
    = JSAssign !JSAnnot
    | JSTimesAssign !JSAnnot
    | JSDivideAssign !JSAnnot
    | JSModAssign !JSAnnot
    | JSPlusAssign !JSAnnot
    | JSMinusAssign !JSAnnot
    | JSLshAssign !JSAnnot
    | JSRshAssign !JSAnnot
    | JSUrshAssign !JSAnnot
    | JSBwAndAssign !JSAnnot
    | JSBwXorAssign !JSAnnot
    | JSBwOrAssign !JSAnnot
    deriving (Typeable JSAssignOp
Typeable JSAssignOp =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSAssignOp -> c JSAssignOp)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSAssignOp)
-> (JSAssignOp -> Constr)
-> (JSAssignOp -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSAssignOp))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSAssignOp))
-> ((forall b. Data b => b -> b) -> JSAssignOp -> JSAssignOp)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSAssignOp -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSAssignOp -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp)
-> Data JSAssignOp
JSAssignOp -> Constr
JSAssignOp -> DataType
(forall b. Data b => b -> b) -> JSAssignOp -> JSAssignOp
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSAssignOp -> u
forall u. (forall d. Data d => d -> u) -> JSAssignOp -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAssignOp
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAssignOp -> c JSAssignOp
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAssignOp)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAssignOp)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAssignOp -> c JSAssignOp
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAssignOp -> c JSAssignOp
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAssignOp
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAssignOp
$ctoConstr :: JSAssignOp -> Constr
toConstr :: JSAssignOp -> Constr
$cdataTypeOf :: JSAssignOp -> DataType
dataTypeOf :: JSAssignOp -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAssignOp)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAssignOp)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAssignOp)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAssignOp)
$cgmapT :: (forall b. Data b => b -> b) -> JSAssignOp -> JSAssignOp
gmapT :: (forall b. Data b => b -> b) -> JSAssignOp -> JSAssignOp
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAssignOp -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSAssignOp -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSAssignOp -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAssignOp -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAssignOp -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAssignOp -> m JSAssignOp
Data, JSAssignOp -> JSAssignOp -> Bool
(JSAssignOp -> JSAssignOp -> Bool)
-> (JSAssignOp -> JSAssignOp -> Bool) -> Eq JSAssignOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSAssignOp -> JSAssignOp -> Bool
== :: JSAssignOp -> JSAssignOp -> Bool
$c/= :: JSAssignOp -> JSAssignOp -> Bool
/= :: JSAssignOp -> JSAssignOp -> Bool
Eq, Int -> JSAssignOp -> ShowS
[JSAssignOp] -> ShowS
JSAssignOp -> String
(Int -> JSAssignOp -> ShowS)
-> (JSAssignOp -> String)
-> ([JSAssignOp] -> ShowS)
-> Show JSAssignOp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSAssignOp -> ShowS
showsPrec :: Int -> JSAssignOp -> ShowS
$cshow :: JSAssignOp -> String
show :: JSAssignOp -> String
$cshowList :: [JSAssignOp] -> ShowS
showList :: [JSAssignOp] -> ShowS
Show, Typeable)

data JSTryCatch
    = JSCatch !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSBlock -- ^catch,lb,ident,rb,block
    | JSCatchIf !JSAnnot !JSAnnot !JSExpression !JSAnnot !JSExpression !JSAnnot !JSBlock -- ^catch,lb,ident,if,expr,rb,block
    deriving (Typeable JSTryCatch
Typeable JSTryCatch =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSTryCatch -> c JSTryCatch)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSTryCatch)
-> (JSTryCatch -> Constr)
-> (JSTryCatch -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSTryCatch))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSTryCatch))
-> ((forall b. Data b => b -> b) -> JSTryCatch -> JSTryCatch)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSTryCatch -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSTryCatch -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch)
-> Data JSTryCatch
JSTryCatch -> Constr
JSTryCatch -> DataType
(forall b. Data b => b -> b) -> JSTryCatch -> JSTryCatch
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSTryCatch -> u
forall u. (forall d. Data d => d -> u) -> JSTryCatch -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryCatch
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryCatch -> c JSTryCatch
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryCatch)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSTryCatch)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryCatch -> c JSTryCatch
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryCatch -> c JSTryCatch
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryCatch
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryCatch
$ctoConstr :: JSTryCatch -> Constr
toConstr :: JSTryCatch -> Constr
$cdataTypeOf :: JSTryCatch -> DataType
dataTypeOf :: JSTryCatch -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryCatch)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryCatch)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSTryCatch)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSTryCatch)
$cgmapT :: (forall b. Data b => b -> b) -> JSTryCatch -> JSTryCatch
gmapT :: (forall b. Data b => b -> b) -> JSTryCatch -> JSTryCatch
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryCatch -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSTryCatch -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSTryCatch -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSTryCatch -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSTryCatch -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryCatch -> m JSTryCatch
Data, JSTryCatch -> JSTryCatch -> Bool
(JSTryCatch -> JSTryCatch -> Bool)
-> (JSTryCatch -> JSTryCatch -> Bool) -> Eq JSTryCatch
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSTryCatch -> JSTryCatch -> Bool
== :: JSTryCatch -> JSTryCatch -> Bool
$c/= :: JSTryCatch -> JSTryCatch -> Bool
/= :: JSTryCatch -> JSTryCatch -> Bool
Eq, Int -> JSTryCatch -> ShowS
[JSTryCatch] -> ShowS
JSTryCatch -> String
(Int -> JSTryCatch -> ShowS)
-> (JSTryCatch -> String)
-> ([JSTryCatch] -> ShowS)
-> Show JSTryCatch
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSTryCatch -> ShowS
showsPrec :: Int -> JSTryCatch -> ShowS
$cshow :: JSTryCatch -> String
show :: JSTryCatch -> String
$cshowList :: [JSTryCatch] -> ShowS
showList :: [JSTryCatch] -> ShowS
Show, Typeable)

data JSTryFinally
    = JSFinally !JSAnnot !JSBlock -- ^finally,block
    | JSNoFinally
    deriving (Typeable JSTryFinally
Typeable JSTryFinally =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSTryFinally -> c JSTryFinally)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSTryFinally)
-> (JSTryFinally -> Constr)
-> (JSTryFinally -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSTryFinally))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSTryFinally))
-> ((forall b. Data b => b -> b) -> JSTryFinally -> JSTryFinally)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSTryFinally -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSTryFinally -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally)
-> Data JSTryFinally
JSTryFinally -> Constr
JSTryFinally -> DataType
(forall b. Data b => b -> b) -> JSTryFinally -> JSTryFinally
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSTryFinally -> u
forall u. (forall d. Data d => d -> u) -> JSTryFinally -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryFinally
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryFinally -> c JSTryFinally
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryFinally)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTryFinally)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryFinally -> c JSTryFinally
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTryFinally -> c JSTryFinally
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryFinally
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTryFinally
$ctoConstr :: JSTryFinally -> Constr
toConstr :: JSTryFinally -> Constr
$cdataTypeOf :: JSTryFinally -> DataType
dataTypeOf :: JSTryFinally -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryFinally)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTryFinally)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTryFinally)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTryFinally)
$cgmapT :: (forall b. Data b => b -> b) -> JSTryFinally -> JSTryFinally
gmapT :: (forall b. Data b => b -> b) -> JSTryFinally -> JSTryFinally
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTryFinally -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSTryFinally -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSTryFinally -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSTryFinally -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSTryFinally -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSTryFinally -> m JSTryFinally
Data, JSTryFinally -> JSTryFinally -> Bool
(JSTryFinally -> JSTryFinally -> Bool)
-> (JSTryFinally -> JSTryFinally -> Bool) -> Eq JSTryFinally
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSTryFinally -> JSTryFinally -> Bool
== :: JSTryFinally -> JSTryFinally -> Bool
$c/= :: JSTryFinally -> JSTryFinally -> Bool
/= :: JSTryFinally -> JSTryFinally -> Bool
Eq, Int -> JSTryFinally -> ShowS
[JSTryFinally] -> ShowS
JSTryFinally -> String
(Int -> JSTryFinally -> ShowS)
-> (JSTryFinally -> String)
-> ([JSTryFinally] -> ShowS)
-> Show JSTryFinally
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSTryFinally -> ShowS
showsPrec :: Int -> JSTryFinally -> ShowS
$cshow :: JSTryFinally -> String
show :: JSTryFinally -> String
$cshowList :: [JSTryFinally] -> ShowS
showList :: [JSTryFinally] -> ShowS
Show, Typeable)

data JSBlock
    = JSBlock !JSAnnot ![JSStatement] !JSAnnot -- ^lbrace, stmts, rbrace
    deriving (Typeable JSBlock
Typeable JSBlock =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSBlock -> c JSBlock)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSBlock)
-> (JSBlock -> Constr)
-> (JSBlock -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSBlock))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBlock))
-> ((forall b. Data b => b -> b) -> JSBlock -> JSBlock)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSBlock -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSBlock -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSBlock -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSBlock -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSBlock -> m JSBlock)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSBlock -> m JSBlock)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSBlock -> m JSBlock)
-> Data JSBlock
JSBlock -> Constr
JSBlock -> DataType
(forall b. Data b => b -> b) -> JSBlock -> JSBlock
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSBlock -> u
forall u. (forall d. Data d => d -> u) -> JSBlock -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBlock
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBlock -> c JSBlock
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBlock)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBlock)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBlock -> c JSBlock
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSBlock -> c JSBlock
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBlock
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSBlock
$ctoConstr :: JSBlock -> Constr
toConstr :: JSBlock -> Constr
$cdataTypeOf :: JSBlock -> DataType
dataTypeOf :: JSBlock -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBlock)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSBlock)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBlock)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSBlock)
$cgmapT :: (forall b. Data b => b -> b) -> JSBlock -> JSBlock
gmapT :: (forall b. Data b => b -> b) -> JSBlock -> JSBlock
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSBlock -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSBlock -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSBlock -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSBlock -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSBlock -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSBlock -> m JSBlock
Data, JSBlock -> JSBlock -> Bool
(JSBlock -> JSBlock -> Bool)
-> (JSBlock -> JSBlock -> Bool) -> Eq JSBlock
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSBlock -> JSBlock -> Bool
== :: JSBlock -> JSBlock -> Bool
$c/= :: JSBlock -> JSBlock -> Bool
/= :: JSBlock -> JSBlock -> Bool
Eq, Int -> JSBlock -> ShowS
[JSBlock] -> ShowS
JSBlock -> String
(Int -> JSBlock -> ShowS)
-> (JSBlock -> String) -> ([JSBlock] -> ShowS) -> Show JSBlock
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSBlock -> ShowS
showsPrec :: Int -> JSBlock -> ShowS
$cshow :: JSBlock -> String
show :: JSBlock -> String
$cshowList :: [JSBlock] -> ShowS
showList :: [JSBlock] -> ShowS
Show, Typeable)

data JSSwitchParts
    = JSCase !JSAnnot !JSExpression !JSAnnot ![JSStatement]    -- ^expr,colon,stmtlist
    | JSDefault !JSAnnot !JSAnnot ![JSStatement] -- ^colon,stmtlist
    deriving (Typeable JSSwitchParts
Typeable JSSwitchParts =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSSwitchParts -> c JSSwitchParts)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSSwitchParts)
-> (JSSwitchParts -> Constr)
-> (JSSwitchParts -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSSwitchParts))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSSwitchParts))
-> ((forall b. Data b => b -> b) -> JSSwitchParts -> JSSwitchParts)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSSwitchParts -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSSwitchParts -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts)
-> Data JSSwitchParts
JSSwitchParts -> Constr
JSSwitchParts -> DataType
(forall b. Data b => b -> b) -> JSSwitchParts -> JSSwitchParts
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSSwitchParts -> u
forall u. (forall d. Data d => d -> u) -> JSSwitchParts -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSwitchParts
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSwitchParts -> c JSSwitchParts
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSwitchParts)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSSwitchParts)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSwitchParts -> c JSSwitchParts
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSSwitchParts -> c JSSwitchParts
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSwitchParts
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSSwitchParts
$ctoConstr :: JSSwitchParts -> Constr
toConstr :: JSSwitchParts -> Constr
$cdataTypeOf :: JSSwitchParts -> DataType
dataTypeOf :: JSSwitchParts -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSwitchParts)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSSwitchParts)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSSwitchParts)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSSwitchParts)
$cgmapT :: (forall b. Data b => b -> b) -> JSSwitchParts -> JSSwitchParts
gmapT :: (forall b. Data b => b -> b) -> JSSwitchParts -> JSSwitchParts
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSSwitchParts -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSSwitchParts -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSSwitchParts -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSSwitchParts -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSSwitchParts -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSSwitchParts -> m JSSwitchParts
Data, JSSwitchParts -> JSSwitchParts -> Bool
(JSSwitchParts -> JSSwitchParts -> Bool)
-> (JSSwitchParts -> JSSwitchParts -> Bool) -> Eq JSSwitchParts
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSSwitchParts -> JSSwitchParts -> Bool
== :: JSSwitchParts -> JSSwitchParts -> Bool
$c/= :: JSSwitchParts -> JSSwitchParts -> Bool
/= :: JSSwitchParts -> JSSwitchParts -> Bool
Eq, Int -> JSSwitchParts -> ShowS
[JSSwitchParts] -> ShowS
JSSwitchParts -> String
(Int -> JSSwitchParts -> ShowS)
-> (JSSwitchParts -> String)
-> ([JSSwitchParts] -> ShowS)
-> Show JSSwitchParts
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSSwitchParts -> ShowS
showsPrec :: Int -> JSSwitchParts -> ShowS
$cshow :: JSSwitchParts -> String
show :: JSSwitchParts -> String
$cshowList :: [JSSwitchParts] -> ShowS
showList :: [JSSwitchParts] -> ShowS
Show, Typeable)

data JSVarInitializer
    = JSVarInit !JSAnnot !JSExpression -- ^ assignop, initializer
    | JSVarInitNone
    deriving (Typeable JSVarInitializer
Typeable JSVarInitializer =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSVarInitializer -> c JSVarInitializer)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSVarInitializer)
-> (JSVarInitializer -> Constr)
-> (JSVarInitializer -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSVarInitializer))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSVarInitializer))
-> ((forall b. Data b => b -> b)
    -> JSVarInitializer -> JSVarInitializer)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSVarInitializer -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSVarInitializer -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSVarInitializer -> m JSVarInitializer)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSVarInitializer -> m JSVarInitializer)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSVarInitializer -> m JSVarInitializer)
-> Data JSVarInitializer
JSVarInitializer -> Constr
JSVarInitializer -> DataType
(forall b. Data b => b -> b)
-> JSVarInitializer -> JSVarInitializer
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSVarInitializer -> u
forall u. (forall d. Data d => d -> u) -> JSVarInitializer -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSVarInitializer
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSVarInitializer -> c JSVarInitializer
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSVarInitializer)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSVarInitializer)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSVarInitializer -> c JSVarInitializer
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSVarInitializer -> c JSVarInitializer
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSVarInitializer
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSVarInitializer
$ctoConstr :: JSVarInitializer -> Constr
toConstr :: JSVarInitializer -> Constr
$cdataTypeOf :: JSVarInitializer -> DataType
dataTypeOf :: JSVarInitializer -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSVarInitializer)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSVarInitializer)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSVarInitializer)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSVarInitializer)
$cgmapT :: (forall b. Data b => b -> b)
-> JSVarInitializer -> JSVarInitializer
gmapT :: (forall b. Data b => b -> b)
-> JSVarInitializer -> JSVarInitializer
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSVarInitializer -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSVarInitializer -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSVarInitializer -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSVarInitializer -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSVarInitializer -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSVarInitializer -> m JSVarInitializer
Data, JSVarInitializer -> JSVarInitializer -> Bool
(JSVarInitializer -> JSVarInitializer -> Bool)
-> (JSVarInitializer -> JSVarInitializer -> Bool)
-> Eq JSVarInitializer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSVarInitializer -> JSVarInitializer -> Bool
== :: JSVarInitializer -> JSVarInitializer -> Bool
$c/= :: JSVarInitializer -> JSVarInitializer -> Bool
/= :: JSVarInitializer -> JSVarInitializer -> Bool
Eq, Int -> JSVarInitializer -> ShowS
[JSVarInitializer] -> ShowS
JSVarInitializer -> String
(Int -> JSVarInitializer -> ShowS)
-> (JSVarInitializer -> String)
-> ([JSVarInitializer] -> ShowS)
-> Show JSVarInitializer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSVarInitializer -> ShowS
showsPrec :: Int -> JSVarInitializer -> ShowS
$cshow :: JSVarInitializer -> String
show :: JSVarInitializer -> String
$cshowList :: [JSVarInitializer] -> ShowS
showList :: [JSVarInitializer] -> ShowS
Show, Typeable)

data JSObjectProperty
    = JSPropertyNameandValue !JSPropertyName !JSAnnot ![JSExpression] -- ^name, colon, value
    | JSPropertyIdentRef !JSAnnot !String
    | JSObjectMethod !JSMethodDefinition
    deriving (Typeable JSObjectProperty
Typeable JSObjectProperty =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSObjectProperty -> c JSObjectProperty)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSObjectProperty)
-> (JSObjectProperty -> Constr)
-> (JSObjectProperty -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSObjectProperty))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSObjectProperty))
-> ((forall b. Data b => b -> b)
    -> JSObjectProperty -> JSObjectProperty)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSObjectProperty -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSObjectProperty -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSObjectProperty -> m JSObjectProperty)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSObjectProperty -> m JSObjectProperty)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSObjectProperty -> m JSObjectProperty)
-> Data JSObjectProperty
JSObjectProperty -> Constr
JSObjectProperty -> DataType
(forall b. Data b => b -> b)
-> JSObjectProperty -> JSObjectProperty
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSObjectProperty -> u
forall u. (forall d. Data d => d -> u) -> JSObjectProperty -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSObjectProperty
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSObjectProperty -> c JSObjectProperty
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSObjectProperty)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSObjectProperty)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSObjectProperty -> c JSObjectProperty
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSObjectProperty -> c JSObjectProperty
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSObjectProperty
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSObjectProperty
$ctoConstr :: JSObjectProperty -> Constr
toConstr :: JSObjectProperty -> Constr
$cdataTypeOf :: JSObjectProperty -> DataType
dataTypeOf :: JSObjectProperty -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSObjectProperty)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSObjectProperty)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSObjectProperty)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSObjectProperty)
$cgmapT :: (forall b. Data b => b -> b)
-> JSObjectProperty -> JSObjectProperty
gmapT :: (forall b. Data b => b -> b)
-> JSObjectProperty -> JSObjectProperty
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSObjectProperty -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSObjectProperty -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSObjectProperty -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSObjectProperty -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSObjectProperty -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSObjectProperty -> m JSObjectProperty
Data, JSObjectProperty -> JSObjectProperty -> Bool
(JSObjectProperty -> JSObjectProperty -> Bool)
-> (JSObjectProperty -> JSObjectProperty -> Bool)
-> Eq JSObjectProperty
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSObjectProperty -> JSObjectProperty -> Bool
== :: JSObjectProperty -> JSObjectProperty -> Bool
$c/= :: JSObjectProperty -> JSObjectProperty -> Bool
/= :: JSObjectProperty -> JSObjectProperty -> Bool
Eq, Int -> JSObjectProperty -> ShowS
[JSObjectProperty] -> ShowS
JSObjectProperty -> String
(Int -> JSObjectProperty -> ShowS)
-> (JSObjectProperty -> String)
-> ([JSObjectProperty] -> ShowS)
-> Show JSObjectProperty
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSObjectProperty -> ShowS
showsPrec :: Int -> JSObjectProperty -> ShowS
$cshow :: JSObjectProperty -> String
show :: JSObjectProperty -> String
$cshowList :: [JSObjectProperty] -> ShowS
showList :: [JSObjectProperty] -> ShowS
Show, Typeable)

data JSMethodDefinition
    = JSMethodDefinition !JSPropertyName !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock -- name, lb, params, rb, block
    | JSGeneratorMethodDefinition !JSAnnot !JSPropertyName !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock -- ^*, name, lb, params, rb, block
    | JSPropertyAccessor !JSAccessor !JSPropertyName !JSAnnot !(JSCommaList JSExpression) !JSAnnot !JSBlock -- ^get/set, name, lb, params, rb, block
    deriving (Typeable JSMethodDefinition
Typeable JSMethodDefinition =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSMethodDefinition
 -> c JSMethodDefinition)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSMethodDefinition)
-> (JSMethodDefinition -> Constr)
-> (JSMethodDefinition -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSMethodDefinition))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSMethodDefinition))
-> ((forall b. Data b => b -> b)
    -> JSMethodDefinition -> JSMethodDefinition)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSMethodDefinition -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSMethodDefinition -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSMethodDefinition -> m JSMethodDefinition)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSMethodDefinition -> m JSMethodDefinition)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSMethodDefinition -> m JSMethodDefinition)
-> Data JSMethodDefinition
JSMethodDefinition -> Constr
JSMethodDefinition -> DataType
(forall b. Data b => b -> b)
-> JSMethodDefinition -> JSMethodDefinition
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSMethodDefinition -> u
forall u. (forall d. Data d => d -> u) -> JSMethodDefinition -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSMethodDefinition
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSMethodDefinition
-> c JSMethodDefinition
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSMethodDefinition)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSMethodDefinition)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSMethodDefinition
-> c JSMethodDefinition
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSMethodDefinition
-> c JSMethodDefinition
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSMethodDefinition
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSMethodDefinition
$ctoConstr :: JSMethodDefinition -> Constr
toConstr :: JSMethodDefinition -> Constr
$cdataTypeOf :: JSMethodDefinition -> DataType
dataTypeOf :: JSMethodDefinition -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSMethodDefinition)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSMethodDefinition)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSMethodDefinition)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSMethodDefinition)
$cgmapT :: (forall b. Data b => b -> b)
-> JSMethodDefinition -> JSMethodDefinition
gmapT :: (forall b. Data b => b -> b)
-> JSMethodDefinition -> JSMethodDefinition
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSMethodDefinition -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSMethodDefinition -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSMethodDefinition -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSMethodDefinition -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSMethodDefinition -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSMethodDefinition -> m JSMethodDefinition
Data, JSMethodDefinition -> JSMethodDefinition -> Bool
(JSMethodDefinition -> JSMethodDefinition -> Bool)
-> (JSMethodDefinition -> JSMethodDefinition -> Bool)
-> Eq JSMethodDefinition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSMethodDefinition -> JSMethodDefinition -> Bool
== :: JSMethodDefinition -> JSMethodDefinition -> Bool
$c/= :: JSMethodDefinition -> JSMethodDefinition -> Bool
/= :: JSMethodDefinition -> JSMethodDefinition -> Bool
Eq, Int -> JSMethodDefinition -> ShowS
[JSMethodDefinition] -> ShowS
JSMethodDefinition -> String
(Int -> JSMethodDefinition -> ShowS)
-> (JSMethodDefinition -> String)
-> ([JSMethodDefinition] -> ShowS)
-> Show JSMethodDefinition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSMethodDefinition -> ShowS
showsPrec :: Int -> JSMethodDefinition -> ShowS
$cshow :: JSMethodDefinition -> String
show :: JSMethodDefinition -> String
$cshowList :: [JSMethodDefinition] -> ShowS
showList :: [JSMethodDefinition] -> ShowS
Show, Typeable)

data JSPropertyName
    = JSPropertyIdent !JSAnnot !String
    | JSPropertyString !JSAnnot !String
    | JSPropertyNumber !JSAnnot !String
    | JSPropertyComputed !JSAnnot !JSExpression !JSAnnot -- ^lb, expr, rb
    deriving (Typeable JSPropertyName
Typeable JSPropertyName =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSPropertyName -> c JSPropertyName)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSPropertyName)
-> (JSPropertyName -> Constr)
-> (JSPropertyName -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSPropertyName))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSPropertyName))
-> ((forall b. Data b => b -> b)
    -> JSPropertyName -> JSPropertyName)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSPropertyName -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSPropertyName -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSPropertyName -> m JSPropertyName)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSPropertyName -> m JSPropertyName)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSPropertyName -> m JSPropertyName)
-> Data JSPropertyName
JSPropertyName -> Constr
JSPropertyName -> DataType
(forall b. Data b => b -> b) -> JSPropertyName -> JSPropertyName
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSPropertyName -> u
forall u. (forall d. Data d => d -> u) -> JSPropertyName -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSPropertyName
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSPropertyName -> c JSPropertyName
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSPropertyName)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSPropertyName)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSPropertyName -> c JSPropertyName
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSPropertyName -> c JSPropertyName
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSPropertyName
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSPropertyName
$ctoConstr :: JSPropertyName -> Constr
toConstr :: JSPropertyName -> Constr
$cdataTypeOf :: JSPropertyName -> DataType
dataTypeOf :: JSPropertyName -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSPropertyName)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSPropertyName)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSPropertyName)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSPropertyName)
$cgmapT :: (forall b. Data b => b -> b) -> JSPropertyName -> JSPropertyName
gmapT :: (forall b. Data b => b -> b) -> JSPropertyName -> JSPropertyName
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSPropertyName -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSPropertyName -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSPropertyName -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSPropertyName -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSPropertyName -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSPropertyName -> m JSPropertyName
Data, JSPropertyName -> JSPropertyName -> Bool
(JSPropertyName -> JSPropertyName -> Bool)
-> (JSPropertyName -> JSPropertyName -> Bool) -> Eq JSPropertyName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPropertyName -> JSPropertyName -> Bool
== :: JSPropertyName -> JSPropertyName -> Bool
$c/= :: JSPropertyName -> JSPropertyName -> Bool
/= :: JSPropertyName -> JSPropertyName -> Bool
Eq, Int -> JSPropertyName -> ShowS
[JSPropertyName] -> ShowS
JSPropertyName -> String
(Int -> JSPropertyName -> ShowS)
-> (JSPropertyName -> String)
-> ([JSPropertyName] -> ShowS)
-> Show JSPropertyName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPropertyName -> ShowS
showsPrec :: Int -> JSPropertyName -> ShowS
$cshow :: JSPropertyName -> String
show :: JSPropertyName -> String
$cshowList :: [JSPropertyName] -> ShowS
showList :: [JSPropertyName] -> ShowS
Show, Typeable)

type JSObjectPropertyList = JSCommaTrailingList JSObjectProperty

-- | Accessors for JSObjectProperty is either 'get' or 'set'.
data JSAccessor
    = JSAccessorGet !JSAnnot
    | JSAccessorSet !JSAnnot
    deriving (Typeable JSAccessor
Typeable JSAccessor =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSAccessor -> c JSAccessor)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSAccessor)
-> (JSAccessor -> Constr)
-> (JSAccessor -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSAccessor))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSAccessor))
-> ((forall b. Data b => b -> b) -> JSAccessor -> JSAccessor)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAccessor -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSAccessor -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSAccessor -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSAccessor -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor)
-> Data JSAccessor
JSAccessor -> Constr
JSAccessor -> DataType
(forall b. Data b => b -> b) -> JSAccessor -> JSAccessor
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSAccessor -> u
forall u. (forall d. Data d => d -> u) -> JSAccessor -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAccessor
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAccessor -> c JSAccessor
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAccessor)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAccessor)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAccessor -> c JSAccessor
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSAccessor -> c JSAccessor
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAccessor
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSAccessor
$ctoConstr :: JSAccessor -> Constr
toConstr :: JSAccessor -> Constr
$cdataTypeOf :: JSAccessor -> DataType
dataTypeOf :: JSAccessor -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAccessor)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSAccessor)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAccessor)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSAccessor)
$cgmapT :: (forall b. Data b => b -> b) -> JSAccessor -> JSAccessor
gmapT :: (forall b. Data b => b -> b) -> JSAccessor -> JSAccessor
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSAccessor -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSAccessor -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSAccessor -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAccessor -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSAccessor -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSAccessor -> m JSAccessor
Data, JSAccessor -> JSAccessor -> Bool
(JSAccessor -> JSAccessor -> Bool)
-> (JSAccessor -> JSAccessor -> Bool) -> Eq JSAccessor
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSAccessor -> JSAccessor -> Bool
== :: JSAccessor -> JSAccessor -> Bool
$c/= :: JSAccessor -> JSAccessor -> Bool
/= :: JSAccessor -> JSAccessor -> Bool
Eq, Int -> JSAccessor -> ShowS
[JSAccessor] -> ShowS
JSAccessor -> String
(Int -> JSAccessor -> ShowS)
-> (JSAccessor -> String)
-> ([JSAccessor] -> ShowS)
-> Show JSAccessor
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSAccessor -> ShowS
showsPrec :: Int -> JSAccessor -> ShowS
$cshow :: JSAccessor -> String
show :: JSAccessor -> String
$cshowList :: [JSAccessor] -> ShowS
showList :: [JSAccessor] -> ShowS
Show, Typeable)

data JSIdent
    = JSIdentName !JSAnnot !String
    | JSIdentNone
    deriving (Typeable JSIdent
Typeable JSIdent =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSIdent -> c JSIdent)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSIdent)
-> (JSIdent -> Constr)
-> (JSIdent -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSIdent))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSIdent))
-> ((forall b. Data b => b -> b) -> JSIdent -> JSIdent)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSIdent -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSIdent -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSIdent -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> JSIdent -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> JSIdent -> m JSIdent)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSIdent -> m JSIdent)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> JSIdent -> m JSIdent)
-> Data JSIdent
JSIdent -> Constr
JSIdent -> DataType
(forall b. Data b => b -> b) -> JSIdent -> JSIdent
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSIdent -> u
forall u. (forall d. Data d => d -> u) -> JSIdent -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSIdent
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSIdent -> c JSIdent
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSIdent)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSIdent)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSIdent -> c JSIdent
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSIdent -> c JSIdent
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSIdent
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSIdent
$ctoConstr :: JSIdent -> Constr
toConstr :: JSIdent -> Constr
$cdataTypeOf :: JSIdent -> DataType
dataTypeOf :: JSIdent -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSIdent)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSIdent)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSIdent)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c JSIdent)
$cgmapT :: (forall b. Data b => b -> b) -> JSIdent -> JSIdent
gmapT :: (forall b. Data b => b -> b) -> JSIdent -> JSIdent
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSIdent -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSIdent -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSIdent -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSIdent -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSIdent -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> JSIdent -> m JSIdent
Data, JSIdent -> JSIdent -> Bool
(JSIdent -> JSIdent -> Bool)
-> (JSIdent -> JSIdent -> Bool) -> Eq JSIdent
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSIdent -> JSIdent -> Bool
== :: JSIdent -> JSIdent -> Bool
$c/= :: JSIdent -> JSIdent -> Bool
/= :: JSIdent -> JSIdent -> Bool
Eq, Int -> JSIdent -> ShowS
[JSIdent] -> ShowS
JSIdent -> String
(Int -> JSIdent -> ShowS)
-> (JSIdent -> String) -> ([JSIdent] -> ShowS) -> Show JSIdent
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSIdent -> ShowS
showsPrec :: Int -> JSIdent -> ShowS
$cshow :: JSIdent -> String
show :: JSIdent -> String
$cshowList :: [JSIdent] -> ShowS
showList :: [JSIdent] -> ShowS
Show, Typeable)

data JSArrayElement
    = JSArrayElement !JSExpression
    | JSArrayComma !JSAnnot
    deriving (Typeable JSArrayElement
Typeable JSArrayElement =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSArrayElement -> c JSArrayElement)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSArrayElement)
-> (JSArrayElement -> Constr)
-> (JSArrayElement -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSArrayElement))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSArrayElement))
-> ((forall b. Data b => b -> b)
    -> JSArrayElement -> JSArrayElement)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSArrayElement -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSArrayElement -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSArrayElement -> m JSArrayElement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSArrayElement -> m JSArrayElement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSArrayElement -> m JSArrayElement)
-> Data JSArrayElement
JSArrayElement -> Constr
JSArrayElement -> DataType
(forall b. Data b => b -> b) -> JSArrayElement -> JSArrayElement
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSArrayElement -> u
forall u. (forall d. Data d => d -> u) -> JSArrayElement -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrayElement
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSArrayElement -> c JSArrayElement
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrayElement)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrayElement)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSArrayElement -> c JSArrayElement
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSArrayElement -> c JSArrayElement
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrayElement
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSArrayElement
$ctoConstr :: JSArrayElement -> Constr
toConstr :: JSArrayElement -> Constr
$cdataTypeOf :: JSArrayElement -> DataType
dataTypeOf :: JSArrayElement -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrayElement)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSArrayElement)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrayElement)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSArrayElement)
$cgmapT :: (forall b. Data b => b -> b) -> JSArrayElement -> JSArrayElement
gmapT :: (forall b. Data b => b -> b) -> JSArrayElement -> JSArrayElement
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSArrayElement -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSArrayElement -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSArrayElement -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSArrayElement -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSArrayElement -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSArrayElement -> m JSArrayElement
Data, JSArrayElement -> JSArrayElement -> Bool
(JSArrayElement -> JSArrayElement -> Bool)
-> (JSArrayElement -> JSArrayElement -> Bool) -> Eq JSArrayElement
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSArrayElement -> JSArrayElement -> Bool
== :: JSArrayElement -> JSArrayElement -> Bool
$c/= :: JSArrayElement -> JSArrayElement -> Bool
/= :: JSArrayElement -> JSArrayElement -> Bool
Eq, Int -> JSArrayElement -> ShowS
[JSArrayElement] -> ShowS
JSArrayElement -> String
(Int -> JSArrayElement -> ShowS)
-> (JSArrayElement -> String)
-> ([JSArrayElement] -> ShowS)
-> Show JSArrayElement
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSArrayElement -> ShowS
showsPrec :: Int -> JSArrayElement -> ShowS
$cshow :: JSArrayElement -> String
show :: JSArrayElement -> String
$cshowList :: [JSArrayElement] -> ShowS
showList :: [JSArrayElement] -> ShowS
Show, Typeable)

data JSCommaList a
    = JSLCons !(JSCommaList a) !JSAnnot !a -- ^head, comma, a
    | JSLOne !a -- ^ single element (no comma)
    | JSLNil
    deriving (Typeable (JSCommaList a)
Typeable (JSCommaList a) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSCommaList a -> c (JSCommaList a))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (JSCommaList a))
-> (JSCommaList a -> Constr)
-> (JSCommaList a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (JSCommaList a)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (JSCommaList a)))
-> ((forall b. Data b => b -> b) -> JSCommaList a -> JSCommaList a)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r)
-> (forall u. (forall d. Data d => d -> u) -> JSCommaList a -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSCommaList a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSCommaList a -> m (JSCommaList a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSCommaList a -> m (JSCommaList a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSCommaList a -> m (JSCommaList a))
-> Data (JSCommaList a)
JSCommaList a -> Constr
JSCommaList a -> DataType
(forall b. Data b => b -> b) -> JSCommaList a -> JSCommaList a
forall a. Data a => Typeable (JSCommaList a)
forall a. Data a => JSCommaList a -> Constr
forall a. Data a => JSCommaList a -> DataType
forall a.
Data a =>
(forall b. Data b => b -> b) -> JSCommaList a -> JSCommaList a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> JSCommaList a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> JSCommaList a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaList a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSCommaList a -> c (JSCommaList a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaList a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaList a))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> JSCommaList a -> u
forall u. (forall d. Data d => d -> u) -> JSCommaList a -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaList a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSCommaList a -> c (JSCommaList a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaList a))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaList a))
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSCommaList a -> c (JSCommaList a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSCommaList a -> c (JSCommaList a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaList a)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaList a)
$ctoConstr :: forall a. Data a => JSCommaList a -> Constr
toConstr :: JSCommaList a -> Constr
$cdataTypeOf :: forall a. Data a => JSCommaList a -> DataType
dataTypeOf :: JSCommaList a -> DataType
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaList a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaList a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaList a))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaList a))
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b) -> JSCommaList a -> JSCommaList a
gmapT :: (forall b. Data b => b -> b) -> JSCommaList a -> JSCommaList a
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaList a -> r
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> JSCommaList a -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSCommaList a -> [u]
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> JSCommaList a -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> JSCommaList a -> u
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaList a -> m (JSCommaList a)
Data, JSCommaList a -> JSCommaList a -> Bool
(JSCommaList a -> JSCommaList a -> Bool)
-> (JSCommaList a -> JSCommaList a -> Bool) -> Eq (JSCommaList a)
forall a. Eq a => JSCommaList a -> JSCommaList a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => JSCommaList a -> JSCommaList a -> Bool
== :: JSCommaList a -> JSCommaList a -> Bool
$c/= :: forall a. Eq a => JSCommaList a -> JSCommaList a -> Bool
/= :: JSCommaList a -> JSCommaList a -> Bool
Eq, Int -> JSCommaList a -> ShowS
[JSCommaList a] -> ShowS
JSCommaList a -> String
(Int -> JSCommaList a -> ShowS)
-> (JSCommaList a -> String)
-> ([JSCommaList a] -> ShowS)
-> Show (JSCommaList a)
forall a. Show a => Int -> JSCommaList a -> ShowS
forall a. Show a => [JSCommaList a] -> ShowS
forall a. Show a => JSCommaList a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> JSCommaList a -> ShowS
showsPrec :: Int -> JSCommaList a -> ShowS
$cshow :: forall a. Show a => JSCommaList a -> String
show :: JSCommaList a -> String
$cshowList :: forall a. Show a => [JSCommaList a] -> ShowS
showList :: [JSCommaList a] -> ShowS
Show, Typeable)

data JSCommaTrailingList a
    = JSCTLComma !(JSCommaList a) !JSAnnot -- ^list, trailing comma
    | JSCTLNone !(JSCommaList a) -- ^list
    deriving (Typeable (JSCommaTrailingList a)
Typeable (JSCommaTrailingList a) =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g)
 -> JSCommaTrailingList a
 -> c (JSCommaTrailingList a))
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c (JSCommaTrailingList a))
-> (JSCommaTrailingList a -> Constr)
-> (JSCommaTrailingList a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c (JSCommaTrailingList a)))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c (JSCommaTrailingList a)))
-> ((forall b. Data b => b -> b)
    -> JSCommaTrailingList a -> JSCommaTrailingList a)
-> (forall r r'.
    (r -> r' -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> JSCommaTrailingList a
    -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r
    -> (forall d. Data d => d -> r')
    -> JSCommaTrailingList a
    -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSCommaTrailingList a -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSCommaTrailingList a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSCommaTrailingList a -> m (JSCommaTrailingList a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSCommaTrailingList a -> m (JSCommaTrailingList a))
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSCommaTrailingList a -> m (JSCommaTrailingList a))
-> Data (JSCommaTrailingList a)
JSCommaTrailingList a -> Constr
JSCommaTrailingList a -> DataType
(forall b. Data b => b -> b)
-> JSCommaTrailingList a -> JSCommaTrailingList a
forall a. Data a => Typeable (JSCommaTrailingList a)
forall a. Data a => JSCommaTrailingList a -> Constr
forall a. Data a => JSCommaTrailingList a -> DataType
forall a.
Data a =>
(forall b. Data b => b -> b)
-> JSCommaTrailingList a -> JSCommaTrailingList a
forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> JSCommaTrailingList a -> u
forall a u.
Data a =>
(forall d. Data d => d -> u) -> JSCommaTrailingList a -> [u]
forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaTrailingList a)
forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSCommaTrailingList a
-> c (JSCommaTrailingList a)
forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaTrailingList a))
forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaTrailingList a))
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSCommaTrailingList a -> u
forall u.
(forall d. Data d => d -> u) -> JSCommaTrailingList a -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaTrailingList a)
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSCommaTrailingList a
-> c (JSCommaTrailingList a)
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaTrailingList a))
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaTrailingList a))
$cgfoldl :: forall a (c :: * -> *).
Data a =>
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSCommaTrailingList a
-> c (JSCommaTrailingList a)
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g)
-> JSCommaTrailingList a
-> c (JSCommaTrailingList a)
$cgunfold :: forall a (c :: * -> *).
Data a =>
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaTrailingList a)
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (JSCommaTrailingList a)
$ctoConstr :: forall a. Data a => JSCommaTrailingList a -> Constr
toConstr :: JSCommaTrailingList a -> Constr
$cdataTypeOf :: forall a. Data a => JSCommaTrailingList a -> DataType
dataTypeOf :: JSCommaTrailingList a -> DataType
$cdataCast1 :: forall a (t :: * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaTrailingList a))
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c (JSCommaTrailingList a))
$cdataCast2 :: forall a (t :: * -> * -> *) (c :: * -> *).
(Data a, Typeable t) =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaTrailingList a))
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c (JSCommaTrailingList a))
$cgmapT :: forall a.
Data a =>
(forall b. Data b => b -> b)
-> JSCommaTrailingList a -> JSCommaTrailingList a
gmapT :: (forall b. Data b => b -> b)
-> JSCommaTrailingList a -> JSCommaTrailingList a
$cgmapQl :: forall a r r'.
Data a =>
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
$cgmapQr :: forall a r r'.
Data a =>
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSCommaTrailingList a -> r
$cgmapQ :: forall a u.
Data a =>
(forall d. Data d => d -> u) -> JSCommaTrailingList a -> [u]
gmapQ :: forall u.
(forall d. Data d => d -> u) -> JSCommaTrailingList a -> [u]
$cgmapQi :: forall a u.
Data a =>
Int -> (forall d. Data d => d -> u) -> JSCommaTrailingList a -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSCommaTrailingList a -> u
$cgmapM :: forall a (m :: * -> *).
(Data a, Monad m) =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
$cgmapMp :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
$cgmapMo :: forall a (m :: * -> *).
(Data a, MonadPlus m) =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSCommaTrailingList a -> m (JSCommaTrailingList a)
Data, JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
(JSCommaTrailingList a -> JSCommaTrailingList a -> Bool)
-> (JSCommaTrailingList a -> JSCommaTrailingList a -> Bool)
-> Eq (JSCommaTrailingList a)
forall a.
Eq a =>
JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a.
Eq a =>
JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
== :: JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
$c/= :: forall a.
Eq a =>
JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
/= :: JSCommaTrailingList a -> JSCommaTrailingList a -> Bool
Eq, Int -> JSCommaTrailingList a -> ShowS
[JSCommaTrailingList a] -> ShowS
JSCommaTrailingList a -> String
(Int -> JSCommaTrailingList a -> ShowS)
-> (JSCommaTrailingList a -> String)
-> ([JSCommaTrailingList a] -> ShowS)
-> Show (JSCommaTrailingList a)
forall a. Show a => Int -> JSCommaTrailingList a -> ShowS
forall a. Show a => [JSCommaTrailingList a] -> ShowS
forall a. Show a => JSCommaTrailingList a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall a. Show a => Int -> JSCommaTrailingList a -> ShowS
showsPrec :: Int -> JSCommaTrailingList a -> ShowS
$cshow :: forall a. Show a => JSCommaTrailingList a -> String
show :: JSCommaTrailingList a -> String
$cshowList :: forall a. Show a => [JSCommaTrailingList a] -> ShowS
showList :: [JSCommaTrailingList a] -> ShowS
Show, Typeable)

data JSTemplatePart
    = JSTemplatePart !JSExpression !JSAnnot !String -- ^expr, rb, suffix
    deriving (Typeable JSTemplatePart
Typeable JSTemplatePart =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSTemplatePart -> c JSTemplatePart)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSTemplatePart)
-> (JSTemplatePart -> Constr)
-> (JSTemplatePart -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSTemplatePart))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSTemplatePart))
-> ((forall b. Data b => b -> b)
    -> JSTemplatePart -> JSTemplatePart)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSTemplatePart -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSTemplatePart -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSTemplatePart -> m JSTemplatePart)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSTemplatePart -> m JSTemplatePart)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSTemplatePart -> m JSTemplatePart)
-> Data JSTemplatePart
JSTemplatePart -> Constr
JSTemplatePart -> DataType
(forall b. Data b => b -> b) -> JSTemplatePart -> JSTemplatePart
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSTemplatePart -> u
forall u. (forall d. Data d => d -> u) -> JSTemplatePart -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTemplatePart
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTemplatePart -> c JSTemplatePart
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTemplatePart)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTemplatePart)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTemplatePart -> c JSTemplatePart
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSTemplatePart -> c JSTemplatePart
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTemplatePart
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSTemplatePart
$ctoConstr :: JSTemplatePart -> Constr
toConstr :: JSTemplatePart -> Constr
$cdataTypeOf :: JSTemplatePart -> DataType
dataTypeOf :: JSTemplatePart -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTemplatePart)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSTemplatePart)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTemplatePart)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSTemplatePart)
$cgmapT :: (forall b. Data b => b -> b) -> JSTemplatePart -> JSTemplatePart
gmapT :: (forall b. Data b => b -> b) -> JSTemplatePart -> JSTemplatePart
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSTemplatePart -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSTemplatePart -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSTemplatePart -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSTemplatePart -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSTemplatePart -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSTemplatePart -> m JSTemplatePart
Data, JSTemplatePart -> JSTemplatePart -> Bool
(JSTemplatePart -> JSTemplatePart -> Bool)
-> (JSTemplatePart -> JSTemplatePart -> Bool) -> Eq JSTemplatePart
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSTemplatePart -> JSTemplatePart -> Bool
== :: JSTemplatePart -> JSTemplatePart -> Bool
$c/= :: JSTemplatePart -> JSTemplatePart -> Bool
/= :: JSTemplatePart -> JSTemplatePart -> Bool
Eq, Int -> JSTemplatePart -> ShowS
[JSTemplatePart] -> ShowS
JSTemplatePart -> String
(Int -> JSTemplatePart -> ShowS)
-> (JSTemplatePart -> String)
-> ([JSTemplatePart] -> ShowS)
-> Show JSTemplatePart
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSTemplatePart -> ShowS
showsPrec :: Int -> JSTemplatePart -> ShowS
$cshow :: JSTemplatePart -> String
show :: JSTemplatePart -> String
$cshowList :: [JSTemplatePart] -> ShowS
showList :: [JSTemplatePart] -> ShowS
Show, Typeable)

data JSClassHeritage
    = JSExtends !JSAnnot !JSExpression
    | JSExtendsNone
    deriving (Typeable JSClassHeritage
Typeable JSClassHeritage =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSClassHeritage -> c JSClassHeritage)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSClassHeritage)
-> (JSClassHeritage -> Constr)
-> (JSClassHeritage -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSClassHeritage))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSClassHeritage))
-> ((forall b. Data b => b -> b)
    -> JSClassHeritage -> JSClassHeritage)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSClassHeritage -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSClassHeritage -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSClassHeritage -> m JSClassHeritage)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSClassHeritage -> m JSClassHeritage)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSClassHeritage -> m JSClassHeritage)
-> Data JSClassHeritage
JSClassHeritage -> Constr
JSClassHeritage -> DataType
(forall b. Data b => b -> b) -> JSClassHeritage -> JSClassHeritage
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSClassHeritage -> u
forall u. (forall d. Data d => d -> u) -> JSClassHeritage -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassHeritage
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassHeritage -> c JSClassHeritage
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassHeritage)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassHeritage)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassHeritage -> c JSClassHeritage
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassHeritage -> c JSClassHeritage
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassHeritage
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassHeritage
$ctoConstr :: JSClassHeritage -> Constr
toConstr :: JSClassHeritage -> Constr
$cdataTypeOf :: JSClassHeritage -> DataType
dataTypeOf :: JSClassHeritage -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassHeritage)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassHeritage)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassHeritage)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassHeritage)
$cgmapT :: (forall b. Data b => b -> b) -> JSClassHeritage -> JSClassHeritage
gmapT :: (forall b. Data b => b -> b) -> JSClassHeritage -> JSClassHeritage
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassHeritage -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSClassHeritage -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSClassHeritage -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSClassHeritage -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSClassHeritage -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassHeritage -> m JSClassHeritage
Data, JSClassHeritage -> JSClassHeritage -> Bool
(JSClassHeritage -> JSClassHeritage -> Bool)
-> (JSClassHeritage -> JSClassHeritage -> Bool)
-> Eq JSClassHeritage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSClassHeritage -> JSClassHeritage -> Bool
== :: JSClassHeritage -> JSClassHeritage -> Bool
$c/= :: JSClassHeritage -> JSClassHeritage -> Bool
/= :: JSClassHeritage -> JSClassHeritage -> Bool
Eq, Int -> JSClassHeritage -> ShowS
[JSClassHeritage] -> ShowS
JSClassHeritage -> String
(Int -> JSClassHeritage -> ShowS)
-> (JSClassHeritage -> String)
-> ([JSClassHeritage] -> ShowS)
-> Show JSClassHeritage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSClassHeritage -> ShowS
showsPrec :: Int -> JSClassHeritage -> ShowS
$cshow :: JSClassHeritage -> String
show :: JSClassHeritage -> String
$cshowList :: [JSClassHeritage] -> ShowS
showList :: [JSClassHeritage] -> ShowS
Show, Typeable)

data JSClassElement
    = JSClassInstanceMethod !JSMethodDefinition
    | JSClassStaticMethod !JSAnnot !JSMethodDefinition
    | JSClassSemi !JSAnnot
    deriving (Typeable JSClassElement
Typeable JSClassElement =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> JSClassElement -> c JSClassElement)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c JSClassElement)
-> (JSClassElement -> Constr)
-> (JSClassElement -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c JSClassElement))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e))
    -> Maybe (c JSClassElement))
-> ((forall b. Data b => b -> b)
    -> JSClassElement -> JSClassElement)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> JSClassElement -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> JSClassElement -> r)
-> (forall u.
    (forall d. Data d => d -> u) -> JSClassElement -> [u])
-> (forall u.
    Int -> (forall d. Data d => d -> u) -> JSClassElement -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d)
    -> JSClassElement -> m JSClassElement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSClassElement -> m JSClassElement)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d)
    -> JSClassElement -> m JSClassElement)
-> Data JSClassElement
JSClassElement -> Constr
JSClassElement -> DataType
(forall b. Data b => b -> b) -> JSClassElement -> JSClassElement
forall a.
Typeable a =>
(forall (c :: * -> *).
 (forall d b. Data d => c (d -> b) -> d -> c b)
 -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u.
Int -> (forall d. Data d => d -> u) -> JSClassElement -> u
forall u. (forall d. Data d => d -> u) -> JSClassElement -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassElement
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassElement -> c JSClassElement
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassElement)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassElement)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassElement -> c JSClassElement
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> JSClassElement -> c JSClassElement
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassElement
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c JSClassElement
$ctoConstr :: JSClassElement -> Constr
toConstr :: JSClassElement -> Constr
$cdataTypeOf :: JSClassElement -> DataType
dataTypeOf :: JSClassElement -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassElement)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c JSClassElement)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassElement)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c JSClassElement)
$cgmapT :: (forall b. Data b => b -> b) -> JSClassElement -> JSClassElement
gmapT :: (forall b. Data b => b -> b) -> JSClassElement -> JSClassElement
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> JSClassElement -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> JSClassElement -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> JSClassElement -> [u]
$cgmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSClassElement -> u
gmapQi :: forall u.
Int -> (forall d. Data d => d -> u) -> JSClassElement -> u
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d)
-> JSClassElement -> m JSClassElement
Data, JSClassElement -> JSClassElement -> Bool
(JSClassElement -> JSClassElement -> Bool)
-> (JSClassElement -> JSClassElement -> Bool) -> Eq JSClassElement
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSClassElement -> JSClassElement -> Bool
== :: JSClassElement -> JSClassElement -> Bool
$c/= :: JSClassElement -> JSClassElement -> Bool
/= :: JSClassElement -> JSClassElement -> Bool
Eq, Int -> JSClassElement -> ShowS
[JSClassElement] -> ShowS
JSClassElement -> String
(Int -> JSClassElement -> ShowS)
-> (JSClassElement -> String)
-> ([JSClassElement] -> ShowS)
-> Show JSClassElement
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSClassElement -> ShowS
showsPrec :: Int -> JSClassElement -> ShowS
$cshow :: JSClassElement -> String
show :: JSClassElement -> String
$cshowList :: [JSClassElement] -> ShowS
showList :: [JSClassElement] -> ShowS
Show, Typeable)

-- -----------------------------------------------------------------------------
-- | Show the AST elements stripped of their JSAnnot data.

-- Strip out the location info
showStripped :: JSAST -> String
showStripped :: JSAST -> String
showStripped (JSAstProgram [JSStatement]
xs JSAnnot
_) = String
"JSAstProgram " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSStatement] -> String
forall a. ShowStripped a => a -> String
ss [JSStatement]
xs
showStripped (JSAstModule [JSModuleItem]
xs JSAnnot
_) = String
"JSAstModule " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSModuleItem] -> String
forall a. ShowStripped a => a -> String
ss [JSModuleItem]
xs
showStripped (JSAstStatement JSStatement
s JSAnnot
_) = String
"JSAstStatement (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
showStripped (JSAstExpression JSExpression
e JSAnnot
_) = String
"JSAstExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
showStripped (JSAstLiteral JSExpression
s JSAnnot
_)  = String
"JSAstLiteral (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


class ShowStripped a where
    ss :: a -> String

instance ShowStripped JSStatement where
    ss :: JSStatement -> String
ss (JSStatementBlock JSAnnot
_ [JSStatement]
xs JSAnnot
_ JSSemi
_) = String
"JSStatementBlock " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSStatement] -> String
forall a. ShowStripped a => a -> String
ss [JSStatement]
xs
    ss (JSBreak JSAnnot
_ JSIdent
JSIdentNone JSSemi
s) = String
"JSBreak" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
commaIf (JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s)
    ss (JSBreak JSAnnot
_ (JSIdentName JSAnnot
_ String
n) JSSemi
s) = String
"JSBreak " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
commaIf (JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s)
    ss (JSClass JSAnnot
_ JSIdent
n JSClassHeritage
h JSAnnot
_lb [JSClassElement]
xs JSAnnot
_rb JSSemi
_) = String
"JSClass " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSClassHeritage -> String
forall a. ShowStripped a => a -> String
ss JSClassHeritage
h String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSClassElement] -> String
forall a. ShowStripped a => a -> String
ss [JSClassElement]
xs
    ss (JSContinue JSAnnot
_ JSIdent
JSIdentNone JSSemi
s) = String
"JSContinue" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
commaIf (JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s)
    ss (JSContinue JSAnnot
_ (JSIdentName JSAnnot
_ String
n) JSSemi
s) = String
"JSContinue " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
commaIf (JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s)
    ss (JSConstant JSAnnot
_ JSCommaList JSExpression
xs JSSemi
_as) = String
"JSConstant " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
xs
    ss (JSDoWhile JSAnnot
_d JSStatement
x1 JSAnnot
_w JSAnnot
_lb JSExpression
x2 JSAnnot
_rb JSSemi
x3) = String
"JSDoWhile (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSFor JSAnnot
_ JSAnnot
_lb JSCommaList JSExpression
x1s JSAnnot
_s1 JSCommaList JSExpression
x2s JSAnnot
_s2 JSCommaList JSExpression
x3s JSAnnot
_rb JSStatement
x4) = String
"JSFor " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x3s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x4 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForIn JSAnnot
_ JSAnnot
_lb JSExpression
x1s JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForIn " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForVar JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSCommaList JSExpression
x1s JSAnnot
_s1 JSCommaList JSExpression
x2s JSAnnot
_s2 JSCommaList JSExpression
x3s JSAnnot
_rb JSStatement
x4) = String
"JSForVar " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x3s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x4 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForVarIn JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForVarIn (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForLet JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSCommaList JSExpression
x1s JSAnnot
_s1 JSCommaList JSExpression
x2s JSAnnot
_s2 JSCommaList JSExpression
x3s JSAnnot
_rb JSStatement
x4) = String
"JSForLet " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x3s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x4 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForLetIn JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForLetIn (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForLetOf JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForLetOf (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForConst JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSCommaList JSExpression
x1s JSAnnot
_s1 JSCommaList JSExpression
x2s JSAnnot
_s2 JSCommaList JSExpression
x3s JSAnnot
_rb JSStatement
x4) = String
"JSForConst " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x3s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x4 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForConstIn JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForConstIn (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForConstOf JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForConstOf (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForOf JSAnnot
_ JSAnnot
_lb JSExpression
x1s JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForOf " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSForVarOf JSAnnot
_ JSAnnot
_lb JSAnnot
_v JSExpression
x1 JSBinOp
_i JSExpression
x2 JSAnnot
_rb JSStatement
x3) = String
"JSForVarOf (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSFunction JSAnnot
_ JSIdent
n JSAnnot
_lb JSCommaList JSExpression
pl JSAnnot
_rb JSBlock
x3 JSSemi
_) = String
"JSFunction " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
pl String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSAsyncFunction JSAnnot
_ JSAnnot
_ JSIdent
n JSAnnot
_lb JSCommaList JSExpression
pl JSAnnot
_rb JSBlock
x3 JSSemi
_) = String
"JSAsyncFunction " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
pl String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSGenerator JSAnnot
_ JSAnnot
_ JSIdent
n JSAnnot
_lb JSCommaList JSExpression
pl JSAnnot
_rb JSBlock
x3 JSSemi
_) = String
"JSGenerator " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
pl String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSIf JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_rb JSStatement
x2) = String
"JSIf (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSIfElse JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_rb JSStatement
x2 JSAnnot
_e JSStatement
x3) = String
"JSIfElse (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSLabelled JSIdent
x1 JSAnnot
_c JSStatement
x2) = String
"JSLabelled (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSLet JSAnnot
_ JSCommaList JSExpression
xs JSSemi
_as) = String
"JSLet " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
xs
    ss (JSEmptyStatement JSAnnot
_) = String
"JSEmptyStatement"
    ss (JSExpressionStatement JSExpression
l JSSemi
s) = JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
l String -> ShowS
forall a. [a] -> [a] -> [a]
++ (let x :: String
x = JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s in if Bool -> Bool
not (String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
x) then Char
','Char -> ShowS
forall a. a -> [a] -> [a]
:String
x else String
"")
    ss (JSAssignStatement JSExpression
lhs JSAssignOp
op JSExpression
rhs JSSemi
s) =String
"JSOpAssign (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSAssignOp -> String
forall a. ShowStripped a => a -> String
ss JSAssignOp
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ (let x :: String
x = JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s in if Bool -> Bool
not (String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
x) then String
"),"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
x else String
")")
    ss (JSMethodCall JSExpression
e JSAnnot
_ JSCommaList JSExpression
a JSAnnot
_ JSSemi
s) = String
"JSMethodCall (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
",JSArguments " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
a String -> ShowS
forall a. [a] -> [a] -> [a]
++ (let x :: String
x = JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s in if Bool -> Bool
not (String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
x) then String
"),"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
x else String
")")
    ss (JSReturn JSAnnot
_ (Just JSExpression
me) JSSemi
s) = String
"JSReturn " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
me String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s
    ss (JSReturn JSAnnot
_ Maybe JSExpression
Nothing JSSemi
s) = String
"JSReturn " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSSemi -> String
forall a. ShowStripped a => a -> String
ss JSSemi
s
    ss (JSSwitch JSAnnot
_ JSAnnot
_lp JSExpression
x JSAnnot
_rp JSAnnot
_lb [JSSwitchParts]
x2 JSAnnot
_rb JSSemi
_) = String
"JSSwitch (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSSwitchParts] -> String
forall a. ShowStripped a => a -> String
ss [JSSwitchParts]
x2
    ss (JSThrow JSAnnot
_ JSExpression
x JSSemi
_) = String
"JSThrow (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSTry JSAnnot
_ JSBlock
xt1 [JSTryCatch]
xtc JSTryFinally
xtf) = String
"JSTry (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
xt1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSTryCatch] -> String
forall a. ShowStripped a => a -> String
ss [JSTryCatch]
xtc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSTryFinally -> String
forall a. ShowStripped a => a -> String
ss JSTryFinally
xtf String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSVariable JSAnnot
_ JSCommaList JSExpression
xs JSSemi
_as) = String
"JSVariable " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
xs
    ss (JSWhile JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_rb JSStatement
x2) = String
"JSWhile (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSWith JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_rb JSStatement
x JSSemi
_) = String
"JSWith (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSExpression where
    ss :: JSExpression -> String
ss (JSArrayLiteral JSAnnot
_lb [JSArrayElement]
xs JSAnnot
_rb) = String
"JSArrayLiteral " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSArrayElement] -> String
forall a. ShowStripped a => a -> String
ss [JSArrayElement]
xs
    ss (JSAssignExpression JSExpression
lhs JSAssignOp
op JSExpression
rhs) = String
"JSOpAssign (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSAssignOp -> String
forall a. ShowStripped a => a -> String
ss JSAssignOp
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSAwaitExpression JSAnnot
_ JSExpression
e) = String
"JSAwaitExpresson " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e
    ss (JSCallExpression JSExpression
ex JSAnnot
_ JSCommaList JSExpression
xs JSAnnot
_) = String
"JSCallExpression ("String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
ex String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
",JSArguments " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSCallExpressionDot JSExpression
ex JSAnnot
_os JSExpression
xs) = String
"JSCallExpressionDot (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
ex String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSCallExpressionSquare JSExpression
ex JSAnnot
_os JSExpression
xs JSAnnot
_cs) = String
"JSCallExpressionSquare (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
ex String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSClassExpression JSAnnot
_ JSIdent
n JSClassHeritage
h JSAnnot
_lb [JSClassElement]
xs JSAnnot
_rb) = String
"JSClassExpression " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSClassHeritage -> String
forall a. ShowStripped a => a -> String
ss JSClassHeritage
h String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSClassElement] -> String
forall a. ShowStripped a => a -> String
ss [JSClassElement]
xs
    ss (JSDecimal JSAnnot
_ String
s) = String
"JSDecimal " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSCommaExpression JSExpression
l JSAnnot
_ JSExpression
r) = String
"JSExpression [" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
l String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"]"
    ss (JSExpressionBinary JSExpression
x2 JSBinOp
op JSExpression
x3) = String
"JSExpressionBinary (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBinOp -> String
forall a. ShowStripped a => a -> String
ss JSBinOp
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExpressionParen JSAnnot
_lp JSExpression
x JSAnnot
_rp) = String
"JSExpressionParen (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExpressionPostfix JSExpression
xs JSUnaryOp
op) = String
"JSExpressionPostfix (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSUnaryOp -> String
forall a. ShowStripped a => a -> String
ss JSUnaryOp
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExpressionTernary JSExpression
x1 JSAnnot
_q JSExpression
x2 JSAnnot
_c JSExpression
x3) = String
"JSExpressionTernary (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSArrowExpression JSArrowParameterList
ps JSAnnot
_ JSStatement
e) = String
"JSArrowExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSArrowParameterList -> String
forall a. ShowStripped a => a -> String
ss JSArrowParameterList
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") => " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
e
    ss (JSFunctionExpression JSAnnot
_ JSIdent
n JSAnnot
_lb JSCommaList JSExpression
pl JSAnnot
_rb JSBlock
x3) = String
"JSFunctionExpression " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
pl String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSGeneratorExpression JSAnnot
_ JSAnnot
_ JSIdent
n JSAnnot
_lb JSCommaList JSExpression
pl JSAnnot
_rb JSBlock
x3) = String
"JSGeneratorExpression " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
ssid JSIdent
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
pl String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSHexInteger JSAnnot
_ String
s) = String
"JSHexInteger " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSOctal JSAnnot
_ String
s) = String
"JSOctal " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSIdentifier JSAnnot
_ String
s) = String
"JSIdentifier " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSLiteral JSAnnot
_ []) = String
"JSLiteral ''"
    ss (JSLiteral JSAnnot
_ String
s) = String
"JSLiteral " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSMemberDot JSExpression
x1s JSAnnot
_d JSExpression
x2 ) = String
"JSMemberDot (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSMemberExpression JSExpression
e JSAnnot
_ JSCommaList JSExpression
a JSAnnot
_) = String
"JSMemberExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
",JSArguments " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
a String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSMemberNew JSAnnot
_a JSExpression
n JSAnnot
_ JSCommaList JSExpression
s JSAnnot
_) = String
"JSMemberNew (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
",JSArguments " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSMemberSquare JSExpression
x1s JSAnnot
_lb JSExpression
x2 JSAnnot
_rb) = String
"JSMemberSquare (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSNewExpression JSAnnot
_n JSExpression
e) = String
"JSNewExpression " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e
    ss (JSObjectLiteral JSAnnot
_lb JSObjectPropertyList
xs JSAnnot
_rb) = String
"JSObjectLiteral " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSObjectPropertyList -> String
forall a. ShowStripped a => a -> String
ss JSObjectPropertyList
xs
    ss (JSRegEx JSAnnot
_ String
s) = String
"JSRegEx " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSStringLiteral JSAnnot
_ String
s) = String
"JSStringLiteral " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
s
    ss (JSUnaryExpression JSUnaryOp
op JSExpression
x) = String
"JSUnaryExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSUnaryOp -> String
forall a. ShowStripped a => a -> String
ss JSUnaryOp
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSVarInitExpression JSExpression
x1 JSVarInitializer
x2) = String
"JSVarInitExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSVarInitializer -> String
forall a. ShowStripped a => a -> String
ss JSVarInitializer
x2
    ss (JSYieldExpression JSAnnot
_ Maybe JSExpression
Nothing) = String
"JSYieldExpression ()"
    ss (JSYieldExpression JSAnnot
_ (Just JSExpression
x)) = String
"JSYieldExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSYieldFromExpression JSAnnot
_ JSAnnot
_ JSExpression
x) = String
"JSYieldFromExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSSpreadExpression JSAnnot
_ JSExpression
x1) = String
"JSSpreadExpression (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSTemplateLiteral Maybe JSExpression
Nothing JSAnnot
_ String
s [JSTemplatePart]
ps) = String
"JSTemplateLiteral (()," String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSTemplatePart] -> String
forall a. ShowStripped a => a -> String
ss [JSTemplatePart]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSTemplateLiteral (Just JSExpression
t) JSAnnot
_ String
s [JSTemplatePart]
ps) = String
"JSTemplateLiteral ((" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
t String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")," String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSTemplatePart] -> String
forall a. ShowStripped a => a -> String
ss [JSTemplatePart]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSArrowParameterList where
    ss :: JSArrowParameterList -> String
ss (JSUnparenthesizedArrowParameter JSIdent
x) = JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x
    ss (JSParenthesizedArrowParameterList JSAnnot
_ JSCommaList JSExpression
xs JSAnnot
_) = JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
xs

instance ShowStripped JSModuleItem where
    ss :: JSModuleItem -> String
ss (JSModuleExportDeclaration JSAnnot
_ JSExportDeclaration
x1) = String
"JSModuleExportDeclaration (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExportDeclaration -> String
forall a. ShowStripped a => a -> String
ss JSExportDeclaration
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSModuleImportDeclaration JSAnnot
_ JSImportDeclaration
x1) = String
"JSModuleImportDeclaration (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportDeclaration -> String
forall a. ShowStripped a => a -> String
ss JSImportDeclaration
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSModuleStatementListItem JSStatement
x1) = String
"JSModuleStatementListItem (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSImportDeclaration where
    ss :: JSImportDeclaration -> String
ss (JSImportDeclaration JSImportClause
imp JSFromClause
from JSSemi
_) = String
"JSImportDeclaration (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportClause -> String
forall a. ShowStripped a => a -> String
ss JSImportClause
imp String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSFromClause -> String
forall a. ShowStripped a => a -> String
ss JSFromClause
from String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportDeclarationBare JSAnnot
_ String
m JSSemi
_) = String
"JSImportDeclarationBare (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSImportClause where
    ss :: JSImportClause -> String
ss (JSImportClauseDefault JSIdent
x) = String
"JSImportClauseDefault (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportClauseNameSpace JSImportNameSpace
x) = String
"JSImportClauseNameSpace (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportNameSpace -> String
forall a. ShowStripped a => a -> String
ss JSImportNameSpace
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportClauseNamed JSImportsNamed
x) = String
"JSImportClauseNameSpace (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportsNamed -> String
forall a. ShowStripped a => a -> String
ss JSImportsNamed
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportClauseDefaultNameSpace JSIdent
x1 JSAnnot
_ JSImportNameSpace
x2) = String
"JSImportClauseDefaultNameSpace (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportNameSpace -> String
forall a. ShowStripped a => a -> String
ss JSImportNameSpace
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportClauseDefaultNamed JSIdent
x1 JSAnnot
_ JSImportsNamed
x2) = String
"JSImportClauseDefaultNamed (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSImportsNamed -> String
forall a. ShowStripped a => a -> String
ss JSImportsNamed
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSFromClause where
    ss :: JSFromClause -> String
ss (JSFromClause JSAnnot
_ JSAnnot
_ String
m) = String
"JSFromClause " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
m

instance ShowStripped JSImportNameSpace where
    ss :: JSImportNameSpace -> String
ss (JSImportNameSpace JSBinOp
_ JSAnnot
_ JSIdent
x) = String
"JSImportNameSpace (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSImportsNamed where
    ss :: JSImportsNamed -> String
ss (JSImportsNamed JSAnnot
_ JSCommaList JSImportSpecifier
xs JSAnnot
_) = String
"JSImportsNamed (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSImportSpecifier -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSImportSpecifier
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSImportSpecifier where
    ss :: JSImportSpecifier -> String
ss (JSImportSpecifier JSIdent
x1) = String
"JSImportSpecifier (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSImportSpecifierAs JSIdent
x1 JSAnnot
_ JSIdent
x2) = String
"JSImportSpecifierAs (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSExportDeclaration where
    ss :: JSExportDeclaration -> String
ss (JSExportFrom JSExportClause
xs JSFromClause
from JSSemi
_) = String
"JSExportFrom (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExportClause -> String
forall a. ShowStripped a => a -> String
ss JSExportClause
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSFromClause -> String
forall a. ShowStripped a => a -> String
ss JSFromClause
from String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExportLocals JSExportClause
xs JSSemi
_) = String
"JSExportLocals (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExportClause -> String
forall a. ShowStripped a => a -> String
ss JSExportClause
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExport JSStatement
x1 JSSemi
_) = String
"JSExport (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSStatement -> String
forall a. ShowStripped a => a -> String
ss JSStatement
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSExportClause where
    ss :: JSExportClause -> String
ss (JSExportClause JSAnnot
_ JSCommaList JSExportSpecifier
xs JSAnnot
_) = String
"JSExportClause (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExportSpecifier -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExportSpecifier
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSExportSpecifier where
    ss :: JSExportSpecifier -> String
ss (JSExportSpecifier JSIdent
x1) = String
"JSExportSpecifier (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSExportSpecifierAs JSIdent
x1 JSAnnot
_ JSIdent
x2) = String
"JSExportSpecifierAs (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSIdent -> String
forall a. ShowStripped a => a -> String
ss JSIdent
x2 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSTryCatch where
    ss :: JSTryCatch -> String
ss (JSCatch JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_rb JSBlock
x3) = String
"JSCatch (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSCatchIf JSAnnot
_ JSAnnot
_lb JSExpression
x1 JSAnnot
_ JSExpression
ex JSAnnot
_rb JSBlock
x3) = String
"JSCatch (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") if " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
ex String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSTryFinally where
    ss :: JSTryFinally -> String
ss (JSFinally JSAnnot
_ JSBlock
x) = String
"JSFinally (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss JSTryFinally
JSNoFinally = String
"JSFinally ()"

instance ShowStripped JSIdent where
    ss :: JSIdent -> String
ss (JSIdentName JSAnnot
_ String
s) = String
"JSIdentifier " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss JSIdent
JSIdentNone = String
"JSIdentNone"

instance ShowStripped JSObjectProperty where
    ss :: JSObjectProperty -> String
ss (JSPropertyNameandValue JSPropertyName
x1 JSAnnot
_colon [JSExpression]
x2s) = String
"JSPropertyNameandValue (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSPropertyName -> String
forall a. ShowStripped a => a -> String
ss JSPropertyName
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSExpression] -> String
forall a. ShowStripped a => a -> String
ss [JSExpression]
x2s
    ss (JSPropertyIdentRef JSAnnot
_ String
s) = String
"JSPropertyIdentRef " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSObjectMethod JSMethodDefinition
m) = JSMethodDefinition -> String
forall a. ShowStripped a => a -> String
ss JSMethodDefinition
m

instance ShowStripped JSMethodDefinition where
    ss :: JSMethodDefinition -> String
ss (JSMethodDefinition JSPropertyName
x1 JSAnnot
_lb1 JSCommaList JSExpression
x2s JSAnnot
_rb1 JSBlock
x3) = String
"JSMethodDefinition (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSPropertyName -> String
forall a. ShowStripped a => a -> String
ss JSPropertyName
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSPropertyAccessor JSAccessor
s JSPropertyName
x1 JSAnnot
_lb1 JSCommaList JSExpression
x2s JSAnnot
_rb1 JSBlock
x3) = String
"JSPropertyAccessor " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSAccessor -> String
forall a. ShowStripped a => a -> String
ss JSAccessor
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSPropertyName -> String
forall a. ShowStripped a => a -> String
ss JSPropertyName
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSGeneratorMethodDefinition JSAnnot
_ JSPropertyName
x1 JSAnnot
_lb1 JSCommaList JSExpression
x2s JSAnnot
_rb1 JSBlock
x3) = String
"JSGeneratorMethodDefinition (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSPropertyName -> String
forall a. ShowStripped a => a -> String
ss JSPropertyName
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") " String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSCommaList JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSCommaList JSExpression
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
" (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSBlock -> String
forall a. ShowStripped a => a -> String
ss JSBlock
x3 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSPropertyName where
    ss :: JSPropertyName -> String
ss (JSPropertyIdent JSAnnot
_ String
s) = String
"JSIdentifier " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSPropertyString JSAnnot
_ String
s) = String
"JSIdentifier " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSPropertyNumber JSAnnot
_ String
s) = String
"JSIdentifier " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s
    ss (JSPropertyComputed JSAnnot
_ JSExpression
x JSAnnot
_) = String
"JSPropertyComputed (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSAccessor where
    ss :: JSAccessor -> String
ss (JSAccessorGet JSAnnot
_) = String
"JSAccessorGet"
    ss (JSAccessorSet JSAnnot
_) = String
"JSAccessorSet"

instance ShowStripped JSBlock where
    ss :: JSBlock -> String
ss (JSBlock JSAnnot
_ [JSStatement]
xs JSAnnot
_) = String
"JSBlock " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSStatement] -> String
forall a. ShowStripped a => a -> String
ss [JSStatement]
xs

instance ShowStripped JSSwitchParts where
    ss :: JSSwitchParts -> String
ss (JSCase JSAnnot
_ JSExpression
x1 JSAnnot
_c [JSStatement]
x2s) = String
"JSCase (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x1 String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
") (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSStatement] -> String
forall a. ShowStripped a => a -> String
ss [JSStatement]
x2s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSDefault JSAnnot
_ JSAnnot
_c [JSStatement]
xs) = String
"JSDefault (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [JSStatement] -> String
forall a. ShowStripped a => a -> String
ss [JSStatement]
xs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSBinOp where
    ss :: JSBinOp -> String
ss (JSBinOpAnd JSAnnot
_) = String
"'&&'"
    ss (JSBinOpBitAnd JSAnnot
_) = String
"'&'"
    ss (JSBinOpBitOr JSAnnot
_) = String
"'|'"
    ss (JSBinOpBitXor JSAnnot
_) = String
"'^'"
    ss (JSBinOpDivide JSAnnot
_) = String
"'/'"
    ss (JSBinOpEq JSAnnot
_) = String
"'=='"
    ss (JSBinOpGe JSAnnot
_) = String
"'>='"
    ss (JSBinOpGt JSAnnot
_) = String
"'>'"
    ss (JSBinOpIn JSAnnot
_) = String
"'in'"
    ss (JSBinOpInstanceOf JSAnnot
_) = String
"'instanceof'"
    ss (JSBinOpLe JSAnnot
_) = String
"'<='"
    ss (JSBinOpLsh JSAnnot
_) = String
"'<<'"
    ss (JSBinOpLt JSAnnot
_) = String
"'<'"
    ss (JSBinOpMinus JSAnnot
_) = String
"'-'"
    ss (JSBinOpMod JSAnnot
_) = String
"'%'"
    ss (JSBinOpNeq JSAnnot
_) = String
"'!='"
    ss (JSBinOpOf JSAnnot
_) = String
"'of'"
    ss (JSBinOpOr JSAnnot
_) = String
"'||'"
    ss (JSBinOpPlus JSAnnot
_) = String
"'+'"
    ss (JSBinOpRsh JSAnnot
_) = String
"'>>'"
    ss (JSBinOpStrictEq JSAnnot
_) = String
"'==='"
    ss (JSBinOpStrictNeq JSAnnot
_) = String
"'!=='"
    ss (JSBinOpTimes JSAnnot
_) = String
"'*'"
    ss (JSBinOpUrsh JSAnnot
_) = String
"'>>>'"

instance ShowStripped JSUnaryOp where
    ss :: JSUnaryOp -> String
ss (JSUnaryOpDecr JSAnnot
_) = String
"'--'"
    ss (JSUnaryOpDelete JSAnnot
_) = String
"'delete'"
    ss (JSUnaryOpIncr JSAnnot
_) = String
"'++'"
    ss (JSUnaryOpMinus JSAnnot
_) = String
"'-'"
    ss (JSUnaryOpNot JSAnnot
_) = String
"'!'"
    ss (JSUnaryOpPlus JSAnnot
_) = String
"'+'"
    ss (JSUnaryOpTilde JSAnnot
_) = String
"'~'"
    ss (JSUnaryOpTypeof JSAnnot
_) = String
"'typeof'"
    ss (JSUnaryOpVoid JSAnnot
_) = String
"'void'"

instance ShowStripped JSAssignOp where
    ss :: JSAssignOp -> String
ss (JSAssign JSAnnot
_) = String
"'='"
    ss (JSTimesAssign JSAnnot
_) = String
"'*='"
    ss (JSDivideAssign JSAnnot
_) = String
"'/='"
    ss (JSModAssign JSAnnot
_) = String
"'%='"
    ss (JSPlusAssign JSAnnot
_) = String
"'+='"
    ss (JSMinusAssign JSAnnot
_) = String
"'-='"
    ss (JSLshAssign JSAnnot
_) = String
"'<<='"
    ss (JSRshAssign JSAnnot
_) = String
"'>>='"
    ss (JSUrshAssign JSAnnot
_) = String
"'>>>='"
    ss (JSBwAndAssign JSAnnot
_) = String
"'&='"
    ss (JSBwXorAssign JSAnnot
_) = String
"'^='"
    ss (JSBwOrAssign JSAnnot
_) = String
"'|='"

instance ShowStripped JSVarInitializer where
    ss :: JSVarInitializer -> String
ss (JSVarInit JSAnnot
_ JSExpression
n) = String
"[" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"]"
    ss JSVarInitializer
JSVarInitNone = String
""

instance ShowStripped JSSemi where
    ss :: JSSemi -> String
ss (JSSemi JSAnnot
_) = String
"JSSemicolon"
    ss JSSemi
JSSemiAuto = String
""

instance ShowStripped JSArrayElement where
    ss :: JSArrayElement -> String
ss (JSArrayElement JSExpression
e) = JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e
    ss (JSArrayComma JSAnnot
_) = String
"JSComma"

instance ShowStripped JSTemplatePart where
    ss :: JSTemplatePart -> String
ss (JSTemplatePart JSExpression
e JSAnnot
_ String
s) = String
"(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"," String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
singleQuote String
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped JSClassHeritage where
    ss :: JSClassHeritage -> String
ss JSClassHeritage
JSExtendsNone = String
""
    ss (JSExtends JSAnnot
_ JSExpression
x) = JSExpression -> String
forall a. ShowStripped a => a -> String
ss JSExpression
x

instance ShowStripped JSClassElement where
    ss :: JSClassElement -> String
ss (JSClassInstanceMethod JSMethodDefinition
m) = JSMethodDefinition -> String
forall a. ShowStripped a => a -> String
ss JSMethodDefinition
m
    ss (JSClassStaticMethod JSAnnot
_ JSMethodDefinition
m) = String
"JSClassStaticMethod (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ JSMethodDefinition -> String
forall a. ShowStripped a => a -> String
ss JSMethodDefinition
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    ss (JSClassSemi JSAnnot
_) = String
"JSClassSemi"

instance ShowStripped a => ShowStripped (JSCommaList a) where
    ss :: JSCommaList a -> String
ss JSCommaList a
xs = String
"(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
commaJoin ((a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. ShowStripped a => a -> String
ss ([a] -> [String]) -> [a] -> [String]
forall a b. (a -> b) -> a -> b
$ JSCommaList a -> [a]
forall a. JSCommaList a -> [a]
fromCommaList JSCommaList a
xs) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ShowStripped a => ShowStripped (JSCommaTrailingList a) where
    ss :: JSCommaTrailingList a -> String
ss (JSCTLComma JSCommaList a
xs JSAnnot
_) = String
"[" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
commaJoin ((a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. ShowStripped a => a -> String
ss ([a] -> [String]) -> [a] -> [String]
forall a b. (a -> b) -> a -> b
$ JSCommaList a -> [a]
forall a. JSCommaList a -> [a]
fromCommaList JSCommaList a
xs) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
",JSComma]"
    ss (JSCTLNone JSCommaList a
xs)    = String
"[" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
commaJoin ((a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. ShowStripped a => a -> String
ss ([a] -> [String]) -> [a] -> [String]
forall a b. (a -> b) -> a -> b
$ JSCommaList a -> [a]
forall a. JSCommaList a -> [a]
fromCommaList JSCommaList a
xs) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"]"

instance ShowStripped a => ShowStripped [a] where
    ss :: [a] -> String
ss [a]
xs = String
"[" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
commaJoin ((a -> String) -> [a] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map a -> String
forall a. ShowStripped a => a -> String
ss [a]
xs) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"]"

-- -----------------------------------------------------------------------------
-- Helpers.

commaJoin :: [String] -> String
commaJoin :: [String] -> String
commaJoin [String]
s = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"," ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (String -> Bool) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) [String]
s

fromCommaList :: JSCommaList a -> [a]
fromCommaList :: forall a. JSCommaList a -> [a]
fromCommaList (JSLCons JSCommaList a
l JSAnnot
_ a
i) = JSCommaList a -> [a]
forall a. JSCommaList a -> [a]
fromCommaList JSCommaList a
l [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
i]
fromCommaList (JSLOne a
i)      = [a
i]
fromCommaList JSCommaList a
JSLNil = []

singleQuote :: String -> String
singleQuote :: ShowS
singleQuote String
s = Char
'\'' Char -> ShowS
forall a. a -> [a] -> [a]
: (String
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
"'")

ssid :: JSIdent -> String
ssid :: JSIdent -> String
ssid (JSIdentName JSAnnot
_ String
s) = ShowS
singleQuote String
s
ssid JSIdent
JSIdentNone = String
"''"

commaIf :: String -> String
commaIf :: ShowS
commaIf String
"" = String
""
commaIf String
xs = Char
',' Char -> ShowS
forall a. a -> [a] -> [a]
: String
xs


deAnnot :: JSBinOp -> JSBinOp
deAnnot :: JSBinOp -> JSBinOp
deAnnot (JSBinOpAnd JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpAnd JSAnnot
JSNoAnnot
deAnnot (JSBinOpBitAnd JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpBitAnd JSAnnot
JSNoAnnot
deAnnot (JSBinOpBitOr JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpBitOr JSAnnot
JSNoAnnot
deAnnot (JSBinOpBitXor JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpBitXor JSAnnot
JSNoAnnot
deAnnot (JSBinOpDivide JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpDivide JSAnnot
JSNoAnnot
deAnnot (JSBinOpEq JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpEq JSAnnot
JSNoAnnot
deAnnot (JSBinOpGe JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpGe JSAnnot
JSNoAnnot
deAnnot (JSBinOpGt JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpGt JSAnnot
JSNoAnnot
deAnnot (JSBinOpIn JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpIn JSAnnot
JSNoAnnot
deAnnot (JSBinOpInstanceOf JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpInstanceOf JSAnnot
JSNoAnnot
deAnnot (JSBinOpLe JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpLe JSAnnot
JSNoAnnot
deAnnot (JSBinOpLsh JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpLsh JSAnnot
JSNoAnnot
deAnnot (JSBinOpLt JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpLt JSAnnot
JSNoAnnot
deAnnot (JSBinOpMinus JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpMinus JSAnnot
JSNoAnnot
deAnnot (JSBinOpMod JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpMod JSAnnot
JSNoAnnot
deAnnot (JSBinOpNeq JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpNeq JSAnnot
JSNoAnnot
deAnnot (JSBinOpOf JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpOf JSAnnot
JSNoAnnot
deAnnot (JSBinOpOr JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpOr JSAnnot
JSNoAnnot
deAnnot (JSBinOpPlus JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpPlus JSAnnot
JSNoAnnot
deAnnot (JSBinOpRsh JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpRsh JSAnnot
JSNoAnnot
deAnnot (JSBinOpStrictEq JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpStrictEq JSAnnot
JSNoAnnot
deAnnot (JSBinOpStrictNeq JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpStrictNeq JSAnnot
JSNoAnnot
deAnnot (JSBinOpTimes JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpTimes JSAnnot
JSNoAnnot
deAnnot (JSBinOpUrsh JSAnnot
_) = JSAnnot -> JSBinOp
JSBinOpUrsh JSAnnot
JSNoAnnot

binOpEq :: JSBinOp -> JSBinOp -> Bool
binOpEq :: JSBinOp -> JSBinOp -> Bool
binOpEq JSBinOp
a JSBinOp
b = JSBinOp -> JSBinOp
deAnnot JSBinOp
a JSBinOp -> JSBinOp -> Bool
forall a. Eq a => a -> a -> Bool
== JSBinOp -> JSBinOp
deAnnot JSBinOp
b