Update haddock documentation

This commit is contained in:
Matvey Aksenov 2015-04-11 16:20:48 +00:00
parent 642ff92e4f
commit f27a82b476
27 changed files with 1057 additions and 970 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - D)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - D</p><table><tr><td class="src">Delete</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Delete">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Modify.html#v:Delete">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#v:Delete">Ldap.Client</a></td></tr><tr><td class="src">delete</td><td class="module"><a href="Ldap-Client-Delete.html#v:delete">Ldap.Client.Delete</a>, <a href="Ldap-Client.html#v:delete">Ldap.Client</a></td></tr><tr><td class="src">deleteAsync</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteAsync">Ldap.Client.Delete</a></td></tr><tr><td class="src">deleteAsyncSTM</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteAsyncSTM">Ldap.Client.Delete</a></td></tr><tr><td class="src">deleteEither</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteEither">Ldap.Client.Delete</a></td></tr><tr><td class="src">DeleteRequest</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DeleteRequest">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DeleteResponse</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DeleteResponse">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DerefAliases</td><td class="module"><a href="Ldap-Asn1-Type.html#t:DerefAliases">Ldap.Asn1.Type</a></td></tr><tr><td class="src">derefAliases</td><td class="module"><a href="Ldap-Client-Search.html#v:derefAliases">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:derefAliases">Ldap.Client</a></td></tr><tr><td class="src">DerefAlways</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefAlways">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DerefFindingBaseObject</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefFindingBaseObject">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DerefInSearching</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefInSearching">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DisconnectError</td><td class="module"><a href="Ldap-Client.html#v:DisconnectError">Ldap.Client</a></td></tr><tr><td class="src">Dn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:Dn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:Dn">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Internal.html#v:Dn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Dn">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - D</p><table><tr><td class="src">Delete</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Delete">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Modify.html#v:Delete">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#v:Delete">Ldap.Client</a></td></tr><tr><td class="src">delete</td><td class="module"><a href="Ldap-Client-Delete.html#v:delete">Ldap.Client.Delete</a>, <a href="Ldap-Client.html#v:delete">Ldap.Client</a></td></tr><tr><td class="src">deleteAsync</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteAsync">Ldap.Client.Delete</a></td></tr><tr><td class="src">deleteAsyncSTM</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteAsyncSTM">Ldap.Client.Delete</a></td></tr><tr><td class="src">deleteEither</td><td class="module"><a href="Ldap-Client-Delete.html#v:deleteEither">Ldap.Client.Delete</a></td></tr><tr><td class="src">DeleteRequest</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DeleteRequest">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DeleteResponse</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DeleteResponse">Ldap.Asn1.Type</a></td></tr><tr><td class="src">DerefAliases</td><td class="module"><a href="Ldap-Asn1-Type.html#t:DerefAliases">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#t:DerefAliases">Ldap.Client.Search</a>, <a href="Ldap-Client.html#t:DerefAliases">Ldap.Client</a></td></tr><tr><td class="src">derefAliases</td><td class="module"><a href="Ldap-Client-Search.html#v:derefAliases">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:derefAliases">Ldap.Client</a></td></tr><tr><td class="src">DerefAlways</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefAlways">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:DerefAlways">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:DerefAlways">Ldap.Client</a></td></tr><tr><td class="src">DerefFindingBaseObject</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefFindingBaseObject">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:DerefFindingBaseObject">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:DerefFindingBaseObject">Ldap.Client</a></td></tr><tr><td class="src">DerefInSearching</td><td class="module"><a href="Ldap-Asn1-Type.html#v:DerefInSearching">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:DerefInSearching">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:DerefInSearching">Ldap.Client</a></td></tr><tr><td class="src">DisconnectError</td><td class="module"><a href="Ldap-Client.html#v:DisconnectError">Ldap.Client</a></td></tr><tr><td class="src">Dn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:Dn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:Dn">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Internal.html#v:Dn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Dn">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - N)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - N</p><table><tr><td class="src">NamingViolation</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NamingViolation">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NamingViolation">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NamingViolation">Ldap.Client</a></td></tr><tr><td class="src">NeverDerefAliases</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NeverDerefAliases">Ldap.Asn1.Type</a></td></tr><tr><td class="src">New</td><td class="module"><a href="Ldap-Client-Internal.html#v:New">Ldap.Client.Internal</a></td></tr><tr><td class="src">NonEmpty</td><td class="module"><a href="Ldap-Client.html#t:NonEmpty">Ldap.Client</a></td></tr><tr><td class="src">NoSuchAttribute</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NoSuchAttribute">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NoSuchAttribute">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NoSuchAttribute">Ldap.Client</a></td></tr><tr><td class="src">NoSuchObject</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NoSuchObject">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NoSuchObject">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NoSuchObject">Ldap.Client</a></td></tr><tr><td class="src">Not</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Not">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Not">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Not">Ldap.Client</a></td></tr><tr><td class="src">NotAllowedOnNonLeaf</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NotAllowedOnNonLeaf">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NotAllowedOnNonLeaf">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NotAllowedOnNonLeaf">Ldap.Client</a></td></tr><tr><td class="src">NotAllowedOnRDN</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NotAllowedOnRDN">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NotAllowedOnRDN">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NotAllowedOnRDN">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - N</p><table><tr><td class="src">NamingViolation</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NamingViolation">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NamingViolation">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NamingViolation">Ldap.Client</a></td></tr><tr><td class="src">NeverDerefAliases</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NeverDerefAliases">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:NeverDerefAliases">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:NeverDerefAliases">Ldap.Client</a></td></tr><tr><td class="src">New</td><td class="module"><a href="Ldap-Client-Internal.html#v:New">Ldap.Client.Internal</a></td></tr><tr><td class="src">NonEmpty</td><td class="module"><a href="Ldap-Client.html#t:NonEmpty">Ldap.Client</a></td></tr><tr><td class="src">NoSuchAttribute</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NoSuchAttribute">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NoSuchAttribute">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NoSuchAttribute">Ldap.Client</a></td></tr><tr><td class="src">NoSuchObject</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NoSuchObject">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NoSuchObject">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NoSuchObject">Ldap.Client</a></td></tr><tr><td class="src">Not</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Not">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Not">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Not">Ldap.Client</a></td></tr><tr><td class="src">NotAllowedOnNonLeaf</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NotAllowedOnNonLeaf">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NotAllowedOnNonLeaf">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NotAllowedOnNonLeaf">Ldap.Client</a></td></tr><tr><td class="src">NotAllowedOnRDN</td><td class="module"><a href="Ldap-Asn1-Type.html#v:NotAllowedOnRDN">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:NotAllowedOnRDN">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:NotAllowedOnRDN">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - O)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - O</p><table><tr><td class="src">ObjectClassModsProhibited</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ObjectClassModsProhibited">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ObjectClassModsProhibited">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ObjectClassModsProhibited">Ldap.Client</a></td></tr><tr><td class="src">ObjectClassViolation</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ObjectClassViolation">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ObjectClassViolation">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ObjectClassViolation">Ldap.Client</a></td></tr><tr><td class="src">Oid</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:Oid">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:Oid">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Internal.html#v:Oid">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Oid">Ldap.Client</a></td></tr><tr><td class="src">Operation</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Operation">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Ldap-Client-Modify.html#t:Operation">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#t:Operation">Ldap.Client</a></td></tr><tr><td class="src">OperationError</td><td class="module"><a href="Ldap-Asn1-Type.html#v:OperationError">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:OperationError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:OperationError">Ldap.Client</a></td></tr><tr><td class="src">Or</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Or">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Or">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Or">Ldap.Client</a></td></tr><tr><td class="src">Other</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Other">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Other">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Other">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - O</p><table><tr><td class="src">ObjectClassModsProhibited</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ObjectClassModsProhibited">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ObjectClassModsProhibited">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ObjectClassModsProhibited">Ldap.Client</a></td></tr><tr><td class="src">ObjectClassViolation</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ObjectClassViolation">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ObjectClassViolation">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ObjectClassViolation">Ldap.Client</a></td></tr><tr><td class="src">Oid</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Extended.html#t:Oid">Ldap.Client.Extended</a>, <a href="Ldap-Client.html#t:Oid">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Extended.html#v:Oid">Ldap.Client.Extended</a>, <a href="Ldap-Client.html#v:Oid">Ldap.Client</a></td></tr><tr><td class="src">Operation</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Operation">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Ldap-Client-Modify.html#t:Operation">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#t:Operation">Ldap.Client</a></td></tr><tr><td class="src">OperationError</td><td class="module"><a href="Ldap-Asn1-Type.html#v:OperationError">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:OperationError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:OperationError">Ldap.Client</a></td></tr><tr><td class="src">Or</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Or">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Or">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Or">Ldap.Client</a></td></tr><tr><td class="src">Other</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Other">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Other">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Other">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - P)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - P</p><table><tr><td class="src">parseAsn1</td><td class="module"><a href="Ldap-Asn1-FromAsn1.html#v:parseAsn1">Ldap.Asn1.FromAsn1</a></td></tr><tr><td class="src">ParseError</td><td class="module"><a href="Ldap-Client.html#v:ParseError">Ldap.Client</a></td></tr><tr><td class="src">PartialAttribute</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:PartialAttribute">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:PartialAttribute">Ldap.Asn1.Type</a></td></tr><tr><td class="src">PartialAttributeList</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:PartialAttributeList">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:PartialAttributeList">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Password</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:Password">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:Password">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Internal.html#v:Password">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Password">Ldap.Client</a></td></tr><tr><td class="src">Plain</td><td class="module"><a href="Ldap-Client-Internal.html#v:Plain">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Plain">Ldap.Client</a></td></tr><tr><td class="src">PortNumber</td><td class="module"><a href="Ldap-Client-Internal.html#t:PortNumber">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:PortNumber">Ldap.Client</a></td></tr><tr><td class="src">Present</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Present">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Present">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Present">Ldap.Client</a></td></tr><tr><td class="src">ProtocolClientOp</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ProtocolClientOp">Ldap.Asn1.Type</a></td></tr><tr><td class="src">ProtocolError</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ProtocolError">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ProtocolError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ProtocolError">Ldap.Client</a></td></tr><tr><td class="src">ProtocolServerOp</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ProtocolServerOp">Ldap.Asn1.Type</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - P</p><table><tr><td class="src">parseAsn1</td><td class="module"><a href="Ldap-Asn1-FromAsn1.html#v:parseAsn1">Ldap.Asn1.FromAsn1</a></td></tr><tr><td class="src">ParseError</td><td class="module"><a href="Ldap-Client.html#v:ParseError">Ldap.Client</a></td></tr><tr><td class="src">PartialAttribute</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:PartialAttribute">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:PartialAttribute">Ldap.Asn1.Type</a></td></tr><tr><td class="src">PartialAttributeList</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:PartialAttributeList">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:PartialAttributeList">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Password</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Bind.html#t:Password">Ldap.Client.Bind</a>, <a href="Ldap-Client.html#t:Password">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Bind.html#v:Password">Ldap.Client.Bind</a>, <a href="Ldap-Client.html#v:Password">Ldap.Client</a></td></tr><tr><td class="src">Plain</td><td class="module"><a href="Ldap-Client-Internal.html#v:Plain">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Plain">Ldap.Client</a></td></tr><tr><td class="src">PortNumber</td><td class="module"><a href="Ldap-Client-Internal.html#t:PortNumber">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:PortNumber">Ldap.Client</a></td></tr><tr><td class="src">Present</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Present">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Search.html#v:Present">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:Present">Ldap.Client</a></td></tr><tr><td class="src">ProtocolClientOp</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ProtocolClientOp">Ldap.Asn1.Type</a></td></tr><tr><td class="src">ProtocolError</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ProtocolError">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:ProtocolError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ProtocolError">Ldap.Client</a></td></tr><tr><td class="src">ProtocolServerOp</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ProtocolServerOp">Ldap.Asn1.Type</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - R)</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - R</p><table><tr><td class="src">raise</td><td class="module"><a href="Ldap-Client-Internal.html#v:raise">Ldap.Client.Internal</a></td></tr><tr><td class="src">Referral</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Referral">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Referral">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Referral">Ldap.Client</a></td></tr><tr><td class="src">ReferralUris</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ReferralUris">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ReferralUris">Ldap.Asn1.Type</a></td></tr><tr><td class="src">RelativeDn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:RelativeDn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:RelativeDn">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Internal.html#v:RelativeDn">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:RelativeDn">Ldap.Client</a></td></tr><tr><td class="src">RelativeLdapDn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:RelativeLdapDn">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:RelativeLdapDn">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Replace</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Replace">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Modify.html#v:Replace">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#v:Replace">Ldap.Client</a></td></tr><tr><td class="src">Request</td><td class="module"><a href="Ldap-Client-Internal.html#t:Request">Ldap.Client.Internal</a></td></tr><tr><td class="src">Response</td><td class="module"><a href="Ldap-Client-Internal.html#t:Response">Ldap.Client.Internal</a></td></tr><tr><td class="src">ResponseError</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:ResponseError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:ResponseError">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client.html#v:ResponseError">Ldap.Client</a></td></tr><tr><td class="src">ResponseErrorCode</td><td class="module"><a href="Ldap-Client-Internal.html#v:ResponseErrorCode">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ResponseErrorCode">Ldap.Client</a></td></tr><tr><td class="src">ResponseInvalid</td><td class="module"><a href="Ldap-Client-Internal.html#v:ResponseInvalid">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ResponseInvalid">Ldap.Client</a></td></tr><tr><td class="src">ResultCode</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ResultCode">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#t:ResultCode">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:ResultCode">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - R</p><table><tr><td class="src">raise</td><td class="module"><a href="Ldap-Client-Internal.html#v:raise">Ldap.Client.Internal</a></td></tr><tr><td class="src">Referral</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Referral">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Referral">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Referral">Ldap.Client</a></td></tr><tr><td class="src">ReferralUris</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ReferralUris">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:ReferralUris">Ldap.Asn1.Type</a></td></tr><tr><td class="src">RelativeDn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Modify.html#t:RelativeDn">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#t:RelativeDn">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Modify.html#v:RelativeDn">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#v:RelativeDn">Ldap.Client</a></td></tr><tr><td class="src">RelativeLdapDn</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:RelativeLdapDn">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:RelativeLdapDn">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Replace</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Replace">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client-Modify.html#v:Replace">Ldap.Client.Modify</a>, <a href="Ldap-Client.html#v:Replace">Ldap.Client</a></td></tr><tr><td class="src">Request</td><td class="module"><a href="Ldap-Client-Internal.html#t:Request">Ldap.Client.Internal</a></td></tr><tr><td class="src">Response</td><td class="module"><a href="Ldap-Client-Internal.html#t:Response">Ldap.Client.Internal</a></td></tr><tr><td class="src">ResponseError</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Client-Internal.html#t:ResponseError">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:ResponseError">Ldap.Client</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Client.html#v:ResponseError">Ldap.Client</a></td></tr><tr><td class="src">ResponseErrorCode</td><td class="module"><a href="Ldap-Client-Internal.html#v:ResponseErrorCode">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ResponseErrorCode">Ldap.Client</a></td></tr><tr><td class="src">ResponseInvalid</td><td class="module"><a href="Ldap-Client-Internal.html#v:ResponseInvalid">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:ResponseInvalid">Ldap.Client</a></td></tr><tr><td class="src">ResultCode</td><td class="module"><a href="Ldap-Asn1-Type.html#t:ResultCode">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#t:ResultCode">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#t:ResultCode">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

