I believe you are passing two params instead of one. What is happening is the first parameter to the protocol method is the this
parameter.
Try this instead
(defprotocol ActionHandler
(handle [this params session]))
(defrecord Response [status headers body])
(deftype AHandler []
ActionHandler
(handle [this params session]
(Response. 200 {"Content-Type" "text/plain"} "Yuppi, a-handler works")))
(deftype BHandler []
ActionHandler
(handle [this params session]
(Response. 200 {"Content-Type" "text/plain"} "YES, the b-handler is ON")))
(deftype CHandler []
ActionHandler
(handle [this params session]
(Response. 200 {"Content-Type" "text/plain"} "C is GOOD, it's GOOD!")))