FFI を使用して一部の API (DOM API など) をラップする場合、機能が有効かどうかを判断するのに役立つ経験則はありますか?
次に例を示します。
foreign import querySelectorImpl """
function querySelectorImpl (Nothing) {
return function (Just) {
return function (selector) {
return function (src) {
return function () {
var result = src.querySelector(selector);
return result ? Just(result) : Nothing;
};
};
};
};
}
""" :: forall a e. Maybe a -> (a -> Maybe a) -> String -> Node -> Eff (dom :: DOM | e) (Maybe Node)
querySelector :: forall e. String -> Node -> Eff (dom :: DOM | e) (Maybe Node)
querySelector = querySelectorImpl Nothing Just
foreign import getTagName """
function getTagName (n) {
return function () {
return n.tagName;
};
}
""" :: forall e. Node -> Eff (dom :: DOM | e) String
効果があるのは正しい気がquerySelector
しますが、よくわかりませんgetTagName
アップデート:
純粋な関数とは何か、プログラムの状態を変更してはならないこと、DOM が悪い例であることを理解しています。
私がこの質問をするのは、既存の js ライブラリをラップするほとんどのライブラリでは、たとえ正しくないと感じても、ほぼすべての関数が効果的だからです。だから多分私の実際の質問は - この効果はこのラップされたjsライブラリの必要性を表していますか、それとも内部でステートフルな場合に備えてそこにありますか?