@@ -356,6 +356,7 @@ module Prelude where
356356module Data.Monoid where
357357
358358 import Prelude
359+ import Data.Array (foldl)
359360
360361 infixr 6 <>
361362
@@ -372,8 +373,7 @@ module Data.Monoid where
372373 (<>) = Data.Array.concat
373374
374375 mconcat :: forall m. (Monoid m) => [m] -> m
375− mconcat [] = mempty
376− mconcat (m:ms) = m <> mconcat ms
376+ mconcat = foldl (<>) mempty
377377
378378module Control.Monad where
379379
@@ -503,9 +503,9 @@ module Data.Array where
503503 foldr f a (b : bs) = f (foldr f a bs) b
504504 foldr _ a [] = a
505505
506− foldl :: forall a b. (a -> b -> b) -> b -> [a] -> b
506+ foldl :: forall a b. (b -> a -> b) -> b -> [a] -> b
507507 foldl _ b [] = b
508− foldl f b (a:as) = foldl f (f a b) as
508+ foldl f b (a:as) = foldl f (f b a) as
509509
510510 foreign import length "function length(xs) {\
511511 \ return xs.length;\
@@ -573,15 +573,38 @@ module Data.Array where
573573 \ return l1;\
574574 \}" :: forall a. [a] -> [a]
575575
576− foreign import splice "function splice(s) {\
577− \ return function(e) {\
578− \ return function(l1) {\
579− \ return function(l2) {\
580− \ return l2.splice(s, e, l1);\
581− \ }; \
582− \ }; \
583− \ };\
584− \}":: forall a. Number -> Number -> [a] -> [a] -> [a]
576+ foreign import insertAt
577+ "function insertAt(index) {\
578+ \ return function(a) {\
579+ \ return function(l) {\
580+ \ var l1 = l.slice();\
581+ \ l1.splice(index, 0, a);\
582+ \ return l1;\
583+ \ }; \
584+ \ };\
585+ \}":: forall a. Number -> a -> [a] -> [a]
586+
587+ foreign import deleteAt
588+ "function deleteAt(index) {\
589+ \ return function(n) {\
590+ \ return function(l) {\
591+ \ var l1 = l.slice();\
592+ \ l1.splice(index, n);\
593+ \ return l1;\
594+ \ }; \
595+ \ };\
596+ \}":: forall a. Number -> Number -> [a] -> [a]
597+
598+ foreign import updateAt
599+ "function updateAt(index) {\
600+ \ return function(a) {\
601+ \ return function(l) {\
602+ \ var l1 = l.slice();\
603+ \ l1[index] = a;\
604+ \ return l1;\
605+ \ }; \
606+ \ };\
607+ \}":: forall a. Number -> a -> [a] -> [a]
585608
586609 infixr 6 :
587610