I just split the "library code" (data types and instances) and the client code (type-specialized use) into two modules. Same great results, as long as both modules are compiled with -O (not even -O2). Sweet!

On Thu, Jan 28, 2016 at 10:12 AM, Conal Elliott <conal@conal.net> wrote:
Hah! I had misread the signatures in the Core output. I'm getting exactly the dictionary removal I wanted. Fantastic!

I'm attaching my sample source code and the Core it produces.

Sorry for the misdirection, and kudos for specialis/zation in GHC!

-- Conal

On Thu, Jan 28, 2016 at 4:54 AM, Simon Peyton Jones <simonpj@microsoft.com> wrote:

Aggressive inlining is one way, but specialisation ought to get a long way, and makes fewer copies of the specialised code.

 

It’s hard to help without a concrete example

 

Simon

 

From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Conal Elliott
Sent: 28 January 2016 00:05
To: ghc-devs@haskell.org
Subject: More aggressive dictionary removal?

 

I'm looking for pointers on getting GHC to eliminate more overloading & polymorphism. I think this sort of thing mainly happens in the Specialise module. The default GHC flag settings get me a couple levels of monomorphization and dictionary removal, but I want to go further. I've tried -fspecialise-aggressively, but it didn't seem to make a difference, and I haven't found this flag described in the GHC user's guide. Anyone have pointers to more information?

Thanks, - Conal