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

Spec-Zone.ru

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