Re: Possible ClojureScript compiler issue...

2016-10-19 Thread John Szakmeister
Fantastic!  Thank you!

-John

On Tue, Oct 18, 2016 at 11:49 PM, David Nolen  wrote:
> This issue is fixed in master now thanks to Thomas Heller. The performance
> hit is negligible.
>
> Thank you for the report.
>
> David
>
> On Tue, Oct 18, 2016 at 3:45 PM, John Szakmeister 
> wrote:
>>
>> On Tue, Oct 18, 2016 at 5:59 AM, Thomas Heller 
>> wrote:
>> > Don't think there is a best practice for your case in particular.
>>
>> Okay.  Earlier in the thread you said "while this issue can be very
>> confusing you will hardly ever run into it when following best
>> practices."  So it seemed to me that perhaps I missing something
>> important, or didn't know about a best practice that would have saved
>> me.  I think the issue here is a bit different though.  There's
>> nothing that would have saved short of knowing that js->clj has this
>> issue lurking in the background. :-)
>>
>> > The issue is that js->cli is built on top of protocols to allow
>> > converting
>> > custom JS types to CLJS types. Which makes it extensible for the price
>> > of
>> > checking protocols. In your case you are converting JSON which cannot
>> > have
>> > custom types, so a custom converter only checking for the very few
>> > possible
>> > JSON types would "fix" your problem (and would probably be a lot
>> > faster).
>>
>> Yep.  OTOH, I don't really need the performance and js->clj would have
>> been just as nice to use, if it worked correctly. :-)
>>
>> > The case can be made that cljs-ajax should not be using js->clj when
>> > converting JSON, maybe even add a json->clj to cljs.core.
>>
>> I think having json->clj would be a nice option.  Though for
>> cljs-ajax, we probably need to roll our own since the api wouldn't be
>> available in older ClojureScript versions.
>>
>> > The sentinel is the "safest" solution but impacts the performance of
>> > everyone, so we should be doing more benchmarks on more platforms before
>> > deciding anything. Benchmarks and Votes on the Jira Issue would help to
>> > push
>> > this along.
>>
>> True, but I think the correctness argument here is pretty valuable.
>> Again, much of what I see out there is the js->clj is the way to
>> convert data, and having this problem lurking seems like setting folks
>> up for failure.  I'm pretty persistent when it comes to
>> troubleshooting this stuff, but I could see others being awfully
>> frustrated by the result.  So I hope that some version of the sentinel
>> patch makes it in. :-)
>>
>> -John
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


ANN: IN/Clojure 2016 - India's first Clojure conference

2016-10-19 Thread Baishampayan Ghose
Hello Clojurists,

I am delighted to announce IN/Clojure, India's first and only Clojure
conference.

It will be a one day, single track conference with interesting Clojure
talks as well as ample opportunity to interact with fellow Clojurians
from India and abroad.

The conference is aimed at Clojure enthusiasts from all experience levels.

The conference will be held on Nov 26, 2016 in Pune.

More info on the website: http://inclojure.org/
Please follow us on Twitter: @in_clojure

Thanks,
BG
-- 
Baishampayan Ghose
b.ghose at gmail.com

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


protocols and namespaces confusion (with an example from core.matrix)

2016-10-19 Thread Paul Gowder
Hi folks, 

I have a kinda basic question (I think?) that I should really know the 
answer to after writing Clojure for like 8 months, but don't.  It's about 
requiring namespaces with protocol definitions in them but not the actual 
implementations of those protocols, and how it works.  

tl/dr: if a protocol is defined in namespace a and implemented (extended to 
the type at issue) in namespace b, can you call functions from it in 
namespace c where namespace c only requires namespace a, not namespace b?

Backstory: I was poking around core.matrix recently in pursuit of 
restarting work on a months ago issue I promised to work on, and it looks 
like at least one namespace calls a function it shouldn't be able to call.

So: clojure.core.matrix.impl.pprint requires only one namespace within 
core.matrix, clojure.core.matrix.protocols. (I'm going to use ... hereafter 
to stand for clojure.core.matrix.) ...protocols defines a protocol 
PSliceSeq2, which gives the name, docstring, etc. for a function called 
get-slice-seq. PSliceSeq2 is actually implemented for the generic object 
case in ...impl.defaults and for ISeq in ...impl.sequence. 

But ...impl.pprint calls ...protocols/get-slice-seq. And it seems to work. 
 Even though I can't find either ...impl.defaults or ...impl.sequence 
anywhere in the dependency tree for ...impl.pprint.

This is a puzzle to me.  I mean, the ...impl.pprint namespace will 
typically be required from some other namespace, and presumably that 
higher-level namespace will require everything that one needs. But still, I 
hadn't thought that one would be able to call get-slice-seq in a function 
in ...impl.pprint without requiring a namespace that actually defines the 
function, as opposed to just defining the protocol.

