为什么 Data.Sequence 中缺少 takeR、dropR 和 splitAtR?

Why are takeR, dropR and splitAtR missing from Data.Sequence?

Data.SequencetakeWhileRdropWhileR 用于从右边有效解构 Seqs。但是,takeRdropRsplitAtR 明显不存在。 takedrop 是根据 splitAt 实现的。那么,手指树是否不允许高效 splitAtR 或者是否由于其他原因未包含此功能?

(单独但有些相关的问题:就 viewR 而言,天真的 dropR 实施是否会表现得很好?)

此题基于containers-0.5.6.3

length 是 O(1),因此 splitAt 足以以高效的方式定义您需要的一切。

 splitAtR i s = splitAt (length s - i) s
 takeR i s = snd $ splitAtR i s
 dropR i s = fst $ splitAtR i s

根据文档,splitAt 成本 O(log(min(i,length s-i))),因此根据对称性 splitAtR 成本相同(只是额外的 +O(1),我们可以忽略)。