[GHC] #10068: Make the runtime reflection API for names, modules, locations more systematic
GHC
ghc-devs at haskell.org
Mon Jul 13 08:54:26 UTC 2015
#10068: Make the runtime reflection API for names, modules, locations more
systematic
-------------------------------------+-------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: high | Milestone: 7.12.1
Component: Compiler | Version: 7.8.4
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Old description:
> Currently in `base` we have
>
> * `GHC.SrcLoc`: the data type `SrcLoc` contains `srcLocPackage` and
> `srcLocModule`
>
> * `Data.Typeable.Internals`: the data type `TyCon` contains
> `tyConPackage`, `tyConModule` and `tyConName`.
>
> * `GHC.Generics`: the data type `Datatype` contains `dataTypePackage`,
> `dataTypeModule` and `dataTypeName`
>
> * `Data.Data`: the data type `DataType` (yes the capitalisation
> differs!) contains a field `tycon :: String`, and there are functions
> `tyconModule :: String -> String`, and `tyconUQname :: String -> String`,
> for parsing that string and extracting the module name and tycon name.
>
> * `GHC.StaticPtr`: the data type `StaticPtrInfo` contains
> `spInfoPackageKey`, `spInfoModuleName`, `spInfoName` (all `String`s).
> Oh, and `spInfoSrcLoc :: (Int,Int)` too!
>
> This is madness! Five different representations for the same information
> in one package!
>
> Let's fix this by defining some shared data types, for
>
> * `Module` = `ModuleName` + package
> * `Entity` = `Module` + unqualified name
>
> There would be a tiresome changeover period; but `Typeable` and
> `StaticPtr` are in flux anyway.
>
> Would anyone be willing to lead on this?
New description:
Currently in `base` we have
* `GHC.SrcLoc`: the data type `SrcLoc` contains `srcLocPackage` and
`srcLocModule`
* `Data.Typeable.Internals`: the data type `TyCon` contains
`tyConPackage`, `tyConModule` and `tyConName`.
* `GHC.Generics`: the data type `Datatype` contains `dataTypePackage`,
`dataTypeModule` and `dataTypeName`
* `Data.Data`: the data type `DataType` (yes the capitalisation differs!)
contains a field `tycon :: String`, and there are functions `tyconModule
:: String -> String`, and `tyconUQname :: String -> String`, for parsing
that string and extracting the module name and tycon name.
* `GHC.StaticPtr`: the data type `StaticPtrInfo` contains
`spInfoPackageKey`, `spInfoModuleName`, `spInfoName` (all `String`s). Oh,
and `spInfoSrcLoc :: (Int,Int)` too!
* `GHC.Stack.ccSrcSpan :: Ptr CostCentre -> IO CString` stores a source
location in a C structure, and returns it as a `CString`.
This is madness! Six different representations for the same information
in one package!
Let's fix this by defining some shared data types, for
* `Module` = `ModuleName` + package
* `Entity` = `Module` + unqualified name
There would be a tiresome changeover period; but `Typeable` and
`StaticPtr` are in flux anyway.
Would anyone be willing to lead on this?
--
Comment (by simonpj):
Well spotted. Do you feel like helping out with this?!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10068#comment:11>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list