@@ -344,70 +344,10 @@ binop
344 -> Opt.Expr
344 -> Opt.Expr
345 -> Opt.Expr
345 -> Opt.Expr
346 -> State Int Code
346 -> State Int Code
347−binop func left right
347+binop func left right =
348− | func == Var.Canonical Var.BuiltIn "::" =
349− generateCode (Data "::" [left,right])
351− | func == forwardCompose =
352− compose (collectLeftAssoc forwardCompose left right)
354− | func == backwardCompose =
355− compose (collectRightAssoc backwardCompose left right)
357− | func == forwardApply =
358− pipe (collectLeftAssoc forwardApply left right)
360− | func == backwardApply =
361− pipe (collectRightAssoc backwardApply left right)
364− do jsLeft <- generateJsExpr left
348+ do jsLeft <- generateJsExpr left
365− jsRight <- generateJsExpr right
349+ jsRight <- generateJsExpr right
366− jsExpr (makeExpr func jsLeft jsRight)
350+ jsExpr (makeExpr func jsLeft jsRight)
369−-- CONTROL FLOW OPERATOR HELPERS
371−apply :: Expression () -> Expression () -> Expression ()
376−compose :: [Opt.Expr] -> State Int Code
378− do jsFunctions <- mapM generateJsExpr functions
379− jsExpr $ ["$"] ==> List.foldl' apply (ref "$") jsFunctions
382−pipe :: [Opt.Expr] -> State Int Code
384− do (value:functions) <- mapM generateJsExpr expressions
385− jsExpr $ List.foldl' apply value functions
388−forwardCompose :: Var.Canonical
393−backwardCompose :: Var.Canonical
398−forwardApply :: Var.Canonical
403−backwardApply :: Var.Canonical
408−inBasics :: String -> Var.Canonical
410− Var.inCore ["Basics"] name
413-- BINARY OPERATOR HELPERS
353-- BINARY OPERATOR HELPERS
@@ -447,7 +387,6 @@ infixOps =
447specialOps :: [(String, Expression () -> Expression () -> Expression ())]
387specialOps :: [(String, Expression () -> Expression () -> Expression ())]
448specialOps =
388specialOps =
449 [ (,) "^" $ \a b -> obj ["Math","pow"] `call` [a,b]
389 [ (,) "^" $ \a b -> obj ["Math","pow"] `call` [a,b]
450− , (,) "|>" $ flip (<|)
451 , (,) "==" $ \a b -> BuiltIn.eq a b
390 , (,) "==" $ \a b -> BuiltIn.eq a b
452 , (,) "/=" $ \a b -> PrefixExpr () PrefixLNot (BuiltIn.eq a b)
391 , (,) "/=" $ \a b -> PrefixExpr () PrefixLNot (BuiltIn.eq a b)
453 , (,) "<" $ cmp OpLT 0
392 , (,) "<" $ cmp OpLT 0
@@ -461,38 +400,3 @@ specialOps =
461cmp :: InfixOp -> Int -> Expression () -> Expression () -> Expression ()
400cmp :: InfixOp -> Int -> Expression () -> Expression () -> Expression ()
462cmp op n a b =
401cmp op n a b =
463 InfixExpr () op (BuiltIn.compare a b) (IntLit () n)
402 InfixExpr () op (BuiltIn.compare a b) (IntLit () n)
466−-- BINARY OPERATOR COLLECTORS
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
474−collectRightAssocHelp :: Var.Canonical -> [Opt.Expr] -> Opt.Expr -> [Opt.Expr]
475−collectRightAssocHelp desiredOp exprList expr =
477− Binop op left right | op == desiredOp ->
478− collectRightAssocHelp desiredOp (left : exprList) right
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
490−collectLeftAssocHelp :: Var.Canonical -> [Opt.Expr] -> Opt.Expr -> [Opt.Expr]
491−collectLeftAssocHelp desiredOp exprList expr =
493− Binop op left right | op == desiredOp ->
494− collectLeftAssocHelp desiredOp (right : exprList) left