
On Monday 29 August 2011, 13:15:37, Sunil S Nandihalli wrote:
Hi everybody, can somebody explain as to what the following error message means..
Fortunately, it's not an error message, not even a serious warning. It shouldn't really be shown to the user unless (s)he asks the compiler to be really thorough in reporting "problems". The thing is, with optimisations (I'm not sure whether -O suffices or one needs -O2) GHC specialises functions by call pattern, meaning, by the constructors of the arguments. The number of possible specialisations can become huge for recursive functions, so there's a limit how many specialisations GHC will create for any function - the default limit is, iirc, 3 - and when specialising a callee, the limit is divided by the number of specialisations of the caller so you don't get exponential code growth. Now
[1 of 1] Compiling Main ( main.hs, main.o ) SpecConstr Function `$wf{v s3mp} [lid]' has four call patterns, but the limit is 3 Use -fspec-constr-count=n to set the bound Use -dppr-debug to see specialisations SpecConstr Function `$wf{v X3sC} [lid]' has three call patterns, but the limit is 1 Use -fspec-constr-count=n to set the bound Use -dppr-debug to see specialisations
means that these functions have more call patterns to specialise for than the current limit allows, so GHC doesn't create these specialisations. The first seems to be a first-generation specialisation candidate and the second a second-generation candidate since its limit has dropped to 1. It's nothing serious, just a possible missed optimisation [that can have a big impact, but normally it doesn't make too much difference; on the other hand, occasionally the constructor specialisation is a pessimisation, so you can turn it off with -fno-spec-constr]. If you set the limit high enough with -fspec-constr-count=n, GHC will create all specialisations it thinks will be good and doesn't lose a word about it. Really, it shouldn't reach the console unless the user asks for it, but somebody forgot to remove it from the diagnostics by default.
Linking main ...
Thanks, Sunil.