Дано:
newtype MyVec = MyVec { unVec :: Data.Vector }
deriving (Functor, etc)
Это создаст (что-то вроде этого):
instance Functor MyVec where
fmap f = MyVec . Data.Vector.fmap f . unVec
Правила слияния V векторов срабатывают и переписывают fmap f . fmap g $ myVec
в fmap (f . g) myVec
?
Есть ли какие-то подводные камни, о которых я должен знать? Afaik проблема, когда вы "платите" за новые типы в контейнерах, была решена в GHC 7.8, не так ли?