Reputation: 887
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
Upvotes: 16
Views: 7564
Reputation: 35089
I want to add to C.A.McCann's answer by noting that you don't need ScopedTypeVariables
. Even if you never use the variable, you can always still do:
\x -> let _ = (x :: T) in someExpressionThatDoesNotUseX
Upvotes: 13
Reputation: 77374
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.
Upvotes: 17