module ListRequest where
default (Int)
data ListRequest a
= ReplaceItems Int Int [a]
| HighlightItems [Int]
| PickItem Int
listEnd :: Int
listEnd = -Int
1
replaceAll :: [a] -> ListRequest a
replaceAll = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
0 Int
listEnd
replaceAllFrom :: Int -> [a] -> ListRequest a
replaceAllFrom Int
from = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
from Int
listEnd
deleteItems :: Int -> Int -> ListRequest a
deleteItems Int
from Int
cnt = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
from Int
cnt []
insertItems :: Int -> [a] -> ListRequest a
insertItems Int
from = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
from Int
0
appendItems :: [a] -> ListRequest a
appendItems = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
listEnd Int
listEnd
changeItems :: Int -> [a] -> ListRequest a
changeItems Int
from [a]
txt = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems Int
from ([a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
txt) [a]
txt
replaceItems :: Int -> Int -> [a] -> ListRequest a
replaceItems = Int -> Int -> [a] -> ListRequest a
forall a. Int -> Int -> [a] -> ListRequest a
ReplaceItems
highlightItems :: [Int] -> ListRequest a
highlightItems = [Int] -> ListRequest a
forall a. [Int] -> ListRequest a
HighlightItems
pickItem :: Int -> ListRequest a
pickItem = Int -> ListRequest a
forall a. Int -> ListRequest a
PickItem
applyListRequest :: ListRequest a -> [a] -> [a]
applyListRequest (ReplaceItems Int
from Int
cnt [a]
newtxt) [a]
oldtxt =
let before :: [a]
before = if Int
fromInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
listEnd
then [a]
oldtxt
else Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
from [a]
oldtxt
after :: [a]
after = if Int
fromInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
listEnd Bool -> Bool -> Bool
|| Int
cntInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
listEnd
then []
else Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop (Int
fromInt -> Int -> Int
forall a. Num a => a -> a -> a
+Int
cnt) [a]
oldtxt
in [a]
before[a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++[a]
newtxt[a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++[a]
after
applyListRequest ListRequest a
_ [a]
oldtxt = [a]
oldtxt