Неожиданно обнаружил, что при включенном -fglasgow-exts для newtype можно делать deriving любых классов, экземпляром которого уже является обернутый тип.
newtype Stream a = S [a]
deriving (Functor, Monad, Show)
А я дурак сижу пишу инстансы.
UPD:
Читайте ещё извращений про deriving. На моём 6.4.2 не работают.
UPD 2:
А вот и описание этой фичи.