2011-12-21 2 views
13

Интересно, существует ли функция, которая преобразует рациональные типы в Float (Rational a => a -> Float).No toFloat in Haskell

Я пробовал hoogling, но ничего не нашел.

ответ

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

+3

Когда-нибудь вы конвертируете, иногда. Есть, например, 'toInteger'. – augustss

2

Существует также fromIntegral для конвертации Int s и Integer s в любой формат от Num.

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

value :: Int 
value = 4 

newValue = foo (fromIntegral value) 
2

Обратите внимание, что Rational типа, а не класс типов, так Rational a => a не имеет смысла. Вместо этого попробуйте hoogling Rational -> Float.