История изменений
Исправление quasimoto, (текущая версия) :
Например, для внутреннего представления диаграмм характерно большое количество обратных связей, а они императивны по сути.
Это когда указатель одной структуры указывает на другую структуру, указатель в которой, в свою очередь, указывает на первую? То есть циклически связанные структуры.
Иммутабельно это делается с помощью tying the knot:
data A = A B
data B = B A
loop :: A
loop = A b where b = B loop
мутабельно - точно так же как и где-нибудь в си, то есть используя семантику указателей:
data A = A (IORef B)
data B = B (IORef A)
loop :: IO A
loop = do
ar <- newIORef undefined
br <- newIORef undefined
writeIORef ar $ B br
writeIORef br $ A ar
return $ A ar
Исходная версия quasimoto, :
Например, для внутреннего представления диаграмм характерно большое количество обратных связей, а они императивны по сути.
Это когда указатель одной структуры указывает на другую структуру, указатель в которой, в свою очередь, указывает на первую? То есть циклически связанные структуры.
Иммутабельно это делается с помощью tying the knot:
data A = A B; data B = B A
loop :: A; loop = A b where b = B loop
мутабельно - точно так же как и где-нибудь в си, то есть используя семантику указателей:
data A = A (IORef B)
data B = B (IORef A)
loop :: IO A
loop = do
ar <- newIORef undefined
br <- newIORef undefined
writeIORef ar $ B br
writeIORef br $ A ar
return $ A ar