module Taskell.Data.Seq where import ClassyPrelude import Data.Sequence (deleteAt, insertAt, mapWithIndex, (!?)) (<#>) :: (Int -> a -> b) -> Seq a -> Seq b (<#>) = mapWithIndex extract :: Int -> Seq a -> Maybe (Seq a, a) extract idx xs = (,) (deleteAt idx xs) <$> xs !? idx shiftBy :: Int -> Int -> Seq a -> Maybe (Seq a) shiftBy idx dir xs = do (a, current) <- extract idx xs pure $ insertAt (idx + dir) current a bound :: Seq a -> Int -> Int bound s i | i < 0 = 0 | i >= length s = pred (length s) | otherwise = i