[GHC] #13953: forall
GHC
ghc-devs at haskell.org
Mon Jul 10 15:30:41 UTC 2017
#13953: forall
-------------------------------------+-------------------------------------
Reporter: zaoqi | Owner: (none)
Type: bug | Status: closed
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.2
Resolution: invalid | Keywords: forall
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Changes (by RyanGlScott):
* status: new => closed
* resolution: => invalid
Comment:
This is completely expected behavior. To recap, the difference between
your two programs is that the former program has this:
{{{#!hs
u :: forall x xs. Usuccs '[x] xs => x -> U xs
u x = usuccs (UOne x :: U '[x])
}}}
Which typechecks. The latter program:
{{{#!hs
u :: Usuccs '[x] xs => x -> U xs
u x = usuccs (UOne x :: U '[x])
}}}
Which lacks an explicit `forall`, does not typecheck. The reason is
because by default, the type variables in a function's type signature do
not scope over the function body. To enable this behavior, you have to
turn on `ScopedTypeVariables` and quantify the type variables explicitly
with a `forall`. Refer to
[https://downloads.haskell.org/~ghc/8.0.2/docs/html/users_guide/glasgow_exts.html?highlight=scopedtypevariables
#decl-type-sigs this section] of the users' guide for more information.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13953#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list