次の有効な Haskell コードを検討してください
module Main where
main :: IO ()
main = do
let x = f
print x
f :: Maybe (Int, Int)
f =
Just 3 >>= (\a ->
Just 5 >>= (\b ->
return (a, b)))
関数は、fこのようなdo表記で同等に書き換えることができます
f :: Maybe (Int, Int)
f = do
a <- Just 3
b <- Just 5
return (a, b)
私を悩ませているのは、fインラインの内容を入れると do 表記が機能しないことです。次のコードは解析さえしません。
main :: IO ()
main = do
let x = do
a <- Just 3
b <- Just 5
return (a, b)
print x
内部letで頼らざるを得ないというのは正しい(>>=)ですか?
私が取り組んでいる間、次のコードも解析されません。
module Main where
main :: IO ()
main = do
let x =
Just 3 >>= (\a ->
Just 5 >>= (\b ->
return (a, b)))
print x
の不必要な制限された力以外に明らかな理由は見当たりませんlet。bind内部で使用するエレガントな方法はありletますか?