次の有効な 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
ますか?