RE: Determining if an instance is provided by the environment

2016-05-10 Thread Simon Peyton Jones
|  I think I need to pass in a 'CtGiven' for 'Show a'.  However, I don't
|  know what to pass as the evidence to the 'CtGiven'
|  constraints.  My guess is that it doesn't matter?

Correct, since you just want a yes/no answer.  Just make up some fresh Ids with 
newEvVar.

Simon

|  -Original Message-
|  From: Edward Z. Yang [mailto:ezy...@mit.edu]
|  Sent: 07 May 2016 01:34
|  To: David Fox 
|  Cc: Simon Peyton Jones ; ghc-devs 
|  Subject: Re: Determining if an instance is provided by the environment
|  
|  Well, I have to write the new variant of this function :)
|  
|  Simon, I ran into a minor complication: if my instance is something
|  like:
|  
|  instance Show a => Show [a]
|  
|  I think I need to pass in a 'CtGiven' for 'Show a'.  However, I don't
|  know what to pass as the evidence to the 'CtGiven'
|  constraints.  My guess is that it doesn't matter?
|  
|  Edward
|  
|  Excerpts from David Fox's message of 2016-05-06 17:06:41 -0700:
|  > Is there a way to connect this to template-haskell or haskell-src-
|  exts code?
|  >
|  > On Fri, May 6, 2016 at 4:40 PM, Edward Z. Yang 
|  wrote:
|  >
|  > > Thanks Simon, that has all the ingredients I need.
|  > >
|  > > I wrote some more docs for the function:
|  > > https://phabricator.haskell.org/D2180
|  > >
|  > > Edward
|  > >
|  > > Excerpts from Simon Peyton Jones's message of 2016-05-06 02:05:31 -
|  0700:
|  > > > You probably want a variant on TcDeriv.simplifyDeriv, shorn of
|  its
|  > > complex error reporting.
|  > > >
|  > > > Simon
|  > > >
|  > > > |  -Original Message-----
|  > > > |  From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf
|  > > > | Of  Edward Z. Yang
|  > > > |  Sent: 06 May 2016 00:21
|  > > > |  To: ghc-devs 
|  > > > |  Subject: Determining if an instance is provided by the
|  > > > | environment
|  > > > |
|  > > > |  Hello all,
|  > > > |
|  > > > |  Suppose I have a ClsInst from typechecking the following
|  > > > | instance
|  > > > |  declaration:
|  > > > |
|  > > > |  instance Show [Char] -- i.e. String
|  > > > |
|  > > > |  I'd now like to answer the question: "Is this instance
|  'provided'
|  > > > |  by the instance environment?"  For example, this instance is
|  > > > | provided  given that I have these two instances in the
|  environment:
|  > > > |
|  > > > |  instance Show a => Show [a] -- (1)
|  > > > |  instance Show Char  -- (2)
|  > > > |
|  > > > |  However, if I have just instance (1) in the environment, it's
|  > > > | not  provided (and if you tried to use show "foo", you'd get
|  the
|  > > > | error that  Char is not an instance of Show.)
|  > > > |
|  > > > |  Is there are convenient way to do this from TcM?  With
|  'tcMatchTys'
|  > > > |  and I can easily test if there is some instance in the
|  > > > | environment  which *matches* my instance head (e.g., Show [a]
|  > > > | matches Show [Char])  but this doesn't tell me if all the
|  > > > | resulting constraints are
|  > > solvable.
|  > > > |
|  > > > |  Thanks,
|  > > > |  Edward
|  > > > |  ___
|  > > > |  ghc-devs mailing list
|  > > > |  ghc-devs@haskell.org
|  > > > |
|  > >
|  https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail
|  > > .ha
|  > > > |  skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
|  > > > |  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com
|  > > %7c8c304d9b355244c6
|  > > > |
|  > >
|  ee7208d3753be740%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=iWdrnb
|  > > 6hC
|  > > > |  8pexyVkWNG22G%2fgdO10tCBy8nuCxhnO0M8%3d
|  > > ___
|  > > ghc-devs mailing list
|  > > ghc-devs@haskell.org
|  > >
|  https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail
|  > > .haskell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
|  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c7183659043984718
|  62ec08d3760f3aa2%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=LU%2fYHTo
|  y3Y4lSkMdJZD4PrHyAvuWiMOOg0Xm9RE5OTg%3d
|  > >
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Determining if an instance is provided by the environment

2016-05-06 Thread Edward Z. Yang
Well, I have to write the new variant of this function :)

Simon, I ran into a minor complication: if my instance is
something like:

instance Show a => Show [a]

I think I need to pass in a 'CtGiven' for 'Show a'.  However,
I don't know what to pass as the evidence to the 'CtGiven'
constraints.  My guess is that it doesn't matter?

