如何在Elm中对简单的自定义类型进行编码和解码?

问题描述 投票:-1回答:1

在Elm中,没有原生的方式来对自定义类型进行编码。这使得向JS发送和接收自定义类型的值变得困难。我困惑了好一阵子,不知道如何处理像下面这样的简单自定义类型?

type MyCustomType
  = A
  | B
  | C
json elm custom-type
1个回答
1
投票

这里有一个快速简单的演示,如何对任何自定义类型进行编码和解码。

说你有一个这样的自定义类型。

type MyCustomType
  = A
  | B
  | C

你可以对其进行编码 MyCustomType 直接作为一个字符串。

encodeMyCustomType : MyCustomType -> Encode.Value
encodeMyCustomType myCustomType =
  Encode.string <|
    case myCustomType of
      A -> "A"
      B -> "B"
      C -> "C"

解码 MyCustomType 是稍微多一点的参与。您需要使用 Decode.andThen 来检查找到了哪种变体,并使用 Decode.fail 如果没有找到有效的变种。

Decode.string |>
  Decode.andThen
    (\str ->
      case str of
        "A" -> Decode.succeed A
        "B" -> Decode.succeed B
        "C" -> Decode.succeed C
        _ -> Decode.fail "Invalid MyCustomType"
    )
© www.soinside.com 2019 - 2024. All rights reserved.