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 (Field a -> Field a -> Bool) -> (Field a -> Field a -> Bool) -> Eq (Field a) 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, Eq (Field a) Eq (Field a) -> (Field a -> Field a -> Ordering) -> (Field a -> Field a -> Bool) -> (Field a -> Field a -> Bool) -> (Field a -> Field a -> Bool) -> (Field a -> Field a -> Bool) -> (Field a -> Field a -> Field a) -> (Field a -> Field a -> Field a) -> Ord (Field a) Field a -> Field a -> Bool Field a -> Field a -> Ordering Field a -> Field a -> Field a 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 $cp1Ord :: forall a. Ord a => Eq (Field a) Ord) createField :: [a] -> Field a createField [a] s = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [] [a] s [] createField2 :: ([a], [a]) -> Field a createField2 ([a] before, [a] after) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F ([a] -> [a] forall a. [a] -> [a] reverse [a] before) [] [a] after getField :: Field a -> [a] getField (F [a] l [a] c [a] r) = [a] -> [a] forall a. [a] -> [a] reverse [a] l [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ [a] c [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ [a] r showField :: ([a] -> b -> b) -> ([a] -> b -> b) -> Field a -> b -> b showField [a] -> b -> b show' [a] -> b -> b show_cursor (F [a] l [a] c [a] r) = [a] -> b -> b show' [a] r (b -> b) -> (b -> b) -> b -> b forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> b -> b show_cursor [a] c (b -> b) -> (b -> b) -> b -> b forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> b -> b show' ([a] -> [a] forall a. [a] -> [a] reverse [a] l) insertItem :: Field a -> a -> Field a insertItem (F [a] l [a] c [a] r) a i = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F (a i a -> [a] -> [a] 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 = [a] -> [a] -> [a] -> Field a 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) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteItemLeft (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a 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)) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [a] r deleteItemRight (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a 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) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l [] [] deleteToHome :: Field a -> Field a deleteToHome (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a 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)) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l ([a] c [a] -> [a] -> [a] 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) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l (a i a -> [a] -> [a] 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) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l [] (a i a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] r) moveCursorLeft (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l [] ([a] c [a] -> [a] -> [a] 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)) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F (a i a -> [a] -> [a] forall a. a -> [a] -> [a] : [a] l) [] [a] r moveCursorRight (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F ([a] -> [a] forall a. [a] -> [a] reverse [a] c [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ [a] l) [] [a] r moveCursorHome :: Field a -> Field a moveCursorHome Field a f = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [] [] (Field a -> [a] forall a. Field a -> [a] getField Field a f) moveCursorEnd :: Field a -> Field a moveCursorEnd Field a f = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F ([a] -> [a] forall a. [a] -> [a] reverse (Field a -> [a] forall a. Field a -> [a] getField Field a f)) [] [] extendCursorHome :: Field a -> Field a extendCursorHome (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [] ([a] -> [a] forall a. [a] -> [a] reverse [a] l[a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++[a] c) [a] r extendCursorEnd :: Field a -> Field a extendCursorEnd (F [a] l [a] c [a] r) = [a] -> [a] -> [a] -> Field a forall a. [a] -> [a] -> [a] -> Field a F [a] l ([a] c[a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++[a] r) []