>>> take 0 undefined [] >>> take 2 (1 : 2 : undefined) [1,2]
>>> take 5 "Hello World!" "Hello"
>>> take 3 [1,2,3,4,5] [1,2,3]
>>> take 3 [1,2] [1,2]
>>> take 3 [] []
>>> take (-1) [1,2] []
>>> take 0 [1,2] []
>>> drop 6 "Hello World!" "World!"
>>> drop 3 [1,2,3,4,5] [4,5]
>>> drop 3 [1,2] []
>>> drop 3 [] []
>>> drop (-1) [1,2] [1,2]
>>> drop 0 [1,2] [1,2]
takeExact n xs = | n >= 0 && n <= length xs = take n xs | otherwise = error "some message"
dropExact n xs = | n >= 0 && n <= length xs = drop n xs | otherwise = error "some message"
>>> take 5 "Hello World!" "Hello" >>> take 3 [1,2,3,4,5] [1,2,3] >>> take 3 [1,2] [1,2] >>> take 3 [] [] >>> take (-1) [1,2] [] >>> take 0 [1,2] []It is an instance of the more general genericTake, in which n may be of any integral type.
>>> drop 6 "Hello World!" "World!" >>> drop 3 [1,2,3,4,5] [4,5] >>> drop 3 [1,2] [] >>> drop 3 [] [] >>> drop (-1) [1,2] [1,2] >>> drop 0 [1,2] [1,2]It is an instance of the more general genericDrop, in which n may be of any integral type.
dropEnd 3 "hello" == "he" dropEnd 5 "bye" == "" dropEnd (-1) "bye" == "bye" \i xs -> dropEnd i xs `isPrefixOf` xs \i xs -> length (dropEnd i xs) == max 0 (length xs - max 0 i) \i -> take 3 (dropEnd 5 [i..]) == take 3 [i..]
takeEnd 3 "hello" == "llo" takeEnd 5 "bye" == "bye" takeEnd (-1) "bye" == "" \i xs -> takeEnd i xs `isSuffixOf` xs \i xs -> length (takeEnd i xs) == min (max 0 i) (length xs)
\n xs -> dropRev n (xs::String) == reverse (drop n (reverse xs))
\n xs -> takeRev n (xs::String) == reverse (take n (reverse xs))
>>> sieve 6 ['a'..'z'] "agmsy"
take 5 "Hello World!" == "Hello" take 3 [1,2,3,4,5] == [1,2,3] take 3 [1,2] == [1,2] take 3 [] == [] take (-1) [1,2] == [] take 0 [1,2] == []It is an instance of the more general genericTake, in which n may be of any integral type.
drop 6 "Hello World!" == "World!" drop 3 [1,2,3,4,5] == [4,5] drop 3 [1,2] == [] drop 3 [] == [] drop (-1) [1,2] == [1,2] drop 0 [1,2] == [1,2]It is an instance of the more general genericDrop, in which n may be of any integral type.
>>> cycleN 2 [1,2,3,4,5] [3,4,5,1,2] >>> cycleN (-2) [1,2,3,4,5] [4,5,1,2,3]
downsample 2 [ 1, 2, 3, 4, 5, 6 ] == [ 1, 3, 5 ]