{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
#ifdef ONLY_ONE_LANGUAGE
module Cubix.Language.JavaScript.Parametric.Common.Trans () where
#else
module Cubix.Language.JavaScript.Parametric.Common.Trans
(
translate
, untranslate
) where
import Data.List ( (\\) )
import Language.Haskell.TH.Syntax ( Type(ConT), Exp(VarE) )
import Control.Lens ( (&), (%~), _1 )
import Data.Comp.Multi ( Term, project, inject, unTerm, caseCxt, HFunctor(..), (:-<:), All, Sum )
import Data.Comp.Multi.Show ()
import Cubix.Language.JavaScript.Parametric.Common.Types
import qualified Cubix.Language.JavaScript.Parametric.Full as F
import Cubix.Language.Parametric.Derive
import Cubix.Language.Parametric.InjF
import Cubix.Language.Parametric.Syntax
noAnn :: (F.JSAnnot :-<: fs, All HFunctor fs) => Term fs F.JSAnnotL
noAnn :: forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn = CxtS NoHole fs (K ()) JSAnnotL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSAnnot :-<: fs, InjF fs JSAnnotL j) =>
CxtS h fs a j
F.iJSNoAnnot
semi :: (F.JSSemi :-<: fs, F.JSAnnot :-<: fs, All HFunctor fs) => Term fs F.JSSemiL
semi :: forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi = CxtS NoHole fs (K ()) JSAnnotL -> CxtS NoHole fs (K ()) JSSemiL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSSemi :-<: fs, InjF fs JSSemiL j) =>
CxtS h fs a JSAnnotL -> CxtS h fs a j
F.iJSSemi CxtS NoHole fs (K ()) JSAnnotL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSAnnot :-<: fs, InjF fs JSAnnotL j) =>
CxtS h fs a j
F.iJSNoAnnot
jsCommaListToList :: F.JSTerm (F.JSCommaList l) -> [F.JSTerm l]
jsCommaListToList :: forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList (JSTerm (JSCommaList l)
-> Maybe
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())) (JSCommaList l))
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just (F.JSLCons Cxt NoHole (Sum JSSig) (K ()) (JSCommaList l1)
xs Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) l1
x)) = JSTerm (JSCommaList l) -> [JSTerm l]
forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList JSTerm (JSCommaList l)
Cxt NoHole (Sum JSSig) (K ()) (JSCommaList l1)
xs [JSTerm l] -> [JSTerm l] -> [JSTerm l]
forall a. [a] -> [a] -> [a]
++ [JSTerm l
Cxt NoHole (Sum JSSig) (K ()) l1
x]
jsCommaListToList (JSTerm (JSCommaList l)
-> Maybe
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())) (JSCommaList l))
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just (F.JSLOne Cxt NoHole (Sum JSSig) (K ()) l1
x)) = [JSTerm l
Cxt NoHole (Sum JSSig) (K ()) l1
x]
jsCommaListToList (JSTerm (JSCommaList l)
-> Maybe
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())) (JSCommaList l))
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSCommaListF (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just JSCommaListF (Cxt NoHole (Sum JSSig) (K ())) (JSCommaList l)
F.JSLNil) = []
listToCommaList :: [F.JSTerm l] -> F.JSTerm (F.JSCommaList l)
listToCommaList :: forall l. [JSTerm l] -> JSTerm (JSCommaList l)
listToCommaList [JSTerm l]
x = [JSTerm l] -> Cxt NoHole (Sum JSSig) (K ()) (JSCommaList l)
forall {fs :: [Fragment]} {l}.
(KnownNat (Position JSCommaListF fs),
KnownNat (Position JSAnnot fs), All HFunctor fs) =>
[Cxt NoHole (Sum fs) (K ()) l]
-> Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
listToCommaList' ([JSTerm l] -> Cxt NoHole (Sum JSSig) (K ()) (JSCommaList l))
-> [JSTerm l] -> Cxt NoHole (Sum JSSig) (K ()) (JSCommaList l)
forall a b. (a -> b) -> a -> b
$ [JSTerm l] -> [JSTerm l]
forall a. [a] -> [a]
reverse [JSTerm l]
x
where
listToCommaList' :: [Cxt NoHole (Sum fs) (K ()) l]
-> Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
listToCommaList' [] = Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
forall (f :: Fragment) h (a :: * -> *) l.
(JSCommaListF :<: f) =>
Cxt h f a (JSCommaList l)
F.riJSLNil
listToCommaList' [Cxt NoHole (Sum fs) (K ()) l
x] = Cxt NoHole (Sum fs) (K ()) l
-> Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
forall (f :: Fragment) h (a :: * -> *) l.
(JSCommaListF :<: f) =>
Cxt h f a l -> Cxt h f a (JSCommaList l)
F.riJSLOne Cxt NoHole (Sum fs) (K ()) l
x
listToCommaList' (Cxt NoHole (Sum fs) (K ()) l
x:[Cxt NoHole (Sum fs) (K ()) l]
xs) = Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
-> Cxt NoHole (Sum fs) (K ()) JSAnnotL
-> Cxt NoHole (Sum fs) (K ()) l
-> Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
forall (f :: Fragment) h (a :: * -> *) l.
(JSCommaListF :<: f) =>
Cxt h f a (JSCommaList l)
-> Cxt h f a JSAnnotL -> Cxt h f a l -> Cxt h f a (JSCommaList l)
F.riJSLCons ([Cxt NoHole (Sum fs) (K ()) l]
-> Cxt NoHole (Sum fs) (K ()) (JSCommaList l)
listToCommaList' [Cxt NoHole (Sum fs) (K ()) l]
xs) Cxt NoHole (Sum fs) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum fs) (K ()) l
x
translate :: F.JSTerm l -> MJSTerm l
translate :: forall l. JSTerm l -> MJSTerm l
translate = Sum JSSig (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall l. Sum JSSig (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall (f :: Fragment) l.
Trans f =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans (Sum JSSig (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l)
-> (JSTerm l -> Sum JSSig (Cxt NoHole (Sum JSSig) (K ())) l)
-> JSTerm l
-> MJSTerm l
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSTerm l -> Sum JSSig (Cxt NoHole (Sum JSSig) (K ())) l
forall (f :: Fragment) t. HFix f t -> f (HFix f) t
unTerm
translate' :: (InjF MJSSig l l') => F.JSTerm l -> MJSTerm l'
translate' :: forall l l'. InjF MJSSig l l' => JSTerm l -> MJSTerm l'
translate' = CxtS NoHole MJSSig (K ()) l -> CxtS NoHole MJSSig (K ()) l'
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *). CxtS h MJSSig a l -> CxtS h MJSSig a l'
injF (CxtS NoHole MJSSig (K ()) l -> CxtS NoHole MJSSig (K ()) l')
-> (JSTerm l -> CxtS NoHole MJSSig (K ()) l)
-> JSTerm l
-> CxtS NoHole MJSSig (K ()) l'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSTerm l -> CxtS NoHole MJSSig (K ()) l
forall l. JSTerm l -> MJSTerm l
translate
class Trans f where
trans :: f F.JSTerm l -> MJSTerm l
instance {-# OVERLAPPING #-} (All Trans fs) => Trans (Sum fs) where
trans :: forall l. Sum fs (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans = forall (cxt :: Fragment -> Constraint) (fs :: [Fragment])
(a :: * -> *) e b.
All cxt fs =>
(forall (f :: Fragment). cxt f => f a e -> b) -> Sum fs a e -> b
caseCxt @Trans f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall l. f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall (f :: Fragment).
Trans f =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall (f :: Fragment) l.
Trans f =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans
transDefault :: (HFunctor f, f :-<: MJSSig, f :-<: F.JSSig) => f F.JSTerm l -> MJSTerm l
transDefault :: forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig, f :-<: JSSig) =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
transDefault = f (Cxt NoHole (Sum MJSSig) (K ())) l
-> Cxt NoHole (Sum MJSSig) (K ()) l
f (Cxt NoHole (Sum MJSSig) (K ()))
:-> Cxt NoHole (Sum MJSSig) (K ())
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
g (Cxt h f a) :-> Cxt h f a
inject (f (Cxt NoHole (Sum MJSSig) (K ())) l
-> Cxt NoHole (Sum MJSSig) (K ()) l)
-> (f (Cxt NoHole (Sum JSSig) (K ())) l
-> f (Cxt NoHole (Sum MJSSig) (K ())) l)
-> f (Cxt NoHole (Sum JSSig) (K ())) l
-> Cxt NoHole (Sum MJSSig) (K ()) l
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall l. JSTerm l -> MJSTerm l)
-> f (Cxt NoHole (Sum JSSig) (K ()))
:-> f (Cxt NoHole (Sum MJSSig) (K ()))
forall (f :: * -> *) (g :: * -> *). (f :-> g) -> f f :-> f g
forall (h :: Fragment) (f :: * -> *) (g :: * -> *).
HFunctor h =>
(f :-> g) -> h f :-> h g
hfmap JSTerm i -> MJSTerm i
forall l. JSTerm l -> MJSTerm l
translate
instance {-# OVERLAPPABLE #-} (HFunctor f, f :-<: MJSSig, f :-<: F.JSSig) => Trans f where
trans :: forall l. f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans = f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig, f :-<: JSSig) =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
transDefault
instance {-# OVERLAPPABLE #-} Trans F.JSVarInitializer where
trans :: forall l.
JSVarInitializer (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans = String
-> JSVarInitializer (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
forall a. HasCallStack => String -> a
error String
"JSVarInitializer found not within variable declaration"
translateAssign :: F.JSTerm F.JSExpressionL -> F.JSTerm F.JSAssignOpL -> F.JSTerm F.JSExpressionL -> MJSTerm F.JSExpressionL
translateAssign :: JSTerm JSExpressionL
-> JSTerm JSAssignOpL
-> JSTerm JSExpressionL
-> MJSTerm JSExpressionL
translateAssign JSTerm JSExpressionL
lhs JSTerm JSAssignOpL
op JSTerm JSExpressionL
rhs = CxtS NoHole MJSSig (K ()) LhsL
-> CxtS NoHole MJSSig (K ()) AssignOpL
-> CxtS NoHole MJSSig (K ()) RhsL
-> MJSTerm JSExpressionL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(Assign :-<: fs, InjF fs AssignL j) =>
CxtS h fs a LhsL
-> CxtS h fs a AssignOpL -> CxtS h fs a RhsL -> CxtS h fs a j
iAssign (MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) LhsL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a LhsL
injF (MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) LhsL)
-> MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) LhsL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
lhs) CxtS NoHole MJSSig (K ()) AssignOpL
op' (MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) RhsL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a RhsL
injF (MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) RhsL)
-> MJSTerm JSExpressionL -> CxtS NoHole MJSSig (K ()) RhsL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
rhs)
where
op' :: CxtS NoHole MJSSig (K ()) AssignOpL
op' = case JSTerm JSAssignOpL
op of
F.JSAssign' Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ -> CxtS NoHole MJSSig (K ()) AssignOpL
forall h (f :: Fragment) (a :: * -> *) j.
(AssignOpEquals :<: f) =>
Cxt h f a AssignOpL
AssignOpEquals'
JSTerm JSAssignOpL
_ -> CxtS NoHole MJSSig (K ()) JSAssignOpL
-> CxtS NoHole MJSSig (K ()) AssignOpL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSAssignOpL -> CxtS h MJSSig a AssignOpL
injF (CxtS NoHole MJSSig (K ()) JSAssignOpL
-> CxtS NoHole MJSSig (K ()) AssignOpL)
-> CxtS NoHole MJSSig (K ()) JSAssignOpL
-> CxtS NoHole MJSSig (K ()) AssignOpL
forall a b. (a -> b) -> a -> b
$ JSTerm JSAssignOpL -> CxtS NoHole MJSSig (K ()) JSAssignOpL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSAssignOpL
op
splitDirectivePrelude :: [F.JSTerm F.JSStatementL] -> ([String], [F.JSTerm F.JSStatementL])
splitDirectivePrelude :: [JSTerm JSStatementL] -> ([String], [JSTerm JSStatementL])
splitDirectivePrelude [] = ([], [])
splitDirectivePrelude (JSTerm JSStatementL
s:[JSTerm JSStatementL]
ss) = case JSTerm JSStatementL -> Maybe String
toDirective JSTerm JSStatementL
s of
Maybe String
Nothing -> ([], JSTerm JSStatementL
sJSTerm JSStatementL
-> [JSTerm JSStatementL] -> [JSTerm JSStatementL]
forall a. a -> [a] -> [a]
:[JSTerm JSStatementL]
ss)
Just String
dir -> ([JSTerm JSStatementL] -> ([String], [JSTerm JSStatementL])
splitDirectivePrelude [JSTerm JSStatementL]
ss) ([String], [JSTerm JSStatementL])
-> (([String], [JSTerm JSStatementL])
-> ([String], [JSTerm JSStatementL]))
-> ([String], [JSTerm JSStatementL])
forall a b. a -> (a -> b) -> b
& ([String] -> Identity [String])
-> ([String], [JSTerm JSStatementL])
-> Identity ([String], [JSTerm JSStatementL])
forall s t a b. Field1 s t a b => Lens s t a b
Lens
([String], [JSTerm JSStatementL])
([String], [JSTerm JSStatementL])
[String]
[String]
_1 (([String] -> Identity [String])
-> ([String], [JSTerm JSStatementL])
-> Identity ([String], [JSTerm JSStatementL]))
-> ([String] -> [String])
-> ([String], [JSTerm JSStatementL])
-> ([String], [JSTerm JSStatementL])
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (String
dirString -> [String] -> [String]
forall a. a -> [a] -> [a]
:)
where
toDirective :: F.JSTerm F.JSStatementL -> Maybe String
toDirective :: JSTerm JSStatementL -> Maybe String
toDirective (JSTerm JSStatementL
-> Maybe (JSStatement (Cxt NoHole (Sum JSSig) (K ())) JSStatementL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSStatement (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just (F.JSExpressionStatement (JSTerm JSExpressionL
-> Maybe
(JSExpression (Cxt NoHole (Sum JSSig) (K ())) JSExpressionL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSExpression (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just (F.JSStringLiteral Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ String
str)) Cxt NoHole (Sum JSSig) (K ()) JSSemiL
_)) = String -> Maybe String
forall a. a -> Maybe a
Just String
str
toDirective JSTerm JSStatementL
_ = Maybe String
forall a. Maybe a
Nothing
translateBlock :: F.JSTerm F.JSBlockL -> MJSTerm F.JSBlockL
translateBlock :: JSTerm JSBlockL -> MJSTerm JSBlockL
translateBlock (JSTerm JSBlockL
-> Maybe (JSBlock (Cxt NoHole (Sum JSSig) (K ())) JSBlockL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSBlock (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> Just (F.JSBlock Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
ss Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_)) = [String] -> CxtS NoHole MJSSig (K ()) BlockL -> MJSTerm JSBlockL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(BlockWithPrelude :-<: fs, InjF fs JSBlockL j) =>
[String] -> CxtS h fs a BlockL -> CxtS h fs a j
iBlockWithPrelude [String]
dirPrelude CxtS NoHole MJSSig (K ()) BlockL
block
where
([String]
dirPrelude, [JSTerm JSStatementL]
blockStmts) = [JSTerm JSStatementL] -> ([String], [JSTerm JSStatementL])
splitDirectivePrelude ([JSTerm JSStatementL] -> ([String], [JSTerm JSStatementL]))
-> [JSTerm JSStatementL] -> ([String], [JSTerm JSStatementL])
forall a b. (a -> b) -> a -> b
$ Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
-> [JSTerm JSStatementL]
forall l.
Cxt NoHole (Sum JSSig) (K ()) [l]
-> [Cxt NoHole (Sum JSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
ss
block :: CxtS NoHole MJSSig (K ()) BlockL
block = CxtS NoHole MJSSig (K ()) [BlockItemL]
-> CxtS NoHole MJSSig (K ()) BlockEndL
-> CxtS NoHole MJSSig (K ()) BlockL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(Block :-<: fs, InjF fs BlockL j) =>
CxtS h fs a [BlockItemL] -> CxtS h fs a BlockEndL -> CxtS h fs a j
iBlock ([Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> CxtS NoHole MJSSig (K ()) [BlockItemL]
forall l.
Typeable l =>
[Cxt NoHole (Sum MJSSig) (K ()) l]
-> Cxt NoHole (Sum MJSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> CxtS NoHole MJSSig (K ()) [BlockItemL])
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> CxtS NoHole MJSSig (K ()) [BlockItemL]
forall a b. (a -> b) -> a -> b
$ (JSTerm JSStatementL -> Cxt NoHole (Sum MJSSig) (K ()) BlockItemL)
-> [JSTerm JSStatementL]
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
forall a b. (a -> b) -> [a] -> [b]
map (CxtS NoHole MJSSig (K ()) JSStatementL
-> Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSStatementL -> CxtS h MJSSig a BlockItemL
injF(CxtS NoHole MJSSig (K ()) JSStatementL
-> Cxt NoHole (Sum MJSSig) (K ()) BlockItemL)
-> (JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL)
-> JSTerm JSStatementL
-> Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
forall b c a. (b -> c) -> (a -> b) -> a -> c
.JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL
forall l. JSTerm l -> MJSTerm l
translate) [JSTerm JSStatementL]
blockStmts) CxtS NoHole MJSSig (K ()) BlockEndL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyBlockEnd :<: f) =>
Cxt h f a BlockEndL
EmptyBlockEnd'
translateFunCall :: F.JSTerm F.JSExpressionL -> F.JSTerm (F.JSCommaList F.JSExpressionL) -> MJSTerm FunctionCallL
translateFunCall :: JSTerm JSExpressionL
-> JSTerm (JSCommaList JSExpressionL) -> MJSTerm FunctionCallL
translateFunCall JSTerm JSExpressionL
e JSTerm (JSCommaList JSExpressionL)
args = Cxt NoHole (Sum MJSSig) (K ()) FunctionCallAttrsL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentsL
-> MJSTerm FunctionCallL
forall h (f :: Fragment) (a :: * -> *) j.
(FunctionCall :<: f) =>
Cxt h f a FunctionCallAttrsL
-> Cxt h f a FunctionExpL
-> Cxt h f a FunctionArgumentsL
-> Cxt h f a FunctionCallL
FunctionCall' Cxt NoHole (Sum MJSSig) (K ()) FunctionCallAttrsL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyFunctionCallAttrs :<: f) =>
Cxt h f a FunctionCallAttrsL
EmptyFunctionCallAttrs'
(MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a FunctionExpL
injF (MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL)
-> MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
e)
(Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentsL
forall h (f :: Fragment) (a :: * -> *) j.
(FunctionArgumentList :<: f) =>
Cxt h f a [FunctionArgumentL] -> Cxt h f a FunctionArgumentsL
FunctionArgumentList' (Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentsL)
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentsL
forall a b. (a -> b) -> a -> b
$ [Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
forall l.
Typeable l =>
[Cxt NoHole (Sum MJSSig) (K ()) l]
-> Cxt NoHole (Sum MJSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL])
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL]
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
forall a b. (a -> b) -> a -> b
$ (JSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL)
-> [JSTerm JSExpressionL]
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL]
forall a b. (a -> b) -> [a] -> [b]
map (Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL
forall h (f :: Fragment) (a :: * -> *) j.
(PositionalArgument :<: f) =>
Cxt h f a PositionalArgExpL -> Cxt h f a FunctionArgumentL
PositionalArgument' (Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL)
-> (JSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL)
-> JSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a PositionalArgExpL
injF (MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL)
-> (JSTerm JSExpressionL -> MJSTerm JSExpressionL)
-> JSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate)
(JSTerm (JSCommaList JSExpressionL) -> [JSTerm JSExpressionL]
forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList JSTerm (JSCommaList JSExpressionL)
args))
instance Trans F.JSExpression where
trans :: forall l.
JSExpression (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans (F.JSIdentifier Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ String
n) = String -> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(Ident :-<: fs, InjF fs IdentL j) =>
String -> CxtS h fs a j
iIdent String
n
trans (F.JSAssignExpression JSTerm JSExpressionL
lhs JSTerm JSAssignOpL
op JSTerm JSExpressionL
rhs) = JSTerm JSExpressionL
-> JSTerm JSAssignOpL
-> JSTerm JSExpressionL
-> MJSTerm JSExpressionL
translateAssign JSTerm JSExpressionL
lhs JSTerm JSAssignOpL
op JSTerm JSExpressionL
rhs
trans (F.JSFunctionExpression Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSIdentL
a Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSIdentL)
b Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSBlockL
block) = CxtS NoHole MJSSig (K ()) JSAnnotL
-> CxtS NoHole MJSSig (K ()) JSIdentL
-> CxtS NoHole MJSSig (K ()) JSAnnotL
-> CxtS NoHole MJSSig (K ()) (JSCommaList JSIdentL)
-> CxtS NoHole MJSSig (K ()) JSAnnotL
-> MJSTerm JSBlockL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSIdentL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSIdentL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSBlockL
-> CxtS h fs a j
F.iJSFunctionExpression CxtS NoHole MJSSig (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (JSTerm JSIdentL -> CxtS NoHole MJSSig (K ()) JSIdentL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSIdentL
a) CxtS NoHole MJSSig (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (JSTerm (JSCommaList JSIdentL)
-> CxtS NoHole MJSSig (K ()) (JSCommaList JSIdentL)
forall l. JSTerm l -> MJSTerm l
translate JSTerm (JSCommaList JSIdentL)
b) CxtS NoHole MJSSig (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (JSTerm JSBlockL -> MJSTerm JSBlockL
translateBlock JSTerm JSBlockL
block)
trans (F.JSMemberExpression JSTerm JSExpressionL
f Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
args Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_) = MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a FunctionCallL -> CxtS h MJSSig a l
injF (MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l)
-> MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL
-> JSTerm (JSCommaList JSExpressionL) -> MJSTerm FunctionCallL
translateFunCall JSTerm JSExpressionL
f JSTerm (JSCommaList JSExpressionL)
args
trans (F.JSCallExpression JSTerm JSExpressionL
f Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
args Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_) = MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a FunctionCallL -> CxtS h MJSSig a l
injF (MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l)
-> MJSTerm FunctionCallL -> CxtS NoHole MJSSig (K ()) l
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL
-> JSTerm (JSCommaList JSExpressionL) -> MJSTerm FunctionCallL
translateFunCall JSTerm JSExpressionL
f JSTerm (JSCommaList JSExpressionL)
args
trans JSExpression (Cxt NoHole (Sum JSSig) (K ())) l
x = JSExpression (Cxt NoHole (Sum JSSig) (K ())) l
-> CxtS NoHole MJSSig (K ()) l
forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig, f :-<: JSSig) =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
transDefault JSExpression (Cxt NoHole (Sum JSSig) (K ())) l
x
transIdent :: F.JSTerm F.JSIdentL -> MJSTerm IdentL
transIdent :: JSTerm JSIdentL -> MJSTerm IdentL
transIdent (JSTerm JSIdentL
-> Maybe (JSIdent (Cxt NoHole (Sum JSSig) (K ())) JSIdentL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSIdent (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> (Just (F.JSIdentName Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ String
n))) = String -> MJSTerm IdentL
forall h (f :: Fragment) (a :: * -> *) j.
(Ident :<: f) =>
String -> Cxt h f a IdentL
Ident' String
n
transIdent (JSTerm JSIdentL
-> Maybe (JSIdent (Cxt NoHole (Sum JSSig) (K ())) JSIdentL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSIdent (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> (Just JSIdent (Cxt NoHole (Sum JSSig) (K ())) JSIdentL
F.JSIdentNone)) = String -> MJSTerm IdentL
forall a. HasCallStack => String -> a
error String
"JSIdentNone discovered where identifier was required"
instance Trans F.JSIdent where
trans :: forall l. JSIdent (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans (F.JSIdentName Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ String
n) = CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a (Maybe IdentL) -> CxtS h MJSSig a l
injF (CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l)
-> CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l
forall a b. (a -> b) -> a -> b
$ MJSTerm IdentL -> CxtS NoHole MJSSig (K ()) (Maybe IdentL)
forall (f :: Fragment) l h (a :: * -> *).
(MaybeF :<: f, Typeable l, HFunctor f) =>
Cxt h f a l -> Cxt h f a (Maybe l)
Just' (MJSTerm IdentL -> CxtS NoHole MJSSig (K ()) (Maybe IdentL))
-> MJSTerm IdentL -> CxtS NoHole MJSSig (K ()) (Maybe IdentL)
forall a b. (a -> b) -> a -> b
$ String -> MJSTerm IdentL
forall h (f :: Fragment) (a :: * -> *) j.
(Ident :<: f) =>
String -> Cxt h f a IdentL
Ident' String
n
trans JSIdent (Cxt NoHole (Sum JSSig) (K ())) l
F.JSIdentNone = CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a (Maybe IdentL) -> CxtS h MJSSig a l
injF (CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l)
-> CxtS NoHole MJSSig (K ()) (Maybe IdentL)
-> CxtS NoHole MJSSig (K ()) l
forall a b. (a -> b) -> a -> b
$ (CxtS NoHole MJSSig (K ()) (Maybe IdentL)
forall (f :: Fragment) l h (a :: * -> *).
(MaybeF :<: f, Typeable l, HFunctor f) =>
Cxt h f a (Maybe l)
Nothing' :: MJSTerm (Maybe IdentL))
varInitToDecl :: F.JSTerm F.JSExpressionL -> MJSTerm SingleLocalVarDeclL
varInitToDecl :: JSTerm JSExpressionL -> MJSTerm SingleLocalVarDeclL
varInitToDecl (JSTerm JSExpressionL
-> Maybe
(JSExpression (Cxt NoHole (Sum JSSig) (K ())) JSExpressionL)
NatM
Maybe
(Cxt NoHole (Sum JSSig) (K ()))
(JSExpression (Cxt NoHole (Sum JSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> (Just (F.JSVarInitExpression JSTerm JSExpressionL
lhs Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
init))) =
Cxt NoHole (Sum MJSSig) (K ()) LocalVarDeclAttrsL
-> Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
-> Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
-> MJSTerm SingleLocalVarDeclL
forall h (f :: Fragment) (a :: * -> *) j.
(SingleLocalVarDecl :<: f) =>
Cxt h f a LocalVarDeclAttrsL
-> Cxt h f a VarDeclBinderL
-> Cxt h f a OptLocalVarInitL
-> Cxt h f a SingleLocalVarDeclL
SingleLocalVarDecl' Cxt NoHole (Sum MJSSig) (K ()) LocalVarDeclAttrsL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyLocalVarDeclAttrs :<: f) =>
Cxt h f a LocalVarDeclAttrsL
EmptyLocalVarDeclAttrs' (MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a VarDeclBinderL
injF (MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL)
-> MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
lhs) Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
rhs
where
rhs :: Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
rhs = case Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
init of
F.JSVarInit' Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSExpressionL
e -> Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
-> Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
forall h (f :: Fragment) (a :: * -> *) j.
(OptLocalVarInit :<: f) =>
Cxt h f a LocalVarInitL -> Cxt h f a OptLocalVarInitL
JustLocalVarInit' (Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
-> Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL)
-> Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
-> Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
forall a b. (a -> b) -> a -> b
$ MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSExpressionL -> CxtS h MJSSig a LocalVarInitL
injF (MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL)
-> MJSTerm JSExpressionL
-> Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
e
Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
F.JSVarInitNone' -> Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
forall h (f :: Fragment) (a :: * -> *) j.
(OptLocalVarInit :<: f) =>
Cxt h f a OptLocalVarInitL
NoLocalVarInit'
extractVarDecls :: F.JSTerm (F.JSCommaList F.JSExpressionL) -> MJSTerm [SingleLocalVarDeclL]
JSTerm (JSCommaList JSExpressionL)
commaList = [MJSTerm SingleLocalVarDeclL] -> MJSTerm [SingleLocalVarDeclL]
forall l.
Typeable l =>
[Cxt NoHole (Sum MJSSig) (K ()) l]
-> Cxt NoHole (Sum MJSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([MJSTerm SingleLocalVarDeclL] -> MJSTerm [SingleLocalVarDeclL])
-> [MJSTerm SingleLocalVarDeclL] -> MJSTerm [SingleLocalVarDeclL]
forall a b. (a -> b) -> a -> b
$ (JSTerm JSExpressionL -> MJSTerm SingleLocalVarDeclL)
-> [JSTerm JSExpressionL] -> [MJSTerm SingleLocalVarDeclL]
forall a b. (a -> b) -> [a] -> [b]
map JSTerm JSExpressionL -> MJSTerm SingleLocalVarDeclL
varInitToDecl [JSTerm JSExpressionL]
exps
where
exps :: [JSTerm JSExpressionL]
exps = JSTerm (JSCommaList JSExpressionL) -> [JSTerm JSExpressionL]
forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList JSTerm (JSCommaList JSExpressionL)
commaList
transCommaExpList :: F.JSTerm (F.JSCommaList F.JSExpressionL) -> MJSTerm [F.JSExpressionL]
transCommaExpList :: JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList = [MJSTerm JSExpressionL] -> MJSTerm [JSExpressionL]
forall l.
Typeable l =>
[Cxt NoHole (Sum MJSSig) (K ()) l]
-> Cxt NoHole (Sum MJSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([MJSTerm JSExpressionL] -> MJSTerm [JSExpressionL])
-> (JSTerm (JSCommaList JSExpressionL) -> [MJSTerm JSExpressionL])
-> JSTerm (JSCommaList JSExpressionL)
-> MJSTerm [JSExpressionL]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (JSTerm JSExpressionL -> MJSTerm JSExpressionL)
-> [JSTerm JSExpressionL] -> [MJSTerm JSExpressionL]
forall a b. (a -> b) -> [a] -> [b]
map JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate ([JSTerm JSExpressionL] -> [MJSTerm JSExpressionL])
-> (JSTerm (JSCommaList JSExpressionL) -> [JSTerm JSExpressionL])
-> JSTerm (JSCommaList JSExpressionL)
-> [MJSTerm JSExpressionL]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JSTerm (JSCommaList JSExpressionL) -> [JSTerm JSExpressionL]
forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList
transParams :: F.JSTerm (F.JSCommaList F.JSIdentL) -> MJSTerm [FunctionParameterL]
transParams :: JSTerm (JSCommaList JSIdentL) -> MJSTerm [FunctionParameterL]
transParams JSTerm (JSCommaList JSIdentL)
args = [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> MJSTerm [FunctionParameterL]
forall l.
Typeable l =>
[Cxt NoHole (Sum MJSSig) (K ()) l]
-> Cxt NoHole (Sum MJSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> MJSTerm [FunctionParameterL])
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> MJSTerm [FunctionParameterL]
forall a b. (a -> b) -> a -> b
$ (JSTerm JSIdentL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL)
-> [JSTerm JSIdentL]
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
forall a b. (a -> b) -> [a] -> [b]
map (MJSTerm IdentL -> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
makeParam(MJSTerm IdentL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL)
-> (JSTerm JSIdentL -> MJSTerm IdentL)
-> JSTerm JSIdentL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
forall b c a. (b -> c) -> (a -> b) -> a -> c
.JSTerm JSIdentL -> MJSTerm IdentL
transIdent) (JSTerm (JSCommaList JSIdentL) -> [JSTerm JSIdentL]
forall l. JSTerm (JSCommaList l) -> [JSTerm l]
jsCommaListToList JSTerm (JSCommaList JSIdentL)
args)
where
makeParam :: MJSTerm IdentL -> MJSTerm FunctionParameterL
makeParam :: MJSTerm IdentL -> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
makeParam MJSTerm IdentL
n = Cxt NoHole (Sum MJSSig) (K ()) ParameterAttrsL
-> MJSTerm IdentL
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
forall h (f :: Fragment) (a :: * -> *) j.
(PositionalParameter :<: f) =>
Cxt h f a ParameterAttrsL
-> Cxt h f a IdentL -> Cxt h f a FunctionParameterL
PositionalParameter' Cxt NoHole (Sum MJSSig) (K ()) ParameterAttrsL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyParameterAttrs :<: f) =>
Cxt h f a ParameterAttrsL
EmptyParameterAttrs' MJSTerm IdentL
n
instance Trans F.JSStatement where
trans :: forall l.
JSStatement (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans (F.JSVariable Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
exprs Cxt NoHole (Sum JSSig) (K ()) JSSemiL
_) = CxtS NoHole MJSSig (K ()) MultiLocalVarDeclCommonAttrsL
-> MJSTerm [SingleLocalVarDeclL] -> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(MultiLocalVarDecl :-<: fs, InjF fs MultiLocalVarDeclL j) =>
CxtS h fs a MultiLocalVarDeclCommonAttrsL
-> CxtS h fs a [SingleLocalVarDeclL] -> CxtS h fs a j
iMultiLocalVarDecl CxtS NoHole MJSSig (K ()) MultiLocalVarDeclCommonAttrsL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyMultiLocalVarDeclCommonAttrs :<: f) =>
Cxt h f a MultiLocalVarDeclCommonAttrsL
EmptyMultiLocalVarDeclCommonAttrs'
(JSTerm (JSCommaList JSExpressionL) -> MJSTerm [SingleLocalVarDeclL]
extractVarDecls JSTerm (JSCommaList JSExpressionL)
exprs)
trans (F.JSFor Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
init Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
exp Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
upd Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSStatementL
s) = MJSTerm [JSExpressionL]
-> MJSTerm [JSExpressionL]
-> MJSTerm [JSExpressionL]
-> CxtS NoHole MJSSig (K ()) JSStatementL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSFor :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a [JSExpressionL]
-> CxtS h fs a [JSExpressionL]
-> CxtS h fs a [JSExpressionL]
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
iJSFor (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList JSTerm (JSCommaList JSExpressionL)
init) (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList JSTerm (JSCommaList JSExpressionL)
exp) (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList JSTerm (JSCommaList JSExpressionL)
upd) (JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSStatementL
s)
trans (F.JSForIn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSExpressionL
v JSTerm JSBinOpL
op JSTerm JSExpressionL
exp Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSStatementL
s) = MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSBinOpL
-> MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSStatementL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSFor :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSExpressionL
-> CxtS h fs a JSBinOpL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
iJSForIn (JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
v) (JSTerm JSBinOpL -> CxtS NoHole MJSSig (K ()) JSBinOpL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSBinOpL
op) (JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
exp) (JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSStatementL
s)
trans (F.JSForVar Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
init Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
exp Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
upd Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSStatementL
s) = MJSTerm [SingleLocalVarDeclL]
-> MJSTerm [JSExpressionL]
-> MJSTerm [JSExpressionL]
-> CxtS NoHole MJSSig (K ()) JSStatementL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSFor :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a [SingleLocalVarDeclL]
-> CxtS h fs a [JSExpressionL]
-> CxtS h fs a [JSExpressionL]
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
iJSForVar (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [SingleLocalVarDeclL]
extractVarDecls JSTerm (JSCommaList JSExpressionL)
init) (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList JSTerm (JSCommaList JSExpressionL)
exp) (JSTerm (JSCommaList JSExpressionL) -> MJSTerm [JSExpressionL]
transCommaExpList JSTerm (JSCommaList JSExpressionL)
upd) (JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSStatementL
s)
trans (F.JSForVarIn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSExpressionL
v JSTerm JSBinOpL
op JSTerm JSExpressionL
exp Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSStatementL
s) = MJSTerm SingleLocalVarDeclL
-> CxtS NoHole MJSSig (K ()) JSBinOpL
-> MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSStatementL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSFor :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a SingleLocalVarDeclL
-> CxtS h fs a JSBinOpL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
iJSForVarIn (JSTerm JSExpressionL -> MJSTerm SingleLocalVarDeclL
varInitToDecl JSTerm JSExpressionL
v) (JSTerm JSBinOpL -> CxtS NoHole MJSSig (K ()) JSBinOpL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSBinOpL
op) (JSTerm JSExpressionL -> MJSTerm JSExpressionL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSExpressionL
exp) (JSTerm JSStatementL -> CxtS NoHole MJSSig (K ()) JSStatementL
forall l. JSTerm l -> MJSTerm l
translate JSTerm JSStatementL
s)
trans (F.JSConstant Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
_ Cxt NoHole (Sum JSSig) (K ()) JSSemiL
_) = String -> CxtS NoHole MJSSig (K ()) l
forall a. HasCallStack => String -> a
error String
"ES7 Const not supported"
trans (F.JSAssignStatement JSTerm JSExpressionL
lhs JSTerm JSAssignOpL
op JSTerm JSExpressionL
rhs Cxt NoHole (Sum JSSig) (K ()) JSSemiL
s) = MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSSemiL -> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSExpressionL -> CxtS h fs a JSSemiL -> CxtS h fs a j
F.iJSExpressionStatement (JSTerm JSExpressionL
-> JSTerm JSAssignOpL
-> JSTerm JSExpressionL
-> MJSTerm JSExpressionL
translateAssign JSTerm JSExpressionL
lhs JSTerm JSAssignOpL
op JSTerm JSExpressionL
rhs) CxtS NoHole MJSSig (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
trans (F.JSFunction Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSIdentL
n Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSIdentL)
args Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm JSBlockL
block Cxt NoHole (Sum JSSig) (K ()) JSSemiL
_) = CxtS NoHole MJSSig (K ()) FunctionDefAttrsL
-> MJSTerm IdentL
-> MJSTerm [FunctionParameterL]
-> CxtS NoHole MJSSig (K ()) FunctionBodyL
-> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(FunctionDef :-<: fs, InjF fs FunctionDefL j) =>
CxtS h fs a FunctionDefAttrsL
-> CxtS h fs a IdentL
-> CxtS h fs a [FunctionParameterL]
-> CxtS h fs a FunctionBodyL
-> CxtS h fs a j
iFunctionDef CxtS NoHole MJSSig (K ()) FunctionDefAttrsL
forall h (f :: Fragment) (a :: * -> *) j.
(EmptyFunctionDefAttrs :<: f) =>
Cxt h f a FunctionDefAttrsL
EmptyFunctionDefAttrs' (JSTerm JSIdentL -> MJSTerm IdentL
transIdent JSTerm JSIdentL
n) (JSTerm (JSCommaList JSIdentL) -> MJSTerm [FunctionParameterL]
transParams JSTerm (JSCommaList JSIdentL)
args) (MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) FunctionBodyL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSBlockL -> CxtS h MJSSig a FunctionBodyL
injF (MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) FunctionBodyL)
-> MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) FunctionBodyL
forall a b. (a -> b) -> a -> b
$ JSTerm JSBlockL -> MJSTerm JSBlockL
translateBlock JSTerm JSBlockL
block)
trans (F.JSMethodCall JSTerm JSExpressionL
f Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ JSTerm (JSCommaList JSExpressionL)
args Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_ Cxt NoHole (Sum JSSig) (K ()) JSSemiL
_) = MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSSemiL -> CxtS NoHole MJSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSExpressionL -> CxtS h fs a JSSemiL -> CxtS h fs a j
F.iJSExpressionStatement (MJSTerm FunctionCallL -> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a FunctionCallL -> CxtS h MJSSig a JSExpressionL
injF (MJSTerm FunctionCallL -> MJSTerm JSExpressionL)
-> MJSTerm FunctionCallL -> MJSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ JSTerm JSExpressionL
-> JSTerm (JSCommaList JSExpressionL) -> MJSTerm FunctionCallL
translateFunCall JSTerm JSExpressionL
f JSTerm (JSCommaList JSExpressionL)
args) CxtS NoHole MJSSig (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
trans JSStatement (Cxt NoHole (Sum JSSig) (K ())) l
x = JSStatement (Cxt NoHole (Sum JSSig) (K ())) l
-> CxtS NoHole MJSSig (K ()) l
forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig, f :-<: JSSig) =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
transDefault JSStatement (Cxt NoHole (Sum JSSig) (K ())) l
x
instance Trans F.JSAST where
trans :: forall l. JSAST (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
trans (F.JSAstProgram Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
stmts Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
_) = MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) l
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l -> CxtS h fs a l'
forall h (a :: * -> *).
CxtS h MJSSig a JSBlockL -> CxtS h MJSSig a l
injF (MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) l)
-> MJSTerm JSBlockL -> CxtS NoHole MJSSig (K ()) l
forall a b. (a -> b) -> a -> b
$ JSTerm JSBlockL -> MJSTerm JSBlockL
translateBlock (Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSBlockL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSBlock :-<: fs, InjF fs JSBlockL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a [JSStatementL]
-> CxtS h fs a JSAnnotL
-> CxtS h fs a j
F.iJSBlock Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
stmts Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn)
trans JSAST (Cxt NoHole (Sum JSSig) (K ())) l
x = JSAST (Cxt NoHole (Sum JSSig) (K ())) l
-> CxtS NoHole MJSSig (K ()) l
forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig, f :-<: JSSig) =>
f (Cxt NoHole (Sum JSSig) (K ())) l -> MJSTerm l
transDefault JSAST (Cxt NoHole (Sum JSSig) (K ())) l
x
class Untrans f where
untrans :: f MJSTerm l -> F.JSTerm l
instance {-# OVERLAPPING #-} (All Untrans fs) => Untrans (Sum fs) where
untrans :: forall l. Sum fs (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans = forall (cxt :: Fragment -> Constraint) (fs :: [Fragment])
(a :: * -> *) e b.
All cxt fs =>
(forall (f :: Fragment). cxt f => f a e -> b) -> Sum fs a e -> b
caseCxt @Untrans f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall l. f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall (f :: Fragment).
Untrans f =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall (f :: Fragment) l.
Untrans f =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans
untransError :: (HFunctor f, f :-<: MJSSig) => f MJSTerm l -> F.JSTerm l
untransError :: forall (f :: Fragment) l.
(HFunctor f, f :-<: MJSSig) =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untransError f (Cxt NoHole (Sum MJSSig) (K ())) l
t = String -> JSTerm l
forall a. HasCallStack => String -> a
error (String -> JSTerm l) -> String -> JSTerm l
forall a b. (a -> b) -> a -> b
$ String
"Cannot untranslate root node: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ (Cxt NoHole (Sum MJSSig) (K ()) l -> String
forall a. Show a => a -> String
show (Cxt NoHole (Sum MJSSig) (K ()) l -> String)
-> Cxt NoHole (Sum MJSSig) (K ()) l -> String
forall a b. (a -> b) -> a -> b
$ f (Cxt NoHole (Sum MJSSig) (K ())) l
-> Cxt NoHole (Sum MJSSig) (K ()) l
f (Cxt NoHole (Sum MJSSig) (K ()))
:-> Cxt NoHole (Sum MJSSig) (K ())
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
g (Cxt h f a) :-> Cxt h f a
inject f (Cxt NoHole (Sum MJSSig) (K ())) l
t)
do ipsNames <- sumToNames ''MJSSig
modNames <- sumToNames ''F.JSSig
let targTs = map ConT $ (ipsNames \\ modNames)
\\ [ ''JSBlockIsJSAST, ''MaybeIdentIsJSIdent, ''JSFor, ''BlockIsJSStatement, ''BlockWithPrelude
, ''AssignIsJSExpression, ''MultiLocalVarDeclIsJSStatement, ''IdentIsJSExpression
, ''FunctionCallIsJSExpression, ''FunctionDefIsJSStatement]
return $ makeDefaultInstances targTs ''Untrans 'untrans (VarE 'untransError)
untransDefault :: (HFunctor f, f :-<: F.JSSig) => f MJSTerm l -> F.JSTerm l
untransDefault :: forall (f :: Fragment) l.
(HFunctor f, f :-<: JSSig) =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untransDefault = f (Cxt NoHole (Sum JSSig) (K ())) l
-> Cxt NoHole (Sum JSSig) (K ()) l
f (Cxt NoHole (Sum JSSig) (K ())) :-> Cxt NoHole (Sum JSSig) (K ())
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
g (Cxt h f a) :-> Cxt h f a
inject (f (Cxt NoHole (Sum JSSig) (K ())) l
-> Cxt NoHole (Sum JSSig) (K ()) l)
-> (f (Cxt NoHole (Sum MJSSig) (K ())) l
-> f (Cxt NoHole (Sum JSSig) (K ())) l)
-> f (Cxt NoHole (Sum MJSSig) (K ())) l
-> Cxt NoHole (Sum JSSig) (K ()) l
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ()))
-> f (Cxt NoHole (Sum MJSSig) (K ()))
:-> f (Cxt NoHole (Sum JSSig) (K ()))
forall (f :: * -> *) (g :: * -> *). (f :-> g) -> f f :-> f g
forall (h :: Fragment) (f :: * -> *) (g :: * -> *).
HFunctor h =>
(f :-> g) -> h f :-> h g
hfmap MJSTerm i -> JSTerm i
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate
instance {-# OVERLAPPABLE #-} (HFunctor f, f :-<: F.JSSig) => Untrans f where
untrans :: forall l. f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans = f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall (f :: Fragment) l.
(HFunctor f, f :-<: JSSig) =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untransDefault
instance {-# OVERLAPPING #-} Untrans IdentIsJSExpression where
untrans :: forall l.
IdentIsJSExpression (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (IdentIsJSExpression (Ident' String
n)) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> String -> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSAnnotL -> String -> CxtS h fs a j
F.iJSIdentifier Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn String
n
untransDecl :: MJSTerm SingleLocalVarDeclL -> F.JSTerm F.JSExpressionL
untransDecl :: MJSTerm SingleLocalVarDeclL -> JSTerm JSExpressionL
untransDecl (SingleLocalVarDecl' Cxt NoHole (Sum MJSSig) (K ()) LocalVarDeclAttrsL
_ Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
lhs Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
init) =
JSTerm JSExpressionL
-> Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
-> JSTerm JSExpressionL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSExpressionL
-> CxtS h fs a JSVarInitializerL -> CxtS h fs a j
F.iJSVarInitExpression (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> MJSTerm JSExpressionL -> JSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
-> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF Cxt NoHole (Sum MJSSig) (K ()) VarDeclBinderL
lhs) Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
varInit
where
varInit :: Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
varInit = case Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
init of
JustLocalVarInit' Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
e -> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSExpressionL
-> Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSVarInitializer :-<: fs, InjF fs JSVarInitializerL j) =>
CxtS h fs a JSAnnotL -> CxtS h fs a JSExpressionL -> CxtS h fs a j
F.iJSVarInit Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> MJSTerm JSExpressionL -> JSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
-> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF Cxt NoHole (Sum MJSSig) (K ()) LocalVarInitL
e)
Cxt NoHole (Sum MJSSig) (K ()) OptLocalVarInitL
NoLocalVarInit' -> Cxt NoHole (Sum JSSig) (K ()) JSVarInitializerL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSVarInitializer :-<: fs, InjF fs JSVarInitializerL j) =>
CxtS h fs a j
F.iJSVarInitNone
untransDecls :: MJSTerm [SingleLocalVarDeclL] -> F.JSTerm (F.JSCommaList F.JSExpressionL)
untransDecls :: MJSTerm [SingleLocalVarDeclL] -> JSTerm (JSCommaList JSExpressionL)
untransDecls MJSTerm [SingleLocalVarDeclL]
x = [JSTerm JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
forall l. [JSTerm l] -> JSTerm (JSCommaList l)
listToCommaList ([JSTerm JSExpressionL] -> JSTerm (JSCommaList JSExpressionL))
-> [JSTerm JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
forall a b. (a -> b) -> a -> b
$ (MJSTerm SingleLocalVarDeclL -> JSTerm JSExpressionL)
-> [MJSTerm SingleLocalVarDeclL] -> [JSTerm JSExpressionL]
forall a b. (a -> b) -> [a] -> [b]
map MJSTerm SingleLocalVarDeclL -> JSTerm JSExpressionL
untransDecl ([MJSTerm SingleLocalVarDeclL] -> [JSTerm JSExpressionL])
-> [MJSTerm SingleLocalVarDeclL] -> [JSTerm JSExpressionL]
forall a b. (a -> b) -> a -> b
$ MJSTerm [SingleLocalVarDeclL] -> [MJSTerm SingleLocalVarDeclL]
forall l.
Cxt NoHole (Sum MJSSig) (K ()) [l]
-> [Cxt NoHole (Sum MJSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF MJSTerm [SingleLocalVarDeclL]
x
instance {-# OVERLAPPING #-} Untrans MultiLocalVarDeclIsJSStatement where
untrans :: forall l.
MultiLocalVarDeclIsJSStatement (Cxt NoHole (Sum MJSSig) (K ())) l
-> JSTerm l
untrans (MultiLocalVarDeclIsJSStatement (MultiLocalVarDecl' CxtS NoHole MJSSig (K ()) MultiLocalVarDeclCommonAttrsL
_ MJSTerm [SingleLocalVarDeclL]
decs)) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSSemiL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSSemiL
-> CxtS h fs a j
F.iJSVariable Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [SingleLocalVarDeclL] -> JSTerm (JSCommaList JSExpressionL)
untransDecls MJSTerm [SingleLocalVarDeclL]
decs) Cxt NoHole (Sum JSSig) (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
untransOp :: MJSTerm AssignOpL -> F.JSTerm F.JSAssignOpL
untransOp :: CxtS NoHole MJSSig (K ()) AssignOpL -> JSTerm JSAssignOpL
untransOp CxtS NoHole MJSSig (K ()) AssignOpL
AssignOpEquals' = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL -> JSTerm JSAssignOpL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSAssignOp :-<: fs, InjF fs JSAssignOpL j) =>
CxtS h fs a JSAnnotL -> CxtS h fs a j
F.iJSAssign Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn
untransOp CxtS NoHole MJSSig (K ()) AssignOpL
x = CxtS NoHole MJSSig (K ()) JSAssignOpL -> JSTerm JSAssignOpL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (CxtS NoHole MJSSig (K ()) JSAssignOpL -> JSTerm JSAssignOpL)
-> CxtS NoHole MJSSig (K ()) JSAssignOpL -> JSTerm JSAssignOpL
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) AssignOpL
-> CxtS NoHole MJSSig (K ()) JSAssignOpL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF CxtS NoHole MJSSig (K ()) AssignOpL
x
instance {-# OVERLAPPING #-} Untrans AssignIsJSExpression where
untrans :: forall l.
AssignIsJSExpression (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (AssignIsJSExpression (Assign' CxtS NoHole MJSSig (K ()) LhsL
lhs CxtS NoHole MJSSig (K ()) AssignOpL
op CxtS NoHole MJSSig (K ()) RhsL
rhs)) = JSTerm JSExpressionL
-> JSTerm JSAssignOpL
-> JSTerm JSExpressionL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSExpressionL
-> CxtS h fs a JSAssignOpL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a j
F.iJSAssignExpression (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> MJSTerm JSExpressionL -> JSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) LhsL -> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF CxtS NoHole MJSSig (K ()) LhsL
lhs) (CxtS NoHole MJSSig (K ()) AssignOpL -> JSTerm JSAssignOpL
untransOp CxtS NoHole MJSSig (K ()) AssignOpL
op) (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> MJSTerm JSExpressionL -> JSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) RhsL -> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF CxtS NoHole MJSSig (K ()) RhsL
rhs)
toJSString :: String -> MJSTerm F.JSStatementL
toJSString :: String -> CxtS NoHole MJSSig (K ()) JSStatementL
toJSString String
s = MJSTerm JSExpressionL
-> CxtS NoHole MJSSig (K ()) JSSemiL
-> CxtS NoHole MJSSig (K ()) JSStatementL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSExpressionL -> CxtS h fs a JSSemiL -> CxtS h fs a j
F.iJSExpressionStatement (CxtS NoHole MJSSig (K ()) JSAnnotL
-> String -> MJSTerm JSExpressionL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSAnnotL -> String -> CxtS h fs a j
F.iJSStringLiteral CxtS NoHole MJSSig (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn String
s) CxtS NoHole MJSSig (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
instance {-# OVERLAPPING #-} Untrans BlockWithPrelude where
untrans :: forall l.
BlockWithPrelude (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (BlockWithPrelude [String]
dirPrelude (Block' CxtS NoHole MJSSig (K ()) [BlockItemL]
ss CxtS NoHole MJSSig (K ()) BlockEndL
_)) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSBlock :-<: fs, InjF fs JSBlockL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a [JSStatementL]
-> CxtS h fs a JSAnnotL
-> CxtS h fs a j
F.iJSBlock Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn ([JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
forall l.
Typeable l =>
[Cxt NoHole (Sum JSSig) (K ()) l]
-> Cxt NoHole (Sum JSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL])
-> [JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
forall a b. (a -> b) -> a -> b
$ (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL)
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [JSTerm JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate [CxtS NoHole MJSSig (K ()) JSStatementL]
stmts) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn
where
stmts :: [CxtS NoHole MJSSig (K ()) JSStatementL]
stmts = ((String -> CxtS NoHole MJSSig (K ()) JSStatementL)
-> [String] -> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map String -> CxtS NoHole MJSSig (K ()) JSStatementL
toJSString [String]
dirPrelude) [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a. [a] -> [a] -> [a]
++ ((Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL)
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF ([Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL])
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) [BlockItemL]
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
forall l.
Cxt NoHole (Sum MJSSig) (K ()) [l]
-> [Cxt NoHole (Sum MJSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF CxtS NoHole MJSSig (K ()) [BlockItemL]
ss)
instance {-# OVERLAPPING #-} Untrans BlockIsJSStatement where
untrans :: forall l.
BlockIsJSStatement (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (BlockIsJSStatement (Block' CxtS NoHole MJSSig (K ()) [BlockItemL]
ss CxtS NoHole MJSSig (K ()) BlockEndL
_)) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSSemiL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a [JSStatementL]
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSSemiL
-> CxtS h fs a j
F.iJSStatementBlock Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn ((Cxt NoHole (Sum MJSSig) (K ()) BlockItemL -> JSTerm JSStatementL)
-> CxtS NoHole MJSSig (K ()) [BlockItemL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
forall (f :: * -> *) (h :: * -> *) (g :: * -> *) b a.
(InsertF f h, ExtractF f g, Functor f, Typeable b) =>
(g a -> h b) -> g (f a) -> h (f b)
mapF (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate(CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL)
-> (Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL)
-> Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> JSTerm JSStatementL
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF) CxtS NoHole MJSSig (K ()) [BlockItemL]
ss) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
untransCommaListExp :: MJSTerm [F.JSExpressionL] -> F.JSTerm (F.JSCommaList F.JSExpressionL)
untransCommaListExp :: MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp = [JSTerm JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
forall l. [JSTerm l] -> JSTerm (JSCommaList l)
listToCommaList ([JSTerm JSExpressionL] -> JSTerm (JSCommaList JSExpressionL))
-> (MJSTerm [JSExpressionL] -> [JSTerm JSExpressionL])
-> MJSTerm [JSExpressionL]
-> JSTerm (JSCommaList JSExpressionL)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> [MJSTerm JSExpressionL] -> [JSTerm JSExpressionL]
forall a b. (a -> b) -> [a] -> [b]
map MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate ([MJSTerm JSExpressionL] -> [JSTerm JSExpressionL])
-> (MJSTerm [JSExpressionL] -> [MJSTerm JSExpressionL])
-> MJSTerm [JSExpressionL]
-> [JSTerm JSExpressionL]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MJSTerm [JSExpressionL] -> [MJSTerm JSExpressionL]
forall l.
Cxt NoHole (Sum MJSSig) (K ()) [l]
-> [Cxt NoHole (Sum MJSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF
instance {-# OVERLAPPING #-} Untrans JSFor where
untrans :: forall l. JSFor (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (JSFor MJSTerm [JSExpressionL]
init MJSTerm [JSExpressionL]
exp MJSTerm [JSExpressionL]
upd CxtS NoHole MJSSig (K ()) JSStatementL
s) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSStatementL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
F.iJSFor Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp MJSTerm [JSExpressionL]
init) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp MJSTerm [JSExpressionL]
exp) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp MJSTerm [JSExpressionL]
upd) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSStatementL
s)
untrans (JSForIn MJSTerm JSExpressionL
lhs CxtS NoHole MJSSig (K ()) JSBinOpL
b MJSTerm JSExpressionL
e CxtS NoHole MJSSig (K ()) JSStatementL
s) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSExpressionL
-> JSTerm JSBinOpL
-> JSTerm JSExpressionL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSStatementL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSBinOpL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
F.iJSForIn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate MJSTerm JSExpressionL
lhs) (CxtS NoHole MJSSig (K ()) JSBinOpL -> JSTerm JSBinOpL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSBinOpL
b) (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate MJSTerm JSExpressionL
e) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSStatementL
s)
untrans (JSForVar MJSTerm [SingleLocalVarDeclL]
dec MJSTerm [JSExpressionL]
exp MJSTerm [JSExpressionL]
upd CxtS NoHole MJSSig (K ()) JSStatementL
s) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSStatementL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
F.iJSForVar Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [SingleLocalVarDeclL] -> JSTerm (JSCommaList JSExpressionL)
untransDecls MJSTerm [SingleLocalVarDeclL]
dec) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp MJSTerm [JSExpressionL]
exp) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp MJSTerm [JSExpressionL]
upd) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSStatementL
s)
untrans (JSForVarIn MJSTerm SingleLocalVarDeclL
dec CxtS NoHole MJSSig (K ()) JSBinOpL
b MJSTerm JSExpressionL
e CxtS NoHole MJSSig (K ()) JSStatementL
s) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSExpressionL
-> JSTerm JSBinOpL
-> JSTerm JSExpressionL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSStatementL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSBinOpL
-> CxtS h fs a JSExpressionL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSStatementL
-> CxtS h fs a j
F.iJSForVarIn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm SingleLocalVarDeclL -> JSTerm JSExpressionL
untransDecl MJSTerm SingleLocalVarDeclL
dec) (CxtS NoHole MJSSig (K ()) JSBinOpL -> JSTerm JSBinOpL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSBinOpL
b) (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate MJSTerm JSExpressionL
e) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate CxtS NoHole MJSSig (K ()) JSStatementL
s)
untransIdent :: MJSTerm IdentL -> F.JSTerm F.JSIdentL
untransIdent :: MJSTerm IdentL -> JSTerm JSIdentL
untransIdent (Ident' String
s) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL -> String -> JSTerm JSIdentL
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSIdent :-<: fs, InjF fs JSIdentL j) =>
CxtS h fs a JSAnnotL -> String -> CxtS h fs a j
F.iJSIdentName Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn String
s
instance {-# OVERLAPPING #-} Untrans MaybeIdentIsJSIdent where
untrans :: forall l.
MaybeIdentIsJSIdent (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (MaybeIdentIsJSIdent CxtS NoHole MJSSig (K ()) (Maybe IdentL)
x) = case CxtS NoHole MJSSig (K ()) (Maybe IdentL) -> Maybe (MJSTerm IdentL)
forall l.
Cxt NoHole (Sum MJSSig) (K ()) (Maybe l)
-> Maybe (Cxt NoHole (Sum MJSSig) (K ()) l)
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF CxtS NoHole MJSSig (K ()) (Maybe IdentL)
x of
Just (Ident' String
s) -> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL -> String -> JSTerm l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSIdent :-<: fs, InjF fs JSIdentL j) =>
CxtS h fs a JSAnnotL -> String -> CxtS h fs a j
F.iJSIdentName Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn String
s
Maybe (MJSTerm IdentL)
Nothing -> JSTerm l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSIdent :-<: fs, InjF fs JSIdentL j) =>
CxtS h fs a j
F.iJSIdentNone
instance {-# OVERLAPPING #-} Untrans JSBlockIsJSAST where
untrans :: forall l.
JSBlockIsJSAST (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (JSBlockIsJSAST (MJSTerm JSBlockL
-> Maybe
(BlockWithPrelude (Cxt NoHole (Sum MJSSig) (K ())) JSBlockL)
NatM
Maybe
(Cxt NoHole (Sum MJSSig) (K ()))
(BlockWithPrelude (Cxt NoHole (Sum MJSSig) (K ())))
forall (g :: Fragment) (f :: Fragment) h (a :: * -> *).
(g :<: f) =>
NatM Maybe (Cxt h f a) (g (Cxt h f a))
project -> (Just (BlockWithPrelude [String]
dirPrelude (Block' CxtS NoHole MJSSig (K ()) [BlockItemL]
ss CxtS NoHole MJSSig (K ()) BlockEndL
_))))) = Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSAST :-<: fs, InjF fs JSASTL j) =>
CxtS h fs a [JSStatementL] -> CxtS h fs a JSAnnotL -> CxtS h fs a j
F.iJSAstProgram ([JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
forall l.
Typeable l =>
[Cxt NoHole (Sum JSSig) (K ()) l]
-> Cxt NoHole (Sum JSSig) (K ()) [l]
forall (f :: * -> *) (e :: * -> *) l.
(InsertF f e, Typeable l) =>
f (e l) -> e (f l)
insertF ([JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL])
-> [JSTerm JSStatementL]
-> Cxt NoHole (Sum JSSig) (K ()) [JSStatementL]
forall a b. (a -> b) -> a -> b
$ (CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL)
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [JSTerm JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map CxtS NoHole MJSSig (K ()) JSStatementL -> JSTerm JSStatementL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate [CxtS NoHole MJSSig (K ()) JSStatementL]
stmts) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn
where
stmts :: [MJSTerm F.JSStatementL]
stmts :: [CxtS NoHole MJSSig (K ()) JSStatementL]
stmts = ((String -> CxtS NoHole MJSSig (K ()) JSStatementL)
-> [String] -> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map String -> CxtS NoHole MJSSig (K ()) JSStatementL
toJSString [String]
dirPrelude) [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a. [a] -> [a] -> [a]
++ ((Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL)
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> [a] -> [b]
map Cxt NoHole (Sum MJSSig) (K ()) BlockItemL
-> CxtS NoHole MJSSig (K ()) JSStatementL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF ([Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL])
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
-> [CxtS NoHole MJSSig (K ()) JSStatementL]
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) [BlockItemL]
-> [Cxt NoHole (Sum MJSSig) (K ()) BlockItemL]
forall l.
Cxt NoHole (Sum MJSSig) (K ()) [l]
-> [Cxt NoHole (Sum MJSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF CxtS NoHole MJSSig (K ()) [BlockItemL]
ss)
untransArgs :: MJSTerm [FunctionArgumentL] -> F.JSTerm (F.JSCommaList F.JSExpressionL)
untransArgs :: Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> JSTerm (JSCommaList JSExpressionL)
untransArgs = MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL)
untransCommaListExp (MJSTerm [JSExpressionL] -> JSTerm (JSCommaList JSExpressionL))
-> (Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> MJSTerm [JSExpressionL])
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> JSTerm (JSCommaList JSExpressionL)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL
-> MJSTerm JSExpressionL)
-> Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> MJSTerm [JSExpressionL]
forall (f :: * -> *) (h :: * -> *) (g :: * -> *) b a.
(InsertF f h, ExtractF f g, Functor f, Typeable b) =>
(g a -> h b) -> g (f a) -> h (f b)
mapF Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL
-> MJSTerm JSExpressionL
untransArg
where
untransArg :: MJSTerm FunctionArgumentL -> MJSTerm F.JSExpressionL
untransArg :: Cxt NoHole (Sum MJSSig) (K ()) FunctionArgumentL
-> MJSTerm JSExpressionL
untransArg (PositionalArgument' Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
x) = Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
-> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF Cxt NoHole (Sum MJSSig) (K ()) PositionalArgExpL
x
instance {-# OVERLAPPING #-} Untrans FunctionCallIsJSExpression where
untrans :: forall l.
FunctionCallIsJSExpression (Cxt NoHole (Sum MJSSig) (K ())) l
-> JSTerm l
untrans (FunctionCallIsJSExpression (FunctionCall' Cxt NoHole (Sum MJSSig) (K ()) FunctionCallAttrsL
EmptyFunctionCallAttrs' Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
f (FunctionArgumentList' Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
args))) = JSTerm JSExpressionL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSExpressionL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSExpression :-<: fs, InjF fs JSExpressionL j) =>
CxtS h fs a JSExpressionL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSExpressionL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a j
F.iJSCallExpression (MJSTerm JSExpressionL -> JSTerm JSExpressionL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSExpressionL -> JSTerm JSExpressionL)
-> MJSTerm JSExpressionL -> JSTerm JSExpressionL
forall a b. (a -> b) -> a -> b
$ Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
-> MJSTerm JSExpressionL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF Cxt NoHole (Sum MJSSig) (K ()) FunctionExpL
f) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
-> JSTerm (JSCommaList JSExpressionL)
untransArgs Cxt NoHole (Sum MJSSig) (K ()) [FunctionArgumentL]
args) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn
untransParams :: MJSTerm [FunctionParameterL] -> F.JSTerm (F.JSCommaList F.JSIdentL)
untransParams :: MJSTerm [FunctionParameterL] -> JSTerm (JSCommaList JSIdentL)
untransParams MJSTerm [FunctionParameterL]
params = [JSTerm JSIdentL] -> JSTerm (JSCommaList JSIdentL)
forall l. [JSTerm l] -> JSTerm (JSCommaList l)
listToCommaList ([JSTerm JSIdentL] -> JSTerm (JSCommaList JSIdentL))
-> [JSTerm JSIdentL] -> JSTerm (JSCommaList JSIdentL)
forall a b. (a -> b) -> a -> b
$ (Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
-> JSTerm JSIdentL)
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> [JSTerm JSIdentL]
forall a b. (a -> b) -> [a] -> [b]
map (MJSTerm IdentL -> JSTerm JSIdentL
untransIdent(MJSTerm IdentL -> JSTerm JSIdentL)
-> (Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
-> MJSTerm IdentL)
-> Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL
-> JSTerm JSIdentL
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL -> MJSTerm IdentL
paramToIdent) ([Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> [JSTerm JSIdentL])
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
-> [JSTerm JSIdentL]
forall a b. (a -> b) -> a -> b
$ MJSTerm [FunctionParameterL]
-> [Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL]
forall l.
Cxt NoHole (Sum MJSSig) (K ()) [l]
-> [Cxt NoHole (Sum MJSSig) (K ()) l]
forall (f :: * -> *) (e :: * -> *) l.
ExtractF f e =>
e (f l) -> f (e l)
extractF MJSTerm [FunctionParameterL]
params
where
paramToIdent :: MJSTerm FunctionParameterL -> MJSTerm IdentL
paramToIdent :: Cxt NoHole (Sum MJSSig) (K ()) FunctionParameterL -> MJSTerm IdentL
paramToIdent (PositionalParameter' Cxt NoHole (Sum MJSSig) (K ()) ParameterAttrsL
EmptyParameterAttrs' MJSTerm IdentL
n) = MJSTerm IdentL
n
instance {-# OVERLAPPING #-} Untrans FunctionDefIsJSStatement where
untrans :: forall l.
FunctionDefIsJSStatement (Cxt NoHole (Sum MJSSig) (K ())) l
-> JSTerm l
untrans (FunctionDefIsJSStatement (FunctionDef' CxtS NoHole MJSSig (K ()) FunctionDefAttrsL
EmptyFunctionDefAttrs' MJSTerm IdentL
n MJSTerm [FunctionParameterL]
params CxtS NoHole MJSSig (K ()) FunctionBodyL
block)) = Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSIdentL
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm (JSCommaList JSIdentL)
-> Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
-> JSTerm JSBlockL
-> Cxt NoHole (Sum JSSig) (K ()) JSSemiL
-> CxtS NoHole JSSig (K ()) l
forall h (fs :: [Fragment]) (a :: * -> *) j.
(JSStatement :-<: fs, InjF fs JSStatementL j) =>
CxtS h fs a JSAnnotL
-> CxtS h fs a JSIdentL
-> CxtS h fs a JSAnnotL
-> CxtS h fs a (JSCommaList JSIdentL)
-> CxtS h fs a JSAnnotL
-> CxtS h fs a JSBlockL
-> CxtS h fs a JSSemiL
-> CxtS h fs a j
F.iJSFunction Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm IdentL -> JSTerm JSIdentL
untransIdent MJSTerm IdentL
n) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm [FunctionParameterL] -> JSTerm (JSCommaList JSIdentL)
untransParams MJSTerm [FunctionParameterL]
params) Cxt NoHole (Sum JSSig) (K ()) JSAnnotL
forall (fs :: [Fragment]).
(JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSAnnotL
noAnn (MJSTerm JSBlockL -> JSTerm JSBlockL
Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate (MJSTerm JSBlockL -> JSTerm JSBlockL)
-> MJSTerm JSBlockL -> JSTerm JSBlockL
forall a b. (a -> b) -> a -> b
$ CxtS NoHole MJSSig (K ()) FunctionBodyL -> MJSTerm JSBlockL
forall (fs :: [Fragment]) l l' h (a :: * -> *).
InjF fs l l' =>
CxtS h fs a l' -> CxtS h fs a l
fromProjF CxtS NoHole MJSSig (K ()) FunctionBodyL
block) Cxt NoHole (Sum JSSig) (K ()) JSSemiL
forall (fs :: [Fragment]).
(JSSemi :-<: fs, JSAnnot :-<: fs, All HFunctor fs) =>
Term fs JSSemiL
semi
untranslate :: MJSTerm l -> F.JSTerm l
untranslate :: Cxt NoHole (Sum MJSSig) (K ()) :-> Cxt NoHole (Sum JSSig) (K ())
untranslate = Sum MJSSig (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall l. Sum MJSSig (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
forall (f :: Fragment) l.
Untrans f =>
f (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l
untrans (Sum MJSSig (Cxt NoHole (Sum MJSSig) (K ())) l -> JSTerm l)
-> (MJSTerm l -> Sum MJSSig (Cxt NoHole (Sum MJSSig) (K ())) l)
-> MJSTerm l
-> JSTerm l
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MJSTerm l -> Sum MJSSig (Cxt NoHole (Sum MJSSig) (K ())) l
forall (f :: Fragment) t. HFix f t -> f (HFix f) t
unTerm
#endif