一部のコンテナには非常によく似た機能セットがあることがわかりました。たとえば、リスト、セット、シーケンス、テキスト、およびバイト文字列です。なぜ彼らは 1 つまたは複数の一般的な型クラスを使用しないのだろうか。
3 に答える
9
どのような共通機能セットがありますか? AFAICS、複数のコンテナーを単一のコンテナーに結合し、空のコンテナーを生成する機能のみ。そして見よ、実際にそれらはすべてMonoid
であり、まさにそのインターフェースを提供します!
いくつかはポリモーフィックであり、いくつかはモノモーフィックであるため、これらすべてに対して他に何もすることはできません。
于 2013-07-17T16:19:10.243 に答える
3
list 、Sequence、Maybe、Mapなどのポリモーフィック コンテナーは、 Functor、Foldable 、およびTraversable型クラスのインスタンスです。
Setの場合、 Foldable しかありません。 Ordインスタンスでは他のものを定義できません(ファンクターの法則に従うfmap
( Data.Set.map ) を定義できますが、署名には引数に Ord インスタンスが必要です)。
前に述べたように、Text と Bytestring は、定義された同様の型クラスのインスタンスにすることができますが、機能的な依存関係または型ファミリのいずれかが必要になります。
于 2013-07-18T16:59:41.177 に答える