これは、いくつかの質問を 1 つにまとめたものです。
do
記法では、各行は同じ型を返す必要がありますか? たとえばdo
、モナドを返す 1 つのブロックに 1 つの行を書きIO
、整数を返す別の行を書くことはできますか? (私の理解では、 と を使用した脱糖がどのように機能しているように見えるかに基づい>>
て>>=
、答えはノーです。)そうでない場合、コンパイラは行がすべて返す必要がある型をどのように決定しますか?
IO
私が見たすべての例で、著者は、モナドを扱っているだけだということを当然の結論として受け入れています。do
しかし、特定のブロックについて、各行が何を返さなければならないかをどうやって知るのでしょうか?do
もう一度 #1 の答えがノーであると仮定します:ブロック内で正しい種類のモナドを返さない関数をどのように使用しますか? たとえば、次の websockets コードを考えてみましょう。application :: MVar ServerState -> WS.Request -> WS.WebSockets WS.Hybi00 () application state rq = do WS.acceptRequest rq msg <- WS.receiveData :: WS.WebSockets WS.Hybi00 Text return ()
の値を出力したいとします
msg
。do
ブロックのタイプと競合しない方法でそれを行うにはどうすればよいですか?