が、私は次のタイプと私のPureScriptコード内のユーザーレコードを持っていると仮定オブジェクト。エクスポートされたユーザー関連の関数は、外部のJavaScriptコードから呼び出されます。作成PureScriptレコードが
JavaScriptコードでは、 "ユーザ" は、のように表すことができる。
var alice = {id: 123, username: 'alice', email: '[email protected]', isActive: true};
email
はnull
であってもよい。
var alice = {id: 123, username: 'alice', email: null, isActive: true};
email
を省略してもよい。
var alice = {id: 123, username: 'alice', isActive: true};
isActive
省略されてもよく、その場合にはtrue
をsumed:
var alice = {id: 123, username: 'alice'};
id
残念ながら、時には数値文字列である:
var alice = {id: '123', username: 'alice'};
上記5つのJavaScript表現は同等であり、同等のPureScriptレコードを生成する必要があります。
JavaScriptオブジェクトを取得してユーザーレコードを返す関数を作成するにはどうすればよいですか? null /省略されたオプションフィールドのデフォルト値を使用し、文字列id
を数値に強制変換し、必要なフィールドがない場合や値が間違ったタイプの場合はスローします。
私が見ることができる2つのアプローチは、PureScriptモジュールでFFIを使用するか、外部JavaScriptコードで変換関数を定義することです。後者は毛深いようです:
function convert(user) {
var rec = {};
if (user.email == null) {
rec.email = PS.Data_Maybe.Nothing.value;
} else if (typeof user.email == 'string') {
rec.email = PS.Data_Maybe.Just.create(user.email);
} else {
throw new TypeError('"email" must be a string or null');
}
// ...
}
FFIのバージョンがどのように機能するかわかりません。私はまだ効果を持っていません。
この問題はあまり明確ではありません。私はそれが私が知りたいことが何であるかを正確に知るための十分な理解をまだ持っていません。
[例/ Objects.purs](https://github.com/purescript/purescript-foreign/blob/v0.3.0/examples/Objects.purs)に最も近いと思われます私がやろうとしていること。どのようにしてこの例題を修正して、 'x'を数字や数字の文字列にすることができますか? – davidchambers
1つの方法は、 'data SoN = S String |のようなタイプを作成することです。その後、N Number' と二つの選択肢を組み合わせること '<|>'演算子を使用して 'SoN'タイプのために' IsForeign'インスタンスを書く: が '<|> N <$> readNumberが –