:46
To: Simon Peyton-Jones
Cc: glasgow-haskell-users@haskell.org
Subject: Re: Casting + eta reduction
Or a different way:
I want -fdo-lambda-eta-expansion (which, if I understand correctly, actually
triggers eta *reduction*) to eliminate argument casts, as well.
My motivation: I'm working
Subject: Casting + eta reduction
Consider
newtype Foo = Foo Int
lift :: (Int - a) - Foo - a
lift f (Foo x) = f x
Now, I'd expect this to compile with -O2 down to something like
lift f = f `cast` (Foo - a)
but it doesn't.
It seems that GeneralizedNewtypeDeriving assumes that these two things
+ eta reduction
Consider
newtype Foo = Foo Int
lift :: (Int - a) - Foo - a
lift f (Foo x) = f x
Now, I'd expect this to compile with -O2 down to something like
lift f = f `cast` (Foo - a)
but it doesn't.
It seems that GeneralizedNewtypeDeriving assumes that these two things
with that?
Simon
*From:* glasgow-haskell-users-boun...@haskell.org [mailto:
glasgow-haskell-users-boun...@haskell.org] *On Behalf Of *Louis Wasserman
*Sent:* 09 July 2010 03:30
*To:* glasgow-haskell-users@haskell.org
*Subject:* Casting + eta reduction
Consider
newtype Foo = Foo Int
lift
On Thu, Jul 08, 2010 at 09:30:23PM -0500, Louis Wasserman wrote:
Consider
newtype Foo = Foo Int
lift :: (Int - a) - Foo - a
lift f (Foo x) = f x
Now, I'd expect this to compile with -O2 down to something like
lift f = f `cast` (Foo - a)
but it doesn't.
It seems that
Consider
newtype Foo = Foo Int
lift :: (Int - a) - Foo - a
lift f (Foo x) = f x
Now, I'd expect this to compile with -O2 down to something like
lift f = f `cast` (Foo - a)
but it doesn't.
It seems that GeneralizedNewtypeDeriving assumes that these two things *are*
equivalent, and it just