gpt4 book ai didi

haskell - 为什么注释 lambda 类型不需要 -XScopedTypeVariables?

转载 作者:行者123 更新时间:2023-12-03 14:51:57 25 4
gpt4 key购买 nike

这需要 -XScopedTypeVariables

handle(\(_::SomeException) -> return Nothing)

但这不是
handle((\_ -> return Nothing)::SomeException -> IO (Maybe Integer))

如果 ::允许在函数体内注解类型,为什么需要编译指示来注解局部变量?

最佳答案

更一般地说:标准的 Haskell 不允许在模式中签名,但允许给任何表达式一个签名。以下都是有效的:

main :: IO ()
main = do
x <- readLn
print $ 5 + x

main' = (\y -> do {
x <- readLn;
print $ y + x } ) :: Int -> IO ()

main'' y = do
x <- readLn :: IO Int
print $ y + x :: IO ()

但这些都不是
main''' = do
(x :: Int) <- readLn
print $ 5 + x

main''' = (\(y :: Int) -> do {
x <- readLn;
print $ y + x } ) :: Int -> IO ()

main'''' (y :: Int) = do
x <- readLn :: IO Int
print $ y + x :: IO ()

显然,只是没有想到模式中的签名可能有用。但他们肯定是,所以 ScopedTypeVariables介绍了这种可能性。

关于haskell - 为什么注释 lambda 类型不需要 -XScopedTypeVariables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com