+ zoneFor name
+ | name `isInZone` zone = Just zone
+ | otherwise = Nothing
+
+ zone :: Zone
+ zone = Zone {
+ zoneName = mkDN "cielonegro.org."
+ , zoneResponders = [ wrapResponder' $
+ do name <- getQueryName
+ if name == mkDN "ns.cielonegro.org." then
+ respond ResourceRecord {
+ rrName = name
+ , rrType = A
+ , rrClass = IN
+ , rrTTL = 9600
+ , rrData = inetAddr "127.0.0.1"
+ }
+ else
+ fail "FIXME: we want to throw NameError but we can't for now"
+ ]
+ , zoneIsAuthoritative = True
+ }
+
+ wrapResponder' :: Responder A IN () -> SomeResponder
+ wrapResponder' = wrapResponder
+
+
+inetAddr :: String -> HostAddress
+inetAddr = unsafePerformIO . inet_addr