Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Daniel
Couldn't occurrence typing catch the error in that example, since 
evil-atom-reset! can only return an atom wrapping a keyword?

I guess the problem I had is that the optional typing moniker seems 
misleading since it forces you to annotate vars.  I had visions of gradually 
assigning types to vars as it became evident that typing was needed as a 
pre-runtime guardrail based on how other developers were using my functions.  
If I'm publishing a library then that's backward thinking, but in a team using 
core.typed it sounds useful... Only type what you need when you need to.

Don't mind me... Clearly I need to actually use the library before developing 
an opinion.

-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Jozef Wagner
How about annotating clojure.core API. Is it needed, provided, optional?

On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant 
wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from an 
 ambitious student project, I am finally comfortable recommending core.typed 
 for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra 
 identity-like
   function call at type annotations, I assume this is a candidate for 
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at CircleCI 
 for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed 
 can bring real utility to real programs *today* and with *no 
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just want 
 to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose


-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
I see optional typing as the opposite of mandatory typing. You don't need
to pass a type checker to get a program semantics.

Typed Clojure offers a particular flavour of optional typing: gradual
typing. My interpretation of gradual typing is some of your code is
rigorously statically typed, some is untyped, and there is some mediator
that handles the interface between the two. (Typed Clojure lacks the
mediator atm). You need to be explicit about the boundaries between
typed/untyped to make the most of the type system.

If you're providing a library, the implementation could be completely
untyped, but you might have annotations for your API.

Admittedly I've been exclusively researching Typed Racket style type
systems for awhile now, but I'm sceptical that the kind of type system you
describe would be effective in finding bugs in your programs. It might find
them, but error messages will probably be unpredictable and unreadable, and
the type system would not have simple rules to get a namespace type
checking like Typed Clojure/Racket does. (eg. assign types to top-levels
and fn parameters.)

I'm fairly confident that if you use core.typed, you'll see it's not for
everything, but that it can rigorously type check some isolated code, which
is often a use case. There are tradeoffs here: the more flexible the type
system is, the more complicated the rules are for what type checks, and
there will probably be tradeoffs in the accuracy of the static type system.

Also knowing that you've applied a picky, accurate type checker such as
core.typed on a large code base is a (valid) good feeling. It will take
investment though. In my experience, writing static types for functions is
similar to a code review, and probably makes you think about what your code
is doing a little more.

Thanks,
Ambrose


On Thu, Aug 29, 2013 at 3:13 PM, Daniel doubleagen...@gmail.com wrote:

 Couldn't occurrence typing catch the error in that example, since
 evil-atom-reset! can only return an atom wrapping a keyword?

 I guess the problem I had is that the optional typing moniker seems
 misleading since it forces you to annotate vars.  I had visions of
 gradually assigning types to vars as it became evident that typing was
 needed as a pre-runtime guardrail based on how other developers were using
 my functions.  If I'm publishing a library then that's backward thinking,
 but in a team using core.typed it sounds useful... Only type what you need
 when you need to.

 Don't mind me... Clearly I need to actually use the library before
 developing an opinion.

 --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
Hi,

Roughly 1/3 of clojure.core is annotated and comes included with
core.typed. They are unchecked annotations.

https://github.com/clojure/core.typed/blob/master/src/main/clojure/clojure/core/typed/base_env.clj#L658

You can lookup types via cf at the REPL.

(clojure.core.typed/cf +)
;= (Fn [clojure.core.typed/AnyInteger * - clojure.core.typed/AnyInteger]
[Number * - Number])

Thanks,
Ambrose


