module Network.DNS.Named.Zone ( Zone(..) , ZoneFinder(..) , defaultRootZone ) where import Data.Maybe import Network.DNS.Message import Network.DNS.Named.Responder data Zone = Zone { zoneName :: !DomainName , zoneResponders :: ![SomeResponder] } class ZoneFinder a where findZone :: a -> DomainName -> IO Zone instance ZoneFinder (DomainName -> Zone) where findZone = (return .) instance ZoneFinder (DomainName -> IO Zone) where findZone = id instance ZoneFinder (DomainName -> Maybe Zone) where findZone = ((return . fromMaybe defaultRootZone) .) instance ZoneFinder (DomainName -> IO (Maybe Zone)) where findZone = (fmap (fromMaybe defaultRootZone) .) defaultRootZone :: Zone defaultRootZone = Zone { zoneName = mkDomainName "." , zoneResponders = [] -- FIXME }