keep Semigroup out of the LogT type
use a writer instead of a state for log