haskell-jp / questions #105 at 2023-12-06 23:30:46 +0900

Data.Sequenceを触っていた時に、ふとunconsやunsnocのような関数があれば便利かなと思ってcontainerで提案してみたのですが、viewlやviewr使えば実現できるのであまり本質的じゃない拡張っぽいみたいなレスポンスをもらいました(当然と言えば当然ですが)。

Data.Sequenceにunconsやunsnocがあったとしてどんなときに役立つか正直答えられる自信がないので、closeしようかなとも思っています。
このような既存の関数で表現できるような関数のライブラリへの必要性について皆さんはどう思いますでしょうか。お手柔らかにお願いします

https://github.com/haskell/containers/issues/977
同じことをする機能をライブラリーが何通りも提供するのは好みではないですね
理由としては、同じライブラリーを使ってるのに利用する人によって書き方がバラつくのがいやなのでですね
メンテナー視点では、機能は取り込んだ後メンテし続けないといけないので、できないことができるようになるとかじゃなければ、なるべくコンパクトにしておきたい
ぐらいかなあ
おっしゃる通りですね

たしかにライブラリをコンパクトにしておくとメンテナンスもしやすいですしユーザーも好みに合わせて色々拡張しやすいですよね。
ありがとうございます
私の場合は、
uncons :: Seq a -> Maybe (a, Seq a)unsnoc :: Seq a -> Maybe (Seq a, a) では、Seq でのパターンマッチかわりに、Maybe でパターンマッチになるだけなので、あまり有り難みがないです。それよりは、`seqL :: b -> (a -> Seq a -> b) -> Seq a -> b` とか、`seqR :: b -> (Seq a -> a -> b) -> Seq a -> b` があれば便利です。リストの場合も、`Data.List.uncons :: [a] -> Maybe (a, [a])` より、`Data.List.Extra.list :: b -> (a -> [a] -> b) -> [a] -> b` を使うことが多いですね。