Formalized IRC commands
authorMart Lubbers <mart@martlubbers.net>
Sun, 5 Mar 2017 12:11:02 +0000 (13:11 +0100)
committerMart Lubbers <mart@martlubbers.net>
Sun, 5 Mar 2017 12:11:02 +0000 (13:11 +0100)
IRC.dcl
IRC.icl

diff --git a/IRC.dcl b/IRC.dcl
index 157b6d7..d476d72 100644 (file)
--- a/IRC.dcl
+++ b/IRC.dcl
@@ -1,13 +1,57 @@
 definition module IRC
 
 definition module IRC
 
+from Data.Maybe import :: Maybe
 from StdOverloaded import class fromInt, class toInt, class toString
 
 from StdOverloaded import class fromInt, class toInt, class toString
 
-:: IRCCommands = ADMIN | AWAY | CONNECT | DIE | ERROR | INFO | INVITE | ISON |
-       JOIN | KICK | KILL | LINKS | LIST | LUSERS | MODE | MOTD | NAMES | NICK |
-       NJOIN | NOTICE | OPER | PART | PASS | PING | PONG | PRIVMSG | QUIT |
-       REHASH | RESTART | SERVER | SERVICE | SERVLIST | SQUERY | SQUIRT | SQUIT |
-       STATS | SUMMON | TIME | TOPIC | TRACE | USER | USERHOST | USERS | VERSION |
-       WALLOPS | WHO | WHOIS | WHOWAS
+:: IRCCommands
+       = ADMIN (Maybe String)
+       | AWAY String
+       | CONNECT String Int (Maybe String)
+       | DIE 
+       | ERROR String
+       | INFO (Maybe String)
+       | INVITE String String
+       | ISON [String]
+       | JOIN [(String, Maybe String)]
+       | KICK String String (Maybe String)
+       | KILL String String
+       | LINKS (Maybe (Maybe String, String))
+       | LIST [String]
+       | LUSERS (Maybe (String, Maybe String))
+       | MODE String
+       | MOTD (Maybe String)
+       | NAMES [String]
+       | NICK String
+       | NJOIN 
+       | NOTICE 
+       | OPER String String 
+       | PART [String]
+       | PASS String
+       | PING [String]
+       | PONG [String]
+       | PRIVMSG String String
+       | QUIT String
+       | REHASH 
+       | RESTART 
+       | SERVER 
+       | SERVICE 
+       | SERVLIST (Maybe (String, Maybe String))
+       | SQUERY String String
+       | SQUIRT 
+       | SQUIT String String
+       | STATS (Maybe (String, Maybe String))
+       | SUMMON String (Maybe (String, Maybe String))
+       | TIME (Maybe String)
+       | TOPIC String (Maybe String)
+       | TRACE (Maybe String)
+       | USER String String String
+       | USERHOST [String]
+       | USERS (Maybe String)
+       | VERSION (Maybe String)
+       | WALLOPS 
+       | WHO (Maybe String)
+       | WHOIS (Maybe String) [String]
+       | WHOWAS (Maybe String) [String]
 
 :: IRCReplies = RPL_WELCOME | RPL_YOURHOST | RPL_CREATED | RPL_MYINFO |
        RPL_BOUNCE | RPL_TRACELINK | RPL_TRACECONNECTING | RPL_TRACEHANDSHAKE |
 
 :: IRCReplies = RPL_WELCOME | RPL_YOURHOST | RPL_CREATED | RPL_MYINFO |
        RPL_BOUNCE | RPL_TRACELINK | RPL_TRACECONNECTING | RPL_TRACEHANDSHAKE |
diff --git a/IRC.icl b/IRC.icl
index 4f20623..50a42e9 100644 (file)
--- a/IRC.icl
+++ b/IRC.icl
@@ -2,9 +2,10 @@ implementation module IRC
 
 import GenPrint
 import StdOverloaded
 
 import GenPrint
 import StdOverloaded
+import Data.Maybe
 from StdMisc import undef
 
 from StdMisc import undef
 
-derive gPrint IRCCommands, IRCReplies, IRCErrors
+derive gPrint IRCCommands, IRCReplies, IRCErrors, (,), Maybe, ()
 
 instance toString IRCCommands where toString r = printToString r
 instance toString IRCReplies where toString r = printToString r
 
 instance toString IRCCommands where toString r = printToString r
 instance toString IRCReplies where toString r = printToString r
@@ -33,7 +34,7 @@ instance fromInt IRCReplies where
                219 = RPL_ENDOFSTATS
                221 = RPL_UMODEIS
                234 = RPL_SERVLIST
                219 = RPL_ENDOFSTATS
                221 = RPL_UMODEIS
                234 = RPL_SERVLIST
-               234 = RPL_SERVLISTEND
+               235 = RPL_SERVLISTEND
                242 = RPL_STATSUPTIME
                243 = RPL_STATSOLINE
                251 = RPL_LUSERCLIENT
                242 = RPL_STATSUPTIME
                243 = RPL_STATSOLINE
                251 = RPL_LUSERCLIENT
@@ -81,7 +82,7 @@ instance fromInt IRCReplies where
                365 = RPL_ENDOFLINKS
                366 = RPL_ENDOFNAMES
                367 = RPL_BANLIST
                365 = RPL_ENDOFLINKS
                366 = RPL_ENDOFNAMES
                367 = RPL_BANLIST
-               367 = RPL_ENDOFBANLIST
+               368 = RPL_ENDOFBANLIST
                369 = RPL_ENDOFWHOWAS
                371 = RPL_INFO
                372 = RPL_MOTD
                369 = RPL_ENDOFWHOWAS
                371 = RPL_INFO
                372 = RPL_MOTD