Hi Ryan,<br><br>&nbsp;&nbsp; Please see below.<br><br>Vasili<br><br><br><div class="gmail_quote">On Wed, Jul 9, 2008 at 4:03 AM, Ryan Ingram &lt;<a href="mailto:ryani.spam@gmail.com">ryani.spam@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Try {-# LANGUAGE RankNTypes #-}?</blockquote><div>&nbsp; &nbsp; &nbsp; vigalchin@ubuntu:~/FTP/Haskell/hsql-1.7$ runhaskell Setup.lhs build<br>Preprocessing library hsql-1.7...<br>Building hsql-1.7...<br>[1 of 2] Compiling Database.HSQL.Types ( Database/HSQL/Types.hs, dist/build/Database/HSQL/Types.o )<br>
<br>Database/HSQL/Types.hs:67:0:<br>&nbsp;&nbsp;&nbsp; Can&#39;t make a derived instance of `Typeable SqlError&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (You need -XDeriveDataTypeable to derive an instance for this class)<br>&nbsp;&nbsp;&nbsp; In the data type declaration for `SqlError&#39;<br>
&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
&quot;forall&quot; does denote a universal quantifier, but because the &#39;implies&#39;<br>
of the function arrow, in logic, includes negation, you can use it to<br>
emulate existential quantifiers.<br>
<br>
&gt; data Existential = forall a. Ex a<br>
<br>
The type of the constructor Ex:<br>
 &nbsp;Ex :: forall a. a -&gt; Existential</blockquote><div>&nbsp; &nbsp; &nbsp; &nbsp; Classical logic opposed to intuitionistic logic? &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
Pattern matching on Ex brings &quot;a&quot; back into scope (with no information<br>
about it, so this type isn&#39;t that useful on its own):<br>
<br>
&gt; use (Ex x) = 0 -- can&#39;t recover any useful information about x<br>
&gt; sample = Ex &quot;sample&quot;<br>
<br>
However, you can use existential types to encode additional<br>
information about the included data; for example:<br>
<br>
&gt; -- Ex2 :: forall a. Show a =&gt; a -&gt; Exist2<br>
&gt; data Exist2 = forall a. Show a =&gt; Ex2 a<br>
<br>
Now, pattern matching on Ex2 brings the Show instance into scope as well:<br>
<br>
&gt; sample2 = Ex2 &quot;sample2&quot;<br>
&gt; use2 (Ex2 x) = show x<br>
<br>
You can also use higher rank polymorphism to encode existential types:<br>
<br>
&gt; -- Ex3 :: (forall a. (forall b. Show b =&gt; b -&gt; a) -&gt; a) -&gt; Exist3<br>
&gt; -- note the rank-3 type on Ex3!<br>
&gt; newtype Exist3 = Ex3 (forall a. (forall b. Show b =&gt; b -&gt; a) -&gt; a)<br>
<br>
&gt; sample3 = Ex3 (\k -&gt; k &quot;sample3&quot;)<br>
&gt; use3 (Ex3 f) = f (\x -&gt; show x)<br>
<br>
 &nbsp;-- ryan<br>
<br>
2008/7/8 Galchin, Vasili &lt;<a href="mailto:vigalchin@gmail.com">vigalchin@gmail.com</a>&gt;:<br>
<div><div></div><div class="Wj3C7c">&gt; Hello,<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp;It seems to me by its name that &quot;forall&quot; denotes a logical universal<br>
&gt; quantifier. In any case, hsql-1.7/Database/HSQL/Types.hs uses &quot;forall&quot; at<br>
&gt; line #134. I got a nasty build so I added {-# LANGUAGE<br>
&gt; ExistentialQuantification #-} at the top of the module. Now I get the<br>
&gt; following a coupleof lines up:<br>
&gt;<br>
&gt; Database/HSQL/Types.hs:131:5:<br>
&gt; &nbsp; &nbsp; Illegal polymorphic or qualified type: forall a.<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Int<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; FieldDef<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; FieldDef<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; CString<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; Int<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; IO a<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-&gt; IO a<br>
&gt; &nbsp; &nbsp; In the definition of data constructor `Statement&#39;<br>
&gt; &nbsp; &nbsp; In the data type declaration for `Statement&#39;<br>
&gt;<br>
&gt; If seems that GHC doesn&#39;t like &quot;a&quot;. Why?<br>
&gt;<br>
&gt; Kind regards, Vasili<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br>