From db2e00b691058cade0af2588e82a8f1c1dc857ac Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 12 Jun 2017 21:03:59 -0400 Subject: Comments. --- src/Network/DatagramServer/Types.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/Network/DatagramServer') diff --git a/src/Network/DatagramServer/Types.hs b/src/Network/DatagramServer/Types.hs index fea3d503..37fc40db 100644 --- a/src/Network/DatagramServer/Types.hs +++ b/src/Network/DatagramServer/Types.hs @@ -73,11 +73,14 @@ instance Address IP where -type MessageClass msg = MessageClassG (QueryMethod msg) (TransactionID msg) newtype ReflectedIP = ReflectedIP SockAddr deriving (Eq, Ord, Show) +-- The MessageClass/MessageClassG duality is merely a way to help GHC derive +-- instances without having to cope with the QueryMethod and TransactionID type +-- functions +type MessageClass msg = MessageClassG (QueryMethod msg) (TransactionID msg) data MessageClassG meth tid = Query meth | Response (Maybe ReflectedIP) | Error (KError tid) @@ -106,6 +109,9 @@ class Envelope envelope where -- Returns: response message envelope buildReply :: NodeId envelope -> SockAddr -> envelope a -> b -> envelope b + -- This is a abstract constructor and a design wart. Since it returns into + -- the IO monad, it allows for outside state to be used in creating + -- envelopes. buildQuery :: NodeId envelope -> SockAddr -> QueryMethod envelope -> TransactionID envelope -> a -> IO (envelope a) uniqueTransactionId :: Int -> IO (TransactionID envelope) -- cgit v1.2.3