elm 中否定 case 语句的语法是什么?

Dan*_*Jr. 1 pattern-matching elm

我需要知道如何在 ELM 中做这样的事情。

case form.mode of
     "" ->  modeDropdown form

     (not "solo") -> do something for all other possibilities
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

编辑:

为了提供更广泛的上下文,我正在尝试创建级联向下列表。如果我在 url 参数中收到 "" for mode,我需要显示第一个下拉列表。如果我得到“独奏”,我不需要展示任何东西。如果我得到除“solo”之外的任何其他选择,我必须显示第二个下拉列表。我突然想到我可以为“solo”返回一个空的跨度标签,但这感觉有点麻烦。

Igo*_*dov 5

这甚至可能吗?

它在问题中描述的方式 - 不,因为需要在case表达式中提供模式,而不是布尔条件。但它可以通过以下方式执行:

case form.mode of
    "" ->  modeDropdown form
    "solo" ->
        -- do something for `"solo"` possibility
     _ ->
        -- do something for all other possibilities
Run Code Online (Sandbox Code Playgroud)

这样你提供exhaustive pattern matching,即考虑所有情况。

关于评论区的问题:

Haskell 语法是 s | s /= "solo" -> 做事。榆树有这样的吗?

Elm 中没有带有守卫的函数的语法,因此您需要使用if条件来模仿这种行为。或者有elm-guards库,这使得它不那么冗长。

  • 所以,在你的情况下,空跨度或空`Html.text ""` 是正确的方法,因为你需要返回一些东西来适应类型 (2认同)