2011-12-21 44 views

回答

23

在Haskell中,您不会将转换为,而是从转换成。见fromRational

threeHalves :: Ratio Integer 
threeHalves = 3 % 2 
sqrt threeHalves -- Fails 
sqrt $ fromRational threeHalves -- Succeeds 

如果你需要一个Rational -> Float功能,你可以将它定义为

toFloat x = fromRational x :: Float 
+2

谢谢,我特别喜欢第一句话..未来应该会有很大的帮助。 – aelguindy 2011-12-21 12:46:00

+3

有时你会转换,有时会转换。有,例如'toInteger'。 – augustss 2011-12-21 15:27:18

2

还有fromIntegralInt s和Integer s转换为Num的任何实例。

foo :: Float -> Float 
foo x = x+1 

value :: Int 
value = 4 

newValue = foo (fromIntegral value) 
2

注意Rational是一个类型,而不是一个类型类,所以Rational a => a没有意义。改为尝试使用Rational -> Float