Update haddock documentation

This commit is contained in:
Matvey Aksenov 2015-04-08 20:14:53 +00:00
parent b1ce3be2ee
commit 642ff92e4f
37 changed files with 2206 additions and 1849 deletions

View File

@ -1,17 +1,17 @@
<!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="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:FromAsn1" class="def">FromAsn1</a> a <span class="keyword">where</span> <a href="src/Ldap-Asn1-FromAsn1.html#FromAsn1" class="link">Source</a></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:fromAsn1" class="def">fromAsn1</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> [ASN1] a <a href="src/Ldap-Asn1-FromAsn1.html#fromAsn1" class="link">Source</a></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-84" 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-72" 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-260" 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-248" class="link">Source</a></td><td class="doc"><pre>Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapDn">LdapDn</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-94" class="link">Source</a></td><td class="doc"><pre>LDAPDN ::= 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:PartialAttribute">PartialAttribute</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-122" class="link">Source</a></td><td class="doc"><pre>PartialAttribute ::= SEQUENCE {
</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;
</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
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:LdapDn">LdapDn</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-101" class="link">Source</a></td><td class="doc"><pre>LDAPDN ::= 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:PartialAttribute">PartialAttribute</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-129" class="link">Source</a></td><td class="doc"><pre>PartialAttribute ::= SEQUENCE {
type AttributeDescription,
vals SET OF value AttributeValue }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValue">AttributeValue</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-110" class="link">Source</a></td><td class="doc"><pre>AttributeValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeDescription">AttributeDescription</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-102" class="link">Source</a></td><td class="doc"><pre>AttributeDescription ::= 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:LdapResult">LdapResult</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-188" class="link">Source</a></td><td class="doc"><pre>LDAPResult ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValue">AttributeValue</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-117" class="link">Source</a></td><td class="doc"><pre>AttributeValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeDescription">AttributeDescription</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-109" class="link">Source</a></td><td class="doc"><pre>AttributeDescription ::= 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:LdapResult">LdapResult</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-195" class="link">Source</a></td><td class="doc"><pre>LDAPResult ::= SEQUENCE {
resultCode ENUMERATED {
success (0),
operationsError (1),
@ -63,20 +63,30 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Asn1-FromAsn1.htm
matchedDN LDAPDN,
diagnosticMessage LDAPString,
referral [3] Referral OPTIONAL }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:PartialAttributeList">PartialAttributeList</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-332" class="link">Source</a></td><td class="doc"><pre>PartialAttributeList ::= SEQUENCE OF partialAttribute PartialAttribute
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:ProtocolServerOp">ProtocolServerOp</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-296" class="link">Source</a></td><td class="doc"><pre>BindResponse ::= [APPLICATION 1] SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:PartialAttributeList">PartialAttributeList</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-380" class="link">Source</a></td><td class="doc"><pre>PartialAttributeList ::= SEQUENCE OF partialAttribute PartialAttribute
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:ProtocolServerOp">ProtocolServerOp</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-325" class="link">Source</a></td><td class="doc"><pre>BindResponse ::= [APPLICATION 1] SEQUENCE {
COMPONENTS OF LDAPResult,
serverSaslCreds [7] OCTET STRING OPTIONAL }
</pre><pre>SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
objectName LDAPDN,
attributes PartialAttributeList }
</pre><pre>SearchResultReference ::= [APPLICATION 19] SEQUENCE
SIZE (1..MAX) OF uri URI
</pre><pre>SearchResultDone ::= [APPLICATION 5] LDAPResult
</pre><pre>ModifyResponse ::= [APPLICATION 7] LDAPResult
</pre><pre>AddResponse ::= [APPLICATION 9] LDAPResult
</pre><pre>DelResponse ::= [APPLICATION 11] LDAPResult
</pre><pre>ModifyDNResponse ::= [APPLICATION 13] LDAPResult
</pre><pre>CompareResponse ::= [APPLICATION 15] LDAPResult
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:Id">Id</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-62" class="link">Source</a></td><td class="doc"><pre>MessageID ::= INTEGER (0 .. maxInt)
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> op =&gt; <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> (<a href="Ldap-Asn1-Type.html#t:LdapMessage">LdapMessage</a> op) <a href="src/Ldap-Asn1-FromAsn1.html#line-49" class="link">Source</a></td><td class="doc"><pre>LDAPMessage ::= SEQUENCE {
</pre><pre>ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
COMPONENTS OF LDAPResult,
responseName [10] LDAPOID OPTIONAL,
responseValue [11] OCTET STRING OPTIONAL }
</pre><pre>IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
responseName [0] LDAPOID OPTIONAL,
responseValue [1] OCTET STRING OPTIONAL }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> <a href="Ldap-Asn1-Type.html#t:Id">Id</a> <a href="src/Ldap-Asn1-FromAsn1.html#line-67" class="link">Source</a></td><td class="doc"><pre>MessageID ::= INTEGER (0 .. maxInt)
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> op =&gt; <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> (<a href="Ldap-Asn1-Type.html#t:LdapMessage">LdapMessage</a> op) <a href="src/Ldap-Asn1-FromAsn1.html#line-54" class="link">Source</a></td><td class="doc"><pre>LDAPMessage ::= SEQUENCE {
messageID MessageID,
protocolOp CHOICE {
bindRequest BindRequest,
@ -90,4 +100,4 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Asn1-FromAsn1.htm
addResponse AddResponse,
... },
controls [0] Controls OPTIONAL }
</pre></td></tr><tr><td class="src">(<a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a, <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> b) =&gt; <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> (a, b) <a href="src/Ldap-Asn1-FromAsn1.html#line-339" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Parser" class="def">Parser</a> s a <a href="src/Ldap-Asn1-FromAsn1.html#Parser" class="link">Source</a></p><div class="subs instances"><p id="control.i:Parser" class="caption collapser" onclick="toggleSection('i:Parser')">Instances</p><div id="section.i:Parser" class="show"><table><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Control-Monad.html#t:Monad">Monad</a> (<a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s) <a href="src/Ldap-Asn1-FromAsn1.html#line-360" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Data-Functor.html#t:Functor">Functor</a> (<a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s) <a href="src/Ldap-Asn1-FromAsn1.html#line-345" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Control-Applicative.html#t:Applicative">Applicative</a> (<a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s) <a href="src/Ldap-Asn1-FromAsn1.html#line-348" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Control-Applicative.html#t:Alternative">Alternative</a> (<a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s) <a href="src/Ldap-Asn1-FromAsn1.html#line-355" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="http://hackage.haskell.org/package/base/docs/Control-Monad.html#t:MonadPlus">MonadPlus</a> (<a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s) <a href="src/Ldap-Asn1-FromAsn1.html#line-366" 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: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><div class="top"><p class="src"><a name="v:parse" class="def">parse</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> s a -&gt; s -&gt; <a href="http://hackage.haskell.org/package/base/docs/Data-Maybe.html#t:Maybe">Maybe</a> (s, a) <a href="src/Ldap-Asn1-FromAsn1.html#parse" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:next" class="def">next</a> :: <a href="Ldap-Asn1-FromAsn1.html#t:Parser">Parser</a> [s] s <a href="src/Ldap-Asn1-FromAsn1.html#next" class="link">Source</a></p></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>
</pre></td></tr><tr><td class="src">(<a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> a, <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> b) =&gt; <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">FromAsn1</a> (a, b) <a href="src/Ldap-Asn1-FromAsn1.html#line-387" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr></table></div></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>

View File

