summaryrefslogtreecommitdiff
path: root/ghc/compiler/reader/RdrHsSyn.lhs
diff options
context:
space:
mode:
authorkeithw <unknown>1999-05-11 16:38:04 +0000
committerkeithw <unknown>1999-05-11 16:38:04 +0000
commitd133b73a4d4717892ced072d05e039a54ede0ceb (patch)
tree5f6816748e45949f918f1be0a02dce76ee5ca18f /ghc/compiler/reader/RdrHsSyn.lhs
parentf83ad713ad73e583fd138bb17e7341041b36a416 (diff)
downloadhaskell-d133b73a4d4717892ced072d05e039a54ede0ceb.tar.gz
[project @ 1999-05-11 16:37:29 by keithw]
(this is number 4 of 9 commits to be applied together) The major purpose of this commit is to introduce usage information and usage analysis into the compiler, per the paper _Once Upon a Polymorphic Type_ (Keith Wansbrough and Simon Peyton Jones, POPL'99, and Glasgow TR-1998-19). Usage information has been added to types, in the form of a new kind of NoteTy: (UsgNote UsageAnn(UsOnce|UsMany|UsVar UVar)). Usages print as __o (once), __m (many, usually omitted), or (not in interface files) __uvxxxx. Usage annotations should only appear at certain places in a type (see the paper). The `default' annotation is __m, and so an omitted annotation implies __m. Utility functions for handling usage annotations are provided in Type. If the compiler is built with -DUSMANY (a flag intended for use in debugging by KSW only), __m are *required* and may not be omitted. The major constraint is that type arguments (eg to mkAppTy) must be unannotated on top. To maintain this invariant, many functions required the insertion of Type.unUsgTy (removing annot from top of a type) or UsageSPUtils.unannotTy (removing all annotations from a type). A function returning usage-annotated types for primops has been added to PrimOp. A new kind of Note, (TermUsg UsageAnn), has been added to annotate Terms. This note is *not* printed in interface files, and for the present does not escape the internals of the usage inference engine.
Diffstat (limited to 'ghc/compiler/reader/RdrHsSyn.lhs')
-rw-r--r--ghc/compiler/reader/RdrHsSyn.lhs1
1 files changed, 1 insertions, 0 deletions
diff --git a/ghc/compiler/reader/RdrHsSyn.lhs b/ghc/compiler/reader/RdrHsSyn.lhs
index 8091b74a0f..4964c420d3 100644
--- a/ghc/compiler/reader/RdrHsSyn.lhs
+++ b/ghc/compiler/reader/RdrHsSyn.lhs
@@ -120,6 +120,7 @@ extract_ty (MonoListTy ty) acc = extract_ty ty acc
extract_ty (MonoTupleTy tys _) acc = foldr extract_ty acc tys
extract_ty (MonoFunTy ty1 ty2) acc = extract_ty ty1 (extract_ty ty2 acc)
extract_ty (MonoDictTy cls tys) acc = foldr extract_ty acc tys
+extract_ty (MonoUsgTy usg ty) acc = extract_ty ty acc
extract_ty (MonoTyVar tv) acc = insertTV tv acc
extract_ty (HsForAllTy (Just tvs) ctxt ty)
acc = acc ++