hw7: exersize 2, part 2
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 24 Dec 2014 17:01:35 +0000 (22:31 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 24 Dec 2014 17:01:35 +0000 (22:31 +0530)
hw7/JoinList.hs

index 6ef51a89c42d9294a9c4e9684a7cd95cba988186..b7a4aeb949599db702dfd0696d9e4cd2a4261581 100644 (file)
@@ -30,3 +30,14 @@ indexJ _ (Single _ a) = Just a
 indexJ n (Append _ l r) | n < (getSize (size (tag l))) = indexJ n l
                         | otherwise = indexJ (n - getSize (size (tag l))) r
 
+-- 2. drop
+dropJ :: (Sized b, Monoid b) =>
+         Int -> JoinList b a -> JoinList b a
+dropJ 0 x = x
+dropJ _ Empty = Empty
+dropJ _ (Single _ _) = Empty
+dropJ n x | (getSize (size (tag x))) < n = Empty
+dropJ n (Append _ l r) | n > (getSize (size (tag l))) =
+                           dropJ (n - getSize (size (tag l))) r
+                       | otherwise = let lft = dropJ n l in
+                                     Append ((tag lft) `mappend` (tag r)) lft r