@ -1,43 +1,46 @@
<!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.ToAsn1</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-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="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="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-64" 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-56" 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-80" 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-72" class="link">Source</a></td><td class="doc"><pre>LDAPDN ::= LDAPString -- Constrained to &lt;distinguishedName&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:PartialAttribute">PartialAttribute</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-125" class="link">Source</a></td><td class="doc"><pre>PartialAttribute ::= SEQUENCE {
</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;
</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;
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:PartialAttribute">PartialAttribute</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-134" class="link">Source</a></td><td class="doc"><pre>PartialAttribute ::= SEQUENCE {
type AttributeDescription,
vals SET OF value AttributeValue }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Attribute">Attribute</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-135" class="link">Source</a></td><td class="doc"><pre>Attribute ::= PartialAttribute(WITH COMPONENTS {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Attribute">Attribute</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-144" class="link">Source</a></td><td class="doc"><pre>Attribute ::= PartialAttribute(WITH COMPONENTS {
...,
vals (SIZE(1..MAX))})
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AssertionValue">AssertionValue</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-114" class="link">Source</a></td><td class="doc"><pre>AssertionValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValueAssertion">AttributeValueAssertion</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-106" class="link">Source</a></td><td class="doc"><pre>AttributeValueAssertion ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AssertionValue">AssertionValue</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-123" class="link">Source</a></td><td class="doc"><pre>AssertionValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValueAssertion">AttributeValueAssertion</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-115" class="link">Source</a></td><td class="doc"><pre>AttributeValueAssertion ::= SEQUENCE {
attributeDesc AttributeDescription,
assertionValue AssertionValue }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValue">AttributeValue</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-96" class="link">Source</a></td><td class="doc"><pre>AttributeValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeDescription">AttributeDescription</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-88" class="link">Source</a></td><td class="doc"><pre>AttributeDescription ::= LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Control">Control</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-162" class="link">Source</a></td><td class="doc"><pre>Control ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeValue">AttributeValue</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-105" class="link">Source</a></td><td class="doc"><pre>AttributeValue ::= OCTET STRING
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeDescription">AttributeDescription</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-97" class="link">Source</a></td><td class="doc"><pre>AttributeDescription ::= LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Control">Control</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-171" class="link">Source</a></td><td class="doc"><pre>Control ::= SEQUENCE {
controlType LDAPOID,
criticality BOOLEAN DEFAULT FALSE,
controlValue OCTET STRING OPTIONAL }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Controls">Controls</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-151" class="link">Source</a></td><td class="doc"><pre>Controls ::= SEQUENCE OF control Control
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeList">AttributeList</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-387" class="link">Source</a></td><td class="doc"><pre>AttributeList ::= SEQUENCE OF attribute Attribute
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeSelection">AttributeSelection</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-314" class="link">Source</a></td><td class="doc"><pre>AttributeSelection ::= SEQUENCE OF selector LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:MatchingRuleId">MatchingRuleId</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-143" class="link">Source</a></td><td class="doc"><pre>MatchingRuleId ::= LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:MatchingRuleAssertion">MatchingRuleAssertion</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-374" class="link">Source</a></td><td class="doc"><pre>MatchingRuleAssertion ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Controls">Controls</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-160" class="link">Source</a></td><td class="doc"><pre>Controls ::= SEQUENCE OF control Control
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeList">AttributeList</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-398" class="link">Source</a></td><td class="doc"><pre>AttributeList ::= SEQUENCE OF attribute Attribute
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AttributeSelection">AttributeSelection</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-323" class="link">Source</a></td><td class="doc"><pre>AttributeSelection ::= SEQUENCE OF selector LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:MatchingRuleId">MatchingRuleId</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-152" class="link">Source</a></td><td class="doc"><pre>MatchingRuleId ::= LDAPString
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:MatchingRuleAssertion">MatchingRuleAssertion</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-383" class="link">Source</a></td><td class="doc"><pre>MatchingRuleAssertion ::= SEQUENCE {
matchingRule [1] MatchingRuleId OPTIONAL,
type [2] AttributeDescription OPTIONAL,
matchValue [3] AssertionValue,
dnAttributes [4] BOOLEAN DEFAULT FALSE }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:SubstringFilter">SubstringFilter</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-358" class="link">Source</a></td><td class="doc"><pre>SubstringFilter ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:SubstringFilter">SubstringFilter</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-367" class="link">Source</a></td><td class="doc"><pre>SubstringFilter ::= SEQUENCE {
type AttributeDescription,
substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
initial [0] AssertionValue, -- can occur at most once
any [1] AssertionValue,
final [2] AssertionValue } -- can occur at most once
}
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Filter">Filter</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-333" class="link">Source</a></td><td class="doc"><pre>Filter ::= CHOICE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Filter">Filter</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-342" class="link">Source</a></td><td class="doc"><pre>Filter ::= CHOICE {
and [0] SET SIZE (1..MAX) OF filter Filter,
or [1] SET SIZE (1..MAX) OF filter Filter,
not [2] Filter,
@ -49,10 +52,10 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Asn1-ToAsn1.html"
approxMatch [8] AttributeValueAssertion,
extensibleMatch [9] MatchingRuleAssertion,
... }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AuthenticationChoice">AuthenticationChoice</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-306" class="link">Source</a></td><td class="doc"><pre>AuthenticationChoice ::= CHOICE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:AuthenticationChoice">AuthenticationChoice</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-315" class="link">Source</a></td><td class="doc"><pre>AuthenticationChoice ::= CHOICE {
simple [0] OCTET STRING,
... }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:ProtocolClientOp">ProtocolClientOp</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-244" class="link">Source</a></td><td class="doc"><pre>BindRequest ::= [APPLICATION 0] SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:ProtocolClientOp">ProtocolClientOp</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-253" class="link">Source</a></td><td class="doc"><pre>BindRequest ::= [APPLICATION 0] SEQUENCE {
version INTEGER (1 .. 127),
name LDAPDN,
authentication AuthenticationChoice }
@ -98,8 +101,8 @@ window.onload = function () {pageLoad();setSynopsis("mini_Ldap-Asn1-ToAsn1.html"
</pre><pre>ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
requestName [0] LDAPOID,
requestValue [1] OCTET STRING OPTIONAL }
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Id">Id</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-48" class="link">Source</a></td><td class="doc"><pre>MessageID ::= INTEGER (0 .. maxInt)
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> a =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> [a] <a href="src/Ldap-Asn1-ToAsn1.html#line-390" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> a =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> (<a href="Ldap-Client.html#t:NonEmpty">NonEmpty</a> a) <a href="src/Ldap-Asn1-ToAsn1.html#line-393" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> op =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> (<a href="Ldap-Asn1-Type.html#t:LdapMessage">LdapMessage</a> op) <a href="src/Ldap-Asn1-ToAsn1.html#line-39" class="link">Source</a></td><td class="doc"><pre>LDAPMessage ::= SEQUENCE {
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> <a href="Ldap-Asn1-Type.html#t:Id">Id</a> <a href="src/Ldap-Asn1-ToAsn1.html#line-57" class="link">Source</a></td><td class="doc"><pre>MessageID ::= INTEGER (0 .. maxInt)
</pre></td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> a =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> [a] <a href="src/Ldap-Asn1-ToAsn1.html#line-401" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> a =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> (<a href="Ldap-Client.html#t:NonEmpty">NonEmpty</a> a) <a href="src/Ldap-Asn1-ToAsn1.html#line-404" class="link">Source</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> op =&gt; <a href="Ldap-Asn1-ToAsn1.html#t:ToAsn1">ToAsn1</a> (<a href="Ldap-Asn1-Type.html#t:LdapMessage">LdapMessage</a> op) <a href="src/Ldap-Asn1-ToAsn1.html#line-48" class="link">Source</a></td><td class="doc"><pre>LDAPMessage ::= SEQUENCE {
messageID MessageID,
protocolOp CHOICE {
bindRequest BindRequest,

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,8 @@
<!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();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="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="http://hackage.haskell.org/package/bytestring/docs/Data-ByteString.html#t:ByteString">ByteString</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><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="http://hackage.haskell.org/package/bytestring/docs/Data-ByteString.html#t:ByteString">ByteString</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><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="http://hackage.haskell.org/package/bytestring/docs/Data-ByteString.html#t:ByteString">ByteString</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><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="http://hackage.haskell.org/package/bytestring/docs/Data-ByteString.html#t:ByteString">ByteString</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></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="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>

View File

@ -1,4 +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.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();setSynopsis("mini_Ldap-Client-Delete.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Client-Delete.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.Delete</p></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:delete" class="def">delete</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="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> () <a href="src/Ldap-Client-Delete.html#delete" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:deleteEither" class="def">deleteEither</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="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="src/Ldap-Client-Delete.html#deleteEither" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:deleteAsync" class="def">deleteAsync</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="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="src/Ldap-Client-Delete.html#deleteAsync" class="link">Source</a></p></div><div class="top"><p class="src"><a name="v:deleteAsyncSTM" class="def">deleteAsyncSTM</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="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="src/Ldap-Client-Delete.html#deleteAsyncSTM" class="link">Source</a></p></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>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Ldap-Client-Delete.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.Delete</p></div><div id="description"><p class="caption">Description</p><div class="doc"><p><a href="https://tools.ietf.org/html/rfc4511#section-4.8">Delete</a> operation.</p><p>This operation comes in four flavours:</p><ul><li>synchronous, exception throwing (<code><a href="Ldap-Client-Delete.html#v:delete">delete</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-Delete.html#v:deleteEither">deleteEither</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-Delete.html#v:deleteAsync">deleteAsync</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-Delete.html#v:deleteAsyncSTM">deleteAsyncSTM</a></code>)</li></ul><p>Of those, the first one (<code><a href="Ldap-Client-Delete.html#v:delete">delete</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:delete">delete</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="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:deleteEither">deleteEither</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="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> ())</li><li class="src short"><a href="#v:deleteAsync">deleteAsync</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="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> ())</li><li class="src short"><a href="#v:deleteAsyncSTM">deleteAsyncSTM</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="http://hackage.haskell.org/package/base/docs/GHC-Conc.html#t:STM">STM</a> (<a href="Ldap-Client-Internal.html#t:Async">Async</a> ())</li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><a name="v:delete" class="def">delete</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="http://hackage.haskell.org/package/base/docs/System-IO.html#t:IO">IO</a> () <a href="src/Ldap-Client-Delete.html#delete" class="link">Source</a></p><div class="doc"><p>Perform the Delete 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:deleteEither" class="def">deleteEither</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="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="src/Ldap-Client-Delete.html#deleteEither" class="link">Source</a></p><div class="doc"><p>Perform the Delete 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:deleteAsync" class="def">deleteAsync</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="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="src/Ldap-Client-Delete.html#deleteAsync" class="link">Source</a></p><div class="doc"><p>Perform the Delete 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:deleteAsyncSTM" class="def">deleteAsyncSTM</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="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="src/Ldap-Client-Delete.html#deleteAsyncSTM" class="link">Source</a></p><div class="doc"><p>Perform the Delete 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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

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

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 - F)</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 - F</p><table><tr><td class="src">Filter</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Filter">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Ldap-Client-Search.html#t:Filter">Ldap.Client.Search</a>, <a href="Ldap-Client.html#t:Filter">Ldap.Client</a></td></tr><tr><td class="src">Final</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Final">Ldap.Asn1.Type</a></td></tr><tr><td class="src">FromAsn1</td><td class="module"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">Ldap.Asn1.FromAsn1</a></td></tr><tr><td class="src">fromAsn1</td><td class="module"><a href="Ldap-Asn1-FromAsn1.html#v:fromAsn1">Ldap.Asn1.FromAsn1</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 - F</p><table><tr><td class="src">Filter</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Filter">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Type/Class)</td><td class="module"><a href="Ldap-Client-Search.html#t:Filter">Ldap.Client.Search</a>, <a href="Ldap-Client.html#t:Filter">Ldap.Client</a></td></tr><tr><td class="src">Final</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Final">Ldap.Asn1.Type</a></td></tr><tr><td class="src">FromAsn1</td><td class="module"><a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1">Ldap.Asn1.FromAsn1</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ldap-client-0.1.0: Pure Haskell LDAP Client Library (Index - I)</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 - I</p><table><tr><td class="src">Id</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Id">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Id">Ldap.Asn1.Type</a></td></tr><tr><td class="src">InappropriateAuthentication</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InappropriateAuthentication">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InappropriateAuthentication">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InappropriateAuthentication">Ldap.Client</a></td></tr><tr><td class="src">InappropriateMatching</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InappropriateMatching">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InappropriateMatching">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InappropriateMatching">Ldap.Client</a></td></tr><tr><td class="src">Initial</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Initial">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Insecure</td><td class="module"><a href="Ldap-Client-Internal.html#v:Insecure">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Insecure">Ldap.Client</a></td></tr><tr><td class="src">InsufficientAccessRights</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InsufficientAccessRights">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InsufficientAccessRights">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InsufficientAccessRights">Ldap.Client</a></td></tr><tr><td class="src">InvalidAttributeSyntax</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidAttributeSyntax">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidAttributeSyntax">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidAttributeSyntax">Ldap.Client</a></td></tr><tr><td class="src">InvalidCredentials</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidCredentials">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidCredentials">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidCredentials">Ldap.Client</a></td></tr><tr><td class="src">InvalidDNSyntax</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidDNSyntax">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidDNSyntax">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidDNSyntax">Ldap.Client</a></td></tr><tr><td class="src">IOError</td><td class="module"><a href="Ldap-Client.html#v:IOError">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 - I</p><table><tr><td class="src">Id</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Id">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Id">Ldap.Asn1.Type</a></td></tr><tr><td class="src">InappropriateAuthentication</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InappropriateAuthentication">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InappropriateAuthentication">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InappropriateAuthentication">Ldap.Client</a></td></tr><tr><td class="src">InappropriateMatching</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InappropriateMatching">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InappropriateMatching">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InappropriateMatching">Ldap.Client</a></td></tr><tr><td class="src">Initial</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Initial">Ldap.Asn1.Type</a></td></tr><tr><td class="src">Insecure</td><td class="module"><a href="Ldap-Client-Internal.html#v:Insecure">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Insecure">Ldap.Client</a></td></tr><tr><td class="src">InsufficientAccessRights</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InsufficientAccessRights">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InsufficientAccessRights">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InsufficientAccessRights">Ldap.Client</a></td></tr><tr><td class="src">IntermediateResponse</td><td class="module"><a href="Ldap-Asn1-Type.html#v:IntermediateResponse">Ldap.Asn1.Type</a></td></tr><tr><td class="src">InvalidAttributeSyntax</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidAttributeSyntax">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidAttributeSyntax">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidAttributeSyntax">Ldap.Client</a></td></tr><tr><td class="src">InvalidCredentials</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidCredentials">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidCredentials">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidCredentials">Ldap.Client</a></td></tr><tr><td class="src">InvalidDNSyntax</td><td class="module"><a href="Ldap-Asn1-Type.html#v:InvalidDNSyntax">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:InvalidDNSyntax">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:InvalidDNSyntax">Ldap.Client</a></td></tr><tr><td class="src">IOError</td><td class="module"><a href="Ldap-Client.html#v:IOError">Ldap.Client</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

View File

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

View File

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

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 - U)</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 - U</p><table><tr><td class="src">unAttr</td><td class="module"><a href="Ldap-Client-Internal.html#v:unAttr">Ldap.Client.Internal</a></td></tr><tr><td class="src">Unavailable</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Unavailable">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Unavailable">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Unavailable">Ldap.Client</a></td></tr><tr><td class="src">UnavailableCriticalExtension</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnavailableCriticalExtension">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UnavailableCriticalExtension">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UnavailableCriticalExtension">Ldap.Client</a></td></tr><tr><td class="src">unbindAsync</td><td class="module"><a href="Ldap-Client-Bind.html#v:unbindAsync">Ldap.Client.Bind</a></td></tr><tr><td class="src">unbindAsyncSTM</td><td class="module"><a href="Ldap-Client-Bind.html#v:unbindAsyncSTM">Ldap.Client.Bind</a></td></tr><tr><td class="src">UnbindRequest</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnbindRequest">Ldap.Asn1.Type</a></td></tr><tr><td class="src">UndefinedAttributeType</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UndefinedAttributeType">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UndefinedAttributeType">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UndefinedAttributeType">Ldap.Client</a></td></tr><tr><td class="src">unId</td><td class="module"><a href="Ldap-Asn1-Type.html#v:unId">Ldap.Asn1.Type</a></td></tr><tr><td class="src">UnwillingToPerform</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnwillingToPerform">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UnwillingToPerform">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UnwillingToPerform">Ldap.Client</a></td></tr><tr><td class="src">Uri</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Uri">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Uri">Ldap.Asn1.Type</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ldap-client-0.1.0: Pure Haskell LDAP Client Library</p></div><div id="content"><div id="alphabet"><ul><li><a href="doc-index-A.html">A</a></li><li><a href="doc-index-B.html">B</a></li><li><a href="doc-index-C.html">C</a></li><li><a href="doc-index-D.html">D</a></li><li><a href="doc-index-E.html">E</a></li><li><a href="doc-index-F.html">F</a></li><li><a href="doc-index-G.html">G</a></li><li><a href="doc-index-H.html">H</a></li><li><a href="doc-index-I.html">I</a></li><li><a href="doc-index-L.html">L</a></li><li><a href="doc-index-M.html">M</a></li><li><a href="doc-index-N.html">N</a></li><li><a href="doc-index-O.html">O</a></li><li><a href="doc-index-P.html">P</a></li><li><a href="doc-index-R.html">R</a></li><li><a href="doc-index-S.html">S</a></li><li><a href="doc-index-T.html">T</a></li><li><a href="doc-index-U.html">U</a></li><li><a href="doc-index-W.html">W</a></li><li><a href="doc-index-58.html">:</a></li><li><a href="doc-index-All.html">All</a></li></ul></div><div id="index"><p class="caption">Index - U</p><table><tr><td class="src">unAttr</td><td class="module"><a href="Ldap-Client-Internal.html#v:unAttr">Ldap.Client.Internal</a></td></tr><tr><td class="src">Unavailable</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Unavailable">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:Unavailable">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:Unavailable">Ldap.Client</a></td></tr><tr><td class="src">UnavailableCriticalExtension</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnavailableCriticalExtension">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UnavailableCriticalExtension">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UnavailableCriticalExtension">Ldap.Client</a></td></tr><tr><td class="src">unbindAsync</td><td class="module"><a href="Ldap-Client-Internal.html#v:unbindAsync">Ldap.Client.Internal</a></td></tr><tr><td class="src">unbindAsyncSTM</td><td class="module"><a href="Ldap-Client-Internal.html#v:unbindAsyncSTM">Ldap.Client.Internal</a></td></tr><tr><td class="src">UnbindRequest</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnbindRequest">Ldap.Asn1.Type</a></td></tr><tr><td class="src">UndefinedAttributeType</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UndefinedAttributeType">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UndefinedAttributeType">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UndefinedAttributeType">Ldap.Client</a></td></tr><tr><td class="src">unId</td><td class="module"><a href="Ldap-Asn1-Type.html#v:unId">Ldap.Asn1.Type</a></td></tr><tr><td class="src">UnwillingToPerform</td><td class="module"><a href="Ldap-Asn1-Type.html#v:UnwillingToPerform">Ldap.Asn1.Type</a>, <a href="Ldap-Client-Internal.html#v:UnwillingToPerform">Ldap.Client.Internal</a>, <a href="Ldap-Client.html#v:UnwillingToPerform">Ldap.Client</a></td></tr><tr><td class="src">Uri</td><td>&nbsp;</td></tr><tr><td class="alt">1 (Type/Class)</td><td class="module"><a href="Ldap-Asn1-Type.html#t:Uri">Ldap.Asn1.Type</a></td></tr><tr><td class="alt">2 (Data Constructor)</td><td class="module"><a href="Ldap-Asn1-Type.html#v:Uri">Ldap.Asn1.Type</a></td></tr></table></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.16.0</p></div></body></html>

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.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();};
//]]>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Asn1.FromAsn1</p></div><div id="interface"><div class="top"><p class="src"><span class="keyword">class</span> <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1" target="main">FromAsn1</a> a</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a href="Ldap-Asn1-FromAsn1.html#t:Parser" target="main">Parser</a> s a</p></div><div class="top"><p class="src"><a href="Ldap-Asn1-FromAsn1.html#v:parseAsn1" target="main">parseAsn1</a></p></div><div class="top"><p class="src"><a href="Ldap-Asn1-FromAsn1.html#v:parse" target="main">parse</a></p></div><div class="top"><p class="src"><a href="Ldap-Asn1-FromAsn1.html#v:next" target="main">next</a></p></div></div></body></html>
</script></head><body id="mini"><div id="module-header"><p class="caption">Ldap.Asn1.FromAsn1</p></div><div id="interface"><div class="top"><p class="src"><a href="Ldap-Asn1-FromAsn1.html#v:parseAsn1" target="main">parseAsn1</a></p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Ldap-Asn1-FromAsn1.html#t:FromAsn1" target="main">FromAsn1</a> 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"><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 class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:unbindAsync" target="main">unbindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:unbindAsyncSTM" target="main">unbindAsyncSTM</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"><a href="Ldap-Client-Bind.html#v:bind" target="main">bind</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindEither" target="main">bindEither</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsync" target="main">bindAsync</a></p></div><div class="top"><p class="src"><a href="Ldap-Client-Bind.html#v:bindAsyncSTM" target="main">bindAsyncSTM</a></p></div></div></body></html>

View File

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

View File

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

View File

@ -8,382 +8,427 @@
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-keyword'>module</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>
<a name="line-3"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>FromAsn1</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Parser</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>parseAsn1</span>
<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>parse</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>next</span>
<a name="line-8"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-9"></a>
<a name="line-10"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-11"></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-conid'>Alternative</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'>liftA2</span><span class='hs-layout'>,</span> <span class='hs-varid'>optional</span><span class='hs-layout'>)</span>
<a name="line-12"></a><span class='hs-cpp'>#else</span>
<a name="line-13"></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-conid'>Applicative</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'>Alternative</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'>liftA2</span><span class='hs-layout'>,</span> <span class='hs-varid'>optional</span><span class='hs-layout'>)</span>
<a name="line-14"></a><span class='hs-cpp'>#endif</span>
<a name="line-15"></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-conid'>MonadPlus</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&gt;=&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>guard</span><span class='hs-layout'>)</span>
<a name="line-16"></a><span class='hs-keyword'>import</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'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>ASN1</span><span class='hs-layout'>)</span>
<a name="line-17"></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'>Types</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-18"></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-19"></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-varid'>some1</span><span class='hs-layout'>)</span>
<a name="line-20"></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'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Text</span>
<a name="line-2"></a><span class='hs-comment'>-- | This module contains convertions from ASN.1 to LDAP types.</span>
<a name="line-3"></a><span class='hs-keyword'>module</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>
<a name="line-4"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>parseAsn1</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>FromAsn1</span>
<a name="line-6"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-7"></a>
<a name="line-8"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-9"></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-conid'>Alternative</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'>liftA2</span><span class='hs-layout'>,</span> <span class='hs-varid'>optional</span><span class='hs-layout'>)</span>
<a name="line-10"></a><span class='hs-cpp'>#else</span>
<a name="line-11"></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-conid'>Applicative</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'>Alternative</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'>liftA2</span><span class='hs-layout'>,</span> <span class='hs-varid'>optional</span><span class='hs-layout'>)</span>
<a name="line-12"></a><span class='hs-cpp'>#endif</span>
<a name="line-13"></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-conid'>MonadPlus</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&gt;=&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>guard</span><span class='hs-layout'>)</span>
<a name="line-14"></a><span class='hs-keyword'>import</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'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>ASN1</span><span class='hs-layout'>)</span>
<a name="line-15"></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'>Types</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-16"></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-17"></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-varid'>some1</span><span class='hs-layout'>)</span>
<a name="line-18"></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'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Text</span>
<a name="line-19"></a>
<a name="line-20"></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'>Type</span>
<a name="line-21"></a>
<a name="line-22"></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'>Type</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Use const" #-}</span>
<a name="line-25"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Avoid lambda" #-}</span>
<a name="line-26"></a>
<a name="line-27"></a>
<a name="line-28"></a><a name="FromAsn1"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-29"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>a</span>
<a name="line-30"></a>
<a name="line-31"></a><a name="instance%20FromAsn1%20(LdapMessage%20op)"></a><span class='hs-comment'>{- |
<a name="line-32"></a>@
<a name="line-33"></a>LDAPMessage ::= SEQUENCE {
<a name="line-34"></a> messageID MessageID,
<a name="line-35"></a> protocolOp CHOICE {
<a name="line-36"></a> bindRequest BindRequest,
<a name="line-37"></a> bindResponse BindResponse,
<a name="line-38"></a> unbindRequest UnbindRequest,
<a name="line-39"></a> searchRequest SearchRequest,
<a name="line-40"></a> searchResEntry SearchResultEntry,
<a name="line-41"></a> searchResDone SearchResultDone,
<a name="line-42"></a> searchResRef SearchResultReference,
<a name="line-43"></a> addRequest AddRequest,
<a name="line-44"></a> addResponse AddResponse,
<a name="line-45"></a> ... },
<a name="line-46"></a> controls [0] Controls OPTIONAL }
<a name="line-47"></a>@
<a name="line-48"></a>-}</span>
<a name="line-49"></a><a name="instance%20FromAsn1%20(LdapMessage%20op)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-50"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-51"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-52"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-53"></a> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-54"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-55"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>i</span> <span class='hs-varid'>op</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-56"></a>
<a name="line-57"></a><a name="instance%20FromAsn1%20Id"></a><span class='hs-comment'>{- |
<a name="line-58"></a>@
<a name="line-59"></a>MessageID ::= INTEGER (0 .. maxInt)
<a name="line-60"></a>@
<a name="line-61"></a>-}</span>
<a name="line-62"></a><a name="instance%20FromAsn1%20Id"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>Id</span> <span class='hs-keyword'>where</span>
<a name="line-63"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-64"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-65"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Id</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="instance%20FromAsn1%20LdapString"></a><span class='hs-comment'>{- |
<a name="line-68"></a>@
<a name="line-69"></a>LDAPString ::= OCTET STRING -- UTF-8 encoded,
<a name="line-70"></a>@
<a name="line-71"></a>-}</span>
<a name="line-72"></a><a name="instance%20FromAsn1%20LdapString"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyword'>where</span>
<a name="line-73"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-74"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-75"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeUtf8'</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-76"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span>
<a name="line-77"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="instance%20FromAsn1%20LdapOid"></a><span class='hs-comment'>{- |
<a name="line-80"></a>@
<a name="line-81"></a>LDAPOID ::= OCTET STRING -- Constrained to \&lt;numericoid\&gt;
<a name="line-82"></a>@
<a name="line-83"></a>-}</span>
<a name="line-84"></a><a name="instance%20FromAsn1%20LdapOid"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyword'>where</span>
<a name="line-85"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-86"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-87"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="instance%20FromAsn1%20LdapDn"></a><span class='hs-comment'>{- |
<a name="line-90"></a>@
<a name="line-91"></a>LDAPDN ::= LDAPString
<a name="line-92"></a>@
<a name="line-93"></a>-}</span>
<a name="line-94"></a><a name="instance%20FromAsn1%20LdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-95"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>LdapDn</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-96"></a>
<a name="line-97"></a><a name="instance%20FromAsn1%20AttributeDescription"></a><span class='hs-comment'>{- |
<a name="line-98"></a>@
<a name="line-99"></a>AttributeDescription ::= LDAPString
<a name="line-100"></a>@
<a name="line-101"></a>-}</span>
<a name="line-102"></a><a name="instance%20FromAsn1%20AttributeDescription"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyword'>where</span>
<a name="line-103"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-104"></a>
<a name="line-105"></a><a name="instance%20FromAsn1%20AttributeValue"></a><span class='hs-comment'>{- |
<a name="line-106"></a>@
<a name="line-107"></a>AttributeValue ::= OCTET STRING
<a name="line-108"></a>@
<a name="line-109"></a>-}</span>
<a name="line-110"></a><a name="instance%20FromAsn1%20AttributeValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyword'>where</span>
<a name="line-111"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-112"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-113"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-114"></a>
<a name="line-115"></a><a name="instance%20FromAsn1%20PartialAttribute"></a><span class='hs-comment'>{- |
<a name="line-116"></a>@
<a name="line-117"></a>PartialAttribute ::= SEQUENCE {
<a name="line-118"></a> type AttributeDescription,
<a name="line-119"></a> vals SET OF value AttributeValue }
<a name="line-120"></a>@
<a name="line-121"></a>-}</span>
<a name="line-122"></a><a name="instance%20FromAsn1%20PartialAttribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyword'>where</span>
<a name="line-123"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-124"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-125"></a> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-126"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-127"></a> <span class='hs-varid'>vs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>many</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-128"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-129"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-130"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span>
<a name="line-131"></a>
<a name="line-132"></a><a name="instance%20FromAsn1%20LdapResult"></a><span class='hs-comment'>{- |
<a name="line-133"></a>@
<a name="line-134"></a>LDAPResult ::= SEQUENCE {
<a name="line-135"></a> resultCode ENUMERATED {
<a name="line-136"></a> success (0),
<a name="line-137"></a> operationsError (1),
<a name="line-138"></a> protocolError (2),
<a name="line-139"></a> timeLimitExceeded (3),
<a name="line-140"></a> sizeLimitExceeded (4),
<a name="line-141"></a> compareFalse (5),
<a name="line-142"></a> compareTrue (6),
<a name="line-143"></a> authMethodNotSupported (7),
<a name="line-144"></a> strongerAuthRequired (8),
<a name="line-145"></a> -- 9 reserved --
<a name="line-146"></a> referral (10),
<a name="line-147"></a> adminLimitExceeded (11),
<a name="line-148"></a> unavailableCriticalExtension (12),
<a name="line-149"></a> confidentialityRequired (13),
<a name="line-150"></a> saslBindInProgress (14),
<a name="line-151"></a> noSuchAttribute (16),
<a name="line-152"></a> undefinedAttributeType (17),
<a name="line-153"></a> inappropriateMatching (18),
<a name="line-154"></a> constraintViolation (19),
<a name="line-155"></a> attributeOrValueExists (20),
<a name="line-156"></a> invalidAttributeSyntax (21),
<a name="line-157"></a> -- 22-31 unused --
<a name="line-158"></a> noSuchObject (32),
<a name="line-159"></a> aliasProblem (33),
<a name="line-160"></a> invalidDNSyntax (34),
<a name="line-161"></a> -- 35 reserved for undefined isLeaf --
<a name="line-162"></a> aliasDereferencingProblem (36),
<a name="line-163"></a> -- 37-47 unused --
<a name="line-164"></a> inappropriateAuthentication (48),
<a name="line-165"></a> invalidCredentials (49),
<a name="line-166"></a> insufficientAccessRights (50),
<a name="line-167"></a> busy (51),
<a name="line-168"></a> unavailable (52),
<a name="line-169"></a> unwillingToPerform (53),
<a name="line-170"></a> loopDetect (54),
<a name="line-171"></a> -- 55-63 unused --
<a name="line-172"></a> namingViolation (64),
<a name="line-173"></a> objectClassViolation (65),
<a name="line-174"></a> notAllowedOnNonLeaf (66),
<a name="line-175"></a> notAllowedOnRDN (67),
<a name="line-176"></a> entryAlreadyExists (68),
<a name="line-177"></a> objectClassModsProhibited (69),
<a name="line-178"></a> -- 70 reserved for CLDAP --
<a name="line-179"></a> affectsMultipleDSAs (71),
<a name="line-180"></a> -- 72-79 unused --
<a name="line-181"></a> other (80),
<a name="line-182"></a> ... },
<a name="line-183"></a> matchedDN LDAPDN,
<a name="line-184"></a> diagnosticMessage LDAPString,
<a name="line-185"></a> referral [3] Referral OPTIONAL }
<a name="line-186"></a>@
<a name="line-187"></a>-}</span>
<a name="line-188"></a><a name="instance%20FromAsn1%20LdapResult"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyword'>where</span>
<a name="line-189"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-190"></a> <span class='hs-varid'>resultCode</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>do</span>
<a name="line-191"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Enumerated</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-192"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>of</span>
<a name="line-193"></a> <span class='hs-num'>0</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Success</span>
<a name="line-194"></a> <span class='hs-num'>1</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>OperationError</span>
<a name="line-195"></a> <span class='hs-num'>2</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-196"></a> <span class='hs-num'>3</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-197"></a> <span class='hs-num'>4</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-198"></a> <span class='hs-num'>5</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-199"></a> <span class='hs-num'>6</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-200"></a> <span class='hs-num'>7</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-201"></a> <span class='hs-num'>8</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-202"></a> <span class='hs-num'>10</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Referral</span>
<a name="line-203"></a> <span class='hs-num'>11</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-204"></a> <span class='hs-num'>12</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-205"></a> <span class='hs-num'>13</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-206"></a> <span class='hs-num'>14</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-207"></a> <span class='hs-num'>16</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-208"></a> <span class='hs-num'>17</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-209"></a> <span class='hs-num'>18</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-210"></a> <span class='hs-num'>19</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-211"></a> <span class='hs-num'>20</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-212"></a> <span class='hs-num'>21</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-213"></a> <span class='hs-num'>32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-214"></a> <span class='hs-num'>33</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-215"></a> <span class='hs-num'>34</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-216"></a> <span class='hs-num'>36</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-217"></a> <span class='hs-num'>48</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-218"></a> <span class='hs-num'>49</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-219"></a> <span class='hs-num'>50</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-220"></a> <span class='hs-num'>51</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Busy</span>
<a name="line-221"></a> <span class='hs-num'>52</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Unavailable</span>
<a name="line-222"></a> <span class='hs-num'>53</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-223"></a> <span class='hs-num'>54</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-224"></a> <span class='hs-num'>64</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-225"></a> <span class='hs-num'>65</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-226"></a> <span class='hs-num'>66</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-227"></a> <span class='hs-num'>67</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-228"></a> <span class='hs-num'>68</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-229"></a> <span class='hs-num'>69</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-230"></a> <span class='hs-num'>71</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-231"></a> <span class='hs-num'>80</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Other</span>
<a name="line-232"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-233"></a> <span class='hs-varid'>matchedDn</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-234"></a> <span class='hs-varid'>diagnosticMessage</span>
<a name="line-235"></a> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-236"></a> <span class='hs-varid'>referral</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-237"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-238"></a> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-239"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-240"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span>
<a name="line-241"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>resultCode</span> <span class='hs-varid'>matchedDn</span> <span class='hs-varid'>diagnosticMessage</span> <span class='hs-varid'>referral</span><span class='hs-layout'>)</span>
<a name="line-242"></a>
<a name="line-243"></a><a name="instance%20FromAsn1%20ReferralUris"></a><span class='hs-comment'>{- |
<a name="line-244"></a>@
<a name="line-245"></a>Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
<a name="line-246"></a>@
<a name="line-247"></a>-}</span>
<a name="line-248"></a><a name="instance%20FromAsn1%20ReferralUris"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyword'>where</span>
<a name="line-249"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-250"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-251"></a> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>some1</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-252"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-253"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReferralUris</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-254"></a>
<a name="line-255"></a><a name="instance%20FromAsn1%20Uri"></a><span class='hs-comment'>{- |
<a name="line-256"></a>@
<a name="line-257"></a>URI ::= LDAPString
<a name="line-258"></a>@
<a name="line-259"></a>-}</span>
<a name="line-260"></a><a name="instance%20FromAsn1%20Uri"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>Uri</span> <span class='hs-keyword'>where</span>
<a name="line-261"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>Uri</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-262"></a>
<a name="line-263"></a><a name="instance%20FromAsn1%20ProtocolServerOp"></a><span class='hs-comment'>{- |
<a name="line-264"></a>@
<a name="line-265"></a>BindResponse ::= [APPLICATION 1] SEQUENCE {
<a name="line-266"></a> COMPONENTS OF LDAPResult,
<a name="line-267"></a> serverSaslCreds [7] OCTET STRING OPTIONAL }
<a name="line-268"></a>@
<a name="line-22"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Use const" #-}</span>
<a name="line-23"></a><span class='hs-comment'>{-# ANN module "HLint: ignore Avoid lambda" #-}</span>
<a name="line-24"></a>
<a name="line-25"></a>
<a name="line-26"></a><a name="parseAsn1"></a><span class='hs-comment'>-- | Convert a part of ASN.1 stream to a LDAP type returning the remainder of the stream.</span>
<a name="line-27"></a><span class='hs-definition'>parseAsn1</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-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-28"></a><span class='hs-definition'>parseAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>parse</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="FromAsn1"></a><span class='hs-comment'>-- | ASN.1 stream parsers.</span>
<a name="line-31"></a><a name="FromAsn1"></a><span class='hs-comment'>--</span>
<a name="line-32"></a><a name="FromAsn1"></a><span class='hs-comment'>-- When it's relevant, instances include the part of RFC describing the encoding.</span>
<a name="line-33"></a><a name="FromAsn1"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-34"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>a</span>
<a name="line-35"></a>
<a name="line-36"></a><a name="instance%20FromAsn1%20(LdapMessage%20op)"></a><span class='hs-comment'>{- |
<a name="line-37"></a>@
<a name="line-38"></a>LDAPMessage ::= SEQUENCE {
<a name="line-39"></a> messageID MessageID,
<a name="line-40"></a> protocolOp CHOICE {
<a name="line-41"></a> bindRequest BindRequest,
<a name="line-42"></a> bindResponse BindResponse,
<a name="line-43"></a> unbindRequest UnbindRequest,
<a name="line-44"></a> searchRequest SearchRequest,
<a name="line-45"></a> searchResEntry SearchResultEntry,
<a name="line-46"></a> searchResDone SearchResultDone,
<a name="line-47"></a> searchResRef SearchResultReference,
<a name="line-48"></a> addRequest AddRequest,
<a name="line-49"></a> addResponse AddResponse,
<a name="line-50"></a> ... },
<a name="line-51"></a> controls [0] Controls OPTIONAL }
<a name="line-52"></a>@
<a name="line-53"></a>-}</span>
<a name="line-54"></a><a name="instance%20FromAsn1%20(LdapMessage%20op)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-55"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-56"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-57"></a> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-58"></a> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-59"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-60"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>i</span> <span class='hs-varid'>op</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="instance%20FromAsn1%20Id"></a><span class='hs-comment'>{- |
<a name="line-63"></a>@
<a name="line-64"></a>MessageID ::= INTEGER (0 .. maxInt)
<a name="line-65"></a>@
<a name="line-66"></a>-}</span>
<a name="line-67"></a><a name="instance%20FromAsn1%20Id"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>Id</span> <span class='hs-keyword'>where</span>
<a name="line-68"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-69"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-70"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Id</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="instance%20FromAsn1%20LdapString"></a><span class='hs-comment'>{- |
<a name="line-73"></a>@
<a name="line-74"></a>LDAPString ::= OCTET STRING -- UTF-8 encoded,
<a name="line-75"></a>@
<a name="line-76"></a>-}</span>
<a name="line-77"></a><a name="instance%20FromAsn1%20LdapString"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyword'>where</span>
<a name="line-78"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-79"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-80"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeUtf8'</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-81"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span>
<a name="line-82"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="instance%20FromAsn1%20LdapOid"></a><span class='hs-comment'>{- |
<a name="line-85"></a>@
<a name="line-86"></a>LDAPOID ::= OCTET STRING -- Constrained to \&lt;numericoid\&gt;
<a name="line-87"></a>@
<a name="line-88"></a>-}</span>
<a name="line-89"></a><a name="instance%20FromAsn1%20LdapOid"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyword'>where</span>
<a name="line-90"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-91"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-92"></a> <span class='hs-keyword'>case</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeUtf8'</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-93"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span>
<a name="line-94"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="instance%20FromAsn1%20LdapDn"></a><span class='hs-comment'>{- |
<a name="line-97"></a>@
<a name="line-98"></a>LDAPDN ::= LDAPString
<a name="line-99"></a>@
<a name="line-100"></a>-}</span>
<a name="line-101"></a><a name="instance%20FromAsn1%20LdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-102"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>LdapDn</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="instance%20FromAsn1%20AttributeDescription"></a><span class='hs-comment'>{- |
<a name="line-105"></a>@
<a name="line-106"></a>AttributeDescription ::= LDAPString
<a name="line-107"></a>@
<a name="line-108"></a>-}</span>
<a name="line-109"></a><a name="instance%20FromAsn1%20AttributeDescription"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyword'>where</span>
<a name="line-110"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-111"></a>
<a name="line-112"></a><a name="instance%20FromAsn1%20AttributeValue"></a><span class='hs-comment'>{- |
<a name="line-113"></a>@
<a name="line-114"></a>AttributeValue ::= OCTET STRING
<a name="line-115"></a>@
<a name="line-116"></a>-}</span>
<a name="line-117"></a><a name="instance%20FromAsn1%20AttributeValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyword'>where</span>
<a name="line-118"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-119"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-120"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-121"></a>
<a name="line-122"></a><a name="instance%20FromAsn1%20PartialAttribute"></a><span class='hs-comment'>{- |
<a name="line-123"></a>@
<a name="line-124"></a>PartialAttribute ::= SEQUENCE {
<a name="line-125"></a> type AttributeDescription,
<a name="line-126"></a> vals SET OF value AttributeValue }
<a name="line-127"></a>@
<a name="line-128"></a>-}</span>
<a name="line-129"></a><a name="instance%20FromAsn1%20PartialAttribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyword'>where</span>
<a name="line-130"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-131"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-132"></a> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-133"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-134"></a> <span class='hs-varid'>vs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>many</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-135"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-136"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-137"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span>
<a name="line-138"></a>
<a name="line-139"></a><a name="instance%20FromAsn1%20LdapResult"></a><span class='hs-comment'>{- |
<a name="line-140"></a>@
<a name="line-141"></a>LDAPResult ::= SEQUENCE {
<a name="line-142"></a> resultCode ENUMERATED {
<a name="line-143"></a> success (0),
<a name="line-144"></a> operationsError (1),
<a name="line-145"></a> protocolError (2),
<a name="line-146"></a> timeLimitExceeded (3),
<a name="line-147"></a> sizeLimitExceeded (4),
<a name="line-148"></a> compareFalse (5),
<a name="line-149"></a> compareTrue (6),
<a name="line-150"></a> authMethodNotSupported (7),
<a name="line-151"></a> strongerAuthRequired (8),
<a name="line-152"></a> -- 9 reserved --
<a name="line-153"></a> referral (10),
<a name="line-154"></a> adminLimitExceeded (11),
<a name="line-155"></a> unavailableCriticalExtension (12),
<a name="line-156"></a> confidentialityRequired (13),
<a name="line-157"></a> saslBindInProgress (14),
<a name="line-158"></a> noSuchAttribute (16),
<a name="line-159"></a> undefinedAttributeType (17),
<a name="line-160"></a> inappropriateMatching (18),
<a name="line-161"></a> constraintViolation (19),
<a name="line-162"></a> attributeOrValueExists (20),
<a name="line-163"></a> invalidAttributeSyntax (21),
<a name="line-164"></a> -- 22-31 unused --
<a name="line-165"></a> noSuchObject (32),
<a name="line-166"></a> aliasProblem (33),
<a name="line-167"></a> invalidDNSyntax (34),
<a name="line-168"></a> -- 35 reserved for undefined isLeaf --
<a name="line-169"></a> aliasDereferencingProblem (36),
<a name="line-170"></a> -- 37-47 unused --
<a name="line-171"></a> inappropriateAuthentication (48),
<a name="line-172"></a> invalidCredentials (49),
<a name="line-173"></a> insufficientAccessRights (50),
<a name="line-174"></a> busy (51),
<a name="line-175"></a> unavailable (52),
<a name="line-176"></a> unwillingToPerform (53),
<a name="line-177"></a> loopDetect (54),
<a name="line-178"></a> -- 55-63 unused --
<a name="line-179"></a> namingViolation (64),
<a name="line-180"></a> objectClassViolation (65),
<a name="line-181"></a> notAllowedOnNonLeaf (66),
<a name="line-182"></a> notAllowedOnRDN (67),
<a name="line-183"></a> entryAlreadyExists (68),
<a name="line-184"></a> objectClassModsProhibited (69),
<a name="line-185"></a> -- 70 reserved for CLDAP --
<a name="line-186"></a> affectsMultipleDSAs (71),
<a name="line-187"></a> -- 72-79 unused --
<a name="line-188"></a> other (80),
<a name="line-189"></a> ... },
<a name="line-190"></a> matchedDN LDAPDN,
<a name="line-191"></a> diagnosticMessage LDAPString,
<a name="line-192"></a> referral [3] Referral OPTIONAL }
<a name="line-193"></a>@
<a name="line-194"></a>-}</span>
<a name="line-195"></a><a name="instance%20FromAsn1%20LdapResult"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyword'>where</span>
<a name="line-196"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-197"></a> <span class='hs-varid'>resultCode</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-keyword'>do</span>
<a name="line-198"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Enumerated</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-199"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-keyword'>of</span>
<a name="line-200"></a> <span class='hs-num'>0</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Success</span>
<a name="line-201"></a> <span class='hs-num'>1</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>OperationError</span>
<a name="line-202"></a> <span class='hs-num'>2</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-203"></a> <span class='hs-num'>3</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-204"></a> <span class='hs-num'>4</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-205"></a> <span class='hs-num'>5</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-206"></a> <span class='hs-num'>6</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-207"></a> <span class='hs-num'>7</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-208"></a> <span class='hs-num'>8</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-209"></a> <span class='hs-num'>10</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Referral</span>
<a name="line-210"></a> <span class='hs-num'>11</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-211"></a> <span class='hs-num'>12</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-212"></a> <span class='hs-num'>13</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-213"></a> <span class='hs-num'>14</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-214"></a> <span class='hs-num'>16</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-215"></a> <span class='hs-num'>17</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-216"></a> <span class='hs-num'>18</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-217"></a> <span class='hs-num'>19</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-218"></a> <span class='hs-num'>20</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-219"></a> <span class='hs-num'>21</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-220"></a> <span class='hs-num'>32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-221"></a> <span class='hs-num'>33</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-222"></a> <span class='hs-num'>34</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-223"></a> <span class='hs-num'>36</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-224"></a> <span class='hs-num'>48</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-225"></a> <span class='hs-num'>49</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-226"></a> <span class='hs-num'>50</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-227"></a> <span class='hs-num'>51</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Busy</span>
<a name="line-228"></a> <span class='hs-num'>52</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Unavailable</span>
<a name="line-229"></a> <span class='hs-num'>53</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-230"></a> <span class='hs-num'>54</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-231"></a> <span class='hs-num'>64</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-232"></a> <span class='hs-num'>65</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-233"></a> <span class='hs-num'>66</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-234"></a> <span class='hs-num'>67</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-235"></a> <span class='hs-num'>68</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-236"></a> <span class='hs-num'>69</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-237"></a> <span class='hs-num'>71</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-238"></a> <span class='hs-num'>80</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-conid'>Other</span>
<a name="line-239"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-240"></a> <span class='hs-varid'>matchedDn</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-241"></a> <span class='hs-varid'>diagnosticMessage</span>
<a name="line-242"></a> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-243"></a> <span class='hs-varid'>referral</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-244"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-245"></a> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-246"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-247"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span>
<a name="line-248"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>resultCode</span> <span class='hs-varid'>matchedDn</span> <span class='hs-varid'>diagnosticMessage</span> <span class='hs-varid'>referral</span><span class='hs-layout'>)</span>
<a name="line-249"></a>
<a name="line-250"></a><a name="instance%20FromAsn1%20ReferralUris"></a><span class='hs-comment'>{- |
<a name="line-251"></a>@
<a name="line-252"></a>Referral ::= SEQUENCE SIZE (1..MAX) OF uri URI
<a name="line-253"></a>@
<a name="line-254"></a>-}</span>
<a name="line-255"></a><a name="instance%20FromAsn1%20ReferralUris"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyword'>where</span>
<a name="line-256"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-257"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-258"></a> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>some1</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-259"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-260"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>ReferralUris</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-261"></a>
<a name="line-262"></a><a name="instance%20FromAsn1%20Uri"></a><span class='hs-comment'>{- |
<a name="line-263"></a>@
<a name="line-264"></a>URI ::= LDAPString
<a name="line-265"></a>@
<a name="line-266"></a>-}</span>
<a name="line-267"></a><a name="instance%20FromAsn1%20Uri"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>Uri</span> <span class='hs-keyword'>where</span>
<a name="line-268"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>Uri</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-269"></a>
<a name="line-270"></a>@
<a name="line-271"></a>SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
<a name="line-272"></a> objectName LDAPDN,
<a name="line-273"></a> attributes PartialAttributeList }
<a name="line-274"></a>@
<a name="line-275"></a>
<a name="line-276"></a>@
<a name="line-277"></a>SearchResultDone ::= [APPLICATION 5] LDAPResult
<a name="line-278"></a>@
<a name="line-279"></a>
<a name="line-280"></a>@
<a name="line-281"></a>ModifyResponse ::= [APPLICATION 7] LDAPResult
<a name="line-282"></a>@
<a name="line-283"></a>
<a name="line-284"></a>@
<a name="line-285"></a>AddResponse ::= [APPLICATION 9] LDAPResult
<a name="line-270"></a><a name="instance%20FromAsn1%20ProtocolServerOp"></a><span class='hs-comment'>{- |
<a name="line-271"></a>@
<a name="line-272"></a>BindResponse ::= [APPLICATION 1] SEQUENCE {
<a name="line-273"></a> COMPONENTS OF LDAPResult,
<a name="line-274"></a> serverSaslCreds [7] OCTET STRING OPTIONAL }
<a name="line-275"></a>@
<a name="line-276"></a>
<a name="line-277"></a>@
<a name="line-278"></a>SearchResultEntry ::= [APPLICATION 4] SEQUENCE {
<a name="line-279"></a> objectName LDAPDN,
<a name="line-280"></a> attributes PartialAttributeList }
<a name="line-281"></a>@
<a name="line-282"></a>
<a name="line-283"></a>@
<a name="line-284"></a>SearchResultReference ::= [APPLICATION 19] SEQUENCE
<a name="line-285"></a> SIZE (1..MAX) OF uri URI
<a name="line-286"></a>@
<a name="line-287"></a>
<a name="line-288"></a>@
<a name="line-289"></a>DelResponse ::= [APPLICATION 11] LDAPResult
<a name="line-289"></a>SearchResultDone ::= [APPLICATION 5] LDAPResult
<a name="line-290"></a>@
<a name="line-291"></a>
<a name="line-292"></a>@
<a name="line-293"></a>CompareResponse ::= [APPLICATION 15] LDAPResult
<a name="line-293"></a>ModifyResponse ::= [APPLICATION 7] LDAPResult
<a name="line-294"></a>@
<a name="line-295"></a>-}</span>
<a name="line-296"></a><a name="instance%20FromAsn1%20ProtocolServerOp"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>ProtocolServerOp</span> <span class='hs-keyword'>where</span>
<a name="line-297"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>asum</span>
<a name="line-298"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>res</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>BindResponse</span> <span class='hs-varid'>res</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-299"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>uncurry</span> <span class='hs-conid'>SearchResultEntry</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>4</span><span class='hs-layout'>)</span>
<a name="line-300"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>5</span><span class='hs-layout'>)</span>
<a name="line-301"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>7</span><span class='hs-layout'>)</span>
<a name="line-302"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>AddResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>9</span><span class='hs-layout'>)</span>
<a name="line-303"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>DeleteResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>11</span><span class='hs-layout'>)</span>
<a name="line-304"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>13</span><span class='hs-layout'>)</span>
<a name="line-305"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>CompareResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>15</span><span class='hs-layout'>)</span>
<a name="line-306"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span>
<a name="line-307"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>24</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-308"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-309"></a> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-310"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-311"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>s</span>
<a name="line-312"></a> <span class='hs-varid'>value</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-313"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-314"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>s</span>
<a name="line-315"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>24</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-316"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExtendedResponse</span> <span class='hs-varid'>res</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-conid'>LdapOid</span> <span class='hs-varid'>name</span><span class='hs-layout'>)</span> <span class='hs-varid'>value</span><span class='hs-layout'>)</span>
<a name="line-317"></a> <span class='hs-keyglyph'>]</span>
<a name="line-318"></a> <span class='hs-keyword'>where</span>
<a name="line-319"></a> <span class='hs-varid'>app</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-320"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-321"></a> <span class='hs-varid'>guard</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span>
<a name="line-322"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-323"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-324"></a> <span class='hs-varid'>guard</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span> <span class='hs-varop'>==</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span>
<a name="line-325"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>res</span>
<a name="line-326"></a>
<a name="line-327"></a><a name="instance%20FromAsn1%20PartialAttributeList"></a><span class='hs-comment'>{- |
<a name="line-328"></a>@
<a name="line-329"></a>PartialAttributeList ::= SEQUENCE OF partialAttribute PartialAttribute
<a name="line-330"></a>@
<a name="line-331"></a>-}</span>
<a name="line-332"></a><a name="instance%20FromAsn1%20PartialAttributeList"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyword'>where</span>
<a name="line-333"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-334"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-335"></a> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>many</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-336"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-337"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttributeList</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-338"></a>
<a name="line-339"></a><a name="instance%20FromAsn1%20(a,%20b)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-340"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftA2</span> <span class='hs-conid'>(,)</span> <span class='hs-varid'>fromAsn1</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-295"></a>
<a name="line-296"></a>@
<a name="line-297"></a>AddResponse ::= [APPLICATION 9] LDAPResult
<a name="line-298"></a>@
<a name="line-299"></a>
<a name="line-300"></a>@
<a name="line-301"></a>DelResponse ::= [APPLICATION 11] LDAPResult
<a name="line-302"></a>@
<a name="line-303"></a>
<a name="line-304"></a>@
<a name="line-305"></a>ModifyDNResponse ::= [APPLICATION 13] LDAPResult
<a name="line-306"></a>@
<a name="line-307"></a>
<a name="line-308"></a>@
<a name="line-309"></a>CompareResponse ::= [APPLICATION 15] LDAPResult
<a name="line-310"></a>@
<a name="line-311"></a>
<a name="line-312"></a>@
<a name="line-313"></a>ExtendedResponse ::= [APPLICATION 24] SEQUENCE {
<a name="line-314"></a> COMPONENTS OF LDAPResult,
<a name="line-315"></a> responseName [10] LDAPOID OPTIONAL,
<a name="line-316"></a> responseValue [11] OCTET STRING OPTIONAL }
<a name="line-317"></a>@
<a name="line-318"></a>
<a name="line-319"></a>@
<a name="line-320"></a>IntermediateResponse ::= [APPLICATION 25] SEQUENCE {
<a name="line-321"></a> responseName [0] LDAPOID OPTIONAL,
<a name="line-322"></a> responseValue [1] OCTET STRING OPTIONAL }
<a name="line-323"></a>@
<a name="line-324"></a>-}</span>
<a name="line-325"></a><a name="instance%20FromAsn1%20ProtocolServerOp"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>ProtocolServerOp</span> <span class='hs-keyword'>where</span>
<a name="line-326"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>asum</span>
<a name="line-327"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>res</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>BindResponse</span> <span class='hs-varid'>res</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-328"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>uncurry</span> <span class='hs-conid'>SearchResultEntry</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>4</span><span class='hs-layout'>)</span>
<a name="line-329"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>5</span><span class='hs-layout'>)</span>
<a name="line-330"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>7</span><span class='hs-layout'>)</span>
<a name="line-331"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>AddResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>9</span><span class='hs-layout'>)</span>
<a name="line-332"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>DeleteResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>11</span><span class='hs-layout'>)</span>
<a name="line-333"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>13</span><span class='hs-layout'>)</span>
<a name="line-334"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-conid'>CompareResponse</span> <span class='hs-layout'>(</span><span class='hs-varid'>app</span> <span class='hs-num'>15</span><span class='hs-layout'>)</span>
<a name="line-335"></a>
<a name="line-336"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span>
<a name="line-337"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>19</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-338"></a> <span class='hs-varid'>uris</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>some1</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-339"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>19</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-340"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchResultReference</span> <span class='hs-varid'>uris</span><span class='hs-layout'>)</span>
<a name="line-341"></a>
<a name="line-342"></a>
<a name="line-343"></a><a name="Parser"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unParser</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>}</span>
<a name="line-344"></a>
<a name="line-345"></a><a name="instance%20Functor%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-346"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span>
<a name="line-347"></a>
<a name="line-348"></a><a name="instance%20Applicative%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-349"></a> <span class='hs-varid'>pure</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-350"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mf</span> <span class='hs-varop'>&lt;*&gt;</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mx</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-351"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s'</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mf</span> <span class='hs-varid'>s</span>
<a name="line-352"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s''</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mx</span> <span class='hs-varid'>s'</span>
<a name="line-353"></a> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-varid'>s''</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-354"></a>
<a name="line-355"></a><a name="instance%20Alternative%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Alternative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-356"></a> <span class='hs-varid'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span><span class='hs-layout'>)</span>
<a name="line-357"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>ma</span> <span class='hs-varop'>&lt;|&gt;</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mb</span> <span class='hs-keyglyph'>=</span>
<a name="line-358"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>ma</span> <span class='hs-varid'>s</span> <span class='hs-varop'>&lt;|&gt;</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-359"></a>
<a name="line-360"></a><a name="instance%20Monad%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-361"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-362"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mx</span> <span class='hs-varop'>&gt;&gt;=</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span>
<a name="line-363"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-varid'>mx</span> <span class='hs-varop'>&gt;=&gt;</span> <span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>s'</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>unParser</span> <span class='hs-layout'>(</span><span class='hs-varid'>k</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-varid'>s'</span><span class='hs-layout'>)</span>
<a name="line-364"></a> <span class='hs-varid'>fail</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>empty</span>
<a name="line-365"></a>
<a name="line-366"></a><a name="instance%20MonadPlus%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadPlus</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-367"></a> <span class='hs-varid'>mzero</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mzero</span><span class='hs-layout'>)</span>
<a name="line-368"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>ma</span> <span class='hs-varop'>`mplus`</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mb</span> <span class='hs-keyglyph'>=</span>
<a name="line-369"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>ma</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-370"></a>
<a name="line-371"></a><a name="parseAsn1"></a><span class='hs-definition'>parseAsn1</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-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-372"></a><span class='hs-definition'>parseAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>parse</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-373"></a>
<a name="line-374"></a><a name="parse"></a><span class='hs-definition'>parse</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-375"></a><span class='hs-definition'>parse</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unParser</span>
<a name="line-376"></a>
<a name="line-377"></a><a name="next"></a><span class='hs-definition'>next</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>s</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>s</span>
<a name="line-378"></a><span class='hs-definition'>next</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>;</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-342"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span>
<a name="line-343"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>24</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-344"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-345"></a> <span class='hs-varid'>utf8Name</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-346"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>10</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-347"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>s</span>
<a name="line-348"></a> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>n</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>decodeUtf8'</span> <span class='hs-varid'>n</span> <span class='hs-keyword'>of</span>
<a name="line-349"></a> <span class='hs-conid'>Left</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span>
<a name="line-350"></a> <span class='hs-conid'>Right</span> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>name</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>utf8Name</span>
<a name="line-351"></a> <span class='hs-varid'>value</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-352"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>11</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-353"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>s</span>
<a name="line-354"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>24</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-355"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExtendedResponse</span> <span class='hs-varid'>res</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-conid'>LdapOid</span> <span class='hs-varid'>name</span><span class='hs-layout'>)</span> <span class='hs-varid'>value</span><span class='hs-layout'>)</span>
<a name="line-356"></a>
<a name="line-357"></a> <span class='hs-layout'>,</span> <span class='hs-keyword'>do</span>
<a name="line-358"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>25</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-359"></a> <span class='hs-varid'>name</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-360"></a> <span class='hs-varid'>value</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>optional</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span>
<a name="line-361"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-362"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>s</span>
<a name="line-363"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>25</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-364"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>IntermediateResponse</span> <span class='hs-varid'>name</span> <span class='hs-varid'>value</span><span class='hs-layout'>)</span>
<a name="line-365"></a> <span class='hs-keyglyph'>]</span>
<a name="line-366"></a> <span class='hs-keyword'>where</span>
<a name="line-367"></a> <span class='hs-varid'>app</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-368"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-369"></a> <span class='hs-varid'>guard</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span>
<a name="line-370"></a> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-371"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-372"></a> <span class='hs-varid'>guard</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span> <span class='hs-varop'>==</span> <span class='hs-varid'>l</span><span class='hs-layout'>)</span>
<a name="line-373"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>res</span>
<a name="line-374"></a>
<a name="line-375"></a><a name="instance%20FromAsn1%20PartialAttributeList"></a><span class='hs-comment'>{- |
<a name="line-376"></a>@
<a name="line-377"></a>PartialAttributeList ::= SEQUENCE OF partialAttribute PartialAttribute
<a name="line-378"></a>@
<a name="line-379"></a>-}</span>
<a name="line-380"></a><a name="instance%20FromAsn1%20PartialAttributeList"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyword'>where</span>
<a name="line-381"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-382"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-383"></a> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>many</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-384"></a> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>next</span>
<a name="line-385"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttributeList</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-386"></a>
<a name="line-387"></a><a name="instance%20FromAsn1%20(a,%20b)"></a><span class='hs-keyword'>instance</span> <span class='hs-layout'>(</span><span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>FromAsn1</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-388"></a> <span class='hs-varid'>fromAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftA2</span> <span class='hs-conid'>(,)</span> <span class='hs-varid'>fromAsn1</span> <span class='hs-varid'>fromAsn1</span>
<a name="line-389"></a>
<a name="line-390"></a>
<a name="line-391"></a><a name="Parser"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unParser</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-layout'>}</span>
<a name="line-392"></a>
<a name="line-393"></a><a name="instance%20Functor%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-394"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>g</span><span class='hs-layout'>)</span>
<a name="line-395"></a>
<a name="line-396"></a><a name="instance%20Applicative%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Applicative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-397"></a> <span class='hs-varid'>pure</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-398"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mf</span> <span class='hs-varop'>&lt;*&gt;</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mx</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-varop'>$</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-399"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s'</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mf</span> <span class='hs-varid'>s</span>
<a name="line-400"></a> <span class='hs-layout'>(</span><span class='hs-varid'>s''</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>mx</span> <span class='hs-varid'>s'</span>
<a name="line-401"></a> <span class='hs-varid'>pure</span> <span class='hs-layout'>(</span><span class='hs-varid'>s''</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-402"></a>
<a name="line-403"></a><a name="instance%20Alternative%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Alternative</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-404"></a> <span class='hs-varid'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>empty</span><span class='hs-layout'>)</span>
<a name="line-405"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>ma</span> <span class='hs-varop'>&lt;|&gt;</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mb</span> <span class='hs-keyglyph'>=</span>
<a name="line-406"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>ma</span> <span class='hs-varid'>s</span> <span class='hs-varop'>&lt;|&gt;</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-407"></a>
<a name="line-408"></a><a name="instance%20Monad%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-409"></a> <span class='hs-varid'>return</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-410"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mx</span> <span class='hs-varop'>&gt;&gt;=</span> <span class='hs-varid'>k</span> <span class='hs-keyglyph'>=</span>
<a name="line-411"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-varid'>mx</span> <span class='hs-varop'>&gt;=&gt;</span> <span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>s'</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>unParser</span> <span class='hs-layout'>(</span><span class='hs-varid'>k</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-varid'>s'</span><span class='hs-layout'>)</span>
<a name="line-412"></a> <span class='hs-varid'>fail</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>empty</span>
<a name="line-413"></a>
<a name="line-414"></a><a name="instance%20MonadPlus%20(Parser%20s)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>MonadPlus</span> <span class='hs-layout'>(</span><span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-415"></a> <span class='hs-varid'>mzero</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>mzero</span><span class='hs-layout'>)</span>
<a name="line-416"></a> <span class='hs-conid'>Parser</span> <span class='hs-varid'>ma</span> <span class='hs-varop'>`mplus`</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>mb</span> <span class='hs-keyglyph'>=</span>
<a name="line-417"></a> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>ma</span> <span class='hs-varid'>s</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-418"></a>
<a name="line-419"></a><a name="parse"></a><span class='hs-definition'>parse</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-varid'>s</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-420"></a><span class='hs-definition'>parse</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unParser</span>
<a name="line-421"></a>
<a name="line-422"></a><a name="next"></a><span class='hs-definition'>next</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Parser</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>s</span><span class='hs-keyglyph'>]</span> <span class='hs-varid'>s</span>
<a name="line-423"></a><span class='hs-definition'>next</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Parser</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>;</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -7,426 +7,434 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-keyword'>module</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>
<a name="line-2"></a> <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>
<a name="line-3"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-4"></a>
<a name="line-5"></a><span class='hs-keyword'>import</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'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>ASN1</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1Class</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1Tag</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1ConstructionType</span><span class='hs-layout'>)</span>
<a name="line-6"></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'>Types</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-7"></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-8"></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'>fold</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldMap</span><span class='hs-layout'>)</span>
<a name="line-9"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-10"></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-conid'>Maybe</span><span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span><span class='hs-layout'>)</span>
<a name="line-11"></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-conid'>Endo</span><span class='hs-layout'>)</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> <span class='hs-varid'>mempty</span><span class='hs-layout'>)</span>
<a name="line-12"></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'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Text</span>
<a name="line-13"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-layout'>(</span><span class='hs-conid'>Integer</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromIntegral</span><span class='hs-layout'>)</span>
<a name="line-14"></a>
<a name="line-15"></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'>Type</span>
<a name="line-16"></a>
<a name="line-17"></a>
<a name="line-18"></a><a name="ToAsn1"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-19"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<pre><a name="line-1"></a><span class='hs-comment'>-- | This module contains convertions from LDAP types to ASN.1.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- Various hacks are employed because "asn1-encoding" only encodes to DER, but</span>
<a name="line-4"></a><span class='hs-comment'>-- LDAP demands BER-encoding. So, when a definition looks suspiciously different</span>
<a name="line-5"></a><span class='hs-comment'>-- from the spec in the comment, that's why. I hope all that will be fixed</span>
<a name="line-6"></a><span class='hs-comment'>-- eventually.</span>
<a name="line-7"></a><span class='hs-keyword'>module</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>
<a name="line-8"></a> <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>
<a name="line-9"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-10"></a>
<a name="line-11"></a><span class='hs-keyword'>import</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'>Types</span> <span class='hs-layout'>(</span><span class='hs-conid'>ASN1</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1Class</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1Tag</span><span class='hs-layout'>,</span> <span class='hs-conid'>ASN1ConstructionType</span><span class='hs-layout'>)</span>
<a name="line-12"></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'>Types</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Asn1</span>
<a name="line-13"></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-14"></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'>fold</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldMap</span><span class='hs-layout'>)</span>
<a name="line-15"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-16"></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'>maybe</span><span class='hs-layout'>)</span>
<a name="line-17"></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-conid'>Endo</span><span class='hs-layout'>)</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> <span class='hs-varid'>mempty</span><span class='hs-layout'>)</span>
<a name="line-18"></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'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Encoding</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Text</span>
<a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Prelude</span> <span class='hs-layout'>(</span><span class='hs-conid'>Integer</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromIntegral</span><span class='hs-layout'>)</span>
<a name="line-20"></a>
<a name="line-21"></a><a name="instance%20ToAsn1%20(LdapMessage%20op)"></a><span class='hs-comment'>{- |
<a name="line-22"></a>@
<a name="line-23"></a>LDAPMessage ::= SEQUENCE {
<a name="line-24"></a> messageID MessageID,
<a name="line-25"></a> protocolOp CHOICE {
<a name="line-26"></a> bindRequest BindRequest,
<a name="line-27"></a> bindResponse BindResponse,
<a name="line-28"></a> unbindRequest UnbindRequest,
<a name="line-29"></a> searchRequest SearchRequest,
<a name="line-30"></a> searchResEntry SearchResultEntry,
<a name="line-31"></a> searchResDone SearchResultDone,
<a name="line-32"></a> searchResRef SearchResultReference,
<a name="line-33"></a> addRequest AddRequest,
<a name="line-34"></a> addResponse AddResponse,
<a name="line-35"></a> ... },
<a name="line-36"></a> controls [0] Controls OPTIONAL }
<a name="line-37"></a>@
<a name="line-38"></a>-}</span>
<a name="line-39"></a><a name="instance%20ToAsn1%20(LdapMessage%20op)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-40"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>i</span> <span class='hs-varid'>op</span> <span class='hs-varid'>mc</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-41"></a> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>i</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>op</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>context</span> <span class='hs-num'>0</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toAsn1</span><span class='hs-layout'>)</span> <span class='hs-varid'>mc</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="instance%20ToAsn1%20Id"></a><span class='hs-comment'>{- |
<a name="line-44"></a>@
<a name="line-45"></a>MessageID ::= INTEGER (0 .. maxInt)
<a name="line-21"></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'>Type</span>
<a name="line-22"></a>
<a name="line-23"></a>
<a name="line-24"></a><a name="ToAsn1"></a><span class='hs-comment'>-- | Convert a LDAP type to ASN.1.</span>
<a name="line-25"></a><a name="ToAsn1"></a><span class='hs-comment'>--</span>
<a name="line-26"></a><a name="ToAsn1"></a><span class='hs-comment'>-- When it's relevant, instances include the part of RFC describing the encoding.</span>
<a name="line-27"></a><a name="ToAsn1"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="instance%20ToAsn1%20(LdapMessage%20op)"></a><span class='hs-comment'>{- |
<a name="line-31"></a>@
<a name="line-32"></a>LDAPMessage ::= SEQUENCE {
<a name="line-33"></a> messageID MessageID,
<a name="line-34"></a> protocolOp CHOICE {
<a name="line-35"></a> bindRequest BindRequest,
<a name="line-36"></a> bindResponse BindResponse,
<a name="line-37"></a> unbindRequest UnbindRequest,
<a name="line-38"></a> searchRequest SearchRequest,
<a name="line-39"></a> searchResEntry SearchResultEntry,
<a name="line-40"></a> searchResDone SearchResultDone,
<a name="line-41"></a> searchResRef SearchResultReference,
<a name="line-42"></a> addRequest AddRequest,
<a name="line-43"></a> addResponse AddResponse,
<a name="line-44"></a> ... },
<a name="line-45"></a> controls [0] Controls OPTIONAL }
<a name="line-46"></a>@
<a name="line-47"></a>-}</span>
<a name="line-48"></a><a name="instance%20ToAsn1%20Id"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Id</span> <span class='hs-keyword'>where</span>
<a name="line-49"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Id</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="instance%20ToAsn1%20LdapString"></a><span class='hs-comment'>{- |
<a name="line-52"></a>@
<a name="line-53"></a>LDAPString ::= OCTET STRING -- UTF-8 encoded
<a name="line-54"></a>@
<a name="line-55"></a>-}</span>
<a name="line-56"></a><a name="instance%20ToAsn1%20LdapString"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyword'>where</span>
<a name="line-57"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="instance%20ToAsn1%20LdapOid"></a><span class='hs-comment'>{- |
<a name="line-60"></a>@
<a name="line-61"></a>LDAPOID ::= OCTET STRING -- Constrained to \&lt;numericoid\&gt;
<a name="line-62"></a>@
<a name="line-63"></a>-}</span>
<a name="line-64"></a><a name="instance%20ToAsn1%20LdapOid"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyword'>where</span>
<a name="line-65"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-66"></a>
<a name="line-67"></a><a name="instance%20ToAsn1%20LdapDn"></a><span class='hs-comment'>{- |
<a name="line-68"></a>@
<a name="line-69"></a>LDAPDN ::= LDAPString -- Constrained to \&lt;distinguishedName\&gt;
<a name="line-70"></a>@
<a name="line-71"></a>-}</span>
<a name="line-72"></a><a name="instance%20ToAsn1%20LdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-73"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-74"></a>
<a name="line-75"></a><a name="instance%20ToAsn1%20RelativeLdapDn"></a><span class='hs-comment'>{- |
<a name="line-76"></a>@
<a name="line-77"></a>RelativeLDAPDN ::= LDAPString -- Constrained to \&lt;name-component\&gt;
<a name="line-78"></a>@
<a name="line-79"></a>-}</span>
<a name="line-80"></a><a name="instance%20ToAsn1%20RelativeLdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-81"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-82"></a>
<a name="line-83"></a><a name="instance%20ToAsn1%20AttributeDescription"></a><span class='hs-comment'>{- |
<a name="line-84"></a>@
<a name="line-85"></a>AttributeDescription ::= LDAPString
<a name="line-86"></a>@
<a name="line-87"></a>-}</span>
<a name="line-88"></a><a name="instance%20ToAsn1%20AttributeDescription"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyword'>where</span>
<a name="line-89"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="instance%20ToAsn1%20AttributeValue"></a><span class='hs-comment'>{- |
<a name="line-92"></a>@
<a name="line-93"></a>AttributeValue ::= OCTET STRING
<a name="line-94"></a>@
<a name="line-95"></a>-}</span>
<a name="line-96"></a><a name="instance%20ToAsn1%20AttributeValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyword'>where</span>
<a name="line-97"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="instance%20ToAsn1%20AttributeValueAssertion"></a><span class='hs-comment'>{- |
<a name="line-100"></a>@
<a name="line-101"></a>AttributeValueAssertion ::= SEQUENCE {
<a name="line-102"></a> attributeDesc AttributeDescription,
<a name="line-103"></a> assertionValue AssertionValue }
<a name="line-104"></a>@
<a name="line-105"></a>-}</span>
<a name="line-106"></a><a name="instance%20ToAsn1%20AttributeValueAssertion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyword'>where</span>
<a name="line-107"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-varid'>d</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>v</span>
<a name="line-108"></a>
<a name="line-109"></a><a name="instance%20ToAsn1%20AssertionValue"></a><span class='hs-comment'>{- |
<a name="line-110"></a>@
<a name="line-111"></a>AssertionValue ::= OCTET STRING
<a name="line-112"></a>@
<a name="line-113"></a>-}</span>
<a name="line-114"></a><a name="instance%20ToAsn1%20AssertionValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyword'>where</span>
<a name="line-115"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-116"></a>
<a name="line-48"></a><a name="instance%20ToAsn1%20(LdapMessage%20op)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-49"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>i</span> <span class='hs-varid'>op</span> <span class='hs-varid'>mc</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-50"></a> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>i</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>op</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>context</span> <span class='hs-num'>0</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toAsn1</span><span class='hs-layout'>)</span> <span class='hs-varid'>mc</span><span class='hs-layout'>)</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="instance%20ToAsn1%20Id"></a><span class='hs-comment'>{- |
<a name="line-53"></a>@
<a name="line-54"></a>MessageID ::= INTEGER (0 .. maxInt)
<a name="line-55"></a>@
<a name="line-56"></a>-}</span>
<a name="line-57"></a><a name="instance%20ToAsn1%20Id"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Id</span> <span class='hs-keyword'>where</span>
<a name="line-58"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Id</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="instance%20ToAsn1%20LdapString"></a><span class='hs-comment'>{- |
<a name="line-61"></a>@
<a name="line-62"></a>LDAPString ::= OCTET STRING -- UTF-8 encoded
<a name="line-63"></a>@
<a name="line-64"></a>-}</span>
<a name="line-65"></a><a name="instance%20ToAsn1%20LdapString"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyword'>where</span>
<a name="line-66"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="instance%20ToAsn1%20LdapOid"></a><span class='hs-comment'>{- |
<a name="line-69"></a>@
<a name="line-70"></a>LDAPOID ::= OCTET STRING -- Constrained to \&lt;numericoid\&gt;
<a name="line-71"></a>@
<a name="line-72"></a>-}</span>
<a name="line-73"></a><a name="instance%20ToAsn1%20LdapOid"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyword'>where</span>
<a name="line-74"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a>
<a name="line-76"></a><a name="instance%20ToAsn1%20LdapDn"></a><span class='hs-comment'>{- |
<a name="line-77"></a>@
<a name="line-78"></a>LDAPDN ::= LDAPString -- Constrained to \&lt;distinguishedName\&gt;
<a name="line-79"></a>@
<a name="line-80"></a>-}</span>
<a name="line-81"></a><a name="instance%20ToAsn1%20LdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-82"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="instance%20ToAsn1%20RelativeLdapDn"></a><span class='hs-comment'>{- |
<a name="line-85"></a>@
<a name="line-86"></a>RelativeLDAPDN ::= LDAPString -- Constrained to \&lt;name-component\&gt;
<a name="line-87"></a>@
<a name="line-88"></a>-}</span>
<a name="line-89"></a><a name="instance%20ToAsn1%20RelativeLdapDn"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyword'>where</span>
<a name="line-90"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-91"></a>
<a name="line-92"></a><a name="instance%20ToAsn1%20AttributeDescription"></a><span class='hs-comment'>{- |
<a name="line-93"></a>@
<a name="line-94"></a>AttributeDescription ::= LDAPString
<a name="line-95"></a>@
<a name="line-96"></a>-}</span>
<a name="line-97"></a><a name="instance%20ToAsn1%20AttributeDescription"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyword'>where</span>
<a name="line-98"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="instance%20ToAsn1%20AttributeValue"></a><span class='hs-comment'>{- |
<a name="line-101"></a>@
<a name="line-102"></a>AttributeValue ::= OCTET STRING
<a name="line-103"></a>@
<a name="line-104"></a>-}</span>
<a name="line-105"></a><a name="instance%20ToAsn1%20AttributeValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyword'>where</span>
<a name="line-106"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="instance%20ToAsn1%20AttributeValueAssertion"></a><span class='hs-comment'>{- |
<a name="line-109"></a>@
<a name="line-110"></a>AttributeValueAssertion ::= SEQUENCE {
<a name="line-111"></a> attributeDesc AttributeDescription,
<a name="line-112"></a> assertionValue AssertionValue }
<a name="line-113"></a>@
<a name="line-114"></a>-}</span>
<a name="line-115"></a><a name="instance%20ToAsn1%20AttributeValueAssertion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyword'>where</span>
<a name="line-116"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-varid'>d</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>v</span>
<a name="line-117"></a>
<a name="line-118"></a><a name="instance%20ToAsn1%20PartialAttribute"></a><span class='hs-comment'>{- |
<a name="line-118"></a><a name="instance%20ToAsn1%20AssertionValue"></a><span class='hs-comment'>{- |
<a name="line-119"></a>@
<a name="line-120"></a>PartialAttribute ::= SEQUENCE {
<a name="line-121"></a> type AttributeDescription,
<a name="line-122"></a> vals SET OF value AttributeValue }
<a name="line-123"></a>@
<a name="line-124"></a>-}</span>
<a name="line-125"></a><a name="instance%20ToAsn1%20PartialAttribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyword'>where</span>
<a name="line-126"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>set</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-127"></a>
<a name="line-128"></a><a name="instance%20ToAsn1%20Attribute"></a><span class='hs-comment'>{- |
<a name="line-129"></a>@
<a name="line-130"></a>Attribute ::= PartialAttribute(WITH COMPONENTS {
<a name="line-131"></a> ...,
<a name="line-132"></a> vals (SIZE(1..MAX))})
<a name="line-133"></a>@
<a name="line-134"></a>-}</span>
<a name="line-135"></a><a name="instance%20ToAsn1%20Attribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyword'>where</span>
<a name="line-136"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>set</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-137"></a>
<a name="line-138"></a><a name="instance%20ToAsn1%20MatchingRuleId"></a><span class='hs-comment'>{- |
<a name="line-139"></a>@
<a name="line-140"></a>MatchingRuleId ::= LDAPString
<a name="line-141"></a>@
<a name="line-142"></a>-}</span>
<a name="line-143"></a><a name="instance%20ToAsn1%20MatchingRuleId"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyword'>where</span>
<a name="line-144"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-145"></a>
<a name="line-146"></a><a name="instance%20ToAsn1%20Controls"></a><span class='hs-comment'>{- |
<a name="line-147"></a>@
<a name="line-148"></a>Controls ::= SEQUENCE OF control Control
<a name="line-149"></a>@
<a name="line-150"></a>-}</span>
<a name="line-151"></a><a name="instance%20ToAsn1%20Controls"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Controls</span> <span class='hs-keyword'>where</span>
<a name="line-152"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Controls</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-153"></a>
<a name="line-154"></a><a name="instance%20ToAsn1%20Control"></a><span class='hs-comment'>{- |
<a name="line-155"></a>@
<a name="line-156"></a>Control ::= SEQUENCE {
<a name="line-157"></a> controlType LDAPOID,
<a name="line-158"></a> criticality BOOLEAN DEFAULT FALSE,
<a name="line-159"></a> controlValue OCTET STRING OPTIONAL }
<a name="line-160"></a>@
<a name="line-161"></a>-}</span>
<a name="line-162"></a><a name="instance%20ToAsn1%20Control"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Control</span> <span class='hs-keyword'>where</span>
<a name="line-163"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Control</span> <span class='hs-varid'>t</span> <span class='hs-varid'>c</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-164"></a> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-165"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>t</span>
<a name="line-166"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>
<a name="line-167"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span>
<a name="line-168"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="instance%20ToAsn1%20ProtocolClientOp"></a><span class='hs-comment'>{- |
<a name="line-171"></a>@
<a name="line-172"></a>BindRequest ::= [APPLICATION 0] SEQUENCE {
<a name="line-173"></a> version INTEGER (1 .. 127),
<a name="line-174"></a> name LDAPDN,
<a name="line-175"></a> authentication AuthenticationChoice }
<a name="line-176"></a>@
<a name="line-177"></a>
<a name="line-178"></a>@
<a name="line-179"></a>UnbindRequest ::= [APPLICATION 2] NULL
<a name="line-120"></a>AssertionValue ::= OCTET STRING
<a name="line-121"></a>@
<a name="line-122"></a>-}</span>
<a name="line-123"></a><a name="instance%20ToAsn1%20AssertionValue"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyword'>where</span>
<a name="line-124"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-125"></a>
<a name="line-126"></a>
<a name="line-127"></a><a name="instance%20ToAsn1%20PartialAttribute"></a><span class='hs-comment'>{- |
<a name="line-128"></a>@
<a name="line-129"></a>PartialAttribute ::= SEQUENCE {
<a name="line-130"></a> type AttributeDescription,
<a name="line-131"></a> vals SET OF value AttributeValue }
<a name="line-132"></a>@
<a name="line-133"></a>-}</span>
<a name="line-134"></a><a name="instance%20ToAsn1%20PartialAttribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyword'>where</span>
<a name="line-135"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>set</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-136"></a>
<a name="line-137"></a><a name="instance%20ToAsn1%20Attribute"></a><span class='hs-comment'>{- |
<a name="line-138"></a>@
<a name="line-139"></a>Attribute ::= PartialAttribute(WITH COMPONENTS {
<a name="line-140"></a> ...,
<a name="line-141"></a> vals (SIZE(1..MAX))})
<a name="line-142"></a>@
<a name="line-143"></a>-}</span>
<a name="line-144"></a><a name="instance%20ToAsn1%20Attribute"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyword'>where</span>
<a name="line-145"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attribute</span> <span class='hs-varid'>d</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>d</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>set</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-146"></a>
<a name="line-147"></a><a name="instance%20ToAsn1%20MatchingRuleId"></a><span class='hs-comment'>{- |
<a name="line-148"></a>@
<a name="line-149"></a>MatchingRuleId ::= LDAPString
<a name="line-150"></a>@
<a name="line-151"></a>-}</span>
<a name="line-152"></a><a name="instance%20ToAsn1%20MatchingRuleId"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyword'>where</span>
<a name="line-153"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>s</span>
<a name="line-154"></a>
<a name="line-155"></a><a name="instance%20ToAsn1%20Controls"></a><span class='hs-comment'>{- |
<a name="line-156"></a>@
<a name="line-157"></a>Controls ::= SEQUENCE OF control Control
<a name="line-158"></a>@
<a name="line-159"></a>-}</span>
<a name="line-160"></a><a name="instance%20ToAsn1%20Controls"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Controls</span> <span class='hs-keyword'>where</span>
<a name="line-161"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Controls</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-162"></a>
<a name="line-163"></a><a name="instance%20ToAsn1%20Control"></a><span class='hs-comment'>{- |
<a name="line-164"></a>@
<a name="line-165"></a>Control ::= SEQUENCE {
<a name="line-166"></a> controlType LDAPOID,
<a name="line-167"></a> criticality BOOLEAN DEFAULT FALSE,
<a name="line-168"></a> controlValue OCTET STRING OPTIONAL }
<a name="line-169"></a>@
<a name="line-170"></a>-}</span>
<a name="line-171"></a><a name="instance%20ToAsn1%20Control"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Control</span> <span class='hs-keyword'>where</span>
<a name="line-172"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Control</span> <span class='hs-varid'>t</span> <span class='hs-varid'>c</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-173"></a> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-174"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>t</span>
<a name="line-175"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>
<a name="line-176"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>OctetString</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span>
<a name="line-177"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-178"></a>
<a name="line-179"></a><a name="instance%20ToAsn1%20ProtocolClientOp"></a><span class='hs-comment'>{- |
<a name="line-180"></a>@
<a name="line-181"></a>
<a name="line-182"></a>@
<a name="line-183"></a>SearchRequest ::= [APPLICATION 3] SEQUENCE {
<a name="line-184"></a> baseObject LDAPDN,
<a name="line-185"></a> scope ENUMERATED {
<a name="line-186"></a> baseObject (0),
<a name="line-187"></a> singleLevel (1),
<a name="line-188"></a> wholeSubtree (2),
<a name="line-189"></a> ... },
<a name="line-190"></a> derefAliases ENUMERATED {
<a name="line-191"></a> neverDerefAliases (0),
<a name="line-192"></a> derefInSearching (1),
<a name="line-193"></a> derefFindingBaseObj (2),
<a name="line-194"></a> derefAlways (3) },
<a name="line-195"></a> sizeLimit INTEGER (0 .. maxInt),
<a name="line-196"></a> timeLimit INTEGER (0 .. maxInt),
<a name="line-197"></a> typesOnly BOOLEAN,
<a name="line-198"></a> filter Filter,
<a name="line-199"></a> attributes AttributeSelection }
<a name="line-200"></a>@
<a name="line-201"></a>
<a name="line-202"></a>@
<a name="line-203"></a>ModifyRequest ::= [APPLICATION 6] SEQUENCE {
<a name="line-204"></a> object LDAPDN,
<a name="line-205"></a> changes SEQUENCE OF change SEQUENCE {
<a name="line-206"></a> operation ENUMERATED {
<a name="line-207"></a> add (0),
<a name="line-208"></a> delete (1),
<a name="line-209"></a> replace (2),
<a name="line-210"></a> ... },
<a name="line-211"></a> modification PartialAttribute } }
<a name="line-212"></a>@
<a name="line-213"></a>
<a name="line-214"></a>@
<a name="line-215"></a>AddRequest ::= [APPLICATION 8] SEQUENCE {
<a name="line-216"></a> entry LDAPDN,
<a name="line-217"></a> attributes AttributeList }
<a name="line-218"></a>@
<a name="line-219"></a>
<a name="line-220"></a>@
<a name="line-221"></a>DelRequest ::= [APPLICATION 10] LDAPDN
<a name="line-222"></a>@
<a name="line-223"></a>
<a name="line-224"></a>@
<a name="line-225"></a>ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
<a name="line-226"></a> entry LDAPDN,
<a name="line-227"></a> newrdn RelativeLDAPDN,
<a name="line-228"></a> deleteoldrdn BOOLEAN,
<a name="line-229"></a> newSuperior [0] LDAPDN OPTIONAL }
<a name="line-230"></a>@
<a name="line-231"></a>
<a name="line-232"></a>@
<a name="line-233"></a>CompareRequest ::= [APPLICATION 14] SEQUENCE {
<a name="line-234"></a> entry LDAPDN,
<a name="line-235"></a> ava AttributeValueAssertion }
<a name="line-236"></a>@
<a name="line-237"></a>
<a name="line-238"></a>@
<a name="line-239"></a>ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
<a name="line-240"></a> requestName [0] LDAPOID,
<a name="line-241"></a> requestValue [1] OCTET STRING OPTIONAL }
<a name="line-242"></a>@
<a name="line-243"></a>-}</span>
<a name="line-244"></a><a name="instance%20ToAsn1%20ProtocolClientOp"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>ProtocolClientOp</span> <span class='hs-keyword'>where</span>
<a name="line-245"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>BindRequest</span> <span class='hs-varid'>v</span> <span class='hs-varid'>n</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-246"></a> <span class='hs-varid'>application</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-247"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-conid'>UnbindRequest</span> <span class='hs-keyglyph'>=</span>
<a name="line-248"></a> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>2</span> <span class='hs-varid'>mempty</span>
<a name="line-249"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchRequest</span> <span class='hs-varid'>bo</span> <span class='hs-varid'>s</span> <span class='hs-varid'>da</span> <span class='hs-varid'>sl</span> <span class='hs-varid'>tl</span> <span class='hs-varid'>to</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-250"></a> <span class='hs-varid'>application</span> <span class='hs-num'>3</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-251"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>bo</span>
<a name="line-252"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>enum</span> <span class='hs-varid'>s'</span>
<a name="line-253"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>enum</span> <span class='hs-varid'>da'</span>
<a name="line-254"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>sl</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-255"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>tl</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-256"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
<a name="line-257"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>f</span>
<a name="line-258"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>a</span>
<a name="line-259"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-260"></a> <span class='hs-keyword'>where</span>
<a name="line-261"></a> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-262"></a> <span class='hs-conid'>BaseObject</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-263"></a> <span class='hs-conid'>SingleLevel</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-264"></a> <span class='hs-conid'>WholeSubtree</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span>
<a name="line-265"></a> <span class='hs-varid'>da'</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>da</span> <span class='hs-keyword'>of</span>
<a name="line-266"></a> <span class='hs-conid'>NeverDerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-267"></a> <span class='hs-conid'>DerefInSearching</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-268"></a> <span class='hs-conid'>DerefFindingBaseObject</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span>
<a name="line-269"></a> <span class='hs-conid'>DerefAlways</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>3</span>
<a name="line-270"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ModifyRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-271"></a> <span class='hs-varid'>application</span> <span class='hs-num'>6</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-272"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span>
<a name="line-273"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>op</span><span class='hs-layout'>,</span> <span class='hs-varid'>pa</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>enum</span> <span class='hs-layout'>(</span><span class='hs-keyword'>case</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>of</span>
<a name="line-274"></a> <span class='hs-conid'>Add</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-275"></a> <span class='hs-conid'>Delete</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-276"></a> <span class='hs-conid'>Replace</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>pa</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-277"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-278"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AddRequest</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-279"></a> <span class='hs-varid'>application</span> <span class='hs-num'>8</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-280"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>DeleteRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</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-keyglyph'>=</span>
<a name="line-281"></a> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>10</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span>
<a name="line-282"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>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-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-283"></a> <span class='hs-varid'>application</span> <span class='hs-num'>12</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-284"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span>
<a name="line-285"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>rdn</span>
<a name="line-286"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>del</span><span class='hs-layout'>)</span>
<a name="line-287"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span>
<a name="line-288"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</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-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-289"></a> <span class='hs-varid'>new</span>
<a name="line-290"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-291"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>CompareRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-292"></a> <span class='hs-varid'>application</span> <span class='hs-num'>14</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-293"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExtendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-varid'>mv</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-294"></a> <span class='hs-varid'>application</span> <span class='hs-num'>23</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-295"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>oid</span>
<a name="line-296"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>mv</span>
<a name="line-297"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-298"></a>
<a name="line-299"></a><a name="instance%20ToAsn1%20AuthenticationChoice"></a><span class='hs-comment'>{- |
<a name="line-300"></a>@
<a name="line-301"></a>AuthenticationChoice ::= CHOICE {
<a name="line-302"></a> simple [0] OCTET STRING,
<a name="line-303"></a> ... }
<a name="line-304"></a>@
<a name="line-305"></a>-}</span>
<a name="line-306"></a><a name="instance%20ToAsn1%20AuthenticationChoice"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyword'>where</span>
<a name="line-307"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>s</span>
<a name="line-308"></a>
<a name="line-309"></a><a name="instance%20ToAsn1%20AttributeSelection"></a><span class='hs-comment'>{- |
<a name="line-310"></a>@
<a name="line-311"></a>AttributeSelection ::= SEQUENCE OF selector LDAPString
<a name="line-312"></a>@
<a name="line-313"></a>-}</span>
<a name="line-314"></a><a name="instance%20ToAsn1%20AttributeSelection"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyword'>where</span>
<a name="line-315"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeSelection</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-316"></a>
<a name="line-317"></a><a name="instance%20ToAsn1%20Filter"></a><span class='hs-comment'>{- |
<a name="line-318"></a>@
<a name="line-319"></a>Filter ::= CHOICE {
<a name="line-320"></a> and [0] SET SIZE (1..MAX) OF filter Filter,
<a name="line-321"></a> or [1] SET SIZE (1..MAX) OF filter Filter,
<a name="line-322"></a> not [2] Filter,
<a name="line-323"></a> equalityMatch [3] AttributeValueAssertion,
<a name="line-324"></a> substrings [4] SubstringFilter,
<a name="line-325"></a> greaterOrEqual [5] AttributeValueAssertion,
<a name="line-326"></a> lessOrEqual [6] AttributeValueAssertion,
<a name="line-327"></a> present [7] AttributeDescription,
<a name="line-328"></a> approxMatch [8] AttributeValueAssertion,
<a name="line-329"></a> extensibleMatch [9] MatchingRuleAssertion,
<a name="line-330"></a> ... }
<a name="line-331"></a>@
<a name="line-332"></a>-}</span>
<a name="line-333"></a><a name="instance%20ToAsn1%20Filter"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Filter</span> <span class='hs-keyword'>where</span>
<a name="line-334"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>of</span>
<a name="line-335"></a> <span class='hs-conid'>And</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-336"></a> <span class='hs-conid'>Or</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>1</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-337"></a> <span class='hs-conid'>Not</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>2</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-338"></a> <span class='hs-conid'>EqualityMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>3</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-339"></a> <span class='hs-conid'>Substrings</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>4</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-340"></a> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>5</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-341"></a> <span class='hs-conid'>LessOrEqual</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>6</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-342"></a> <span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</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-343"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>7</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-344"></a> <span class='hs-conid'>ApproxMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>8</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-345"></a> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>9</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-346"></a>
<a name="line-347"></a><a name="instance%20ToAsn1%20SubstringFilter"></a><span class='hs-comment'>{- |
<a name="line-348"></a>@
<a name="line-349"></a>SubstringFilter ::= SEQUENCE {
<a name="line-350"></a> type AttributeDescription,
<a name="line-351"></a> substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
<a name="line-352"></a> initial [0] AssertionValue, -- can occur at most once
<a name="line-353"></a> any [1] AssertionValue,
<a name="line-354"></a> final [2] AssertionValue } -- can occur at most once
<a name="line-355"></a> }
<a name="line-356"></a>@
<a name="line-357"></a>-}</span>
<a name="line-358"></a><a name="instance%20ToAsn1%20SubstringFilter"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyword'>where</span>
<a name="line-359"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>SubstringFilter</span> <span class='hs-varid'>ad</span> <span class='hs-varid'>ss</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-360"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>ad</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-361"></a> <span class='hs-conid'>Initial</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>v</span>
<a name="line-362"></a> <span class='hs-conid'>Any</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span> <span class='hs-varid'>v</span>
<a name="line-363"></a> <span class='hs-conid'>Final</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>2</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-varid'>ss</span><span class='hs-layout'>)</span>
<a name="line-364"></a>
<a name="line-365"></a><a name="instance%20ToAsn1%20MatchingRuleAssertion"></a><span class='hs-comment'>{- |
<a name="line-366"></a>@
<a name="line-367"></a>MatchingRuleAssertion ::= SEQUENCE {
<a name="line-368"></a> matchingRule [1] MatchingRuleId OPTIONAL,
<a name="line-369"></a> type [2] AttributeDescription OPTIONAL,
<a name="line-370"></a> matchValue [3] AssertionValue,
<a name="line-371"></a> dnAttributes [4] BOOLEAN DEFAULT FALSE }
<a name="line-372"></a>@
<a name="line-373"></a>-}</span>
<a name="line-374"></a><a name="instance%20ToAsn1%20MatchingRuleAssertion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyword'>where</span>
<a name="line-375"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-varid'>mmr</span> <span class='hs-varid'>mad</span> <span class='hs-varid'>av</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-376"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>context</span> <span class='hs-num'>1</span> <span class='hs-layout'>(</span><span class='hs-varid'>optional</span> <span class='hs-varid'>mmr</span><span class='hs-layout'>)</span>
<a name="line-377"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>context</span> <span class='hs-num'>2</span> <span class='hs-layout'>(</span><span class='hs-varid'>optional</span> <span class='hs-varid'>mad</span><span class='hs-layout'>)</span>
<a name="line-378"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>context</span> <span class='hs-num'>3</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span>
<a name="line-379"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>context</span> <span class='hs-num'>4</span> <span class='hs-layout'>(</span><span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-380"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-381"></a>
<a name="line-382"></a><a name="instance%20ToAsn1%20AttributeList"></a><span class='hs-comment'>{- |
<a name="line-383"></a>@
<a name="line-384"></a>AttributeList ::= SEQUENCE OF attribute Attribute
<a name="line-385"></a>@
<a name="line-386"></a>-}</span>
<a name="line-387"></a><a name="instance%20ToAsn1%20AttributeList"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyword'>where</span>
<a name="line-388"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeList</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-389"></a>
<a name="line-390"></a><a name="instance%20ToAsn1%20%5ba%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-391"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>toAsn1</span>
<a name="line-181"></a>BindRequest ::= [APPLICATION 0] SEQUENCE {
<a name="line-182"></a> version INTEGER (1 .. 127),
<a name="line-183"></a> name LDAPDN,
<a name="line-184"></a> authentication AuthenticationChoice }
<a name="line-185"></a>@
<a name="line-186"></a>
<a name="line-187"></a>@
<a name="line-188"></a>UnbindRequest ::= [APPLICATION 2] NULL
<a name="line-189"></a>@
<a name="line-190"></a>
<a name="line-191"></a>@
<a name="line-192"></a>SearchRequest ::= [APPLICATION 3] SEQUENCE {
<a name="line-193"></a> baseObject LDAPDN,
<a name="line-194"></a> scope ENUMERATED {
<a name="line-195"></a> baseObject (0),
<a name="line-196"></a> singleLevel (1),
<a name="line-197"></a> wholeSubtree (2),
<a name="line-198"></a> ... },
<a name="line-199"></a> derefAliases ENUMERATED {
<a name="line-200"></a> neverDerefAliases (0),
<a name="line-201"></a> derefInSearching (1),
<a name="line-202"></a> derefFindingBaseObj (2),
<a name="line-203"></a> derefAlways (3) },
<a name="line-204"></a> sizeLimit INTEGER (0 .. maxInt),
<a name="line-205"></a> timeLimit INTEGER (0 .. maxInt),
<a name="line-206"></a> typesOnly BOOLEAN,
<a name="line-207"></a> filter Filter,
<a name="line-208"></a> attributes AttributeSelection }
<a name="line-209"></a>@
<a name="line-210"></a>
<a name="line-211"></a>@
<a name="line-212"></a>ModifyRequest ::= [APPLICATION 6] SEQUENCE {
<a name="line-213"></a> object LDAPDN,
<a name="line-214"></a> changes SEQUENCE OF change SEQUENCE {
<a name="line-215"></a> operation ENUMERATED {
<a name="line-216"></a> add (0),
<a name="line-217"></a> delete (1),
<a name="line-218"></a> replace (2),
<a name="line-219"></a> ... },
<a name="line-220"></a> modification PartialAttribute } }
<a name="line-221"></a>@
<a name="line-222"></a>
<a name="line-223"></a>@
<a name="line-224"></a>AddRequest ::= [APPLICATION 8] SEQUENCE {
<a name="line-225"></a> entry LDAPDN,
<a name="line-226"></a> attributes AttributeList }
<a name="line-227"></a>@
<a name="line-228"></a>
<a name="line-229"></a>@
<a name="line-230"></a>DelRequest ::= [APPLICATION 10] LDAPDN
<a name="line-231"></a>@
<a name="line-232"></a>
<a name="line-233"></a>@
<a name="line-234"></a>ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
<a name="line-235"></a> entry LDAPDN,
<a name="line-236"></a> newrdn RelativeLDAPDN,
<a name="line-237"></a> deleteoldrdn BOOLEAN,
<a name="line-238"></a> newSuperior [0] LDAPDN OPTIONAL }
<a name="line-239"></a>@
<a name="line-240"></a>
<a name="line-241"></a>@
<a name="line-242"></a>CompareRequest ::= [APPLICATION 14] SEQUENCE {
<a name="line-243"></a> entry LDAPDN,
<a name="line-244"></a> ava AttributeValueAssertion }
<a name="line-245"></a>@
<a name="line-246"></a>
<a name="line-247"></a>@
<a name="line-248"></a>ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
<a name="line-249"></a> requestName [0] LDAPOID,
<a name="line-250"></a> requestValue [1] OCTET STRING OPTIONAL }
<a name="line-251"></a>@
<a name="line-252"></a>-}</span>
<a name="line-253"></a><a name="instance%20ToAsn1%20ProtocolClientOp"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>ProtocolClientOp</span> <span class='hs-keyword'>where</span>
<a name="line-254"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>BindRequest</span> <span class='hs-varid'>v</span> <span class='hs-varid'>n</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-255"></a> <span class='hs-varid'>application</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-256"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-conid'>UnbindRequest</span> <span class='hs-keyglyph'>=</span>
<a name="line-257"></a> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>2</span> <span class='hs-varid'>mempty</span>
<a name="line-258"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchRequest</span> <span class='hs-varid'>bo</span> <span class='hs-varid'>s</span> <span class='hs-varid'>da</span> <span class='hs-varid'>sl</span> <span class='hs-varid'>tl</span> <span class='hs-varid'>to</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-259"></a> <span class='hs-varid'>application</span> <span class='hs-num'>3</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-260"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>bo</span>
<a name="line-261"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>enum</span> <span class='hs-varid'>s'</span>
<a name="line-262"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>enum</span> <span class='hs-varid'>da'</span>
<a name="line-263"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>sl</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-264"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>IntVal</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>tl</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-265"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>to</span><span class='hs-layout'>)</span>
<a name="line-266"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>f</span>
<a name="line-267"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>a</span>
<a name="line-268"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-269"></a> <span class='hs-keyword'>where</span>
<a name="line-270"></a> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-271"></a> <span class='hs-conid'>BaseObject</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-272"></a> <span class='hs-conid'>SingleLevel</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-273"></a> <span class='hs-conid'>WholeSubtree</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span>
<a name="line-274"></a> <span class='hs-varid'>da'</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>da</span> <span class='hs-keyword'>of</span>
<a name="line-275"></a> <span class='hs-conid'>NeverDerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-276"></a> <span class='hs-conid'>DerefInSearching</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-277"></a> <span class='hs-conid'>DerefFindingBaseObject</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span>
<a name="line-278"></a> <span class='hs-conid'>DerefAlways</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>3</span>
<a name="line-279"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ModifyRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-280"></a> <span class='hs-varid'>application</span> <span class='hs-num'>6</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-281"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span>
<a name="line-282"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>op</span><span class='hs-layout'>,</span> <span class='hs-varid'>pa</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>enum</span> <span class='hs-layout'>(</span><span class='hs-keyword'>case</span> <span class='hs-varid'>op</span> <span class='hs-keyword'>of</span>
<a name="line-283"></a> <span class='hs-conid'>Add</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>0</span>
<a name="line-284"></a> <span class='hs-conid'>Delete</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>1</span>
<a name="line-285"></a> <span class='hs-conid'>Replace</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-num'>2</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>pa</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-286"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-287"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AddRequest</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-288"></a> <span class='hs-varid'>application</span> <span class='hs-num'>8</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>toAsn1</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-289"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>DeleteRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</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-keyglyph'>=</span>
<a name="line-290"></a> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span> <span class='hs-num'>10</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span>
<a name="line-291"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>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-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-292"></a> <span class='hs-varid'>application</span> <span class='hs-num'>12</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-293"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span>
<a name="line-294"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>rdn</span>
<a name="line-295"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Boolean</span> <span class='hs-varid'>del</span><span class='hs-layout'>)</span>
<a name="line-296"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span>
<a name="line-297"></a> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</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-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-298"></a> <span class='hs-varid'>new</span>
<a name="line-299"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-300"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>CompareRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-301"></a> <span class='hs-varid'>application</span> <span class='hs-num'>14</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>dn</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-302"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExtendedRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapOid</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span> <span class='hs-varid'>mv</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-303"></a> <span class='hs-varid'>application</span> <span class='hs-num'>23</span> <span class='hs-layout'>(</span><span class='hs-varid'>fold</span>
<a name="line-304"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>oid</span><span class='hs-layout'>)</span>
<a name="line-305"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-layout'>(</span><span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>mv</span>
<a name="line-306"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-307"></a>
<a name="line-308"></a><a name="instance%20ToAsn1%20AuthenticationChoice"></a><span class='hs-comment'>{- |
<a name="line-309"></a>@
<a name="line-310"></a>AuthenticationChoice ::= CHOICE {
<a name="line-311"></a> simple [0] OCTET STRING,
<a name="line-312"></a> ... }
<a name="line-313"></a>@
<a name="line-314"></a>-}</span>
<a name="line-315"></a><a name="instance%20ToAsn1%20AuthenticationChoice"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyword'>where</span>
<a name="line-316"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>s</span>
<a name="line-317"></a>
<a name="line-318"></a><a name="instance%20ToAsn1%20AttributeSelection"></a><span class='hs-comment'>{- |
<a name="line-319"></a>@
<a name="line-320"></a>AttributeSelection ::= SEQUENCE OF selector LDAPString
<a name="line-321"></a>@
<a name="line-322"></a>-}</span>
<a name="line-323"></a><a name="instance%20ToAsn1%20AttributeSelection"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyword'>where</span>
<a name="line-324"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeSelection</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-325"></a>
<a name="line-326"></a><a name="instance%20ToAsn1%20Filter"></a><span class='hs-comment'>{- |
<a name="line-327"></a>@
<a name="line-328"></a>Filter ::= CHOICE {
<a name="line-329"></a> and [0] SET SIZE (1..MAX) OF filter Filter,
<a name="line-330"></a> or [1] SET SIZE (1..MAX) OF filter Filter,
<a name="line-331"></a> not [2] Filter,
<a name="line-332"></a> equalityMatch [3] AttributeValueAssertion,
<a name="line-333"></a> substrings [4] SubstringFilter,
<a name="line-334"></a> greaterOrEqual [5] AttributeValueAssertion,
<a name="line-335"></a> lessOrEqual [6] AttributeValueAssertion,
<a name="line-336"></a> present [7] AttributeDescription,
<a name="line-337"></a> approxMatch [8] AttributeValueAssertion,
<a name="line-338"></a> extensibleMatch [9] MatchingRuleAssertion,
<a name="line-339"></a> ... }
<a name="line-340"></a>@
<a name="line-341"></a>-}</span>
<a name="line-342"></a><a name="instance%20ToAsn1%20Filter"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>Filter</span> <span class='hs-keyword'>where</span>
<a name="line-343"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>of</span>
<a name="line-344"></a> <span class='hs-conid'>And</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>0</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-345"></a> <span class='hs-conid'>Or</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>1</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-346"></a> <span class='hs-conid'>Not</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>2</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-347"></a> <span class='hs-conid'>EqualityMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>3</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-348"></a> <span class='hs-conid'>Substrings</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>4</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-349"></a> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>5</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-350"></a> <span class='hs-conid'>LessOrEqual</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>6</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-351"></a> <span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</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-352"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>7</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-353"></a> <span class='hs-conid'>ApproxMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>8</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-354"></a> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>context</span> <span class='hs-num'>9</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-355"></a>
<a name="line-356"></a><a name="instance%20ToAsn1%20SubstringFilter"></a><span class='hs-comment'>{- |
<a name="line-357"></a>@
<a name="line-358"></a>SubstringFilter ::= SEQUENCE {
<a name="line-359"></a> type AttributeDescription,
<a name="line-360"></a> substrings SEQUENCE SIZE (1..MAX) OF substring CHOICE {
<a name="line-361"></a> initial [0] AssertionValue, -- can occur at most once
<a name="line-362"></a> any [1] AssertionValue,
<a name="line-363"></a> final [2] AssertionValue } -- can occur at most once
<a name="line-364"></a> }
<a name="line-365"></a>@
<a name="line-366"></a>-}</span>
<a name="line-367"></a><a name="instance%20ToAsn1%20SubstringFilter"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyword'>where</span>
<a name="line-368"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>SubstringFilter</span> <span class='hs-varid'>ad</span> <span class='hs-varid'>ss</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-369"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-varid'>ad</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>s</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-370"></a> <span class='hs-conid'>Initial</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>0</span> <span class='hs-varid'>v</span>
<a name="line-371"></a> <span class='hs-conid'>Any</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span> <span class='hs-varid'>v</span>
<a name="line-372"></a> <span class='hs-conid'>Final</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>2</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-varid'>ss</span><span class='hs-layout'>)</span>
<a name="line-373"></a>
<a name="line-374"></a><a name="instance%20ToAsn1%20MatchingRuleAssertion"></a><span class='hs-comment'>{- |
<a name="line-375"></a>@
<a name="line-376"></a>MatchingRuleAssertion ::= SEQUENCE {
<a name="line-377"></a> matchingRule [1] MatchingRuleId OPTIONAL,
<a name="line-378"></a> type [2] AttributeDescription OPTIONAL,
<a name="line-379"></a> matchValue [3] AssertionValue,
<a name="line-380"></a> dnAttributes [4] BOOLEAN DEFAULT FALSE }
<a name="line-381"></a>@
<a name="line-382"></a>-}</span>
<a name="line-383"></a><a name="instance%20ToAsn1%20MatchingRuleAssertion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyword'>where</span>
<a name="line-384"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-varid'>mmr</span> <span class='hs-varid'>mad</span> <span class='hs-layout'>(</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>av</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fold</span>
<a name="line-385"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mmr</span>
<a name="line-386"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-varid'>g</span> <span class='hs-varid'>mad</span>
<a name="line-387"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>3</span> <span class='hs-varid'>av</span>
<a name="line-388"></a> <span class='hs-keyglyph'>]</span>
<a name="line-389"></a> <span class='hs-keyword'>where</span>
<a name="line-390"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-layout'>(</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-keyglyph'>=</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>1</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-391"></a> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</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-keyglyph'>=</span> <span class='hs-varid'>other</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span> <span class='hs-num'>2</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-varid'>encodeUtf8</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-392"></a>
<a name="line-393"></a><a name="instance%20ToAsn1%20(NonEmpty%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-394"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>toAsn1</span>
<a name="line-395"></a>
<a name="line-396"></a><a name="sequence"></a><span class='hs-definition'>sequence</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-397"></a><span class='hs-definition'>sequence</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span>
<a name="line-398"></a>
<a name="line-399"></a><a name="set"></a><span class='hs-definition'>set</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-400"></a><span class='hs-definition'>set</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span>
<a name="line-401"></a>
<a name="line-402"></a><a name="application"></a><span class='hs-definition'>application</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-403"></a><span class='hs-definition'>application</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span>
<a name="line-404"></a>
<a name="line-405"></a><a name="context"></a><span class='hs-definition'>context</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-406"></a><span class='hs-definition'>context</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span>
<a name="line-407"></a>
<a name="line-408"></a><a name="construction"></a><span class='hs-definition'>construction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1ConstructionType</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-409"></a><span class='hs-definition'>construction</span> <span class='hs-varid'>t</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>x</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span>
<a name="line-410"></a>
<a name="line-411"></a><a name="other"></a><span class='hs-definition'>other</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Class</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-412"></a><span class='hs-definition'>other</span> <span class='hs-varid'>c</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-varid'>c</span> <span class='hs-varid'>t</span>
<a name="line-413"></a>
<a name="line-414"></a><a name="optional"></a><span class='hs-definition'>optional</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'>Maybe</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-415"></a><span class='hs-definition'>optional</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe</span> <span class='hs-varid'>mempty</span> <span class='hs-varid'>toAsn1</span>
<a name="line-416"></a>
<a name="line-417"></a><a name="enum"></a><span class='hs-definition'>enum</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-418"></a><span class='hs-definition'>enum</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Enumerated</span>
<a name="line-419"></a>
<a name="line-420"></a><a name="single"></a><span class='hs-definition'>single</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-421"></a><span class='hs-definition'>single</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Endo</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-conop'>:</span><span class='hs-layout'>)</span>
<a name="line-393"></a><a name="instance%20ToAsn1%20AttributeList"></a><span class='hs-comment'>{- |
<a name="line-394"></a>@
<a name="line-395"></a>AttributeList ::= SEQUENCE OF attribute Attribute
<a name="line-396"></a>@
<a name="line-397"></a>-}</span>
<a name="line-398"></a><a name="instance%20ToAsn1%20AttributeList"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyword'>where</span>
<a name="line-399"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttributeList</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sequence</span> <span class='hs-layout'>(</span><span class='hs-varid'>toAsn1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-400"></a>
<a name="line-401"></a><a name="instance%20ToAsn1%20%5ba%5d"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyword'>where</span>
<a name="line-402"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>toAsn1</span>
<a name="line-403"></a>
<a name="line-404"></a><a name="instance%20ToAsn1%20(NonEmpty%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ToAsn1</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-405"></a> <span class='hs-varid'>toAsn1</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldMap</span> <span class='hs-varid'>toAsn1</span>
<a name="line-406"></a>
<a name="line-407"></a><a name="sequence"></a><span class='hs-definition'>sequence</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-408"></a><span class='hs-definition'>sequence</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Sequence</span>
<a name="line-409"></a>
<a name="line-410"></a><a name="set"></a><span class='hs-definition'>set</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-411"></a><span class='hs-definition'>set</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Set</span>
<a name="line-412"></a>
<a name="line-413"></a><a name="application"></a><span class='hs-definition'>application</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-414"></a><span class='hs-definition'>application</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Application</span>
<a name="line-415"></a>
<a name="line-416"></a><a name="context"></a><span class='hs-definition'>context</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-417"></a><span class='hs-definition'>context</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>construction</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Container</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Context</span>
<a name="line-418"></a>
<a name="line-419"></a><a name="construction"></a><span class='hs-definition'>construction</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1ConstructionType</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-420"></a><span class='hs-definition'>construction</span> <span class='hs-varid'>t</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Start</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>x</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-varid'>single</span> <span class='hs-layout'>(</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>End</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span>
<a name="line-421"></a>
<a name="line-422"></a><a name="other"></a><span class='hs-definition'>other</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ASN1Class</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ASN1Tag</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-423"></a><span class='hs-definition'>other</span> <span class='hs-varid'>c</span> <span class='hs-varid'>t</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Other</span> <span class='hs-varid'>c</span> <span class='hs-varid'>t</span>
<a name="line-424"></a>
<a name="line-425"></a><a name="enum"></a><span class='hs-definition'>enum</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integer</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ASN1</span><span class='hs-keyglyph'>]</span>
<a name="line-426"></a><span class='hs-definition'>enum</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>single</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Enumerated</span>
<a name="line-427"></a>
<a name="line-428"></a><a name="single"></a><span class='hs-definition'>single</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Endo</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-429"></a><span class='hs-definition'>single</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Endo</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-conop'>:</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -15,188 +15,211 @@
<a name="line-6"></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-7"></a>
<a name="line-8"></a>
<a name="line-9"></a><a name="LdapMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapMessage</span>
<a name="line-10"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>ldapMessageId</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Id</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ldapMessageOp</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-varid'>op</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ldapMessageControls</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Controls</span><span class='hs-layout'>)</span>
<a name="line-13"></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> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-14"></a>
<a name="line-15"></a><a name="Id"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Id</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Id</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unId</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-layout'>}</span>
<a name="line-16"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-17"></a>
<a name="line-18"></a><a name="ProtocolClientOp"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ProtocolClientOp</span> <span class='hs-keyglyph'>=</span>
<a name="line-19"></a> <span class='hs-conid'>BindRequest</span> <span class='hs-conid'>Int8</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>AuthenticationChoice</span>
<a name="line-20"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnbindRequest</span>
<a name="line-21"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchRequest</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>Scope</span> <span class='hs-conid'>DerefAliases</span> <span class='hs-conid'>Int32</span> <span class='hs-conid'>Int32</span> <span class='hs-conid'>Bool</span> <span class='hs-conid'>Filter</span> <span class='hs-conid'>AttributeSelection</span>
<a name="line-22"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyRequest</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Operation</span><span class='hs-layout'>,</span> <span class='hs-conid'>PartialAttribute</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-23"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AddRequest</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>AttributeList</span>
<a name="line-24"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DeleteRequest</span> <span class='hs-conid'>LdapDn</span>
<a name="line-25"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyDnRequest</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-conid'>Bool</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapDn</span><span class='hs-layout'>)</span>
<a name="line-26"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareRequest</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-27"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtendedRequest</span> <span class='hs-conid'>LdapOid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-28"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-29"></a>
<a name="line-30"></a><a name="ProtocolServerOp"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ProtocolServerOp</span> <span class='hs-keyglyph'>=</span>
<a name="line-31"></a> <span class='hs-conid'>BindResponse</span> <span class='hs-conid'>LdapResult</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-32"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultEntry</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>PartialAttributeList</span>
<a name="line-33"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultReference</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-34"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-conid'>LdapResult</span><span class='hs-layout'>)</span>
<a name="line-35"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyResponse</span> <span class='hs-conid'>LdapResult</span>
<a name="line-36"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AddResponse</span> <span class='hs-conid'>LdapResult</span>
<a name="line-37"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DeleteResponse</span> <span class='hs-conid'>LdapResult</span>
<a name="line-38"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyDnResponse</span> <span class='hs-conid'>LdapResult</span>
<a name="line-39"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareResponse</span> <span class='hs-conid'>LdapResult</span>
<a name="line-40"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtendedResponse</span> <span class='hs-conid'>LdapResult</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapOid</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</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> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="AuthenticationChoice"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Simple</span> <span class='hs-conid'>ByteString</span>
<a name="line-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> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-45"></a>
<a name="line-46"></a><a name="Scope"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>=</span>
<a name="line-47"></a> <span class='hs-conid'>BaseObject</span>
<a name="line-48"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SingleLevel</span>
<a name="line-49"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WholeSubtree</span>
<a name="line-50"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-51"></a>
<a name="line-52"></a><a name="DerefAliases"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>=</span>
<a name="line-53"></a> <span class='hs-conid'>NeverDerefAliases</span>
<a name="line-54"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefInSearching</span>
<a name="line-55"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefFindingBaseObject</span>
<a name="line-56"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefAlways</span>
<a name="line-57"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-9"></a><a name="LdapMessage"></a><span class='hs-comment'>-- | Message envelope. (Section 4.1.1.)</span>
<a name="line-10"></a><a name="LdapMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapMessage</span> <span class='hs-varid'>op</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapMessage</span>
<a name="line-11"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>ldapMessageId</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-conid'>Id</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ldapMessageOp</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-varid'>op</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ldapMessageControls</span> <span class='hs-keyglyph'>::</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Controls</span><span class='hs-layout'>)</span>
<a name="line-14"></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-15"></a>
<a name="line-16"></a><a name="Id"></a><span class='hs-comment'>-- | Every message being processed has a unique non-zero integer ID. (Section 4.1.1.1.)</span>
<a name="line-17"></a><a name="Id"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Id</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Id</span> <span class='hs-layout'>{</span> <span class='hs-varid'>unId</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-layout'>}</span>
<a name="line-18"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-19"></a>
<a name="line-20"></a><a name="ProtocolClientOp"></a><span class='hs-comment'>-- | Client requests. The RFC doesn't make a difference between 'ProtocolClientOp'</span>
<a name="line-21"></a><a name="ProtocolClientOp"></a><span class='hs-comment'>-- and 'ProtocolServerOp' but it's useful to distinguish between them in Haskell.</span>
<a name="line-22"></a><a name="ProtocolClientOp"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ProtocolClientOp</span> <span class='hs-keyglyph'>=</span>
<a name="line-23"></a> <span class='hs-conid'>BindRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>Int8</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>AuthenticationChoice</span>
<a name="line-24"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnbindRequest</span>
<a name="line-25"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>Scope</span> <span class='hs-varop'>!</span><span class='hs-conid'>DerefAliases</span> <span class='hs-varop'>!</span><span class='hs-conid'>Int32</span> <span class='hs-varop'>!</span><span class='hs-conid'>Int32</span> <span class='hs-varop'>!</span><span class='hs-conid'>Bool</span> <span class='hs-varop'>!</span><span class='hs-conid'>Filter</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeSelection</span>
<a name="line-26"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Operation</span><span class='hs-layout'>,</span> <span class='hs-conid'>PartialAttribute</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-27"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AddRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeList</span>
<a name="line-28"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DeleteRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span>
<a name="line-29"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyDnRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>Bool</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapDn</span><span class='hs-layout'>)</span>
<a name="line-30"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-31"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtendedRequest</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapOid</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-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="ProtocolServerOp"></a><span class='hs-comment'>-- | Server responses. The RFC doesn't make a difference between 'ProtocolClientOp'</span>
<a name="line-35"></a><a name="ProtocolServerOp"></a><span class='hs-comment'>-- and 'ProtocolServerOp' but it's useful to distinguish between them in Haskell.</span>
<a name="line-36"></a><a name="ProtocolServerOp"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ProtocolServerOp</span> <span class='hs-keyglyph'>=</span>
<a name="line-37"></a> <span class='hs-conid'>BindResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-38"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultEntry</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapDn</span> <span class='hs-varop'>!</span><span class='hs-conid'>PartialAttributeList</span>
<a name="line-39"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultReference</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-40"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SearchResultDone</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>LdapResult</span><span class='hs-layout'>)</span>
<a name="line-41"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span>
<a name="line-42"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AddResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span>
<a name="line-43"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DeleteResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span>
<a name="line-44"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ModifyDnResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span>
<a name="line-45"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span>
<a name="line-46"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtendedResponse</span> <span class='hs-varop'>!</span><span class='hs-conid'>LdapResult</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapOid</span><span class='hs-layout'>)</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-47"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IntermediateResponse</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>LdapOid</span><span class='hs-layout'>)</span> <span class='hs-varop'>!</span><span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-48"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="AuthenticationChoice"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AuthenticationChoice</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Simple</span> <span class='hs-conid'>ByteString</span>
<a name="line-51"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="Scope"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>=</span>
<a name="line-54"></a> <span class='hs-conid'>BaseObject</span>
<a name="line-55"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SingleLevel</span>
<a name="line-56"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>WholeSubtree</span>
<a name="line-57"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-61"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-62"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-63"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EqualityMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-64"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Substrings</span> <span class='hs-conid'>SubstringFilter</span>
<a name="line-65"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-66"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LessOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-67"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>AttributeDescription</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ApproxMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-conid'>MatchingRuleAssertion</span>
<a name="line-70"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-71"></a>
<a name="line-72"></a><a name="SubstringFilter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Substring</span><span class='hs-layout'>)</span>
<a name="line-73"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-74"></a>
<a name="line-75"></a><a name="Substring"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Substring</span> <span class='hs-keyglyph'>=</span>
<a name="line-76"></a> <span class='hs-conid'>Initial</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-77"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Any</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-78"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Final</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-79"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-80"></a>
<a name="line-81"></a><a name="MatchingRuleAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>MatchingRuleId</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttributeDescription</span><span class='hs-layout'>)</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>Bool</span>
<a name="line-82"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="MatchingRuleId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-conid'>LdapString</span>
<a name="line-85"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="AttributeSelection"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>LdapString</span><span class='hs-keyglyph'>]</span>
<a name="line-88"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="AttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attribute</span><span class='hs-keyglyph'>]</span>
<a name="line-91"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-92"></a>
<a name="line-93"></a><a name="PartialAttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>PartialAttribute</span><span class='hs-keyglyph'>]</span>
<a name="line-94"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="Controls"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Control</span><span class='hs-keyglyph'>]</span>
<a name="line-97"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="Control"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Control</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Control</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Bool</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-100"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="LdapResult"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapResult</span> <span class='hs-conid'>ResultCode</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ReferralUris</span><span class='hs-layout'>)</span>
<a name="line-103"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-104"></a>
<a name="line-105"></a><a name="ResultCode"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResultCode</span> <span class='hs-keyglyph'>=</span>
<a name="line-106"></a> <span class='hs-conid'>Success</span>
<a name="line-107"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OperationError</span>
<a name="line-108"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-109"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-110"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-111"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-112"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-113"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-114"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-115"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Referral</span>
<a name="line-116"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-117"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-118"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-119"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-120"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-121"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-125"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-126"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-127"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-128"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-130"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-131"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-132"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-133"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Busy</span>
<a name="line-134"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Unavailable</span>
<a name="line-135"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-136"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-142"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-143"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-144"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Other</span>
<a name="line-145"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-146"></a>
<a name="line-147"></a><a name="AttributeDescription"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>LdapString</span>
<a name="line-148"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-149"></a>
<a name="line-150"></a><a name="AttributeValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-151"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-152"></a>
<a name="line-153"></a><a name="AttributeValueAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-154"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-155"></a>
<a name="line-156"></a><a name="AssertionValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-157"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="Attribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>AttributeValue</span><span class='hs-layout'>)</span>
<a name="line-160"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-161"></a>
<a name="line-162"></a><a name="PartialAttribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttributeValue</span><span class='hs-keyglyph'>]</span>
<a name="line-163"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-164"></a>
<a name="line-165"></a><a name="LdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-166"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="RelativeLdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-169"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="ReferralUris"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-172"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-173"></a>
<a name="line-174"></a><a name="Uri"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Uri</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Uri</span> <span class='hs-conid'>LdapString</span>
<a name="line-175"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-59"></a><a name="DerefAliases"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a> <span class='hs-conid'>NeverDerefAliases</span>
<a name="line-61"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefInSearching</span>
<a name="line-62"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefFindingBaseObject</span>
<a name="line-63"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DerefAlways</span>
<a name="line-64"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-67"></a> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-68"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-70"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EqualityMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-71"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Substrings</span> <span class='hs-conid'>SubstringFilter</span>
<a name="line-72"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>GreaterOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-73"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LessOrEqual</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-74"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>AttributeDescription</span>
<a name="line-75"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ApproxMatch</span> <span class='hs-conid'>AttributeValueAssertion</span>
<a name="line-76"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ExtensibleMatch</span> <span class='hs-conid'>MatchingRuleAssertion</span>
<a name="line-77"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="SubstringFilter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SubstringFilter</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Substring</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="Substring"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Substring</span> <span class='hs-keyglyph'>=</span>
<a name="line-83"></a> <span class='hs-conid'>Initial</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Any</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-85"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Final</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-86"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-87"></a>
<a name="line-88"></a><a name="MatchingRuleAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>MatchingRuleId</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttributeDescription</span><span class='hs-layout'>)</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>Bool</span>
<a name="line-89"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- | Matching rules are defined in Section 4.1.3 of [RFC4512]. A matching</span>
<a name="line-92"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- rule is identified in the protocol by the printable representation of</span>
<a name="line-93"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- either its &lt;numericoid&gt; or one of its short name descriptors</span>
<a name="line-94"></a><a name="MatchingRuleId"></a><span class='hs-comment'>-- [RFC4512], e.g., 'caseIgnoreMatch' or '2.5.13.2'. (Section 4.1.8.)</span>
<a name="line-95"></a><a name="MatchingRuleId"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>MatchingRuleId</span> <span class='hs-conid'>LdapString</span>
<a name="line-96"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="AttributeSelection"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeSelection</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>LdapString</span><span class='hs-keyglyph'>]</span>
<a name="line-99"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-100"></a>
<a name="line-101"></a><a name="AttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attribute</span><span class='hs-keyglyph'>]</span>
<a name="line-102"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="PartialAttributeList"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttributeList</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>PartialAttribute</span><span class='hs-keyglyph'>]</span>
<a name="line-105"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-106"></a>
<a name="line-107"></a><a name="Controls"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Controls</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Control</span><span class='hs-keyglyph'>]</span>
<a name="line-108"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-109"></a>
<a name="line-110"></a><a name="Control"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Control</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Control</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Bool</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-112"></a>
<a name="line-113"></a><a name="LdapResult"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>LdapResult</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapResult</span> <span class='hs-conid'>ResultCode</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ReferralUris</span><span class='hs-layout'>)</span>
<a name="line-114"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="ResultCode"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResultCode</span> <span class='hs-keyglyph'>=</span>
<a name="line-117"></a> <span class='hs-conid'>Success</span>
<a name="line-118"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>OperationError</span>
<a name="line-119"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ProtocolError</span>
<a name="line-120"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>TimeLimitExceeded</span>
<a name="line-121"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SizeLimitExceeded</span>
<a name="line-122"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareFalse</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>CompareTrue</span>
<a name="line-124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AuthMethodNotSupported</span>
<a name="line-125"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>StrongerAuthRequired</span>
<a name="line-126"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Referral</span>
<a name="line-127"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AdminLimitExceeded</span>
<a name="line-128"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnavailableCriticalExtension</span>
<a name="line-129"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConfidentialityRequired</span>
<a name="line-130"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>SaslBindInProgress</span>
<a name="line-131"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchAttribute</span>
<a name="line-132"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UndefinedAttributeType</span>
<a name="line-133"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateMatching</span>
<a name="line-134"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstraintViolation</span>
<a name="line-135"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AttributeOrValueExists</span>
<a name="line-136"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidAttributeSyntax</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchObject</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasProblem</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidDNSyntax</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AliasDereferencingProblem</span>
<a name="line-141"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InappropriateAuthentication</span>
<a name="line-142"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InvalidCredentials</span>
<a name="line-143"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>InsufficientAccessRights</span>
<a name="line-144"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Busy</span>
<a name="line-145"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Unavailable</span>
<a name="line-146"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UnwillingToPerform</span>
<a name="line-147"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LoopDetect</span>
<a name="line-148"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NamingViolation</span>
<a name="line-149"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassViolation</span>
<a name="line-150"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnNonLeaf</span>
<a name="line-151"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NotAllowedOnRDN</span>
<a name="line-152"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EntryAlreadyExists</span>
<a name="line-153"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ObjectClassModsProhibited</span>
<a name="line-154"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>AffectsMultipleDSAs</span>
<a name="line-155"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Other</span>
<a name="line-156"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-157"></a>
<a name="line-158"></a><a name="AttributeDescription"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>LdapString</span>
<a name="line-159"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-160"></a>
<a name="line-161"></a><a name="AttributeValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-162"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-163"></a>
<a name="line-164"></a><a name="AttributeValueAssertion"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-conid'>AssertionValue</span>
<a name="line-165"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-166"></a>
<a name="line-167"></a><a name="AssertionValue"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AssertionValue</span> <span class='hs-conid'>ByteString</span>
<a name="line-168"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="Attribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Attribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>AttributeValue</span><span class='hs-layout'>)</span>
<a name="line-171"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-172"></a>
<a name="line-173"></a><a name="PartialAttribute"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PartialAttribute</span> <span class='hs-conid'>AttributeDescription</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttributeValue</span><span class='hs-keyglyph'>]</span>
<a name="line-174"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-175"></a>
<a name="line-176"></a>
<a name="line-177"></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-178"></a> <span class='hs-conid'>Add</span>
<a name="line-179"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Delete</span>
<a name="line-180"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span>
<a name="line-181"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-177"></a>
<a name="line-178"></a><a name="LdapDn"></a><span class='hs-comment'>-- | An LDAPDN is defined to be the representation of a Distinguished Name</span>
<a name="line-179"></a><a name="LdapDn"></a><span class='hs-comment'>-- (DN) after encoding according to the specification in [RFC4514].</span>
<a name="line-180"></a><a name="LdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-181"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-182"></a>
<a name="line-183"></a><a name="LdapString"></a><span class='hs-comment'>-- | The LDAPString is a notational convenience to indicate that, although</span>
<a name="line-184"></a><a name="LdapString"></a><span class='hs-comment'>-- strings of LDAPString type encode as ASN.1 OCTET STRING types, the</span>
<a name="line-185"></a><a name="LdapString"></a><span class='hs-comment'>-- [ISO10646] character set (a superset of [Unicode]) is used, encoded</span>
<a name="line-186"></a><a name="LdapString"></a><span class='hs-comment'>-- following the UTF-8 [RFC3629] algorithm.</span>
<a name="line-187"></a><a name="LdapString"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapString</span> <span class='hs-conid'>Text</span>
<a name="line-188"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-189"></a>
<a name="line-190"></a><a name="LdapOid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>ByteString</span>
<a name="line-191"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-183"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- | A RelativeLDAPDN is defined to be the representation of a Relative</span>
<a name="line-184"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- Distinguished Name (RDN) after encoding according to the</span>
<a name="line-185"></a><a name="RelativeLdapDn"></a><span class='hs-comment'>-- specification in [RFC4514].</span>
<a name="line-186"></a><a name="RelativeLdapDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeLdapDn</span> <span class='hs-conid'>LdapString</span>
<a name="line-187"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-188"></a>
<a name="line-189"></a><a name="ReferralUris"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ReferralUris</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Uri</span><span class='hs-layout'>)</span>
<a name="line-190"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="Uri"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Uri</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Uri</span> <span class='hs-conid'>LdapString</span>
<a name="line-193"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-194"></a>
<a name="line-195"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-196"></a> <span class='hs-conid'>Add</span>
<a name="line-197"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Delete</span>
<a name="line-198"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span>
<a name="line-199"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-200"></a>
<a name="line-201"></a><a name="LdapString"></a><span class='hs-comment'>-- | The LDAPString is a notational convenience to indicate that, although</span>
<a name="line-202"></a><a name="LdapString"></a><span class='hs-comment'>-- strings of LDAPString type encode as ASN.1 OCTET STRING types, the</span>
<a name="line-203"></a><a name="LdapString"></a><span class='hs-comment'>-- [ISO10646] character set (a superset of [Unicode]) is used, encoded</span>
<a name="line-204"></a><a name="LdapString"></a><span class='hs-comment'>-- following the UTF-8 [RFC3629] algorithm. (Section 4.1.2.)</span>
<a name="line-205"></a><a name="LdapString"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapString</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapString</span> <span class='hs-conid'>Text</span>
<a name="line-206"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-207"></a>
<a name="line-208"></a><a name="LdapOid"></a><span class='hs-comment'>-- | The LDAPOID is a notational convenience to indicate that the</span>
<a name="line-209"></a><a name="LdapOid"></a><span class='hs-comment'>-- permitted value of this string is a (UTF-8 encoded) dotted-decimal</span>
<a name="line-210"></a><a name="LdapOid"></a><span class='hs-comment'>-- representation of an OBJECT IDENTIFIER. Although an LDAPOID is</span>
<a name="line-211"></a><a name="LdapOid"></a><span class='hs-comment'>-- encoded as an OCTET STRING, values are limited to the definition of</span>
<a name="line-212"></a><a name="LdapOid"></a><span class='hs-comment'>-- \&lt;numericoid\&gt; given in Section 1.4 of [RFC4512].</span>
<a name="line-213"></a><a name="LdapOid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>LdapOid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LdapOid</span> <span class='hs-conid'>Text</span>
<a name="line-214"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -7,49 +7,71 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></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-2"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>add</span>
<a name="line-3"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addEither</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsync</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>addAsyncSTM</span>
<a name="line-6"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-7"></a>
<a name="line-8"></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-9"></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-10"></a>
<a name="line-11"></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-12"></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-13"></a>
<a name="line-14"></a>
<a name="line-15"></a><a name="add"></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-16"></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-17"></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-18"></a>
<a name="line-19"></a><a name="addEither"></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-20"></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-21"></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-22"></a>
<a name="line-23"></a><a name="addAsync"></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-24"></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-25"></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>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.7 Add&gt; operation.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- * synchronous, exception throwing ('add')</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('addEither')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('addAsync')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('addAsyncSTM')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('add') is probably the most useful for the typical usecase.</span>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>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-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-26"></a>
<a name="line-27"></a><a name="addAsyncSTM"></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-28"></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-29"></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-30"></a>
<a name="line-31"></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-32"></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-33"></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-34"></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-35"></a> <span class='hs-keyword'>where</span>
<a name="line-36"></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-37"></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-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="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-40"></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-41"></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-42"></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-43"></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-44"></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-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>
</pre></body>
</html>

