创建具有循环依赖性的记录?
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 }
]
}
在纯脚本中,具有循环依赖的记录可以声明如下
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 }
]
}