Update haddock documentation

This commit is contained in:
Matvey Aksenov 2015-04-11 16:32:41 +00:00
parent 97871addab
commit 7fdb82e8a4
32 changed files with 914 additions and 875 deletions

View File

@ -1,7 +1,7 @@
<!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.Asn1.FromAsn1</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();setSynopsis("mini_Ldap-Asn1-FromAsn1.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Asn1-FromAsn1.html">Source</a></li><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="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Ldap.Asn1.FromAsn1</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module contains convertions from ASN.1 to LDAP types.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:parseAsn1">parseAsn1</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a =&gt; [ASN1] -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> ([ASN1], a)</li><li class="src short"><span class="keyword">class</span> <a href="#t:FromAsn1">FromAsn1</a> a</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:parseAsn1" class="def">parseAsn1</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a =&gt; [ASN1] -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> ([ASN1], a) <a href="src/Ldap-Asn1-FromAsn1.html#parseAsn1" class="link">Source</a></p><div class="doc"><p>Convert a part of ASN.1 stream to a LDAP type returning the remainder of the stream.</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:FromAsn1" class="def">FromAsn1</a> a <a href="src/Ldap-Asn1-FromAsn1.html#FromAsn1" class="link">Source</a></p><div class="doc"><p>ASN.1 stream parsers.</p><p>When it's relevant, instances include the part of RFC describing the encoding.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src">fromAsn1</p></div><div class="subs instances"><p id="control.i:FromAsn1" class="caption collapser" onclick="toggleSection('i:FromAsn1')">Instances</p><div id="section.i:FromAsn1" class="show"><table><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapOid">LdapOid</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-89" class="link">Source</a></td><td class="doc"><pre>LDAPOID ::= OCTET STRING -- Constrained to &lt;numericoid&gt;
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Asn1-FromAsn1.html">Source</a></li><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="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Ldap.Asn1.FromAsn1</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module contains convertions from ASN.1 to LDAP types.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:parseAsn1">parseAsn1</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a =&gt; [<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>] -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> ([<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>], a)</li><li class="src short"><span class="keyword">class</span> <a href="#t:FromAsn1">FromAsn1</a> a</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:parseAsn1" class="def">parseAsn1</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a =&gt; [<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>] -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> ([<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>], a) <a href="src/Ldap-Asn1-FromAsn1.html#parseAsn1" class="link">Source</a></p><div class="doc"><p>Convert a part of ASN.1 stream to a LDAP type returning the remainder of the stream.</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:FromAsn1" class="def">FromAsn1</a> a <a href="src/Ldap-Asn1-FromAsn1.html#FromAsn1" class="link">Source</a></p><div class="doc"><p>ASN.1 stream parsers.</p><p>When it's relevant, instances include the part of RFC describing the encoding.</p></div><div class="subs minimal"><p class="caption">Minimal complete definition</p><p class="src">fromAsn1</p></div><div class="subs instances"><p id="control.i:FromAsn1" class="caption collapser" onclick="toggleSection('i:FromAsn1')">Instances</p><div id="section.i:FromAsn1" class="show"><table><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapOid">LdapOid</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-89" class="link">Source</a></td><td class="doc"><pre>LDAPOID ::= OCTET STRING -- Constrained to &lt;numericoid&gt;
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapString">LdapString</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-77" class="link">Source</a></td><td class="doc"><pre>LDAPString ::= OCTET STRING -- UTF-8 encoded,
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:Uri">Uri</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-267" class="link">Source</a></td><td class="doc"><pre>URI ::= LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:ReferralUris">ReferralUris</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-255" class="link">Source</a></td><td class="doc"><pre>Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI

View File

@ -4,7 +4,7 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Asn1-ToAsn1.html"
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Asn1-ToAsn1.html">Source</a></li><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="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Ldap.Asn1.ToAsn1</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This module contains convertions from LDAP types to ASN.1.</p><p>Various hacks are employed because &quot;asn1-encoding&quot; only encodes to DER, but
LDAP demands BER-encoding. So, when a definition looks suspiciously different
from the spec in the comment, that's why. I hope all that will be fixed
eventually.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> <a href="#t:ToAsn1">ToAsn1</a> a <span class="keyword">where</span><ul class="subs"><li><a href="#v:toAsn1">toAsn1</a> :: a -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Monoid.html#t:Endo">Endo</a> [ASN1]</li></ul></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:ToAsn1" class="def">ToAsn1</a> a <span class="keyword">where</span> <a href="src/Ldap-Asn1-ToAsn1.html#ToAsn1" class="link">Source</a></p><div class="doc"><p>Convert a LDAP type to ASN.1.</p><p>When it's relevant, instances include the part of RFC describing the encoding.</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:toAsn1" class="def">toAsn1</a> :: a -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Monoid.html#t:Endo">Endo</a> [ASN1] <a href="src/Ldap-Asn1-ToAsn1.html#toAsn1" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:ToAsn1" class="caption collapser" onclick="toggleSection('i:ToAsn1')">Instances</p><div id="section.i:ToAsn1" class="show"><table><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapOid">LdapOid</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-73" class="link">Source</a></td><td class="doc"><pre>LDAPOID ::= OCTET STRING -- Constrained to &lt;numericoid&gt;
eventually.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">class</span> <a href="#t:ToAsn1">ToAsn1</a> a <span class="keyword">where</span><ul class="subs"><li><a href="#v:toAsn1">toAsn1</a> :: a -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Monoid.html#t:Endo">Endo</a> [<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>]</li></ul></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:ToAsn1" class="def">ToAsn1</a> a <span class="keyword">where</span> <a href="src/Ldap-Asn1-ToAsn1.html#ToAsn1" class="link">Source</a></p><div class="doc"><p>Convert a LDAP type to ASN.1.</p><p>When it's relevant, instances include the part of RFC describing the encoding.</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:toAsn1" class="def">toAsn1</a> :: a -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Monoid.html#t:Endo">Endo</a> [<a href="http://hackage.haskell.org/package/asn1-types/docs/Data-ASN1-Types.html#t:ASN1">ASN1</a>] <a href="src/Ldap-Asn1-ToAsn1.html#toAsn1" class="link">Source</a></p></div><div class="subs instances"><p id="control.i:ToAsn1" class="caption collapser" onclick="toggleSection('i:ToAsn1')">Instances</p><div id="section.i:ToAsn1" class="show"><table><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapOid">LdapOid</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-73" class="link">Source</a></td><td class="doc"><pre>LDAPOID ::= OCTET STRING -- Constrained to &lt;numericoid&gt;
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapString">LdapString</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-65" class="link">Source</a></td><td class="doc"><pre>LDAPString ::= OCTET STRING -- UTF-8 encoded
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:RelativeLdapDn">RelativeLdapDn</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-89" class="link">Source</a></td><td class="doc"><pre>RelativeLDAPDN ::= LDAPString -- Constrained to &lt;name-component&gt;
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapDn">LdapDn</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-81" class="link">Source</a></td><td class="doc"><pre>LDAPDN ::= LDAPString -- Constrained to &lt;distinguishedName&gt;

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

@ -2,7 +2,10 @@
window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Client-Compare.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Client-Compare.html">Source</a></li><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="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr><tr><th>Language</th><td>Haskell2010</td></tr></table><p class="caption">Ldap.Client.Compare</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p><a href="https://tools.ietf.org/html/rfc4511#section-4.10">Compare</a> operation.</p><p>This operation comes in four flavours:</p><ul><li>synchronous, exception throwing (<code><a href="Ldap-Client-Compare.html#v:compare">compare</a></code>)</li><li>synchronous, returning <code><a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a></code> <code><a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a></code> <code>()</code> (<code><a href="Ldap-Client-Compare.html#v:compareEither">compareEither</a></code>)</li><li>asynchronous, <code><a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a></code> based (<code><a href="Ldap-Client-Compare.html#v:compareAsync">compareAsync</a></code>)</li><li>asynchronous, <code><a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a></code> based (<code><a href="Ldap-Client-Compare.html#v:compareAsyncSTM">compareAsyncSTM</a></code>)</li></ul><p>Of those, the first one (<code><a href="Ldap-Client-Compare.html#v:compare">compare</a></code>) is probably the most useful for the
typical usecase.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:compare">compare</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:compareEither">compareEither</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><a href="#v:compareAsync">compareAsync</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><a href="#v:compareAsyncSTM">compareAsyncSTM</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:compare" class="def">compare</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a> <a href="src/Ldap-Client-Compare.html#compare" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation synchronously. Raises <code><a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a></code> on failures.</p></div></div><div class="top"><p class="src"><a name="v:compareEither" class="def">compareEither</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareEither" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation synchronously. Returns <code>Left e</code> where
<code>e</code> is a <code><a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a></code> on failures.</p></div></div><div class="top"><p class="src"><a name="v:compareAsync" class="def">compareAsync</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareAsync" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation asynchronously. Call <code><a href="Ldap-Client.html#v:wait">wait</a></code> to wait
for its completion.</p></div></div><div class="top"><p class="src"><a name="v:compareAsyncSTM" class="def">compareAsyncSTM</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareAsyncSTM" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation asynchronously.</p><p>Don't wait for its completion (with <code><a href="Ldap-Client.html#v:waitSTM">waitSTM</a></code>) in the
same transaction you've performed it in.</p></div></div></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>
typical usecase.</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><a href="#v:compare">compare</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:compareEither">compareEither</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><span class="keyword">data</span> <a href="#t:Async">Async</a> a</li><li class="src short"><a href="#v:compareAsync">compareAsync</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="Ldap-Client-Compare.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><a href="#v:compareAsyncSTM">compareAsyncSTM</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="Ldap-Client-Compare.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>)</li><li class="src short"><a href="#v:wait">wait</a> :: <a href="Ldap-Client-Compare.html#t:Async">Async</a> a -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> a)</li><li class="src short"><a href="#v:waitSTM">waitSTM</a> :: <a href="Ldap-Client-Compare.html#t:Async">Async</a> a -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> a)</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:compare" class="def">compare</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a> <a href="src/Ldap-Client-Compare.html#compare" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation synchronously. Raises <code><a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a></code> on failures.</p></div></div><div class="top"><p class="src"><a name="v:compareEither" class="def">compareEither</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareEither" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation synchronously. Returns <code>Left e</code> where
<code>e</code> is a <code><a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a></code> on failures.</p></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Async" class="def">Async</a> a <a href="src/Ldap-Client-Internal.html#Async" class="link">Source</a></p><div class="doc"><p>Asynchronous LDAP operation. Use <code><a href="Ldap-Client-Compare.html#v:wait">wait</a></code> or <code><a href="Ldap-Client-Compare.html#v:waitSTM">waitSTM</a></code> to wait for its completion.</p></div><div class="subs instances"><p id="control.i:Async" class="caption collapser" onclick="toggleSection('i:Async')">Instances</p><div id="section.i:Async" class="show"><table><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Data-Functor.html#t:Functor">Functor</a> <a href="Ldap-Client-Compare.html#t:Async">Async</a> <a href="src/Ldap-Client-Internal.html#line-64" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:compareAsync" class="def">compareAsync</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="Ldap-Client-Compare.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareAsync" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation asynchronously. Call <code><a href="Ldap-Client.html#v:wait">wait</a></code> to wait
for its completion.</p></div></div><div class="top"><p class="src"><a name="v:compareAsyncSTM" class="def">compareAsyncSTM</a> :: <a href="Ldap-Client-Internal.html#t:Ldap">Ldap</a> -&gt; <a href="Ldap-Client-Internal.html#t:Dn">Dn</a> -&gt; <a href="Ldap-Client-Internal.html#t:Attr">Attr</a> -&gt; <a href="Ldap-Client-Internal.html#t:AttrValue">AttrValue</a> -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="Ldap-Client-Compare.html#t:Async">Async</a> <a href="http://hackage.haskell.org/package/base/docs/Data-Bool.html#t:Bool">Bool</a>) <a href="src/Ldap-Client-Compare.html#compareAsyncSTM" class="link">Source</a></p><div class="doc"><p>Perform the Compare operation asynchronously.</p><p>Don't wait for its completion (with <code><a href="Ldap-Client.html#v:waitSTM">waitSTM</a></code>) in the
same transaction you've performed it in.</p></div></div><div class="top"><p class="src"><a name="v:wait" class="def">wait</a> :: <a href="Ldap-Client-Compare.html#t:Async">Async</a> a -&gt; <a href="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> a) <a href="src/Ldap-Client-Internal.html#wait" class="link">Source</a></p><div class="doc"><p>Wait for operation completion.</p></div></div><div class="top"><p class="src"><a name="v:waitSTM" class="def">waitSTM</a> :: <a href="Ldap-Client-Compare.html#t:Async">Async</a> a -&gt; <a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="http://hackage.haskell.org/package/base/docs/Data-Either.html#t:Either">Either</a> <a href="Ldap-Client-Internal.html#t:ResponseError">ResponseError</a> a) <a href="src/Ldap-Client-Internal.html#waitSTM" class="link">Source</a></p><div class="doc"><p>Wait for operation completion inside <code><a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a></code>.</p><p>Do not use this inside the same <code><a href="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a></code> transaction the operation was
requested in! To give LDAP the chance to respond to it that transaction
should commit. After that, applying <code><a href="Ldap-Client-Compare.html#v:waitSTM">waitSTM</a></code> to the corresponding <code><a href="Ldap-Client-Compare.html#t:Async">Async</a></code>
starts to make sense.</p></div></div></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>

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 - W)</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 - W</p><table><tr><td class="src">wait</td><td class="module"><a href="Ldap-Client-Internal.html#v:wait">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:wait">Ldap.Client</a></td></tr><tr><td class="src">waitSTM</td><td class="module"><a href="Ldap-Client-Internal.html#v:waitSTM">Ldap.Client.Internal</a></td></tr><tr><td class="src">WholeSubtree</td><td class="module"><a href="Ldap-Asn1-Type.html#v:WholeSubtree">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:WholeSubtree">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:WholeSubtree">Ldap.Client</a></td></tr><tr><td class="src">with</td><td class="module"><a href="Ldap-Client.html#v:with">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 - W</p><table><tr><td class="src">wait</td><td class="module"><a href="Ldap-Client-Internal.html#v:wait">Ldap.Client.Internal</a>, <a href="Ldap-Client-Bind.html#v:wait">Ldap.Client.Bind</a>, <a href="Ldap-Client-Search.html#v:wait">Ldap.Client.Search</a>, <a href="Ldap-Client-Modify.html#v:wait">Ldap.Client.Modify</a>, <a href="Ldap-Client-Add.html#v:wait">Ldap.Client.Add</a>, <a href="Ldap-Client-Delete.html#v:wait">Ldap.Client.Delete</a>, <a href="Ldap-Client-Compare.html#v:wait">Ldap.Client.Compare</a>, <a href="Ldap-Client-Extended.html#v:wait">Ldap.Client.Extended</a></td></tr><tr><td class="src">waitSTM</td><td class="module"><a href="Ldap-Client-Internal.html#v:waitSTM">Ldap.Client.Internal</a>, <a href="Ldap-Client-Bind.html#v:waitSTM">Ldap.Client.Bind</a>, <a href="Ldap-Client-Search.html#v:waitSTM">Ldap.Client.Search</a>, <a href="Ldap-Client-Modify.html#v:waitSTM">Ldap.Client.Modify</a>, <a href="Ldap-Client-Add.html#v:waitSTM">Ldap.Client.Add</a>, <a href="Ldap-Client-Delete.html#v:waitSTM">Ldap.Client.Delete</a>, <a href="Ldap-Client-Compare.html#v:waitSTM">Ldap.Client.Compare</a>, <a href="Ldap-Client-Extended.html#v:waitSTM">Ldap.Client.Extended</a></td></tr><tr><td class="src">WholeSubtree</td><td class="module"><a href="Ldap-Asn1-Type.html#v:WholeSubtree">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Search.html#v:WholeSubtree">Ldap.Client.Search</a>, <a href="Ldap-Client.html#v:WholeSubtree">Ldap.Client</a></td></tr><tr><td class="src">with</td><td class="module"><a href="Ldap-Client.html#v:with">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.Add</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.Add</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:add" target="main">add</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addEither" target="main">addEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addAsync" target="main">addAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addAsyncSTM" target="main">addAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Add</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:add" target="main">add</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addEither" target="main">addEither</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Add.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addAsync" target="main">addAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:addAsyncSTM" target="main">addAsyncSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Add.html#v:waitSTM" target="main">waitSTM</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.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"><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>
</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"><span class="keyword">data</span> <a href="Ldap-Client-Bind.html#t:Async" target="main">Async</a> 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 class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:waitSTM" target="main">waitSTM</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.Compare</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.Compare</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compare" target="main">compare</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareEither" target="main">compareEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareAsync" target="main">compareAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareAsyncSTM" target="main">compareAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Compare</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compare" target="main">compare</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareEither" target="main">compareEither</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Compare.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareAsync" target="main">compareAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:compareAsyncSTM" target="main">compareAsyncSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Compare.html#v:waitSTM" target="main">waitSTM</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.Delete</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.Delete</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:delete" target="main">delete</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteEither" target="main">deleteEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteAsync" target="main">deleteAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteAsyncSTM" target="main">deleteAsyncSTM</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Client.Delete</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:delete" target="main">delete</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteEither" target="main">deleteEither</a></p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Delete.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteAsync" target="main">deleteAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:deleteAsyncSTM" target="main">deleteAsyncSTM</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Delete.html#v:waitSTM" target="main">waitSTM</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"><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>
</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 class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Extended.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Extended.html#v:waitSTM" target="main">waitSTM</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"><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>
</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 class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Client-Modify.html#t:Async" target="main">Async</a> a</p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Modify.html#v:waitSTM" target="main">waitSTM</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"><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>
</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"><span class="keyword">data</span> <a href="Ldap-Client-Search.html#t:Async" target="main">Async</a> 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 class="top"><p class="src"><a href="Ldap-Client-Search.html#v:wait" target="main">wait</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Search.html#v:waitSTM" target="main">waitSTM</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"><a href="Ldap-Client.html#v:with" target="main">with</a></p></div><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:PortNumber" target="main">PortNumber</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><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></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"><a href="Ldap-Client.html#v:with" target="main">with</a></p></div><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:PortNumber" target="main">PortNumber</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><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>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></body></html>

