nth :: [a] -> Int -> a
nth (x:xs) n | n==0 = x
| n>0 = nth xs (n-1)
nth'nonfail :: [a] -> Int -> Bool
nth'nonfail xs n = n >= 0 && length (take (n+1) xs) == n+1
-- from the Prelude:
--- Computes the length of a list.
length :: [_] -> Int
length [] = 0
length (_:xs) = 1 + length xs
--- Returns prefix of length n.
take :: Int -> [a] -> [a]
take n l = if n<=0 then [] else takep n l
where
takep _ [] = []
takep m (x:xs) = x : take (m-1) xs