Clojureでプロトコルをよく使う。defprotocolで作ってextend-protocolで各種の型に実装すると、いろんな入力値にスムーズに対応できる。例えば暗号化周りで、ハッシュや署名の算出のためにバイト配列が必要な際、プロトコルを活かしていい感じのAPIが提供できる。
(defprotocol Byteish
(->bytes ^bytes [input]))
(extend-protocol Byteish
String
(->bytes [input] (.getBytes input)))