View File

@ -23,55 +23,58 @@
<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'>Add</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>add</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addEither</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsync</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsyncSTM</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-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsync</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsyncSTM</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-22"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</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-24"></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-25"></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-26"></a>
<a name="line-27"></a>
<a name="line-28"></a><a name="add"></a><span class='hs-comment'>-- | Perform the Add operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-29"></a><span class='hs-definition'>add</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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'>add</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-31"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>addEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-32"></a>
<a name="line-33"></a><a name="addEither"></a><span class='hs-comment'>-- | Perform the Add 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'>addEither</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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'>addEither</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-37"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>addAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="addAsync"></a><span class='hs-comment'>-- | Perform the Add 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'>addAsync</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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'>addAsync</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-43"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>addAsyncSTM</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-44"></a>
<a name="line-45"></a><a name="addAsyncSTM"></a><span class='hs-comment'>-- | Perform the Add 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'>addAsyncSTM</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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'>addAsyncSTM</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-51"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>addRequest</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</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'>addResult</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="addRequest"></a><span class='hs-definition'>addRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrList</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-54"></a><span class='hs-definition'>addRequest</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-keyword'>as</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'>AddRequest</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-56"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeList</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-57"></a> <span class='hs-keyword'>where</span>
<a name="line-58"></a> <span class='hs-varid'>f</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'>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'>Attribute</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-59"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="addResult"></a><span class='hs-definition'>addResult</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'>addResult</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'>AddResponse</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-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'>addResult</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-27"></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-28"></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-29"></a>
<a name="line-30"></a>
<a name="line-31"></a><a name="add"></a><span class='hs-comment'>-- | Perform the Add operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-32"></a><span class='hs-definition'>add</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'>AttrList</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-33"></a><span class='hs-definition'>add</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-34"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>addEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-35"></a>
<a name="line-36"></a><a name="addEither"></a><span class='hs-comment'>-- | Perform the Add operation synchronously. Returns @Left e@ where</span>
<a name="line-37"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-38"></a><span class='hs-definition'>addEither</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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-39"></a><span class='hs-definition'>addEither</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-40"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>addAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-41"></a>
<a name="line-42"></a><a name="addAsync"></a><span class='hs-comment'>-- | Perform the Add operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-43"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-44"></a><span class='hs-definition'>addAsync</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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-45"></a><span class='hs-definition'>addAsync</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'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>addAsyncSTM</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-47"></a>
<a name="line-48"></a><a name="addAsyncSTM"></a><span class='hs-comment'>-- | Perform the Add operation asynchronously.</span>
<a name="line-49"></a><span class='hs-comment'>--</span>
<a name="line-50"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-51"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-52"></a><span class='hs-definition'>addAsyncSTM</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'>AttrList</span> <span class='hs-conid'>NonEmpty</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-53"></a><span class='hs-definition'>addAsyncSTM</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-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>addRequest</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</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'>addResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="addRequest"></a><span class='hs-definition'>addRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrList</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-57"></a><span class='hs-definition'>addRequest</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-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AddRequest</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-59"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeList</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-60"></a> <span class='hs-keyword'>where</span>
<a name="line-61"></a> <span class='hs-varid'>f</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'>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'>Attribute</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-62"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="addResult"></a><span class='hs-definition'>addResult</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'>addResult</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'>AddResponse</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-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'>addResult</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

