    module DBus.Introspection.Types where

    import qualified DBus as T

    data Object = Object
        { Object -> ObjectPath
    objectPath :: T.ObjectPath
        , Object -> [Interface]
    objectInterfaces :: [Interface]
        , Object -> [Object]
    objectChildren :: [Object]
        }
        deriving (Int -> Object -> ShowS
    [Object] -> ShowS
    Object -> String
    (Int -> Object -> ShowS)
    -> (Object -> String) -> ([Object] -> ShowS) -> Show Object
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Object -> ShowS
    showsPrec :: Int -> Object -> ShowS
    $cshow :: Object -> String
    show :: Object -> String
    $cshowList :: [Object] -> ShowS
    showList :: [Object] -> ShowS
    Show, Object -> Object -> Bool
    (Object -> Object -> Bool)
    -> (Object -> Object -> Bool) -> Eq Object
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Object -> Object -> Bool
    == :: Object -> Object -> Bool
    $c/= :: Object -> Object -> Bool
    /= :: Object -> Object -> Bool
    Eq)

    data Interface = Interface
        { Interface -> InterfaceName
    interfaceName :: T.InterfaceName
        , Interface -> [Method]
    interfaceMethods :: [Method]
        , Interface -> [Signal]
    interfaceSignals :: [Signal]
        , Interface -> [Property]
    interfaceProperties :: [Property]
        }
        deriving (Int -> Interface -> ShowS
    [Interface] -> ShowS
    Interface -> String
    (Int -> Interface -> ShowS)
    -> (Interface -> String)
    -> ([Interface] -> ShowS)
    -> Show Interface
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Interface -> ShowS
    showsPrec :: Int -> Interface -> ShowS
    $cshow :: Interface -> String
    show :: Interface -> String
    $cshowList :: [Interface] -> ShowS
    showList :: [Interface] -> ShowS
    Show, Interface -> Interface -> Bool
    (Interface -> Interface -> Bool)
    -> (Interface -> Interface -> Bool) -> Eq Interface
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Interface -> Interface -> Bool
    == :: Interface -> Interface -> Bool
    $c/= :: Interface -> Interface -> Bool
    /= :: Interface -> Interface -> Bool
    Eq)

    data Method = Method
        { Method -> MemberName
    methodName :: T.MemberName
        , Method -> [MethodArg]
    methodArgs :: [MethodArg]
        }
        deriving (Int -> Method -> ShowS
    [Method] -> ShowS
    Method -> String
    (Int -> Method -> ShowS)
    -> (Method -> String) -> ([Method] -> ShowS) -> Show Method
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Method -> ShowS
    showsPrec :: Int -> Method -> ShowS
    $cshow :: Method -> String
    show :: Method -> String
    $cshowList :: [Method] -> ShowS
    showList :: [Method] -> ShowS
    Show, Method -> Method -> Bool
    (Method -> Method -> Bool)
    -> (Method -> Method -> Bool) -> Eq Method
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Method -> Method -> Bool
    == :: Method -> Method -> Bool
    $c/= :: Method -> Method -> Bool
    /= :: Method -> Method -> Bool
    Eq)

    data MethodArg = MethodArg
        { MethodArg -> String
    methodArgName :: String
        , MethodArg -> Type
    methodArgType :: T.Type
        , MethodArg -> Direction
    methodArgDirection :: Direction
        }
        deriving (Int -> MethodArg -> ShowS
    [MethodArg] -> ShowS
    MethodArg -> String
    (Int -> MethodArg -> ShowS)
    -> (MethodArg -> String)
    -> ([MethodArg] -> ShowS)
    -> Show MethodArg
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> MethodArg -> ShowS
    showsPrec :: Int -> MethodArg -> ShowS
    $cshow :: MethodArg -> String
    show :: MethodArg -> String
    $cshowList :: [MethodArg] -> ShowS
    showList :: [MethodArg] -> ShowS
    Show, MethodArg -> MethodArg -> Bool
    (MethodArg -> MethodArg -> Bool)
    -> (MethodArg -> MethodArg -> Bool) -> Eq MethodArg
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: MethodArg -> MethodArg -> Bool
    == :: MethodArg -> MethodArg -> Bool
    $c/= :: MethodArg -> MethodArg -> Bool
    /= :: MethodArg -> MethodArg -> Bool
    Eq)

    data Direction = In | Out
        deriving (Int -> Direction -> ShowS
    [Direction] -> ShowS
    Direction -> String
    (Int -> Direction -> ShowS)
    -> (Direction -> String)
    -> ([Direction] -> ShowS)
    -> Show Direction
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Direction -> ShowS
    showsPrec :: Int -> Direction -> ShowS
    $cshow :: Direction -> String
    show :: Direction -> String
    $cshowList :: [Direction] -> ShowS
    showList :: [Direction] -> ShowS
    Show, Direction -> Direction -> Bool
    (Direction -> Direction -> Bool)
    -> (Direction -> Direction -> Bool) -> Eq Direction
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Direction -> Direction -> Bool
    == :: Direction -> Direction -> Bool
    $c/= :: Direction -> Direction -> Bool
    /= :: Direction -> Direction -> Bool
    Eq)

    data Signal = Signal
        { Signal -> MemberName
    signalName :: T.MemberName
        , Signal -> [SignalArg]
    signalArgs :: [SignalArg]
        }
        deriving (Int -> Signal -> ShowS
    [Signal] -> ShowS
    Signal -> String
    (Int -> Signal -> ShowS)
    -> (Signal -> String) -> ([Signal] -> ShowS) -> Show Signal
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Signal -> ShowS
    showsPrec :: Int -> Signal -> ShowS
    $cshow :: Signal -> String
    show :: Signal -> String
    $cshowList :: [Signal] -> ShowS
    showList :: [Signal] -> ShowS
    Show, Signal -> Signal -> Bool
    (Signal -> Signal -> Bool)
    -> (Signal -> Signal -> Bool) -> Eq Signal
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Signal -> Signal -> Bool
    == :: Signal -> Signal -> Bool
    $c/= :: Signal -> Signal -> Bool
    /= :: Signal -> Signal -> Bool
    Eq)

    data SignalArg = SignalArg
        { SignalArg -> String
    signalArgName :: String
        , SignalArg -> Type
    signalArgType :: T.Type
        }
        deriving (Int -> SignalArg -> ShowS
    [SignalArg] -> ShowS
    SignalArg -> String
    (Int -> SignalArg -> ShowS)
    -> (SignalArg -> String)
    -> ([SignalArg] -> ShowS)
    -> Show SignalArg
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> SignalArg -> ShowS
    showsPrec :: Int -> SignalArg -> ShowS
    $cshow :: SignalArg -> String
    show :: SignalArg -> String
    $cshowList :: [SignalArg] -> ShowS
    showList :: [SignalArg] -> ShowS
    Show, SignalArg -> SignalArg -> Bool
    (SignalArg -> SignalArg -> Bool)
    -> (SignalArg -> SignalArg -> Bool) -> Eq SignalArg
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: SignalArg -> SignalArg -> Bool
    == :: SignalArg -> SignalArg -> Bool
    $c/= :: SignalArg -> SignalArg -> Bool
    /= :: SignalArg -> SignalArg -> Bool
    Eq)

    data Property = Property
        { Property -> String
    propertyName :: String
        , Property -> Type
    propertyType :: T.Type
        , Property -> Bool
    propertyRead :: Bool
        , Property -> Bool
    propertyWrite :: Bool
        }
        deriving (Int -> Property -> ShowS
    [Property] -> ShowS
    Property -> String
    (Int -> Property -> ShowS)
    -> (Property -> String) -> ([Property] -> ShowS) -> Show Property
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> Property -> ShowS
    showsPrec :: Int -> Property -> ShowS
    $cshow :: Property -> String
    show :: Property -> String
    $cshowList :: [Property] -> ShowS
    showList :: [Property] -> ShowS
    Show, Property -> Property -> Bool
    (Property -> Property -> Bool)
    -> (Property -> Property -> Bool) -> Eq Property
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: Property -> Property -> Bool
    == :: Property -> Property -> Bool
    $c/= :: Property -> Property -> Bool
    /= :: Property -> Property -> Bool
    Eq)