(*) Remove the K'th element from a list.
removeAt :: Int -> [a] -> (a, [a]) removeAt k xs = case back of  -> error "removeAt: index too large" x:rest -> (x, front ++ rest) where (front, back) = splitAt k xs
If the original list has fewer than k+1 elements, the second list will be empty, and there will be no element to extract. Note that the Prolog and Lisp versions treat 1 as the first element in the list, and the Lisp version appends NIL elements to the end of the list if k is greater than the list length.
removeAt n xs = (xs!!n,take n xs ++ drop (n+1) xs)
Another solution that avoids throwing an error and using ++ operators. Treats 1 as the first element in the list.
removeAt :: Int -> [a] -> (Maybe a, [a]) removeAt _  = (Nothing, ) removeAt 1 (x:xs) = (Just x, xs) removeAt k (x:xs) = let (a, r) = removeAt (k - 1) xs in (a, x:r)