#clojure log - Jun 01 2014

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:04 duck1123: :( minimal aleph test-case works fine. It's my birthday, shouldn't this work for me today?

0:06 rhg135: duck1123, it's never that easy

1:54 tolstoy: duck1123: If it comes to it, http-kit might be a good alternative.

2:23 hadronzoo: Will leiningen use credentials.clj.gpg to authenticate not only on deploy, but also when searching for artifacts?

2:36 tolstoy: I'm guessing cljsbuild is not quite a good citizen in this case.

2:36 Oops. (cljsbuild hook is, uh, problematic for me)

4:13 no7hing: is this still the canonical way to get a record’s type in clojurescript? http://stackoverflow.com/questions/17190575/how-do-i-get-the-type-of-a-record-in-clojurescript

4:26 martinklepsch: are there other clojure devops things than pallet?

6:45 AeroNotix: https://gist.github.com/AeroNotix/334e54e5b11ce6a608ac

6:46 Caused by: java.lang.RuntimeException: Unable to resolve symbol:  in this context

6:46 what's going on there?

6:46 blur3d: , (def track1-data ["B4000000000000002^CardUser/John^131210100000019301000000877000000?" "B4000000000000002^CardUser/John ^131210100000019301000000877000000?"])

6:46 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol:  in this context, compiling:(NO_SOURCE_PATH:0:0)>

6:48 TEttinger: "B4000000000000002^CardUser/John ^131210100000019301000000877000000?"

6:48 uh sorry

6:48 amalloy: you probably have a non-breaking space or other weird whitespace character in there

6:48 AeroNotix: hm

6:49 ffs

6:49 blur3d: the double quotes are being evaluated

6:50 AeroNotix: when I copied the strings to a new def, it works...

6:50 lolunicode

6:50 Or something

6:50 in other news, I need to generate track1 cc information, does anyone have a list or some code to generate this?

6:50 TEttinger: yeah there's probably an unprintable garbage char in the string

6:50 blur3d: yeah, something weird.. I got it working with single quotes and alphanum chars only

6:51 AeroNotix: #FuckIt

6:51 next problem

6:51 TEttinger: copying pasting might remove the unprintables haha

6:51 wagjo: AeroNotix: you have an EF BB BOM between last string and ])

6:51 AeroNotix: wagjo: lol

6:52 I really don't know how that happened

6:53 blur3d: try typing it out by hand from scratch

6:53 AeroNotix: blur3d: I did, already said I did. It works

6:54 blur3d: kk

6:54 AeroNotix: I need some Track1 CC info now, the one I pasted above, works. But I need MOAR

6:54 just for unit testing

8:12 enen: hey guys iv been meaning to get into clojure for some time now. while i can google on how to get started and wont bother you with that, i cant decide if i should try and learn also vim or emacs in the process. would it be worth my time?

8:14 Rhymor: enen: emacs has a great lisp integration. Vim is good for text editing (as opposed to text authoring)

8:15 If all you want to do is program, start with LightTable

8:15 enen: yes, light table looks great, i was thinking to go with it

8:15 Rhymor: It has an emacs and vim keybinding plugin. So you can experiment with these.

8:15 enen: yeah exactly

8:16 Rhymor: enen: in short, emacs is a programmer’s editor, vim is a system administrator’s.

8:17 enen: Rhymor: thats an interesting thought

8:17 locks: +1 for Light Table

8:18 I was trying clojurescript the other day

8:18 opened a browser tab on LT, connected, bam live reload

8:18 enen: im a fan of bret victors stuff, thats why id like to try light table

8:19 locks: coming from an ios dev background where i have to wait 30 secs to a minute for my simulator to run my code this looks like a dream haha

8:22 locks: yeah can't wait for some of the LT updates

8:23 ambrosebs: enen: also check out Cursive Clojure if you're shopping.

8:24 wagjo: ,(+ 2 2)

8:24 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

8:25 ambrosebs: ,+

8:25 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

8:27 wagjo: seems like I've broken clojurebot (again), sorry

8:30 locks: ,)

8:30 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

8:30 locks: ,)

8:30 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

8:30 locks: NooOoo

