[GHC] #12801: Misleading error message when deriving Functor

GHC ghc-devs at haskell.org
Thu Nov 3 04:16:37 UTC 2016


#12801: Misleading error message when deriving Functor
-------------------------------------+-------------------------------------
           Reporter:  erikd          |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.2.1
          Component:  Compiler       |           Version:  8.0.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Poor/confusing
  Unknown/Multiple                   |  error message
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Compiling this trivial demo program:
 {{{
 data Container
   = Container [Wibble Int]
   deriving (Eq, Show)

 data Wibble a
   = Wibble a
   | Wobble
   deriving (Eq, Functor, Show)
 }}}

 results in the error message:
 {{{
 a.hs:6:13: error:
     • No instance for (Eq (Wibble Int))
         arising from the first field of ‘Container’ (type ‘[Wibble Int]’)
       Possible fix:
         use a standalone 'deriving instance' declaration,
           so you can specify the instance context yourself
     • When deriving the instance for (Eq Container)

 a.hs:6:17: error:
     • No instance for (Show (Wibble Int))
         arising from the first field of ‘Container’ (type ‘[Wibble Int]’)
       Possible fix:
         use a standalone 'deriving instance' declaration,
           so you can specify the instance context yourself
     • When deriving the instance for (Show Container)

 a.hs:12:17: error:
     • Can't make a derived instance of ‘Functor Wibble’:
         You need DeriveFunctor to derive an instance for this class
     • In the data declaration for ‘Wibble’
 }}}

 The "No instance for (Eq|Show)" are rather misleading, because the
 *actual* error is that the `{-# LANGUAGE DeriveFunctor #-}` pragma is
 missing.

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


More information about the ghc-tickets mailing list