Skip to content

Instantly share code, notes, and snippets.

@wyager
Created December 9, 2021 04:07
Show Gist options
  • Save wyager/99fe8b20a48b129cf5fb85949a79483a to your computer and use it in GitHub Desktop.
Save wyager/99fe8b20a48b129cf5fb85949a79483a to your computer and use it in GitHub Desktop.
process :: (MonadLogger m, MonadState State m) => Event -> m ()
process = \case
PuckEvent puck -> when (puck ^. #battery < 30) $ logWarnN "Puck battery low"
SquareEvent square -> when (square ^. #battery < 30) $ logWarnN "Square battery low"
WaterLeakEvent leak -> do
when (leak ^. #battery < 30) $ logWarnN "Leak detector battery low"
let newState = if leak ^. #water_leak then Wet else Dry
oldState <- (#leakState . #wetness) <<.= newState
when (oldState /= newState || newState == Wet) $ logWarnN $ "Basement leak detector: " <> pack (show newState)
HallEffectEvent location event -> do
when (event ^. #battery < 30) $ logWarnN $ pack $ "Battery low at " <> show location <> " hall effect sensor"
logWarnN $ pack $ show location <> if event ^. #contact then " closed" else " opened"
AccelerometerEvent accel -> do
when (accel ^. #action == Just Drop) $ logWarnN "Accelerometer dropped"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment