<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><ul><li><br>data RepType = UbxTupleRep [UnaryType]<br>    | UbxSumRep [UnaryType]<br>    | UnaryRep UnaryType<br></li></ul></div></div></blockquote><div>Not, fully following, but ... this reptype business is orthogonal to whether you add a normal type to the STG level that models anonymous, untagged unions, right?  </div><div><br></div><div>That is, when using Any for pointer types, they could use indicative phantom types, like "Any (Union Bool Char)", even if there's not full support for doing anything useful with (Union Bool Char) by itself.  Maybe the casting machinery could greenlight a cast from Any (Union Bool Char) to Bool at least?</div><div><br></div><div>There's already the unboxed union itself, (|# #|) , but that's different than a pointer to a union of types...</div><div><br></div><div><br></div></div></div>