Across many of the algebras, including those of sets, groups, categories etc., it's often noted that the presence of an identity operation (or lack thereof) is a major trait in distinguishing between various abstractions; e.g. a monoid is distinct from a semigroup by virtue of having an identity operation.
Coming from a programming background, though, I'm having trouble grasping the significance of such a trivial operation; even as I work with Haskell, which takes some cues from category theory and includes monoid structures, I never find myself using id operations.
What are the uses and implications of having an identity operation over a certain abstraction?