On Thu 1 May 2014 at 09:05:29AM -0700, Mars0i wrote: > 1. Functions have complex intended type signatures: Functions can have > multiple parameter sequences, because of optional arguments with &, > and because of complex arguments such as maps.
Schema expresses these scenarios quite well, as does core.typed AFAIK. > 2. Many functions with a base intended use are also intended to have > more general uses. This is particularly common for functions that are > part of the Clojure language itself. Constraining inputs to those that satisfy protocols and interfaces goes a long way, and provides considerable flexibility, while still providing meaningful constraints. Have a function that uses `slurp` or `spit` on a parameter? Declare that the parameter satisfies clojure.java.io/Coercions. Have a function that expects any kind of map-like object that supports `get`? Declare that it must satisfy clojure.lang.Associative. And so on. Together with Java type hierarchies, I have found it quite easy to declare polymorphic function signatures using Schema. guns
pgpbQdkXAUa7G.pgp
Description: PGP signature