2014-06-22 2 views
1
import Data.Char (digitToInt) 

let f [] = [] 
    f ('\n':',':a) = f ('\n' : a) 
    f (a:b) = a : f b 

main :: IO() 

main = do 
    ln<-getLine 
    f ln 
    print dp 

입력을 구문 분석 오류를 받고는`='`= 입력을 구문 분석 오류를 얻기 '오류

왜 그런가요? 하스켈 소스 파일, 최고 수준의 정의에서

+0

가능한 한 [Haskell error parse error on input \'= '] (http://stackoverflow.com/questions/6184940/haskell-error-parse-error-on-input)의 복제본입니다. (이것은 미러링 된 버전입니다. 이 질문,하지만 답변도 마찬가지로 관련이 있습니다). – duplode

답변

5

flet 도입해서는 안처럼 - 단지 또한

f [] = [] 
f ('\n':',':a) = f ('\n' : a) 
f (a:b) = a : f b 

당신이 있는지 확인이 필요 쓰기가 정의의 각 조항의 왼쪽 Haskell은 들여 쓰기를 인식하므로 같은 열에 정렬됩니다. 따라서이 경우 각 절의 f은 위와 같이 각 행의 맨 앞에 있어야합니다.

ghci 프롬프트는 사용자가 do 블록에있는 것처럼 동작하므로 let이 유효하므로이 둘 사이를 이동할 때 혼동의 원천이 될 수 있습니다.

+2

이것은 물론 * 파일 *의 최상위 레벨입니다. GHCi 프롬프트에서 'let'이 필요합니다. 아마도 혼란의 원인이 될 것입니다. 이것은 GHCi 구문이 본질적으로 "do 블록"안에있을 때부터 남아 있습니다. 그러나 요즘은 그렇지 않으면 파일 최상위 수준에서와 같은 대부분의 선언을 지원합니다. –