[Haskell-cafe] Rational and % operator remix

michael rice nowgate at yahoo.com
Mon Mar 30 11:24:37 EDT 2009


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 <ketil at malde.org> wrote:

From: Ketil Malde <ketil at malde.org>
Subject: Re: [Haskell-cafe] Rational and % operator remix
To: "michael rice" <nowgate at yahoo.com>
Cc: "Brandon S. Allbery KF8NH" <allbery at ece.cmu.edu>, haskell-cafe at haskell.org
Date: Monday, March 30, 2009, 2:48 AM

michael rice <nowgate at yahoo.com> writes:

> 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



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090330/1ffbb2e4/attachment.htm


More information about the Haskell-Cafe mailing list