假设我的程序中有一个lambda表达式,如:
\x -> f $ x + 1
我想为类型安全指定x必须是整数。类似的东西:
-- WARNING: bad code
\x::Int -> f $ x + 1
答案 0 :(得分:13)
您可以改为编写\x -> f $ (x::Int) + 1
。或者,可能更具可读性\x -> f (x + 1 :: Int)
。请注意,类型签名通常包含左侧的所有内容,最左侧是语法意义,这与lambdas向右延伸相反。
GHC扩展ScopedTypeVariables
偶然允许直接在模式中编写签名,这将允许\(x::Int) -> f $ x + 1
。但是这个扩展还增加了一些你可能不想担心的其他东西;我不会仅仅为了语法准确而打开它。
答案 1 :(得分:11)
我想通过注意到你不需要ScopedTypeVariables
来补充C.A.McCann的回答。即使你从不使用变量,你仍然可以做到:
\x -> let _ = (x :: T) in someExpressionThatDoesNotUseX