国外进口新品种创纪录

Foreign import of a newtype over a record

如果我有一些 javascript json 数据,我可以 foreign import 使用用户定义的新类型的数据,但使用实际数据的子集吗?例如:

在javascript中:

exports.foo = {foo: "foo", bar: "bar"}

在纯脚本中:

newtype Foo = Foo {foo :: String}
foreign import foo :: Foo

我知道我们可以使用 foreign import data ... 将数据作为参考,但我希望用户可以访问 一些 类型信息,而这这似乎是最简单的方法。

如果类型是匿名 JS 对象(而不是来自原型等的 "class" object/constructed),那么您可以完全放弃外部导入,而只需声明一个 typenewtype 记录,因为 PS 和 JS 记录对应 1:1.

至于擦除类型中的部分结构,那当然是可能的 - PS 不会关心记录在运行时是否有额外的字段,它只会生成涉及列出的字段的代码(除了从使用记录更新语法,因为在更新之前浅复制对象 - 但同样,这很好,它会保留额外的键)。

这里唯一的潜在问题是,如果构建了 PS 类型的记录,然后将其传回 JS,那么它将丢失额外的字段。如果记录永远不会返回到 JS,and/or 丢失的键无关紧要,那么一切都很好。