在编译读取文件时解析输入错误,处理它并将结果写入 Haskell 中的另一个文件代码



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

此代码有什么问题,我该如何修复它?

不要缩进translate的定义。它应该直接排列在其类型签名下方。

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

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

我认为您是从另一种语言借用&。您应该将该行写为以下任一

writeFile "output.txt" (translate gr content)

writeFile "output.txt" $ translate gr content

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

最新更新