{- This 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 git://pmade.com/byline/LICENSE. No part of the byline package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. -} -------------------------------------------------------------------------------- -- | The completion types. module System.Console.Byline.Completion ( CompletionFunc , Completion (..) ) where -------------------------------------------------------------------------------- -- Library imports: import Data.Text (Text) -------------------------------------------------------------------------------- -- | 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 the way that Byline uses 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. Patches welcome. type CompletionFunc = (Text, Text) -> IO (Text, [Completion]) -------------------------------------------------------------------------------- -- | A type representing a completion match to the user's input. data Completion = Completion { 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. } deriving (Eq, Ord, Show)