2011-03-18
| 00:48 | tufflax | ,(macroexpand '(with-open [r (java.io.FileReader. "asdf.txt")] (.read r))) |
| 00:48 | clojurebot | (let* [r (java.io.FileReader. "asdf.txt")] (try (clojure.core/with-open [] (.read r)) (finally (. r clojure.core/close)))) |
| 00:48 | tufflax | I find that "clojure.core/close" strange... |
| 00:50 | tufflax | I mean, FileReader doesn't have a method name clojure.core/close. How does this work? :P |
| 00:50 | amalloy | tufflax: ISTR that the interop forms call .name on the symbol representing the member they should access |
| 00:50 | amalloy | &((juxt str name) `close) |
| 00:50 | sexpbot | ⟹ ["clojure.core/close" "close"] |
| 00:51 | amalloy | they have to turn the symbol into a string anyway, to do the reflective call; they use name rather than str so that the namespace half becomes irrelevant |
| 00:51 | tufflax | Aha, ok. |
| 00:51 | tufflax | Thanks |
| 01:01 | tomoj | binary juxt is sorta (a -> b) -> (a -> c) -> a -> (b,c) right? |
| 01:02 | tomoj | if so hoogle claims they don't have it. was wondering what they named it |
| 01:22 | scottj | if they had had it there'd be a pretty good chance rhickey would have copied the name |
| 01:40 | brehaut | tomoj: (&&&), its in Control.Arrow |
| 01:43 | amalloy | brehaut: i think i might be getting sick. tomoj's description of juxt in haskell made sense to me |
| 01:45 | brehaut | tomoj: hoogle might have been misleading because the type is Arrow a => a b c -> a b c' -> a b (c, c') |
| 01:45 | brehaut | amalloy: haha dont worry, im sure type definition has resolved your symptoms |
| 01:46 | brehaut | tomoj: it happens that there is an instance of Arrow a for -> |
| 01:50 | brehaut | tomoj: it also has a related operator (***) that is (for functions) (a -> b) -> (a' -> b') -> (a, a') -> (b, b') |
| 01:51 | tomoj | brehaut: aha |
| 01:53 | brehaut | hurrah arrows :P |
| 01:54 | tomoj | are we missing that one? |
| 01:54 | brehaut | we are i believe |
| 01:55 | brehaut | (defn *** [& fs] (fn [& as] (map invoke fs as))) i guess? |
| 01:55 | clojurebot | ,(let [testar (fn [x y] (cond (= (reduce + (filter odd? (range 0 x))) y) (str y " is an square perfect")) )] (testar 11 25)) |
| 01:56 | brehaut | i want to call it par, but that confuses everyone |
| 02:04 | brehaut | haha amazon is recommending me C++ stuff on the O'Reilly Clojure Programming preorder page. target audience failure |
| 03:28 | amalloy | Customers who bought these two items together also frequently bought...Treating Yourself for Multiple Personalities |
| 03:54 | dat_eye_socket | all of yourselves? |
| 04:15 | amalloy | anyone have an opinion about these two implementations of cond? https://gist.github.com/875767 |
| 04:18 | amalloy | in practice only the latter is viable in clojure.core because things like partition (and reverse!) aren't around yet |
| 07:00 | notsonerdysunny | https://gist.github.com/875893 |
| 07:02 | notsonerdysunny | Hello everybody, When I tried to understand deftype and picked up the pasted code from stack overflow .. and tried to compile it .. i get |
| 07:02 | notsonerdysunny | error: java.lang.ClassCastException: isomorphism.half-edge.Point cannot be cast to compile__stub.isomorphism.half-edge.Point |
| 07:03 | notsonerdysunny | (p.s. it is in file by name half_edge.clj whose namespace is defined by (ns isomorphism.half-edge) .. can anybody help me to figure this out? |
| 07:04 | notsonerdysunny | my clojure version is {:major 1, :minor 2, :incremental 0, :qualifier ""} |
| 07:04 | clgv | notsonerdysunny: do you have to use definterface? |
| 07:05 | clgv | if not, switch to defprotocol |
| 07:05 | clgv | (defprotocol IPoint |
| 07:05 | clgv | (getX [this]) |
| 07:05 | clgv | (setX [this, v])) |
| 07:08 | Raynes | defprotocol and deftype go together like mashed and potatoes. |
| 07:08 | clgv | Raynes: is that good or bad meaning? |
| 07:08 | notsonerdysunny | clgv: it didn't help ... |
| 07:08 | Raynes | clgv: Mashed potatoes are very good. |
| 07:09 | notsonerdysunny | It gives the same error |
| 07:09 | clgv | notsonerdysunny: figured out that your error is here: (set! (.x this) v) I overread it the first time |
| 07:09 | clgv | use (set! x v) instead |
| 07:10 | notsonerdysunny | ah .. that fixed it .. thanks clgv |
| 07:10 | clgv | Raynes: good. clojure world image remains sound ;() |
| 07:10 | clgv | ;) |
| 07:11 | notsonerdysunny | but in the hind sight .. I don't find any reason why the earlier version should not work... |
| 07:12 | clgv | Raynes: how am I supposed to organize my code i clojure when I have a lot of functions as parameter for a meta-algorithm? |
| 07:12 | clgv | I need them at very different "levels" within the algorithm |
| 07:13 | clgv | always passing them as parameters to the next level is quite hideous as there a lot of them |
| 07:13 | clgv | notsonerdysunny: you can't access ".x" anymore when you declare it :volatile-mutable |
| 07:13 | Raynes | Would it be better to just factor out the algorithm into smaller functions so that there are fewer 'levels'? |
| 07:14 | clgv | I dont think so, since I am very close to the mathematical definition already ;) |
| 07:15 | clgv | it has a general structure of an iteration-loop and subiteration-loops within each iteration |
| 07:16 | clgv | and the parameter functions are used to adjust it to a specific problem instance |
| 07:16 | Raynes | Sounds like your best bet is to just wear a blindfold while reading that code. |
| 07:17 | clgv | no, it's quite readable. right now I use a execution context object (deftype) that is composed of the problemspecific functions and exposes them via defprotocol |
| 07:18 | clgv | it's convenient right now, but looks very much OOPish... that's why I ask |
| 07:19 | Raynes | I'm the king of writing OOPish code. |
| 07:19 | Raynes | Which is surprising, since I don't really know any OOP languages. |
| 07:19 | clgv | I have some history with them ;) |
| 07:20 | Raynes | I don't have the excuse of having been using OOP languages for many years before Clojure. Alas, it's just bad manners. |
| 07:22 | clgv | I think there must be a general solution to it. When having functions as first class citizens you will often need multiple functions as parameters for a highlevel algorithm, I guess. |
| 07:22 | notsonerdysunny | can I define the methods directly inside a deftype...? instead of defining a seperate interface/protocol and then defining it in the deftype...? |
| 07:23 | clgv | notsonerdysunny: I don't think so. I got a compiler exception when I tried |
| 07:23 | Raynes | notsonerdysunny: No. |
| 07:26 | fbru02 | hey guys do you remember where's that clojure trivia ? |
| 07:26 | fbru02 | what was it called ? |
| 07:26 | notsonerdysunny | may be a macro is in order .. which would automatically create an interface/protocol with all the getters and setters for all the members .. have any of you written anything like that... |
| 07:27 | notsonerdysunny | (ofcourse with all the members being mutable .. something like defmutabletype) |
| 07:27 | clgv | notsonerdysunny: do you really need all of them mutable? |
| 07:28 | notsonerdysunny | yes .. I am trying to implement the half-edge datastructure .. which has a lot of cyclic dependencies.. |
| 07:28 | notsonerdysunny | http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml |
| 07:29 | clgv | cyclic dependencies can also be implemented with immutable member if you introduce an indirection |
| 07:31 | powr-toc | I'm getting an error trying to build cljque ... It's complaining with: Cannot find parent: com.stuartsierra:cljque-parent for project: com.stuartsierra:cljque-base:clojure:${cljque.version} for project com.stuartsierra:cljque-base:clojure:${cljque.version} |
| 07:31 | powr-toc | any ideas? |
| 07:35 | notsonerdysunny | clgv: hmmm... |
| 09:41 | ZabaQ | I'm trying to get swank and compojure to work in harmony |
| 09:42 | ZabaQ | all the examples (that don't use jetty) tell you to use (run-server .. ) .. but I can't find what namespace it lives in.. |
| 09:44 | ZabaQ | where is it supposed to be? |
| 09:46 | stuartsierra | You have to have some sort of web server. |
| 09:47 | ZabaQ | I'm using the lein-ring plugin |
| 09:51 | ZabaQ | guess I'd be better off with jetty and the ring-jetty-adapter? |
| 09:54 | stuartsierra | I don't know what lein-ring or compojure do. |
| 09:54 | stuartsierra | But you need a web server somewhere. Compojure doesn't have one built-in that I know of. |
| 09:56 | ZabaQ | something must be serving pages if I can see them :-) |
| 09:56 | ZabaQ | obviously not compojure, though .. |
| 09:57 | chouser | I think ring depends on jetty, and compojure on ring |
| 09:59 | clgv | stuartsierra: hello. a question that's bugging me on a conceptual level. I have a complex meta-algorithm that needs a lot of functions as parameters to be able to solve a given problem instance. simply passing them as single parameters to the "main" function would really look ugly. how would you organize this? |
| 10:05 | Chousuke | clgv: is it common for the problem instances to have some parameters be the same? |
| 10:06 | stuartsierra | clgv: Could you define a data structure, such as a map, that describes one instance of the problem, including those functions? |
| 10:08 | clgv | Chousuke: to be more specific, being a meta-algorithm it can handle a certain classes of problems. one problem class has the same set of functions for all instances that shall be computed. but there some strategic function parameters that I want to be able to exchange even for the same problem instance to be able to compare those strategies |
| 10:08 | cemerick | ZabaQ: Ring will work as a servlet with any app server. Jetty is by far the most common one use in development contexts. |
| 10:09 | cemerick | s/use/used |
| 10:09 | sexpbot | <cemerick> ZabaQ: Ring will work as a servlet with any app server. Jetty is by far the most common one used in development contexts. |
| 10:09 | clgv | stuartsierra: currently I have a deftype object holding those functions and exposing them via a protocol. but it didn't really feel like I was using clojure correctly here. |
| 10:09 | Chousuke | clgv: sounds like a map of the functions would work fine. |
| 10:10 | Chousuke | clgv: you could then use merge to combine a "base" map with another that specialises the problem instance. |
| 10:11 | Chousuke | using a record will work as well I guess but it sounds like overkill |
| 10:11 | clgv | Chousuke: hmm interesting thought. I played with the idea to write a DSL for configuring the functions in a file externally. |
| 10:14 | clgv | so in general I can summarize that there is no other concept than the single configuration object (map, record..) that I might be missing? |
| 10:15 | stuartsierra | not that I know of |
| 10:17 | clgv | ok. thanks. :) |
| 10:20 | ZabaQ | got it! |
| 10:20 | ZabaQ | I was looking for run-jetty in ring.adapter.jetty |
| 10:29 | clgv | can I set up leiningen for a project that contains clojure and java implementation where I have the directories src/clj and src/jvm? if so, how do I tell leiningen to use these two? |
| 10:39 | @rhickey | about to pollute the core ns with a fn that can tell you whether a delay/promise/future has a value without blocking or forcing - candidates? |
| 10:40 | @rhickey | also coming - (deref future-or-promise timeout-ms timeout-val) |
| 10:41 | fliebel | rhickey: Sound cool, though the core ns is already quite big. When you said 'candidates?', where you looking for objections, comments, a function name, or all of the above? |
| 10:41 | @rhickey | fn name |
| 10:42 | @rhickey | (I'm sure objections will come unsolicited :) |
| 10:43 | fliebel | rhickey: Is it a predicate, or also a non-blocking getter? |
| 10:43 | @rhickey | just a predicate |
| 10:43 | @rhickey | deref with timeout is non-blocking getter |
| 10:43 | fliebel | ah, yes. |
| 10:44 | stuarthalloway | value-available? |
| 10:44 | @rhickey | stuarthalloway: ugly enough that no one has used it :) |
| 10:44 | TimMc | the-future-is-now? |
| 10:45 | @rhickey | has-value |
| 10:45 | stuarthalloway | value-arrivaed |
| 10:45 | stuarthalloway | ? |
| 10:45 | @rhickey | ? |
| 10:45 | stuarthalloway | ready? |
| 10:45 | fliebel | done? |
| 10:45 | fliebel | concrete? |
| 10:45 | stuarthalloway | immediate? |
| 10:46 | TimMc | Ooh, concrete? sounds good, and isn't likely to conflict. |
| 10:46 | @rhickey | a future completes, a promise gets delivered, and a delay gets realized, if that helps frame the things we are trying to unify |
| 10:46 | stuarthalloway | fulfilled? |
| 10:47 | @rhickey | the interface that unifies them is IPendingDeref |
| 10:47 | fliebel | pending? then? |
| 10:47 | chouser | isnt-not-unempty? |
| 10:47 | @rhickey | chouser: -yet? |
| 10:47 | chouser | :-) |
| 10:47 | fliebel | valuable? :P |
| 10:47 | stuarthalloway | imminent? |
| 10:48 | clgv | lol @ "valuable?" |
| 10:48 | TimMc | rhickey: Do you anticipate the done? or not-done? sense to dominate in usage? |
| 10:48 | stuarthalloway | I think the dictionary definition of imminent is actually close... |
| 10:49 | @rhickey | delay makes it tricky, since always available, but the predicate won't realize if not already |
| 10:49 | TimMc | fliebel's "pending?" is opposite in meaning to the others so far, for instance. |
| 10:49 | chouser | I like "ready?", esp. for a nice fundamental interface like IPendingDeref |
| 10:49 | stuarthalloway | TimMc: the done? sense, I think, in guard clauses |
| 10:50 | chouser | instant-deref? |
| 10:50 | @rhickey | delays seem always ready, and all of them seem always imminent |
| 10:50 | thickey | finished? |
| 10:50 | stuarthalloway | completed? |
| 10:51 | @rhickey | realized? |
| 10:51 | stuarthalloway | consummated? |
| 10:51 | @rhickey | stuarthalloway and his consenting adults metaphor :) |
| 10:52 | fliebel | folfulled? |
| 10:52 | fliebel | wow, good spelling... |
| 10:52 | stuarthalloway | would calling this on an atom always return true? |
| 10:53 | stuarthalloway | if it is even legal to ask of an atom, implies a different set of names |
| 10:53 | @rhickey | stuarthalloway: not taking it to any of the refs that don't need it, for now |
| 10:53 | pjstadig | blocked? |
| 10:54 | @rhickey | pjstadig: looking for the opposite polarity, also remember delays |
| 10:54 | stuarthalloway | rhickey: ok, but that might create a breaking name change later |
| 10:54 | pjstadig | unencumbered? |
| 10:55 | TimMc | I don't like names with negation in them. |
| 10:55 | @rhickey | delays are never encumbered |
| 10:55 | TimMc | Makes it hard to read when wrapped in a (not ...) |
| 10:55 | @rhickey | stuarthalloway: we can look at the winner here in that light |
| 10:56 | @rhickey | so, realized? is most correct so far. Another way to look at these is that the values are all calculated, so, executed? etc make sense too |
| 10:56 | stuarthalloway | immediate? |
| 10:56 | stuarthalloway | doh, said that already |
| 10:56 | dakrone | done? |
| 10:56 | pjstadig | did someone already say 'available?'? |
| 10:57 | clgv | why "executed?" if the are calculated how about "calculated?" ;) |
| 10:57 | @rhickey | delays are always available |
| 10:57 | fliebel | obligated? |
| 10:57 | fogus` | pregnant? |
| 10:57 | stuarthalloway | nigh? |
| 10:58 | mids | cooked? |
| 10:58 | stuartsierra | FYI, org.clojure:data.json:0.1.0 is on its way to Central |
| 10:58 | clgv | fogus`: "pregnant?" would be the wrong time. born? would match ;) |
| 10:58 | stuarthalloway | achieved? |
| 10:59 | fogus` | infused? |
| 10:59 | chouser | I would expect 'realized?' to work on LazySeqs as well |
| 10:59 | pjstadig | fogus`: sounds delicious |
| 11:00 | @rhickey | chouser: that's interesting |
| 11:00 | fliebel | yea, chouser has a point, if we make the name to broad, it'll be expected to do more than it does. |
| 11:00 | pjstadig | attained? |
| 11:00 | stuarthalloway | extant? (courtesy jgehtland) |
| 11:00 | pjstadig | actualized? |
| 11:00 | chouser | fliebel: but I would find a predicate like that to be useful for LazySeqs. I've even written (hacked together) such a beast. |
| 11:01 | pjstadig | concluded? |
| 11:01 | fliebel | stuarthalloway: You expect people to find that in the function heap? |
| 11:01 | @rhickey | extant is more like - still around |
| 11:01 | pjstadig | substantiated? |
| 11:01 | fogus` | possessed? (I'm going to stop now) |
| 11:01 | stuarthalloway | too bad, extant is such a cool word ... could you create a reference type that erodes over time so we can use it? |
| 11:01 | pjstadig | accrued? |
| 11:02 | @rhickey | hrm, LazySeq could satisfy this interface... |
| 11:02 | chouser | finallized? static? immutable? |
| 11:02 | Chousuke | stuarthalloway: entity extinction, huh? :P |
| 11:02 | fliebel | value? |
| 11:02 | pjstadig | stuarthalloway: technomancy has this idea of entropic memory that decays over time |
| 11:02 | pjstadig | err enthropic? |
| 11:03 | stuarthalloway | accomplished? |
| 11:03 | thickey | obtained? |
| 11:03 | pjstadig | thesaurus.com |
| 11:04 | @rhickey | delay is the hardest to fit |
| 11:04 | stuarthalloway | I am using a different thesaurus for sure: http://www.thanatosrealms.com/war2/sounds/orcs/basic-orc-voices/work-complete.wav |
| 11:04 | fliebel | rhickey: What is the method on the interface called to do this? |
| 11:04 | stuartsierra | We talked about "has-value?" a long time ago. |
| 11:05 | fliebel | stuartsierra: Then I like concrete? better |
| 11:05 | pjstadig | rhickey: you're convinced that they can all be unified though? |
| 11:05 | @rhickey | stuartsierra: right, so that idea confined to delay/promise/future |
| 11:06 | chouser | If lazy-seq implements it, 'realized?' is my favorite. |
| 11:06 | pjstadig | delay/promise/future done?/delivered?/realized? |
| 11:06 | fliebel | waiting? (ok, wrong side) |
| 11:06 | fogus` | (inc chouser) |
| 11:07 | fliebel | (inc chouser) |
| 11:07 | @rhickey | chouser: me too, looking at it right now |
| 11:07 | clgv | realized? for lazy-seqs sounds good :) |
| 11:07 | pjstadig | lazy-seq would be IPendingDeref? |
| 11:07 | chouser | IPendingDeref sounds like the wrong name then, though, since deref isn't used |
| 11:07 | chouser | IPendingValue |
| 11:07 | @rhickey | IPending |
| 11:08 | pjstadig | sure |
| 11:08 | pjstadig | IPending |
| 11:08 | jkkramer | ripe? |
| 11:08 | chouser | jkkramer: nice |
| 11:08 | pjstadig | do those concepts weigh each other? pending vs. realized? |
| 11:08 | pjstadig | i suppose |
| 11:09 | pjstadig | hard problems in computer science!!!!!!1111 |
| 11:10 | stuarthalloway | I like IPending, too bad there is not antonym for "pend" |
| 11:10 | stuarthalloway | unpent? |
| 11:10 | fliebel | depent? |
| 11:10 | @rhickey | stuarthalloway: yeah |
| 11:12 | fogus` | occupied? |
| 11:12 | Chousuke | collapsed? (as in a wave function) :P |
| 11:12 | @rhickey | realized? wins, with support for delay/promise/future/lazy-seqs |
| 11:12 | @rhickey | thanks all |
| 11:12 | fliebel | yay! |
| 11:12 | stuarthalloway | thanks for adding this! |
| 11:12 | clgv | :) |
| 11:12 | stuartsierra | gotta go. Back this afternoon. |
| 11:13 | clgv | then I can throw away the current "realized?"-hack for lazy-seqs in my debugging code :) |
| 11:14 | @rhickey | doc string? |
| 11:15 | fliebel | So, the first who presents a demonic use of realized? for lazy seqs gets a botsnack. :) |
| 11:16 | fliebel | "are we there yet?" |
| 11:17 | clgv | fliebel: define "demonic" |
| 11:17 | fliebel | rhickey: How is realized? defined for lazy seqs? Is it only realized when the whole thing is done, or can a part of it be realized? |
| 11:18 | @rhickey | seqs aren't things, they are chains of things. so, first link only |
| 11:19 | clgv | otherwise realized? on an infinite seq wouldnt work^^ |
| 11:19 | fliebel | rhickey: So I could do (take-while realized? seq)? |
| 11:20 | fbru02 | fliebel: that sounds interesting |
| 11:20 | @rhickey | fliebel: for what purpose? |
| 11:21 | TimMc | Would that only get the elements that had already been computed? |
| 11:21 | @rhickey | fliebel: don't forget the predicate is called on the values, not the seqs |
| 11:23 | Chousuke | (defn super-lazy-seq [lseq] (lazy-seq (if (realized? lseq) (cons (first lseq) (super-lazy-seq (rest lseq))) (cons :too-lazy (super-lazy-seq lseq)))) |
| 11:25 | @rhickey | the most useful fact is - if the head of a lazy-seq hasn't been realized, the rest hasn't either, e.g. as a printing control etc |
| 11:26 | fliebel | Chousuke: Make it implement IDeref :) That would be fun a lazy seq you explicitly have to tear values out. |
| 11:27 | fogus` | rhickey: Would the same people demanding reductions also need maplist? |
| 11:28 | fogus` | hmm, "need" is too strong |
| 11:28 | fliebel | what is maplist? |
| 11:29 | @rhickey | fliebel: calls the function on each successive seq, not value of head |
| 11:29 | @rhickey | fogus`: in the same family |
| 11:30 | @rhickey | http://www.lispworks.com/documentation/HyperSpec/Body/f_mapc_.htm |
| 11:31 | fogus` | maplist is a bad name IMO |
| 11:32 | fliebel | Oh, so it's like the opposite of reductions, kind of. |
| 11:37 | tsdh | In a leiningen project.clj file, how can I specify that I depend on the foo lib in either version 0.1.0 or any newer version? |
| 11:38 | fliebel | tsdh: Maven version ranges |
| 11:38 | @rhickey | realized? - "Returns true if a value has been produced for a promise, delay, future or lazy sequence." |
| 11:38 | tsdh | fliebel: Is [0.1.0,) the right syntax? |
| 11:39 | fogus` | What happens if you do (realized? 42) ? |
| 11:40 | Chousuke | an exception? |
| 11:40 | Chousuke | that's what I'd expect :P |
| 11:47 | fogus` | First cut: (defn maplist [f & colls] (apply map f (map #(take (count %) (iterate rest %)) colls))) |
| 11:47 | @rhickey | https://github.com/clojure/clojure/commit/84710838d6996d9144d83c5b659bdeda4c656100 |
| 11:49 | jkkramer | fogus`: (defn maplist [f & colls] (apply map f (map #(take-while seq (iterate rest %)) colls))) ; no need for count? |
| 11:51 | fogus` | jkkramer: That seems to work. :-) |
| 11:51 | chouser | I've wanted 'tails' more often than maplist |
| 11:51 | chouser | oh, wait. |
| 11:53 | fliebel | rhickey: "See also - realized?" I think it would be useful to have a metadata key for related functions, but that is another subject entirely. |
| 12:31 | pjstadig | rhickey: there's a typo in the docstring for deref "and will return timeout-val of the timeout..." ITYM "and will return timeout-val if the timeout..." |
| 12:45 | Tomsik | Hi, I've got an enumeration of buttons and I want to just remove them all. The problem is that if get enumeration-seq and just remove buttons one by one then it removes the every other button. How do I create a *strict* collection from an enumeration? |
| 12:46 | Tomsik | That is I want the list of buttons to be fully evaluated before being passed further, so it won't be altered by removal of buttons. |
| 12:47 | stuarthalloway | (into [] your-stuff) |
| 12:48 | stuarthalloway | but what does "remove" mean in an immutable data structure? :-) |
| 12:49 | Tomsik | I'm removing radiobuttons from a buttongroup |
| 12:50 | Tomsik | and if I just reduce over this seq from enumeration-seq then it skips every other button, as if the item it points to is removed and then it takes the next one |
| 12:50 | Tomsik | and btw, is there a better thing to do then reduce if I just want to kind-of fold a list just for side effects? |
| 12:50 | Tomsik | than* uhh |
| 12:52 | ohpauleez | Tomsik: I'd take a look at doseq |
| 12:52 | ohpauleez | not exactly folding, but you'll get the idea |
| 12:52 | ohpauleez | http://clojuredocs.org/clojure_core/clojure.core/doseq |
| 12:53 | Tomsik | hmm |
| 13:00 | Tomsik | With doseq I still have to use this into [] |
| 13:01 | Tomsik | oh well, I guess it's manageable :p |
| 13:07 | devn | Tomsik: could you give an example of what the data looks like, and what you want it to look like? |
| 13:08 | devn | that usually is a good way to eek out a few options |
| 13:09 | Tomsik | It was mostly about this: |
| 13:09 | Tomsik | (def odp (JButton. "Odpowiedz")) |
| 13:09 | Tomsik | (def odpsy (ButtonGroup.)) |
| 13:09 | Tomsik | (.addActionListener odp (proxy [ActionListener] [] (actionPerformed [e] |
| 13:09 | Tomsik | (doseq [r (into [] (enumeration-seq (.getElements odpsy)))] (.remove panel r) (.revalidate panel) (.repaint panel) (.remove odpsy r))))) |
| 13:09 | devn | Tomsik: please gist it in the future if it spans multiple lines |
| 13:10 | Tomsik | well, it's just four lines |
| 13:11 | devn | *nod* just an etiquette thing on IRC |
| 13:46 | @rhickey | pjstadig: typo fixed - thanks |
| 13:46 | pjstadig | rhickey: awesome! |
| 14:12 | TimMc | ,'<symbol> |
| 14:12 | clojurebot | <symbol> |
| 14:13 | TimMc | The clojure.org docs don't mention < and > as legal characters for symbols. |
| 14:14 | TimMc | http://clojure.org/reader claims only alphanumerics, *+!-_? , and / and : in certain cases. |
| 14:15 | technomancy | TimMc: just because something works now doesn't mean it's officially supported. |
| 14:15 | TimMc | Eep. |
| 14:17 | jcromartie | it has to be officially supported |
| 14:17 | jcromartie | what about -> |
| 14:18 | TimMc | '=4 |
| 14:18 | TimMc | ,'=4 |
| 14:18 | clojurebot | =4 |
| 14:21 | nteon | ,'8==> |
| 14:21 | clojurebot | Invalid number: 8==> |
| 14:22 | TimMc | no, no ,no |
| 14:22 | nteon | whoops! |
| 14:22 | jcromartie | oh we're talking about the first character |
| 14:22 | nteon | ,'<==8 |
| 14:22 | clojurebot | <==8 |
| 14:23 | nteon | thats better |
| 14:23 | TimMc | Thou shalt not name thy variables after ASCII art penises. |
| 14:23 | jcromartie | stop doing awful things to clojurebot |
| 14:23 | jcromartie | TimMc: I'm just glad that the language allows it. |
| 14:23 | jcromartie | '(_y_) |
| 14:23 | jcromartie | nope |
| 14:24 | jcromartie | not a symbol... |
| 14:25 | TimMc | Parens can't be part of a symbol. |
| 14:25 | jkkramer | ,(symbol "foo bar!@#$%^&*()~`{}[]|\\/<>") |
| 14:25 | clojurebot | foo bar!@#$%^&*()~`{}[]|\/<> |
| 14:25 | jkkramer | won't be readable though |
| 14:25 | jcromartie | they won't be *read* as part of a symbol |
| 14:25 | jcromartie | right |
| 14:25 | TimMc | Ah, thanks for that distinction. |
| 14:25 | Chousuke | those symbols are illegal anyway |
| 14:25 | devn | ,(symbol foo->bar) |
| 14:25 | clojurebot | java.lang.Exception: Unable to resolve symbol: foo->bar in this context |
| 14:25 | Chousuke | they work, but that's not guaranteed |
| 14:25 | devn | ,(symbol "foo->bar") |
| 14:25 | clojurebot | foo->bar |
| 14:26 | TimMc | ,'foo->bar |
| 14:26 | clojurebot | foo->bar |
| 14:26 | devn | i've seen <, >, an | in more than a couple of libraries |
| 14:26 | jcromartie | yeah, < and - etc. are built in anyway |
| 14:26 | jcromartie | of course the reader supports them |
| 14:26 | devn | IIRC it's ill-advised, but not illegal...yet |
| 14:26 | Chousuke | | might not be a good idea but yeah, > and < should be fine. |
| 14:27 | TimMc | phew |
| 14:27 | jcromartie | devn: how could it be made illegal? |
| 14:27 | TimMc | Oh yeah, and aren't there two different pipe chars? |
| 14:27 | TimMc | |¦ |
| 14:27 | devn | jcromartie: i don't remember all the details of the discussion but I remember rich saying something about it awhile back in IRC |
| 14:27 | devn | you can search n01se.net's logs if you're interested |
| 14:28 | TimMc | Can't I use most of unicode for symbols? |
| 14:28 | jcromartie | I'd be OK with it if it didn't include things that were already part of the core namespace |
| 14:28 | TimMc | My impression is that it's just ASCII that's dangerous territory. |
| 14:28 | jcromartie | + - < > -> = etc. |
| 14:28 | jcromartie | they aren't special forms |
| 14:29 | Chousuke | anything that is in core is probably fair game. except /, which is kinda special :P |
| 14:29 | Chousuke | ,`/ |
| 14:29 | clojurebot | clojure.core// |
| 14:30 | jcromartie | why is / special |
| 14:30 | Chousuke | It's the only symbol that can have two /s |
| 14:30 | Chousuke | ,foo/bar/fail |
| 14:30 | clojurebot | java.lang.Exception: No such namespace: foo/bar |
| 14:30 | Chousuke | ,'foo/bar/fail |
| 14:30 | clojurebot | foo/bar/fail |
| 14:30 | Chousuke | hmm |
| 14:30 | jcromartie | no, any symbol with a slash in the middle is considered "qualified" |
| 14:31 | Chousuke | oh well, you can't have a namespace called foo/bar anyway |
| 14:31 | TimMc | ,*ns* |
| 14:31 | clojurebot | #<Namespace sandbox> |
| 14:31 | jcromartie | interesting... if I (def / 1) in user, then I get user// |
| 14:32 | mec | Could anyone explain how or if the following is lazy? I understand that the first call would be lazy but after that shouldn't it just keep going? https://github.com/naleksander/instrumentos/blob/master/src/instrumentos/yield.clj |
| 14:32 | jcromartie | but I can't access it through the qualified name |
| 14:32 | jcromartie | so, yeah, don't use / |
| 14:32 | jcromartie | mec: you mean funnel |
| 14:33 | jcromartie | take-while is lazy |
| 14:33 | mec | well using it, something like (def fibs (yieldish (loop [a 0 b 1] (yield a) (recur b (+ a b))))) |
| 14:34 | mec | it looks like yield just becomes (.put q a) so shouldnt the loop just keep going? |
| 14:35 | jcromartie | yeah loop is not lazy |
| 14:37 | jcromartie | what's with all the funky spacing of this code |
| 14:37 | jcromartie | it is hard to read |
| 14:38 | jcromartie | and the misleading indentation |
| 14:39 | mec | https://gist.github.com/876598 |
| 14:41 | jcromartie | this is pretty interesting by the way |
| 14:41 | jcromartie | yours? |
| 14:41 | mec | no, im just trying to understand it |
| 14:45 | jcromartie | what's bound-fn |
| 14:45 | mec | `(future-call (bound-fn [] ~@body)) |
| 14:45 | mec | err |
| 14:46 | mec | its a builtin, defines a function that the same previous bindings |
| 14:46 | raek | jcromartie: like fn, but it inherits the values of the thread-locally rebound vars from the creating thread |
| 14:47 | jcromartie | oh derp, I didn't read the output when I evaluated bound-fn in the REPL and assumed it said it was not found |
| 14:48 | jcromartie | but it was "Can't take value of a macro" |
| 14:50 | TimMc | Well, if I can't use < or > at some future date I'll just switch to guillemets: ##'«» |
| 14:50 | sexpbot | ⟹ «» |
| 14:53 | mec | ah hah! SynchronousQueue is blocking |
| 14:55 | mec | it all makes sense now, except why it would crap out if (count (take 10000 fibs)) |
| 15:02 | jcromartie | ,'™ |
| 15:02 | clojurebot | ™ |
| 15:02 | jcromartie | sweet |
| 15:04 | jcromartie | (defmacro ƒ [& fntail] `(fn ~@fntail)) |
| 15:04 | jcromartie | the ƒ is for ƒancy |
| 15:04 | TimMc | haha |
| 15:04 | mec | lol |
| 15:04 | stuartsierra | jcromartie: Some people have their Emacs set up to replace "fn" with ƒ . |
| 15:04 | stuartsierra | Drives me crazy. |
| 15:04 | TimMc | (defn foo™ "Do stuff to bar. Copyright (c) 2011 jcromartie." [bar] (inc bar)) |
| 15:04 | jcromartie | ouch |
| 15:05 | mec | that would be neat if it were easy to type |
| 15:05 | technomancy | https://github.com/technomancy/emacs-starter-kit/blob/master/starter-kit-lisp.el#L59 |
| 15:06 | jcromartie | hah wow |
| 15:06 | jcromartie | I had no idea people did that |
| 15:06 | jcromartie | it's anti social |
| 15:06 | technomancy | jcromartie: it's way more useful in javascript since you save 7 chars instead of 1 |
| 15:07 | jcromartie | oh well if Emacs does the replacing |
| 15:07 | jcromartie | yeah |
| 15:07 | technomancy | lambda => λ in elisp is nice though |
| 15:07 | technomancy | it's totally a render-time hack |
| 15:07 | TimMc | technomancy: Doesn't it mess with your ability to keep within 80 columns? |
| 15:08 | technomancy | TimMc: probably would if I still wrote JS these days |
| 15:08 | jcromartie | (defn ± [x y] (+ x (- (rand y) (/ y 2)))) |
| 15:09 | TimMc | I probably shouldn't use $ in symbols though, yeah? |
| 15:10 | TimMc | It seems that processor designers like to use I$ for Instruction Cache, you see. |
| 15:14 | devn | When you're writing clojure code do you take a strict approach to writing the docstring before you start on the body? |
| 15:15 | TimMc | devn: I feel uneasy if I don't have a docstring by the time I start writing the body, but I don't take a strict approach. |
| 15:15 | TimMc | Sometimes I don't know what the function will do until I write it. |
| 15:16 | devn | TimMc: Yeah I do that too, but in general I find writing out a nice complete docstring before I start is a good way to keep me focused. |
| 15:17 | devn | When I have to go back and write a docstring I sometimes think: Hm, the name no longer matches the functionality, the args have changed, etc. |
| 15:18 | mec | start with a comment and after you're done make it a docstring? |
| 15:21 | TimMc | I can see my Fundies prof shaking his head and looking dissapointed when I don't write a docstring first. :-P |
| 15:23 | klang | any Danish mac and users around to give quick advice on how to make emacs give me curly/square brackets? |
| 15:25 | mec | in emacs is there a way to print the exception to the repl instead of starting a stack trace |
| 15:26 | raek | mec: what do you mean by "print the exception to the repl"? |
| 15:27 | mec | ##blah |
| 15:28 | raek | ##(blah) |
| 15:28 | sexpbot | java.lang.Exception: Unable to resolve symbol: blah in this context |
| 15:28 | klang | mec .. as in the exception is just printed as a warning and then back to repl mode right away |
| 15:28 | mec | like that, instead of opening a stack trace in another buffer |
| 15:28 | mec | ya |
| 15:29 | raek | I don't know. I usually want to look at the stacktrace. (you can press 0 to hide that window) |
| 15:30 | klang | I usually only need the first line to figure out what I did wrong .. I am not doing complicated stuff .. |
| 15:36 | klang | For completeness sake: http://stackoverflow.com/questions/3376863/unable-to-type-braces-and-square-braces-in-emacs (I am now able to use my mac for clojure, yay) |
| 15:39 | joshua__ | So no Clojure using organizations were accepted into GSoC ;(? |
| 15:40 | mec | which datatype lets you define only some fields from an interface? |
| 15:42 | stuartsierra | mec: don't follow there, interfaces don't have fields. |
| 15:43 | mec | err methods sorry |
| 15:43 | stuartsierra | As far as I know, deftype, proxy, and reify all allow you to define a subset of methods of the parent interface. |
| 15:44 | stuartsierra | If a method without a definition is invoked, it will throw AbstractMethodError. |
| 15:44 | mec | Oh, i must have just read it wrong, thanks |
| 16:54 | hiredman | does nrepl have a jira page? |
| 16:54 | stuartsierra | not yet |
| 16:55 | hiredman | where is the best place to raise an issue? |
| 16:55 | stuartsierra | |
| 16:55 | hiredman | to chas? |
| 16:55 | stuartsierra | yeah, or the dev list. |
| 16:55 | hiredman | ok |
| 17:30 | Raynes | brehaut: I'm playing with necessary-evil. Also 'officially' deprecated clj-xmlrpc in favor of it. |
| 17:30 | brehaut | Raynes: awesome :) |
| 17:31 | brehaut | Raynes: did you know that both projects are on the Wikipedia page for xml-rpc? |
| 17:31 | Raynes | Someone else added mine. |
| 17:31 | brehaut | and mine |
| 17:32 | Raynes | We've got stalkers. |
| 17:32 | brehaut | apparently. strange given that theres probably only 4 people in the world using either library tops |
| 17:33 | brehaut | Raynes: ive got a breaking change to make for the lib shortly, so its going to get a 2.0.0 release (yay semver) |
| 17:33 | brehaut | I need to make the struct type have string keys rather than keyword keys |
| 17:34 | Raynes | I'm writing a wordpress client with it. I've mostly given up my dreams of a blogging library that implements the various APIs. I don't have it in me. ;) |
| 17:34 | brehaut | Raynes: haha yeah its a pretty apocalyptic landscape of APIs |
| 17:40 | Raynes | brehaut: You should put the marginalia docs on the github pages for necessary-evil. |
| 17:40 | brehaut | Raynes: you are quite right. i'll do that ASAP |
| 17:42 | jcromartie | why does #() return an/the empty list |
| 17:42 | jcromartie | ,(#()) |
| 17:42 | clojurebot | () |
| 17:43 | Chousuke | probably because it expands to (fn [] ()) |
| 17:43 | jcromartie | ah |
| 17:43 | jcromartie | and you don't have to escape () |
| 17:44 | jcromartie | I mean quote |
| 17:50 | brehaut | Raynes: uberdocs pushed |
| 17:51 | brehaut | Raynes: although i realise not as a gh-pages. need to work out how to do that |
| 17:52 | TimMc | ,#[] |
| 17:52 | clojurebot | No dispatch macro for: [ |
| 17:56 | brehaut | Raynes: http://brehaut.github.com/necessary-evil/ |
| 17:56 | Raynes | Yay! |
| 17:56 | brehaut | i still need to work out how to automate that :P |
| 17:56 | brehaut | (i suck at git) |
| 17:59 | TimMc | brehaut: You also need to escape your brokets. |
| 17:59 | brehaut | my what now? |
| 18:07 | semperos | brehaut: Github gives you instructions if you go to your non-existent Github pages URL: http://brehaut.github.com/ |
| 18:09 | brehaut | semperos: huh thanks |
| 18:10 | TimMc | brehaut: things like <method-name> need to be <method-name> |
| 18:11 | TimMc | brokets = angle brackets, sorry |
| 18:11 | brehaut | TimMc: in the marginalia docs? |
| 18:11 | TimMc | Or maybe fogus needs to. :-) |
| 18:12 | semperos | they're fixed |
| 18:12 | semperos | in a very recent commit |
| 18:12 | brehaut | hah maybe yes :P i believe one of the major projects in marginalia is a full blown clojure parser |
| 18:12 | semperos | bc yeah, it wasn't escaping the brackets and some of my marginalia docs looked interesting :) |
| 18:12 | brehaut | im running 0.5.0 |
| 18:13 | semperos | it's committed to master |
| 18:18 | tsdh | Where's the difference between adding metadata with ^ or with #^? |
| 18:19 | TimMc | tsdh: #^ is deprecated |
| 18:19 | brehaut | tsdh: <= 1.1 or >= 1.2 |
| 18:19 | tsdh | Thanks. |
| 18:37 | semperos | probably unimportant, but who do I need to contact to have my name corrected on http://clojure.org/contributing ? just don't want to have any issue contributing, if that list acts as a reference |
| 18:45 | rata_ | semperos: I don't really know, but I imagine rhickey |
| 18:51 | semperos | can't go wrong there, but was hoping to bug someone a little less busy :) |
| 18:51 | semperos | not a big deal |
| 18:53 | TimMc | $findfn '[a b c] '[[a b] [b c] [c d] [d a]] |
| 18:53 | sexpbot | [] |
| 18:53 | TimMc | Hmm, I guess it would be a seq anyway. |
| 18:53 | TimMc | I wrote this function in-channel at some point but I can't remember what it was. |
| 18:54 | brehaut | (doc partition-all) |
| 18:54 | clojurebot | "([n coll] [n step coll]); Returns a lazy sequence of lists like partition, but may include partitions with fewer than n items at the end." |
| 18:55 | brehaut | nope not quite |
| 18:56 | brehaut | TimMc: http://richhickey.github.com/clojure-contrib/combinatorics-api.html |
| 18:57 | brehaut | TimMc: also, seems unlikely findfn would find your example because your input has less symbols than your output |
| 18:59 | rata_ | &(let [v [1 2 3]] (concat (partition 2 1 v) [[(last v) (first v)]])) |
| 18:59 | sexpbot | ⟹ ((1 2) (2 3) [3 1]) |
| 18:59 | rata_ | TimMc: ^ |
| 19:01 | brehaut | &(let [s [1 2 3]] (take (count s) (partition 2 1 (cycle s)))) |
| 19:01 | sexpbot | ⟹ ((1 2) (2 3) (3 1)) |
| 19:03 | TimMc | Ah, that might be the one. |
| 19:03 | brehaut | &(let [s [1 2 3]] (map second s (parition 2 1 (cycle s)))) |
| 19:03 | sexpbot | java.lang.Exception: Unable to resolve symbol: parition in this context |
| 19:04 | brehaut | &(let [s [1 2 3]] (map second s (partition 2 1 (cycle s)))) |
| 19:04 | sexpbot | java.lang.IllegalArgumentException: Wrong number of args (2) passed to: core$second |
| 19:04 | brehaut | &(let [s [1 2 3]] (map #(%2) s (partition 2 1 (cycle s)))) |
| 19:04 | sexpbot | java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to clojure.lang.IFn |
| 19:04 | brehaut | fail |
| 19:05 | brehaut | &(let [s [1 2 3]] (map (comp second vector) s (partition 2 1 (cycle s)))) |
| 19:05 | sexpbot | ⟹ ((1 2) (2 3) (3 1)) |
| 19:07 | brehaut | TimMc: and the correct solution: (comp (partial apply map (comp second vector)) (juxt identity (comp (partial partition 2 1) cycle))) |
| 19:08 | TimMc | I *thought* you were point-golfing... |
| 19:08 | brehaut | TimMc: only as far as it took to get juxt in :P |
| 20:53 | dnolen | Google is also interested in logic programming it seems, http://code.google.com/p/or-tools/ |
| 21:03 | TimMc | OK... I need to compute a number for each element of a sequence. If any numbers are negative, I want to return nil. Else, I want to return the smallest number. |
| 21:04 | TimMc | Seems like a lazy seq is called for, at the very least. |
| 21:05 | TimMc | reduce would be appropriate for finding a min. |
| 21:05 | joshua__ | It is starting to look like I'm not going to be doing any Clojure programming for GSoC =(. Can't find any organizations that are interested. |
| 21:06 | brehaut | timMC: (reduce min (keep computation s)) |
| 21:06 | TimMc | (doc keep) |
| 21:06 | clojurebot | "([f coll]); Returns a lazy sequence of the non-nil results of (f item). Note, this means false return values will be included. f must be free of side-effects." |
| 21:07 | TimMc | Ah! The computation could return nil instead of negative results. |
| 21:07 | brehaut | :D |
| 21:07 | TimMc | But reduce would still reduce the whole sequence, even once it encountered a nil. |
| 21:08 | TimMc | I don't suppose there's a short-circuiting reduce? |
| 21:08 | brehaut | nope |
| 21:08 | brehaut | hmm |
| 21:08 | TimMc | (first (filter ... (reductions ... ))) ? |
| 21:09 | brehaut | huh i dont think i have seen reductions before |
| 21:09 | joshua__ | If you need to compute a number for each element in a sequence why not use map? |
| 21:09 | TimMc | joshua__: I only need the later values if earlier values are non-neg. |
| 21:10 | TimMc | Oh, but map is lazy... |
| 21:10 | brehaut | so is keep |
| 21:10 | joshua__ | (doc reductions) |
| 21:10 | clojurebot | "([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." |
| 21:12 | TimMc | No, keep is the wrong thing -- I want to know if there's a nil. |
| 21:13 | brehaut | TimMc: perhaps (some nil? …) would be useful? |
| 21:13 | TimMc | (partition 2 1 ...) would let me look ahead. |
| 21:15 | TimMc | I'm going to write this with (some nil? ...) and (reduce min ...) for now. |
| 21:15 | brehaut | i think that is pretty clear |
| 21:16 | TimMc | It has to walk the sequence twice, which is annoying. |
| 21:16 | TimMc | I'm being quite silly, though -- in this case the seq is always of length 3. :-P |
| 21:16 | brehaut | hahaha |
| 21:17 | brehaut | TimMc: operands? |
| 21:18 | TimMc | what? |
| 21:18 | clojurebot | what is exceptions |
| 21:18 | brehaut | your sequences of three ? |
| 21:18 | TimMc | Vertices of triangles. |
| 21:18 | brehaut | thats not as fun :P |
| 21:18 | TimMc | Err, not vertices... |
| 21:19 | TimMc | The distances from each edge to a point. I'm testing whether a point is on the triangle. |
| 21:20 | brehaut | did you make progress with your mips parser? |
| 21:20 | TimMc | brehaut: I wrote it all in regexes. |
| 21:21 | brehaut | haha |
| 21:21 | brehaut | fair enough, but yuck :P |
| 21:21 | TimMc | Works beautifully, and I don't have to muck about with building all the fiddly bits of a full parser. |
| 21:22 | TimMc | I think it turned out rather well, actually. |
| 21:22 | brehaut | …for regexps :P |
| 21:25 | hiredman | I have concluded nrepls protocol is ridiculous |
| 21:26 | Raynes | I'll alert the men. |
| 21:27 | TimMc | brehaut: https://gist.github.com/877123 <-- Second file. It's not that bad. |
| 21:28 | brehaut | TimMc: i'll give you that |
| 21:29 | hiredman | each message from nrepl is prefix with the number of forms, rather than the number of bytes of the message |
| 21:30 | hiredman | impossible to deal with unless you scan it a character at a time |
| 21:30 | hiredman | ugh |
| 22:13 | livingston | underscore as a namespace for a symbol is special, isn't it? |
| 22:18 | livingston | nevermind... I slipped and couldn't figure out why this was giving me a nil namespace '_:R1 when what I meant was '_/R1 (old lisp habits strike again) |
| 22:19 | hiredman | underscores in namespaces is a bad idea |
| 22:19 | clojurebot | Roger. |
| 22:19 | hiredman | clojurebot: botsnack |
| 22:19 | clojurebot | thanks; that was delicious. (nom nom nom) |
| 22:20 | livingston | why is that? |
| 22:22 | hiredman | livingston: namespaces typically map to a file on disk, and when going from namepsace to disk hyphens are replaced with underscores, and the reverse when going from disk to namespaces |
| 22:23 | livingston | oh I'm just talking about symbols (and their namespaces) I'm using as data |
| 22:24 | brehaut | livingston: its uncommon to use symbols as data in clojure. idiomatically most code uses keywords for that purpose |
| 22:26 | livingston | brb - phone |
| 22:41 | mec | Is there a primitive version of mod? |
| 23:01 | livingston | brehaut: there are uses for both. |
| 23:02 | livingston | if you want to logically group a bunch of symbols together, that's exactly what namespace part of a symbol is for. |
| 23:35 | jlf | technomancy: does the error "Unable to resolve artifact" during lein deps indicate that a dependency has gone missing from the remote repos or that my project.clj is broken? |
| 23:40 | jlf | transcript at http://paste.lisp.org/display/120649 |
| 23:45 | phenom_ | anyone know why #1 performs about 5 times faster than #2 here: http://pastie.org/1688494 ? |
| 23:47 | brehaut | phenom_: pastie.org doesnt want to respond for me; can you put it somewhere else? |
| 23:50 | phenom_ | brehaut: http://pastebin.com/temNwRkP |
| 23:50 | brehaut | much better |
| 23:52 | brehaut | phenom_: you have warn on reflection on? |
| 23:53 | phenom_ | yup, nothing in that block comes up |
| 23:53 | phenom_ | but i see from stacktraces it's reflecting |
| 23:54 | brehaut | i cant compile either without a defintion for MyBuffer |
| 23:55 | brehaut | but if i were to guess (and it really is just a stab in the dark) i would say that .append is reflecting on buf |
| 23:55 | phenom_ | but buf is type hinted :S |
| 23:56 | brehaut | not in the version i have |
| 23:56 | brehaut | i dont know if the compiler infers back from class names |