λ> :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) = runST $ do
λ| mx@(VS.MVector !x'offset !x'fp) <- VS.unsafeThaw x
λ| my@(VS.MVector !y'offset !y'fp) <- VS.unsafeThaw y
λ| _ <- VS.unsafeFreeze mx
λ| _ <- VS.unsafeFreeze my
λ| return $ x'offset == y'offset && x'fp == y'fp
λ|
λ| :}
λ>
λ> 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
λ>