リストの理解は非常に分かりやすいです。次の定義のh
を見てください。それはリストのタイプ[Int]
およびpure_f
のpure_xs
を使用し、リストの両方の理解を使用します。ハスケルのモナディックリストの理解
pure_xs :: [Int]
pure_xs = [1,2,3]
pure_f :: Int -> String
pure_f a = show a
h :: [(Int,Char)]
h = [(a,b) | a <- pure_xs, b <- pure_f a]
-- h => [(4,'4'),(5,'5'),(6,'6')]
グレート。今度は少し異なる2つの式、monadic_f
とmonadic_xs
を取りましょう。できるだけh
のように見えるように、リスト内包表記を使用してg
を構築したいと思います。ソリューションには一連のIOアクションを生成し、sequence
を使用して、IOモナドにタイプ[(Int,Char)]
のリストを生成するという感覚があります。
monadic_xs :: IO [Int]
monadic_xs = return [1,2,3]
monadic_f :: Int -> IO String
monadic_f a = return (show a)
g :: IO [(Int,Char)]
g = undefined -- how to make `g` function look
-- as similar to `h` function as possible, i.e. using list comprehension?
-- g => IO [(4,'4'),(5,'5'),(6,'6')]