Рассматривая, как наилучшим образом отображать карту, т.е. traverse, a -> Maybe a -Kleisli над unboxed vector, я искал существующую реализацию. Очевидно, U.Vector не Traversable, но он снабжает mapM, который для Maybe, конечно, отлично работает.
Но возникает вопрос: действительно ли нужно ограничение Monad? Ну, оказывается, что даже  вложенные векторы обманывают экземпляр Traversable: они действительно просто пересекают список, который они конвертируют из/в:
instance Traversable.Traversable Vector where
  {-# INLINE traverse #-}
  traverse f xs = Data.Vector.fromList Applicative.<$> Traversable.traverse f (toList xs)
 mono-traversable делает то же самое и для распакованных векторов; здесь это кажется еще более ужасным по производительности.
Теперь я не удивлюсь, если бы vector действительно смог сплавить многие из этих взломанных обходов в гораздо более эффективную форму, но все же - кажется, есть фундаментальная проблема, мешающая нам реализовать обход на массив сразу. Есть ли какая-то "глубокая причина" для этой неспособности?
