我解码来自Http.post请求的响应,返回类型为 Integer :
responseDecoder : Decoder Int
responseDecoder =
field "data" (field "createDeadline" (field "id" int))
我的问题是我使用的Http.send需要字符串:
createDeadline value =
Http.send Resolved (Http.post deadlineUrl (encodeBody value |> Http.jsonBody) responseDecoder)
我不知道如何更改返回类型。我的错误消息如下:
The 2nd argument to `send` is not what I expect:
113| Http.send Resolved (Http.post deadlineUrl (encodeBody value |> Http.jsonBody) responseDecoder)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This `post` call produces:
Http.Request Int
But `send` needs the 2nd argument to be:
Http.Request String
Hint: I always figure out the argument types from left to right. If an argument
is acceptable, I assume it is “correct” and move on. So the problem may actually
be in one of the previous arguments!
Hint: Want to convert an Int into a String? Use the String.fromInt function!
有人可以帮忙吗?我只是在和榆木玩耍,但我被困在这里。
答案 0 :(得分:4)
我的问题是我使用需要String的Http.send
根据docs,send
函数要求参数的类型为Request a
,其中a
可以是任何类型(Int
或{{ 1}}或其他内容。
您遇到的问题就是编译错误中的提示:
提示:我总是从左到右找出参数类型。如果争论 可以接受,我认为它是“正确的”并继续进行。所以问题可能实际上是 处于先前的论点之一!
因此,您似乎已经在某个地方定义了,您期望String
,并且编译器将类型推断为String
。例如,您可能已经为Request String
定义了以下内容:
Resolved
编译器将type Msg = Resolved (Result Http.Error String)
的多态类型推断为特定的东西,因为它已经看到第一个参数是或类型为send : (Result Error a -> msg) -> Request a -> Cmd msg
:
(Result Error String -> msg)
因此,在这种情况下,解决方案是更改期望的类型:
send : (Result Error String -> msg) -> Request String -> Cmd msg
或更改解码器并解码对type Msg = Resolved (Result Http.Error Int)
的响应:
String