[Haskell-cafe] argument counts...

Arjen arjenvanweelden at gmail.com
Mon Nov 20 19:42:07 UTC 2017


On Mon, 2017-11-20 at 11:13 -0600, Gregory Guthrie wrote:
> I have a simple function:
>        revFn (x:xs) = (revFn xs) . (x:)
>  
> Of course GHCi correctly infers the type as:   revFn :: [a] -> [a] ->
> c
>  
> Adding the base case:
>     revFn [] xs = xs
>  
> Now gives an error;
>   “Equations for ‘revF’ have different numbers of arguments”
>  
> Of course this can be “fixed” by either adding the cancelled argument
> to the first clause, or converting the base case to only have one
> explicit argument, and a RHS of a lambda or identity function.
>  
> But since the interpreter already correctly inferred that the first
> clause has two arguments (with only one explicit), why does it then
> ignore this and give an error when the second clause shows two
> explicit arguments? The types are all correct in either case – why
> require explicit arguments?
>  
> Or, perhaps I am missing something simple?
> 
The semantics are based on Term Rewriting Systems. The number of
arguments determines when the left side gets rewritten (evaluated) to
the right side. This makes a difference in time and space properties. I
think that is why Haskell (GHC) makes it explicit, and requires all
parts of the function definition to have the same number of arguments.

hope this helps, Arjen


More information about the Haskell-Cafe mailing list