haskell - Haskell 中 <- 的类型是什么?
问题描述
我有一个工作程序
main = do
inpStr <- getLine
putStrLn ( "Hello " ++ inpStr )
在哪里
putStrLn :: String -> IO ()
和
getLine :: IO String
由此我可以得出结论,类型<-
是
IO a -> a
?
解决方案
不幸的是,它不是一个常规函数,而是一种语言结构。您只能在do
块中使用它来从某些上下文中“提取”值,例如IO
.
do
块并且<-
只是称为Monad
s 的此类事物的语法糖(并且IO
是其中之一)。
还有一些此类上下文的其他示例,您可以将其与do
and一起使用<-
,例如列表、可选或可为空的值(例如Maybe Int
)、有状态计算等。
一些链接:
推荐阅读
- html - SASS/CSS多色轮
- c++ - cmake、conan 和 qt hello world 项目构建错误
- arduino - Arduino 的 esp_log_set_vprintf 在 ESP32 上不起作用
- node.js - 是否可以有一个 Firebase 函数,该函数由对位于该函数的单独 Firebase 项目中的 Firestore 的更改触发?
- ios - 滚动时搜索栏消失
- javascript - 制作一个没有通过 JS 应用样式的粘性可滚动侧边栏
- testing - Jest + puppeteer 最佳架构实践
- python - 为什么我会使用 PIL 获得颜色量化伪影?
- graphql - GraphQL 突变 - 为 Apollo 客户端设计 gql 标签的混淆
- reactjs - 反应相互依赖的道具类型