我试图在我的代码中加入错误处理.
我正在调用一个函数
generateCSR :: (MonadRandom m, HashAlgorithmConversion hashAlg, HashAlgorithm hashAlg)
=> X520Attributes -> PKCS9Attributes -> KeyPair -> hashAlg
-> m (Either Error CertificationRequest)
Run Code Online (Sandbox Code Playgroud)
所以我需要在这种情况下处理错误.我以为我可以做这样的事情
case generateCSR (parameters) of
Right req -> req
left Error -> putStrLn ("Error : " ++ show Error)
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
但如果我做这样的事情
Right req <- generateCSR (parameters)
putStrLn.show req
Run Code Online (Sandbox Code Playgroud)
它给了我一个输出.
如何在此处实现错误处理?我在第一种情况下(case of声明)做了一些完全错误的事情吗?
不知道如何传递单个parameters,generateCSR因为它需要4个参数,但我会把它归结为伪代码.
generateCSR返回一个Either包裹在一些monand m,它必须是一个实例MonadRandom,其中IO是候选.你不能直接在结果上使用案例; 你必须使用monad的bind来访问Either内部.在第二个例子中,使用绑定与要求的模式Either是Right,这将不能适当地处理它的情况Left.相反,您可以将结果绑定到变量,然后使用case语句来决定要执行的操作:
f = do
r <- generateCSR parameters
case r of
Left err -> ...
Right req -> ...
Run Code Online (Sandbox Code Playgroud)
请注意,两种情况都必须按照do(bind)的要求返回包含在同一monad中的内容.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |