84P      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNONonePPPNoneQRSNone%TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxTUVWXYZ[\]^_`abcdefghijklmnouT a`_^]\[ZYXWVUbcdefghijklmnopqrstuvwxNone7The maximum number of lines stored in the history. If y$, the history storage is unlimited. 5The input lines stored in the history (newest first) ;Reads the line input history from the given file. Returns  2 if the file does not exist or could not be read. ;Writes the line history to the given file. If there is an 2 error when writing the file, it will be ignored. 1Limit the number of lines stored in the history. JAdd a line to the history unless it matches the previously recorded line. JAdd a line to the history, and remove all previous entries which are the  same as it. z{| } ~    z{| } ~ None reversed 2Used for commands which take an integer argument. SUsed by vi mode. Considers the cursor to be located over some specific character.  The first list is reversed. KThe standard line state representation; considers the cursor to be located 6 between two characters. The first list is reversed. WThe characters in the line (with the cursor in the middle). NOT in a zippered format; E both lists are in the order left->right that appears on the screen. JThis class abstracts away the internal representations of the line state, U for use by the drawing actions. Line state is generally stored in a zipper format. A N is a fundamental unit of display for the UI. Several characters in sequence - can represent one grapheme; for example, an a followed by the diacritic '\768' should  be treated as one unit.  Create a  from a single base character. NOTE: Careful, don'>t use outside this module; and inside, make sure this is only * ever called on non-combining characters. 'Add a combining character to the given . 0Converts a string into a sequence of graphemes. :NOTE: Drops any initial, unattached combining characters. ,Accessor function for the various backends. GCompute the number of characters under and to the right of the cursor. IInsert one character, which may be combining, to the left of the cursor. <Insert a sequence of characters to the left of the cursor. aThe input prefix. The current line state. #The text to the left of the cursor  (including the prefix). /The text under and to the right of the cursor. JI None,     &       NoneBSplit off the maximal list which is no more than the given width. ! returns the width of that list. NoneAn instance of , is generally made up of monad transformers # layered on top of the IO monad. The  method enables us to "lift"* a function that manages IO actions (such  as  or 8) into a function that wraps arbitrary monadic actions. A ! function takes a monadic action m as input, G and outputs an IO action which performs the underlying impure part of m  and returns the ''pure'' part of m.  Note that (RunIO return)3 is an incorrect implementation, since it does not P separate the pure and impure parts of the monadic action. This module defines 8 implementations for several common monad transformers. Lift a IO operation   wrap :: (a -> IO b) -> IO b $to a more general monadic operation  8 liftIOOp wrap :: MonadException m => (a -> m b) -> m b For example:    (  4 f m) :: MonadException m => (Handle -> m r) -> m r   < :: (MonadException m, Storable a) => (Ptr a -> m b) -> m b   (2 fp) :: MonadException m => (Ptr a -> m b) -> m b Lift an IO operation   wrap :: IO a -> IO a $to a more general monadic operation 2 liftIOOp_ wrap :: MonadException m => m a -> m a NoneR allow the user to customize the terminal-style line-editing interface. They are read by default from ~/ .haskeline!; to override that behavior, use  and runInputTWithPrefs. Each line of a  .haskeline file defines one field of the 0 datatype; field names are case-insensitive and -unparseable lines are ignored. For example:  editMode: Vi  completionType: MenuCompletion  maxhistorysize: Just 40 3When listing completion alternatives, only display ( one screen of possibilities at a time. 'If more than this number of completion 2 possibilities are found, then ask before listing  them. If  *, completions with multiple possibilities 6 will ring the bell and only display them if the user  presses TAB again. 8The default preferences which may be overwritten in the   .haskeline file. Read < from a given file. If there is an error reading the file,  the  will be returned. "!"#$%&'()*+,-./0123456789:;<!"#$%&'()*+,-./0123456< !$#"%'&(+*),.- /0123456789:;<None=>?@ABCDEFGHIJKLMNOPQRSTUVWX*YZ[\]^_`abc=@ABCDEFGHIJKMN=>?@ABCDEFGHIJKLMNOPQRSTUVWXNone defghijklmnop defghijklmnop defghijklmnopNone&qrstuvwxyz{|}~$qrstuvwxyz{|}~qsrtuvwxyz{|}~NoneNone Text to insert in line. Text to display when listing  alternatives. !*Whether this word should be followed by a  space, end quote, etc. "0Performs completions from the given line state.  The first A argument is the contents of the line to the left of the cursor,  reversed.  The second B argument is the contents of the line to the right of the cursor.  The output ? is the unused portion of the left half of the line, reversed. #Disable completion altogether. $ A custom "A which completes the word immediately to the left of the cursor. ZA word begins either at the start of the line or after an unescaped whitespace character. % A custom "A which completes the word immediately to the left of the cursor, C and takes into account the line contents to the left of the word. ZA word begins either at the start of the line or after an unescaped whitespace character. &4Create a finished completion out of the given word. *;List all of the files or folders beginning with this path.  !"#$An optional escape character %Characters which count as whitespace 3Function to produce a list of possible completions %An optional escape character %Characters which count as whitespace OFunction to produce a list of possible completions. The first argument is the S line contents to the left of the word, reversed. The second argument is the word  to be completed. &'()An optional escape character  Characters which set off quotes 3Function to produce a list of possible completions (Alternate completion to perform if the  cursor is not at a quoted word * !"#$%&'()*" !#&$%)(*' !"#$%&'()*None .Operations needed for file-style interaction. KBackends can assume that getLocaleLine, getLocaleChar and maybeReadNewline  are wrapped by wrapFileInput. e.g. for turning off echoing. 2Operations needed for terminal-style interaction. $Write unicode characters to stdout. )Are we using terminal-style interaction? Utility function since we'%re not using the new IO library yet. KUtility function for changing a property of a terminal for the duration of  a computation. AReturns one 8-bit word. Needs to be wrapped by hWithBinaryMode. NUtility function to correctly get a line of input as an undecoded ByteString. 8+,6+,+,NoneNoneAn 4 is a handle which may or may not be in the correct  mode for Unicode input/-output. When the POSIX backend opens a file  (or dev1tty) it sets it permanently to the correct mode. J However, when it uses an existing handle like stdin, it only temporarily G sets it to the correct mode (e.g., for the duration of getInputLine); E otherwise, we might interfere with the rest of the Haskell program. 8For the legacy backend, the correct mode is BinaryMode. F For the new backend, the correct mode is the locale encoding, set to C transliterate errors (rather than crashing, as is the base library's  default.) (See Posix/ Recover.hs) =Use to ensure that an external handle is in the correct mode ' for the duration of the given action.  None&      !"#$%&'()*#$&(!      !"#$%&'()*None+ The length of each nonempty row ,2The last nonempty row, or zero if the entire line 9 is empty. Note that when the cursor wraps to the first - column of the next line, termRow > lastRow. -9Keep track of all of the output capabilities we can use. We''ll be frequently using the (automatic) . instance for  Actions -> TermOutput. >/0123456+,789:-;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi2M+/0123456+,789:- ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiNonej#$ of visible chars to left of cursor klmnopjqrstuvwxyz{|}~klmnopjqrstuvwxyz{|}klmnopjqrstuvwxyz{|}~NoneNone-5Haskeline has two ways of interacting with the user:  "Terminal-style"; interaction provides an rich user interface by connecting  to the user'(s terminal (which may be different than  or ).  " File-style"L interaction treats the input as a simple stream of characters, for example > when reading from a file or pipe. Input functions (e.g.,  getInputLine) print the prompt to . A -J is a method for deciding at run-time which type of interaction to use. &For most applications (e.g., a REPL), >! should have the correct effect. .@A monad transformer which carries all of the state and settings ) relevant to a line-reading application. /;Application-specific customizations to the user interface. 1Custom tab completion. 2 Where to read/write the history at the  start and end of each  line input session. 3If !, each nonblank line returned by   getInputLine- will be automatically added to the history. 4Because 1 is the only field of / depending on m,  the expression $defaultSettings {completionFunc = f} leads to a type error m from being too general. This function works around that issue, and may become unnecessary if another field  depending on m is added. 5$Get the current line input history. 6Set the line input history. 7'Change the current line input history. 8&Run a line-reading application. Uses > to determine the  interaction behavior. 9URun a line-reading application. This function should suffice for most applications. This function is equivalent to ; >. It $ uses terminal-style interaction if $ is connected to a terminal and has ' echoing enabled. Otherwise (e.g., if - is a pipe), it uses file-style interaction. 'If it uses terminal-style interaction,  will be read from the user's ~/ .haskeline file  (if present). $ If it uses file-style interaction, ( are not relevant and will not be read. :Returns ? if the current session uses terminal-style interaction. (See -.) BCreate and use a RunTerm, ensuring that it will be closed even if 7 an async exception occurs during the creation or use. ;@Run a line-reading application according to the given behavior. 'If it uses terminal-style interaction,  will be read from the  user's ~/ .haskeline file (if present). $ If it uses file-style interaction, ( are not relevant and will not be read. < Run a line-reading application. 7Helper function to feed the parameters into an InputT. =@Map a user interaction by modifying the base monad computation. >Read input from . # Use terminal-style interaction if  is connected to : a terminal and has echoing enabled. Otherwise (e.g., if  is a pipe), use  file-style interaction. 6This behavior should suffice for most applications. ?9Use file-style interaction, reading input from the given . @?Use file-style interaction, reading input from the given file. A:Use terminal-style interaction whenever possible, even if  and/or  are not  terminals. If it cannot open the user';s terminal, use file-style interaction, reading input from . Read  from ~/ .haskeline.* If there is an error reading the file,  the  will be returned. !-./0123456789:;<=>?@A-./0123456789:;<=>?@A-./0123456789:;<=>?@ANone Create a  for word completion. ,-." None>=8!None   None B"A useful default. In particular:   defaultSettings = Settings { ( complete = completeFilename, " historyFile = Nothing, ! autoAddHistory = True  } C"Write a Unicode string to the user's standard output. DWrite a string to the user'*s standard output, followed by a newline. EReads one line of input. The final newline (if any) is removed. When using terminal-style interaction, this function provides a rich line-editing user interface. If 3 == 2 and the line input is nonblank (i.e., is not all 8spaces), it will be automatically added to the history. FTReads one line of input and fills the insertion space with initial text. When using _terminal-style interaction, this function provides a rich line-editing user interface with the /added ability to give the user default values. 2This function behaves in the exact same manner as E, except that _it pre-populates the input area. The text that resides in the input area is given as a 2-tuple  with two >s. The string on the left of the tuple (obtained by calling ) is Twhat will appear to the left of the cursor and the string on the right (obtained by calling 2) is what will appear to the right of the cursor. /Some examples of calling of this function are: ^ getInputLineWithInitial "prompt> " ("left", "") -- The cursor starts at the end of the line. d getInputLineWithInitial "prompt> " ("left ", "right") -- The cursor starts before the second word. GAReads one character of input. Ignores non-printable characters. RWhen using terminal-style interaction, the character will be read without waiting for a newline. OWhen using file-style interaction, a newline will be read if it is immediately %available after the input character. HOReads one line of input, without displaying the input while it is being typed. kWhen using terminal-style interaction, the masking character (if given) will replace each typed character. QWhen using file-style interaction, this function turns off echoing while reading the line of input. Wrapper for input functions. ! This is the function that calls  wrapFileInput around file backend input  functions (see Term.hs). IAIf Ctrl-C is pressed during the given action, throw an exception of type +. For example:   tryAction :: InputT IO () = tryAction = handle (\Interrupt -> outputStrLn "Cancelled.") 1 $ wrapInterrupt $ someLongAction 2The action can handle the interrupt itself; a new + exception will be thrown every time Ctrl-C is pressed.   tryAction :: InputT IO ()  tryAction = wrapInterrupt loop U where loop = handle (\Interrupt -> outputStrLn "Cancelled; try again." >> loop) # someLongAction This behavior differs from GHC'"s built-in Ctrl-C handling, which Rmay immediately terminate the program after the second time that the user presses Ctrl-C. J&Catch and handle an exception of type +. . handleInterrupt f = handle $ \Interrupt -> f BCDEThe input prompt FThe input prompt /The initial value left and right of the cursor GThe input prompt HA masking character; e.g., Just '*' IJA !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ#.9:=-;>?@AEFGHCD/0123B48<567I+,JBCDEFGHIJNoneL8Initialize a session of line-oriented user interaction. MNFinish and clean up the line-oriented user interaction session. Blocks on an  existing call to O. NQCancel and clean up the user interaction session. Does not block on an existing  call to O. ORun one action (for example, E,) as part of a session of user interaction. For example, multiple calls to O using the same K will share : the same input history. In constrast, multiple calls to 9 will use distinct 4 histories unless they share the same history file. <This function should not be called on a closed or cancelled K. KLMNOKLMNOKLMNOKLMNO"#$"%&"%&"%'()*+,-./01234456789:;<=>?@@ABCDEFGHIJKLMMNOPPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsqrtqruvwxyz{|}~"(                                                          ! " # $ % & ' ( ) * + , -./0123456789:;<=>?@ABCDEFGHI=JKLMNOPQRSTUVWWXYZ[\]^_`abcdefg3hijklmnopqrsqrtquvquwqxyqxzqxzqx{q|}q|~q|~"        !"#$%&'()*+,-./0123456789:;"<=>?@AABCCDDEF;GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwwxyyz{|l}L~do""9:"NO                                                              !!!!!!!!!!!!""haskeline-0.7.0.3'System.Console.Haskeline.MonadException System.Console.Haskeline.HistorySystem.Console.Haskeline#System.Console.Haskeline.CompletionSystem.Console.Haskeline.IO System.Console.Haskeline.Recover"System.Console.Haskeline.DirectorySystem.Console.Haskeline.Key"System.Console.Haskeline.LineState System.Console.Haskeline.Command(System.Console.Haskeline.Backend.WCWidth System.IOwithFileForeign.Marshal.AllocallocaForeign.ForeignPtrwithForeignPtrSystem.Console.Haskeline.PrefsSystem.Console.Haskeline.Monads%System.Console.Haskeline.Command.Undo(System.Console.Haskeline.Command.History)System.Console.Haskeline.Command.KillRingSystem.Console.Haskeline.Term#System.Console.Haskeline.RunCommand.System.Console.Haskeline.Backend.Posix.Encoder&System.Console.Haskeline.Backend.Posix)System.Console.Haskeline.Backend.Terminfo)System.Console.Haskeline.Backend.DumbTerm System.Console.Haskeline.BackendSystem.Console.Haskeline.InputT+System.Console.Haskeline.Command.CompletionSystem.Console.Haskeline.ViSystem.Console.Haskeline.EmacsbaseGHC.IO.Exception IOException GHC.Exception SomeException ExceptionHistory stifleAmount emptyHistory historyLines readHistory writeHistory stifleHistory addHistoryaddHistoryUnlessConsecutiveDupeaddHistoryRemovingAllDupesMonadException controlIORunIOliftIOOp liftIOOp_catchhandlebracketfinallythrowIOthrowToPrefs defaultPrefs readPrefs Completion replacementdisplay isFinishedCompletionFunc noCompletion completeWordcompleteWordWithPrevsimpleCompletionfilenameWordBreakCharscompleteFilenamecompleteQuotedWord listFiles InterruptBehaviorInputTSettingscomplete historyFileautoAddHistory setComplete getHistory putHistory modifyHistoryrunInputTWithPrefs runInputThaveTerminalUIrunInputTBehaviorrunInputTBehaviorWithPrefs mapInputTdefaultBehavior useFileHandleuseFile preferTermdefaultSettings outputStr outputStrLn getInputLinegetInputLineWithInitial getInputChar getPassword withInterrupthandleInterrupt InputStateinitializeInput closeInput cancelInput queryInputtransliterateFailuredirectory-1.2.0.1System.DirectorygetHomeDirectorydoesDirectoryExistgetDirectoryContentsBaseKeyDelete BackspacePageUpPageDownEndHomeKillLineUpKeyDownKeyRightKeyLeftKeyFunKeyKeyCharModifier hasControlhasMetahasShiftKey noModifier simpleKeymetaKeyctrlKey simpleCharmetaCharctrlCharsetControlBits specialKeysparseModifiers parseModifier breakAtDashesparseKey parseBaseKeycanonicalizeKey$fShowModifier Data.MaybeNothing histLines stifleAmt maybeDropLast readUTF8File writeUTF8File $fShowHistory passwordStateArgMode CommandMode InsertMode LineChars LineStateGrapheme baseGrapheme addCombinerstringToGraphemes lineChars lengthToEnd insertChar insertStringPassword passwordCharMessage messageState messageTextargargStateCEmptyCModeIModeMovegoLeft moveToEnd moveToStartgoRightSavesaverestoreResulttoResultPrefix beforeCursor afterCursor gBaseCharcombiningCharsbaseCharmodifyBaseChar mapBaseCharsisCombiningChargraphemesToStringlistSave listRestoreemptyIM deleteNext deletePrevskipLeft skipRighttransposeCharsinsertGraphemes replaceCharIM deleteChar replaceCharpasteGraphemesBeforepasteGraphemesAfterenterCommandModeenterCommandModeRightinsertFromCommandModeappendFromCommandModewithCommandModestartArgaddNumapplyArgrepeatN applyCmdArgaddPasswordChardeletePasswordCharatStartatEndoverChar beforeChar afterChar goRightUntil goLeftUntil$fResultPassword$fLineStatePassword$fLineStateMessage $fSaveArgMode$fResultArgMode$fLineStateArgMode$fFunctorArgMode$fMoveCommandMode$fSaveCommandMode$fResultCommandMode$fLineStateCommandMode$fMoveInsertMode$fSaveInsertMode$fResultInsertMode$fLineStateInsertMode$fShowGrapheme KeyCommandCommandCmdMDoEffectGetKey KeyConsumedConsumed NotConsumedKeyMaplookupKMEffectRingBell ClearScreen PrintLines LineChange lineChange keyCommanduseKeyuseCharwithoutConsuming choiceCmd keyChoiceCmd keyChoiceCmdM>|>>+>try+>finishfailCmdeffectclearScreenCmd simpleCommand charCommandsetStatechangechangeFromChardoBefore$fMonadTransCmdM $fMonadCmdM$fFunctorKeyConsumed$fFunctorKeyMap splitAtWidthhaskeline_mk_wcwidthwcwidthgWidthgsWidth splitAtWidth' takeWidth$fMonadExceptionRWST$fMonadExceptionWriterT$fMonadExceptionListT$fMonadExceptionErrorT$fMonadExceptionMaybeT$fMonadExceptionStateT$fMonadExceptionReaderT$fMonadExceptionIOcompletionPagingcompletionPromptLimitlistCompletionsImmediatelyghc-prim GHC.TypesFalseHistoryDuplicates IgnoreAllIgnoreConsecutive AlwaysAddEditModeEmacsVi BellStyle AudibleBell VisualBellNoBellCompletionTypeMenuCompletionListCompletion bellStyleeditModemaxHistorySizehistoryDuplicatescompletionTypecustomBindingscustomKeySequencesmkSettor readMaybesettorsaddCustomBindingaddCustomKeySequencelookupKeyBindingStateT getStateTFunc MonadStategetput MonadReaderaskasksgetsmodifyupdate runReaderT' mapStateT runStateT makeStateT evalStateT'orElse$fMonadStatesReaderT$fMonadStatest$fMonadStatesStateT$fMonadIOStateT$fMonadTransStateT $fMonadStateT$fMonadReaderrt$fMonadReadersStateT$fMonadReaderrReaderTtransformers-0.3.0.0Control.Monad.Trans.Classlift MonadTransControl.Monad.IO.ClassliftIOMonadIOControl.Monad.Trans.Reader runReaderTReaderT mapReaderTControl.Monad.Trans.Maybe runMaybeTMaybeTUndoTUndopastUndo futureRedorunUndoT initialUndo saveToUndoundoPast redoFuture saveForUndo commandUndo commandRedo DirectionReverseForward SearchMode searchTerm foundHistory directionHistLog pastHistory futureHistory prevHistoryM prevHistorieshistLogrunHistoryFromFile prevHistory firstHistory historyBackhistoryForward historyStart historyEnd histUpdate reverseHist directionNamesaveSMstartSearchModeaddCharsearchHistories findInLine prepSearchsearchBackwardsdoSearch searchHistorysearchForPrefix findFirst$fResultSearchMode$fLineStateSearchMode KillHelper GenericKill SimpleMoveKillRingStack emptyStackpeekrotatepush runKillRing pasteCommanddeleteFromDiff'killFromHelperkillFromArgHelpercopyFromArgHelperkillAll applyHelperapplyArgHelperGHC.BaseString completionsetReplacementescapeReplacement addQuotes splitAtQuote isUnquotedfixPathFileOps inputHandleTermOps putStrOutisTerminalStylehWithBinaryMode bracketSethGetBytehGetLocaleLineLayoutwidthheightEvent ErrorEventKeyInput WindowResize CommandMonad runCompletionEvalTerm wrapFileInput getLocaleLine getLocaleCharmaybeReadNewline getLayout withGetEventevalTermsaveUnusedKeysRunTermtermOps wrapInterrupt closeTermTerm repositionmoveToNextLine printLines drawLineDiff clearLayoutringBelldrawLine clearLine mapEvalTerm matchInit keyEventLoopsaveKeys guardedEOFhMaybeReadNewline returnOnEOF$fCommandMonadt$fExceptionInterruptrunCommandLooprunCommandLoop'drawReposition drawEffectactBellapplyKeysToMapapplyKeysToCmdExternalHandlewithCodingMode ExternalMode OtherMode CodingMode externalModeeHDecoderEncoder newEncodersexternalHandlehSetBinOrEncodinghaskelineEncodingopenInCodingMode putEncodedStr getTermTextgetBlockOfCharsgetDecodedChargetDecodedLinePosixTTreeMapHandleshInhOut closeHandlesioctlehInehOut posixLayouts ioctlLayoutunsafeHandleToFD envLayout tryGetLayoutsgetKeySequencesansiKeyssttyKeys emptyTreeMapinsertIntoTree listToTreemapLineslexKeys lookupCharswithPosixGetEventwithWindowHandlerwithSigIntHandler withHandlergetEventstdinTTYHandles ttyHandlesopenTerm posixRunTerm runPosixT fileRunTermposixFileRunTermwrapTerminalOps rowLengthslastRowActions Data.MonoidMonoidActionMActionT TermActionDrawunDrawTermRowsTermPostermRowtermColleftArightAupAclearToLineEndnlcr bellAudible bellVisual clearAllAwrapLine getActions getWrapLine initTermPos initTermRowssetRow lookupCellsevalDrawrunTerminfoDraw wrapKeypad tinfoLayout terminfoKeys runActionToutput outputTextleftrightupclearAll mreplicatespaces changePos moveToPos moveRelative changeRight changeLeft advancePossum' printText drawLineDiffT getLinesLeft clearDeadText clearLayoutTmoveToNextLineT repositionT $fTermDraw$fMonadTransDrawpos DumbTermMDumbTerm unDumbTermWindow initWindowevalDumb runDumbTermcrlfbacks clearLayoutDmaxWidth drawLineDiff' refitLine$fTermDumbTerm$fMonadTransDumbTermdefaultRunTermterminalRunTermstdinTTY directTTYrunDrawfileHandleRunTermGHC.IO.Handle.FDstdinstdoutTrue withBehavior execInputTGHC.IO.Handle.TypesHandlereadPrefsFromHome InputCmdTunInputT runInputCmdT$fCommandMonadStateT$fMonadTransInputT$fApplicativeInputT$fFunctorInputT completionCmd useCompletionaskIMCompletionspresentCompletionsmenuCompletionmakePartialCompletionpagingCompletionaskFirstpageCompletions printPage makeLinespadWordssplitIntoGroupsceilDiv SearchEntry entryState searchChar InputKeyCmdInputCmdViTViState lastCommand lastSearch SavedCommand EitherMode emptyViState viKeyCommands viCommandssimpleInsertions insertChars eofIfEmptyviCommandActionsexitingCommandssimpleCmdActions replaceOncerepeatedCommands pureMovementsuseMovementsForKillrepeatableCommandsrepeatableCmdModeflipCaserepeatableCmdToIMode deletionCmddeletionToInsertCmd yankCommand reinputArggoToWordDelEndgoToBigWordDelEnd movements isBigWordChar isWordChar isOtherChar.||. foreachDigit wordErasefindMatchingBracedeleteMatchingBrace scanBracesmatchingRightBracematchingLeftBrace braceList replaceLoop storeLastCmd storedActionstoredCmdAction storedIActionkillAndStoreCmd killAndStoreIkillAndStoreIEnoArg searchText viEnterSearch viSearchHist$fLineStateSearchEntry emacsCommandsenders simpleActionscontrolActions rotatePaste wordRightwordLeft bigWordLeft modifyWord capitalize Data.Tuplefstsnd promptedInputgetInputCmdLinemaybeAddHistorygetPrintableChargetInputCmdChar acceptOneCharHD forkedThread requestVarsubthreadFinishedRequest runHaskeline