[Haskell-cafe] strange error message

Yuras Shumovich shumovichy at gmail.com
Thu Mar 27 12:23:35 UTC 2014


Hi,

It seems to be already fixed:
https://ghc.haskell.org/trac/ghc/changeset/b988dc39a06278acc2373ba9a40ee08da0127411/ghc


Thanks,
Yuras

On Thu, 2014-03-27 at 13:16 +0100, Erik Hesselink wrote:
> Could you create a code snippet that reproduces the error?
> 
> Erik
> 
> On Thu, Mar 27, 2014 at 1:09 PM, Semen Trygubenko / Семен Тригубенко
> <semen at trygub.com> wrote:
> > Hi Ivan,
> >
> > On Thu, Mar 27, 2014 at 11:28:33AM +0000, Ivan Perez wrote:
> >> What is the type of head?
> >> What is the type of length?
> >> What is the type of length.head?
> >> What is the type of r?
> >
> > Prelude> :t head
> > head :: [a] -> a
> > Prelude> :t length
> > length :: [a] -> Int
> > Prelude> :t (length . head)
> > (length . head) :: [[a]] -> Int
> > Prelude>
> >
> > r is of type Int.
> >
> > [Apologies — I thought the above is deducable from the error message I've included (below).]
> >
> > Clearly, this is a type error as Int is passed in where [[a]] is expected.
> > However, my question is relating to the middle bit of the error message,
> > namely:
> >
> >     (The function `length . head' is applied to one argument,
> >     but its type `[[a2]] -> Int' has only one)
> >
> > Many thanks,
> > S.
> >
> >
> >
> >
> >> On 27 March 2014 02:36, Semen Trygubenko / Семен Тригубенко <
> >> semen at trygub.com> wrote:
> >>
> >> > Dear Haskell-Cafe,
> >> >
> >> > Every now and then I get error messages when compiling Haskell code :).
> >> > Sometimes of the sort:
> >> >
> >> > test.hs:10:15:
> >> >     Couldn't match type `[[a2]]' with `Int'
> >> >     Expected type: Int -> Int
> >> >       Actual type: [[a2]] -> Int
> >> >     The function `length . head' is applied to one argument,
> >> >     but its type `[[a2]] -> Int' has only one
> >> >     In the first argument of `(==)', namely `(length . head) r'
> >> >     In the expression: (length . head) r == 0
> >> >
> >> > Is the middle part of the error message
> >> >
> >> > (The function `length . head' is applied to one argument,
> >> > but its type `[[a2]] -> Int' has only one)
> >> >
> >> > expected to be confusing like that sometimes?
> >> >
> >> > The line in question, FWIW, is
> >> >
> >> > Right r -> if (length . head) r == 0
> >> >
> >> > It appears as one of the two entries in a case statement, pattern matching
> >> > on Right constructor.
> >> >
> >> > Many thanks,
> >> > S.
> >> >
> >> >
> >> >
> >> > --
> >> > Семен Тригубенко http://trygub.com
> >> >
> >> > _______________________________________________
> >> > Haskell-Cafe mailing list
> >> > Haskell-Cafe at haskell.org
> >> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >> >
> >> >
> >
> > --
> > Семен Тригубенко http://trygub.com
> >
> > _______________________________________________
> > Haskell-Cafe mailing list
> > Haskell-Cafe at haskell.org
> > http://www.haskell.org/mailman/listinfo/haskell-cafe
> >
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe




More information about the Haskell-Cafe mailing list