on master help sign in
Add specialized Eq and Ord instances for names
84985ddEvan Czaplicki
compiler/src/AST/Optimized.hs+17−1
@@ -74,7 +74,6 @@ data Expr
74
74
75
75
76data Global = Global ModuleName.Canonical Name
76data Global = Global ModuleName.Canonical Name
77− deriving (Eq, Ord)
78
77
79
78
80
79
@@ -222,6 +221,23 @@ toKernelGlobal shortName =
222
221
223
222
224
223
224+-- INSTANCES
225+
226+
227+instance Eq Global where
228+ (==) (Global home1 name1) (Global home2 name2) =
229+ name1 == name2 && home1 == home2
230+
231+
232+instance Ord Global where
233+ compare (Global home1 name1) (Global home2 name2) =
234+ case compare name1 name2 of
235+ LT -> LT
236+ EQ -> compare home1 home2
237+ GT -> GT
238+
239+
240+
225-- BINARY
241-- BINARY
226
242
227
243
compiler/src/Elm/ModuleName.hs+8−8
@@ -9,7 +9,6 @@ module Elm.ModuleName
9 , encode
9 , encode
10 , decoder
10 , decoder
11 , Canonical(..)
11 , Canonical(..)
12− , canonicalIsKernel
13 , basics, char, string
12 , basics, char, string
14 , maybe, result, list, array, dict, tuple
13 , maybe, result, list, array, dict, tuple
15 , platform, cmd, sub
14 , platform, cmd, sub
@@ -104,13 +103,6 @@ data Canonical =
104 { _package :: !Pkg.Name
103 { _package :: !Pkg.Name
105 , _module :: !Name.Name
104 , _module :: !Name.Name
106 }
105 }
107− deriving (Ord)
108−
109−
110−canonicalIsKernel :: Canonical -> Bool
111−canonicalIsKernel (Canonical _ name) =
112− Name.isKernel name
113−
114
106
115
107
116-- INSTANCES
108-- INSTANCES
@@ -121,6 +113,14 @@ instance Eq Canonical where
121 name1 == name2 && pkg1 == pkg2
113 name1 == name2 && pkg1 == pkg2
122
114
123
115
116+instance Ord Canonical where
117+ compare (Canonical pkg1 name1) (Canonical pkg2 name2) =
118+ case compare name1 name2 of
119+ LT -> LT
120+ EQ -> compare pkg1 pkg2
121+ GT -> GT
122+
123+
124instance Binary Canonical where
124instance Binary Canonical where
125 put (Canonical a b) = put a >> put b
125 put (Canonical a b) = put a >> put b
126 get = liftM2 Canonical get get
126 get = liftM2 Canonical get get
compiler/src/Elm/Package.hs+24−15
@@ -44,7 +44,6 @@ data Name =
44 { _author :: !Name.Name
44 { _author :: !Name.Name
45 , _project :: !Name.Name
45 , _project :: !Name.Name
46 }
46 }
47− deriving (Eq, Ord)
48
47
49
48
50data Canonical =
49data Canonical =
@@ -52,7 +51,7 @@ data Canonical =
52 { _name :: !Name
51 { _name :: !Name
53 , _version :: !V.Version
52 , _version :: !V.Version
54 }
53 }
55− deriving (Eq, Ord)
54+ deriving (Ord)
56
55
57
56
58
57
@@ -202,25 +201,35 @@ suggestions =
202
201
203
202
204
203
205−-- BINARY
204+-- INSTANCES
206
205
207
206
208−instance Binary Name where
207+instance Eq Name where
209− get =
208+ (==) (Name author1 project1) (Name author2 project2) =
210− liftM2 Name get get
209+ project1 == project2 && author1 == author2
211
210
212− put (Name author project) =
213− do put author
214− put project
215
211
212+instance Eq Canonical where
213+ (==) (Canonical package1 version1) (Canonical package2 version2) =
214+ version1 == version2 && package1 == package2
215+
216+
217+instance Ord Name where
218+ compare (Name author1 project1) (Name author2 project2) =
219+ case compare project1 project2 of
220+ LT -> LT
221+ EQ -> compare author1 author2
222+ GT -> GT
216
223
217−instance Binary Canonical where
218− get =
219− liftM2 Canonical get get
220
224
221− put (Canonical name version) =
225+instance Binary Name where
222− do put name
226+ get = liftM2 Name get get
223− put version
227+ put (Name a b) = put a >> put b
228+
229+
230+instance Binary Canonical where
231+ get = liftM2 Canonical get get
232+ put (Canonical a b) = put a >> put b
224
233
225
234
226
235