Implementing `and` and `or`
Consider that Bool is an algebraic data structure like any other in Haskell. Pattern matching is the most elegant solution, but you can use even more of it to be even more elegant!

-- import Prelude hiding (or)

or :: [Bool] -&gt; Bool
or []         = False
or (False:bs) = or bs
or (True :_ ) = True