Определение переменной внутри функции Haskell с использованием нескольких строк - PullRequest
1 голос
/ 02 мая 2020

Я нахожу очень странное поведение для некоторого Haskell кода, над которым я работаю. Я работаю в файле .hs, и следующая простая функция компилируется в GHCi очень хорошо:

func mat l =
    if mat == [1,0,0,0] then l
    else
        let trymat t = if t == 0 then trymat 1 else if t == 4 then error "Not ok!" else l
        in l

Когда я добавляю одну новую строку, т.е.

func mat l =
    if mat == [1,0,0,0] then l
    else
        let trymat t =
            if t == 0 then trymat 1 else if t == 4 then error "Not ok!" else l
        in l

, компилятор злится :

 λ> :load code.hs
    parse error (possibly incorrect indentation or mismatched brackets)
   |
67 |             if t == 0 then trymat 1 else if t == 4 then error "Not ok!" else l
   |             ^

Это, кажется, происходит независимо от того, как я выделяю / заключаю в скобки внутренний блок if, а также происходит с case s. Это очень странно, потому что trymat - полная фиктивная функция: она никогда больше не вызывается! Любая подсказка, почему это происходит, и как я смогу добавить определения функций и case s и тому подобное в мой код в будущем? Спасибо!

1 Ответ

6 голосов
/ 02 мая 2020

Рассмотрите возможность добавления другой переменной в этом определении let

func mat l =
    if mat == [1,0,0,0] then l
    else
        let trymat t =
            if t == 0 then trymat 1 else if t == 4 then error "Not ok!" else l
            anotherVar =
            "random value"
        in l

Из отступа неясно, где есть переменные и где находятся значения. Haskell требует, чтобы вы добавили еще один уровень отступа к значениям

func mat l =
    if mat == [1,0,0,0] then l
    else
        let trymat t =
                if t == 0 then trymat 1 else if t == 4 then error "Not ok!" else l
            anotherVar =
                "random value"
        in l

Общее правило состоит в том, что код , являющийся частью какого-либо выражения, должен иметь отступ больше, чем начало этого выражения . источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...