@@ -344,70 +344,10 @@ binop
344344 -> Opt.Expr
345345 -> Opt.Expr
346346 -> State Int Code
347−binop func left right
348− | func == Var.Canonical Var.BuiltIn "::" =
349− generateCode (Data "::" [left,right])
350−
351− | func == forwardCompose =
352− compose (collectLeftAssoc forwardCompose left right)
353−
354− | func == backwardCompose =
355− compose (collectRightAssoc backwardCompose left right)
356−
357− | func == forwardApply =
358− pipe (collectLeftAssoc forwardApply left right)
359−
360− | func == backwardApply =
361− pipe (collectRightAssoc backwardApply left right)
362−
363− | otherwise =
364− do jsLeft <- generateJsExpr left
365− jsRight <- generateJsExpr right
366− jsExpr (makeExpr func jsLeft jsRight)
367−
368−
369−-- CONTROL FLOW OPERATOR HELPERS
370−
371−apply :: Expression () -> Expression () -> Expression ()
372−apply arg func =
373− func <| arg
374−
375−
376−compose :: [Opt.Expr] -> State Int Code
377−compose functions =
378− do jsFunctions <- mapM generateJsExpr functions
379− jsExpr $ ["$"] ==> List.foldl' apply (ref "$") jsFunctions
380−
381−
382−pipe :: [Opt.Expr] -> State Int Code
383−pipe expressions =
384− do (value:functions) <- mapM generateJsExpr expressions
385− jsExpr $ List.foldl' apply value functions
386−
387−
388−forwardCompose :: Var.Canonical
389−forwardCompose =
390− inBasics ">>"
391−
392−
393−backwardCompose :: Var.Canonical
394−backwardCompose =
395− inBasics "<<"
396−
397−
398−forwardApply :: Var.Canonical
399−forwardApply =
400− inBasics "|>"
401−
402−
403−backwardApply :: Var.Canonical
404−backwardApply =
405− inBasics "<|"
406−
407−
408−inBasics :: String -> Var.Canonical
409−inBasics name =
410− Var.inCore ["Basics"] name
347+binop func left right =
348+ do jsLeft <- generateJsExpr left
349+ jsRight <- generateJsExpr right
350+ jsExpr (makeExpr func jsLeft jsRight)
411351
412352
413353-- BINARY OPERATOR HELPERS
@@ -447,7 +387,6 @@ infixOps =
447387specialOps :: [(String, Expression () -> Expression () -> Expression ())]
448388specialOps =
449389 [ (,) "^" $ \a b -> obj ["Math","pow"] `call` [a,b]
450− , (,) "|>" $ flip (<|)
451390 , (,) "==" $ \a b -> BuiltIn.eq a b
452391 , (,) "/=" $ \a b -> PrefixExpr () PrefixLNot (BuiltIn.eq a b)
453392 , (,) "<" $ cmp OpLT 0
@@ -461,38 +400,3 @@ specialOps =
461400cmp :: InfixOp -> Int -> Expression () -> Expression () -> Expression ()
462401cmp op n a b =
463402 InfixExpr () op (BuiltIn.compare a b) (IntLit () n)
464−
465−
466−-- BINARY OPERATOR COLLECTORS
467−
468−-- (h << g << f) becomes [f, g, h] which is the order you want for doing stuff
469−collectRightAssoc :: Var.Canonical -> Opt.Expr -> Opt.Expr -> [Opt.Expr]
470−collectRightAssoc desiredOp left right =
471− collectRightAssocHelp desiredOp [left] right
472−
473−
474−collectRightAssocHelp :: Var.Canonical -> [Opt.Expr] -> Opt.Expr -> [Opt.Expr]
475−collectRightAssocHelp desiredOp exprList expr =
476− case expr of
477− Binop op left right | op == desiredOp ->
478− collectRightAssocHelp desiredOp (left : exprList) right
479−
480− _ ->
481− expr : exprList
482−
483−
484−-- (f >> g >> h) becomes [f, g, h] which is the order you want for doing stuff
485−collectLeftAssoc :: Var.Canonical -> Opt.Expr -> Opt.Expr -> [Opt.Expr]
486−collectLeftAssoc desiredOp left right =
487− collectLeftAssocHelp desiredOp [right] left
488−
489−
490−collectLeftAssocHelp :: Var.Canonical -> [Opt.Expr] -> Opt.Expr -> [Opt.Expr]
491−collectLeftAssocHelp desiredOp exprList expr =
492− case expr of
493− Binop op left right | op == desiredOp ->
494− collectLeftAssocHelp desiredOp (right : exprList) left
495−
496− _ ->
497− expr : exprList
498−