Я думаю, что черта иметь ровно два конструктора совершенно бессмысленна.Представьте себе типы:
data StrictOrdering = LT | GT
data Ordering' = EQ | NEQ !StrictOrdering
Тип Ordering'
эквивалентен упомянутому вами Ordering
, отличающемуся только «2-конструктором».
С другой стороны, Maybe Bool
, Either Bool Bool
и Bool
сильно отличаются друг от друга и, похоже, не заслуживают одного и того же имени, за исключением того, что их называют «типами сумм».
Теперь можно найти некоторые сходства между exists a. Maybe a
и Bool
, но чтобы указать на них, нужно больше ограничений, чем просто «2-конструктор».