[GHC] #11128: New `-fwarn-noncanonical-monad-instances` warning

GHC ghc-devs at haskell.org
Tue Nov 24 12:15:08 UTC 2015


#11128: New `-fwarn-noncanonical-monad-instances` warning
-------------------------------------+-------------------------------------
        Reporter:  hvr               |                Owner:  hvr
            Type:  feature request   |               Status:  patch
        Priority:  normal            |            Milestone:  8.0.1
       Component:  Compiler          |              Version:  7.10.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D1516
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by hvr:

Old description:

> (see description in Phab:D1516 for the meantime)

New description:

 When declaring `Applicative` and `Monad` instances, there's a degree of
 freedom in which way to define `return`,`pure`,`(>>)`,`(*>)`. For
 instance, defining

 {{{#!hs
 instance Applicative T1 where
   pure = return
   (<*>) = ap

 instance Monad T1 where
   return = ...
   (>>=)  = ...
   (>>)   = ...
 }}}

 is ok, but it's leaves `(*>)` with a possibly less optimised version than
 `(>>)`. This can cause performance regressions when generalising code from
 `Monad` to `Applicative`.

 Moreover, starting with `base-4.8`, the `return` method gained a default
 implementation `return = pure` which follows the preferred or "canonical"
 direction of having implementations flow from superclasses to their
 subclasses.

 So this warning is a "lint"-style check to help detect `Monad` instances
 where the definitions of `return`/`(>>)` are not canonical, i.e. don't
 match `return = pure` and `(>>) = (*>)` respectively.

--

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


More information about the ghc-tickets mailing list