Guest User

Untitled

a guest
Jun 21st, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.72 KB | None | 0 0
  1. intervals :: (Eq a, Enum a) => [a] -> [(a, Maybe a)]
  2. intervals [] = []
  3. intervals (x:[]) = [(x, Nothing)]
  4. intervals (x:xs) = (x, lastSuccessor x x xs) : intervals (dropSuccessors x xs)
  5. where
  6. lastSuccessor :: (Eq a, Enum a) => a -> a -> [a] -> Maybe a
  7. lastSuccessor l x []
  8. | l == x = Nothing
  9. | otherwise = Just x
  10. lastSuccessor l x (y:ys)
  11. | succ x == y = lastSuccessor l y ys
  12. | otherwise = lastSuccessor l x []
  13. dropSuccessors :: (Eq a, Enum a) => a -> [a] -> [a]
  14. dropSuccessors x [] = []
  15. dropSuccessors x done@(y:ys)
  16. | succ x == y = dropSuccessors y ys
  17. | otherwise = done
Add Comment
Please, Sign In to add comment