Hi all,

Looking at

ghc --show-iface .../ghc/lib/ghc-5.05/imports/base/GHC/Float.hi

I see

floor1 :: forall b. (GHC.Real.Integral b) =>
          Double -> b
            __S L

properFraction2 :: forall b. (GHC.Real.Integral b) =>
                   Double -> (b, Double)
            __S L

decodeFloat2 :: Double
            __S U(L)m

My understanding of this is that floor and properFraction of Doubles
have a lazy argument while decodeFloat has a strict constructor of lazy
values. It's not clear to me why the U(L) strictness isn't inherited by
properFraction and then float, nor do I understand why decodeFloat is
not strict in its argument when it seems to be working exclusively with
unboxed values. Unfortunately decodeDouble# in PrimopWrappers.hi doesn't
seem to have a strictness description so I can't see what's going on
there.

So I guess what I'm asking is are these strictnesses the best that can
be inferred or could GHC do better?

Of course a strict floor (Double to Int and Integer) is what I'm really
hoping for (without having to specify it explicitly with $! in my code).

Incidentally, what are 'm's in the strictness descriptions?


Thanks
Ian

_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to