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