summaryrefslogtreecommitdiff
path: root/Haskell-book/09/src/EnumFromTo.purs
blob: f389c3143624427cacd0179b146af10a3249d349 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module EnumFromTo where

import Data.Array ((:), reverse)
import Data.Enum (class Enum, succ)
import Data.Maybe (Maybe(..))
import Prelude

enumFromTo :: forall a. Enum a => a -> a -> Array a
enumFromTo start end = reverse $ enumFromTo' [] (Just start)
    where enumFromTo' :: Array a -> Maybe a -> Array a
          enumFromTo' acc (Just start')
              | start' > end  = acc
              | start' == end = start' : acc
              | otherwise     = enumFromTo' (start' : acc) (succ start')
          enumFromTo' acc Nothing = acc