@ -24,60 +24,63 @@
<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-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsync</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsyncSTM</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-23"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-24"></a>
<a name="line-25"></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-26"></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-27"></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-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="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="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>
<a name="line-29"></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-30"></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-31"></a>
<a name="line-32"></a>
<a name="line-33"></a><a name="Password"></a><span class='hs-comment'>-- | User's password.</span>
<a name="line-34"></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-35"></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-36"></a>
<a name="line-37"></a><a name="bind"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-38"></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-39"></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-40"></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-41"></a>
<a name="line-42"></a><a name="bindEither"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Returns @Left e@ where</span>
<a name="line-43"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-44"></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-45"></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-46"></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-47"></a>
<a name="line-48"></a><a name="bindAsync"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-49"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-50"></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-51"></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-52"></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-53"></a>
<a name="line-54"></a><a name="bindAsyncSTM"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously.</span>
<a name="line-55"></a><span class='hs-comment'>--</span>
<a name="line-56"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-57"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-58"></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-59"></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-60"></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-61"></a>
<a name="line-62"></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-63"></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-64"></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-65"></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-66"></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-67"></a> <span class='hs-keyword'>where</span>
<a name="line-68"></a> <span class='hs-varid'>ldapVersion</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>3</span>
<a name="line-69"></a>
<a name="line-70"></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-71"></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-72"></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-73"></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-74"></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-75"></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