View File

@ -7,71 +7,71 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Bind</span>
<a name="line-2"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>bind</span>
<a name="line-3"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindEither</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsync</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsyncSTM</span>
<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsync</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-8"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-9"></a>
<a name="line-10"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>void</span><span class='hs-layout'>)</span>
<a name="line-11"></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-12"></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-13"></a>
<a name="line-14"></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-15"></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-16"></a>
<a name="line-17"></a>
<a name="line-18"></a><a name="bind"></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-19"></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-20"></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-21"></a>
<a name="line-22"></a><a name="bindEither"></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-23"></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-24"></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-25"></a>
<a name="line-26"></a><a name="bindAsync"></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-27"></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-28"></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-29"></a>
<a name="line-30"></a><a name="bindAsyncSTM"></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-31"></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-32"></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-33"></a>
<a name="line-34"></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-35"></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-36"></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-37"></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-38"></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-39"></a> <span class='hs-keyword'>where</span>
<a name="line-40"></a> <span class='hs-varid'>ldapVersion</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>3</span>
<a name="line-41"></a>
<a name="line-42"></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-43"></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-44"></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-45"></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-46"></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-47"></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-48"></a>
<a name="line-49"></a>
<a name="line-50"></a><a name="unbindAsync"></a><span class='hs-comment'>-- | Note that 'unbindAsync' does not return an 'Async',</span>
<a name="line-51"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-52"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-53"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-54"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-55"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-56"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="unbindAsyncSTM"></a><span class='hs-comment'>-- | Note that 'unbindAsyncSTM' does not return an 'Async',</span>
<a name="line-59"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-60"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-61"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-62"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-63"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-64"></a> <span class='hs-varid'>void</span> <span class='hs-layout'>(</span><span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>die</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>UnbindRequest</span><span class='hs-layout'>)</span>
<a name="line-65"></a> <span class='hs-keyword'>where</span>
<a name="line-66"></a> <span class='hs-varid'>die</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"Ldap.Client: do not wait for the response to UnbindRequest"</span>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.2 Bind&gt; operation.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- * synchronous, exception throwing ('bind')</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('bindEither')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('bindAsync')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('bindAsyncSTM')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('bind') is probably the most useful for the typical usecase.</span>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Bind</span>
<a name="line-15"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>bind</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindEither</span>
<a name="line-17"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsync</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>bindAsyncSTM</span>
<a name="line-19"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-20"></a>
<a name="line-21"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-22"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-26"></a>
<a name="line-27"></a>
<a name="line-28"></a><a name="bind"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-29"></a><span class='hs-definition'>bind</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-30"></a><span class='hs-definition'>bind</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-31"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-32"></a>
<a name="line-33"></a><a name="bindEither"></a><span class='hs-comment'>-- | Perform the Bind operation synchronously. Returns @Left e@ where</span>
<a name="line-34"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-35"></a><span class='hs-definition'>bindEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-definition'>bindEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-37"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="bindAsync"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-40"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-41"></a><span class='hs-definition'>bindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-definition'>bindAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-43"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="bindAsyncSTM"></a><span class='hs-comment'>-- | Perform the Bind operation asynchronously.</span>
<a name="line-46"></a><span class='hs-comment'>--</span>
<a name="line-47"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-48"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-49"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-50"></a><span class='hs-definition'>bindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyglyph'>=</span>
<a name="line-51"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bindRequest</span> <span class='hs-varid'>username</span> <span class='hs-varid'>password</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>bindResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="bindRequest"></a><span class='hs-definition'>bindRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-54"></a><span class='hs-definition'>bindRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Password</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-55"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindRequest</span> <span class='hs-varid'>ldapVersion</span>
<a name="line-56"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>username</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-57"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Simple</span> <span class='hs-varid'>password</span><span class='hs-layout'>)</span>
<a name="line-58"></a> <span class='hs-keyword'>where</span>
<a name="line-59"></a> <span class='hs-varid'>ldapVersion</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>3</span>
<a name="line-60"></a>
<a name="line-61"></a><a name="bindResult"></a><span class='hs-definition'>bindResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-62"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BindResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-63"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-64"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-65"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-66"></a><span class='hs-definition'>bindResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -7,51 +7,73 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></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-2"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>compare</span>
<a name="line-3"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareEither</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsync</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>compareAsyncSTM</span>
<a name="line-6"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-7"></a>
<a name="line-8"></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-9"></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-10"></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-11"></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-12"></a>
<a name="line-13"></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-14"></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-15"></a>
<a name="line-16"></a>
<a name="line-17"></a><a name="compare"></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'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>Bool</span>
<a name="line-18"></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-19"></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-20"></a>
<a name="line-21"></a><a name="compareEither"></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'>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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-22"></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-23"></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-24"></a>
<a name="line-25"></a><a name="compareAsync"></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'>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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-26"></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-27"></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>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.10 Compare&gt; operation.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- * synchronous, exception throwing ('compare')</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('compareEither')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('compareAsync')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('compareAsyncSTM')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('compare') is probably the most useful for the</span>
<a name="line-14"></a><span class='hs-comment'>-- typical usecase.</span>
<a name="line-15"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>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-28"></a>
<a name="line-29"></a><a name="compareAsyncSTM"></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'>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'>Bool</span><span class='hs-layout'>)</span>
<a name="line-30"></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-31"></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-32"></a>
<a name="line-33"></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'>ByteString</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-34"></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-35"></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-36"></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-37"></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-38"></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-39"></a>
<a name="line-40"></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-41"></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-42"></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-43"></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-44"></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-45"></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-46"></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>
<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>
</pre></body>
</html>

