私が理解していることから、Foldable
基本的には、リスト、マップ、セットなど、反復可能な同じタイプの要素を多数持つ構造を表します。
Appendable
要素を追加できる構造のような、またはInsertable
基本的に構造を表すクラスはありますか? もちろん、要素が取得される順序の保証はありません。
すでにクラスがある場合は、自分でクラスを作成したくありません。
Data.Collectionsパッケージを見てください。Unfoldable
次のメソッドを持つ型クラスが含まれています。
class Unfoldable c i | c -> i where
insert :: i -> c -> c
empty :: c
singleton :: i -> c
また、 aから an にすべての要素を挿入するためのinsertMany
andinsertManySorted
メソッドも提供します。Foldable
Unfoldable
タイプを両方のインスタンスにするFoldable
とUnfoldable
、そこから要素を挿入および取得できます。
Appendable
要素を追加できる構造のような、またはInsertable
基本的に構造を表すクラスはありますか?
「要素を追加する」の意味をより明確にしたいと思います。これには次の 2 つの方法があります。
class Insertable c where
-- Add one element to the collection.
insert :: a -> c a -> c a
class Appendable c where
-- Append a collection to another.
append :: c a -> c a -> c a
a
後者は、次のような操作を追加しない限り、コレクションへのローンの追加をサポートしていないことに注意してください。
class Pointed c where
singleton :: a -> c a
Appendable
インスタンスがある場合は、Pointed
次を定義できることに注意してくださいInsertable
。
instance (Appendable c, Pointed c) => Insertable c where
insert x xs = append (singleton x) xs
クラスは、コレクションの要素 (クラスなど) に実際にアクセスするためのInsertable
操作と共に、同様にインスタンスFoldable
を定義するために使用できます。Appendable
いずれにせよ、Appendable
上記のモック クラスは実際にMonoid
は変装しています。私も同様に、クリス・テイラーの提案されたクラスInsertable
の偽装バージョンと見なすことができます. ただし、そのパッケージUnfoldable
のクラスを使用します。これは、両方を.Collection
Unfoldable
Foldable
挿入自体はあまり賢明な概念ではないと思います。これを一般化するより良い方法があります。たとえばAlternative
、賢明な型クラスがあります。pure
の形式で、シングルトンといくつかの一般的なユニオン操作を取得し<|>
ます。