import Network.DNS.Named.Sanity
-data ResponderState qt qc
+data (QueryType qt, QueryClass qc) => ResponderState qt qc
= ResponderState {
rsQuestion :: !(Question qt qc)
, rsAnswers :: ![SomeRR]
}
deriving Typeable
-instance (RecordType qt dt, RecordClass qc) => Monad (Responder qt qc) where
+instance (QueryType qt, QueryClass qc) => Monad (Responder qt qc) where
return a = Responder $ \ s -> return (a, s)
m >>= k = Responder $ \ s -> do (a, s') <- unR m s
unR (k a) s'
fail err = Responder $ \ _ -> fail err
-instance (RecordType qt dt, RecordClass qc) => MonadIO (Responder qt qc) where
+instance (QueryType qt, QueryClass qc) => MonadIO (Responder qt qc) where
liftIO m = Responder $ \ s -> do a <- m
return (a, s)
Just m
-> runResponder q m
-getQuestion :: (RecordType qt dt, RecordClass qc) => Responder qt qc (Question qt qc)
+getQuestion :: (QueryType qt, QueryClass qc) => Responder qt qc (Question qt qc)
getQuestion = Responder $ \ s ->
return (rsQuestion s, s)
-getQueryName :: (RecordType qt dt, RecordClass qc) => Responder qt qc DomainName
+getQueryName :: (QueryType qt, QueryClass qc) => Responder qt qc DomainName
getQueryName = liftM qName getQuestion
respond :: ( SaneAnswerType qt at, SaneAnswerClass qc ac
, QueryType qt, RecordType at dt
- , RecordClass qc, RecordClass ac
+ , QueryClass qc, RecordClass ac
) =>
ResourceRecord at ac dt
-> Responder qt qc ()
data SomeResponder
= forall qt qc. (Typeable qt, Typeable qc) => SomeResponder (Responder qt qc ())
-wrapResponder :: (RecordType qt dt, RecordClass qc) =>
+wrapResponder :: (QueryType qt, QueryClass qc) =>
Responder qt qc a
-> SomeResponder
wrapResponder m