수색…


소개

Reader는 각 기능에 값을 전달하는 기능을 제공합니다. 일부 다이어그램의 유용한 가이드는 http://adit.io/posts/2013-06-10-three-useful-monads.html 에서 찾을 수 있습니다.

간단한 데모

독자 모나드의 핵심 부분은 ask ( https://hackage.haskell.org/package/mtl-2.2.1/docs/Control-Monad-Reader.html#v:ask) 함수입니다.이 함수는 설명을 위해 정의되어 있습니다. 목적 :

import Control.Monad.Trans.Reader hiding (ask)
import Control.Monad.Trans

ask :: Monad m => ReaderT r m r
ask = reader id

main :: IO ()
main = do
  let f = (runReaderT $ readerExample) :: Integer -> IO String
  x <- f 100
  print x
  --
  let fIO = (runReaderT $ readerExampleIO) :: Integer -> IO String
  y <- fIO 200
  print y

readerExample :: ReaderT Integer IO String
readerExample = do
  x <- ask
  return $ "The value is: " ++ show x

liftAnnotated :: IO a -> ReaderT Integer IO a
liftAnnotated = lift

readerExampleIO :: ReaderT Integer IO String
readerExampleIO = do
  x <- reader id
  lift $ print "Hello from within"
  liftAnnotated $ print "Hello from within..."
  return $ "The value is: " ++ show x

위의 내용이 출력됩니다 :

"The value is: 100"
"Hello from within"
"Hello from within..."
"The value is: 200"


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow