diff --git a/match.sls b/match.sls
index 332470a..60754b1 100644
--- a/match.sls
+++ b/match.sls
@@ -2,6 +2,7 @@
 (library (meh match)
   (export
    match if-let when-let
+   if-let* when-let*
    define-m%-expander define-pattern define-pattern-expander
    m%-expander pattern-expander
 
@@ -37,6 +38,22 @@
     [(_ pattern scrutinee body* ...)
      (if-let pattern scrutinee (begin body* ...))]))
 
+(define-syntax if-let*
+  (syntax-rules ()
+    [(_ binds then) (if-let* binds then (void))]
+    [(_ () then else) then]
+    [(_ ([pat val] bind* ...) then else)
+     (if-let pat val
+       (if-let* (bind* ...) then else)
+       else)]))
+
+(define-syntax when-let*
+  (syntax-rules ()
+    [(_ ([pat* val*] ...) body* ...)
+     (if-let* ([pat* val*] ...) (begin body* ...))]))
+
+;; TODO: match-let, match errors
+
 ;; no unless-let because come on
 
 (define-syntax match%
@@ -58,6 +75,7 @@
       (define (find-pattern-expander name)
         (and (identifier? name) (lookup name #'pattern-expander)))
       ;; - is a decent choice because _ isn't allowed and * implies something else
+      ;; you can also just use _ multiple times lol
       (syntax-case e (-)
         [(_ s - ok fail) #'ok]