如何從Shell monad中提取值?Haskell:Turtle:從殼牌獲得返回值
我想排序點菜 bash的&&
命令的名單,但我也想提取最終ExitCode
值。
說我有下面的代碼:
import Turtle
type Commands = [Shell ExitCode]
run :: (MonadIO io) => Commands -> io ExitCode
run cs = whatIsThisFunction $ Prelude.foldl (.&&.) (return ExitSuccess) cs
whatIsThisFunction :: (MonadIO io) => Shell a -> io a
whatIsThisFunction = undefined
我想看看我是否能與Control.Foldl實現這一點,但沒有找到一個解決方案。
任何想法?
更一般地,爲什麼不龜提供的功能與這種簽名:
sh' :: MonadIO io => Shell a -> io a
使用'IO',你可以讓它拋出。更好的解決方案:切換到「io(也許a)'。 – Reactormonk
因此,當我被低估時,是因爲答案太短或者包含事實上不正確的信息?我沒有詳細說明該怎麼做,因爲提問者已經證明他們已經知道「Control.Foldl」。因此,我的問題只是爲什麼那個特定的簽名不是圖書館的一部分。 @Reactormonk確實表明我的「不可能」的措辭可能太強大了。我對異常的看法與我對「未定義」的看法沒有多大區別。 – erisco
謝謝erisco,答案很豐富。 –