I have another related question: What about allowing primitive types in newtypes?
λ:4> newtype Blah1 = Blah1 Int λ:5> newtype Blah2 = Blah2 Int# <interactive>:5:23: error: • Expecting a lifted type, but ‘Int#’ is unlifted • In the type ‘Int#’ In the definition of data constructor ‘Blah2’ In the newtype declaration for ‘Blah2’ Ideally second definition should be OK, and kind of Blah2 should be #. Is this too hard to do? 2015-12-16 17:22 GMT-05:00 Richard Eisenberg <e...@cis.upenn.edu>: > > On Dec 16, 2015, at 2:06 PM, Ömer Sinan Ağacan <omeraga...@gmail.com> wrote: >> >> In any case, this is not that big deal. When I read the code I thought this >> should be a trivial change but apparently it's not. > > No, it's not. Your example (`f :: (Int#, b) -> b`) still has an unboxed thing > in a boxed tuple. Boxed tuples simply can't (currently) hold unboxed things. > And changing that is far from trivial. It's not the polymorphism that's the > problem -- it's the unboxed thing in a boxed tuple. > > Richard _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs