하스켈을 처음 사용하고 타입 클래스가 어떻게 작동하는지 배우려고합니다. GHCi 컴파일러에 다음 코드를 입력했습니다.하스켈 타입 클래스
let (+) :: Num a => a -> a -> a;
(+) a b = a+b;
코드가 컴파일되지만 함수를 호출 할 때마다 멈추고 Ctrl + C 키를 눌러 프로세스를 중지해야합니다.
여기에 뭐가 잘못 되었나요? 미리 감사드립니다. 당신이 쓴 것처럼
하스켈을 처음 사용하고 타입 클래스가 어떻게 작동하는지 배우려고합니다. GHCi 컴파일러에 다음 코드를 입력했습니다.하스켈 타입 클래스
let (+) :: Num a => a -> a -> a;
(+) a b = a+b;
코드가 컴파일되지만 함수를 호출 할 때마다 멈추고 Ctrl + C 키를 눌러 프로세스를 중지해야합니다.
여기에 뭐가 잘못 되었나요? 미리 감사드립니다. 당신이 쓴 것처럼
당신은 당신의 기능을 반복적으로 +
에서 함수 +
를 호출, 그것은 동일합니다 : a + b
합니다 (+
중위 연산자도 쓸 수에 당신은 동일하게 a + b
을 정의한
add :: Num a => a -> a -> a
add a b = add a b
(+)
으로,이 경우에는 일반 접두어 기능으로 동작하지만 왼쪽 면도 여전히 오른편면과 같습니다). 그래서 a + b
는 그 다음 다음 a + b
의 평가를 필요로 a + b
을 평가하기 위해 필요로 평가하고,하기로
답변 해 주셔서 감사합니다.하지만 문제는 분명합니다. 하지만 나는'let (+++) :: Num a => a -> a -> a를 시도했다. (+++) a b = a + b'도 작동하지 않았습니다. 여기에 문제가있는 것 같습니다. – user3377437
'+'에 여전히 무한 루프가 있기 때문에 가능합니다. GHCi 세션을 다시 시작 했습니까? –
나! 예, 그것이 문제였습니다. GHCi를 다시 시작했는데 성공했습니다! 두 가지 답변 모두 도움이되므로 먼저 답변 한 사람에게 투표를합니다. 귀하의 답변을 모두 감사드립니다. – user3377437