gpt4 book ai didi

haskell - 确定正确的异常类型

转载 作者:行者123 更新时间:2023-12-03 14:42:48 26 4
gpt4 key购买 nike

(新手问题。:-))

假设您有一系列操作(对外部世界的健全性检查)。如果理智失败,人们不得不大喊大叫。

然而,Haskell ifs 需要定义两个分支。 fail的案例|是一个单子(monad)。但是,我不确定在 else 情况下生成什么正确的类型。编译器认为推断的类型是 IO a。但是,我不确定如何创建无操作 IO。

holler msg test =  
do
if not test
then
fail msg
else
-- ??? no-op

main :: IO ()
main = do
holler "Go" True

最佳答案

推断类型为 IO a因为fail msg可能会返回任何东西(因为它实际上永远不会返回)。然而 else 部分实际上并不需要产生 IO a , 把它变成更具体的东西是完全可以的, 即 IO WhateverYouWant .

在这种情况下你不关心返回值,所以你应该使用 IO () ,即把 return ()else案子。

事实证明,已经有一个名为 when condition action 的函数。在 Control.Monad模块,它正好 if condition then action else return () ,所以你可以只使用那个(或其对应的 unless ,它否定了为你保存 not 的条件)而不是输入 if .

关于haskell - 确定正确的异常类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919112/

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