{-# 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
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
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
Ord, ReadPrec [ArchOS]
ReadPrec ArchOS
Int -> ReadS ArchOS
ReadS [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
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
ArchOS -> DataType
ArchOS -> Constr
(forall b. Data b => b -> b) -> ArchOS -> 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)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
Monad m =>
(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 :: forall u. Int -> (forall d. Data d => d -> u) -> ArchOS -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ArchOS -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ArchOS -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ArchOS -> [u]
gmapQr :: forall r r'.
(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 :: forall r r'.
(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 (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(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 (t :: * -> *) (c :: * -> *).
Typeable t =>
(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 (c :: * -> *).
(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 (c :: * -> *).
(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
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
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
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
Ord, ReadPrec [ArchCPU]
ReadPrec ArchCPU
Int -> ReadS ArchCPU
ReadS [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
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
ArchCPU -> DataType
ArchCPU -> Constr
(forall b. Data b => b -> b) -> ArchCPU -> 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)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
Monad m =>
(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 :: forall u. Int -> (forall d. Data d => d -> u) -> ArchCPU -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> ArchCPU -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> ArchCPU -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> ArchCPU -> [u]
gmapQr :: forall r r'.
(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 :: forall r r'.
(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 (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(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 (t :: * -> *) (c :: * -> *).
Typeable t =>
(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 (c :: * -> *).
(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 (c :: * -> *).
(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
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
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
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
Ord, ReadPrec [Arch]
ReadPrec Arch
Int -> ReadS Arch
ReadS [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
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
Arch -> DataType
Arch -> Constr
(forall b. Data b => b -> b) -> Arch -> 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)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
MonadPlus m =>
(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 (m :: * -> *).
Monad m =>
(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 :: forall u. Int -> (forall d. Data d => d -> u) -> Arch -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Arch -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Arch -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Arch -> [u]
gmapQr :: forall r r'.
(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 :: forall r r'.
(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 (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(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 (t :: * -> *) (c :: * -> *).
Typeable t =>
(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 (c :: * -> *).
(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 (c :: * -> *).
(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
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 forall a. Semigroup a => a -> a -> a
<> String -> Doc
text String
"-" forall a. Semigroup a => a -> a -> a
<> ArchCPU -> Doc
prettyCPU ArchCPU
cpu

parseArch :: String -> Arch
parseArch :: String -> Arch
parseArch String
s =
    case forall a. (a -> Bool) -> [a] -> ([a], [a])
span (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)
_ -> forall a. HasCallStack => String -> a
error String
"parseArch: internal error"