Haskell 使用镜头访问Data.Sequence.Seq

Haskell 使用镜头访问Data.Sequence.Seq,haskell,haskell-lens,Haskell,Haskell Lens,是否有任何方法可以使用镜头获得与数据列表中的功能类似的功能?例如,我在想类似的事情 isPrefixOf :: Eq a => Seq a -> Seq a -> Bool isSuffixOf :: Eq a => Seq a -> Seq a -> Bool 当然,这些函数可以在列表、向量等上运行。我认为lens可以做这类事情,但从Haddocks上看,这对我来说并不明显。这不是基于lens的答案,但是包中的typeclass提供了isSuffixOf,

是否有任何方法可以使用
镜头
获得与
数据列表
中的功能类似的功能?例如,我在想类似的事情

isPrefixOf :: Eq a => Seq a -> Seq a -> Bool
isSuffixOf :: Eq a => Seq a -> Seq a -> Bool

当然,这些函数可以在列表、向量等上运行。我认为
lens
可以做这类事情,但从Haddocks上看,这对我来说并不明显。

这不是基于lens的答案,但是包中的typeclass提供了
isSuffixOf
,并且提供了
isPrefixOf


List和Seq(以及许多其他容器)是这些typeclass的实例。

这不是基于镜头的答案,但包中的typeclass提供了
isSuffixOf
,并提供了
isPrefixOf


List和Seq(以及许多其他容器)是这些类型类的实例。

对于
isPrefixOf
isSuffixOf
,确实不需要镜头。只需使用
splitAt
,后跟
=
。或者使用danidiaz建议的软件包,它正是这样做的。@dfeur-我猜您指的是Data.Sequence.splitAt。这不是多态的,这是
镜头的一部分。即使是这样,它也不能直接替代
isSuffixOf
。对于
isPrefixOf
,您当然可以使用
Getter
(或者可能是
Fold
?)转换为列表,然后直接使用
isPrefixOf
。但是对于
isSuffixOf
,这将带来潜在的严重处罚。对于
isPrefixOf
isSuffixOf
来说,确实不需要镜片。只需使用
splitAt
,后跟
=
。或者使用danidiaz建议的软件包,它正是这样做的。@dfeur-我猜您指的是Data.Sequence.splitAt。这不是多态的,这是
镜头的一部分。即使是这样,它也不能直接替代
isSuffixOf
。对于
isPrefixOf
,您当然可以使用
Getter
(或者可能是
Fold
?)转换为列表,然后直接使用
isPrefixOf
。但对于
isSuffixOf
,这将带来潜在的严重处罚。