【发布时间】:2021-08-17 04:00:23
【问题描述】:
我正在使用Aeson 和Network.HTTP。我能够编码一个 json 并将其打印在屏幕上,执行以下操作:
getCode :: String -> IO ResponseCode
getCode url = simpleHTTP req >>= getResponseCode
where req = getRequest url
main :: IO ()
main = do
x <- get "http://jsonplaceholder.typicode.com/todos/1"
let y = encode x
B.putStrLn y
但是我不明白这个do 表达式是什么意思。像这样的:
get "http://jsonplaceholder.typicode.com/todos/1" >>= (?)
? 中应该包含什么内容?
我只知道怎么脱糖:
do { x1 <- action1
; x2 <- action2
; mk_action3 x1 x2 }
到这里
action1 >>= (\ x1 -> action2 >>= (\ x2 -> mk_action3 x1 x2 ))
顺便问一下,action 是什么? https://en.m.wikibooks.org/wiki/Haskell/do_notation 解释的不是很准确。
【问题讨论】:
-
请一次一个问题,谢谢。
-
B.putStrLn (encode x)是一个 IO 操作,就像action1或mk_action3 x1 x2一样。 -
如果你想要精确的规则,去haskell.org/onlinereport/haskell2010/…
-
Action 是一个非正式的术语,指的是一个包含在 Monad 中的类型的东西,例如
getLine :: IO String是一个获取一行输入的动作,或者put :: s -> State s ()是一个修改 State 的动作. IO 和 State 都是 Monad,所以我们可以调用这些动作。
标签: haskell do-notation