TcPluginContradiction understanding problem and converting Type to Typeable

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

TcPluginContradiction understanding problem and converting Type to Typeable

alice
Hello, I'm writing a type-checker plugin for ghc, and I'm stuck on two problems. I can't understand how does TcPluginContradiction work. My problem is, when I do TcPluginContradiction listOfFailedConstraints and run the plugin on something which should fail, compiler output contains strange errors for places which doesn't produce any errors when the rest type checks. And it can be seen from debug that listOfFailedConstraints does contain only the constraints that are expected to fail. 
For example my plugin should type check Set '[Int]) ~ Set '[Int, Int], and should not Set '[Int, Bool, Int] ~ Set '[Int]. And everything is great when I run it on the first case, but if I run it on the both first and second, the compiler output will contain «Couldn't match type ‘Set '[Int]’ with ‘Set '[Int, Int]’» and «Couldn't match type ‘Set '[Int, Bool, Int]’ with ‘Set '[Int]’».
My ghc version is 8.2.2.

Thank you for your time,
Alice.

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: TcPluginContradiction understanding problem and converting Type to Typeable

Adam Gundry-2
Hi Alice,

TcPluginContradiction is intended to be used when the set of constraints
provided to the plugin is inherently impossible to solve (and that GHC
or other plugins should give up trying). Unfortunately it doesn't
provide a way to say "I solved some constraints, but not others".

Instead, I think you can simply return TcPluginOk with the constraint
you have solved, and no new constraints. The unsolved constraint will
still be reported as an error.

No doubt this interface could be improved and better documented!

Hope this helps,

Adam


On 10/04/18 21:04, alice wrote:

> Hello, I'm writing a type-checker plugin for ghc, and I'm stuck on two
> problems. I can't understand how does TcPluginContradiction work. My
> problem is, when I do TcPluginContradiction listOfFailedConstraints and
> run the plugin on something which should fail, compiler output contains
> strange errors for places which doesn't produce any errors when the rest
> type checks. And it can be seen from debug that listOfFailedConstraints
> does contain only the constraints that are expected to fail. 
> For example my plugin should type check Set '[Int]) ~ Set '[Int, Int],
> and should not Set '[Int, Bool, Int] ~ Set '[Int]. And everything is
> great when I run it on the first case, but if I run it on the both first
> and second, the compiler output will contain «Couldn't match type ‘Set
> '[Int]’ with ‘Set '[Int, Int]’» and «Couldn't match type ‘Set '[Int,
> Bool, Int]’ with ‘Set '[Int]’».
> My ghc version is 8.2.2.
> Also how does ghc converts Type from
> https://hackage.haskell.org/package/ghc-8.2.1/docs/src/TyCoRep.html#Type
> to Typeable/TypeRep from
> https://hackage.haskell.org/package/base-4.10.1.0/docs/src/Data.Typeable.Internal.html#TypeRep?
> I’d like to use a function (if there exists one) that takes Type and
> returns its fingerprint
> (https://hackage.haskell.org/package/base-4.10.1.0/docs/src/GHC.Fingerprint.Type.html#Fingerprint). 
>
> Thank you for your time,
> Alice.
>
>
> _______________________________________________
> ghc-devs mailing list
> [hidden email]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>


--
Adam Gundry, Haskell Consultant
Well-Typed LLP, http://www.well-typed.com/
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs