2009/3/30 michael rice <nowg...@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 ::
Integer)"

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.

  -- ryan
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to