summaryrefslogtreecommitdiff
path: root/compiler/parser
diff options
context:
space:
mode:
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>2006-09-18 23:51:47 +0000
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>2006-09-18 23:51:47 +0000
commit0cfba505ee10cf12737077449a6cb4d98e56263c (patch)
tree62fb6e87bb5b2f1017b301594ca3f87b63a74616 /compiler/parser
parenta357abfc2ed4f0ac6eae1cf542fe4fb3bebe686e (diff)
downloadhaskell-0cfba505ee10cf12737077449a6cb4d98e56263c.tar.gz
Type tags in import/export lists
Tue Sep 12 16:57:32 EDT 2006 Manuel M T Chakravarty <chak@cse.unsw.edu.au> * Type tags in import/export lists - To write something like GMapKey(type GMap, empty, lookup, insert) - Requires -findexed-types
Diffstat (limited to 'compiler/parser')
-rw-r--r--compiler/parser/Parser.y.pp16
1 files changed, 12 insertions, 4 deletions
diff --git a/compiler/parser/Parser.y.pp b/compiler/parser/Parser.y.pp
index 0a8b0b6eec..8d55414c6e 100644
--- a/compiler/parser/Parser.y.pp
+++ b/compiler/parser/Parser.y.pp
@@ -376,12 +376,20 @@ export :: { LIE RdrName }
| 'module' modid { LL (IEModuleContents (unLoc $2)) }
qcnames :: { [RdrName] }
- : qcnames ',' qcname { unLoc $3 : $1 }
- | qcname { [unLoc $1] }
+ : qcnames ',' qcname_ext { unLoc $3 : $1 }
+ | qcname_ext { [unLoc $1] }
+qcname_ext :: { Located RdrName } -- Variable or data constructor
+ -- or tagged type constructor
+ : qcname { $1 }
+ | 'type' qcon { sL (comb2 $1 $2)
+ (setRdrNameSpace (unLoc $2)
+ tcClsName) }
+
+-- Cannot pull into qcname_ext, as qcname is also used in expression.
qcname :: { Located RdrName } -- Variable or data constructor
- : qvar { $1 }
- | qcon { $1 }
+ : qvar { $1 }
+ | qcon { $1 }
-----------------------------------------------------------------------------
-- Import Declarations