
I'm curious as to the intended meaning of let f g = g . g Without reading further down, I immediately thought: "composing g onto g must require that the argument and result types (domain and range) of g must be identical". Then, when I read f sum I don't know what that means, given that sum is [1] "a function of two arguments" yielding a single value (or, if I want to have my daily dose of curry, sum is [2] "a function of one argument yielding a (function of one argument yielding a single value)". With either reading, I don't know how to reconcile sum with the expectation on the argument to f. I think that's what the compiler is saying as well. Expected type: (a -> a) -> a -> a Actual type: a -> a -> a The "expected type" expression seems to match what I expected from the definition of f, and the "actual type" expression seems to match reading [2]. So I'm wondering how that aligns with what you intended to express. -jn- On Sun, Jan 3, 2016 at 7:31 AM, Julian Rohrhuber < julian.rohrhuber@musikundmedien.net> wrote:
The function g, when called with a binary function returns a type error which I’d really like to understand: why is this type “infinite" rather than just incomplete or something similar? I would have expected some kind of partial binding. Can someone help me with an explanation?
Prelude> let f g = g . g Prelude> let sum x y = x + y Prelude> f sum
<interactive>:14:3: Occurs check: cannot construct the infinite type: a ~ a -> a Expected type: (a -> a) -> a -> a Actual type: a -> a -> a Relevant bindings include it :: (a -> a) -> a -> a (bound at <interactive>:14:1) In the first argument of ‘f’, namely ‘sum’ In the expression: f sum
With a similar call using lambda expressions, the error is different:
Prelude> (\x y -> x + y) . (\x y -> x + y)
<interactive>:32:1: Non type-variable argument in the constraint: Num (a -> a) (Use FlexibleContexts to permit this) When checking that ‘it’ has the inferred type it :: forall a. (Num a, Num (a -> a)) => a -> (a -> a) -> a -> a Prelude>
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
-- Beauty of style and harmony and grace and good rhythm depend on simplicity. - Plato