There is nothing in Haskell that allows you to observe whether the two Empty same Empty or not, and there is no guarantee what the implementation should do with this code in this regard.
Thus, in the GHC, constructors with a zero value for a given parameterized type are divided into all parameterizations; therefore, in the entire program there is only one Empty and only one [] , etc.
source share