2

MonadFixHaskellでは、将来評価される値にアクセスするために使用できると聞きました。しかし、私はMonads は単なるシンタックス シュガーだと思うので、純粋な関数で実装できる同様のものがあるはずです。だから私は次のことを試しました:

timemachine :: [a] -> (a -> Int -> b -> b) -> b -> b
timemachine al f b = result where
    ~(total, result) = foldr app (0,b) al
    app a (i,b1) = (i+1, f a (total - i) b1)

main :: IO ()
main = print $ timemachine "ddfdfeef" (\x i y -> (x,i):y) []

しかし、出力は期待されていません:

[('d',1),('d',2),('f',3),('d',4),('f',5),('e',6),('e',7),('f',8)]

理想的には、結果は

[('d',8),('d',7),('f',6),('d',5),('f',4),('e',3),('e',2),('f',1)]

私は何か間違ったことをしましたか?

4

1 に答える 1