当我在 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中使用,以消除对括号的需求。