@@ -323,7 +323,6 @@ module Prelude where
323323module Data.Monoid where
324324
325325 import Prelude
326− import Data.Array (foldl)
327326
328327 infixr 6 <>
329328
@@ -339,9 +338,6 @@ module Data.Monoid where
339338 mempty = []
340339 (<>) = Data.Array.concat
341340
342− mconcat :: forall m. (Monoid m) => [m] -> m
343− mconcat = foldl (<>) mempty
344−
345341module Control.Applicative where
346342
347343 import Prelude
@@ -365,6 +361,7 @@ module Control.Monad where
365361
366362 import Prelude
367363 import Data.Array
364+ import Data.Traversable
368365
369366 replicateM :: forall m a. (Monad m) => Number -> m a -> m [a]
370367 replicateM 0 _ = return []
@@ -373,13 +370,6 @@ module Control.Monad where
373370 as <- replicateM (n - 1) m
374371 return (a : as)
375372
376− mapM :: forall m a b. (Monad m) => (a -> m b) -> [a] -> m [b]
377− mapM _ [] = return []
378− mapM f (a:as) = do
379− b <- f a
380− bs <- mapM f as
381− return (b : bs)
382−
383373 infixr 1 >=>
384374 infixr 1 <=<
385375
@@ -391,13 +381,6 @@ module Control.Monad where
391381 (<=<) :: forall m a b c. (Monad m) => (b -> m c) -> (a -> m b) -> a -> m c
392382 (<=<) = flip (>=>)
393383
394− sequence :: forall m a. (Monad m) => [m a] -> m [a]
395− sequence [] = return []
396− sequence (m:ms) = do
397− a <- m
398− as <- sequence ms
399− return (a : as)
400−
401384 join :: forall m a. (Monad m) => m (m a) -> m a
402385 join mm = do
403386 m <- mm
@@ -411,8 +394,8 @@ module Control.Monad where
411394 when true m = m
412395 when false _ = return {}
413396
414− zipWithM :: forall m a b c. (Monad m) => (a -> b -> m c) -> [a] -> [b] -> m [c]
415− zipWithM f xs ys = sequence $ zipWith f xs ys
397+ zipWithA :: forall m a b c. (Applicative m) => (a -> b -> m c) -> [a] -> [b] -> m [c]
398+ zipWithA f xs ys = sequence (zipWith f xs ys)
416399
417400module Data.Maybe where
418401
@@ -500,14 +483,6 @@ module Data.Array where
500483 map _ [] = []
501484 map f (x:xs) = f x : map f xs
502485
503− foldr :: forall a b. (a -> b -> a) -> a -> [b] -> a
504− foldr f a (b : bs) = f (foldr f a bs) b
505− foldr _ a [] = a
506−
507− foldl :: forall a b. (b -> a -> b) -> b -> [a] -> b
508− foldl _ b [] = b
509− foldl f b (a:as) = foldl f (f b a) as
510−
511486 foreign import length "function length(xs) {\
512487 \ return xs.length;\
513488 \}" :: forall a. [a] -> Number
@@ -1317,6 +1292,9 @@ module Data.Foldable where
13171292 sequence_ :: forall a f m. (Applicative m, Foldable f) => f (m a) -> m {}
13181293 sequence_ = traverse_ id
13191294
1295+ mconcat :: forall f m. (Foldable f, Monoid m) => f m -> m
1296+ mconcat = foldl (<>) mempty
1297+
13201298module Data.Traversable where
13211299
13221300 import Prelude