Proposal: Add insertAt to Data.Sequence

David Feuer david.feuer at
Sun May 29 22:26:59 UTC 2016

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

On Sun, May 29, 2016 at 6:10 PM, Ivan Lazar Miljenovic
<ivan.miljenovic at> wrote:
> On 30 May 2016 at 06:32, David Feuer <david.feuer at> 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 at

More information about the Libraries mailing list