{-# 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 node :: JSAST
node = Builder
bb
  where
    PosAccum _ bb :: Builder
bb = (Int, Int) -> Builder -> PosAccum
PosAccum (1,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 js :: 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
(|>) pacc :: PosAccum
pacc (JSAstProgram xs :: [JSStatement]
xs a :: 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
    (|>) pacc :: PosAccum
pacc (JSAstModule xs :: [JSModuleItem]
xs a :: 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
    (|>) pacc :: PosAccum
pacc (JSAstStatement s :: JSStatement
s a :: 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
    (|>) pacc :: PosAccum
pacc (JSAstExpression e :: JSExpression
e a :: 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
    (|>) pacc :: PosAccum
pacc (JSAstLiteral x :: JSExpression
x a :: 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
(|>) pacc :: PosAccum
pacc (JSIdentifier     annot :: JSAnnot
annot s :: 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
    (|>) pacc :: PosAccum
pacc (JSDecimal        annot :: JSAnnot
annot i :: 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
    (|>) pacc :: PosAccum
pacc (JSLiteral        annot :: JSAnnot
annot l :: 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
    (|>) pacc :: PosAccum
pacc (JSHexInteger     annot :: JSAnnot
annot i :: 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
    (|>) pacc :: PosAccum
pacc (JSOctal          annot :: JSAnnot
annot i :: 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
    (|>) pacc :: PosAccum
pacc (JSStringLiteral  annot :: JSAnnot
annot s :: 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
    (|>) pacc :: PosAccum
pacc (JSRegEx          annot :: JSAnnot
annot s :: 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
    (|>) pacc :: PosAccum
pacc (JSArrayLiteral         als :: JSAnnot
als xs :: [JSArrayElement]
xs ars :: 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
|> "[" 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
|> "]"
    (|>) pacc :: PosAccum
pacc (JSArrowExpression      xs :: JSArrowParameterList
xs a :: JSAnnot
a x :: 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
|> "=>" PosAccum -> JSStatement -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSStatement
x
    (|>) pacc :: PosAccum
pacc (JSAssignExpression     lhs :: JSExpression
lhs op :: JSAssignOp
op rhs :: 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
    (|>) pacc :: PosAccum
pacc (JSAwaitExpression      a :: JSAnnot
a e :: 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
|> "await" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
e
    (|>) pacc :: PosAccum
pacc (JSCallExpression       ex :: JSExpression
ex lb :: JSAnnot
lb xs :: JSCommaList JSExpression
xs rb :: 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
|> "(" 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
|> ")"
    (|>) pacc :: PosAccum
pacc (JSCallExpressionDot    ex :: JSExpression
ex os :: JSAnnot
os xs :: 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
|> "." PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
xs
    (|>) pacc :: PosAccum
pacc (JSCallExpressionSquare ex :: JSExpression
ex als :: JSAnnot
als xs :: JSExpression
xs ars :: 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
|> "[" 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
|> "]"
    (|>) pacc :: PosAccum
pacc (JSClassExpression      annot :: JSAnnot
annot n :: JSIdent
n h :: JSClassHeritage
h lb :: JSAnnot
lb xs :: [JSClassElement]
xs rb :: 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
|> "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
|> "{" 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
|> "}"
    (|>) pacc :: PosAccum
pacc (JSCommaExpression      le :: JSExpression
le c :: JSAnnot
c re :: 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
|> "," PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
re
    (|>) pacc :: PosAccum
pacc (JSExpressionBinary     lhs :: JSExpression
lhs op :: JSBinOp
op rhs :: 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
    (|>) pacc :: PosAccum
pacc (JSExpressionParen      alp :: JSAnnot
alp e :: JSExpression
e arp :: 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
|> "(" 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
|> ")"
    (|>) pacc :: PosAccum
pacc (JSExpressionPostfix    xs :: JSExpression
xs op :: 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
    (|>) pacc :: PosAccum
pacc (JSExpressionTernary    cond :: JSExpression
cond h :: JSAnnot
h v1 :: JSExpression
v1 c :: JSAnnot
c v2 :: 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
|> "?" 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
|> ":" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
v2
    (|>) pacc :: PosAccum
pacc (JSFunctionExpression   annot :: JSAnnot
annot n :: JSIdent
n lb :: JSAnnot
lb x2s :: JSCommaList JSExpression
x2s rb :: JSAnnot
rb x3 :: 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
|> "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
|> "(" 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
|> ")" PosAccum -> JSBlock -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSBlock
x3
    (|>) pacc :: PosAccum
pacc (JSGeneratorExpression  annot :: JSAnnot
annot s :: JSAnnot
s n :: JSIdent
n lb :: JSAnnot
lb x2s :: JSCommaList JSExpression
x2s rb :: JSAnnot
rb x3 :: 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
|> "function" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
s PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "*" 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
|> "(" 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
|> ")" PosAccum -> JSBlock -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSBlock
x3
    (|>) pacc :: PosAccum
pacc (JSMemberDot            xs :: JSExpression
xs dot :: JSAnnot
dot n :: 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
|> "." PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
dot PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
n
    (|>) pacc :: PosAccum
pacc (JSMemberExpression     e :: JSExpression
e lb :: JSAnnot
lb a :: JSCommaList JSExpression
a rb :: 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
|> "(" 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
|> ")"
    (|>) pacc :: PosAccum
pacc (JSMemberNew            a :: JSAnnot
a lb :: JSExpression
lb n :: JSAnnot
n rb :: JSCommaList JSExpression
rb s :: 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
|> "new" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
lb PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "(" 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
|> ")" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
s
    (|>) pacc :: PosAccum
pacc (JSMemberSquare         xs :: JSExpression
xs als :: JSAnnot
als e :: JSExpression
e ars :: 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
|> "[" 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
|> "]"
    (|>) pacc :: PosAccum
pacc (JSNewExpression        n :: JSAnnot
n e :: 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
|> "new" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
e
    (|>) pacc :: PosAccum
pacc (JSObjectLiteral        alb :: JSAnnot
alb xs :: JSObjectPropertyList
xs arb :: 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
|> "{" 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
|> "}"
    (|>) pacc :: PosAccum
pacc (JSTemplateLiteral      t :: Maybe JSExpression
t a :: JSAnnot
a h :: String
h ps :: [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
    (|>) pacc :: PosAccum
pacc (JSUnaryExpression      op :: JSUnaryOp
op x :: 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
    (|>) pacc :: PosAccum
pacc (JSVarInitExpression    x1 :: JSExpression
x1 x2 :: 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
    (|>) pacc :: PosAccum
pacc (JSYieldExpression      y :: JSAnnot
y x :: 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
|> "yield" PosAccum -> Maybe JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> Maybe JSExpression
x
    (|>) pacc :: PosAccum
pacc (JSYieldFromExpression  y :: JSAnnot
y s :: JSAnnot
s x :: 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
|> "yield" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
s PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "*" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
x
    (|>) pacc :: PosAccum
pacc (JSSpreadExpression     a :: JSAnnot
a e :: 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
|> "..." PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
e

instance RenderJS JSArrowParameterList where
    |> :: PosAccum -> JSArrowParameterList -> PosAccum
(|>) pacc :: PosAccum
pacc (JSUnparenthesizedArrowParameter p :: JSIdent
p)             = PosAccum
pacc PosAccum -> JSIdent -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSIdent
p
    (|>) pacc :: PosAccum
pacc (JSParenthesizedArrowParameterList lb :: JSAnnot
lb ps :: JSCommaList JSExpression
ps rb :: 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
|> "(" PosAccum -> JSCommaList JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSCommaList JSExpression
ps PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> ")" 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
(|>) pacc :: PosAccum
pacc (JSAnnot p :: TokenPosn
p cs :: [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
    (|>) pacc :: PosAccum
pacc JSNoAnnot = PosAccum
pacc
    (|>) pacc :: PosAccum
pacc JSAnnotSpace = PosAccum
pacc PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> " "

instance RenderJS String where
    |> :: PosAccum -> String -> PosAccum
(|>) (PosAccum (r :: Int
r,c :: Int
c) bb :: Builder
bb) s :: 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
        (r' :: Int
r',c' :: Int
c') = ((Int, Int) -> Char -> (Int, Int))
-> (Int, Int) -> String -> (Int, Int)
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(row :: Int
row,col :: Int
col) ch :: Char
ch -> (Int, Int) -> Char -> (Int, Int)
forall a a. (Num a, Num a) => (a, a) -> Char -> (a, a)
go (Int
row,Int
col) Char
ch) (Int
r,Int
c) String
s

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


instance RenderJS TokenPosn where
    |> :: PosAccum -> TokenPosn -> PosAccum
(|>)  (PosAccum (lcur :: Int
lcur,ccur :: Int
ccur) bb :: Builder
bb) (TokenPn _ ltgt :: Int
ltgt ctgt :: 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
        (bbline :: Builder
bbline,ccur' :: 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) '\n'),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') ' ') 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 (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
(|>) pacc :: PosAccum
pacc NoComment = PosAccum
pacc
    (|>) pacc :: PosAccum
pacc (CommentA   p :: TokenPosn
p s :: 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
    (|>) pacc :: PosAccum
pacc (WhiteSpace p :: TokenPosn
p s :: 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 (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
(|>) pacc :: PosAccum
pacc (JSBinOpAnd        annot :: 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
|> "&&"
    (|>) pacc :: PosAccum
pacc (JSBinOpBitAnd     annot :: 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
|> "&"
    (|>) pacc :: PosAccum
pacc (JSBinOpBitOr      annot :: 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
|> "|"
    (|>) pacc :: PosAccum
pacc (JSBinOpBitXor     annot :: 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
|> "^"
    (|>) pacc :: PosAccum
pacc (JSBinOpDivide     annot :: 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
|> "/"
    (|>) pacc :: PosAccum
pacc (JSBinOpEq         annot :: 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
|> "=="
    (|>) pacc :: PosAccum
pacc (JSBinOpGe         annot :: 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
|> ">="
    (|>) pacc :: PosAccum
pacc (JSBinOpGt         annot :: 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
|> ">"
    (|>) pacc :: PosAccum
pacc (JSBinOpIn         annot :: 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
|> "in"
    (|>) pacc :: PosAccum
pacc (JSBinOpInstanceOf annot :: 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
|> "instanceof"
    (|>) pacc :: PosAccum
pacc (JSBinOpLe         annot :: 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
|> "<="
    (|>) pacc :: PosAccum
pacc (JSBinOpLsh        annot :: 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
|> "<<"
    (|>) pacc :: PosAccum
pacc (JSBinOpLt         annot :: 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
|> "<"
    (|>) pacc :: PosAccum
pacc (JSBinOpMinus      annot :: 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
|> "-"
    (|>) pacc :: PosAccum
pacc (JSBinOpMod        annot :: 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
|> "%"
    (|>) pacc :: PosAccum
pacc (JSBinOpNeq        annot :: 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
|> "!="
    (|>) pacc :: PosAccum
pacc (JSBinOpOf         annot :: 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
|> "of"
    (|>) pacc :: PosAccum
pacc (JSBinOpOr         annot :: 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
|> "||"
    (|>) pacc :: PosAccum
pacc (JSBinOpPlus       annot :: 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
|> "+"
    (|>) pacc :: PosAccum
pacc (JSBinOpRsh        annot :: 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
|> ">>"
    (|>) pacc :: PosAccum
pacc (JSBinOpStrictEq   annot :: 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
|> "==="
    (|>) pacc :: PosAccum
pacc (JSBinOpStrictNeq  annot :: 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
|> "!=="
    (|>) pacc :: PosAccum
pacc (JSBinOpTimes      annot :: 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
|> "*"
    (|>) pacc :: PosAccum
pacc (JSBinOpUrsh       annot :: 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
|> ">>>"


instance RenderJS JSUnaryOp where
    |> :: PosAccum -> JSUnaryOp -> PosAccum
(|>) pacc :: PosAccum
pacc (JSUnaryOpDecr   annot :: 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
|> "--"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpDelete annot :: 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
|> "delete"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpIncr   annot :: 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
|> "++"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpMinus  annot :: 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
|> "-"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpNot    annot :: 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
|> "!"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpPlus   annot :: 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
|> "+"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpTilde  annot :: 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
|> "~"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpTypeof annot :: 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
|> "typeof"
    (|>) pacc :: PosAccum
pacc (JSUnaryOpVoid   annot :: 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
|> "void"


instance RenderJS JSAssignOp where
    |> :: PosAccum -> JSAssignOp -> PosAccum
(|>) pacc :: PosAccum
pacc (JSAssign       annot :: 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
|> "="
    (|>) pacc :: PosAccum
pacc (JSTimesAssign  annot :: 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
|> "*="
    (|>) pacc :: PosAccum
pacc (JSDivideAssign annot :: 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
|> "/="
    (|>) pacc :: PosAccum
pacc (JSModAssign    annot :: 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
|> "%="
    (|>) pacc :: PosAccum
pacc (JSPlusAssign   annot :: 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
|> "+="
    (|>) pacc :: PosAccum
pacc (JSMinusAssign  annot :: 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
|> "-="
    (|>) pacc :: PosAccum
pacc (JSLshAssign    annot :: 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
|> "<<="
    (|>) pacc :: PosAccum
pacc (JSRshAssign    annot :: 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
|> ">>="
    (|>) pacc :: PosAccum
pacc (JSUrshAssign   annot :: 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
|> ">>>="
    (|>) pacc :: PosAccum
pacc (JSBwAndAssign  annot :: 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
|> "&="
    (|>) pacc :: PosAccum
pacc (JSBwXorAssign  annot :: 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
|> "^="
    (|>) pacc :: PosAccum
pacc (JSBwOrAssign   annot :: 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
|> "|="


instance RenderJS JSSemi where
    |> :: PosAccum -> JSSemi -> PosAccum
(|>) pacc :: PosAccum
pacc (JSSemi annot :: 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
|> ";"
    (|>) pacc :: PosAccum
pacc JSSemiAuto     = PosAccum
pacc


instance RenderJS JSTryCatch where
    |> :: PosAccum -> JSTryCatch -> PosAccum
(|>) pacc :: PosAccum
pacc (JSCatch anc :: JSAnnot
anc alb :: JSAnnot
alb x1 :: JSExpression
x1 arb :: JSAnnot
arb x3 :: 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
|> "catch" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
alb PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "(" 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
|> ")" PosAccum -> JSBlock -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSBlock
x3
    (|>) pacc :: PosAccum
pacc (JSCatchIf anc :: JSAnnot
anc alb :: JSAnnot
alb x1 :: JSExpression
x1 aif :: JSAnnot
aif ex :: JSExpression
ex arb :: JSAnnot
arb x3 :: 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
|> "catch" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
alb PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "(" 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
|> "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
|> ")" 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 (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
(|>) pacc :: PosAccum
pacc (JSFinally      annot :: JSAnnot
annot x :: 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
|> "finally" PosAccum -> JSBlock -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSBlock
x
    (|>) pacc :: PosAccum
pacc JSNoFinally              = PosAccum
pacc

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

instance RenderJS JSBlock where
    |> :: PosAccum -> JSBlock -> PosAccum
(|>) pacc :: PosAccum
pacc (JSBlock alb :: JSAnnot
alb ss :: [JSStatement]
ss arb :: 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
|> "{" 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
|> "}"

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

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

instance RenderJS JSPropertyName where
    |> :: PosAccum -> JSPropertyName -> PosAccum
(|>) pacc :: PosAccum
pacc (JSPropertyIdent a :: JSAnnot
a s :: 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
    (|>) pacc :: PosAccum
pacc (JSPropertyString a :: JSAnnot
a s :: 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
    (|>) pacc :: PosAccum
pacc (JSPropertyNumber a :: JSAnnot
a s :: 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
    (|>) pacc :: PosAccum
pacc (JSPropertyComputed lb :: JSAnnot
lb x :: JSExpression
x rb :: 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
|> "[" 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
|> "]"

instance RenderJS JSAccessor where
    |> :: PosAccum -> JSAccessor -> PosAccum
(|>) pacc :: PosAccum
pacc (JSAccessorGet annot :: 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
|> "get"
    (|>) pacc :: PosAccum
pacc (JSAccessorSet annot :: 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
|> "set"

instance RenderJS JSArrayElement where
    |> :: PosAccum -> JSArrayElement -> PosAccum
(|>) pacc :: PosAccum
pacc (JSArrayElement e :: JSExpression
e) = PosAccum
pacc PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
e
    (|>) pacc :: PosAccum
pacc (JSArrayComma a :: 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
|> ","

instance RenderJS [JSArrayElement] where
    |> :: PosAccum -> [JSArrayElement] -> PosAccum
(|>) = (PosAccum -> JSArrayElement -> PosAccum)
-> PosAccum -> [JSArrayElement] -> PosAccum
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
(|>) pacc :: PosAccum
pacc (JSImportDeclaration imp :: JSImportClause
imp from :: JSFromClause
from annot :: 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
    (|>) pacc :: PosAccum
pacc (JSImportDeclarationBare annot :: JSAnnot
annot m :: String
m s :: 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
(|>) pacc :: PosAccum
pacc (JSImportClauseDefault x :: JSIdent
x) = PosAccum
pacc PosAccum -> JSIdent -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSIdent
x
    (|>) pacc :: PosAccum
pacc (JSImportClauseNameSpace x :: JSImportNameSpace
x) = PosAccum
pacc PosAccum -> JSImportNameSpace -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSImportNameSpace
x
    (|>) pacc :: PosAccum
pacc (JSImportClauseNamed x :: JSImportsNamed
x) = PosAccum
pacc PosAccum -> JSImportsNamed -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSImportsNamed
x
    (|>) pacc :: PosAccum
pacc (JSImportClauseDefaultNameSpace x1 :: JSIdent
x1 annot :: JSAnnot
annot x2 :: 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
|> "," PosAccum -> JSImportNameSpace -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSImportNameSpace
x2
    (|>) pacc :: PosAccum
pacc (JSImportClauseDefaultNamed x1 :: JSIdent
x1 annot :: JSAnnot
annot x2 :: 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
|> "," PosAccum -> JSImportsNamed -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSImportsNamed
x2

instance RenderJS JSFromClause where
    |> :: PosAccum -> JSFromClause -> PosAccum
(|>) pacc :: PosAccum
pacc (JSFromClause from :: JSAnnot
from annot :: JSAnnot
annot m :: 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
|> "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
(|>) pacc :: PosAccum
pacc (JSImportNameSpace star :: JSBinOp
star annot :: JSAnnot
annot x :: 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
|> "as" PosAccum -> JSIdent -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSIdent
x

instance RenderJS JSImportsNamed where
    |> :: PosAccum -> JSImportsNamed -> PosAccum
(|>) pacc :: PosAccum
pacc (JSImportsNamed lb :: JSAnnot
lb xs :: JSCommaList JSImportSpecifier
xs rb :: 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
|> "{" 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
|> "}"

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

instance RenderJS JSExportDeclaration where
    |> :: PosAccum -> JSExportDeclaration -> PosAccum
(|>) pacc :: PosAccum
pacc (JSExport x1 :: JSStatement
x1 s :: 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
    (|>) pacc :: PosAccum
pacc (JSExportLocals xs :: JSExportClause
xs semi :: 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
    (|>) pacc :: PosAccum
pacc (JSExportFrom xs :: JSExportClause
xs from :: JSFromClause
from semi :: 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
(|>) pacc :: PosAccum
pacc (JSExportClause alb :: JSAnnot
alb JSLNil arb :: 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
|> "{" PosAccum -> JSAnnot -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSAnnot
arb PosAccum -> String -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> "}"
    (|>) pacc :: PosAccum
pacc (JSExportClause alb :: JSAnnot
alb s :: JSCommaList JSExportSpecifier
s arb :: 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
|> "{" 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
|> "}"

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

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

instance RenderJS a => RenderJS (JSCommaTrailingList a) where
    |> :: PosAccum -> JSCommaTrailingList a -> PosAccum
(|>) pacc :: PosAccum
pacc (JSCTLComma xs :: JSCommaList a
xs a :: 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
|> ","
    (|>) pacc :: PosAccum
pacc (JSCTLNone xs :: 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
(|>) pacc :: PosAccum
pacc (JSIdentName a :: JSAnnot
a s :: 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
    (|>) pacc :: PosAccum
pacc JSIdentNone       = PosAccum
pacc

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

instance RenderJS JSVarInitializer where
    |> :: PosAccum -> JSVarInitializer -> PosAccum
(|>) pacc :: PosAccum
pacc (JSVarInit a :: JSAnnot
a x :: 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
|> "=" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
x
    (|>) pacc :: PosAccum
pacc JSVarInitNone   = PosAccum
pacc

instance RenderJS [JSTemplatePart] where
    |> :: PosAccum -> [JSTemplatePart] -> PosAccum
(|>) = (PosAccum -> JSTemplatePart -> PosAccum)
-> PosAccum -> [JSTemplatePart] -> PosAccum
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
(|>) pacc :: PosAccum
pacc (JSTemplatePart e :: JSExpression
e a :: JSAnnot
a s :: 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
(|>) pacc :: PosAccum
pacc (JSExtends a :: JSAnnot
a e :: 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
|> "extends" PosAccum -> JSExpression -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSExpression
e
    (|>) pacc :: PosAccum
pacc JSExtendsNone   = PosAccum
pacc

instance RenderJS [JSClassElement] where
    |> :: PosAccum -> [JSClassElement] -> PosAccum
(|>) = (PosAccum -> JSClassElement -> PosAccum)
-> PosAccum -> [JSClassElement] -> PosAccum
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
(|>) pacc :: PosAccum
pacc (JSClassInstanceMethod m :: JSMethodDefinition
m) = PosAccum
pacc PosAccum -> JSMethodDefinition -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSMethodDefinition
m
    (|>) pacc :: PosAccum
pacc (JSClassStaticMethod a :: JSAnnot
a m :: 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
|> "static" PosAccum -> JSMethodDefinition -> PosAccum
forall a. RenderJS a => PosAccum -> a -> PosAccum
|> JSMethodDefinition
m
    (|>) pacc :: PosAccum
pacc (JSClassSemi a :: 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
|> ";"

-- EOF