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()以外のものを返そうとすると、エラーが発生します。IOBoolを返すために必要です。

'ldapSimpleBind'は、失敗した場合に例外をスローするだけで、それだけです。例外をキャッチすると、IO()を返すことしかできません。必要なのは、戻り値で何か役立つことができるように、意味のあるものを返すことです。ドキュメントのcatchLDAPの署名は::IOa->(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 に答える