[Haskell-beginners] infinite type

Julian Rohrhuber julian.rohrhuber at musikundmedien.net
Sun Jan 3 13:31:13 UTC 2016


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> 





More information about the Beginners mailing list