По уму пример Липовачи в "Writer? I hardly know her" неудачный: еда и питьё должны разными типами передаваться. http://learnyouahaskell.com/for-a-few-monads-more Тогда, конечно, красивой addDrink :: Food -> (Food,Price) с фудом в левой и правой частях от стрелки не получится.
Literate Haskell работает только если файл имеет расширение .lhs, и это правильно, потому что синтаксис у файла другой и этот факт стоит явно выделять.
Всё происходит на довольно медленной FS, есть [IO FilePath] (создание файлов), которое отправляется в sequence_ (ну или sequence). В последующем коде предполагается, что все файлы уже на диске и доступны для stat. Как выяснилось, это не так =)