私は、いくつかのコンテナに非常に似た機能セットがあることを知りました。 List、Set、Sequence、Text、およびBytestringなどがあります。私はなぜ彼らが1つ以上の一般的なタイプメーターを使用しないのだろうかと思います。コンテナ型のtypeclassがないのはなぜですか?
答えて
実際には、質問Making a single function work on lists, ByteStrings and Texts (and perhaps other similar representations)がありますが、それはあなたのものとほぼ同じです。
別のパッケージに含まれている主な理由は、関数の依存関係や型のファミリのいずれかの言語拡張が必要なことが考えられます。 Text
にはChar
が含まれ、ByteString
にはWord8
が含まれ、[]
には任意のタイプを含めることができ、Set
にはOrd
のインスタンスのみを含めることができます。リストのような
共通の機能セットは何ですか? AFAICSは、複数のコンテナを1つのコンテナに結合し、空のコンテナを生成する機能のみをサポートします。そして確かに、彼らはすべて正確にそのインターフェイスを提供するMonoid
です!
いくつかは多型であるため、これらのすべてでは何もできません。
多形コンテナ、Sequence、MaybeとMapはFunctor、FoldableとTraversable型クラスのインスタンスです。 Setについては
オードインスタンスは、それは不可能(あなたがファンクタの法則に従うでしょうfmap
(Data.Set.map)を定義することができますが、それの署名は引数にオードインスタンスを必要とする)他の人を定義することを可能にするよう、あなたは、唯一のFoldableを持っています。
前述のように、TextとBytestringは同じような型定義のインスタンスにすることができますが、関数の依存関係や型のファミリが必要になります。
[Set _is_ monoid](http://hackage.haskell.org/packages/archive/containers/0.5.2.1/doc/html/src/Data-Set-Base.html#line-231):そのクラスはポリモーフィック関数/含まれている型はインスタンスの頭に固定されていますが、そこに単相性のコンテナとして動作します。 - ちなみに、[Functor/Applicative/Monad](http://copilotco.com/mail-archives/haskell-cafe.2007/msg00051.html)も同様に賢明な方法があります。 Ord'インスタンスをGADTにバインドする必要があります。 – leftaroundabout
真実、良い点。 – phadej
Set and Functorの詳細:http://dorchard.wordpress.com/2011/10/18/subcategories-in-haskell-exofunctors/ – phadej
- 1. typeclassではなくconcrete型の `instance`ですか?
- 2. コンテナが開始しないのはなぜですか?
- 3. 静的サイズの配列型をコンテナ型にできないのはなぜですか?
- 4. NotImplementedTypeが型サブクラスではないのはなぜですか?
- 5. Dockerコンテナ内のネットワーク/インターネットが遅いのはなぜですか?
- 6. Jackson2JsonMessageConverterのAmqpChannelFactoryBeanにストア型がないのはなぜですか?
- 7. ドッキング・コンテナにpingできないのはなぜですか?
- 8. なぜLaravelにDIコンテナがないのですか?
- 9. ブール型のデータ型がMySQLで動作しないのはなぜですか?
- 10. Javaの反復型パラメータ型がオーバーライドできないのはなぜですか?
- 11. 私はなぜiocコンテナが必要なのですか
- 12. 文字型の値に型がないのはなぜですか?
- 13. innerContainerが外部コンテナを埋めていないのはなぜですか?
- 14. htmlのコンテナが背景色を表示しないのはなぜですか?
- 15. コンテナ内のdivがフッターに重なっているのはなぜですか?
- 16. コンテナの子にパースペクティブが適用されないのはなぜですか?
- 17. @PostConstructがSpringコンテナで呼び出されないのはなぜですか?
- 18. なぜDuplicateRecordFieldsに型推論ができないのですか?
- 19. select2コンテナがビューソースに表示されないのはなぜですか?
- 20. nullがNullable <>型のインスタンスではないのはなぜですか?
- 21. numpyのデータ型がJSONシリアライザブルなのはなぜですか?
- 22. この型の変数があいまいなのはなぜですか?
- 23. 子コンテナが親に影響するのはなぜですか
- 24. List [Int、Int]が有効なScala型でないのはなぜですか?
- 25. なぜ型キャストが機能しないのですか
- 26. なぜHaskellに `Cofunctor`型式がないのですか?
- 27. なぜ関数定義に型がないのですか?
- 28. IoC/DIコンテナが「コンテナ」と呼ばれるのはなぜですか?
- 29. 私のファイルをドッカーのコンテナにコピーできないのはなぜですか?
- 30. コンテナの高さが更新されなかったのはなぜですか?
実際にはそうです。しかし、 "一般的なタイプメス"のリストは、通常、 "Monoid"、 "Functor"、そして時には "ListLike"に限られています。私はそれが他のクラスが存在しないか、十分に一般的でないためだと思います。 – Yuras
ところで、それらのすべてを抽象化する方法を見つけたライブラリの 'lens'パッケージを見てください。しかし、それは新しいタイプキャスティングでは、あなたが考えるかもしれない方法ではありません。 – Carl
@Yuras - コンテナはTraversableとFoldableをサポートしている必要があります。 –