on master help sign in
Introduce OneOrMore.getFirstTwo for one specific scenario
3971043Evan Czaplicki
compiler/src/Canonicalize/Environment/Dups.hs+5−2
@@ -57,8 +57,11 @@ detectHelp toError name values =
57 OneOrMore.One (Info _ value) ->
57 OneOrMore.One (Info _ value) ->
58 return value
58 return value
59
59
60− OneOrMore.More _ _ ->
60+ OneOrMore.More left right ->
61+ let
61− let (Info r1 _ : Info r2 _ : _) = OneOrMore.toList values in
62+ (Info r1 _, Info r2 _) =
63+ OneOrMore.getFirstTwo left right
64+ in
62 Result.throw (toError name r1 r2)
65 Result.throw (toError name r1 r2)
63
66
64
67
compiler/src/Data/OneOrMore.hs+25
@@ -5,6 +5,7 @@ module Data.OneOrMore
5 , more
5 , more
6 , map
6 , map
7 , destruct
7 , destruct
8+ , getFirstTwo
8 )
9 )
9 where
10 where
10
11
@@ -72,3 +73,27 @@ destructRight oneOrMore xs =
72
73
73 More a b ->
74 More a b ->
74 destructRight a (destructRight b xs)
75 destructRight a (destructRight b xs)
76+
77+
78+
79+-- GET FIRST TWO
80+
81+
82+getFirstTwo :: OneOrMore a -> OneOrMore a -> (a,a)
83+getFirstTwo left right =
84+ case left of
85+ One x ->
86+ (x, getFirstOne right)
87+
88+ More lleft lright ->
89+ getFirstTwo lleft lright
90+
91+
92+getFirstOne :: OneOrMore a -> a
93+getFirstOne oneOrMore =
94+ case oneOrMore of
95+ One x ->
96+ x
97+
98+ More left _ ->
99+ getFirstOne left