{-# LANGUAGE DeriveDataTypeable, OverloadedStrings #-}
module Debian.Arch
    ( Arch(..)
    , ArchOS(..)
    , ArchCPU(..)
    , prettyArch
    , parseArch
    ) where

import Data.Data (Data)
import Data.Monoid ((<>))
import Data.Typeable (Typeable)
import Text.PrettyPrint (Doc, text)

data ArchOS = ArchOS String | ArchOSAny deriving (ArchOS -> ArchOS -> Bool
(ArchOS -> ArchOS -> Bool)
-> (ArchOS -> ArchOS -> Bool) -> Eq ArchOS
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ArchOS -> ArchOS -> Bool
$c/= :: ArchOS -> ArchOS -> Bool
== :: ArchOS -> ArchOS -> Bool
$c== :: ArchOS -> ArchOS -> Bool
Eq, Eq ArchOS
Eq ArchOS
-> (ArchOS -> ArchOS -> Ordering)
-> (ArchOS -> ArchOS -> Bool)
-> (ArchOS -> ArchOS -> Bool)
-> (ArchOS -> ArchOS -> Bool)
-> (ArchOS -> ArchOS -> Bool)
-> (ArchOS -> ArchOS -> ArchOS)
-> (ArchOS -> ArchOS -> ArchOS)
-> Ord ArchOS
ArchOS -> ArchOS -> Bool
ArchOS -> ArchOS -> Ordering
ArchOS -> ArchOS -> ArchOS
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ArchOS -> ArchOS -> ArchOS
$cmin :: ArchOS -> ArchOS -> ArchOS
max :: ArchOS -> ArchOS -> ArchOS
$cmax :: ArchOS -> ArchOS -> ArchOS
>= :: ArchOS -> ArchOS -> Bool
$c>= :: ArchOS -> ArchOS -> Bool
> :: ArchOS -> ArchOS -> Bool
$c> :: ArchOS -> ArchOS -> Bool
<= :: ArchOS -> ArchOS -> Bool
$c<= :: ArchOS -> ArchOS -> Bool
< :: ArchOS -> ArchOS -> Bool
$c< :: ArchOS -> ArchOS -> Bool
compare :: ArchOS -> ArchOS -> Ordering
$ccompare :: ArchOS -> ArchOS -> Ordering
$cp1Ord :: Eq ArchOS
Ord, ReadPrec [ArchOS]
ReadPrec ArchOS
Int -> ReadS ArchOS
ReadS [ArchOS]
(Int -> ReadS ArchOS)
-> ReadS [ArchOS]
-> ReadPrec ArchOS
-> ReadPrec [ArchOS]
-> Read ArchOS
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ArchOS]
$creadListPrec :: ReadPrec [ArchOS]
readPrec :: ReadPrec ArchOS
$creadPrec :: ReadPrec ArchOS
readList :: ReadS [ArchOS]
$creadList :: ReadS [ArchOS]
readsPrec :: Int -> ReadS ArchOS
$creadsPrec :: Int -> ReadS ArchOS
Read, Int -> ArchOS -> ShowS
[ArchOS] -> ShowS
ArchOS -> String
(Int -> ArchOS -> ShowS)
-> (ArchOS -> String) -> ([ArchOS] -> ShowS) -> Show ArchOS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ArchOS] -> ShowS
$cshowList :: [ArchOS] -> ShowS
show :: ArchOS -> String
$cshow :: ArchOS -> String
showsPrec :: Int -> ArchOS -> ShowS
$cshowsPrec :: Int -> ArchOS -> ShowS
Show, Typeable ArchOS
DataType
Constr
Typeable ArchOS
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ArchOS -> c ArchOS)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ArchOS)
-> (ArchOS -> Constr)
-> (ArchOS -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ArchOS))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchOS))
-> ((forall b. Data b => b -> b) -> ArchOS -> ArchOS)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ArchOS -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ArchOS -> r)
-> (forall u. (forall d. Data d => d -> u) -> ArchOS -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> ArchOS -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS)
-> Data ArchOS
ArchOS -> DataType
ArchOS -> Constr
(forall b. Data b => b -> b) -> ArchOS -> ArchOS
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchOS -> c ArchOS
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchOS
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ArchOS -> u
forall u. (forall d. Data d => d -> u) -> ArchOS -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchOS
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchOS -> c ArchOS
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ArchOS)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchOS)
$cArchOSAny :: Constr
$cArchOS :: Constr
$tArchOS :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
gmapMp :: (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
gmapM :: (forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ArchOS -> m ArchOS
gmapQi :: Int -> (forall d. Data d => d -> u) -> ArchOS -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ArchOS -> u
gmapQ :: (forall d. Data d => d -> u) -> ArchOS -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ArchOS -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ArchOS -> r
gmapT :: (forall b. Data b => b -> b) -> ArchOS -> ArchOS
$cgmapT :: (forall b. Data b => b -> b) -> ArchOS -> ArchOS
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchOS)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchOS)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c ArchOS)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ArchOS)
dataTypeOf :: ArchOS -> DataType
$cdataTypeOf :: ArchOS -> DataType
toConstr :: ArchOS -> Constr
$ctoConstr :: ArchOS -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchOS
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchOS
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchOS -> c ArchOS
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchOS -> c ArchOS
$cp1Data :: Typeable ArchOS
Data, Typeable)

