From e2ce8e0c7189edae2f602ee35ca2d3e971f00cf1 Mon Sep 17 00:00:00 2001 From: Tom Date: Sun, 28 May 2017 11:54:35 +0100 Subject: [PATCH] Add `extend` instance for `Array` While being defined for `List`, the `Array` primitive didn't previously have a defined `Extend` instance. This has been added. --- src/Control/Extend.js | 9 +++++++++ src/Control/Extend.purs | 5 +++++ 2 files changed, 14 insertions(+) create mode 100644 src/Control/Extend.js diff --git a/src/Control/Extend.js b/src/Control/Extend.js new file mode 100644 index 0000000..05c8ecf --- /dev/null +++ b/src/Control/Extend.js @@ -0,0 +1,9 @@ +"use strict"; + +exports.arrayExtend = function(f) { + return function(xs) { + return xs.map(function (_, i, xs) { + return f(xs.slice(i)); + }); + }; +}; diff --git a/src/Control/Extend.purs b/src/Control/Extend.purs index a47046f..28e1523 100644 --- a/src/Control/Extend.purs +++ b/src/Control/Extend.purs @@ -27,6 +27,11 @@ class Functor w <= Extend w where instance extendFn :: Semigroup w => Extend ((->) w) where extend f g w = f \w' -> g (w <> w') +foreign import arrayExtend :: forall a b. (Array a -> b) -> Array a -> Array b + +instance extendArray :: Extend Array where + extend = arrayExtend + infixr 1 extend as <<= -- | A version of `extend` with its arguments flipped.