[GHC] #12791: Superclass methods could be more aggressively specialised.

GHC ghc-devs at haskell.org
Mon Oct 31 20:53:25 UTC 2016


#12791: Superclass methods could be more aggressively specialised.
-------------------------------------+-------------------------------------
           Reporter:  mpickering     |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Say `R` is a superclass of `MR` but only uses one of the type variables.
 If this type variable is fixed then we know that we are going to use the
 specific dictionary. Thus, the optimiser *could* specialise all methods
 from the superclass at this point leading to better code.


 {{{#!hs
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE FlexibleContexts #-}
 module Foo where

 class R t => MR t m where
   push :: t -> m -> Int

 class R t where
   pull :: t -> Int

 --type MR2 t m = (R t, MR t m)

 instance MR Int Int where
   push = max

 instance R Int where
   pull = negate

 myf :: (MR Int a) => a -> Int -> Int
 myf _ = pull
 }}}

 To give a concrete example, `R` is a super class of `MR` but only mentions
 the first type variable. Thus when we fix it in `myf`, we could optimise
 the definition to `myf _ = negate` by inlining the class method.

 Reid points out that if you have a definition like

 {{{
 data X = X

 f :: R X => Int -> Int
 f = pull
 }}}

 then the instance for `R X` could be provided by another module. However
 it is common to structure large applications with super class constraints
 so it would be desirable to do better.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12791>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list