给定:
newtype MyVec = MyVec { unVec :: Data.Vector }
deriving (Functor, etc)
这将创建(类似于)这个:
instance Functor MyVec where
fmap f = MyVec . Data.Vector.fmap f . unVec
向量的融合规则会触发并将fmap f . fmap g $ myVec
重写为fmap (f . g) myVec
吗?
我需要注意哪些陷阱?据我所知,在GHC 7.8中解决了在容器中使用新类型的问题,是这样吗?
newtype
不会产生任何开销”。如果它确实阻止了某些优化,那么它不应该被重新表述吗? - gallaismap
的定义中不应该调用MyVec
吗?例如:map f x = MyVec $ Vector.map f (unVec x)
。 - ErikRINLINE
(或更好的INLINABLE
?)指示符附加到派生类型类? - fho