绑定变量的范围是什么?为什么我不能从where子句中访问它? 例如,在此示例中:
someFunc x y = do
let a = x + 10
b <- someAction y
return subFunc
where
subFunc = (a * 2) + (b * 3)
这里,subFunc可以看到但不是b。 为什么我不能在where子句中使用绑定变量?谢谢。
答案 0 :(得分:8)
因为它可能导致不一致。想象一下这段代码:
printName = do
print fullName
firstName <- getLine
lastName <- getLine
return ()
where
fullName = firstName ++ " " + lastName
此代码不起作用,并且由于这些情况,绑定变量的使用仅限于实际绑定之后的do
块的部分。在贬低上述代码时,这一点就变得清晰了:
printName =
print fullName >>
getLine >>= (\ firstName ->
getLine >>= (\ lastName ->
return ()
)
)
where
fullName = firstName ++ " " ++ lastName
在这里,可以看到变量firstName
和lastName
不在where
子句的范围内,并且它们不能在该子句中的任何定义中使用。