
#7880: Require "forall" in definitions of polymorphic types ---------------------------------+------------------------------------------ Reporter: monoidal | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Keywords: | Os: Unknown/Multiple Architecture: Unknown/Multiple | Failure: GHC accepts invalid program Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | ---------------------------------+------------------------------------------ Comment(by monoidal): Both in current GHC and in this proposal `f` means {{{ f :: forall a. (Num a => a -> a) -> Int }}} This is rather intuitive; if we write {{{ g :: (Num a => a -> a) -> a }}} then it's clear that "forall a" should apply outside the parentheses. It would be a bit strange if changing "Int" to "a" changed the place where we the implicit quantifier appears. So, as far as I know, implicit quantification already occurs only at the top level of type expressions, and this change would only reject programs that use => for implicit quantification in type definitions (which is easy to fix by adding "forall"). -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7880#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler