byline-1.1.1: Library for creating command-line interfaces (colors, menus, etc.)
CopyrightThis file is part of the package byline. It is subject to the
license terms in the LICENSE file found in the top-level
directory of this distribution and at:

No part of this package including this file may be copied
modified propagated or distributed except according to the
terms contained in the LICENSE file.
Safe HaskellNone




A Note About Completion

Haskeline makes it very difficult (if not impossible) to implement a completion function that runs in an arbitrary monad. More information can be found in the documentation for CompletionFunc.

Completion Function

type CompletionFunc m = (Text, Text) -> m (Text, [Completion]) Source #

A completion function modeled after the one used in Haskeline.

Warning: If you're familiar with the Haskeline version of the CompletionFunc type please be sure to read this description carefully since the two behave differently.

The completion function is called when the user presses the tab key. The current input line is split into two parts based on where the cursor is positioned. Text to the left of the cursor will be the first value in the tuple and text to the right of the cursor will be the second value.

The text returned from the completion function is the text from the left of the cursor which wasn't used in the completion. It should also produce a list of possible Completion values.

In Haskeline, some of these text values are reversed. This is not the case in Byline.

A note about IO:

Due to Haskeline, the completion function is forced to return an IO value. It would be better if it could return a value in the base monad instead but it doesn't look like that's possible. Patches welcome.


data Completion Source #

A type representing a completion match to the user's input.





  • replacement :: Text

    Text to insert to the right of the cursor.

  • display :: Text

    Text to display when listing all completions.

  • isFinished :: Bool

    Whether to follow the completed word with a terminating space or close existing quotes.

Completion Helpers

data CompLoc Source #

Type to describe where completions are allowed.




Only complete the first word of input.


Complete any word except the first.


Perform completion anywhere in the input.

completionFromList Source #


:: forall m. Applicative m 
=> CompLoc

Where to allow completion.

-> [Text]

List of completion candidates.

-> CompletionFunc m

The generated completion function.

Generate a completion function that uses the given list as the completion candidates.


Setting the Active Completion Function

pushCompletionFunction :: MonadByline m => CompletionFunc IO -> m () Source #

Add a CompletionFunc to the stack.


popCompletionFunction :: MonadByline m => m () Source #

Remove the top completion function from the stack.