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
show :: PrintObject -> String
show PrintObject
Configuration = String
configurationTag
show 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
]