@@ -3,7 +3,6 @@ module Data.OneOrMore
33 ( OneOrMore(..)
44 , one
55 , more
6− , toList
76 , map
87 , destruct
98 )
@@ -33,25 +32,6 @@ more =
3332
3433
3534
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−
5535-- MAP
5636
5737
@@ -71,14 +51,24 @@ map func oneOrMore =
7151
7252destruct :: (a -> [a] -> b) -> OneOrMore a -> b
7353destruct func oneOrMore =
74− destructHelp func oneOrMore []
54+ destructLeft func oneOrMore []
7555
7656
77−destructHelp :: (a -> [a] -> b) -> OneOrMore a -> [a] -> b
78−destructHelp func oneOrMore xs =
57+destructLeft :: (a -> [a] -> b) -> OneOrMore a -> [a] -> b
58+destructLeft func oneOrMore xs =
7959 case oneOrMore of
8060 One x ->
8161 func x xs
8262
8363 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)