関数時間を適用するために、iterate
またはを使用するためのソリューションを見てきました。しかし、私は州のモナド内でそれを使用することはできません。replicate
n
このコードは機能します:
-- Stuff an empty game level with obstacles.
generateLevel :: Level -> State StdGen Level
generateLevel lvl =
placeRandomWall lvl >>= placeRandomWall >>= placeRandomWall
これも当然のことながら機能します。
generateLevel :: Level -> State StdGen Level
generateLevel lvl =
placeRandomWall =<< placeRandomWall =<< placeRandomWall lvl
ただし、これは次のものと同じではありません。
generateLevel :: Level -> State StdGen Level
generateLevel lvl =
(placeRandomWall =<< placeRandomWall =<< placeRandomWall) lvl
最新のものはタイプについて不平を言っています。したがって、私はできませんfoldl (=<<) id (relicate 42 placeRandomWall)
し、できませんiterate
。
これは理にかなっています。繰り返しはa -> a
関数を取りますが、私が持っているのはa -> m a
そのようなものです。だから、そこからどうやって行くのか本当にわかりません。