在榆树中解码一个元组

时间:2017-10-31 15:15:41

标签: elm

我正在寻找一种方法来解码榆树中含有两个元素的元组。

[[String,Bool]]

外部列表很容易用Json.list解析,但是如何将数组解码为元组?我尝试了来自Decode a JSON tuple to Elm tuple的解决方案,但我得到的只是关于Decoder和Maybe的类型的错误,我假设自从那个答案后榆树发生了变化。或许我错过了一个导入,我不知道。

由于

3 个答案:

答案 0 :(得分:4)

最简单的是

map2 (,) (index 0 string) (index 1 string)

答案 1 :(得分:1)

没有办法将数组一般转换为元组。

这是因为数组可以是任意长度,而元组是预定长度的;在编译时确定。

因此,要执行转换,您需要添加一些约束,这当然将取决于您的问题域。例如,我可以决定只能转换具有两个元素的数组。像这样:

import Array exposing (Array)

arrayToTuple : Array a -> Maybe (a, a)
arrayToTuple array =
    case Array.toList array of
        (a::b::_) -> Just (a, b)
        _ -> Nothing

由于长度不同,函数必须返回Maybe (a, a);或类似的类型,捕获两种可能的情况。

微妙的问题是:转换有损,您必须在某个时候考虑到这一点。

例如,您可以在解码器中拒绝不合适的数组,但是您必须考虑解码失败。或者,您可以捕获 Maybe中的失败,并被吸入Maybe - 土地。无论哪种方式,您都必须考虑转换失败的可能性。

答案 2 :(得分:0)

自榆树0.19起使用:

map2 (Tuple.pair) (index 0 string) (index 1 string)

https://github.com/elm/compiler/blob/master/upgrade-docs/0.19.md#functions-changed