Binary file not shown.

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client.Bind</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Bind</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bind" target="main">bind</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindEither" target="main">bindEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsync" target="main">bindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsyncSTM" target="main">bindAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Bind</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Bind.html#t:Password" target="main">Password</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bind" target="main">bind</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindEither" target="main">bindEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsync" target="main">bindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsyncSTM" target="main">bindAsyncSTM</a></p></div></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client.Extended</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Extended</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extended" target="main">extended</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedEither" target="main">extendedEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedAsync" target="main">extendedAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedAsyncSTM" target="main">extendedAsyncSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTls" target="main">startTls</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsEither" target="main">startTlsEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsAsync" target="main">startTlsAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsAsyncSTM" target="main">startTlsAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Extended</p></div><div id="interface"><h1>Extended Operation</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Extended.html#t:Oid" target="main">Oid</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extended" target="main">extended</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedEither" target="main">extendedEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedAsync" target="main">extendedAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:extendedAsyncSTM" target="main">extendedAsyncSTM</a></p></div><h2>StartTLS Operation</h2><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTls" target="main">startTls</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsEither" target="main">startTlsEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsAsync" target="main">startTlsAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:startTlsAsyncSTM" target="main">startTlsAsyncSTM</a></p></div></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client.Internal</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Internal</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Host" target="main">Host</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:PortNumber" target="main">PortNumber</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Ldap" target="main">Ldap</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ClientMessage" target="main">ClientMessage</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ResultCode" target="main">ResultCode</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Oid" target="main">Oid</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:AttrList" target="main">AttrList</a> f</p></div><h1>Waiting for Request Completion</h1><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:waitSTM" target="main">waitSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unbindAsync" target="main">unbindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unbindAsyncSTM" target="main">unbindAsyncSTM</a></p></div><h1>Misc</h1><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:Response" target="main">Response</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ResponseError" target="main">ResponseError</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:Request" target="main">Request</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:raise" target="main">raise</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:sendRequest" target="main">sendRequest</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Dn" target="main">Dn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:RelativeDn" target="main">RelativeDn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Password" target="main">Password</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Attr" target="main">Attr</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:AttrValue" target="main">AttrValue</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unAttr" target="main">unAttr</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Internal</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Host" target="main">Host</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:PortNumber" target="main">PortNumber</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Ldap" target="main">Ldap</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ClientMessage" target="main">ClientMessage</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ResultCode" target="main">ResultCode</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:AttrList" target="main">AttrList</a> f</p></div><h1>Waiting for Request Completion</h1><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:waitSTM" target="main">waitSTM</a></p></div><h1>Misc</h1><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:Response" target="main">Response</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:ResponseError" target="main">ResponseError</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:Request" target="main">Request</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:raise" target="main">raise</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:sendRequest" target="main">sendRequest</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Dn" target="main">Dn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Internal.html#t:Attr" target="main">Attr</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client-Internal.html#t:AttrValue" target="main">AttrValue</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unAttr" target="main">unAttr</a></p></div><h1>Unbind operation</h1><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unbindAsync" target="main">unbindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Internal.html#v:unbindAsyncSTM" target="main">unbindAsyncSTM</a></p></div></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client.Modify</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Modify</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Modify.html#t:Operation" target="main">Operation</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modify" target="main">modify</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyEither" target="main">modifyEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyAsync" target="main">modifyAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyAsyncSTM" target="main">modifyAsyncSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDn" target="main">modifyDn</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnEither" target="main">modifyDnEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnAsync" target="main">modifyDnAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnAsyncSTM" target="main">modifyDnAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Modify</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Modify.html#t:Operation" target="main">Operation</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modify" target="main">modify</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyEither" target="main">modifyEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyAsync" target="main">modifyAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyAsyncSTM" target="main">modifyAsyncSTM</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Modify.html#t:RelativeDn" target="main">RelativeDn</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDn" target="main">modifyDn</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnEither" target="main">modifyDnEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnAsync" target="main">modifyDnAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:modifyDnAsyncSTM" target="main">modifyDnAsyncSTM</a></p></div></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client.Search</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Search</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:search" target="main">search</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchEither" target="main">searchEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchAsync" target="main">searchAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchAsyncSTM" target="main">searchAsyncSTM</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Search" target="main">Search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Mod" target="main">Mod</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Scope" target="main">Scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:scope" target="main">scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:size" target="main">size</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:time" target="main">time</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:typesOnly" target="main">typesOnly</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:derefAliases" target="main">derefAliases</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Filter" target="main">Filter</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:SearchEntry" target="main">SearchEntry</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Search</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:search" target="main">search</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchEither" target="main">searchEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchAsync" target="main">searchAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:searchAsyncSTM" target="main">searchAsyncSTM</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Search" target="main">Search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Mod" target="main">Mod</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Scope" target="main">Scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:scope" target="main">scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:size" target="main">size</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:time" target="main">time</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:typesOnly" target="main">typesOnly</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:DerefAliases" target="main">DerefAliases</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:derefAliases" target="main">derefAliases</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Filter" target="main">Filter</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:SearchEntry" target="main">SearchEntry</a></p></div></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Ldap.Client</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Host" target="main">Host</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Ldap" target="main">Ldap</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:LdapError" target="main">LdapError</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:ResponseError" target="main">ResponseError</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:ResultCode" target="main">ResultCode</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:with" target="main">with</a></p></div><h1>Bind</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:bind" target="main">bind</a></p></div><h1>Search</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:search" target="main">search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:SearchEntry" target="main">SearchEntry</a></p></div><h2>Search modifiers</h2><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Search" target="main">Search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Mod" target="main">Mod</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:scope" target="main">scope</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Scope" target="main">Scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:size" target="main">size</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:time" target="main">time</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:typesOnly" target="main">typesOnly</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:derefAliases" target="main">derefAliases</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Filter" target="main">Filter</a></p></div><h1>Modify</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:modify" target="main">modify</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Operation" target="main">Operation</a></p></div><h1>Add</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:add" target="main">add</a></p></div><h1>Delete</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:delete" target="main">delete</a></p></div><h1>ModifyDn</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:modifyDn" target="main">modifyDn</a></p></div><h1>Compare</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:compare" target="main">compare</a></p></div><h1>Extended</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:extended" target="main">extended</a></p></div><h1>Waiting for completion</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:wait" target="main">wait</a></p></div><h1>Miscellanous</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Dn" target="main">Dn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:RelativeDn" target="main">RelativeDn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Oid" target="main">Oid</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Password" target="main">Password</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client.html#t:AttrList" target="main">AttrList</a> f</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Attr" target="main">Attr</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client.html#t:AttrValue" target="main">AttrValue</a></p></div><h1>Re-exports</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:NonEmpty" target="main">NonEmpty</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:PortNumber" target="main">PortNumber</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Host" target="main">Host</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Ldap" target="main">Ldap</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:LdapError" target="main">LdapError</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:ResponseError" target="main">ResponseError</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:ResultCode" target="main">ResultCode</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:with" target="main">with</a></p></div><h1>Bind</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Password" target="main">Password</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:bind" target="main">bind</a></p></div><h1>Search</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:search" target="main">search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:SearchEntry" target="main">SearchEntry</a></p></div><h2>Search modifiers</h2><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Search" target="main">Search</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Mod" target="main">Mod</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Scope" target="main">Scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:scope" target="main">scope</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:size" target="main">size</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:time" target="main">time</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:typesOnly" target="main">typesOnly</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:DerefAliases" target="main">DerefAliases</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:derefAliases" target="main">derefAliases</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Filter" target="main">Filter</a></p></div><h1>Modify</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:modify" target="main">modify</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Operation" target="main">Operation</a></p></div><h1>Add</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:add" target="main">add</a></p></div><h1>Delete</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:delete" target="main">delete</a></p></div><h1>ModifyDn</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:RelativeDn" target="main">RelativeDn</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:modifyDn" target="main">modifyDn</a></p></div><h1>Compare</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:compare" target="main">compare</a></p></div><h1>Extended</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Oid" target="main">Oid</a></p></div><div class="top"><p class="src"><a href="Ldap-Client.html#v:extended" target="main">extended</a></p></div><h1>Waiting for completion</h1><div class="top"><p class="src"><a href="Ldap-Client.html#v:wait" target="main">wait</a></p></div><h1>Miscellanous</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Dn" target="main">Dn</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:Attr" target="main">Attr</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client.html#t:AttrValue" target="main">AttrValue</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a href="Ldap-Client.html#t:AttrList" target="main">AttrList</a> f</p></div><h1>Re-exports</h1><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:NonEmpty" target="main">NonEmpty</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client.html#t:PortNumber" target="main">PortNumber</a></p></div></div></body></html>

View File