8:48 scape: opinions/feedback welcome :) https://github.com/viperscape/kuroshio/blob/master/examples/chan.clj

9:19 AWizzArd: rhg135: please check your priv query windows

11:55 irctc: hi everyone, I have a question about using nREPL (cider) in Emacs. In my clojurescript project, I start the repl server using cider-jack-in command. However, whenever I try to execute a function from the clojure file, a compilerexception is thrown with the message unable to resolve symbol. What could be the problem? Does cider load all dependencies automatically?

11:56 anyone is there?

12:02 yotsov: irctc: you could try asking this in #clojurescript I guess. I don't use emacs so can't help

12:07 hyPiRion: irctc: It's silent on sundays

12:22 visof: hello is the best way to write concurrent fast code is using future?

12:45 agumonkey: hello aliens

13:54 mindbender1:

13:54 Jaood:

14:11 andyf: ambrosebs: Is it time to change the recommendation at this link, given that tools.analyzer(.jvm) might be ready to build tools now? https://github.com/clojure/jvm.tools.analyzer#future-deprecation

14:21 bbloom: amalloy_: burned by zero arity assoc AGAIN

14:23 andyf: 0 arity, or 1 arity?

14:27 fifosine1: Quick question: I'm looking at the function definition "(defn thumbnail-link [{:keys [userid name]}]", what's going on here with the map?

14:31 jeremyheiler: fifosine1: map destructuring. you can call it like: (thumbnail-link {:userid "foo" :name "bar" :somethingelse "baz"}) and it will pull the specified values out for you.

14:31 mindbender1: fifosine1: That's destructuring. You can read more here and research further: http://blog.jayfields.com/2010/07/clojure-destructuring.html

14:31 fifosine1: ok, will read, thank you

14:36 mindbender1: Oh wow, the :keys directive is pretty cool

14:37 mindbender1: Yes it is. There are many cool stuff in clojure as you'll soon find out.

14:58 pwiki_: What is recommended for working with dates and time in ClojureScript? Is cljs-time mature enough, or should I use a JS library like MomentJS? Does someone has experience with this?

15:00 benmoss: pwiki_: i recommend using the Google Closure classes

15:00 i’m not familiar with cljs-time really

15:00 jeremyheiler: benmoss: it appears that is what cljs-time does.

15:01 benmoss: so to the extent that it’s just a wrapper it’s probably “mature"

15:01 clojurebot: It's greek to me.

15:01 jeremyheiler: yeah probably.

15:02 pwiki_: ok, then I will give cljs-time a try, thanks

15:17 benmoss: do people use chunked-seq stuff directly in their code much?

15:17 chunk-buffer chunk-append chunk-cons etc

15:18 i would guess its just an implementation detail that maybe you see in the wild in some deftypes but otherwise pretty rare?

15:45 fifosine: Has anyone here worked through Web Development in Clojure?

16:08 platz: Anyone tried Caribou?

16:08 looks like kind of a batteries-included web framework as opposed to a minimal one

16:08 for better or worse

16:11 amalloy: benmoss: i have never used chunk-*

16:14 benmoss: yeah all i could find was some stuff about using custom chunk sizes for optimization

16:16 serendipity1: why did Rich Hickey ultimately chose jvm over clr?

16:17 turbofail: because he didn't want to be trapped on windows?

16:17 don't even bring up mono

16:18 bbloom: turbofail: seems like he did a fair bit of professional c# development, so i'm not so sure that he's super worried about windows

16:18 AWizzArd: Well, the C in CLJ stands for C# actually.

16:18 bbloom: there's an old interview w/ fogus where he said he wanted to do twice as much, not the same stuff twice

16:18 AWizzArd: C#, Lisp, Java

16:18 bbloom: and the jvm version was dramatically more popular, hence jvm wins

16:18 turbofail: that too

16:19 part of the reason the JVM was more popular though was because it was more cross platform

16:20 serendipity1: thanks bbloom, that clears up things. I was wondering because he earlier was implementing dotLisp or smthg like that

16:21 bbloom: serendipity1: iirc he said in interviews that dotlisp was his "everybody's first lisp" project... presumably during the time he was writing C# professionally

