こんにちは
表題の件ですが、バグかな?と思うのですが、少し自信がないのでpull reqやissue立てる前にここに投稿してみました。
ekmett/semigroupoidsには、この前投稿した
ように、Comonadと関連するExtendというclassがありますが
これの、Data.Sequenceのインスタンスの定義についてです。
まずListの場合は
duplicated = init . tails
となっています。
たとえば
duplicated [1,2,3]
だと、結果は
[[1,2,3],[2,3],[3]]
ですよね。
一方 Data.Sequence のほうは単に
duplicated = Seq.tails
となっていて、
duplicated (Data.Sequence.fromList [1,2,3])
を呼ぶと、
fromList [fromList [1,2,3],fromList [2,3],fromList [3],fromList []]
となり、最後に空のSeqが入るはずです。
まずこの定義の違いに気づいて、この定義の違いがあえて意図したものではないのなら、
ListかSequenceのインスタンスの定義のどちらかはバグだと思うのです。
そして、おそらくData.Sequenceのほうの定義がバグだと思う理由が以下です。
このコミットのメッセージで
「duplicate [] bugfix」
と言っていて、昔はListのほうも単に
duplicate = tails
だったものを、現在のかたちに本人が修正しています
そして、具体的に例がちょっと出せないのですが、おそらくここに書いてあるExtendのlaw
を、現在のData.SequenceのExtendの
instance Extend Seq where
duplicated = Seq.tails
という定義では満たさない気がします。
というわけで、なんでもいいので意見をもらえるとありがたいです。