입력`= '에서 Haskell 오류 구문 분석 오류


111

나는 Haskell을 처음 사용하고 시작한 후 ghci시도했습니다.

f x = 2 * x

그리고 나는 얻었다 :

<interactive>:1:4: parse error on input `='

이해가 안 돼요

이상하게도 이전에는 잘 작동했습니다. Haskell을 잘못 구성했다고 생각합니다. ghc6을 다시 설치해도 문제가 해결되지 않습니다.

정보는 Ubuntu 10.4를 사용하고 ghc6의 버전은 6.12.1-12입니다.

답변:


160

GHCi 7.x 이하에서는 내용 let을 정의 하려면이 필요 합니다.

Prelude> let f x = x * 2
Prelude> f 4
8

GHC 8.0.1부터 GHCi에서 최상위 바인딩이 지원 되므로 OP의 코드는 변경없이 작동합니다.

GHCi, version 8.0.1.20161213: http://www.haskell.org/ghc/  :? for help
Prelude> f x = x * 2
Prelude> f 4
8

15
감사. "Real world haskell"(적어도 내가 가지고있는 버전)은 let예제에 없습니다
Micah

43
"Learn you Haskell" 은이 사실을 전혀 언급하지 않습니다.
Bakuriu

2
@Bakuriu LYAH 이제 언급 let합니다. 그러나 후속 조치. 에서 LYAH본인은 addThree :: Int -> Int -> Int -> Int(줄 바꿈) addThree x y z = x + y + z하지만에만 두 번째 실행 GHCi과를 let. 왜?
isomorphismes

9
@Bakuriu 예,하지만 작성자는 정의를 외부 파일에 작성하고 GHCI에 직접로드하지 말고 GHCI 내에로드하라고 말합니다. 그리고 전자는 완벽하게 작동합니다.
superzamp

이 튜토리얼은 확실히 잘못되었습니다 : seas.upenn.edu/~cis194/lectures/01-intro.html . 그러나 하스켈 웹 사이트에서 추천하는 첫 번째 튜토리얼입니다!
cammil

51

Haskell 소스 파일을 입력하면

f x = 2 * x

맞다.

ghci에 직접 입력 할 때 let줄 시작 부분에 입력해야합니다 .

let f x = 2 * x

12
GHCi에서 작동하지 않는 이유는 무엇입니까? 구문에 차이가있는 이유는 무엇입니까?
2015

1
@Beat GHCi는 구문 분석이 아닌 기본적으로 표현식을 평가하려고하지만 파일 형식은 그 반대입니다. 그렇기 때문에 문을 만들려면 (예 : 변수 설정, 함수 정의 등)을 사용하고 있음을 선언해야합니다 let. GHCi를 하나의 큰 let ... in ...성명 으로 생각하십시오 .
AJFarmar

20

ghci 사용에 대한 좋은 경험 법칙은 입력하는 모든 코드가 do-block 의미론을 준수해야한다는 것입니다. 즉, 구문 론적으로 IO 모나드 내에서 프로그래밍하고 있다고 가정 할 수 있습니다 (이게 새로운 용어 인 경우 걱정하지 마십시오!이 자습서를 읽는 것이 좋습니다 ).

답변은 예를 통해이 점을 설명하며 IO 및 ghci의 특성에 대한 더 많은 작업 통찰력을 제공 할 수 있습니다.


26
이 대답은 초보자에게는 쓸모가 없습니다. 그는 고급 주제가 아니라 앞으로 나아갈 수있는 간단한 실행 가능한 힌트를 찾고 있습니다. 여러분은 곱셈표를 배우는 아이에게 다항식을 설명하지 않습니다. 얼마나 많이 아는지 보여주지 않고 아는 것을 공유하는 방법을 모른다는 것을 보여줍니다.
btk

3
@btk : 모두가 어느 시점에서 초보자가되는 것을 그만둬야합니다. 나는 어제 Haskell을 배우기 시작했고 짧은 시간 내에 Raeez가 말하는 모든 것을 이해할 것이라고 확신합니다.
Vietnhi Phuvan 2014

10
이것은 Haskell을 배우는 첫날이며,이 답변은 내가 사용해야하는 이유를 이해하는 데 매우 유용하다는 것을 알았습니다 let. 나는 "wtf, 왜 내가 사용해야 하는가"같았고 let이것을 읽고 깨달았다.
Brian Tingle 2014 년

4

GHC 8.0.1부터는 더 이상 오류가 발생하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.