[Haskell-cafe] Re: Very crazy
Aaron Denney
wnoise at ofb.net
Tue Sep 25 06:48:53 EDT 2007
On 2007-09-25, Andrew Coppin <andrewcoppin at btinternet.com> wrote:
> I just found it rather surprising. Every time *I* try to compose with
> functions of more than 1 argument, the type checker complains.
> Specifically, suppose you have
>
> foo = f3 . f2 . f1
>
> Assuming those are all 1-argument functions, it works great. But if f1
> is a *two* argument function (like map is), the type checker refuses to
> allow it, and I have to rewrite it as
>
> foo x y = f3 $ f2 $ f1 x y
>
> which is really extremely annoying...
>
> I'm just curiose as to why the type checker won't let *me* do it, but it
> will let *you* do it. (Maybe it hates me?)
Don't anthropomorphize computers. They hate it when you do that.
I'm guessing the problem is probably incorrect parenthesizing.
foo x y = f3 . f2 . f1 x y
won't typecheck, but
foo x y = (f3 . f2 . f1) x y
should.
Function application is the highest precedence, so
the first definition is parsed as
foo x y = f3 . f2 . (f1 x y)
which will only type-check if f1 has 3 or more arguments, as (f1 x y)
must be a function.
The trickier parts are more than 1 argument functions as the first
argument to (.). Are you sure your failed attempts weren't of this
form?
--
Aaron Denney
-><-
More information about the Haskell-Cafe
mailing list