Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Breaking changes:
New features:

Bugfixes:
- Avoid `RangeError` in `arrayBind` foreign implementation (#314 by @pete-murphy)

Other improvements:

Expand Down
15 changes: 12 additions & 3 deletions src/Control/Bind.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
export const arrayBind = function (arr) {
if (typeof Array.prototype.flatMap === "function") {
return function (f) {
return arr.flatMap(f);
};
}

return function (f) {
var result = [];
for (var i = 0, l = arr.length; i < l; i++) {
Array.prototype.push.apply(result, f(arr[i]));
const result = [];
for (let i = 0, l = arr.length; i < l; i++) {
const xs = f(arr[i]);
for (let j = 0, m = xs.length; j < m; j++) {
result.push(xs[j]);
}
}
return result;
};
Expand Down
8 changes: 8 additions & 0 deletions test/Test/Main.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,11 @@ export function testNumberShow(showNumber) {
]);
};
}

export function makeArray(length) {
var arr = [];
for (var i = 0; i < length; i++) {
arr.push(i);
}
return arr;
}
12 changes: 12 additions & 0 deletions test/Test/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ main = do
testReflectType
testReifyType
testSignum
testArrayBind

foreign import testNumberShow :: (Number -> String) -> AlmostEff

Expand Down Expand Up @@ -189,3 +190,14 @@ testSignum = do
assert "signum positive zero" $ show (1.0/(signum 0.0)) == "Infinity"
assert "Clarifies what 'signum negative zero' test is doing" $ show (1.0/(-0.0)) == "-Infinity"
assert "signum negative zero" $ show (1.0/(signum (-0.0))) == "-Infinity"

foreign import makeArray :: Int -> Array Int

testArrayBind :: AlmostEff
testArrayBind = do
assert "Array bind does not cause RangeError" do
let
_ = do
_ <- [unit]
makeArray 106_000
true