データベース操作のためのHaskell準拠のSQL言語と、それに合った共通のタイプのクラスライブラリに取り組んでいます。どこでも意味があります。Data.Fordable for Unordered containers
データベースクエリオプティマイザの重要な目的は、不要なソートを排除することなので、ソートが実際に必要な場所の静的な表現を保持することが重要です。これは折り目のためのtypeclassの定義に私たちをもたらします。
HaskellのData.Foldable
あります
class Foldable t where
-- | Combine the elements of a structure using a monoid.
fold :: Monoid m => t m -> m
-- | Map each element of the structure to a monoid,
-- and combine the results.
foldMap :: Monoid m => (a -> m) -> t a -> m
-- | Right-associative fold of a structure.
foldr :: (a -> b -> b) -> b -> t a -> b
-- | Left-associative fold of a structure.
foldl :: (a -> b -> a) -> a -> t b -> a
-- | A variant of 'foldr' that has no base case,
-- and thus may only be applied to non-empty structures.
foldr1 :: (a -> a -> a) -> t a -> a
-- | A variant of 'foldl' that has no base case,
-- and thus may only be applied to non-empty structures.
foldl1 :: (a -> a -> a) -> t a -> a
このクラスは実用的な目的のために、ある区別を無視するように私には思わない(ポイント私は作ってるんだと関連していないデフォルトの定義をeliding)ほとんどのHaskellアプリケーションにとって非常に重要ですが、データベース設定にはもっと関心があります。すべてのData.Foldable
インスタンスには注文があります。
要素に順序付けを行わないコンテナタイプに適用されるこのコンセプトの一般化の名前は何ですか?
の場合Haskell Data.Set
の場合、実装で要求されるコンテキストはOrd
なので、うまくいきます。しかし、多くの有用な型では、使用される順序付けにドメインレベルの意味がない場合があります。
もっと一般的には、fold :: Monoid m => t m -> m
の定義自体はほとんど正しいです(つまりfoldMap
)。私は主にそのタイプに連合性の法則(Monoid
の定義による)が含まれているが、要求される共通性の法則が含まれていないために言います。他の変種は存在しません。
ソートを必要としない場所に導入したくありません。私はまた、不確定性を追跡することができないことを紹介したくありません。人々が集合/関係が物理的に保存されているかについて、実装の詳細を観察するために許可
- :それは間の二分法を紹介しますので、私は、どこにでも転がっ
toList :: Set a -> [a]
機能を持っていない言語とライブラリを構築するに興味があります - 効果明らか
両方sortBy :: (a -> a -> Ordering) -> Set a -> [a]
とshuffle :: Set a -> Data.Random.RVar [a]
は申し分のない、有用であり、含まれるように、非決定論のトラックを失います。実際には、sortBy
はさらに一般的なタイプがsortBy :: (TheUnorderedFoldableClassIAmTryingToName f) => (a -> a -> Ordering) -> f a -> [a]
です。
このアイデアは何と呼ばれていますか?私がベースから離れている場合、どこからベースパスを離れるのですか?