@@ -5,6 +5,7 @@ module Data.OneOrMore
55 , more
66 , toList
77 , map
8+ , destruct
89 )
910 where
1011
@@ -62,3 +63,22 @@ map func oneOrMore =
6263
6364 More left right ->
6465 More (map func left) (map func right)
66+
67+
68+
69+-- DESTRUCT
70+
71+
72+destruct :: (a -> [a] -> b) -> OneOrMore a -> b
73+destruct func oneOrMore =
74+ destructHelp func oneOrMore []
75+
76+
77+destructHelp :: (a -> [a] -> b) -> OneOrMore a -> [a] -> b
78+destructHelp func oneOrMore xs =
79+ case oneOrMore of
80+ One x ->
81+ func x xs
82+
83+ More a b ->
84+ destructHelp func a (toListHelp b xs)