考虑这个递归类型定义:
type NestedList a
= Elem a
| SubList (List (NestedList a))
如何编写解码器以将 JSON 列表(例如
[1, [[2, [3, 4]], 5], 6, [7, 8, 9]]
)解码为 NestedList
类型:
SubList
[ Elem 1
, SubList [ SubList [ Elem 2, SubList [ Elem 3, Elem 4 ] ], Elem 5 ]
, Elem 6
, SubList [ Elem 7, Elem 8, Elem 9 ]
]
可以使用
Decode.lazy
递归完成。
嵌套整数列表的解码器如下所示:
nestedListDecoder : Decoder (NestedList Int)
nestedListDecoder =
Decode.oneOf
[ Decode.int |> Decode.map Elem
, Decode.list (Decode.lazy (\_ -> nestedListDecoder)) |> Decode.map SubList
]