[Haskell-cafe] No instance - but it could just put one in the context
Tom Ellis
tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Fri Feb 23 16:12:31 UTC 2018
Oh, it does already seem to mention this, which is great!
On Thu, Feb 22, 2018 at 11:25:29PM +0000, Tom Ellis wrote:
> My next question is, could GHC suggest NoMonomorphismRestriction when it
> comes across such code?
>
> (In the same way it suggests FlexibleContexts, etc.)
>
> On Thu, Feb 22, 2018 at 11:16:35PM +0000, Tom Ellis wrote:
> > That's amazing! How many times have I been tripped up by that ... Thanks a
> > lot, Adam.
> >
> > On Thu, Feb 22, 2018 at 11:11:18PM +0000, Adam Bergmark wrote:
> > > This works if you enable NoMonomorphismRestriction.
> > >
> > > On Thu, 22 Feb 2018 at 23:41 Tom Ellis <
> > > tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> wrote:
> > >
> > > > I'm puzzled by GHC's behaviour in the following program.
> > > >
> > > > 'baz = bar . foo' does not work because there is "no instance for ...".
> > > > But
> > > > if I manually assume those instances in the context all is fine. Why can
> > > > GHC not infer that context? Is there any extension or clever trick I can
> > > > use to get this to infer like I want?
> > > >
> > > > Thanks,
> > > >
> > > > Tom
> > > >
> > > >
> > > >
> > > > {-# LANGUAGE MultiParamTypeClasses #-}
> > > > {-# LANGUAGE TypeFamilies #-}
> > > > {-# LANGUAGE FlexibleContexts #-}
> > > >
> > > > class Foo a b
> > > > class Bar a b
> > > > type family Quux a
> > > >
> > > > foo :: ( Foo a b
> > > > , b ~ Quux a )
> > > > => a
> > > > -> Quux a
> > > > foo = undefined
> > > >
> > > > bar :: Bar a b
> > > > => a
> > > > -> b
> > > > bar = undefined
> > > >
> > > > -- Doesn't work
> > > > -- No instance for (Bar (Quux a0) c0) arising from a use of ‘bar’
> > > > -- No instance for (Foo a0 (Quux a0)) arising from a use of ‘foo’
> > > > --baz = bar . foo
> > > >
> > > > baz' :: ( Foo a (Quux a)
> > > > , Bar (Quux a) b )
> > > > => a
> > > > -> b
> > > > baz' = bar . foo
> > _______________________________________________
> > 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.
> _______________________________________________
> 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.
More information about the Haskell-Cafe
mailing list