@ -56,170 +56,177 @@
<a name="line-47"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IntermediateResponse</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapOid</span><span class='hs-layout'>)</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-48"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="AuthenticationChoice"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Simple</span> <span class='hs-conid'>ByteString</span>
<a name="line-51"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="Scope"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>=</span>
<a name="line-54"></a> <span class='hs-conid'>BaseObject</span>
<a name="line-55"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SingleLevel</span>
<a name="line-56"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WholeSubtree</span>
<a name="line-57"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="DerefAliases"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a> <span class='hs-conid'>NeverDerefAliases</span>
<a name="line-61"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefInSearching</span>
<a name="line-62"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefFindingBaseObject</span>
<a name="line-63"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefAlways</span>
<a name="line-64"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-67"></a> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-70"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EqualityMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-71"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Substrings</span> <span class='hs-conid'>SubstringFilter</span>
<a name="line-72"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-73"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LessOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-74"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>AttributeDescription</span>
<a name="line-75"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ApproxMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-76"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-conid'>MatchingRuleAssertion</span>
<a name="line-77"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="SubstringFilter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Substring</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="Substring"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Substring</span> <span class='hs-keyglyph'>=</span>
<a name="line-83"></a> <span class='hs-conid'>Initial</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Any</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-85"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Final</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-50"></a><a name="AuthenticationChoice"></a><span class='hs-comment'>-- | Not really a choice until SASL is supported.</span>
<a name="line-51"></a><a name="AuthenticationChoice"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Simple</span> <span class='hs-conid'>ByteString</span>
<a name="line-52"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="Scope"></a><span class='hs-comment'>-- | Scope of the search to be performed.</span>
<a name="line-55"></a><a name="Scope"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>=</span>
<a name="line-56"></a> <span class='hs-conid'>BaseObject</span> <span class='hs-comment'>-- ^ Constrained to the entry named by baseObject.</span>
<a name="line-57"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SingleLevel</span> <span class='hs-comment'>-- ^ Constrained to the immediate subordinates of the entry named by baseObject.</span>
<a name="line-58"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WholeSubtree</span> <span class='hs-comment'>-- ^ Constrained to the entry named by baseObject and to all its subordinates.</span>
<a name="line-59"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="DerefAliases"></a><span class='hs-comment'>-- | An indicator as to whether or not alias entries (as defined in</span>
<a name="line-62"></a><a name="DerefAliases"></a><span class='hs-comment'>-- [RFC4512]) are to be dereferenced during stages of the Search</span>
<a name="line-63"></a><a name="DerefAliases"></a><span class='hs-comment'>-- operation.</span>
<a name="line-64"></a><a name="DerefAliases"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>=</span>
<a name="line-65"></a> <span class='hs-conid'>NeverDerefAliases</span> <span class='hs-comment'>-- ^ Do not dereference aliases in searching or in locating the base object of the Search.</span>
<a name="line-66"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefInSearching</span> <span class='hs-comment'>-- ^ While searching subordinates of the base object, dereference any alias within the search scope.</span>
<a name="line-67"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefFindingBaseObject</span> <span class='hs-comment'>-- ^ Dereference aliases in locating the base object of the Search.</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefAlways</span> <span class='hs-comment'>-- ^ Dereference aliases both in searching and in locating the base object of the Search.</span>
<a name="line-69"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="Filter"></a><span class='hs-comment'>-- | Conditions that must be fulfilled in order for the Search to match a given entry.</span>
<a name="line-72"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-73"></a> <span class='hs-conid'>And</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ All filters evaluate to @TRUE@</span>
<a name="line-74"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Any filter evaluates to @TRUE@</span>
<a name="line-75"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span> <span class='hs-comment'>-- ^ Filter evaluates to @FALSE@</span>
<a name="line-76"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EqualityMatch</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-comment'>-- ^ @EQUALITY@ rule returns @TRUE@</span>
<a name="line-77"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Substrings</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-comment'>-- ^ @SUBSTR@ rule returns @TRUE@</span>
<a name="line-78"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-comment'>-- ^ @ORDERING@ rule returns @FALSE@</span>
<a name="line-79"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LessOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-comment'>-- ^ @ORDERING@ or @EQUALITY@ rule returns @TRUE@</span>
<a name="line-80"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-comment'>-- ^ Attribute is present in the entry</span>
<a name="line-81"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ApproxMatch</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-comment'>-- ^ Same as 'EqualityMatch' for most servers</span>
<a name="line-82"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-conid'>MatchingRuleAssertion</span>
<a name="line-83"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-84"></a>
<a name="line-85"></a><a name="SubstringFilter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Substring</span><span class='hs-layout'>)</span>
<a name="line-86"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-87"></a>
<a name="line-88"></a><a name="MatchingRuleAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>MatchingRuleId</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttributeDescription</span><span class='hs-layout'>)</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>Bool</span>
<a name="line-89"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- | Matching rules are defined in Section 4.1.3 of [RFC4512]. A matching</span>
<a name="line-92"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- rule is identified in the protocol by the printable representation of</span>
<a name="line-93"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- either its &lt;numericoid&gt; or one of its short name descriptors</span>
<a name="line-94"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- [RFC4512], e.g., 'caseIgnoreMatch' or '2.5.13.2'. (Section 4.1.8.)</span>
<a name="line-95"></a><a name="MatchingRuleId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-conid'>LdapString</span>
<a name="line-96"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="AttributeSelection"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>LdapString</span><span class='hs-keyglyph'>]</span>
<a name="line-99"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-100"></a>
<a name="line-101"></a><a name="AttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attribute</span><span class='hs-keyglyph'>]</span>
<a name="line-88"></a><a name="Substring"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Substring</span> <span class='hs-keyglyph'>=</span>
<a name="line-89"></a> <span class='hs-conid'>Initial</span> <span class='hs-varop'>!</span><span class='hs-conid'>AssertionValue</span>
<a name="line-90"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Any</span> <span class='hs-varop'>!</span><span class='hs-conid'>AssertionValue</span>
<a name="line-91"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Final</span> <span class='hs-varop'>!</span><span class='hs-conid'>AssertionValue</span>
<a name="line-92"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="MatchingRuleAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>MatchingRuleId</span><span class='hs-layout'>)</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttributeDescription</span><span class='hs-layout'>)</span> <span class='hs-varop'>!</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varop'>!</span><span class='hs-conid'>Bool</span>
<a name="line-95"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-96"></a>
<a name="line-97"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- | Matching rules are defined in Section 4.1.3 of [RFC4512]. A matching</span>
<a name="line-98"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- rule is identified in the protocol by the printable representation of</span>
<a name="line-99"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- either its &lt;numericoid&gt; or one of its short name descriptors</span>
<a name="line-100"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- [RFC4512], e.g., 'caseIgnoreMatch' or '2.5.13.2'. (Section 4.1.8.)</span>
<a name="line-101"></a><a name="MatchingRuleId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-conid'>LdapString</span>
<a name="line-102"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="PartialAttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>PartialAttribute</span><span class='hs-keyglyph'>]</span>
<a name="line-104"></a><a name="AttributeSelection"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>LdapString</span><span class='hs-keyglyph'>]</span>
<a name="line-105"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="Controls"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Control</span><span class='hs-keyglyph'>]</span>
<a name="line-107"></a><a name="AttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attribute</span><span class='hs-keyglyph'>]</span>
<a name="line-108"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="Control"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Control</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Control</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Bool</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-110"></a><a name="PartialAttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>PartialAttribute</span><span class='hs-keyglyph'>]</span>
<a name="line-111"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-112"></a>
<a name="line-113"></a><a name="LdapResult"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapResult</span> <span class='hs-conid'>ResultCode</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ReferralUris</span><span class='hs-layout'>)</span>
<a name="line-113"></a><a name="Controls"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Control</span><span class='hs-keyglyph'>]</span>
<a name="line-114"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="ResultCode"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResultCode</span> <span class='hs-keyglyph'>=</span>
<a name="line-117"></a> <span class='hs-conid'>Success</span>
<a name="line-118"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OperationError</span>
<a name="line-119"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-120"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-121"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-125"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-126"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Referral</span>
<a name="line-127"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-128"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-130"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-131"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-132"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-133"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-134"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-135"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-136"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-142"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-143"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-144"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Busy</span>
<a name="line-145"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Unavailable</span>
<a name="line-146"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-147"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-148"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-149"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-150"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-151"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-152"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-153"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-154"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-155"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Other</span>
<a name="line-156"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-157"></a>
<a name="line-158"></a><a name="AttributeDescription"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>LdapString</span>
<a name="line-159"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-160"></a>
<a name="line-161"></a><a name="AttributeValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-162"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-163"></a>
<a name="line-164"></a><a name="AttributeValueAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-165"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-166"></a>
<a name="line-167"></a><a name="AssertionValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-168"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="Attribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>AttributeValue</span><span class='hs-layout'>)</span>
<a name="line-171"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-172"></a>
<a name="line-173"></a><a name="PartialAttribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttributeValue</span><span class='hs-keyglyph'>]</span>
<a name="line-174"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-175"></a>
<a name="line-116"></a><a name="Control"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Control</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Control</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapOid</span> <span class='hs-varop'>!</span><span class='hs-conid'>Bool</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-117"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-118"></a>
<a name="line-119"></a><a name="LdapResult"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapResult</span> <span class='hs-varop'>!</span><span class='hs-conid'>ResultCode</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapString</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ReferralUris</span><span class='hs-layout'>)</span>
<a name="line-120"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="ResultCode"></a><span class='hs-comment'>-- | LDAP operation's result.</span>
<a name="line-123"></a><a name="ResultCode"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResultCode</span> <span class='hs-keyglyph'>=</span>
<a name="line-124"></a> <span class='hs-conid'>Success</span>
<a name="line-125"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OperationError</span>
<a name="line-126"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-127"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-128"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-130"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-131"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-132"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-133"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Referral</span>
<a name="line-134"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-135"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-136"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-142"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-143"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-144"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-145"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-146"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-147"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-148"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-149"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-150"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-151"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Busy</span>
<a name="line-152"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Unavailable</span>
<a name="line-153"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-154"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-155"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-156"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-157"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-158"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-159"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-160"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-161"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-162"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Other</span>
<a name="line-163"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-164"></a>
<a name="line-165"></a><a name="AttributeDescription"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>LdapString</span>
<a name="line-166"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="AttributeValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-169"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="AttributeValueAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varop'>!</span><span class='hs-conid'>AssertionValue</span>
<a name="line-172"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-173"></a>
<a name="line-174"></a><a name="AssertionValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-175"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-176"></a>
<a name="line-177"></a>
<a name="line-178"></a><a name="LdapDn"></a><span class='hs-comment'>-- | An LDAPDN is defined to be the representation of a Distinguished Name</span>
<a name="line-179"></a><a name="LdapDn"></a><span class='hs-comment'>-- (DN) after encoding according to the specification in [RFC4514].</span>
<a name="line-180"></a><a name="LdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-177"></a><a name="Attribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attribute</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>AttributeValue</span><span class='hs-layout'>)</span>
<a name="line-178"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="PartialAttribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varop'>!</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>AttributeValue</span><span class='hs-keyglyph'>]</span>
<a name="line-181"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-182"></a>
<a name="line-183"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- | A RelativeLDAPDN is defined to be the representation of a Relative</span>
<a name="line-184"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- Distinguished Name (RDN) after encoding according to the</span>
<a name="line-185"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- specification in [RFC4514].</span>
<a name="line-186"></a><a name="RelativeLdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-187"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-188"></a>
<a name="line-189"></a><a name="ReferralUris"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-190"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="Uri"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Uri</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Uri</span> <span class='hs-conid'>LdapString</span>
<a name="line-193"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-194"></a>
<a name="line-195"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-196"></a> <span class='hs-conid'>Add</span>
<a name="line-197"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Delete</span>
<a name="line-198"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span>
<a name="line-199"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-200"></a>
<a name="line-201"></a><a name="LdapString"></a><span class='hs-comment'>-- | The LDAPString is a notational convenience to indicate that, although</span>
<a name="line-202"></a><a name="LdapString"></a><span class='hs-comment'>-- strings of LDAPString type encode as ASN.1 OCTET STRING types, the</span>
<a name="line-203"></a><a name="LdapString"></a><span class='hs-comment'>-- [ISO10646] character set (a superset of [Unicode]) is used, encoded</span>
<a name="line-204"></a><a name="LdapString"></a><span class='hs-comment'>-- following the UTF-8 [RFC3629] algorithm. (Section 4.1.2.)</span>
<a name="line-205"></a><a name="LdapString"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapString</span> <span class='hs-conid'>Text</span>
<a name="line-183"></a>
<a name="line-184"></a>
<a name="line-185"></a><a name="LdapDn"></a><span class='hs-comment'>-- | An LDAPDN is defined to be the representation of a Distinguished Name</span>
<a name="line-186"></a><a name="LdapDn"></a><span class='hs-comment'>-- (DN) after encoding according to the specification in [RFC4514].</span>
<a name="line-187"></a><a name="LdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-188"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-189"></a>
<a name="line-190"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- | A RelativeLDAPDN is defined to be the representation of a Relative</span>
<a name="line-191"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- Distinguished Name (RDN) after encoding according to the</span>
<a name="line-192"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- specification in [RFC4514].</span>
<a name="line-193"></a><a name="RelativeLdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-194"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-195"></a>
<a name="line-196"></a><a name="ReferralUris"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-197"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-198"></a>
<a name="line-199"></a><a name="Uri"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Uri</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Uri</span> <span class='hs-conid'>LdapString</span>
<a name="line-200"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-201"></a>
<a name="line-202"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-203"></a> <span class='hs-conid'>Add</span>
<a name="line-204"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Delete</span>
<a name="line-205"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span>
<a name="line-206"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-207"></a>
<a name="line-208"></a><a name="LdapOid"></a><span class='hs-comment'>-- | The LDAPOID is a notational convenience to indicate that the</span>
<a name="line-209"></a><a name="LdapOid"></a><span class='hs-comment'>-- permitted value of this string is a (UTF-8 encoded) dotted-decimal</span>
<a name="line-210"></a><a name="LdapOid"></a><span class='hs-comment'>-- representation of an OBJECT IDENTIFIER. Although an LDAPOID is</span>
<a name="line-211"></a><a name="LdapOid"></a><span class='hs-comment'>-- encoded as an OCTET STRING, values are limited to the definition of</span>
<a name="line-212"></a><a name="LdapOid"></a><span class='hs-comment'>-- \&lt;numericoid\&gt; given in Section 1.4 of [RFC4512].</span>
<a name="line-213"></a><a name="LdapOid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Text</span>
<a name="line-214"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-208"></a><a name="LdapString"></a><span class='hs-comment'>-- | The LDAPString is a notational convenience to indicate that, although</span>
<a name="line-209"></a><a name="LdapString"></a><span class='hs-comment'>-- strings of LDAPString type encode as ASN.1 OCTET STRING types, the</span>
<a name="line-210"></a><a name="LdapString"></a><span class='hs-comment'>-- [ISO10646] character set (a superset of [Unicode]) is used, encoded</span>
<a name="line-211"></a><a name="LdapString"></a><span class='hs-comment'>-- following the UTF-8 [RFC3629] algorithm. (Section 4.1.2.)</span>
<a name="line-212"></a><a name="LdapString"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapString</span> <span class='hs-conid'>Text</span>
<a name="line-213"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-214"></a>
<a name="line-215"></a><a name="LdapOid"></a><span class='hs-comment'>-- | The LDAPOID is a notational convenience to indicate that the</span>
<a name="line-216"></a><a name="LdapOid"></a><span class='hs-comment'>-- permitted value of this string is a (UTF-8 encoded) dotted-decimal</span>
<a name="line-217"></a><a name="LdapOid"></a><span class='hs-comment'>-- representation of an OBJECT IDENTIFIER. Although an LDAPOID is</span>
<a name="line-218"></a><a name="LdapOid"></a><span class='hs-comment'>-- encoded as an OCTET STRING, values are limited to the definition of</span>
<a name="line-219"></a><a name="LdapOid"></a><span class='hs-comment'>-- \&lt;numericoid\&gt; given in Section 1.4 of [RFC4512].</span>
<a name="line-220"></a><a name="LdapOid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Text</span>
<a name="line-221"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -21,57 +21,63 @@
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('bind') is probably the most useful for the typical usecase.</span>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Bind</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>bind</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindEither</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsync</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsyncSTM</span>
<a name="line-19"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-20"></a>
<a name="line-21"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-26"></a>
<a name="line-27"></a>
<a name="line-28"></a><a name="bind"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-29"></a><span class='hs-definition'>bind</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-30"></a><span class='hs-definition'>bind</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-31"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-32"></a>
<a name="line-33"></a><a name="bindEither"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Returns @Left e@ where</span>
<a name="line-34"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-35"></a><span class='hs-definition'>bindEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-definition'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-37"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bind</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindEither</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsync</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsyncSTM</span>
<a name="line-20"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-21"></a>
<a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-23"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-28"></a>
<a name="line-29"></a>
<a name="line-30"></a><a name="Password"></a><span class='hs-comment'>-- | User's password.</span>
<a name="line-31"></a><a name="Password"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Password</span> <span class='hs-conid'>ByteString</span>
<a name="line-32"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-33"></a>
<a name="line-34"></a><a name="bind"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-35"></a><span class='hs-definition'>bind</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-36"></a><span class='hs-definition'>bind</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-37"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="bindAsync"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-40"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-41"></a><span class='hs-definition'>bindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-definition'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-43"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-39"></a><a name="bindEither"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Returns @Left e@ where</span>
<a name="line-40"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-41"></a><span class='hs-definition'>bindEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-definition'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-43"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="bindAsyncSTM"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously.</span>
<a name="line-46"></a><span class='hs-comment'>--</span>
<a name="line-47"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-48"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-49"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-50"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-51"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bindRequest</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="bindRequest"></a><span class='hs-definition'>bindRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-54"></a><span class='hs-definition'>bindRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Password</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-55"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindRequest</span> <span class='hs-varid'>ldapVersion</span>
<a name="line-56"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-57"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-58"></a> <span class='hs-keyword'>where</span>
<a name="line-59"></a> <span class='hs-varid'>ldapVersion</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>3</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="bindResult"></a><span class='hs-definition'>bindResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-62"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-63"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-64"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-65"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-66"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-45"></a><a name="bindAsync"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-46"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-47"></a><span class='hs-definition'>bindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-48"></a><span class='hs-definition'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-49"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="bindAsyncSTM"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously.</span>
<a name="line-52"></a><span class='hs-comment'>--</span>
<a name="line-53"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-54"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-55"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-56"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-57"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bindRequest</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="bindRequest"></a><span class='hs-definition'>bindRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-60"></a><span class='hs-definition'>bindRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Password</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-61"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindRequest</span> <span class='hs-varid'>ldapVersion</span>
<a name="line-62"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-63"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-64"></a> <span class='hs-keyword'>where</span>
<a name="line-65"></a> <span class='hs-varid'>ldapVersion</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>3</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="bindResult"></a><span class='hs-definition'>bindResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-68"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-69"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-70"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-71"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-72"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -7,91 +7,105 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE OverloadedStrings #-}</span>
<a name="line-2"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.12 Extended&gt; operation.</span>
<a name="line-3"></a><span class='hs-comment'>--</span>
<a name="line-4"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-5"></a><span class='hs-comment'>--</span>
<a name="line-6"></a><span class='hs-comment'>-- * synchronous, exception throwing ('extended')</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('extendedEither')</span>
<a name="line-9"></a><span class='hs-comment'>--</span>
<a name="line-10"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('extendedAsync')</span>
<a name="line-11"></a><span class='hs-comment'>--</span>
<a name="line-12"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('extendedAsyncSTM')</span>
<a name="line-13"></a><span class='hs-comment'>--</span>
<a name="line-14"></a><span class='hs-comment'>-- Of those, the first one ('extended') is probably the most useful for the typical usecase.</span>
<a name="line-15"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Extended</span>
<a name="line-16"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>extended</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedEither</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedAsync</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedAsyncSTM</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTls</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsEither</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsAsync</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsAsyncSTM</span>
<a name="line-24"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-25"></a>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>&lt;=&lt;</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-33"></a>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.12 Extended&gt; operation.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- * synchronous, exception throwing ('extended')</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('extendedEither')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('extendedAsync')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('extendedAsyncSTM')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('extended') is probably the most useful for the typical usecase.</span>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Extended</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-comment'>-- * Extended Operation</span>
<a name="line-16"></a> <span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extended</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedEither</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedAsync</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extendedAsyncSTM</span>
<a name="line-21"></a> <span class='hs-comment'>-- ** StartTLS Operation</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTls</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsEither</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsAsync</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>startTlsAsyncSTM</span>
<a name="line-26"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-27"></a>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>&lt;=&lt;</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromString</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-34"></a>
<a name="line-35"></a><a name="extended"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-36"></a><span class='hs-definition'>extended</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-37"></a><span class='hs-definition'>extended</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-38"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>extendedEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span>
<a name="line-39"></a>
<a name="line-40"></a><a name="extendedEither"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Returns @Left e@ where</span>
<a name="line-41"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-42"></a><span class='hs-definition'>extendedEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-43"></a><span class='hs-definition'>extendedEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-44"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>extendedAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span>
<a name="line-45"></a>
<a name="line-46"></a><a name="extendedAsync"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-47"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-48"></a><span class='hs-definition'>extendedAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-49"></a><span class='hs-definition'>extendedAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-50"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span><span class='hs-layout'>)</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="extendedAsyncSTM"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously.</span>
<a name="line-53"></a><span class='hs-comment'>--</span>
<a name="line-54"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-55"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-56"></a><span class='hs-definition'>extendedAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-57"></a><span class='hs-definition'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>extendedRequest</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>extendedResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-37"></a>
<a name="line-38"></a>
<a name="line-39"></a><a name="Oid"></a><span class='hs-comment'>-- | Globally unique LDAP object identifier.</span>
<a name="line-40"></a><a name="Oid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Oid</span> <span class='hs-conid'>Text</span>
<a name="line-41"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="extended"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-44"></a><span class='hs-definition'>extended</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-45"></a><span class='hs-definition'>extended</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>extendedEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="extendedEither"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Returns @Left e@ where</span>
<a name="line-49"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-50"></a><span class='hs-definition'>extendedEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-51"></a><span class='hs-definition'>extendedEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-52"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>extendedAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="extendedAsync"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-55"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-56"></a><span class='hs-definition'>extendedAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-57"></a><span class='hs-definition'>extendedAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span><span class='hs-layout'>)</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="extendedRequest"></a><span class='hs-definition'>extendedRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-61"></a><span class='hs-definition'>extendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-62"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="extendedResult"></a><span class='hs-definition'>extendedResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-65"></a><span class='hs-definition'>extendedResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-66"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-67"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-69"></a><span class='hs-definition'>extendedResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-60"></a><a name="extendedAsyncSTM"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously.</span>
<a name="line-61"></a><span class='hs-comment'>--</span>
<a name="line-62"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-63"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-64"></a><span class='hs-definition'>extendedAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-definition'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyglyph'>=</span>
<a name="line-66"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>extendedRequest</span> <span class='hs-varid'>oid</span> <span class='hs-varid'>mv</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>extendedResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="extendedRequest"></a><span class='hs-definition'>extendedRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-69"></a><span class='hs-definition'>extendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-70"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="startTls"></a><span class='hs-definition'>startTls</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-73"></a><span class='hs-definition'>startTls</span> <span class='hs-keyglyph'>=</span>
<a name="line-74"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsEither</span>
<a name="line-75"></a>
<a name="line-76"></a><a name="startTlsEither"></a><span class='hs-definition'>startTlsEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-77"></a><span class='hs-definition'>startTlsEither</span> <span class='hs-keyglyph'>=</span>
<a name="line-78"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsAsync</span>
<a name="line-72"></a><a name="extendedResult"></a><span class='hs-definition'>extendedResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-73"></a><span class='hs-definition'>extendedResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span>
<a name="line-74"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-76"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-77"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-78"></a><span class='hs-definition'>extendedResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-79"></a>
<a name="line-80"></a><a name="startTlsAsync"></a><span class='hs-definition'>startTlsAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-81"></a><span class='hs-definition'>startTlsAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-82"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>startTlsAsyncSTM</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="startTlsAsyncSTM"></a><span class='hs-definition'>startTlsAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-85"></a><span class='hs-definition'>startTlsAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-86"></a> <span class='hs-varid'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span> <span class='hs-str'>"1.3.6.1.4.1.1466.20037"</span><span class='hs-layout'>)</span> <span class='hs-conid'>Nothing</span>
<a name="line-80"></a>
<a name="line-81"></a><a name="startTls"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extended'.</span>
<a name="line-82"></a><span class='hs-definition'>startTls</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-83"></a><span class='hs-definition'>startTls</span> <span class='hs-keyglyph'>=</span>
<a name="line-84"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsEither</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="startTlsEither"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedEither'.</span>
<a name="line-87"></a><span class='hs-definition'>startTlsEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-88"></a><span class='hs-definition'>startTlsEither</span> <span class='hs-keyglyph'>=</span>
<a name="line-89"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsAsync</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="startTlsAsync"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedAsync'.</span>
<a name="line-92"></a><span class='hs-definition'>startTlsAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-93"></a><span class='hs-definition'>startTlsAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-94"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>startTlsAsyncSTM</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="startTlsAsyncSTM"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedAsyncSTM'.</span>
<a name="line-97"></a><span class='hs-definition'>startTlsAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-98"></a><span class='hs-definition'>startTlsAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-99"></a> <span class='hs-varid'>extendedAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromString</span> <span class='hs-str'>"1.3.6.1.4.1.1466.20037"</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-100"></a> <span class='hs-conid'>Nothing</span>
</pre></body>
</html>

