我有一个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"
是否有更好的方法来设置token
字段的值,然后设置v .:? "" .!= ""
,忽略JSON中的"token": "abc123"
?
我试过
instance FromJSON User where
parseJSON (Object v) =
User <$> v .: "email"
<*> "" -- token
parseJSON _ = fail "Invalid User"
但它不会编译,因为<*> ""
必须是Parser Text
。
答案 0 :(得分:5)
你试过这个吗?
User <$> v .: "email" <*> pure ""
pure
函数来自Control.Applicative
模块。在这种情况下,它构造了一个简单的解析器,它将""
作为结果。如果您不熟悉applicative functors,可以在typeclassopedia上阅读它们。