私はturtle
を使用してHaskellでシェルスクリプトを作成しており、失敗する可能性があるコマンドを作成する際のベストプラクティスを知りたいと考えています。タートルの終了コードの作成Monad/Monad Transformerのインスタンスがないのはなぜですか?
は今、私はそうのように、ケース式の階段があります。
runRemote :: MonadIO io => Text -> Text -> io()
runRemote oldVersion' newVersion' = sh $ do
mkdir "out"
e1 <- shell ("command " <> oldVersion') empty
case e1 of
ExitFailure n -> cleanup
ExitSuccess -> do
e2 <- shell ("command " <> newVersion') empty
case e2 of
ExitFailure n -> cleanup
ExitSuccess -> do
curDir <- pwd
cd (curDir <.> oldVersion')
e3 <- shell ("command something else") empty
case e3 of
-- ...
-- And so on...
case
式がMaybe
種類に拡大した場合は、解決策はMonad
インスタンスを導き出すことであろう。
ライブラリ作成者がExitCode
のMonad
インスタンスをまだ取得していない特別な理由はありますか、またはHaskellシェルコードのエラー処理を行う良い方法がありますか?
'ExitCode'は種類が' * 'で、' Monad'型のクラスは '* - > *'型の型を必要とするため、 'ExitCode'の' Monad'インスタンスを作ることはできませんタイプ引数)。 –
[多くのレベルのインデントを処理するにはどうすればよいですか?](http://stackoverflow.com/q/33005903/791604) –