gpt4 book ai didi

haskell - 为什么我的代码没有捕获异常?

转载 作者:行者123 更新时间:2023-12-03 13:22:45 25 4
gpt4 key购买 nike

{-# LANGUAGE DeriveDataTypeable #-}

import Control.Exception
import Data.Typeable

data MyException = MyException String deriving (Show, Typeable)

instance Exception MyException

myExToString :: MyException -> String
myExToString (MyException msg) = msg

t :: ()
t = throw $ MyException "Msg"

main = catch (return t) (\e -> putStrLn $ myExToString e)

为什么我的程序不打印 "Msg"

更新:

我改变了代码:
io :: IO ()
io = catch (return t) (\e -> putStrLn $ myExToString e)

main = io >>= print

但是我的代码仍然没有捕获 MyException 吗?为什么?

最佳答案

因为 Haskell 是懒惰的,你从不使用 t 的结果,所以它永远不会被评估,因此不会抛出异常。

关于haskell - 为什么我的代码没有捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com