输入`='解析错误,没有错误,而不是ghci

时间:2014-06-17 15:49:05

标签: haskell vim

编辑: 我总共犯了4个错误。

在第5行,我有"''",这没有任何意义。

在第9行,我有#34; map(asciiRotC)"。这应该是" map(asciiRotC n)"

在第13行,我有" x:xs。这应该是"(x:xs)"。

在最后一行我有#34; asciiRotWith 0(+1)"。这应该是" ...(+ 1)0"


这是我的完整代码(该文件名为asciiRot.hs):

import System.Environment
import System.IO

asciiRotC :: Int -> Char -> Char
asciiRotC _ '' = ''
asciiRotC 0 msg = msg
asciiRotC n msg = toEnum (33 + (n + (fromEnum msg) - 33) `mod` 93) :: Char

asciiRot :: Int -> String -> String
asciiRot n msg = map (asciiRotC) msg

asciiRotWith :: (Int->Int) -> Int -> String -> String
asciiRotWith _ _ "" = ""
asciiRotWith f acc x:xs = (asciiRotC acc x) : (asciiRotWith f (f acc) xs)

main = do
    args <- getArgs
    putStrLn $ asciiRotWith 0 (+1) (head args)

我得到的错误是:asciiRot.hs:8:16:输入错误解析`=&#39;

我已经搜索了类似的错误,发现它们主要与缩进相关或者试图在ghci中执行操作,但事实并非如此,我正在尝试编译,并且我使用空格进行缩进。 / p>

我尝试在第8行添加一个额外的空格,以匹配所有符号,但错误不会改变。

我正在使用Debian 7,ghc&#34; Glorious Glasgow Haskell编译系统,版本7.4.1&#34;。我在vim中编写代码,并使用ghc asciiRot.hs进行编译

早期版本可行。这是:

asciiRot :: Int -> String -> String
asciiRot _ "" = ""
asciiRot 0 msg = msg
asciiRot n msg = map (\x -> toEnum (33 + (n + (fromEnum x) - 33) `mod` 93) :: Char) msg

这个我将在ghci中运行,其中:l asciiRot.hs

2 个答案:

答案 0 :(得分:5)

''不是有效字符,因此解析器感到困惑。你可能意味着' '(空格)?

答案 1 :(得分:2)

x:xs必须在括号中

asciiRotWith f acc x:xs = (asciiRotC acc x) : (asciiRotWith f (f acc) xs)

因此应该

asciiRotWith f acc (x:xs) = (asciiRotC acc x) : (asciiRotWith f (f acc) xs)