【发布时间】:2014-06-12 07:30:20
【问题描述】:
我如何使用Reader/ReaderT 到ask 作为列表类型,例如[(Int, Int)] 然后在列表 monad 中执行计算(asked 的类型)?
以下是我损坏的代码,为清楚起见已缩短:
attempt :: Int -> Int -> ReaderT [(Int,Int)] [] [[Int]]
attempt start end =
do (s0, e0) <- ask
return [0]
为了让您了解我想要做什么,这里是相同的函数,使用 list monad 但不使用 Reader:
paths :: [(Int, Int)] -> Int -> Int -> [[Int]]
paths edges start end =
if start == end
then return [end]
else do (s0, e0) <- edges
guard $ s0 == start
subpath <- paths edges e0 end
return $ s0 : subpath
我正在使用 ReaderT,因为我正在学习单子转换器。这是使用 Reader 和 Writer 以及 list monad 来实现路径的更大问题的一部分。
【问题讨论】:
-
你能用
Reader [(Int,Int)] [[Int]]代替吗?
标签: haskell monad-transformers