Hi,<br><br>I&#39;m trying to do something like the following:<br><br><div style="margin-left: 40px;">class Foo a where<br>    doit :: (String -&gt; IO ()) -&gt; a -&gt; IO ()<br> <br>instance Foo Int where<br>    doit f = f . show<br>

<br>instance Foo Char where<br>    doit f = f . (:[])<br></div><br>So now I have a &quot;doit&quot; function for Ints and Chars, that takes a function and does the IO with the given function. Now I could define function p as<br>

<br><div style="margin-left: 40px;">p :: (Foo a) =&gt; a -&gt; IO ()<br>p = doit putStrLn<br></div><br>so I could do<br><br><div style="margin-left: 40px;">main = do<br></div><div style="margin-left: 40px;">    p 3<br>    p &#39;X&#39;<br>
</div><br>in main, but I would like to compeltely hide the fact from p that it somehow belongs to the Foo class, so I would like to do something like this:<br>
<br><div style="margin-left: 40px;">class Foo a =&gt; Bar a where<br>    p2 :: a -&gt; IO ()<br>    p2 = doit putStrln<br></div><br>but, though Foo Int and Foo Char are defined, Bar Int and Bar Char are not defined automatically, so given this class definition I will not be able to call <br>
<div style="margin-left: 40px;">p2 3<br></div>and<br><div style="margin-left: 40px;">p2 &#39;X&#39;<br></div><br>Is there still some way to do something like this?<br><br>Thanks,<br>Istvan<br><br><br>