Синтаксическая ошибка Haskell: неожиданный `;' возможно из-за плохой планировки

Уже довольно давно я получаю эту ошибку в четвертой строке: Синтаксическая ошибка в объявлении (неожиданный `;', возможно, из-за неправильного макета) В следующем фрагменте кода:

import Data.Maybe    

leesIngrediënten:: Int->[[Char]]->[Int]->[Maybe [Char]]->[[Char]]->([Int], [Maybe [Char]], [[Char]])
leesIngrediënten 0 _ hoevs eenhs naams = (hoevs, eenhs, naams)
leesIngrediënten n (line:lines) hoevs eenhs naams =
                 let 
                     (hoev, eenh, naam) = leesLijn line
                     in  
                       leesIngrediënten (n-1) lines (hoev:hoevs) (eenh:eenhs) (naam:naams)

После поиска в Интернете я нашел, что означает ошибка, но дело в том, что я не вижу своей ошибки. (вероятно, потому что я написал код)

Странно то, что Hugs жалуется там, где GHCi не на что жаловаться.

Заранее спасибо!


person Frederik Vreys    schedule 13.01.2015    source источник
comment
Насколько я знаю, Hugs устарел и больше не поддерживается. Это может быть просто ошибка. Однако я удивлен, что вы делаете отступ in дальше, чем let, а GHC все еще принимает его...   -  person MathematicalOrchid    schedule 13.01.2015
comment
@MathematicalOrchid Это необходимо, иначе одна строка let x=5 in ... будет отклонена. Обратите внимание, что позиция let также не имеет значения (пока она не закрывает открытый блок, находясь слишком слева), важна позиция первого несимвола после let. in закроет блок let в любом месте, где это может быть (если справа, это вызовет ошибку синтаксического анализа, и стандарт IIRC утверждает, что в таком случае вы закрываете блок и повторяете синтаксический анализ - да, это сложно...)   -  person chi    schedule 13.01.2015
comment
Уууууу, эта подпись ужасна! Используйте хотя бы псевдонимы.   -  person Bartek Banachewicz    schedule 13.01.2015
comment
Довольно новичок в Haskell, не знал, что такое псевдонимы. Но спасибо за упоминание об этом, буду использовать его с этого момента!   -  person Frederik Vreys    schedule 13.01.2015


Ответы (2)


Согласно https://www.haskell.org/hugs/pages/users_guide/haskell98.html, Hugs не поддерживает идентификаторы Unicode. Вероятно, это приводит к синтаксической ошибке.

person sth    schedule 13.01.2015
comment
Ой. Я думал, что мое редактирование не имеет значения... Извините за это - person sehe; 13.01.2015

Это действительно похоже на то, что проблема связана с идентификаторами Unicode. Когда я запускаю ваш код, я получаю

3:12: lexical error (UTF-8 decoding error)

Но важно, является ли файл уже скомпилированным или нет. Если это exe, не используйте runhaskell. Это тоже может вызвать проблему. И небольшой совет на будущее, ваш код намного легче читать, когда вы используете больше пробелов между словами и знаками препинания.

person R4y    schedule 14.01.2015