Strictness/demand info for a Name

Zubin Duggal zubin at well-typed.com
Fri Jan 14 09:28:40 UTC 2022


See https://hackage.haskell.org/package/ghc-9.2.1/docs/GHC-Driver-Env.html#v:lookupType

On 22/01/14 01:23, Alejandro Serrano Mena wrote:
>Nice, so only I get the corresponding IdInfo, my work is “done”. But I’m
>still missing how to thread everything together. Right now, what I have to
>work with are:
>
>   - The HieAst node I am searching information about, from which I can get
>   the name,
>   - The result of the parsing, renaming, and type checking phases.
>
>Is there a way, with that information only, to obtain the corresponding
>IdInfo? (This might be a very simple question, or just have a negative
>answer, but I’m not versed at all in how all this information flows within
>GHC).
>
>Thanks in advance,
>Alejandro
>
>El 13 ene 2022 16:50:01, Sebastian Graf <sgraf1337 at gmail.com> escribió:
>
>> Yes, every imported identifier from a module that was compiled with
>> optimisations should have the proper analysis information in its IdInfo.
>> So if you have `base` somewhere in one of your compiled libraries and load
>> it, then the identifier of `GHC.OldList.map` will have an `idDmdSig` that
>> says it's strict in the list parameter.
>>
>> At least that's how it works in GHC, where these IdInfos are populated
>> with the information from the loaded interface files. The situation with
>> HLS might be different, although I wouldn't expect that.
>>
>> ------ Originalnachricht ------
>> Von: "Alejandro Serrano Mena" <trupill at gmail.com>
>> An: "Sebastian Graf" <sgraf1337 at gmail.com>
>> Cc: "GHC developers" <ghc-devs at haskell.org>; "Matthew Pickering" <
>> matthewtpickering at gmail.com>
>> Gesendet: 13.01.2022 16:43:50
>> Betreff: Re: Re[2]: Strictness/demand info for a Name
>>
>> Thanks for the pointers! :)
>>
>> Knowing this, let me maybe rephrase my question: is it possible to get
>> demand information of identifiers *without* running the analysis itself?
>>
>> Alejandro
>>
>> El 13 ene 2022 15:45:29, Sebastian Graf <sgraf1337 at gmail.com> escribió:
>>
>>> Yes, Matt is right.
>>>
>>> `dmdSigInfo` describes the how a function Id uses its arguments and free
>>> variables, whereas
>>> `demandInfo` describes how a (local, mostly) Id is used.
>>>
>>> Note that if you wanted to go beyond type-checking, you could probably
>>> run the analysis on the desugaring of the current module quite easily.
>>> But the results would be misleading, as prior optimisations (that you
>>> probably don't want to run) may arrange the program in a way that demand
>>> analysis has an easier time.
>>>
>>> ------ Originalnachricht ------
>>> Von: "Matthew Pickering" <matthewtpickering at gmail.com>
>>> An: "Alejandro Serrano Mena" <trupill at gmail.com>
>>> Cc: "GHC developers" <ghc-devs at haskell.org>
>>> Gesendet: 13.01.2022 15:38:29
>>> Betreff: Re: Strictness/demand info for a Name
>>>
>>> You look at `dmdSigInfo` in `IdInfo`.
>>>
>>>
>>> Matt
>>>
>>>
>>> On Thu, Jan 13, 2022 at 2:20 PM Alejandro Serrano Mena
>>>
>>> <trupill at gmail.com> wrote:
>>>
>>> >
>>>
>>> >  Dear all,
>>>
>>> >
>>>
>>> >  I’m trying to bring the information about demand and strictness to the
>>> Haskell Language Server, but I cannot find a way to do so. I was wondering
>>> whether you could help me :)
>>>
>>> >
>>>
>>> >  Here’s my understanding; please correct me if I’m wrong:
>>>
>>> >
>>>
>>> >  The analysis runs on Core, so getting this information for the current
>>> file would require to run the compiler further than type checking, which is
>>> quite expensive,
>>>
>>> >  However, this analysis should somehow use known information about
>>> imported functions, which should be readily available somewhere,
>>>
>>> >  If the above is true, what is the simplest way to get the information
>>> for imported things? As I mentioned above, I would prefer not to run the
>>> compiler further than the type checking phase, since otherwise it gets too
>>> expensive for IDE usage. Right now HLS uses the information from the .hie
>>> files.
>>>
>>> >
>>>
>>> >
>>>
>>> >  In fact, this goes into the more general question of how to show
>>> information from different analyses within the IDE; I guess solving the
>>> case for strictness/analysis may open the door to more (maybe everything
>>> recorded inside a `Id`?)
>>>
>>> >
>>>
>>> >  Regards,
>>>
>>> >  Alejandro
>>>
>>> >  _______________________________________________
>>>
>>> >  ghc-devs mailing list
>>>
>>> >ghc-devs at haskell.org
>>>
>>> >http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>>
>>> _______________________________________________
>>>
>>> ghc-devs mailing list
>>>
>>> ghc-devs at haskell.org
>>>
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>>>
>>>
>>>

>_______________________________________________
>ghc-devs mailing list
>ghc-devs at haskell.org
>http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs



More information about the ghc-devs mailing list