do 記法内で純粋な関数とモナド関数を混同するのに問題があります。明らかな何かが欠けていると感じています。
たとえば、これらの関数を取得したとします
fa :: a -> IO b
fb :: b -> c
fc :: c -> IO d
z :: a -> IO c
z a = do x <- fa a
y <- fb x
z <- fc y
return z
これは機能しません。
y <- fb x
z の行ですが、純粋な fb 関数をモナドの fa および fc 関数と組み合わせるエレガントな方法は何ですか?