[Haskell-cafe] INLINABLE and SPECIALIZE, GHC 8.0.1

Carter Schonwald carter.schonwald at gmail.com
Fri Jun 17 15:45:53 UTC 2016

You probably want specializable and specialize inline pragmas.

On Friday, June 17, 2016, Jyotirmoy Bhattacharya <jyotirmoy at jyotirmoy.net>

> Sorry, realized that attachments cannot be sent to the list. I have put
> the code on GitHub here https://github.com/jmoy/testing-specialize
> On Fri, Jun 17, 2016 at 4:31 PM, Jyotirmoy Bhattacharya <
> jyotirmoy at jyotirmoy.net
> <javascript:_e(%7B%7D,'cvml','jyotirmoy at jyotirmoy.net');>> wrote:
>> I'm trying to write a mutable hash table library that would work both in
>> the IO and ST monads, so I'm using the PrimMonad typeclass [see
>> JmoyHash.hs  in the attached archive].
>> For efficiency, I would like the functions to be specialized to the
>> concrete monad at the call site. According to Section of the
>> GHC User's Guide
>> <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#specialize-for-imported-functions>
>> The optimiser *also* considers each *imported* INLINABLE overloaded
>> function, and specialises it for the different types at which it is called
>> in M.
>> So I marked all the functions in my library as INLINABLE. Yet adding a
>> SPECIALIZE pragma in Main.hs (currently commented out) for an imported
>> function improves runtime performance by 3x, which should not be happening
>> since, if I understand the manual right, the function should have been
>> specialized anyway since it is marked INLINABLE.
>> I am writing to this list rather than filing a bug since I'm not sure if
>> I'm reading the manual right and I have not explicitly verified that the
>> specialization is not happening. I would greatly appreciate any help on
>> both counts.
>> I'm using GHC 8.0.1 with the -O2 flag.
>> Marking the function as INLINE might solve the problem but that's
>> something I don't want to do as it seems to me that specialization and not
>> inlining is what's appropriate here.
>> Regards,
>> Jyotirmoy Bhattacharya
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20160617/0b77b412/attachment.html>

More information about the Haskell-Cafe mailing list