So can someone explain how this magic works?  Is the compiler just way 
smarter than I thought it was, and capable of figuring this stuff out on 
its own?

Thanks!

-Paul

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [ANN] Nightlight, an embedded editor for Clojure

2016-10-19 Thread marc
Although, I am using boot and not lein, I added this dependency to my 
project: [org.flatland/useful "0.11.5"]. After this, nightlight works as it 
should.




On Sunday, October 9, 2016 at 2:33:31 PM UTC-4, Zach Oakes wrote:
>
> I'll look into it. It looks like it's probably a dependency conflict. I'm 
> using clojail to prevent the instaREPL from taking too long to run. It's 
> using pretty old dependencies so I'll probably just fork and update it so 
> this issue goes away.
>
> On Sunday, October 9, 2016 at 2:21:54 PM UTC-4, Hari Krishnan wrote:
>>
>> Thanks for creating an editor like this.  I may have a good use case..

>>>
>> I followed the  updated instructions, and I am getting this error.  I am 
>> on [org.clojure/clojure "1.8.0"]
>>
>> [2016-10-09 11:16:00,994][DEBUG][org.jboss.logging] Logging Provider: 
>> org.jboss.logging.Log4jLoggerProvider
>> Exception in thread "main" java.lang.IllegalAccessError: flatten-all does 
>> not exist, compiling:(clojail/core.clj:1:1)
>> at clojure.lang.Compiler.load(Compiler.java:7391)
>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>> at clojure.lang.RT.load(RT.java:453)
>> at clojure.lang.RT.load(RT.java:419)
>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>> at clojure.core$load.invokeStatic(core.clj:5892)
>> at clojure.core$load.doInvoke(core.clj:5876)
>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>> at clojure.core$load_one.invoke(core.clj:5692)
>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>> at clojure.core$load_lib.invokeStatic(core.clj:5736)
>> at clojure.core$load_lib.doInvoke(core.clj:5717)
>> at clojure.lang.RestFn.applyTo(RestFn.java:142)
>> at clojure.core$apply.invokeStatic(core.clj:648)
>> at clojure.core$load_libs.invokeStatic(core.clj:5774)
>> at clojure.core$load_libs.doInvoke(core.clj:5758)
>> at clojure.lang.RestFn.applyTo(RestFn.java:137)
>> at clojure.core$apply.invokeStatic(core.clj:648)
>> at clojure.core$require.invokeStatic(core.clj:5796)
>> at clojure.core$require.doInvoke(core.clj:5796)
>> at clojure.lang.RestFn.invoke(RestFn.java:421)
>> at 
>> eval_soup.core$eval42846$loading__5569__auto42847.invoke(core.clj:1)
>> at eval_soup.core$eval42846.invokeStatic(core.clj:1)
>> at eval_soup.core$eval42846.invoke(core.clj:1)
>> at clojure.lang.Compiler.eval(Compiler.java:6927)
>> at clojure.lang.Compiler.eval(Compiler.java:6916)
>> at clojure.lang.Compiler.load(Compiler.java:7379)
>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>> at clojure.lang.RT.load(RT.java:453)
>> at clojure.lang.RT.load(RT.java:419)
>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>> at clojure.core$load.invokeStatic(core.clj:5892)
>> at clojure.core$load.doInvoke(core.clj:5876)
>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>> at clojure.core$load_one.invoke(core.clj:5692)
>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>> at clojure.core$load_lib.invokeStatic(core.clj:5736)
>> at clojure.core$load_lib.doInvoke(core.clj:5717)
>> at clojure.lang.RestFn.applyTo(RestFn.java:142)
>> at clojure.core$apply.invokeStatic(core.clj:648)
>> at clojure.core$load_libs.invokeStatic(core.clj:5774)
>> at clojure.core$load_libs.doInvoke(core.clj:5758)
>> at clojure.lang.RestFn.applyTo(RestFn.java:137)
>> at clojure.core$apply.invokeStatic(core.clj:648)
>> at clojure.core$require.invokeStatic(core.clj:5796)
>> at clojure.core$require.doInvoke(core.clj:5796)
>> at clojure.lang.RestFn.invoke(RestFn.java:1096)
>> at 
>> nightlight.core$eval42840$loading__5569__auto42841.invoke(core.clj:1)
>> at nightlight.core$eval42840.invokeStatic(core.clj:1)
>> at nightlight.core$eval42840.invoke(core.clj:1)
>> at clojure.lang.Compiler.eval(Compiler.java:6927)
>> at clojure.lang.Compiler.eval(Compiler.java:6916)
>> at clojure.lang.Compiler.load(Compiler.java:7379)
>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>> at clojure.lang.RT.load(RT.java:453)
>> at clojure.lang.RT.load(RT.java:419)
>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>> at clojure.core$load.invokeStatic(core.clj:5892)
>> at clojure.core$load.doInvoke(core.clj:5876)
>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>> at clojure.core$load_one.invoke(core.clj:5692)
>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>> at clojure.core$load_lib.invokeStatic(core.clj:5736)
>> at clojure.core$load_lib.doInvoke(core.clj:5717)
>> at clojure.lang.RestFn.applyTo(RestFn.java:142)
>> at clojure.core$apply.invokeStatic(core.clj:648)
>> at clojure.core$load_libs.invokeStatic(core.clj:5774)
>> at clojure.core$load_libs.doInvoke(core.clj:5758)
>> at clojure.lang.RestFn.applyTo(RestFn.java:137)
>> at clojure.core$apply.invokeStatic(core.

[ANN] lein-docker-compose - inject docker-compose port mappings into environ's `env`

2016-10-19 Thread Russell
Hi, we've just released the first version of a small leiningen plugin that 
makes using docker-compose with your Clojure projects easier.

lein-docker-compose discovers the port mappings created by docker-compose and 
injects 
them into environ.core/env.

Code is here: https://github.com/HealthUnlocked/lein-docker-compose

Leiningen plugin dependency:

[healthunlocked/lein-docker-compose "0.1.0"]

(You'll also need to be using environ and lein-environ for the plugin to 
work.)

Russell @ HealthUnlocked

PS. We are hiring :-)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [ANN] Nightlight, an embedded editor for Clojure