On Thu, Aug 29, 2013 at 3:40 PM, Jozef Wagner jozef.wag...@gmail.comwrote:

 How about annotating clojure.core API. Is it needed, provided, optional?


 On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant
 wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from an
 ambitious student project, I am finally comfortable recommending core.typed
 for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra
 identity-like
   function call at type annotations, I assume this is a candidate for
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at CircleCI
 for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed
 can bring real utility to real programs *today* and with *no
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/**content/groups/public/ 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just
 want to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose



-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
Also you can add missing annotations via ann.

(ann ^:no-check clojure.core/+ )

Core vars observe the same rules as all vars: they must be annotated.

Thanks,
Ambrose


On Thu, Aug 29, 2013 at 3:44 PM, Ambrose Bonnaire-Sergeant 
abonnaireserge...@gmail.com wrote:

 Hi,

 Roughly 1/3 of clojure.core is annotated and comes included with
 core.typed. They are unchecked annotations.


 https://github.com/clojure/core.typed/blob/master/src/main/clojure/clojure/core/typed/base_env.clj#L658

 You can lookup types via cf at the REPL.

 (clojure.core.typed/cf +)
 ;= (Fn [clojure.core.typed/AnyInteger * - clojure.core.typed/AnyInteger]
 [Number * - Number])

 Thanks,
 Ambrose


 On Thu, Aug 29, 2013 at 3:40 PM, Jozef Wagner jozef.wag...@gmail.comwrote:

 How about annotating clojure.core API. Is it needed, provided, optional?


 On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant
 wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from
 an ambitious student project, I am finally comfortable recommending
 core.typed for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra
 identity-like
   function call at type annotations, I assume this is a candidate for
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at
 CircleCI for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed
 can bring real utility to real programs *today* and with *no
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/**content/groups/public/ 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just
 want to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guidehttps://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose




-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Nils Grunwald
Congratulations and thanks for your work!

On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant 
wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from an 
 ambitious student project, I am finally comfortable recommending core.typed 
 for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra 
 identity-like
   function call at type annotations, I assume this is a candidate for 
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at CircleCI 
 for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed 
 can bring real utility to real programs *today* and with *no 
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just want 
 to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose


-- 
-- 
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/groups/opt_out.


Re: [ANN] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server

2013-08-29 Thread Shantanu Kumar
Hi Jaley,

This is pretty cool, thanks for sharing! The only nit I'd like to pick is, 
you may like to mention the version on README as 0.1.0 instead of 
0.1.0-SNAPSHOT.

Shantanu

On Thursday, 29 August 2013 03:34:59 UTC+5:30, Jaley wrote:

 Hi!

 Cloc is a small web app to serve API documentation, packaged as a 
 Leiningen plugin. The idea is that you run one command, `lein cloc` from 
 any Leiningen project and it fires up a local web server with all the 
 documentation you'll need, for your own code and for the dependencies in 
 your project file. It also has a Lucene-powered search built in.

 A first release is available on Clojars, instructions and a screenshot are 
 on the GitHub project [1] for anyone who wants to give it a try. A ton of 
 things need improvement, fixing, rewriting... I'll add a comprehensive list 
 of upcoming features and known bugs to the GitHub issue tracker tomorrow. 
 Meanwhile, the main problem you're likely to encounter is that it only 
 works in Chrome -- browser compatibility fixes are on the way!

 Feedback and suggestions welcome - feel free to add things to the GitHub 
 issues page!


 Jaley.

 [1] http://github.com/jaley/cloc



-- 
-- 
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/groups/opt_out.


Re: [ANN] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server

2013-08-29 Thread Nils Grunwald
Thanks, this is very useful! Can't wait for the Firefox compatibility ;)

Nils Grunwald

On Thursday, August 29, 2013 12:04:59 AM UTC+2, Jaley wrote:

 Hi!

 Cloc is a small web app to serve API documentation, packaged as a 
 Leiningen plugin. The idea is that you run one command, `lein cloc` from 
 any Leiningen project and it fires up a local web server with all the 
 documentation you'll need, for your own code and for the dependencies in 
 your project file. It also has a Lucene-powered search built in.

 A first release is available on Clojars, instructions and a screenshot are 
 on the GitHub project [1] for anyone who wants to give it a try. A ton of 
 things need improvement, fixing, rewriting... I'll add a comprehensive list 
 of upcoming features and known bugs to the GitHub issue tracker tomorrow. 
 Meanwhile, the main problem you're likely to encounter is that it only 
 works in Chrome -- browser compatibility fixes are on the way!

 Feedback and suggestions welcome - feel free to add things to the GitHub 
 issues page!


 Jaley.

 [1] http://github.com/jaley/cloc



-- 
-- 
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/groups/opt_out.


Re: ClojureScript: Keyword Breaking Change Around the Corner

2013-08-29 Thread Thomas Heller
Hey,

this sounds interesting. I just tried it on my project but it seems to be 
missing several keywords in the constants_table.js.

Dumb example: the code tries to use cljs.core.constant$keyword$1064 , which 
does not exist.

Will try to investigate, just a heads up.

/thomas

On Wednesday, August 28, 2013 3:29:26 PM UTC+2, David Nolen wrote:

 ClojureScript has long represented symbols and keywords as JavaScript 
 Strings as a performance optimization around hash maps. However modern 
 JavaScript engines have shown that following Clojure JVM's design more 
 closely consistently delivers better performance.

 Also the representation of keywords as strings has had an unfortunate 
 consequence, we modify the String prototype to allow keywords to be called 
 as functions - this is a serious interop liability.

 Sean Grove has done some excellent work that I have further extended in a 
 branch. In this branch keywords are represented with a deftype. In order to 
 deliver performance, under advanced optimizations we emit keywords 
 constants to avoid allocation overheads.

 The breaking change is that keywords in ClojureScript cannot support the 
 identical? property guaranteed by Clojure on the JVM. There is a new 
 equality check called keyword-identical? that can be used to efficiently 
 check for keyword equality. defrecords and hash maps have been updated to 
 use this predicate.

 Please try your projects with this branch so we can address any further 
 issues because of this breaking change.

 http://github.com/clojure/clojurescript/compare/keywords

 Thanks,
 David


-- 
-- 
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/groups/opt_out.


Re: stringify the name of an interned function

2013-08-29 Thread Erebus Mons
Tassilo Horn wrote:

 erebus.m...@gmail.com writes:
 
 What am I missing here?
 
 Functions don't really have names.  A function may be bound to a var,
 and that has a name (:name metadata, to be precise).  That said, since
 function's get compiled to classes you could twiddle with the class
 name.
 
 user (defn fnname [f]
 (symbol (clojure.string/replace-first (.getName (class f)) $
 /)))
 
 For what do you need that?

I am reading in a csv-file, and then transform the attributes into a hash-
map:

__
name,property1,property2,etc
John,drunk,stinks,etc.
etc.
__

{John {:property1 drunk, :property2 stinks} etc

then I create with a function functions like drunk?, so that I can check 
whether John is drunk

(drunk? John)
true

I need to be able to get all properties in the map but drunk?. Therefore, I 
thought it would be handy to be able to filter out drunk? from the 
functions, but I figured I can only do that if I can treat the function-name 
like a name...

 
 Bye,
 Tassilo
 


-- 
-- 
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/groups/opt_out.


Re: Emacs Clojure mode : No syntax highlighting for #_

2013-08-29 Thread Laurent PETIT
2013/8/29 Joel Holdbrooks cjholdbro...@gmail.com:
 I would imagine it is intended since #_ is a reader macro. #_ is not
 intended for commenting. Rather, it instructs the Clojure Reader to ignore
 entirely the subsequent form. This is much different from the comment macro
 (which simply takes any number of arguments and returns nil) or the ;
 comment syntax.

 It might be a bit involved to have #_ and the subsequent form appear
 commented through clojure-mode's syntax highlighting. However, it would also
 incorrectly express the semantics of #_ which, arguably, is counter to the
 goal of syntax highlighting.

Yet it is certainly better, given a dual choice, to present it as
commented code.
Counterclockwise does this since more than a year, and so far, nobody
has complained.

Cheers,

-- 
Laurent



 On Wednesday, August 28, 2013 3:09:11 PM UTC-7, JvJ wrote:

 Although semicolons cause the text color to change in order to look
 commented-out, the #_ reader macro doesn't cause any such change.  Is this
 intended, or is it a bug?

 --
 --
 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/groups/opt_out.

-- 
-- 
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/groups/opt_out.


Re: [ANN] Cloc 0.1.0 - Leiningen plugin to serve project API docs through a local web server

2013-08-29 Thread Jaley
@Shantanu - ah good spot, thanks! Maybe next I should make a tool to make 
sure README.md files are up to date :)

@Nils - I'll fix Firefox at the weekend I hope. It's probably completely 
obviously from looking at the ClojureScript code, but I have absolutely no 
idea what I'm doing when it comes to web development. Someone who knows 
about this kind of stuff can probably see what I'm doing wrong immediately, 
but hopefully it's something fairly trivial.


Jaley.

On Thursday, 29 August 2013 09:34:25 UTC+1, Nils Grunwald wrote:

 Thanks, this is very useful! Can't wait for the Firefox compatibility ;)

 Nils Grunwald

 On Thursday, August 29, 2013 12:04:59 AM UTC+2, Jaley wrote:

 Hi!

 Cloc is a small web app to serve API documentation, packaged as a 
 Leiningen plugin. The idea is that you run one command, `lein cloc` from 
 any Leiningen project and it fires up a local web server with all the 
 documentation you'll need, for your own code and for the dependencies in 
 your project file. It also has a Lucene-powered search built in.

 A first release is available on Clojars, instructions and a screenshot 
 are on the GitHub project [1] for anyone who wants to give it a try. A ton 
 of things need improvement, fixing, rewriting... I'll add a comprehensive 
 list of upcoming features and known bugs to the GitHub issue tracker 
 tomorrow. Meanwhile, the main problem you're likely to encounter is that it 
 only works in Chrome -- browser compatibility fixes are on the way!

 Feedback and suggestions welcome - feel free to add things to the GitHub 
 issues page!


 Jaley.

 [1] http://github.com/jaley/cloc



-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Christian Sperandio
Is there any perf improvement to use static typing in Clojure?
Like we can see with Groovy 2.x and its static mode.



2013/8/29 Nils Grunwald nils.grunw...@gmail.com

 Congratulations and thanks for your work!


 On Thursday, August 29, 2013 12:28:35 AM UTC+2, Ambrose Bonnaire-Sergeant
 wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from an
 ambitious student project, I am finally comfortable recommending core.typed
 for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra
 identity-like
   function call at type annotations, I assume this is a candidate for
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at CircleCI
 for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed
 can bring real utility to real programs *today* and with *no
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/**content/groups/public/ 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just
 want to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose

  --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: ClojureScript: Keyword Breaking Change Around the Corner

2013-08-29 Thread Thomas Heller
Ok,

It not longer seems possible to do incremental compiles, by which I mean 
compile all files once, change one file, then compile again. The constants 
table will then be incomplete. But since I'm using my own build-tool that 
might just be my fault, would be good if someone else could double check.

One other gotcha: I do hiccup-like DOM construction in the client which 
needs to extend a protocol to keywords, since keywords were strings before 
it required extending strings and then checking if we have a keyword.

See https://github.com/thheller/shadow/blob/master/src/shadow/dom.cljs#L182 
, easy fix but someone else might run into this.

Another thing which probably only affects me is that the constants_table.js 
contains ALL keywords in the whole project. I however split the generated 
js into multiple modules (via closure modules) so I can keep the initial js 
file size down and only load additional js when I need it. This resulted in 
a 215kb/90kb/45kb/166kb split, since the initial file now contains all 
constants the split is 264k/65k/27k/94k. Not a deal breaker, but a 121kb 
constants_table.js that cannot be split does not exactly help to keep 
javascript files small. Will have to look at other optimizations I guess, 
although overall its less.

 
Apart from that everything seems to work so far, although I don't have many 
tests for all my dom code. But a quick click through every page works. ;)

Regards,
/thomas


On Thursday, August 29, 2013 10:51:56 AM UTC+2, Thomas Heller wrote:

 Hey,

 this sounds interesting. I just tried it on my project but it seems to be 
 missing several keywords in the constants_table.js.

 Dumb example: the code tries to use cljs.core.constant$keyword$1064 , 
 which does not exist.

 Will try to investigate, just a heads up.

 /thomas

 On Wednesday, August 28, 2013 3:29:26 PM UTC+2, David Nolen wrote:

 ClojureScript has long represented symbols and keywords as JavaScript 
 Strings as a performance optimization around hash maps. However modern 
 JavaScript engines have shown that following Clojure JVM's design more 
 closely consistently delivers better performance.

 Also the representation of keywords as strings has had an unfortunate 
 consequence, we modify the String prototype to allow keywords to be called 
 as functions - this is a serious interop liability.

 Sean Grove has done some excellent work that I have further extended in a 
 branch. In this branch keywords are represented with a deftype. In order to 
 deliver performance, under advanced optimizations we emit keywords 
 constants to avoid allocation overheads.

 The breaking change is that keywords in ClojureScript cannot support the 
 identical? property guaranteed by Clojure on the JVM. There is a new 
 equality check called keyword-identical? that can be used to efficiently 
 check for keyword equality. defrecords and hash maps have been updated to 
 use this predicate.

 Please try your projects with this branch so we can address any further 
 issues because of this breaking change.

 http://github.com/clojure/clojurescript/compare/keywords

 Thanks,
 David



-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Michael Klishin
2013/8/29 Christian Sperandio christian.speran...@gmail.com

 Is there any perf improvement to use static typing in Clojure?


core.typed is not a compiler, it's a type annotation/checker implemented
as a library.

If you are familiar with Erlang, it is to Clojure what Dialyzer is to
Erlang.
-- 
MK

http://github.com/michaelklishin
http://twitter.com/michaelklishin

-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Christian Sperandio
Ok...

Another question, the checking is done only once (while compiling) ? Or,
it's done while the runtime?



2013/8/29 Michael Klishin michael.s.klis...@gmail.com

 2013/8/29 Christian Sperandio christian.speran...@gmail.com

 Is there any perf improvement to use static typing in Clojure?


 core.typed is not a compiler, it's a type annotation/checker implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to
 Erlang.
 --
 MK

 http://github.com/michaelklishin
 http://twitter.com/michaelklishin

 --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: stringify the name of an interned function

2013-08-29 Thread Tassilo Horn
Erebus Mons erebus.m...@gmail.com writes:

 I am reading in a csv-file, and then transform the attributes into a
 hash-map:

 __
 name,property1,property2,etc
 John,drunk,stinks,etc.
 etc.
 __

 {John {:property1 drunk, :property2 stinks} etc

Why a map of maps and not a map of sets, e.g.:

  {John #{drunk stings}}

Then your predicates just turn into membership checks instead of having
to search through the values of the properties map.  That is, drunk? is
just:

  (defn drunk? [person-prop-map person]
(contains? (person-prop-map person) drunk))

 then I create with a function functions like drunk?, so that I can
 check whether John is drunk

 (drunk? John)
 true

 I need to be able to get all properties in the map but
 drunk?. Therefore, I thought it would be handy to be able to filter
 out drunk? from the functions, but I figured I can only do that if I
 can treat the function-name like a name...

You need to filter it out in order not to define the same function
several times, or do I get you wrong?

If so, why not get the unique set of properties after building the map,
and then generate one predicate for any property that occured?

  ;; If the props are storted as sets like suggested above, then...
  (apply clojure.set/union (vals person-prop-map))
  ;; ...gives you the set of unique property names.

HTH,
Tassilo

-- 
-- 
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/groups/opt_out.


Re: eval/macros with functions with metadata

2013-08-29 Thread Jamie Brandon
I certainly like that better than the binding solution, especially if
hotspot can potentially inline the functions. It still tricky to do
that in a macro, especially when the code to be evaled depends on the
current lexical scope, but I can maybe work around that. Thanks.

On 29 August 2013 04:50, Jason Wolfe ja...@w01fe.com wrote:
 Sounds interesting, I'd love to hear more about the use case.

 We ran into this issue as well when implementing the new positional
 compilation for Graph.  We filed a ticket [1], and worked around it with a
 funny trick:

 Suppose you want to eval a complicated thing, and the crux of the issue is
 that this fails:

 (let [y 1 f (fn [x] (+ x y))] (eval `(~f 1)))

 A solution is to rework what you eval, so that it has a 'hole' for the
 function and you slot the function into this hole afterwards (which Hotspot
 seems to be able to optimize just fine):

 (let [y 1 f (fn [x] (+ x y))] ((eval `(fn [g#] (g# 1))) f))

 Happy to elaborate if you like.

 Cheers,
 Jason

 [1] http://dev.clojure.org/jira/browse/CLJ-1206


 On Wednesday, August 28, 2013 10:59:19 AM UTC-7, Jamie Brandon wrote:

 That sort of works for my use case.

 What I want to do is define a grammar...

 (def num-graph
   (graph
  num ~(or ~succ ~zero)
  succ (succ ^x ~num)
  zero zero))

 ... attach actions 

 (def num-out
   (output-in num-graph
  'zero (fnk [] 0)
  'succ (fnk [x] (inc x

 ... and compile the result ...

 strucjure.regression.tests (graph-view 'num num-out)
 (clojure.core/letfn
  [(num ...)
   (succ ...)
   (zero ...)]
  (clojure.core/fn
   [input__2288__auto__]
 (num input__2288__auto__)))

 This works fine as long as the fnks dont close over anything, but
 that's very limiting.

 If I eval that code and *then* wrap it in (binding ...) I can have
 closures but that now means that I can't do call-site compilation.
 I'll have to poke around a bit more...

 On 28 August 2013 18:32, Aaron Cohen aa...@assonance.org wrote:
  I'm not sure if you'll consider this hacky or not.
 
   (def ^:dynamic *fn-helper*)
 
  (defn eval-at-one [f] (binding [*fn-helper* f] (eval '(*fn-helper* 1
 
 
  On Wed, Aug 28, 2013 at 1:28 PM, Jamie Brandon
  ja...@scattered-thoughts.net wrote:
 
  You will also run into problems if your functions close over any data:
 
  user (let [f (fn [] 1)] (eval `(~f)))
  1
  nil
  user (let [x 1 f (fn [] x)] (eval `(~f)))
  IllegalArgumentException No matching ctor found for class
  user$eval38616$f__38617  clojure.lang.Reflector.invokeConstructor
  (Reflector.java:163)
 
  I'm struggling with this as well, I'm definitely interested in finding
  a non-hacky way to pass closures through eval without leaking memory.
 
  Perhaps something like:
 
  (let [x 1
 f (fn [] x)
 f-sym (gensym)]
(intern *ns* gensym (weak-ref f))
(with-meta (eval `(fn [] (do-stuff-with @~f))) {::strong-ref f}))
 
  So that way f will be freed up when the resulting fn is gced.
 
  On 28 August 2013 17:59, Ben Wolfson wol...@gmail.com wrote:
   On Wed, Aug 28, 2013 at 9:27 AM, Jamie Brandon
   ja...@scattered-thoughts.net wrote:
  
  
   If you aren't worried about leaking memory, a possible workaround is
   to intern the fn in some namespace and then put the symbol in the
   macro output.
  
  
   Hrm, I hope it doesn't come to that---as long as I'm creating the
   functions
   with their metadata, I can make things work, because I can add extra
   information to the with-meta call or do extra things when making the
   call.
   What I'd like, though, is for it to be possible to copy the metadata
   over to
   a new function by client code, just using the regular (with-meta (fn
   [blah]
   blah) (meta old-fn)) mechanism. But then the sneaky symbol, or
   whatever
   extra thing, in the metadata, that's used in the form to be eval-ed
   is
   pointing to the original function, not the one passed in. Maybe just
   providing a utility for fixing up the metadata is the right move,
   though
   it's kidn of dissatisfying.
  
  
   --
   Ben Wolfson
   Human kind has used its intelligence to vary the flavour of drinks,
   which
   may be sweet, aromatic, fermented or spirit-based. ... Family and
   social
   life also offer numerous other occasions to consume drinks for
   pleasure.
   [Larousse, Drink entry]
  
   --
   --
   You received this message because you are subscribed to the Google
   Groups Clojure group.
   To post to this group, send email to clo...@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+u...@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 

Re: stringify the name of an interned function

2013-08-29 Thread Erebus Mons
Tassilo Horn wrote:

 Erebus Mons erebus.m...@gmail.com writes:
 
 I am reading in a csv-file, and then transform the attributes into a
 hash-map:

 
__
 name,property1,property2,etc
 John,drunk,stinks,etc.
 etc.
 
__

 {John {:property1 drunk, :property2 stinks} etc
 
 Why a map of maps and not a map of sets, e.g.:
 
   {John #{drunk stings}}

Because I need to know what kind of property the properties are

 
 Then your predicates just turn into membership checks instead of having
 to search through the values of the properties map.  That is, drunk? is
 just:
 
   (defn drunk? [person-prop-map person]
 (contains? (person-prop-map person) drunk))
 
 then I create with a function functions like drunk?, so that I can
 check whether John is drunk

 (drunk? John)
 true

 I need to be able to get all properties in the map but
 drunk?. Therefore, I thought it would be handy to be able to filter
 out drunk? from the functions, but I figured I can only do that if I
 can treat the function-name like a name...
 
 You need to filter it out in order not to define the same function
 several times, or do I get you wrong?
 
 If so, why not get the unique set of properties after building the map,
 and then generate one predicate for any property that occured?
 
   ;; If the props are storted as sets like suggested above, then...
   (apply clojure.set/union (vals person-prop-map))
   ;; ...gives you the set of unique property names.

This is what I do already (but within a map of maps).

Once I have defined the predicates (which works), I partition elements that 
satisfy a sub-property (e.g., drunk?) and those that don't. Now that I 
explain that, I might just draw a random property, and then I would not need 
the function stringify...

But I was intrigued - I assumed that stringifying a function-name should be 
easy to do.

Thank you!




 
 HTH,
 Tassilo
 

-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
With Clojure the lines blur between compile time and runtime.

The clearest way to put it is that type checking is explicitly called at
the REPL or in a unit test. Usually this is done during development
iterations or testing time.

Re: performance improvements: Michael is correct. Interestingly Typed
Racket offers numeric optimisations, but leans heavily on Racket's
metaprogramming facilities to insert them automatically. There's potential
in Typed Clojure for *identification* of speed improvements, but not
actually inserting them. Typed Racket's optimisation coach comes to mind
in ways we can present this information (put a type hint at line 10, col
20 to get full speed...).

Thanks,
Ambrose


On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio 
christian.speran...@gmail.com wrote:

 Ok...

 Another question, the checking is done only once (while compiling) ? Or,
 it's done while the runtime?



 2013/8/29 Michael Klishin michael.s.klis...@gmail.com

 2013/8/29 Christian Sperandio christian.speran...@gmail.com

 Is there any perf improvement to use static typing in Clojure?


 core.typed is not a compiler, it's a type annotation/checker implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to
 Erlang.
 --
 MK

 http://github.com/michaelklishin
 http://twitter.com/michaelklishin

 --
 --
 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/groups/opt_out.


  --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Daniel
If you can do that, why not return the literal representation of the type 
hinted function?

For the repl you could provide a function that interns the type-hinted 
function into the namespace by evaluating the literal representation first.

From there it's easy to provide something like slamhound.  Once you're 
certain types have been provided to your namespace correctly at the repl, 
run 'lein type namespace' to type hint everything in the namespace by 
literally restructuring the file.

Things type hinted with expressions would be tricky, but this could work 
(or you could just leave it alone):

myfn (original)
myfn-int
myfn-long
myfn-float
etc



On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant 
wrote:

 With Clojure the lines blur between compile time and runtime.

 The clearest way to put it is that type checking is explicitly called at 
 the REPL or in a unit test. Usually this is done during development 
 iterations or testing time.

 Re: performance improvements: Michael is correct. Interestingly Typed 
 Racket offers numeric optimisations, but leans heavily on Racket's 
 metaprogramming facilities to insert them automatically. There's potential 
 in Typed Clojure for *identification* of speed improvements, but not 
 actually inserting them. Typed Racket's optimisation coach comes to mind 
 in ways we can present this information (put a type hint at line 10, col 
 20 to get full speed...).

 Thanks,
 Ambrose


 On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio 
 christian...@gmail.com javascript: wrote:

 Ok...

 Another question, the checking is done only once (while compiling) ? Or, 
 it's done while the runtime?



 2013/8/29 Michael Klishin michael@gmail.com javascript:

 2013/8/29 Christian Sperandio christian...@gmail.com javascript:

 Is there any perf improvement to use static typing in Clojure?


 core.typed is not a compiler, it's a type annotation/checker implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to 
 Erlang.
 -- 
 MK

 http://github.com/michaelklishin
 http://twitter.com/michaelklishin
  
 -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.comjavascript:
 Note that posts from new members are moderated - please be patient with 
 your first post.
 To unsubscribe from this group, send email to
 clojure+u...@googlegroups.com javascript:
 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+u...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/groups/opt_out.


  -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.comjavascript:
 Note that posts from new members are moderated - please be patient with 
 your first post.
 To unsubscribe from this group, send email to
 clojure+u...@googlegroups.com javascript:
 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+u...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/groups/opt_out.




-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
I don't think it would be possible to reconstruct the original forms in
general, you would need to reverse macroexpansion to provide a form that
has at least a passing familiarity with the original form. Otherwise you
would get fully macroexpanded forms.

That's a lot of work!


On Thu, Aug 29, 2013 at 9:56 PM, Daniel doubleagen...@gmail.com wrote:

 If you can do that, why not return the literal representation of the type
 hinted function?

 For the repl you could provide a function that interns the type-hinted
 function into the namespace by evaluating the literal representation first.

 From there it's easy to provide something like slamhound.  Once you're
 certain types have been provided to your namespace correctly at the repl,
 run 'lein type namespace' to type hint everything in the namespace by
 literally restructuring the file.

 Things type hinted with expressions would be tricky, but this could work
 (or you could just leave it alone):

 myfn (original)
 myfn-int
 myfn-long
 myfn-float
 etc



 On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant
 wrote:

 With Clojure the lines blur between compile time and runtime.

 The clearest way to put it is that type checking is explicitly called at
 the REPL or in a unit test. Usually this is done during development
 iterations or testing time.

 Re: performance improvements: Michael is correct. Interestingly Typed
 Racket offers numeric optimisations, but leans heavily on Racket's
 metaprogramming facilities to insert them automatically. There's potential
 in Typed Clojure for *identification* of speed improvements, but not
 actually inserting them. Typed Racket's optimisation coach comes to mind
 in ways we can present this information (put a type hint at line 10, col
 20 to get full speed...).

 Thanks,
 Ambrose


 On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio 
 christian...@gmail.com** wrote:

 Ok...

 Another question, the checking is done only once (while compiling) ? Or,
 it's done while the runtime?



 2013/8/29 Michael Klishin michael@gmail.com

 2013/8/29 Christian Sperandio christian...@gmail.com**

 Is there any perf improvement to use static typing in Clojure?


  core.typed is not a compiler, it's a type annotation/checker
 implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to
 Erlang.
 --
 MK

 http://github.com/**michaelklishin http://github.com/michaelklishin
 http://twitter.com/**michaelklishin http://twitter.com/michaelklishin

 --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out
 .


  --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out
 .


  --
 --
 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/groups/opt_out.


-- 
-- 
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 

Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Daniel
Those forms won't be in the namespace you're evaluating?

Yeah, it's probably a lot of work, but it sounds neat.  :-)


On Thursday, August 29, 2013 9:07:26 AM UTC-5, Ambrose Bonnaire-Sergeant 
wrote:

 I don't think it would be possible to reconstruct the original forms in 
 general, you would need to reverse macroexpansion to provide a form that 
 has at least a passing familiarity with the original form. Otherwise you 
 would get fully macroexpanded forms.

 That's a lot of work!


 On Thu, Aug 29, 2013 at 9:56 PM, Daniel double...@gmail.com javascript:
  wrote:

 If you can do that, why not return the literal representation of the type 
 hinted function?

 For the repl you could provide a function that interns the type-hinted 
 function into the namespace by evaluating the literal representation first.

 From there it's easy to provide something like slamhound.  Once you're 
 certain types have been provided to your namespace correctly at the repl, 
 run 'lein type namespace' to type hint everything in the namespace by 
 literally restructuring the file.

 Things type hinted with expressions would be tricky, but this could work 
 (or you could just leave it alone):

 myfn (original)
 myfn-int
 myfn-long
 myfn-float
 etc



 On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant 
 wrote:

 With Clojure the lines blur between compile time and runtime.

 The clearest way to put it is that type checking is explicitly called at 
 the REPL or in a unit test. Usually this is done during development 
 iterations or testing time.

 Re: performance improvements: Michael is correct. Interestingly Typed 
 Racket offers numeric optimisations, but leans heavily on Racket's 
 metaprogramming facilities to insert them automatically. There's potential 
 in Typed Clojure for *identification* of speed improvements, but not 
 actually inserting them. Typed Racket's optimisation coach comes to mind 
 in ways we can present this information (put a type hint at line 10, col 
 20 to get full speed...).

 Thanks,
 Ambrose


 On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio 
 christian...@gmail.com** wrote:

 Ok...

 Another question, the checking is done only once (while compiling) ? 
 Or, it's done while the runtime?



 2013/8/29 Michael Klishin michael@gmail.com

 2013/8/29 Christian Sperandio christian...@gmail.com**

 Is there any perf improvement to use static typing in Clojure?


  core.typed is not a compiler, it's a type annotation/checker 
 implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to 
 Erlang.
 -- 
 MK

 http://github.com/**michaelklishin http://github.com/michaelklishin
 http://twitter.com/**michaelklishinhttp://twitter.com/michaelklishin
  
 -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out
 .


  -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**groups/opt_outhttps://groups.google.com/groups/opt_out
 .


  -- 
 -- 
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.comjavascript:
 Note that posts from new members are moderated - please be patient with 
 your first post.
 To unsubscribe from this group, send email to
 clojure+u...@googlegroups.com javascript:
 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 

Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
Well I'm sure people wouldn't be happy if their call to (+ a b c) was
suddenly turned into (clojure.lang.Numbers/add (clojure.lang.Numbers/add a
b) c)

:)


On Thu, Aug 29, 2013 at 10:57 PM, Daniel doubleagen...@gmail.com wrote:

 Those forms won't be in the namespace you're evaluating?

 Yeah, it's probably a lot of work, but it sounds neat.  :-)



 On Thursday, August 29, 2013 9:07:26 AM UTC-5, Ambrose Bonnaire-Sergeant
 wrote:

 I don't think it would be possible to reconstruct the original forms in
 general, you would need to reverse macroexpansion to provide a form that
 has at least a passing familiarity with the original form. Otherwise you
 would get fully macroexpanded forms.

 That's a lot of work!


 On Thu, Aug 29, 2013 at 9:56 PM, Daniel double...@gmail.com wrote:

 If you can do that, why not return the literal representation of the
 type hinted function?

 For the repl you could provide a function that interns the type-hinted
 function into the namespace by evaluating the literal representation first.

 From there it's easy to provide something like slamhound.  Once you're
 certain types have been provided to your namespace correctly at the repl,
 run 'lein type namespace' to type hint everything in the namespace by
 literally restructuring the file.

 Things type hinted with expressions would be tricky, but this could work
 (or you could just leave it alone):

 myfn (original)
 myfn-int
 myfn-long
 myfn-float
 etc



 On Thursday, August 29, 2013 6:40:16 AM UTC-5, Ambrose Bonnaire-Sergeant
 wrote:

 With Clojure the lines blur between compile time and runtime.

 The clearest way to put it is that type checking is explicitly called
 at the REPL or in a unit test. Usually this is done during development
 iterations or testing time.

 Re: performance improvements: Michael is correct. Interestingly Typed
 Racket offers numeric optimisations, but leans heavily on Racket's
 metaprogramming facilities to insert them automatically. There's potential
 in Typed Clojure for *identification* of speed improvements, but not
 actually inserting them. Typed Racket's optimisation coach comes to mind
 in ways we can present this information (put a type hint at line 10, col
 20 to get full speed...).

 Thanks,
 Ambrose


 On Thu, Aug 29, 2013 at 6:03 PM, Christian Sperandio 
 christian...@gmail.com** wrote:

 Ok...

 Another question, the checking is done only once (while compiling) ?
 Or, it's done while the runtime?



 2013/8/29 Michael Klishin michael@gmail.com

 2013/8/29 Christian Sperandio christian...@gmail.com**

 Is there any perf improvement to use static typing in Clojure?


  core.typed is not a compiler, it's a type annotation/checker
 implemented
 as a library.

 If you are familiar with Erlang, it is to Clojure what Dialyzer is to
 Erlang.
 --
 MK

 http://github.com/**michaelklish**inhttp://github.com/michaelklishin
 http://twitter.com/**michaelklis**hinhttp://twitter.com/michaelklishin

 --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group**/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**grou**ps/opt_outhttps://groups.google.com/groups/opt_out
 .


  --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com

 For more options, visit this group at
 http://groups.google.com/**group**/clojure?hl=enhttp://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+u...@**googlegroups.com.

 For more options, visit 
 https://groups.google.com/**grou**ps/opt_outhttps://groups.google.com/groups/opt_out
 .


  --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@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+u...@**googlegroups.com
 For more options, visit this group at
 

Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Maik Schünemann
On Thu, Aug 29, 2013 at 5:01 PM, Ambrose Bonnaire-Sergeant
abonnaireserge...@gmail.com wrote:
 Well I'm sure people wouldn't be happy if their call to (+ a b c) was
 suddenly turned into (clojure.lang.Numbers/add (clojure.lang.Numbers/add a
 b) c)

 :)

