创建具有循环依赖性的记录?

Create records with cyclic dependencies?

在纯脚本中,具有循环依赖的记录可以声明如下

  newtype User = User
  { name :: String
  , organization :: Organization
  }

  newtype Organization = Organization
  { name :: String
  , users :: List User
  }

但我还没有想出如何在纯脚本中实际创建实例。在 F# 中,可以按如下方式创建实例。

let rec pam = { name = "Pamela"; organization = fed }
and jill = { name = "Jillian"; organization = fed }
and fed = { name = "Federal Reserve"; users = [pam;jill] }

我总是得到一个未定义的 pam 值。也许使用修复功能?

我认为如果不使结构的某些部分变得惰性,就不可能在 PureScript 中做到这一点:

import Data.Lazy (Lazy, defer)

newtype User = User
  { name :: String
  , organization :: Lazy Organization
  }

newtype Organization = Organization
  { name :: String
  , users :: Array User
  }

fed :: Organization
fed =
  Organization
    { name: "Federal Reserve"
    , users:
        [ User { name: "Pamela", organization: defer \_ -> fed }
        , User { name: "Jillian", organization: defer \_ -> fed }
        ]
    }