summaryrefslogtreecommitdiff
path: root/Common/Option.lean
diff options
context:
space:
mode:
authorAndreas Grois <andi@grois.info>2024-09-08 17:00:18 +0200
committerAndreas Grois <andi@grois.info>2024-09-08 17:00:18 +0200
commita6e5f7c0c830308c3912a043d4e741a13d3ce6cd (patch)
tree6be26e0e66e228da5321a584fefd75d9c9e6bc3b /Common/Option.lean
parent169846b8697f3658b74a01e59ac18391bad56d89 (diff)
Begin implementing Day10 Part1
Diffstat (limited to 'Common/Option.lean')
-rw-r--r--Common/Option.lean7
1 files changed, 7 insertions, 0 deletions
diff --git a/Common/Option.lean b/Common/Option.lean
index 275f83f..9344d83 100644
--- a/Common/Option.lean
+++ b/Common/Option.lean
@@ -9,3 +9,10 @@ def unzip : (a : Option (α×β)) → (Option α) × (Option β)
def toExcept {α : Type u0} {ε : Type u1} { m : Type u0 → Type u2} [Pure m] [MonadExcept m (ε := ε)] (error : ε) : Option α → m α
| none => throw error
| some a => pure a
+
+def bindWithProof (o : Option α) (f : (v : α) → (o = some v) → Option β) : Option β :=
+ match o with
+ | .some v => f v rfl
+ | .none => none
+
+def mapWithProof (o : Option α) (f : (v : α) → (o = some v) → β) : Option β := bindWithProof o (some $ f · ·)