Haskell 赋值类型

Gre*_*ker 6 haskell

来自 haskell.org 网站:每个表达式都有一个类型。那么什么是类型

main = putStrLn "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

我想知道的不是类型main是什么,而是整条线的类型是什么。另外,是否有可能在 ghci 中以某种方式获得这种类型?我试过

:t (main = putStrLn "Hello, World!")
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

che*_*ner 12

main = putStrLn "Hello, World!"表达,并且因此不具有类型。它是一个定义,它为name分配一个 type 值IO ()(由 的求值产生putStrLn :: String -> IO ()main

按照定义,您可以找到 的类型main

> :t main
main :: IO ()
Run Code Online (Sandbox Code Playgroud)


Wil*_*sem 10

每个表达式都有一个类型。

这是正确的,但声明不是表达式。1+1是一个表达式,a = 1+1表达,但声明。

我想知道的不是 main 的类型是什么,而是整行的类型是什么。

这没有类型,您只需使用给定的表达式定义一个变量。表达式putStrLn "Hello, World!"有 type IO (),因为putStrLn有 type putStrLn :: String -> IO ()