
| That contradicts my intution for seq. I would read it as "h is forced | before h is forced", and I would think that (h `seq` h) is equivalent | to h. | | Were I am wrong? You're not wrong -- Malcolm is. The function is certainly strict in h, and GHC finds it. Here's what I get when I compile your program (with a suitable definition of AVL). The function $wpoly_addHeight is the worker for addHeight. GHC has worked out that addHeight is strict, and has unboxed the first argument, so that it is now of type Int#, as you can see. The DmdType for the Int# is indeed "L" but that's irrelevant because Int# values are always evaluated. The demand info is always L for an unboxed type. Simon Rec { Foo.$wpoly_addHeight :: forall e. GHC.Prim.Int# -> Foo.AVL e -> GHC.Prim.Int# [GlobalId] Arity 2 NoCafRefs Str: DmdType LS Foo.$wpoly_addHeight = \ @ e ww :: GHC.Prim.Int# w :: Foo.AVL e -> case w of wild { Foo.P ds ds1 r -> Foo.$wpoly_addHeight @ e (GHC.Prim.+# ww 2) r; Foo.Z l ds ds1 -> Foo.$wpoly_addHeight @ e (GHC.Prim.+# ww 1) l; Foo.N l ds ds1 -> Foo.$wpoly_addHeight @ e (GHC.Prim.+# ww 2) l; Foo.E -> ww } end Rec } Foo.height :: forall e. Foo.AVL e -> GHC.Base.Int [GlobalId] Arity 1 NoCafRefs Str: DmdType Sm Foo.height = \ @ e w :: Foo.AVL e -> case Foo.$wpoly_addHeight @ e 0 w of ww { __DEFAULT -> GHC.Base.I# ww } | -----Original Message----- | From: glasgow-haskell-users-bounces@haskell.org [mailto:glasgow-haskell-users- | bounces@haskell.org] On Behalf Of Tomasz Zielonka | Sent: 22 June 2004 14:18 | To: Malcolm Wallace | Cc: glasgow-haskell-users@haskell.org | Subject: Re: Understanding strictness of ghc output | | On Tue, Jun 22, 2004 at 01:52:44PM +0100, Malcolm Wallace wrote: | > | > Same again. Try | > addHeight h E = h `seq` h | > | > which, although it looks bizarre, actually forces the evaluation of h, | > whilst simply returning it does not. | | That contradicts my intution for seq. I would read it as "h is forced | before h is forced", and I would think that (h `seq` h) is equivalent | to h. | | Were I am wrong? | | Best regards, | Tom | | -- | .signature: Too many levels of symbolic links | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users