List
doesn't support "random access", which means it takes more work to get, say, the fifth element from the list than the first element, and as a result there's no List.get nth list
function. One has to go all the way from the beginning (1 -> 2 -> 3 -> 4 -> 5
).
If you need random access, you might get better results (and performance) with random access data structures, like Array
, where taking the first element takes the same amount of work as taking, say, the 1000th. (complexity O(1)).
Nevertheless, it's possible (but discouraged) to get nth element:
get : Int -> List a -> Maybe a
get nth list =
list
|> List.drop (nth - 1)
|> List.head
fifth : Maybe Int
fifth = get 5 [1..10]
-- = Just 5
nonexistent : Maybe Int
nonexistent = get 5 [1..3]
-- = Nothing
Again, this takes significantly more work the bigger the nth
argument is.