Hi Cafe!<br><br>Disclaimer: I know what I&#39;m going to ask is now available as a language feature normally.<br>And sorry for the subject of this message, I couldn&#39;t compe up with a good&amp;descriptive subject.<br><br>
<br>Is there any way to limit a functions type, not by a data type but by a group of constructors of a data type? If not, what would be the *right* thing to do to achieve this level of type safety?<br><br>data DT1 = X | Y | Z<br>
data DT2 = A | B | C | D<br><br><br>func1 :: DT1 -&gt; DT2 -- instead of this<br>func1&#39; :: (X|Y) -&gt; (B|C) -- i want sth. like this. (| means or)<br><br>Only think I can think of is having the constructors, as seperate data types, introducing new type classes to group every possible subset of [X,Y,Z] and [A,B,C,D] and use those type classes when defining the functions. But as you can imagine, this is not the only place I want to use this thing, and the code will start to look cryptic if I do so. I must add, I want to use this <i>disjunction of constructors</i> thingy in data type declerations as well.<br>
<br>A little bit brainstorming maybe?<br><br>Thanks in advance,<br><br clear="all"><br>-- <br>Ozgur Akgun<br>