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
) ,状态计算等。
部分链接:
- What is a monad?
- http://learnyouahaskell.com/a-fistful-of-monads#do-notation(你需要在这里理解仿函数和单子)
我有一个工作程序
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
) ,状态计算等。
部分链接:
- What is a monad?
- http://learnyouahaskell.com/a-fistful-of-monads#do-notation(你需要在这里理解仿函数和单子)