Haskell: Turtle: получить возвращаемое значение из Shell

Как извлечь значение из монады Shell?

Я хотел бы упорядочить список команд а-ля Баш &&, но я также хотел бы извлечь финал 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, но не нашел решения.

Есть идеи?

В более общем смысле, почему Turtle не предоставляет функцию с такой подписью:

sh' :: MonadIO io => Shell a -> io a 

2 ответа

Turtle.Shell предоставляет вам fold :: MonadIO io => Shell a -> Fold a b -> io b а также Control.Foldl дает вам кучу Fold среди которых: last :: Fold a (Maybe a), Вы можете объединить два, чтобы извлечь последний ExitCode ваша команда возвращается так:

import Control.Monad.IO.Class
import Turtle.Shell  as TS
import Control.Foldl as CF

sh' :: MonadIO io => Shell a -> io (Maybe a)
sh' c = TS.fold c CF.last

sh' :: MonadIO io => Shell a -> io a невозможно, потому что Shell a может быть построен из [a] (подтверждается select :: [a] -> Shell a) который может быть пустым.

Другие вопросы по тегам