&gt; A GADT&#x2F;TypeFamily is going to be visible in the API.<p>Only works if you&#x27;re never going to make abstract types. Which I guess is technically true in Haskell - the most you can do is hide the constructors of a concrete type. But the ability to make abstract types is very useful.<p>Don&#x27;t get me wrong, I <i>love</i> Haskell. It&#x27;s precisely because I love Haskell that I hate it when they add features that make it as hard to reason about as C++. (Yes, there I said it - type families are morally C++ template specialization.)