File tree Expand file tree Collapse file tree 1 file changed +9
-0
lines changed Expand file tree Collapse file tree 1 file changed +9
-0
lines changed Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import Data.Array.NonEmpty as NEA
1010import Data.Identity (Identity )
1111import Data.Lens.Internal.Wander (wander )
1212import Data.Lens.Types (Traversal' )
13+ import Data.List (List (..), (:))
1314import Data.Map as M
1415import Data.Maybe (Maybe , maybe , fromMaybe )
1516import Data.Set as S
@@ -76,6 +77,14 @@ instance indexNonEmptyArray :: Index (NEA.NonEmptyArray a) Int a where
7677 (pure xs)
7778 (coalg >>> map \x -> fromMaybe xs (NEA .updateAt n x xs))
7879
80+ instance indexList :: Index (List a ) Int a where
81+ ix n | n < 0 = wander \_ xs -> pure xs
82+ | otherwise = wander \coalg xs -> go xs n coalg where
83+ go :: forall f . Applicative f => List a -> Int -> (a -> f a ) -> f (List a )
84+ go Nil _ _ = pure Nil
85+ go (a:as) 0 coalg = coalg a <#> (_:as)
86+ go (a:as) i coalg = (a:_) <$> (go as (i - 1 ) coalg)
87+
7988instance indexSet :: Ord a => Index (S.Set a ) a Unit where
8089 ix x =
8190 wander \coalg ->
You can’t perform that action at this time.
0 commit comments