16:21 benmoss: can someone explain to me why `chunk` isn’t idempotent? https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/ChunkBuffer.java#L30

16:22 serendipity1: If interop with c# is my prime concern should I choose IronScheme or ClojureClr?

16:22 bbloom: serendipity1: they are very different languages

16:24 benmoss: once you call chunk, you've shared the private buffer... so you can't reuse it

16:24 serendipity1: I want to learn a homoiconic language but have ability to interact with c#

16:25 benmoss: bbloom: so just to enforce the pattern it makes the buffer unusable?

16:25 arrdem: serendipity1: I picked up several Scheme dialects, then Common Lisp, then Clojure. Clojure is the only one I use. homoiconicity is overrated, langage communities and semantics make all the difference.

16:25 bbloom: benmoss: yeah, when you call "chunk" on the buffer, you're releasing that resource, effectively

16:25 serendipity1: we're bias in here, but learn ClojureCLR

16:25 benmoss: cool, thanks

16:26 bbloom: serendipity1: and if you're just learning, i suspect interop is relatively unimportant... unless you've got something in particular in mind you want to build with it

16:26 serendipity1: IronScheme attempts to confirm to the scheme spec, which makes interop harder. clojure is designed to be hosted, so it's interop support will be much smoother

16:28 serendipity1: in my regular c# code i find myself in place where language starts getting in the way. i have higher order templates, lambdas, code generation all over the place and it just feels a little bit too verbose

16:28 bbloom: serendipity1: you won't find anybody disagreeing here :-P

16:29 serendipity1: :)

16:31 but as far as I understand I could also do all these fun lisp-macro magic in IronScheme, right?

16:32 arrdem: As an SRSN | n >= 5 compliant Scheme IronScheme definitely has macros, so yes but macros are overrated.

16:33 bbloom: serendipity1: yes... with the caveat that i don't know anything about iron scheme... although traditionally scheme has a more complex macro system than clojure or common lisp, and so you may wish to prefer to learn about macros in a simpler context

16:33 arrdem: s/SRSN/RNRS/g

16:40 serendipity1: arrdem, why do you find homoiconicity and macro system overrated? I've some experience with homoiconicity (coding in mathematica, which is great but slow as hell) and it's the exact thing that makes me consider lisp for some auxiliary coding. In C# there's a mismatch between regular code and code generation. And then there is the generator for the code generator :)

16:43 arrdem: serendipity1: for some problems runtime code generation is awesome. I'm building a compiler for clojure this summer. Runtime code generation is what I do. That Clojure and other lisps have support for this baked in is awesome. However, after reading a ton of books on macros and runtime code generation I have yet to sit down on a problem and go "ah yes I can just generate code and eval it". There was one instance where I actually did do clojure code generati

16:44 turbofail: run-time code generation is great for transmitting functions over the wire

16:44 platz: The ugliness of code gen in non-homoiconic languages serves as a deterrent to over-use, and in C# or Scala it's not *that* bad, only requires an up-front learning investment

16:45 arrdem: yeah. Honestly I think that partial is probably the only runtime code generation that gets used "regularly".

16:46 but that's just my 2c.

16:46 Bronsa: arrdem: your previous message cut at "I actually did do clojure code generati"

16:46 arrdem: Bronsa: :/ I gotta get ERC to resume splitting long messages.

16:47 on I have yet to sit down on a problem and go "ah yes I can just generate code and eval it". There was one instance where I actually did do clojure code generation, but that was a parser generator and arguably not a nice one either.

16:47 Bronsa: arrdem: tell me how to do it once you figure it out :)

16:48 turbofail: partial?

16:48 arrdem: Bronsa: I think it's something to do with channel spam protection settings.

16:48 turbofail: i don't think partial does any code gen

16:50 andyf: inc Bronsa

16:51 How does one do that? It's been so long since I've seen an example I've forgotten.

16:51 arrdem: turbofail: functions in jvm clojure exist only as IFn classes. In order to express a partial application you have to generate a new one-off class instance which serves to wrap the partial'd arguments together with the apply machinery to insert the application arguments.

