attempt a generic implementation
[cloogle-irc.git] / IRC.dcl
diff --git a/IRC.dcl b/IRC.dcl
index 157b6d7..d910183 100644 (file)
--- a/IRC.dcl
+++ b/IRC.dcl
@@ -1,13 +1,82 @@
 definition module IRC
 
-from StdOverloaded import class fromInt, class toInt, class toString
+import IRCBot
+from Data.Maybe import :: Maybe
+from Data.Either import :: Either
+from StdOverloaded import class fromInt, class toInt, class toString, class fromString
+from Text.Parsers.Simple.Core import :: Error
 
-:: 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
+:: IRCMessage =
+       { irc_prefix :: Maybe (Either IRCUser String)
+       , irc_command :: Either IRCNumReply IRCCommand}
+
+:: IRCNumReply =
+       { irc_reply :: IRCReplies
+       , irc_recipient :: String
+       , irc_message :: String
+       }
+
+:: IRCUser = 
+       { irc_nick :: String
+       , irc_user :: Maybe String
+       , irc_host :: Maybe String
+       }
+
+parseIRCMessage :: String -> Either [Error] IRCMessage
+
+instance toString IRCCommand, IRCReplies, IRCErrors, IRCMessage, IRCUser, IRCNumReply
+instance fromInt IRCReplies, IRCErrors
+instance toInt IRCReplies, IRCErrors
+
+:: IRCCommand
+       = ADMIN (Maybe String)
+       | AWAY String
+       | CONNECT String (Maybe (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 (Maybe ([String], Maybe String))
+       | LUSERS (Maybe (String, Maybe String))
+       | MODE String String (Maybe String) (Maybe String) (Maybe String)
+       | MOTD (Maybe String)
+       | NAMES [String]
+       | NICK String (Maybe String)
+       | NJOIN 
+       | NOTICE String String
+       | OPER String String 
+       | PART [String]
+       | PASS String
+       | PING String (Maybe String)
+       | PONG String (Maybe String)
+       | PRIVMSG [String] String
+       | QUIT (Maybe String)
+       | REHASH 
+       | RESTART 
+       | SERVER 
+       | SERVICE String String String String
+       | 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 String
+       | 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 |
@@ -46,7 +115,3 @@ from StdOverloaded import class fromInt, class toInt, class toString
        ERR_NOPRIVILEGES | ERR_CHANOPRIVSNEEDED | ERR_CANTKILLSERVER |
        ERR_RESTRICTED | ERR_UNIQOPPRIVSNEEDED | ERR_NOOPERHOST |
        ERR_UMODEUNKNOWNFLAG | ERR_USERSDONTMATCH
-
-instance toString IRCCommands, IRCReplies, IRCErrors
-instance fromInt IRCReplies, IRCErrors
-instance toInt IRCReplies, IRCErrors