gpt4 book ai didi

haskell - 如何在 Haskell 中结合 List 和 State Monad

转载 作者:行者123 更新时间:2023-12-04 02:17:51 25 4
gpt4 key购买 nike

我想基本上映射一个列表,同时携带一些状态。我认为结合列表和状态 monad 可能会让我到达那里。我尝试了一些东西,发现我可能需要使用 ListT为了那个原因。作为我的实际问题的简化版本,假设我想实现 sum函数,同时还返回原始列表的修改版本。这个或类似的是我想象的样子:

sum' :: ListT (State Int) Int
sum' = do
lift $ put 0
x <- [1,2,3]
lift $ modify (+x)
return $ x + 1

我还不明白常规列表 monad 的语法如何转换为 ListT monad。我不能简单地做 x <- [1,2,3] , 因为在箭头的右侧,键入 ListT (State Int) t0是期待。 x <- return [1,2,3]编译(就像防止编译器提示这一行)但让我把整个列表放入 x,而不是每个元素。

我如何让它工作?

最佳答案

    x <- ListT $ return [1,2,3]

    x <- msum $ return <$> [1,2,3]

会成功的。

  • 列表T。 return 只是将列表结构感知注入(inject)到列表转换的 monad 堆栈中。

  • msum 使用了这样一个事实:ListT 是将 monad 映射到其上的免费 MonadPlus 幺半群的转换器。

关于haskell - 如何在 Haskell 中结合 List 和 State Monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32932943/

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