Bab*_*san 3 haskell type-inference ghci
例如,使用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
Run Code Online (Sandbox Code Playgroud)
将其加载到GHCi中.
:t getArgs ---> getArgs :: IO [String]
:t main ---> main :: IO ()
Run Code Online (Sandbox Code Playgroud)
为什么main的类型签名没有反映出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
Run Code Online (Sandbox Code Playgroud)
a
不会出现在结果类型(m b
)中.
至于在GHCi中运行程序,请查看:main
命令.