获取Maybe而不是数组的值

时间:2018-07-28 14:55:43

标签: elm

这里是榆树的新手,起初,我不知道这种挑剔的语言的来龙去脉使我发疯(即使在读了一些有关它的内容之后,因为它是如此的不同和挑剔...我想那是功能性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
fine, I assume it is correct and check the right side. So the problem may be in
how the left and right arguments interact.

测试:

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 :(得分:6)

Array.get返回包装在Maybe中的值,因为在数组中的指定索引处可能不存在任何值。如果要检查索引0处的值是否等于'X',则可以与Just 'X'进行比较:

get 0 arrayOfValues == Just 'X'

就像错误消息所示,编译器发现==的左侧是Maybe Char,右侧是Char。您需要将一个转换为另一个才能使用==。在这种情况下,您可能想要按照我上面的建议更改右侧。