@@ -491,9 +491,9 @@ optimizeBinop context region op leftExpr rightExpr =
491491
492492 else
493493
494− makeOptBinop op
495− <$> optimizeExpr Nothing leftExpr
496− <*> optimizeExpr Nothing rightExpr
494+ do optLeft <- optimizeExpr Nothing leftExpr
495+ optRight <- optimizeExpr Nothing rightExpr
496+ makeOptBinop op optLeft optRight
497497
498498
499499-- left-associative ((x |> f) |> g)
@@ -552,7 +552,7 @@ collect makeRoot assoc desiredOp annExpr@(A.A ann expr) =
552552 makeRoot annExpr
553553
554554
555−makeOptBinop :: Var.Canonical -> Opt.Expr -> Opt.Expr -> Opt.Expr
555+makeOptBinop :: Var.Canonical -> Opt.Expr -> Opt.Expr -> Env.Optimizer Opt.Expr
556556makeOptBinop (Var.Canonical home op) leftExpr rightExpr =
557557 case home of
558558 Var.Local ->
@@ -562,7 +562,11 @@ makeOptBinop (Var.Canonical home op) leftExpr rightExpr =
562562 error "bug manifesting in Optimize.makeOptBinop"
563563
564564 Var.Module name ->
565− Opt.Binop (Var.Global name op) leftExpr rightExpr
565+ do let var = Var.Global name op
566+ Env.register var
567+ return $ Opt.Binop var leftExpr rightExpr
566568
567569 Var.TopLevel name ->
568− Opt.Binop (Var.Global name op) leftExpr rightExpr
570+ do let var = Var.Global name op
571+ Env.register var
572+ return $ Opt.Binop var leftExpr rightExpr