>>> fst (splitAt 0 undefined) []
>>> take 1 (fst (splitAt 10 (1 : undefined))) [1]
>>> splitAt 6 "Hello World!" ("Hello ","World!")
>>> splitAt 3 [1,2,3,4,5] ([1,2,3],[4,5])
>>> splitAt 1 [1,2,3] ([1],[2,3])
>>> splitAt 3 [1,2,3] ([1,2,3],[])
>>> splitAt 4 [1,2,3] ([1,2,3],[])
>>> splitAt 0 [1,2,3] ([],[1,2,3])
>>> splitAt (-1) [1,2,3] ([],[1,2,3])
splitAtExact n xs = | n >= 0 && n <= length xs = splitAt n xs | otherwise = error "some message"
splitAtEnd 3 "hello" == ("he","llo") splitAtEnd 3 "he" == ("", "he") \i xs -> uncurry (++) (splitAt i xs) == xs \i xs -> splitAtEnd i xs == (dropEnd i xs, takeEnd i xs)
>>> splitAt 6 "Hello World!" ("Hello ","World!") >>> splitAt 3 [1,2,3,4,5] ([1,2,3],[4,5]) >>> splitAt 1 [1,2,3] ([1],[2,3]) >>> splitAt 3 [1,2,3] ([1,2,3],[]) >>> splitAt 4 [1,2,3] ([1,2,3],[]) >>> splitAt 0 [1,2,3] ([],[1,2,3]) >>> splitAt (-1) [1,2,3] ([],[1,2,3])It is equivalent to (take n xs, drop n xs) when n is not _|_ (splitAt _|_ xs = _|_). splitAt is an instance of the more general genericSplitAt, in which n may be of any integral type.
\n xs -> splitAtRev n (xs::String) == (dropRev n xs, takeRev n xs)
\n xs -> (xs::String) == uncurry (++) (splitAtRev n xs)
splitAt 6 "Hello World!" == ("Hello ","World!") splitAt 3 [1,2,3,4,5] == ([1,2,3],[4,5]) splitAt 1 [1,2,3] == ([1],[2,3]) splitAt 3 [1,2,3] == ([1,2,3],[]) splitAt 4 [1,2,3] == ([1,2,3],[]) splitAt 0 [1,2,3] == ([],[1,2,3]) splitAt (-1) [1,2,3] == ([],[1,2,3])It is equivalent to (take n xs, drop n xs) when n is not _|_ (splitAt _|_ xs = _|_). splitAt is an instance of the more general genericSplitAt, in which n may be of any integral type.