module StringEdit( moveCursorHome,moveCursorEnd,extendCursorHome,extendCursorEnd, moveCursorRight, moveCursorLeft, extendCursorLeft,extendCursorRight, deleteItemRight, deleteItemLeft, deleteToEnd, deleteToHome, insertItem, insertItemsSelected, showField, getField, createField2, createField, Field) where data Field a = F [a] [a] [a] deriving (Field a -> Field a -> Bool forall a. Eq a => Field a -> Field a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Field a -> Field a -> Bool $c/= :: forall a. Eq a => Field a -> Field a -> Bool == :: Field a -> Field a -> Bool $c== :: forall a. Eq a => Field a -> Field a -> Bool Eq, Field a -> Field a -> Bool Field a -> Field a -> Ordering forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall {a}. Ord a => Eq (Field a) forall a. Ord a => Field a -> Field a -> Bool forall a. Ord a => Field a -> Field a -> Ordering forall a. Ord a => Field a -> Field a -> Field a min :: Field a -> Field a -> Field a $cmin :: forall a. Ord a => Field a -> Field a -> Field a max :: Field a -> Field a -> Field a $cmax :: forall a. Ord a => Field a -> Field a -> Field a >= :: Field a -> Field a -> Bool $c>= :: forall a. Ord a => Field a -> Field a -> Bool > :: Field a -> Field a -> Bool $c> :: forall a. Ord a => Field a -> Field a -> Bool <= :: Field a -> Field a -> Bool $c<= :: forall a. Ord a => Field a -> Field a -> Bool < :: Field a -> Field a -> Bool $c< :: forall a. Ord a => Field a -> Field a -> Bool compare :: Field a -> Field a -> Ordering $ccompare :: forall a. Ord a => Field a -> Field a -> Ordering Ord) createField :: [a] -> Field a createField [a] s = forall a. [a] -> [a] -> [a] -> Field a F [] [a] s [] createField2 :: ([a], [a]) -> Field a createField2 ([a] before, [a] after) = forall a. [a] -> [a] -> [a] -> Field a F (forall a. [a] -> [a] reverse [a] before) [] [a] after getField :: Field a -> [a] getField (F [a] l [a] c [a] r) = forall a. [a] -> [a] reverse [a] l forall a. [a] -> [a] -> [a] ++ [a] c forall a. [a] -> [a] -> [a] ++ [a] r showField :: ([a] -> a -> b) -> ([a] -> b -> a) -> Field a -> a -> b showField [a] -> a -> b show' [a] -> b -> a show_cursor (F [a] l [a] c [a] r) = [a] -> a -> b show' [a] r forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> b -> a show_cursor [a] c forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> a -> b show' (forall a. [a] -> [a] reverse [a] l) insertItem :: Field a -> a -> Field a insertItem (F [a] l [a] c [a] r) a i = forall a. [a] -> [a] -> [a] -> Field a F (a i forall a. a -> [a] -> [a] : [a] l) [] [a] r insertItemsSelected :: Field a -> [a] -> Field a insertItemsSelected (F [a] l [a] c [a] r) [a] i = forall a. [a] -> [a] -> [a] -> Field a F [a] l [a] i [a] r deleteItemLeft :: Field a -> Field a deleteItemLeft f :: Field a f@(F [] [] [a] _) = Field a f deleteItemLeft (F (a i : [a] l) [] [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteItemLeft (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteItemRight :: Field a -> Field a deleteItemRight f :: Field a f@(F [a] _ [] []) = Field a f deleteItemRight (F [a] l [] (a i : [a] r)) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteItemRight (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteToEnd :: Field a -> Field a deleteToEnd (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [] deleteToHome :: Field a -> Field a deleteToHome (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [] [] [a] r extendCursorRight :: Field a -> Field a extendCursorRight (F [a] l [a] c (a i : [a] r)) = forall a. [a] -> [a] -> [a] -> Field a F [a] l ([a] c forall a. [a] -> [a] -> [a] ++ [a i]) [a] r extendCursorRight f :: Field a f@(F [a] _ [a] _ []) = Field a f extendCursorLeft :: Field a -> Field a extendCursorLeft (F (a i : [a] l) [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l (a i forall a. a -> [a] -> [a] : [a] c) [a] r extendCursorLeft f :: Field a f@(F [] [a] _ [a] _) = Field a f moveCursorLeft :: Field a -> Field a moveCursorLeft f :: Field a f@(F [] [] [a] _) = Field a f moveCursorLeft (F (a i : [a] l) [] [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] (a i forall a. a -> [a] -> [a] : [a] r) moveCursorLeft (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l [] ([a] c forall a. [a] -> [a] -> [a] ++ [a] r) moveCursorRight :: Field a -> Field a moveCursorRight f :: Field a f@(F [a] _ [] []) = Field a f moveCursorRight (F [a] l [] (a i : [a] r)) = forall a. [a] -> [a] -> [a] -> Field a F (a i forall a. a -> [a] -> [a] : [a] l) [] [a] r moveCursorRight (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F (forall a. [a] -> [a] reverse [a] c forall a. [a] -> [a] -> [a] ++ [a] l) [] [a] r moveCursorHome :: Field a -> Field a moveCursorHome Field a f = forall a. [a] -> [a] -> [a] -> Field a F [] [] (forall {a}. Field a -> [a] getField Field a f) moveCursorEnd :: Field a -> Field a moveCursorEnd Field a f = forall a. [a] -> [a] -> [a] -> Field a F (forall a. [a] -> [a] reverse (forall {a}. Field a -> [a] getField Field a f)) [] [] extendCursorHome :: Field a -> Field a extendCursorHome (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [] (forall a. [a] -> [a] reverse [a] lforall a. [a] -> [a] -> [a] ++[a] c) [a] r extendCursorEnd :: Field a -> Field a extendCursorEnd (F [a] l [a] c [a] r) = forall a. [a] -> [a] -> [a] -> Field a F [a] l ([a] cforall a. [a] -> [a] -> [a] ++[a] r) []