Several interface improvements
[cloogle-irc.git] / IRCBot.icl
index 6820e70..3ea2f76 100644 (file)
@@ -14,7 +14,7 @@ import StdBool
 
 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
@@ -27,7 +27,7 @@ bot (host, port) start end state bot w
 | rpt == TR_NoSuccess
        = (Just $ "Could not connect to " +++ host, state, w)
 // Send startup commands
-# (merr, chan, w) = send (map toString start) (fromJust chan) w
+# (merr, chan, w) = send [toString s +++ "\r\n" \\ s <- start] (fromJust chan) w
 | isError merr = (Just $ fromError merr, state, w)
 //Start processing function
 # (mer, chan, state, w) = process chan "" state bot w
@@ -38,7 +38,7 @@ bot (host, port) start end state bot w
 //Close channels
 = (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
@@ -59,7 +59,7 @@ process chan acc state bot w
                        # (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
+                       # (merr, chan, w) = send [toString c +++ "\r\n" \\ c <- fromJust mircc] chan w
                        | isError merr = (Error $ fromError merr, chan, state, w)
                        //Recurse
                        = process chan acc state bot w