TL;DR
clojure.spec.alphaをsというエイリアスでrequireして使う。s/valid?は値に述語を適用し、満たせばtrue、満たさなければfalseを返す。
内容
Spec を使うには、次を require する。spec/something ではなく s/something のように短く呼び出せるよう、s というエイリアスを付けている。
(require '[clojure.spec.alpha :as s])ある値が文字列かどうかは、次のように確かめられる。
(s/valid? string? "Hello") ; trueこのコードでは valid? 関数に string? という関数を渡している。string? は渡された引数が文字列かどうかに応じて true か false を返す。第 2 引数は文字列 "Hello" である。s/valid? は "Hello" に string? を適用し、true なら true を、そうでなければ false を返す。そのため、文字列以外を渡すと false が返る。
(s/valid? string? 42)同じように、数値(number?)、整数(integer?)、浮動小数点数(double?)、ベクタ(vector?)、マップ(map?)、集合(set?)、キーワード(keyword?)もチェックできる。
(s/valid? number? 42) ; true
(s/valid? integer? 123) ; true
(s/valid? double? 123.45) ; true
(s/valid? vector? [1 2 3]) ; true
(s/valid? map? { 1 "one" 2 "two" }) ; true
(s/valid? set? #{:apple :orange}) ; true
(s/valid? keyword? :apple) ; true