Haskell type signature in lambda expression

haskell

Solution

You can just write `\x -> f $ (x::Int) + 1` instead. Or, perhaps more readable, `\x -> f (x + 1 :: Int)`. Note that type signatures generally encompass everything to their left, as far left as makes syntactic sense, which is the opposite of lambdas extending to the right.

The GHC extension `ScopedTypeVariables` incidentally allows writing signatures directly in patterns, which would allow `\(x::Int) -> f $ x + 1`. But that extension also adds a bunch of other stuff you might not want to worry about; I wouldn't turn it on just for a syntactic nicety.

Problem

Suppose I have a lambda expression in my program like: ``` \x -> f $ x + 1 ``` and I want to specify for type safety that x must be an Integer. Something like: ``` -- WARNING: bad code \x::Int -> f $ x + 1 ```

Original source