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>