如何检查函数是返回常规值还是调用错误?

ahm*_*106 1 error-handling haskell function

我得到了一些代码:

setA :: Integer -> Integer
setA 3 = 5
setA 5 = 6
setA 7 = error "some error one"
setA _ = error "some error two"
Run Code Online (Sandbox Code Playgroud)

现在我尝试写另一个函数

checkError :: Integer -> Bool
checkError x = if HERE_TO_CHECK_IF setA x RETURNS some error two
                then False
                else True
Run Code Online (Sandbox Code Playgroud)

但我怎么能这样做?

谢谢

dav*_*420 6

正如在其他答案中已经说过的那样,你应该避免使用error而是使用

setA :: Integer -> Either String Integer
setA 3 = Right 5
setA 5 = Right 6
setA 7 = Left "some error one"
setA _ = Left "some error two"

checkError :: Either String Integer -> Bool
checkError (Left _)  = False
checkError (Right _) = True
Run Code Online (Sandbox Code Playgroud)

但是,如果你不能做到这一点,看看源代码勺子包,看看怎么做你的教授是要求.这很危险.

然后你可以说

checkError :: Integer -> Bool
checkError x = case teaspoon x of
    Nothing -> False
    Just _  -> True
Run Code Online (Sandbox Code Playgroud)