[Haskell-cafe] Why does Enum succ and pred functions throw exception
Richard O'Keefe
ok at cs.otago.ac.nz
Fri Jun 22 02:36:25 CEST 2012
On 21/06/2012, at 9:11 PM, Rouan van Dalen wrote:
> I was hoping to have some functions like:
>
> safeSucc :: (Enum a) => a -> Maybe a
>
Types that are instances of Enum don't necessarily have bounds.
It always struck me as odd that Enum doesn't extend Ord.
There's a reason given for not having Bounded extend Ord,
which doesn't really apply to a class having fromEnum :: a -> Int.
Testing whether an enum bound is at a limit is thus a bit tricky.
isMaxBound, isMinBound :: (Enum t, Bounded t) => t -> Bool
isMaxBound x = fromEnum x == fromEnum (maxBound `asTypeOf` x)
isMinBound x = fromEnum x == fromEnum (minBound `asTypeOf` x)
safeSucc, safePred :: (Enum t, Bounded t) => t -> Maybe t
safeSucc x = if isMaxBound x then Nothing else Just (succ x)
safePred x = if isMinBound x then Nothing else Just (pred x)
More information about the Haskell-Cafe
mailing list