View File

@ -7,45 +7,67 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></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-2"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>delete</span>
<a name="line-3"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteEither</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsync</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>deleteAsyncSTM</span>
<a name="line-6"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-7"></a>
<a name="line-8"></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-9"></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-10"></a>
<a name="line-11"></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-12"></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-13"></a>
<a name="line-14"></a>
<a name="line-15"></a><a name="delete"></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-16"></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-17"></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-18"></a>
<a name="line-19"></a><a name="deleteEither"></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-20"></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-21"></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-22"></a>
<a name="line-23"></a><a name="deleteAsync"></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-24"></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-25"></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>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.8 Delete&gt; operation.</span>
<a name="line-2"></a><span class='hs-comment'>--</span>
<a name="line-3"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- * synchronous, exception throwing ('delete')</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('deleteEither')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('deleteAsync')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('deleteAsyncSTM')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- Of those, the first one ('delete') is probably the most useful for the typical usecase.</span>
<a name="line-14"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>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-23"></a>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-26"></a>
<a name="line-27"></a><a name="deleteAsyncSTM"></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-28"></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-29"></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-30"></a>
<a name="line-31"></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-32"></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-33"></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-34"></a>
<a name="line-35"></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-36"></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-37"></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-38"></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-39"></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-40"></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>
<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>
</pre></body>
</html>

