gpt4 book ai didi

Haskell:为什么 GHC 为 main 方法推断的类型不太完整?

转载 作者:行者123 更新时间:2023-12-02 20:31:02 25 4
gpt4 key购买 nike

例如,采用 Don Stewart 在回答某些 Stack Overflow 问题时编写的代码:

import Control.Monad
import qualified Data.HashTable as H
import System.Environment

main = do
[size] <- fmap (fmap read) getArgs
m <- H.new (==) H.hashInt
forM_ [1..size] $ \n -> H.insert m n n
v <- H.lookup m 100
print v

将其加载到 GHCi 中。

:t getArgs ---> getArgs :: IO [String]
:t main ---> main :: IO ()

为什么 main 的类型签名没有反射(reflect)出 getArgs :: IO [String] 的事实正在被调用吗?

当您运行二进制文件时,您可以给出一个参数。 <prog> 145返回Just 100但在 GHCi 中,您不能:main 145给出错误。你如何在 GHCi 中运行这个程序并给出一个参数。

最佳答案

main 的类型是其最终表达式的类型; print 生成 IO (),因此这就是 main 的类型。中间类型不相关,因为 (>>=) 不会传播除 monad 之外的任何内容。

(>>=) :: Monad m => m a -> (a -> m b) -> m b

a 未出现在结果类型 (m b) 中。

至于在 GHCi 中运行程序,请查看 :main 命令。

关于Haskell:为什么 GHC 为 main 方法推断的类型不太完整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6396937/

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