Implementing `and` and `or` I implemented and and or:

-- or is like and, only it returns True if 
-- any of the boolean values in a list is True.
or' :: [Bool] -&gt; Bool
or' []     = False
or' (x:xs) = x || or' xs 

--and takes a list of boolean values and returns True only if 
-- all the values in the list are True.
and' :: [Bool] -&gt; Bool
and' [] = False
and' (x:xs) = x &amp;&amp; and' xs


Is pattern matching the most elegant solution here?

Also, should or' [] and and' [] return False? It makes sense for them to do so when passing in a non-null input. 

Example: or' [False, False]

But, how about the behavior of or' [] or and' []? Does False make sense here?
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