Haskell中<-的类型是什么?

Ger*_*ely 2 monads haskell types do-notation io-monad

我有一个工作程序

main = do

  inpStr <- getLine
  putStrLn ( "Hello " ++ inpStr )
Run Code Online (Sandbox Code Playgroud)

哪里

putStrLn :: String -> IO ()
Run Code Online (Sandbox Code Playgroud)

和

getLine :: IO String  
Run Code Online (Sandbox Code Playgroud)

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

IO a -> a
Run Code Online (Sandbox Code Playgroud)

?

Yur*_*nko 6

不幸的是,它不是常规功能,而是一种语言构造。您只能在do块中使用它来从某些上下文(例如)中“提取”值IO。

do块,<-并且只是称为Monads 的语法糖(并且IO是其中之一)。

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

一些链接:

  • 要添加到@Yuri的答案中,`x &lt;-foo`将被翻译为`foo &gt;&gt; = \ x-&gt; ...`。就如此容易。 (2认同)