문제

Haskell에서 2^8을 계산하는 한 가지 방법은 글을 쓰는 것입니다.

product(replicate 8 2)

다음과 같이 정의 된 기능을 작성하려고 할 때 ...

power1 :: Integer →  Integer → Integer
power1 n k | k < 0 = error errorText
power1 n 0 = 1
power1 n k = product(replicate k n)

다음 오류가 발생합니다.

Couldn't match expected type 'Int' against inferred type 'Integer'

내 생각에 나는 FromInteger 기능을 어딘가에 사용해야한다는 것입니다 ... 나는 어디에서 어떻게 확실하지 않습니까? 인터페이스입니까 아니면 FromInteger입니까? 어떻게 사용해야합니까?

감사

도움이 되었습니까?

해결책

첫째, FromInteger를 사용하지 마십시오. 인출에서 사용합니다.

복제 유형을 보면 유형 오류가 어디에 있는지 확인할 수 있습니다.

replicate :: Int -> a -> [a]

따라서 인수로 'k'를 giv 할 때, 당신이 주장한 것은 유형 선언을 통한 정수라고 주장하면 유형 오류가 있습니다.

이에 대한 더 나은 접근 방식은 일반적인 복제본을 사용하는 것입니다.

genericReplicate :: (Integral i) => i -> a -> [a]

그럼:

power1 n k = product (genericReplicate k n)

다른 팁

더 간단한 솔루션은 기능의 유형 정의를 다음과 같이 변경하는 것입니다.

power1 :: Integer -> Int -> Integer

나머지 오류 메시지를 살펴 봐야합니다. 질문에 대한 답을 정확히 알려줍니다.

Couldnt match expected type 'Int' against inferred type 'Integer'
In the first argument of 'replicate', namely 'k'
In the first argument of 'product', namely '(replicate k n)'
In the expression: product (replicate k n)

"복제본의 첫 번째 주장에서". 그것이 그것을 추가 할 곳입니다 fromIntegral.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top