@@ -561,23 +561,42 @@ binop
561561binop func left right =
562562 do jsLeft <- generateJsExpr left
563563 jsRight <- generateJsExpr right
564− jsExpr (makeExpr func jsLeft jsRight)
564+ jsExpr (binopHelp func jsLeft jsRight)
565565
566566
567567
568568-- BINARY OPERATOR HELPERS
569569
570570
571−makeExpr :: Var.Canonical -> (Expression () -> Expression () -> Expression ())
572−makeExpr qualifiedOp@(Var.Canonical home op) =
571+binopHelp :: Var.Canonical -> Expression () -> Expression () -> Expression ()
572+binopHelp qualifiedOp@(Var.Canonical home op) leftExpr rightExpr =
573573 let
574574 simpleMake left right =
575575 ref "A2" `call` [ Var.canonical qualifiedOp, left, right ]
576576 in
577− if home == Var.Module (ModuleName.inCore ["Basics"]) then
578− Map.findWithDefault simpleMake op basicOps
577+ if home == basicsModule then
578+ (Map.findWithDefault simpleMake op basicOps) leftExpr rightExpr
579+
580+ else if op == "::" && (home == listModule || home == listModuleInternals) then
581+ BuiltIn.cons leftExpr rightExpr
582+
579583 else
580− simpleMake
584+ simpleMake leftExpr rightExpr
585+
586+
587+listModule :: Var.Home
588+listModule =
589+ Var.Module (ModuleName.inCore ["List"])
590+
591+
592+listModuleInternals :: Var.Home
593+listModuleInternals =
594+ Var.TopLevel (ModuleName.inCore ["List"])
595+
596+
597+basicsModule :: Var.Home
598+basicsModule =
599+ Var.Module (ModuleName.inCore ["Basics"])
581600
582601
583602basicOps :: Map.Map String (Expression () -> Expression () -> Expression ())