import Data.List.Utils(spanList)
import Data.List(genericSplitAt, genericLength)
+type IMAPState = State (IMAPString, IMAPString)
+
{- | Set up an IMAPConnection that runs in the State monad.
The state is (bufferToClient, bufferFromClient)
Remember that EOL in IMAP protocols is \r\n!
closeConnection is ignored with this monad. -}
-newStringConnection :: IMAPConnection (State (IMAPString, IMAPString))
+newStringConnection :: IMAPConnection IMAPState
newStringConnection =
IMAPConnection {readBytes = lreadBytes,
readLine = lreadLine,
{- | Runs a State monad with a String connection. Returns
(retval, remainingBufferToClient, bufferFromClient) -}
-{-
-runStringConnection ::
- IMAPString ->
- ((State s a) -> a) ->
- (a, IMAPString, IMAPString)
--}
runStringConnection ::
IMAPString -- ^ Buffer to send to clients
- -> (IMAPConnection (State (IMAPString, IMAPString)) -> State (IMAPString, IMAPString) a) -- ^ Function to run
+ -> (IMAPConnection IMAPState -> IMAPState a) -- ^ Function to run
-> (a, (String, String)) -- ^ Results: func result, buffer status
runStringConnection sbuf func =
runState (func newStringConnection) (sbuf::String, []::String)