
My query was in response to an earlier post claiming that ai was a Rational, which post he almost simultaneously said to ignore.
I've used GHC and like it better than Hugs, but the Fedora Linux package is humongous and I'm only on dialup right now.
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
Main> 1 / (6%7)
7 % 6
Main> 1 - (6%7)
1 % 7
Main> (6%7) - 1
(-1) % 7
Main>
but still kept getting kicked out.
Better error messages certainly couldn't hurt.
Thanks.
Michael
--- On Mon, 3/30/09, Ketil Malde
cf2 :: Rational -> [Int] cf2 a = let ai = floor a <-- Doesn't this make ai an Int? -Michael in if a == (toRational ai) then [ai] else ai : cf2 (1 / (a - ai))
One thing that you could try, is ghci in addition to (or instead of) Hugs. That will give you another take on the error messages, where Hugs says:
Main> :load cf.hs ERROR "cf.hs":7 - Type error in application *** Expression : ai : cf2 (1 / (a - ai)) *** Term : ai *** Type : Ratio Integer *** Does not match : Int
ghci will tell you: Couldn't match expected type `Rational' against inferred type `Int' In the second argument of `(-)', namely `ai' In the second argument of `(/)', namely `(a - ai)' In the first argument of `cf2', namely `(1 / (a - ai))' So while this is (almost) right:
cf2 a = let ai = floor a <-- Doesn't this make ai an Int? -Michael
The problem is the subtraction of ai from a, which forces them to be the same type. I tend to find ghc's messages more informative than Hugs's (but perhaps it is just that I am more familiar with ghc?). -k -- If I haven't seen further, it is by standing in the footprints of giants