On Tue, Jul 24, 2018 at 5:52 AM,Ryan Reich wrote:
> This seems like the canonical illustration of the dangers of UndecidableInstances.
No I don't buy that explanation. The worst UndecidableInstances can do is send the type checker into a loop.
For mutually recursive functions to cause looping, you don't need classes at all:
foo :: Bool -> ()
foo x = bar x
bar :: () -> Bool
bar x = foo x
No typechecking will detect that loop. This `HasBool` example is just an obfuscated way to write that loop(?)
There's some odd thigs in the OP:
Why use OVERLAPPABLE? Neither of those instances need it.
Or are there more instances in the imports? (There must at least be the definition for class `Has`.) If so, what are their constraints? And what are their implementations? Perhaps that's causing the looping?
Will `runRIO` or `view` use one of those other instances?
What does this mean: "I can compile an equivalent program; it loops on execution."?
There doesn't need to be a `Bool` in the "environment": the `HasBool a` instance introduces `Bool` in its constraint.
I suggest boiling this down to a stand-alone program not needing imports. Then tell the whole story.
AntC
On Mon, Jul 23, 2018 at 2:10 PM, Theodore Lief Gannon <
tanuki at gmail.com>
wrote:
> λ. :set -XFlexibleContexts -XFlexibleInstances -XMultiParamTypeClasses
> -XUndecidableInstances
> λ. import RIO
> λ. import Data.Has
> λ. class HasBool a where boolL :: Lens' a Bool
> λ. instance {-#OVERLAPPABLE#-} HasBool a => Has Bool a where hasLens =
> boolL
> λ. instance {-#OVERLAPPABLE#-} Has Bool a => HasBool a where boolL =
> hasLens
> λ. runRIO () $ view boolL
> ^CInterrupted.
>
> The RIO environment () doesn't contain a Bool. I can see how the
> typechecker might get lost in this, but I can compile an equivalent
> program; it loops on execution.
>
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180723/a47a91b9/attachment.html>