
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
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
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..