(defmacro provide-contracts [& contracts]
(let [fn-names (map first contracts)
contracts (for [[n ds & more] contracts]
(if (vector? (first more))
(list* `contract n ds more)
(first more)))]
`(do
~@(for [[n# c#] (zipmap fn-names contracts)]
(list `alter-var-root (list `var n#)
(list `fn '[f c] (list `with-constraints 'f 'c)) c#))
nil)))
Comments top
No comments for provide-contracts. Log in to add a comment.