Рассмотрим следующее:
do
x1 <- new 2
set x1 3
x2 <- get x1
y1 <- new 10
set y1 20
y2 <- get y1
return (x2 + y2)
Я хочу, чтобы это привело к 23
. Есть ли способ реализовать что-то подобное в чистом Haskell, и если да, то как? Я понимаю, что STRef
делает что-то подобное, но я просто хочу сделать это в обычном Haskell (на данный момент не беспокоюсь об эффективности). Я предполагаю, что мне нужно будет создать тип данных и сделать его экземпляром Monad
, но я не уверен в деталях, поэтому рабочий пример будет полезен.