@ -24,56 +24,59 @@
<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'>Compare</span>
<a name="line-16"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>compare</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareEither</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsync</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsyncSTM</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'>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-24"></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-25"></a>
<a name="line-26"></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-27"></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-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsync</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsyncSTM</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-23"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-24"></a>
<a name="line-25"></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-26"></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-27"></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-28"></a>
<a name="line-29"></a>
<a name="line-30"></a><a name="compare"></a><span class='hs-comment'>-- | Perform the Compare operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-31"></a><span class='hs-definition'>compare</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Bool</span>
<a name="line-32"></a><span class='hs-definition'>compare</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-33"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>compareEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span>
<a name="line-34"></a>
<a name="line-35"></a><a name="compareEither"></a><span class='hs-comment'>-- | Perform the Compare operation synchronously. Returns @Left e@ where</span>
<a name="line-36"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-37"></a><span class='hs-definition'>compareEither</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-definition'>compareEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-39"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>compareAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span>
<a name="line-40"></a>
<a name="line-41"></a><a name="compareAsync"></a><span class='hs-comment'>-- | Perform the Compare operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-42"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-43"></a><span class='hs-definition'>compareAsync</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-44"></a><span class='hs-definition'>compareAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-45"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>compareAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span>
<a name="line-46"></a>
<a name="line-47"></a><a name="compareAsyncSTM"></a><span class='hs-comment'>-- | Perform the Compare operation asynchronously.</span>
<a name="line-48"></a><span class='hs-comment'>--</span>
<a name="line-49"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-50"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-51"></a><span class='hs-definition'>compareAsyncSTM</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-52"></a><span class='hs-definition'>compareAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-53"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>compareRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</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'>compareResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-54"></a>
<a name="line-55"></a><a name="compareRequest"></a><span class='hs-definition'>compareRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-56"></a><span class='hs-definition'>compareRequest</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'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-57"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareRequest</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-58"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-59"></a> <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-60"></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'>v</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="compareResult"></a><span class='hs-definition'>compareResult</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'>Bool</span>
<a name="line-63"></a><span class='hs-definition'>compareResult</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'>CompareResponse</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-64"></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-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-65"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareTrue</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'>True</span>
<a name="line-66"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareFalse</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'>False</span>
<a name="line-67"></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-68"></a><span class='hs-definition'>compareResult</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-29"></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-30"></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-31"></a>
<a name="line-32"></a>
<a name="line-33"></a><a name="compare"></a><span class='hs-comment'>-- | Perform the Compare operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-34"></a><span class='hs-definition'>compare</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Bool</span>
<a name="line-35"></a><span class='hs-definition'>compare</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-36"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>compareEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span>
<a name="line-37"></a>
<a name="line-38"></a><a name="compareEither"></a><span class='hs-comment'>-- | Perform the Compare operation synchronously. Returns @Left e@ where</span>
<a name="line-39"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-40"></a><span class='hs-definition'>compareEither</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-41"></a><span class='hs-definition'>compareEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-42"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>compareAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="compareAsync"></a><span class='hs-comment'>-- | Perform the Compare operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-45"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-46"></a><span class='hs-definition'>compareAsync</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-47"></a><span class='hs-definition'>compareAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-48"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>compareAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="compareAsyncSTM"></a><span class='hs-comment'>-- | Perform the Compare operation asynchronously.</span>
<a name="line-51"></a><span class='hs-comment'>--</span>
<a name="line-52"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-53"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-54"></a><span class='hs-definition'>compareAsyncSTM</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'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-55"></a><span class='hs-definition'>compareAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-56"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>compareRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>k</span> <span class='hs-varid'>v</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'>compareResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="compareRequest"></a><span class='hs-definition'>compareRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-59"></a><span class='hs-definition'>compareRequest</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'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareRequest</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-61"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</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'>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-63"></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'>v</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="compareResult"></a><span class='hs-definition'>compareResult</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'>Bool</span>
<a name="line-66"></a><span class='hs-definition'>compareResult</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'>CompareResponse</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-67"></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-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareTrue</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'>True</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>CompareFalse</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'>False</span>
<a name="line-70"></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-71"></a><span class='hs-definition'>compareResult</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

