Haskell で簡単なプログラムを作成しようとしています。基本的に、2 つのシェル コマンドを並行して実行する必要があります。コードは次のとおりです。
import System.Cmd
import System.Exit
import Control.Monad
exitCodeToBool ExitSuccess = True
exitCodeToBool (ExitFailure _) = False
run :: String -> IO Bool
run = (fmap exitCodeToBool) . system
main = liftM2 (&&) (run "foo") (run "bar")
しかし、コマンド "foo" は ExitFailure を返し、"bar" は決して実行されないと予想します。これはそうではありません!どちらも実行され、両方ともコンソールにエラーが表示されます。
同時に
False && (all (/= 0) [1..])
完全によく評価されます。これは、2 番目の引数が計算されないことを意味します。アプリのシステム コマンドで同じことを行うにはどうすればよいですか?