on master help sign in
Get rid of OneOrMore.toList / only use OneOrMore.destruct
e23740cEvan Czaplicki
compiler/src/Data/OneOrMore.hs+14−24
@@ -3,7 +3,6 @@ module Data.OneOrMore
3 ( OneOrMore(..)
3 ( OneOrMore(..)
4 , one
4 , one
5 , more
5 , more
6− , toList
7 , map
6 , map
8 , destruct
7 , destruct
9 )
8 )
@@ -33,25 +32,6 @@ more =
33
32
34
33
35
34
36−-- TO LIST
37−
38−
39−toList :: OneOrMore a -> [a]
40−toList oneOrMore =
41− toListHelp oneOrMore []
42−
43−
44−toListHelp :: OneOrMore a -> [a] -> [a]
45−toListHelp oneOrMore list =
46− case oneOrMore of
47− One x ->
48− x : list
49−
50− More a b ->
51− toListHelp a (toListHelp b list)
52−
53−
54−
55-- MAP
35-- MAP
56
36
57
37
@@ -71,14 +51,24 @@ map func oneOrMore =
71
51
72destruct :: (a -> [a] -> b) -> OneOrMore a -> b
52destruct :: (a -> [a] -> b) -> OneOrMore a -> b
73destruct func oneOrMore =
53destruct func oneOrMore =
74− destructHelp func oneOrMore []
54+ destructLeft func oneOrMore []
75
55
76
56
77−destructHelp :: (a -> [a] -> b) -> OneOrMore a -> [a] -> b
57+destructLeft :: (a -> [a] -> b) -> OneOrMore a -> [a] -> b
78−destructHelp func oneOrMore xs =
58+destructLeft func oneOrMore xs =
79 case oneOrMore of
59 case oneOrMore of
80 One x ->
60 One x ->
81 func x xs
61 func x xs
82
62
83 More a b ->
63 More a b ->
84− destructHelp func a (toListHelp b xs)
64+ destructLeft func a (destructRight b xs)
65+
66+
67+destructRight :: OneOrMore a -> [a] -> [a]
68+destructRight oneOrMore xs =
69+ case oneOrMore of
70+ One x ->
71+ x : xs
72+
73+ More a b ->
74+ destructRight a (destructRight b xs)