kind.hs:7:0:<br>    Illegal instance declaration for `Yesno t&#39;<br>        (All instance types must be of the form (T a1 ... an)<br>         where a1 ... an are type *variables*,<br>         and each type variable appears at most once in the instance head.<br>

         Use -XFlexibleInstances if you want to disable this.)<br>    In the instance declaration for `Yesno t&#39;<br>Failed, modules loaded: none.<br><br>So, I added the suggested Pragma<br>{-# LANGUAGE FlexibleInstances #-}<br>

module Kind where<br>....<br><br>Prelude&gt; :l kind.hs <br><div class="im">[1 of 1] Compiling Kind             ( kind.hs, interpreted )<br><br></div>kind.hs:7:0:<br>    Constraint is no smaller than the instance head<br>
      in the constraint: Num t<br>
    (Use -XUndecidableInstances to permit this)<br>    In the instance declaration for `Yesno t&#39;<br>Failed, modules loaded: none.<br><br>Adjusted pragma to<br>{-# LANGUAGE FlexibleInstances,<div id=":1a7">UndecidableInstances #-}<br>

<br>Prelude&gt; :l kind.hs <br><div class="im">[1 of 1] Compiling Kind             ( kind.hs, interpreted )<br>Ok, modules loaded: Kind.<br><br>*Kind&gt; yesno 10<br></div>True<br>*Kind&gt; yesno 0<br>False<br><br>I am not sure if I understand the implications here. Did I introduce a bug?<br>

<br>-Amitava</div><br><br><div class="gmail_quote">On Tue, Mar 15, 2011 at 3:28 PM, aditya siram <span dir="ltr">&lt;<a href="mailto:aditya.siram@gmail.com">aditya.siram@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Untested, but you might try:<br>
<br>
instance (Num t) =&gt; YesNo t where  ....<br>
<br>
-deech<br>
<div><div></div><div class="h5"><br>
On Tue, Mar 15, 2011 at 2:21 PM, Amitava Shee &lt;<a href="mailto:amitava.shee@gmail.com">amitava.shee@gmail.com</a>&gt; wrote:<br>
&gt; While reading &quot;Learn You a Haskell for Great Good!&quot; I came across the YesNo<br>
&gt; type class<br>
&gt;<br>
&gt; I tried a minimal version as below<br>
&gt;<br>
&gt; module Kind where<br>
&gt;<br>
&gt; class Yesno a where<br>
&gt;     yesno :: a -&gt; Bool<br>
&gt;<br>
&gt; instance Yesno Int where<br>
&gt;     yesno 0 = False<br>
&gt;     yesno _ = True<br>
&gt;<br>
&gt;<br>
&gt; I was surprised to get an error<br>
&gt;<br>
&gt; *Kind&gt; :load kind.hs<br>
&gt; [1 of 1] Compiling Kind             ( kind.hs, interpreted )<br>
&gt; Ok, modules loaded: Kind.<br>
&gt; *Kind&gt; yesno 10<br>
&gt;<br>
&gt; &lt;interactive&gt;:1:6:<br>
&gt;     Ambiguous type variable `t&#39; in the constraints:<br>
&gt;       `Num t&#39; arising from the literal `10&#39; at &lt;interactive&gt;:1:6-7<br>
&gt;       `Yesno t&#39; arising from a use of `yesno&#39; at &lt;interactive&gt;:1:0-7<br>
&gt;     Probable fix: add a type signature that fixes these type variable(s)<br>
&gt;<br>
&gt; Turns out 10 in this instance is an Integer and I have not defined Yesno<br>
&gt; over Integer<br>
&gt;<br>
&gt; Easy fix - just define an instance over Integer<br>
&gt;<br>
&gt; instance Yesno Integer where<br>
&gt;     yesno 0 = False<br>
&gt;     yesno _ = True<br>
&gt;<br>
&gt; My question - Is there a way to avoid this kind of boilerplate? What is the<br>
&gt; idiomatic way?<br>
&gt;<br>
&gt; Thanks &amp; Regards,<br>
&gt; Amitava Shee<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Beginners mailing list<br>
&gt; <a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br><br clear="all"><br>-- <br>Amitava Shee<br>Software Architect<br><br>There are two ways of constructing a software design. One is to make it so simple that there are obviously no deficiencies; the other is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.<br>
-- C. A. R. Hoare The Emperor&#39;s Old Clothes, CACM February 1981<br>