16:51 andyf: (inc Bronsa)

16:51 lazybot: ⇒ 22

16:52 andyf: Not for something just now, but for enhancements and fixes to tools.analyzer(.jvm) throughout Dec and Jan :)

16:52 Bronsa: hah, thanks

16:53 gastove: Okay room, question: can you pass a namespace as an argument to a function?

16:53 andyf: Sounds like those libs are getting use by core.async and core.typed now?

16:53 turbofail: arrdem: are you sure? i don't think that's what partial actually does

16:53 er ok it does make a new instance

16:53 but not a new class

16:54 Bronsa: andyf: yep

16:54 andyf: gastove: Yes, you can, but that doesn't necessarily mean you can do anything you might want to be able to do with it.

16:54 turbofail: thus not really code-gen

16:54 ,(map class [(partial + 3) (partial - 5)])

16:54 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

16:54 andyf: ,(the-ns 'clojure.core)

16:54 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

16:54 turbofail: interesting

16:54 Bronsa: wat

16:54 arrdem: wat

16:55 how did map just do that..

16:55 gastove: andyf: hrm, okay. Thanks! I'm probably better off defining some sort of attribute map and loading _that_ instead.

16:56 arrdem: turbofail: you're right, because in generally you could write a single partial that just does (fn [& args] (apply f (concat partial-args args))) which makes the generated f just an instance with a seq and an ifn.

16:56 amalloy: someone probably broke all of clojurebot's eval again

16:56 ,1

16:56 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

16:56 arrdem: turbofail: so not really code gen, just instance creation.

16:56 andyf: gastove: The expression I attempted to evaluate above (the-ns 'clojure.core), successfully returns a Java object of type clojure.lang.Namespace in my REPL. What were you hoping to do with that namespace arg in the function?

16:56 amalloy: he'll recover. in the mean time, lazybot's eval is more fun anyway, right???

16:56 lazybot: amalloy: How could that be wrong?

16:56 clojurebot: Pardon?

16:59 gastove: andyf: uh, honestly, probably something that isn't idomatic Clojure (I'm newish to this). I was defining a namespace that describes several pieces of an MVC-esque model -- then in a controller, I wanted to load that namespace, then pass it to a function that checks to see if migrations have already been done for that model.

17:00 andyf: so something like (defn migrate [model] (if-not (migrated? model/table-name) (do-db-things-with model/spec))

17:00 andyf: gastove: ok. I don't think I have any experience to say whether that would be a good approach or not.

17:01 serendipity1: arrdem, For me code generation mainly comes here: I find that when I heavily adhere to SRP I often need to abstract away the whole pattern of wiring between objects. And IoC containers come somewhat short for that. What often changes when I find a better solution to the problem is also the whole pattern of communication between objects.

17:01 gastove: andfy: Honestly, I don't either :-P

17:02 serendipity1: So when the wiring/communication pattern is generated then only localized change in the generating code is required. So when I work towards more robust abstractions it also pushes me towards code generation more and more, and code generation in non-homoiconic languages, I feel, doesnt hack it

17:08 anyways, g'night everyone, thanks for some lisp/scheme clarifications

17:11 arrdem: Bronsa: ever consider core.typed-ing tanal? I've been kicking the idea around and I'm not sure it's possible since you want to support host local tanal AST extensions and ctyped would probably require a total AST definition.

17:17 Bronsa: arrdem: ambrose started working on annotating taj a while ago but I believe he decided core.typed is not suited for validating its ast (I may remember wrongly though)

17:18 arrdem: I don't know if that changed but core.typed is'nt really suited for validation of runtime emitted data, that's more of a job for something like Schema

17:18 isn't*

17:20 arrdem: also since core.typed depends on taj that would probably cause circular dependency issues

17:22 arrdem: Bronsa: the reason I say this is a typing problem is that a type system lets you say no other datastructure could ever exist where schema just says "well it looks good for now" which is much weaker.

17:22 Bronsa: definitely WRT the circular dependencies, probably even using the new lightweight build.

18:06 noncom|2: is java interop of form Class/staticMember resolved during runtime or compile time?

18:07 bbloom: compile time

18:08 noncom|2: how can i take it to realtime?

18:08 would (constantly Class/m) work?

18:08 bbloom: noncom|2: the simplest thing to do is:

18:08 #(Class/m %)

18:09 noncom|2: but the static member is a variable, it is not a method...

18:09 it can change in runtime though, so compile time does not cut it

18:09 bbloom: oh, you want a field?

18:09 noncom|2: aha

18:09 bbloom: there are some methods on clojure.lang.Reflector

18:10 noncom|2: no simpler way? :)

18:10 bbloom: not w/o more details about what you're trying to accomplish

18:11 noncom|2: i have a java library which relies on a static variable. this variable is assigned after ini (it is OpenGL context). i want to have a simple function to get it like (my-ns/gl-context).

18:12 the task is to make the function return the current value not the compile-time one..

18:12 bbloom: i'm not sure i follow

18:12 is there only one such static variable? or many of them?

18:12 noncom|2: hmm.. maybe i misunderstand something..

18:12 one variable

18:12 the global open gl context

18:13 bbloom: it's a public static field?

18:13 noncom|2: yes

18:13 bbloom: calling it like a function with no arguments should just get the field

18:13 (TheClass/theField)

18:13 noncom|2: ok, will try now

18:15 hmmm... nope. it returns a opengl context instance, just like with calling plain Class/method (w/o parens) but it does not give a desired result. maybe there is another mistake somewhere, i have to look for

18:16 but, hey, (Class/field) and Class/field give seemingly same results..

18:16 so i think what you adviced is right, but i have some other error in the code to look for. this was not the cause, as it looks like

18:16 bbloom: yes

18:18 noncom|2: found it! yep was another place :) thanks for helping though!

