Semigroup extends serializable, why does it need to be transient?