(Failing to) look up names generated by Template Haskell

Ranjit Jhala jhala at cs.ucsd.edu
Fri Jan 26 01:46:45 UTC 2018


On further inspection, the problem is not with TH but with family instances.

That is, suppose Library.hs is has the constructors defined in the simple
top-level style:

```
data EntityField typ where
  BlobXVal :: EntityField Int
  BlobYVal :: EntityField Int
```

Then when analyzing Client.hs, the lookup function `hscTcRcLookupName`
WORKS.

However, if instead, Library.hs defines the constructors within an instance:

```
instance PersistEntity Blob where
  data EntityField Blob typ where
    BlobXVal :: EntityField Blob Int
    BlobYVal :: EntityField Blob Int
```

then, when analyzing Client.hs, the `hscTcRcLookupName` function FAILS.

Clearly there is some difference in how `hscTcRcLookupName` works in these
two cases.

Does someone know what it is?

Thanks in advance!

- Ranjit.


On Thu, Jan 25, 2018 at 4:24 PM, Ranjit Jhala <jhala at cs.ucsd.edu> wrote:

> Hi all,
>
> I am stuck on the following problem.
>
> Suppose you have two module
>
>    Lib
>
>    Client
>
> where Client "imports" Lib. Now, while analyzing the Core of `Client`
> often I need to resolve the name of a `TyThing` defined inside `Lib`.
> Normally, this is easy enough: I simply use
>
>    hscTcRcLookupName :: HscEnv
> <https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/ghc-8.2.1/HscTypes.html#t:HscEnv>
> -> Name
> <https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/ghc-8.2.1/Name.html#t:Name>
> -> IO
> <https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/base-4.10.0.0/System-IO.html#t:IO>
> (Maybe
> <https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/base-4.10.0.0/Data-Maybe.html#t:Maybe>
> TyThing
> <https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/ghc-8.2.1/Type.html#t:TyThing>
> )
>
> defined inside HscMain.
>
> **THE PROBLEM** However, I find that when the
> relevant `Name` corresponds to something generated
> by TemplateHaskell (inside `Lib`) then the above `hscTcRcLookupName` fails
> to return any result!
> Even more oddly, suppose the name was
>
>    BlogPostId
>
> If there are TWO `TyThing`s with that name, e.g.
> a type synonym defined
>
>    type BlogPostId = ...
>
> and also a data constructor for a data family
> instance, then `hscTcRcLookupName` only returns
> the type synonym, but refuses to return the data constructor.
>
> Does anyone know what may be going on?
>
> Thanks!
>
> - Ranjit Jhala.
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/glasgow-haskell-users/attachments/20180125/27b82b85/attachment.html>


More information about the Glasgow-haskell-users mailing list