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であるため、明らかに何かが欠けています。
私は何が間違っているのですか?ありがとう。