prettyOS :: ArchOS -> Doc
prettyOS :: ArchOS -> Doc
prettyOS (ArchOS String
s) = String -> Doc
text String
s
prettyOS ArchOS
ArchOSAny = String -> Doc
text String
"any"

parseOS :: String -> ArchOS
parseOS :: String -> ArchOS
parseOS String
"any" = ArchOS
ArchOSAny
parseOS String
s = String -> ArchOS
ArchOS String
s

data ArchCPU = ArchCPU String | ArchCPUAny deriving (ArchCPU -> ArchCPU -> Bool
(ArchCPU -> ArchCPU -> Bool)
-> (ArchCPU -> ArchCPU -> Bool) -> Eq ArchCPU
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ArchCPU -> ArchCPU -> Bool
$c/= :: ArchCPU -> ArchCPU -> Bool
== :: ArchCPU -> ArchCPU -> Bool
$c== :: ArchCPU -> ArchCPU -> Bool
Eq, Eq ArchCPU
Eq ArchCPU
-> (ArchCPU -> ArchCPU -> Ordering)
-> (ArchCPU -> ArchCPU -> Bool)
-> (ArchCPU -> ArchCPU -> Bool)
-> (ArchCPU -> ArchCPU -> Bool)
-> (ArchCPU -> ArchCPU -> Bool)
-> (ArchCPU -> ArchCPU -> ArchCPU)
-> (ArchCPU -> ArchCPU -> ArchCPU)
-> Ord ArchCPU
ArchCPU -> ArchCPU -> Bool
ArchCPU -> ArchCPU -> Ordering
ArchCPU -> ArchCPU -> ArchCPU
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ArchCPU -> ArchCPU -> ArchCPU
$cmin :: ArchCPU -> ArchCPU -> ArchCPU
max :: ArchCPU -> ArchCPU -> ArchCPU
$cmax :: ArchCPU -> ArchCPU -> ArchCPU
>= :: ArchCPU -> ArchCPU -> Bool
$c>= :: ArchCPU -> ArchCPU -> Bool
> :: ArchCPU -> ArchCPU -> Bool
$c> :: ArchCPU -> ArchCPU -> Bool
<= :: ArchCPU -> ArchCPU -> Bool
$c<= :: ArchCPU -> ArchCPU -> Bool
< :: ArchCPU -> ArchCPU -> Bool
$c< :: ArchCPU -> ArchCPU -> Bool
compare :: ArchCPU -> ArchCPU -> Ordering
$ccompare :: ArchCPU -> ArchCPU -> Ordering
$cp1Ord :: Eq ArchCPU
Ord, ReadPrec [ArchCPU]
ReadPrec ArchCPU
Int -> ReadS ArchCPU
ReadS [ArchCPU]
(Int -> ReadS ArchCPU)
-> ReadS [ArchCPU]
-> ReadPrec ArchCPU
-> ReadPrec [ArchCPU]
-> Read ArchCPU
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ArchCPU]
$creadListPrec :: ReadPrec [ArchCPU]
readPrec :: ReadPrec ArchCPU
$creadPrec :: ReadPrec ArchCPU
readList :: ReadS [ArchCPU]
$creadList :: ReadS [ArchCPU]
readsPrec :: Int -> ReadS ArchCPU
$creadsPrec :: Int -> ReadS ArchCPU
Read, Int -> ArchCPU -> ShowS
[ArchCPU] -> ShowS
ArchCPU -> String
(Int -> ArchCPU -> ShowS)
-> (ArchCPU -> String) -> ([ArchCPU] -> ShowS) -> Show ArchCPU
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ArchCPU] -> ShowS
$cshowList :: [ArchCPU] -> ShowS
show :: ArchCPU -> String
$cshow :: ArchCPU -> String
showsPrec :: Int -> ArchCPU -> ShowS
$cshowsPrec :: Int -> ArchCPU -> ShowS
Show, Typeable ArchCPU
DataType
Constr
Typeable ArchCPU
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> ArchCPU -> c ArchCPU)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c ArchCPU)
-> (ArchCPU -> Constr)
-> (ArchCPU -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c ArchCPU))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchCPU))
-> ((forall b. Data b => b -> b) -> ArchCPU -> ArchCPU)
-> (forall r r'.
    (r -> r' -> r)
    -> r -> (forall d. Data d => d -> r') -> ArchCPU -> r)
-> (forall r r'.
    (r' -> r -> r)
    -> r -> (forall d. Data d => d -> r') -> ArchCPU -> r)
-> (forall u. (forall d. Data d => d -> u) -> ArchCPU -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> ArchCPU -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU)
-> Data ArchCPU
ArchCPU -> DataType
ArchCPU -> Constr
(forall b. Data b => b -> b) -> ArchCPU -> ArchCPU
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchCPU -> c ArchCPU
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchCPU
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> ArchCPU -> u
forall u. (forall d. Data d => d -> u) -> ArchCPU -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchCPU
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchCPU -> c ArchCPU
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ArchCPU)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchCPU)
$cArchCPUAny :: Constr
$cArchCPU :: Constr
$tArchCPU :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
gmapMp :: (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
gmapM :: (forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> ArchCPU -> m ArchCPU
gmapQi :: Int -> (forall d. Data d => d -> u) -> ArchCPU -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ArchCPU -> u
gmapQ :: (forall d. Data d => d -> u) -> ArchCPU -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ArchCPU -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> ArchCPU -> r
gmapT :: (forall b. Data b => b -> b) -> ArchCPU -> ArchCPU
$cgmapT :: (forall b. Data b => b -> b) -> ArchCPU -> ArchCPU
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchCPU)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ArchCPU)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c ArchCPU)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c ArchCPU)
dataTypeOf :: ArchCPU -> DataType
$cdataTypeOf :: ArchCPU -> DataType
toConstr :: ArchCPU -> Constr
$ctoConstr :: ArchCPU -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchCPU
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c ArchCPU
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchCPU -> c ArchCPU
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> ArchCPU -> c ArchCPU
$cp1Data :: Typeable ArchCPU
Data, Typeable)

prettyCPU :: ArchCPU -> Doc
prettyCPU :: ArchCPU -> Doc
prettyCPU (ArchCPU String
s) = String -> Doc
text String
s
prettyCPU ArchCPU
ArchCPUAny = String -> Doc
text String
"any"

parseCPU :: String -> ArchCPU
parseCPU :: String -> ArchCPU
parseCPU String
"any" = ArchCPU
ArchCPUAny
parseCPU String
s = String -> ArchCPU
ArchCPU String
s

data Arch
    = Source
    | All
    | Binary ArchOS ArchCPU
    deriving (Arch -> Arch -> Bool
(Arch -> Arch -> Bool) -> (Arch -> Arch -> Bool) -> Eq Arch
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Arch -> Arch -> Bool
$c/= :: Arch -> Arch -> Bool
== :: Arch -> Arch -> Bool
$c== :: Arch -> Arch -> Bool
Eq, Eq Arch
Eq Arch
-> (Arch -> Arch -> Ordering)
-> (Arch -> Arch -> Bool)
-> (Arch -> Arch -> Bool)
-> (Arch -> Arch -> Bool)
-> (Arch -> Arch -> Bool)
-> (Arch -> Arch -> Arch)
-> (Arch -> Arch -> Arch)
-> Ord Arch
Arch -> Arch -> Bool
Arch -> Arch -> Ordering
Arch -> Arch -> Arch
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Arch -> Arch -> Arch
$cmin :: Arch -> Arch -> Arch
max :: Arch -> Arch -> Arch
$cmax :: Arch -> Arch -> Arch
>= :: Arch -> Arch -> Bool
$c>= :: Arch -> Arch -> Bool
> :: Arch -> Arch -> Bool
$c> :: Arch -> Arch -> Bool
<= :: Arch -> Arch -> Bool
$c<= :: Arch -> Arch -> Bool
< :: Arch -> Arch -> Bool
$c< :: Arch -> Arch -> Bool
compare :: Arch -> Arch -> Ordering
$ccompare :: Arch -> Arch -> Ordering
$cp1Ord :: Eq Arch
Ord, ReadPrec [Arch]
ReadPrec Arch
Int -> ReadS Arch
ReadS [Arch]
(Int -> ReadS Arch)
-> ReadS [Arch] -> ReadPrec Arch -> ReadPrec [Arch] -> Read Arch
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Arch]
$creadListPrec :: ReadPrec [Arch]
readPrec :: ReadPrec Arch
$creadPrec :: ReadPrec Arch
readList :: ReadS [Arch]
$creadList :: ReadS [Arch]
readsPrec :: Int -> ReadS Arch
$creadsPrec :: Int -> ReadS Arch
Read, Int -> Arch -> ShowS
[Arch] -> ShowS
Arch -> String
(Int -> Arch -> ShowS)
-> (Arch -> String) -> ([Arch] -> ShowS) -> Show Arch
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Arch] -> ShowS
$cshowList :: [Arch] -> ShowS
show :: Arch -> String
$cshow :: Arch -> String
showsPrec :: Int -> Arch -> ShowS
$cshowsPrec :: Int -> Arch -> ShowS
Show, Typeable Arch
DataType
Constr
Typeable Arch
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> Arch -> c Arch)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c Arch)
-> (Arch -> Constr)
-> (Arch -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c Arch))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Arch))
-> ((forall b. Data b => b -> b) -> Arch -> Arch)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r)
-> (forall u. (forall d. Data d => d -> u) -> Arch -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Arch -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> Arch -> m Arch)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Arch -> m Arch)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> Arch -> m Arch)
-> Data Arch
Arch -> DataType
Arch -> Constr
(forall b. Data b => b -> b) -> Arch -> Arch
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Arch -> c Arch
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Arch
forall a.
Typeable a
-> (forall (c :: * -> *).
    (forall d b. Data d => c (d -> b) -> d -> c b)
    -> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
    (forall b r. Data b => c (b -> r) -> c r)
    -> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
    Typeable t =>
    (forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
    Typeable t =>
    (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
    (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
    (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
    Monad m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
    MonadPlus m =>
    (forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Arch -> u
forall u. (forall d. Data d => d -> u) -> Arch -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Arch -> m Arch
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Arch -> m Arch
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Arch
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Arch -> c Arch
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Arch)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Arch)
$cBinary :: Constr
$cAll :: Constr
$cSource :: Constr
$tArch :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> Arch -> m Arch
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Arch -> m Arch
gmapMp :: (forall d. Data d => d -> m d) -> Arch -> m Arch
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Arch -> m Arch
gmapM :: (forall d. Data d => d -> m d) -> Arch -> m Arch
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Arch -> m Arch
gmapQi :: Int -> (forall d. Data d => d -> u) -> Arch -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Arch -> u
gmapQ :: (forall d. Data d => d -> u) -> Arch -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Arch -> [u]
gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Arch -> r
gmapT :: (forall b. Data b => b -> b) -> Arch -> Arch
$cgmapT :: (forall b. Data b => b -> b) -> Arch -> Arch
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Arch)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Arch)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c Arch)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Arch)
dataTypeOf :: Arch -> DataType
$cdataTypeOf :: Arch -> DataType
toConstr :: Arch -> Constr
$ctoConstr :: Arch -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Arch
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Arch
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Arch -> c Arch
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Arch -> c Arch
$cp1Data :: Typeable Arch
Data, Typeable)

