Re: problems with trace
George Colpitts <[email protected]>
| Newsgroups | gmane.comp.lang.haskell.cafe |
|---|---|
| Message-ID | <CAB-d4A4qd1RqMkQSO1Hi614jjX243C27DPU7u5t-h+m4WyMfxA@mail.gmail.com> |
Agreed! Thanks On Sat, May 18, 2024 at 3:43 AM Tom Ellis < [email protected]> wrote: > I don't think optimization plays any role. At the start of the > program 'norm' is a thunk which points to the code 'trace "norm" id'. > The first time it is evaluated the 'trace' prints "norm" and 'norm' > becomes bound to the value 'id'. > > On Fri, May 17, 2024 at 08:26:44PM -0300, George Colpitts wrote: > > Thanks Henning! I suspected some kind of optimization but I didn't think > > ghci would do any. I guess it is just a subtle consequence of eta > > reduction. It was very confusing to me. > > > > On Fri, May 17, 2024 at 6:43 PM Henning Thielemann < > > [email protected]> wrote: > > > > > > > > On Fri, 17 May 2024, George Colpitts wrote: > > > > > > > After I load the following into ghci and call main I expect to see > > > "norm" in the output 3 times as I have called it 3 times > > > > but it only shows once. Why? > > > > > > > > traceBug.hs > > > > --------------- > > > > {-# OPTIONS_GHC -Wall #-} > > > > > > > > import Debug.Trace (trace) > > > > > > > > norm :: [Int] -> [Int] > > > > norm = trace ("norm") id > > > > > > > > main :: IO () > > > > main = > > > > do > > > > print $ norm [2] > > > > print $ norm [2] > > > > print $ norm [3] > > > > --------------------- > > > > > > > > ghci session > > > > > > > > % ghci traceBug.hs > > > > Loaded package environment from > > > /Users/gcolpitts/.ghc/x86_64-darwin-9.8.2/environments/default > > > > GHCi, version 9.8.2: https://www.haskell.org/ghc/ :? for help > > > > [1 of 2] Compiling Main ( traceBug.hs, interpreted ) > > > > Ok, one module loaded. > > > > ghci> main > > > > norm > > > > [2] > > > > [2] > > > > [3] > > > > > > > > > I think this is correct. 'norm' is evaluated only once, because it is > the > > > same variable (for a function) in every call. It would be different, if > > > you would define: > > > > > > norm xs = trace "norm" xs > _______________________________________________ > Haskell-Cafe mailing list > To (un)subscribe, modify options or view archives go to: > http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe > Only members subscribed via the mailman list are allowed to post. _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.