the expresso [1] optimizer can be used for those optimizations ;)


[1] https://github.com/clojure-numerics/expresso

-- 
-- 
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/groups/opt_out.


Re: Preferred way of binding jdbc connections

2013-08-29 Thread Lyn Headley
Hi Shantanu, that was perfect, thanks. I note that this article only 
deprecates dynamic scoping in libraries, so my conclusion is that what I am 
considering is not an antipattern. Indeed, Stuart Sierra says the same:

Applications can manage their own resources, and only the application 
programmer knows what the extent of those resources should be. Maybe you 
can pass it around as a value. Maybe you want to use dynamic binding after 
all. Maybe you want to stash it in a global state Var. That’s for you to 
decide.


On Wednesday, August 28, 2013 10:55:10 PM UTC-7, Shantanu Kumar wrote:

 Hi Lyn,

 Dynamic vars for resource sharing is not a favored approach due to 
 performance and several other reasons. This blog post explains it well:
 http://stuartsierra.com/2013/03/29/perils-of-dynamic-scope

 Shantanu

 On Thursday, 29 August 2013 07:21:46 UTC+5:30, Lyn Headley wrote:

 Hello, if I want to run some sql code in a transaction, I can do
 this (where clojure.java.jdbc is referred to as j):

 (j/db-transaction
  [conn dbspec]
   use conn here

 But if I have a function I want to call from this transaction, say to
 do a query, then I need to pass in the connection to that function:

 (defn query [conn]
   do query on conn...)

 (j/db-transaction
  [db dbspec]
   (query conn))

 I am trying to decide whether I like passing in the connection to
 query, or whether I would rather use a binding like so:

 (def ^:dynamic *conn*)

 (defn query []
   do query on *conn*...)

 (j/db-transaction
  [conn dbspec]
   (binding [*conn* conn]
(query)))

 Looking at the jdbc docs, I notice that this style used to be directly
 supported but is now deprecated. Does that mean it's a bad idea to
 re-implement on top of the supported API, as my example would? Can
 someone explain the tradeoffs involved?

 Thanks,
 Lyn Headley



-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Alex Baranosky
Imo, there's nothing easy about writing something like Slamhound. Even
after many iterations it can't handle macros, because ultimately they're
impossible, without some kind of hints specifically added for Slamhound (or
for Typed Clojure) :)

