@@ -30,6 +30,7 @@ import Language.PureScript.CodeGen.JS.AST
30import Language.PureScript.CodeGen.Common (identToJs)
30import Language.PureScript.CodeGen.Common (identToJs)
31import Language.PureScript.Optimizer.Common
31import Language.PureScript.Optimizer.Common
32import Language.PureScript.Names
32import Language.PureScript.Names
33+import Language.PureScript.Supply (freshName, evalSupply)
34import qualified Language.PureScript.Constants as C
35import qualified Language.PureScript.Constants as C
@@ -88,9 +89,10 @@ inlineCompose :: JS -> JS
88inlineCompose = everywhereOnJS convert
89inlineCompose = everywhereOnJS convert
90 convert :: JS -> JS
91 convert :: JS -> JS
91− convert (JSApp (JSApp comp [f]) [g]) | isBackwardComp comp = JSFunction Nothing ["x"] (JSBlock [JSReturn (JSApp f [JSApp g [JSVar "x"]])])
92+ convert (JSApp (JSApp comp [f]) [g]) | isBackwardComp comp = JSFunction Nothing [var] (JSBlock [JSReturn (JSApp f [JSApp g [JSVar var]])])
92− convert (JSApp (JSApp comp [f]) [g]) | isForwardComp comp = JSFunction Nothing ["x"] (JSBlock [JSReturn (JSApp g [JSApp f [JSVar "x"]])])
93+ convert (JSApp (JSApp comp [f]) [g]) | isForwardComp comp = JSFunction Nothing [var] (JSBlock [JSReturn (JSApp g [JSApp f [JSVar var]])])
93 convert other = other
94 convert other = other
95+ var = evalSupply 1 freshName
94 isBackwardComp (JSApp (JSIndexer (JSStringLiteral comp) (JSVar prelude)) semi) = comp == (C.<<<) && prelude == C.prelude && isSemi semi
96 isBackwardComp (JSApp (JSIndexer (JSStringLiteral comp) (JSVar prelude)) semi) = comp == (C.<<<) && prelude == C.prelude && isSemi semi
95 isBackwardComp _ = False
97 isBackwardComp _ = False
96 isForwardComp (JSApp (JSIndexer (JSStringLiteral comp) (JSVar prelude)) semi) = comp == (C.>>>) && prelude == C.prelude && isSemi semi
98 isForwardComp (JSApp (JSIndexer (JSStringLiteral comp) (JSVar prelude)) semi) = comp == (C.>>>) && prelude == C.prelude && isSemi semi