Вы не указали, что именно «не работает» в вашем коде, поэтому я попытаюсь угадать. Одна потенциальная проблема, которую я сразу вижу, состоит в том, что вы возвращаете значения, которые вы читаете из файловых дескрипторов (response1
, response2
, err
) из вашей функции. Проблема в том, что Haskell является ленивым языком, поэтому возвращаемые вами значения не на самом деле читаются из этих дескрипторов, пока они действительно не понадобятся. И к тому моменту, когда они необходимы, дочерний процесс завершается, и дескрипторы закрываются, поэтому их невозможно прочитать.
Самое простое исправление - заставить все эти строки читать перед вами: вернуться »из вашей функции. Один стандартный рецепт для этого - использовать force
, за которым следует evaluate
. Это заставит вашу программу на самом деле прочитать значения и запомнить их, поэтому дескрипторы могут быть закрыты.
Итак, вместо:
value <- hGetContents handle
вы должны сделать:
value' <- hGetContents handle
value <- evaluate $ force value'