diff --git a/prelude/__internal__/List.mad b/prelude/__internal__/List.mad index e9113fbf..94caf449 100644 --- a/prelude/__internal__/List.mad +++ b/prelude/__internal__/List.mad @@ -115,8 +115,10 @@ export repeat = (a, count) => count <= 0 ? [] : [a, ...repeat(a, count - 1)] * @example * repeatWith((i) => show(i), 3) // ["0", "1", "2"] */ -repeatWith :: (Integer -> a) -> Integer -> List a + +repeatWith :: (Comparable n, Number n) => (n -> a) -> n -> List a export repeatWith = (f, count) => { + helper :: (Comparable n, Number n) => n -> a helper = (index) => index >= count ? [] : [f(index), ...helper(index + 1)] return helper(0) @@ -124,15 +126,15 @@ export repeatWith = (f, count) => { /** - * Return a list of integers within the given range. The start + * Return a list of numbers within the given range. The start * parameter is inclusive and the end parameter is exclusive. * * @since 0.12.0 * @example * range(3, 3) // [] - * range(3, 5) // [3, 4] + * range(3_s, 6_s) // [3_s, 4_s, 5_s] */ -range :: Integer -> Integer -> List Integer +range :: (Comparable n, Number n) => n -> n -> List n export range = (start, end) => repeatWith((i) => i + start, end - start) diff --git a/prelude/__internal__/List.spec.mad b/prelude/__internal__/List.spec.mad index 5c2d942c..1e330d80 100644 --- a/prelude/__internal__/List.spec.mad +++ b/prelude/__internal__/List.spec.mad @@ -220,6 +220,9 @@ test("takeWhile", () => assertEquals(takeWhile((x) => x < 5, [1, 2, 3, 4, 5, 6]) test("reverse", () => assertEquals(reverse([1, 2, 3]), [3, 2, 1])) test("range", () => assertEquals(range(3, 7), [3, 4, 5, 6])) +test("range - short", () => assertEquals(range(3_s, 7_s), [3_s, 4_s, 5_s, 6_s])) +test("range - float", () => assertEquals(range(3.0, 7.0), [3.0, 4.0, 5.0, 6.0])) +test("range - byte", () => assertEquals(range(3_b, 7_b), [3_b, 4_b, 5_b, 6_b])) test("range - same start and end", () => assertEquals(range(3, 3), []))