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

Jan*_*erg 6 containers haskell sequence

Data.Sequence拥有takeWhileRdropWhileR用于高效解构Seq从右侧秒.然而takeR,dropRsplitAtR是显眼.takedrop以实施方式实施splitAt.那么,手指树不能承认效率splitAtR还是因为某些其他原因而不包含此功能?

(单独但有些相关的问题:dropRviewR表现得相当好的情况下,天真的实施会不会很好?)

这个问题是基于containers-0.5.6.3.

chi*_*chi 8

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
Run Code Online (Sandbox Code Playgroud)

根据文档,splitAt成本O(log(min(i,length s-i))),所以通过对称splitAtR成本相同(只是一个额外的+O(1),我们可以忽略).