我第一次嘗試在 Elm 中創建一個 APP。而且我需要使用 Http.post 與服務器應用程式進行互動。
我有這樣的訊息型別:
type Msg =
…
| Send (String, String)
| Recv (String, String)
和更新功能是這樣的:
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
…
Send (name, data) ->
(newModel, Http.post
{ url = url
, body = Http.multipartBody [Http.stringPart "data" data]
, expect = Http.expectString (Recv name)
})
Recv (name, data) -> … -- process data
但是當我運行它時,它會在 Http.post 中產生型別不匹配錯誤。那么如何同時將 name 和 newData 傳遞給 Msg "Recv" 呢?
uj5u.com熱心網友回復:
您的型別建構式Recv需要一個引數,它是一個字串元組。所以本質上Recv : ( String, String ) -> Msg。
所以當你呼叫Recv namewhere時name : String,你會得到一個型別錯誤。
這里有兩種解決方案:
您將定義更改
Recv為| Recv String String現在這意味著您可以部分應用
Recv建構式并取回一個函式String -> Msg,這正是您Http.expectString想要的。您更改期望呼叫以獲得正確的形狀:
, expect = Http.expectString (\body -> Recv ( name, body ))在這里,您明確地制作了
Http.expectString想要的功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439519.html
