3

私は Haskell レコードを持っています

data User = User
    { email :: Text
    , token :: Text
    }

入力JSONの「トークン」の値を無視したい。たとえば、入力 JSON が

{
    "email": "foo@bar.com",
    "token": "abc123"
}

結果のUserオブジェクトにUser { email = "foo@bar.com", token = "" }.

以下を定義しました。

instance FromJSON User where
    parseJSON (Object v) =
        User <$> v .:  "email"
             <*> v .:? "" .!= "" -- token

    parseJSON _ = fail "Invalid User"

JSONの値を無視して、tokenフィールドの値を設定するより良い方法はありますか?v .:? "" .!= """token": "abc123"

私は試した

instance FromJSON User where
    parseJSON (Object v) =
        User <$> v .:  "email"
             <*> "" -- token

    parseJSON _ = fail "Invalid User"

<*> ""しかし、 は である必要があるため、コンパイルされませんParser Text

4

1 に答える 1

5

これを試しましたか?

User <$> v .: "email" <*> pure ""

pure関数はモジュールから来ますControl.Applicative""この場合、結果として配信する単純なパーサーを構築します。アプリカティブファンクターに慣れていない場合は、typeclassopediaでそれらについて読むことができます。

于 2014-07-27T17:14:06.390 に答える