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

时间:2014-11-16 17:54:17

标签: haskell gf

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

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

1 个答案:

答案 0 :(得分:2)

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

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

缩进main的正文。 do之后的行需要缩进,否则布局规则将指示其后面的所有内容都是do块的一部分。

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

writeFile "output.txt" (translate gr content)

writeFile "output.txt" $ translate gr content

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