Spec-Zone.ru › Haskell 9

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 . return = return
  • liftIO (m >>= f) = liftIO m >>= (liftIO . f)

Методы

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API