如何修复缩进?Haskell:输入`';

如何修复缩进?Haskell:输入`';,haskell,Haskell,所以我得到了一个错误: error: parse error on input `|' | x == 'a' = True 守则本身是: module SubstitutionCiphers where import AssignmentHelp.Cipher validateCipher :: Cipher -> Boolean validateCipher "" = False validateCipher (x:xs) | x == 'a' = Tru

所以我得到了一个错误:

error:
parse error on input `|'

   | x == 'a' = True
守则本身是:

module SubstitutionCiphers where
import AssignmentHelp.Cipher

validateCipher ::  Cipher -> Boolean
  validateCipher "" = False
  validateCipher (x:xs) 
    | x == 'a' = True
    | otherwise = validateCipher xs

我试着以各种不同的方式交替压痕,但似乎没有任何效果。我想这仍然是一个缩进问题,但我不知道如何解决它。

您不应该缩进签名下面的部分。只需这样写:

validateCipher ::  Cipher -> Bool
validateCipher "" = False
validateCipher (x:xs)
    | x == 'a' = True
    | otherwise = validateCipher xs
或者,您可以通过以下方式进行检查:

validateCipher :: Cipher -> Bool
validateCipher = elem 'a'

当您缩进定义的第一行时,解析器(在此上下文中)认为您在继续上一行,就好像您编写了

validateCipher :: Cipher -> Bool validateCipher "" = False -- etc
这一点通过一个更简单的定义变得显而易见

validateCipher :: String -> Bool
  validateCipher _ = True
因为解析器能够接受这一点。但是,类型签名的结果位置无效

<interactive>:11:1: error:
    Illegal type signature: ‘String -> Bool validateCipher _’
      Type signatures are only allowed in patterns with ScopedTypeVariables
请不要在签名下缩进零件。
validateCipher ::  Cipher -> Bool
validateCipher "" = False
validateCipher (x:xs) 
  | x == 'a' = True
  | otherwise = validateCipher xs