<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=US-ASCII" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Alexander Solla wrote:<br>
<blockquote cite="mid:A5B8FC1A-11D7-4D11-AE62-DDAC0D611625@2piix.com"
 type="cite">You specifically ask withConstraintsOf to accept only
Suitable2's when you say
  <br>
  <blockquote type="cite">withConstraintsOf :: Suitable2 m a b =&gt; m
a b -&gt; (Constraints m a b -&gt; k) -&gt; k
    <br>
  </blockquote>
  <br>
But you aren't saying that the argument of withConstraintsOf IS a
Suitable2, when you say:
  <br>
  <blockquote type="cite">instance (RCategory c1, RCategory c2) =&gt;
RCategory (c1 :***: c2) where
    <br>
id = withResConstraints $ \ProdConstraints -&gt; id :***: id
    <br>
-- f@(f1 :***: f2) . g@(g1 :***: g2) =
    <br>
--&nbsp;&nbsp; withResConstraints $ \ProdConstraints -&gt;
    <br>
--&nbsp;&nbsp; withConstraintsOf f $ \ProdConstraints -&gt;
    <br>
--&nbsp;&nbsp; withConstraintsOf g $ \ProdConstraints -&gt;
    <br>
--&nbsp;&nbsp; (f1 . g1) :***: (f2 . g2)
  </blockquote>
</blockquote>
As I understand, Sjoerd expects this to be done at the definition of
(.) in the type class RCategory, so that an instance method can relay
on the constraints collected by it:<br>
<blockquote type="cite">
  <pre wrap="">class RCategory (~&gt;) where
  id :: Suitable2 (~&gt;) a a =&gt; a ~&gt; a
  (.) :: (Suitable2 (~&gt;) b c, Suitable2 (~&gt;) a b, Suitable2 (~&gt;) a c) =&gt; b ~&gt; c -&gt; a ~&gt; b -&gt; a ~&gt; c
  </pre>
</blockquote>
<pre wrap=""><!---->A simple example: 
</pre>
class Show el=&gt; ExceptionNote el where<br>
&nbsp; comment:: Show exception=&gt; exception-&gt; el-&gt; String<br>
&nbsp; <br>
instance ExceptionNote Int where<br>
&nbsp; comment exception refId = show refId ++ ": " ++ show exception<br>
&nbsp; <br>
Here you don't need to constrain &laquo;exception&raquo; to be of &laquo;Show&raquo; at the
instance declaration. So it does not appear wrong for Sjoerd to expect
f and g to already be of Suitable2...<br>
<br>
This is exciting stuff, I am really a little astonished about the giant
leap Haskell has made since my efforts to translate the examples of
Rydeheart &amp; Burstall, which actually was my intro to categories,
from ML to Haskell. This looks very elegant... Maybe it's time for a
second edition of the unique approach of Rydeheart &amp; Burstall on
basis of Haskell? Wow, really cool stuff... :-)<br>
<br>
Cheers,<br>
<br>
&nbsp;&nbsp;&nbsp; Nick<br>
</body>
</html>