Edward

Excerpts from David Fox's message of 2016-05-06 17:06:41 -0700:
> Is there a way to connect this to template-haskell or haskell-src-exts code?
> 
> On Fri, May 6, 2016 at 4:40 PM, Edward Z. Yang  wrote:
> 
> > Thanks Simon, that has all the ingredients I need.
> >
> > I wrote some more docs for the function:
> > https://phabricator.haskell.org/D2180
> >
> > Edward
> >
> > Excerpts from Simon Peyton Jones's message of 2016-05-06 02:05:31 -0700:
> > > You probably want a variant on TcDeriv.simplifyDeriv, shorn of its
> > complex error reporting.
> > >
> > > Simon
> > >
> > > |  -Original Message-
> > > |  From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of
> > > |  Edward Z. Yang
> > > |  Sent: 06 May 2016 00:21
> > > |  To: ghc-devs 
> > > |  Subject: Determining if an instance is provided by the environment
> > > |
> > > |  Hello all,
> > > |
> > > |  Suppose I have a ClsInst from typechecking the following instance
> > > |  declaration:
> > > |
> > > |  instance Show [Char] -- i.e. String
> > > |
> > > |  I'd now like to answer the question: "Is this instance 'provided'
> > > |  by the instance environment?"  For example, this instance is provided
> > > |  given that I have these two instances in the environment:
> > > |
> > > |  instance Show a => Show [a] -- (1)
> > > |  instance Show Char  -- (2)
> > > |
> > > |  However, if I have just instance (1) in the environment, it's not
> > > |  provided (and if you tried to use show "foo", you'd get the error that
> > > |  Char is not an instance of Show.)
> > > |
> > > |  Is there are convenient way to do this from TcM?  With 'tcMatchTys'
> > > |  and I can easily test if there is some instance in the environment
> > > |  which *matches* my instance head (e.g., Show [a] matches Show [Char])
> > > |  but this doesn't tell me if all the resulting constraints are
> > solvable.
> > > |
> > > |  Thanks,
> > > |  Edward
> > > |  ___
> > > |  ghc-devs mailing list
> > > |  ghc-devs@haskell.org
> > > |
> > https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha
> > > |  skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
> > > |  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com
> > %7c8c304d9b355244c6
> > > |
> > ee7208d3753be740%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=iWdrnb6hC
> > > |  8pexyVkWNG22G%2fgdO10tCBy8nuCxhnO0M8%3d
> > ___
> > ghc-devs mailing list
> > ghc-devs@haskell.org
> > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
> >
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Re: Determining if an instance is provided by the environment

2016-05-06 Thread David Fox
Is there a way to connect this to template-haskell or haskell-src-exts code?

On Fri, May 6, 2016 at 4:40 PM, Edward Z. Yang  wrote:

> Thanks Simon, that has all the ingredients I need.
>
> I wrote some more docs for the function:
> https://phabricator.haskell.org/D2180
>
> Edward
>
> Excerpts from Simon Peyton Jones's message of 2016-05-06 02:05:31 -0700:
> > You probably want a variant on TcDeriv.simplifyDeriv, shorn of its
> complex error reporting.
> >
> > Simon
> >
> > |  -Original Message-
> > |  From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of
> > |  Edward Z. Yang
> > |  Sent: 06 May 2016 00:21
> > |  To: ghc-devs 
> > |  Subject: Determining if an instance is provided by the environment
> > |
> > |  Hello all,
> > |
> > |  Suppose I have a ClsInst from typechecking the following instance
> > |  declaration:
> > |
> > |  instance Show [Char] -- i.e. String
> > |
> > |  I'd now like to answer the question: "Is this instance 'provided'
> > |  by the instance environment?"  For example, this instance is provided
> > |  given that I have these two instances in the environment:
> > |
> > |  instance Show a => Show [a] -- (1)
> > |  instance Show Char  -- (2)
> > |
> > |  However, if I have just instance (1) in the environment, it's not
> > |  provided (and if you tried to use show "foo", you'd get the error that
> > |  Char is not an instance of Show.)
> > |
> > |  Is there are convenient way to do this from TcM?  With 'tcMatchTys'
> > |  and I can easily test if there is some instance in the environment
> > |  which *matches* my instance head (e.g., Show [a] matches Show [Char])
> > |  but this doesn't tell me if all the resulting constraints are
> solvable.
> > |
> > |  Thanks,
> > |  Edward
> > |  ___
> > |  ghc-devs mailing list
> > |  ghc-devs@haskell.org
> > |
> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha
> > |  skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
> > |  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com
> %7c8c304d9b355244c6
> > |
> ee7208d3753be740%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=iWdrnb6hC
> > |  8pexyVkWNG22G%2fgdO10tCBy8nuCxhnO0M8%3d
> ___
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


