diff options
author | tv <tv@shackspace.de> | 2015-10-08 20:39:37 +0200 |
---|---|---|
committer | tv <tv@shackspace.de> | 2015-10-08 22:03:31 +0200 |
commit | c07b9562e72133ccf5a64e880beb53cb8499a642 (patch) | |
tree | aedff354cfd937f76e304fb539e9ecee375651c3 /Hirc/Parser.hs | |
parent | 38ab0e0de94353023f3e70eeafdab0db8673bf38 (diff) |
Parse IRC messages
Diffstat (limited to 'Hirc/Parser.hs')
-rw-r--r-- | Hirc/Parser.hs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Hirc/Parser.hs b/Hirc/Parser.hs new file mode 100644 index 0000000..2cb2451 --- /dev/null +++ b/Hirc/Parser.hs @@ -0,0 +1,23 @@ +module Hirc.Parser where + +import Data.Char +import Hirc.Types +import Text.Parsec +import Text.Parsec.String + +message :: Parser Message +message = + Message <$> optionMaybe (char ':' *> prefix) <* spaces1 <*> command <*> params + where + spaces1 = skipMany1 space + prefix = Prefix <$> nick + <*> optionMaybe (char '!' *> user) + <*> optionMaybe (char '@' *> host) + nick = many1 (noneOf " !@") + user = many1 (noneOf " !@") + host = many1 (noneOf " !@") + command = UnknownCommand <$> many1 nonspace + params = many1 (spaces1 *> (trailing <|> middle)) + trailing = char ':' *> many1 anyChar + middle = many1 nonspace + nonspace = satisfy (not . isSpace) |