-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Daniel
Yeah, it's pretty much impossible unless you limit yourself to a manageable 
subset of Clojure.  The easy part I was referring to was the Leiningen 
plugin, not the whole kit n' caboodle.

On Thursday, August 29, 2013 11:02:17 AM UTC-5, Alex Baranosky wrote:

 Imo, there's nothing easy about writing something like Slamhound. Even 
 after many iterations it can't handle macros, because ultimately they're 
 impossible, without some kind of hints specifically added for Slamhound (or 
 for Typed Clojure) :)


-- 
-- 
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/groups/opt_out.


Re: [ANN] core.typed 0.2.0 - Production Ready

2013-08-29 Thread Ambrose Bonnaire-Sergeant
Just pushed 0.2.1 based on feedback from the video on HN.

https://github.com/clojure/core.typed/blob/master/CHANGELOG.md

Thanks,
Ambrose


On Thu, Aug 29, 2013 at 6:28 AM, Ambrose Bonnaire-Sergeant 
abonnaireserge...@gmail.com wrote:

 Hi,

 After 10 months and 26 0.1.x releases of transitioning core.typed from an
 ambitious student project, I am finally comfortable recommending core.typed
 for production use.

 Production Ready

 My interpretation of production ready in this context is:
 - core.typed can *find bugs* in real code
 - core.typed will *not slow down* your existing code by loading
   a large library at production. (core.typed does introduce an extra
 identity-like
   function call at type annotations, I assume this is a candidate for
 optimisation via
   HotSpot)
 - A basic *tutorial*, API docs and example project exist
 - core.typed is *currently used in production* with success (at CircleCI
 for several months)
 - The core type checking API is mostly *stable*, with only very
   minor removals/breaking changes in the last few months.

 There are several outstanding issues, but I am satisfied that core.typed
 can bring real utility to real programs *today* and with *no
 production-time drawbacks*, thus this release.

 How to get started

 Leiningen dep:

 [org.clojure/core.typed 0.2.0]
 ...; for very recent releases:repositories {sonatype-oss-public 
 https://oss.sonatype.org/content/groups/public/}

 If you like following tutorials try the user/types guide. If you just want
 to get your hands on some typed code, see the Example project.

 core.typed User Guidehttps://github.com/clojure/core.typed/wiki/User-Guide
 core.typed Types Guide https://github.com/clojure/core.typed/wiki/Types
 Example project https://github.com/frenchy64/core.typed-example
 API Reference http://clojure.github.io/core.typed/

 core.typed Github Home https://github.com/clojure/core.typed
 core.typed Wiki https://github.com/clojure/core.typed/wiki

 Please report bugs, ask questions or discuss things on the mailing 
 listhttps://groups.google.com/forum/?fromgroups#!forum/clojure-core-typed
 .

 (FWIW I'm ambrosebs on #clojure.)

 Thanks,
 Ambrose


-- 
-- 
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/groups/opt_out.


Re: Emacs Clojure mode : No syntax highlighting for #_

2013-08-29 Thread Joel Holdbrooks
Definitely. I would agree a choice would be nice or even another font-lock
group. There have been times where I forgot about a #_ somewhere in my code
and spent a moment in confusion. Highlighting definitely would have been
valuable. It would be cool if code following #_ were semi-transparent or
something nifty like that. I think that's possible in the gui version of
Emacs.


On Thu, Aug 29, 2013 at 1:58 AM, Laurent PETIT laurent.pe...@gmail.comwrote:

 2013/8/29 Joel Holdbrooks cjholdbro...@gmail.com:
  I would imagine it is intended since #_ is a reader macro. #_ is not
  intended for commenting. Rather, it instructs the Clojure Reader to
 ignore
  entirely the subsequent form. This is much different from the comment
 macro
  (which simply takes any number of arguments and returns nil) or the ;
  comment syntax.
 
  It might be a bit involved to have #_ and the subsequent form appear
  commented through clojure-mode's syntax highlighting. However, it would
 also
  incorrectly express the semantics of #_ which, arguably, is counter to
 the
  goal of syntax highlighting.

 Yet it is certainly better, given a dual choice, to present it as
 commented code.
 Counterclockwise does this since more than a year, and so far, nobody
 has complained.

 Cheers,

 --
 Laurent

 
 
  On Wednesday, August 28, 2013 3:09:11 PM UTC-7, JvJ wrote:
 
  Although semicolons cause the text color to change in order to look
  commented-out, the #_ reader macro doesn't cause any such change.  Is
 this
  intended, or is it a bug?
 
  --
  --
  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/groups/opt_out.

 --
 --
 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 a topic in the
 Google Groups Clojure group.
 To unsubscribe from this topic, visit
 https://groups.google.com/d/topic/clojure/b5ETVbGG8G8/unsubscribe.
 To unsubscribe from this group and all its topics, send an email to
 clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.




-- 

Joel

-- 
-- 
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/groups/opt_out.


Re: Rxjava + Clojure Users

2013-08-29 Thread Dave Ray
Hi,

Thanks for your feedback on your RxJava usage. I'm glad to hear that
neither of you feel too strongly about direct IFn support because...

In an effort to simplify the implementation and improve the RxJava
experience for all JVM-based languages, we'll be dropping direct IFn
support (and Groovy closure, Ruby proc, etc) in the next release. Instead,
for each supported language (Scala, Groovy, and Clojure at the moment),
we'll be providing a set of utility functions/macros/implicits to assist
with interop. In the Clojure case, this will consist of a namespace,
probably rx.lang.clojure, with the following helpers:

  (defn fn* [f])   Takes a function f, and wraps it in an object that
implements all the various Rx FuncX interfaces

  (defmacro fn [ body])Makes an anonymous Rx FuncX object with body
(multi-arities and everything from clojure.core/fn are supported)


So usage would basically be as I noted in my message above:

(require '[rx.lang.clojure :as rx])

(- my-observable
(.map (rx/fn [v] (Long/parseLong v)))
(.reduce (rx/fn* +)))

A similar function/macro pair will be provided for the Rx ActionX
interfaces for which there's currently no direct support.

This will provide us with base Clojure interop support which is slightly
more tedious to use than before. In the longer term, we'll be releasing a
more expansive, idiomatic set of Clojure bindings. We're not quite there on
that one though.

If anyone knows any reason this should not happen, speak now or forever
hold your peace.

Cheers,

Dave





On Wed, Aug 28, 2013 at 2:32 AM, Joseph Wilk j...@josephwilk.net wrote:

 On Tuesday, August 27, 2013 6:03:29 PM UTC+2, daveray wrote:

 Hi.

 I'm writing to see if there's anyone out there using RxJava [1] from
 Clojure and to get their opinion on it's current, built-in support for
 non-Java languages.

 Just to recap, the current implementation knows about clojure.lang.IFn
 allowing functions to be passed directly to RxJava methods:

   (- my-observable
 (.map (fn [v] (Long/parseLong v)))
 (.reduce +))

 RxJava will automatically convert these functions to the underlying
 rx.util.functions.FuncX interface and re-dispatch to the appropriate method.

 So, the question is: as a user of RxJava, how valuable is this feature?
 Do you just end up wrapping things anyway,



 We are using RxJava and Hystrix with Clojure @ SoundCloud. All our
 Observables come from Hystrix cmds.

 I've have not added any wrappers around the RxJava stuff yet, not really
 felt the need.
 I've found it convenient to pass in fns but I would also be happy with
 what you suggest below (rx/fn).
 I suspect in those cases I might start wrapping rx/fn, so it continues to
 look like the current behaviour (recognising Clojure fns).

 Thanks,
 --
 Joseph Wilk
 http://blog.josephwilk.net
 @josephwilk



 so you could easily perform the same transformation in your wrapper?
 Would helper fns/macros be a sufficient alternative:

   (- my-observable
 (.map (rx/fn [v] (Long/parseLong v)))
 (.reduce (rx/fn* +)))

 There will be some changes in this area in the near future and we'd like
 to get a feel for if/how people are using RxJava from Clojure.




 Thanks!

 Dave

 [1] https://github.com/Netflix/**RxJavahttps://github.com/Netflix/RxJava

  --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: Rxjava + Clojure Users

2013-08-29 Thread Cedric Greevey
On Thu, Aug 29, 2013 at 2:00 PM, Dave Ray dave...@gmail.com wrote:

  In the Clojure case, this will consist of a namespace, probably
 rx.lang.clojure, with the following helpers:

   (defn fn* [f])   Takes a function f, and wraps it in an object that
 implements all the various Rx FuncX interfaces


Erm, there's already a Clojure special form with the name fn*, so you'll
need to change this one to something else I expect.

-- 
-- 
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/groups/opt_out.


Re: Rxjava + Clojure Users

2013-08-29 Thread Dave Ray
Seems to work fine in my tests as long as I fully qualify it in the fn
macro that uses it.  What am I missing?

If someone :uses or :refer-alls the ns, I'm assuming bad thing would
happen, but I'm not worried about that.

Dave


On Thu, Aug 29, 2013 at 12:15 PM, Cedric Greevey cgree...@gmail.com wrote:

 On Thu, Aug 29, 2013 at 2:00 PM, Dave Ray dave...@gmail.com wrote:

  In the Clojure case, this will consist of a namespace, probably
 rx.lang.clojure, with the following helpers:

   (defn fn* [f])   Takes a function f, and wraps it in an object that
 implements all the various Rx FuncX interfaces


 Erm, there's already a Clojure special form with the name fn*, so you'll
 need to change this one to something else I expect.

  --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


Re: too circular?

2013-08-29 Thread JvJ
I wonder if the somewhat counterintuitive concept of a named anonymous 
function eludes some people, or isn't properly conveyed in tutorials.

On Tuesday, 27 August 2013 00:36:07 UTC-7, HamsterofDeath wrote:

 thx


 2013/8/26 Marshall Bockrath-Vandegrift lla...@gmail.com javascript:

 Dennis Haupt d.ha...@gmail.com javascript: writes:

  (defn fib-n [n]
  (let [fib (fn [a b] (cons a (lazy-seq (fib b (+ b a)]
  (take n (fib 1 1
 
  can't i do a recursion here? how can i achieve this without doing an
  outer defn?

 You just need to give the anonymous function a name it can use to refer
 to itself for (non-tail) recursion:

 (defn fib-n [n]
   (let [fib (fn fib [a b] (cons a (lazy-seq (fib b (+ b a)]
 (take n (fib 1 1

 -Marshall

 --
 --
 You received this message because you are subscribed to the Google
 Groups Clojure group.
 To post to this group, send email to clo...@googlegroups.comjavascript:
 Note that posts from new members are moderated - please be patient with 
 your first post.
 To unsubscribe from this group, send email to
 clojure+u...@googlegroups.com javascript:
 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+u...@googlegroups.com javascript:.
 For more options, visit https://groups.google.com/groups/opt_out.




-- 
-- 
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/groups/opt_out.


Re: too circular?

2013-08-29 Thread Jim - FooBar();

On 29/08/13 20:23, JvJ wrote:
I wonder if the somewhat counterintuitive concept of a named 
anonymous function eludes some people, or isn't properly conveyed in 
tutorials.


I only consider #(...) as an anonymous function. The longer form (fn [] 
(...)) has the potential of being perfectly named, it's just you who 
doesn't give it a name usually...


Jim

--
--
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/groups/opt_out.


Re: [ANN] expresso 0.1.0 released

2013-08-29 Thread David Nolen
Very cool stuff :) How much work would it take for this to work with
ClojureScript?

David


On Mon, Aug 26, 2013 at 4:47 AM, Maik Schünemann
maikschuenem...@gmail.comwrote:

 Hi,
 I released a first version of my gsoc project expresso [1].
 This is an important Milestone in my gsoc project.
 What is there:
 an expressive and powerful rule based translator, on top of which many
 transformations can be based.
 functions to simplify (currently without ratio test), differentiate,
 rearrange, solve expressions.
 functions to optimize an expression (includes
 common-sub-expression-elimination, constant-folding, replacement
 with special operators, matrix-chain-optimization, ...)

 The solver can solve multiple simultaneous equations.
 currently it solves equations, which are polynomials up to degree 2, in
 which the number of occurrences of the unknown
 can be reduced to one by simplifying the expression or which consists of
 factors in above form. variables as parameters
 are supported everywhere.

 The last weeks of gsoc I will be making the above transformations more
 stable, eliminate as many bugs as I can find
 (feel free to report some you notice), and extending the range of
 expressions which can be transformed by these transformations,
 as well as thoroughly documenting the work that has been done.
 See the github repository and README.md for details [1]

 [1] https://github.com/clojure-numerics/expresso

 --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.


[ANN] ac-nexus (Emacs Autocomplete Source for Sonatype Nexus Maven repository servers)

2013-08-29 Thread Jürgen Hötzel
Hi,

I did some work on emacs-nexus (A Nexus Client for Emacs: released two
years ago):

I added  ac-nexus.el: An auto-complete source using the Nexus Rest API.
Using this source, you can complete Artifact/Version-IDs in Leiningen
project files.

See the github repository and README.md for details [1]

[1] https://github.com/juergenhoetzel/emacs-nexus#ac-nexus

Jürgen

-- 
-- 
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/groups/opt_out.


Re: too circular?

2013-08-29 Thread Bruno Kim Medeiros Cesar
This exact use case is covered by letfn, which creates a named fn 
accessible to all function definitions and the body. That even allows 
mutual recursive definitions without declare. Your example would be

 (defn fib-n [n]
   (letfn [(fib [a b]
(cons a (lazy-seq (fib b (+ b a)]
 (take n (fib 1 1

Note that its grammar is 

(letfn [fnspecs*] exprs*)
fnspec == (fname [params*] exprs)

That is, don't forget to surround a function definition with parentheses as 
above, and not as 

(letfn [fib [a b] ...])
CompilerException java.lang.IllegalArgumentException: Don't know how to 
create ISeq from: clojure.lang.Symbol

The reason is that letfn accepts multiple definitions, and as each function 
can have multiple expressions as in a do form, you can't just partition the 
vector as you do in let. 

On Thursday, August 29, 2013 4:32:00 PM UTC-3, Jim foo.bar wrote:

 On 29/08/13 20:23, JvJ wrote: 
  I wonder if the somewhat counterintuitive concept of a named 
  anonymous function eludes some people, or isn't properly conveyed in 
  tutorials. 

 I only consider #(...) as an anonymous function. The longer form (fn [] 
 (...)) has the potential of being perfectly named, it's just you who 
 doesn't give it a name usually... 

 Jim 


-- 
-- 
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/groups/opt_out.


Re: too circular?

2013-08-29 Thread Dennis Haupt
thx again


2013/8/30 Bruno Kim Medeiros Cesar brunokim...@gmail.com

 This exact use case is covered by letfn, which creates a named fn
 accessible to all function definitions and the body. That even allows
 mutual recursive definitions without declare. Your example would be

  (defn fib-n [n]
(letfn [(fib [a b]

 (cons a (lazy-seq (fib b (+ b a)]
  (take n (fib 1 1

 Note that its grammar is

 (letfn [fnspecs*] exprs*)
 fnspec == (fname [params*] exprs)

 That is, don't forget to surround a function definition with parentheses
 as above, and not as

 (letfn [fib [a b] ...])
 CompilerException java.lang.IllegalArgumentException: Don't know how to
 create ISeq from: clojure.lang.Symbol

 The reason is that letfn accepts multiple definitions, and as each
 function can have multiple expressions as in a do form, you can't just
 partition the vector as you do in let.

 On Thursday, August 29, 2013 4:32:00 PM UTC-3, Jim foo.bar wrote:

 On 29/08/13 20:23, JvJ wrote:
  I wonder if the somewhat counterintuitive concept of a named
  anonymous function eludes some people, or isn't properly conveyed in
  tutorials.

 I only consider #(...) as an anonymous function. The longer form (fn []
 (...)) has the potential of being perfectly named, it's just you who
 doesn't give it a name usually...

 Jim

  --
 --
 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/groups/opt_out.


-- 
-- 
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/groups/opt_out.