Consider the Object-Oriented Languages:
Most people coming from an object-oriented programming background, are familiar with the common and intuitiv
Haskell has some type classes for working with collections in the base package: Functor, Foldable and Traversable can be useful for working with collections, and the Monoid, Applicative and/or Alternative typeclasses can be useful for constructing collections.
Together, these classes cover most of the operations mentioned in the question, but maybe less efficient than a more container-specific function (though many of these are class methods, whose default definitions can be overriden if necessary).
nullfor testing "emptyness"
Foldable supports null since base 4.8 (any (const True) is an alternative for earlier versions).
length/size for element count:
Foldable supports length since base 4.8 (getSum . foldMap (const 1) is an alternative for earlier versions).
elem/member for set inclusion
Foldable supports elem, notElem and member.
empty and/or singleton for default construction
For empty, there is mempty from Monoid and empty from Alternative.
For singleton, there is pure from Applicative.
union for set union
There is mappend from Monoid and <|> from Alternative. They don't necessarily implement set union, but they implement some form of union that works well together with empty and usually also with singleton and find.
(\)/diff for set difference
This one is not supported, unfortunately.
(!)/(!!) for unsafe indexing (partial function)
You could use fromJust together with a function for safe indexing.
(!?)/lookup for safe indexing (total function)
There is find from Foldable.