{-# OPTIONS -Wall #-} ---------------------------------------------------------------------- -- | -- Module : Data.ZoomCache.Numeric.Delta -- Copyright : Conrad Parker -- License : BSD3-style (see LICENSE) -- -- Maintainer : Conrad Parker -- Stability : unstable -- Portability : unknown -- -- Delta encoding and decoding of numeric values. ---------------------------------------------------------------------- module Data.ZoomCache.Numeric.Delta ( -- * Delta encoding deltaEncode , deltaDecode ) where -- | Delta encode a list of numbers -- -- > > deltaEncode [1,2,3,2,4] -- > [1,1,1,-1,2] deltaEncode :: Num a => [a] -> [a] deltaEncode xs = zipWith (-) xs (0:xs) {-# INLINE deltaEncode #-} -- | Delta-decode a list of numbers -- -- > > deltaDecode [1,1,1,-1,2] -- > [1,2,3,2,4] deltaDecode :: Num a => [a] -> [a] deltaDecode = scanl1 (+) {-# INLINE deltaDecode #-}