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