module Chiasma.Data.Cmd(
  CmdName(..),
  CmdArgs(..),
  Cmd(..),
  Cmds(..),
  cmd,
) where

newtype CmdName =
  CmdName Text
  deriving stock (CmdName -> CmdName -> Bool
(CmdName -> CmdName -> Bool)
-> (CmdName -> CmdName -> Bool) -> Eq CmdName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CmdName -> CmdName -> Bool
== :: CmdName -> CmdName -> Bool
$c/= :: CmdName -> CmdName -> Bool
/= :: CmdName -> CmdName -> Bool
Eq, Int -> CmdName -> ShowS
[CmdName] -> ShowS
CmdName -> String
(Int -> CmdName -> ShowS)
-> (CmdName -> String) -> ([CmdName] -> ShowS) -> Show CmdName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CmdName -> ShowS
showsPrec :: Int -> CmdName -> ShowS
$cshow :: CmdName -> String
show :: CmdName -> String
$cshowList :: [CmdName] -> ShowS
showList :: [CmdName] -> ShowS
Show)

newtype CmdArgs =
  CmdArgs [Text]
  deriving stock (CmdArgs -> CmdArgs -> Bool
(CmdArgs -> CmdArgs -> Bool)
-> (CmdArgs -> CmdArgs -> Bool) -> Eq CmdArgs
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CmdArgs -> CmdArgs -> Bool
== :: CmdArgs -> CmdArgs -> Bool
$c/= :: CmdArgs -> CmdArgs -> Bool
/= :: CmdArgs -> CmdArgs -> Bool
Eq, Int -> CmdArgs -> ShowS
[CmdArgs] -> ShowS
CmdArgs -> String
(Int -> CmdArgs -> ShowS)
-> (CmdArgs -> String) -> ([CmdArgs] -> ShowS) -> Show CmdArgs
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CmdArgs -> ShowS
showsPrec :: Int -> CmdArgs -> ShowS
$cshow :: CmdArgs -> String
show :: CmdArgs -> String
$cshowList :: [CmdArgs] -> ShowS
showList :: [CmdArgs] -> ShowS
Show)

data Cmd =
  Cmd CmdName CmdArgs
  deriving stock (Cmd -> Cmd -> Bool
(Cmd -> Cmd -> Bool) -> (Cmd -> Cmd -> Bool) -> Eq Cmd
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Cmd -> Cmd -> Bool
== :: Cmd -> Cmd -> Bool
$c/= :: Cmd -> Cmd -> Bool
/= :: Cmd -> Cmd -> Bool
Eq, Int -> Cmd -> ShowS
[Cmd] -> ShowS
Cmd -> String
(Int -> Cmd -> ShowS)
-> (Cmd -> String) -> ([Cmd] -> ShowS) -> Show Cmd
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Cmd -> ShowS
showsPrec :: Int -> Cmd -> ShowS
$cshow :: Cmd -> String
show :: Cmd -> String
$cshowList :: [Cmd] -> ShowS
showList :: [Cmd] -> ShowS
Show)

newtype Cmds =
  Cmds [Cmd]
  deriving stock (Cmds -> Cmds -> Bool
(Cmds -> Cmds -> Bool) -> (Cmds -> Cmds -> Bool) -> Eq Cmds
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Cmds -> Cmds -> Bool
== :: Cmds -> Cmds -> Bool
$c/= :: Cmds -> Cmds -> Bool
/= :: Cmds -> Cmds -> Bool
Eq, Int -> Cmds -> ShowS
[Cmds] -> ShowS
Cmds -> String
(Int -> Cmds -> ShowS)
-> (Cmds -> String) -> ([Cmds] -> ShowS) -> Show Cmds
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Cmds -> ShowS
showsPrec :: Int -> Cmds -> ShowS
$cshow :: Cmds -> String
show :: Cmds -> String
$cshowList :: [Cmds] -> ShowS
showList :: [Cmds] -> ShowS
Show)

cmd :: Text -> [Text] -> Cmd
cmd :: Text -> [Text] -> Cmd
cmd Text
name [Text]
args = CmdName -> CmdArgs -> Cmd
Cmd (Text -> CmdName
CmdName Text
name) ([Text] -> CmdArgs
CmdArgs [Text]
args)