<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>On Mon, Jun 15, 2015, at 11:52 PM, Matt Williams wrote:<br></div>
<blockquote type="cite"><p dir="ltr">When we have a type, T, with constructors A and B<br></p><p dir="ltr">(e.g. data T = A x y z | B x y)<br></p><p dir="ltr">How do I understand the relationship between A, B and T? I had thought I could use the sub-class relationship, but that doesn't seem to be true.<br></p></blockquote><div>You are correct that A and B are not types in Haskell.<br></div>
<div> </div>
<div>The relationship is that there are two different ways to construct a value of type T. Whenever a T is needed, you can use either A or B. That means, on the other hand, that whenever a T is consumed, you have to handle two cases: A and B.<br></div>
<div> </div>
<div>These data types are called "algebraic data types," which might help you find more to read about them. The wiki has a page: <a href="https://wiki.haskell.org/Algebraic_data_type">https://wiki.haskell.org/Algebraic_data_type</a>.<br></div>
<div> </div>
<div>Lastly, as a bit of a digression, you could imagine an alternate language in which A and B are subtypes of T, such that constructor A returns a value of type A, and constructor B returns a value of type B. I'm not an expert on the theory behind all of this, but I know that doing type inference would be much harder in such a language.<br></div>
<div> </div>
<div>-Karl</div>
</body>
</html>