我正在尝试编写一个简单的函数,该函数将绑定到 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
我究竟做错了什么?谢谢。