私はtype-aligned sequenceで遊んでいます。特に、それらを折りたたむというアイデアをいじっています。折り畳み可能な型整列シーケンスは次のようになります。
class FoldableTA fm where
foldMapTA :: Category h =>
(forall b c . a b c -> h b c) ->
fm a b d -> h b d
foldrTA :: (forall b c d . a c d -> h b c -> h b d) ->
h p q -> fm a q r -> h p r
foldlTA :: ...
最初に を使用して、単純な方法でシーケンスを型整列リストに変換し (つまり、型整列リスト カテゴリを使用)、次にそのリストを折りたたむfoldrTA
という点で、実装は非常に簡単です。残念ながら、長いリストは短いリストの前に追加される可能性があるため、これは非常に非効率的です。右と左の折り目をより効率的に定義するために使用したのと同様のトリックを使用する方法を見つけようとしていますが、そのタイプにはめまいがします。トリックを実行するのに十分なほど一般的ではないようであり、他の方向に進むたびに、追跡できるよりも多くの型変数につながります.foldMapTA
foldMapTA
Data.Foldable
Endo