Разбор ошибки при вводе при компиляции чтения файла, его обработки и записи результата в другой код файла в 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 для устранения необходимости в скобках.)