Haskell 为什么takeR、Drop和splitAtR在数据序列中缺失?

Haskell 为什么takeR、Drop和splitAtR在数据序列中缺失?,haskell,containers,sequence,Haskell,Containers,Sequence,Data.Sequence具有takeWhileR和dropWhileR,用于从右侧有效解构Seqs。然而,takeR、drop和splitAtR明显缺失获取和删除是根据拆分实现的。那么,手指树是否不允许使用有效的splitAtR,或者由于其他原因没有包含此功能 (独立但有点相关的问题:就viewR而言,一个天真的drop实现是否会表现良好?) 这个问题的基础是。是O(1),因此splitAt足以有效地定义您需要的所有内容 splitAtR i s = splitAt (length s -

Data.Sequence
具有
takeWhileR
dropWhileR
,用于从右侧有效解构
Seq
s。然而,
takeR
drop
splitAtR
明显缺失<代码>获取和
删除
是根据
拆分
实现的。那么,手指树是否不允许使用有效的
splitAtR
,或者由于其他原因没有包含此功能

(独立但有点相关的问题:就
viewR
而言,一个天真的
drop
实现是否会表现良好?)

这个问题的基础是。

是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,长度s-i))
,因此对称
splitAtR的成本相同(只是额外的
+O(1)
,我们可以忽略)。

@dfeuer将是数据序列方面的专家,虽然我不知道是否可以这样通知他。Github问题:。这是一个非常好的观点,非常感谢。我会问@dfeur为什么这些定义不在库中。