prettyArch :: Arch -> Doc
prettyArch :: Arch -> Doc
prettyArch Arch
Source = String -> Doc
text String
"source"
prettyArch Arch
All = String -> Doc
text String
"all"
prettyArch (Binary (ArchOS String
"linux") ArchCPU
cpu) = ArchCPU -> Doc
prettyCPU ArchCPU
cpu
prettyArch (Binary ArchOS
os ArchCPU
cpu) = ArchOS -> Doc
prettyOS ArchOS
os Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> String -> Doc
text String
"-" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> ArchCPU -> Doc
prettyCPU ArchCPU
cpu

parseArch :: String -> Arch
parseArch :: String -> Arch
parseArch String
s =
    case (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
span (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
'-') String
s of
      (String
"source", String
"") -> Arch
Source
      (String
"all", String
"") -> Arch
All
      (String
cpu, String
"") -> ArchOS -> ArchCPU -> Arch
Binary (String -> ArchOS
ArchOS String
"linux") (String -> ArchCPU
parseCPU String
cpu)
      (String
os, Char
'-' : String
cpu) -> ArchOS -> ArchCPU -> Arch
Binary (String -> ArchOS
parseOS String
os) (String -> ArchCPU
parseCPU String
cpu)
      (String, String)
_ -> String -> Arch
forall a. HasCallStack => String -> a
error String
"parseArch: internal error"