@@ -33,7 +33,6 @@ import Prelude
33
33
import Control.Monad.ST as ST
34
34
import Control.Monad.ST (ST , kind Region )
35
35
import Data.Maybe (Maybe (..))
36
- import Unsafe.Coerce (unsafeCoerce )
37
36
38
37
-- | A reference to a mutable array.
39
38
-- |
@@ -68,20 +67,17 @@ withArray f xs = do
68
67
69
68
-- | O(1). Convert a mutable array to an immutable array, without copying. The mutable
70
69
-- | array must not be mutated afterwards.
71
- unsafeFreeze :: forall h a . STArray h a -> ST h (Array a )
72
- unsafeFreeze = pure <<< (unsafeCoerce :: STArray h a -> Array a )
70
+ foreign import unsafeFreeze :: forall h a . STArray h a -> ST h (Array a )
73
71
74
72
-- | O(1) Convert an immutable array to a mutable array, without copying. The input
75
73
-- | array must not be used afterward.
76
- unsafeThaw :: forall h a . Array a -> ST h (STArray h a )
77
- unsafeThaw = pure <<< (unsafeCoerce :: Array a -> STArray h a )
74
+ foreign import unsafeThaw :: forall h a . Array a -> ST h (STArray h a )
78
75
79
76
-- | Create an empty mutable array.
80
77
foreign import empty :: forall h a . ST h (STArray h a )
81
78
82
79
-- | Create a mutable copy of an immutable array.
83
- thaw :: forall h a . Array a -> ST h (STArray h a )
84
- thaw = copyImpl
80
+ foreign import thaw :: forall h a . Array a -> ST h (STArray h a )
85
81
86
82
-- | Sort a mutable array in place.
87
83
sort :: forall a h . Ord a => STArray h a -> ST h (STArray h a )
@@ -127,10 +123,7 @@ sortWith
127
123
sortWith f = sortBy (comparing f)
128
124
129
125
-- | Create an immutable copy of a mutable array.
130
- freeze :: forall h a . STArray h a -> ST h (Array a )
131
- freeze = copyImpl
132
-
133
- foreign import copyImpl :: forall h a b . a -> ST h b
126
+ foreign import freeze :: forall h a . STArray h a -> ST h (Array a )
134
127
135
128
-- | Read the value at the specified index in a mutable array.
136
129
peek
0 commit comments