@ -23,51 +23,54 @@
<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'>Delete</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>delete</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteEither</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsync</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsyncSTM</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'>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-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-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsync</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsyncSTM</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-22"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</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-24"></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-25"></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-26"></a>
<a name="line-27"></a>
<a name="line-28"></a><a name="delete"></a><span class='hs-comment'>-- | Perform the Delete operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-29"></a><span class='hs-definition'>delete</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'>IO</span> <span class='hs-conid'>()</span>
<a name="line-30"></a><span class='hs-definition'>delete</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</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'>deleteEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span>
<a name="line-32"></a>
<a name="line-33"></a><a name="deleteEither"></a><span class='hs-comment'>-- | Perform the Delete 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'>deleteEither</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'>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'>deleteEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</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'>deleteAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="deleteAsync"></a><span class='hs-comment'>-- | Perform the Delete 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'>deleteAsync</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'>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'>deleteAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</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'>deleteAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="deleteAsyncSTM"></a><span class='hs-comment'>-- | Perform the Delete 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'>deleteAsyncSTM</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'>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'>deleteAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</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'>deleteRequest</span> <span class='hs-varid'>dn</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'>deleteResult</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="deleteRequest"></a><span class='hs-definition'>deleteRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-54"></a><span class='hs-definition'>deleteRequest</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'>=</span>
<a name="line-55"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DeleteRequest</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-56"></a>
<a name="line-57"></a><a name="deleteResult"></a><span class='hs-definition'>deleteResult</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-58"></a><span class='hs-definition'>deleteResult</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'>DeleteResponse</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-59"></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-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-60"></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-61"></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-62"></a><span class='hs-definition'>deleteResult</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-27"></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-28"></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-29"></a>
<a name="line-30"></a>
<a name="line-31"></a><a name="delete"></a><span class='hs-comment'>-- | Perform the Delete operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-32"></a><span class='hs-definition'>delete</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'>IO</span> <span class='hs-conid'>()</span>
<a name="line-33"></a><span class='hs-definition'>delete</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyglyph'>=</span>
<a name="line-34"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>deleteEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span>
<a name="line-35"></a>
<a name="line-36"></a><a name="deleteEither"></a><span class='hs-comment'>-- | Perform the Delete operation synchronously. Returns @Left e@ where</span>
<a name="line-37"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-38"></a><span class='hs-definition'>deleteEither</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'>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-39"></a><span class='hs-definition'>deleteEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyglyph'>=</span>
<a name="line-40"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>deleteAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span>
<a name="line-41"></a>
<a name="line-42"></a><a name="deleteAsync"></a><span class='hs-comment'>-- | Perform the Delete operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-43"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-44"></a><span class='hs-definition'>deleteAsync</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'>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-45"></a><span class='hs-definition'>deleteAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>deleteAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="deleteAsyncSTM"></a><span class='hs-comment'>-- | Perform the Delete operation asynchronously.</span>
<a name="line-49"></a><span class='hs-comment'>--</span>
<a name="line-50"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-51"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-52"></a><span class='hs-definition'>deleteAsyncSTM</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'>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-53"></a><span class='hs-definition'>deleteAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyglyph'>=</span>
<a name="line-54"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>deleteRequest</span> <span class='hs-varid'>dn</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'>deleteResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="deleteRequest"></a><span class='hs-definition'>deleteRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-57"></a><span class='hs-definition'>deleteRequest</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'>=</span>
<a name="line-58"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DeleteRequest</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-59"></a>
<a name="line-60"></a><a name="deleteResult"></a><span class='hs-definition'>deleteResult</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-61"></a><span class='hs-definition'>deleteResult</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'>DeleteResponse</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-62"></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-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-63"></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-64"></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-65"></a><span class='hs-definition'>deleteResult</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

