箭头只应出现在case表达式和匿名函数中

时间:2019-05-28 14:24:35

标签: dictionary pattern-matching elm

我正在尝试检查给定密钥的dict中是否存在给定密钥。我对Elm和函数式编程比较陌生,所以我不确定哪里出了问题。

我收到的错误是:

  

箭头仅应出现在case表达式和匿名函数中。也许   您想要>还是> =代替?

这是我尝试返回truefalse

dictExist : comparable -> Dict comparable v -> Bool
dictExist dict key =
    Dict.get key dict        
            Just -> True 
            Maybe.Maybe -> False

另一方面,我也尝试过Dict.member,但也没有成功,因此我假设应该使用Dict.get来代替Dict.member

1 个答案:

答案 0 :(得分:5)

您的代码有四个问题:

  1. 正如错误所指出的那样,您使用的是case ... of表达式外的箭头。
  2. Maybe类型的Just构造函数具有一个伴随值,即dict中的项目,但您并未将其绑定到任何东西。您必须通过将其分配给通配符模式_来显式丢弃它。
  3. Maybe.Maybe不是构造函数。这应该是Nothing,它是Maybe类型的另一个构造函数。
  4. 您已经翻转了dictExist的参数顺序

已解决了这些问题,此代码应该可以工作:

dictExist : comparable -> Dict comparable v -> Bool
dictExist key dict =
    case Dict.get key dict of        
        Just _ -> True 
        Nothing -> False

但这实际上只是Dict.member的复制品,其中有the exact same type signature。因此,以dictExist替换Dict.member的任何用法应完全相同。