18:30 whilo: hi, in clojure i cannot override the pr serialisation of a record, right? in cljs it is a protocol: IPrintWithWriter

18:32 bbloom: (doc print-method)

18:32 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

18:32 whilo: in clojure it is a multimethod: print-method

18:32 bbloom: ,(doc print-method)

18:32 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

18:32 bbloom: &(doc print-method)

18:32 lazybot: ⇒ "; "

18:32 bbloom: argh.

18:35 iwillig1: okay

18:35 arrdem: is someone ddosing the bot with REPL breaking code?

18:36 locks: bot is still broken?

18:37 arrdem: ,(+ 1 2)

18:37 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: clojure.core/with-open requires an even number of forms in binding vector in clojure.core:>

18:38 arrdem: locks: I'll take that as a yes...

18:38 locks: :(

18:43 whilo: bbloom: hmm, print-method in core.clj has no docstring, do you know a way to overwrite the behaviour of a multimethod?

18:44 just curious, i am doing it wrong probably anyway

18:44 so i hopefully don't need it

18:44 (i have to rethink my current attempt)

18:44 bbloom: whilo: google it, it's kinda a weird ugly spot in clojure core, but works fine once you get it down

18:45 whilo: ok, thx. nice dendrology talk btw.

18:48 bbloom: got it, thx

18:48 bbloom: whilo: glad you liked it, thanks!

19:04 noncom|2: does nrepl have any dependencies besides clojure and java?

19:05 there is no project.clj, so i am not sure

19:05 but it look sso

19:05 *so

19:07 looking at the sources seems like proving that

19:09 kschrader: anyone know how to use the #uuid reader with a Var?

19:10 it works fine if I pass it a UUID String

19:10 but as soon as I put that same sting in a Var it blows up

19:11 Example: https://gist.github.com/kschrader/c41891bd6bc78dd2b653

19:11 noncom|2: maybe @a?

19:12 kschrader: nope, can't deref a String

19:13 whodidthis: (def a #uuid "538ba7b2-5034-4146-a1d0-884eebfce27f")

19:13 hiredman: kschrader: reading and evaluating are different things

19:14 when you (def a "foo") a is read in as the symbol a, but evaluated to the string "foo"

19:14 #uuid "..." is transformed by the read (before evaluation has happened) in to a uuid object

19:14 kschrader: ah, that makes sense

19:14 thanks hiredman

19:19 noncom|2: kschrader: (read-string (str "#uuid \"" a"\""))

19:19 works

19:20 kschrader: noncom|2: that's helpful, thanks

19:20 makes sense now

19:27 noncom|2: kschrader: although i'd use something like (java.util.UUID/fromString a)

19:31 gfredericks: noncom|2: the pom.xml isn't that hard to read

19:33 noncom|2: gfredericks: yeah, but i never read one before :D

19:33 but still it looks like there is nothing external, from whata i can say

19:33 looked at the pom too

19:33 gfredericks: I think contrib projects tend to be pretty low on dependencies

19:34 at worst they depend on another contrib project? not 100% sure about that

19:34 noncom|2: looks like nrepl is clear on that - nothing external

19:34 this is very good for me

19:40 gfredericks: how long can GC pauses get?

19:41 <8GB of ram

19:52 munderwo: Hi all. Im trying to :require a defrecord from another namespace. code here https://www.refheap.com/86178

19:54 It seems like im not doing the correct :require somewhere or :import. Any ideas?

19:59 tolstoy: munderwo: Just a guess, but might you need to (:require [raft.log :refer [->LogEntry]])

19:59 Or maybe just use (LogEntry. 0 0 "Foo")?

20:04 yedi: are their any clojure libs / interfaces that make weka not terrible to use

20:06 ahem, there*

20:09 munderwo: tolstoy: hmm. didnt seem to do the trick. I've got a work around for now. I tried the (LogEntry. 0 0 "Foo") as well. but same error. Not sure what the dealio is. would like to work it out for future tho.

20:18 tolstoy: munderwo: The way I've done similar things is to have a "make-log-entry" function in the original namespace.

20:18 munderwo: Then just use that to construct new entries.

20:20 The record definition stays in its own namespace, etc.

20:20 munderwo: tolstoy: ahh ok fair enough. I've got an "append" in that namespace. so I guess I could just change that around to take the vaues rather than the record. thanks!

20:20 tolstoy: munderwo: For what it's worth, I also tend to define a "protocol" that the record implements for additional functions that take that record. Then just import the protocol.

20:21 But that's probably over-engineering for my uses. I like to practice, though. ;)

20:21 munderwo: Yeah I looked at protocols. And it looked like It could do what I wanted. But then it didnt seem like you could specify the record that you wanted it to work on? I might have missed something though

20:22 You could when you did the extend-protocol but not the base?

20:22 tolstoy: (defrecord Blah [p1 p2] IProtocol (fn-1 [_]) (fn-2 [_])))

20:23 I use it for service lifecycle stuff.

20:23 A protocol with "start" and "stop".

20:23 Then I have different records, each implement (at last) that protocol.

20:23 defrecord WebService or defrecord LogService and so on.

20:25 * ashleah{K} is back (gone 00:01:42)

20:26 tolstoy: Each of those records held the "state". DB conns, or web-server instance, whatever. And each with a (make-web-server <port>) fn.

20:27 Not much better than, say, using atoms in a map. *shrug*. protocols seems more useful to library writers.

20:27 munderwo: fair call.

20:28 Hey any idea why '=' doesnt work on a defrecord after persisting to disk and reading it back? (in edn format?) is it because = is memory based not value based?

20:28 and if so how do I make it memory based? apart from a function?

20:29 tolstoy: Don't know. Maybe try == instead?

20:29 hiredman: tolstoy: == is only form numbers and the docstring for it says so

20:29 tolstoy: Oh, maybe that's number only.

20:30 hiredman: munderwo: = on defrecords considers types, which on the jvm depends on which classloader loaded the class

20:30 in clojure that can all get very tricky

20:31 so likely the reader is instaniating a different jvm class for your defrecord when you read it in than it has for what ever you have in memory

20:31 which could happen a few different ways

20:32 if you created an instance of a defrecord, (def foo (->Foo)) then reloaded the definition of Foo, new instances of your Foo record won't be equal to the one defed in foo

23:59 pcn: Has anyone else had problems with tutorial-05 in modern-cljs? I'm getting emitted code that's somewhat different from the example, but I don't know enough js to know if it's kosher

Logging service provided by n01se.net