[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 ghc-devs
mailing list