Haskell赋值类型
来自 haskell.org 网站:每个表达式都有一个类型。那么什么是类型
main = putStrLn "Hello, World!"
我想知道的不是类型main是什么,而是整条线的类型是什么。另外,是否有可能在 ghci 中以某种方式获得这种类型?我试过
:t (main = putStrLn "Hello, World!")
但这不起作用。
回答
main = putStrLn "Hello, World!"是不表达,并且因此不具有类型。它是一个定义,它为name分配一个 type 值IO ()(由 的求值产生putStrLn :: String -> IO ())main。
按照定义,您可以找到 的类型main:
> :t main
main :: IO ()
回答
每个表达式都有一个类型。
这是正确的,但声明不是表达式。1+1是一个表达式,a = 1+1是不表达,但声明。
我想知道的不是 main 的类型是什么,而是整行的类型是什么。
这没有类型,您只需使用给定的表达式定义一个变量。表达式putStrLn "Hello, World!"有 type IO (),因为putStrLn有 type putStrLn :: String -> IO ()。