@@ -403,6 +403,7 @@ generateBasicsCall mode home name args =
403 case name of
403 case name of
404 "composeL" -> decomposeL mode elmLeft [elmRight]
404 "composeL" -> decomposeL mode elmLeft [elmRight]
405 "composeR" -> decomposeR mode [elmLeft] elmRight
405 "composeR" -> decomposeR mode [elmLeft] elmRight
406+ "append" -> append mode elmLeft elmRight
406 "apL" -> generateJsExpr mode $ apply elmLeft elmRight
407 "apL" -> generateJsExpr mode $ apply elmLeft elmRight
407 "apR" -> generateJsExpr mode $ apply elmRight elmLeft
408 "apR" -> generateJsExpr mode $ apply elmRight elmLeft
@@ -514,6 +515,41 @@ apply func value =
514 Opt.Call func [value]
515 Opt.Call func [value]
518+append :: Mode -> Opt.Expr -> Opt.Expr -> JS.Expr
519+append mode left right =
520+ let seqs = generateJsExpr mode left : toSeqs mode right in
521+ if any isStringLiteral seqs then
522+ foldr1 (JS.Infix JS.OpAdd) seqs
524+ foldr1 jsAppend seqs
527+jsAppend :: JS.Expr -> JS.Expr -> JS.Expr
529+ JS.Call (JS.Ref (Name.fromKernel N.utils "ap")) [a, b]
532+toSeqs :: Mode -> Opt.Expr -> [JS.Expr]
535+ Opt.Call (Opt.VarGlobal (Opt.Global home "append")) [left, right]
536+ | home == ModuleName.basics ->
537+ generateJsExpr mode left : toSeqs mode right
540+ [generateJsExpr mode expr]
543+isStringLiteral :: JS.Expr -> Bool
544+isStringLiteral expr =
518-- SIMPLIFY INFIX OPERATORS
554-- SIMPLIFY INFIX OPERATORS