00:04 mithos28: is there a way to write a function ctype where the output ctype depends on the actual arguments when the function is called? 00:05 mithos28: i.e. (_fun (a b) :: _int _int -> (if a _int _uint))? (note this does not work since a is not defined in the output-type expression 00:06 (join) realitygrill_ 00:06 (quit) neilv: Ping timeout: 260 seconds 00:07 (quit) realitygrill: Ping timeout: 260 seconds 00:07 (nick) realitygrill_ -> realitygrill 00:12 (join) jeapostrophe 00:14 eli: mithos28: No, if you can, the easiest thing would be to use some generic type that fits all return values, then use a second `->' and convert it to the desired one there. 00:14 eli: mithos28: Um, s/No,/No./ 00:21 mithos28: thanks, That will work, just will be obnoxious. 00:26 (quit) jeapostrophe: Quit: jeapostrophe 00:30 eli: mithos28: Well, the thing is that libffi requires known types when the glue function is made up, and not at the time that the function is called. 00:35 (join) jonrafkind 00:38 mithos28: ok. I think I am just going to use a macro to examine the type and output the right wrapper after the second ->, thus ensuring that I don't mismatch the type and wrapper. 00:40 mithos28: Is there any documentation on all of the necessary measures to ensure safety when using the ffi? 00:41 (quit) flying_rhino: Ping timeout: 276 seconds 00:43 (join) flying_rhino 01:01 (join) realitygrill_ 01:02 (quit) realitygrill: Ping timeout: 260 seconds 01:02 (nick) realitygrill_ -> realitygrill 01:09 eli: mithos28: Re macro -- I'm not sure that this will be the right way to deal with it since FFI types are runtime values, so you might fall into weird traps. 01:10 eli: And re safety, I'm not following that -- the ffi is inherently unsafe... So all documentation for writing C code would apply... 01:11 mithos28: for the macro, in my use case it will just be identifiers not arbitrary expressions so I can add the extra information on to the identifier 01:14 mithos28: as with regards to the ffi, disciplined use will make it safe, and i was wondering if there was documentation on the common pitfalls (gc, breaks, killing threads) 01:16 (join) realitygrill_ 01:17 (quit) otzi_: Ping timeout: 240 seconds 01:19 (quit) realitygrill: Ping timeout: 258 seconds 01:19 (nick) realitygrill_ -> realitygrill 01:21 (join) realitygrill_ 01:24 eli: mithos28: Yes, those are the pitfalls... IOW, I think it's "everything you'd suspect". But feel free to improve the foreign docs -- they need a lot of care. 01:24 (quit) realitygrill: Ping timeout: 260 seconds 01:24 (nick) realitygrill_ -> realitygrill 01:28 (part) haruki_zaemon: "Laterz" 01:46 (quit) realitygrill: Ping timeout: 276 seconds 01:46 (join) realitygrill 01:56 (join) neilv 02:01 (quit) jonrafkind: Ping timeout: 258 seconds 02:17 (quit) torche: Quit: torche 02:24 (join) hkBst 02:38 (quit) dnolen: Quit: dnolen 02:41 (quit) realitygrill: Quit: realitygrill 03:00 (join) Burlingk 03:16 (quit) flying_rhino: 03:16 (join) flying_rhino 03:16 (quit) flying_rhino: Client Quit 03:17 (join) flying_rhino 03:17 flying_rhino: hello 03:22 (quit) mithos28: Quit: mithos28 03:24 (quit) dmac: Ping timeout: 240 seconds 03:26 (quit) neilv: Ping timeout: 260 seconds 03:30 flying_rhino: someone here dudes? 03:35 Burlingk: :P I am, but I am a newb. :) 03:35 flying_rhino: heh 03:36 flying_rhino: I am newb too 03:36 flying_rhino: what do you plan to do with racket, fellow newb ? 03:38 Burlingk: Play around mostly. 03:39 Burlingk: I Would like to learn Lisp, so this is as good a place as any to start. :) 03:39 flying_rhino: Lisp is pretty cool 03:40 (join) dmac 03:41 flying_rhino: I know you are newb, but have you figured out how to create equivalents of java references or C pointers? I am trying to implement double linked list here 03:43 Burlingk: :P I am starting my way through a tutorial, and still get confused on handling text at times. :) 03:43 Burlingk: C or C++, I can tell you a lot more about :) hehe 03:44 flying_rhino: I know how to implement blasted thing there :P 03:52 (join) masm 03:52 flying_rhino: hi 04:50 (join) noelw 05:13 flying_rhino: guys? 05:21 noelw: duuude 05:29 flying_rhino: hi 05:30 flying_rhino: i am trying to implement doubly linked list (just to see how it works) 05:30 flying_rhino: and I am stuck 05:31 noelw: ok 05:31 flying_rhino: so node of list should be (struct: dl-node ([prev : dl-node] [next : dl-node] [data : Integer])) 05:31 flying_rhino: this compiles okay, but how to create instance 05:32 noelw: How does a normal list handle this case? 05:32 flying_rhino: like root that has some data, and prev-next references set to nill 05:32 flying_rhino: dunno 05:32 flying_rhino: I am creating my own to learn and see how would that work 05:33 noelw: Think about the single linked (i.e. normal) list 05:33 noelw: What is the datatype definition? 05:33 noelw: I.e. list = ??? 05:34 flying_rhino: I am something of a lisp noob (can grok c/c++ just fine) , so you will have to use smaller words here :( 05:34 noelw: Ok. 05:34 noelw: The list (list 1 2 3) = 05:34 noelw: (cons 1 (cons 2 (cons 3 nil))) 05:35 noelw: So there are two different data structures used in a list 05:35 noelw: A list of integers 05:35 noelw: (list integer) = null 05:35 noelw: or (cons integer (list integer)) 05:36 flying_rhino: basically it should work like list of integers (hence data : Integer) but it should be easier to traverse backwards 05:36 noelw: Sure. 05:36 noelw: But look at your data definition 05:36 noelw: You have only defined one struct 05:36 flying_rhino: I just thought to create some add-node and delete-node functions 05:36 noelw: Don't worry about those functions for now. 05:36 (join) mceier 05:37 noelw: Your data definition is wrong. 05:37 noelw: You won't be able to build a list till you fix it. 05:37 noelw: In C how would you create a double-linked list with one element? 05:37 noelw: What would you set prev and next to? 05:38 flying_rhino: well youl'l have struct that defines node. Prev and next would be pointers to previos and next node 05:38 noelw: And if there is no previous or next node? 05:38 flying_rhino: it would be null 05:38 flying_rhino: you'll have to check if it is null 05:39 noelw: Right. 05:39 noelw: So a (double) linked list is build from two types of data 05:39 noelw: nodes and null 05:40 flying_rhino: so prev and next should be node or null ? 05:40 noelw: Yes, just like a single linked list (which only has a next pointer, not a prev pointer) 05:41 noelw: For a single linked list, (list integer) = null or (cons integer (list integer)) 05:41 noelw: A list is either null or a cons of an integer and a list 05:41 noelw: Now extend that to a double linked list 05:42 flying_rhino: something like (struct: dl-node ([prev : (U dl-node null)] [next : (U dl-node null)] [data : Integer])) 05:42 noelw: You probably want 05:43 noelw: (define-type dlist (U null dnode)) 05:43 noelw: Then you can write prev and next as just dlist 05:43 noelw: (I mean as having type dlist) 05:44 flying_rhino: null means empty in Racket, right? 05:45 flying_rhino: I think I get it 05:45 noelw: groovy 05:46 flying_rhino: sp i do (define-type dlist (U null dnode)) and then (struct: dl-node ([prev : dl-node] [next : dl-node] [data : Integer])) , and then I do functions for manipulating list 05:46 flying_rhino: *so I do 05:47 noelw: Yeah, though there is a typo in those type definitions. 05:47 noelw: What I called dnode you call dl-node 05:47 noelw: and prev and next should have type dlist 05:48 flying_rhino: okay... this will sound dumb but how to create instance of dl-node? 05:48 noelw: You mean the syntax? 05:48 flying_rhino: yeah 05:48 noelw: (dl-node ...) 05:48 noelw: (dl-node null null 1) 05:48 flying_rhino: yeah obvious, really 05:51 flying_rhino: so first node would be (define: first-node : dl-node (dl-node null null 1)) 05:51 noelw: Note that's not a node but a list 05:51 noelw: The empty list is just null 05:52 noelw: The list of one element is what you've given 05:53 flying_rhino: so it that's not a node how to create first node? 05:54 noelw: When you create a node you have to create the rest of the list 05:54 noelw: Just like you can't create a cons without filling out the definition to create a list 05:54 noelw: You can't say, for example, (cons 1) 05:55 noelw: You have to say (cons 1 null) 05:55 noelw: and there you have a list... 05:55 flying_rhino: waitaminute, what I want here is mutable douby linked list. One where you can add new nodes at the end or in a middle. 05:56 noelw: Sure. 05:56 noelw: You have to mark the structure as mutable 05:56 noelw: (struct: … #:mutable) 05:56 flying_rhino: okay 05:56 noelw: (define dlist1 (dl-node null null 1)) 05:57 flying_rhino: okay 05:57 noelw: (set-dl-node-next! dlist1 (dl-node dlist1 null 2)) 05:59 flying_rhino: not sure it should work like that 06:01 flying_rhino: when adding new node to a list, there should be three arguments: (1) data you want node to have (2)existing node where you want to attach new node (3) bollean to se if you want node to be after or before existing node 06:02 flying_rhino: *three arguments 06:02 flying_rhino: I'll have to think about this more 06:02 noelw: Well you can implement that function if you want 06:02 flying_rhino: thank you for trying to help :) 06:03 noelw: np 06:05 flying_rhino: basically I am trying to develop a small game in Racket so I need some mutable data structures. I tried to start with doubly linked lists because they are easiest to implement (generally speaking). I know immutability is default with you guys, but when developing real time game it is unpractical when state changes 30 times a second. 06:06 noelw: Sure 06:06 flying_rhino: I hope you understand 06:06 noelw: There was a thread on double-linked lists on the Racket mailing list 06:06 noelw: Was last week, I think. 06:06 noelw: Maybe you started it? :) 06:06 noelw: Anyway, there were some interesting answers 06:07 flying_rhino: nope haven't started it 06:08 flying_rhino: I'll try to figure this out 06:31 flying_rhino: one more thing: when something has type 'any', that works just like in untyped Racket, right? 06:38 noelw: yeah 06:39 flying_rhino: but is immutable? 06:40 flying_rhino: I mean it is immutable in both cases 06:41 noelw: any is anything 06:41 noelw: immutable or not 06:41 flying_rhino: say I define (define: x : Positive-Integer 775) 06:41 flying_rhino: x is mutable ? 06:42 flying_rhino: I can chane it with (set! x 55) 06:42 flying_rhino: *change 06:42 noelw: Sure. Then it is 06:42 noelw: You've answered your own question :) 06:44 flying_rhino: and how would I define immutable one (not that I need it) ? 06:44 noelw: I don't think there is any syntax for that 06:44 flying_rhino: immutable positive-integer 06:44 noelw: Bindings are only mutable within a module 06:45 flying_rhino: so only lists, hashes and that fluf are immutable? 06:45 noelw: So if you don't export a set-x! function users of your module won't be able to mutate it 06:45 flying_rhino: didn't know that 06:45 flying_rhino: this racket is weird 06:45 noelw: Heh. 06:45 noelw: There is a difference between mutating a binding and mutating a value 06:46 noelw: Bindings not being mutable is an optimisation 06:46 noelw: You can change it if you so desire 06:47 noelw: I can't remember the name of the parameter, but it's in the docs somewhere 06:47 flying_rhino: okay 06:50 flying_rhino: I'll need more time to digest this stuff. I was drawn to Lisp because I like idea of customizing language with macros. I also like lack of syntax (makes easier to auto generate code). And posibility of extending code at runtime. But for imperative guy like me there is a lot of stuff to warp my mind around. 06:50 noelw: There sure is 06:50 noelw: First time I encountered functional programming my brain exploded 06:50 noelw: It took a long time to get it. 06:52 (join) neilv 06:52 (quit) neilv: Changing host 06:52 (join) neilv 06:52 flying_rhino: basically functional programming is to me lest atractive part of this thing. Nothing wrong with it but I jsut think imperative is better for a lot of stuff 06:52 flying_rhino: *the least 06:53 noelw: You'll learn a lot from the functional way of coding 06:53 flying_rhino: I hope so 06:53 noelw: There are many situations where this is useful 06:53 noelw: Concurreny and parallelism are the obvious cases 06:53 flying_rhino: ofcourse 06:54 flying_rhino: the problem with the thing I wanted to use it for (hobby game development) is that you need to create new state like 30 times a second... clearly unpractical 06:55 flying_rhino: can't be used for it 06:55 noelw: I generally agree with what you're saying 06:55 noelw: I'll note that Jay McCarthy at BYU is working on a different approach 06:55 noelw: Basically, if you accept that the performance critical parts of a game are moving to the GPU 06:55 noelw: and on the GPU sharing data is really bad 06:56 noelw: then you can get a lot of mileage from taking a functional approach and optimising the heck out of the resultant code to run fast on that GPU 06:56 noelw: Since FP code is much easier to analyse this can be a win 06:56 noelw: For the hobbyist, this isn't really viable. :) 06:57 flying_rhino: I doubt racket supports CUDA 06:57 flying_rhino: or wathever you need for GPU programming 06:57 bremner: you can certainly have state in racket. Heck you can have state in purist languages like Haskell 06:57 noelw: Racket support OpenCL 06:58 noelw: Sure. In Haskell you have to be explicit about all your data dependencies 07:00 flying_rhino: well since it has good C++ interop (or so I heard) so I can use 3d engine like ogre or irrlicht if I want. Not that I am going to do that right away 07:07 (quit) neilv: Ping timeout: 260 seconds 07:07 (quit) DT``: Read error: Operation timed out 07:22 (join) jeapostrophe 07:23 (join) DT`` 07:29 flying_rhino: I have one more question (or more precisely, rant) if no one minds 07:35 noelw: rant on. it's irc 07:44 flying_rhino: why everyone (except lisp guys) hate idea of macroes? To program at all, you need turing complete programming language (stepping, branching, iterration), right? It therefore stands to reason that any abstraction facility worth spit will have to be turing-complete also. Or there will be plenty of cases when it is no help at all. OOP is basically fancy branching which everyone hyped to high heaven 07:44 flying_rhino: and which produces bloated code. C++ has pretrpocessor is cool, but lacks looping construct. And now we got generic, templates, interfaces and kitchen sink. And to the best of my knowledge, none of that is turing-complete nad therefore can't really reduce LOC much. It seems to me that programming language designers would rather give you blow job than tools that actually work (ie macroes). When 07:44 flying_rhino: are mainstream languages stop inventing excuses for why they don't give you macroes and start implementing macroes. 07:45 flying_rhino: *sorry for awfull grammar there 07:48 flying_rhino: *I accidentally hit enter before proofreading it 08:04 bremner: I think macros are pretty hard to do right in languages with non-trivial built-in syntax. Or if not hard to do right, hard to use the result (see template-haskell) 08:10 flying_rhino: Even language with non-trivial syntax is phrased to some kind of abstract tree. And you should be able to manipulate that tree like XML document, to add, remove or rename nodes. Results are not hard to see if IDE knows everything about macros. You should be able to expand every macro untill you get basic code. So I think the problem is cultural. They won't give us macros because they believe 08:10 flying_rhino: programmers are too incompetent to have it. So all you got are LEGO bricks (oop and stuff) that you can use to play around in Eclipse. 08:11 bremner: flying_rhino: there is no they. 08:12 flying_rhino: what do you mean? I don't design languages. For me they are they :) 08:13 bremner: I think your position is inconsistent. You claim to know better, but also not to know enough. 08:15 flying_rhino: Well I don't claim to be language genius. And even if I where one, it would take years to design language. And even if I where to desing one no one would use it because (1) lack of tools (IDE and so on) (2) lack of source code. 08:16 bremner: more or less one of the main themes of racket is making it easy to design your own language 08:16 flying_rhino: and it doesn't take genius to figure out that non turring complete abstraction facilities can be useful in some cases, but are awful in other cases. 08:17 flying_rhino: well, I am not complaining about racket 08:17 flying_rhino: I came to it because of macros (and a few other stuff) 08:17 flying_rhino: and no one says design a few domain specific langs isn't somewhere on my to-do list. 08:19 flying_rhino: okay, I went too far (I DID ask if it is okay to rant but I went to far), but I think I have a point somewhere there. I apologize 08:22 flying_rhino: basically I was wondering why most languages avoid macros at all cost (and create bunch of other stuff instead) instead of figuring out how to properly utilize them. 08:22 flying_rhino: I think that is fair question 08:28 (join) haruki_zaemon 08:29 flying_rhino: *pharsed 08:44 (join) dnolen 08:50 noelw: I think macros are great 08:50 noelw: I believe C++ templates are turing complete (but they are restricted to 16 levels of recursion IIRC) 08:51 noelw: The reason most languages don't have macros: 08:51 noelw: 1) Because they don't. People haven't used languages with macros before and so don't miss them 08:52 noelw: 2) Macros in infix languages are substantially harder (for the language designer). Manipulating AST is also harder (for the programmer) 08:52 noelw: That's my opinion 08:52 (part) haruki_zaemon: "Laterz" 09:03 flying_rhino: Hm... it's been awhile since I did anything serous in C++. If templates can do that, that's good news! In my time I was frustrated about alck of turring completeness in preprocessor glad to hear it is better now. Thanks, noelw. 09:03 (join) torche 09:27 (quit) jeapostrophe: Quit: jeapostrophe 09:29 (quit) dmac: Quit: WeeChat 0.3.5 10:26 (nick) samth_away -> samth 10:26 (join) jeapostrophe 10:29 (join) anRch 10:30 offby1: I'd heard the same about C++ templates (that they're Turing-complete) but to me that's an argument _against_ using them :) 10:30 offby1: mind-bendingly complex 10:30 offby1: but maybe C++ people feel the same way about Lisp macros 10:30 offby1: *shrug* 10:30 (quit) dnolen: Quit: dnolen 10:32 samth: gf3: take a look at `evcase' 10:32 samth: rudybot: doc evcase 10:32 rudybot: samth: your racket/init sandbox is ready 10:32 rudybot: samth: no docs for a current binding, but provided by: mzlib/etc 10:33 samth: rudybot: (require mzlib/etc) 10:33 rudybot: samth: Done. 10:33 samth: rudybot: doc evcase 10:33 rudybot: samth: http://docs.racket-lang.org/mzlib/mzlib_etc.html#(form._((lib._mzlib%2Fetc..rkt)._evcase)) 10:33 samth: offby1: the "not really sent by jay.mcarthy@gmail.com" is b/c jay is using a mail server that isn't gmail, i think 10:33 offby1: how annoying 10:35 offby1: perhaps the real issue is: gmail's SMTP front end adds some X-I-Am-Not-A-Phishing-Message-Honest header, whereas those other SMTP servers don't 10:35 samth: but perhaps eli's explanation is the right one 10:35 samth: or maybe some combination 10:37 offby1: ah, hadn't read that until now. 10:37 offby1: It's odd; I'd have thought there'd be plenty of lists in the same situation 10:38 offby1: and that therefore google would have done something to make it easy for them to fix whatever the problem is 10:42 (quit) jeapostrophe: Quit: jeapostrophe 10:48 (join) realitygrill 10:50 (join) edjka 10:52 (quit) realitygrill: Client Quit 11:02 (quit) noelw: Ping timeout: 260 seconds 11:10 samth: offby1: just use google groups? :P 11:13 (join) noelw 11:16 eli: offby1: AFAICT, that header is the DKIM thing, which is some encryption-based fanciness to prove your honesty. But I can't make our mailing list vouch for a gmail-originated email... 11:22 samth: eli: the instructions here: http://mail.google.com/support/bin/answer.py?hl=en&ctx=mail&answer=185812 make it seem like you just need the SPF record and an "envelope sender" (whatever that is) 11:23 (part) edjka: "ERC Version 5.3 (IRC client for Emacs)" 11:24 (quit) hkBst: Remote host closed the connection 11:24 (quit) Burlingk: Quit: Leaving 11:35 (join) dnolen 11:38 (join) jonrafkind 11:42 (join) RacketCommitBot 11:42 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/HM-7ZA 11:42 RacketCommitBot: [racket/master] share table of shared code pointers - Matthew Flatt 11:42 (part) RacketCommitBot 11:52 (join) RacketCommitBot 11:52 RacketCommitBot: [racket] plt pushed 4 new commits to master: http://git.io/Pz2mVw 11:52 RacketCommitBot: [racket/master] add a better link from the snip class docs to the relevant section of the - Robby Findler 11:52 RacketCommitBot: [racket/master] Rackety - Robby Findler 11:52 RacketCommitBot: [racket/master] remove unnecessary thread creation & remove commented out code - Robby Findler 11:52 (part) RacketCommitBot 11:54 (join) mithos28 11:59 (join) jeapostrophe 12:06 (join) jeapostrophe_ 12:06 (quit) jeapostrophe: Read error: Connection reset by peer 12:06 (nick) jeapostrophe_ -> jeapostrophe 12:07 samth: jeapostrophe: tragically, drdr loses timing history on moved files 12:07 (part) jeapostrophe 12:07 (join) jeapostrophe 12:07 jeapostrophe: yup 12:07 samth: for example: http://drdr.racket-lang.org/23441/collects/tests/typed-racket/run.rkt 12:08 jeapostrophe: it doesn't know anything about what git is doing 12:11 (join) realitygrill 12:16 samth: jeapostrophe: can I ask you to manually copy the timing data for that file? 12:20 (join) RacketCommitBot 12:20 RacketCommitBot: [racket] plt pushed 3 new commits to master: http://git.io/AlgOOw 12:20 RacketCommitBot: [racket/master] Make the type of `syntax-local-module-defined-identifiers' more precise. - Sam Tobin-Hochstadt 12:20 RacketCommitBot: [racket/master] Move environment initialization after local expansion in Typed Racket. - Sam Tobin-Hochstadt 12:20 RacketCommitBot: [racket/master] Add test of behavior like the "module" language in DrRacket. - Sam Tobin-Hochstadt 12:20 (part) RacketCommitBot 12:21 jeapostrophe: samth: done 12:23 samth: jeapostrophe: there's something wrong there: http://drdr.racket-lang.org/23441/collects/tests/typed-racket/run.rkt 12:24 jeapostrophe: you are assuming the data points come in order, aren't you? 12:24 samth: i am at the moment -- should i change that? 12:25 samth: it's easy enough to change 12:25 jeapostrophe: they normally do, but I can just sort the file 12:25 samth: i can change it to sort in JS 12:25 samth: it'll be easy 12:26 jeapostrophe: i just sorted it 12:29 (quit) anRch: Quit: anRch 12:29 samth: i just changed it to sort, so we won't have to worry 12:30 (join) RacketCommitBot 12:30 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/XSZrlQ 12:30 RacketCommitBot: [racket/master] Sort chart data. - Sam Tobin-Hochstadt 12:30 (part) RacketCommitBot 12:38 (join) anRch_ 12:38 (join) MayDaniel 12:53 samth: stamourv: this chart makes me happy http://drdr.racket-lang.org/23513/collects/tests/typed-racket/run.rkt 13:03 stamourv: samth: I'm happy too. 13:04 jonrafkind: when I mouse over and get a popup it looks like the 'push 123' is a link but i can't possibly click that becuase if i move the mouse the popup goes away 13:05 (quit) anRch_: Quit: anRch_ 13:05 samth: jonrafkind: you click on the point in the graph, the popup stays 13:06 jonrafkind: oh.. the page should say that somewhere 13:06 samth: yeah, i have to write the help text 13:06 jonrafkind: ok 13:06 (join) danking 13:08 (join) superjudge 13:11 samth: btw, stamourv, i had the following idea for optimization 13:13 samth: if you care comparing two numeric union types for subtype, then that can be done faster by basically checking that all the elements of the first are elements of the second, which is faster b/c they're in order 13:13 samth: (this only works for numeric types b/c other types have non-trivial subtype relationships) 13:14 (join) machuga 13:33 (join) GeneralMaximus 13:44 stamourv: samth: Wouldn't that work for all union types? The contents are always sorted. 13:53 (quit) superjudge: Quit: superjudge 14:10 (quit) noelw: Quit: noelw 14:22 (join) anRch 14:34 (quit) dnolen: Ping timeout: 252 seconds 14:38 (quit) realitygrill: Quit: realitygrill 14:41 (join) dmac 14:55 samth: stamourv: other types that might be components of unions can have non-trival subtype relationships (eg, structs) 14:57 (quit) MayDaniel: Read error: Connection reset by peer 14:59 stamourv: Oh, right. 14:59 stamourv: Ah, but to first know if a type is a numeric type, you need to ask if it's a subtype of number, so I don't know how much we win here. 14:59 stamourv: Unless we want to keep a list of types that are numeric. 15:05 samth: we should make it possible to have the numeric types all have Type-key 'number 15:16 (join) realitygrill 15:17 eli: samth: That link-on-a-popup-that-disappears is very bad UI. 15:17 eli: Just have it disappear after a timeout, and there won't be any need for clicks. 15:18 samth: eli: i disagree -- i'd find it very hard to navigate without the tooltip 15:19 eli: samth: I'm not objecting to the tooltip -- just to it disappearing as soon as you move the mouse. If you let it linger for a second, then things become easy without any need for some help text. (Which I promise you nobody will read.) 15:20 samth: eli: that's how tooltips work -- they appear only while your mouse is over things 15:21 eli: samth: But a tooltip that has a *link* should not disappear immediately. 15:21 samth: would you want a stack of tooltips to pile up? 15:21 samth: that's why you can click 15:22 samth: would you prefer if the hover-tooltip didn't have the link? 15:22 eli: (1) no, when a new one appears you immediately remove the old one; (2) even havig a bunch of them appearing and disappearing is way better than a counter-intuitive click. 15:22 eli: s/havig/having/ 15:23 eli: Again, the link is fine, just don't make the tooltip disappear. 15:23 samth: having a new one replace the old would defeat the purpose of your suggestion 15:23 samth: the charts are too dense for that to work w/o the click 15:24 eli: That's the way it is, people will just carefully move the mouse away to a place where no new one appears. 15:24 (quit) Twey: *.net *.split 15:24 (quit) tewk: *.net *.split 15:24 (quit) zakwilson: *.net *.split 15:24 (quit) adzuci: *.net *.split 15:24 (quit) janne: *.net *.split 15:24 (quit) rapacity: *.net *.split 15:24 (quit) ozzloy: *.net *.split 15:24 (join) janne 15:24 (join) zakwilson 15:24 (join) rapacity 15:24 (join) adzuci 15:24 stamourv: samth: Isn't that type key suposed to be unique? 15:24 eli: If you really want to make things fine, then make it jump to the page on a click. 15:24 eli: But earlier you said that there was some problem with that. 15:24 (join) ozzloy 15:24 (quit) si14: Remote host closed the connection 15:24 stamourv: Or am I confusing it with something else. 15:24 (join) tewk 15:24 (quit) ozzloy: Changing host 15:24 (join) ozzloy 15:25 samth: eli: but that isn't the way to get to where the link is 15:25 samth: stamourv: no, the type key is a coarse grouping 15:25 samth: if two types both have non-#f type keys, then they must overlap (or be the same) for there to be a subtyping relationship between them 15:25 stamourv: samth: Ah, ok. Yeah, we can do that. 15:26 stamourv: I'll implement that. 15:26 eli: samth: What I'm saying is that either a click takes you to the page, and then the tooltip can say "click to get to that push", or the tooltip has the link and in that case it should linger for a while. 15:26 eli: That's very basic UI. 15:26 eli: A tooltip is providing extra information. 15:26 eli: That's why it's called a "tip". 15:26 eli: Your tooltips are more than tips now, which is why it's bad for them to disappear like tooltips. 15:26 samth: stamourv: we might need to change how the key information is speced in type-rep 15:27 stamourv: samth: How so? 15:27 (join) Twey 15:28 samth: stamourv: right now, the key for a base type is computed very simplistically 15:28 samth: see the `def-type Base' in type-rep.rkt 15:29 samth: eli: i disagree -- i find the interface nicer than either of your suggestions 15:30 stamourv: samth: Right. Could we add a kw argument for it? 15:31 stamourv: (To make-Base.) 15:31 eli: samth: Whatever. 15:31 stamourv: samth: And we'd need it for U too. 15:31 eli: I just wonder how many more people need to complain before you change your mind. 15:31 (join) si14 15:33 eli: samth: Oh, BTW, if you really want: find precedence for the current behavior. I bet that I can find 10 times more for what I suggested; and for the simple click-to-jump it's trivially 1000x. 15:39 (quit) si14: Remote host closed the connection 15:43 (join) superjudge 15:44 ohwow: Hello 15:46 (quit) jeapostrophe: Quit: jeapostrophe 15:47 (quit) anRch: Quit: anRch 16:07 (quit) realitygrill: Quit: realitygrill 16:08 clklein: I have a few unpushed commits that I've decided should be on a branch. Whats' the right way to do that? Use our "fork" extension to clone the plt tree then somehow copy my commits to that clone? 16:11 samth: clklein: do the fork, add the as a remote, and then push to that remote 16:20 clklein: samth: Thanks, that seems to have done it. 16:21 (quit) em: Ping timeout: 260 seconds 16:22 (join) si14 16:25 (join) ic_ 16:25 (quit) ic_: Client Quit 16:26 (quit) torche: Quit: torche 16:46 (quit) superjudge: Quit: superjudge 16:51 (join) ic1 16:52 (part) ic1 16:53 (join) ic1 16:53 (join) realitygrill 16:53 (part) ic1 16:54 (join) ic1 16:54 (part) ic1 16:57 (join) ic1 16:57 (part) ic1 16:58 (join) ic1 16:59 (join) torche 16:59 ic1: jemand aus deutschalnd? 17:00 bremner: I was there once, does that count? 17:00 (join) littlebobby 17:00 jonrafkind: i am a jelly donut 17:01 petey: i know a tiny bit of german 17:01 petey: but google translate probably knows more than i do :( 17:02 ic1: you can understand german^^ 17:02 ic1: all from US? 17:03 samth: ic1: matthias felleisen, the originator of Racket, is from deutschland 17:04 ic1: ok 17:04 samth: und andern kann ein bisschen deutsch wenn es not ist 17:04 ic1: I asked, because of my wrong english 17:05 samth: i wouldn't worry about that, ic1, we deal w/ plenty of college students 17:05 samth: :) 17:05 (nick) samth -> samth_away 17:07 ic1: nice, can I ask something if I need something regarding Dr Racket? 17:08 (join) RacketCommitBot 17:08 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/dIDIaA 17:08 RacketCommitBot: [racket/master] `random' always produces `Float'. - Sam Tobin-Hochstadt 17:08 (part) RacketCommitBot 17:11 (part) ic1 17:13 (join) RacketCommitBot 17:13 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/KZLRGg 17:13 RacketCommitBot: [racket/master] fixed and/or documentation, Closes PR 12197 - Matthias Felleisen 17:13 (part) RacketCommitBot 17:13 (join) ic1 17:13 (part) ic1 17:15 (quit) realitygrill: Quit: realitygrill 17:21 jonrafkind: are there any good use cases/examples of a name from the use of a macro bound to another macro in the template? 17:21 jonrafkind: like (foo x) => #'(let-syntax ([x ...]) x) 17:26 stamourv: t-r/rep/rep-utils.rkt probably does something like that. 17:26 stamourv: But you may not find that file especially enlightening/ 17:26 stamourv: s@/@.@ 17:27 jonrafkind: oh wtf theres typed-racket and typed/racket 17:27 jonrafkind: typed-racket is the old version, right? 17:28 stamourv: No. typed-scheme is. 17:28 stamourv: typed-racket is the implementation. 17:28 stamourv: typed/racket is the language. 17:28 stamourv: typed/scheme is the old language. 17:28 jonrafkind: why not put the implementation into typed/racket ? 17:29 stamourv: I argued for that, to save a collect. I forget the reasons. 17:29 stamourv: Reasons for going with typed-racket, that is. 17:29 jonrafkind: oh wel, anyway i dont see any uses of let-syntax in rep-utils.rkt, it does define-syntax a name but that name is just provided 17:30 jonrafkind: ok the question is if you have (foo x (x 5)) you could bind x to a let-syntax and have x transform the (x 5) part 17:30 jonrafkind: this is somewhat impossible in honu and im wondering if it matters 17:41 petey: icl: go ahead and ask 17:41 (join) ic1 17:41 (part) ic1 17:45 (join) realitygrill 17:46 (join) em 17:54 stamourv: samth: Your javascript graph thingy for DrDr should not truncate its y axis. 18:03 (join) jeapostrophe 18:09 (join) feor 18:12 (quit) littlebobby: Quit: Ex-Chat 18:14 (quit) feor: Remote host closed the connection 18:14 (join) feor 18:15 (quit) jeapostrophe: Quit: jeapostrophe 18:42 (join) jeapostrophe 18:44 (quit) jeapostrophe: Client Quit 18:52 (join) otzi 19:09 (join) RacketCommitBot 19:09 RacketCommitBot: [racket] plt pushed 2 new commits to master: http://git.io/jHF9sw 19:09 RacketCommitBot: [racket/master] allow different phases for `free-identifier=?' arguments - Matthew Flatt 19:09 RacketCommitBot: [racket/master] add `syntax-transforming-module-expression?', `variable-reference->module-base-phase' - Matthew Flatt 19:09 (part) RacketCommitBot 19:15 (quit) janne: Ping timeout: 260 seconds 19:30 (join) janne 19:35 (quit) masm: Quit: Leaving. 19:56 (quit) machuga: Ping timeout: 260 seconds 20:08 (quit) flying_rhino: Ping timeout: 260 seconds 20:17 (join) jeapostrophe 20:22 (quit) jeapostrophe: Client Quit 20:48 (quit) dmac: Ping timeout: 276 seconds 21:18 (quit) jonrafkind: Read error: Operation timed out 21:43 (join) dmac 21:51 (join) machuga 22:10 (quit) machuga: Ping timeout: 260 seconds 22:19 (join) RacketCommitBot 22:19 RacketCommitBot: [racket] plt pushed 4 new commits to master: http://git.io/ZMRrMA 22:19 RacketCommitBot: [racket/master] doc clarifications on `eq?' - Matthew Flatt 22:19 RacketCommitBot: [racket/master] scribble: more nowraps in HTML output - Matthew Flatt 22:19 RacketCommitBot: [racket/master] simpify an example - Matthew Flatt 22:19 (part) RacketCommitBot 22:47 (quit) em: Read error: Operation timed out 22:50 (join) em 22:51 (quit) dmac: Ping timeout: 260 seconds 23:21 (quit) mceier: Quit: leaving 23:33 (join) Apoc_ 23:33 Apoc_: Hello? 23:35 mithos28: Apoc_: Hello there. 23:35 Apoc_: I've got a quick question been a little stuck was hoping to get some clarification that I couldnt get from the docs 23:36 Apoc_: not sure if this is the place to do that or not :P 23:36 mithos28: This is one place, and if you cannot get the help you need hear the mailing lists are available 23:37 mithos28: here* 23:37 Apoc_: alright, its fairly simple, more of a syntax question really 23:37 mithos28: ok, ask away 23:37 Apoc_: if i have a function with two arguements, how do i write the function body to then use both? 23:38 Apoc_: define: expected only one expression for the function body, but found 1 extra part 23:38 Apoc_: im getting that error 23:38 mithos28: Can you write out what you have 23:38 Apoc_: sure 23:38 Apoc_: (define (star-at-angle a b) (overlay (rotate a STAR) MTS) (overlay (rotate b STAR) MTS) ) 23:38 Apoc_: thats my function 23:38 Apoc_: MTS and STAR are defined beforehand 23:39 mithos28: ok so the problem is that you have two expressions in the body 23:39 mithos28: each of which correspond to a picture (I think) 23:39 Apoc_: alright, so how would i call that expression with the two arguements? 23:39 Apoc_: and i think you are right 23:40 mithos28: what do you want to do with the two pictures 23:40 Apoc_: im going to be calling animate on them 23:41 mithos28: put them next to each other, above each other, overlaid? 23:42 mithos28: Can you tell me in words what (star-at-angle a b) is supposed to do? 23:44 Apoc_: im thinking that it should flip between two images 23:44 Apoc_: that are rotated 2 different amounts 23:44 (join) jonrafkind 23:45 (join) flying_rhino 23:45 mithos28: you cannot do that with having two expressions in the body of a function 23:45 Apoc_: hmm 23:45 Apoc_: alright, i think im missing something else here 23:46 Apoc_: i'm going to do a little more digging 23:47 mithos28: are you using 2htdp/image? 23:47 (join) neilv 23:50 Apoc_: yep 23:51 mithos28: I don't think you can do any animation with just that, but if you look at 2htdp/universe you should find what you are looking for 23:52 Apoc_: alright, will do, thanks! 23:52 (quit) Apoc_: Quit: Page closed 23:53 (join) dnolen 23:58 (join) dmac