gpt4 book ai didi

haskell - 状态单子(monad) : How to `print` intermediate value in Haskell

转载 作者:行者123 更新时间:2023-12-02 10:11:31 25 4
gpt4 key购买 nike

我是 haskell 新手,我有以下代码

module StateTest where

import Control.Monad.State.Lazy

tick :: State Int Int
tick = do n <- get
put (n+1)
return n

plusOne :: Int -> Int
plusOne = execState tick

main = print $ plusOne 1

我想在 put (n+1) 之后打印状态值并像这样继续计算

tick = do n <- get
put (n+1)
print
return n

接下来的整个代码会是什么样子?

最佳答案

如果您想在状态计算中运行 IO 操作,您可以更改 tick 的类型。返回 StateT Int IO Int并使用liftIO 。然后你可以使用 execStateT 运行它:

import Control.Monad.State.Lazy
import Control.Monad.IO.Class (liftIO)

tick :: StateT Int IO Int
tick = do n <- get
put (n+1)
liftIO $ print (n+1)
return n

plusOne :: Int -> IO Int
plusOne = execStateT tick

main = plusOne 1 >> pure ()

关于haskell - 状态单子(monad) : How to `print` intermediate value in Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com