
Hi. I want to use [telnet library][1] to run some commands on cisco switches and then parse output. Thus, first i need to login (enter username and password, etc) and then run commands and collect output. As far as i understand that library API, all of output parsing should be done in EventHandler of type TelnetPtr -> Event -> IO () But, these (mine) operations require some state (to track where am i now (entered username, entered password, etc) and to collect output). But the monad of this event handler is IO, so i can't see any simple way of adding state to it apart from ['unsafePerfromIO' trick][2], like telnetRef :: IORef TelnetRef {-# NOINLINE telnetRef #-} telnetRef = unsafePerformIO $ newIORef (TelnetRef undefined Unauth M.empty) ('undefined' is 'Telnet' pointer, which is returned by 'telnetInit' and will be initialized later..) Is there a better a way to do this? Thanks. [1]: https://hackage.haskell.org/package/libtelnet [2]: https://wiki.haskell.org/Top_level_mutable_state