(ns example.core
  (:require [akar.syntax :refer [match]]))

;; 基本的なパターンマッチング
(defn describe [x]
  (match x
         nil          "nil です"
         true         "true です"
         false        "false です"
         (:pred number?) "数値です"
         (:pred string?) "文字列です"
         :_           "その他"))

(describe nil)    ;=> "nil です"
(describe 42)     ;=> "数値です"
(describe "hi")   ;=> "文字列です"

;; マップのパターンマッチング
(defn handle-event [event]
  (match event
         {:type :click :target t} (str "クリック: " t)
         {:type :keydown :key k}  (str "キー入力: " k)
         :_                       "不明なイベント"))

(handle-event {:type :click :target "button"})  ;=> "クリック: button"
(handle-event {:type :keydown :key "Enter"})    ;=> "キー入力: Enter"