module BishBosh.Text.AutoComplete (
autoComplete
) where
import qualified BishBosh.Data.List as Data.List
import qualified Control.Arrow
import qualified Data.Char
import qualified Data.List.Extra
autoComplete
:: [String]
-> String
-> String
autoComplete :: [String] -> String -> String
autoComplete [String]
choices = (String -> String -> String) -> (String, String) -> String
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry String -> String -> String
forall a. [a] -> [a] -> [a]
(++) ((String, String) -> String)
-> (String -> (String, String)) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> String) -> (String, String) -> (String, String)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
Control.Arrow.first (
(String -> String) -> [String] -> String -> String
forall a. Eq a => ([a] -> [a]) -> [[a]] -> [a] -> [a]
Data.List.unabbreviate String -> String
Data.List.Extra.lower [String]
choices
) ((String, String) -> (String, String))
-> (String -> (String, String)) -> String -> (String, String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
break Char -> Bool
Data.Char.isSpace (String -> (String, String))
-> (String -> String) -> String -> (String, String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
Data.List.Extra.trimStart