summaryrefslogtreecommitdiff
path: root/src/Waylean.lean
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2026-03-08 17:27:51 +0100
committerHannes Schulze <haschu0103@outlook.de>2026-03-08 17:27:51 +0100
commit658b74715751cb4b52b2a968325ece9a62a29fc3 (patch)
tree9a831619b58a4ea0a56968f4a6a5d1c9a3422f2c /src/Waylean.lean
parent56c5078463e5f9131dfa073b127e8a9c7c73e05f (diff)
display monad
Diffstat (limited to 'src/Waylean.lean')
-rw-r--r--src/Waylean.lean36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/Waylean.lean b/src/Waylean.lean
index a13b867..354b609 100644
--- a/src/Waylean.lean
+++ b/src/Waylean.lean
@@ -1,21 +1,21 @@
import Wayland
-open Wayland.Native
+open Wayland
-partial def mainLoop (loop : EventLoop (IO Unit)) : IO Unit := do
- match (← loop.poll) with
- | .none => return
- | .some msg => msg; mainLoop loop
+structure State where
+ count : Int
-partial def main : IO Unit := do
- let disp : Display ← Display.new .none
- let loop : EventLoop (IO Unit) ← EventLoop.new
- _ ← loop.addDisplay disp
- _ ← loop.addSignal SIGINT (do
- IO.println "Received SIGINT"
- loop.quit)
- let rec setUpTimer := loop.addTimer 500 (do
- IO.println "Timer tick"
- _ ← setUpTimer)
- _ ← setUpTimer
- disp.roundtrip
- mainLoop loop
+partial def nextTimer : DisplayM Int Unit := do
+ _ ← DisplayM.registerTimer 16ms do
+ let newCount := (← get) + 1
+ set newCount
+ DisplayM.liftIO (IO.println s!"Timer tick {newCount}")
+ nextTimer
+
+def launch : DisplayM State Unit := do
+ _ ← DisplayM.registerSignal .SIGINT do
+ DisplayM.liftIO (IO.println "Received SIGINT")
+ DisplayM.requestQuit
+ DisplayM.zoom (mk_lens count) nextTimer
+
+def main : IO Unit :=
+ DisplayM.run launch { count := 0 }