diff options
author | RyanGlScott <ryan.gl.scott@gmail.com> | 2015-09-17 23:15:26 +0200 |
---|---|---|
committer | Thomas Miedema <thomasmiedema@gmail.com> | 2015-09-17 23:15:42 +0200 |
commit | 77662e13a510ddbc89fea00785e99f5f4d3a2b25 (patch) | |
tree | 177586bff2fb04eca1ea422dd146656e3d3d8a92 /libraries/template-haskell | |
parent | 8ecf6d8f7dfee9e5b1844cd196f83f00f3b6b879 (diff) | |
download | haskell-77662e13a510ddbc89fea00785e99f5f4d3a2b25.tar.gz |
Add namePackage function to template-haskell
Currently there exists a nameBase function (for retrieving a Name's OccName)
and a nameModule function (for retrieving a Name's ModName), but there is no
counterpart for PkgNames.
This would be useful for implementing Template Haskell features which need
to have easy access to a Name's package (e.g., automatically derived Lift
instances).
Reviewed By: goldfire, austin, thomie
Differential Revision: https://phabricator.haskell.org/D1237
Diffstat (limited to 'libraries/template-haskell')
-rw-r--r-- | libraries/template-haskell/Language/Haskell/TH.hs | 1 | ||||
-rw-r--r-- | libraries/template-haskell/Language/Haskell/TH/Syntax.hs | 36 | ||||
-rw-r--r-- | libraries/template-haskell/changelog.md | 2 |
3 files changed, 37 insertions, 2 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH.hs b/libraries/template-haskell/Language/Haskell/TH.hs index 4db92b7582..bce8bf5ddb 100644 --- a/libraries/template-haskell/Language/Haskell/TH.hs +++ b/libraries/template-haskell/Language/Haskell/TH.hs @@ -50,6 +50,7 @@ module Language.Haskell.TH( -- ** Deconstructing names nameBase, -- :: Name -> String nameModule, -- :: Name -> Maybe String + namePackage, -- :: Name -> Maybe String -- ** Built-in names tupleTypeName, tupleDataName, -- Int -> Name unboxedTupleTypeName, unboxedTupleDataName, -- :: Int -> Name diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index 82e22dd212..48f3f96cbf 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -842,16 +842,48 @@ data NameSpace = VarName -- ^ Variables type Uniq = Int --- | The name without its module prefix +-- | The name without its module prefix. +-- +-- ==== __Examples__ +-- +-- >>> nameBase ''Data.Either.Either +-- "Either" +-- >>> nameBase (mkName "foo") +-- "foo" +-- >>> nameBase (mkName "Module.foo") +-- "foo" nameBase :: Name -> String nameBase (Name occ _) = occString occ --- | Module prefix of a name, if it exists +-- | Module prefix of a name, if it exists. +-- +-- ==== __Examples__ +-- +-- >>> nameModule ''Data.Either.Either" +-- Just "Data.Either" +-- >>> nameModule (mkName "foo") +-- Nothing +-- >>> nameModule (mkName "Module.foo") +-- Just "Module" nameModule :: Name -> Maybe String nameModule (Name _ (NameQ m)) = Just (modString m) nameModule (Name _ (NameG _ _ m)) = Just (modString m) nameModule _ = Nothing +-- | A name's package, if it exists. +-- +-- ==== __Examples__ +-- +-- >>> namePackage ''Data.Either.Either" +-- Just "base" +-- >>> namePackage (mkName "foo") +-- Nothing +-- >>> namePackage (mkName "Module.foo") +-- Nothing +namePackage :: Name -> Maybe String +namePackage (Name _ (NameG _ p _)) = Just (pkgString p) +namePackage _ = Nothing + {- | Generate a capturable name. Occurrences of such names will be resolved according to the Haskell scoping rules at the occurrence diff --git a/libraries/template-haskell/changelog.md b/libraries/template-haskell/changelog.md index 3620d22e2f..fb701abf47 100644 --- a/libraries/template-haskell/changelog.md +++ b/libraries/template-haskell/changelog.md @@ -10,6 +10,8 @@ according to the fixities of the operators. The `ParensT` constructor can be used to explicitly group expressions. + * Add `namePackage` + * TODO: document API changes and important bugfixes |