@ -32,80 +32,83 @@
<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><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-26"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</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'>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-32"></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-33"></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-34"></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-35"></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-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>
<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="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="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="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>
<a name="line-38"></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-39"></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-40"></a>
<a name="line-41"></a>
<a name="line-42"></a><a name="Oid"></a><span class='hs-comment'>-- | Globally unique LDAP object identifier.</span>
<a name="line-43"></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-44"></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-45"></a>
<a name="line-46"></a><a name="extended"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-47"></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-48"></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-49"></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-50"></a>
<a name="line-51"></a><a name="extendedEither"></a><span class='hs-comment'>-- | Perform the Extended operation synchronously. Returns @Left e@ where</span>
<a name="line-52"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-53"></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-54"></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-55"></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-56"></a>
<a name="line-57"></a><a name="extendedAsync"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-58"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-59"></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-60"></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-61"></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-62"></a>
<a name="line-63"></a><a name="extendedAsyncSTM"></a><span class='hs-comment'>-- | Perform the Extended operation asynchronously.</span>
<a name="line-64"></a><span class='hs-comment'>--</span>
<a name="line-65"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-66"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-67"></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-68"></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-69"></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-70"></a>
<a name="line-71"></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-72"></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-73"></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-74"></a>
<a name="line-75"></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-76"></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-77"></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-78"></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-79"></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-80"></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-81"></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-82"></a>
<a name="line-83"></a>
<a name="line-84"></a><a name="startTls"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extended'.</span>
<a name="line-85"></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-86"></a><span class='hs-definition'>startTls</span> <span class='hs-keyglyph'>=</span>
<a name="line-87"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsEither</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="startTlsEither"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedEither'.</span>
<a name="line-90"></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-91"></a><span class='hs-definition'>startTlsEither</span> <span class='hs-keyglyph'>=</span>
<a name="line-92"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>&lt;=&lt;</span> <span class='hs-varid'>startTlsAsync</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="startTlsAsync"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedAsync'.</span>
<a name="line-95"></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-96"></a><span class='hs-definition'>startTlsAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-97"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>startTlsAsyncSTM</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="startTlsAsyncSTM"></a><span class='hs-comment'>-- | An example of @Extended Operation@, cf. 'extendedAsyncSTM'.</span>
<a name="line-100"></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-101"></a><span class='hs-definition'>startTlsAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-102"></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-103"></a> <span class='hs-conid'>Nothing</span>
</pre></body>
</html>

View File

@ -34,109 +34,112 @@
<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-28"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</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'>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-35"></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-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="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="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>
<a name="line-37"></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-38"></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-39"></a>
<a name="line-40"></a>
<a name="line-41"></a><a name="Operation"></a><span class='hs-comment'>-- | Type of modification being performed.</span>
<a name="line-42"></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-43"></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-44"></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-45"></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-46"></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-47"></a>
<a name="line-48"></a><a name="modify"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-49"></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-50"></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-51"></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-52"></a>
<a name="line-53"></a><a name="modifyEither"></a><span class='hs-comment'>-- | Perform the Modify 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'>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-56"></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-57"></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-58"></a>
<a name="line-59"></a><a name="modifyAsync"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-60"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-61"></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-62"></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-63"></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-64"></a>
<a name="line-65"></a><a name="modifyAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously.</span>
<a name="line-66"></a><span class='hs-comment'>--</span>
<a name="line-67"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-68"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-69"></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-70"></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-71"></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-72"></a>
<a name="line-73"></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-74"></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-75"></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-76"></a> <span class='hs-keyword'>where</span>
<a name="line-77"></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-78"></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-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'>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-81"></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-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> <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-84"></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-85"></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-86"></a>
<a name="line-87"></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-88"></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-89"></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-90"></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-91"></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-92"></a>
<a name="line-93"></a>
<a name="line-94"></a><a name="RelativeDn"></a><span class='hs-comment'>-- | A component of 'Dn'.</span>
<a name="line-95"></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-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="modifyDn"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-99"></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-100"></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-101"></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-102"></a>
<a name="line-103"></a><a name="modifyDnEither"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Returns @Left e@ where</span>
<a name="line-104"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-105"></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-106"></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-107"></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-108"></a>
<a name="line-109"></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-110"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-111"></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-112"></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-113"></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-114"></a>
<a name="line-115"></a><a name="modifyDnAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously.</span>
<a name="line-116"></a><span class='hs-comment'>--</span>
<a name="line-117"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-118"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-119"></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-120"></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-121"></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-122"></a>
<a name="line-123"></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-124"></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-125"></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-126"></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-127"></a> <span class='hs-varid'>del</span>
<a name="line-128"></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-129"></a>
<a name="line-130"></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-131"></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-132"></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-133"></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-134"></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

