[Haskell-cafe] How to ensure optimization for large immutable vectors to be shared w.r.t. Referential Transparency

Henning Thielemann lemming at henning-thielemann.de
Tue Apr 6 12:34:25 UTC 2021


On Tue, 6 Apr 2021, YueCompl wrote:

> Thanks, it's a good idea. Unfortunately the result remains, making me even more curious.
> ```hs
> λ> :set -XBangPatterns
> λ> 
> λ> :set -package vector
> package flags have changed, resetting and loading new packages...
> λ> 
> λ> import Prelude
> λ> 
> λ> import Control.Monad.ST
> λ> import qualified Data.Vector.Storable as VS
> λ> 
> λ> :{
> λ| 
> λ| newtype SomeVector = SomeVector (VS.Vector Int)
> λ| 
> λ| isSameVector :: SomeVector -> SomeVector -> Bool
> λ| isSameVector (SomeVector !x) (SomeVector !y) = 
> λ|   x'offset == y'offset && x'fp == y'fp
> λ|  where
> λ|   (x'fp, x'offset, _x'len) = VS.unsafeToForeignPtr x
> λ|   (y'fp, y'offset, _y'len) = VS.unsafeToForeignPtr y
> λ| :}
> λ> 
> λ> let !v = VS.fromList [5..200000] in isSameVector (SomeVector v) (SomeVector v)
> False

What happens for [3,2,5]?


> λ> 
> λ> let !v = SomeVector (VS.fromList [3,2,5]) in isSameVector v v
> True
> λ> 
> ```


More information about the Haskell-Cafe mailing list