#clojure logs

2012-10-14

00:10doomlord_does clojure come with opengl bindings out of the box
00:13ChongLino
00:13ChongLiyou use a java library
00:13ChongLisuch as lwjgl
00:13doomlord_ok; i'll google, thanks. i've not touched java
00:14ChongLiclojure makes it really easy to integrate java libraries into your work
00:14ChongLithe interop is beautifully done (and first class)
00:15doomlord_i like the idea of language choice with a common back end :)
00:22ChongLiyeah, it works surprisingly well
00:23doomlord_I'm not keen on java at all but clojure and scala are interesting
00:24ChongLiI haven't looked too much into scala (it seems way too complex for me)
00:25ChongLibut clojure is brilliant
00:25doomlord_coming from c++, scala looks nice.
00:25ChongLirich hickey is a genius
00:26ChongLiscala looks to me like a "kitchen sink" design
00:26ChongLiwhereas clojure is very small and deliberate
00:26doomlord_what interests me about a lisp is the prospect of macros for data-driven coding; I've been through the mess of #defines and templates to emulate things that are missing in c++. (x-macros)
00:26ChongLiyeah
00:27ChongLithere's something really profound in having a language written in its own data structures
00:27doomlord_exactly
00:31doomlord_I like haskell a lot (what i know of it so far) but find the record system problems grate a bit
00:32ChongLiyeah
00:32ChongLiI've used haskell somewhat as well
00:33ChongLibesides the record syntax, I find myself really annoyed that so many of the libraries in haskell were written before a lot of the current techniques were discovered
00:33ChongLi(such as bagwell's tries)
00:33doomlord_what i like most about it is the type-inference and partial application. i think F# could be perfect (those features plus straightforward OOP style record acess) but prefer something crossplatform
00:34ChongLiclojure has partial application, it's just a bit clunky to use
00:34doomlord_hence looking at clojure and scala. Been dabling with lisp for the past couple of weeks.
00:34ChongLiit's easier if you alias partial to something short like p
00:34ChongLiand comp to c
00:35ChongLithere are always tradeoffs though
00:35doomlord_been using 'pretty-mode' in emacs , interesting having a lambda symbol :)
00:35doomlord_i guess if you're going to compose AND partially apply, you might aswell use a lambda
00:35ChongLiI turned that off, my font did look so great
00:36ChongLidid *not* look so great
00:36ChongLirather
00:36ChongLiwhen I came to clojure, the real eye-opener for me was how it based everything off of the sequence abstraction instead of some concrete data structure like lists
00:37doomlord_to reduce a bit of the bracketing in common lisp i made a macro (fnx ...) which is just (lambda(x) ... ) but i gather clojure has such a shorthand inbuilt
00:38doomlord_is [a b c] a sequence or a vector
00:38doomlord_is it designed to be optimized for random access
00:39ChongLi[a b c] is a vector
00:40ChongLioptimized for random indexing
00:40ChongLiand appending to the end
00:41ChongLi(a b c) is either a list or a sequence
00:42AtKaaZ,(class '[a b c])
00:42clojurebotclojure.lang.PersistentVector
00:43doomlord_(def a '(1 2 3)) ... thats a sequence?
00:43AtKaaZ,(class '(a b c))
00:43clojurebotclojure.lang.PersistentList
00:43AtKaaZ,(class (seq '(a b c)))
00:43clojurebotclojure.lang.PersistentList
00:43AtKaaZ,(seq? '(a b c))
00:43clojurebottrue
00:43AtKaaZ,(seq? '[a b c])
00:43clojurebotfalse
00:44doomlord_ah i thought a vector would be a subtype of sequence
00:44mattmoss,(sequential? '[a b c])
00:44clojurebottrue
00:45michaelr525,(seq? [a b c]
00:45clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
00:45ChongLibasically everything can be turned into a sequence with seq
00:45doomlord_i like the ? ! conventions for boolean tests and mutation
00:45michaelr525,(seq? [a b c])
00:45clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(NO_SOURCE_PATH:0)>
00:45michaelr525,(seq? [:a :b :c])
00:45clojurebotfalse
00:45doomlord_i also like the call notation for element access
00:45ChongLi,(seq? '(seq [a b c]))
00:45clojurebottrue
00:45michaelr525ah right
00:45mattmossTo quote amalloy: "All seqs are sequential, but not all sequential things are seqs."
00:46doomlord_so a seq means its *only* accessible sequentially
00:46AtKaaZ,(sequential? "abc")
00:46clojurebotfalse
00:46AtKaaZ,(sequential? (seq "abc"))
00:46clojurebottrue
00:46thmzlt,(def foo "bar")
00:46clojurebot#<Exception java.lang.Exception: SANBOX DENIED>
00:46ChongLia seq means it can be accessed with first and rest
00:47ChongLiand that first and rest operate uniformly
00:47thmzlt,"hi"
00:47clojurebot"hi"
00:47ChongLiso that all seq-based functions take seqables and convert them to seqs while operating on them
00:47AtKaaZ,'hi
00:47clojurebothi
00:48ChongLi,(map #(+ % 1) [1 2 3])
00:48clojurebot(2 3 4)
00:48ChongLisee how it takes a vector and returns a seq?
00:48ChongLi,(seq? '(map #(+ % 1) [1 2 3]))
00:48clojurebottrue
00:49AtKaaZ,(map println [1 2 3])
00:49clojurebot(1
00:49clojurebot2
00:49clojurebot3
00:49clojurebotnil nil nil)
00:49doomlord_can you emulate CLOS's multiple dispatch with macros
00:50ChongLiyou can turn the result back into a vector as well
00:50ChongLi,(vec (map #(+ % 1) [1 2 3]))
00:50clojurebot[2 3 4]
00:50AtKaaZyep, that's how I noticed the output isn't part of the return
00:50ChongLiI have no experience with common lisp
00:50tomoj&(mapv inc [1 2 3])
00:50lazybot⇒ [2 3 4]
00:51tomojdoomlord_: no need, we have multimethods
00:51ChongLiyeah, multimethods are really cool
00:51tomojarbitrary dispatch functions
00:51tomojI think that's more powerful than clos's dispatch, but I never used clos
00:52doomlord_what are multimethods
00:52ChongLithey allow you to dispatch on the type of multiple arguments
00:52tomojjust google "clojure multimethods"
00:53doomlord_is that the same as multiple-dispatch http://en.wikipedia.org/wiki/Multiple_dispatch
00:53ChongLiwhereas most traditional OOP languages are single dispatch; they dispatch on the type of the receiver object
00:53ChongLiyes
00:53tomojno
00:53ChongLioh, no?
00:53tomojit's more powerful than multiple dispatch
00:54ChongLihttp://clojure.org/multimethods
00:54tomoj(defmulti collatz even?)
00:55AtKaaZ,(let [-+1 -1] (Math/abs -+1))
00:55clojurebot1
00:55doomlord_ah perhaps it gives more control over dispatch choice, from what it says on clojure.org
00:56AtKaaZ,(let [+ -1] (Math/abs +))
00:56clojurebot1
01:03AtKaaZ,(let [% 1] (list %%%%%))
01:03clojurebot(1 1 1 1 1)
01:04tomojheh
01:07AtKaaZ,(#(doall (let [& 1 % 2] (str & %& % &%))) 3)
01:07clojurebot"1212"
01:08tomoj&'(str & %& % &%)
01:08lazybot⇒ (str & %& % & %)
01:10AtKaaZthe %& was eaten
01:11AtKaaZ,(#(let [& 1 % 2] %&) 3)
01:11clojurebotnil
01:11AtKaaZ,(#(let [& 1 % 2] %&) 3 4 5 6 7)
01:11clojurebot(4 5 6 7)
01:11AtKaaZmakes sense
01:14AtKaaZ,(#(let [& 1 % 2] (str %&, %1, %2, %3)) 3 4 5 6 7)
01:14clojurebot"(6 7)245"
01:15tomojhuh?
01:15AtKaaZ,(#(let [& 1 % 2] %1) 3)
01:15clojurebot2
01:15AtKaaZno idea
01:16tomoj&'#(let [% 2] %1)
01:16lazybot⇒ (fn* [p1__74259#] (let [p1__74259# 2] p1__74259#))
01:16tomojguess it's because % and %1 get the same gensym
01:17tomojah, yeah, makes sense
01:17AtKaaZoh that does make sense
01:18AtKaaZ(inc tomoj)
01:18lazybot⇒ 4
01:18tomojsimilarly ##(#(let [%2 2] %2) 1 1)
01:18lazybot⇒ 2
01:21AtKaaZ,(#(let [%2 2] %&) 1 3 4)
01:21clojurebot(4)
01:21AtKaaZsince %2 is used, %& takes the rest from %3...
01:25doomlord_trying to use spit/slurp from the clojure repl its telling me unsable to resolve symbol; do i have to import something or use a namespace qualifier to get file IO functions?
01:26AtKaaZ,slurp
01:26clojurebot#<core$slurp clojure.core$slurp@77c37078>
01:26tomojjust paste the error (somewhere else (e.g. gist.github.com) if it's more than a few lines)
01:26doomlord_java.lang.Exception: Unable to resolve symbol: spit in this context (NO_SOURCE_FILE:49)
01:26tomojdid you do (in-ns 'foo) or something?
01:26doomlord_not that i know of
01:26AtKaaZ,(find-ns 'clojure.core)
01:26clojurebot#<Namespace clojure.core>
01:27tomojdoomlord_: try (ns-refers *ns*)
01:27AtKaaZwhat does it say if you do that?
01:27doomlord_this is clojure installed on ubuntu linux with apt-get install clojure
01:27tomojwaat
01:27tomojdidn't know they made a deb out of it
01:28tomojthat's version 1.1
01:28doomlord_thst displays a whole load of symbols
01:28tomojyou almost definitely shouldn't use it
01:28doomlord_hahaha ok
01:28tomoj&(:added (meta #'spit))
01:28lazybot⇒ "1.2"
01:28AtKaaZnice one
01:28tomojjust get leiningen
01:29AtKaaZ,*clojure-version*
01:29clojurebot{:interim true, :major 1, :minor 4, :incremental 0, :qualifier "master"}
01:29doomlord_will leiningen update my current install
01:29tomojno, I would purge that shit
01:29tomojleiningen is just a binary you put on your PATH, and it only 'installs' things into your home directory
01:30AtKaaZbash script?
01:31tomojyeah, it downloads the clojure parts of leiningen and runs them
01:31AtKaaZthat reminded me of gloss, I've to get on it, been procrastinating
01:32AtKaaZ(I mean to use it)
01:32tomojztellman's gloss?
01:32AtKaaZyes
01:32AtKaaZthe binary part reminded me:)
01:33tomojoh, I see, yes, s/binary/bash script/
01:35AtKaaZis aleph something like netty?
01:37tomojaleph wraps netty
01:38AtKaaZyes!! I are glad to hear zat
01:38AtKaaZI was reading this: https://github.com/ztellman/aleph/wiki/TCP but it's clear when reading this: https://github.com/ztellman/aleph
01:39tomojhuh, I think I just observed that having (an old version of) aleph on the classpath makes clj-http always return nil
01:40tomojno, that wasn't it
01:41AtKaaZnow I'm curious what actualy happens
01:42tomojhopefully it does not cause any trouble
01:43tomojI removed aleph and I'm still getting nil
01:43AtKaaZtrack it down? :)
01:47doomlord_ok got 'spit' now
01:47AtKaaZif I modify project.clj 's dependencies am I stuck with having to restart the repl to have effect?
01:48tomojyes, but see https://github.com/cemerick/pomegranate
01:50AtKaaZ"12 bajillion dependencies" lol
01:53tomojhmm, this is very odd. when I use :as :json, http/get returns nil
01:53tomojotherwise it works fine
01:54tomojlein-pedantic doesn't complain
01:54tomojbut this was working fine an hour ago
01:56tomojah shit
01:56tomojaleph and friends were AOT'd in one of my deps
02:00AtKaaZbut there were no errors about this? I take it it's fixed if you remove the AOTz?
02:01AtKaaZ"Leiningen Managed Dependencies issue: unknown problem (missing exception message)"
02:02AtKaaZis there a function that checks for invalid chars?
02:03tomojAtKaaZ: yeah, it's fixed. so apparently it was aleph's fault (but again, old version, so maybe it's fixed now)
02:03tomojwhat does "invalid" mean?
02:04AtKaaZok but it sounds like it would've been tough for me to track that down
02:05AtKaaZI simply add ["gloss" "0.2.1"] to dependencies and I get that in problems (in eclipse), so I figured maybe I got invalid chars in my paste like it happened with this: https://github.com/quil/quil/commit/d0312f0f119db066a8d613dec8803571b92bea39
02:06AtKaaZ, ["gloss" "0.2.1"]
02:06clojurebot["gloss" "0.2.1"]
02:09AtKaaZrunning lein is better, i can see the exception heh
02:11AtKaaZwhich is this: https://gist.github.com/3887551
02:12AtKaaZok looks like I fail
02:13AtKaaZit's supposed to be this: [gloss "0.2.1"]
02:14AtKaaZmindless copypasting = bad
02:16AtKaaZdoes this work with lein1 though ? in dependencies: ["gloss" "0.2.1"] instead of [gloss "0.2.1"]
02:36wei_what are best practices for deploying clojurescript? is One still the best example to follow?
02:37tomojwhat a weird error
02:37tomoj"java.lang.String cannot be cast to clojure.lang.Named"
02:38scottjwei_: maybe checkout lein-cljsbuild
02:39tomojinteresting INamed isn't in cljs
02:39wei_checking out the lein-cljsbuild examples right now, thanks
03:03technomancydid infoq remove the ability to download the talk videos by doing view source? =(
03:05technomancyoh, nope it's just a user-agent tweak necessary
03:05ivanyoutube-dl used to be able to do it, until infoq broke it a few weeks ago
03:05tomojdo tell
03:05ivanin Firefox I can send an iOS UA and right click -> save video
03:06tomojI see rtmpe :(
03:06technomancyyeah I just do M-x user-agent android, then view source and C-s for mp4
03:08tomojI was hoping I'd find your .conkerorrc, thanks for publishing
03:08technomancy=)
03:35tomojlooks like you can get it without changing user agent by concating the cloudfront path for the flash player and the path from the rtmpe query arg
03:41aperiodictomoj: i don't understand that error. then how does ##(name "Alice") work?
03:41lazybot⇒ "Alice"
03:41aperiodici suppose i can find that out myself
03:42aperiodici see it has a special case for strings
03:42aperiodici guess i just assumed strings were named only because name worked on them
03:43tomojme too
03:43tomojand I assumed they were INamed in cljs
03:44aperiodicbut INamed doesn't exist?
03:52tomojnope
03:52tomojname and namespace use manual (predicate) type dispatching
03:53tomoj(and keywords are just strings with an extra character on the front)
04:16aperiodicwhat's the easiest way to do a forcat?
04:17Raynes(reduce concat (for ..))
04:18RaynesIt's lazy, so the difference isn't that significant.
04:19aperiodicthanks
04:25AimHereWhy (reduce concat ...) instead of (apply concat ...)
04:25AimHereI'd have thought the latter is more likely to be optimized, in the cases where they're equivalent...
04:32wei_is there any way to check if my extern is getting loaded correctly on compilation? https://gist.github.com/3887952
04:33wei_I'm suspicious because I don't get any warnings even if I change the externs file name, but I'm seeing a JSC_MISSING_PROVIDE_ERROR either way
04:48tomojwei_: looking at the cljs compiler, it seems like you should get an error if the extern you list doesn't exist
04:48tomojbut I'm not sure
04:49wei_I'll run the compiler by itself to check. I've been running it through lein cljsbuild
04:49tomojhttps://github.com/clojure/clojurescript/blob/master/src/clj/cljs/closure.clj#L147
04:49tomojit looks like it calls slurp
04:49tomojwhich errors if the file doesn't exist
04:52tomojhmm
04:52tomoj(if use-only-custom-externs all-sources (into all-sources (CommandLineRunner/getDefaultExterns)))
04:52tomoj(cond-> all-sources use-only-custom-externs (into (CommandLineRunner/getDefaultExterns)))
04:52tomojis a singleton cond-> harder to read than an if?
05:25amalloyRaynes, AimHere: (reduce concat ...) is never a good idea. use apply
05:26amalloyoh, and aperiodic: ^
05:27tomoj&(:added (meta #'clojure.repl/pst))
05:27lazybot⇒ "1.3"
05:27tomoj:(
05:35amalloytomoj: are you still on 1.2 or something? i thought i was the last one to upgrade
05:40tgoossensHi. I'm going trough the sourcecode of "Ref.java"
05:40tgoossensI noticed that there are a lot of 'invoke()' methods
05:41tgoossensa lot of overloads with an increasing amount of arguments
05:41tgoossensand at a certain point
05:41tgoossensinvoke( .... Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20, Object... args)
05:42tgoossensthere is Object... 'args' , why not do that immediately?
05:47Chousuketgoossens: for performance
05:50sveduboisHow I can translate these java lines to clojure?
05:50svedubois float[] emboss = new float[] { -2,0,0, 0,1,0, 0,0,2 };
05:50svedubois Kernel kernel = new Kernel(3, 3, emboss);
05:50sveduboisThe first line I suppose is: (def emboss (float-array [-2 0 0 0 1 0 0 0 2]))
05:51sveduboisBut I am not sure... And the second line I don't have idea
05:51Sgeonew in Java is representable with the new special form in Clojure
05:51Sgeo(new Kernel 3 3 emboss)
05:52SgeoThere's reader syntax for that, though:
05:52Sgeo(Kernel. 3 3 emboss)
05:52lpvbsvedubois: you can use commas
05:52lpvb(def emboss (float-array [-2 0 0, 0 1 0, 0 0 2]))
05:52Sgeo,'(Kernel. 3 3 emboss)
05:52clojurebot(Kernel. 3 3 emboss)
05:52lpvb(def emboss (float-array [-2, 0, 0, 0, 1, 0, 0, 0, 2,,,,,,,,,,,,]))
05:52Sgeo,(macroexpand-1 '(Kernel. 3 3 emboss))
05:52clojurebot(new Kernel 3 3 emboss)
05:53SgeoHow do I check to see if it's reader syntax or macroexpand, this doesn't make it obvious which it is
05:53Sgeo,(macroexpand-1 #(foo))
05:53clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(NO_SOURCE_PATH:0)>
05:53Sgeo,(macroexpand-1 '#(foo))
05:53clojurebot(fn* [] (foo))
05:53SgeoOh, huh, I guess it does. So what level of sugar is Blah. on?
05:55Sgeo,'(.foobar)
05:55clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Malformed member expression, expecting (.member target ...)>
05:55Raynesamalloy: Why?
05:55Sgeo,'(.foobar blah)
05:55clojurebot(.foobar blah)
05:55Sgeo.?
05:55amalloy&(first (reduce concat (range 1e5)))
05:55lazybotjava.lang.StackOverflowError
05:56amalloy&(first (apply concat (range 1e5)))
05:56lazybotjava.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long
05:56amalloy&(first (apply concat (repeat 1e5 '(1))))
05:56lazybot⇒ 1
05:57RaynesI don't quite understand why the first thing happens.
05:57Sgeosvedubois, anyway, new Foobar(baz, blah) in Java is (Foobar. baz blah) in Clojure, or equivalently (new Foobar baz blah). The first is preferred
05:57Sgeo&(first (reduce concat (repeat 1e5 '(1))))
05:57lazybotjava.lang.StackOverflowError
05:57Sgeoreduce needs to walk the entire sequence
05:58SgeoIt's like Haskell's foldl, doesn't work on infinite lists, and doesn't know how to stop.
05:58RaynesOh, I was under the impression it was lazy.
05:58RaynesI see why that doesn't make sense now though.
05:59amalloySgeo: there's nothing wrong with walking the entire sequence, though. that doesn't give you the stackoverflow
06:00amalloy&(let [r (reduce concat (repeat 1e5 '(1)))] (+ 2 2))
06:00lazybot⇒ 4
06:00RaynesWell, there is plenty wrong with it.
06:00Sgeoohdeargod, please tell me that reduce uses loop/recur
06:01amalloythe stackoverflow comes from attempting to realize the first element, which has to traverse through all ten thousand thunks created by concat before it can find even a single element
06:02Sgeo,(class (reduce concat (repeat 1e5 '(1))))
06:02clojurebotclojure.lang.LazySeq
06:02Sgeohmm
06:02Sgeo,(class (reduce + (repeat 1e5 '(1))))
06:02clojurebot#<ClassCastException java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to java.lang.Number>
06:03Sgeo,(class (reduce + (repeat 1e5 1)))
06:03clojurebotjava.lang.Long
06:03Sgeoconcat returns lazy sequences?
06:07goraciohi there clojurescript question - how to handle "this" for example i have binding with bind to a click then i click on element and want to get value of attribute, so i need this in that case
06:10andrewmcveighgoracio: you need to use the "this-as" macro
06:10goracioexample ?
06:11andrewmcveighgoracio: (this-as this … ($ this))
06:11andrewmcveighso, whatever the 1st param to this-as is, you can use in place of javascript's 'this'
06:12goraciook will try
06:21sveduboisIs it correct this java to clojure conversion?
06:21sveduboisRaster newRaster = op.filter(raster, null);
06:21svedubois(def newRaster (.filter op (raster nil)))
06:22andrewmcveighsvedubois: nearly… (def newRaster (.filter op raster nil))
06:25andrewmcveighsvedubois: although, normally in Clojure, vars/names don't use camelCase. So it would be "new-raster", to be more clojure-like.
06:26raekthe line could also be translated as (let [new-raster (.filter op raster nil)] ...). 'def' is only for global variables
06:37frawrHello Kind people of the clojure community
06:38frawrCan anyone give some pointers on building a ring app?
06:40sveduboisIs this java to clojure conversion correct?
06:40sveduboisRaster raster = reader.readRaster(0, param);
06:40svedubois(def raster (.readRaster image-reader 0 param))
06:40sveduboisIn repl I obtain this error:
06:40sveduboisclojure.lang.Compiler$CompilerException: java.lang.UnsupportedOperationException: readRaster not supported!
06:41svedubois (def raster (.readRaster reader 0 param))
06:44Chousukeit is correct.
06:44goracio(this-as mid ($ mid)) gets window object not an element
06:45goracioandrewmcveigh: (this-as mid ($ mid)) gets window object not an element
06:46Chousukesvedubois: that exception is not a clojure one. it's calling the method fine, but the method is throwing a UO exception.
06:47Chousukesvedubois: also, are you sure you want to def "raster" as a global? usually it's better to use local bindings (ie. use let)
06:51andrewmcveighgoracio: can you paste-bin the bit of code that you're trying to get to work?
06:55tomojinteresting, datomic's built in transactions happened on 1 Jan 1970
07:08goracioandrewmcveigh: solved :) passed macro via anon fun - ... :click (fn [] (this-as me ( handler me))
07:09andrewmcveighgoracio: cool :)
08:16tgoossensI love how rich puts in 42 in all of his talks and even the sourcecode of clojure :p
08:17CubicHi! I'm getting a reflection warning "Reflection warning, NO_SOURCE_PATH:1 - call to invokeStaticMethod can't be resolved. " at the end of my program (at execution, not at compilation). Is that a clojure thing, or is it caused by my program?
08:17CubicI'm running with lein run
08:53sveduboisIs correct this java to clojure conversion?
08:53sveduboisDataBufferUShort buffer = (DataBufferUShort) newRaster.getDataBuffer();
08:53svedubois(def buffer (doto (DataBufferUShort.) (.getDataBuffer new-raster)))
08:55tomojthat is like `buffer = (new DataBufferUShore()); buffer.getDataBuffer(newRaster); return buffer`
08:56sveduboisAnd how it could be written?
08:56tomojyou want (def buffer (.getDataBuffer newRaster))
08:57tomojperhaps (def ^DataBufferUShort buffer (.getDataBuffer newRaster))
08:57tomojbut you probably don't want def
09:31dabdwhy can't I use this map as function? ({:@id "Count", :$ "14751"} :@id)
09:32dabdI get a "Invalid token :" message
09:33Bronsa,:@a
09:33clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Invalid token: :>
09:33Bronsa:@a is not a valid keyword
09:34tomojare you trying to do {(keyword @id) :$ "..."} ?
09:34AdmiralBumbleBee@ is not valid in a keyword name
09:34AdmiralBumbleBeeonly * + ! - _ and anlphanumerics are
09:34Bronsa: is valid too
09:34Bronsa,:a:b:c
09:34clojurebot:a:b:c
09:35dabdyeah i got it
09:35AdmiralBumbleBeeoh, right Bronsa :)
09:35dabdthis map was obtained from a parsed json string
09:35AdmiralBumbleBeethe : is a bit important heh
09:35tomojI feel like we should have nested prefix lists in ns
12:25peppe21ciao
12:25peppe21!list
12:27peppe21list
13:14thmzltso I'm defining a macro that expands to a defn call around a binding call... is that ok or should I put the (binding ...) around the (defn ...)?
14:12tantamountainI’m trying ClojureScript (and ClojureScript One) for the first time. Cloned ClojureScript One into a folder, but running `lein repl` gets me: `FileNotFoundException Could not locate cljs/closure__init.class or cljs/closure.clj on classpath: clojure.lang.RT.load (RT.java:430)`.
14:12tantamountainThe REPL then apparently runs normally afterwards.
14:22tantamountainOh wait, never mind; forgot to run `lein bootstrap`.
14:56augustlare there any facilities to build "lazy maps"? I.e. maps that resolve their values when invoked, but then cache the value.
14:59SgeoWhy do regexes need a reader macro, what's wrong with just using strings?
15:01AdmiralBumbleBeeSgeo: I believe it makes a java.util.regex.Pattern
15:01Iceland_jackSgeo: isn't it because it treats the strings as raw as well: (re-pattern "\\d+") == #"\d+"
15:06SgeoYou know what would be nice? A version of partial that did something like (partial-subj assoc :a 5) == #(assoc % :a 5)
15:07ivanaugustl: I was curious too and just found https://bitbucket.org/kotarak/lazymap/src/5a2437e70a91/src/main/clojure/lazymap/core.clj?at=default
15:08jakovwhy are there no multiline comments for text in clojure?
15:08ivanstackoverflow tells me "If the keys are cheap to compute, but the values are expensive, you can return a full map with the correct keys, and values which are each delays; the caller can force only the values they need."
15:09ivan#_"Multi line comment"
15:10technomancyaugustl: you could reify whatever interface makes keys work and just plop a memoized function on top o fthat
15:11AdmiralBumbleBeeSgeo: why would you want partial there?
15:12SgeoBecause it seems common to treat the first argument of a function as a "subject" of sorts, and being easily able to make anonymous functions based on that assumption may be useful
15:12SgeoSimilarly to how partial is useful
15:15augustltechnomancy: ah
15:18technomancyaugustl: it depends what you want, really. a memoized function alone is half of what you're asking for; it just doesn't work with keys
15:18AdmiralBumbleBeeSgeo: why not just use an anonymous function literal?
15:18AdmiralBumbleBeeas in your example
15:18AdmiralBumbleBeeI'm curious if there'd be some other benefit
15:18SgeoSame reason that partial exists rather than people just using anonymous function literals
15:18augustltechnomancy: the keys are pre-defined, it's just the values that would be nice to look up run-time
15:19SgeoAlso, imo, there should be a function (defn $ [fn arg] (fn arg))
15:19SgeoIt has some utility sometimes
15:19SgeoAt least in Haskell it does
15:20SgeoAlthough in Clojure I guess it is as simple as #(%1 %2)
15:20SgeoBut still
15:20gfredericksSgeo: my beginner impression is that the primary utility of $ in haskell is changing the precedence of things, which isn't an issue in clojure
15:20Sgeo,(map #(%1 %2) [inc dec identity] [2 20 10])
15:20clojurebot(3 19 10)
15:21SgeoIn a 4clojure solution, I used #(%2 %1), which should just be flip $
15:21Sgeo(Actually, no, hmm. That wasn't the exact thing I used)
15:29SgeoWhy does every? have a question mark and some doesn't?
15:29Sgeo,(doc some)
15:29clojurebot"([pred coll]); Returns the first logical true value of (pred x) for any x in coll, else nil. One common idiom is to use a set as pred, for example this will return :fred if :fred is in the sequence, otherwise nil: (some #{:fred} coll)"
15:29Sgeo,(doc every?)
15:29clojurebot"([pred coll]); Returns true if (pred x) is logical true for every x in coll, else false."
15:29gfrederickssome isn't a predicate
15:43Frozenlo`Oh yesss... I named an argument the same as a function and was wondering why I was getting an error. -_-
15:56Sgeodoc is a macro?
16:00hyPiRion,(let [x every?] (doc x))
16:00clojurebotGabh mo leithscéal?
16:00hyPiRionyup.
17:09dnolencore.logic 0.8.0 beta1 going out!
17:22hyPiRionI never remember: Is "Programming Clojure" or "Clojure Programming" the best introduction to Clojure?
17:23hyPiRionOr is "Clojure in Action" a good book?
17:23brehautclojurebook.com is good
17:24jasonleafFor me "clojure in Action" is the best of three, shows me how to do more practical things with Clojure
17:29laughingcowhow does one set the class path so as to avoid class not found errors with respect to com.sun.jdi.virtualmachine when trying to run lein ritz?
17:29laughingcowI'm on windows 7 64bit
17:29hyPiRionOkay, thanks for the input.
17:29brehautstart by downloading virtualbox…
17:30laughingcowI already set the class path to c:\program files\java\jdk1.7.0\lib but I still get the exception
17:34laughingcowanyone?
17:34clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
18:22AtKaaZwhat project should I use for sending a POST in an attempt to try download a pdf from infoq without being existing user :)
18:22AtKaaZI might also need to set referrer(?)
18:24seancorfieldclj-http ?
18:24AtKaaZcool thanks, I'll look into it
18:25seancorfieldhyPiRion: just saw your Q about books - Clojure in Action is based on Clojure 1.2 so all the library stuff is outdated
18:25seancorfieldhyPiRion: i recommend the o'reilly book by cemerick et al "Clojure Programming"
18:27cemerickthanks seancorfield :-)
18:27cemerickhyPiRion: http://www.clojurebook.com if you're looking for an easy link
18:32Apage43AtKaaZ: Also, clojure.java.io/copy is useful combined with passing clj-http's request methods :as :stream
18:35Apage43(with-open [bodystream (:body (clj-http.client/get someurl {:as :stream}))] (clojure.java.io/copy bodystream (clojure.java.io/file "destinationfilename.pdf")))
18:35AtKaaZoh thanks
18:36Apage43you'd swap out /get with /post, I suppose, and probably pass whatever data is also necessary
18:37AtKaaZI wasn't sure what you meant until you gave the example
18:52mklappstuhlhey
18:52mklappstuhl(map :point3 (triangle1 triangle2))
18:52mklappstuhlI'm trying to get point 3 of each triangle
18:52mklappstuhltriangle is a hash-map
18:53Apage43if they each have a key :point3 that'd work
18:53Sgeo(triangle1 triangle2) assumes that triangle1 is a function or macro
18:54Apage43ah, yeah
18:54Sgeo[triangle1 triangle2] or (list triangle1 triangle2)
18:55Apage43i guess it doesn't explode outright since maps are fns. It tried to look up triangle2 in triangle1
18:55mklappstuhlah right, got it!
18:55Apage43and if points are some seqable, the map would also have not blown up, and just returned nils for whatever elements it found
18:57mklappstuhl(map :class (list test-triangle1 test-triangle2))
18:57mklappstuhl=> (nil nil)
18:58Apage43hm. you trying to get the Java class?
18:58mklappstuhlApage43, this could also be point1
18:59mklappstuhltest-triangle1 returns a valid triangle
19:02mklappstuhlthe (list triangle1 triangle2) thing returns a valid list of user/triangle functions
19:05mklappstuhl(def test-triangle2 (fn [] (Triangle (Point 2 3) (Point 1 1) (Point 8 1))))
19:05mklappstuhlthis is the definition of my test triangle
19:07lnostdalswank-clojure doesn't seem to work at all anymore, and nrepl / nrepl.el still isn't very usable ... what do people use these days? ritz?
19:08lnostdal(swank-clojure just stopped working now with latest clojure from git .. AFAICT)
19:09Apage43ritz is probably the way to go if you want to use swank
19:09lnostdal" No matching ctor found for class clojure.lang.Compiler$CompilerException" swank-clojure says now .. *shrug*
19:10lnostdali just want to hack clojure using emacs .. like, i thought, everyone else .. i don't care whether the backend is nrepl or swank
19:10Apage43I'm using nrepl.el
19:10lnostdalfwiw ritz doesn't work either .. https://github.com/pallet/ritz/issues/58
19:11lnostdalperhaps i instead should do what Paul Graham did in the 90's .. copy/pasting snippets of code to the terminal .... :)
19:12lnostdalnrepl.el is close to not usable .. it doesn't deal with threads correctly at all .. kind of makes all that nice support for dealing with concurrency in the language pointless x)
19:14Apage43well if everything sucks; https://github.com/clojure/tools.namespace
19:15Apage43at least that makes it a bit easier to do the repl in a separate window thing
19:16lnostdalheh, yes ... perhaps :)
19:16lnostdalkind of a bummer really
19:25mklappstuhlApage43, is ( map :key (list hashmap1 hashmap2)) _the_ way to extract a list of keys from a bunch of hashmaps?
19:26Apage43list of the values of the key :key, anyway
19:27SgeoYou could do (for [hashmap [hashmap1 hashmap2]] (:key hashmap)) but map is cleaner I think
19:36tomojwhat if "#[1 2 %]" read to `(fn* [x#] [1 2 x#]) ?
19:36tomojunfortunately doesn't work for maps (nor sets..)
19:36tomojbut vectors seem most common anyway
19:37technomancytomoj: isn't that just conj?
19:37tomojwell that's a silly example
19:38tomoj#[(str prefix %) value] was the real example that made me think of this
19:40Apage43#(do [(str prefix %) value])
19:40brehauttomoj: surely you meant to use juxt there?
19:41brehaut(juxt (partial str prefix) (constantly value))
19:42technomancy#(vector (str prefix %) value)
19:43tomojbrehaut: yeah, I thought of that, but I was formulating an example for someone who knows only js
19:43tomojand it seems verbose anyway
19:43brehautbut juxt!
19:43technomancyit's their lucky day; they get to learn about juxt =D
19:43tomoj:)
19:43tomojApage43: hadn't thought of that
19:44brehautand they can even use it in JS! http://swannodette.github.com/mori/#juxt
19:44tomojsurprised to not see constantly in mori
19:44brehautalthough it looks like there is a bug in the docs there
19:44Sgeomori?
19:45SgeoAh
19:45brehautmori is parts of clojurescript compiled for use as a js lib like underscore
19:45brehauttomoj: hmm yes me too. i dont know why not either
19:45tomojI have _.constantly in our underscore mixin anyway :)
19:45brehautha
19:50tomojoh, constantly is in mori
19:50tomojit's just docless I guess
19:51tomojundoc'd rather
19:54brehautright
19:55brehauttomoj: apparently thats my fault
19:59AtKaaZcan any existing users on infoq tell me the referrer used when trying to download slides from http://www.infoq.com/presentations/Datomic ? cause I seem to have the url right but won't work maybe without referrer(?) also how to specify referrer with clj-http?
20:01Apage43it's probably checking more than just the referrer
20:01AtKaaZyou're probably right
20:01AtKaaZanyway the url would be this: www.infoq.com/pdfdownload.action?filename=presentations/GoToCopenhagen2012-RichHickey-WritingDatomicinClojure.pdf
20:02Apage43but to send a referrer, you add :headers {"referer" "referrer url"} to the options map
20:02AtKaaZI did notice other blogs link to similar urls and not working
20:02Apage43notice "referer" with -one- R in the header name key
20:02AtKaaZApage43, great thanks ! oh i see
20:02Apage43HTTP spec misspelled it.
20:02AtKaaZlol
20:05hyPiRionseancorfield: Ah, thanks for that info.
20:08AtKaaZwell I found it in a different place: http://gotocon.com/dl/goto-cph-2012/slides/clojure/datomic-in-clojure.pdf
20:12AtKaaZthis might be a silly question but why do clojure people use apple laptops ?
20:15Apage43because windows is Too Damn Weird, and buying a laptop and installing a different OS on it is not for everyone
20:34seancorfieldAtKaaZ: i think it's a general trend in the FOSS community to use Apple or Linux, not Windows?
20:35seancorfieldmost (open source) langauges have a fairly poor experience on Windows because OSS devs tend to use Apple/Linux and that in turn causes more users of the OSS software to prefer Apple/Linux which just reinforces the poor experience on Windows
20:37seancorfieldI've used every version of Windows since 3.1 but I don't like it as a software development platform (it's fine as an office work machine or a content consumption machine - although I don't even use it for that)...
20:37seancorfield...I've always preferred a *nix platform for software development and Cygwin just doesn't cut it for me
20:37seancorfieldSo, no, it's not a silly question (and it deserves a sensible answer).
20:41AtKaaZalright, that makes sense, but coupled with what Apage43 said however, I'm still wondering why not just install the linux/unix on non-apple laptops? initially I was thinking maybe apple provided better service or longer guarantee period?(didn't check)
20:42Apage43again, it's nice to be able to buy a laptop that's usable out of the box
20:43Apage43For folks that develop software that is going to be run on a *nix mainly it makes a lot of sense. I imagine folks that develop windows desktop software, or games, or such have a lot more Windows machines floating about.
20:43Apage43Especially if it's a company machine, part of the new hire process shouldn't have to be installing a new OS on the laptop we just got you
20:44technomancyI use debian because it's pretty clear apple and microsoft don't have developers' best interest in mind.
20:44AtKaaZok, I guess I was imaining only the subset of laptops that exist without any preinstalled OSes (like windows) and having the user install linux on them, but also imagined that apple are more priced in comparison(didn't check this)
20:44seancorfieldlnostdal: I know technomancy is no longer supporting swank-clojure but have you mentioned the Clojure 1.5.0 master failure to him?
20:44seancorfieldtechnomancy: swank-clojure fails on projects with Clojure 1.5.0 master with Exception in thread \"main\" java.lang.IllegalArgumentException: No matching ctor found for class clojure.lang.Compiler$CompilerException, compiling:(swank/commands/basic.clj:182:24)
20:44seancorfield
20:45technomancyseancorfield: hm; haven't used 1.5 yet
20:45lnostdalseancorfield: not yet .. or well, now he knows .. :) .. i figured i'd move on
20:45technomancythat's not an AOT problem is it?
20:45Apage43my work laptop is a macbook partially because they had me doing iOS deve at one point, though =P
20:45technomancyI actually know next to nothing about the internals of swank
20:45seancorfieldtechnomancy: 1.5.0 is fine up until a very recent build that breaks swank-clojure
20:46seancorfieldand it looks more like a bug in Clojure TBH
20:46lnostdalyes, confirming the same; it started happing in very recent versions (git) of clojure 1.5
20:46lnostdaloh
20:46lnostdalinteresting
20:46seancorfieldAtKaaZ: I have a netbook running Ubuntu as my secondary machine but I find Ubuntu a bit clunky for day to day work
20:47seancorfieldand i really love my 27" quad core iMac :)
20:47technomancyweird, swank is throwing internal clojure compiler exceptions
20:47AtKaaZ:)
20:47technomancythat's wonky
20:47technomancyi guess that's what happens when you don't have ex-info =\
20:48technomancyseancorfield: I'd say it's swank using undocumented clojure internals that you should expect to break
20:48seancorfieldclojure 1.5.0 alpha 4 works, alpha 5 breaks
20:48seancorfieldso it was a commit between those versions that breaks swank-clojure
20:50seancorfieldmy guess would be this commit https://github.com/clojure/clojure/commit/1c8eb16a14ce5daefef1df68d2f6b1f143003140
20:50seancorfieldbut that's based on a quick glance
20:52hyPiRionThen it's pretty obvious swank is doing something weird with fn then.
20:52AtKaaZis ex-info from blind?
20:52technomancyex-info is from clojure.core in 1.4
20:53lnostdalhttps://github.com/clojure/clojure/commit/6bbfd943766e11e52a3fe21b177d55536892d132 line 6289 ?
20:54lnostdalthe argument list has changed: public CompilerException(String source, int line, int column, Throwable cause)
20:54lnostdalit takes a column now it seems .. i dunno
20:55lnostdalhttps://github.com/clojure/clojure/blob/6bbfd943766e11e52a3fe21b177d55536892d132/src/jvm/clojure/lang/Compiler.java#L6328
20:55lnostdalthe actual file after that patch
21:00tomojran into that problem yesterday too
21:03lnostdali guess src/swank/commands/basic.clj line 208'ish needs patching
21:04lnostdalnot sure how to extract a column number from a linenumberreader, though
21:04tomojbut needs to be a patch that detects whether clojure version is 1.5.0-alpha5 or greater?
21:04lnostdali... suppose
21:21doomlordhow does clojure react if you give it a map with repeated keys, or uneven key: value arrangement
21:22brehaut,{:a 1 :b}
21:22clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Map literal must contain an even number of forms>
21:22brehaut,(hash-map :a 1 :b)
21:22clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: No value supplied for key: :b>
21:23AtKaaZ,{:a 1 :a 2}
21:23clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Duplicate key: :a>
21:23doomlordi'm dealing with a fileformat which isn't really maps, it has multiple instances of the same 'key' in the same collection (its more like arrays of polymorphic objects).. i'm ust wondering what the best way to represent that in clojures' syntax would be.
21:23brehaut{:a [1 1]}
21:23brehautis a way
21:23brehautbut it might not be the best way depending on what you are doing
21:24brehautif each object in your file is a distinct object, it might just be a seq of maps is best
21:25doomlordalthough it looks a lot like maps.. maybe its better to make it vectors with keys strewn within.. and it wont react to vector acessors
21:25doomlordsorry wont react to key acessors i mean
21:26doomlordits the fbx file format
21:31tomojI think {:a 1 :a 2} is {:a 2} in the latest 1.5?
21:34seancorfieldlnostdal: good catch... yes, swank/commands/basic.clj is explicitly creating a compiler exception.
21:34seancorfieldyou could (try ... without column ... (catch Exception _ ... with column 1 ... )) i guess?
21:38lnostdali haven't figured out how to get, well, stuff .. to use a local swank-clojure snapshot.. i think
21:39AtKaaZcan you make each statement(erm, function call?) be inside a try catch ? somehow easily
21:40brehautlnostdal: any particular reason you want swank-clojure?
21:40doomlordis it possible to iterate/'map' over the keys and values of a map .. in the {:a 1 :a 2 :b 2} case getting (:a 1) (:a 2) (:b 2) passed in
21:41lnostdalbrehaut: yes, nrepl.el / nrepl isn't there yet
21:41brehautdoomlord: yes; with map
21:41brehautdoomlord: though you get vectors rather than lists
21:42AtKaaZtomoj: still duplicate with 1.5.0-alpha6
21:43SgeoWhat's wrong with nrepl?
21:44doomlordREPL says (def a {:a 1 :a 2 :b 2}) (map #(print %1) a) => ([:a 1][:a 2]nil [:b 2]nil nil) ... looks like what i want but what are the nills doing there
21:44AtKaaZhow does that work?
21:44AtKaaZwith the duplicate :a
21:45AtKaaZyou can prepend a (vec ...) to see, nil is the return from print
21:46hiredmanwin 15
21:46brehautdoomlord: you arent able to have duplicate map keys
21:47AtKaaZbut it looks like he was able to, I want to know how :)
21:47lnostdalok, yes; always sending 0 for column works .. seancorfield / technomancy
21:48doomlordok.. (map #(vector (% 0)(% 1)) { :a 1 :a 2 :b 2}) => ([:a 1][:a 2][:b 2]) ... i understand this breaks the traditional map acessor but this is doing whaat i want- and there are subsets whre some of the keys are unique: it tends to be just one key that is repeated
21:49doomlordmaybe its undefined behaviour..
21:49brehaut,(map (fn [[k v]] (str k " => " v)) {:a 1 :b 2})
21:49clojurebot(":a => 1" ":b => 2")
21:50doomlordi keep forgetting it has that nifty destructuring of arguments
21:51AtKaaZdoomlord, you reified the map accessor?
21:52doomlordthe way the source data works its most natural to shove it in that form
21:52doomlordthis must come up with xml too
21:54AtKaaZ,(hash-map :a 1 :b 2 :a 3)
21:54clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Duplicate key: :a>
21:54AtKaaZok that works on 1.5.0-alpha6
21:55AtKaaZwhich is probably what tomoj said
21:55tomojweird, I couldn't get it working here
21:55AtKaaZthis works: (hash-map :a 1 :a 2) but this doesn't: {:a 1 :a 2}
21:55tomojseemed like repl problems
21:55tomojyeah, neither worked for me, hmm
21:55AtKaaZ,(class {:a 1 :b 2})
21:55clojurebotclojure.lang.PersistentArrayMap
21:56AtKaaZ,(class (hash-map :a 1 :a 2))
21:56clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Duplicate key: :a>
21:56AtKaaZ,(class (hash-map :a 1 :b 2))
21:56clojurebotclojure.lang.PersistentHashMap
21:56doomlordits letting it through for me... but this laptop has an old cloujre from the ubuntu repos i think
21:56AtKaaZv 1.1 ?
21:56brehautyikes. dont do that
21:56AtKaaZ,*clojure-version*
21:56clojurebot{:interim true, :major 1, :minor 4, :incremental 0, :qualifier "master"}
21:56brehautleiningen
21:56doomlordi have the right version on my desktop
21:57Hodappblugh, Counterclockwise is being horrid
21:57HodappI suppose my one choice left if I want anything resembling an IDE is to use Emacs
21:57doomlordemacs is great!
21:58doomlordwindmove
21:58morkemacs is pretty good for clojure not perfect but very good.
21:58AtKaaZdoomlord, what version does your ubuntu clojure say it is? or doesn't it have the *clojure-version* ?
21:58Hodappbut this Eclipse tooling is just... shit-tastic
21:58morkwell it is eclipse
21:59doomlordi think its 1.2... 3 metres away, there is 1.5 installed i think. however i've had very little sleep recently and can't be arsed moving 3 metres right now
22:00HodappI had the REPL working... right now, I am unable to get it to evaluate anything at all.
22:01AtKaaZ,(defstruct s :b :c) (struct-map s :a 1 :a 2)
22:01clojurebot#<Exception java.lang.Exception: SANBOX DENIED>
22:01Hodappmork: what do you use?
22:02morkemacs
22:02AtKaaZdoomlord, I think taking some sleep sounds optimal at this stage
22:03AtKaaZ,(struct-map (create-struct :b :c) :a 1 :a 2)
22:03clojurebot{:b nil, :c nil, :a 2}
22:04Sgeo,(doc create-struct)
22:04clojurebot"([& keys]); Returns a structure basis object."
22:04AtKaaZwho knows how to create a PersistentTreeMap?
22:04Sgeo,(create-struct :b :c)
22:04clojurebot#<Def clojure.lang.PersistentStructMap$Def@3bc4284a>
22:04morkmonger has a macro called partial-query I want to construct a function that can take a vector of arbitrary length and merge everything together and apply the result to (with-collection)
22:05morkhow can I do this in clojure?
22:05GoshI have my code organized like this "src/main/clojure" for code and "src/test/clojure" for tests. I would like to have the same namesapces in test folder as I have in main folder. Is there a way to achieve this without having namespaces overlapping. My current solution which I dont like is, I wrapped all namespaces in "src/test/clojure" folder with a test namespace. Any better solution?
22:05brehautis with-collection a function or a macro?
22:05AtKaaZ,(struct (create-struct :b :c) "one" "two")
22:05clojurebot{:b "one", :c "two"}
22:06brehautAtKaaZ: struct‽ thats mighty old
22:06AtKaaZbrehaut: it is?
22:06brehautyes
22:06morkbrehaut: it is a macro
22:06AtKaaZbut it has extends, sorta
22:07brehautAtKaaZ: im pretty sure it its the next best thing to deprecated if not actually deprecated
22:07AtKaaZbrehaut: what should be used instead?
22:07brehautjust a map
22:07brehautor, if you need polymorphic dispatch, records
22:07brehaut(by polymorphic dispatch i of course mean implementing interfaces or protocols)
22:08brehautAtKaaZ: http://clojure.org/data_structures#Data%20Structures-StructMaps note the note
22:09AtKaaZawesome thanks
22:09morkI'm thinking that I can just do something like (map (partial-query) conditions)
22:18morkbrehaut: any suggestions?
22:19brehautnope
22:19brehautonly that applying anything that looks like a macro is not so much fun
22:20morkaww
22:21morkhmm guess I'll come back to the idea later when I get more comfortable with clojure
22:22morkany answer I find will probably overcomplicate what I'm trying to do at the moment anyway.