lookup1 :: (Eq a,Eq b) => a -> [(a,b)] -> Maybe b lookup1 x [] = Nothing lookup1 x (y:ys) = if x == fst y then Just (snd y) else lookup1 x ys a = [(1,[(3,4),(5,6)]),(7,[(8,9),(10,11)])] f1 x y = do {v1 <- lookup1 x a; lookup1 y v1} f2 x y = lookup1 x a >>= lookup1 y fromMaybe :: a -> Maybe a -> a fromMaybe x (Just y) = y fromMaybe x Nothing = x