>From what you say, in a subsequent message, about the strictness being "b", >that means the strictness analyser has decided that $fNumFixed2 is bottom >(i.e. diverges). So there's no point in exposing the unfolding, because (one >way or another) it's an infinite loop, so there's no point in optimising it.
It's unusual to have a bottom dictionary; you must be using undecidable instances or something. ("Scrap your boilerplate with class" describes why recursive dictionaries are good.) Bur apparently you have. It's arguable that with -fexpose-all-unfoldings we should expose even bottom values. If you have a reason for wanting that, it'd be an easy change to make, I think. Simon | -----Original Message----- | From: Glasgow-haskell-users [mailto:glasgow-haskell-users- | boun...@haskell.org] On Behalf Of Christiaan Baaij | Sent: 26 March 2014 16:41 | To: glasgow-haskell-users | Subject: GHC API: getting the unfolding of a "strange" Id | | Dear list, | | I'm using the GHC API to get Core Expressions from haskell interface | (.hi) files, and have encountered a strange kind of 'Id' for which I | can't seem to get the unfolding: | | The properties of this 'Id' are the following: | - varName: $fNumFixed2 | - IdDetails: VannillaId | - Pretty print of IdInfo.inlinePragInfo: [Always] | - IdInfo.unfoldingInfo: NoUnfolding | | The source file which gives rise to this 'Id' is: | https://github.com/christiaanb/clash- | prelude/blob/master/src/CLaSH/Sized/Fixed.hs | As you can see, the file is compiled with: -fexpose-all-unfoldings | | The '$f' prefix seems to indicate that the 'Id' is a Dictionary Function, | so I was expecting its 'IdInfo.unfoldingInfo' to be a 'DFunUnfolding'. | Given that pretty printing 'inlinePragInfo' gives me '[Always]', I would | expect to have a usable 'Unfolding' in general. | How can GHC inline the body of this 'Id' if it has no unfolding? | | Also, if I compile the file with "-O0 -fno-omit-interface-pragmas", the | $fNumFixed2 'Id' is no longer included in the interface file. | At positions where "$fNumFixed2" was originally used, a equality | constraint can eventually be found: | | Using -O: | (CLaSH.Sized.Fixed.$fNumFixed2 | @(GHC.TypeLits.+ 4 4) | | Using -O0 -fno-omit-interface-pragmas: | (GHC.Types.Eq# | @GHC.Types.Bool | @(GHC.TypeLits.<=? 1 (GHC.TypeLits.+ 4 4)) | @GHC.Types.True | _CO_) | | So my question is, what kind of "strange" 'Id' is this $fNumFixed2? | And how can I get the Core expression for this 'Id' from the interface | file? | And if I can't get it from the interface file, is there a straightforward | way to generate it from the 'Id'? | | Cheers, | | Christiaan | | | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users