Hello again. I’m trying to make a function in a type-checking plugin that takes 
TyCoRep#Type and makes its fingerprint that matches `typeRepFingerprint 
(typeRep :: TypeRep (type))`. As I understood the type’s fingerprint is made in 
DsBinds#dsEvTypeable by generating a code that makes the fingerprint, so I 
can’t reuse functions which are already written.

My goal is to write a function that makes fingerprints of types which are not 
type variables such as Int, Maybe Int, ‘[Int] etc. So I tried to follow 
`mkTrCon` and `mkTrApp` style, and I think I managed to process simple types 
like Int, Maybe Int — right now I’m processing TyConApp only. But when I tried 
to make promoted data fingerprint like ‘[Int] I faced some problems. 

For example, for making `’Just Int` fingerprint first I have to compute 'Just 
fingerprint by computing  'Just tyCon’s and * fingerprints, then combining them 
into one fingerprint. Then I have to apply ‘Just to Int. But when I try to do 
something like that while type checking I cannot separate two cases that match 
runtime’s`TypeRep (a b)` (a representation for a type application) and `TypeRep 
a` (a representation for a type constructor) because they are represented by 
TyConApp. Also I can’t separate tyCon kinds and types for type application 
because they are merged into one list which is stored in `TyConApp _ 
[KindOrType]`. [KindOrType] list for `’Just Int` is `[*, Int]`. Is there any 
way to separate this two cases and kinds/types?

Probably there is an easier way to make this function? If not, does type 
fingerprint function seem possible to make?

Any help would be appreciated,

Alice.
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to