
#7633: Checkable "minimal complete definitions" -------------------------------------+------------------------------------ Reporter: shachaf | Owner: Type: feature request | Status: patch Priority: normal | Milestone: 7.8.1 Component: Compiler | Version: 7.6.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: #6028 -------------------------------------+------------------------------------ Changes (by twanvl): * status: new => patch Comment: I found some time to polish the patch. I tried to address the points mentioned on this ticket. * The pragma is now parsed as a Sig instead of a separate declaration. * The minimal complete definitions are now specified with a boolean formula. For example {{{ {-# MINIMAL return, ((>>=) | (join,fmap)) #-} }}} * A warning is generated if the MINIMAL pragma does not cover all methods without defaults. * I have added documentation to the user_guide. * I have added some tests to the testsuite. The things I did not do: * dmwit sugested that the check should also extend to parent classes. I did not implement this, because it would complicate the patch significantly. Right now names are resolved locally to a class, and the information about whether a method is implemented is also kept per instance. * simonpj sugested that the check be moved from the typechecker to the renamer. However, to check that an instance satisfies the minimal complete definition, you need the `Class`. But that is only known after (or during) typechecking. The typechecker also does things like collecting default implementations. All of that is needed before the minimal complete check can be performed. In the end the in `TcInstDcl` check is only a couple of lines, I doubt it can be done much simpler. Some other remarks: * I put the function `defaultClassMinimalDef`, which constructs a default minimal complete definition, in `BuildTyCl`. It would be more at home in `TcClassDcl`. But there is also a function in vectorize that constructs Classes and so it also needs defaultClassMinimalDef. * I had to change the interface format. So a full rebuild is needed. * It would be nice to include the minimal complete definitions in Haddock documentation. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7633#comment:26 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler