Hello,<br><br>&gt; Is it possible in Haskell + GHC extensions to use reflection<br>&gt; &nbsp;techniques to determine typeclass membership? &nbsp;I&#39;m thinking of things<br>&gt; &nbsp;like the following:<br>&gt; &nbsp;<br>I think the short answer is not in general; i.e. I don&#39;t think there is any way to access the members of an arbitrary typeclass (but I&#39;d love to be proved wrong).<br>
<br>However, you could always explicitly list the members of a typeclass you are interested in (this is similar to your Idea 2):<br><br><div style="margin-left: 40px;">{-# OPTIONS_GHC -fglasgow-exts -fallow-undecidable-instances -fallow-overlapping-instances #-}<br>
<br>class InEq a b | a -&gt; b where inEq :: a -&gt; Bool<br>instance TypeCast b HFalse =&gt; InEq a b where inEq _ = False<br>instance InEq Int HTrue where inEq _ = True<br>instance InEq a b =&gt; InEq [a] b where inEq _ = inEq (undefined :: a)<br>
<br>data HTrue<br>data HFalse<br><br>class TypeCast &nbsp; a b &nbsp; | a -&gt; b, b-&gt; a &nbsp; where typeCast &nbsp; :: a -&gt; b<br>class TypeCast&#39; &nbsp;t a b | t a -&gt; b, t b -&gt; a where typeCast&#39; &nbsp;:: t -&gt; a -&gt; b<br>class TypeCast&#39;&#39; t a b | t a -&gt; b, t b -&gt; a where typeCast&#39;&#39; :: t -&gt; a -&gt; b<br>
instance TypeCast&#39; &nbsp;() a b =&gt; TypeCast a b where typeCast x = typeCast&#39; () x<br>instance TypeCast&#39;&#39; t a b =&gt; TypeCast&#39; t a b where typeCast&#39; = typeCast&#39;&#39;<br>instance TypeCast&#39;&#39; () a a where typeCast&#39;&#39; _ x &nbsp;= x<br>
</div><br>You can also do an arguably nicer, more flexible version of the previous by recreating some of the typeclass machinery yourself; Oleg has several examples of this such as: //okmij.org/ftp/Haskell/poly2.txt<br><br>
-Jeff<br><br>