|
28 | 28 | -- | allowing you to iterate over an array and accumulate effects.
|
29 | 29 | -- |
|
30 | 30 | module Data.Array
|
31 |
| - ( singleton |
| 31 | + ( fromFoldable |
| 32 | + , toUnfoldable |
| 33 | + , singleton |
32 | 34 | , (..), range
|
33 | 35 | , replicate
|
34 | 36 | , replicateM
|
35 | 37 | , some
|
36 | 38 | , many
|
37 |
| - , fromFoldable |
38 | 39 |
|
39 | 40 | , null
|
40 | 41 | , length
|
@@ -112,9 +113,24 @@ import Data.Foldable (class Foldable, foldl, foldr)
|
112 | 113 | import Data.Maybe (Maybe(..), maybe, isJust, fromJust)
|
113 | 114 | import Data.Traversable (sequence)
|
114 | 115 | import Data.Tuple (Tuple(..))
|
| 116 | +import Data.Unfoldable (class Unfoldable, unfoldr) |
115 | 117 |
|
116 | 118 | import Partial.Unsafe (unsafePartial)
|
117 | 119 |
|
| 120 | +-- | Convert an `Array` into an `Unfoldable` structure. |
| 121 | +toUnfoldable :: forall f a. Unfoldable f => Array a -> f a |
| 122 | +toUnfoldable = unfoldr $ uncons' (const Nothing) (\h t -> Just (Tuple h t)) |
| 123 | + |
| 124 | +-- | Convert a `Foldable` structure into an `Array`. |
| 125 | +fromFoldable :: forall f a. Foldable f => f a -> Array a |
| 126 | +fromFoldable = fromFoldableImpl foldr |
| 127 | + |
| 128 | +foreign import fromFoldableImpl |
| 129 | + :: forall f a |
| 130 | + . (forall b. (a -> b -> b) -> b -> f a -> b) |
| 131 | + -> f a |
| 132 | + -> Array a |
| 133 | + |
118 | 134 | -- | Create an array of one element
|
119 | 135 | singleton :: forall a. a -> Array a
|
120 | 136 | singleton a = [a]
|
@@ -149,12 +165,6 @@ some v = (:) <$> v <*> defer (\_ -> many v)
|
149 | 165 | many :: forall f a. (Alternative f, Lazy (f (Array a))) => f a -> f (Array a)
|
150 | 166 | many v = some v <|> pure []
|
151 | 167 |
|
152 |
| --- | Construct an `Array` from any `Foldable` structure. |
153 |
| -fromFoldable :: forall f a. (Foldable f) => f a -> Array a |
154 |
| -fromFoldable = fromFoldableImpl foldr |
155 |
| - |
156 |
| -foreign import fromFoldableImpl :: forall f a. (forall b. (a -> b -> b) -> b -> f a -> b) -> f a -> Array a |
157 |
| - |
158 | 168 | --------------------------------------------------------------------------------
|
159 | 169 | -- Array size ------------------------------------------------------------------
|
160 | 170 | --------------------------------------------------------------------------------
|
|
0 commit comments