2014-03-06 12 views
2

하스켈을 처음 사용하고 타입 클래스가 어떻게 작동하는지 배우려고합니다. GHCi 컴파일러에 다음 코드를 입력했습니다.하스켈 타입 클래스

let (+) :: Num a => a -> a -> a; 
(+) a b = a+b; 

코드가 컴파일되지만 함수를 호출 할 때마다 멈추고 Ctrl + C 키를 눌러 프로세스를 중지해야합니다.

여기에 뭐가 잘못 되었나요? 미리 감사드립니다. 당신이 쓴 것처럼

+0

답변 해 주셔서 감사합니다.하지만 문제는 분명합니다. 하지만 나는'let (+++) :: Num a => a -> a -> a를 시도했다. (+++) a b = a + b'도 작동하지 않았습니다. 여기에 문제가있는 것 같습니다. – user3377437

+5

'+'에 여전히 무한 루프가 있기 때문에 가능합니다. GHCi 세션을 다시 시작 했습니까? –

+0

나! 예, 그것이 문제였습니다. GHCi를 다시 시작했는데 성공했습니다! 두 가지 답변 모두 도움이되므로 먼저 답변 한 사람에게 투표를합니다. 귀하의 답변을 모두 감사드립니다. – user3377437

답변

7

당신은 당신의 기능을 반복적으로 +에서 함수 +를 호출, 그것은 동일합니다 : a + b합니다 (+ 중위 연산자도 쓸 수에 당신은 동일하게 a + b을 정의한

add :: Num a => a -> a -> a 
add a b = add a b 
8

(+)으로,이 경우에는 일반 접두어 기능으로 동작하지만 왼쪽 면도 여전히 오른편면과 같습니다). 그래서 a + b는 그 다음 다음 a + b의 평가를 필요로 a + b을 평가하기 위해 필요로 평가하고,하기로

그래서 인터프리터는 영원히 돌고있다.