"we know that forM will not change the number of elements in the container by leaning on the Traversable laws alone" https://ghc.haskell.org/trac/ghc/wiki/Prelude710/FTP