Copyright | 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: https://github.com/pjones/byline 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. |
---|---|
License | BSD-2-Clause |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- data Menu a
- menu :: ToStylizedText a => NonEmpty a -> Menu a
- menuBanner :: ToStylizedText b => b -> Menu a -> Menu a
- menuPrefix :: (Int -> Stylized Text) -> Menu a -> Menu a
- menuSuffix :: Stylized Text -> Menu a -> Menu a
- type FromChoice a = Menu a -> Map Text a -> Text -> Choice a
- menuFromChoiceFunc :: FromChoice a -> Menu a -> Menu a
- askWithMenu :: (MonadByline m, ToStylizedText a, ToStylizedText b) => Menu a -> b -> m (Choice a)
- askWithMenuRepeatedly :: (MonadByline m, ToStylizedText a, ToStylizedText b, ToStylizedText e) => Menu a -> b -> e -> m a
- data Choice a
- module Byline
Menus with Tab Completion
Menus are used to provide the user with a choice of acceptable values. Each choice is labeled to make it easier for a user to select it, or the user may enter text that does not correspond to any of the menus items.
For an example see the menu.hs
file in the examples
directory.
Building a Menu
Opaque type representing a menu containing items of type a
.
Since: 1.0.0.0
Instances
Foldable Menu Source # | |
Defined in Byline.Menu fold :: Monoid m => Menu m -> m # foldMap :: Monoid m => (a -> m) -> Menu a -> m # foldMap' :: Monoid m => (a -> m) -> Menu a -> m # foldr :: (a -> b -> b) -> b -> Menu a -> b # foldr' :: (a -> b -> b) -> b -> Menu a -> b # foldl :: (b -> a -> b) -> b -> Menu a -> b # foldl' :: (b -> a -> b) -> b -> Menu a -> b # foldr1 :: (a -> a -> a) -> Menu a -> a # foldl1 :: (a -> a -> a) -> Menu a -> a # elem :: Eq a => a -> Menu a -> Bool # maximum :: Ord a => Menu a -> a # |
menu :: ToStylizedText a => NonEmpty a -> Menu a Source #
Create a Menu
by giving a list of menu items and a function
that can convert those items into stylized text.
Since: 1.0.0.0
menuBanner :: ToStylizedText b => b -> Menu a -> Menu a Source #
Change the banner of a menu. The banner is printed just before the menu items are displayed.
Since: 1.0.0.0
menuPrefix :: (Int -> Stylized Text) -> Menu a -> Menu a Source #
Change the prefix function. The prefix function should generate unique, stylized text that the user can use to select a menu item. The default prefix function numbers the menu items starting with 1.
Since: 1.0.0.0
menuSuffix :: Stylized Text -> Menu a -> Menu a Source #
Change the menu item suffix. It is displayed directly after the menu item prefix and just before the menu item itself.
Default: ") "
Since: 1.0.0.0
type FromChoice a = Menu a -> Map Text a -> Text -> Choice a Source #
A function that is given the input from a user while working in a
menu and should translate that into a Choice
.
The Map
contains the menu item indexes/prefixes (numbers or
letters) and the items themselves.
The default FromChoice
function allows the user to select a menu
item by typing its index or part of its textual representation. As
long as input from the user is a unique prefix of one of the menu
items then that item will be returned.
Since: 1.0.0.0
menuFromChoiceFunc :: FromChoice a -> Menu a -> Menu a Source #
Change the FromChoice
function. The function should
compare the user's input to the menu items and their assigned
prefix values and return a Choice
.
Since: 1.0.0.0
Prompting with a Menu
:: (MonadByline m, ToStylizedText a, ToStylizedText b) | |
=> Menu a | The |
-> b | The prompt. |
-> m (Choice a) | The |
Ask the user to choose an item from a menu. The menu will only
be shown once and the user's choice will be returned in a Choice
value.
If you want to force the user to only choose from the displayed
menu items you should use askWithMenuRepeatedly
instead.
Since: 1.0.0.0
askWithMenuRepeatedly Source #
:: (MonadByline m, ToStylizedText a, ToStylizedText b, ToStylizedText e) | |
=> Menu a | The |
-> b | The prompt. |
-> e | Error message when the user tried to select a non-menu item. |
-> m a | The |
Like askWithMenu
except that arbitrary input is not allowed.
If the user doesn't correctly select a menu item then the menu will
be repeated and an error message will be displayed.
Since: 1.0.0.0
A type representing the choice made by a user while working with a menu.
Since: 1.0.0.0
Instances
Functor Choice Source # | |
Foldable Choice Source # | |
Defined in Byline.Menu fold :: Monoid m => Choice m -> m # foldMap :: Monoid m => (a -> m) -> Choice a -> m # foldMap' :: Monoid m => (a -> m) -> Choice a -> m # foldr :: (a -> b -> b) -> b -> Choice a -> b # foldr' :: (a -> b -> b) -> b -> Choice a -> b # foldl :: (b -> a -> b) -> b -> Choice a -> b # foldl' :: (b -> a -> b) -> b -> Choice a -> b # foldr1 :: (a -> a -> a) -> Choice a -> a # foldl1 :: (a -> a -> a) -> Choice a -> a # elem :: Eq a => a -> Choice a -> Bool # maximum :: Ord a => Choice a -> a # minimum :: Ord a => Choice a -> a # | |
Traversable Choice Source # | |
Eq a => Eq (Choice a) Source # | |
Show a => Show (Choice a) Source # | |
Re-exports
module Byline