Control.Monad.IO.Class
| Авторские права | (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2001 |
|---|---|
| Лицензия | В стиле BSD (см. файл LICENSE) |
| Сопровождающий | R.Paterson@city.ac.uk |
| Стабильность | стабильный |
| Переносимость | переносимый |
| Безопасный Haskell | Доверенный |
| Язык | Haskell2010 |
Описание
Класс монад, основанных на IO.
class Monad m => MonadIO (m :: Type -> Type) where Исходный код
Монады, в которые можно встраивать вычисления IO. Любая монада, построенная применением последовательности преобразователей монад к монаде IO, будет экземпляром этого класса.
Экземпляры должны удовлетворять следующим законам, которые утверждают, что liftIO является преобразователем монад:
Методы
liftIO :: IO a -> m a Исходный код
Поднять вычисление из монады IO. Это позволяет выполнять вычисления IO в любом стеке монад, если он поддерживает такие операции (то есть IO является базовой монадой стека).
Пример
import Control.Monad.Trans.State -- from the "transformers" library printState :: Show s => StateT s IO () printState = do state <- get liftIO $ print state
Если бы мы опустили liftIO, то получили бы такую ошибку:
• Couldn't match type ‘IO’ with ‘StateT s IO’ Expected type: StateT s IO () Actual type: IO ()
Важная часть здесь — несовпадение между StateT s IO () и IO ().
К счастью, нам известна функция, которая принимает IO a и возвращает (m a): liftIO, что позволяет выполнить программу и увидеть ожидаемые результаты:
> evalStateT printState "hello" "hello" > evalStateT printState 3 3
Экземпляры
| MonadIO Q Исходный код | |
Определено в GHC.Internal.TH.Syntax МетодыliftIO :: IO a -> Q a Исходный код | |
| MonadIO IO Исходный код | С версии: base-4.9.0.0 |
Определено в GHC.Internal.Control.Monad.IO.Class МетодыliftIO :: IO a -> IO a Исходный код | |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Control-Monad-IO-Class.html