packages feed

twitter-0.1: State.hs

module State where
import Control.Monad.State
import Twitter.Client (Tweet)

data Mode = NormalMode | InsertMode | CommandMode
data AppState = AppState { tweets :: [Tweet]
                         , active_tweet :: Int
                         , scroll :: Int
                         , geom :: (Int, Int)
                         , mode :: Mode
                         , auth :: String
                   }

getActiveTweet :: State AppState Int
getActiveTweet = get >>= return . active_tweet
setActiveTweet x = modifyActiveTweet (const x)
modifyActiveTweet f = do st <- get 
                         tweets <- getTweets
                         let at' = f (active_tweet st)
                             newAt = max 0 (min at' $ length tweets - 1)
                         put $ st {active_tweet = newAt}

getTweets :: State AppState [Tweet]
getTweets = get >>= return . tweets

getAuth :: State AppState String
getAuth = get >>= return . auth


setMode x = modifyMode (const x)
modifyMode f = do st <- get 
                  put $ st {mode = f (mode st)}