{- Beispiele zu monadischen Kompositionsoperatoren -} -- Kontrollstrukturen -- n-fache Wiederholung einer IO-Aktion repeatN :: Int -> IO a -> IO () repeatN 0 a = return () repeatN n a = a >> repeatN (n-1) a test0 = repeatN 5 (putChar 'a') -- Sequenzen {- -- vordefiniert sequence_ :: [IO a] -> IO () sequence_ = foldr (>>) (return ()) -- sequence :: [IO a] -> IO [a] sequence [] = return [] sequence (a:as) = do r <- a rs <- sequence as return (r:rs) -} -- for-Schleife for_ :: [a] -> (a->IO ()) -> IO() for_ = curry (sequence_ . (uncurry (flip map))) test1 = for_ ['1'..'9'] putChar for :: [a] -> (a->IO b) -> IO [b] for = curry (sequence . (uncurry (flip map))) test2 = (for ['1'..'9'] (\ c -> (putChar c >> getChar))) >>= \cs -> putStr cs