blob: ec0a39510663afa2ebd571754d50b9eee668ece1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
data ListItem a = Single a | Multiple a Int
deriving (Show)
encode :: Eq a => [a] -> [(a,Int)]
encode = foldr encodeHelper []
where
encodeHelper a p@((x,c):ps) | x==a = (a,c+1):ps
encodeHelper a p = (a,1):p
encodeDirect :: Eq a => [a] -> [ListItem a]
encodeDirect = map encodeHelper . encode
where
encodeHelper (a,c)
| c>1 = Multiple a c
| otherwise = Single a
|