RosettaCodeData/Task/Range-extraction/Haskell/range-extraction-1.hs

14 lines
534 B
Haskell

import Data.List (intercalate)
extractRange :: [Int] -> String
extractRange = intercalate "," . f
where f :: [Int] -> [String]
f (x1 : x2 : x3 : xs) | x1 + 1 == x2 && x2 + 1 == x3
= (show x1 ++ '-' : show xn) : f xs'
where (xn, xs') = g (x3 + 1) xs
g a (n : ns) | a == n = g (a + 1) ns
| otherwise = (a - 1, n : ns)
g a [] = (a - 1, [])
f (x : xs) = show x : f xs
f [] = []