<div dir="ltr">You need something like this:<div><br></div><div>{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}<br><br>class YesNo a where  <br>    yesno :: a -> Bool<br>    <br>instance (Num a, Eq a) => YesNo a where<br>    yesno = (/= 0)<br></div><div><br></div><div>The reason this doesn't work without turning on some "scary" flags is that you can easily write code that is ambiguous since typeclasses are open. Open means that some other file can define a data type that has an instance of Num and an instance for YesNo and then there's no obvious choice which instance should be used.<br></div><div><br></div><div>If you want a bit more detail, here's a relevant StackOverflow question: <a href="https://stackoverflow.com/questions/8877541/how-to-write-an-instance-for-all-types-in-another-type-class">https://stackoverflow.com/questions/8877541/how-to-write-an-instance-for-all-types-in-another-type-class</a></div><div><br></div><div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 3, 2021 at 9:26 PM Galaxy Being <<a href="mailto:borgauf@gmail.com">borgauf@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I'm following LYHFGG and I have this<div><br></div><div><font face="monospace">class YesNo a where  <br>    yesno :: a -> Bool<br></font></div><div><font face="monospace"><br></font></div><div><font face="monospace">instance YesNo Int where  <br>    yesno 0 = False  <br>    yesno _ = True</font><br></div><div><br></div><div>but then I have to specify<font face="monospace"> Int </font>here</div><div><br></div><div><font face="monospace">> yesno (5 :: Int)</font></div><div><font face="monospace">True</font></div><div><br></div><div>Just with 5 gives this error</div><div><br></div><div><font face="monospace">Ambiguous type variable ‘a0’ arising from the literal ‘5’<br>      prevents the constraint ‘(Num a0)’ from being solved.<br>      Probable fix: use a type annotation to specify what ‘a0’ should be.<br></font></div><div><br></div><div>I tried this</div><div><br></div><div>instance YesNo (Num a) where  <br>    yesno 0 = False  <br>    yesno _ = True<br></div><div><br></div><div>but got cryptic errors. What can I do to make <font face="monospace">yesno</font> take any of <font face="monospace">Num</font>'s numbers?</div><div><br></div><div>LB</div><div><br></div></div>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>