@ -25,207 +25,210 @@
<a name="line-16"></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'>Search</span>
<a name="line-17"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>search</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchEither</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsync</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsyncSTM</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-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-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsync</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsyncSTM</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-24"></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-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-29"></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-30"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-31"></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-32"></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-33"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-34"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-35"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-36"></a>
<a name="line-37"></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-38"></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-39"></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-40"></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-41"></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-42"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-43"></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-44"></a><span class='hs-cpp'>#else</span>
<a name="line-45"></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-46"></a><span class='hs-cpp'>#endif</span>
<a name="line-47"></a>
<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="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-48"></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-49"></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-50"></a>
<a name="line-51"></a>
<a name="line-52"></a><a name="search"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-53"></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-54"></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-55"></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-56"></a>
<a name="line-57"></a><a name="searchEither"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Returns @Left e@ where</span>
<a name="line-58"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-59"></a><span class='hs-definition'>searchEither</span>
<a name="line-60"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-61"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-62"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-63"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-64"></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-65"></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-66"></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-67"></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-68"></a>
<a name="line-69"></a><a name="searchAsync"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-70"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-71"></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-72"></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-73"></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-74"></a>
<a name="line-75"></a><a name="searchAsyncSTM"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously.</span>
<a name="line-76"></a><span class='hs-comment'>--</span>
<a name="line-77"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-78"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-79"></a><span class='hs-definition'>searchAsyncSTM</span>
<a name="line-80"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-81"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-82"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-83"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-84"></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-85"></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-86"></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-87"></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-88"></a>
<a name="line-89"></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-90"></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-91"></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-92"></a> <span class='hs-sel'>_scope</span>
<a name="line-93"></a> <span class='hs-sel'>_derefAliases</span>
<a name="line-94"></a> <span class='hs-sel'>_size</span>
<a name="line-95"></a> <span class='hs-sel'>_time</span>
<a name="line-96"></a> <span class='hs-sel'>_typesOnly</span>
<a name="line-97"></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-98"></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-99"></a> <span class='hs-keyword'>where</span>
<a name="line-100"></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-101"></a> <span class='hs-varid'>m</span> <span class='hs-varid'>defaultSearch</span>
<a name="line-102"></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-103"></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-104"></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-105"></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-106"></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-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'>:=</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'>EqualityMatch</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'>:&gt;=</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'>GreaterOrEqual</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'>:&lt;=</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'>LessOrEqual</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-varid'>y</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'>ApproxMatch</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'>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-122"></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-123"></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-124"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Substrings</span>
<a name="line-125"></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-126"></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-127"></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-128"></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-129"></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-130"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-131"></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-132"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtensibleMatch</span>
<a name="line-133"></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-134"></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-135"></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-136"></a> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-137"></a>
<a name="line-138"></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-139"></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-140"></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-141"></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-142"></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-143"></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-144"></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-145"></a> <span class='hs-keyword'>where</span>
<a name="line-146"></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-147"></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-148"></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-149"></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-150"></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-151"></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-152"></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-153"></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-154"></a>
<a name="line-155"></a><a name="Search"></a><span class='hs-comment'>-- | Search options. Use 'Mod' to change some of those.</span>
<a name="line-156"></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-157"></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-158"></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-159"></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-160"></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-161"></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-162"></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-163"></a>
<a name="line-164"></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-165"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-166"></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-167"></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-168"></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-169"></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-170"></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-171"></a> <span class='hs-layout'>}</span>
<a name="line-172"></a>
<a name="line-173"></a><a name="scope"></a><span class='hs-comment'>-- | Scope of the search (default: 'WholeSubtree').</span>
<a name="line-174"></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-175"></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-176"></a>
<a name="line-177"></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-178"></a><span class='hs-comment'>-- No limit if the value is @0@ (default: @0@).</span>
<a name="line-179"></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-180"></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-181"></a>
<a name="line-182"></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-183"></a><span class='hs-comment'>-- is @0@ (default: @0@).</span>
<a name="line-184"></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-185"></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-186"></a>
<a name="line-187"></a><a name="typesOnly"></a><span class='hs-comment'>-- | Whether Search results are to contain just attribute descriptions, or</span>
<a name="line-188"></a><span class='hs-comment'>-- both attribute descriptions and values (default: 'False').</span>
<a name="line-189"></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-190"></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-191"></a>
<a name="line-192"></a><a name="derefAliases"></a><span class='hs-comment'>-- | Alias dereference policy (default: 'NeverDerefAliases').</span>
<a name="line-193"></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-194"></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-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-196"></a><a name="Mod"></a><span class='hs-comment'>-- | Search modifier. Combine using 'Semigroup' and/or 'Monoid' instance.</span>
<a name="line-197"></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-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>
<a name="line-199"></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-200"></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-201"></a>
<a name="line-202"></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-203"></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-204"></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-205"></a>
<a name="line-206"></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-207"></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-208"></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-209"></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-210"></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-211"></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-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 is equal to 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'>:&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-214"></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-215"></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-216"></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-217"></a> <span class='hs-comment'>-- ^ Glob match</span>
<a name="line-218"></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-219"></a> <span class='hs-comment'>-- ^ Extensible match</span>
<a name="line-220"></a>
<a name="line-221"></a><a name="SearchEntry"></a><span class='hs-comment'>-- | Entry found during the Search.</span>
<a name="line-222"></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-223"></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

