on 4624721 help sign in
elk/src/Data/OneOrMore.hs
64 lines 803 B history raw
1{-# OPTIONS_GHC -Wall #-}
2module Data.OneOrMore
3 ( OneOrMore(..)
4 , one
5 , more
6 , toList
7 , map
8 )
9 where
12import Prelude hiding (map)
16-- ONE OR MORE
19data OneOrMore a
20 = One a
21 | More (OneOrMore a) (OneOrMore a)
24one :: a -> OneOrMore a
25one =
26 One
29more :: OneOrMore a -> OneOrMore a -> OneOrMore a
30more =
31 More
35-- TO LIST
38toList :: OneOrMore a -> [a]
39toList oneOrMore =
40 toListHelp oneOrMore []
43toListHelp :: OneOrMore a -> [a] -> [a]
44toListHelp oneOrMore list =
45 case oneOrMore of
46 One x ->
47 x : list
49 More a b ->
50 toListHelp a (toListHelp b list)
54-- MAP
57map :: (a -> b) -> OneOrMore a -> OneOrMore b
58map func oneOrMore =
59 case oneOrMore of
60 One value ->
61 One (func value)
63 More left right ->
64 More (map func left) (map func right)