
No, it would not be feasible to have it return a Maybe; usability
would go down the drain. My preferred total alternative would be to
drop the bounds check in that spec, so
insertAt (-1) 99 [1,2,3] === [99,1,2,3]
insertAt 12 99 [1,2,3] === [1,2,3,99]
The only potential concern is that trying to insert at an out-of-range
index seems likely to be a mistake someone might want to get an error
message about. There are a number of other functions in Data.Sequence
that are partial in similar ways; I'm very open to making them total,
but the previous maintainers were concerned about losing useful
errors.
On Sun, May 29, 2016 at 6:10 PM, Ivan Lazar Miljenovic
On 30 May 2016 at 06:32, David Feuer
wrote: I've come up with an implementation of
insertAt :: Int -> a -> Seq a -> Seq a -- Defined to be equivalent to insertAt i x xs | i < 0 || i > length xs = error "insertAt: index out of range" | otherwise = take i xs <> singleton x <> drop i xs
that inserts the given element at the given index with very little tree restructuring. I came up with the vague notion that it might be interesting to try to do something like this early last year, but I wasn't sure how at the time. I largely forgot about it until today, when someone on StackOverflow pointed to the issue I'd opened and asked if it would be implemented, presumably because he wants it. What do y'all think?
The partiality is a little troubling; would it be feasible from a usage point of view to have this function return a Maybe?
-- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com http://IvanMiljenovic.wordpress.com