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 :: Тип -> Тип) 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.12.1/docs/libraries/base-4.21.0.0-8e62/Control-Monad-IO-Class.html