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