我想在 Haskell 中建立一个不确定的状态单子。这将允许我使用构建状态生成搜索空间中的所有元素以修剪不良位置。假设我有以下(伪)代码:
primitives :: [State Int Element]
primitives = [... list of primitive stateful elements ...]
combine :: Element -> Element -> State Int Element
expand :: Depth -> [State Int Element]
expand 0 = primitives
expand d = do
... do something to the state ...
left <- expand (d-1)
right <- expand (d-1)
let out = combine left right
guard ( ... some check on out ... )
return out
这里有几件事是行不通的:我需要了解的最基本的事情是如何做一些事情来陈述,然后将它传递到每个expand
分支。我已经尝试了很多使用类型函数的方法,State Int [ State Int Element]
但最终,一旦我将 list monad 的分支包装在状态包装器中,我就无法删除它,对吧?那么有没有办法做到这一点?
谢谢。