RE: Determining if an instance is provided by the environment

2016-05-06 Thread Edward Z. Yang
Thanks Simon, that has all the ingredients I need.

I wrote some more docs for the function: https://phabricator.haskell.org/D2180

Edward

Excerpts from Simon Peyton Jones's message of 2016-05-06 02:05:31 -0700:
> You probably want a variant on TcDeriv.simplifyDeriv, shorn of its complex 
> error reporting.
> 
> Simon
> 
> |  -Original Message-
> |  From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of
> |  Edward Z. Yang
> |  Sent: 06 May 2016 00:21
> |  To: ghc-devs 
> |  Subject: Determining if an instance is provided by the environment
> |  
> |  Hello all,
> |  
> |  Suppose I have a ClsInst from typechecking the following instance
> |  declaration:
> |  
> |  instance Show [Char] -- i.e. String
> |  
> |  I'd now like to answer the question: "Is this instance 'provided'
> |  by the instance environment?"  For example, this instance is provided
> |  given that I have these two instances in the environment:
> |  
> |  instance Show a => Show [a] -- (1)
> |  instance Show Char  -- (2)
> |  
> |  However, if I have just instance (1) in the environment, it's not
> |  provided (and if you tried to use show "foo", you'd get the error that
> |  Char is not an instance of Show.)
> |  
> |  Is there are convenient way to do this from TcM?  With 'tcMatchTys'
> |  and I can easily test if there is some instance in the environment
> |  which *matches* my instance head (e.g., Show [a] matches Show [Char])
> |  but this doesn't tell me if all the resulting constraints are solvable.
> |  
> |  Thanks,
> |  Edward
> |  ___
> |  ghc-devs mailing list
> |  ghc-devs@haskell.org
> |  https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha
> |  skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
> |  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c8c304d9b355244c6
> |  ee7208d3753be740%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=iWdrnb6hC
> |  8pexyVkWNG22G%2fgdO10tCBy8nuCxhnO0M8%3d
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


RE: Determining if an instance is provided by the environment

2016-05-06 Thread Simon Peyton Jones
You probably want a variant on TcDeriv.simplifyDeriv, shorn of its complex 
error reporting.

Simon

|  -Original Message-
|  From: ghc-devs [mailto:ghc-devs-boun...@haskell.org] On Behalf Of
|  Edward Z. Yang
|  Sent: 06 May 2016 00:21
|  To: ghc-devs 
|  Subject: Determining if an instance is provided by the environment
|  
|  Hello all,
|  
|  Suppose I have a ClsInst from typechecking the following instance
|  declaration:
|  
|  instance Show [Char] -- i.e. String
|  
|  I'd now like to answer the question: "Is this instance 'provided'
|  by the instance environment?"  For example, this instance is provided
|  given that I have these two instances in the environment:
|  
|  instance Show a => Show [a] -- (1)
|  instance Show Char  -- (2)
|  
|  However, if I have just instance (1) in the environment, it's not
|  provided (and if you tried to use show "foo", you'd get the error that
|  Char is not an instance of Show.)
|  
|  Is there are convenient way to do this from TcM?  With 'tcMatchTys'
|  and I can easily test if there is some instance in the environment
|  which *matches* my instance head (e.g., Show [a] matches Show [Char])
|  but this doesn't tell me if all the resulting constraints are solvable.
|  
|  Thanks,
|  Edward
|  ___
|  ghc-devs mailing list
|  ghc-devs@haskell.org
|  https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.ha
|  skell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
|  devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c8c304d9b355244c6
|  ee7208d3753be740%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=iWdrnb6hC
|  8pexyVkWNG22G%2fgdO10tCBy8nuCxhnO0M8%3d
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


Determining if an instance is provided by the environment

2016-05-05 Thread Edward Z. Yang
Hello all,

Suppose I have a ClsInst from typechecking the following instance
declaration:

instance Show [Char] -- i.e. String

I'd now like to answer the question: "Is this instance 'provided'
by the instance environment?"  For example, this instance is provided
given that I have these two instances in the environment:

instance Show a => Show [a] -- (1)
instance Show Char  -- (2)

However, if I have just instance (1) in the environment, it's not
provided (and if you tried to use show "foo", you'd get the error
that Char is not an instance of Show.)

Is there are convenient way to do this from TcM?  With 'tcMatchTys'
and I can easily test if there is some instance in the environment
which *matches* my instance head (e.g., Show [a] matches Show [Char])
but this doesn't tell me if all the resulting constraints are
solvable.

Thanks,
Edward
___
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs