wA      !"#$%&'()*+,-./ 0 1 23 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | }~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!Safe]^  7 is an unbounded priority queue based on a Finger Tree.  Build a new  .IO version of  ). This is useful for creating top-level TPQueues using unsafePerformIO, because using  inside unsafePerformIO isn't possible.Write a value to a  .#Read the next minimal value from a  . A version of " that does not retry, but returns # instead if no value is available."Get the next minimal value from a   without removing it. A version of " that does not retry, but returns # instead if no value is available.Returns  if the   is empty.   Safe]^%Build an (index-preserving) * from an arbitrary Haskell function. See  Control.Lens. for details.In  -https://hackage.haskell.org/package/lens-4.14 lens-4.14, the constraint  f# is missing from the definition of K. When compiling with GHC 8.0, this leads to warnings for definitions like *foo :: Getter Bar Foo foo = to fooFromBar because of the redundant  f. constraint. This definition is identical to  Control.Lens.' except for the additional constraint  f.S      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe]^3H      !"#$%&'()*+,-./01Safe]^>\BSpawn a mailbox to store prioritized messages in a Mailbox. Using  on the  will return 2 the minimal element, or  if the mailbox is closed.This function is analogous to Pipes.Concurrent. !  ", but it uses a   instead of a 3 to store messages. passes its enclosed action an   and  like you'd get from , but automatically sealGs them after the action completes. This can be used when you need the sealing behavior available from *, but want to work at a bit higher level: *withSpawn buffer $ \(output, input) -> ..." is exception-safe, since it uses 4 internally.    None]^\#Type alias for Text formatted with   from  Graphics.Vty.A representattion of formatted 5. The attribute is usually a 6@ so that different formattings can be combined by nesting them.An empty blockA bare (unformatted) text nodeAdds formatting to a block -Concatenates several blocks of formatted text!Smart constructor for an empty  text.".Smart constructor for bare (unformatted) text.bare ""Empty bare "Text" Text 4 "Text"#Adds formatting to a  text. The 7 and 6 instances for attr+ are used to flatten redundant formattings./format (Just ()) (format Nothing (bare "Text"))"Format 4 (Just ()) (Text 4 "Text")1format (Just ()) (format (Just ()) (bare "Text"))"Format 4 (Just ()) (Text 4 "Text")format Nothing (bare "Text") Text 4 "Text"$Concatenates pieces of A text. Redundant formattings and blocks of equal formatting are % d together.% Simplifies  text by leaving out redundant empty bits, joining pieces of text with the same formatting, and flattening redundant applications of the same style.!emptyFormatted `fuse` bare "Text" Text 4 "Text"Eformat (Just ()) (bare "Left") `fuse` format (Just ()) (bare "Right")'Format 9 (Just ()) (Text 9 "LeftRight")&.Apply a function to each piece of text in the  tree.JmapText T.toUpper (Cat 11 [Text 6 "Hello ", Format 5 () (Text 5 "World")])5Cat 11 [Text 6 "HELLO ",Format 5 () (Text 5 "WORLD")]'Like &, but passes the position of the text chunk to the function as well. Can be used for formatting text position-dependently, e.g. for expanding tabs to spaces.(oCrops the text to a given length. If the text is already shorter than the desired width, it is returned as-is.)qDrops a prefix of the given length. If the text is already shorter than the number of characters to be dropped, ! is returned.*lPads the text to a given width. If the text is already longer than the desired width, it is returned as-is. !"#$%&'()* !"#$&'()*% None]^V/*Directly parses ANSI formatted text using 0.Parsing ANSI color codes:&parseAnsi "Hello \ESC[31mWorld\ESC[m!"Cat 12 [Text 6 "Hello ",Format 5 (Attr {attrStyle = KeepCurrent, attrForeColor = SetTo (ISOColor 1), attrBackColor = KeepCurrent, attrURL = KeepCurrent}) (Text 5 "World"),Text 1 "!"]DMore elaborate example with nested foreground and background colors:6parseAnsi "\ESC[m\ESC[40mHello \ESC[31mWorld\ESC[39m!"Cat 12 [Format 6 (Attr {attrStyle = KeepCurrent, attrForeColor = KeepCurrent, attrBackColor = SetTo (ISOColor 0), attrURL = KeepCurrent}) (Text 6 "Hello "),Format 5 (Attr {attrStyle = KeepCurrent, attrForeColor = SetTo (ISOColor 1), attrBackColor = SetTo (ISOColor 0), attrURL = KeepCurrent}) (Text 5 "World"),Format 1 (Attr {attrStyle = KeepCurrent, attrForeColor = KeepCurrent, attrBackColor = SetTo (ISOColor 0), attrURL = KeepCurrent}) (Text 1 "!")]@Some CSI sequences are ignored, since they are not supported by Vty:3parseAnsi "\ESC[A\ESC[B\ESC[31mfoo\ESC[1K\ESC[mbar"Cat 6 [Format 3 (Attr {attrStyle = KeepCurrent, attrForeColor = SetTo (ISOColor 1), attrBackColor = KeepCurrent, attrURL = KeepCurrent}) (Text 3 "foo"),Text 3 "bar"]=Non-CSI sequences are not parsed, but included in the output:+parseAnsi "\ESC]710;font\007foo\ESC[31mbar"Cat 17 [Text 14 "\ESC]710;font\afoo",Format 3 (Attr {attrStyle = KeepCurrent, attrForeColor = SetTo (ISOColor 1), attrBackColor = KeepCurrent, attrURL = KeepCurrent}) (Text 3 "bar")]0oParser for ANSI formatted text. Recognized escape sequences are the SGR (Select Graphic Rendition) sequences (ESC[ &m) supported by  =. Unsupported SGR sequences and other CSI escape sequences (ESC[ &]) are ignored. Other (non-CSI) escape sequences are not parsed, and included in the output.fThis parser does not fail, it will rather consume and return the remaining input as unformatted text.1uParser for ANSI CSI escape sequences. Recognized escape sequences are the SGR (Select Graphic Rendition) sequences (ESC[ &m) supported by  =. Unsupported SGR sequences and other CSI escape sequences (ESC[ &) are ignored by returning 8.HThis parser fails when encountering any other (non-CSI) escape sequence./01/019:Safe]^2 Combines two  s. This differs from ; from the 6 instance of   in that #$(s are combined rather than overwritten. 2 2 None]^P3#Converts ANSI formatted text to an <(. Nested formattings are combined with 2 . The given  ' is used as style for the root of the  tree.$renderAnsi Vty.defAttr (bare "Text")vHorizText "Text"@(Attr {attrStyle = Default, attrForeColor = Default, attrBackColor = Default, attrURL = Default},4,4)4%Strips away all formattings to plain 5. !"#$&'()*34 !"#$&'()*34 Safe6]^6Display the pager full-screen7$Display the results list full-screen8Split screen, focus on pager9#Split screen, focus on results list:Scroll one line up in pager;Scroll one line down in pager<Scroll one page up in pager=Scroll one page down in pager>Scroll half a page up in pager? Scroll half a page down in pager@%Scroll eight characters left in pagerA&Scroll eight characters right in pagerBMove to previous resultCMove to next resultD Move one page up in results listE"Move one page down in results listF(Move to previous result and update pagerG$Move to next result and update pagerH+Update pager with currently selected resultICOpen file in external editor and jump to currently selected resultJExit the applicationKdTreat keybinding as if not present, fall back to alternative binding (used to override keybindings)5KIHGFEDCBA@?>=<;:9876J56789:;<=>?@ABCDEFGHIJK56789:;<=>?@ABCDEFGHIJK Safe6]^c5A chord of keys and modifiers pressed simultaneously.e$Reads the key and modifiers from an ==. Non-key events and events with unknown keys are mapped to .fBuild a c from a single SgAdd a O ifier to a cOQPRST[\U^YVWXZ]_`abcdefgcdSTUVWXYZ[\]^_`abOPQRefgOPQRSTUVWXYZ[\]^_`abcd NoneK]^8uvwxyuvwxyuvwNone6]^I}A 6 for reading a partial % configuration.(Mappings are combined using left-biased &':xlet l = Just (KeybindingMap (fromList [(Key.Chord mempty Key.Down, ResultsDown), (Key.Chord mempty Key.Up, ResultsUp)]))Plet r = Just (KeybindingMap (fromList [(Key.Chord mempty Key.Down, PagerDown)]))l <> r}Just (KeybindingMap {unKeybindingMap = fromList [(Chord (fromList []) Up,ResultsUp),(Chord (fromList []) Down,ResultsDown)]})r <> l{Just (KeybindingMap {unKeybindingMap = fromList [(Chord (fromList []) Up,ResultsUp),(Chord (fromList []) Down,PagerDown)]})In particular, 2 (&( []), (declaring an empty list of mappings) and Y (not declaring anything) are equivalent, given that there are already default mappings:7l <> Just (KeybindingMap (fromList [])) == l <> NothingTrueThis means that new keybindings override the previous ones if they collide, otherwise they are simply added. To remove a keybinding, it has to be mapped to Unset explicitly.A 6 for reading partial ) configurations.8Note that the attributes are not merged, but overridden:import Graphics.Vty.Attributes-let leftStyle = defAttr `withStyle` standout.let rightStyle = defAttr `withForeColor` black3let l = mempty { _mnormal = First (Just leftStyle)}4let r = mempty { _mnormal = First (Just rightStyle)};_mnormal (l <> r) == First (Just (leftStyle <> rightStyle))False+_mnormal (l <> r) == First (Just leftStyle)TrueA 6" for reading partial configs. The  can be converted to an actual * using +.The Monoid consists mostly of 'First a' values, so the most important config (the one that overrides all the others) should be read first.}~}~}~None"#6;=]^A JSON-parsable data type for >.OdecodeEither "[\"standout\", \"underline\", \"bold\"]" :: Either String [Style]Right [Standout,Underline,Bold]Also works without quotes:CdecodeEither "[standout, underline, bold]" :: Either String [Style]Right [Standout,Underline,Bold] Fails with error message if the  cannot be parsed:8let Left err = decodeEither "foo" :: Either String Style/"The key \"foo\" was not found" `isInfixOf` errTrueA JSON-parsable data type for ?.LdecodeEither "[\"black\",\"red\",\"bright-black\"]" :: Either String [Color]Right [Black,Red,BrightBlack]Also works without quotes:@decodeEither "[black,red,bright-black]" :: Either String [Color]Right [Black,Red,BrightBlack] Fails with error message if the  cannot be parsed:8let Left err = decodeEither "foo" :: Either String Color/"The key \"foo\" was not found" `isInfixOf` errTrueA JSON-parsable data type for  . JSON example:YdecodeEither "{\"fore-color\": \"black\", \"style\": \"standout\"}" :: Either String AttrQRight (Attr {foreColor = Just Black, backColor = Nothing, style = Just Standout})JSON example without quotes: >>> decodeEither "{fore-color: black, style: standout}" :: Either String Attr Right (Attr {foreColor = Just Black, backColor = Nothing, style = Just Standout}) YAML example::{ decodeEither$ "fore-color: \"blue\"\n""<> "back-color: \"bright-blue\"\n"<> "style: \"reverse-video\"\n":: Either String Attr:}\Right (Attr {foreColor = Just Blue, backColor = Just BrightBlue, style = Just ReverseVideo})YAML example without quotes::{ decodeEither$ "fore-color: blue\n"<> "back-color: bright-blue\n"<> "style: reverse-video\n":: Either String Attr:}\Right (Attr {foreColor = Just Blue, backColor = Just BrightBlue, style = Just ReverseVideo})4An empty JSON/YAML object yields the default colors:'decodeEither "{}" :: Either String AttrHRight (Attr {foreColor = Nothing, backColor = Nothing, style = Nothing})lReads the configuration from a JSON or YAML file. The file should be located in one of the following places:~/.vgrep/config.yaml,~/.vgrep/config.yml,~/.vgrep/config.json or~/.vgrep/config.}When none of these files exist, no error is raised. When a file exists, but cannot be parsed, a warning is written to stderr.]Supported formats are JSON and YAML. The example YAML config given in the project directory (config.yaml.example&) is equivalent to the default config:.import qualified Vgrep.Environment.Config as CaRight config <- decodeFileEither "config.yaml.example" :: IO (Either ParseException ConfigMonoid),C.fromConfigMonoid config == C.defaultConfigTrueExample YAML config file for ,: colors: line-numbers: fore-color: blue line-numbers-hl: fore-color: blue style: bold normal: {} normal-hl: style: bold file-headers: back-color: green selected: style: standout tabstop: 8 editor: "vi"&Example JSON file for the same config: o{ "colors": { "line-numbers" : { "fore-color": "blue" }, "line-numbers-hl": { "fore-color": "blue", "style": "bold" }, "normal": {}, "normal-hl": { "style": "bold" }, "file-headers": { "back-color": "green" }, "selected": { "style": "standout" } }, "tabstop": 8, "editor": "vi" }/The JSON/YAML keys correspond to the lenses in Vgrep.Environment.Config, the values for ? and >@ can be obtained from the corresponding predefined constants in Graphics.Vty.Attributes.@ABCDEFGHIJKLMNOPQRSTUVWXYNone]^Determines the  value for - ( ) from the environment variable $EDITOR..None]^None"#]^3Keybindings in effect when results list is focused.,Keybindings in effect when pager is focused.gGlobal keybindings are in effect both for pager and results list, but can be overridden by either one.Line numbers (default: blue)-Highlighted line numbers (default: bold blue)'Normal text (default: terminal default) Highlighted text (default: bold)QFile names in results view (default: terminal default color on green background)4Selected entry (default: terminal default, inverted)Color configurationTabstop width (default: 8)Executable for e$ key (default: environment variable $EDITOR, or vi if $EDITOR is not set) Convert a  to a  . Missing (Z) values in the  are supplied from the . Convert a  to a  config.Gathers $s from various sources and builds a  based on the :!Config from environment variables.The configuration specified in the config file'External config, e.g. from command line0where the latter ones override the earlier ones.!External config from command line((None]^4The bounds (width and height) of a display viewport./' actions can read from the environment.5External configuration (colors, editor executable, &)AThe bounds (width and height) of the display viewport where the 0 or the current 12 is displayed6NoneQV]^ mSuspend the application and run the action, e. g. invoking an external process, then resume the application. Shut down.VIndicates that the state has been changed visibly, so the screen should be refreshed.hThe state has not changed or the change would not be visible, so refreshing the screen is not required./The type of action to be performed on an event.>Do not handle the event (fall-through to other event handlers)(Handle the event by performing an actionInterrupt the applicationIf the lookup returns 2 action, then handle it with  action' , otherwise  this event handler.Special case of ( where actions are looked up from a map.=The first event handler that triggers (i. e. does not return ) handles the event.[\ None]^        None]^&Parses lines of 5$, skipping lines that are not valid grep output.Parses a line of grep output. Returns  if the line cannot be parsed.\The output should consist of a file name, line number and the content, separated by colons:#parseLine "path/to/file:123:foobar"Just (FileLineReference {_file = File {_fileName = "path/to/file"}, _lineReference = LineReference {_lineNumber = Just 123, _lineText = Text 6 "foobar"}})5Omitting the line number still produces valid output:parseLine "path/to/file:foobar"Just (FileLineReference {_file = File {_fileName = "path/to/file"}, _lineReference = LineReference {_lineNumber = Nothing, _lineText = Text 6 "foobar"}})&However, an file name must be present:parseLine "foobar"Nothing8ANSI escape codes in the line text are parsed correctly:0parseLine "path/to/file:foo\ESC[31mbar\ESC[mbaz"<Just (FileLineReference {_file = File {_fileName = "path/to/file"}, _lineReference = LineReference {_lineNumber = Nothing, _lineText = Cat 9 [Text 3 "foo",Format 3 (Attr {attrStyle = KeepCurrent, attrForeColor = SetTo (ISOColor 1), attrBackColor = KeepCurrent, attrURL = KeepCurrent}) (Text 3 "bar"),Text 3 "baz"]}})NoneQV]^0Like T, but if the input is not prefixed with a file and line number, i. e. is not valid grep -nH output, then adds -nH (-n: with line number, -H: with file name) to the grep command line arguments.Takes a 5 stream and runs it through a grepi process, returning a stream of results. The original command line arguments are passed to the process.Invokes  grep -nH -rI (-n: with line number, -H: with file name, -r : recursive, -I: ignore binary files) and returns the results as a stream. More arguments (e. g. pattern and directory) are taken from the command line.None<]^2)Expand a list of linesExpand a single line Expand an ANSI formatted line  ]^_`None ;=>?FKNT]^;"The "3 monad transformer is parameterized over the state s of a 12 or an 30.#Lift a monadic action to ".$Pass an initial state and an  and reduce a "( action to an action in the base monad.% A version of 4 where the action is lifted to ".&The  of " is not stateful, however it can be modified globally. An example is resizing the application by changing the display bounds.+" can read from the D. Modifications to the enviromnent are only possible globally (see &), the a environment is pure.Ebac&!"#$%&"!#$&%"dNoneQV]^K01% events do have higher priority than 2Z events, so that the application stays responsive even in case of event queue congestion.3OWe need the viewport in order to initialize the app, which in turn will start e5. To resolve this circular dependency, we start once eR in order to determine the display viewport, and shut it down again immediately.47Spawns a thread parallel to the action that listens to e# events and redirects them to the f.5 Passes a eS instance to the action and shuts it down properly after the action finishes. The g and h handles are connected to /dev/tty (see 9).6Like 5, but lifted to " s i.79Passes two file descriptors for read and write access to /dev/tty? to the action, and closes them after the action has finished.8Like 7, but lifted to " s i.9Opens /dev/tty0 in Read/Write mode. Should be connected to the stdin and stdout of a GUI process (e. g. e). 0123456789 0123456789012NoneNQV]^ZH=The =% type is parameterized over the type e$ of events it handles and the type s of its state.?&Creates the initial state for the app.@How to convert an external = to the App's eventA5Handles an event, possibly modifying the App's state.  handleEvent e s = case e of j k [] ->  (l ) -- Handles the Enter key, but does nothing. j m [] ->  (l ) -- Handles the Up8 key and triggers a redraw. _otherwise -> E -- Does not handle the event, so other handlers may be invoked. B Creates a nC to be displayed. May modify the App's state (e. g. for resizing).CLike D&, but does not return the final state.D"Runs runs the event loop until an  & is encountered. Events handled with  ( action) will shut down eA, run the action (e. g. invoking an external editor), and start e again.oMonomorphic version of 45/, to avoid having to update pipes-concurrency.=>B?@ACD=>?@ABDC=>?@ABNone]^fLlThe internal state of the split-view widget. Tracks the state of both child widgets and the current layout.NState of the left widgetOState of the right widgetPCurrent layoutV"The currently focused child widgetGview currentWidget $ HSplit { _leftWidget = "foo", _layout = LeftOnly } Left "foo"W$Traverses the left widget if focused5has leftWidgetFocused $ HSplit { _layout = LeftOnly }True6has leftWidgetFocused $ HSplit { _layout = RightOnly }FalseDhas leftWidgetFocused $ HSplit { _layout = Split FocusLeft (1 % 2) }TrueX%Traverses the right widget if focused7has rightWidgetFocused $ HSplit { _layout = RightOnly }True6has rightWidgetFocused $ HSplit { _layout = LeftOnly }FalseFhas rightWidgetFocused $ HSplit { _layout = Split FocusRight (1 % 2) }TrueEHFGIJKLMNOPSTUVWXLMNOPEFGHIJKTUSVWXEFGHIJKLMNOPNone]^mYtKeeps track of the lines of text to display, the current scroll positions, and the set of highlighted line numbers.[2The current column offset for horizontal scrolling\DSet of line numbers that are highlighted (i.e. they contain matches)]Zipper: Lines above the screen^!Zipper: Lines on screen and belowe.The number of invisible lines above the screen YZ[\]^abcde YZ[\]^ebadcYZ[\]^None]^f.Ad-hoc data structure to render the (visible) j as list of lines.jResults widget statekThe results list is emptyl7The structure of the Results buffer is a double Zipper:lines above the current screen&lines on screen above the current itemthe current item&lines on screen below the current itemlines below the current screenmAppend a line to the j9. The line is appended below the visible screen, so use n to make it visible.p Reverse the jn<Show one more item at the bottom of the screen if available.o9Show one more item at the top of the screen if available.p`Remove the last item from the bottom of the screen and prepend it to the invisible items below.q]Remove the first item from the top of the screen and append it to the invisible items above.rMove the cursor one item down.sMove the cursor one item up.t9Adjust the number of on-screen items to the given height:If the current list is too long for the new height, take items from the top until the current item is topmost, then from the bottom.lIf the current list is too short for the new height, add items below until the buffer is empty, then above.uConverts the visible j to a list of fHs. Each item in the returned list corresponds to a line on the screen.Each group of h4s that points to the same file is prepended with a g&. The item below the cursor becomes a i.vThe line number of a f.  for gs.w,The file name of the currently selected itemx.The line number of the currently selected itemyJThe line numbers with matches in the file of the currentliy selected itemtthe new height! if the height has not changed, 2 newResults otherwisefhgijlkmnopqrstuvwxyjklwxymonqpsrtfghiuvfghijklNoneQV]^}A }S is a unit that is displayed on the screen. It is associated with a mutable state sW. It provides an event handler with default keybindings and can generate a renderable <. Widget modules should provide a }c instance and additionally a collection of actions that can be invoked by external event handlers: widgetAction :: " s m  The initial state of the widgetGenerate a renderable <H from the widget state. The state can be modified (e. g. for resizing). }~ }~}~NoneQV]^,QThe results widget displays a list of lines with line numbers, grouped by files. Initial stateAThe initial buffer is empty and can be filled line by line using .Drawing the results list,Found matches are grouped by file name. Each file group has a header and a list of result lines with line numbers. The result lines can be selected with the cursor, the file group headers are skipped. When only part of a file group is shown at the top of the screen, the header is shown nevertheless.Add a line to the results list. If the result is found in the same file as the current last result, it will be added to the same results group, otherwise a new group will be opened.BMove up/down one results page. File group headers will be skipped.BMove up/down one results page. File group headers will be skipped.BMove up/down one results line. File group headers will be skipped.BMove up/down one results line. File group headers will be skipped.   jwxy jwxyNone"#]^'Display lines of text with line numbers Initial state6The pager is empty, i. e. no lines of text to display.Drawing the pager The lines of text are printed, starting at the current scroll position. If not enough lines are available, the scroll position is adjusted until either the screen is filled, or the first line is reached. Highlighted lines are displayed according to the config values  and  (default: bold).%Replace the currently displayed text. Scroll to the given line number.Scroll up or down one line. Gscroll (-1) -- scroll one line up scroll 1 -- scroll one line down~Scroll up or down one page. The first line on the current screen will be the last line on the scrolled screen and vice versa. OscrollPage (-1) -- scroll one page up scrollPage 1 -- scroll one page down^Scroll up or down a fraction of a page. For integers, 'scrollPageFraction n == scrollPage n'. scrollPageFraction (-1%2) -- scroll one half page up scrollPageFraction (1%2) -- scroll one half page down scrollPageFraction (fromRational 1) -- scroll one page down'Horizontal scrolling. Increment is one . RhScroll (-1) -- scroll one tabstop left hScroll 1 -- scroll one tabstop right<Lines of text to display in the pager (starting with line 1)5Line numbers and formatted text for highlighted lines Y YNone]^O Compose two }s side-by-side Initial state3Initially, the left widget is rendered full-screen.Drawing the Widgets\Drawing is delegated to the child widgets in a local environment reduced to thir respective .#Display the left widget full-screen$Display the right widget full-screen%Display both widgets in a split view.JSwitch focus from left to right child widget and vice versa (only if the P is H)Focus left or right area,Left area width as fraction of overall widthIJKLTUVWXLIJKTUVWX1None]^ }~q6789:;<=>? @? A? B? C? C? D? E? EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk l m no p q r s t u v w x y z { | } ~                                   ( $H%%))**-+ ,      !!"#$%&'()*++,-.//01234556789:;<=>?@ABCDEFG/HIJKLMNOPQRSTUVWXYZ[\]^_`a00bcdefghijklmnoopqrstuvwxyz{{|}~22b66IR6664454666666666      !"#$%&'()*+,-./0123456789:;<=>?@A@B@C@D@E@FGHGIGJGKGLGMGNGOGPGQGRGSGTGSGTGUGVGWXYXZX[X\X]X^X_X`XaXbXcXdXeXfXgXhiZijiklmlnlolplqlrlsltlulvlwlxlylzl{l|l}l~lllllllllllllllllllll      !"#$%&'()*+,-./0123456789:;<=>?@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@[@\@]@^@_@`@a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@      ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z {|}|~|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||          ! " #6$%6&6'6(6)6*6+6,6-.6-/606162345346347348696:6;6<=6<>6$?6$@6$A6$B6$C6$D6$E6$F6$G6$H6$I6$J6$K6$L6M6NO6NP6NQ6NR6S6TU6V6W6X6Y6Z6[6\9]^9]^9]_9:`34a34b34c9]d9]e9]f9]g9]h9]i9]j9]k9]l9]m6nopq6rstu[6vwx6y z z6{F|}F~FG$FH6(333/F#FFF~F~6F~F5$vgrep-0.2.2.0-IScrB41HG5t6kfzIkcOjbm%Vgrep.Widget.HorizontalSplit.Internal Vgrep.TypePipes.Concurrent.PQueueVgrep.Ansi.Vty.AttributesControl.Concurrent.STM.TPQueueControl.Lens.CompatControl.Monad.State.ExtendedVgrep.Ansi.TypeVgrep.Ansi.Parser Vgrep.Ansi Vgrep.Command Vgrep.KeyVgrep.KeybindingMapVgrep.Environment.Config.Monoid%Vgrep.Environment.Config.Sources.File$Vgrep.Environment.Config.Sources.EnvVgrep.Environment.ConfigVgrep.Environment Vgrep.Event Vgrep.Results Vgrep.ParserVgrep.System.Grep Vgrep.TextVgrep.App.Internal Vgrep.AppVgrep.Widget.Pager.InternalVgrep.Widget.Results.InternalVgrep.Widget.TypeVgrep.Widget.ResultsVgrep.Widget.PagerVgrep.Widget.HorizontalSplitPipes.Concurrentspawn' UnboundedVtyStyle KeybindingsData.Map.StrictunionfromListColorsConfigfromConfigMonoid defaultConfig_editor Vgrep.Environment.Config.SourcesVgrepTApp Vgrep.WidgetWidget Vgepr.AppData.Functor.Contravariant contramapbaseGHC.Real%transformers-0.5.2.0Control.Monad.Trans.Classlift#mmorph-1.1.1-HyxFzqxsqTOEotnEvLrpxbControl.Monad.Morphhoist.pipes-concurrency-2.0.9-Kgj1T4BXaNV5SSWe15yCaE fromInputtoOutputrecvInputsendOutputvty-5.20-178NMWFE53a8kRTqdFQHQtGraphics.Vty.AttributesAttrTPQueue newTPQueue newTPQueueIO writeTPQueue readTPQueuetryReadTPQueue peekTPQueuetryPeekTPQueueisEmptyTPQueueto liftStatewhenSunlessSspawn withSpawn AnsiFormatted FormattedEmptyTextFormatCatemptyFormattedbareformatcatfusemapTextmapTextWithPos takeFormatted dropFormatted padFormatted$fMonoidFormatted$fFunctorFormatted $fEqFormatted$fShowFormatted parseAnsi ansiFormatted attrChange combineStyles renderAnsi stripAnsiCommandDisplayPagerOnlyDisplayResultsOnlySplitFocusPagerSplitFocusResultsPagerUp PagerDown PagerPageUp PagerPageDownPagerHalfPageUpPagerHalfPageDownPagerScrollLeftPagerScrollRight ResultsUp ResultsDown ResultsPageUpResultsPageDown PrevResult NextResultPagerGotoResultOpenFileInEditorExitUnset $fEqCommand $fShowCommand$fGenericCommandModCtrlMetaShiftKeyCharSpaceEsc BackspaceEnterDelTabLeftRightUpDownHomeEndPageUpPageDownChordfromVtykey withModifier$fEqKey$fOrdKey $fShowKey $fReadKey $fGenericKey$fEqMod$fOrdMod $fShowMod $fGenericMod $fEqChord $fOrdChord $fShowChord$fGenericChord KeybindingMapunKeybindingMaplookup$fShowKeybindingMap$fEqKeybindingMap$fMonoidKeybindingMapKeybindingsMonoid_mresultsKeybindings_mpagerKeybindings_mglobalKeybindings ColorsMonoid _mlineNumbers_mlineNumbersHl_mnormal _mnormalHl _mfileHeaders _mselected ConfigMonoid_mcolors _mtabstop_meditor _mkeybindings$fMonoidColorsMonoid$fMonoidKeybindingsMonoid$fMonoidConfigMonoid$fEqColorsMonoid$fShowColorsMonoid$fGenericColorsMonoid$fEqKeybindingsMonoid$fShowKeybindingsMonoid$fGenericKeybindingsMonoid$fEqConfigMonoid$fShowConfigMonoid$fGenericConfigMonoidColorconfigFromFile$fFromJSONKeybindingMap$fFromJSONCommand$fFromJSONKeybindingsMonoid$fFromJSONAttr$fFromJSONColorsMonoid$fFromJSONConfigMonoid$fFromJSONColor$fFromJSONStyle$fFromJSONAttr0 $fEqColor $fShowColor$fGenericColor $fEqStyle $fShowStyle$fGenericStyle$fEqAttr $fShowAttr $fGenericAttreditorConfigFromEnv_resultsKeybindings_pagerKeybindings_globalKeybindings _lineNumbers_lineNumbersHl_normal _normalHl _fileHeaders _selected_colors_tabstop _keybindings $fEqColors $fShowColors$fEqKeybindings$fShowKeybindings $fEqConfig $fShowConfigcolorseditor keybindingstabstop fileHeaders lineNumbers lineNumbersHlnormalnormalHlselectedglobalKeybindingspagerKeybindingsresultsKeybindingsfromColorsMonoid fromFirstfromKeybindingsMonoid defaultColorsdefaultKeybindings loadConfigViewport_vpWidth _vpHeight $fEqViewport$fShowViewport EnvironmentEnv_config _viewportvpHeightvpWidth$fEqEnvironment$fShowEnvironmentconfigviewportviewportHeight viewportWidth InterruptSuspendHaltRedraw UnchangedNextSkipContinuedispatch dispatchMap$fMonoidRedraw $fFunctorNext $fMonoidNextFile _fileName$fEqFile $fShowFile LineReference _lineNumber _lineTextfileName$fEqLineReference$fShowLineReferenceFileLineReference_file_lineReference lineNumberlineText$fEqFileLineReference$fShowFileLineReferencefile lineReferenceparseGrepOutput parseLine grepForAppgrep recursiveGrep grepVersionexpandForDisplayexpandLineForDisplayexpandFormattedLineVgrepmkVgrepT runVgrepT vgrepBracketmodifyEnvironment$fZoomVgrepTVgrepTst$fMFunctorTYPEVgrepT$fMonadTransVgrepT$fMonadStatesVgrepT$fMonadReaderEnvironmentVgrepT$fFunctorVgrepT$fApplicativeVgrepT $fMonadVgrepT$fMonadIOVgrepT EventPriorityUserSystem viewportHack withEvThreadwithVty withVgrepVtywithTty withVgrepTtytty$fEqEventPriority$fOrdEventPriority$fEnumEventPriority initialize liftEvent handleEventrenderrunApp_runAppLayoutLeftOnly RightOnlySplitFocus FocusLeft FocusRightHSplit _leftWidget _rightWidget_layout $fEqFocus $fEqLayoutlayout leftWidget rightWidget currentWidgetleftWidgetFocusedrightWidgetFocusedPager_column _highlighted_above_visible $fEqPager $fShowPagerabovecolumn highlightedvisibleposition DisplayLine FileHeaderLine SelectedLineResults EmptyResultsfeedshowNextshowPrevhideNexthidePrevmoveDownmoveUpresizetoLinesdisplayLineNumbercurrentFileNamecurrentLineNumbercurrentFileResults $fEqResults $fShowResults$fEqDisplayLinedraw ResultsWidget resultsWidget feedResultpageUppageDownprevLinenextLineresizeToWindow PagerWidget pagerWidgetreplaceBufferContents moveToLinescroll scrollPagescrollPageFractionhScroll HSplitWidget hSplitWidgetleftOnly rightOnly splitView switchFocus GHC.Conc.Sync atomicallyGHC.BaseNothingghc-prim GHC.TypesTrue lens-4.16-J9PTPWkENP8APHNW170dBZControl.Lens.TypeGetterControl.Lens.GetterFunctorData.Traversable Traversabletraverse*contravariant-1.4.1-CYWzzu80yDdA8aFlw2qb60 Contravariant>$Data.Bifunctor BifunctorbimapData.Functor.IdentityIdentity runIdentityData.Functor.ConstConstgetConst Data.Function&Control.Lens.THdefaultFieldRulesmakeFieldsNoPrefix makeFieldsabbreviatedNamerabbreviatedFieldsclassUnderscoreNoPrefixNamerclassUnderscoreNoPrefixFieldscamelCaseNamercamelCaseFieldsunderscoreNamerunderscoreFields makeWrappeddeclareLensesWith declareFieldsdeclareWrapped declarePrismsdeclareClassyFor declareClassydeclareLensesFor declareLensesmakeLensesWith makeClassyFor makeLensesFor makeClassy_ makeClassy makeLenses classyRules_ classyRules mappingNamerlookingupNamer lensRulesForunderscoreNoPrefixNamer lensRules lensClass lensField createClassgenerateLazyPatternsgenerateUpdateableOpticsgenerateSignatures simpleLensesControl.Lens.Internal.FieldTH LensRules FieldNamerDefNameTopName MethodName ClassyNamerControl.Lens.Internal.PrismTHmakeClassyPrisms makePrismsControl.Lens.AtiatsansixAtiix icontainsIndexContainscontainsIxValueIxedixAtatControl.Lens.EachEacheachControl.Lens.Platedgplateparts composOpFoldparaparaOf holesOnOfholesOnholes contextsOnOf contextsOn contextsOfcontextstransformMOnOf transformMOf transformMOn transformM transformOnOf transformOf transformOn transform cosmosOnOfcosmosOncosmosOfcosmos universeOnOf universeOn universeOfuniverse rewriteMOnOf rewriteMOn rewriteMOfrewriteM rewriteOnOf rewriteOn rewriteOfrewritechildrendeep...PlatedplateGPlatedControl.Lens.ZoomZoomed MagnifiedZoomzoomMagnifymagnifyControl.Lens.Wrappedalafala _Unwrapping _Wrapping _Unwrapping' _Wrapping'op _Unwrapped_Wrapped _Unwrapped' _GWrapped'Wrapped Unwrapped _Wrapped' Rewrapped RewrappingControl.Lens.Consunsnocsnoc|>_last_init_tail_headunconscons<|:<:>Cons_ConsSnoc_SnocControl.Lens.EmptyAsEmpty_EmptyControl.Lens.Isocoerced secondingfirsting bimappingrmappinglmapping dimapping contramappingimagmamagma involutedreversedlazyflipped uncurriedcurriedanonnon'nonmappingenumunderaufaucloneIsowithIsofromisoStrictLazySwappedReversedListAnIsoAnIso'swappedstrictControl.Lens.EqualitysimplesimplyfromEqmapEqsubstEqrunEq Identical AnEquality AnEquality'Control.Lens.Indexed itraverseByOf itraverseBy ifoldMapByOf ifoldMapBy imapAccumL imapAccumRiforMimapMiforitoListifoldlMifoldrMifind iconcatMapiforM_imapM_ifor_ itraverse_noneinoneiallianyindexindicesicompose<.> reindexed selfIndex.><.FunctorWithIndeximapimappedFoldableWithIndexifoldMapifoldedifoldrifoldlifoldr'ifoldl'TraversableWithIndex itraverse itraversedControl.Lens.Reified ReifiedLensLensrunLens ReifiedLens'ReifiedIndexedLens IndexedLensrunIndexedLensReifiedIndexedLens'ReifiedIndexedTraversalIndexedTraversalrunIndexedTraversalReifiedIndexedTraversal'ReifiedTraversal Traversal runTraversalReifiedTraversal' ReifiedGetter runGetterReifiedIndexedGetter IndexedGetterrunIndexedGetter ReifiedFoldFoldrunFoldReifiedIndexedFold IndexedFoldrunIndexedFold ReifiedSetterSetter runSetterReifiedSetter'ReifiedIndexedSetter IndexedSetterrunIndexedSetterReifiedIndexedSetter' ReifiedIsoIsorunIso ReifiedIso' ReifiedPrismPrismrunPrism ReifiedPrism'Control.Lens.LevelilevelslevelsControl.Lens.Traversal sequenceByOf traverseByOf confusingdeepOffailing ifailoverfailoverelements elementsOfelement elementOfignored traversed64 traversed1 traversed imapAccumLOf imapAccumROfiforMOfimapMOfiforOf itraverseOfcloneIndexedTraversal1cloneIndexPreservingTraversal1cloneTraversal1cloneIndexedTraversalcloneIndexPreservingTraversalcloneTraversaldroppingtakingbesideboth1bothunsafeSingularsingularholesOfiunsafePartsOf'unsafePartsOf'iunsafePartsOf unsafePartsOf ipartsOf'partsOf'ipartsOfpartsOfilocilociscanl1Ofscanr1Of mapAccumLOf mapAccumROf transposeOf sequenceOfforMOfmapMOf sequenceAOfforOf traverseOf ATraversal ATraversal' ATraversal1 ATraversal1'AnIndexedTraversalAnIndexedTraversal1AnIndexedTraversal'AnIndexedTraversal1' Traversing Traversing1 Traversing' Traversing1' TraverseMin traverseMin TraverseMax traverseMaxControl.Lens.Fold foldMapByOffoldByOfidroppingWhile itakingWhile ifiltered findIndicesOf findIndexOf elemIndicesOf elemIndexOf^@?!^@?^@.. itoListOf ifoldlMOf ifoldrMOf ifoldlOf' ifoldrOf'ifindMOfifindOf iconcatMapOfiforMOf_imapMOf_iforOf_ itraverseOf_inoneOfiallOfianyOfifoldlOfifoldrOf ifoldMapOf backwardsipreusespreusesipreusepreuse ipreviewspreviewsipreviewpreviewipreprehasn'thasfoldlMOffoldrMOf foldl1Of' foldr1Of'foldlOf'foldrOf'foldl1Offoldr1OflookupOffindMOffindOf minimumByOf maximumByOf minimum1Of minimumOf maximum1Of maximumOf notNullOfnullOflast1OflastOffirst1OffirstOf^?!^?lengthOfconcatOf concatMapOf notElemOfelemOfmsumOfasumOf sequenceOf_forMOf_mapMOf_ sequence1Of_for1Of_ traverse1Of_ sequenceAOf_forOf_ traverseOf_sumOf productOfnoneOfallOfanyOforOfandOf^.. toNonEmptyOftoListOffoldlOffoldrOffoldOf foldMapOflinedworded droppingWhile takingWhilefilterediteratedunfoldedcycled replicatedrepeatedfolded64folded ifoldringfoldringifoldingfoldingControl.Lens.Prism_Shownearlyonly_Void_Nothing_Just_Right_Leftmatchingisn'tbelowasidewithoutoutsideprism'prism clonePrism withPrismAPrismAPrism'Control.Lens.Reviewreusesreusereviews#reviewreununtogetting^@.iusesiuseiviewsiview ilistenings listenings ilistening listeningusesuse^.viewsviewilikelikeitoGettingIndexedGetting AccessingControl.Lens.Tuple_19'_18'_17'_16'_15'_14'_13'_12'_11'_10'_9'_8'_7'_6'_5'_4'_3'_2'_1'Field1_1Field2_2Field3_3Field4_4Field5_5Field6_6Field7_7Field8_8Field9_9Field10_10Field11_11Field12_12Field13_13Field14_14Field15_15Field16_16Field17_17Field18_18Field19_19Control.Lens.Lensfusinguniteddevoid<#=<#~#%%=<#%=<#%~#%=#=#%%~#%~#~storing^#<<%@=<%@=%%@=%%@~<<%@~<%@~overA<<>=<<>~<<~<<<>=<<&&=<<||=<<**=<<^^=<<^=<~<<&&~<<||~<<**~<<^^~<<^~<%%=%%~&~ilensiplenslensALensALens' AnIndexedLensAnIndexedLens'Control.Lens.SetterimapOfmapOfassignA.@= imodifying%@=.@~%@~isetsisetiover icensoring censoringipassingpassingscribe<>=<>~>=>>returnfmapControl.Monad.FixMonadFixmfixmapMsequenceliftM mtl-2.2.1-DscMMmDQUE6GBfOSl4qMUHControl.Monad.State.Class MonadStategetstateput MonadPlusmzeromplusControl.Monad.IO.ClassMonadIOliftIOmfilter<$!>unless replicateM_ replicateMfoldM_foldM zipWithM_zipWithM mapAndUnzipMforever<=<>=>filterMforM Data.Foldablemsum sequence_forM_mapM_fix Data.FunctorvoidapliftM5liftM4liftM3liftM2when=<< Control.Monad.Trans.State.StrictStateT runStateT MonadTransgetsmodifymodify'StaterunState evalState execStatemapState withState evalStateT execStateT mapStateT withStateTJust"stm-2.4.4.1-6AExGOUG8NB2Rzejnay0wwControl.Concurrent.STM.TQueueTQueueControl.Exception.Basebracket#text-1.2.2.2-EakMpasry3jA6OIwSZhq9MData.Text.InternalMonoid GHC.ClassesEqidCsimappendGraphics.Vty.Image.InternalImageGraphics.Vty.Input.EventsEventGraphics.Vty.Attributes.ColorStandout Underline ReverseVideoBlinkDimBoldBlackRedGreenYellowBlueMagentaCyanWhite BrightBlack BrightRed BrightGreen BrightYellow BrightBlue BrightMagenta BrightCyan BrightWhite foreColor backColorstylememptycontainers-0.5.10.2Data.Map.InternalMapPositionTabWidthControl.Monad.Reader.Classlocal MonadReaderask Graphics.Vty"pipes-4.3.8-CxwyrRznxAXDkTQI1Xqjeb Pipes.CoreConsumerGraphics.Vty.ConfiginputFdoutputFdIOEvKeyKEnterpureKUpGraphics.Vty.PicturePicturereverse