3

私が理解していることから、Foldable基本的には、リスト、マップ、セットなど、反復可能な同じタイプの要素を多数持つ構造を表します。

Appendable要素を追加できる構造のような、またはInsertable基本的に構造を表すクラスはありますか? もちろん、要素が取得される順序の保証はありません。

すでにクラスがある場合は、自分でクラスを作成したくありません。

4

3 に答える 3

7

Data.Collectionsパッケージを見てください。Unfoldable次のメソッドを持つ型クラスが含まれています。

class Unfoldable c i | c -> i where
  insert :: i -> c -> c
  empty :: c
  singleton :: i -> c

また、 aから an にすべての要素を挿入するためのinsertManyandinsertManySortedメソッドも提供します。FoldableUnfoldable

タイプを両方のインスタンスにするFoldableUnfoldable、そこから要素を挿入および取得できます。

于 2012-07-11T16:44:32.360 に答える
3

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のクラスを使用します。これは、両方を.CollectionUnfoldableFoldable

于 2012-07-11T18:54:35.270 に答える
3

挿入自体はあまり賢明な概念ではないと思います。これを一般化するより良い方法があります。たとえばAlternative、賢明な型クラスがあります。pureの形式で、シングルトンといくつかの一般的なユニオン操作を取得し<|>ます。

于 2012-07-11T17:13:22.150 に答える