[Haskell-cafe] Rational and % operator remix
ryani.spam at gmail.com
Mon Mar 30 13:21:52 EDT 2009
2009/3/30 michael rice <nowgate at yahoo.com>:
> I'm still not sure what some of the error messages I was getting were about.
> As I wrote the function I tried to be aware of what "mixed mode" operations
> were kosher ala
This is a mistake, but understandable given your lispy background;
there aren't really "mixed mode" operations in Haskell.
One thing that might be confusing you: Numeric literals are really
calls to "fromInteger"; that is, "5" is really "fromInteger (5 ::
Generally you will find that :t in the interpreter is your friend:
ghci> :t 1
1 :: (Num t) => t
This says that the expression "1" can be of any type that is an instance of Num.
ghci> :t (\a b -> a - b)
(\a b -> a - b) :: (Num a) => a -> a -> a
"-" takes two arguments that are of the same type, and returns
something of that type.
ghci> :m Data.Ratio
ghci> :t (%)
(%) :: (Integral a) => a -> a -> Ratio a
"%" lifts objects from an integral type into a type that represents
the ratio of two integers.
ghci> :t floor
floor :: (RealFrac a, Integral b) :: a -> b
So "floor" is a "cast" operation that converts between any fractional
type to any integral type.
This is why you need to either use "fromInteger" or "%" on the result
of "floor" to get it back as a Rational.
More information about the Haskell-Cafe