From f52716107a5de825c95e2bfdccf6b40077632825 Mon Sep 17 00:00:00 2001 From: Michael Xavier Date: Fri, 23 Jan 2015 18:37:15 -0800 Subject: [PATCH] Add takeWhile and dropWhile --- README.md | 4 ++++ src/Data/Array.purs | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/README.md b/README.md index ef131fdb..f08f2633 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ drop :: forall a. Number -> [a] -> [a] + dropWhile :: forall a. (a -> Boolean) -> [a] -> [a] + elemIndex :: forall a. (Eq a) => a -> [a] -> Number elemLastIndex :: forall a. (Eq a) => a -> [a] -> Number @@ -107,6 +109,8 @@ take :: forall a. Number -> [a] -> [a] + takeWhile :: forall a. (a -> Boolean) -> [a] -> [a] + updateAt :: forall a. Number -> a -> [a] -> [a] zipWith :: forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] diff --git a/src/Data/Array.purs b/src/Data/Array.purs index 63ba99ff..283a277a 100644 --- a/src/Data/Array.purs +++ b/src/Data/Array.purs @@ -41,6 +41,8 @@ module Data.Array , group' , groupBy , span + , dropWhile + , takeWhile ) where import Control.Alt @@ -354,6 +356,12 @@ span = go [] go acc p (x:xs) | p x = go (x:acc) p xs go acc _ xs = { init: reverse acc, rest: xs } +takeWhile :: forall a. (a -> Boolean) -> [a] -> [a] +takeWhile p xs = (span p xs).init + +dropWhile :: forall a. (a -> Boolean) -> [a] -> [a] +dropWhile p xs = (span p xs).rest + instance functorArray :: Functor [] where (<$>) = map