MonadFix
Haskellでは、将来評価される値にアクセスするために使用できると聞きました。しかし、私はMonad
s は単なるシンタックス シュガーだと思うので、純粋な関数で実装できる同様のものがあるはずです。だから私は次のことを試しました:
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)]
私は何か間違ったことをしましたか?