Software Transactional Memory (STM) provides an alternative to locks for concurrency. STM exploits features of Haskell like purity and immutability. Transactions are atomic, isolated, and retryable. The STM library provides primitives like TVar, TMVar, and TChan. Transactions use the atomically block and retry if inputs change. STM handles exceptions and guarantees without needing rollback. Bounded queues and strictness ensure performance and memory management. STM has been implemented in other languages like Clojure, Scala, C++, and C#.