Levity is very simple: > data Levity = Lifted | Unlifted
And that's it, as far as Levity is concerned. The weird thing is TYPE, whose type is Levity -> TYPE 'Lifted. (Yes. TYPE's type mentions TYPE.) The * of yore is now spelled TYPE 'Lifted. The # of yore is now spelled TYPE 'Unlifted. * and # really are just type synonyms. (See them for yourself in GHC.Types.hs.) There is some discussion on wiki:NoSubKinds, but it may be a bit out of date. And, yes, a more obvious function to drop levity arguments (to unboxed tuples, presumably) is a good idea. Richard On Jan 28, 2016, at 8:30 PM, Ömer Sinan Ağacan <[email protected]> wrote: > 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 <[email protected]>: >> >> On Jan 28, 2016, at 5:48 PM, Ömer Sinan Ağacan <[email protected]> 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 > _______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
