Раньше в GHC была нестандартная функция memo :: (a -> b) -> (a -> b). В Hugs была (может быть, есть до сих пор) похожая функция memo1. Для моей задачи мне было бы достаточно последней. Как установить ее в GHC? Какой пакет взять? Гугл дает слишком старые ссылки. Может быть, эти функции уже того, т.е. deprecated?
P.S. Монада ST скорее всего не подойдет. Пробовал. Не получилось. В смысле, что мой код работает не так, как я того хотел. У меня там жесткая обратная связь. Такие ф-ции могут вызывать друг друга(свойство исходной задачи - динамика). Как результат, монада ST плодится в типах черезмерно. И вероятно все обламывается на том, что снаружи вызывается какая-нибудь функция (внутри >>= той же монады ST), которая и портит всю мемоизацию. Подозреваю, что с этой монадой скорее всего никак не получится...