LINUX.ORG.RU

История изменений

Исправление 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