이중 및 기타 곱하기 및 더하기를 지원하는 다른 유형의 숫자로 작동하는 함수를 작성하여 결과로 double을 생성합니다. 다음 물론, (*) t이다의 유형 때문에, 컴파일되지 않습니다 -> t -> t, 그래서 허용되지 않는 다른 유형의 혼합 :이중 및 일반 숫자로 작업
f :: (Num a) => Double -> a -> a -> Double
f x a b = a*x + b
는 내가 원하는 것은 쓸 수있는 기능입니다 다음과 같이 입력하십시오 :
f :: ...
f x a b = ... -- equivalent to a*x + b
f 1.0 (2 :: Int) (3 :: Int) -- returns 5.0
f 1.0 (2 :: Word32) (3 :: Word32) -- returns 5.0
f 1.0 (2 :: Float) (3 :: Float) -- returns 5.0
작동하려면 어떻게해야합니까? 아니면 근본적으로 잘못되어이 일을해서는 안됩니다. 그것은 매우 이상하지만 인터넷에 대해서는 이것에 대해 아무것도 발견하지 못했습니다.
'f 1.0 ((2 : +3) :: Complex Double) ((7 : +4) :: Complex Double) - 결과는 –
입니다. 아마 (Num a) 대신에 (Real a)를 써야했습니다. –
항상 Num, Real, Floating 및 Fractional의 차이를 잊어 버렸습니다 ... –