On 14/11/06, Cale Gibbard <[EMAIL PROTECTED]> wrote:
On 14/11/06, Valentin Gjorgjioski <[EMAIL PROTECTED]> wrote:
> Just one more thing
>
> If I write
>
> ex9 :: [Float]
> ex9 = (observe "after reverse" ) reverse [10.0,7.0,3.0,0.0,4.0]
>
> it doesn't work. If I delete ex9 :: [Float] then it works fine. any
> suggestions?
>
This doesn't happen for me. The only thing I can think of trying is to
check the type of ex9 by deleting the type signature, loading the
file, and typing:
:t ex9
on the hugs prompt. If it prints anything other than
ex9 :: [Float]
then you'll have your answer.
- Cale
Sorry, I just realised what you meant, and I do get the behaviour you
initially described without the typesignature there.
Actually, without the typesignature, it's inferring the type [Double],
due to defaulting. However, adding the typesignature ex9 :: [Double]
will again cause it to print the values in the list rather than raw
thunks.
So perhaps it's because you haven't given a typesignature explicitly,
so the list is initially polymorphic, which means that the values in
it are actually function calls initially (that is, things like
(fromRational 10.0)), and they only end up getting a specialised type
later, when hugs finishes compiling the module and applies the
monomorphism restriction and defaulting, but hugs isn't going back and
optimising the function with the additional knowledge? I don't really
know, that's my best guess at it.
Maybe someone who knows hugs better would know with more certainty?
- Cale
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe