ekmett/semigroupoids のバグ?

68 views
Skip to first unread message

Kenji Yoshida

unread,
Jun 8, 2013, 12:58:30 PM6/8/13
to haske...@googlegroups.com
こんにちは

表題の件ですが、バグかな?と思うのですが、少し自信がないので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

という定義では満たさない気がします。


というわけで、なんでもいいので意見をもらえるとありがたいです。

Kenji Yoshida

unread,
Jun 11, 2013, 6:03:56 AM6/11/13
to haske...@googlegroups.com
自分の予想どおりのbugだったようで、issue報告したら修正されました
Reply all
Reply to author
Forward
0 new messages