blob: 7b9582f147624d65ec192157ebcb9b93b8bcea48 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
module TextViewport.Buffer.Buffer where
import Data.Sequence qualified as Seq
import TextViewport.Buffer.Item (Item)
newtype Buffer = Buffer { unBuffer :: Seq.Seq Item }
deriving (Eq, Show)
-- | Build a buffer from a list
fromList :: [Item] -> Buffer
fromList xs = Buffer (Seq.fromList xs)
-- | Modify an item at index
modifyItem :: Int -> (Item -> Item) -> Buffer -> Buffer
modifyItem ix f (Buffer xs) =
Buffer (Seq.adjust' f ix xs)
-- | Insert an item
insertItem :: Int -> Item -> Buffer -> Buffer
insertItem ix x (Buffer xs) =
Buffer (Seq.insertAt ix x xs)
-- | Delete an item
deleteItem :: Int -> Buffer -> Buffer
deleteItem ix (Buffer xs) =
Buffer (Seq.deleteAt ix xs)
-- | Append an item
appendItem :: Item -> Buffer -> Buffer
appendItem x (Buffer xs) =
Buffer (xs Seq.|> x)
-- | Extract underlying Seq (if needed)
toSeq :: Buffer -> Seq.Seq Item
toSeq (Buffer xs) = xs
|