N>Судя по всему, Haskell разрешает указывать в левой части декларации типа-синонима type variables, которые не используются в правой части. Это может приводить к интересным эффектам, которые по разному проявляются в GHC и Hugs. Было бы интересно узнать, какое поведение является правильным согласно haskell 98 report.
Это уже порядок раскрытия синонимов, как ты сам можешь убедиться. Hugs раскрывает сразу, ghc откладывает.
Лучше такими делами не пользоваться.
Но сама идея
фантомных типов удобна. Особенно, когда используешь GADT. Но и без неё тоже неплохо: data DBIndex ty = DBIndex Int, data Man = ..., type ManIndex = DBIndex Man...