У меня есть функция, которая принимает параметр и дает результат. К сожалению, для получения результата требуется довольно много времени. Функция вызывается довольно часто с одним и тем же входом, поэтому было бы удобно, если бы я мог кэшировать результаты. Что-то вроде
let cachedFunction = createCache slowFunction
in (cachedFunction 3.1) + (cachedFunction 4.2) + (cachedFunction 3.1)
Я искал Data.Array, и хотя массив ленив, мне нужно инициализировать его списком пар (используя listArray) - это нецелесообразно. Если "ключ", например, тип "Двойной", я не могу его инициализировать вообще, и даже если я могу теоретически назначить Integer для каждого возможного ввода, у меня есть несколько десятков тысяч возможных входов, и я на самом деле использую только несколько. Мне нужно будет инициализировать массив (или, желательно, хеш-таблицу, так как будет использоваться только несколько переменных), используя функцию вместо списка.
Обновление: я читаю статьи memoization, и насколько я понимаю, MemoTrie может работать так, как я хочу. Может быть. Может ли кто-нибудь попытаться создать "cachedFunction"? Предпочтительно для медленной функции, которая принимает 2 двойных аргумента? Или, альтернативно, это принимает один аргумент Int в домене ~ [0..1 миллиард], который бы не съел всю память?