{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeOperators #-}
module System.OsRelease
(
OsReleaseResult(..)
, OsRelease(..)
, parseOsRelease
, readOsRelease
, defaultOsRelease
, defaultAssignments
, parseAssignments
, parseAssignment
, getAllAssignments
, getOsRelease
, parseOsRelease'
)
where
import System.OsRelease.Megaparsec
import Control.Applicative
import Control.Monad
import Control.Exception.Safe
import Data.Aeson
import Data.Aeson.TH
import Data.Char
import Data.Either
import Data.List
import Data.Maybe
import Data.Void
import GHC.Generics
import Prelude hiding ( id
)
import qualified Data.HashMap.Strict as HM
import qualified Data.Text as T
import qualified Text.Megaparsec as MP
data OsReleaseResult = OsReleaseResult {
OsReleaseResult -> OsRelease
osRelease :: !OsRelease
, OsReleaseResult -> [(String, String)]
unknown_fields :: [(String, String)]
, OsReleaseResult -> [ParseError String Void]
parse_errors :: [MP.ParseError String Void]
} deriving (Int -> OsReleaseResult -> ShowS
[OsReleaseResult] -> ShowS
OsReleaseResult -> String
(Int -> OsReleaseResult -> ShowS)
-> (OsReleaseResult -> String)
-> ([OsReleaseResult] -> ShowS)
-> Show OsReleaseResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OsReleaseResult] -> ShowS
$cshowList :: [OsReleaseResult] -> ShowS
show :: OsReleaseResult -> String
$cshow :: OsReleaseResult -> String
showsPrec :: Int -> OsReleaseResult -> ShowS
$cshowsPrec :: Int -> OsReleaseResult -> ShowS
Show)
data OsRelease = OsRelease {
OsRelease -> String
name :: !(String)
, OsRelease -> Maybe String
version :: !(Maybe String)
, OsRelease -> String
id :: !(String)
, OsRelease -> Maybe String
id_like :: !(Maybe String)
, OsRelease -> Maybe String
version_codename :: !(Maybe String)
, OsRelease -> Maybe String
version_id :: !(Maybe String)
, OsRelease -> String
pretty_name :: !(String)
, OsRelease -> Maybe String
ansi_color :: !(Maybe String)
, OsRelease -> Maybe String
cpe_name :: !(Maybe String)
, OsRelease -> Maybe String
home_url :: !(Maybe String)
, OsRelease -> Maybe String
documentation_url :: !(Maybe String)
, OsRelease -> Maybe String
support_url :: !(Maybe String)
, OsRelease -> Maybe String
bug_report_url :: !(Maybe String)
, OsRelease -> Maybe String
privacy_policy_url :: !(Maybe String)
, OsRelease -> Maybe String
build_id :: !(Maybe String)
, OsRelease -> Maybe String
variant :: !(Maybe String)
, OsRelease -> Maybe String
variant_id :: !(Maybe String)
, OsRelease -> Maybe String
logo :: !(Maybe String)
} deriving ((forall x. OsRelease -> Rep OsRelease x)
-> (forall x. Rep OsRelease x -> OsRelease) -> Generic OsRelease
forall x. Rep OsRelease x -> OsRelease
forall x. OsRelease -> Rep OsRelease x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep OsRelease x -> OsRelease
$cfrom :: forall x. OsRelease -> Rep OsRelease x
Generic, Int -> OsRelease -> ShowS
[OsRelease] -> ShowS
OsRelease -> String
(Int -> OsRelease -> ShowS)
-> (OsRelease -> String)
-> ([OsRelease] -> ShowS)
-> Show OsRelease
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OsRelease] -> ShowS
$cshowList :: [OsRelease] -> ShowS
show :: OsRelease -> String
$cshow :: OsRelease -> String
showsPrec :: Int -> OsRelease -> ShowS
$cshowsPrec :: Int -> OsRelease -> ShowS
Show)
deriveJSON defaultOptions ''OsRelease
class GetRecords a where
getRecords :: a -> [String]
instance {-# OVERLAPPABLE #-} GetRecords (f p) => GetRecords (M1 i c f p) where
getRecords :: M1 i c f p -> [String]
getRecords (M1 f p
x) = f p -> [String]
forall a. GetRecords a => a -> [String]
getRecords f p
x
instance {-# OVERLAPPING #-} Selector c => GetRecords (M1 S c f p) where
getRecords :: M1 S c f p -> [String]
getRecords M1 S c f p
x = [M1 S c f p -> String
forall k (s :: k) k1 (t :: k -> (k1 -> *) -> k1 -> *)
(f :: k1 -> *) (a :: k1).
Selector s =>
t s f a -> String
selName M1 S c f p
x]
instance (GetRecords (a p), GetRecords (b p)) => GetRecords ((a :*: b) p) where
getRecords :: (:*:) a b p -> [String]
getRecords (a p
a :*: b p
b) = a p -> [String]
forall a. GetRecords a => a -> [String]
getRecords a p
a [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ b p -> [String]
forall a. GetRecords a => a -> [String]
getRecords b p
b
defaultOsRelease :: OsRelease
defaultOsRelease :: OsRelease
defaultOsRelease = OsRelease :: String
-> Maybe String
-> String
-> Maybe String
-> Maybe String
-> Maybe String
-> String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> OsRelease
OsRelease { name :: String
name = String
"Linux"
, version :: Maybe String
version = Maybe String
forall a. Maybe a
Nothing
, id :: String
id = String
"linux"
, id_like :: Maybe String
id_like = Maybe String
forall a. Maybe a
Nothing
, version_codename :: Maybe String
version_codename = Maybe String
forall a. Maybe a
Nothing
, version_id :: Maybe String
version_id = Maybe String
forall a. Maybe a
Nothing
, pretty_name :: String
pretty_name = String
"Linux"
, ansi_color :: Maybe String
ansi_color = Maybe String
forall a. Maybe a
Nothing
, cpe_name :: Maybe String
cpe_name = Maybe String
forall a. Maybe a
Nothing
, home_url :: Maybe String
home_url = Maybe String
forall a. Maybe a
Nothing
, documentation_url :: Maybe String
documentation_url = Maybe String
forall a. Maybe a
Nothing
, support_url :: Maybe String
support_url = Maybe String
forall a. Maybe a
Nothing
, bug_report_url :: Maybe String
bug_report_url = Maybe String
forall a. Maybe a
Nothing
, privacy_policy_url :: Maybe String
privacy_policy_url = Maybe String
forall a. Maybe a
Nothing
, build_id :: Maybe String
build_id = Maybe String
forall a. Maybe a
Nothing
, variant :: Maybe String
variant = Maybe String
forall a. Maybe a
Nothing
, variant_id :: Maybe String
variant_id = Maybe String
forall a. Maybe a
Nothing
, logo :: Maybe String
logo = Maybe String
forall a. Maybe a
Nothing
}
defaultAssignments :: [(String, String)]
defaultAssignments :: [(String, String)]
defaultAssignments =
[(String
"NAME", String
"Linux"), (String
"ID", String
"linux"), (String
"PRETTY_NAME", String
"Linux")]
getAllAssignments :: String
-> [Either (MP.ParseError String Void) (String, String)]
getAllAssignments :: String -> [Either (ParseError String Void) (String, String)]
getAllAssignments = (ParseErrorBundle String Void
-> [Either (ParseError String Void) (String, String)])
-> ([Either (ParseError String Void) (String, String)]
-> [Either (ParseError String Void) (String, String)])
-> Either
(ParseErrorBundle String Void)
[Either (ParseError String Void) (String, String)]
-> [Either (ParseError String Void) (String, String)]
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ([Either (ParseError String Void) (String, String)]
-> ParseErrorBundle String Void
-> [Either (ParseError String Void) (String, String)]
forall a b. a -> b -> a
const []) (\[Either (ParseError String Void) (String, String)]
x -> [Either (ParseError String Void) (String, String)]
x) (Either
(ParseErrorBundle String Void)
[Either (ParseError String Void) (String, String)]
-> [Either (ParseError String Void) (String, String)])
-> (String
-> Either
(ParseErrorBundle String Void)
[Either (ParseError String Void) (String, String)])
-> String
-> [Either (ParseError String Void) (String, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parsec
Void String [Either (ParseError String Void) (String, String)]
-> String
-> String
-> Either
(ParseErrorBundle String Void)
[Either (ParseError String Void) (String, String)]
forall e s a.
Parsec e s a -> String -> s -> Either (ParseErrorBundle s e) a
MP.parse Parsec
Void String [Either (ParseError String Void) (String, String)]
parseAssignments String
"os-release"
getOsRelease :: [(String, String)]
-> OsRelease
getOsRelease :: [(String, String)] -> OsRelease
getOsRelease =
(\case
Error String
_ -> OsRelease
defaultOsRelease
Success OsRelease
v -> OsRelease
v
)
(Result OsRelease -> OsRelease)
-> ([(String, String)] -> Result OsRelease)
-> [(String, String)]
-> OsRelease
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Value -> Result OsRelease
forall a. FromJSON a => Value -> Result a
fromJSON
(Value -> Result OsRelease)
-> ([(String, String)] -> Value)
-> [(String, String)]
-> Result OsRelease
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Object -> Value
Object
(Object -> Value)
-> ([(String, String)] -> Object) -> [(String, String)] -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\Object
x -> Object -> Object -> Object
forall k v.
(Eq k, Hashable k) =>
HashMap k v -> HashMap k v -> HashMap k v
HM.union Object
x ([(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([(Text, Value)] -> Object)
-> ([(String, String)] -> [(Text, Value)])
-> [(String, String)]
-> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(String, String)] -> [(Text, Value)]
aesonify ([(String, String)] -> Object) -> [(String, String)] -> Object
forall a b. (a -> b) -> a -> b
$ [(String, String)]
defaultAssignments))
(Object -> Object)
-> ([(String, String)] -> Object) -> [(String, String)] -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Text, Value)] -> Object
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList
([(Text, Value)] -> Object)
-> ([(String, String)] -> [(Text, Value)])
-> [(String, String)]
-> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(String, String)] -> [(Text, Value)]
aesonify
where
aesonify :: [(String, String)] -> [(Text, Value)]
aesonify = ((String, String) -> (Text, Value))
-> [(String, String)] -> [(Text, Value)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(String
k, String
v) -> (Text -> Text
T.toLower (Text -> Text) -> (String -> Text) -> String -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String
k, Text -> Value
String (Text -> Value) -> (String -> Text) -> String -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack (String -> Value) -> String -> Value
forall a b. (a -> b) -> a -> b
$ String
v))
readOsRelease :: IO String
readOsRelease :: IO String
readOsRelease = String -> IO String
readFile String
"/etc/os-release" IO String -> IO String -> IO String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> IO String
readFile String
"/usr/lib/os-release"
parseOsRelease :: IO (Maybe OsReleaseResult)
parseOsRelease :: IO (Maybe OsReleaseResult)
parseOsRelease =
(IOException -> IO (Maybe OsReleaseResult))
-> IO (Maybe OsReleaseResult) -> IO (Maybe OsReleaseResult)
forall (m :: * -> *) a.
MonadCatch m =>
(IOException -> m a) -> m a -> m a
handleIO (\IOException
_ -> Maybe OsReleaseResult -> IO (Maybe OsReleaseResult)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe OsReleaseResult
forall a. Maybe a
Nothing) (IO (Maybe OsReleaseResult) -> IO (Maybe OsReleaseResult))
-> (IO String -> IO (Maybe OsReleaseResult))
-> IO String
-> IO (Maybe OsReleaseResult)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Maybe OsReleaseResult)
-> IO String -> IO (Maybe OsReleaseResult)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (OsReleaseResult -> Maybe OsReleaseResult
forall a. a -> Maybe a
Just (OsReleaseResult -> Maybe OsReleaseResult)
-> (String -> OsReleaseResult) -> String -> Maybe OsReleaseResult
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> OsReleaseResult
parseOsRelease') (IO String -> IO (Maybe OsReleaseResult))
-> IO String -> IO (Maybe OsReleaseResult)
forall a b. (a -> b) -> a -> b
$ IO String
readOsRelease
parseOsRelease' :: String -> OsReleaseResult
parseOsRelease' :: String -> OsReleaseResult
parseOsRelease' String
s =
let ([ParseError String Void]
errs, [(String, String)]
ass) = [Either (ParseError String Void) (String, String)]
-> ([ParseError String Void], [(String, String)])
forall a b. [Either a b] -> ([a], [b])
partitionEithers ([Either (ParseError String Void) (String, String)]
-> ([ParseError String Void], [(String, String)]))
-> (String -> [Either (ParseError String Void) (String, String)])
-> String
-> ([ParseError String Void], [(String, String)])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [Either (ParseError String Void) (String, String)]
getAllAssignments (String -> ([ParseError String Void], [(String, String)]))
-> String -> ([ParseError String Void], [(String, String)])
forall a b. (a -> b) -> a -> b
$ String
s
osr :: OsRelease
osr = [(String, String)] -> OsRelease
getOsRelease [(String, String)]
ass
unknown_fields' :: [(String, String)]
unknown_fields' =
HashMap String String -> [(String, String)]
forall k v. HashMap k v -> [(k, v)]
HM.toList
(HashMap String String -> [(String, String)])
-> ([String] -> HashMap String String)
-> [String]
-> [(String, String)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> HashMap String String -> HashMap String String)
-> HashMap String String -> [String] -> HashMap String String
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\String
x HashMap String String
y -> String -> HashMap String String -> HashMap String String
forall k v. (Eq k, Hashable k) => k -> HashMap k v -> HashMap k v
HM.delete ((Char -> Char) -> ShowS
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Char
toUpper String
x) HashMap String String
y) ([(String, String)] -> HashMap String String
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList [(String, String)]
ass)
([String] -> [(String, String)]) -> [String] -> [(String, String)]
forall a b. (a -> b) -> a -> b
$ ([String] -> [String]
forall a. [a] -> [a]
init ([String] -> [String])
-> (OsRelease -> [String]) -> OsRelease -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. M1
D
('MetaData
"OsRelease"
"System.OsRelease"
"os-release-1.0.2-99VG88fVJ42FQqeWEwKbmV"
'False)
(C1
('MetaCons "OsRelease" 'PrefixI 'True)
((((S1
('MetaSel
('Just "name") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "version")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "id") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "id_like")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "version_codename")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "version_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "pretty_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 String)
:*: (S1
('MetaSel
('Just "ansi_color")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "cpe_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))
:*: (((S1
('MetaSel
('Just "home_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "documentation_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "support_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "bug_report_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "privacy_policy_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "build_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "variant")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: (S1
('MetaSel
('Just "variant_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "logo")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))))
Any
-> [String]
forall a. GetRecords a => a -> [String]
getRecords (M1
D
('MetaData
"OsRelease"
"System.OsRelease"
"os-release-1.0.2-99VG88fVJ42FQqeWEwKbmV"
'False)
(C1
('MetaCons "OsRelease" 'PrefixI 'True)
((((S1
('MetaSel
('Just "name") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "version")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "id") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "id_like")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "version_codename")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "version_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "pretty_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 String)
:*: (S1
('MetaSel
('Just "ansi_color")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "cpe_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))
:*: (((S1
('MetaSel
('Just "home_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "documentation_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "support_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "bug_report_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "privacy_policy_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "build_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "variant")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: (S1
('MetaSel
('Just "variant_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "logo")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))))
Any
-> [String])
-> (OsRelease
-> M1
D
('MetaData
"OsRelease"
"System.OsRelease"
"os-release-1.0.2-99VG88fVJ42FQqeWEwKbmV"
'False)
(C1
('MetaCons "OsRelease" 'PrefixI 'True)
((((S1
('MetaSel
('Just "name") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "version")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "id") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "id_like")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "version_codename")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "version_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "pretty_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 String)
:*: (S1
('MetaSel
('Just "ansi_color")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "cpe_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))
:*: (((S1
('MetaSel
('Just "home_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "documentation_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "support_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "bug_report_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "privacy_policy_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "build_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "variant")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: (S1
('MetaSel
('Just "variant_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "logo")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))))
Any)
-> OsRelease
-> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OsRelease
-> M1
D
('MetaData
"OsRelease"
"System.OsRelease"
"os-release-1.0.2-99VG88fVJ42FQqeWEwKbmV"
'False)
(C1
('MetaCons "OsRelease" 'PrefixI 'True)
((((S1
('MetaSel
('Just "name") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "version")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "id") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict)
(Rec0 String)
:*: S1
('MetaSel
('Just "id_like")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "version_codename")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "version_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "pretty_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 String)
:*: (S1
('MetaSel
('Just "ansi_color")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "cpe_name")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))
:*: (((S1
('MetaSel
('Just "home_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "documentation_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "support_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "bug_report_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))
:*: ((S1
('MetaSel
('Just "privacy_policy_url")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "build_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String)))
:*: (S1
('MetaSel
('Just "variant")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: (S1
('MetaSel
('Just "variant_id")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))
:*: S1
('MetaSel
('Just "logo")
'NoSourceUnpackedness
'SourceStrict
'DecidedStrict)
(Rec0 (Maybe String))))))))
Any
forall a x. Generic a => a -> Rep a x
from (OsRelease -> [String]) -> OsRelease -> [String]
forall a b. (a -> b) -> a -> b
$ OsRelease
defaultOsRelease)
in OsRelease
-> [(String, String)]
-> [ParseError String Void]
-> OsReleaseResult
OsReleaseResult OsRelease
osr [(String, String)]
unknown_fields' [ParseError String Void]
errs