a reliable way of dropping levity args?

Ömer Sinan Ağacan omeragacan at gmail.com
Thu Jan 28 22:48:57 UTC 2016


I finally had some time to have another look. I have this line in my
compiler pass:

    | Just (tc, args) <- splitTyConApp_maybe ty
    , isUnboxedTupleTyCon tc
    = pprTrace "elimUbxSumRepTypes"
        (text "orig args:" <+> ppr args $$
         text "dropWhile isLevityTy args = " <+> ppr (dropWhile
isLevityTy args)) $
      concatMap go (drop (length args `div` 2) args)

This is one of the outputs:

    elimUbxSumRepTypes
      orig args: ['Lifted, 'Lifted, 'Lifted, String, String, String]
      dropWhile isLevityTy args =  ['Lifted, 'Lifted, 'Lifted, String,
                                    String, String]

Am I doing this wrong?

2016-01-25 7:30 GMT-05:00 Richard Eisenberg <eir at cis.upenn.edu>:
> As discussed on IRC, your approach below looks right to me: dropWhile (isLevityTy . idType) args. But you then said this wasn't working for you. What does (map idType args) say?
>
> Richard
>
> On Jan 24, 2016, at 8:58 PM, Ömer Sinan Ağacan <omeragacan at gmail.com> wrote:
>
>> Hi all,
>>
>> I'm looking for a reliable way of dropping levity args from TyCon applications.
>> When I know that a particular TyCon gets some number of levity args, I can just
>> drop the args manually (for example, I can drop the first half of arguments of
>> a tuple TyCon application) but the code looks fragile (what happens if I use a
>> different TyCon in the future) and confusing to the reader because it looks
>> like this:
>>
>>    drop (length args `div` 2) args
>>
>> Ideally it'd look like this:
>>
>>    dropWhile isLevityArg args
>>
>> Now, there's a function called isLevityTy, but I don't understand what it's
>> supposed to do. This doesn't do anyting to 'Boxed and 'Unboxed arguments:
>>
>>    dropWhile (isLevityArg . idType) args
>>
>> Any ideas on this?
>>
>> Thanks..
>


More information about the ghc-devs mailing list