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 <jh...@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. > > > >
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users