나는 이러한 기능에서 찾아 봤는데 :왜이 두 haskell 함수는 동등하지 않습니까?
import Data.Digits (digits)
numberDivider (a,b) = a/b
numberDivider2 (num,denom) = num/denom
where
a = head $ digits 10 num
b = head . tail $ digits 10 denom
우리는 이러한 기능의 유형을 볼 수 있습니다 :
λ> :t numberDivider2
numberDivider2 :: (Integral a, Fractional a) => (a, a) -> a
λ> :t numberDivider
numberDivider :: Fractional a => (a, a) -> a
numberDivider
당신이 그것을 수행 생각하는 것이 무엇 않습니다. numberDivider2
준다 : 올바른 인수라고
No instance for (Show a0) arising from a use of ‘print’
The type variable ‘a0’ is ambiguous
Note: there are several potential instances:
instance Show Double -- Defined in ‘GHC.Float’
instance Show Float -- Defined in ‘GHC.Float’
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in ‘GHC.Real’
...plus 34 others
In a stmt of an interactive GHCi command: print it
(예컨대 (48,98)). 이제 더 구체적인 것을 만드는 것이 모호함을 가져 오는 것을 어떻게 볼 수 있습니까? 나는 어리 석다는 생각이 든다. 함수가 I가이 Integral
이며, b는 플로트 또는 무언가 곳이 (a,a) -> b
될 것이라고 생각하는 것처럼 (a,a) -> a
에서 이동해야하는 이유 (I도 볼 수 없습니다.
을 내가 그것을 강제로 유형 약어에 퍼팅 시도 결과에 대한 플로트를 사용합니다.
이사람이 내가 여기에 누락 무엇을 지적 할 수 있습니까? 이것은 아마 내가 추측하고있어 digits
의 정의에서 오는
전체 코드를 제공 할 수 있습니까? 예를 들어, 인쇄 할 호출이없고 예를 들어 여기에서 'digits'을 볼 수 있습니다 : http://hackage.haskell.org/package/digits? – Carsten
답이 패키지보다'digits' 인 경우 대답은이 함수가 추가 제약 조건을 필요로한다는 것입니다. http://hackage.haskell.org/package/digits-0.2/docs/Data-Digits.html – Carsten
문제는'print'로 당신은 구체적인 타입을 제약해야합니다 :'numberDivider (49,98) :: Float' 그러나 우리가 시도 할 수있는 완전한 코드 없이는 말하기가 어렵습니다 – Carsten