3
Slicing Itに、Conor McBrideはインデックス付きファンクタを開発し、その合計と製品をスライド「Sum and Product」(スライドのラベルは表示されず、プレゼンテーションの約90%)に表示します。このスライドは、特にインデックス付きファンクタの合計
-- sum - choose between compatible structures
data (:+:) :: (i ->- o) -> (i ->- o) -> (i ->- o) where
L :: s x :-> (s :+: t) x
R :: t x :-> (s :+: t) x
instance (IFunctor s, IFunctor t) => IFunctor (s :+: t) where
imap f (L sx) = L (imap f sx)
imap f (R tx) = R (imap f tx)
を開始し、:+:
のこの定義は、両方のインデックス付きファンクタが同じソースインデックスi
を有することを必要とします。なぜこれが当てはまるのだろうか。これは、例えば緩和することができる。
-- sum - choose between compatible structures
data (:+:) :: (i ->- o) -> (j ->- o) -> (Either i j ->- o) where
L :: s x :-> (s :+: t) x
R :: t x :-> (s :+: t) x
どこi
とj
が可能になりましたさまざまな種類がありますか?
のように、型引数の代替(つまり、
Either
)を使用した場合、私の提案はうまくいくと思います。私は 'L :: s x - >(s:+:t)( 'Left x)'を期待しています – chi@chiそれは質問者が探している答えだと思います。 –
簡単な答えは、統一版は「選択」を「再索引付け」とは別に保つことです。提案されたものは*特定の*再索引付けであり、容易にコード化することができます。 (ちなみに、chiは間違いがありますが、入力インデックスの代わりに出力インデックスを修正していると思います)。私は後で適切な答えを書くようにしますが、実行しなければなりません。 – pigworker