a reliable way of dropping levity args?

Ömer Sinan Ağacan omeragacan at gmail.com
Fri Jan 29 01:34:44 UTC 2016


It might be nice to actually replace `drop (length args `div` 2) args` with a
function `dropLevityArgs = dropWhile (isLevityTy . typeKind)` (I did this in my
branch). When I see a code that drops half of the type arguments it doesn't
make sense right away, but `dropLevityArgs` is at least giving an idea of
what's actually happening.

2016-01-28 20:30 GMT-05:00 Ömer Sinan Ağacan <omeragacan at gmail.com>:
> Ahh, levity is type of kinds, right? For some reason I thought kinds are now
> levities (or whatever it's called). This makes sense. I just tried and I think
> it works, thanks.
>
> 2016-01-28 19:39 GMT-05:00 Richard Eisenberg <eir at cis.upenn.edu>:
>>
>> On Jan 28, 2016, at 5:48 PM, Ömer Sinan Ağacan <omeragacan at gmail.com> wrote:
>>>
>>>    | 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)
>>
>> You want (dropWhile (isLevityTy . typeKind) args). isLevityTy simply checks if its argument is exactly `Levity`.
>>
>> Does that work?
>>
>> Richard


More information about the ghc-devs mailing list