Update references to github
[cloogle-irc.git] / IRC.dcl
diff --git a/IRC.dcl b/IRC.dcl
index 0db138c..6cca24e 100644 (file)
--- a/IRC.dcl
+++ b/IRC.dcl
@@ -1,35 +1,61 @@
 definition module IRC
 
+from StdOverloaded import class fromInt, class toInt, class toString, class fromString
+
+from Data.Either import :: Either
 from Data.Maybe import :: Maybe
-from StdOverloaded import class fromInt, class toInt, class toString
+from Text.Parsers.Simple.Core import :: Error
+
+:: IRCMessage =
+       { irc_prefix    :: Maybe (Either IRCUser String)
+       , irc_command   :: Either IRCNumReply IRCCommand}
+
+:: IRCNumReply =
+       { irc_reply     :: IRCReplies
+       , irc_recipient :: String
+       , irc_message   :: String
+       }
 
-:: IRCCommands
+:: 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
+
+:: CSepList = CSepList [String]
+:: IRCCommand
        = ADMIN (Maybe String)
        | AWAY String
-       | CONNECT String Int (Maybe String)
+       | CONNECT String (Maybe (Int, Maybe String))
        | DIE 
        | ERROR String
        | INFO (Maybe String)
        | INVITE String String
        | ISON [String]
-       | JOIN [(String, Maybe String)]
+       | JOIN CSepList (Maybe String)
        | KICK String String (Maybe String)
        | KILL String String
        | LINKS (Maybe (Maybe String, String))
-       | LIST [String]
+       | LIST (Maybe (CSepList, Maybe String))
        | LUSERS (Maybe (String, Maybe String))
-       | MODE String
+       | MODE String String (Maybe String) (Maybe String) (Maybe String)
        | MOTD (Maybe String)
-       | NAMES [String]
-       | NICK String
+       | NAMES CSepList
+       | NICK String (Maybe String)
        | NJOIN 
        | NOTICE String String
        | OPER String String 
-       | PART [String]
+       | PART CSepList
        | PASS String
-       | PING [String]
-       | PONG [String]
-       | PRIVMSG String String
+       | PING String (Maybe String)
+       | PONG String (Maybe String)
+       | PRIVMSG CSepList String
        | QUIT (Maybe String)
        | REHASH 
        | RESTART 
@@ -44,14 +70,14 @@ from StdOverloaded import class fromInt, class toInt, class toString
        | TIME (Maybe String)
        | TOPIC String (Maybe String)
        | TRACE (Maybe String)
-       | USER String Int String
-       | USERHOST [String]
+       | USER String String String String
+       | USERHOST CSepList
        | USERS (Maybe String)
        | VERSION (Maybe String)
        | WALLOPS String
        | WHO (Maybe String)
-       | WHOIS (Maybe String) [String]
-       | WHOWAS (Maybe String) [String]
+       | WHOIS (Maybe String) String
+       | WHOWAS String (Maybe (String, Maybe String))
 
 :: IRCReplies = RPL_WELCOME | RPL_YOURHOST | RPL_CREATED | RPL_MYINFO |
        RPL_BOUNCE | RPL_TRACELINK | RPL_TRACECONNECTING | RPL_TRACEHANDSHAKE |
@@ -72,7 +98,7 @@ from StdOverloaded import class fromInt, class toInt, class toString
        RPL_ENDOFBANLIST | RPL_ENDOFWHOWAS | RPL_INFO | RPL_MOTD | RPL_ENDOFINFO |
        RPL_MOTDSTART | RPL_ENDOFMOTD | RPL_YOUREOPER | RPL_REHASHING |
        RPL_YOURESERVICE | RPL_TIME | RPL_USERSSTART | RPL_USERS | RPL_ENDOFUSERS |
-       RPL_NOUSERS
+       RPL_NOUSERS | RPL_UNKNOWN
 
 :: IRCErrors = ERR_NOSUCHNICK | ERR_NOSUCHSERVER | ERR_NOSUCHCHANNEL |
        ERR_CANNOTSENDTOCHAN | ERR_TOOMANYCHANNELS | ERR_WASNOSUCHNICK |
@@ -84,13 +110,10 @@ from StdOverloaded import class fromInt, class toInt, class toString
        ERR_NOTONCHANNEL | ERR_USERONCHANNEL | ERR_NOLOGIN | ERR_SUMMONDISABLED |
        ERR_USERSDISABLED | ERR_NOTREGISTERED | ERR_NEEDMOREPARAMS |
        ERR_ALREADYREGISTRED | ERR_NOPERMFORHOST | ERR_PASSWDMISMATCH |
-       ERR_YOUREBANNEDCREEP | ERR_YOUWILLBEBANNED | ERR_KEYSET | ERR_CHANNELISFULL |
-       ERR_UNKNOWNMODE | ERR_INVITEONLYCHAN | ERR_BANNEDFROMCHAN |
-       ERR_BADCHANNELKEY | ERR_BADCHANMASK | ERR_NOCHANMODES | ERR_BANLISTFULL |
-       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
+       ERR_YOUREBANNEDCREEP | ERR_YOUWILLBEBANNED | ERR_KEYSET |
+       ERR_CHANNELISFULL | ERR_UNKNOWNMODE | ERR_INVITEONLYCHAN |
+       ERR_BANNEDFROMCHAN | ERR_BADCHANNELKEY | ERR_BADCHANMASK |
+       ERR_NOCHANMODES | ERR_BANLISTFULL | ERR_NOPRIVILEGES |
+       ERR_CHANOPRIVSNEEDED | ERR_CANTKILLSERVER | ERR_RESTRICTED |
+       ERR_UNIQOPPRIVSNEEDED | ERR_NOOPERHOST | ERR_UMODEUNKNOWNFLAG |
+       ERR_USERSDONTMATCH | ERR_UNKNOWN