2016-10-19 Thread Zach Oakes
I forgot all about the dependency issue, sorry about that. I just released 
1.0.1 which removes that dependency so hopefully it should work without 
requiring that workaround.

On Wednesday, October 19, 2016 at 9:46:39 AM UTC-4, ma...@pickaplay.net 
wrote:
>
> Although, I am using boot and not lein, I added this dependency to my 
> project: [org.flatland/useful "0.11.5"]. After this, nightlight works as it 
> should.
>
>
>
>
> On Sunday, October 9, 2016 at 2:33:31 PM UTC-4, Zach Oakes wrote:
>>
>> I'll look into it. It looks like it's probably a dependency conflict. I'm 
>> using clojail to prevent the instaREPL from taking too long to run. It's 
>> using pretty old dependencies so I'll probably just fork and update it so 
>> this issue goes away.
>>
>> On Sunday, October 9, 2016 at 2:21:54 PM UTC-4, Hari Krishnan wrote:
>>>
>>> Thanks for creating an editor like this.  I may have a good use case..
>

>>> I followed the  updated instructions, and I am getting this error.  I am 
>>> on [org.clojure/clojure "1.8.0"]
>>>
>>> [2016-10-09 11:16:00,994][DEBUG][org.jboss.logging] Logging Provider: 
>>> org.jboss.logging.Log4jLoggerProvider
>>> Exception in thread "main" java.lang.IllegalAccessError: flatten-all 
>>> does not exist, compiling:(clojail/core.clj:1:1)
>>> at clojure.lang.Compiler.load(Compiler.java:7391)
>>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>>> at clojure.lang.RT.load(RT.java:453)
>>> at clojure.lang.RT.load(RT.java:419)
>>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>>> at clojure.core$load.invokeStatic(core.clj:5892)
>>> at clojure.core$load.doInvoke(core.clj:5876)
>>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>>> at clojure.core$load_one.invoke(core.clj:5692)
>>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>>> at clojure.core$load_lib.invokeStatic(core.clj:5736)
>>> at clojure.core$load_lib.doInvoke(core.clj:5717)
>>> at clojure.lang.RestFn.applyTo(RestFn.java:142)
>>> at clojure.core$apply.invokeStatic(core.clj:648)
>>> at clojure.core$load_libs.invokeStatic(core.clj:5774)
>>> at clojure.core$load_libs.doInvoke(core.clj:5758)
>>> at clojure.lang.RestFn.applyTo(RestFn.java:137)
>>> at clojure.core$apply.invokeStatic(core.clj:648)
>>> at clojure.core$require.invokeStatic(core.clj:5796)
>>> at clojure.core$require.doInvoke(core.clj:5796)
>>> at clojure.lang.RestFn.invoke(RestFn.java:421)
>>> at 
>>> eval_soup.core$eval42846$loading__5569__auto42847.invoke(core.clj:1)
>>> at eval_soup.core$eval42846.invokeStatic(core.clj:1)
>>> at eval_soup.core$eval42846.invoke(core.clj:1)
>>> at clojure.lang.Compiler.eval(Compiler.java:6927)
>>> at clojure.lang.Compiler.eval(Compiler.java:6916)
>>> at clojure.lang.Compiler.load(Compiler.java:7379)
>>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>>> at clojure.lang.RT.load(RT.java:453)
>>> at clojure.lang.RT.load(RT.java:419)
>>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>>> at clojure.core$load.invokeStatic(core.clj:5892)
>>> at clojure.core$load.doInvoke(core.clj:5876)
>>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>>> at clojure.core$load_one.invoke(core.clj:5692)
>>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>>> at clojure.core$load_lib.invokeStatic(core.clj:5736)
>>> at clojure.core$load_lib.doInvoke(core.clj:5717)
>>> at clojure.lang.RestFn.applyTo(RestFn.java:142)
>>> at clojure.core$apply.invokeStatic(core.clj:648)
>>> at clojure.core$load_libs.invokeStatic(core.clj:5774)
>>> at clojure.core$load_libs.doInvoke(core.clj:5758)
>>> at clojure.lang.RestFn.applyTo(RestFn.java:137)
>>> at clojure.core$apply.invokeStatic(core.clj:648)
>>> at clojure.core$require.invokeStatic(core.clj:5796)
>>> at clojure.core$require.doInvoke(core.clj:5796)
>>> at clojure.lang.RestFn.invoke(RestFn.java:1096)
>>> at 
>>> nightlight.core$eval42840$loading__5569__auto42841.invoke(core.clj:1)
>>> at nightlight.core$eval42840.invokeStatic(core.clj:1)
>>> at nightlight.core$eval42840.invoke(core.clj:1)
>>> at clojure.lang.Compiler.eval(Compiler.java:6927)
>>> at clojure.lang.Compiler.eval(Compiler.java:6916)
>>> at clojure.lang.Compiler.load(Compiler.java:7379)
>>> at clojure.lang.RT.loadResourceScript(RT.java:372)
>>> at clojure.lang.RT.loadResourceScript(RT.java:363)
>>> at clojure.lang.RT.load(RT.java:453)
>>> at clojure.lang.RT.load(RT.java:419)
>>> at clojure.core$load$fn__5677.invoke(core.clj:5893)
>>> at clojure.core$load.invokeStatic(core.clj:5892)
>>> at clojure.core$load.doInvoke(core.clj:5876)
>>> at clojure.lang.RestFn.invoke(RestFn.java:408)
>>> at clojure.core$load_one.invokeStatic(core.clj:5697)
>>> at clojure.core$load_one.invoke(core.clj:5692)
>>> at clojure.core$load_lib$fn__5626.invoke(core.clj:5737)
>>> at clojure.core$load_lib.invokeStatic(core.clj:5736)

