我是Haskell的新手,现在我正在尝试理解Monad和State。
我的任务是编写一个具有以下签名的函数,唯一提供的实现细节是“这个函数只有一个合理的实现”:
f :: [State.State s a] -> State.State s [a]我不完全理解国家,但我从这个问题中理解的是,从一个国家的列表开始,我想要将它们的呼唤联系起来,这样我最终就会得到一个最终的状态和一系列结果。
尝试这个链接的想法,我甚至不知道如何开始这个概念。我很可能遗漏了一些概念上的东西,也许有人可以给我一些启发?
发布于 2019-11-23 06:30:37
所以你有一个接受状态列表的函数。通常,您在列表上进行模式匹配,所以让我们这样做。
f [] = ???
f (x:xs) = ???如果我们得到了空的列表,那么我们可能想要返回空的列表,但是包装在State monad中。这就是return函数的作用。
f [] = return []
f (x:xs) = ???现在,我们需要为另一种情况返回一个State monad。通常使用monads的方法是使用do表示法。
f [] = return []
f (x:xs) = do
???现在,x是State monad,而xs是State monad的列表。因为我们正在编写一个模式匹配列表函数,所以我们可能想要在do块中的某个地方进行递归。
我认为从这里开始应该是相当简单的。
https://stackoverflow.com/questions/58983734
复制相似问题