Here's how it works, every time you supply a query, you supply the parameters to the query in a tuple. Furthermore the results can be gotten back as a tuple by type hinting each value. Warning: I have not run this code, but it should be close.
query "select age, is_old from user where uid = ? and name = ? (uid :: Int, name :: String) :: IO [(Integer, Bool)]
But what happens when you want to supply a single parameter (or receive a single value?)
query "select * from user where uid = ?" (uid)
The problem with that is (uid) is not a tuple. It's just an integer in parenthesis. There in fact is no way to specify a tuple of one length. So mysql-simple (and other libraries) very often have a single type meant to be used as a single element tuple. In mysql-simple's (and postgresql-simple) case that is the (Only a) type. (Side note, I wish these were in the standard Tuple module, as this comes once in awhile).
query "select name from user where uid = ?" (Only uid) :: IO [Only String]