Update to latest clean-selectloop master
[cloogle-irc.git] / IRCBot.icl
index 3d5c156..daed825 100644 (file)
@@ -4,20 +4,20 @@ from Data.Func import $
 import Data.Either
 import Data.Error
 import Data.Maybe
 import Data.Either
 import Data.Error
 import Data.Maybe
+import Data.Functor
+import Data.Tuple
+import StdTuple
 import IRC
 from Text import class Text(concat,split,join), instance Text String
 import StdList, StdString
 import TCPServer.Connection
 
 import IRC
 from Text import class Text(concat,split,join), instance Text String
 import StdList, StdString
 import TCPServer.Connection
 
-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 = case connect host port
+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 = appSnd3 snd $ connect host port
                { emptyConnection
                & onConnect = onConnect
                , onData    = onData
                { emptyConnection
                & onConnect = onConnect
                , onData    = onData
-               } ("", state) w of
-       (Error e, w) = (Just e, state, w)
-       (Ok (acc, state), w) = (Nothing, state, w)
+               } ("", state) w
 where
        onConnect s w = (Just (concat (map toString start)), connectionResponse s, w)
        onData d (acc, s) w = case split "\r\n" (acc +++ d) of
 where
        onConnect s w = (Just (concat (map toString start)), connectionResponse s, w)
        onData d (acc, s) w = case split "\r\n" (acc +++ d) of
@@ -26,10 +26,10 @@ where
                                // Do something with the error
                                (Left err) = (Nothing, {connectionResponse ("", s) & stop=True}, w)// (Error $ "IRC Parsing error: " +++ join "\n" err, chan, state, w)
                                (Right msg)
                                // Do something with the error
                                (Left err) = (Nothing, {connectionResponse ("", s) & stop=True}, w)// (Error $ "IRC Parsing error: " +++ join "\n" err, chan, state, w)
                                (Right msg)
-                               # acc = join "\r\n" [rest:xs]
-                               # (mircc, state, w) = bot msg state w
-                               | isNothing mircc = (Just (concat (map toString end)), {connectionResponse (acc, s) & stop=True}, w)
-                               # tosendthis = concat (map toString (fromJust mircc))
-                               # (tosend, cr, w) = onData "" (acc, s) w
-                               = (Just (maybe tosendthis ((+++) tosendthis) tosend), cr, w)    
+                                       # acc = join "\r\n" [rest:xs]
+                                       # (mircc, s, w) = bot msg s w
+                                       | isNothing mircc = (Just (concat (map toString end)), {connectionResponse (acc, s) & stop=True}, w)
+                                       # tosendthis = concat (map toString (fromJust mircc))
+                                       # (tosend, cr, w) = onData "" (acc, s) w
+                                       = (Just (maybe tosendthis ((+++) tosendthis) tosend), cr, w)    
                [m] = (Nothing, connectionResponse (m, s), w)
                [m] = (Nothing, connectionResponse (m, s), w)