如何从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,答案很丰富。 –