次の関数を構築することは可能だろうか
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