【问题标题】:Foreign import of a newtype over a record国外进口新品种超创纪录
【发布时间】:2017-03-18 07:17:37
【问题描述】:

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

在javascript中:

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

在纯脚本中:

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

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

【问题讨论】:

    标签: javascript ffi purescript newtype


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2018-07-20
      • 2011-12-03
      相关资源
      最近更新 更多