Преобразование из записи Purescript в объект JS

Я пытаюсь преобразовать запись в объект JS vanilla

module MyModule where
data Author = Author { name :: String, interests :: Array String }
phil :: Author
phil = Author { name: "Phil", interests: ["Functional Programming", "JavaScript"] }

когда я обращаюсь к объекту из JS

MyModule.phil

он содержит другие свойства, которые меня не интересуют (value0)

{"value0":{"name":"Phil","interests":["Functional Programming","JavaScript"]}}

как вы маршали записи из мира Purescript в JS?

1 ответ

В разделе 10.16 из Purescript. Например, Фил Фримен показывает пример newtype обертывания записи:

newtype FormData = FormData 
 { firstName :: String
 , lastName :: String
 , street :: String
 , city :: String
 , state :: String
 , homePhone :: String
 , cellPhone :: String 
 }

Затем в разделе 10.18 он пишет:

"Тип FormData - это новый тип записи, поэтому значение типа FormData, переданное в JSON.stringify, будет сериализовано как объект JSON. Это связано с тем, что newtypes имеют такое же представление времени выполнения, что и их базовые данные."

Я думаю, вам нужно заглянуть под капот и посмотреть, что генерирует psc, чтобы действительно оценить это. Мы поменяем data на newtype,

newtype Author = Author { name :: String, interests :: Array String }
phil :: Author
phil = Author { name: "Phil", interests: ["Functional Programming", "JavaScript"] }

и это компилируется в

// Generated by psc version 0.9.2
"use strict";
var Author = function (x) {
 return x;
};
var phil = {
 name: "Phil",
 interests: [ "Functional Programming", "JavaScript" ]
};
module.exports = {
 Author: Author,
 phil: phil
};

licensed under cc by-sa 3.0 with attribution.