3

我正在尝试编写一个简单的函数,该函数将绑定到 LDAP 服务器并返回一个 IO Bool 值,以便稍后在条件语句中分析返回。如果绑定失败,下面的这个小片段可以工作并打印错误,但这不是我需要的。

import LDAP.Init
import LDAP.Exceptions

auth :: IO ()
auth = do
  c <- ldapOpen "10.1.1.11" 3268
  let bnd =ldapSimpleBind c "myusername@domain.local" "mypassword"
  catchLDAP bnd (\_ -> error "Wrong user name or password")

如果我尝试通过处理异常的函数返回除 IO () 之外的任何内容,我会收到错误消息。我需要它来返回 IO Bool。

如果不成功,'ldapSimpleBind' 只会引发异常,仅此而已。捕获异常只会让我返回一个 IO() 我需要的是返回一些有意义的东西,以便我可以对返回值做一些有用的事情。我显然遗漏了一些东西,因为文档中 catchLDAP 的签名是 :: IO a -> (LDAPException -> IO a) -> IO a

我究竟做错了什么?谢谢。

4

1 回答 1

4

您的bnd操作成功后不会返回true,错误处理程序只是调用error,

let bnd' = bnd >> return true所以看起来你可以

那么,catchLDAP bnd' $ \_ -> return false.

于 2012-12-12T01:22:07.667 回答