如何在Haskell中捕获零误差?

use*_*220 7 haskell

对于像找不到文件这样的东西,下面代码的基本结构将起作用,但是对于这个除零的例子,没有捕获到异常.如何将零除以?

import Control.Exception.Base
import Data.Array

main = toTry `catch` handler

toTry = do
    print "hi"
    print (show (3 `div` 0))
    print "hi"

handler :: IOError -> IO ()
handler e = putStrLn "bad"
Run Code Online (Sandbox Code Playgroud)

Yel*_*ika 10

你需要一个捕获ArithException的处理程序,并匹配DivideByZero.

import Control.Exception.Base
import Data.Array

main = toTry `catch` handler

toTry = do
    print "hi"
    print (show (3 `div` 0))
    print "hi"

handler :: ArithException -> IO ()
handler DivideByZero = putStrLn "Divide by Zero!"
handler _ = putStrLn "Some other error..."
Run Code Online (Sandbox Code Playgroud)