use traverse rather than sequenceA and fmap