View File

@ -16,127 +16,137 @@
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ClientMessage</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</span>
<a name="line-12"></a> <span class='hs-comment'>-- * Waiting for Request Completion</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsync</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-17"></a> <span class='hs-comment'>-- * Misc</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Response</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Request</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>raise</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sendRequest</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Dn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unAttr</span>
<a name="line-29"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>newEmptyTMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTMVar</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>void</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span> <span class='hs-layout'>(</span><span class='hs-conid'>PortNumber</span><span class='hs-layout'>)</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</span>
<a name="line-11"></a> <span class='hs-comment'>-- * Waiting for Request Completion</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-14"></a> <span class='hs-comment'>-- * Misc</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Response</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Request</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>raise</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sendRequest</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Dn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unAttr</span>
<a name="line-24"></a> <span class='hs-comment'>-- * Unbind operation</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsync</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-27"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>newEmptyTMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTMVar</span><span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>void</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span> <span class='hs-layout'>(</span><span class='hs-conid'>PortNumber</span><span class='hs-layout'>)</span>
<a name="line-39"></a>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-41"></a>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-43"></a>
<a name="line-44"></a>
<a name="line-45"></a><a name="Host"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-conid'>Plain</span> <span class='hs-conid'>String</span>
<a name="line-47"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Secure</span> <span class='hs-conid'>String</span>
<a name="line-48"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Insecure</span> <span class='hs-conid'>String</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="Host"></a><span class='hs-comment'>-- | LDAP host.</span>
<a name="line-44"></a><a name="Host"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>=</span>
<a name="line-45"></a> <span class='hs-conid'>Plain</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ Plain LDAP. Do not use!</span>
<a name="line-46"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Insecure</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ LDAP over TLS without the certificate validity check.</span>
<a name="line-47"></a> <span class='hs-comment'>-- Only use for testing!</span>
<a name="line-48"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Secure</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ LDAP over TLS. Use!</span>
<a name="line-49"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="Ldap"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-52"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TQueue</span> <span class='hs-conid'>ClientMessage</span>
<a name="line-53"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-54"></a>
<a name="line-55"></a><a name="ClientMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ClientMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>New</span> <span class='hs-conid'>Request</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-56"></a><a name="Request"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolClientOp</span>
<a name="line-57"></a><a name="InMessage"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>InMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span>
<a name="line-58"></a><a name="Response"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>InMessage</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="Async"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="instance%20Functor%20Async"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-conid'>Async</span> <span class='hs-keyword'>where</span>
<a name="line-63"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="Dn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-66"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="RelativeDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-conid'>Text</span>
<a name="line-51"></a><a name="Ldap"></a><span class='hs-comment'>-- | A token. All functions that interact with the Directory require one.</span>
<a name="line-52"></a><a name="Ldap"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-53"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TQueue</span> <span class='hs-conid'>ClientMessage</span>
<a name="line-54"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="ClientMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ClientMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>New</span> <span class='hs-conid'>Request</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-57"></a><a name="Request"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolClientOp</span>
<a name="line-58"></a><a name="InMessage"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>InMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span>
<a name="line-59"></a><a name="Response"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>InMessage</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="Async"></a><span class='hs-comment'>-- | Asynchronous LDAP operation. Use 'wait' or 'waitSTM' to wait for its completion.</span>
<a name="line-62"></a><a name="Async"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="instance%20Functor%20Async"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-conid'>Async</span> <span class='hs-keyword'>where</span>
<a name="line-65"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="Dn"></a><span class='hs-comment'>-- | Unique identifier of an LDAP entry.</span>
<a name="line-68"></a><a name="Dn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-69"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="Oid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Oid</span> <span class='hs-conid'>Text</span>
<a name="line-72"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-73"></a>
<a name="line-74"></a><a name="Password"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Password</span> <span class='hs-conid'>ByteString</span>
<a name="line-75"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-71"></a><a name="ResponseError"></a><span class='hs-comment'>-- | Response indicates a failed operation.</span>
<a name="line-72"></a><a name="ResponseError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>=</span>
<a name="line-73"></a> <span class='hs-conid'>ResponseInvalid</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Response</span> <span class='hs-comment'>-- ^ LDAP server did not follow the protocol, so @ldap-client@ couldn't make sense of the response.</span>
<a name="line-74"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseErrorCode</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span> <span class='hs-comment'>-- ^ The response contains a result code indicating failure and an error message.</span>
<a name="line-75"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-76"></a>
<a name="line-77"></a><a name="ResponseError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>=</span>
<a name="line-78"></a> <span class='hs-conid'>ResponseInvalid</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Response</span>
<a name="line-79"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseErrorCode</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-80"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="instance%20Either%20e%20a%20-%3e%20IO%20a%20raise%20=%20either%20throwIO%20return%20--%20%7c%20Note%20that%20'unbindAsync'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsync%20::%20Ldap%20-%3e%20IO%20()%20unbindAsync%20=%20atomically%20.%20unbindAsyncSTM%20--%20%7c%20Note%20that%20'unbindAsyncSTM'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsyncSTM%20::%20Ldap%20-%3e%20STM%20()%20unbindAsyncSTM%20l%20=%20void%20(sendRequest%20l%20die%20Type.UnbindRequest)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>ResponseError</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="Attr"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attr</span> <span class='hs-conid'>Text</span>
<a name="line-85"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="AttrValue"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ByteString</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="AttrList"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrList</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="unAttr"></a><span class='hs-comment'>-- 'Attr' unwrapper. This is a separate function not to turn 'Attr''s</span>
<a name="line-92"></a><span class='hs-comment'>-- 'Show' instance into complete and utter shit.</span>
<a name="line-93"></a><span class='hs-definition'>unAttr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span>
<a name="line-94"></a><span class='hs-definition'>unAttr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="wait"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-77"></a><a name="instance%20Either%20e%20a%20-%3e%20IO%20a%20raise%20=%20either%20throwIO%20return%20--%20%7c%20Terminate%20the%20connection%20to%20the%20Directory.%20--%20--%20Note%20that%20'unbindAsync'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsync%20::%20Ldap%20-%3e%20IO%20()%20unbindAsync%20=%20atomically%20.%20unbindAsyncSTM%20--%20%7c%20Terminate%20the%20connection%20to%20the%20Directory.%20--%20--%20Note%20that%20'unbindAsyncSTM'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsyncSTM%20::%20Ldap%20-%3e%20STM%20()%20unbindAsyncSTM%20l%20=%20void%20(sendRequest%20l%20die%20Type.UnbindRequest)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>ResponseError</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="Attr"></a><span class='hs-comment'>-- | Attribute name.</span>
<a name="line-80"></a><a name="Attr"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attr</span> <span class='hs-conid'>Text</span>
<a name="line-81"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-82"></a>
<a name="line-83"></a><a name="AttrValue"></a><span class='hs-comment'>-- | Attribute value.</span>
<a name="line-84"></a><a name="AttrValue"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ByteString</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="AttrList"></a><span class='hs-comment'>-- | List of attributes and their values. @f@ is the structure these</span>
<a name="line-87"></a><a name="AttrList"></a><span class='hs-comment'>-- values are in, e.g. 'NonEmpty'.</span>
<a name="line-88"></a><a name="AttrList"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrList</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="unAttr"></a><span class='hs-comment'>-- 'Attr' unwrapper. This is a separate function not to turn 'Attr''s</span>
<a name="line-91"></a><span class='hs-comment'>-- 'Show' instance into complete and utter shit.</span>
<a name="line-92"></a><span class='hs-definition'>unAttr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span>
<a name="line-93"></a><span class='hs-definition'>unAttr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-94"></a>
<a name="line-95"></a><a name="wait"></a><span class='hs-comment'>-- | Wait for operation completion.</span>
<a name="line-96"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-97"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>waitSTM</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="waitSTM"></a><span class='hs-definition'>waitSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-100"></a><span class='hs-definition'>waitSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stm</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="sendRequest"></a><span class='hs-definition'>sendRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-definition'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>p</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>var</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newEmptyTMVar</span>
<a name="line-105"></a> <span class='hs-varid'>writeRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>var</span> <span class='hs-varid'>msg</span>
<a name="line-106"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>p</span> <span class='hs-layout'>(</span><span class='hs-varid'>readTMVar</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-99"></a><a name="waitSTM"></a><span class='hs-comment'>-- | Wait for operation completion inside 'STM'.</span>
<a name="line-100"></a><span class='hs-comment'>--</span>
<a name="line-101"></a><span class='hs-comment'>-- Do not use this inside the same 'STM' transaction the operation was</span>
<a name="line-102"></a><span class='hs-comment'>-- requested in! To give LDAP the chance to respond to it that transaction</span>
<a name="line-103"></a><span class='hs-comment'>-- should commit. After that, applying 'waitSTM' to the corresponding 'Async'</span>
<a name="line-104"></a><span class='hs-comment'>-- starts to make sense.</span>
<a name="line-105"></a><span class='hs-definition'>waitSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-106"></a><span class='hs-definition'>waitSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stm</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="writeRequest"></a><span class='hs-definition'>writeRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TMVar</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-109"></a><span class='hs-definition'>writeRequest</span> <span class='hs-conid'>Ldap</span> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-layout'>}</span> <span class='hs-varid'>var</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>client</span> <span class='hs-layout'>(</span><span class='hs-conid'>New</span> <span class='hs-varid'>msg</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span>
<a name="line-110"></a>
<a name="line-111"></a><a name="raise"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-112"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>either</span> <span class='hs-varid'>throwIO</span> <span class='hs-varid'>return</span>
<a name="line-108"></a><a name="sendRequest"></a><span class='hs-definition'>sendRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-109"></a><span class='hs-definition'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>p</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span>
<a name="line-110"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>var</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newEmptyTMVar</span>
<a name="line-111"></a> <span class='hs-varid'>writeRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>var</span> <span class='hs-varid'>msg</span>
<a name="line-112"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>p</span> <span class='hs-layout'>(</span><span class='hs-varid'>readTMVar</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-113"></a>
<a name="line-114"></a>
<a name="line-115"></a><a name="unbindAsync"></a><span class='hs-comment'>-- | Note that 'unbindAsync' does not return an 'Async',</span>
<a name="line-116"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-117"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-118"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-119"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-120"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-121"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="unbindAsyncSTM"></a><span class='hs-comment'>-- | Note that 'unbindAsyncSTM' does not return an 'Async',</span>
<a name="line-114"></a><a name="writeRequest"></a><span class='hs-definition'>writeRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TMVar</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-115"></a><span class='hs-definition'>writeRequest</span> <span class='hs-conid'>Ldap</span> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-layout'>}</span> <span class='hs-varid'>var</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>client</span> <span class='hs-layout'>(</span><span class='hs-conid'>New</span> <span class='hs-varid'>msg</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span>
<a name="line-116"></a>
<a name="line-117"></a><a name="raise"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-118"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>either</span> <span class='hs-varid'>throwIO</span> <span class='hs-varid'>return</span>
<a name="line-119"></a>
<a name="line-120"></a>
<a name="line-121"></a><a name="unbindAsync"></a><span class='hs-comment'>-- | Terminate the connection to the Directory.</span>
<a name="line-122"></a><span class='hs-comment'>--</span>
<a name="line-123"></a><span class='hs-comment'>-- Note that 'unbindAsync' does not return an 'Async',</span>
<a name="line-124"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-125"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-126"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-127"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-128"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-129"></a> <span class='hs-varid'>void</span> <span class='hs-layout'>(</span><span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>die</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>UnbindRequest</span><span class='hs-layout'>)</span>
<a name="line-130"></a> <span class='hs-keyword'>where</span>
<a name="line-131"></a> <span class='hs-varid'>die</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"Ldap.Client: do not wait for the response to UnbindRequest"</span>
<a name="line-127"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-128"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-129"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-130"></a>
<a name="line-131"></a><a name="unbindAsyncSTM"></a><span class='hs-comment'>-- | Terminate the connection to the Directory.</span>
<a name="line-132"></a><span class='hs-comment'>--</span>
<a name="line-133"></a><span class='hs-comment'>-- Note that 'unbindAsyncSTM' does not return an 'Async',</span>
<a name="line-134"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-135"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-136"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-137"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-138"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-139"></a> <span class='hs-varid'>void</span> <span class='hs-layout'>(</span><span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>die</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>UnbindRequest</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-keyword'>where</span>
<a name="line-141"></a> <span class='hs-varid'>die</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"Ldap.Client: do not wait for the response to UnbindRequest"</span>
</pre></body>
</html>

View File

@ -29,108 +29,114 @@
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyEither</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsync</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsyncSTM</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnEither</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsync</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsyncSTM</span>
<a name="line-27"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-34"></a>
<a name="line-35"></a>
<a name="line-36"></a><a name="Operation"></a><span class='hs-comment'>-- | Type of modification being performed.</span>
<a name="line-37"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-38"></a> <span class='hs-conid'>Delete</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Delete values from the attribute. Deletes the attribute if the list is empty or all current values are listed.</span>
<a name="line-39"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Add</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Add values to the attribute, creating it if necessary.</span>
<a name="line-40"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Replace all existing values of the attribute with the new list. Deletes the attribute if the list is empty.</span>
<a name="line-41"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="modify"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-44"></a><span class='hs-definition'>modify</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-45"></a><span class='hs-definition'>modify</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="modifyEither"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Returns @Left e@ where</span>
<a name="line-49"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-50"></a><span class='hs-definition'>modifyEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-51"></a><span class='hs-definition'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-52"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="modifyAsync"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-55"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-56"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-57"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="modifyAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously.</span>
<a name="line-61"></a><span class='hs-comment'>--</span>
<a name="line-62"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-63"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-64"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-66"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="modifyRequest"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-69"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-70"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-71"></a> <span class='hs-keyword'>where</span>
<a name="line-72"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Delete</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-73"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-74"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Add</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-76"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Add</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-77"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-78"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Replace</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-79"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Replace</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="modifyResult"></a><span class='hs-definition'>modifyResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-83"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-85"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-86"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-87"></a>
<a name="line-88"></a>
<a name="line-89"></a><a name="modifyDn"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-90"></a><span class='hs-definition'>modifyDn</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-91"></a><span class='hs-definition'>modifyDn</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-92"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="modifyDnEither"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Returns @Left e@ where</span>
<a name="line-95"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-96"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-97"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-98"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnEither</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsync</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsyncSTM</span>
<a name="line-28"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-29"></a>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-36"></a>
<a name="line-37"></a>
<a name="line-38"></a><a name="Operation"></a><span class='hs-comment'>-- | Type of modification being performed.</span>
<a name="line-39"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-40"></a> <span class='hs-conid'>Delete</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Delete values from the attribute. Deletes the attribute if the list is empty or all current values are listed.</span>
<a name="line-41"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Add</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Add values to the attribute, creating it if necessary.</span>
<a name="line-42"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Replace all existing values of the attribute with the new list. Deletes the attribute if the list is empty.</span>
<a name="line-43"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="modify"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-46"></a><span class='hs-definition'>modify</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-47"></a><span class='hs-definition'>modify</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-48"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="modifyEither"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Returns @Left e@ where</span>
<a name="line-51"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-52"></a><span class='hs-definition'>modifyEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-53"></a><span class='hs-definition'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-54"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="modifyAsync"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-57"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-58"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-59"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="modifyAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously.</span>
<a name="line-63"></a><span class='hs-comment'>--</span>
<a name="line-64"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-65"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-66"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-67"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-68"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-69"></a>
<a name="line-70"></a><a name="modifyRequest"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-71"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-72"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-73"></a> <span class='hs-keyword'>where</span>
<a name="line-74"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Delete</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-75"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-76"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-77"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Add</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-78"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Add</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-79"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Replace</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-81"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Replace</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-82"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="modifyResult"></a><span class='hs-definition'>modifyResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-85"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-86"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-87"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-88"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-89"></a>
<a name="line-90"></a>
<a name="line-91"></a><a name="RelativeDn"></a><span class='hs-comment'>-- | A component of 'Dn'.</span>
<a name="line-92"></a><a name="RelativeDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-conid'>Text</span>
<a name="line-93"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-94"></a>
<a name="line-95"></a><a name="modifyDn"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-96"></a><span class='hs-definition'>modifyDn</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-97"></a><span class='hs-definition'>modifyDn</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-98"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="modifyDnAsync"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-101"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-102"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-100"></a><a name="modifyDnEither"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Returns @Left e@ where</span>
<a name="line-101"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-102"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="modifyDnAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously.</span>
<a name="line-107"></a><span class='hs-comment'>--</span>
<a name="line-108"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-109"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-110"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-111"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-112"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyDnRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-113"></a>
<a name="line-114"></a><a name="modifyDnRequest"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-115"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>RelativeDn</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-117"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-118"></a> <span class='hs-varid'>del</span>
<a name="line-119"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-120"></a>
<a name="line-121"></a><a name="modifyDnResult"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-122"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-125"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-106"></a><a name="modifyDnAsync"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-107"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-108"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-109"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-110"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-111"></a>
<a name="line-112"></a><a name="modifyDnAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously.</span>
<a name="line-113"></a><span class='hs-comment'>--</span>
<a name="line-114"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-115"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-116"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-117"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-118"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyDnRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-119"></a>
<a name="line-120"></a><a name="modifyDnRequest"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-121"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>RelativeDn</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-122"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-124"></a> <span class='hs-varid'>del</span>
<a name="line-125"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-126"></a>
<a name="line-127"></a><a name="modifyDnResult"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-128"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-130"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-131"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -34,183 +34,198 @@
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-31"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-32"></a>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Int</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int32</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>NonEmpty</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-40"></a><span class='hs-cpp'>#else</span>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-cpp'>#endif</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-46"></a>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-31"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-32"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Int</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int32</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>NonEmpty</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span><span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-41"></a><span class='hs-cpp'>#else</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-43"></a><span class='hs-cpp'>#endif</span>
<a name="line-44"></a>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-46"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="search"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-49"></a><span class='hs-definition'>search</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-50"></a><span class='hs-definition'>search</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-51"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="searchEither"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Returns @Left e@ where</span>
<a name="line-54"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-55"></a><span class='hs-definition'>searchEither</span>
<a name="line-56"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-57"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-58"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-59"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-60"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-61"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-62"></a><span class='hs-definition'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-63"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="searchAsync"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-66"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-67"></a><span class='hs-definition'>searchAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-68"></a><span class='hs-definition'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-69"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="searchAsyncSTM"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously.</span>
<a name="line-72"></a><span class='hs-comment'>--</span>
<a name="line-73"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-74"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-75"></a><span class='hs-definition'>searchAsyncSTM</span>
<a name="line-76"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-77"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-78"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-79"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-80"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-81"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-82"></a><span class='hs-definition'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-83"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>searchRequest</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-84"></a>
<a name="line-85"></a><a name="searchRequest"></a><span class='hs-definition'>searchRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-86"></a><span class='hs-definition'>searchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-87"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-88"></a> <span class='hs-sel'>_scope</span>
<a name="line-89"></a> <span class='hs-sel'>_derefAliases</span>
<a name="line-90"></a> <span class='hs-sel'>_size</span>
<a name="line-91"></a> <span class='hs-sel'>_time</span>
<a name="line-92"></a> <span class='hs-sel'>_typesOnly</span>
<a name="line-93"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>flt</span><span class='hs-layout'>)</span>
<a name="line-94"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeSelection</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unAttr</span><span class='hs-layout'>)</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-95"></a> <span class='hs-keyword'>where</span>
<a name="line-96"></a> <span class='hs-conid'>Search</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span><span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span><span class='hs-layout'>,</span> <span class='hs-sel'>_size</span><span class='hs-layout'>,</span> <span class='hs-sel'>_time</span><span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span>
<a name="line-97"></a> <span class='hs-varid'>m</span> <span class='hs-varid'>defaultSearch</span>
<a name="line-98"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Not</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Not</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-99"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>And</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-100"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Or</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-101"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-102"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-103"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>EqualityMatch</span>
<a name="line-105"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-106"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-107"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-108"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>GreaterOrEqual</span>
<a name="line-109"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-110"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-112"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LessOrEqual</span>
<a name="line-113"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-114"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-115"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:~=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ApproxMatch</span>
<a name="line-117"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-118"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-119"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-varid'>mi</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>mf</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-120"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Substrings</span>
<a name="line-121"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SubstringFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-122"></a> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-varop'>.</span><span class='hs-varid'>fromList</span> <span class='hs-layout'>(</span><span class='hs-varid'>concat</span>
<a name="line-123"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>i</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Initial</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mi</span>
<a name="line-124"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Any</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-125"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Final</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mf</span>
<a name="line-126"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-127"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>mx</span><span class='hs-layout'>,</span> <span class='hs-varid'>mr</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-128"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtensibleMatch</span>
<a name="line-129"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mr</span><span class='hs-layout'>)</span>
<a name="line-130"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mx</span><span class='hs-layout'>)</span>
<a name="line-131"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-132"></a> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-133"></a>
<a name="line-134"></a><a name="searchResult"></a><span class='hs-definition'>searchResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-135"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-136"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AdminLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SizeLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-141"></a> <span class='hs-keyword'>where</span>
<a name="line-142"></a> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-143"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttributeList</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-144"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>h</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-145"></a> <span class='hs-varid'>g</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-146"></a> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-147"></a> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>j</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-148"></a> <span class='hs-varid'>j</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-149"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-150"></a>
<a name="line-151"></a><a name="Search"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-152"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span>
<a name="line-153"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span>
<a name="line-154"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span>
<a name="line-157"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="defaultSearch"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Search</span>
<a name="line-160"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-161"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BaseObject</span>
<a name="line-162"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-163"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-164"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-165"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>NeverDerefAliases</span>
<a name="line-166"></a> <span class='hs-layout'>}</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="scope"></a><span class='hs-definition'>scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-169"></a><span class='hs-definition'>scope</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="size"></a><span class='hs-definition'>size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-172"></a><span class='hs-definition'>size</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-48"></a>
<a name="line-49"></a><a name="search"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-50"></a><span class='hs-definition'>search</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-51"></a><span class='hs-definition'>search</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-52"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="searchEither"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Returns @Left e@ where</span>
<a name="line-55"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-56"></a><span class='hs-definition'>searchEither</span>
<a name="line-57"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-58"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-59"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-60"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-61"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-62"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-63"></a><span class='hs-definition'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-64"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="searchAsync"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-67"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-68"></a><span class='hs-definition'>searchAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-69"></a><span class='hs-definition'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-70"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="searchAsyncSTM"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously.</span>
<a name="line-73"></a><span class='hs-comment'>--</span>
<a name="line-74"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-75"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-76"></a><span class='hs-definition'>searchAsyncSTM</span>
<a name="line-77"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-78"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-79"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-80"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-81"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-82"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-83"></a><span class='hs-definition'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-84"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>searchRequest</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="searchRequest"></a><span class='hs-definition'>searchRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-87"></a><span class='hs-definition'>searchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-88"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-89"></a> <span class='hs-sel'>_scope</span>
<a name="line-90"></a> <span class='hs-sel'>_derefAliases</span>
<a name="line-91"></a> <span class='hs-sel'>_size</span>
<a name="line-92"></a> <span class='hs-sel'>_time</span>
<a name="line-93"></a> <span class='hs-sel'>_typesOnly</span>
<a name="line-94"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>flt</span><span class='hs-layout'>)</span>
<a name="line-95"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeSelection</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unAttr</span><span class='hs-layout'>)</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-96"></a> <span class='hs-keyword'>where</span>
<a name="line-97"></a> <span class='hs-conid'>Search</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span><span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span><span class='hs-layout'>,</span> <span class='hs-sel'>_size</span><span class='hs-layout'>,</span> <span class='hs-sel'>_time</span><span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span>
<a name="line-98"></a> <span class='hs-varid'>m</span> <span class='hs-varid'>defaultSearch</span>
<a name="line-99"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Not</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Not</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-100"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>And</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-101"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Or</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-102"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-103"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-104"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-105"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>EqualityMatch</span>
<a name="line-106"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-107"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-108"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-109"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>GreaterOrEqual</span>
<a name="line-110"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-112"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-113"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LessOrEqual</span>
<a name="line-114"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-115"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-116"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:~=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-117"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ApproxMatch</span>
<a name="line-118"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-119"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-120"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-varid'>mi</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>mf</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-121"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Substrings</span>
<a name="line-122"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SubstringFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-varop'>.</span><span class='hs-varid'>fromList</span> <span class='hs-layout'>(</span><span class='hs-varid'>concat</span>
<a name="line-124"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>i</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Initial</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mi</span>
<a name="line-125"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Any</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-126"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Final</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mf</span>
<a name="line-127"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-128"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>mx</span><span class='hs-layout'>,</span> <span class='hs-varid'>mr</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-129"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtensibleMatch</span>
<a name="line-130"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mr</span><span class='hs-layout'>)</span>
<a name="line-131"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mx</span><span class='hs-layout'>)</span>
<a name="line-132"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-133"></a> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-134"></a>
<a name="line-135"></a><a name="searchResult"></a><span class='hs-definition'>searchResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-136"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-137"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AdminLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SizeLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-142"></a> <span class='hs-keyword'>where</span>
<a name="line-143"></a> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-144"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttributeList</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-145"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>h</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-146"></a> <span class='hs-varid'>g</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-147"></a> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-148"></a> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>j</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-149"></a> <span class='hs-varid'>j</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-150"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-151"></a>
<a name="line-152"></a><a name="Search"></a><span class='hs-comment'>-- | Search options. Use 'Mod' to change some of those.</span>
<a name="line-153"></a><a name="Search"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-154"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span>
<a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span>
<a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Int32</span>
<a name="line-157"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Int32</span>
<a name="line-158"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Bool</span>
<a name="line-159"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-160"></a>
<a name="line-161"></a><a name="defaultSearch"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Search</span>
<a name="line-162"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-163"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>WholeSubtree</span>
<a name="line-164"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-165"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-166"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-167"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>NeverDerefAliases</span>
<a name="line-168"></a> <span class='hs-layout'>}</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="scope"></a><span class='hs-comment'>-- | Scope of the search (default: 'WholeSubtree').</span>
<a name="line-171"></a><span class='hs-definition'>scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-172"></a><span class='hs-definition'>scope</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-173"></a>
<a name="line-174"></a><a name="time"></a><span class='hs-definition'>time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-175"></a><span class='hs-definition'>time</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-176"></a>
<a name="line-177"></a><a name="typesOnly"></a><span class='hs-definition'>typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-178"></a><span class='hs-definition'>typesOnly</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="derefAliases"></a><span class='hs-definition'>derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-181"></a><span class='hs-definition'>derefAliases</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-182"></a>
<a name="line-183"></a><a name="Mod"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-184"></a>
<a name="line-185"></a><a name="instance%20Semigroup%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-186"></a> <span class='hs-conid'>Mod</span> <span class='hs-varid'>f</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>g</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-187"></a>
<a name="line-188"></a><a name="instance%20Monoid%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-189"></a> <span class='hs-varid'>mempty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>id</span>
<a name="line-190"></a> <span class='hs-varid'>mappend</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;&gt;</span><span class='hs-layout'>)</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-193"></a> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-194"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-195"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-196"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>Attr</span>
<a name="line-197"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-198"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-199"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-200"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:~=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-201"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span>
<a name="line-202"></a> <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-203"></a>
<a name="line-204"></a><a name="SearchEntry"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-conid'>Dn</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttrList</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-205"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-174"></a><a name="size"></a><span class='hs-comment'>-- | Maximum number of entries to be returned as a result of the Search.</span>
<a name="line-175"></a><span class='hs-comment'>-- No limit if the value is @0@ (default: @0@).</span>
<a name="line-176"></a><span class='hs-definition'>size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-177"></a><span class='hs-definition'>size</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-178"></a>
<a name="line-179"></a><a name="time"></a><span class='hs-comment'>-- | Maximum time (in seconds) allowed for the Search. No limit if the value</span>
<a name="line-180"></a><span class='hs-comment'>-- is @0@ (default: @0@).</span>
<a name="line-181"></a><span class='hs-definition'>time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-182"></a><span class='hs-definition'>time</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-183"></a>
<a name="line-184"></a><a name="typesOnly"></a><span class='hs-comment'>-- | Whether Search results are to contain just attribute descriptions, or</span>
<a name="line-185"></a><span class='hs-comment'>-- both attribute descriptions and values (default: 'False').</span>
<a name="line-186"></a><span class='hs-definition'>typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-187"></a><span class='hs-definition'>typesOnly</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-188"></a>
<a name="line-189"></a><a name="derefAliases"></a><span class='hs-comment'>-- | Alias dereference policy (default: 'NeverDerefAliases').</span>
<a name="line-190"></a><span class='hs-definition'>derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-191"></a><span class='hs-definition'>derefAliases</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-192"></a>
<a name="line-193"></a><a name="Mod"></a><span class='hs-comment'>-- | Search modifier. Combine using 'Semigroup' and/or 'Monoid' instance.</span>
<a name="line-194"></a><a name="Mod"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-195"></a>
<a name="line-196"></a><a name="instance%20Semigroup%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-197"></a> <span class='hs-conid'>Mod</span> <span class='hs-varid'>f</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>g</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-198"></a>
<a name="line-199"></a><a name="instance%20Monoid%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-200"></a> <span class='hs-varid'>mempty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>id</span>
<a name="line-201"></a> <span class='hs-varid'>mappend</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;&gt;</span><span class='hs-layout'>)</span>
<a name="line-202"></a>
<a name="line-203"></a><a name="Filter"></a><span class='hs-comment'>-- | Conditions that must be fulfilled in order for the Search to match a given entry.</span>
<a name="line-204"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-205"></a> <span class='hs-conid'>Not</span> <span class='hs-varop'>!</span><span class='hs-conid'>Filter</span> <span class='hs-comment'>-- ^ Filter does not match the entry</span>
<a name="line-206"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>And</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ All filters match the entry</span>
<a name="line-207"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^ Any filter matches the entry</span>
<a name="line-208"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-comment'>-- ^ Attribute is present in the entry</span>
<a name="line-209"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-conop'>:=</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttrValue</span> <span class='hs-comment'>-- ^ Attribute's value is equal to the assertion</span>
<a name="line-210"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttrValue</span> <span class='hs-comment'>-- ^ Attribute's value is equal to or greater than the assertion</span>
<a name="line-211"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttrValue</span> <span class='hs-comment'>-- ^ Attribute's value is equal to or less than the assertion</span>
<a name="line-212"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-conop'>:~=</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttrValue</span> <span class='hs-comment'>-- ^ Attribute's value approximately matches the assertion</span>
<a name="line-213"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varop'>!</span><span class='hs-conid'>Attr</span> <span class='hs-conop'>:=*</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span>
<a name="line-214"></a> <span class='hs-comment'>-- ^ Glob match</span>
<a name="line-215"></a> <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-216"></a> <span class='hs-comment'>-- ^ Extensible match</span>
<a name="line-217"></a>
<a name="line-218"></a><a name="SearchEntry"></a><span class='hs-comment'>-- | Entry found during the Search.</span>
<a name="line-219"></a><a name="SearchEntry"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-varop'>!</span><span class='hs-conid'>Dn</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>AttrList</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-220"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -11,256 +11,266 @@
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE BangPatterns #-}</span>
<a name="line-3"></a><span class='hs-comment'>{-# LANGUAGE DeriveDataTypeable #-}</span>
<a name="line-4"></a><span class='hs-comment'>{-# LANGUAGE NamedFieldPuns #-}</span>
<a name="line-5"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span>
<a name="line-6"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Host</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Ldap</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>LdapError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>with</span>
<a name="line-13"></a> <span class='hs-comment'>-- * Bind</span>
<a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bind</span>
<a name="line-15"></a> <span class='hs-comment'>-- * Search</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>search</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-18"></a> <span class='hs-comment'>-- ** Search modifiers</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-28"></a> <span class='hs-comment'>-- * Modify</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modify</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Operation</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-31"></a> <span class='hs-comment'>-- * Add</span>
<a name="line-32"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>add</span>
<a name="line-33"></a> <span class='hs-comment'>-- * Delete</span>
<a name="line-34"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>delete</span>
<a name="line-35"></a> <span class='hs-comment'>-- * ModifyDn</span>
<a name="line-36"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-37"></a> <span class='hs-comment'>-- * Compare</span>
<a name="line-38"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compare</span>
<a name="line-39"></a> <span class='hs-comment'>-- * Extended</span>
<a name="line-40"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extended</span>
<a name="line-41"></a> <span class='hs-comment'>-- * Waiting for completion</span>
<a name="line-42"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-43"></a> <span class='hs-comment'>-- * Miscellanous</span>
<a name="line-44"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Dn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-45"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-46"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-47"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-48"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</span>
<a name="line-49"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-50"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-51"></a> <span class='hs-comment'>-- * Re-exports</span>
<a name="line-52"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>NonEmpty</span>
<a name="line-53"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PortNumber</span>
<a name="line-54"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-55"></a>
<a name="line-56"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 710</span>
<a name="line-57"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>&lt;$&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-58"></a><span class='hs-cpp'>#endif</span>
<a name="line-59"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>Async</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Async</span>
<a name="line-60"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-varid'>atomically</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwSTM</span><span class='hs-layout'>)</span>
<a name="line-61"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-varid'>putTMVar</span><span class='hs-layout'>)</span>
<a name="line-62"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>newTQueueIO</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTQueue</span><span class='hs-layout'>)</span>
<a name="line-63"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>bracket</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>,</span> <span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>catches</span><span class='hs-layout'>)</span>
<a name="line-64"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>forever</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>BinaryEncoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-66"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-67"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-68"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ByteString</span>
<a name="line-69"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span>
<a name="line-70"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-varid'>asum</span><span class='hs-layout'>)</span>
<a name="line-71"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Function</span> <span class='hs-layout'>(</span><span class='hs-varid'>fix</span><span class='hs-layout'>)</span>
<a name="line-72"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-73"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Map</span>
<a name="line-74"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Endo</span><span class='hs-layout'>(</span><span class='hs-varid'>appEndo</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromString</span><span class='hs-layout'>)</span>
<a name="line-76"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-77"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-78"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Connection</span> <span class='hs-layout'>(</span><span class='hs-conid'>Connection</span><span class='hs-layout'>)</span>
<a name="line-79"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Connection</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Conn</span>
<a name="line-80"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>compare</span><span class='hs-layout'>)</span>
<a name="line-81"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>IO</span>
<a name="line-82"></a>
<a name="line-83"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ToAsn1</span><span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-84"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>FromAsn1</span><span class='hs-layout'>,</span> <span class='hs-varid'>parseAsn1</span><span class='hs-layout'>)</span>
<a name="line-85"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-87"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Bind</span> <span class='hs-layout'>(</span><span class='hs-varid'>bind</span><span class='hs-layout'>)</span>
<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Search</span>
<a name="line-89"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>search</span>
<a name="line-90"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-91"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-92"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-93"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-94"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-95"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-96"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-98"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-99"></a> <span class='hs-layout'>)</span>
<a name="line-100"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Modify</span> <span class='hs-layout'>(</span><span class='hs-conid'>Operation</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>modify</span><span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span><span class='hs-layout'>)</span>
<a name="line-101"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Add</span> <span class='hs-layout'>(</span><span class='hs-varid'>add</span><span class='hs-layout'>)</span>
<a name="line-102"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span> <span class='hs-layout'>(</span><span class='hs-varid'>delete</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Compare</span> <span class='hs-layout'>(</span><span class='hs-varid'>compare</span><span class='hs-layout'>)</span>
<a name="line-104"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Extended</span> <span class='hs-layout'>(</span><span class='hs-varid'>extended</span><span class='hs-layout'>)</span>
<a name="line-105"></a>
<a name="line-106"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Use first" #-}</span>
<a name="line-107"></a>
<a name="line-108"></a>
<a name="line-109"></a><a name="newLdap"></a><span class='hs-definition'>newLdap</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Ldap</span>
<a name="line-110"></a><span class='hs-definition'>newLdap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-111"></a> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-5"></a><span class='hs-comment'>-- | Pure Haskell LDAP client library.</span>
<a name="line-6"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span>
<a name="line-7"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Host</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Ldap</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>LdapError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>with</span>
<a name="line-14"></a> <span class='hs-comment'>-- * Bind</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bind</span>
<a name="line-17"></a> <span class='hs-comment'>-- * Search</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>search</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-20"></a> <span class='hs-comment'>-- ** Search modifiers</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-31"></a> <span class='hs-comment'>-- * Modify</span>
<a name="line-32"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modify</span>
<a name="line-33"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Operation</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-34"></a> <span class='hs-comment'>-- * Add</span>
<a name="line-35"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>add</span>
<a name="line-36"></a> <span class='hs-comment'>-- * Delete</span>
<a name="line-37"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>delete</span>
<a name="line-38"></a> <span class='hs-comment'>-- * ModifyDn</span>
<a name="line-39"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-40"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-41"></a> <span class='hs-comment'>-- * Compare</span>
<a name="line-42"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compare</span>
<a name="line-43"></a> <span class='hs-comment'>-- * Extended</span>
<a name="line-44"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-45"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extended</span>
<a name="line-46"></a> <span class='hs-comment'>-- * Waiting for completion</span>
<a name="line-47"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-48"></a> <span class='hs-comment'>-- * Miscellanous</span>
<a name="line-49"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Dn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-50"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-51"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-52"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</span>
<a name="line-53"></a> <span class='hs-comment'>-- * Re-exports</span>
<a name="line-54"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>NonEmpty</span>
<a name="line-55"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>PortNumber</span>
<a name="line-56"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-57"></a>
<a name="line-58"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 710</span>
<a name="line-59"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varop'>&lt;$&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-60"></a><span class='hs-cpp'>#endif</span>
<a name="line-61"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>Async</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Async</span>
<a name="line-62"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-varid'>atomically</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwSTM</span><span class='hs-layout'>)</span>
<a name="line-63"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-varid'>putTMVar</span><span class='hs-layout'>)</span>
<a name="line-64"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>newTQueueIO</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTQueue</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>bracket</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>,</span> <span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-varid'>catches</span><span class='hs-layout'>)</span>
<a name="line-66"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>forever</span><span class='hs-layout'>)</span>
<a name="line-67"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>BinaryEncoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-68"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-69"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-70"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ByteString</span>
<a name="line-71"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span>
<a name="line-72"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-varid'>asum</span><span class='hs-layout'>)</span>
<a name="line-73"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Function</span> <span class='hs-layout'>(</span><span class='hs-varid'>fix</span><span class='hs-layout'>)</span>
<a name="line-74"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-conid'>Strict</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Map</span>
<a name="line-76"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Endo</span><span class='hs-layout'>(</span><span class='hs-varid'>appEndo</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-77"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromString</span><span class='hs-layout'>)</span>
<a name="line-78"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-79"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 710</span>
<a name="line-80"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-varid'>traverse</span><span class='hs-layout'>)</span>
<a name="line-81"></a><span class='hs-cpp'>#endif</span>
<a name="line-82"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-83"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Connection</span> <span class='hs-layout'>(</span><span class='hs-conid'>Connection</span><span class='hs-layout'>)</span>
<a name="line-84"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>Connection</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Conn</span>
<a name="line-85"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-varid'>hiding</span> <span class='hs-layout'>(</span><span class='hs-varid'>compare</span><span class='hs-layout'>)</span>
<a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>IO</span>
<a name="line-87"></a>
<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ToAsn1</span><span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-89"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>FromAsn1</span><span class='hs-layout'>,</span> <span class='hs-varid'>parseAsn1</span><span class='hs-layout'>)</span>
<a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-91"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-92"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Bind</span> <span class='hs-layout'>(</span><span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>bind</span><span class='hs-layout'>)</span>
<a name="line-93"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Search</span>
<a name="line-94"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>search</span>
<a name="line-95"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-96"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-98"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-99"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-100"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-101"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-102"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-103"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-104"></a> <span class='hs-layout'>)</span>
<a name="line-105"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Modify</span> <span class='hs-layout'>(</span><span class='hs-conid'>Operation</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>modify</span><span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span><span class='hs-layout'>)</span>
<a name="line-106"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Add</span> <span class='hs-layout'>(</span><span class='hs-varid'>add</span><span class='hs-layout'>)</span>
<a name="line-107"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span> <span class='hs-layout'>(</span><span class='hs-varid'>delete</span><span class='hs-layout'>)</span>
<a name="line-108"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Compare</span> <span class='hs-layout'>(</span><span class='hs-varid'>compare</span><span class='hs-layout'>)</span>
<a name="line-109"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Extended</span> <span class='hs-layout'>(</span><span class='hs-conid'>Oid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>extended</span><span class='hs-layout'>)</span>
<a name="line-110"></a>
<a name="line-111"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Use first" #-}</span>
<a name="line-112"></a>
<a name="line-113"></a><a name="LdapError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapError</span> <span class='hs-keyglyph'>=</span>
<a name="line-114"></a> <span class='hs-conid'>IOError</span> <span class='hs-conid'>IOError</span>
<a name="line-115"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ParseError</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1Error</span>
<a name="line-116"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>ResponseError</span>
<a name="line-117"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DisconnectError</span> <span class='hs-conid'>Disconnect</span>
<a name="line-118"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-119"></a>
<a name="line-120"></a><a name="WrappedIOError"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>WrappedIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>WrappedIOError</span> <span class='hs-conid'>IOError</span>
<a name="line-121"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="instance%20Exception%20WrappedIOError%20data%20Disconnect%20=%20Disconnect%20Type.ResultCode%20Dn%20Text%20deriving%20(Show,%20Eq,%20Typeable)%20instance%20Exception%20Disconnect%20--%20%7c%20The%20entrypoint%20into%20LDAP.%20with%20::%20Host%20-%3e%20PortNumber%20-%3e%20(Ldap%20-%3e%20IO%20a)%20-%3e%20IO%20(Either%20LdapError%20a)%20with%20host%20port%20f%20=%20do%20context%20%3c-%20Conn.initConnectionContext%20bracket%20(Conn.connectTo%20context%20params)%20Conn.connectionClose%20(%5cconn%20-%3e%20bracket%20newLdap%20unbindAsync%20(%5cl%20-%3e%20do%20inq%20%3c-%20newTQueueIO%20outq%20%3c-%20newTQueueIO%20Async.withAsync%20(input%20inq%20conn)%20$%20%5ci%20-%3e%20Async.withAsync%20(output%20outq%20conn)%20$%20%5co%20-%3e%20Async.withAsync%20(dispatch%20l%20inq%20outq)%20$%20%5cd%20-%3e%20Async.withAsync%20(f%20l)%20$%20%5cu%20-%3e%20fmap%20(Right%20.%20snd)%20(Async.waitAnyCancel%20%5bi,%20o,%20d,%20u%5d)))%20%60catches%60%20%5b%20Handler%20(%5c(WrappedIOError%20e)%20-%3e%20return%20(Left%20(IOError%20e)))%20,%20Handler%20(return%20.%20Left%20.%20ParseError)%20,%20Handler%20(return%20.%20Left%20.%20ResponseError)%20%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>WrappedIOError</span>
<a name="line-124"></a>
<a name="line-125"></a><a name="Disconnect"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Disconnect</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Disconnect</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-126"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-127"></a>
<a name="line-128"></a><a name="instance%20Exception%20Disconnect%20--%20%7c%20The%20entrypoint%20into%20LDAP.%20with%20::%20Host%20-%3e%20PortNumber%20-%3e%20(Ldap%20-%3e%20IO%20a)%20-%3e%20IO%20(Either%20LdapError%20a)%20with%20host%20port%20f%20=%20do%20context%20%3c-%20Conn.initConnectionContext%20bracket%20(Conn.connectTo%20context%20params)%20Conn.connectionClose%20(%5cconn%20-%3e%20bracket%20newLdap%20unbindAsync%20(%5cl%20-%3e%20do%20inq%20%3c-%20newTQueueIO%20outq%20%3c-%20newTQueueIO%20Async.withAsync%20(input%20inq%20conn)%20$%20%5ci%20-%3e%20Async.withAsync%20(output%20outq%20conn)%20$%20%5co%20-%3e%20Async.withAsync%20(dispatch%20l%20inq%20outq)%20$%20%5cd%20-%3e%20Async.withAsync%20(f%20l)%20$%20%5cu%20-%3e%20fmap%20(Right%20.%20snd)%20(Async.waitAnyCancel%20%5bi,%20o,%20d,%20u%5d)))%20%60catches%60%20%5b%20Handler%20(%5c(WrappedIOError%20e)%20-%3e%20return%20(Left%20(IOError%20e)))%20,%20Handler%20(return%20.%20Left%20.%20ParseError)%20,%20Handler%20(return%20.%20Left%20.%20ResponseError)%20%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>Disconnect</span>
<a name="line-129"></a>
<a name="line-130"></a><a name="with"></a><span class='hs-comment'>-- | The entrypoint into LDAP.</span>
<a name="line-131"></a><span class='hs-definition'>with</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>PortNumber</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>LdapError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-132"></a><span class='hs-definition'>with</span> <span class='hs-varid'>host</span> <span class='hs-varid'>port</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-133"></a> <span class='hs-varid'>context</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>initConnectionContext</span>
<a name="line-134"></a> <span class='hs-varid'>bracket</span> <span class='hs-layout'>(</span><span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectTo</span> <span class='hs-varid'>context</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionClose</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>conn</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-135"></a> <span class='hs-varid'>bracket</span> <span class='hs-varid'>newLdap</span> <span class='hs-varid'>unbindAsync</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>l</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-136"></a> <span class='hs-varid'>inq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-137"></a> <span class='hs-varid'>outq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-138"></a> <span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>withAsync</span> <span class='hs-layout'>(</span><span class='hs-varid'>input</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>conn</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>i</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-139"></a> <span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>withAsync</span> <span class='hs-layout'>(</span><span class='hs-varid'>output</span> <span class='hs-varid'>outq</span> <span class='hs-varid'>conn</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>o</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-140"></a> <span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>withAsync</span> <span class='hs-layout'>(</span><span class='hs-varid'>dispatch</span> <span class='hs-varid'>l</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>outq</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-141"></a> <span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>withAsync</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>u</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-142"></a> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>waitAnyCancel</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>i</span><span class='hs-layout'>,</span> <span class='hs-varid'>o</span><span class='hs-layout'>,</span> <span class='hs-varid'>d</span><span class='hs-layout'>,</span> <span class='hs-varid'>u</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-143"></a> <span class='hs-varop'>`catches`</span>
<a name="line-144"></a> <span class='hs-keyglyph'>[</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>WrappedIOError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-145"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ParseError</span><span class='hs-layout'>)</span>
<a name="line-146"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>)</span>
<a name="line-147"></a> <span class='hs-keyglyph'>]</span>
<a name="line-148"></a> <span class='hs-keyword'>where</span>
<a name="line-149"></a> <span class='hs-varid'>params</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>ConnectionParams</span>
<a name="line-150"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionHostname</span> <span class='hs-keyglyph'>=</span>
<a name="line-151"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-152"></a> <span class='hs-conid'>Plain</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-153"></a> <span class='hs-conid'>Secure</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-154"></a> <span class='hs-conid'>Insecure</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionPort</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>port</span>
<a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionUseSecure</span> <span class='hs-keyglyph'>=</span>
<a name="line-157"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-158"></a> <span class='hs-conid'>Plain</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Nothing</span>
<a name="line-159"></a> <span class='hs-conid'>Secure</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>TLSSettingsSimple</span>
<a name="line-160"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableCertificateValidation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-161"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableSession</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-162"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingUseServerName</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-163"></a> <span class='hs-layout'>}</span>
<a name="line-164"></a> <span class='hs-conid'>Insecure</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>TLSSettingsSimple</span>
<a name="line-165"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableCertificateValidation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-166"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableSession</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-167"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingUseServerName</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-168"></a> <span class='hs-layout'>}</span>
<a name="line-169"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionUseSocks</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-170"></a> <span class='hs-layout'>}</span>
<a name="line-171"></a>
<a name="line-172"></a><a name="input"></a><span class='hs-definition'>input</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>b</span>
<a name="line-173"></a><span class='hs-definition'>input</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>conn</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wrap</span> <span class='hs-varop'>.</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-conid'>[]</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop</span> <span class='hs-varid'>chunks</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-174"></a> <span class='hs-varid'>chunk</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionGet</span> <span class='hs-varid'>conn</span> <span class='hs-num'>8192</span>
<a name="line-175"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-varid'>length</span> <span class='hs-varid'>chunk</span> <span class='hs-keyword'>of</span>
<a name="line-176"></a> <span class='hs-num'>0</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwIO</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-varid'>mkIOError</span> <span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-varid'>eofErrorType</span> <span class='hs-str'>"Ldap.Client.input"</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-177"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-178"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>chunks'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>chunk</span> <span class='hs-conop'>:</span> <span class='hs-varid'>chunks</span>
<a name="line-179"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeASN1</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>DER</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span><span class='hs-varop'>.</span><span class='hs-varid'>fromChunks</span> <span class='hs-layout'>(</span><span class='hs-varid'>reverse</span> <span class='hs-varid'>chunks'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-180"></a> <span class='hs-conid'>Left</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ParsingPartial</span>
<a name="line-181"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>loop</span> <span class='hs-varid'>chunks'</span>
<a name="line-182"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwIO</span> <span class='hs-varid'>e</span>
<a name="line-183"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>asn1</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-184"></a> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-varid'>asn1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop'</span> <span class='hs-varid'>asn1'</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-185"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>parseAsn1</span> <span class='hs-varid'>asn1'</span> <span class='hs-keyword'>of</span>
<a name="line-186"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-187"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>asn1''</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-188"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-189"></a> <span class='hs-varid'>loop'</span> <span class='hs-varid'>asn1''</span>
<a name="line-190"></a> <span class='hs-varid'>loop</span> <span class='hs-conid'>[]</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="output"></a><span class='hs-definition'>output</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>b</span>
<a name="line-193"></a><span class='hs-definition'>output</span> <span class='hs-varid'>out</span> <span class='hs-varid'>conn</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wrap</span> <span class='hs-varop'>.</span> <span class='hs-varid'>forever</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-194"></a> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>readTQueue</span> <span class='hs-varid'>out</span><span class='hs-layout'>)</span>
<a name="line-195"></a> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionPut</span> <span class='hs-varid'>conn</span> <span class='hs-layout'>(</span><span class='hs-varid'>encode</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-196"></a> <span class='hs-keyword'>where</span>
<a name="line-197"></a> <span class='hs-varid'>encode</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeASN1'</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>DER</span> <span class='hs-layout'>(</span><span class='hs-varid'>appEndo</span> <span class='hs-varid'>x</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-198"></a>
<a name="line-199"></a><a name="dispatch"></a><span class='hs-definition'>dispatch</span>
<a name="line-200"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-201"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span>
<a name="line-202"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-conid'>Request</span><span class='hs-layout'>)</span>
<a name="line-203"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-204"></a><span class='hs-definition'>dispatch</span> <span class='hs-conid'>Ldap</span> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-layout'>}</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>outq</span> <span class='hs-keyglyph'>=</span>
<a name="line-205"></a> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span><span class='hs-layout'>,</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop</span> <span class='hs-layout'>(</span><span class='hs-varop'>!</span><span class='hs-varid'>req</span><span class='hs-layout'>,</span> <span class='hs-varop'>!</span><span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-206"></a> <span class='hs-varid'>loop</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>asum</span>
<a name="line-207"></a> <span class='hs-keyglyph'>[</span> <span class='hs-keyword'>do</span> <span class='hs-conid'>New</span> <span class='hs-varid'>new</span> <span class='hs-varid'>var</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readTQueue</span> <span class='hs-varid'>client</span>
<a name="line-208"></a> <span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>outq</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-varid'>new</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-209"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>[]</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span><span class='hs-layout'>,</span> <span class='hs-varid'>counter</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-210"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>_</span>
<a name="line-211"></a> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readTQueue</span> <span class='hs-varid'>inq</span>
<a name="line-212"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>of</span>
<a name="line-213"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-214"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultEntry</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-215"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultReference</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-216"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-217"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-218"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AddResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-219"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DeleteResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-220"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-221"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-222"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-223"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>IntermediateResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-224"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>res</span><span class='hs-layout'>,</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span>
<a name="line-225"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-226"></a> <span class='hs-keyword'>where</span>
<a name="line-227"></a> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span>
<a name="line-228"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>adjust</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>op</span> <span class='hs-conop'>:</span> <span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-229"></a>
<a name="line-230"></a> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span>
<a name="line-231"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>lookup</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>req</span> <span class='hs-keyword'>of</span>
<a name="line-232"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-233"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-234"></a> <span class='hs-varid'>putTMVar</span> <span class='hs-varid'>var</span> <span class='hs-layout'>(</span><span class='hs-varid'>op</span> <span class='hs-conop'>:|</span> <span class='hs-varid'>stack</span><span class='hs-layout'>)</span>
<a name="line-235"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>delete</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span>
<a name="line-236"></a>
<a name="line-237"></a> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span>
<a name="line-238"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span>
<a name="line-239"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span>
<a name="line-240"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-241"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>reason</span><span class='hs-layout'>)</span>
<a name="line-242"></a> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-243"></a> <span class='hs-varid'>moid</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-244"></a> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span>
<a name="line-245"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>moid</span> <span class='hs-keyword'>of</span>
<a name="line-246"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-247"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>oid</span> <span class='hs-varop'>==</span> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Disconnect</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>reason</span><span class='hs-layout'>)</span>
<a name="line-248"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-249"></a> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-250"></a>
<a name="line-251"></a> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span>
<a name="line-252"></a> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromString</span> <span class='hs-str'>"1.3.6.1.4.1.1466.20036"</span>
<a name="line-253"></a>
<a name="line-254"></a><a name="wrap"></a><span class='hs-definition'>wrap</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-255"></a><span class='hs-definition'>wrap</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`catch`</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwIO</span> <span class='hs-varop'>.</span> <span class='hs-conid'>WrappedIOError</span><span class='hs-layout'>)</span>
<a name="line-113"></a>
<a name="line-114"></a><a name="newLdap"></a><span class='hs-definition'>newLdap</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Ldap</span>
<a name="line-115"></a><span class='hs-definition'>newLdap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-116"></a> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-117"></a>
<a name="line-118"></a><a name="LdapError"></a><span class='hs-comment'>-- | Various failures that can happen when working with LDAP.</span>
<a name="line-119"></a><a name="LdapError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapError</span> <span class='hs-keyglyph'>=</span>
<a name="line-120"></a> <span class='hs-conid'>IOError</span> <span class='hs-conid'>IOError</span> <span class='hs-comment'>-- ^ Network failure.</span>
<a name="line-121"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ParseError</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ASN1Error</span> <span class='hs-comment'>-- ^ Invalid ASN.1 data received from the server.</span>
<a name="line-122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>ResponseError</span> <span class='hs-comment'>-- ^ An LDAP operation failed.</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DisconnectError</span> <span class='hs-conid'>Disconnect</span> <span class='hs-comment'>-- ^ Notice of Disconnection has been received.</span>
<a name="line-124"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-125"></a>
<a name="line-126"></a><a name="WrappedIOError"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>WrappedIOError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>WrappedIOError</span> <span class='hs-conid'>IOError</span>
<a name="line-127"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="instance%20Exception%20WrappedIOError%20data%20Disconnect%20=%20Disconnect%20Type.ResultCode%20Dn%20Text%20deriving%20(Show,%20Eq,%20Typeable)%20instance%20Exception%20Disconnect%20--%20%7c%20The%20entrypoint%20into%20LDAP.%20--%20--%20It%20catches%20all%20LDAP-related%20exceptions.%20with%20::%20Host%20-%3e%20PortNumber%20-%3e%20(Ldap%20-%3e%20IO%20a)%20-%3e%20IO%20(Either%20LdapError%20a)%20with%20host%20port%20f%20=%20do%20context%20%3c-%20Conn.initConnectionContext%20bracket%20(Conn.connectTo%20context%20params)%20Conn.connectionClose%20(%5cconn%20-%3e%20bracket%20newLdap%20unbindAsync%20(%5cl%20-%3e%20do%20inq%20%3c-%20newTQueueIO%20outq%20%3c-%20newTQueueIO%20as%20%3c-%20traverse%20Async.async%20%5b%20input%20inq%20conn%20,%20output%20outq%20conn%20,%20dispatch%20l%20inq%20outq%20,%20f%20l%20%5d%20fmap%20(Right%20.%20snd)%20(Async.waitAnyCancel%20as)))%20%60catches%60%20%5b%20Handler%20(%5c(WrappedIOError%20e)%20-%3e%20return%20(Left%20(IOError%20e)))%20,%20Handler%20(return%20.%20Left%20.%20ParseError)%20,%20Handler%20(return%20.%20Left%20.%20ResponseError)%20%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>WrappedIOError</span>
<a name="line-130"></a>
<a name="line-131"></a><a name="Disconnect"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Disconnect</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Disconnect</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-132"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-133"></a>
<a name="line-134"></a><a name="instance%20Exception%20Disconnect%20--%20%7c%20The%20entrypoint%20into%20LDAP.%20--%20--%20It%20catches%20all%20LDAP-related%20exceptions.%20with%20::%20Host%20-%3e%20PortNumber%20-%3e%20(Ldap%20-%3e%20IO%20a)%20-%3e%20IO%20(Either%20LdapError%20a)%20with%20host%20port%20f%20=%20do%20context%20%3c-%20Conn.initConnectionContext%20bracket%20(Conn.connectTo%20context%20params)%20Conn.connectionClose%20(%5cconn%20-%3e%20bracket%20newLdap%20unbindAsync%20(%5cl%20-%3e%20do%20inq%20%3c-%20newTQueueIO%20outq%20%3c-%20newTQueueIO%20as%20%3c-%20traverse%20Async.async%20%5b%20input%20inq%20conn%20,%20output%20outq%20conn%20,%20dispatch%20l%20inq%20outq%20,%20f%20l%20%5d%20fmap%20(Right%20.%20snd)%20(Async.waitAnyCancel%20as)))%20%60catches%60%20%5b%20Handler%20(%5c(WrappedIOError%20e)%20-%3e%20return%20(Left%20(IOError%20e)))%20,%20Handler%20(return%20.%20Left%20.%20ParseError)%20,%20Handler%20(return%20.%20Left%20.%20ResponseError)%20%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>Disconnect</span>
<a name="line-135"></a>
<a name="line-136"></a><a name="with"></a><span class='hs-comment'>-- | The entrypoint into LDAP.</span>
<a name="line-137"></a><span class='hs-comment'>--</span>
<a name="line-138"></a><span class='hs-comment'>-- It catches all LDAP-related exceptions.</span>
<a name="line-139"></a><span class='hs-definition'>with</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>PortNumber</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>LdapError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-140"></a><span class='hs-definition'>with</span> <span class='hs-varid'>host</span> <span class='hs-varid'>port</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-141"></a> <span class='hs-varid'>context</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>initConnectionContext</span>
<a name="line-142"></a> <span class='hs-varid'>bracket</span> <span class='hs-layout'>(</span><span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectTo</span> <span class='hs-varid'>context</span> <span class='hs-varid'>params</span><span class='hs-layout'>)</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionClose</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>conn</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-143"></a> <span class='hs-varid'>bracket</span> <span class='hs-varid'>newLdap</span> <span class='hs-varid'>unbindAsync</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>l</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-144"></a> <span class='hs-varid'>inq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-145"></a> <span class='hs-varid'>outq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-146"></a> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>traverse</span> <span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>async</span>
<a name="line-147"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>input</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>conn</span>
<a name="line-148"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>output</span> <span class='hs-varid'>outq</span> <span class='hs-varid'>conn</span>
<a name="line-149"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>dispatch</span> <span class='hs-varid'>l</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>outq</span>
<a name="line-150"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-varid'>l</span>
<a name="line-151"></a> <span class='hs-keyglyph'>]</span>
<a name="line-152"></a> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span><span class='hs-varop'>.</span><span class='hs-varid'>waitAnyCancel</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-153"></a> <span class='hs-varop'>`catches`</span>
<a name="line-154"></a> <span class='hs-keyglyph'>[</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>WrappedIOError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ParseError</span><span class='hs-layout'>)</span>
<a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handler</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>)</span>
<a name="line-157"></a> <span class='hs-keyglyph'>]</span>
<a name="line-158"></a> <span class='hs-keyword'>where</span>
<a name="line-159"></a> <span class='hs-varid'>params</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>ConnectionParams</span>
<a name="line-160"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionHostname</span> <span class='hs-keyglyph'>=</span>
<a name="line-161"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-162"></a> <span class='hs-conid'>Plain</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-163"></a> <span class='hs-conid'>Secure</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-164"></a> <span class='hs-conid'>Insecure</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>h</span>
<a name="line-165"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionPort</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>port</span>
<a name="line-166"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionUseSecure</span> <span class='hs-keyglyph'>=</span>
<a name="line-167"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-168"></a> <span class='hs-conid'>Plain</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Nothing</span>
<a name="line-169"></a> <span class='hs-conid'>Secure</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>TLSSettingsSimple</span>
<a name="line-170"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableCertificateValidation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-171"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableSession</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-172"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingUseServerName</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-173"></a> <span class='hs-layout'>}</span>
<a name="line-174"></a> <span class='hs-conid'>Insecure</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-conid'>TLSSettingsSimple</span>
<a name="line-175"></a> <span class='hs-layout'>{</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableCertificateValidation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-176"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingDisableSession</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-177"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>settingUseServerName</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-178"></a> <span class='hs-layout'>}</span>
<a name="line-179"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionUseSocks</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-180"></a> <span class='hs-layout'>}</span>
<a name="line-181"></a>
<a name="line-182"></a><a name="input"></a><span class='hs-definition'>input</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>b</span>
<a name="line-183"></a><span class='hs-definition'>input</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>conn</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wrap</span> <span class='hs-varop'>.</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-conid'>[]</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop</span> <span class='hs-varid'>chunks</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-184"></a> <span class='hs-varid'>chunk</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionGet</span> <span class='hs-varid'>conn</span> <span class='hs-num'>8192</span>
<a name="line-185"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-varid'>length</span> <span class='hs-varid'>chunk</span> <span class='hs-keyword'>of</span>
<a name="line-186"></a> <span class='hs-num'>0</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwIO</span> <span class='hs-layout'>(</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-varid'>mkIOError</span> <span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-varid'>eofErrorType</span> <span class='hs-str'>"Ldap.Client.input"</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-187"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-188"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>chunks'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>chunk</span> <span class='hs-conop'>:</span> <span class='hs-varid'>chunks</span>
<a name="line-189"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeASN1</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>DER</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span><span class='hs-varop'>.</span><span class='hs-varid'>fromChunks</span> <span class='hs-layout'>(</span><span class='hs-varid'>reverse</span> <span class='hs-varid'>chunks'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-190"></a> <span class='hs-conid'>Left</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>ParsingPartial</span>
<a name="line-191"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>loop</span> <span class='hs-varid'>chunks'</span>
<a name="line-192"></a> <span class='hs-conid'>Left</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwIO</span> <span class='hs-varid'>e</span>
<a name="line-193"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>asn1</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-194"></a> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-varid'>asn1</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop'</span> <span class='hs-varid'>asn1'</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-195"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>parseAsn1</span> <span class='hs-varid'>asn1'</span> <span class='hs-keyword'>of</span>
<a name="line-196"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-197"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>asn1''</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-198"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-199"></a> <span class='hs-varid'>loop'</span> <span class='hs-varid'>asn1''</span>
<a name="line-200"></a> <span class='hs-varid'>loop</span> <span class='hs-conid'>[]</span>
<a name="line-201"></a>
<a name="line-202"></a><a name="output"></a><span class='hs-definition'>output</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Connection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>b</span>
<a name="line-203"></a><span class='hs-definition'>output</span> <span class='hs-varid'>out</span> <span class='hs-varid'>conn</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wrap</span> <span class='hs-varop'>.</span> <span class='hs-varid'>forever</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-204"></a> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>readTQueue</span> <span class='hs-varid'>out</span><span class='hs-layout'>)</span>
<a name="line-205"></a> <span class='hs-conid'>Conn</span><span class='hs-varop'>.</span><span class='hs-varid'>connectionPut</span> <span class='hs-varid'>conn</span> <span class='hs-layout'>(</span><span class='hs-varid'>encode</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-206"></a> <span class='hs-keyword'>where</span>
<a name="line-207"></a> <span class='hs-varid'>encode</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeASN1'</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>DER</span> <span class='hs-layout'>(</span><span class='hs-varid'>appEndo</span> <span class='hs-varid'>x</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-208"></a>
<a name="line-209"></a><a name="dispatch"></a><span class='hs-definition'>dispatch</span>
<a name="line-210"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-211"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span>
<a name="line-212"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-conid'>Request</span><span class='hs-layout'>)</span>
<a name="line-213"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-214"></a><span class='hs-definition'>dispatch</span> <span class='hs-conid'>Ldap</span> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-layout'>}</span> <span class='hs-varid'>inq</span> <span class='hs-varid'>outq</span> <span class='hs-keyglyph'>=</span>
<a name="line-215"></a> <span class='hs-varid'>flip</span> <span class='hs-varid'>fix</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>empty</span><span class='hs-layout'>,</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>loop</span> <span class='hs-layout'>(</span><span class='hs-varop'>!</span><span class='hs-varid'>req</span><span class='hs-layout'>,</span> <span class='hs-varop'>!</span><span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-216"></a> <span class='hs-varid'>loop</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>asum</span>
<a name="line-217"></a> <span class='hs-keyglyph'>[</span> <span class='hs-keyword'>do</span> <span class='hs-conid'>New</span> <span class='hs-varid'>new</span> <span class='hs-varid'>var</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readTQueue</span> <span class='hs-varid'>client</span>
<a name="line-218"></a> <span class='hs-varid'>writeTQueue</span> <span class='hs-varid'>outq</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-varid'>new</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-219"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>insert</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>[]</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span><span class='hs-layout'>,</span> <span class='hs-varid'>counter</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-220"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>_</span>
<a name="line-221"></a> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readTQueue</span> <span class='hs-varid'>inq</span>
<a name="line-222"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>of</span>
<a name="line-223"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-224"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultEntry</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-225"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultReference</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-226"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-227"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-228"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AddResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-229"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DeleteResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-230"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-231"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-232"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-233"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>IntermediateResponse</span> <span class='hs-layout'>{</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-234"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>res</span><span class='hs-layout'>,</span> <span class='hs-varid'>counter</span><span class='hs-layout'>)</span>
<a name="line-235"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-236"></a> <span class='hs-keyword'>where</span>
<a name="line-237"></a> <span class='hs-varid'>saveUp</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span>
<a name="line-238"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>adjust</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>op</span> <span class='hs-conop'>:</span> <span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-239"></a>
<a name="line-240"></a> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span>
<a name="line-241"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>lookup</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>req</span> <span class='hs-keyword'>of</span>
<a name="line-242"></a> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-243"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>stack</span><span class='hs-layout'>,</span> <span class='hs-varid'>var</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-244"></a> <span class='hs-varid'>putTMVar</span> <span class='hs-varid'>var</span> <span class='hs-layout'>(</span><span class='hs-varid'>op</span> <span class='hs-conop'>:|</span> <span class='hs-varid'>stack</span><span class='hs-layout'>)</span>
<a name="line-245"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Map</span><span class='hs-varop'>.</span><span class='hs-varid'>delete</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span>
<a name="line-246"></a>
<a name="line-247"></a> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Id</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span>
<a name="line-248"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtendedResponse</span>
<a name="line-249"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span>
<a name="line-250"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-251"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>reason</span><span class='hs-layout'>)</span>
<a name="line-252"></a> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-253"></a> <span class='hs-varid'>moid</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-254"></a> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span>
<a name="line-255"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>moid</span> <span class='hs-keyword'>of</span>
<a name="line-256"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-257"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>oid</span> <span class='hs-varop'>==</span> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>throwSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Disconnect</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>reason</span><span class='hs-layout'>)</span>
<a name="line-258"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-varid'>req</span>
<a name="line-259"></a> <span class='hs-varid'>probablyDisconnect</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>done</span> <span class='hs-varid'>mid</span> <span class='hs-varid'>op</span> <span class='hs-varid'>req</span>
<a name="line-260"></a>
<a name="line-261"></a> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span>
<a name="line-262"></a> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fromString</span> <span class='hs-str'>"1.3.6.1.4.1.1466.20036"</span>
<a name="line-263"></a>
<a name="line-264"></a><a name="wrap"></a><span class='hs-definition'>wrap</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-265"></a><span class='hs-definition'>wrap</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>m</span> <span class='hs-varop'>`catch`</span> <span class='hs-layout'>(</span><span class='hs-varid'>throwIO</span> <span class='hs-varop'>.</span> <span class='hs-conid'>WrappedIOError</span><span class='hs-layout'>)</span>
</pre></body>
</html>