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

YueCompl compl.yue at icloud.com
Tue Apr 6 12:41:33 UTC 2021

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

> On 2021-04-06, at 20:34, Henning Thielemann <lemming at henning-thielemann.de> wrote:
>
>
> 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
>> λ>
>> ```

-------------- next part --------------
An HTML attachment was scrubbed...