I could import Control.Arrow (first) and write `StT $ first g . f` . Do you think that would be nicer?