definition module IRC
-from StdOverloaded import class fromInt, class toInt, class toString
+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
+
+:: CSepList = CSepList [String]
+:: IRCCommand
+ = ADMIN (Maybe String)
+ | AWAY String
+ | CONNECT String (Maybe (Int, Maybe String))
+ | DIE
+ | ERROR String
+ | INFO (Maybe String)
+ | INVITE String String
+ | ISON [String]
+ | JOIN CSepList (Maybe String)
+ | KICK String String (Maybe String)
+ | KILL String String
+ | LINKS (Maybe (Maybe String, String))
+ | LIST (Maybe (CSepList, Maybe String))
+ | LUSERS (Maybe (String, Maybe String))
+ | MODE String String (Maybe String) (Maybe String) (Maybe String)
+ | MOTD (Maybe String)
+ | NAMES CSepList
+ | NICK String (Maybe String)
+ | NJOIN
+ | NOTICE String String
+ | OPER String String
+ | PART CSepList
+ | PASS String
+ | PING String (Maybe String)
+ | PONG String (Maybe String)
+ | PRIVMSG CSepList 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 String
+ | USERHOST CSepList
+ | USERS (Maybe String)
+ | VERSION (Maybe String)
+ | WALLOPS String
+ | WHO (Maybe 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 |
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 |
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