lambda表达式中的Haskell类型签名

时间:2013-01-26 19:30:03

标签: haskell

假设我的程序中有一个lambda表达式,如:

\x -> f $ x + 1

我想为类型安全指定x必须是整数。类似的东西:

-- WARNING: bad code
\x::Int -> f $ x + 1

2 个答案:

答案 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
相关问题