
7 Apr
2009
7 Apr
'09
5:53 p.m.
On Tue, Apr 7, 2009 at 11:43 PM, Henning Thielemann
On Tue, 7 Apr 2009, Max Rabkin wrote:
The problem with your code is that the type of maxBound is unspecified. You need (maxBound `asTypeOf` i), or enable ScopedTypeVariables and use (maxBound :: a) (I think).
i is Integer, so asTypeOf is not so easy to apply.
Of course. It can, however, be done: safeFromInteger :: (Num b, Integral b, Bounded b) => Integer -> Maybe b safeFromInteger i = let result = fromInteger i in if i > (toInteger $ maxBound `asTypeOf` result) then Nothing else Just result Thank you, laziness!
(safeFromInteger 1000000000000000000000000) :: Maybe Int Nothing (safeFromInteger 100000) :: Maybe Int Just 100000
--Max