On Mon, 23 Mar 2009, Xiao-Yong Jin wrote:

Hi,

I just feel it is not comfortable to deal with exceptions
only within IO monad, so I defined

tryArith :: a -> Either ArithException a
tryArith = unsafePerformIO . try . evaluate

and it works quite good as

map (tryArith . (div 5)) [2,1,0,5]

evaluates to

[Right 2,Right 5,Left divide by zero,Right 1]

However, I guess unsafePerformIO definitely has a reason for
its name.  As I read through the document in
System.IO.Unsafe, I can't convince myself whether the use of
'tryArith' is indeed safe or unsafe.

Try to never use exception handling for catching programming errors! Division by zero is undefined, thus a programming error when it occurs.
 http://www.haskell.org/haskellwiki/Error
 http://www.haskell.org/haskellwiki/Exception
I'm afraid, a Maybe or Either or Exceptional (see explicit-exception package) return value is the only way to handle exceptional return values properly. Maybe in the larger context of your problem zero denominators can be avoided? Then go this way.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to