2009/3/20 Brandon S. Allbery KF8NH <allbery@ece.cmu.edu>
On 2009 Mar 20, at 18:01, Sean Bartell wrote:
For a type "a" to be Fractional requires there to be:
(/) :: a -> a -> a
You can't divide an Int by another Int and (in general) get a third
Int. You would probably want something like a "Fractionable"
typeclass, with
(/) :: a -> a -> b
which would result in a Rational, but Haskell doesn't have this.


...but there is (%) :: (Integral a) => a -> a -> Ratio a

Thanks, I knew about % but didn't remember about it when I was working on this sample :)  So that being said, consider the following:

Prelude Data.Ratio> let x = 5::Int
Prelude Data.Ratio> :t x
x :: Int
Prelude Data.Ratio> :t (x%3)
(x%3) :: Ratio Int
Prelude Data.Ratio> let y = truncate (x%3)
Prelude Data.Ratio> :t y
y :: Integer

Why does y now have the type Integer instead of Int?