4

次の関数を構築することは可能だろうか

ix :: (Applicative a, Traversable t) => Int -> (v -> a v) -> (t v -> a (t v))

が使用さpureれる i 番目を除くすべての要素を使用v -> a vします (指定されたインデックスを持つ値のトラバーサル)。

基本的に、すべてのトラバーサブルに対して次の関数を一般化しようとしています。それとも無理ですか?Traversable は常にZipperに変換でき、一般化できると考えました。

idx _ _ []     = pure []
idx 0 f (x:xs) = (:xs) <$> f x
idx i f (x:xs) = (x:)  <$> idx (i - 1) f xs
4

1 に答える 1