Resolved+new Q: TypeLits question, how to build a Type Application with Symbol index

Gabor Greif ggreif at gmail.com
Mon Jun 30 11:27:26 UTC 2014


Thanks, Simon!

Yes I have a branch, and it works! A bunch of things is still missing
(notably record selectors), but I have a proof-of-concept with a gdiff
library hooked up to GHC.Generics, and by appealing to type-level
reasoning I can obtain a difference tree from True to False (which
looks good) by using the reflection (i.e. class Generic) only, no need
for TH or hand-coding. Comparing bigger trees (and then 'patch'ing
them) appears to be SMOP from here.

My current obstacle is that for each

instance Datatype (Dat "MyModule" "Foo") ...

I get an 'orphan instance' warning. I believe that these are harmless,
so is there a way to suppress them? Since I never insert tyvars in the
instance head, there should never be any overlap too.

Cheers,

    Gabor

On 6/30/14, Simon Peyton Jones <simonpj at microsoft.com> wrote:
> You'll need to give a lot more info than this before I can help Gabor.
> Currently I have only the vaguest idea about what you are trying to
> accomplish.  Is there a wiki page that describes the design (user's eye
> view) in detail?
>
> I see you have a branch.  If you are stuck, and give me repro instructions,
> I can attempt to help.
>
> Simon
>
> | -----Original Message-----
> | From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Gabor
> | Greif
> | Sent: 27 June 2014 17:51
> | To: ghc-devs
> | Subject: Resolved+new Q: TypeLits question, how to build a Type
> | Application with Symbol index
> |
> | I succeeded to solve all of them :-)
> |
> | But now I am blocked on on a panic
> |
> | "not in scope during type checking, but it passed the renamer".
> |
> | I suspect that while "deriving Generic" some instances are defined in
> | some empty TcEnv, which does not contain my definition in context.
> |
> | Is there a way to inject some type constructor into the TcEnv?
> |
> | Thanks,
> |
> |     Gabor
> |
> | On 6/27/14, Gabor Greif <ggreif at gmail.com> wrote:
> | > Hello devs,
> | >
> | > I have
> | >
> | > {{{
> | > data D (n :: Symbol)
> | > }}}
> | >
> | > in my module, and I want to obtain a type
> | >
> | > {{{
> | > D "YAY!"
> | > }}}
> | >
> | > programmatically. Where can I find code that performs this (or
> | > something similar)?
> | >
> | > 1) I have to look up |D| in the current TyEnv (what if it is in a
> | > specific module?),
> | > 2) I have to build the type index (of kind Symbol), this involves
> | > FastString, looks non-trivial,
> | > 3) Apply 1) on 2), this is easy.
> | >
> | > Any hints welcome!
> | >
> | > Thanks and cheers,
> | >
> | >     Gabor
> | >
> | >
> | > PS: some morsels I have so far:
> | >
> | > for 1)
> | > compiler/prelude/PrelNames.lhs:gHC_GENERICS    = mkBaseModule (fsLit
> | > "GHC.Generics")
> | >
> | _______________________________________________
> | ghc-devs mailing list
> | ghc-devs at haskell.org
> | http://www.haskell.org/mailman/listinfo/ghc-devs
>


More information about the ghc-devs mailing list