标签: haskell-vector

可存储和未装箱的矢量之间的差异

所以...我已经使用了未装箱的载体(来自vector包装),现在最好不要考虑太多.vector-th-unbox为他们创建实例变得轻而易举,为什么不呢.

现在我遇到了一个实例,我无法自动派生那些实例,一个带有幻像类型参数的数据类型(如Vector (s :: Nat) a,s编码长度).

这让我想到了StorableUnboxed矢量之间的差异.我自己想出的事情:

  • Unboxed 将元组存储为单独的向量,从而导致更好的高速缓存局部性,而不需要在仅需要其中一个值时浪费带宽.
  • Storable仍将编译为简单(可能有效)的readArray#s,返回未装箱的值(通过阅读核心显而易见).
  • Storable允许直接指针访问,允许与外部代码的互操作性.Unboxed没有.
  • [编辑] Storable实例实际上是更容易用手比写Unbox(即VectorMVector)的.

仅仅这一点并没有让我明白为什么Unboxed即使存在,似乎也没什么好处.可能我错过了那里的东西?

haskell haskell-vector

9
推荐指数
1
解决办法
852
查看次数

Data.Vector的修改能否真正完成?

在源modify被指出该操作将在地方,如果它是安全的话来进行,并会以其他方式修改载体的拷贝.

但是看代码modify:

modify :: Vector v a => (forall s. Mutable v s a -> ST s ()) -> v a -> v a
modify p = new . New.modify p . clone
Run Code Online (Sandbox Code Playgroud)

它看起来clone总是被调用(这对我来说很有意义,因为我认为它必须是对不可变向量的破坏性操作).

我误解了吗?如果没有,那么什么是clone未调用的示例,以及如何Data.Vector完成旁路?

haskell haskell-vector

7
推荐指数
0
解决办法
75
查看次数

在这个例子中有没有办法避免UndecidableInstances?

当我尝试这个:

import GHC.Generics (Generic)
import Control.DeepSeq (NFData(..))
import Data.Vector.Generic (Vector)

data Entry a = Entry !Bool a
             deriving (Generic, NFData)

-- The variable @v@ is meant to be instantiated with a 'Vector'
-- type.  Most operations for the type have a @Vector v (Entry a)@
-- constraint.
newtype DenseIntMap v a = DenseIntMap (v (Entry a))

instance NFData (v (Entry a)) => NFData (DenseIntMap v a) where
  rnf (DenseIntMap va) = rnf va
Run Code Online (Sandbox Code Playgroud)

...我收到此错误:

/Users/casillas/GitHub/tau-sigma/src/TauSigma/Util/DenseIntMap.hs:53:10:
    Constraint is no smaller than …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-vector

0
推荐指数
1
解决办法
164
查看次数

标签 统计

haskell ×3

haskell-vector ×3