繰り返す必要のあるData.Sequenceがあります。問題は、そのステートフルであり、シーケンスは上記の反復の結果として大きくなる可能性があります。
data Chart = Chart {
charts :: M.Map Int (Seq.Seq RState), --map from position to list of chart states
...
} deriving (Show)
processChartSeq :: Int -> Int -> State Chart ()
processChartSeq chtIndx stIndx = do s <- get
let seq = fromJust $ M.lookup chtIndx (charts s)
rstate = Seq.index seq stIndx
processState rstate
when (stIndx < Seq.length seq) (processChartSeq chtIndx (stIndx+1))
だから私は明示的な再帰でこれをやっていますが、それは不格好なようです。さらに、それは一般的なことのようです。ひどく、私はどのような一般的なモナディック制御構造を再発明しましたか?