andM [Just True,Just False,undefined] == Just False andM [Just True,Just True ,undefined] == undefined \xs -> Just (and xs) == andM (map Just xs)
>>> andM [Just True, Just False] Just False >>> andM [Just True] Just True >>> andM [Just True, Just False, Nothing] Just False >>> andM [Just True, Nothing] Nothing >>> andM [putTextLn "1" >> pure True, putTextLn "2" >> pure False, putTextLn "3" >> pure True] 1 2 False