on master help sign in
Stop recognizing locally defined binops

Binops can only be used outside of the module they are defined in. Binops need to work exactly the same as VarForeign, so when that gets the Type.Canonical added to it, the code in Canonicalize.Environment.Foreign will need to update for binops as well. This restriction sets us up for that reality.

commita0ee1f545e56fd1e97d41678c12b83b6b7755d15 authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 8 Nov 2017, 16:19 (9 years ago) parent64038dc
2 files changed+5−24
src/Canonicalize/Environment/Local.hs+4−23 src/Canonicalize/Module.hs+1−1
src/Canonicalize/Environment/Local.hs+4−23
@@ -1,7 +1,7 @@
11{-# OPTIONS_GHC -Wall #-}
22{-# LANGUAGE OverloadedStrings #-}
33module Canonicalize.Environment.Local
4− ( addVarsTypesOps
4+ ( addVarsAndTypes
55 , addPatterns
66 )
77 where
@@ -20,7 +20,6 @@ import qualified Canonicalize.Environment.Dups as Dups
2020import qualified Canonicalize.Environment.Internals as Env
2121import qualified Canonicalize.Type as Type
2222import qualified Data.Bag as Bag
23−import qualified Data.OneOrMore as OneOrMore
2423import qualified Elm.Name as N
2524import qualified Reporting.Annotation as A
2625import qualified Reporting.Error.Canonicalize as Error
@@ -47,9 +46,9 @@ type Result a =
4746-- This code checks for (1) duplicate names and (2) cycles in type aliases.
4847
4948
50−addVarsTypesOps :: Valid.Module -> Env.Env -> Result Env.Env
51−addVarsTypesOps module_ env =
52− addVars module_ =<< addTypes module_ =<< addBinops module_ env
49+addVarsAndTypes :: Valid.Module -> Env.Env -> Result Env.Env
50+addVarsAndTypes module_ env =
51+ addVars module_ =<< addTypes module_ env
5352
5453
5554merge
@@ -106,24 +105,6 @@ addPatterns unions (Env.Env home vars types patterns binops) =
106105
107106
108107
109−-- ADD BINOPS
110−
111−
112−addBinops :: Valid.Module -> Env.Env -> Result Env.Env
113−addBinops (Valid.Module _ _ _ _ _ _ _ _ ops _) (Env.Env home vars types patterns binops) =
114− let
115− toInfo (Valid.Binop (A.A region op) assoc prec name) =
116− Dups.info op region () (OneOrMore.one (Env.Binop op home name assoc prec))
117−
118− toError op () () =
119− Error.DuplicateBinop op
120− in
121− do opDict <- Dups.detect toError $ map toInfo ops
122− let newBinops = Map.unionWith OneOrMore.more opDict binops
123− return $ Env.Env home vars types patterns newBinops
124−
125−
126−
127108-- ADD VARS
128109
129110
src/Canonicalize/Module.hs+1−1
@@ -53,7 +53,7 @@ canonicalize
5353canonicalize pkg importDict interfaces module_@(Valid.Module name _ _ exports imports decls unions aliases binops effects) =
5454 do let home = ModuleName.Canonical pkg name
5555
56− startEnv <- Local.addVarsTypesOps module_ =<<
56+ startEnv <- Local.addVarsAndTypes module_ =<<
5757 Foreign.createInitialEnv home importDict interfaces imports
5858
5959 (cunions, caliases) <-