
#12121: FlexibleContexts is under specified -------------------------------------+------------------------------------- Reporter: thomie | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Documentation | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Documentation | Unknown/Multiple bug | Test Case: Blocked By: | Blocking: Related Tickets: #12020 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): That's bad. Would you be willing to fix it if I tell you the specification?
I would like to know which type-class constraints are allowed with FlexibleContexts. Or in other words: what is a definition of a "type-class constraint" with FlexibleContexts?
With `FlexibleContexts` you can put anything `Constraint`-kinded in the context. Except * For class decls, no implicit parameters * For instance decls, no implicit parameters, and must be smaller than the head unless `UndecidableInstances`. For contexts in type signatures Haskell 98 allowed `Functor (m k)`, or even `Functor (m [k])`; anything headed by a tyvar, as in the syntax for `context` above. But the Haskell 98 report is more restrictive for class decls; they are supposed to be `cls tyvar`. Alas, GHC does not do this; it treats them the same as type signatures. Henc, yes, {{{ class Functor (m k) => FiniteMap m k where }}} does not require `FlexibleContexts`. (It does compile with `FlexibleContexts` though, doesn't it?) I don't know whether it is worth tightening this up. Does that help? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12121#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler