Copyright | (c) Dmitry Bogatov <KAction@gnu.org> |
---|---|
License | BSD |
Maintainer | Dmitry Bogatov <KAction@gnu.org> |
Stability | unstable |
Portability | unportable |
Safe Haskell | None |
Language | Haskell2010 |
Functions for saving per-window data.
Synopsis
- get :: MonadState s m => m s
- put :: MonadState s m => s -> m ()
- newtype StateQuery s a = StateQuery {}
- runStateQuery :: StateQuery s a -> Window -> X a
- catchQuery :: Query a -> Query (Maybe a)
Usage
This module allow to store state data with some Window
.
It is implemented with XProperties, so resources will be freed when
Window
is destoyed.
This module have advantage over XMonad.Actions.TagWindows in that it
hides from you implementation details and provides simple type-safe
interface. Main datatype is StateQuery
, which is simple wrapper around
Query
, which is instance of MonadState, with put
and get
are
functions to acess data, stored in Window
.
To save some data in window you probably want to do following:
> (runStateQuery (put $ Just value) win) :: X ()
To retrive it, you can use
> (runStateQuery get win) :: X (Maybe YourValueType)
Query
can be promoted to StateQuery
simply by constructor,
and reverse is getQuery
.
For example, I use it to have all X applications russian
or dvorak
layout, but emacs have only us
, to not screw keybindings. Use your
imagination!
get :: MonadState s m => m s #
Return the state from the internals of the monad.
put :: MonadState s m => s -> m () #
Replace the state inside the monad.
newtype StateQuery s a Source #
Wrapper around Query
with phantom type s
, representing state, saved in
window.
Instances
runStateQuery :: StateQuery s a -> Window -> X a Source #
Apply StateQuery
to Window
.