저는 haskell을 처음 접했고 유형 서명에 어려움을 겪었습니다. 저는 단일 함수 Collatz 체인 생성기를 개발 중입니다. 저는 몇 가지 haskell collatz 질문을 보았습니다. 그러나 제가 대답하려고하는 종류의 문제에 대한 답을 보지 못했습니다. GHCI를 사용하고 있습니다.단일 기능 콜라주 체인의 서명 유형
collatz :: (Num a) => a -> [a]
collatz n
| n == 1 = [n]
| odd n = n : collatz (n * 3 + 1)
| even n = n : collatz (n/2)
이 간단합니다 보인다; 여기
내 기능입니다 목록에 새로운 변형을 추가해야합니다. 그러나, 인터프리터는 나에게 이러한 오류를 제공합니다collatz.hs:9:13:
Could not deduce (Eq a) arising from a use of `=='
from the context (Num a)
....
collatz.hs:10:11:
Could not deduce (Integral a) arising from a use of `odd'
from the context (Num a)
....
collatz.hs:11:36:
Could not deduce (Fractional a) arising from a use of `/'
from the context (Num a)
컴파일러가 나를 사용하는 지시 형 타입의 서명의 모든 조합 내가 분명히 근본적인 뭔가를 누락
collatz :: (Eq a, Num a) => a -> [a]
collatz :: (Integral a) => a -> [a]
collatz :: (Fractional a) => a -> [a]
실패 것으로 보인다. 누구든지 단일 기능으로 collatz 체인을 생산하는 방법을 말해 줄 수 있습니까? 문제는
종종 디버그 유형 오류에 구체적인 유형을 사용하는 것이 도움이 될 것입니다. 'a'를'Int'로 바꾸면 훨씬 간단한 메시지로 문제를 더욱 분명하게 할 수 있습니다. – ErikR