Иностранный импорт нового типа по записи

Если у меня есть некоторые данные javascript JSON, могу ли я foreign import эти данные над пользовательским новым типом, но с подмножеством фактических данных? Например:

в JavaScript:

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

в purescript:

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

Я знаю, что мы можем использовать foreign import data ... рассматривать данные как справочные данные, но я бы хотел, чтобы часть информации о типах была доступной для пользователя, и это казалось самым простым способом.

1 ответ

Решение

Если типом является анонимный объект JS (а не объект "класс" / созданный из прототипа и т. Д.), То вы можете полностью отказаться от иностранного импорта и просто объявить type или же newtype для записи, поскольку записи PS и JS соответствуют 1:1.

Что касается удаления части структуры в типе, это, безусловно, возможно - PS не будет заботиться о том, имеют ли запись дополнительные поля во время выполнения, она будет генерировать только код, включающий перечисленные поля (за исключением синтаксиса record-update-syntax, как это мелкие копии объекта перед обновлением - но опять же, это будет хорошо, это сохранит дополнительные ключи).

Единственной потенциальной проблемой здесь будет то, что запись вашего типа PS создается и затем передается обратно в JS, так как в этом случае будут пропущены дополнительные поля. Если запись никогда не вернется в JS, и / или отсутствующие ключи не имеют значения, тогда все хорошо.

Другие вопросы по тегам