Проблемы: ghc использует суффиксы типа .hs, .lhs или .o, чтобы решить, что делать с файлом (вот почему № 3 не работает). Даже если вы обманываете это (# 4), ghc действительно хочет stat() файла получить его размер, который не работает на трубах.
Ответ 3
Обычно ghc используется как компилятор, и вы запускаете его в файлах (на которых ghc может искать и выводить типы из окончаний и т.д.) и указывать выходные файлы как флаги.