#clojure logs

2015-04-18

00:59lexi-lambdaAnyone up for a simple code review? ;D http://codereview.stackexchange.com/q/87277/12229
01:12seancorfieldlexi-lambda: I'm curious about the maybe fn -- seems to only be used with string? and (string? nil) is false so that seems safe without (maybe string?)
01:13lexi-lambdaseancorfield: But ((maybe string?) nil) is true.
01:13seancorfieldoh, i see
01:14seancorfieldinteresting... i misunderstood the intent...
01:14seancorfieldthe only other thing would be making the functions public instead of private -- they might be useful to users of the library
01:15seancorfieldthe community consensus seems to be to prefer public over private unless there's a really good argument to keep something private
01:15seancorfieldlooks pretty clean to me apart from that
01:15lexi-lambdaOkay, good to know. I think you're right that query-string->map and those sorts of functions should probably be public.
01:15lexi-lambdaWhat about `maybe`? I don't think making that public would make much sense.
01:16lexi-lambdaIt would make sense to put it in a separate utils lib or something, but I didn't do that for that one function.
01:18seancorfieldperhaps create a specific fn for the intended "maybe string?" where nil is true?
01:18clojurebotPardon?
01:19seancorfield(unless you use maybe with something other than string?)
01:20lexi-lambdaseancorfield: I used to, I think, but it ended up getting unused. I like the way (maybe string?) expresses the "string-or-nil" concept, though.
01:21seancorfieldhow about (defn may-be-string? [s] (or (nil? s) (string? s)))
01:21seancorfieldhard to pick a good name for that
01:22seancorfieldoptional-string?
01:30lexi-lambda"maybe" is definitely the Haskell-y way to phrase it, so "optional" might be a better name
01:34seancorfieldlexi-lambda: naming is hard :)
03:50kaiyindoes core.typed boost performance?
03:56atomianyone know a good blog post for a getting started with http-kit?
03:56atomiI'm new to clojure all together and I just did the lein new hello
03:57atomiI got -main going and did lein uberjar
03:57atomiworked just fine :)
04:01atomithe http-kit examples aren't complete from a new user context
04:04amalloykaiyin: it's just a static analysis tool. it doesn't make any difference to the compiled code
04:05atomiI added http-kit "2.1.19" to :dependencies in my project.clj
04:08atomiokay how about a good getting started book for clojure
04:12atomihaha nevermind I got some good one
04:12atomis
04:57lbradstreetIs it possible to use with-redefs for defmethods?
05:13darthdeusis there an ordering guarantee on channels? such as if 3 producers are blocking to put a value in, and I take one out, do I take out the first one?
05:28amalloydarthdeus: i don't see how you could even observe whether that is actually happening or not, from within the channel ecosystem. how do you know which one is first?
05:28darthdeusamalloy: I'm using channels to synchronize some stuff in my tests, and I need to have some ordering guarantees
05:29darthdeusso I'm asking if core.async already does this, or if I need to roll my own
05:31amalloydarthdeus: what i'm getting at is, there's no way oyu can tell whether ordering is preserved or not. try to devise an experiment which will behave one way if channels are ordered in the way you describe, and behave differently if they're not
05:31darthdeusamalloy: well I've done that, but I'm not sure if I'm just getting lucky, or if this is by design
05:31darthdeusand I can't find it anywhere in the docs
05:31amalloywhat is your experiment?
05:33darthdeusamalloy: http://stackoverflow.com/questions/29715462/if-multiple-subscribers-block-on-a-core-async-channel-is-the-order-in-which-the
05:35amalloymmm. well yes, you can observe the difference if you're using the super low-level stuff like put! and take!. but you're not supposed to, right, in general? like you can't write this test with <! and >!
05:36amalloyanyway i don't know the answer to the question you're asking, but i'm encouraging you to think aobut whether it is really a question that's good to ask
05:38darthdeusamalloy: well, what I'm really doing is a writing a test, where multiple websocket clients (which are in clojure) talk to a server, and then I need to assert on the messages they get
05:39darthdeusand I'm using channels to gather incoming responses for each client, and then assert on them
05:40darthdeusI'm not really sure how to do this in any other way
05:40darthdeusI mean, I need the clients to run both at the same time, and individually collect incoming events in the order in which they come
05:42darthdeusI guess I could do the asserts in a (go) block, hmm
05:42darthdeusbut that wouldn't really change much
05:42darthdeussince I need to synchronize across multiple async clients
06:29H4nscan anyone recommend a very simple, serverless, file backed persistence library for clojure?
06:31expezH4ns: spit, slurp and edn/read-string
06:31H4nsexpez: right. i can roll my own, but i'd prefer not to.
06:33expezWhat functionality do you need which isn't provided by that solution?
06:33H4nsexpez: serialization that works even when i have *print-length* set, for example
06:34H4nsexpez: there are several fine points that one needs to get right.
06:36H4nsexpez: also, when you're serializing all data into one file, you'll probably want to make sure that your writes succeed, and maybe keep a few previous versions etc. etc.
06:38expezH4ns: https://github.com/alandipert/enduro this might fit your bill. I haven't tried it out myself but it's in my "hammer looking for nail" pile :)
06:39H4nsexpez: ah, that looks neat, thanks!
06:51H4nsexpez: enduro is precisely what i needed, thank you again!
07:10_1_hyy anyone from patnaa
08:46kaiyinhow do you exit a running function in lein repl?
08:47TEttingerkaiyin, ctrl-d on windows exits the whole repl
08:47TEttingernot sure if there's a way to only kill the current fn
08:47TEttinger(there might be?)
08:47TEttingernot sure if ctrl-d also works on linux/mac
08:48TEttinger(I guess it probably does since ctrl-c is force kill everywhere)
08:52kaiyindoesn't work, neither c-d nor c-c.
08:52darthdeushey guys, any thoughts? https://github.com/technomancy/leiningen/issues/1884
08:53TEttingerkaiyin, try c-c c-c
08:53kaiyinTEttinger: tried that, too. not working.
08:53TEttingerthat's uh not good. linux?
08:54kaiyinosx.
08:54TEttingeroh were you pressing cmd?
08:54TEttingerctrl-c is the actual key on osx
08:54kaiyinno, ctrl.
08:54TEttingerok
08:55TEttingerI am not sure then, there's probably some osx users who can answer better than I can
08:55kaiyinok, thanks. :)
09:00kaiyinanyways, i had to shut down the terminal to exit that function. Is there a function out there for exiting its enclosing function when certain conditions are met?
09:00kaiyinI tried (System/exit 0), but it also shuts down the repl.
09:10TEttingerkaiyin, like break in loops in C-like languages, or an early return statement?
09:10TEttingerthe closest equivalent to break for reduce calls is reduced, which is generally handy for lots of stuff
09:10TEttinger(doc reduced)
09:11clojurebot"([x]); Wraps x in a way such that a reduce will terminate with the value x"
09:11kaiyinTEttinger: yeah, like an early return statement.
09:12TEttingerI mean ideally clojure code is structured into lots of small fns, but that isn't always practical...
09:13TEttingerdo you know what wasn't terminating?
09:13TEttingerlike an evaluation of an infinite lazyseq?
09:14TEttingerif you specifically want to denote that there is an error state in your program, you can just throw an exception
09:14TEttinger(doc throw)
09:14clojurebotGabh mo leithscéal?
09:14TEttingerI think it's a built-in
09:15TEttinger(throw (Exception. "Some text"))
09:17kaiyinTEttinger: ah, indeed, that's a nice idea.
09:17TEttingeran advantage of being built with Java, kinda :)
09:17TEttingerplenty of Exception classes to choose from, jhaha
09:18H4nswe're using slingshot instead of raw java exceptions: https://github.com/scgilardi/slingshot
09:19TEttingerindeed. there are lots of solutions out there, I've heard good things about slingshot
09:19TEttingerhow do you like it, H4ns?
09:20H4nsTEttinger: much better than raw exceptions because in those cases where we wanted to catch some specific error, we did not need to subclass Exception. so it does what we need so far.
09:20clojurebotTitim gan éirí ort.
09:20TEttingergreat!
09:20TEttinger(inc H4ns)
09:20lazybot⇒ 3
09:20TEttinger(inc scgilardi)
09:20lazybot⇒ 1
09:54justin_smithTEttinger: you can't do anything involving throw with clojurebot, not even ask for docs
09:54justin_smith*security*
09:55TEttingerwow
09:55justin_smithH4ns: it's not super hard to directly use ex-info
09:56H4nsjustin_smith: yes. it is not super hard to use slingshot either. why should i not?
09:56justin_smithH4ns: I only mention this because dep creep
09:56justin_smithbut if you are OK using slingshot that's fine, of course
09:56TEttinger,((fn rec [] (if (= (rand-int 100) 0) (throw (Exception. "wowza bo bowza!")) (rec))))
09:56clojurebot#error{:cause "wowza bo bowza!", :via [{:type java.lang.Exception, :message "wowza bo bowza!", :at [sandbox$eval25$rec__26 invoke "NO_SOURCE_FILE" 0]}], :trace [[sandbox$eval25$rec__26 invoke "NO_SOURCE_FILE" 0] [sandbox$eval25$rec__26 invoke "NO_SOURCE_FILE" 0] [sandbox$eval25$rec__26 invoke "NO_SOURCE_FILE" 0] [sandbox$eval25$rec__26 invoke "NO_SOURCE_FILE" 0] [sandbox$eval25$rec__26 invoke "NO_...
09:57justin_smithTEttinger: hrm, so that's not the thing I thought it was...
09:57mavbozo,(throw (ex-info "wowza bo bowza!" {}))
09:57clojurebot#error{:cause "wowza bo bowza!", :via [{:type clojure.lang.ExceptionInfo, :message "wowza bo bowza!", :at [clojure.core$ex_info invoke "core.clj" 4591]}], :trace [[clojure.core$ex_info invoke "core.clj" 4591] [sandbox$eval51 invoke "NO_SOURCE_FILE" 0] [clojure.lang.Compiler eval "Compiler.java" 6792] [clojure.lang.Compiler eval "Compiler.java" 6755] [clojure.core$eval invoke "core.clj" 3079] ...]}
09:57TEttinger&((fn rec [] (if (= (rand-int 100) 0) (throw (Exception. "wowza bo bowza!")) (rec))))
09:57lazybotjava.lang.Exception: wowza bo bowza!
09:57TEttingerheh
09:58mavbozo&(ex-info "wowza bo bowza!" {})
09:58lazybot⇒ #<ExceptionInfo clojure.lang.ExceptionInfo: wowza bo bowza! {}>
10:02mavbozo&(throw (ex-info "wowza bo bowza!" {}))
10:02lazybotclojure.lang.ExceptionInfo: wowza bo bowza! {}
10:03mavbozowhat's the difference between & and ,
10:25kaiyinwhy does this tic tac toe program fail to print the board? https://gist.github.com/kindlychung/bd9e46eda02784cec68d
10:27xeqikaiyin: L42. map is lazy, so won't realize any of the printing unless the returned nil is needed
10:27xeqi(doc doseq)
10:27clojurebot"([seq-exprs & body]); Repeatedly executes body (presumably for side-effects) with bindings and filtering as provided by \"for\". Does not retain the head of the sequence. Returns nil."
10:27xeqitry doseq instead
10:28kaiyinxeqi: ok, i'll try that.
10:31kaiyinxeqi: cool, now it works.
10:32TEttingermavbozo: & executes the next form with lazybot, while ',' uses clojurebot. clojurebot is running almost the latest 1.7 master, lazybot isn't as recent but doesn't restrict printlength
10:32mavbozo,*clojure-version*
10:32clojurebot{:major 1, :minor 7, :incremental 0, :qualifier "master", :interim true}
10:32mavbozo&*clojure-version*
10:32lazybot⇒ {:major 1, :minor 7, :incremental 0, :qualifier "alpha1"}
10:33TEttingeryou can also use lazybot mid-message ##(take 1000 (range)) like that
10:33lazybot⇒ (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 ... https://www.refheap.com/99759
10:33mavbozoTEttinger, ah, so that's the difference
10:33mavbozow00t!
10:33TEttingerthe refheap pasting is extremely handy
10:33TEttingerbut clojurebot's restricted printlength lets it deal with infinite lazyseqs without dying
10:34TEttinger(by forgetting the "infinite" part :D)
10:37mavbozoreally awesome
10:40mavbozo##(take 1000 (cycle [0 1 2]))
10:40lazybot⇒ (0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 ... https://www.refheap.com/99760
11:02si14is there any better way nowadays to hint object array type other than using string representation?
11:03si14into-array somehow kinda works sometimes, but I can't understand why and why it fails sometimes
11:04si14https://gist.github.com/si14/c5d584bf622e6de91348 here is an example — without that ugly array hint it warns me about reflection on that .set
11:09Guest67I'm trying to get transducers to work for first time, but when I call (map somefn) i get an arity exception. i'm using clojure 1.6. Any hint what i am missing?
11:09mavbozoGuest67, use clojure 1.7
11:10mavbozo,*clojure-version*
11:10clojurebot{:major 1, :minor 7, :incremental 0, :qualifier "master", :interim true}
11:10mavbozo,(map somefn)
11:10clojurebot#error{:cause "Unable to resolve symbol: somefn in this context", :via [{:type clojure.lang.Compiler$CompilerException, :message "java.lang.RuntimeException: Unable to resolve symbol: somefn in this context, compiling:(NO_SOURCE_PATH:0:0)", :at [clojure.lang.Compiler analyze "Compiler.java" 6543]} {:type java.lang.RuntimeException, :message "Unable to resolve symbol: somefn in this context", :at [...
11:10mavbozo,(map +)
11:10clojurebot#object[clojure.core$map$fn__4528 0x1dcd1bd6 "clojure.core$map$fn__4528@1dcd1bd6"]
11:10mavbozo&(map +)
11:10lazybot⇒ #<core$map$fn__4338 clojure.core$map$fn__4338@5442634c>
11:11Guest67thanks
12:02noogaCan I use locking with values like strings, eg. (locking "someid" ...) ?
12:10greoihHi! I'm sorry if this is a newbie question. I'm trying to get started with Clojure & Clojurescript. Making a webapp with the lein template reagent-template (https://github.com/reagent-project/reagent-template). My problem is with Emacs Cider integration. Running `lein test` works fine, but when I from core.cljs (with cider jacked in) hit `C-c ,`, I get the error `No tests namespace: list-paddan.core-test`, even if that namespace does
12:10greoihexist.
12:10greoihSo I wonder, how can you tell cider where to look for tests namespaces, or how does that even work? Thank you very much.
12:14sdegutisAre transducers just a new name for the common map-reduce pattern?
12:27kaiyinwhy does the snake stand still? https://gist.github.com/kindlychung/93b50754d75b8056b7eb
12:33noncom|2sdegutis: no, i is a more general thing
12:34J_Arcane... Hmm. How do you push something to the top of an atom? doing swap! with cons takes the arguments in the wrong order, and I get a mess.
12:36noncom|2J_Arcane: refs are for this
12:36noncom|2use a ref + dosync i guess
12:37noncom|2J_Arcane: however, i did not get into such a situation with atoms
12:37noncom|2consing was always in the right order if i had just one thread to do this
12:37noncom|2kaiyin: why don't you use seesaw?
12:38kaiyinnoncom|2: I am following some tutorial on the web, they didn't use seesaw.
12:38kaiyinI also think seesaw is a better option.
12:39kaiyinbut that's something else to learn.
12:40J_Arcanenoncom|2: What I found is that if I've got a vector of strings in an atom, doing (swap! atm cons "string") actually tries to cons the contents of the atom onto "string", rather than the other way around in ClojureScript.
12:43nuwanda__J_Arcane: that's because:
12:43nuwanda__,(doc cons)
12:43clojurebot"([x seq]); Returns a new seq where x is the first element and seq is the rest."
12:43noncom|2kaiyin: where is the update loop for your game?
12:44nuwanda__J_Arcane: you can do (swap! atom #(cons item %))
12:46kaiyinnoncom|2: i am not really sure, it's probably not there. Is that the problem?
12:46kaiyinI don't understand the gui part very well.
12:46J_Arcanenuwanda__: Ah! Right. I thought maybe that was the case with the argument order, just couldn't figure out a way around it.
12:46noncom|2kaiyin: i cannot see where should it happen. i guess that the Timer is to be used to schedule updates on a regular basis...
12:47kaiyinnoncom|2: yeah, it's supposed to update the game state every 100 ms.
12:49J_ArcaneIS there a 'flip' function in Clojure?
12:50tomjackthere isn't a defined function for that in core, no
12:50tomjackI would call this _a_ flip function: (fn [f] (fn [x y] (f y x)))
12:51tomjackbut then you might ask "what if f doesn't take two args?"
12:51tomjackand you will maybe understand why there is no defined 'flip' function in core :)
12:51noncom|2kaiyin: well, it is not employed anywhere
12:52noncom|2probably a piece of the program is missing
12:52kaiyinok
12:52tomjacker, not "what if f doesn't take two args?" really, but "what if f also takes (not= two) args?"
12:56noncom|2tomjack: the word "flip" implies duality
12:57noncom|2tomjack: so, the case for more args would be like "scroll-args" or "reverse-args"
12:57tomjackor other things
13:03tomjackI was thinking 'flip' is less good a fit in an uncurried world, but I'm not sure that's really true
13:03noncom|2tomjack: yeah, other things too
13:19kaiyinwhy does used-id contain duplicated entries here: https://gist.github.com/kindlychung/8770cc28cc76250071cd ?
13:23lalaland1125kaiyin, Don't you need to use an atom for uid?
13:25lalaland1125NVM, didn't see the ref.
13:25kaiyinlalaland1125: why?
13:25kaiyinok
13:28kaiyinSince Refs are for Coordinated Synchronous, I don't understand why used-id should contain duplicated numbers.
13:29tomjackis commute the only thing you've tried?
13:31tomjackI think the answer to your question is "that's how commute works". if you are just learning refs, use alter or ref-set instead
13:31tomjackif you are learning commute, then I guess maybe you just did :)
13:36kaiyinhow does commute work then?
13:36postpunkjustinI have some acceptance tests that I don't necessarily want to run all the time. They're marked with ^:acceptance, but "lein test" still runs them by default. Is there some way I can skip those by default?
13:36kaiyintomjack: unfortunately I am still struggling with it.
13:39tomjackdid you read the docstring?
13:42tomjackthe in-transaction value you read by `@uid` may not be the same as the one committed by your `(commute uid inc)`
13:42kaiyintomjack: I have read some posts on SO, now I seem to have some idea of how alter and commute differ.
13:44kaiyinalter will retry if some other thread came along and made changes during the transaction, while commute just commit the change.
15:00fritzlhey, is there a clojure function like haskells scan{l,r}?
15:03TEttinger(doc reductions)
15:03clojurebot"([f coll] [f init coll]); Returns a lazy seq of the intermediate values of the reduction (as per reduce) of coll by f, starting with init."
15:03TEttingerfritzl, I'm not sure if that's what you're after
15:03TEttinger,(reductions + (range 10))
15:03clojurebot(0 1 3 6 10 ...)
15:05fritzlTEttinger: that was what I was looking for, thanks
15:05TEttingercool!
15:07fritzlkind of a better name as well
15:08TEttingerthat's one of the things that I think clojure did a really good job on in the early design
15:13mfikesThe names are good. I find the noun vs. verb aspect interesting. `reduce` or `reduction`
16:15kaiyinhow do you add some file to classpath, after you add a new dependency in project.clj and run lein deps?
16:16kaiyinI mean before that the repl was already running.
16:17noncom|2kaiyin: i think this is not supported by default (not recommended?)
16:17noncom|2however, try pomegranate maybe
16:17noncom|2or vinyasa
16:18noncom|2i have some problem with lein: i run lein uberjar, but it keeps starting and then telling me, it cannot find some older version of java
16:18noncom|2why lein tries to uberjar with a different java?
16:19noncom|2how to fix?
16:26kaiyinnoncom|2: vinyasa looks cool. thanks.
17:07kaiyinhow do you remove an var in repl?
17:12kaiyinfor example (def lb (listbox :model (-> 'seesaw.core ns-publics keys sort))) and set up some listeners for the listview. after that this list just won't go away even though i redefine it to a number (def lb 3).
17:32imanc_hope clojure one day gets as popular as scala
18:02tickingimanc_: not going to happen, a huge part of scalas popularity comes from its java-esque-ness
18:03imanc_from what I gather, scala is a pretty mad language though and many don't like using it
18:07tickingimanc_: yeah, interestingly the new spark sql stuff from apache spark uses a pattern matching graph transformer and macro based code emitter, so it feels very clojurish in its implementation
18:31sobelimanc_: what makes it mad?
18:32imanc_sobel: overly complex in places, and many ways of doing things, plus the possibly to royally screw yourself wiht things like implicits
18:33imanc_apparently Odersky plans to simplify the language a fair bit
18:33sobeli am finding the composability of clojure addictive
18:33sobeland the metacoding tools are great.
18:34imanc_here's a scala core committer talking about why he binned scala and felt he wasted 5 years of his life working on it: https://www.youtube.com/watch?v=uiJycy6dFSQ
18:34imanc_i really like clojure - hope I can get a job working with it
18:36sobelimanc_: i took a java job that looked like a place i could shoehorn clojure into the mix
18:38sobeler..scAHla or scAYla?
18:38imanc_sobel - i'm in a similar situation. I have potential for a job that requires either scala or java 8, and I don't have commercial experience in either. But I'm thinking about trying to learn java quickly, and then seeing if I can introduce some clojure
18:38imanc_scaHla
18:38sobeli know enough java to wing it on a regular basis
18:39sobelespecially including clojure usage
18:39sobelinterop
18:40sobelwell, now i have no desire to learn scala :)
18:40imanc_sobel: I've coded for years including some strongly typed langs, and the java lang looks pretty straight forward, but it's all the ecosystem and using it in an idiomatic way that takes time to get up to speed with. I'm wondering though, how long do you think i'td take to get to that sort of mid weight level with java?
18:41imanc_yeh, scala has some nice stuff, but it looks f'kin nasty in other ways.
18:41sobelif you know clojure but have to use java, learn to compose your implementations using Spring (XML or annotation, doesn't matter that much)
18:41imanc_'k
18:42imanc_annotatoin sounds preferable to xml
18:42imanc_:)
18:42sobelymmv
18:42sobeli prefer xml because it is the most succinct way to yank all the creation code out of java
18:44sobelmy generic-ish pattern was to replace important classes with interfaces (even eclipse can automate that refactoring) to make it easier to insert test impls/mocks with test versions of the xml object maps
18:44imanc_are you talking about IoC/dep injecion?
18:44sobeland to augment/replace most 'configuration' code with instructors
18:45sobelconstructors
18:45sobelpretty much
18:45imanc_ah
18:45sobelclosest thing to composition you get w/java :)
18:45imanc_yeh - going to suck going from python and clojure to java
19:00xeqiBronsa: thanks for the formatting updates. No preview button, unknown formatting, and no easily seen edit button once created made me hope someone else would come along and fix it
19:02Bronsaxeqi: np, the preview button actually exists though, it's that blue icon next to the help one, underneath the textarea (took me a year to notice it)
19:04xeqihaha, so it does
19:08brianpWinsHaving some problems doing string replacemnts with escaped quotes: (string/replace (str "\"MARY\"") #"\"" #"") returns regex.Pattern cannot be cast to clojure.lang.IFn
19:53sritchieanyone know the elisp equivalent of “do"?
19:53sritchiecan’t figure out how to write sequential forms
19:57amalloyprogn
19:57amalloysritchie:
19:57sritchiethanks
20:00brianpWinsI still can’t find a way to do this string replacement: (string/replace "\"MARY\"" #"\"" #"") throws exceptions
20:01amalloy#"" is a regex, not a string. it doesn't make sense to replace with a regex
20:02brianpWinssnap
20:02brianpWinsi can’t believe I’ve been staring at this for like 2 hours lol
20:02brianpWinsthanks amalloy
21:44justin_smithimanc_: what I have seen many places is people being able to convert ruby shops to use more and more clojure
22:46myguidingstarsomeone plz help explain why the two results here are different https://gist.github.com/myguidingstar/d7d2f03db35b2bcb7646
22:47myguidingstar(sorry about the function name, it's a simplified version)
23:57mfikesmyguidingstar: Forcing realization of the sequence returned by index-symbols* man cause mutation of `result`. In the global case, the result of index-symbols* is not wrapped with dorun (so it is perhaps realized differently simply owing to printing at the REPL). If you wrap it with dorun, the results become the same.