
If you use -dppr-debug GHC will show you the unique number of each identifier, and that'll show you that the two $dMonads are distinct even though they have the same print-name. CoreTidy makes the print-name unique too. Perhaps the Core printer should be a bit keener to print unique numbers, but it adds a lot of clutter. Simon | -----Original Message----- | From: glasgow-haskell-users-bounces@haskell.org [mailto:glasgow-haskell-users-bounces@haskell.org] On Behalf Of | Neil Mitchell | Sent: 05 January 2008 20:01 | To: GHC Users | Subject: GHC Core question | | Hi | | I've compiled the Debug.Trace module to Core, but can't understand the | resulting output. The original code is: | | trace string expr = unsafePerformIO $ do | putTraceMsg string | return expr | | The core is: | | Debug.Trace.trace = | \ (@ a) -> | __letrec { | trace :: GHC.Base.String -> a -> a | [] | trace = | \ (string :: GHC.Base.String) (expr :: a) -> | GHC.Base.$ | @ (GHC.IOBase.IO a) | @ a | (GHC.IOBase.unsafePerformIO @ a) | (>> @ () @ a (Debug.Trace.putTraceMsg string) (return @ a expr)); | $dMonad :: GHC.Base.Monad GHC.IOBase.IO | [] | $dMonad = $dMonad; | return :: forall a. a -> GHC.IOBase.IO a | [] | return = GHC.Base.return @ GHC.IOBase.IO $dMonad; | $dMonad :: GHC.Base.Monad GHC.IOBase.IO | [] | $dMonad = GHC.IOBase.$f16; | >> :: forall a b. | GHC.IOBase.IO a -> GHC.IOBase.IO b -> GHC.IOBase.IO b | [] | >> = GHC.Base.>> @ GHC.IOBase.IO $dMonad; | } in trace; | | And my Haskell reformatting of that is: | | Debug.Trace.trace = let | trace string expr = unsafePerformIO $ putTraceMsg string >> return expr | $dMonad = $dMonad; | return = GHC.Base.return $dMonad; | $dMonad = GHC.IOBase.$f16; | >> = GHC.Base.>> $dMonad; | in trace | | However, that let expression has two bindings for $dMonad, one of | which looks like a black-hole. Are the semantics of __letrec different | from let in some way? | | Thanks | | Neil | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users