Haskell 中的 <- 是什么类型?

What is the type of <- in Haskell?

我有一个工作程序

main = do

  inpStr <- getLine
  putStrLn ( "Hello " ++ inpStr )

其中

putStrLn :: String -> IO ()

getLine :: IO String  

由此可以断定<-的类型是

IO a -> a

?

不幸的是,它不是一个常规函数,而是一个语言结构。您只能在 do 块中使用它,以从某些上下文获得 "extract" 值,例如 IO.

do 块,而 <- 只是这种称为 Monad 的东西的语法糖(IO 就是其中之一)。

还有一些此类上下文的其他示例,您可以将它们与 do<- 一起使用,例如列表、可选值或可为 null 的值(例如 Maybe Int) ,状态计算等。

部分链接: