Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit 1448759

Browse files
committed
Fix Ord / Ord1 by restoring original Ord1 instance
1 parent 01feced commit 1448759

File tree

1 file changed

+56
-4
lines changed

1 file changed

+56
-4
lines changed

src/Data/Json/Extended/Signature/Core.purs

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ import Data.HugeNum as HN
1313
import Data.Int as Int
1414
import Data.Json.Extended.Type as JT
1515
import Data.List as L
16+
import Data.Map as M
1617
import Data.Monoid (mempty)
17-
import Data.Ord (class Ord1)
18+
import Data.Ord (class Ord1, compare1)
19+
import Data.TacitString (TacitString)
1820
import Data.Traversable as T
1921
import Data.Tuple (Tuple(..))
20-
import Data.TacitString (TacitString)
2122

2223
-- | The signature endofunctor for the EJson theory.
2324
data EJsonF a
@@ -80,6 +81,7 @@ instance traversableEJsonF ∷ T.Traversable EJsonF where
8081
ObjectId oid → pure $ ObjectId oid
8182
sequence = T.sequenceDefault
8283

84+
-- Note: this cannot be derived due to integer/decimal equality and map equality
8385
instance eq1EJsonFEq1 EJsonF where
8486
eq1 Null Null = true
8587
eq1 (Boolean b1) (Boolean b2) = b1 == b2
@@ -127,9 +129,59 @@ intToHugeNum =
127129
HN.fromNumber
128130
<<< Int.toNumber
129131

130-
derive instance ordEJsonFOrd a Ord (EJsonF a)
132+
instance ordEJsonFOrd a Ord (EJsonF a) where
133+
compare = compare1
134+
135+
-- Note: this cannot be derived, due to integer/decimal comparisons and map
136+
-- comparisons
131137
instance ord1EJsonFOrd1 EJsonF where
132-
compare1 = compare
138+
compare1 Null Null = EQ
139+
compare1 _ Null = GT
140+
compare1 Null _ = LT
141+
142+
compare1 (Boolean b1) (Boolean b2) = compare b1 b2
143+
compare1 _ (Boolean _) = GT
144+
compare1 (Boolean _) _ = LT
145+
146+
compare1 (Integer i) (Integer j) = compare i j
147+
compare1 (Integer i) (Decimal b) = compare (intToHugeNum i) b
148+
compare1 (Decimal a) (Integer j) = compare a (intToHugeNum j)
149+
compare1 _ (Integer _) = GT
150+
compare1 (Integer _) _ = LT
151+
152+
compare1 (Decimal a) (Decimal b) = compare a b
153+
compare1 _ (Decimal _) = GT
154+
compare1 (Decimal _) _ = LT
155+
156+
compare1 (String a) (String b) = compare a b
157+
compare1 _ (String _) = GT
158+
compare1 (String _) _ = LT
159+
160+
compare1 (Timestamp a) (Timestamp b) = compare a b
161+
compare1 _ (Timestamp _) = GT
162+
compare1 (Timestamp _) _ = LT
163+
164+
compare1 (Date a) (Date b) = compare a b
165+
compare1 _ (Date _) = GT
166+
compare1 (Date _) _ = LT
167+
168+
compare1 (Time a) (Time b) = compare a b
169+
compare1 _ (Time _) = GT
170+
compare1 (Time _) _ = LT
171+
172+
compare1 (Interval a) (Interval b) = compare a b
173+
compare1 _ (Interval _) = GT
174+
compare1 (Interval _) _ = LT
175+
176+
compare1 (ObjectId a) (ObjectId b) = compare a b
177+
compare1 _ (ObjectId _) = GT
178+
compare1 (ObjectId _) _ = LT
179+
180+
compare1 (Array a) (Array b) = compare a b
181+
compare1 _ (Array _) = GT
182+
compare1 (Array _) _ = LT
183+
184+
compare1 (Map a) (Map b) = compare (M.fromFoldable a) (M.fromFoldable b)
133185

134186
instance showEJsonFShow (EJsonF TacitString) where
135187
show = case _ of

0 commit comments

Comments
 (0)