elm-lang`(==)中的错误期望右侧为:

时间:2018-10-22 23:40:58

标签: typeerror elm maybe

这里是榆树的新手,起初,我不知道这种挑剔的语言的来龙去脉使我发疯(即使在阅读了一小部分内容之后,也是如此,因为它是如此的不同和挑剔...我想那是功能性lang的性质),因此当您尝试做简单的事情时,就像刚开始拔头发一样。

我遇到以下错误:

The right side of (==) is causing a type mismatch.

29|             get 0 arrayOfValues == 'X'
                              ^^^
(==) is expecting the right side to be a:

    Maybe Char

But the right side is:

    Char

Hint: With operators like (==) I always check the left side first. If it seems

好,我认为这是正确的,并检查右侧。所以问题可能出在 左右参数如何相互作用。 测试:

it "blah blah blah" <|
    let
        someArray =
            [ 'P', ' ' ]
    in
expect (MyModule.doSomething someArray 'P') to equal 1
MyModule

doSomething : List Char -> Char -> Int
doSomething arrayOfValues symbol =
    let
        grid =
            fromList arrayOfValues

        found =
            get 0 arrayOfValues == symbol
    in
    if found then
        1
    else
        0

现在,我假设但不确定,尝试将第一个值从数组中拉出但不确定时,什么也没有。也许我认为Char不归还钱吗?不要,可能还有其他问题。

我想让上面的代码正常工作,然后进行重构。.我敢肯定,有一种更优雅的方式可以对上面的代码进行编码,但首先要解决的是错误,并可以通过现有代码。虽然不错,但错误消息对于如何处理以及如何处理却不是很明显。我有假设,但不确定要如何处理导致问题的原因。

1 个答案:

答案 0 :(得分:3)

榆树的独特特征是确定的。当然,任何变量(可能不是类型的变量)都将具有定义的类型的值。

但是对于数组或列表,不确定数组是否在索引“ i”上具有元素。可能有一个元素,可能没有。

因此,榆树有Maybe的概念, 从概念上讲

Maybe String = [ Just "string_value" | Nothing ] 

Array.get的别名是

get : Int -> Array a -> Maybe a

需要   Int-索引和   Array a-数组元素的数据类型的数组 作为参数和返回   Maybe a-再次是数组元素的数据类型

考虑一个例子

array = 
   fromList ["one", "two"]


  val1 = 
    get 0 array -- will return 'Just "one"'

  val2 = 
    get 3 array -- will return 'Nothing', since the element does not exists

通过这种方式,您将始终必须处理两种情况,既有价值又无价值

case val1 of
  Nothing -> 
    -- Raise some error message
  Just val ->
    -- `val` is the actual element/value found

,如果您始终需要默认值,则可以使用

Maybe.withDefault "default_string" val1

这将始终返回一个字符串值,并且在该值没有其他值的情况下将返回"default_string",否则为实际找到的值