View File

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

View File

@ -21,92 +21,92 @@
<a name="line-12"></a> <span class='hs-comment'>-- * Waiting for Request Completion</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>wait</span>
<a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>waitSTM</span>
<a name="line-15"></a> <span class='hs-comment'>-- * Misc</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Response</span>
<a name="line-17"></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-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Request</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>raise</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sendRequest</span>
<a name="line-21"></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-22"></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-23"></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-24"></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-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unAttr</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'>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-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>newEmptyTMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTMVar</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>)</span>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>)</span>
<a name="line-32"></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-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-34"></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-35"></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-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span> <span class='hs-layout'>(</span><span class='hs-conid'>PortNumber</span><span class='hs-layout'>)</span>
<a name="line-37"></a>
<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>
<a name="line-40"></a>
<a name="line-41"></a><a name="Host"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>=</span>
<a name="line-42"></a> <span class='hs-conid'>Plain</span> <span class='hs-conid'>String</span>
<a name="line-43"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Secure</span> <span class='hs-conid'>String</span>
<a name="line-44"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Insecure</span> <span class='hs-conid'>String</span>
<a name="line-45"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-46"></a>
<a name="line-47"></a><a name="Ldap"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-48"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TQueue</span> <span class='hs-conid'>ClientMessage</span>
<a name="line-49"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsync</span>
<a name="line-16"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-17"></a> <span class='hs-comment'>-- * Misc</span>
<a name="line-18"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Response</span>
<a name="line-19"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ResponseError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Request</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>raise</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>sendRequest</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Dn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>RelativeDn</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>AttrValue</span>
<a name="line-28"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>unAttr</span>
<a name="line-29"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>newEmptyTMVar</span><span class='hs-layout'>,</span> <span class='hs-varid'>readTMVar</span><span class='hs-layout'>)</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Concurrent</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span><span class='hs-varop'>.</span><span class='hs-conid'>TQueue</span> <span class='hs-layout'>(</span><span class='hs-conid'>TQueue</span><span class='hs-layout'>,</span> <span class='hs-varid'>writeTQueue</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-layout'>(</span><span class='hs-conid'>Exception</span><span class='hs-layout'>,</span> <span class='hs-varid'>throwIO</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-varid'>void</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>ByteString</span> <span class='hs-layout'>(</span><span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-layout'>(</span><span class='hs-conid'>Text</span><span class='hs-layout'>)</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Network</span> <span class='hs-layout'>(</span><span class='hs-conid'>PortNumber</span><span class='hs-layout'>)</span>
<a name="line-41"></a>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-43"></a>
<a name="line-44"></a>
<a name="line-45"></a><a name="Host"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Host</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-conid'>Plain</span> <span class='hs-conid'>String</span>
<a name="line-47"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Secure</span> <span class='hs-conid'>String</span>
<a name="line-48"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Insecure</span> <span class='hs-conid'>String</span>
<a name="line-49"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>)</span>
<a name="line-50"></a>
<a name="line-51"></a><a name="ClientMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ClientMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>New</span> <span class='hs-conid'>Request</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-52"></a><a name="Request"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolClientOp</span>
<a name="line-53"></a><a name="InMessage"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>InMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span>
<a name="line-54"></a><a name="Response"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>InMessage</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="Async"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-57"></a>
<a name="line-58"></a><a name="instance%20Functor%20Async"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-conid'>Async</span> <span class='hs-keyword'>where</span>
<a name="line-59"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span>
<a name="line-60"></a>
<a name="line-51"></a><a name="Ldap"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Ldap</span>
<a name="line-52"></a> <span class='hs-layout'>{</span> <span class='hs-varid'>client</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TQueue</span> <span class='hs-conid'>ClientMessage</span>
<a name="line-53"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-54"></a>
<a name="line-55"></a><a name="ClientMessage"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ClientMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>New</span> <span class='hs-conid'>Request</span> <span class='hs-layout'>(</span><span class='hs-conid'>TMVar</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-56"></a><a name="Request"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolClientOp</span>
<a name="line-57"></a><a name="InMessage"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>InMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ProtocolServerOp</span>
<a name="line-58"></a><a name="Response"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>InMessage</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="Async"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="Dn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-63"></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-62"></a><a name="instance%20Functor%20Async"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Functor</span> <span class='hs-conid'>Async</span> <span class='hs-keyword'>where</span>
<a name="line-63"></a> <span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Async</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="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-65"></a><a name="Dn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-66"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="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'>ByteString</span>
<a name="line-68"></a><a name="RelativeDn"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-conid'>Text</span>
<a name="line-69"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="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-71"></a><a name="Oid"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Oid</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Oid</span> <span class='hs-conid'>Text</span>
<a name="line-72"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-73"></a>
<a name="line-74"></a>
<a name="line-75"></a><a name="ResponseError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>=</span>
<a name="line-76"></a> <span class='hs-conid'>ResponseInvalid</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Response</span>
<a name="line-77"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseErrorCode</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-78"></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-79"></a>
<a name="line-80"></a><a name="instance%20Either%20e%20a%20-%3e%20IO%20a%20raise%20=%20either%20throwIO%20return"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>ResponseError</span>
<a name="line-74"></a><a name="Password"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Password</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Password</span> <span class='hs-conid'>ByteString</span>
<a name="line-75"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-76"></a>
<a name="line-77"></a><a name="ResponseError"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>=</span>
<a name="line-78"></a> <span class='hs-conid'>ResponseInvalid</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Response</span>
<a name="line-79"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResponseErrorCode</span> <span class='hs-conid'>Request</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ResultCode</span> <span class='hs-conid'>Dn</span> <span class='hs-conid'>Text</span>
<a name="line-80"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a>
<a name="line-82"></a><a name="instance%20Either%20e%20a%20-%3e%20IO%20a%20raise%20=%20either%20throwIO%20return%20--%20%7c%20Note%20that%20'unbindAsync'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsync%20::%20Ldap%20-%3e%20IO%20()%20unbindAsync%20=%20atomically%20.%20unbindAsyncSTM%20--%20%7c%20Note%20that%20'unbindAsyncSTM'%20does%20not%20return%20an%20'Async',%20--%20because%20LDAP%20server%20never%20responds%20to%20@UnbindRequest@s,%20hence%20--%20a%20call%20to%20'wait'%20on%20a%20hypothetical%20'Async'%20would%20have%20resulted%20--%20in%20an%20exception%20anyway.%20unbindAsyncSTM%20::%20Ldap%20-%3e%20STM%20()%20unbindAsyncSTM%20l%20=%20void%20(sendRequest%20l%20die%20Type.UnbindRequest)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Exception</span> <span class='hs-conid'>ResponseError</span>
<a name="line-83"></a>
<a name="line-84"></a><a name="Attr"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Attr</span> <span class='hs-conid'>Text</span>
<a name="line-85"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-86"></a>
<a name="line-87"></a><a name="AttrList"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrList</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-87"></a><a name="AttrValue"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrValue</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ByteString</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="unAttr"></a><span class='hs-comment'>-- 'Attr' unwrapper. This is a separate function not to turn 'Attr''s</span>
<a name="line-90"></a><span class='hs-comment'>-- 'Show' instance into complete and utter shit.</span>
<a name="line-91"></a><span class='hs-definition'>unAttr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span>
<a name="line-92"></a><span class='hs-definition'>unAttr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-93"></a>
<a name="line-94"></a>
<a name="line-95"></a><a name="wait"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-96"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>waitSTM</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="waitSTM"></a><span class='hs-definition'>waitSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-99"></a><span class='hs-definition'>waitSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stm</span>
<a name="line-100"></a>
<a name="line-89"></a><a name="AttrList"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>AttrList</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-varid'>f</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="unAttr"></a><span class='hs-comment'>-- 'Attr' unwrapper. This is a separate function not to turn 'Attr''s</span>
<a name="line-92"></a><span class='hs-comment'>-- 'Show' instance into complete and utter shit.</span>
<a name="line-93"></a><span class='hs-definition'>unAttr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span>
<a name="line-94"></a><span class='hs-definition'>unAttr</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-95"></a>
<a name="line-96"></a><a name="wait"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-97"></a><span class='hs-definition'>wait</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>waitSTM</span>
<a name="line-98"></a>
<a name="line-99"></a><a name="waitSTM"></a><span class='hs-definition'>waitSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Async</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-100"></a><span class='hs-definition'>waitSTM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>stm</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>stm</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="sendRequest"></a><span class='hs-definition'>sendRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-definition'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>p</span> <span class='hs-varid'>msg</span> <span class='hs-keyglyph'>=</span>
@ -119,5 +119,24 @@
<a name="line-110"></a>
<a name="line-111"></a><a name="raise"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Exception</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-varid'>e</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span>
<a name="line-112"></a><span class='hs-definition'>raise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>either</span> <span class='hs-varid'>throwIO</span> <span class='hs-varid'>return</span>
<a name="line-113"></a>
<a name="line-114"></a>
<a name="line-115"></a><a name="unbindAsync"></a><span class='hs-comment'>-- | Note that 'unbindAsync' does not return an 'Async',</span>
<a name="line-116"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-117"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-118"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-119"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-120"></a><span class='hs-definition'>unbindAsync</span> <span class='hs-keyglyph'>=</span>
<a name="line-121"></a> <span class='hs-varid'>atomically</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unbindAsyncSTM</span>
<a name="line-122"></a>
<a name="line-123"></a><a name="unbindAsyncSTM"></a><span class='hs-comment'>-- | Note that 'unbindAsyncSTM' does not return an 'Async',</span>
<a name="line-124"></a><span class='hs-comment'>-- because LDAP server never responds to @UnbindRequest@s, hence</span>
<a name="line-125"></a><span class='hs-comment'>-- a call to 'wait' on a hypothetical 'Async' would have resulted</span>
<a name="line-126"></a><span class='hs-comment'>-- in an exception anyway.</span>
<a name="line-127"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-conid'>()</span>
<a name="line-128"></a><span class='hs-definition'>unbindAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span>
<a name="line-129"></a> <span class='hs-varid'>void</span> <span class='hs-layout'>(</span><span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-varid'>die</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>UnbindRequest</span><span class='hs-layout'>)</span>
<a name="line-130"></a> <span class='hs-keyword'>where</span>
<a name="line-131"></a> <span class='hs-varid'>die</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"Ldap.Client: do not wait for the response to UnbindRequest"</span>
</pre></body>
</html>

View File

@ -7,96 +7,130 @@
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></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'>Modify</span>
<a name="line-2"></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-3"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modify</span>
<a name="line-4"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyEither</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsync</span>
<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsyncSTM</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnEither</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsync</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsyncSTM</span>
<a name="line-11"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-12"></a>
<a name="line-13"></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-14"></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-15"></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-16"></a>
<a name="line-17"></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-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>
<a name="line-20"></a>
<a name="line-21"></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-22"></a> <span class='hs-conid'>Delete</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ByteString</span><span class='hs-keyglyph'>]</span>
<a name="line-23"></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'>ByteString</span><span class='hs-keyglyph'>]</span>
<a name="line-24"></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'>ByteString</span><span class='hs-keyglyph'>]</span>
<a name="line-25"></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-26"></a>
<a name="line-27"></a><a name="modify"></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-28"></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-29"></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-30"></a>
<a name="line-31"></a><a name="modifyEither"></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-32"></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-33"></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>
<pre><a name="line-1"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.6 Modify&gt; and</span>
<a name="line-2"></a><span class='hs-comment'>-- &lt;https://tools.ietf.org/html/rfc4511#section-4.9 Modify DN&gt; operations.</span>
<a name="line-3"></a><span class='hs-comment'>--</span>
<a name="line-4"></a><span class='hs-comment'>-- These operations come in four flavours:</span>
<a name="line-5"></a><span class='hs-comment'>--</span>
<a name="line-6"></a><span class='hs-comment'>-- * synchronous, exception throwing ('modify' / 'modifyDn')</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@</span>
<a name="line-9"></a><span class='hs-comment'>-- ('modifyEither' / 'modifyDnEither')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('modifyAsync' / 'modifyDnAsync')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('modifyAsyncSTM' / 'modifyDnAsyncSTM')</span>
<a name="line-14"></a><span class='hs-comment'>--</span>
<a name="line-15"></a><span class='hs-comment'>-- Of those, the first one ('modify' / 'modifyDn') is probably the most</span>
<a name="line-16"></a><span class='hs-comment'>-- useful for the typical usecase.</span>
<a name="line-17"></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'>Modify</span>
<a name="line-18"></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-19"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modify</span>
<a name="line-20"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyEither</span>
<a name="line-21"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsync</span>
<a name="line-22"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyAsyncSTM</span>
<a name="line-23"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDn</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnEither</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsync</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>modifyDnAsyncSTM</span>
<a name="line-27"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-34"></a>
<a name="line-35"></a><a name="modifyAsync"></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-36"></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-37"></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-38"></a>
<a name="line-39"></a><a name="modifyAsyncSTM"></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-40"></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-41"></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-35"></a>
<a name="line-36"></a><a name="Operation"></a><span class='hs-comment'>-- | Type of modification being performed.</span>
<a name="line-37"></a><a name="Operation"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Operation</span> <span class='hs-keyglyph'>=</span>
<a name="line-38"></a> <span class='hs-conid'>Delete</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Delete values from the attribute. Deletes the attribute if the list is empty or all current values are listed.</span>
<a name="line-39"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Add</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Add values to the attribute, creating it if necessary.</span>
<a name="line-40"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Replace</span> <span class='hs-conid'>Attr</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span> <span class='hs-comment'>-- ^ Replace all existing values of the attribute with the new list. Deletes the attribute if the list is empty.</span>
<a name="line-41"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-42"></a>
<a name="line-43"></a><a name="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-44"></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-45"></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-46"></a> <span class='hs-keyword'>where</span>
<a name="line-47"></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-48"></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-49"></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-50"></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-51"></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-52"></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-53"></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-54"></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-55"></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-56"></a>
<a name="line-57"></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-58"></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-59"></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-60"></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-61"></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-62"></a>
<a name="line-63"></a>
<a name="line-64"></a><a name="modifyDn"></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-65"></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-66"></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-43"></a><a name="modify"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-44"></a><span class='hs-definition'>modify</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-45"></a><span class='hs-definition'>modify</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-46"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-47"></a>
<a name="line-48"></a><a name="modifyEither"></a><span class='hs-comment'>-- | Perform the Modify operation synchronously. Returns @Left e@ where</span>
<a name="line-49"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-50"></a><span class='hs-definition'>modifyEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-51"></a><span class='hs-definition'>modifyEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-52"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="modifyAsync"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-55"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-56"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-57"></a><span class='hs-definition'>modifyAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span> <span class='hs-keyglyph'>=</span>
<a name="line-58"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-keyword'>as</span><span class='hs-layout'>)</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="modifyAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify operation asynchronously.</span>
<a name="line-61"></a><span class='hs-comment'>--</span>
<a name="line-62"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-63"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-64"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-definition'>modifyAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-66"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>xs</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="modifyDnEither"></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-69"></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-70"></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-71"></a>
<a name="line-72"></a><a name="modifyDnAsync"></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-73"></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-74"></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-75"></a>
<a name="line-76"></a><a name="modifyDnAsyncSTM"></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-77"></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-78"></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-79"></a>
<a name="line-80"></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-81"></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-82"></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-83"></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-84"></a> <span class='hs-varid'>del</span>
<a name="line-85"></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-86"></a>
<a name="line-87"></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-88"></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-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'>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-68"></a><a name="modifyRequest"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Operation</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-69"></a><span class='hs-definition'>modifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span>
<a name="line-70"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-71"></a> <span class='hs-keyword'>where</span>
<a name="line-72"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Delete</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-73"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Delete</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-74"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-75"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Add</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-76"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Add</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-77"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-78"></a> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Replace</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-79"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Replace</span><span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>k</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-80"></a> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>vs</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="modifyResult"></a><span class='hs-definition'>modifyResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-83"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-85"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-86"></a><span class='hs-definition'>modifyResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-87"></a>
<a name="line-88"></a>
<a name="line-89"></a><a name="modifyDn"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-90"></a><span class='hs-definition'>modifyDn</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>()</span>
<a name="line-91"></a><span class='hs-definition'>modifyDn</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-92"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-93"></a>
<a name="line-94"></a><a name="modifyDnEither"></a><span class='hs-comment'>-- | Perform the Modify DN operation synchronously. Returns @Left e@ where</span>
<a name="line-95"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-96"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-97"></a><span class='hs-definition'>modifyDnEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-98"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="modifyDnAsync"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-101"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-102"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-103"></a><span class='hs-definition'>modifyDnAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="modifyDnAsyncSTM"></a><span class='hs-comment'>-- | Perform the Modify DN operation asynchronously.</span>
<a name="line-107"></a><span class='hs-comment'>--</span>
<a name="line-108"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-109"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-110"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-111"></a><span class='hs-definition'>modifyDnAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-112"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>modifyDnRequest</span> <span class='hs-varid'>dn</span> <span class='hs-varid'>rdn</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>modifyDnResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-113"></a>
<a name="line-114"></a><a name="modifyDnRequest"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>RelativeDn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-115"></a><span class='hs-definition'>modifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>RelativeDn</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span> <span class='hs-varid'>del</span> <span class='hs-varid'>new</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-117"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>RelativeLdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>rdn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-118"></a> <span class='hs-varid'>del</span>
<a name="line-119"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>new</span><span class='hs-layout'>)</span>
<a name="line-120"></a>
<a name="line-121"></a><a name="modifyDnResult"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-conid'>()</span>
<a name="line-122"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ModifyDnResponse</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-conid'>()</span>
<a name="line-124"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-125"></a><span class='hs-definition'>modifyDnResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

@ -9,181 +9,208 @@
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# LANGUAGE NamedFieldPuns #-}</span>
<a name="line-3"></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-4"></a> <span class='hs-layout'>(</span> <span class='hs-varid'>search</span>
<a name="line-5"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchEither</span>
<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsync</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>searchAsyncSTM</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Search</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Mod</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>scope</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>size</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>time</span>
<a name="line-14"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>typesOnly</span>
<a name="line-15"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>derefAliases</span>
<a name="line-16"></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-17"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-18"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-19"></a>
<a name="line-20"></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-21"></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-22"></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-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-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-25"></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-26"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</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'>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-28"></a><span class='hs-cpp'>#else</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>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-30"></a><span class='hs-cpp'>#endif</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-34"></a>
<a name="line-35"></a>
<a name="line-36"></a><a name="search"></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-37"></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-38"></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-39"></a>
<a name="line-40"></a><a name="searchEither"></a><span class='hs-definition'>searchEither</span>
<a name="line-41"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-42"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-43"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-44"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-45"></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-46"></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-47"></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-48"></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-49"></a>
<a name="line-50"></a><a name="searchAsync"></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-51"></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-52"></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-53"></a>
<a name="line-54"></a><a name="searchAsyncSTM"></a><span class='hs-definition'>searchAsyncSTM</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'>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-55"></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-56"></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-57"></a>
<a name="line-58"></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-59"></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-60"></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-61"></a> <span class='hs-sel'>_scope</span>
<a name="line-62"></a> <span class='hs-sel'>_derefAliases</span>
<a name="line-63"></a> <span class='hs-sel'>_size</span>
<a name="line-64"></a> <span class='hs-sel'>_time</span>
<a name="line-65"></a> <span class='hs-sel'>_typesOnly</span>
<a name="line-66"></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-67"></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-68"></a> <span class='hs-keyword'>where</span>
<a name="line-69"></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-70"></a> <span class='hs-varid'>m</span> <span class='hs-varid'>defaultSearch</span>
<a name="line-71"></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-72"></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-73"></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-74"></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-75"></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-76"></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-77"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>EqualityMatch</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'>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-79"></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-80"></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-81"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>GreaterOrEqual</span>
<a name="line-82"></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-83"></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-84"></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-85"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LessOrEqual</span>
<a name="line-86"></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-87"></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-88"></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-89"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ApproxMatch</span>
<a name="line-90"></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-91"></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-92"></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-93"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Substrings</span>
<a name="line-94"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>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-95"></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-96"></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-97"></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-98"></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-99"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</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-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-101"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtensibleMatch</span>
<a name="line-102"></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-103"></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-104"></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-105"></a> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-106"></a>
<a name="line-107"></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-108"></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-109"></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-110"></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-111"></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-112"></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-113"></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-114"></a> <span class='hs-keyword'>where</span>
<a name="line-115"></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-116"></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-117"></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-118"></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-119"></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-120"></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-121"></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-122"></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-123"></a>
<a name="line-124"></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-125"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span>
<a name="line-126"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span>
<a name="line-127"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-128"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-129"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span>
<a name="line-130"></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-131"></a>
<a name="line-132"></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-133"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-134"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BaseObject</span>
<a name="line-135"></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-136"></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-137"></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-138"></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-139"></a> <span class='hs-layout'>}</span>
<a name="line-140"></a>
<a name="line-141"></a><a name="scope"></a><span class='hs-definition'>scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-142"></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-143"></a>
<a name="line-144"></a><a name="size"></a><span class='hs-definition'>size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-145"></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-146"></a>
<a name="line-147"></a><a name="time"></a><span class='hs-definition'>time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-148"></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-149"></a>
<a name="line-150"></a><a name="typesOnly"></a><span class='hs-definition'>typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-151"></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-152"></a>
<a name="line-153"></a><a name="derefAliases"></a><span class='hs-definition'>derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-154"></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-155"></a>
<a name="line-156"></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-157"></a>
<a name="line-158"></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-159"></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-160"></a>
<a name="line-161"></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-162"></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-163"></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-164"></a>
<a name="line-165"></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-166"></a> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-167"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-168"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-169"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>Attr</span>
<a name="line-170"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=</span> <span class='hs-conid'>ByteString</span>
<a name="line-171"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-conid'>ByteString</span>
<a name="line-172"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-conid'>ByteString</span>
<a name="line-173"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:~=</span> <span class='hs-conid'>ByteString</span>
<a name="line-174"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>ByteString</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ByteString</span><span class='hs-layout'>)</span>
<a name="line-175"></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'>ByteString</span>
<a name="line-3"></a><span class='hs-comment'>-- | &lt;https://tools.ietf.org/html/rfc4511#section-4.5 Search&gt; operation.</span>
<a name="line-4"></a><span class='hs-comment'>--</span>
<a name="line-5"></a><span class='hs-comment'>-- This operation comes in four flavours:</span>
<a name="line-6"></a><span class='hs-comment'>--</span>
<a name="line-7"></a><span class='hs-comment'>-- * synchronous, exception throwing ('search')</span>
<a name="line-8"></a><span class='hs-comment'>--</span>
<a name="line-9"></a><span class='hs-comment'>-- * synchronous, returning 'Either' 'ResponseError' @()@ ('searchEither')</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- * asynchronous, 'IO' based ('searchAsync')</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- * asynchronous, 'STM' based ('searchAsyncSTM')</span>
<a name="line-14"></a><span class='hs-comment'>--</span>
<a name="line-15"></a><span class='hs-comment'>-- Of those, the first one ('search') is probably the most useful for the typical usecase.</span>
<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-varid'>derefAliases</span>
<a name="line-29"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-30"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>SearchEntry</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-31"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-32"></a>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>STM</span><span class='hs-layout'>,</span> <span class='hs-varid'>atomically</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Int</span> <span class='hs-layout'>(</span><span class='hs-conid'>Int32</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conop'>:|</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span><span class='hs-varop'>.</span><span class='hs-conid'>NonEmpty</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>NonEmpty</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span><span class='hs-layout'>)</span>
<a name="line-38"></a><span class='hs-cpp'>#if __GLASGOW_HASKELL__ &gt;= 710</span>
<a name="line-39"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-40"></a><span class='hs-cpp'>#else</span>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Semigroup</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Monoid</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-42"></a><span class='hs-cpp'>#endif</span>
<a name="line-43"></a>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Asn1</span><span class='hs-varop'>.</span><span class='hs-conid'>Type</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>Type</span>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Ldap</span><span class='hs-varop'>.</span><span class='hs-conid'>Client</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-46"></a>
<a name="line-47"></a>
<a name="line-48"></a><a name="search"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Raises 'ResponseError' on failures.</span>
<a name="line-49"></a><span class='hs-definition'>search</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-50"></a><span class='hs-definition'>search</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-51"></a> <span class='hs-varid'>raise</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="searchEither"></a><span class='hs-comment'>-- | Perform the Search operation synchronously. Returns @Left e@ where</span>
<a name="line-54"></a><span class='hs-comment'>-- @e@ is a 'ResponseError' on failures.</span>
<a name="line-55"></a><span class='hs-definition'>searchEither</span>
<a name="line-56"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-57"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-58"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-59"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-60"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-61"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-62"></a><span class='hs-definition'>searchEither</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-63"></a> <span class='hs-varid'>wait</span> <span class='hs-varop'>=&lt;&lt;</span> <span class='hs-varid'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="searchAsync"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously. Call 'Ldap.Client.wait' to wait</span>
<a name="line-66"></a><span class='hs-comment'>-- for its completion.</span>
<a name="line-67"></a><span class='hs-definition'>searchAsync</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-68"></a><span class='hs-definition'>searchAsync</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-69"></a> <span class='hs-varid'>atomically</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span>
<a name="line-70"></a>
<a name="line-71"></a><a name="searchAsyncSTM"></a><span class='hs-comment'>-- | Perform the Search operation asynchronously.</span>
<a name="line-72"></a><span class='hs-comment'>--</span>
<a name="line-73"></a><span class='hs-comment'>-- Don't wait for its completion (with 'Ldap.Client.waitSTM') in the</span>
<a name="line-74"></a><span class='hs-comment'>-- same transaction you've performed it in.</span>
<a name="line-75"></a><span class='hs-definition'>searchAsyncSTM</span>
<a name="line-76"></a> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Ldap</span>
<a name="line-77"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Dn</span>
<a name="line-78"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-79"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span>
<a name="line-80"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span>
<a name="line-81"></a> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>STM</span> <span class='hs-layout'>(</span><span class='hs-conid'>Async</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-82"></a><span class='hs-definition'>searchAsyncSTM</span> <span class='hs-varid'>l</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-83"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>req</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>searchRequest</span> <span class='hs-varid'>base</span> <span class='hs-varid'>opts</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>sendRequest</span> <span class='hs-varid'>l</span> <span class='hs-layout'>(</span><span class='hs-varid'>searchResult</span> <span class='hs-varid'>req</span><span class='hs-layout'>)</span> <span class='hs-varid'>req</span>
<a name="line-84"></a>
<a name="line-85"></a><a name="searchRequest"></a><span class='hs-definition'>searchRequest</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Dn</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Attr</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Request</span>
<a name="line-86"></a><span class='hs-definition'>searchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>flt</span> <span class='hs-varid'>attributes</span> <span class='hs-keyglyph'>=</span>
<a name="line-87"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchRequest</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>base</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-88"></a> <span class='hs-sel'>_scope</span>
<a name="line-89"></a> <span class='hs-sel'>_derefAliases</span>
<a name="line-90"></a> <span class='hs-sel'>_size</span>
<a name="line-91"></a> <span class='hs-sel'>_time</span>
<a name="line-92"></a> <span class='hs-sel'>_typesOnly</span>
<a name="line-93"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>flt</span><span class='hs-layout'>)</span>
<a name="line-94"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeSelection</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varop'>.</span> <span class='hs-varid'>unAttr</span><span class='hs-layout'>)</span> <span class='hs-varid'>attributes</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-95"></a> <span class='hs-keyword'>where</span>
<a name="line-96"></a> <span class='hs-conid'>Search</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span><span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span><span class='hs-layout'>,</span> <span class='hs-sel'>_size</span><span class='hs-layout'>,</span> <span class='hs-sel'>_time</span><span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span>
<a name="line-97"></a> <span class='hs-varid'>m</span> <span class='hs-varid'>defaultSearch</span>
<a name="line-98"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Not</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Not</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromFilter</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span>
<a name="line-99"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>And</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-100"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Or</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-varid'>fromFilter</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-101"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-102"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Present</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-103"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-104"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>EqualityMatch</span>
<a name="line-105"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-106"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-107"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-108"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>GreaterOrEqual</span>
<a name="line-109"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-110"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-111"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-112"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LessOrEqual</span>
<a name="line-113"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-114"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-115"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:~=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ApproxMatch</span>
<a name="line-117"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValueAssertion</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-118"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-119"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-varid'>mi</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>mf</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-120"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Substrings</span>
<a name="line-121"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SubstringFilter</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-122"></a> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span><span class='hs-varop'>.</span><span class='hs-varid'>fromList</span> <span class='hs-layout'>(</span><span class='hs-varid'>concat</span>
<a name="line-123"></a> <span class='hs-keyglyph'>[</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>i</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Initial</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mi</span>
<a name="line-124"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Any</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-125"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>maybe</span> <span class='hs-conid'>[]</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Final</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-varid'>mf</span>
<a name="line-126"></a> <span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-127"></a> <span class='hs-varid'>fromFilter</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>mx</span><span class='hs-layout'>,</span> <span class='hs-varid'>mr</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-128"></a> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>ExtensibleMatch</span>
<a name="line-129"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleAssertion</span> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>MatchingRuleId</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mr</span><span class='hs-layout'>)</span>
<a name="line-130"></a> <span class='hs-layout'>(</span><span class='hs-varid'>fmap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>mx</span><span class='hs-layout'>)</span>
<a name="line-131"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AssertionValue</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-132"></a> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-133"></a>
<a name="line-134"></a><a name="searchResult"></a><span class='hs-definition'>searchResult</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Request</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Response</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>ResponseError</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>SearchEntry</span><span class='hs-keyglyph'>]</span>
<a name="line-135"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultDone</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapResult</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-136"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-conop'>:|</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-137"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Success</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-138"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AdminLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-139"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SizeLimitExceeded</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>code</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapMaybe</span> <span class='hs-varid'>g</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-140"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseErrorCode</span> <span class='hs-varid'>req</span> <span class='hs-varid'>code</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn'</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span>
<a name="line-141"></a> <span class='hs-keyword'>where</span>
<a name="line-142"></a> <span class='hs-varid'>g</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>SearchResultEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapDn</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-143"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttributeList</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-144"></a> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>SearchEntry</span> <span class='hs-layout'>(</span><span class='hs-conid'>Dn</span> <span class='hs-varid'>dn</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>map</span> <span class='hs-varid'>h</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-145"></a> <span class='hs-varid'>g</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-146"></a> <span class='hs-varid'>h</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>PartialAttribute</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeDescription</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>LdapString</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-147"></a> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>Attr</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>j</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-148"></a> <span class='hs-varid'>j</span> <span class='hs-layout'>(</span><span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>AttributeValue</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-149"></a><span class='hs-definition'>searchResult</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Left</span> <span class='hs-layout'>(</span><span class='hs-conid'>ResponseInvalid</span> <span class='hs-varid'>req</span> <span class='hs-varid'>res</span><span class='hs-layout'>)</span>
<a name="line-150"></a>
<a name="line-151"></a><a name="Search"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Search</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-152"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span>
<a name="line-153"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span>
<a name="line-154"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-155"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span>
<a name="line-156"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span>
<a name="line-157"></a> <span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-158"></a>
<a name="line-159"></a><a name="defaultSearch"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Search</span>
<a name="line-160"></a><span class='hs-definition'>defaultSearch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Search</span>
<a name="line-161"></a> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>BaseObject</span>
<a name="line-162"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-163"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-164"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-165"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>NeverDerefAliases</span>
<a name="line-166"></a> <span class='hs-layout'>}</span>
<a name="line-167"></a>
<a name="line-168"></a><a name="scope"></a><span class='hs-definition'>scope</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>Scope</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-169"></a><span class='hs-definition'>scope</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_scope</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="size"></a><span class='hs-definition'>size</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-172"></a><span class='hs-definition'>size</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_size</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-173"></a>
<a name="line-174"></a><a name="time"></a><span class='hs-definition'>time</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int32</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-175"></a><span class='hs-definition'>time</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_time</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-176"></a>
<a name="line-177"></a><a name="SearchEntry"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-conid'>Dn</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttrList</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-178"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-177"></a><a name="typesOnly"></a><span class='hs-definition'>typesOnly</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-178"></a><span class='hs-definition'>typesOnly</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_typesOnly</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-179"></a>
<a name="line-180"></a><a name="derefAliases"></a><span class='hs-definition'>derefAliases</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span><span class='hs-varop'>.</span><span class='hs-conid'>DerefAliases</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-conid'>Search</span>
<a name="line-181"></a><span class='hs-definition'>derefAliases</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>y</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>y</span> <span class='hs-layout'>{</span> <span class='hs-sel'>_derefAliases</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-182"></a>
<a name="line-183"></a><a name="Mod"></a><span class='hs-keyword'>newtype</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-184"></a>
<a name="line-185"></a><a name="instance%20Semigroup%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Semigroup</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-186"></a> <span class='hs-conid'>Mod</span> <span class='hs-varid'>f</span> <span class='hs-varop'>&lt;&gt;</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>g</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-layout'>(</span><span class='hs-varid'>g</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-187"></a>
<a name="line-188"></a><a name="instance%20Monoid%20(Mod%20a)"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Monoid</span> <span class='hs-layout'>(</span><span class='hs-conid'>Mod</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-189"></a> <span class='hs-varid'>mempty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Mod</span> <span class='hs-varid'>id</span>
<a name="line-190"></a> <span class='hs-varid'>mappend</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;&gt;</span><span class='hs-layout'>)</span>
<a name="line-191"></a>
<a name="line-192"></a><a name="Filter"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Filter</span> <span class='hs-keyglyph'>=</span>
<a name="line-193"></a> <span class='hs-conid'>Not</span> <span class='hs-conid'>Filter</span>
<a name="line-194"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>And</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-195"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Or</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonEmpty</span> <span class='hs-conid'>Filter</span><span class='hs-layout'>)</span>
<a name="line-196"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Present</span> <span class='hs-conid'>Attr</span>
<a name="line-197"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-198"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&gt;=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-199"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:&lt;=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-200"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:~=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-201"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Attr</span> <span class='hs-conop'>:=*</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>AttrValue</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>AttrValue</span><span class='hs-layout'>)</span>
<a name="line-202"></a> <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-conop'>::=</span> <span class='hs-conid'>AttrValue</span>
<a name="line-203"></a>
<a name="line-204"></a><a name="SearchEntry"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SearchEntry</span> <span class='hs-conid'>Dn</span> <span class='hs-layout'>(</span><span class='hs-conid'>AttrList</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-205"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
</pre></body>
</html>

View File

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