Я довольно новичок в Haskell, поэтому любая помощь приветствуется!Haskell Mutable Structure with Immutable Shell
Я использую IOArray для обновления случайных элементов в постоянном пространстве. У меня есть оболочка, которая выглядит следующим образом:
data W = W{ arr:: IO (IOArray Int Node), n :: Int, ... }
Однако, я не могу найти способ, чтобы обновить arr
так, что это видно, когда обертку передается вокруг, не делая что-то вроде wrappper{arr = x}
, который тратит впустую много времени GC. В тестах это оказывается слишком медленным.
Есть ли способ обновить arr
, чтобы он был глобально видимым? Благодаря!
Переменные данные в Haskell должны быть обернуты в Монаду, возможно, посмотрите, не подходит ли монашка 'ST' для ваших нужд. – jozefg
jozefg прав: есть также' STArray', и обратите внимание, что 'runST' может превратить действие 'ST' в чистое значение. –
'данные W s = W {arr :: STArray s Int Node, ...}'. Должен ли я просто создать массив целиком, прежде чем поместить его в оболочку? Это может быть жизнеспособным способом сделать это – Craig