{-# LANGUAGE LambdaCase #-}
module BishBosh.UI.PrintObject (
PrintObject(..),
configurationTag,
helpTag,
range,
autoComplete
) where
import qualified BishBosh.Property.FixedMembership as Property.FixedMembership
import qualified BishBosh.Text.AutoComplete as Text.AutoComplete
import qualified Control.Arrow
import qualified Control.DeepSeq
import qualified Data.List.Extra
configurationTag :: String
configurationTag :: String
configurationTag = String
"configuration"
helpTag :: String
helpTag :: String
helpTag = String
"help"
data PrintObject
= Configuration
| Help
deriving PrintObject -> PrintObject -> Bool
(PrintObject -> PrintObject -> Bool)
-> (PrintObject -> PrintObject -> Bool) -> Eq PrintObject
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PrintObject -> PrintObject -> Bool
$c/= :: PrintObject -> PrintObject -> Bool
== :: PrintObject -> PrintObject -> Bool
$c== :: PrintObject -> PrintObject -> Bool
Eq
instance Control.DeepSeq.NFData PrintObject where
rnf :: PrintObject -> ()
rnf PrintObject
_ = ()
instance Show PrintObject where
showsPrec :: Int -> PrintObject -> ShowS
showsPrec Int
_ = String -> ShowS
showString (String -> ShowS)
-> (PrintObject -> String) -> PrintObject -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. \case
PrintObject
Configuration -> String
configurationTag
PrintObject
Help -> String
helpTag
instance Read PrintObject where
readsPrec :: Int -> ReadS PrintObject
readsPrec Int
_ String
s = case ShowS -> (String, String) -> (String, String)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
Control.Arrow.first ShowS
Data.List.Extra.lower ((String, String) -> (String, String))
-> [(String, String)] -> [(String, String)]
forall a b. (a -> b) -> [a] -> [b]
`map` ReadS String
lex String
s of
[(String
"configuration", String
remainder)] -> [(PrintObject
Configuration, String
remainder)]
[(String
"help", String
remainder)] -> [(PrintObject
Help, String
remainder)]
[(String, String)]
_ -> []
range :: [PrintObject]
range :: [PrintObject]
range = [PrintObject
Configuration, PrintObject
Help]
instance Property.FixedMembership.FixedMembership PrintObject where
members :: [PrintObject]
members = [PrintObject]
range
autoComplete :: ShowS
autoComplete :: ShowS
autoComplete = [String] -> ShowS
Text.AutoComplete.autoComplete [
String
configurationTag,
String
helpTag
]