[Haskell-cafe] CDouble type coercion

SevenThunders mattcbro at earthlink.net
Sun May 14 18:58:26 EDT 2006


The rabbit hole goes a bit deeper I'm afraid
y :: CDouble
y = 5.2
u :: Double
u = realToFrac(y)
test = do  printf "%14.7g" u 

gives
Compiling Test             ( test.hs, interpreted )

test.hs:14:11:
    No instance for (PrintfType (t t1))
      arising from use of `printf' at test.hs:14:11-16
    Probable fix: add an instance declaration for (PrintfType (t t1))
    In the result of a 'do' expression: printf "%14.7g" u
    In the definition of `test': test = do printf "%14.7g" u
Failed, modules loaded: none.

But in fact just this, gives the same error
test = do  printf "%14.7g" 3.14 

Now in the command line I get errors under various configurations but a few
of them 
work e.g.
works
> printf "%g" u
> printf "%g" (3.14 :: Double)
do printf "%g" u
do printf "%g" (3.14 :: Double)

fails
printf "%g" y -- y is  a CDouble
printf "%g" 3.14


All forms fail when compiled from a .hs file.  However, this just in!  I
finally got something to work,
namely this piece of code
test = do  (printf "%14.7g" (u  :: Double)) :: IO()

I guess the output of printf has to be disambiguated.  There should probably
be a few examples of this in the library documentation.  This also works, by
returning a string...
test = printf "%14.7g" (u  :: Double) :: String 

Thanks for the help by the way, without realtoFrac there would be no way for
me to use this at all.
--
View this message in context: http://www.nabble.com/CDouble-type-coercion-t1615450.html#a4385065
Sent from the Haskell - Haskell-Cafe forum at Nabble.com.



More information about the Haskell-Cafe mailing list