我正在专门考虑信号处理。假设我想做一些类似输入信号幅度的事情。我希望它非常快,所以我希望信号被保存在连续的内存中(例如未装箱的矢量)。但是这个信号可以无限期地继续下去,因此我希望将其视为一个无限列表。我宁愿一次调用map (*2) signal
,而不是对每个信号块都调用它。
Haskell中是否有一个数据结构可以缓冲这些数据块,以便获得连续的内存性能,但是将数据视为无限流?
最佳答案
这只是一个长镜头,但如何使用足够大的未装箱矢量块的streams呢?这将具有矢量性能的优势,同时由于流的原因,fusion也将具有优势。
更新:的想法是定义一个newtype
,例如:
import Data.Array.Unboxed
import Data.Stream
import Data.Word
newtype Word8Stream = Word8Stream (Stream (UArray Int Word8))
然后定义所需的通用功能,例如
smap :: (Word8 -> Word8) -> Word8Stream -> Word8Stream
smap f (Word8Stream s) = Word8Stream $ fmap (amap f) s