Разбор ошибки при вводе при компиляции чтения файла, его обработки и записи результата в другой код файла в Haskell

Когда я компилирую приведенный ниже код в Haskell, я получаю следующую ошибку:

Ошибка: ошибка разбора на входе 'gr' в строке x

 module Main where

 import PGF
 import System.Environment
 import System.IO

 main :: IO ()
 main = do
 file:_ <- getArgs
 gr     <- readPGF file
 content <- readFile "input.txt"
 writeFile "output.txt" &(translate gr content)


 translate :: PGF -> String -> String
    translate gr s = case parseAllLang gr (startCat gr) s of
    (lg,t:_):_ -> unlines [linearize gr l t | l <- languages gr, l /= lg]
    _ -> "NO PARSE"

В этом коде я хочу прочитать строку (строку) из входного файла и связать ее с содержимым. после этого передайте содержимое и файл PGF (gr) для функции перевода и, наконец, запишите обработанную строку через функцию перевода в выходной файл.

Что не так с этим кодом, и как я могу это исправить?

1 ответ

Решение

Не отступайте от определения translate, Он должен располагаться прямо под сигнатурой типа.

translate :: PGF -> String -> String
translate gr s = {- ... -}

Сделать отступ тела main, Строка после do должен быть отступ, иначе правило размещения будет диктовать, что все, что следует за ним, является частью do блок.

Я думаю, что вы заимствуете & с другого языка. Вы должны написать эту строку как

writeFile "output.txt" (translate gr content)

или же

writeFile "output.txt" $ translate gr content

(Которые идентичны; оператор $ используется в Haskell для устранения необходимости в скобках.)

Другие вопросы по тегам