@ -20,257 +20,254 @@
<a name="line-11"></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-12"></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-13"></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-14"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Async</span>
<a name="line-15"></a> <span class='hs-comment'>-- * Bind</span>
<a name="line-16"></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-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bind</span>
<a name="line-18"></a> <span class='hs-comment'>-- * Search</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>search</span>
<a name="line-20"></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-21"></a> <span class='hs-comment'>-- ** Search modifiers</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-24"></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-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-29"></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-30"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-31"></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-32"></a> <span class='hs-comment'>-- * Modify</span>
<a name="line-33"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modify</span>
<a name="line-34"></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-35"></a> <span class='hs-comment'>-- * Add</span>
<a name="line-36"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>add</span>
<a name="line-37"></a> <span class='hs-comment'>-- * Delete</span>
<a name="line-38"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>delete</span>
<a name="line-39"></a> <span class='hs-comment'>-- * ModifyDn</span>
<a name="line-40"></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-41"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-42"></a> <span class='hs-comment'>-- * Compare</span>
<a name="line-43"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compare</span>
<a name="line-44"></a> <span class='hs-comment'>-- * Extended</span>
<a name="line-45"></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-46"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>extended</span>
<a name="line-47"></a> <span class='hs-comment'>-- * Waiting for completion</span>
<a name="line-48"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-49"></a> <span class='hs-comment'>-- * Miscellanous</span>
<a name="line-50"></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-51"></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-52"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-53"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</span>
<a name="line-54"></a> <span class='hs-comment'>-- * Re-exports</span>
<a name="line-55"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>NonEmpty</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-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'>-- * Miscellanous</span>
<a name="line-47"></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-48"></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-49"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-50"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrList</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-keyword'>where</span>
<a name="line-54"></a>
<a name="line-55"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 710</span>
<a name="line-56"></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-57"></a><span class='hs-cpp'>#endif</span>
<a name="line-58"></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-59"></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-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-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-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'>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-62"></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-63"></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-64"></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-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'>Encoding</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'>Error</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'>ByteString</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>ByteString</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-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-69"></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-70"></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-71"></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-72"></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-73"></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-74"></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-75"></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-76"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &lt; 710</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'>Traversable</span> <span class='hs-layout'>(</span><span class='hs-varid'>traverse</span><span class='hs-layout'>)</span>
<a name="line-78"></a><span class='hs-cpp'>#endif</span>
<a name="line-79"></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-80"></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-81"></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-82"></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-83"></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-84"></a>
<a name="line-85"></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-86"></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-87"></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-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'>Internal</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'>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-90"></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-91"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>search</span>
<a name="line-92"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-93"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-94"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-95"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-96"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-97"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-98"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-99"></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-100"></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-101"></a> <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'>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-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'>Add</span> <span class='hs-layout'>(</span><span class='hs-varid'>add</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'>Delete</span> <span class='hs-layout'>(</span><span class='hs-varid'>delete</span><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'>Compare</span> <span class='hs-layout'>(</span><span class='hs-varid'>compare</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'>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-107"></a>
<a name="line-108"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Use first" #-}</span>
<a name="line-109"></a>
<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="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-111"></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-112"></a><span class='hs-definition'>newLdap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-113"></a> <span class='hs-varop'>&lt;$&gt;</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-114"></a>
<a name="line-115"></a><a name="LdapError"></a><span class='hs-comment'>-- | Various failures that can happen when working with LDAP.</span>
<a name="line-116"></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-117"></a> <span class='hs-conid'>IOError</span> <span class='hs-conid'>IOError</span> <span class='hs-comment'>-- ^ Network failure.</span>
<a name="line-118"></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-119"></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-120"></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-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>
<a name="line-122"></a>
<a name="line-123"></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-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> <span class='hs-conid'>Typeable</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-126"></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-127"></a>
<a name="line-128"></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-129"></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-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-131"></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-132"></a>
<a name="line-133"></a><a name="with"></a><span class='hs-comment'>-- | The entrypoint into LDAP.</span>
<a name="line-134"></a><span class='hs-comment'>--</span>
<a name="line-135"></a><span class='hs-comment'>-- It catches all LDAP-related exceptions.</span>
<a name="line-136"></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-137"></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-138"></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-139"></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-140"></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-141"></a> <span class='hs-varid'>inq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-142"></a> <span class='hs-varid'>outq</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newTQueueIO</span>
<a name="line-143"></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-144"></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-145"></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-146"></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-147"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-varid'>l</span>
<a name="line-148"></a> <span class='hs-keyglyph'>]</span>
<a name="line-149"></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-150"></a> <span class='hs-varop'>`catches`</span>
<a name="line-151"></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-152"></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-153"></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-154"></a> <span class='hs-keyglyph'>]</span>
<a name="line-155"></a> <span class='hs-keyword'>where</span>
<a name="line-156"></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-157"></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-158"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-159"></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-160"></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-161"></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-162"></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-163"></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-164"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>host</span> <span class='hs-keyword'>of</span>
<a name="line-165"></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-166"></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-167"></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-168"></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-169"></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-170"></a> <span class='hs-layout'>}</span>
<a name="line-171"></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-172"></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-173"></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-174"></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-175"></a> <span class='hs-layout'>}</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'>connectionUseSocks</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-177"></a> <span class='hs-layout'>}</span>
<a name="line-178"></a>
<a name="line-179"></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-180"></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-181"></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-182"></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-183"></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-184"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-185"></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-186"></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-187"></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-188"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>loop</span> <span class='hs-varid'>chunks'</span>
<a name="line-189"></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-190"></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-191"></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-192"></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-193"></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-194"></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-195"></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-196"></a> <span class='hs-varid'>loop'</span> <span class='hs-varid'>asn1''</span>
<a name="line-197"></a> <span class='hs-varid'>loop</span> <span class='hs-conid'>[]</span>
<a name="line-198"></a>
<a name="line-199"></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-200"></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-201"></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-202"></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-203"></a> <span class='hs-keyword'>where</span>
<a name="line-204"></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-205"></a>
<a name="line-206"></a><a name="dispatch"></a><span class='hs-definition'>dispatch</span>
<a name="line-207"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-208"></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-209"></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-210"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-211"></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-212"></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-213"></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-214"></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-215"></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-216"></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-217"></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-218"></a> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readTQueue</span> <span class='hs-varid'>inq</span>
<a name="line-219"></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-220"></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-221"></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-222"></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-223"></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-224"></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-225"></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-226"></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-227"></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-228"></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-229"></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-230"></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-231"></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-232"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-233"></a> <span class='hs-keyword'>where</span>
<a name="line-234"></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-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'>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-236"></a>
<a name="line-237"></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-238"></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-239"></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-240"></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-241"></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-242"></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-243"></a>
<a name="line-244"></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-245"></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-246"></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-247"></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-248"></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-249"></a> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-250"></a> <span class='hs-varid'>moid</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-251"></a> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span>
<a name="line-252"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>moid</span> <span class='hs-keyword'>of</span>
<a name="line-253"></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-254"></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-255"></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-256"></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-257"></a>
<a name="line-258"></a> <span class='hs-varid'>noticeOfDisconnection</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span>
<a name="line-259"></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-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>
<a name="line-261"></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-262"></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>