interop method confusion?

2016-10-19 Thread hiskennyness
This code excerpt (most significantly the createProducer call) works 
swimmingly:

(defn t-prod [ct]
>   (with-open [client (PulsarClient/create "http://localhost:8080";)]
> (pln :client (bean client))
> (with-open [prod (.createProducer client 
> "persistent://sample/standalone/ns1/ktopic")]
>   (println prod) ...etc


...without the "ouch" dependency in project.clj:

(defproject putest "0.1.0-SNAPSHOT"
>   :description "FIXME: write description"
>   :url "http://example.com/FIXME";
>   
>   :dependencies [[org.clojure/clojure "1.8.0"]
>  [com.yahoo.pulsar/pulsar-client "1.14"]
>  [com.yahoo.pulsar/pulsar-client-admin "1.14"] ;; ouch
>  ]
>   :main ^:skip-aot putest.core
>   :target-path "target/%s" 

  :profiles {:uberjar {:aot :all}})


With that dependency, the code hangs on the call to createProducer.

I am going to investigate the possibility that the second pulsar lib 
creates an ambiguity or simply displaces a method from the first, but any 
hints from the cognoscenti are welcome. :)

-kt

ps. Java noob as well as Clojure interop noob.


-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


clojure.spec: Relationships Between Specs

2016-10-19 Thread Mark Bastian
Is it possible to specify relationships between spec values. For example:

(s/def ::x0 (int-in 0 100))
(s/def ::x1 (int-in 0 100))

;I now want to say something along the lines of (note that the :where is 
totally made up - just conveying the intent):
(s/def ::xrange (s/keys ::req [::x0 ::x1 :where  (< ::x0 ::x1)]))

How might I do this?

Thanks in advance!
Mark

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


ANN: ClojureScript 1.9.293

2016-10-19 Thread David Nolen
ClojureScript, the Clojure compiler that emits JavaScript source code.

README and source code: https://github.com/clojure/clojurescript

Leiningen dependency information:

[org.clojure/clojurescript "1.9.293"]

This release fixes a major issue with transit analysis caching where
files were leaked. It also includes a very significant compiler
enhancement thanks to Antonio Monteiro - you can now create
ClojureScript files without declaring a namespace. This opens the door
to making a much larger class of Clojure programs portable to
ClojureScript. `require` and other ns related macros are now available
granted that they appear at the top of the file. Please take careful
note that they are not functions and cannot be used in dynamic
situations. Still this eases writing simple scripts and the door is
now open to finally support data literals in a comprehensive way.

We also bumped the Google Closure compiler dependency. Please note
that Closure Compiler has made breaking changes around JS module
processing so this version of ClojureScript is pinned to this latest
release.

A huge thanks to the many people old and new that contributed to this
release.

As always, feedback is most welcome!

## 1.9.293

### Enhancements
* CLJS-1346: Support require outside of ns

### Changes
* CLJS-1762: Bump Closure Compiler, refactor module support
* CLJS-1658: testing for protocol membership may return false positives
* CLJS-1536: REPL def symbol init collision
* CLJS-1805: Source map should take false
* CLJS-1804: Self-host: process namespace side-effects for new require
without NS
* CLJS-1803: Use new require capability in REPLs
* CLJS-1796: Measure Google Closure specific optimization time
* CLJS-1782: Self-host: allow namespaces to require their own macros
* CLJS-1563: :source-map option to cljs.build.api/build should take nil
* CLJS-1785: Warn on reference to js/foo shadowed by local binding

### Fixes
* make String an implicit ns like Math. revert char? and clarify docstring.
add unit tests for char?
* fix cljs.spec.test/check docstring
* CLJS-1826: Self-host: load-deps doesn't honor `:reload` and `reload-all`
* CLJS-1825: :source-map error when passing `false` under simple
optimizations
* CLJS-1821: `add-preloads` should only touch sources if `:preloads` option
specified
* CLJS-1814: Move docstrings for require, etc. from `cljs.repl` to their
new definitions in `cljs.core`
* CLJS-1809: Add 0/1 arity to `into`
* CLJS-1824: transit cache feature leaks files
* CLJS-1294: Let macroexpand(-1) accept any quoted argument.
* CLJS-1818: (hash false) returns different value from Clojure
* CLJS-1817: Strange result when assoc'ing 0 to persistent hash map
* CLJS-1815: Fix failing analyzer tests
* follow-up on CLJS-460 defmulti ignores optional :hierarchy argument
* CLJS-1807: Better error messages for `ns*` calls
* CLJS-1802: Generated namespaces should be of the form `cljs.user.file`
* CLJ-1935: Use multimethod dispatch value method lookup to take
hierarchies into account in multi-spec
* CLJS-1682 :foreign-libs with module conversion does not works properly if
it is used form deps.cljs
* CLJS-1710: spec/double-in not implemented
* CLJS-1787: Make cljs.spec explain pluggable
* CLJS-1781: Add cljs.hash-map-test to self-parity tests
* CLJS-1788: Port CLJ-2004: include retag in multi-spec form
* CLJS-1765: Empty iterator for hash maps with nil key
* CLJS-1784: nth doesn't throw on strings or arrays
* CLJS-1773: Self-host: Don't resolve unqualified symbols / keywords with
$macros
* CLJS-1770: goog-defines broken for integers
* CLJS-1600: Destructuring defprotocol fn args causes defrecord impls to
silently fail
* CLJS-1335: resolve-macro-var: information missing for macros
* CLJS-1633: Improve error associated with invalid foreign-libs :file path
* CLJS-1775: `get` with `nil` returns as if `get` with `0`
* CLJS-1780: Records without extmaps fail to iterate
* CLJS-1774: Self-host: Report filenames in warns in test-self-parity
* CLJS-1779: keyword 2-arity constructor accepts anything for both
parameters which leads to different hashing

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: clojure.spec: Relationships Between Specs

2016-10-19 Thread Alex Miller
s/and will flow the conformed result to the next predicate so something 
like this should work:

(s/def ::xrange 
  (s/and (s/keys ::req [::x0 ::x1]) 
 (fn [{:keys [::x0 ::x1]}] (< x0 x1

On Wednesday, October 19, 2016 at 12:27:04 PM UTC-5, Mark Bastian wrote:
>
> Is it possible to specify relationships between spec values. For example:
>
> (s/def ::x0 (int-in 0 100))
> (s/def ::x1 (int-in 0 100))
>
> ;I now want to say something along the lines of (note that the :where is 
> totally made up - just conveying the intent):
> (s/def ::xrange (s/keys ::req [::x0 ::x1 :where  (< ::x0 ::x1)]))
>
> How might I do this?
>
> Thanks in advance!
> Mark
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: clojure.spec: Relationships Between Specs

2016-10-19 Thread Alex Miller
Sorry, should have been :req, not ::req in there. :)

It generates too:

user=> (gen/sample (s/gen ::xrange))
(#:user{:x0 0, :x1 1} #:user{:x0 1, :x1 5} #:user{:x0 0, :x1 1} #:user{:x0 
0, :x1 1} #:user{:x0 2, :x1 9} #:user{:x0 0, :x1 13} #:user{:x0 0, :x1 6} 
#:user{:x0 1, :x1 62} #:user{:x0 2, :x1 97} #:user{:x0 1, :x1 90})


On Wednesday, October 19, 2016 at 1:49:03 PM UTC-5, Alex Miller wrote:
>
> s/and will flow the conformed result to the next predicate so something 
> like this should work:
>
> (s/def ::xrange 
>   (s/and (s/keys ::req [::x0 ::x1]) 
>  (fn [{:keys [::x0 ::x1]}] (< x0 x1
>
> On Wednesday, October 19, 2016 at 12:27:04 PM UTC-5, Mark Bastian wrote:
>>
>> Is it possible to specify relationships between spec values. For example:
>>
>> (s/def ::x0 (int-in 0 100))
>> (s/def ::x1 (int-in 0 100))
>>
>> ;I now want to say something along the lines of (note that the :where is 
>> totally made up - just conveying the intent):
>> (s/def ::xrange (s/keys ::req [::x0 ::x1 :where  (< ::x0 ::x1)]))
>>
>> How might I do this?
>>
>> Thanks in advance!
>> Mark
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: clojure.spec: Relationships Between Specs

2016-10-19 Thread Mark Bastian
Very cool. Thanks!

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: protocols and namespaces confusion (with an example from core.matrix)

2016-10-19 Thread Gregg Reynolds
On Oct 19, 2016 7:23 AM, "Paul Gowder"  wrote:
>
> Hi folks,
>
> I have a kinda basic question (I think?) that I should really know the
answer to after writing Clojure for like 8 months, but don't.  It's about
requiring namespaces with protocol definitions in them but not the actual
implementations of those protocols, and how it works.
>
> tl/dr: if a protocol is defined in namespace a and implemented (extended
to the type at issue) in namespace b, can you call functions from it in
namespace c where namespace c only requires namespace a, not namespace b?
>
> Backstory: I was poking around core.matrix recently in pursuit of
restarting work on a months ago issue I promised to work on, and it looks
like at least one namespace calls a function it shouldn't be able to call.
>
> So: clojure.core.matrix.impl.pprint requires only one namespace within
core.matrix, clojure.core.matrix.protocols. (I'm going to use ... hereafter
to stand for clojure.core.matrix.) ...protocols defines a protocol
PSliceSeq2, which gives the name, docstring, etc. for a function called
get-slice-seq. PSliceSeq2 is actually implemented for the generic object
case in ...impl.defaults and for ISeq in ...impl.sequence.
>
> But ...impl.pprint calls ...protocols/get-slice-seq. And it seems to
work.  Even though I can't find either ...impl.defaults or ...impl.sequence
anywhere in the dependency tree for ...impl.pprint.
>
> This is a puzzle to me.  I mean, the ...impl.pprint namespace will
typically be required from some other namespace, and presumably that
higher-level namespace will require everything that one needs. But still, I
hadn't thought that one would be able to call get-slice-seq in a function
in ...impl.pprint without requiring a namespace that actually defines the
function, as opposed to just defining the protocol.
>
> So can someone explain how this magic works?  Is the compiler just way
smarter than I thought it was, and capable of figuring this stuff out on
its own?
>
Hi Paul,

can't give you specifics but (going from memory) I might be able to point
you in the right direction.  take a look at the initialization code of
core.matrix.  you have to feed it an implementation, and it dynamically
arranges bindings.  sorry I can't give you more detail but I suspect you'll
find your answer somewhere in that vicinity.

Gregg

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: ANN: ClojureScript 1.9.293

2016-10-19 Thread Rangel Spasov
Works on our Cljs + React Native + om.next iOS app - thanks everyone 
involved! 

P.S.
For anyone using Om.next: make sure to bump to "1.0.0-alpha47".

On Wednesday, October 19, 2016 at 11:30:01 AM UTC-7, David Nolen wrote:
>
> ClojureScript, the Clojure compiler that emits JavaScript source code.
>
> README and source code: https://github.com/clojure/clojurescript
>
> Leiningen dependency information:
>
> [org.clojure/clojurescript "1.9.293"]
>
> This release fixes a major issue with transit analysis caching where
> files were leaked. It also includes a very significant compiler
> enhancement thanks to Antonio Monteiro - you can now create
> ClojureScript files without declaring a namespace. This opens the door
> to making a much larger class of Clojure programs portable to
> ClojureScript. `require` and other ns related macros are now available
> granted that they appear at the top of the file. Please take careful
> note that they are not functions and cannot be used in dynamic
> situations. Still this eases writing simple scripts and the door is
> now open to finally support data literals in a comprehensive way.
>
> We also bumped the Google Closure compiler dependency. Please note
> that Closure Compiler has made breaking changes around JS module
> processing so this version of ClojureScript is pinned to this latest
> release.
>
> A huge thanks to the many people old and new that contributed to this
> release.
>
> As always, feedback is most welcome!
>
> ## 1.9.293
>
> ### Enhancements
> * CLJS-1346: Support require outside of ns
>
> ### Changes
> * CLJS-1762: Bump Closure Compiler, refactor module support
> * CLJS-1658: testing for protocol membership may return false positives
> * CLJS-1536: REPL def symbol init collision
> * CLJS-1805: Source map should take false
> * CLJS-1804: Self-host: process namespace side-effects for new require 
> without NS
> * CLJS-1803: Use new require capability in REPLs
> * CLJS-1796: Measure Google Closure specific optimization time
> * CLJS-1782: Self-host: allow namespaces to require their own macros
> * CLJS-1563: :source-map option to cljs.build.api/build should take nil
> * CLJS-1785: Warn on reference to js/foo shadowed by local binding
>
> ### Fixes
> * make String an implicit ns like Math. revert char? and clarify 
> docstring. add unit tests for char?
> * fix cljs.spec.test/check docstring
> * CLJS-1826: Self-host: load-deps doesn't honor `:reload` and `reload-all`
> * CLJS-1825: :source-map error when passing `false` under simple 
> optimizations
> * CLJS-1821: `add-preloads` should only touch sources if `:preloads` 
> option specified
> * CLJS-1814: Move docstrings for require, etc. from `cljs.repl` to their 
> new definitions in `cljs.core`
> * CLJS-1809: Add 0/1 arity to `into`
> * CLJS-1824: transit cache feature leaks files
> * CLJS-1294: Let macroexpand(-1) accept any quoted argument.
> * CLJS-1818: (hash false) returns different value from Clojure
> * CLJS-1817: Strange result when assoc'ing 0 to persistent hash map
> * CLJS-1815: Fix failing analyzer tests
> * follow-up on CLJS-460 defmulti ignores optional :hierarchy argument
> * CLJS-1807: Better error messages for `ns*` calls
> * CLJS-1802: Generated namespaces should be of the form 
> `cljs.user.file`
> * CLJ-1935: Use multimethod dispatch value method lookup to take 
> hierarchies into account in multi-spec
> * CLJS-1682 :foreign-libs with module conversion does not works properly 
> if it is used form deps.cljs
> * CLJS-1710: spec/double-in not implemented
> * CLJS-1787: Make cljs.spec explain pluggable
> * CLJS-1781: Add cljs.hash-map-test to self-parity tests
> * CLJS-1788: Port CLJ-2004: include retag in multi-spec form
> * CLJS-1765: Empty iterator for hash maps with nil key
> * CLJS-1784: nth doesn't throw on strings or arrays
> * CLJS-1773: Self-host: Don't resolve unqualified symbols / keywords with 
> $macros
> * CLJS-1770: goog-defines broken for integers
> * CLJS-1600: Destructuring defprotocol fn args causes defrecord impls to 
> silently fail
> * CLJS-1335: resolve-macro-var: information missing for macros
> * CLJS-1633: Improve error associated with invalid foreign-libs :file path
> * CLJS-1775: `get` with `nil` returns as if `get` with `0`
> * CLJS-1780: Records without extmaps fail to iterate
> * CLJS-1774: Self-host: Report filenames in warns in test-self-parity
> * CLJS-1779: keyword 2-arity constructor accepts anything for both 
> parameters which leads to different hashing
>
>

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

Re: protocols and namespaces confusion (with an example from core.matrix)

2016-10-19 Thread Alex Miller


On Wednesday, October 19, 2016 at 7:23:21 AM UTC-5, Paul Gowder wrote:
>
> Hi folks, 
>
> I have a kinda basic question (I think?) that I should really know the 
> answer to after writing Clojure for like 8 months, but don't.  It's about 
> requiring namespaces with protocol definitions in them but not the actual 
> implementations of those protocols, and how it works.  
>
> tl/dr: if a protocol is defined in namespace a and implemented (extended 
> to the type at issue) in namespace b, can you call functions from it in 
> namespace c where namespace c only requires namespace a, not namespace b?
>

Yes. You are invoking the protocol function in a and as a caller, that's 
all you need to know about. HOWEVER, the implementation in b must be loaded 
before you can do so. Your namespace doesn't necessarily have to do it, but 
someone does. Each protocol is essentially a little piece of hidden state 
in the runtime. Each time you extend the protocol to an implementation, 
that state is modified. If you don't load the code that does the extension, 
the state will not be updated.

All of this also applies to multimethods.
 

> Backstory: I was poking around core.matrix recently in pursuit of 
> restarting work on a months ago issue I promised to work on, and it looks 
> like at least one namespace calls a function it shouldn't be able to call.
>
> So: clojure.core.matrix.impl.pprint requires only one namespace within 
> core.matrix, clojure.core.matrix.protocols. (I'm going to use ... hereafter 
> to stand for clojure.core.matrix.) ...protocols defines a protocol 
> PSliceSeq2, which gives the name, docstring, etc. for a function called 
> get-slice-seq. PSliceSeq2 is actually implemented for the generic object 
> case in ...impl.defaults and for ISeq in ...impl.sequence. 
>
> But ...impl.pprint calls ...protocols/get-slice-seq. And it seems to work. 
>  Even though I can't find either ...impl.defaults or ...impl.sequence 
> anywhere in the dependency tree for ...impl.pprint.
>
>
I haven't looked at the code, but something must be loading the extension 
before you invoke it.
 

> This is a puzzle to me.  I mean, the ...impl.pprint namespace will 
> typically be required from some other namespace, and presumably that 
> higher-level namespace will require everything that one needs. But still, I 
> hadn't thought that one would be able to call get-slice-seq in a function 
> in ...impl.pprint without requiring a namespace that actually defines the 
> function, as opposed to just defining the protocol.
>
> So can someone explain how this magic works?  Is the compiler just way 
> smarter than I thought it was, and capable of figuring this stuff out on 
> its own?
>
> Thanks!
>
> -Paul
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: protocols and namespaces confusion (with an example from core.matrix)

2016-10-19 Thread Paul Gowder
Thanks Gregg and Alex!  I didn't realize that protocols (or the black magic 
interfacing of core.matrix) were that fancy.  Definitely going into my "code to 
really dig into" list.

Cheers,

-Paul

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: protocols and namespaces confusion (with an example from core.matrix)

2016-10-19 Thread Gregg Reynolds
On Wed, Oct 19, 2016 at 5:00 PM, Paul Gowder  wrote:

> Thanks Gregg and Alex!  I didn't realize that protocols (or the black
> magic interfacing of core.matrix) were that fancy.  Definitely going into
> my "code to really dig into" list.
>
>
It's remotely possible that you might find the following helpful:
lab.clj.polymorphism .
It was in part inspired by the technique used in core.matrix.  See the
section "Implementation techniques" in the readme.  At the time, it made
sense to me. ;}

-gregg

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[ANN] Milestones, the smart project planning assistant, is now online with NLP and GANTT!

2016-10-19 Thread Rafik NACCACHE
Hey everybody,
Milestones, the smart project planning assistant,  just got 0.3.0 with
Natural Language Processing and GANTT!
Please have a look on it here:
http://turbopape.github.io/milestones/
Cheers !

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


clojure.spec.test/instrument causes clojure.spec/exercise-fn to use generators which fail the args spec!?

2016-10-19 Thread J.-F. Rompre
I am trying to learn clojure.spec and tried my hand at a spec for a 
fizzbuzz function. 
For some strange reason, generators created for it fail the same spec 
during clojure.spec/exercise-fn !

Stranger, this happens only if the same function is first instrumented 
using clojure.spec.stest/instrument.
Otherwise (commenting out the instrument call), exercise-fn generates 
compliant inputs and returns.

I tried to reproduce this with a trivial example to show here but couldn't, 
so created a gist to illustrate the issue: 
 https://gist.github.com/KingCode/101ff425f1abd9693a7e8c4b5d389e74

Thanks for any comment and enlightening, I can't wait to use spec 
productively :)
JF

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: clojure.spec.test/instrument causes clojure.spec/exercise-fn to use generators which fail the args spec!?

2016-10-19 Thread Beau Fabry
You have two possible branches for your ::fizbuzz arguments, a one-arity 
and a 3-arity. The 1-arity branch allows for the value 1, which when passed 
to the function fizzbuzz recursively calls the function fizzbuzz with the 
arguments (3 5 1) is not a valid set of values for ::fizzbuzz and so raises 
an exception.

The reason you only get the exception when you've instrumented the 
function, is because the non-conforming set of arguments is constructed in 
the 1-arity, and doesn't get checked against ::fizzbuzz unless 
instrumentation is turned on.


On Thursday, October 20, 2016 at 3:17:19 PM UTC+11, J.-F. Rompre wrote:
>
> I am trying to learn clojure.spec and tried my hand at a spec for a 
> fizzbuzz function. 
> For some strange reason, generators created for it fail the same spec 
> during clojure.spec/exercise-fn !
>
> Stranger, this happens only if the same function is first instrumented 
> using clojure.spec.stest/instrument.
> Otherwise (commenting out the instrument call), exercise-fn generates 
> compliant inputs and returns.
>
> I tried to reproduce this with a trivial example to show here but 
> couldn't, so created a gist to illustrate the issue: 
>  https://gist.github.com/KingCode/101ff425f1abd9693a7e8c4b5d389e74
>
> Thanks for any comment and enlightening, I can't wait to use spec 
> productively :)
> JF
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.