Merge branch 'master' of github.com:clean-cloogle/clean-irc
[cloogle-irc.git] / IRCBot.icl
index 2be18ad..e2e7d11 100644 (file)
@@ -14,31 +14,31 @@ 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
 | isNothing ip
-       = (Error $ "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
-       = (Error $ "Connection to " +++ host +++ " timed out", state, w)
+       = (Just $ "Connection to " +++ host +++ " timed out", state, w)
 | rpt == TR_NoSuccess
-       = (Error $ "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
-| isError merr = (Error $ fromError merr, state, w)
+| isError merr = (Just $ fromError merr, state, w)
 //Start processing function
 # (mer, chan, state, w) = process chan "" state bot w
-| isError mer = (Error $ fromError mer, state, w)
+| isError mer = (Just $ fromError mer, state, w)
 // Send shutdown commands
 # (merr, {rChannel,sChannel}, w) = send (map toString end) chan w
-| isError merr = (Error $ fromError merr, state, w)
+| isError merr = (Just $ fromError merr, state, w)
 //Close channels
-= (Ok state, 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
@@ -69,13 +69,13 @@ send [] chan w = (Ok (), chan, w)
 send [msg:msgs] {sChannel,rChannel} w
 # (rpt,i,sChannel,w) = send_MT TIMEOUT (toByteSeq msg) sChannel w
 | rpt <> TR_Success = (Error "Could not send message", {sChannel=sChannel,rChannel=rChannel}, w)
-# (_, w) = sleep 500000 w
+//# (_, w) = sleep 500000 w
 = send msgs {sChannel=sChannel,rChannel=rChannel} w
-       where
-               sleep :: !Int !*World -> (!Int, *World)
-               sleep i w = code {
-                               ccall usleep "I:I:A"
-                       }
+//     where
+//             sleep :: !Int !*World -> (!Int, *World)
+//             sleep i w = code {
+//                             ccall usleep "I:I:A"
+//                     }
 
 recv :: TCP_DuplexChannel *World -> (MaybeErrorString (Maybe String), TCP_DuplexChannel, *World)
 recv {sChannel,rChannel} w