Spectrum (https://github.com/arohner/spectrum) seems quite interesting. I haven't tried spec yet, but form quick glance, it looks just as annoying as typed clojure to use.
I think I'm imagining something simpler though. Say a system that just used already existing Clojure type hints, and performed compile time checks about to whatever level is possible given the provided annotation. So say I did: (def ^int something "test") This would fail at compile time. Similarly: (def ^String something "test") (inc something) It would fail at compile time. Or: (defn inc2 [^Long a] (inc (inc a))) (inc2 1.80) Would also fail. And hopefully this: (defn ^Long inc2 [^Long a] (inc (inc a))) (def temp ["test", 2.48]) (map inc2 temp) Would also fail. Because the type checker would infer that the vector has String or Double as type, and inc2 expects none of these. Or: (conj ["a", "b"] "c") would still work. (conj ^Vec<String> ["a", "b"] 10) would fail. Now I don't know, maybe this is too simple, not really useful, or maybe its non trivial to implement. But I feel just small type checks like that could be useful, and they wouldn't be too burdening. On Saturday, 15 October 2016 15:14:08 UTC-7, Didier wrote: > > I know a lot of people like to say how unhelpful Java like static typing > is, and only more powerful type systems of the ML family add value, but > I've been wondering recently if for Clojure it wouldn't make more sense to > simply extend the type hints to enable an optional Java like static typing > schemI the. > > It is my understanding that ML style static typing is incredibly difficult > to add properly and without compromise to a dynamic language. That doing so > limits the scope of type inference, rendering the task of adding type info > more tedious then in ML languages themselves. > > ML style static typing provide enhanced safety grantees, but seem to add > too much complexity to Clojure to be practical. What about a Java like > static typing scheme though? > > I haven't found in practice that the safety of Clojure was an issue, as > the REPL workflow tend to promote quite a lot of testing. So I'm not too > worried about needing the state of the art of provable correctness for my > programs. What has been a biggest cause of issue to me was refactoring and > shared code base across a team. Those last two use cases are actually > pretty well handled by Java like static type checking. Is it a powerful > type checker, not really, but it enables most trivial type errors to be > caught early, and it allows easier integration points for other devs to > follow, as well as documentation for functions, better tools support and > easier refactoring, while also enabling performance optimizations. > > I have limited knowledge in typing systems, and have no idea how easy it > is to implement them, but as a user of Clojure, I feel like I would find an > optional Java like static typing a great addition, one that I am more > willing to use and benefit from then Typed Clojure's more complex ML style > type checking. > > What do other think? > Can anyone with better knowledge tell me if this would be feasible or if > adding such gradual typing system is effectively as hard as adding ML style > type checking? > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.