0

当我在 Haskell 中编译以下代码时,出现以下错误:

错误:在第 x 行中的输入“gr”解析错误

 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)传递给翻译函数,最后通过翻译函数将处理后的字符串写入输出文件。

这段代码有什么问题,我该如何解决?

4

1 回答 1

3

不要缩进 的定义translate。它应该在其类型签名的正下方对齐。

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

缩进main. _ 后面的行do需要缩进,否则布局规则将规定它后面的所有内容都是do块的一部分。

我想你是在借用&另一种语言。您应该将该行写为

writeFile "output.txt" (translate gr content)

或者

writeFile "output.txt" $ translate gr content

(它们是相同的;$在 Haskell 中使用运算符来消除对括号的需要。)

于 2014-11-16T18:03:36.113 回答