import Control.Monad (foldM) --jeste jednou jednoducha verze lookUp :: Eq k => k -> [(k, v)] -> Maybe v lookUp _ [] = Nothing lookUp k ((l, v):r) | k == l = Just v | otherwise = lookUp k r --lookup4 napsany podstatne lip pomoci Maybe monady a do-notace --(funguje uplne stejne jako verze s andThen) lookUp4M k s = do x <- lookUp k s x <- lookUp x s x <- lookUp x s lookUp x s --to same, akorat rozepsane s explicitnim pouzitim >>= --(lepsi je samozrejme pouzit `do', ale kod je jinak ekvivalentni) lookUp4M' k s = lookUp k s >>= \x -> lookUp x s >>= \x -> lookUp x s >>= \x -> lookUp x s --docela fajn verze lookup4MBonus k = foldM lookUp k . replicate 4