Я пишу программу на Haskell, единственной целью которой является выполнение другой (не Haskell) программы, после сбора некоторой информации, чтобы определить, с какими аргументами должна выполняться эта программа.
Заменить работающий процесс на Haskell достаточно просто, используя executeFile
, но мне интересно, есть ли способ обеспечить правильную очистку программы на Haskell перед заменой.
Например, Control.Exception.finally
обычно полезен для обеспечения выполнения действий по очистке, даже если возникает исключение, но это не будет иметь эффекта, если мы выполним совершенно другой процесс:
module Main (main) where
import Control.Exception (finally)
import System.Posix.Process (executeFile)
main = finally (do putStrLn "opening file descriptors"
putStrLn "writing temporary files"
executeFile "ls" True [] Nothing)
(putStrLn "cleaning up")
Приведенный выше пример никогда не напечатает «очистку».
Есть ли рекомендуемый способ выполнить такой маневр "чисто"?