在记录

时间:2017-03-18 07:17:38

标签: javascript ffi purescript newtype

如果我有一些javascript json数据,我可以foreign import通过用户定义的newtype上的数据,但是有实际数据的子集吗?例如:

在javascript中:

exports.foo = {foo: "foo", bar: "bar"}
purescript中的

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

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

1 个答案:

答案 0 :(得分:3)

如果类型是匿名JS对象(而不是"类"对象/从原型构造等),那么您可以完全放弃外部导入,只需声明typenewtype作为记录,因为PS和JS记录对应1:1。

至于擦除类型中结构的一部分,这当然是可能的 - PS不关心如果记录在运行时有额外的字段,它只会生成涉及列出的字段的代码(除此之外)来自记录更新语法,因为在更新之前浅层复制对象 - 但同样,这将是正常的,它将保留额外的密钥。)

这里唯一的潜在问题是,如果你的PS类型的记录被构造然后传回JS,那么它将缺少额外的字段。如果记录永远不会回到JS,和/或丢失的密钥不重要,那么一切都很好。