{-# LANGUAGE NoImplicitPrelude #-} module Data.Taskell.Seq where import ClassyPrelude import Data.Sequence (deleteAt, insertAt, (!?)) 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