| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Eve.Internal.States
Documentation
class (Typeable s, HasStates s) => HasEvents s Source #
A typeclass to ensure people don't dispatch events to states which shouldn't accept them.
To allow dispatching events in an action over your state simply define the empty instance:
instance HasEvents MyState where -- Don't need anything here.
Instances
| HasEvents AppState Source # | |
Defined in Eve.Internal.AppState | |
stateLens :: forall a e. (Typeable a, Default a, HasStates e) => Lens' e a Source #
A polymorphic lens which accesses stored states.
It returns the default value (def) if a state has not yet been set.
makeStateLens :: (HasStates s, Typeable myState, Default myState) => Lens' myState a -> Lens' s a Source #
A utility which creates a state-nested version of a lens.
If you pass this function a lens from your state to one of its fields,
it will return a lens which can be used within an App or Action.
The resulting lens will be of type: newLens :: HasStates s => Lens' s MyState
Or if you prefer, you may wish to specify the state it operates over more specifically
to prevent using the lens where it was not originally planned. For instance:
newLens :: Lens' AppState MyState
data SimpleState = SimpleState
{ _myString :: String
}
makeLenses ''SimpleState
instance Default SimpleState where
def = SimpleState "default"
myStringStateLens :: HasStates s => Lens' s String
myStringStateLens = makeStateLens myString
myAction :: App ()
myAction = do
myStringStateLens .= "Hi!"
str <- use myStringStateLens
liftIO $ print str
-- "Hi!"For more complex Prisms or Traversals you can write your own using
stateLens