On Tue, Dec 15, 2009 at 9:11 AM, Garth Sheldon-Coulson <[email protected]> wrote:
> OTOH, when Rich gave a talk at MIT recently he mentioned he wasn't terribly > interested in type systems for Clojure apart from (potentially) a simple > binary type system to distinguish I/O-side-effecty things from > non-I/O-side-effecty things. He also mentioned something extremely > interesting about wanting to make Clojure amenable to analysis by external > static correctness checking tools, rather than build types and type-checking > into the language itself. > external static correctness checking tools, I am definitely looking forward for this one. > > I should let him characterize his views himself, though, because I imagine > I'm getting it at least part wrong. > > Either way, Ajay, Clojure is a dynamic and dynamically typed system. Cons: > No compile-time type checking, more runtime bug-catching. Pros: Easy, > module-by-module, REPL-based interactive development, expressiveness, > somewhat easier code reuse, faster development, and easier interaction with > external systems that may change under your nose. I was born and bred in > QBasic, Perl, and later Ruby, so this is what feels most natural to me. > > On Tue, Dec 15, 2009 at 8:43 AM, Laurent PETIT <[email protected]>wrote: > >> >> >> 2009/12/15 ajay gopalakrishnan <[email protected]> >> >> Oh ... I know all that. What I wanted to know is that is there any way to >>> FORCE compile time checking by providing some flag or the other to Clojure >>> compiler. If not, I guess a good set of test cases is the only way to fix >>> it. (Good test cases are always recommended, it's just that in this case it >>> becomes unavoidable) >>> >> >> Not yet, and - just guessing - neither in a short nor middle term. >> >> But I remember Rich mentioning being interested in type systems "a la" Qi >> language ( >> http://en.wikipedia.org/wiki/Qi_(programming_language)<http://en.wikipedia.org/wiki/Qi_%28programming_language%29>). >> This allows to enable/disable type checking, but maybe what seemed more >> interesting was the way to define the type via sequent calculus ( >> http://en.wikipedia.org/wiki/Qi_(programming_language)#Type_Checking<http://en.wikipedia.org/wiki/Qi_%28programming_language%29#Type_Checking>). >> >> HTH, >> >> -- >> Laurent >> >> >>> >>> Ajay >>> >>> >>> On Tue, Dec 15, 2009 at 7:23 AM, Baishampayan Ghose < >>> [email protected]> wrote: >>> >>>> Ajay, >>>> >>>> > It tried the following in REPL and got no error. Personally, I feel >>>> that >>>> > I should get an error because calling square on strings is wrong in >>>> both >>>> > cases. >>>> > >>>> > Is there a way out of this in Clojure? >>>> > >>>> > |(defn square[n] (* n n)) >>>> > >>>> > (if (= 0 0) (println"hello") (map square["a" "b"])) >>>> > >>>> >>>> What did you expect from Clojure? In the above form the `map` is a part >>>> of the else form and that's why it's not executed. >>>> >>>> If you don't know already, the syntax for `if` in Clojure is like this - >>>> >>>> (if expression >>>> (then form) >>>> (else form)) >>>> >>>> If you have multiple then or else forms, you can wrap them inside a `do` >>>> form like this - >>>> >>>> (if expression >>>> (do >>>> (then form) >>>> (more then form)) >>>> (else form)) >>>> >>>> > The following gives error (because it gets evaluated): >>>> > >>>> > |(defn square[n] (* n n)) >>>> > >>>> > (if (= 0 1) (println"hello") (map square["a" "b"])) >>>> >>>> In the above form, the map is a part of the else form and since 1 is not >>>> equal to 0, the `map` is executed. >>>> >>>> I hope your confusion is cleared. >>>> >>>> PS - If you are worried about "compile time type checking", I think it's >>>> prudent to mention now that Clojure is a dynamically typed programming >>>> language where types are checked at run-time and not compile time. >>>> >>>> Regards, >>>> BG >>>> >>>> -- >>>> Baishampayan Ghose <[email protected]> >>>> oCricket.com >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to [email protected] >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> [email protected]<clojure%[email protected]> >>>> 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 post to this group, send email to [email protected] >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> To unsubscribe from this group, send email to >>> [email protected]<clojure%[email protected]> >>> 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 post to this group, send email to [email protected] >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> [email protected]<clojure%[email protected]> >> 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 post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected]<clojure%[email protected]> > 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 post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
