>

그래서 오류가 발생합니다 :

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

다양한 방법으로 들여 쓰기를 바꾸려고했지만 아무 것도 효과가없는 것 같습니다. 여전히 들여 쓰기 문제인 것 같지만이 문제를 해결할 방법이 없습니다.


  • 답변 # 1

    정의의 첫 줄을 들여 쓰면 파서 (이 문맥에서)는 마치 마치 마치 마치 마치 이전 줄을 계속한다고 생각합니다

    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
    
    

  • 답변 # 2

    서명 아래 부분을 들여 쓰면 안됩니다. 다음과 같이 작성하십시오 :

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

    또는 다음으로 확인할 수 있습니다 :

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

관련 자료

  • 이전 reactjs - 소재 테이블 # 1204 - groupbar에서 글꼴을 사용자 정의하는 방법, 반응 js에서 페이지 매김 :소재 테이블
  • 다음 c# - ReSharper가이 두 블록 모두에 대해 널 전파 사용을 제안하지 않는 이유는 무엇입니까?