In Haskell, the implementation of the finite powerset monad (Data.Set) is actually not a monad because it requires an (Ord)-constraint for its implementation — and Haskell cannot understand monads that are constrained on their base types.

Instead, one can use a trick that moves all of the Ord related requirements outside from the monad. This is done in the set-monad library: https://hackage.haskell.org/package/set-monad.

Tags: Haskell, powerset monad.