【发布时间】:2019-02-16 00:52:29
【问题描述】:
我正在尝试在我的代码中加入错误处理。
我正在调用一个函数
generateCSR :: (MonadRandom m, HashAlgorithmConversion hashAlg, HashAlgorithm hashAlg)
=> X520Attributes -> PKCS9Attributes -> KeyPair -> hashAlg
-> m (Either Error CertificationRequest)
所以我需要处理这种情况下的错误。我以为我可以做这样的事情
case generateCSR (parameters) of
Right req -> req
left Error -> putStrLn ("Error : " ++ show Error)
但这似乎不起作用。
但是如果我做这样的事情
Right req <- generateCSR (parameters)
putStrLn.show req
它给了我一个输出。
如何在此处实现错误处理?在第一种情况下(case of 语句)我做错了什么吗?
【问题讨论】:
-
你想用 Right 值做什么?在这种情况下,您似乎必须将类型合并为一个类型,例如:
f :: Either Error CertificationRequest -> IO ()等。 -
所以我写的函数应该要么返回证书请求要么返回错误,
-
第二个 sn-p 是
do块的一部分,它隐含地涉及手头单子的>>=。case不使用>>=或 monads。一般来说,这些结构非常不同。