Takayuki Muranushi | 5 Dec 06:12 2012
Picon

Understanding GHC's instance inference.

Dear everyone,

I have a code
https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11-1.hs

that produces a type-error when I remove a type signature.
https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11.hs

The strange point is the following error message from ghc 7.6.1
(abbreviated; the full error text is included as the comment of the
code):

    No instance for (PType
                       (Cons
                          V.Vector
                          (V.Vector Double)
                          (Cons
                             V.Vector
                             (V.Vector Char)
                             (Cons V.Vector (V.Vector Int) (Nil V.Vector))))
                       ((Double -> Char -> Int -> String) -> a0))
      arising from a use of `forZN'
    The type variable `a0' is ambiguous
    Possible fix: add a type signature that fixes these type variable(s)
    Note: there is a potential instance available:
      instance [overlap ok] (Zip v, Reduce v f0 vaS r (Nil v)) =>
                            PType (Cons v (v i) vaS) ((i -> f0) -> v r)

ghc presents only one potential instance, and it seems to me that by setting
v = V.Vector
(Continue reading)

adam vogt | 6 Dec 01:00 2012
Picon

Re: Understanding GHC's instance inference.

On Wed, Dec 5, 2012 at 12:12 AM, Takayuki Muranushi <muranushi <at> gmail.com> wrote:
> Dear everyone,
>
> I have a code
> https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11-1.hs
>
> that produces a type-error when I remove a type signature.
> https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11.hs

Hi Takayuki,

The ghc manual sections about the extensions are a good place to
start. Also check out http://okmij.org/ftp/Haskell/

I think you are expecting forZN to be able to use the number of -> in
the function(s) supplied to decide how many lists to take, as done
here: http://paczesiowa.blogspot.ca/2010/03/generalized-zipwithn.html

Replacing the [] container used in the above zipWithN with a
`Data.Key.Zip v => v' that is the same for all of the arguments might
be straightforward. But there are a lot of type signatures that have
to add that parameter, and maybe that will interfere with the
incoherent instance business going on.

Adam
Takayuki Muranushi | 8 Dec 03:12 2012
Picon

Re: Understanding GHC's instance inference.

Thank you, Adam,

for I didn't know about paczesiowa's article. That will be useful for me.

What I was trying to make is a zipWithN that takes the zipper function
as its "last" argument, not the first. This is because in my
applications the zipper functions tend to be complicated lambdas, as
illustrated in [1] . Since we live in curried world where all
functions are superficially unary, to define the "last" argument, and
to implement forZN, needs extra work than to implement zipWithN, I
believe [2] . I'm interested how much we can make these two share
their internal mechanisms.

[1] https://github.com/nushio3/practice/blob/master/free-objects/zipf-05.hs
[2] https://groups.google.com/forum/?fromgroups=#!topic/haskell-cafe/-e-xaCEbd-w

2012/12/6 adam vogt <vogt.adam <at> gmail.com>:
> On Wed, Dec 5, 2012 at 12:12 AM, Takayuki Muranushi <muranushi <at> gmail.com> wrote:
>> Dear everyone,
>>
>> I have a code
>> https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11-1.hs
>>
>> that produces a type-error when I remove a type signature.
>> https://github.com/nushio3/practice/blob/master/instance-inference/zipf-11.hs
>
> Hi Takayuki,
>
> The ghc manual sections about the extensions are a good place to
> start. Also check out http://okmij.org/ftp/Haskell/
(Continue reading)


Gmane