@@ -122,9 +122,9 @@ import Control.Alternative (class Alternative)
122
122
import Control.Lazy (class Lazy , defer )
123
123
import Control.Monad.Rec.Class (class MonadRec , Step (..), tailRecM2 )
124
124
import Control.Monad.ST as ST
125
+ import Data.Array.NonEmpty.Internal (NonEmptyArray )
125
126
import Data.Array.ST as STA
126
127
import Data.Array.ST.Iterator as STAI
127
- import Data.Array.NonEmpty.Internal (NonEmptyArray )
128
128
import Data.Foldable (class Foldable , foldl , foldr , traverse_ )
129
129
import Data.Foldable (foldl , foldr , foldMap , fold , intercalate , elem , notElem , find , findMap , any , all ) as Exports
130
130
import Data.Maybe (Maybe (..), maybe , isJust , fromJust )
@@ -229,7 +229,8 @@ foreign import length :: forall a. Array a -> Int
229
229
-- | ```
230
230
-- |
231
231
-- | Note, the running time of this function is `O(n)`.
232
- foreign import cons :: forall a . a -> Array a -> Array a
232
+ cons :: forall a . a -> Array a -> Array a
233
+ cons x xs = [x] <> xs
233
234
234
235
-- | An infix alias for `cons`.
235
236
-- |
@@ -246,7 +247,8 @@ infixr 6 cons as :
246
247
-- | snoc [1, 2, 3] 4 = [1, 2, 3, 4]
247
248
-- | ```
248
249
-- |
249
- foreign import snoc :: forall a . Array a -> a -> Array a
250
+ snoc :: forall a . Array a -> a -> Array a
251
+ snoc xs x = ST .run (STA .withArray (STA .push x) xs)
250
252
251
253
-- | Insert an element into a sorted array.
252
254
-- |
@@ -742,7 +744,8 @@ foreign import slice :: forall a. Int -> Int -> Array a -> Array a
742
744
-- | take 100 letters = ["a", "b", "c"]
743
745
-- | ```
744
746
-- |
745
- foreign import take :: forall a . Int -> Array a -> Array a
747
+ take :: forall a . Int -> Array a -> Array a
748
+ take n xs = if n < 1 then [] else slice 0 n xs
746
749
747
750
-- | Keep only a number of elements from the end of an array, creating a new
748
751
-- | array.
@@ -777,7 +780,8 @@ takeWhile p xs = (span p xs).init
777
780
-- | drop 10 letters = []
778
781
-- | ```
779
782
-- |
780
- foreign import drop :: forall a . Int -> Array a -> Array a
783
+ drop :: forall a . Int -> Array a -> Array a
784
+ drop n xs = if n < 1 then xs else slice n (length xs) xs
781
785
782
786
-- | Drop a number of elements from the end of an array, creating a new array.
783
787
-- |
0 commit comments