是否有无箱列表具有未装箱的矢量性能?

awe*_*kie 6 haskell signal-processing lazy-evaluation

我正在考虑专门用于信号处理.假设我想做一些像输入信号幅度加倍的事情.我希望它非常快,所以我希望信号保存在连续的内存中(例如,未装箱的矢量).但是这个信号可以无限期地继续下去,所以我希望它被视为一个无限的列表; 我宁愿打电话map (*2) signal一次而不是为每个信号块调用它.

Haskell中是否有一个数据结构可以缓冲这些数据块,以便我可以获得连续的内存性能,但是将数据视为无限流?

Pet*_*lák 6

这仅仅是一个长镜头,但对于使用的拆箱载体的足够大的块?这将具有矢量性能的优势,同时由于流而融合.

更新:想法是定义newtype如下:

import Data.Array.Unboxed
import Data.Stream
import Data.Word

newtype Word8Stream = Word8Stream (Stream (UArray Int Word8))
Run Code Online (Sandbox Code Playgroud)

然后定义您需要的通用函数,例如

smap :: (Word8 -> Word8) -> Word8Stream -> Word8Stream
smap f (Word8Stream s) = Word8Stream $ fmap (amap f) s
Run Code Online (Sandbox Code Playgroud)

  • @DurnWhippersnapper你是对的,但是它可以隐藏在`newtype`数据类型和一组相应的函数中,这样内部实现对其他模块完全不透明.我更新了答案. (4认同)