|
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