Как видно из следующего кода, легко декодировать UserAlias, но в тот момент, когда я пытаюсь декодировать UserType i.e. Заменить D.map2 UserAlias
с помощью D.map2 UserType
Компилятор громко кричит. Как исправить эту ошибку компилятора?Elm: Как Json расшифровывает тип Union с одним TypeConstructor?
import Json.Decode as D
import Html exposing (..)
import Result as R
type UserType = UserType {name:String, age:Int}
type alias UserAlias = {name:String, age:Int}
userDecoder = D.map2 UserAlias
(D.field "name" D.string)
(D.field "age" D.int)
decodeUser json = D.decodeString userDecoder json
json = """
{ "name": "Bob", "age": 40 }
"""
main = div [] [(text << toString << decodeUser) json]
Над кодом работает отлично. Теперь замените D.map2 UserAlias
с D.map2 UserType
и составитель взывает
Detected errors in 1 module.
==================================== ERRORS ====================================
-- TYPE MISMATCH ---------------------------------------------------------------
The 2nd argument to function `map2` is causing a mismatch.
13| D.map2 UserType
14|> (D.field "name" D.string)
15| (D.field "age" D.int)
Function `map2` is expecting the 2nd argument to be:
D.Decoder { age : Int, name : String }
But it is:
D.Decoder String
Hint: I always figure out the type of arguments from left to right. If an
argument is acceptable when I check it, I assume it is "correct" in subsequent
checks. So the problem may actually be in how previous arguments interact with
the 2nd.
-- TYPE MISMATCH ---------------------------------------------------------------
The 1st argument to function `map2` is causing a mismatch.
13|> D.map2 UserType
14| (D.field "name" D.string)
15| (D.field "age" D.int)
Function `map2` is expecting the 1st argument to be:
{ age : Int, name : String } -> b -> UserType
But it is:
{ age : Int, name : String } -> UserType
Hint: It looks like a function needs 1 more argument.
Как исправить эту ошибку, пожалуйста, помогите!
В основном я nolonger хочу использовать псевдоним типа и только пользовательский тип UserType, чтобы я мог скрывать внутреннюю структуру записи и реорганизовывать его, не нарушая публичный API.
спасибо.
Спасибо большое, Вы спасатель жизни, как всегда: D Теперь я могу, наконец, использовать тип Конструкторы скрывают структуру реализации. – Jigar
Но это все еще использует псевдоним типа, OP искал решение без псевдонима типа –