gpt4 book ai didi

http - Elm http 2.0.0 函数需要构造函数

转载 作者:可可西里 更新时间:2023-11-01 16:20:14 26 4
gpt4 key购买 nike

对于 http request 函数,the Elm tutorialthe docs建议将构造函数(例如 GotText)传递给期望函数(例如 expectString),用于 expect 字段,例如:

type Msg
= GotText (Result Http.Error String)

getPublicOpinion : Cmd Msg
getPublicOpinion =
Http.get
{ url = "https://elm-lang.org/assets/public-opinion.txt"
, expect = Http.expectString GotText
}

我理解这一点,但在我看来,将 API 限制为需要构造函数(例如 GotText)过于严格。


例如,可以使用identity从请求函数get中提取构造函数GotText:

getPublicOpinion = Cmd.map GotText (
Http.get
{ url = "https://elm-lang.org/assets/public-opinion.txt"
, expect = Http.expectString identity
})

但这引出了一个问题:为什么 http API 完全需要构造函数*?

* 或者至少允许我们省略 expect 字段并返回 Result Http.Error String

最佳答案

这不是限制,它实际上是一种便利

如果 Http.expectString 没有接受函数 (Result Http.Error String -> msg) 那么 Http.get 会返回Cmd (Result Http.Error String) 如果您传入 identity,它会执行此操作。

因为所有 Cmd 的结果总是需要一个 Msg 运行时可以传递给你的 update 功能你总是必须 Cmd.map 每次调用 Http.get 的结果以将 Cmd (Result Http.Error String) 转换为 命令消息

为了避免每次调用 Http.get 时都必须调用 Cmd.map,API 允许您将执行转换的函数直接传递给 Http.expectString。这减少了输入,减少了嵌套,因此对读者来说更清晰。

您会看到这个惯例在很多模块中重复出现。例如:

  • Json.Encode.list 的类型为 list : (a -> Value) -> List a -> Value 它需要一个函数来执行列表元素的 JSON 编码,这样您就不必先使用 List.map 对列表元素进行 JSON 编码。

  • Html.Events.onInput 具有类型 onInput : (String -> msg) -> Attribute msg 它需要一个函数来转换 Stringmsg 值,这使您不必 Html.Attribute.map onInput 的结果来转换 Attribute StringAttribute msg。如果您必须为每个事件处理程序调用 Html.Attribute.map 并在任何 Html 元素上调用 Attribute,那将是一件非常痛苦的事情。

关于http - Elm http 2.0.0 函数需要构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com