如何将 Result.withDefault 函数应用于生成结果的函数
How can I apply the Result.withDefault function to a function that produces a Result
我有这个函数可以解码 JSON
type alias Item =
{ title : String
, description : String
, price : Float
, imageUrl : String
}
itemDecoder : Json.Decode.Decoder Item
itemDecoder =
D.map4 ItemData
(D.field "title" D.string)
(D.field "description" D.string)
(D.field "price" D.float)
(D.field "imageUrl" D.string)
decodeItem : Json.Decode.Value -> Item
decodeItem =
Json.Decode.decodeValue itemDecoder
我从编译器得到的错误是 decodeItem 生成
Json.Decode.Value -> Result Json.Decode.Error Item
而不是
Json.Decode.Value -> Item
如何用 Result.withDefault
包装 decodeItem
的输出,以便它生成有效的项目或 returns 一个空的 Item
。空 Item
将是 Result.withDefault
.
的第一个参数
假设您有一个 returns 空 Item
的函数,例如 emptyItem
,您只需执行您描述的步骤:
- 用
Result.withDefault
包装 decodeItem 的输出
- 空
Item
将是 Result.withDefault
的第一个参数
结果:
decodeItem : D.Value -> Item
decodeItem value =
Result.withDefault emptyItem (D.decodeValue itemDecoder value)
emptyItem
可以是returnsItem
记录默认值的函数,例如:
emptyItem : Item
emptyItem = Item "" "" 0 ""
或者一些对您有意义的合理默认值
我有这个函数可以解码 JSON
type alias Item =
{ title : String
, description : String
, price : Float
, imageUrl : String
}
itemDecoder : Json.Decode.Decoder Item
itemDecoder =
D.map4 ItemData
(D.field "title" D.string)
(D.field "description" D.string)
(D.field "price" D.float)
(D.field "imageUrl" D.string)
decodeItem : Json.Decode.Value -> Item
decodeItem =
Json.Decode.decodeValue itemDecoder
我从编译器得到的错误是 decodeItem 生成
Json.Decode.Value -> Result Json.Decode.Error Item
而不是
Json.Decode.Value -> Item
如何用 Result.withDefault
包装 decodeItem
的输出,以便它生成有效的项目或 returns 一个空的 Item
。空 Item
将是 Result.withDefault
.
假设您有一个 returns 空 Item
的函数,例如 emptyItem
,您只需执行您描述的步骤:
- 用
Result.withDefault
包装 decodeItem 的输出
- 空
Item
将是Result.withDefault
的第一个参数
结果:
decodeItem : D.Value -> Item
decodeItem value =
Result.withDefault emptyItem (D.decodeValue itemDecoder value)
emptyItem
可以是returnsItem
记录默认值的函数,例如:
emptyItem : Item
emptyItem = Item "" "" 0 ""
或者一些对您有意义的合理默认值