-hdIsResponse :: Header -> Bool
-hdIsResponse (QueryHeader _ _ _ _ ) = False
-hdIsResponse (ResponseHeader _ _ _ _ _ _ _) = True
+data Question
+ = Question {
+ qName :: !DomainName
+ , qType :: !RecordType
+ , qClass :: !RecordClass
+ }
+ deriving (Show, Eq)
+
+type DomainName = [[Word8]]
+
+data RecordClass
+ = IN
+ | CS -- Obsolete
+ | CH
+ | HS
+ | AnyClass -- Only for queries
+ deriving (Show, Eq)
+
+data ResourceRecord
+ = ResourceRecord {
+ rrName :: !DomainName
+ , rrType :: !RecordType
+ , rrClass :: !RecordClass
+ , rrTTL :: !Word32
+ , rrData :: ![Word8]
+ }
+ deriving (Show, Eq)
+
+data RecordType
+ = A
+ | NS
+ | MD
+ | MF
+ | CNAME
+ | SOA
+ | MB
+ | MG
+ | MR
+ | NULL
+ | WKS
+ | PTR
+ | HINFO
+ | MINFO
+ | MX
+ | TXT
+
+ -- Only for queries:
+ | AXFR
+ | MAILB -- Obsolete
+ | MAILA -- Obsolete
+ | AnyType
+ deriving (Show, Eq)