    {-# LANGUAGE CPP, FlexibleInstances, NoOverloadedStrings, TypeSynonymInstances #-}

    module Language.JavaScript.Pretty.Printer
        ( -- * Printing
          renderJS
        , renderToString
        , renderToText
        ) where

    import Blaze.ByteString.Builder (Builder, toLazyByteString)
    import Data.List
    #if ! MIN_VERSION_base(4,13,0)
    import Data.Monoid (mempty)
    import Data.Semigroup ((<>))
    #endif
    import Data.Text.Lazy (Text)
    import Language.JavaScript.Parser.AST
    import Language.JavaScript.Parser.SrcLocation
    import Language.JavaScript.Parser.Token
    import qualified Blaze.ByteString.Builder.Char.Utf8 as BS
    import qualified Data.ByteString.Lazy as LB
    import qualified Data.Text.Lazy.Encoding as LT
    import qualified Codec.Binary.UTF8.String as US

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

    data PosAccum = PosAccum (Int, Int) Builder

    -- ---------------------------------------------------------------------
    -- Pretty printer stuff via blaze-builder

    str :: String -> Builder
    str :: String -> Builder
    str = String -> Builder
    BS.fromString

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

    renderJS :: JSAST -> Builder
    renderJS :: JSAST -> Builder
    renderJS JSAST
    node = Builder
    bb
      where
        PosAccum (Int, Int)
    _ Builder
    bb = (Int, Int) -> Builder -> PosAccum
    PosAccum (Int
    1,Int
    1) Builder
    forall a. Monoid a => a
    mempty PosAccum -> JSAST -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAST
    node

    renderToString :: JSAST -> String
    -- need to be careful to not lose the unicode encoding on output
    renderToString :: JSAST -> String
    renderToString JSAST
    js = [Word8] -> String
    US.decode ([Word8] -> String) -> [Word8] -> String
    forall a b. (a -> b) -> a -> b
    $ ByteString -> [Word8]
    LB.unpack (ByteString -> [Word8]) -> ByteString -> [Word8]
    forall a b. (a -> b) -> a -> b
    $ Builder -> ByteString
    toLazyByteString (Builder -> ByteString) -> Builder -> ByteString
    forall a b. (a -> b) -> a -> b
    $ JSAST -> Builder
    renderJS JSAST
    js

    renderToText :: JSAST -> Text
    -- need to be careful to not lose the unicode encoding on output
    renderToText :: JSAST -> Text
    renderToText = ByteString -> Text
    LT.decodeUtf8 (ByteString -> Text) -> (JSAST -> ByteString) -> JSAST -> Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Builder -> ByteString
    toLazyByteString (Builder -> ByteString)
    -> (JSAST -> Builder) -> JSAST -> ByteString
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . JSAST -> Builder
    renderJS

    class RenderJS a where
        -- Render node.
        (|>) :: PosAccum -> a -> PosAccum

    instance RenderJS JSAST where
        |> :: PosAccum -> JSAST -> PosAccum
    (|>) PosAccum
    pacc (JSAstProgram [JSStatement]
    xs JSAnnot
    a)   = PosAccum
    pacc PosAccum -> [JSStatement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSStatement]
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a
        (|>) PosAccum
    pacc (JSAstModule [JSModuleItem]
    xs JSAnnot
    a)    = PosAccum
    pacc PosAccum -> [JSModuleItem] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSModuleItem]
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a
        (|>) PosAccum
    pacc (JSAstStatement JSStatement
    s JSAnnot
    a)  = PosAccum
    pacc PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a
        (|>) PosAccum
    pacc (JSAstExpression JSExpression
    e JSAnnot
    a) = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a
        (|>) PosAccum
    pacc (JSAstLiteral JSExpression
    x JSAnnot
    a)    = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a

    instance RenderJS JSExpression where
        -- Terminals
        |> :: PosAccum -> JSExpression -> PosAccum
    (|>) PosAccum
    pacc (JSIdentifier     JSAnnot
    annot String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSDecimal        JSAnnot
    annot String
    i) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    i
        (|>) PosAccum
    pacc (JSLiteral        JSAnnot
    annot String
    l) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    l
        (|>) PosAccum
    pacc (JSHexInteger     JSAnnot
    annot String
    i) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    i
        (|>) PosAccum
    pacc (JSOctal          JSAnnot
    annot String
    i) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    i
        (|>) PosAccum
    pacc (JSStringLiteral  JSAnnot
    annot String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSRegEx          JSAnnot
    annot String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s

        -- Non-Terminals
        (|>) PosAccum
    pacc (JSArrayLiteral         JSAnnot
    als [JSArrayElement]
    xs JSAnnot
    ars)             = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    als PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "[" PosAccum -> [JSArrayElement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSArrayElement]
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    ars PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "]"
        (|>) PosAccum
    pacc (JSArrowExpression      JSArrowParameterList
    xs JSAnnot
    a JSStatement
    x)                 = PosAccum
    pacc PosAccum -> JSArrowParameterList -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSArrowParameterList
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "=>" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x
        (|>) PosAccum
    pacc (JSAssignExpression     JSExpression
    lhs JSAssignOp
    op JSExpression
    rhs)             = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    lhs PosAccum -> JSAssignOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAssignOp
    op PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    rhs
        (|>) PosAccum
    pacc (JSAwaitExpression      JSAnnot
    a JSExpression
    e)                    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "await" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e
        (|>) PosAccum
    pacc (JSCallExpression       JSExpression
    ex JSAnnot
    lb JSCommaList JSExpression
    xs JSAnnot
    rb)            = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    ex PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")"
        (|>) PosAccum
    pacc (JSCallExpressionDot    JSExpression
    ex JSAnnot
    os JSExpression
    xs)               = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    ex PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    os PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "." PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    xs
        (|>) PosAccum
    pacc (JSCallExpressionSquare JSExpression
    ex JSAnnot
    als JSExpression
    xs JSAnnot
    ars)          = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    ex PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    als PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "[" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    ars PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "]"
        (|>) PosAccum
    pacc (JSClassExpression      JSAnnot
    annot JSIdent
    n JSClassHeritage
    h JSAnnot
    lb [JSClassElement]
    xs JSAnnot
    rb)     = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "class" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSClassHeritage -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSClassHeritage
    h PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> [JSClassElement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSClassElement]
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"
        (|>) PosAccum
    pacc (JSCommaExpression      JSExpression
    le JSAnnot
    c JSExpression
    re)                = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    le PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "," PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    re
        (|>) PosAccum
    pacc (JSExpressionBinary     JSExpression
    lhs JSBinOp
    op JSExpression
    rhs)             = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    lhs PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    op PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    rhs
        (|>) PosAccum
    pacc (JSExpressionParen      JSAnnot
    alp JSExpression
    e JSAnnot
    arp)              = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")"
        (|>) PosAccum
    pacc (JSExpressionPostfix    JSExpression
    xs JSUnaryOp
    op)                  = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    xs PosAccum -> JSUnaryOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSUnaryOp
    op
        (|>) PosAccum
    pacc (JSExpressionTernary    JSExpression
    cond JSAnnot
    h JSExpression
    v1 JSAnnot
    c JSExpression
    v2)         = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    cond PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    h PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "?" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    v1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ":" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    v2
        (|>) PosAccum
    pacc (JSFunctionExpression   JSAnnot
    annot JSIdent
    n JSAnnot
    lb JSCommaList JSExpression
    x2s JSAnnot
    rb JSBlock
    x3)   = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "function" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3
        (|>) PosAccum
    pacc (JSGeneratorExpression  JSAnnot
    annot JSAnnot
    s JSIdent
    n JSAnnot
    lb JSCommaList JSExpression
    x2s JSAnnot
    rb JSBlock
    x3) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "function" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "*" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3
        (|>) PosAccum
    pacc (JSMemberDot            JSExpression
    xs JSAnnot
    dot JSExpression
    n)               = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    xs PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "." PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    dot PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    n
        (|>) PosAccum
    pacc (JSMemberExpression     JSExpression
    e JSAnnot
    lb JSCommaList JSExpression
    a JSAnnot
    rb)              = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    a PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")"
        (|>) PosAccum
    pacc (JSMemberNew            JSAnnot
    a JSExpression
    lb JSAnnot
    n JSCommaList JSExpression
    rb JSAnnot
    s)            = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "new" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    n PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s
        (|>) PosAccum
    pacc (JSMemberSquare         JSExpression
    xs JSAnnot
    als JSExpression
    e JSAnnot
    ars)           = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    als PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "[" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    ars PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "]"
        (|>) PosAccum
    pacc (JSNewExpression        JSAnnot
    n JSExpression
    e)                    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    n PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "new" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e
        (|>) PosAccum
    pacc (JSObjectLiteral        JSAnnot
    alb JSObjectPropertyList
    xs JSAnnot
    arb)             = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> JSObjectPropertyList -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSObjectPropertyList
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"
        (|>) PosAccum
    pacc (JSTemplateLiteral      Maybe JSExpression
    t JSAnnot
    a String
    h [JSTemplatePart]
    ps)               = PosAccum
    pacc PosAccum -> Maybe JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> Maybe JSExpression
    t PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    h PosAccum -> [JSTemplatePart] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSTemplatePart]
    ps
        (|>) PosAccum
    pacc (JSUnaryExpression      JSUnaryOp
    op JSExpression
    x)                   = PosAccum
    pacc PosAccum -> JSUnaryOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSUnaryOp
    op PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x
        (|>) PosAccum
    pacc (JSVarInitExpression    JSExpression
    x1 JSVarInitializer
    x2)                  = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSVarInitializer -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSVarInitializer
    x2
        (|>) PosAccum
    pacc (JSYieldExpression      JSAnnot
    y Maybe JSExpression
    x)                    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    y PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "yield" PosAccum -> Maybe JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> Maybe JSExpression
    x
        (|>) PosAccum
    pacc (JSYieldFromExpression  JSAnnot
    y JSAnnot
    s JSExpression
    x)                  = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    y PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "yield" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "*" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x
        (|>) PosAccum
    pacc (JSSpreadExpression     JSAnnot
    a JSExpression
    e)                    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "..." PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e

    instance RenderJS JSArrowParameterList where
        |> :: PosAccum -> JSArrowParameterList -> PosAccum
    (|>) PosAccum
    pacc (JSUnparenthesizedArrowParameter JSIdent
    p)             = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    p
        (|>) PosAccum
    pacc (JSParenthesizedArrowParameterList JSAnnot
    lb JSCommaList JSExpression
    ps JSAnnot
    rb)    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    ps PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb
    -- -----------------------------------------------------------------------------
    -- Need an instance of RenderJS for every component of every JSExpression or JSAnnot
    -- constuctor.
    -- -----------------------------------------------------------------------------

    instance RenderJS JSAnnot where
        |> :: PosAccum -> JSAnnot -> PosAccum
    (|>) PosAccum
    pacc (JSAnnot TokenPosn
    p [CommentAnnotation]
    cs) = PosAccum
    pacc PosAccum -> [CommentAnnotation] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [CommentAnnotation]
    cs PosAccum -> TokenPosn -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> TokenPosn
    p
        (|>) PosAccum
    pacc JSAnnot
    JSNoAnnot = PosAccum
    pacc
        (|>) PosAccum
    pacc JSAnnot
    JSAnnotSpace = PosAccum
    pacc PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    " "

    instance RenderJS String where
        |> :: PosAccum -> String -> PosAccum
    (|>) (PosAccum (Int
    r,Int
    c) Builder
    bb) String
    s = (Int, Int) -> Builder -> PosAccum
    PosAccum (Int
    r',Int
    c') (Builder
    bb Builder -> Builder -> Builder
    forall a. Semigroup a => a -> a -> a
    <> String -> Builder
    str String
    s)
          where
            (Int
    r',Int
    c') = ((Int, Int) -> Char -> (Int, Int))
    -> (Int, Int) -> String -> (Int, Int)
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' (\(Int
    row,Int
    col) Char
    ch -> (Int, Int) -> Char -> (Int, Int)
    forall {a} {b}. (Num a, Num b) => (a, b) -> Char -> (a, b)
    go (Int
    row,Int
    col) Char
    ch) (Int
    r,Int
    c) String
    s

            go :: (a, b) -> Char -> (a, b)
    go (a
    rx,b
    _)  Char
    '\n' = (a
    rxa -> a -> a
    forall a. Num a => a -> a -> a
    +a
    1,b
    1)
            go (a
    rx,b
    cx) Char
    '\t' = (a
    rx,b
    cxb -> b -> b
    forall a. Num a => a -> a -> a
    +b
    8)
            go (a
    rx,b
    cx) Char
    _    = (a
    rx,b
    cxb -> b -> b
    forall a. Num a => a -> a -> a
    +b
    1)

    instance RenderJS TokenPosn where
        |> :: PosAccum -> TokenPosn -> PosAccum
    (|>)  (PosAccum (Int
    lcur,Int
    ccur) Builder
    bb) (TokenPn Int
    _ Int
    ltgt Int
    ctgt) = (Int, Int) -> Builder -> PosAccum
    PosAccum (Int
    lnew,Int
    cnew) (Builder
    bb Builder -> Builder -> Builder
    forall a. Semigroup a => a -> a -> a
    <> Builder
    bb')
          where
            (Builder
    bbline,Int
    ccur') = if Int
    lcur Int -> Int -> Bool
    forall a. Ord a => a -> a -> Bool
    < Int
    ltgt then (String -> Builder
    str (Int -> Char -> String
    forall a. Int -> a -> [a]
    replicate (Int
    ltgt Int -> Int -> Int
    forall a. Num a => a -> a -> a
    - Int
    lcur) Char
    '\n'),Int
    1) else (Builder
    forall a. Monoid a => a
    mempty,Int
    ccur)
            bbcol :: Builder
    bbcol  = if Int
    ccur' Int -> Int -> Bool
    forall a. Ord a => a -> a -> Bool
    < Int
    ctgt then String -> Builder
    str (Int -> Char -> String
    forall a. Int -> a -> [a]
    replicate (Int
    ctgt Int -> Int -> Int
    forall a. Num a => a -> a -> a
    - Int
    ccur') Char
    ' ') else Builder
    forall a. Monoid a => a
    mempty
            bb' :: Builder
    bb' = Builder
    bbline Builder -> Builder -> Builder
    forall a. Semigroup a => a -> a -> a
    <> Builder
    bbcol
            lnew :: Int
    lnew = if Int
    lcur Int -> Int -> Bool
    forall a. Ord a => a -> a -> Bool
    < Int
    ltgt then Int
    ltgt else Int
    lcur
            cnew :: Int
    cnew = if Int
    ccur' Int -> Int -> Bool
    forall a. Ord a => a -> a -> Bool
    < Int
    ctgt then Int
    ctgt else Int
    ccur'

    instance RenderJS [CommentAnnotation] where
        |> :: PosAccum -> [CommentAnnotation] -> PosAccum
    (|>) = (PosAccum -> CommentAnnotation -> PosAccum)
    -> PosAccum -> [CommentAnnotation] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> CommentAnnotation -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS CommentAnnotation where
        |> :: PosAccum -> CommentAnnotation -> PosAccum
    (|>) PosAccum
    pacc CommentAnnotation
    NoComment = PosAccum
    pacc
        (|>) PosAccum
    pacc (CommentA   TokenPosn
    p String
    s) = PosAccum
    pacc PosAccum -> TokenPosn -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> TokenPosn
    p PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (WhiteSpace TokenPosn
    p String
    s) = PosAccum
    pacc PosAccum -> TokenPosn -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> TokenPosn
    p PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s

    instance RenderJS [JSExpression] where
        |> :: PosAccum -> [JSExpression] -> PosAccum
    (|>) = (PosAccum -> JSExpression -> PosAccum)
    -> PosAccum -> [JSExpression] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

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

    instance RenderJS JSUnaryOp where
        |> :: PosAccum -> JSUnaryOp -> PosAccum
    (|>) PosAccum
    pacc (JSUnaryOpDecr   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "--"
        (|>) PosAccum
    pacc (JSUnaryOpDelete JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "delete"
        (|>) PosAccum
    pacc (JSUnaryOpIncr   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "++"
        (|>) PosAccum
    pacc (JSUnaryOpMinus  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "-"
        (|>) PosAccum
    pacc (JSUnaryOpNot    JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "!"
        (|>) PosAccum
    pacc (JSUnaryOpPlus   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "+"
        (|>) PosAccum
    pacc (JSUnaryOpTilde  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "~"
        (|>) PosAccum
    pacc (JSUnaryOpTypeof JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "typeof"
        (|>) PosAccum
    pacc (JSUnaryOpVoid   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "void"

    instance RenderJS JSAssignOp where
        |> :: PosAccum -> JSAssignOp -> PosAccum
    (|>) PosAccum
    pacc (JSAssign       JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "="
        (|>) PosAccum
    pacc (JSTimesAssign  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "*="
        (|>) PosAccum
    pacc (JSDivideAssign JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "/="
        (|>) PosAccum
    pacc (JSModAssign    JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "%="
        (|>) PosAccum
    pacc (JSPlusAssign   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "+="
        (|>) PosAccum
    pacc (JSMinusAssign  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "-="
        (|>) PosAccum
    pacc (JSLshAssign    JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "<<="
        (|>) PosAccum
    pacc (JSRshAssign    JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ">>="
        (|>) PosAccum
    pacc (JSUrshAssign   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ">>>="
        (|>) PosAccum
    pacc (JSBwAndAssign  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "&="
        (|>) PosAccum
    pacc (JSBwXorAssign  JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "^="
        (|>) PosAccum
    pacc (JSBwOrAssign   JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "|="

    instance RenderJS JSSemi where
        |> :: PosAccum -> JSSemi -> PosAccum
    (|>) PosAccum
    pacc (JSSemi JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";"
        (|>) PosAccum
    pacc JSSemi
    JSSemiAuto     = PosAccum
    pacc

    instance RenderJS JSTryCatch where
        |> :: PosAccum -> JSTryCatch -> PosAccum
    (|>) PosAccum
    pacc (JSCatch JSAnnot
    anc JSAnnot
    alb JSExpression
    x1 JSAnnot
    arb JSBlock
    x3) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    anc PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "catch" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3
        (|>) PosAccum
    pacc (JSCatchIf JSAnnot
    anc JSAnnot
    alb JSExpression
    x1 JSAnnot
    aif JSExpression
    ex JSAnnot
    arb JSBlock
    x3) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    anc PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "catch" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    aif PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "if" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    ex PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3

    instance RenderJS [JSTryCatch] where
        |> :: PosAccum -> [JSTryCatch] -> PosAccum
    (|>) = (PosAccum -> JSTryCatch -> PosAccum)
    -> PosAccum -> [JSTryCatch] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSTryCatch -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSTryFinally where
        |> :: PosAccum -> JSTryFinally -> PosAccum
    (|>) PosAccum
    pacc (JSFinally      JSAnnot
    annot JSBlock
    x) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "finally" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x
        (|>) PosAccum
    pacc JSTryFinally
    JSNoFinally              = PosAccum
    pacc

    instance RenderJS JSSwitchParts where
        |> :: PosAccum -> JSSwitchParts -> PosAccum
    (|>) PosAccum
    pacc (JSCase    JSAnnot
    annot JSExpression
    x1 JSAnnot
    c [JSStatement]
    x2s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "case" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ":" PosAccum -> [JSStatement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSStatement]
    x2s
        (|>) PosAccum
    pacc (JSDefault JSAnnot
    annot JSAnnot
    c [JSStatement]
    xs)     = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "default" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ":" PosAccum -> [JSStatement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSStatement]
    xs

    instance RenderJS [JSSwitchParts] where
        |> :: PosAccum -> [JSSwitchParts] -> PosAccum
    (|>) = (PosAccum -> JSSwitchParts -> PosAccum)
    -> PosAccum -> [JSSwitchParts] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSSwitchParts -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSStatement where
        |> :: PosAccum -> JSStatement -> PosAccum
    (|>) PosAccum
    pacc (JSStatementBlock JSAnnot
    alb [JSStatement]
    blk JSAnnot
    arb JSSemi
    s)             = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> [JSStatement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSStatement]
    blk PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}" PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSBreak JSAnnot
    annot JSIdent
    mi JSSemi
    s)                         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "break" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    mi PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSClass JSAnnot
    annot JSIdent
    n JSClassHeritage
    h JSAnnot
    lb [JSClassElement]
    xs JSAnnot
    rb JSSemi
    s)               = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "class" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSClassHeritage -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSClassHeritage
    h PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> [JSClassElement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSClassElement]
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}" PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSContinue JSAnnot
    annot JSIdent
    mi JSSemi
    s)                      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "continue" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    mi PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSConstant JSAnnot
    annot JSCommaList JSExpression
    xs JSSemi
    s)                      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "const" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    xs PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSDoWhile JSAnnot
    ad JSStatement
    x1 JSAnnot
    aw JSAnnot
    alb JSExpression
    x2 JSAnnot
    arb JSSemi
    x3)           = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    ad PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "do" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    aw PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "while" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    x3
        (|>) PosAccum
    pacc (JSEmptyStatement JSAnnot
    a)                         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";"
        (|>) PosAccum
    pacc (JSFor JSAnnot
    af JSAnnot
    alb JSCommaList JSExpression
    x1s JSAnnot
    s1 JSCommaList JSExpression
    x2s JSAnnot
    s2 JSCommaList JSExpression
    x3s JSAnnot
    arb JSStatement
    x4)      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x1s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s1 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s2 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x3s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x4
        (|>) PosAccum
    pacc (JSForIn JSAnnot
    af JSAnnot
    alb JSExpression
    x1s JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)             = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1s PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForVar JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSCommaList JSExpression
    x1s JSAnnot
    s1 JSCommaList JSExpression
    x2s JSAnnot
    s2 JSCommaList JSExpression
    x3s JSAnnot
    arb JSStatement
    x4) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "var" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x1s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s1 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s2 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x3s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x4
        (|>) PosAccum
    pacc (JSForVarIn JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "var" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForLet JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSCommaList JSExpression
    x1s JSAnnot
    s1 JSCommaList JSExpression
    x2s JSAnnot
    s2 JSCommaList JSExpression
    x3s JSAnnot
    arb JSStatement
    x4) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "let" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x1s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s1 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s2 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x3s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x4
        (|>) PosAccum
    pacc (JSForLetIn JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "let" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForLetOf JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "let" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForConst JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSCommaList JSExpression
    x1s JSAnnot
    s1 JSCommaList JSExpression
    x2s JSAnnot
    s2 JSCommaList JSExpression
    x3s JSAnnot
    arb JSStatement
    x4) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "const" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x1s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s1 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s2 PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x3s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x4
        (|>) PosAccum
    pacc (JSForConstIn JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "const" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForConstOf JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "const" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForOf JSAnnot
    af JSAnnot
    alb JSExpression
    x1s JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)             = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1s PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSForVarOf JSAnnot
    af JSAnnot
    alb JSAnnot
    v JSExpression
    x1 JSBinOp
    i JSExpression
    x2 JSAnnot
    arb JSStatement
    x3)         = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "for" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "var" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    v PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    i PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3
        (|>) PosAccum
    pacc (JSAsyncFunction JSAnnot
    aa JSAnnot
    af JSIdent
    n JSAnnot
    alb JSCommaList JSExpression
    x2s JSAnnot
    arb JSBlock
    x3 JSSemi
    s)   = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    aa PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "async" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "function" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3 PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSFunction JSAnnot
    af JSIdent
    n JSAnnot
    alb JSCommaList JSExpression
    x2s JSAnnot
    arb JSBlock
    x3 JSSemi
    s)           = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "function" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3 PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSGenerator JSAnnot
    af JSAnnot
    as JSIdent
    n JSAnnot
    alb JSCommaList JSExpression
    x2s JSAnnot
    arb JSBlock
    x3 JSSemi
    s)       = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    af PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "function" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    as PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "*" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    x3 PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSIf JSAnnot
    annot JSAnnot
    alb JSExpression
    x1 JSAnnot
    arb JSStatement
    x2s)                  = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "if" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x2s
        (|>) PosAccum
    pacc (JSIfElse JSAnnot
    annot JSAnnot
    alb JSExpression
    x1 JSAnnot
    arb JSStatement
    x2s JSAnnot
    ea JSStatement
    x3s)       = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "if" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x2s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    ea PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "else" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x3s
        (|>) PosAccum
    pacc (JSLabelled JSIdent
    l JSAnnot
    c JSStatement
    v)                           = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    l PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ":" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    v
        (|>) PosAccum
    pacc (JSLet JSAnnot
    annot JSCommaList JSExpression
    xs JSSemi
    s)                           = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "let" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    xs PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSExpressionStatement JSExpression
    l JSSemi
    s)                  = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    l PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSAssignStatement JSExpression
    lhs JSAssignOp
    op JSExpression
    rhs JSSemi
    s)             = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    lhs PosAccum -> JSAssignOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAssignOp
    op PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    rhs PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSMethodCall JSExpression
    e JSAnnot
    lp JSCommaList JSExpression
    a JSAnnot
    rp JSSemi
    s)                   = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    a PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSReturn JSAnnot
    annot Maybe JSExpression
    me JSSemi
    s)                        = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "return" PosAccum -> Maybe JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> Maybe JSExpression
    me PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSSwitch JSAnnot
    annot JSAnnot
    alp JSExpression
    x JSAnnot
    arp JSAnnot
    alb [JSSwitchParts]
    x2 JSAnnot
    arb JSSemi
    s)      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "switch" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> [JSSwitchParts] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSSwitchParts]
    x2 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}" PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSThrow JSAnnot
    annot JSExpression
    x JSSemi
    s)                          = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "throw" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSTry JSAnnot
    annot JSBlock
    tb [JSTryCatch]
    tcs JSTryFinally
    tf)                      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "try" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    tb PosAccum -> [JSTryCatch] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSTryCatch]
    tcs PosAccum -> JSTryFinally -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSTryFinally
    tf
        (|>) PosAccum
    pacc (JSVariable JSAnnot
    annot JSCommaList JSExpression
    xs JSSemi
    s)                      = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "var" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    xs PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSWhile JSAnnot
    annot JSAnnot
    alp JSExpression
    x1 JSAnnot
    arp JSStatement
    x2)                = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "while" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x2
        (|>) PosAccum
    pacc (JSWith JSAnnot
    annot JSAnnot
    alp JSExpression
    x1 JSAnnot
    arp JSStatement
    x JSSemi
    s)                = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "with" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s

    instance RenderJS [JSStatement] where
        |> :: PosAccum -> [JSStatement] -> PosAccum
    (|>) = (PosAccum -> JSStatement -> PosAccum)
    -> PosAccum -> [JSStatement] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS [JSModuleItem] where
        |> :: PosAccum -> [JSModuleItem] -> PosAccum
    (|>) = (PosAccum -> JSModuleItem -> PosAccum)
    -> PosAccum -> [JSModuleItem] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSModuleItem -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSModuleItem where
        |> :: PosAccum -> JSModuleItem -> PosAccum
    (|>) PosAccum
    pacc (JSModuleImportDeclaration JSAnnot
    annot JSImportDeclaration
    decl) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "import" PosAccum -> JSImportDeclaration -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportDeclaration
    decl
        (|>) PosAccum
    pacc (JSModuleExportDeclaration JSAnnot
    annot JSExportDeclaration
    decl) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "export" PosAccum -> JSExportDeclaration -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExportDeclaration
    decl
        (|>) PosAccum
    pacc (JSModuleStatementListItem JSStatement
    s) = PosAccum
    pacc PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    s

    instance RenderJS JSBlock where
        |> :: PosAccum -> JSBlock -> PosAccum
    (|>) PosAccum
    pacc (JSBlock JSAnnot
    alb [JSStatement]
    ss JSAnnot
    arb) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> [JSStatement] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSStatement]
    ss PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"

    instance RenderJS JSObjectProperty where
        |> :: PosAccum -> JSObjectProperty -> PosAccum
    (|>) PosAccum
    pacc (JSPropertyNameandValue JSPropertyName
    n JSAnnot
    c [JSExpression]
    vs)                 = PosAccum
    pacc PosAccum -> JSPropertyName -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSPropertyName
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    c PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ":" PosAccum -> [JSExpression] -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> [JSExpression]
    vs
        (|>) PosAccum
    pacc (JSPropertyIdentRef     JSAnnot
    a String
    s)                    = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSObjectMethod         JSMethodDefinition
    m)                      = PosAccum
    pacc PosAccum -> JSMethodDefinition -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSMethodDefinition
    m

    instance RenderJS JSMethodDefinition where
        |> :: PosAccum -> JSMethodDefinition -> PosAccum
    (|>) PosAccum
    pacc (JSMethodDefinition          JSPropertyName
    n JSAnnot
    alp JSCommaList JSExpression
    ps JSAnnot
    arp JSBlock
    b)   = PosAccum
    pacc PosAccum -> JSPropertyName -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSPropertyName
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    ps PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    b
        (|>) PosAccum
    pacc (JSGeneratorMethodDefinition JSAnnot
    s JSPropertyName
    n JSAnnot
    alp JSCommaList JSExpression
    ps JSAnnot
    arp JSBlock
    b) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    s PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "*" PosAccum -> JSPropertyName -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSPropertyName
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    ps PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    b
        (|>) PosAccum
    pacc (JSPropertyAccessor          JSAccessor
    s JSPropertyName
    n JSAnnot
    alp JSCommaList JSExpression
    ps JSAnnot
    arp JSBlock
    b) = PosAccum
    pacc PosAccum -> JSAccessor -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAccessor
    s PosAccum -> JSPropertyName -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSPropertyName
    n PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "(" PosAccum -> JSCommaList JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExpression
    ps PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arp PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ")" PosAccum -> JSBlock -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBlock
    b

    instance RenderJS JSPropertyName where
        |> :: PosAccum -> JSPropertyName -> PosAccum
    (|>) PosAccum
    pacc (JSPropertyIdent JSAnnot
    a String
    s)  = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSPropertyString JSAnnot
    a String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSPropertyNumber JSAnnot
    a String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc (JSPropertyComputed JSAnnot
    lb JSExpression
    x JSAnnot
    rb) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "[" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "]"

    instance RenderJS JSAccessor where
        |> :: PosAccum -> JSAccessor -> PosAccum
    (|>) PosAccum
    pacc (JSAccessorGet JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "get"
        (|>) PosAccum
    pacc (JSAccessorSet JSAnnot
    annot) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "set"

    instance RenderJS JSArrayElement where
        |> :: PosAccum -> JSArrayElement -> PosAccum
    (|>) PosAccum
    pacc (JSArrayElement JSExpression
    e) = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e
        (|>) PosAccum
    pacc (JSArrayComma JSAnnot
    a)   = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ","

    instance RenderJS [JSArrayElement] where
        |> :: PosAccum -> [JSArrayElement] -> PosAccum
    (|>) = (PosAccum -> JSArrayElement -> PosAccum)
    -> PosAccum -> [JSArrayElement] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSArrayElement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSImportDeclaration where
        |> :: PosAccum -> JSImportDeclaration -> PosAccum
    (|>) PosAccum
    pacc (JSImportDeclaration JSImportClause
    imp JSFromClause
    from JSSemi
    annot) = PosAccum
    pacc PosAccum -> JSImportClause -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportClause
    imp PosAccum -> JSFromClause -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSFromClause
    from PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    annot
        (|>) PosAccum
    pacc (JSImportDeclarationBare JSAnnot
    annot String
    m JSSemi
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    m PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s

    instance RenderJS JSImportClause where
        |> :: PosAccum -> JSImportClause -> PosAccum
    (|>) PosAccum
    pacc (JSImportClauseDefault JSIdent
    x) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x
        (|>) PosAccum
    pacc (JSImportClauseNameSpace JSImportNameSpace
    x) = PosAccum
    pacc PosAccum -> JSImportNameSpace -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportNameSpace
    x
        (|>) PosAccum
    pacc (JSImportClauseNamed JSImportsNamed
    x) = PosAccum
    pacc PosAccum -> JSImportsNamed -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportsNamed
    x
        (|>) PosAccum
    pacc (JSImportClauseDefaultNameSpace JSIdent
    x1 JSAnnot
    annot JSImportNameSpace
    x2) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "," PosAccum -> JSImportNameSpace -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportNameSpace
    x2
        (|>) PosAccum
    pacc (JSImportClauseDefaultNamed JSIdent
    x1 JSAnnot
    annot JSImportsNamed
    x2) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "," PosAccum -> JSImportsNamed -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSImportsNamed
    x2

    instance RenderJS JSFromClause where
        |> :: PosAccum -> JSFromClause -> PosAccum
    (|>) PosAccum
    pacc (JSFromClause JSAnnot
    from JSAnnot
    annot String
    m) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    from PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "from" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    m

    instance RenderJS JSImportNameSpace where
        |> :: PosAccum -> JSImportNameSpace -> PosAccum
    (|>) PosAccum
    pacc (JSImportNameSpace JSBinOp
    star JSAnnot
    annot JSIdent
    x) = PosAccum
    pacc PosAccum -> JSBinOp -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSBinOp
    star PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "as" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x

    instance RenderJS JSImportsNamed where
        |> :: PosAccum -> JSImportsNamed -> PosAccum
    (|>) PosAccum
    pacc (JSImportsNamed JSAnnot
    lb JSCommaList JSImportSpecifier
    xs JSAnnot
    rb) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    lb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> JSCommaList JSImportSpecifier -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSImportSpecifier
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    rb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"

    instance RenderJS JSImportSpecifier where
        |> :: PosAccum -> JSImportSpecifier -> PosAccum
    (|>) PosAccum
    pacc (JSImportSpecifier JSIdent
    x1) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x1
        (|>) PosAccum
    pacc (JSImportSpecifierAs JSIdent
    x1 JSAnnot
    annot JSIdent
    x2) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "as" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x2

    instance RenderJS JSExportDeclaration where
        |> :: PosAccum -> JSExportDeclaration -> PosAccum
    (|>) PosAccum
    pacc (JSExport JSStatement
    x1 JSSemi
    s) = PosAccum
    pacc PosAccum -> JSStatement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSStatement
    x1 PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    s
        (|>) PosAccum
    pacc (JSExportLocals JSExportClause
    xs JSSemi
    semi) = PosAccum
    pacc PosAccum -> JSExportClause -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExportClause
    xs PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    semi
        (|>) PosAccum
    pacc (JSExportFrom JSExportClause
    xs JSFromClause
    from JSSemi
    semi) = PosAccum
    pacc PosAccum -> JSExportClause -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExportClause
    xs PosAccum -> JSFromClause -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSFromClause
    from PosAccum -> JSSemi -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSSemi
    semi

    instance RenderJS JSExportClause where
        |> :: PosAccum -> JSExportClause -> PosAccum
    (|>) PosAccum
    pacc (JSExportClause JSAnnot
    alb JSCommaList JSExportSpecifier
    JSLNil JSAnnot
    arb) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"
        (|>) PosAccum
    pacc (JSExportClause JSAnnot
    alb JSCommaList JSExportSpecifier
    s JSAnnot
    arb) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    alb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "{" PosAccum -> JSCommaList JSExportSpecifier -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList JSExportSpecifier
    s PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    arb PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "}"

    instance RenderJS JSExportSpecifier where
        |> :: PosAccum -> JSExportSpecifier -> PosAccum
    (|>) PosAccum
    pacc (JSExportSpecifier JSIdent
    i) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    i
        (|>) PosAccum
    pacc (JSExportSpecifierAs JSIdent
    x1 JSAnnot
    annot JSIdent
    x2) = PosAccum
    pacc PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x1 PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    annot PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "as" PosAccum -> JSIdent -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSIdent
    x2

    instance RenderJS a => RenderJS (JSCommaList a) where
        |> :: PosAccum -> JSCommaList a -> PosAccum
    (|>) PosAccum
    pacc (JSLCons JSCommaList a
    pl JSAnnot
    a a
    i) = PosAccum
    pacc PosAccum -> JSCommaList a -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList a
    pl PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "," PosAccum -> a -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> a
    i
        (|>) PosAccum
    pacc (JSLOne a
    i)       = PosAccum
    pacc PosAccum -> a -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> a
    i
        (|>) PosAccum
    pacc JSCommaList a
    JSLNil           = PosAccum
    pacc

    instance RenderJS a => RenderJS (JSCommaTrailingList a) where
        |> :: PosAccum -> JSCommaTrailingList a -> PosAccum
    (|>) PosAccum
    pacc (JSCTLComma JSCommaList a
    xs JSAnnot
    a) = PosAccum
    pacc PosAccum -> JSCommaList a -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList a
    xs PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ","
        (|>) PosAccum
    pacc (JSCTLNone JSCommaList a
    xs)   = PosAccum
    pacc PosAccum -> JSCommaList a -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSCommaList a
    xs

    instance RenderJS JSIdent where
        |> :: PosAccum -> JSIdent -> PosAccum
    (|>) PosAccum
    pacc (JSIdentName JSAnnot
    a String
    s) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s
        (|>) PosAccum
    pacc JSIdent
    JSIdentNone       = PosAccum
    pacc

    instance RenderJS (Maybe JSExpression) where
        |> :: PosAccum -> Maybe JSExpression -> PosAccum
    (|>) PosAccum
    pacc (Just JSExpression
    e) = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e
        (|>) PosAccum
    pacc Maybe JSExpression
    Nothing  = PosAccum
    pacc

    instance RenderJS JSVarInitializer where
        |> :: PosAccum -> JSVarInitializer -> PosAccum
    (|>) PosAccum
    pacc (JSVarInit JSAnnot
    a JSExpression
    x) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "=" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    x
        (|>) PosAccum
    pacc JSVarInitializer
    JSVarInitNone   = PosAccum
    pacc

    instance RenderJS [JSTemplatePart] where
        |> :: PosAccum -> [JSTemplatePart] -> PosAccum
    (|>) = (PosAccum -> JSTemplatePart -> PosAccum)
    -> PosAccum -> [JSTemplatePart] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSTemplatePart -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSTemplatePart where
        |> :: PosAccum -> JSTemplatePart -> PosAccum
    (|>) PosAccum
    pacc (JSTemplatePart JSExpression
    e JSAnnot
    a String
    s) = PosAccum
    pacc PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    s

    instance RenderJS JSClassHeritage where
        |> :: PosAccum -> JSClassHeritage -> PosAccum
    (|>) PosAccum
    pacc (JSExtends JSAnnot
    a JSExpression
    e) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "extends" PosAccum -> JSExpression -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSExpression
    e
        (|>) PosAccum
    pacc JSClassHeritage
    JSExtendsNone   = PosAccum
    pacc

    instance RenderJS [JSClassElement] where
        |> :: PosAccum -> [JSClassElement] -> PosAccum
    (|>) = (PosAccum -> JSClassElement -> PosAccum)
    -> PosAccum -> [JSClassElement] -> PosAccum
    forall b a. (b -> a -> b) -> b -> [a] -> b
    forall (t :: * -> *) b a.
    Foldable t =>
    (b -> a -> b) -> b -> t a -> b
    foldl' PosAccum -> JSClassElement -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    (|>)

    instance RenderJS JSClassElement where
        |> :: PosAccum -> JSClassElement -> PosAccum
    (|>) PosAccum
    pacc (JSClassInstanceMethod JSMethodDefinition
    m) = PosAccum
    pacc PosAccum -> JSMethodDefinition -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSMethodDefinition
    m
        (|>) PosAccum
    pacc (JSClassStaticMethod JSAnnot
    a JSMethodDefinition
    m) = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    "static" PosAccum -> JSMethodDefinition -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSMethodDefinition
    m
        (|>) PosAccum
    pacc (JSClassSemi JSAnnot
    a)           = PosAccum
    pacc PosAccum -> JSAnnot -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> JSAnnot
    a PosAccum -> String -> PosAccum
    forall a. RenderJS a => PosAccum -> a -> PosAccum
    |> String
    ";"

    -- EOF