gpt4 book ai didi

haskell - 访问状态 Monad haskell 中的计数

转载 作者:行者123 更新时间:2023-12-02 21:12:06 26 4
gpt4 key购买 nike

我有这个

newtype State' s a = State' { runState' :: (s, Counts) -> (a, s, Counts) }

现在我想写一个函数

getCounts :: State' s a -> Counts

有什么办法可以实现这个目标吗?

最佳答案

也许这就是您正在寻找的:

getCounts :: State' s Counts
getCounts = State' (\ (s,c) -> (c,s,c))

然后您可以在计算中使用它:

myStateComp = do
-- whaever
counts <- getCounts
-- ...

是的,您也可以评估

假设您的evalState'是这样的:

evalState' :: State' s a -> s -> Counts -> a
evalState' st initState initCounts =
let (a,_,_) = runState st (initState,initCounts)
in a

然后你可以像这样访问计数:

evalState' getCounts initState initCount

当然,这只是给你返回initCount - 但没有更多的计算,我不知道我还能回答什么。

一个真实的例子可能是这样的:

myComp = do
-- ... do comp
getCounts

然后

evalState' myComp initState initCount

将在内部运行任何计算,然后返回最后的计数

替代方案

@bheklilr 暗示的替代方案是使用

import Control.Monad.State

type State' s a = State (s, Counts) a

和:

myStateComp = do
-- whaever
(state,counts) <- get
-- ...

所以你的getCounts这里实际上只是fmap snd get

关于haskell - 访问状态 Monad haskell 中的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26361773/

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