repositories
/
cloogle-irc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
compiles, but doesn't work, probably strictness?
[cloogle-irc.git]
/
IRCBot.icl
diff --git
a/IRCBot.icl
b/IRCBot.icl
index
df21c0a
..
3b62090
100644
(file)
--- a/
IRCBot.icl
+++ b/
IRCBot.icl
@@
-14,31
+14,31
@@
import StdBool
TIMEOUT :== Just 1000
TIMEOUT :== Just 1000
-bot :: (String, Int) [IRCMessage] [IRCMessage] .a (IRCMessage
*(.a, *World) -> *(Maybe [IRCMessage], (.a, *World))) *World -> *(Maybe String, *(.a, *World)
)
+bot :: (String, Int) [IRCMessage] [IRCMessage] .a (IRCMessage
-> (.a -> .(*World -> *(Maybe [IRCMessage], .a, *World)))) *World -> *(Maybe String, .a, *World
)
bot (host, port) start end state bot w
//Lookup hostname
# (ip, w) = lookupIPAddress host w
| isNothing ip
bot (host, port) start end state bot w
//Lookup hostname
# (ip, w) = lookupIPAddress host w
| isNothing ip
- = (Just $ "DNS lookup for " +++ host +++ " failed",
(state, w)
)
+ = (Just $ "DNS lookup for " +++ host +++ " failed",
state, w
)
//Connect
# (rpt,chan,w) = connectTCP_MT TIMEOUT (fromJust ip, port) w
| rpt == TR_Expired
//Connect
# (rpt,chan,w) = connectTCP_MT TIMEOUT (fromJust ip, port) w
| rpt == TR_Expired
- = (Just $ "Connection to " +++ host +++ " timed out",
(state, w)
)
+ = (Just $ "Connection to " +++ host +++ " timed out",
state, w
)
| rpt == TR_NoSuccess
| rpt == TR_NoSuccess
- = (Just $ "Could not connect to " +++ host,
(state, w)
)
+ = (Just $ "Could not connect to " +++ host,
state, w
)
// Send startup commands
# (merr, chan, w) = send (map toString start) (fromJust chan) w
// Send startup commands
# (merr, chan, w) = send (map toString start) (fromJust chan) w
-| isError merr = (Just $ fromError merr,
(state, w)
)
+| isError merr = (Just $ fromError merr,
state, w
)
//Start processing function
# (mer, chan, state, w) = process chan "" state bot w
//Start processing function
# (mer, chan, state, w) = process chan "" state bot w
-| isError mer = (Just $ fromError mer,
(state, w)
)
+| isError mer = (Just $ fromError mer,
state, w
)
// Send shutdown commands
# (merr, {rChannel,sChannel}, w) = send (map toString end) chan w
// Send shutdown commands
# (merr, {rChannel,sChannel}, w) = send (map toString end) chan w
-| isError merr = (Just $ fromError merr,
(state, w)
)
+| isError merr = (Just $ fromError merr,
state, w
)
//Close channels
//Close channels
-= (Nothing,
(state, closeChannel sChannel (closeRChannel rChannel w)
))
+= (Nothing,
state, closeChannel sChannel (closeRChannel rChannel w
))
-process :: TCP_DuplexChannel String .a (IRCMessage
(.a, *World) -> (Maybe [IRCMessage], (.a, *World))) *World -> (MaybeErrorString (), TCP_DuplexChannel, (.a, *World)
)
+process :: TCP_DuplexChannel String .a (IRCMessage
-> (.a -> .(*World -> *(Maybe [IRCMessage], .a, *World)))) *World -> (MaybeErrorString (), TCP_DuplexChannel, .a, *World
)
process chan acc state bot w
//See if we have a message
= case split "\r\n" acc of
process chan acc state bot w
//See if we have a message
= case split "\r\n" acc of
@@
-46,21
+46,21
@@
process chan acc state bot w
[m]
//Receive
# (merr_resp, chan, w) = recv chan w
[m]
//Receive
# (merr_resp, chan, w) = recv chan w
- | isError merr_resp = (Error (fromError merr_resp), chan,
(state, w)
)
+ | isError merr_resp = (Error (fromError merr_resp), chan,
state, w
)
# (Ok mresp) = merr_resp
| isNothing mresp = process chan acc state bot w
# (Ok mresp) = merr_resp
| isNothing mresp = process chan acc state bot w
- = process chan (m +++ fromJust mresp)
(state, bot)
w
+ = process chan (m +++ fromJust mresp)
state bot
w
//We have a successfull split and therefore we process at least one message
[m:xs]
# acc = join "\r\n" xs
= case parseIRCMessage $ m +++ "\r\n" of
(Left err) = (Error $ "IRC Parsing error: " +++ join "\n" err, chan, state, w)
(Right msg)
//We have a successfull split and therefore we process at least one message
[m:xs]
# acc = join "\r\n" xs
= case parseIRCMessage $ m +++ "\r\n" of
(Left err) = (Error $ "IRC Parsing error: " +++ join "\n" err, chan, state, w)
(Right msg)
- # (mircc, state, w) = bot msg
(state, w)
- | isNothing mircc = (Ok (), chan,
(state, w)
) // Bot asks to quit
+ # (mircc, state, w) = bot msg
state w
+ | isNothing mircc = (Ok (), chan,
state, w
) // Bot asks to quit
//Possible send the commands
# (merr, chan, w) = send (map toString $ fromJust mircc) chan w
//Possible send the commands
# (merr, chan, w) = send (map toString $ fromJust mircc) chan w
- | isError merr = (Error $ fromError merr, chan,
(state, w)
)
+ | isError merr = (Error $ fromError merr, chan,
state, w
)
//Recurse
= process chan acc state bot w
//Recurse
= process chan acc state bot w