8 import Control.Monad.Trans
10 import Database.HaskellDB
11 import qualified DDNS.DB.Zones as Zones
12 import Network.DNS.Message
13 import System.Console.Haskeline
16 listZones :: Database -> IO [DomainName]
18 = do rows <- query db $ do t <- table Zones.zones
19 project (Zones.zone << t!Zones.zone)
20 return $ map (read . (!Zones.zone)) rows
22 completeZoneName :: MonadIO m => Database -> CompletionFunc m
24 = completeWord Nothing "" $ \ prefix ->
25 do zones <- liftM (map show) $ liftIO $ listZones db
26 return $ produceCands zones prefix
28 produceCands :: [String] -> String -> [Completion]
29 produceCands zones prefix
30 = let cands = filter (prefix `isPrefixOf`) zones
31 comps = map mkComp cands
35 mkComp :: String -> Completion