Ошибка компиляции на Haskell - PullRequest
0 голосов
/ 14 декабря 2011

Я получаю странную ошибку в haskell, которая указывает на середину dropWhile в моем отладчике, например: ошибка разбора на входе '=' Не удалось загрузить модули.

Код:

identifyFilter :: String -> (Filter, String)
identifyFilter ('"':xs) | not null rest = (filter, rest1)
                        | otherwise     = error "Invalid input"
                    where   (field, rest) = break (=='"') xs
                            (cond, rest1) = break (=='"') (tail (dropWhile (/= '"') (tail rest)))
                            filter = ( FieldName field , identifyParsers cond)                      
identifyFilter ('@':xs) | not null rest = (filter, rest1)
                        | otherwise = error "Invalid input"
                    where   (index, rest)(reads xs) :: [(Int,String)]
                            (cond, rest1) = break (=='"') (tail (dropWhile (/= '"') (tail rest)))
                            filter = (FieldIndex index , identifyParsers cond)
identifyFilter (x:xs) = error "Invalid input"

Я не имею ни малейшего понятия, что может быть причиной ошибки, особенно когда она указывает на середину слова. Если требуется больше, пожалуйста, спросите. Любые предложения помогут

1 Ответ

3 голосов
/ 14 декабря 2011
where   (index, rest)(reads xs) :: [(Int,String)]

полностью сломан, может быть (index, rest) = head (reads xs :: [(Int, String)]) ?? В любом случае, это вызывает ошибку разбора в этой строке или в следующем.

На другой ноте, условия

| not null rest = ...

нужны скобки

| not (null rest) = ...

но это должно дать ошибку типа, а не ошибку синтаксического анализа.

...