+ pair_em :: a -> (Domain, a)
+ pair_em = (,) domain
+
+
+-- | This calls lookupNS, and returns the result as the second
+-- component of a tuple whose first component is the domain name
+-- itself.
+--
+-- Examples:
+--
+-- The example domain, example.com, does have NS records, but the
+-- order in which they are returned is variable, so we have to sort
+-- them to get a reliable result.
+--
+-- >>> import Data.List (sort)
+-- >>> import Control.Applicative ((<$>))
+-- >>>
+-- >>> let sort_snd (x,y) = (x, sort <$> y)
+-- >>> rs <- makeResolvSeed defaultResolvConf
+-- >>> let domain = BS.pack "example.com."
+-- >>> withResolver rs $ \resolver -> sort_snd <$> lookupNS' resolver domain
+-- ("example.com.",Right ["a.iana-servers.net.","b.iana-servers.net."])
+--
+lookupNS' :: Resolver -> Domain -> IO LookupResult
+lookupNS' resolver domain = do
+ answer_result <- lookupNS resolver domain
+ auth_result <- lookupNSAuth resolver domain
+ fmap pair_em $ return $ combine answer_result auth_result
+ where
+ pair_em :: a -> (Domain, a)
+ pair_em = (,) domain
+
+ combine :: (Either DNSError [Domain])
+ -> (Either DNSError [Domain])
+ -> (Either DNSError [Domain])
+ combine e1 e2 = do
+ l1 <- e1
+ l2 <- e2
+ return (l1 ++ l2)