Выберите либо MissingH System.Cmd.Utils
и System.Process стандартной библиотеки . Они просты в использовании, как с высокоуровневыми вспомогательными функциями (которые вы просто бросаете в строки и возвращаете строки, возможно, лениво), так и с низкоуровневыми функциями сантехники (которые на самом деле дают вам ручки, как большинство функций popen
в других языки / каркасы).
import System.Process
main = do
let cmd = "mail"
args = ["root@localhost", "-s", "does this act like popen?"]
input = ["Hello, world!"]
(rc, out, err) <- readProcessWithExitCode cmd args input
putStrLn $ "mail exited: " ++ show rc
mapM_ putStrLn $ map ("out: " ++) $ lines out
mapM_ putStrLn $ map ("err: " ++) $ lines err