Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Shayne Fletcher
Glasgow Haskell Compiler
Commits
c97ea0ce
Commit
c97ea0ce
authored
Dec 23, 2004
by
simonpj
Browse files
[project @ 2004-12-23 11:50:55 by simonpj]
Enable scoped type variables only where there is an explicit forall
parent
e12e0bb7
Changes
2
Show whitespace changes
Inline
Side-by-side
ghc/compiler/parser/Lexer.x
View file @
c97ea0ce
...
...
@@ -506,7 +506,7 @@ reservedWordsFM = listToUFM $
( "where", ITwhere, 0 ),
( "_scc_", ITscc, 0 ), -- ToDo: remove
( "forall", ITforall, bit
glaExts
Bit),
( "forall", ITforall, bit
tv
Bit),
( "mdo", ITmdo, bit glaExtsBit),
( "foreign", ITforeign, bit ffiBit),
...
...
@@ -542,7 +542,7 @@ reservedSymsFM = listToUFM $
,("!", ITbang, 0)
,("*", ITstar, bit glaExtsBit) -- For data T (a::*) = MkT
,(".", ITdot, bit
glaExts
Bit) -- For 'forall a . t'
,(".", ITdot, bit
tv
Bit) -- For 'forall a . t'
,("-<", ITlarrowtail, bit arrowsBit)
,(">-", ITrarrowtail, bit arrowsBit)
...
...
@@ -1160,6 +1160,7 @@ parrBit = 2
arrowsBit = 4
thBit = 5
ipBit = 6
tvBit = 7 -- Scoped type variables enables 'forall' keyword
glaExtsEnabled, ffiEnabled, parrEnabled :: Int -> Bool
glaExtsEnabled flags = testBit flags glaExtsBit
...
...
@@ -1168,6 +1169,7 @@ parrEnabled flags = testBit flags parrBit
arrowsEnabled flags = testBit flags arrowsBit
thEnabled flags = testBit flags thBit
ipEnabled flags = testBit flags ipBit
tvEnabled flags = testBit flags tvBit
-- create a parse state
--
...
...
@@ -1190,6 +1192,7 @@ mkPState buf loc flags =
.|. arrowsBit `setBitIf` dopt Opt_Arrows flags
.|. thBit `setBitIf` dopt Opt_TH flags
.|. ipBit `setBitIf` dopt Opt_ImplicitParams flags
.|. tvBit `setBitIf` dopt Opt_ScopedTypeVariables flags
--
setBitIf :: Int -> Bool -> Int
b `setBitIf` cond | cond = bit b
...
...
ghc/compiler/rename/RnEnv.lhs
View file @
c97ea0ce
...
...
@@ -644,7 +644,9 @@ bindSigTyVarsFV sigs thing_inside
bindLocalNamesFV tvs thing_inside }
where
tvs = [ hsLTyVarName ltv
| L _ (Sig _ (L _ (HsForAllTy _ ltvs _ _))) <- sigs, ltv <- ltvs ]
| L _ (Sig _ (L _ (HsForAllTy Explicit ltvs _ _))) <- sigs, ltv <- ltvs ]
-- Note the pattern-match on "Explicit"; we only bind
-- type variables from signatures with an explicit top-level for-all
extendTyVarEnvFVRn :: [Name] -> RnM (a, FreeVars) -> RnM (a, FreeVars)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment