00:00:21 *Main> System.IO.UTF8.putStrLn $ pretty idL 00:00:21 (λα : (α : ★) → (β : α) → α. α) 00:00:30 *Main> System.IO.UTF8.putStrLn $ pretty consL 00:00:31 (λα : (α : ★) → (β : ★) → (γ : α) → (δ : β) → (ε : ★) → (θ : (ζ : α) → (η : β) → ε) → ζ. (λβ : (ι : ★) → (κ : θ) → (μ : ι) → (ν : ★) → (π : (ξ : θ) → (ο : ι) → ν) → ξ. (λγ : (ρ : ο) → (σ : π) → (τ : ★) → (χ : (υ : ο) → (φ : π) → τ) → υ. (λδ : (ψ : φ) → (ω : ★) → (γ′ : (α′ : υ) → (β′ : φ) → ω) → α′. (λε : (δ′ : ★) → (η 00:00:31 ′ : (ε′ : ω) → (ζ′ : α′) → δ′) → ε′. (λζ : (κ′ : (θ′ : γ′) → (ι′ : δ′) → η′) → θ′. ζ γ δ)))))) 00:00:34 -!- MizardX- has joined. 00:01:51 -!- adam_d_ has quit (Quit: Leaving). 00:03:14 -!- MizardX has quit (Ping timeout: 276 seconds). 00:03:33 -!- MizardX- has changed nick to MizardX. 00:07:05 MissPiggy: in a dependent lang the function arguments to church numerals don't have to be a->a do they 00:07:12 pretty? 00:07:13 they just have to be (something which includes b)->b 00:07:24 Sgeo: prettifies a dependently-typed lambda calculus AST 00:07:38 * Sgeo is already confused 00:08:46 Sgeo: just go along with him 00:08:50 *her 00:09:29 well that's a subtype of b->b isn't it 00:10:28 hïrm 00:11:00 oerjan: right 00:11:04 *Main> System.IO.UTF8.putStrLn $ pretty (church 0) 00:11:04 (λα : (α : ★) → (γ : (β : α) → α) → (δ : α) → α. (λβ : (ζ : (ε : δ) → δ) → (η : δ) → δ. (λγ : (θ : ε) → ε. γ))) 00:15:11 Something's broken... 00:18:22 *Main> System.IO.UTF8.putStrLn $ pretty (church 50) 00:18:22 (λα : (α : ★) → (γ : (β : α) → α) → (δ : α) → α. (λβ : (ζ : (ε : δ) → δ) → (η : δ) → δ. (λγ : (θ : ε) → ε. (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β (β γ))))))))))))))))))))))))))))))))))))))))))))))))))))) 00:21:21 *Main> System.IO.UTF8.putStrLn $ pretty trueL 00:21:21 (λα : (α : ★) → (β : α) → (γ : α) → α. (λβ : (δ : γ) → (ε : γ) → γ. (λγ : (ζ : δ) → δ. β))) 00:21:21 *Main> System.IO.UTF8.putStrLn $ pretty falseL 00:21:21 (λα : (α : ★) → (β : α) → (γ : α) → α. (λβ : (δ : γ) → (ε : γ) → γ. (λγ : (ζ : δ) → δ. γ))) 00:22:01 -!- BeholdMyGlory has quit (Read error: Connection reset by peer). 00:22:25 "As an alternative to the encoding using Church pairs, a list can be encoded by identifying it with its right fold function." 00:22:26 Me likey. 00:22:40 can you define foldl with foldr? 00:24:17 yes 00:24:31 alise but why would you... 00:24:55 MissPiggy: if a list is defined as its foldr... 00:25:01 what oerjan said 00:25:10 defining things as their natural functions is a nice thing 00:25:20 like Maybe a is b -> (a -> b) -> b 00:25:28 Either a b is (a -> c) -> (b -> c) -> c 00:25:33 (a,b) is (a -> b -> c) -> c 00:25:34 etc 00:25:40 it's one of those anamorphism or catamorphism things 00:25:43 oerjan: what's the definition btw? 00:25:51 * oerjan cannot remember which is which 00:26:02 hm lessee 00:26:26 foldl' f b0 as = foldr (\a k b -> k (f b a)) id as b0 00:26:27 apparently 00:26:45 why the ' ? 00:26:51 that's what the LtU person called it 00:26:53 just not to clash 00:26:55 not for strictness afaik 00:26:58 oh 00:26:59 they failed :P 00:27:01 (at not clashing) 00:27:07 heh 00:27:39 i'm beginning to realise why nobody uses the dependently-typed lambda calculus as a core language 00:27:44 (it's frickin' verbose and opaque!) 00:28:01 um 00:28:09 you cant encode data types by the folds 00:28:20 you can represent a list as its foldr 00:28:28 it doesnt' work 00:28:31 yes, it does 00:28:42 sure you can. it's how it's done in System F iirc 00:28:48 map, foldl, head, tail, ... can all be implemented with juts foldr 00:28:50 *just 00:29:03 also: http://en.wikipedia.org/wiki/Church_encoding#Higher-order_function 00:29:50 MissPiggy: also is it just me or does prolog solve the expression problem? 00:29:51 maybe 00:30:10 prolog has no static types. 00:30:20 without which, it is much easier 00:30:24 iiuc 00:30:50 I don't think there's any point me linking to a research problem that proves what I am saying if you already know that I am wrong 00:31:23 MissPiggy: well, do link 00:31:34 but i'm fairly sure oerjan and wikipedia, and facts back me up on this 00:32:13 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.32.4355 00:32:45 note that this foldr encoding of lists applies to when lists have all elements the same type, like in haskell 00:32:50 MissPiggy: i'm just talking about lists 00:33:04 yeah I knew it was pointless 00:33:10 sigh 00:33:20 i don't think you understand what i'm saying 00:33:21 data Nat : * where 00:33:22 Z : Nat 00:33:25 S : Nat -> Nat 00:33:28 data List : * where 00:33:30 nil : List 00:33:37 cons : a -> List -> List 00:33:41 same thing 00:34:03 * coppro knows how to bug alise... hehehe 00:34:12 How? 00:34:31 MissPiggy: so, are you saying that map isn't implementable with just foldr? what about foldl? head? tail? 00:34:41 by insisting that C# solves the Expression Problem 00:34:49 you can do whatever the fuck you want in haskell or untyped lambda calculus or wikipedia 00:34:57 what does that have to do with it 00:35:41 coppro: >_< 00:35:51 it comes close 00:35:53 MissPiggy: because you are being opaque about what you are actually trying to state to me 00:36:07 coppro: can you add new methods and have them work on existing members of a type hierarchy? 00:36:20 alise: Yes, they're called extension methods 00:36:27 I think it's more a case of you already have your mind made up 00:36:32 they're just glorified functions, but okay 00:36:38 that doesn't really count :P 00:36:47 MissPiggy: I haven't and I'm trying to get the information out of you, dammit 00:37:02 they are 00:37:02 and you seemed to read an entire research paper in the amount of time it takes to read its title 00:37:13 MissPiggy: um so whether you can define a data type using a foldr might depend on your type system. what does that have to do with what we are saying? 00:37:22 but does the semantic difference of what is and isn't a member of a type matter? 00:37:23 MissPiggy: i read the abstract 00:37:29 usually that summarises what the paper concludes. 00:37:35 other than the verbosity 00:37:39 coppro: yes 00:37:49 alise: explain 00:37:56 coppro: access to private fields 00:38:02 QED 00:38:24 it's equally clear that in the System F type system people _have_ defined list types as their corresponding fold types 00:38:33 this thread of discussion has got murky and clouded with assumptions so lets clear it and we can start again 00:39:00 alise: that isn't required 00:39:09 coppro: well nothing is required 00:39:17 the expression problem doesn't reduce a language's power 00:39:21 it reduces its expressivity 00:39:45 * coppro wonders why the idiot decided to refer to it as being solved, when it really isn't 00:39:59 I'd argue prototype systems come closest to solving it 00:40:01 What idiot? 00:40:09 The author of the .txt file? 00:40:10 alise: Wadler 00:40:13 O_O 00:40:16 You just called Wadler an idiot. 00:40:50 Firstly, Wadler is a great computer scientist who came up with using monads in programming and many aspects of Haskell's design. 00:40:51 he was an idiot when he decided to refer to it as being solved 00:40:54 or solvable 00:41:00 Secondly, he didn't. He presented *one solution*. 00:41:11 It allowed you to add both rows and columns. 00:41:13 That is a solution of the problem. 00:41:21 It may not be the best or even a good solution, but it is a solution. 00:41:40 in that case I contend that C# has solved it 00:42:05 No. 00:42:06 Private fields. 00:42:53 I contend that those do not matter 00:43:28 Nothing matters. 00:43:34 It is a problem of convenience and expressivity, not power. 00:43:43 So either obey all the rules or obey none. 00:43:54 If it wasn't about private fields, *every* OOP language would solve it. 00:44:04 (In an awful, kludgey way, of course.) 00:44:21 you have to "add new cases to the datatype and new functions over the datatype" 00:44:24 Summary: In lambda caculus you can define data types (including higher order ones like the syntax of lambda caclculus itsself using the Scott encoding, in Haskell you can't use this because it doesn't typecheck but data types are isomorphic to the folds (but the algorithmic complexity of functions you define on the fold version is limited), in dependently typed calculus you can't use the fold encoding because you can't do induction on these types. 00:44:28 coppro: Anyway, if you add an extension method to a subclass, do you have to add it to all superclasses too? 00:44:43 Summray: In untyped lambda caculus**** 00:44:45 If you add an extension method to a superclass, do you have to make separate definitions for each subclass? If not, then it is not solved. 00:44:48 alise: Actually, that I'm not sure about, and would be fatal to the Expression Problem 00:44:52 alise, oerjan ^ 00:44:54 but access to private members is not fatal 00:45:30 Interestingly enough, prototype systems take it one step further 00:45:55 i just spent about half an hour to an hour shoveling snow 00:46:11 par for the course 00:46:22 GRAR UPPER BODY STRENGTH 00:46:26 HULK SMASH SNOW 00:46:58 MissPiggy: kay :P 00:47:03 you are the snow shovelar! 00:47:11 coppro: But yes, I just realised that's why it doesn't solve it. 00:47:13 prototype systems let you define new functions over individual objects 00:47:20 -!- Wareya has quit (Read error: Operation timed out). 00:47:22 coppro: In a real-life table of numbers, 00:47:24 i'd shover your snow ;o 00:47:28 I typed that all out and you're not even going to read it? 00:47:31 you can't just add a column, put one number in, and pretend all the rest are that number 00:47:37 You have to fill in each separately, considering each row 00:47:59 MissPiggy: I read it 00:48:10 MissPiggy: why do you assume I did not? 00:48:16 ah, true 00:48:32 * coppro motions quietly in the direction of Python 00:48:33 coppro: admittedly, normal OOP systems fail at this with rows too by inheriting methods; but that's less bad, since it's just one row being affected 00:48:41 rather than a nuclear holocaust of oppression as in adding a column 00:49:16 alise: why does inheriting methods screw it up? 00:49:25 wait, it doesn't 00:49:36 with the column fuckup you enter one and it magics into the other rows 00:49:41 but with method inheritance, there's no entering+copying 00:49:44 it's just regular inheritance 00:49:45 ok 00:50:10 Incidentally, language implementations with a solution of the expression problem are godly in their ease-of-organisation. 00:50:25 ok, here's a fun one 00:50:37 Erlang 00:50:41 Adding a new construct? You can do it in one module: add a row to the AST type, implement all the columns (like "compile", "prettyprint"), add it to the parser, and you're done. 00:50:44 oerjan? 00:50:47 (note: I know it doesn't solve it. I'm asking you to describe why ont) 00:50:47 -!- Wareya has joined. 00:50:48 *not 00:50:58 alise because you didn't even argue 00:51:00 It becomes organised by feature, not by phase. 00:51:09 MissPiggy: because you're probably right :P 00:51:18 coppro: Erlang isn't strongly-typed; mu 00:51:30 well. you can't add pattern-matching cases to a function in erlang, too 00:51:41 so even if you arbitrarily said {foo,2} is your new row, you can't fill in the columns 00:51:47 yeah, it fails pretty hard 00:51:54 funny for a functional language though 00:52:04 adding new types is the easy bit 00:52:13 well, since it's not statically typed you can think of it as being able to add rows 00:52:18 it's just that you don't have to declare the rows you add :) 00:52:19 MissPiggy: well as i said it means it doesn't work in all type systems. perhaps it's a general problem for all dependent ones, i don't know. 00:52:27 er 00:52:28 wait 00:52:28 no 00:52:30 it can add columns 00:52:32 but definitely not rows 00:52:33 right 00:52:35 like most functional languages 00:52:56 the expression problem only really makes sense with static typing 00:53:26 coppro: i was expecting you to be more "coool" at my thing about language implementation organisation :( 00:53:45 sorry 00:53:53 ehird 00:53:53 :P 00:53:57 alise* 00:54:02 ha, i was just about to 00:54:32 are you considering designing a language which has a very easy solution to the expression problem? 00:54:39 food -> 00:55:04 augur: i'm considering including my nice syntax for my solution in my language 00:55:08 and making _all_ types tables 00:55:17 (although of course you have to export the table part to get it extensible by others etc) 00:55:34 all ADTs that is 00:55:46 I wonder if the ability to subclass could be considered a requirement 00:55:58 no, just extend the type 00:55:59 hm 00:56:10 subtyping in OOP extends the parent type, because you can use the subclasses as their parents 00:56:11 or have type extensions of some sort 00:56:16 yeah 00:56:18 yes 00:56:19 that's adding rows 00:56:22 well 00:56:26 adding row = extending type + filling in columns 00:56:35 adding column = making function + filling in rows 00:56:40 with covariance or contravariance? 00:56:49 COMONADS AND CONTRAMONADS 00:56:57 coppro: I don't see why? 00:57:04 alise: no, I mean which 00:57:09 er I was thinking of the wrong meaning of covariance :D 00:57:21 coppro: no, all the extensions are considered equal 00:57:29 subtyping in OOP just happens to do this, it isn't the optimal way 00:57:36 the optimal way is simply adding constructors to an existing data type 00:57:37 subtyping in OOP is covariant 00:57:41 (usually) 00:57:50 yes, but it doesn't matter for the expression problem 00:57:56 but it does 00:57:58 subtyping is a more general operation than what you need for the expression problem 00:58:05 with the expression problem, all are = 00:58:27 what does one define as "adding new cases to the datatype"? 00:58:57 data Foo a = Abc Int a 00:59:01 data Foo a = Abc Int a | Bar a a 00:59:04 data Foo a = Abc Int a | Bar a a | Quux Int String 00:59:32 * alise realises something 00:59:43 alise: Why doesn't simple composition not qualify? 00:59:46 my language probably has almost as many features that almost all other languages don't have, as common features 00:59:48 *does 00:59:55 coppro: it does i think? 01:00:14 well you just said that extension was necessary 01:00:22 well it has to extend the original type 01:00:23 unless we were talking about different definitions of extension 01:00:28 because you fill in the columns 01:00:30 people in haskell are mean 01:00:32 and you can't change the type of the columns 01:00:34 #haskell 01:00:35 it's an overloaded word I think 01:00:39 dependent types, mixfix operators, extensible syntax, partiality as an effect, heavy unicode usage, 01:00:47 solution to the expression problem, 01:00:48 ... 01:01:05 alise: what do you mean "fill in the columns"? 01:01:17 when you add a new row 01:01:24 you have to implement all the functions (columns) 01:01:25 for that row 01:01:40 again, think of a real table of numbers 01:01:49 I don't think that's a requirement 01:01:49 if you add a row, you have to fill in the values for its columns 01:01:55 since many functions can't be implemented 01:01:59 if you add a column, you have to fill in the values for its rows 01:02:03 coppro: all the functions previously added 01:02:04 the columns 01:02:12 * alise is beginning to suspect you don't understand the problem... 01:02:14 -!- coppro has left (?). 01:02:20 uh, bye. 01:02:21 -!- coppro has joined. 01:02:23 wb 01:02:27 did you miss anything? 01:02:29 alise: I do understand it 01:02:30 no 01:02:34 wait 01:02:39 do you have the link to my explanation? 01:02:41 I'll show what I mean 01:02:44 no 01:02:45 I don't 01:02:54 ok 01:03:14 AFAICT, we're currently arguing over the specification of the problem 01:03:17 i need the explanation though :P 01:03:22 i could search the logs I guess 01:03:34 coppro: well, I'm 99.9% sure I've described the problem correctly 01:03:48 alise: I'll wait on your explanation before saying more 01:03:55 just to check 01:03:59 you have read http://pastie.org/812459.txt?key=cadkhg4ho0qiceepz1a7w right? 01:04:06 might be good to read it again :P 01:04:12 (I wrote it) 01:05:00 slight hinting + greyscale antialiasing makes linux typography okay, yay. 01:05:49 alise: yes, I agree 01:05:59 with the antialiasing thing? 01:06:05 no, your explanation 01:06:08 ah :P 01:06:15 however, I also see our disagreement 01:06:28 you're considering it as an isolated case; I'm considering every function and type as a whole 01:07:06 ? 01:07:10 add more jargon to that 01:07:13 it's too vague 01:07:14 e.g. there is an comparison function which is defined for numbers, but not for lists 01:07:30 whereas there is a function to get the first element of a list that is not defined for numbers 01:08:05 a table is a type, by the way 01:08:10 rows = members of that type 01:08:13 columns = functions on that type 01:08:15 ah 01:08:20 okay, that's what I was missing 01:08:23 rows are data, columns are functions 01:08:24 tables are types 01:09:54 now things make more sense :) 01:10:36 yeah the "some functions aren't implementable" thing was confusing me 01:11:02 also, note that not every function on a type needs to be a column; if it doesn't access the data directly and is just a composition of columns and other non-column functions, it doesn't change definition depending on the row 01:11:14 hey alise, will you be on next week? 01:11:21 wend 01:11:25 MissPiggy: End, yes; why? 01:11:35 well just wondering like if you aren't 01:11:39 then ? 01:11:48 coppro: this adds slight awkwardness to the typical functional style because you have to declare column functions specifically; I'm considering inferring it 01:12:00 (pattern match = Damn nigga, you sum columnic function) 01:12:15 MissPiggy: Then what? You mean if they find out and imprison me in a fortress for 100 years? 01:12:52 okay so you're not worried 01:13:41 Not particularly. They know I can program and like being on the computer (which I wave away with "talking on IM? yeah, yeah, that. no, not Facebook") but I don't think they know I have any sort of web prescense, so them googling for me is unlikely 01:14:00 If they don't do that, how will they find out? The incriminating thoughts have been in my head since the first few days and they don't seem to have read them yet. 01:14:34 If I'm not on this week or next week, well... what can you do? Nothing, really. 01:14:42 Rest assured I won't be personally giving up, so... 01:15:52 We'll just assume your Finnish internet connection isn't set up :P 01:16:27 Internet connection is the only thing going for Finland over Sweden and Norway. 01:16:37 I'm adamant about not working for the military, so it's out :P 01:16:52 (Even though by 18 I'll be a senior professor of awesome at MIT.) 01:17:21 I thought you weren't going to the USA? :P 01:18:34 All the excellent CS universities are in America. I could, at least, stand Massachusetts. :-P 01:18:48 Also note that I may have been joking a wee bit, what with the senior professor of awesome thing. 01:18:56 *gasp* 01:19:12 clearly this is the difference between male and female ehird 01:19:38 yeah the male one never joked 01:19:39 Yes; female alise would never be promoted to Senior Professor of Awesome because of SEXISM 01:19:56 Also, hey, who says I'm female! Just because I'm referring to myself with female pronouns! 01:20:10 It's sexism to mandate that only one sex can use one set of pronouns. 01:20:20 it's the (s)h/it, man 01:25:37 Why did classic Clearlooks become modern Clearlooks? 01:25:40 Old Clearlooks is far prettier. 01:33:40 alise: they'll have to create that professor for you, i think 01:34:47 Professor. Ingredients: 50 bananas/day. 25 cups of coffee/day. 1 Ph.D. Mix until of a frazzled and messy consistency. Cook for 30 minutes at 30 Celsius. 01:35:15 or, if a physicist, at 300 K 01:36:35 yes physicists are cold, horrible people 01:36:37 is that what you meant? 01:36:49 3.15 degrees make all the difference 01:37:02 hmm, so the difference between a physicist and a mathematician is ~pi 01:37:07 makes sense. 01:37:20 -!- Asztal has quit (Ping timeout: 258 seconds). 01:38:31 * coppro cackles 01:38:50 wat. 01:39:07 I'm trying to freeze the physicists 01:39:50 xD 01:40:07 yeah 26.85 degrees is freeeeeeeezing 01:40:13 I know I'll never get rid of their energy entirely, but I'll get rid of what I can 01:40:27 coppropy 01:40:50 then I shall design a mysterious and inexplicable device with their zero-point energy 01:42:28 hmm... in what language should I write my text visualizer? 01:45:07 Haskell. 01:45:18 cobol 01:45:19 "text visualizer"? 01:45:20 Already had your reply written down 01:45:26 I already have one of those 01:45:31 The whole program essentially boils down to "vis s = map tile s", after all. 01:45:43 Indeed, with FRP, you could write literally that. 01:45:46 to start, yeah 01:46:04 Okay then, "vis tiles s = map (tile tiles) s". 01:46:50 yes, I get it :P 01:46:59 I'm strongly considering Haskell 01:47:00 Well, it's not "to start with", it's pretty close to all you need. 01:47:09 alise: I intend to add more features 01:47:15 Of course, but the actual tiling part. 01:47:17 screw Unix 01:47:29 coppro: If you do, please do consider using an FRP toolkit. 01:47:37 You don't have to worry about updating the rendering on its changing or anything. 01:47:42 alise: Yes, that seems like a good idea :) 01:47:43 (FRP is basically event-based programming, but functional) 01:48:10 coppro: Unfortunately, most FRP implementations suck. :-) 01:48:28 I don't know if GuiTV lets you do arbitrary graphics, but look at http://www.haskell.org/haskellwiki/TV for the sort of thing that would help updating 01:48:58 (TV is conal's plaything, and conal is one of the main FRP dudes; he was writing papers about it from the start) 01:49:16 coppro: So what kind of features are you considering? 01:49:20 Here's something that would be cool: 01:49:47 alise: changing tile images based on surroundings, possibly editing 01:49:53 You could tell it to run the command "nethack", with a definition file that says the area of the screen (coords of the map) is to use tileset foo, and the rest is to use tileset (a simple bitmap font). 01:50:02 It'd interpret the vt100 codes and send your keypresses, and voila! 01:50:06 yeah, that was on the 'lofty goal' bit 01:50:09 Graphical nethack in a few lines and some drawing! 01:50:14 vt100 codes are very simple, so 01:50:18 yep 01:50:23 was thinking that /exact/ thing, actually 01:50:23 you could even use termcap/whatever to make them send ones easier for you 01:50:33 not that I'd actually use it for nethack 01:50:50 writing apl :P 01:50:56 :P 01:51:06 given a program that compiles ascii characters to apl chars 01:51:19 you could arrange the apl chars to the alphabet etc on your keyboard to your liking like the old apl keyboards, and just type away 01:51:47 I like APL 01:51:51 where should I start with actually learning Haskell Syntax? 01:52:04 coppro: You should learn Haskell in one go. :-) 01:52:06 coppro, f x y z is what you'd normall write like f(x,y,z) 01:52:11 alise: yes, but where 01:52:14 http://learnyouahaskell.com/ is an excellent starting point. 01:52:14 except that its ACTUALLY (((f x) y) z) 01:52:25 thank you for telling me what currying is 01:52:29 It's practical, simple to understand and amusing. 01:52:36 I like the elephant 01:52:37 MissPiggy: coppro is rather beyond that stage 01:52:42 coppro thank you for learning the first thing about haskell syntax 01:53:02 I also happen to sort-of understand monads 01:53:06 coppro: learn you a haskell doesn't actually explain monads yet, but surely you've picked up what a monad is by now? 01:53:08 ha 01:53:15 ESP too :P 01:53:20 what I wrote has nothing to do with monads 01:53:26 I know that 01:53:28 that was the reverse state monad 01:53:33 http://lukepalmer.wordpress.com/2008/08/10/mindfuck-the-reverse-state-monad/ 01:53:36 (it passes state backwards in time) 01:54:07 hmm... LYAH says it's aimed at someone who hasn't done functional programming 01:54:16 doesn't matter 01:54:19 it works for someone who has too 01:54:20 ok 01:54:31 it just might be a little easy at first :P 01:54:39 remember that style is important in haskell, though 01:54:49 it's easy to write bad haskell code, and it often looks like good code in other languages. 01:54:55 (because they're less expressive) 01:55:00 if coppro doesn't like reading things he already knows he should just learn Haskell from the Report 01:55:02 so paying attention to what it does is probably a good idea 01:55:22 I think A Gentle Introduction is harder to read than the Report :-) 01:55:25 the highest signal ratio you will get is from the report 01:55:35 yeah it is but he flipped out when I mentioned currying 01:55:38 alise is right though; style is everything 01:55:48 MissPiggy: he didn't 01:55:56 so he probably wont be able to handle LYAH 01:55:59 he was just pointing out, sardonically, that he was rather beyond that stage 01:56:05 chill :P 01:56:38 "Haskell was made by some really smart guys (with PhDs)" <-- excellent. An important feature to any language. 01:56:48 Hey, I don't have a Ph.D. 01:56:55 :P 01:57:35 just steal ideas from PhDs then, that's what I do 01:57:39 ditto 01:57:42 lol 01:57:52 later, I'll pay them to make a proof of soundness for me to steal. 01:57:55 like TeX 01:58:07 wat 01:58:12 TeX is pure genius. And it was made by a guy with a Ph.D. Coincedence? 01:58:25 Ehh, TeX has flaws :P 01:58:32 how TeX is pure genius? 01:58:40 it's good though, just not "pure genius" 01:58:42 Objective-C. /me yawns. 01:58:45 I thought it was pretty much just a good tool that needed to be made 01:58:48 coppro: you do realise you can get a Ph.D. in theology, right? :D 02:00:42 -!- MissPiggy has quit (Quit: Lost terminal). 02:01:20 the top two things missing from haskell: 02:01:25 1. Dependent types 02:01:31 2. A powerful (ML-style) module system 02:01:50 1 would in fact remove the need for many other features (like foralls and typeclasses) and even go a long way to solving 2 :P 02:02:00 doit 02:02:09 I'm no dolt! 02:02:19 (http://folklore.org/StoryView.py?story=Do_It.txt) 02:02:23 but, err, what 02:02:48 go fix Haskell :P 02:03:06 I'm doing that! Sort of. 02:03:13 By making an entirely new language with lots of things from Haskell. 02:03:34 quick, someone explain why negative numbers must be in parens 02:04:01 Haskell needs typeclasses? 02:04:14 coppro: because f -3 is f - 3 02:04:23 ok 02:04:24 I've pondered emulating typeclasses in Agda and decided that Agda without typeclasses would be superior to Agda with typeclasses. 02:04:28 that's haskell's first dirty little secret :) 02:04:34 uorygl: haskell doesn't "need" them 02:04:48 alise, DoIt 02:04:48 implicit arguments + records/modules > typeclasses 02:04:58 the former almost always comes with dependent types. 02:05:15 alise: knowing nothing, I'm going to guess that operators are just identifiers and arithmetic is a curried expression template? 02:05:16 data Monad m = Monad {return :: forall a. a -> m a; . . .} 02:05:26 coppro: (symbols) is an infix operator 02:05:28 (+) :: ... 02:05:36 aw, I'm wrong :( 02:05:43 arithmetic is just a function :P 02:05:51 uorygl: yes, but you have to specify that every time :) 02:05:55 but yes, that + implicit arguments = tada 02:05:58 if/then/else is more than just a function :( 02:06:00 yeah, but I was thinking it would be smalltalkish 02:06:03 Sgeo: not in agda! 02:06:05 coppro: howso 02:06:08 ((1 +) 2) 02:06:17 (1 +) works, so does (+ 2) 02:06:22 you can think of (1 + 2) like that if you want. 02:06:22 coppro, you can do that in Haskell 02:06:39 I guess I'll read a bit more before adding additional comment 02:06:45 coppro: there's also "infix[lr] symbols N" which defines associativity and precedence 02:07:44 ok 02:08:06 agda does operators far better 02:08:16 if_then_else_ is how you define the conditional operator (syntax in haskell) 02:08:21 _+_ is addition, etc 02:08:59 yeah, I know, I read that bit of Agda 02:09:10 languages that modify their own syntax always scare me though 02:09:48 it isn't modifying syntax 02:09:51 not really 02:10:15 you could view it as agda parsing to a very linear form at first 02:10:20 and the rest being semantics, not syntax 02:10:30 anyway, it isn't full syntax modification 02:10:57 still makes me squeamish 02:11:20 I find syntax modification slightly creepy but I just see mixfix as a generalisation of prefix, infix and postfix operators 02:11:30 after all, you can emulate if a then b else c with if a then (b else c) 02:11:45 so the only "big" change is allowing non-symbols in operator names, which means you can't know for sure what's an operator at parse-time 02:11:59 right 02:12:50 We should make a language where syntax modification is critical to use, or something 02:12:55 No :P 02:13:09 coppro: I might have to be up at 8, but probably not. Probably more like 9-10. 02:13:13 it's called Perl 02:13:18 I should probably think about bed sometime. 02:13:23 probably 02:13:25 But I'm stupid, so I won't :D 02:13:26 see you Friday 02:13:42 Bleh. LYAH's code samples have invisible _ 02:14:16 http://esolangs.org/wiki/Defcalc 02:14:19 I like this language 02:14:21 Sgeo: invisible? 02:14:29 alise, I can't see them 02:14:33 For some reason 02:14:38 Get some glasses 02:14:48 They look like spaces 02:14:58 line height or sth probably 02:16:18 http://i.imgur.com/sMKlv.png 02:18:23 There's supposed to be underscores there? 02:18:41 Ah. 02:18:41 Yes. 02:18:43 I love the wiggler diagram of the list 02:18:51 (Underscore means "ignore this argument".) 02:19:08 coppro: link? 02:19:11 Nothing <*> _ = Nothing 02:19:18 alise: http://learnyouahaskell.com/listmonster.png 02:19:25 Not space, like it appears in the screenshot 02:19:36 coppro: ah yes 02:19:38 i think that's new since I read it 02:20:10 A list is a curious monster. 02:20:24 why is == [] bad? 02:20:49 coppro: requires the content type to be comparable with == 02:20:49 because it's "null xs" 02:20:54 also that 02:21:00 (Eq a) => Eq [a] 02:21:10 so you can't compare two lists of incomparable elements, so you can't do == [] on them 02:21:16 null, otoh, uses pattern matching, and so is fine 02:21:38 [1] == [] works fine for me 02:21:48 that's because you can compare numbers. 02:21:55 sure, but try [sin] == [] ... 02:22:04 ah 02:24:18 "Mapping and filtering is the bread and butter of every functional programmer's toolbox. Uh." --LYAH 02:24:48 that "Uh." in the actual quote? 02:24:54 yes 02:24:59 :D 02:25:08 (if you're confused, whoosh) 02:25:11 Ah, B0NUS' writing. 02:25:24 *BONUS 02:25:26 His name is BONUS. 02:25:31 One of the better language tutorials I've read in general. 02:25:34 never mind his writing, take a look at his twitter 02:25:35 http://twitter.com/bonus500 02:25:53 alise: well i read that as a possible sarcasm tag... 02:26:03 oerjan: "bread and butter" "tool box" 02:26:26 well ok i did notice that too 02:26:39 alise: That is one of the more amusing Twitters. 02:26:50 He emits twats on a daily occasion. 02:26:58 Tee hee hee, twat. Ahem. 02:27:32 twit is destined to become a strong verb 02:27:53 Twit, twit your twat's twat. 02:27:59 TRANSLATION 02:28:13 Idiot, post (your vagina's posting to Twitter) to Twitter. 02:29:08 i'll call 't wit 02:29:30 I will sleep soon, I will sleep soon, I will sleep argh 02:29:53 any ops here? we should ban alise for hïrs own good 02:30:17 hrs own good? What sort of grammar is that? 02:30:25 also, I'm only going to be affecting my performance in Hell. 02:30:43 might need to wake up at 8am, it's 2:30. but more likely 9 or 10 02:30:44 you might still want to show up on time... 02:31:13 If Elliot is anything like I, mobility and consciousness are detached. 02:31:17 i'm just trying to make neutral pronouns by merging... 02:31:19 *Elliott 02:31:22 pikhq: only partly. :P 02:31:28 And I presume that he merely needs mobility, and doesn't *desire* consciousness. 02:31:29 oerjan: Show up on time? They come for you. 02:31:36 I would just have to do without much sleep. 02:31:37 oh dear 02:31:49 pikhq: oh, I can't be mobile without consciousness 02:32:00 I find my mind sparks a lot while I'm sitting barely able to move my hands on the keyboard, though 02:32:06 alise: Sounds like mobility isn't needed, either. 02:32:18 I am expected to walk around and go to classes when I get there... 02:32:28 Alas. 02:34:03 I wonder if this chocolate will make me sleepy. 02:36:04 alise, they have classes there? 02:36:21 Sgeo: It is, nominally, a school. 02:36:31 I would hardly be sane if I wasn't pumped with the idiotic national curriculum, would I? 02:36:37 pikhq: Actually, it's a "hospital" containing a school. 02:36:47 Or rather, a branch of a metaschool with no physical location. 02:36:56 (schools various newcastle hospitals.) 02:37:03 For the most part, the idiotic national curriculum is a good thing. 02:37:11 No. Hell no. 02:37:13 Double hell no. 02:37:19 Quadruple hell no. 02:37:27 O_O 02:37:42 Remind me again how this is a bad thing? You're forced to stay nights, I think? I guess that makes it bad 02:37:45 -!- MizardX has quit (Ping timeout: 248 seconds). 02:38:04 The national curriculum of almost all - (all?) - countries actively inhibits learning for the intelligent. 02:38:12 alise: Oh, I agree 02:38:30 unfortunately, the majority of people are not 'the intelligent' 02:38:40 Sgeo: He was homeschooled. They believe he is in some manner or another mentally deficient. They are threatening to institutionalise him. 02:38:48 Homeschooled, I object to that word. 02:39:06 alise: 'Tis the word, though. 02:39:08 I was not in a "school" at "home" nor was I taught by my parents as the word evokes. 02:39:15 Ah. 02:39:23 I did, however, learn a crapload more than I ever learned beforehand and stopped hating life. 02:39:37 So, then, your education more consisted of "Learn." 02:39:43 The thing about the public school system is that it inhibits teaching kids stuff like magic and religion. 02:39:50 Sgeo: Why it's bad: one, it is not voluntary, although it pretends to be, for I am under grave threat of institutionalisation; two, I should not be drinking the "nutritional supplement" I am; three, blah blah blah 02:40:15 I'm in a gifted program, which is all that kept me sane. Since I hit high school it's not as necessary for a number of reasons, though I'm still in the program 02:40:19 uorygl: Well, that is true. I don't think parents should teach their children; on average, people are pretty dumb, including parents. 02:40:30 alise: I'd like to comment that I managed to get through "normal" education just fine. 02:40:42 *Granted*, I spent most of that time learning things for myself... 02:40:47 I somehow survived public schools. 02:40:52 pikhq: the fact that I was also bullied intensely for almost my entire school career did not help. 02:40:53 Hum, alise = ehird? 02:40:55 uorygl: Yes. 02:40:59 * uorygl nods. 02:41:05 He got a sex change. 02:41:12 what, you don't whois everyone who joins the channel? 02:41:16 alise: Oh. That hinders greatly. 02:41:18 I can use a feminine name and pronouns while still identifying as male if I want to! 02:41:28 I whoised alise after I suspected e was ehird. 02:41:34 coppro: I don't have ehird or anything in my whois :P 02:41:35 Such was my life in elementary school. 02:41:39 I did not recognize eir IP address. 02:42:03 uorygl: it says "identified as ehird" 02:42:08 oh, no it doesn't 02:42:12 e must have dropped that 02:42:12 I suppose I seriously must bed myself soon; something like 5:20 hours of sleep if I sleep now and have to wake at 8. 02:42:16 9 or 10, maybe, probably. 02:42:23 But still. Perhaps 8. 02:42:29 So, very soon. Very very soon. 02:42:29 alise: so, you're made to stay nights at whatever this place is for the sole purpose of forcing you to drink whatever this thingy is? 02:42:31 I was bullied a lot before I switched into this program 02:42:38 Uh, anyone have the link to the pastie? 02:42:44 Since then, I've learned that bullies are idiots 02:42:47 Eh. I'll summarise. 02:42:53 If so, that's simply inefficient. Write the papers. 02:43:11 uorygl: I am mainly there because they believe I could not function in normal society because I am a recluse; they believe I am on the autistic spectrum, leaning to Asperger's, and probably have OCD. 02:43:24 They are, however, doing nothing to "fix" these things even if you accept them as diagnoses. 02:43:29 Or, to use a less oddly ambiguous phrase, inform the media. 02:43:38 "His only crime was being born delicious!" 02:43:48 Okay, that's more... understandable. 02:43:53 Instead, based on the junk science of BMI and the fact that I'm quite below-average weight, just as my father was, 02:44:00 that's why they're doing the drink thing. 02:44:08 It's intended for people with disease-related malnutrition, so... yeah. 02:44:13 I eat perfectly fine. 02:44:18 They're crazy. 02:44:18 I thought everyone knew that BMI was little more than a guideline... 02:44:25 It's not even that! 02:44:29 a bad one at that 02:44:32 It was invented by a mathematician in the 1800s and was fudged to fit the data! 02:44:36 A poor one, though. 02:44:44 In the 1800s people barely exercised! Body mass was totally different! 02:44:45 Aaaaaaaaaargh 02:44:54 Have you seen a doctor about whether you're underweight or not? 02:45:00 Anyway, I'd write to the papers but if it gets to the courts there's a chance I'll be sectioned there and then. 02:45:01 uorygl: it's all "doctors" 02:45:15 uorygl: I am "underweight" as in below average weight. 02:45:23 So was my dad at the same age until quite later on in his life. He ate fine too. 02:45:37 Have you seen a GP about whether you're underweight or not? 02:45:51 No, but undoubtedly they had. 02:45:57 But nutrition science is bullshit. 02:46:06 uorygl: Pretty hard to when he's held there on weekdays. 02:46:09 (Just ask Ilari, if you have a few hours. Fudged data for political reasons, outright ignored conclusions, ...) 02:46:28 Anyway, since the media carries a risk of court which carries a risk of sectioning, the more foolproof option, moving country, is the one currently being persued. 02:46:29 You mean that if the courts find out that you wrote to the papers, they could use that as a reason for... whatever sectioning is? 02:46:36 Sectioning = institutionalisation. 02:46:39 * uorygl nods. 02:46:47 The court could notice the case, examine it, and conclude I should be sectioned. 02:46:50 *courts 02:46:58 they can actually do that? 02:47:07 without being referred to? 02:47:09 alise, how long could it take to prepare? Shouldn't you have been doing that this weekend? 02:47:13 Well, if the courts don't notice or do anything with the case, why contact the media? 02:47:18 What would it accomplish? 02:47:20 Sgeo: What, moving? 02:47:22 yes 02:47:24 Sgeo: He needs a passport. 02:47:35 We have the forms, I just didn't get round to getting my picture for the passport this weekend, oops. 02:47:38 Next weekend we'll do it. 02:47:40 Well, maybe you should go see a GP. 02:47:42 As far as planning, we don't need to do much. 02:47:45 uorygl: Why? 02:48:00 alise: Issues with employment or anything? 02:48:06 To get a sympathetic viewpoint or something. 02:48:31 uorygl: Why? The mainstream opinion on stuff like this is bullshit that doesn't even consider family history, your frame or anything. 02:48:40 Next weekend, shall I remind you to get your picture? 02:48:42 BMI has not been widely discredited, even though doing so could be done by an infant. 02:48:47 Sgeo: That would be good. :P 02:49:41 alise: Believe it or not, this is less of a fucked up situation than some other things I've heard... There's been a few parents in the UK who were termed "unfit" to be parents for the sole purpose of meeting adoption quotas. 02:49:44 Go see a GP because I'm curious whether the GP you see will be a real person or not? 02:49:47 * Sgeo goes to Google Calendar 02:49:56 uorygl: "Real person"? 02:50:00 I am confused by your terminology. 02:50:13 The sort of person who would look at overwhelming evidence and not disagree with it. 02:50:31 Ah. 02:50:58 I'd much rather not waste any time and enact the plan ASAP; it's a soul-sucking place and I can't take much more. 02:51:15 * uorygl nods. 02:51:26 But, uhh, I'm afraid my expectations of the health service are basically 0 after this. 02:51:45 How much time do you spend in this place? 02:51:49 Monday to Friday. 02:52:13 * Sgeo writes stuff in Google Calendar that looks like vacation planning 02:52:14 It's not a place you go to in the week so much as home is a place you go to on the weekends. 02:52:20 * uorygl nods. 02:53:11 Indeed, the world is full of injustice and strangeness. Especially if you have Asperger's. 02:53:30 uorygl: The UK's handling of it is full-on retarded. 02:53:49 uorygl: I don't really believe Asperger's is a real mental condition in any form, especially in its modern, over-vagueised form. 02:53:59 Maybe a silly synonym for "intelligent nerd". 02:54:26 I think I concluded at some point that if three things are mutually correlated, you can call them one thing. 02:54:36 I mean, I think the definition of a syndrome is a set of traits that tend to occur together. 02:54:39 Maybe. But it's certainly not a mental illness. 02:54:53 Well, it causes problems. 02:54:58 Or even "worse" than allism (the opposite of autism; http://www.fysh.org/~zefram/allism/allism_intro.txt), I'd say it's better. 02:54:59 It's a mental difference :D 02:55:09 Empathy is spooky emotion at a distance. :-) 02:55:10 alise: It is, at most, a very mild form of disability. 02:55:24 (mild) autism is certainly a more rational state than allism 02:55:44 In the past couple of days, I've felt significantly, perhaps severely, handicapped by Asperger's. 02:55:53 Why? 02:56:28 Social interaction is very, very hard... 02:56:39 Only allistic social interaction. 02:56:45 With most basic reactions basically learned by rote. 02:56:46 Well, yes. 02:56:51 It wouldn't be a disability if most people were autistic. 02:56:56 Autistic social interaction is the most trivial thing in the world. 02:56:57 So it isn't a disability. 02:57:06 If you had a society full of retards, on the other hand... 02:57:09 That wouldn't work. 02:57:21 Anyway, I may be biased by the fact that psychological conditions are defined by consensus among psychologists, not evidence. 02:57:28 Which makes me go rawr and :(. 02:58:05 I've heard (ahem) that Asperger's causes akrasia to a degree much higher than that suffered by other people. 02:58:14 If we lived in a society where most people had wings and could fly, would not having wings be considered a disability? 02:58:19 Howso? 02:58:23 Hm, imperfect analogy 02:58:26 You can't be vague, uorygl, and expect everyone else to know exactly what you mean. 02:58:31 Especially if it's based on personal experience. 02:58:32 Where "akrasia" is stuff like addiction, procrastination, and generally acting against one's better judgement. 02:58:52 uorygl: Alas. 02:58:53 * uorygl hugs Sgeo. 02:58:58 I'd call an autistic person's obsession dedication or specialisation, not addiction. 02:59:10 Is procrastination more prevalent in autistics? Prove it. 02:59:17 Wings confer benefits even in a world where only one person has wings. 02:59:28 Sgeo: but autism/allism aren't utilities 02:59:33 they're different configurations 02:59:36 alise: "Addiction" is, indeed, the wrong term... 02:59:54 is being a rabbit, not a snake, a disability? 03:00:10 Addiction is something I don't really suffer from. 03:00:25 My dad thinks I'm addicted to the computer 03:00:31 I'm addicted to the computers and the internet. Which just makes my weekdays stay in Hell all the more pleasant. 03:00:50 Computers and the internet? Yeah, we have those. The computers are for schoolwork only and the internet censored. 03:01:04 The closest I get to programming is on paper. 03:01:09 Procrastination, I do. I've only been able to complete three classes this year. 03:01:20 alise: I've done some of my best golfing on paper. 03:01:23 Assuming that I can finish the one class I have this semester. I probably can. 03:01:29 pikhq: You can't evaluate paper. 03:01:33 Heh heh, "addicted to the computer". 03:01:36 You can't do exploratory programming on paper. 03:01:43 Sorry, *Brainfuck* golfing. 03:01:43 uorygl: Why the hehs? 03:02:03 Which is exceptionally easy to evaluate, even with just a piece of paper and a pencil. 03:02:09 pikhq: I do have to wonder if they'd allow a laptop without an internet connection, but it'd have to be a pretty damn cheap laptop to make that worthwhile. 03:02:10 "The computer" is not an activity; saying "addicted to the computer" is like saying "addicted to the exterior of one's house". 03:02:16 uorygl: Oh I agree. 03:02:24 I've tried to explain to people that the computer is composite, not atomic. 03:02:42 How can people *not* understand that? 03:02:43 But the fact is that I don't really like to do X much, where X is most things that are not contained within the computer. 03:02:58 pikhq: Because they see you sitting in front of a screen typing and mousing in much the same way as you ever do. 03:02:59 I mean, really. My computer gets used for a hell of a lot of things... 03:03:02 Thus, it's one activity. 03:03:05 I once helped someone by showing them the recent files in the File menu in Word 03:03:08 (Yes, I know they don't see *you* mousing.) 03:03:14 I read books, I read magazines, I read comics, I write programs, I chat... 03:03:17 She proceeded to refer someone who was having programming troubles to me 03:03:18 I play video games... 03:03:21 (mmm, emulator) 03:03:52 you forgot pornography 03:03:53 Watch movies, watch TV, listen to music... 03:04:00 alise: Heheh. 03:04:06 Sgeo: Computer = one activity. You're good at programming = fix my computer. 03:04:24 It's like the magic "Do everything" machine! 03:04:30 You're family/friend = I don't understand how it works, but I know how to use a keyboard and a mouse, so it's easy. 03:04:43 Compare with painting: Most people don't know how to paint a picture of any real sort of caliber. 03:04:51 But you can easily tell a "real" painting, so they don't do that. 03:05:00 With computers, everything looks alike. To inexperienced users, that is. 03:05:48 It's amazing how few people are even competent with computers, even today. 03:06:36 And I don't even mean "have a concept of how it works", but even just "learn the basic working concepts of the UI or UIs they commonly use, so that they can readily figure things out." 03:06:39 pikhq, I love it. 03:06:40 i can't wait until we're all uploaded minds experiencing totally configurable virtual realities of our design 03:06:45 it will be freakin' SWEET 03:06:47 It means I can show off without using my brain! 03:07:16 Sgeo: Hahahah. 03:07:32 I'm shutting things down to leave... 03:07:36 Bye 03:07:36 You have a few minutes, tops. 03:07:37 :P 03:07:54 alise: Gxis la revido, mia bonega amiko. 03:08:01 pikhq: Poo. 03:08:04 "la" revido? 03:08:17 Also, what's -ega? 03:08:27 It's been a while 03:08:37 "Very". 03:08:40 Ah 03:08:41 Anyone have anything to say to me before I disappear for five days? 03:08:51 alise: good luck 03:08:56 oerjan: Thanks. 03:08:58 alise: Retain thy sanity. 03:09:01 alise, may you retain your sanity 03:09:05 -!- jcp has quit (Ping timeout: 260 seconds). 03:09:07 pikhq: Sgeo: EXPOSED AT LAST 03:09:20 Which one is the one created to fuck with me, pikhq or Sgeo? 03:09:23 :D 03:09:36 Sgeo. 03:09:41 wait which sense of "fuck" is this? 03:09:45 I KNEW IT 03:09:49 Bye, alise. :( 03:09:50 He doth not use the common tongue correctly. 03:09:57 oerjan: "to mess with". 03:10:02 oerjan: The sexy sense! By which I mean the sense in which someone is created to confuse me. 03:10:08 uorygl: Aww. Bye. 03:10:14 So long, suckers. If you don't keep the missing counter updated in the topic, I'll know you don't truly love me. 03:10:16 :) 03:10:30 Alise/ehird/Lord Bob Bobbington Bobbingson the Third, out. 03:10:35 -!- alise has quit (Quit: Leaving). 03:10:58 -!- pikhq has set topic: RIP sun.com | 2 days since last ehird sighting | 0 days since last alise sighting | http://tunes.org/~nef/logs/esoteric/?C=M;O=D. 03:11:20 *facepalm* 03:11:46 oerjan: ;) 03:16:54 argh, a dripping sound 03:21:47 okay, I'm just submitting my applied algebra homework with rendered latex and not caring that everyone else is using pencil+paper 03:21:55 so much easier to type it out 03:22:32 -!- jcp has joined. 03:23:04 always add some commutative diagrams for good measure 03:23:16 * oerjan cackles evilly 03:24:52 I wonder if I have any homework that's due tomorrow. 03:25:02 sadly nothing too abstract yet, just coding theory over binary n-tuples 03:25:22 My professor wants us to both submit the problems online and hand in a paper copy. So far, I think I've consistently done exactly one. 03:25:23 not too many structures to commute over 03:25:39 you and oklopol and your coding theory 03:26:10 * Sgeo should learn LaTeX 03:26:17 also, I really need to write a Haskell module that autogenerates tabular based on a function 03:28:27 Gracenotes: maybe http://hackage.haskell.org/packages/archive/tabular/0.1/doc/html/Text-Tabular-Latex.html ? 03:28:54 * oerjan cackles evilly again 03:29:09 eh. that would involve using the table AST-y thing they provide 03:29:43 oh 03:29:50 * oerjan just googled anyhow 03:29:59 Sgeo: you should 03:43:55 hurrah, Visual Studio 2008 Professional Edition has been installed on my recently partitioned Windows 7 install 03:43:58 * Gracenotes shoots himself 03:44:29 but if it's for computer game programming class... I might be able to forgive myself 03:44:42 also apparently recent versions aren't that bad at all 03:44:47 they aren't 03:45:42 -!- jcp has quit (Read error: Connection reset by peer). 03:46:59 -!- jcp has joined. 03:47:03 here is the site for it: http://mysbfiles.stonybrook.edu/~mgruen/cse380/project.html 03:47:42 is that the assignment? 03:48:20 :( DirectX 03:48:32 the individual project, spanning the next month or so 03:49:51 neat 03:51:30 it all relies on the delay idea being enjoyable 03:51:39 heyo Gracenotes 03:51:41 I've been idly thinking of puzzle ideas these last few days 03:52:43 AUGUR 03:54:31 sup bitch 04:05:48 the identity matrix where n = 1 is just 1, right 04:05:58 yeah, of course it would be 04:06:38 DUH 04:06:53 diagonal unity, hurr 04:08:36 muahaha, latex is so pretty. I feel evil making such good-looking documents. 04:11:04 I know 04:11:19 I feel the same way 04:11:52 oh dear, it's all an evil overlord plot isn't it 04:12:01 all hail Knuth 05:00:13 question: In Haskell, some pattern matches must be in parens. Why? 05:00:36 e.g. (x:xs) rather than x:xs 05:07:33 precedence. : has fixity 6 iirc 05:07:48 and -> has higher precedence? 05:08:04 err, = 05:08:12 -> and = is syntax. : is an operator 05:08:32 oh, I get it 05:08:34 ok 05:08:37 more importantly, function application has higher precedence. 05:08:41 right 05:13:33 coppro: http://www.haskell.org/onlinereport/syntax-iso.html 05:13:50 thanks 05:17:05 xkcd XD 05:17:33 * coppro is going to go buy a lab coat 05:21:22 -!- jcp has quit (Read error: Connection reset by peer). 05:23:12 -!- jcp has joined. 05:30:38 -!- sshc has joined. 05:39:09 -!- Gracenotes has changed nick to Floor_Feline. 05:57:02 -!- oerjan has quit (Quit: Good night). 06:02:52 -!- zzo38 has joined. 06:11:59 Hello, I was writing a program today, and when using the GNU debugger I noticed that uninitialized values will be 0xBAADF00D and helps a bit 06:12:19 That's rather nice, actually. 06:12:59 probably a compiler setting 06:13:31 Do you mean the -ggdb compiler setting? 06:13:46 I don't know 06:13:57 I should do my homework 06:15:17 Also, how do you figure out what numbers you need to use in the weather forecast URL http://xml.weather.yahoo.com/forecastrss?p=AYXX0008&u=f 06:15:18 hm... it occurs to me that functional programming is just a big pun 06:15:27 What do you mean by that? 06:15:34 In what way is it just a big pun? 06:15:49 Haskell Curries 06:16:10 OK 06:16:27 do you get it? 06:16:33 Not quite. 06:17:00 Haskell is a language that curries functions 06:17:09 Haskell is named for Haskell Curry 06:17:15 currying is named for Haskell Curry 06:17:22 coincedence? 06:17:39 OK, now I can see it 06:18:20 IT'S ALL A CONSPIRACY 06:18:43 Do you think it is really a conspiracy? Some things might be conspiracies, but I'm not sure about this one. 06:21:39 I also noticed that converting the game "Escape from Planet Delta" from OASYS to TAVSYS, that the TAVSYS binary is smaller than the OASYS binary even though TAVSYS doesn't know about OASYS runtime, so it is built in to the TAVSYS story file instead. (Maybe it is because the TAVSYS file stores string using Baudot?) 06:26:43 Why can't I use the setenv function in gcc on MinGW? 06:27:47 -!- Floor_Feline has changed nick to Gracenotes. 06:28:17 zzo38: Because Windows doesn't support that. 06:28:42 pikhq: OK, but why? getenv works, though 06:29:08 Does it work on gcc on Linux and on FreeBSD? 06:33:08 I also have another question, too. I modified the Glk.dll for my program, by modifying the accelerator table using a resource editor program. How should I mention that? 06:33:52 Like, in the about box (I can edit that with the resource editor, too), or something else, based on the license of the file, how is the good way to make it done? 06:40:53 zzo38: Windows sucks. 06:40:55 That's why. 06:42:48 OK, that I can understand. Of course I know Windows sucks already, but, I still didn't put Linux, yet. But do you know the another question? 06:43:06 zzo38: Windows does not have POSIX 06:43:06 No, I don't. 06:43:13 you must use the Win32 API to mess with that stuff 06:43:48 But then the program won't work on cross-platform 06:44:14 But at least getenv works, I can do without setenv, for now, I guess. So getenv should work on cross-platform. 06:44:14 Conditional compilation. 06:44:32 You have to do it a *lot*, simply because Windows likes to be petty. 06:44:38 getenv is a C standard function 06:44:55 or find a nice cross-platform library that does the conditional compilation for you 06:45:07 or use Winelib (not recommended) 06:45:52 For now, I can just make it not compile in the part the uses setenv if it is Windows. 06:46:15 Because, it can be work-around manually 06:47:52 what are you using the environment variables for? 06:49:46 But do you know the proper way to indicate somewhere that the Glk.dll is changed (if it is even necessary), to the user of the software? (I don't have the source-codes, I just changed it using resource editor, but source is available) 06:50:09 I am using environment variables to check the directory for include files. If there is no environment variable, it will use the current directory. 06:50:22 why do you need setenv then? 06:50:36 also, what do you mean "indicate somewhere that the Glk.dll is changed"? 06:50:53 coppro: Indicate that he hex edited it, in essence. 06:51:07 why would he need to indicate that? 06:51:17 Decency. 06:51:30 I don't really need setenv, it just makes the program a bit simpler to set the include path on the command-line by using the same variable instead of creating a new one. But, I still can create a new one, if I needed to. 06:51:59 Well, I didn't really use a hex editor, I used XN Resource Editor, and that is a bit different. 06:52:01 I don't get it 06:52:06 why does it matter? 06:52:19 I want to indicate it so that you can know that it is not the official file. 06:52:34 change its signature 06:52:50 What signature? 06:52:51 note: I have no clue how to do this. All I know is that they have magic GUIDs or the like 06:53:10 I think you will also need to update the .lib 06:53:16 that you compile against 06:53:25 * coppro curses the Windows dynamic loader 06:53:36 * coppro curses all dynamic loaders 06:56:59 -!- tombom has joined. 06:58:11 Windows doesn't have much in the way of dynamic linking. 06:58:21 Merely just-in-time static linking. 06:58:21 :P 06:58:33 yeah 06:59:29 The program can compile in two mode, in COMPILE_TIME mode (which is cross-platform) and in RUN_TIME mode (which currently works only on Windows with Glk, but anyone that can fix this, to make it work on other operating systems with Glk, or without Glk, to please do so) 07:01:18 And the reason I needed to change the accelerators table is so that I can add special functions for the function keys even in line-input mode. WinGlk has command to add menus and toolbars, but they won't have accelerator keys and also won't work if menu/toolbars is turned off. So, I did like this instead, and it worked. 07:01:18 O_o 07:02:07 -!- FireFly has joined. 07:06:18 -!- kar8nga has joined. 07:16:38 I added the ID numbers 1 to 12 for the keys F1 to F12, but currently this program uses only F1 and F2 and F3 keys. I also added CTRL+K for the Glk options window (which is built-in to Glk.dll). 07:16:57 Maybe you could look to see if the program is good or if there is something that you think could be improved and what it is. 07:18:28 hmm, I'm considering making an easier thue variant by introducing some kind of control flow (and making it sequential rather than nondeterministic), what kind do you need? goto-if-last-line-replaced-something? 07:18:58 I'm not sure, but I guess maybe you can try goto-if-last-line-replaced-something and then see if it can work 07:22:11 by writing your replacements in the right way, should be possible to write a program where the last line replaces something iff one of a number of previous replacements replaced something 07:22:29 -!- Pthing has joined. 07:22:30 then you can at least translate normal thue programs into it 07:26:41 one of the problems here is that I have a fixed input and output format, it seems a bit difficult to work on that with thue, where you seem to often need end/start/position markers to drive the program 07:32:28 I once was on some weblog site that if you wrote "Anonymous" as your name, it shows a error message that you solved the CAPTCHA wrong. (I tried many times and this is what it did, until I put in a different name, such as "A. Nonymous") 07:37:21 -!- zzo38 has quit (Quit: NO CARRIER!!!!!). 07:49:06 -!- tombom has quit (Quit: Leaving). 07:49:55 -!- kar8nga has quit (Remote host closed the connection). 07:52:37 -!- FireFly has quit (Quit: Leaving). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:16:24 -!- gm|lap has quit (Quit: 2 hour UPS expired. Shutting down laptop.). 08:37:00 -!- Slereah has joined. 08:52:19 "oerjan: it's the (s)h/it, man" you're a genius, have i mentioned 09:02:08 http://esolangs.org/wiki/Defcalc <<< this is just tree rewriting 09:02:28 Whatcha got against trees 09:02:56 i just mean that's an incredibly old idea 09:03:10 "pattern recognition" 09:03:13 :P 09:05:04 So are logic combinators and yet there's a bunch of esolang about it! 09:05:49 -!- jcp has quit (Quit: I will do anything (almost) for a new router.). 09:11:53 i'm just grumpy because i've made more advanced tree rewriters, but never made a language about them 09:14:59 You're just grumpy because you're crabbed, crabby, cross, fussy, grouchy, bad-tempered, ill-tempered, annoyed and irritable. 09:16:55 -!- Kori has joined. 09:16:55 You fucking niggers! 09:16:55 -!- Kori has left (?). 09:17:24 We sure are 09:18:17 Speak for yourself there. 09:23:47 i've never fucked a nigger 09:24:02 but kori means "basket" in finnish 09:25:03 -!- SimonRC has quit (Ping timeout: 265 seconds). 09:30:56 It was also the monetary unit of Kutch prior to 1947, divided into 24 dokda. 09:31:51 -!- SimonRC has joined. 09:45:42 It is also a combinator program! 09:45:49 I wonder what it would do 09:45:58 ```kori 09:46:02 No output. 09:46:18 Well, not unlambda 09:51:17 -!- scarf has joined. 09:56:04 -!- Pthing has quit (Remote host closed the connection). 09:56:26 -!- adam_d has joined. 10:24:53 -!- MizardX has joined. 10:26:01 -!- Asztal has joined. 10:33:24 -!- Pthing has joined. 11:20:57 -!- Asztal has quit (Ping timeout: 248 seconds). 12:28:31 -!- Pthing has quit (Remote host closed the connection). 12:52:55 -!- FireFly has joined. 13:12:42 -!- Asztal has joined. 14:48:51 -!- scarf_ has joined. 14:48:59 -!- scarf_ has changed nick to ais523. 14:49:16 forgot I was already connected... 14:50:04 hi from inside my marking-Java session 14:57:08 -!- oerjan has joined. 14:59:48 22:17:09 Haskell is named for Haskell Curry 14:59:48 22:17:15 currying is named for Haskell Curry 14:59:48 22:17:22 coincedence? 15:00:35 actually, official haskell history says that the reason they used his first name was to _avoid_ the obvious puns. 15:01:21 That's not a pun 15:01:38 Slereah: read the log 15:02:36 of course those obvious puns probably did not have to do with the CS meaning of curry, anyhow. 15:03:35 also of course it's not a coincidence, the work that HC did involving combinatory logic lead to both 15:04:31 although currying was not really his invention. there's another joke that we should be happy it's not called schonfinkeling. 15:05:56 oerjan : I did 15:06:02 Currying Curry? 15:06:09 That ain't no pun 15:07:37 um i didn't see anyone mentioning "currying curry". admittedly i'm still on yesterday's log. 15:08:18 What is the pun then 15:08:36 "haskell curries", apparently 15:08:43 hey i didn't make it 15:08:58 You are excused then. 15:09:27 until the next time i make one even worse 15:10:38 -!- coppro has quit (Ping timeout: 265 seconds). 15:10:51 * Sgeo made a Haskell pun once 15:11:16 well was it functional? 15:11:32 lol 15:11:53 `translatefromto fi en pito 15:11:54 maintenance 15:12:02 `translatefromto fi en kengän pito 15:12:04 Shoe grip 15:12:21 finnish, the concise language 15:12:27 -!- coppro has joined. 15:12:56 -!- coppro has quit (Client Quit). 15:18:05 -!- cpressey has joined. 15:18:30 "oerjan: it's the (s)h/it, man" you're a genius, have i mentioned <-- embarassingly often 15:18:44 a puny genius, at any rate 15:24:07 !swedish test 15:24:10 `swedish test 15:24:11 test 15:24:11 test 15:24:27 `swedish The Feynman Checkerboard or Relativistic Chessboard model was Richard Feynman’s sum-over-paths formulation of the kernel for a free spin ½ particle moving in one spatial dimension. 15:24:28 Zee Feynmun Checkerbuerd oor Releteefistic Chessbuerd mudel ves Reecherd Feynmun’s soom-oofer-peths furmooleshun ooff zee kernel fur a free-a speen ½ perteecle-a mufeeng in oone-a speteeel deemunsiun. \ Bork Bork Bork! 15:25:26 that was just before he was chased by a fermionic chicken. 15:25:51 `swedish bork 15:25:52 bork 15:25:54 `swedish bork 15:25:55 bork 15:25:56 `swedish bork 15:25:57 bork 15:26:03 BORK HARDER DAMN YOU 15:26:13 `swedish Bork. 15:26:13 Bork. \ Bork Bork Bork! 15:26:20 `swedish bjorkbarkburk 15:26:21 bjurkberkboork 15:26:35 wait 15:26:40 `swedish björkbarkburk 15:26:41 björkberkboork 15:26:52 my accent key is hung up 15:27:16 `swedish test. 15:27:17 test. \ Bork Bork Bork! 15:27:25 Ah, it looks for stops 15:35:37 -!- Slereah has quit (Quit: Leaving). 15:35:53 pull out all the stops 15:37:43 ....a pipe oerjan? 15:37:58 huh? 15:38:34 referring to where the idiom "pull out all the stops" comes from 15:38:37 and making an even worse pun 15:39:18 * oerjan swats cpressey for having him google to find out the meaning of his own pun -----### 15:44:39 I have now lost all my faith in inheritance. Not that I ever had any. 15:45:10 yeah those kids never turn out like you want 16:00:18 -!- oerjan has quit (Quit: Later). 16:10:13 -!- MissPiggy has joined. 16:30:59 -!- Pthing has joined. 16:58:40 -!- MigoMipo has joined. 17:02:27 An object-oriented esolang where you can only override a single term in a single expression every time you declare a subclass. 17:02:50 I like tall inheritance hierarchies. 17:06:03 hmm, that sounds like a good idea to add to my work-in-progress esolang whose concept is "almost a normal language, but has a huge number of arbitrary restrictions which make it a pain to write" 17:06:13 it's not a particularly interesting concept, though, so I might just abandon it 17:06:26 -!- ais523 has quit (Quit: Page closed). 17:10:00 I thought that was what INTERCAL was 17:10:21 not really, it has a completely different way of doing expressions, and a relatively different way of doing statements 17:10:30 INTERCAL's more like a regular imperative language based on different primitives 17:10:45 oh okay 17:10:48 it does have the PLEASE thing and the 16-bit restriction for constants, but that's about it 17:11:02 I was thinking about a language that could compile to every major high level language 17:11:08 it's not really eso though 17:11:16 MissPiggy: Underlambda! 17:11:32 hopefully that'll compile to every major low level language too 17:11:39 and pretty much every minor language that's powerful enough 17:11:59 grrr esolangs is always down 17:12:07 -!- BeholdMyGlory has joined. 17:12:13 how can I read about underlambda? 17:12:18 http://esoteric.voxelperfect.net/wiki/Main_Page works for me 17:12:27 but underlambda isn't published yet, it's something I'm working on 17:12:41 scarf: I have a similar idea, but rather than "a huge number", I'm just trying to incorporate some of the most annoying ones. 17:12:44 an intuitive view of it is "purely functional underload" 17:12:48 cpressey: ah 17:13:00 oh okay it's on the wiki then 17:13:05 so tell me about it? :) 17:13:14 here's one I thought up: operator precedence is fixed but follows no pattern (originally determined at random), and parens aren't allowed 17:13:16 * MissPiggy rereads the underload page 17:13:33 MissPiggy: basically, the idea's that you have a low-level core, and implement a higher-level language on top of it 17:13:34 scarf that sounds like tough love 17:13:48 * MissPiggy had a buggy program the other day because ops were precd wrong :( 17:13:57 and the core is based on most of the same concepts as Underload: S works differently, but the rest of the commands are the same 17:14:53 Infix is fun to play with just because of that whole precedence thing. 17:15:16 yep 17:20:25 -!- MizardX- has joined. 17:22:33 -!- MizardX has quit (Ping timeout: 248 seconds). 17:22:53 -!- MizardX- has changed nick to MizardX. 17:24:41 -!- adam_d has quit (Ping timeout: 248 seconds). 17:28:32 -!- kar8nga has joined. 17:40:04 cpressey, isn't there an algorithm for converting it to RPN? 17:42:49 as in, a specific name, named after someone or such 17:44:27 AnMaster: "it" = ? 17:44:47 Infix? 17:44:55 Yes, probably. 17:46:40 I mean, it's fairly standard (at least for me) to parse infix based on a table and write out postfix opcodes, in a compiler. That would be pretty close to such an algorithm. 17:53:53 Converting it to RPN isn't much of an algorithm: just do a postorder traversal of the AST 17:54:12 Deewiant: there are algorithms that don't involve ASTs 17:54:26 Most of the work is done by the parser (precedence and associativity), before the AST is created. 17:54:27 apparently they were used in early compiler design; they'd compile infix to RPN and then build the AST from that 17:54:49 back when people thought in fortran and recursion was scary 17:55:19 that's quite possibly the reason 17:55:20 scarf: O_o 17:55:47 and memory was scarce, and ASTs were rare... 17:56:08 Well of course you can modify the AST-generating algorithm to print out RPN directly 17:56:14 Like for shunting-yard 17:56:36 I don't know what that is, but yes. Like for a Pascal compiler. 17:56:43 -!- tombom has joined. 17:56:48 http://en.wikipedia.org/wiki/Shunting-yard_algorithm 17:57:03 Oh 17:57:17 AnMaster: I might guess that's the specific name you're looking for? 18:02:43 shunting yard is pretty lol 18:02:59 it's unsound on invalid inputs 18:03:14 of course it's correct on correct inputs 18:03:23 I've seen it several times before, but never knew its name and origin 18:03:46 on wiki there's a great snippet "alternative to Dijkstras algorithm" 18:03:58 basically regex + into )+( and * into ))*(( etc 18:04:09 then you can forget about precedence and just read it with the parens 18:04:44 well I got that wrong ))+(( and )*( 18:17:03 MissPiggy: Which is again unsound on invalid inputs, as that creates mismatched brackets so you don't know whether there were any in the original. 18:17:48 cpressey, indeed 18:18:51 Deewiant: huh are you sure 18:19:16 1+2 -> 1))+((2 18:19:26 you also add (((((( )))))) around the whole thing 18:20:04 Ah right, that probably works. 18:20:20 also why couldn't you do error detection in shunting yard? 18:20:41 [1))+((2] <-- variant of that old Scheme syntax 18:21:02 cpressey, hm? 18:21:13 do you mean lisp or scheme there? 18:21:14 does square bracket mean "unlimited number of parens, so long as it matches"? 18:21:20 Maybe LISP, I don't remember. 18:21:25 I can see why lispers would like that 18:21:30 cpressey, is it those m-expression thingies? 18:21:33 It actually seems very un-Scheme-like somehow, so maybe yeah. 18:21:38 or whatever their name were 18:21:54 * MissPiggy hates that scheme syntax 18:22:00 scarf: Yes, ] closes all currently open brackets. (There was no corresponding [ in LISP or whatever though.) 18:22:08 * MissPiggy actually hates all [] {} crap in lisps 18:22:28 No idea about the name of it. And yes, I'm not a fan of it either, except as an ugly eso-adoptable thing maybe. 18:22:37 people just use ] on IRC 18:22:50 cpressey, is it related to http://en.wikipedia.org/wiki/M-expression ? 18:22:54 that's where it comes from anyway, some crazy person decided to implement it after seeing it on IRC 18:23:20 AnMaster: gack. 18:23:29 I don't think so. 18:23:39 cpressey, "gack"? 18:24:01 Sorry, I meant: Gack!! 18:24:07 cpressey, why 18:24:31 and what is it supposed to express 18:25:19 Surprise and alarm at unearthing of historical computer science artefacts. 18:25:27 ah 18:25:55 I thought it was well known that the S-Expressions weren't intended to be used for coding in lisp originally 18:26:12 MissPiggy: btw, the mixing of brackets and parens is one reason I'm not so keen on Clojure 18:26:39 cpressey, well .......... when it has a semantic meaning that's a BIT better, like [] for vectors 18:26:43 but what I really hate is fucking 18:26:51 (let [(x ...) 18:26:56 as if that is any easier to read 18:27:09 it's like people that write sh*t as if that is somehow less offensive than shit 18:27:24 No, actually it's completely different :-P 18:27:43 * MissPiggy takes my similes and goes home 18:27:56 Point taken. But it is probably a bit easier for your editor to highlight. I get into "just keep typing ) until you see the matched-paren-color move to the right place" 18:27:59 also I found lisp without an editor that highlights the matching bracket to be very painful 18:28:25 AnMaster, just write it without any parens? 18:28:37 MissPiggy, if it is lisp: wtf? 18:28:50 lisp without parens... All comments? 18:28:55 read it like natural language, figuring out the ambiguity yourself 18:29:07 let x 3 map + x 3 foo 18:29:11 LISP without parens would be Logo :) 18:29:14 MissPiggy, doesn't help the interpreter or compiler actually compile it 18:29:18 ?? 18:29:20 (or interpret it) 18:29:29 MissPiggy, I meant it is painful when coding lisp 18:29:30 why would you NOT use an editor to write lisp on a computer? 18:29:40 not for reading 18:29:41 well your situation is just ridiculous so there's no solution to it 18:29:47 what are you talking about 18:29:48 I thought you were talking about on paper 18:29:48 LISP without parens would actually be fine, if all S-expressions started with an atom which determined the arity exactly 18:30:01 MissPiggy, you must somehow have misread my comment 18:30:12 -!- scarf has quit (Remote host closed the connection). 18:30:31 cpressey, hm I can think of a syntax for that. +/5 or such. for 5 parameters 18:31:03 AnMaster: ah, you mean encode the arity in the atom? Interesting, but probably a bit cumbersome. 18:31:04 but really, I think in many cases it would be more irritating 18:31:11 very much so 18:31:13 cpressey, well, wasn't that what you meant? 18:31:38 I was just thinking to store it in an internal table when the atom is defined 18:31:48 or did you mean something like + 2 5 4 would be the same as (+ 5 4) 18:31:57 cpressey, you forgot that some are n-ary, like + 18:31:59 and * 18:32:34 also any non-painful way to create lists 18:32:35 AnMaster: like that's necessary? Have them take 1 list as an argument. Or fix them at 2 arguments and apply them multiple times, like + 2 + 3 5 18:32:41 sure, you could use lots of cons 18:32:45 but would you really want that 18:32:57 Would you really want to use LISP without brackets? 18:33:19 If the answer to the above question is no: it doesn't matter. If it is yes: seek help. 18:33:22 Deewiant, in some cases I think you can get too many brackets 18:33:34 typically cond constructs comes to mind 18:33:44 especially if it is at the end of a define or lambda or similar 18:33:56 you often end up with ))))))) or so 18:34:08 If you're going to make it optional, then you can just disallow it for the n-ary stuff. 18:34:20 Deewiant, well, you could use indention to decide level 18:34:27 The beauty of the parens in LISP/Scheme is their regularity. The pain of the parens in LISP/Scheme is their regularity. 18:34:33 still have parens for some cases 18:34:42 like on one line where it makes more sense 18:35:04 so you get a lisp/python indention mix 18:35:14 not sure how good this idea would be in practise 18:35:31 I think I would prefer to define multiple syntaxes for a language: one which is "irregular but humane", like yr avg scripting language, and one which is "regular but inhumane" like Scheme or XML 18:35:34 it doesn't sound too bad to allow the high level structure without parens 18:36:03 cpressey, "average scripting language" isn't really humane 18:36:17 because perl offsets the average so much 18:36:18 ;P 18:36:25 median might be better 18:36:59 AnMaster: ha! Well, let's just say Perl is such an exceptional language, it's an outlier, and thus disregarded. 18:37:15 I should have said, "a decent scripting language" 18:37:16 cpressey, a simple average wouldn't do that. 18:37:19 okay 18:37:23 cpressey, escript? 18:37:27 The mode scripting language: Perl or PHP? 18:37:30 Never seen it. 18:37:40 cpressey, hint: it is run by beam 18:37:41 Unless you mean Erlang 18:37:55 and yes erlang has escript 18:38:12 Erlang's not exactly my favourite for scripting 18:38:27 (btw, erl -man escript) 18:38:53 Yes, I've used it before, I've even built something to try to reduce the startup time 18:38:57 cpressey, and yeah, the shutdown time is quite horrible for erlang in general. iirc it is less for escript though 18:39:53 Last I used escript it was just a simple wrapper that knew about hashbang lines 18:39:58 cpressey, I never found startup time to be any issue for erlang. The issue is instead that it takes about half a second from q() in the repl to getting back to prompt 18:40:42 cpressey, I tend to use a shell script wrapper usually for erlang programs. Since escript isn't suitable to directly invoke the main program, you would have to start a new erlang anyway 18:40:50 at least if you need anything like sasl 18:41:14 I remember shutdown time being bad too, but startup was not great. The Erlang/OTP implementation was really meant for long-running systems, I concluded. 18:41:42 cpressey, that is true. Idea: attach to existing erlang process 18:41:45 with a new repl 18:41:47 it is possible 18:42:00 AnMaster: that was what I did -- search my site for erlaunch if you like :) 18:42:03 however it has to be distributed. 18:42:04 iirc 18:42:15 erlaunch doesn't require it to be distributed. 18:42:58 If erlang is in disk cache, the launch time is maybe 1/10 second? It isn't instantaneous, but I wouldn't call it slow 18:43:02 the shutdown time however is slow 18:44:12 hm, what is the hardest bit in implementing intercal? My guess is parsing it. 18:44:40 once you have it in some nice AST or similar, it doesn't look too hard 18:45:35 (not easy either, but compared to parsing it...) 19:05:42 Hm, I just realized, if you define a "humane" syntax on top of a Scheme-like syntax, you lose one of the nicest things about Scheme -- hygenic macros. Unless you have a predictable mapping between the 2 syntaxes. In which case, the argument for having 2 syntaxes at all is weakened. 19:06:11 cpressey, what about those parser thingies in erlang? 19:06:25 cpressey, you know, liked used for the mnesia query thingies 19:06:26 parse transforms? 19:06:34 yeah 19:06:59 You have to know about the internal representation (AST) iirc, which is subject to change iirc 19:07:20 then why is it documented iirc? 19:07:56 Because Ericsson is perfect in every way. 19:08:00 XD 19:09:38 cpressey, then why the way they handle floating point NaN and +/- inf? 19:19:37 ...Because they're trying to be "humane" by application of inconsistency? 19:20:09 heh 19:21:11 I am eternally tempted to design a "real" language which "gets everything right". It's a bad temptation. It's better to stick to these weird little languages that intentionally get things "wrong"... 19:22:58 just filter by features not present in any of your languages 19:23:09 and the remaining features will make up the ultimate one 19:38:33 -!- gm|lap has joined. 19:39:02 pikhq: you could do with a bot which tracks users' "sightings" 19:41:34 olsner: How about I just design a language which contains every possible feature, and let users decide. 19:42:50 I think that has been tried and failed before 19:43:39 You think? :) 19:47:46 Well, here's one peeve anyway. Access to stack traces always seems to be such an afterthought. I want first-class stack traces. 19:48:59 now there's an interesting idea 19:49:27 wouldn't that be sorta like continuations 19:49:53 Yes, it would. A lot like continuations, actually. 19:50:36 I could live with them being slightly less than first-class, for efficiency. But still, it's so rare to be able to handle them like normal objects. 19:51:53 Hm, maybe Ruby does something like that though -- I wouldn't put it past it. 19:53:04 -!- pikhq has set topic: RIP sun.com | 3 days since last ehird sighting | 1 days since last alise sighting | http://tunes.org/~nef/logs/esoteric/?C=M;O=D. 19:58:48 cpressey: That would actually be continuations with transparency, really. 20:00:03 pikhq: Yes. 20:01:07 Doesn't Java provide that? 20:03:13 -!- augur has quit (Ping timeout: 264 seconds). 20:05:21 why not check the logs for when tusho was last seen 20:05:54 Heheheh. 20:06:26 Deewiant: yes, and it's interface is passable I suppose, but I still consider it an afterthought. 20:06:45 So's Python's. 20:08:13 In both, it looks like you can only get a stack trace after an exception is caught, for example. 20:18:40 C, arguably, has them more first-class. "Getcontext" lets you start accessing the stack. From there, enjoy non-portable code. :P 20:20:19 Can you in Java just make any Throwable object and call .fillInStackTrace() to get access to it even without any throw-trickery? The method looks publicky. 20:20:31 new Throwable.getStackTrace() 20:20:46 And, yes, the constructor says it calls fillInStackTrace automagically. 20:26:24 * cpressey raises eyebrow 20:27:09 * cpressey is very susprised Throwable isn't abstract 20:29:39 I still think the interface is kind of ugly, but it gets points for setStackTrace. 20:38:13 It seems there's a limit of how long the stack trace may be, though 20:38:22 In Java, that is 20:38:26 At least it stops at 1024 here 20:49:42 I have... acquired this bigram language model built out of song lyrics; can't quite decide whether I want to go through the hassle of converting it into fungot's format. (It's in HTK's special graph-like lattice format, and the existing tools don't quite seem to do the conversion backwards from that to something simpler; but I can run it through HTK's random-sentence-generation tool to get a feel to what fungot'd make of it.) 20:49:43 fizzie: you can get the consumer to just wait there, rather than character-port?, to keep the ai in certain circumstances. 20:49:52 -!- Pthing has quit (Remote host closed the connection). 20:50:29 Since it's just bigrams, the lyrics don't seem to make that much sense... but then again, neither do all supposedly serious songs I've heard. 20:50:46 "so long as their eyes / the ocean we'll see it's so i left now / and i want kiss my heaven on love comes to be free / sound of lonely voice is that / i could be it to the one so get married go / still no turning on take the new york new to save / just can't we had a troubled water what i fall / if there watching to the floor na na / mind lover / flip can't stop myself anymore" 20:50:47 "come on the weather / so / i've got to work / i can see you believe in your nightmares me / that / cuz i hate me you see / but on" 21:12:06 -!- MigoMipo has changed nick to MigoMipo_Zwei. 21:12:22 -!- MigoMipo_Zwei has changed nick to MigoMipo. 21:41:25 -!- augur has joined. 21:41:37 hi augur! 21:42:22 heyo 21:44:28 In my client, relatively many people have five-character amber-colored nicks. 21:44:45 augur, scarf, alise. 21:44:53 uorygl 21:45:32 Two five-letter all-lowercase amber nicks starting with A is far too many. 21:46:35 why am i amber 21:47:03 Probably because my client randomly assigned you that color. 21:47:13 oh i see 21:47:54 I get different colors for augur, scarf, alise all; but augur and uorygl get the same pinkish color. XChat's color assignment is not random, though, or even pseudorandom: it's just the sum of the bytes in the nickname, modulo the number of available nick colors (9). 21:49:01 i have no colors for people 21:49:20 Isn't XChat graphical? 21:49:33 Yes, it is graphical. 21:49:38 It ought to have about 16,777,216 possible nick colors. 21:49:51 There's a predefined list of 9 that should be sufficiently distinguishable, though. 21:50:14 it should use ColorMatch™ 21:50:18 The problem with that is that you can't distinguish between two of them if they're identical. 21:51:37 It should use my gcolor.pm. (Do a google image search for a word, fetch the thumbnails for first 100 or so results, compute the HSV histograms and pick a suitable maximum, convert to a single color; that's able to even give colors of abstract concepts.) 21:55:30 #a3ba55 is the color of "irregularity", for example. (Based on irc logs; I have lost the code and the web-page about it, but it wouldn't be that tricky to reimplement if necessary.) 21:56:27 * uorygl ponders what color that is. 21:57:05 a 21:57:06 wtf is this 21:57:06 http://projectfortress.sun.com/Projects/Community/blog/ConditionalExpressions 21:57:06 I happen to favor Knuth's version, for four reasons: 21:57:06 4. He's Knuth. 21:57:07 data:text/html, :) 21:57:16 Light green-yellow. 21:59:25 You know, it would make slightly more (or perhaps much less) sense to give colors as brightness, redness, blueness. 21:59:55 That's what video formats do. 22:00:11 Sort-of. 22:00:25 "YCbCr or Y′CbCr is a family of color spaces used as a part of the color image pipeline in video and digital photography systems. Y′ is the luma component and CB and CR are the blue-difference and red-difference chroma components." 22:01:43 Admittedly that might be mostly because they can then use different resolutions for luminance and the chroma components. 22:02:04 Call those w, r, b. Then R = 2wr(1 - b), G = 2w(1 - r)(1 - b), and B = wb. Or something like that, anyway. 22:03:03 Hmm, let's forget those 2s. 22:03:45 No, let's leave those 2s. 22:04:21 Quick, someone implement that formula so we can see what happens. 22:04:49 MissPiggy: That page talks about encoding truth values as 0/1 as if it's something, uh... esoteric. 22:05:26 I'm going to make an esolang that uses 1 for true and 0 for false :D 22:08:47 The operators are addition, multiplication, and subtraction. It is an error for an operator to return a result other than 0, 1, or 2, or for it to take a 2 and also return a 2. 22:12:57 A quick game of boolean ring toss, anyone? 22:34:23 -!- kar8nga has quit (Remote host closed the connection). 22:35:16 -!- tombom has quit (Quit: Leaving). 22:37:23 -!- oerjan has joined. 22:39:54 an intuitive view of it is "purely functional underload" 22:40:04 underload is pretty purely functional 22:40:27 you could consider the program result just a lazy string 22:41:12 MissPiggy, AnMaster: how about, when the first value of a list is an atom, and that atom has a value recorded in the "fixed arities" table, then parentheses can be (at your option) omitted. Otherwise they are required. It's not a great rule maybe, but it's relatively simple. 22:42:13 Of course, there's still special forms. Like let. 22:42:16 cpressey I prefer my idea :P 22:42:21 where you never write any parens 22:54:30 cpressey, hm let takes a list doesn't it? 22:54:39 MissPiggy! 22:54:44 like: let ((name value)... ) 22:54:57 can i teach you about lecomte's categorial minimalism? :D 22:55:20 -!- MigoMipo has quit (Remote host closed the connection). 22:55:54 yes please do! 22:59:48 AnMaster: Yeah, and I've never liked that syntax much. But it's a special form, so I'm not sure what could be done with it. 23:00:17 You can leave out the parens around the let itself 23:00:25 But the bindings list still needs them 23:01:22 AnMaster: ha! Well, let's just say Perl is such an exceptional language, it's an outlier, and thus disregarded. 23:01:32 median _is_ a way to remove outliers, you know 23:01:45 Maybe introduce an arity-3 form called = that just does one binding. Then you can say: = name value = name2 value2 expr 23:02:55 Then let* becomes a problem, but whatever 23:03:28 s/let*/letrec/ 23:04:07 I am eternally tempted to design a "real" language which "gets everything right". It's a bad temptation. It's better to stick to these weird little languages that intentionally get things "wrong"... 23:04:23 obviously the problem is that the everythings contradict each other 23:05:36 or become undecidable, like when trying to make a type system that has every feature 23:05:56 *desirable feature 23:06:29 oerjan: I'm sure that's not the only problem. 23:06:53 ok but it's an obvious one 23:07:38 (well obvious after a few people have tried anyhow) 23:08:09 -!- BeholdMyGlory has quit (Read error: Connection reset by peer). 23:08:29 I fail to see how much more wrong it is to having an undecidable type system, than to have an undecidable execution model, which is essentially a given. 23:08:45 s/having/have/ 23:08:51 -!- FireFly has quit (Quit: Leaving). 23:09:15 Maybe it shouldn't be a given, but at least in the modern world, it is. 23:09:30 because an undecidable type system won't even get through the compilation stage 23:10:27 I know. But so what? We just blame that on the programmer, like C++ templates, and move on. 23:10:39 hm... 23:10:57 Unless you mean, won't *ever* get through the compilation stage. Then I suppose we have a problem. 23:11:23 with enough features that should be easy enough to achieve :D 23:12:14 cpressey: C++'s type system makes C++ *parsing* undecidable. 23:12:29 Because you have to know the types of things to parse C++. 23:12:35 pikhq: Yes, I know. 23:12:45 (the same is true of C, *but* C typing is trivial...) 23:13:06 why not check the logs for when tusho was last seen <-- he calls himself uorygl these days 23:14:13 oerjan, no 23:14:18 tusho == ehird 23:14:23 Warrigal == uorygl 23:14:24 Maybe in 50 years we'll have advanced to the point where we laugh at the fact that we once did everything in Turing-complete languages, like we now laugh at the fact that we once did everything in assembly. 23:14:36 (the same is true of C, *but* C typing is trivial...) <--- also, iirc the ramifications of it are less in C than C++ 23:14:47 Sgeo: whoops, i was sure tusho was one of ihope's 23:15:10 oh i'm thinking of kerlo 23:15:20 AnMaster: Slightly. 23:15:21 pikhq, you don't have anything close to that example in the C++ FQA for C. 23:15:40 AnMaster: foo(bar) can *only* be a function call in C, after all. 23:15:48 fizzie, http://yosefk.com/c++fqa/web-vs-c++.html#misfeature-2 23:15:50 err 23:15:51 pikhq, ^ 23:15:57 weird tab typo 23:16:11 Everyone should program in C--! 23:16:16 unless i'm wrong about that one too 23:16:28 I think kerlo == Warrigal 23:16:36 pikhq, and yes, variables can be one of three types basically: scalars, pointers, arrays. 23:16:37 And Warrigal == ihope 23:16:51 the last one is certain at least 23:17:02 AnMaster: Scalars, pointers, arrays, collections of variables. 23:17:20 pikhq, oh structs on the stack 23:17:22 forgot that 23:17:35 or, well, global vars 23:18:24 pikhq, still, fairly trivial to figure out what things can be 23:19:03 pikhq, like * for multiplication can never look * for deref (or the reverse) 23:19:13 even if you don't know the types 23:19:18 AnMaster: Nice site at that link, thanks. 23:19:26 cpressey, you didn't know about it? 23:19:27 heh 23:20:26 fnord 23:20:30 AnMaster: nope. 23:20:46 heh 23:21:15 AnMaster: Yeah; you only need to know context for a few very specific things. 23:21:21 (basically, whether or not something is a type or variable) 23:21:31 pikhq, example? 23:22:18 hm actually: 23:22:21 int * foo; 23:22:26 what if you have: 23:22:30 x * foo; 23:22:49 different results if x is a type or a variable 23:22:57 Yeah, foo * bar changes based on whether or not foo is a type. 23:22:59 but that is, if there is nothing in wrong of x 23:23:17 it doesn't apply if it happens anywhere but at the start of a statement 23:23:30 Also, "const foo". 23:23:31 and in C89, only at the first statements in a given function 23:23:42 pikhq, that only makes sense if foo is a type? 23:23:55 Yes. 23:24:06 foo * bar looks like a useless expression statement though, even if legal... 23:24:24 oerjan, depends on if foo and bar have side effects ;P 23:24:29 but yeah, why multiply them 23:24:47 AnMaster: Actually, "const foo" might be equivalent to "const int foo". :P 23:24:48 still not particularly useful 23:24:49 oerjan, it is however legal. GCC at least will issue a warning about unused value or something like that 23:25:04 pikhq, isn't that deprecated? 23:25:19 AnMaster: Still syntax. 23:25:19 pikhq, pretty sure it isn't even allowed nowdays? 23:25:34 well it's obviously legal since it would need a specific exception to make it not so... 23:25:39 C99 requires a note that it's deprecated. 23:25:44 ah 23:25:54 well it's obviously legal since it would need a specific exception to make it not so... <-- ? 23:26:09 And it's an error if used for a function declaration. 23:26:52 anyway, the situations are rare. x * y = z; for example isn't ambiguous at all 23:27:23 AnMaster: all expressions are statements, it would be messy to except only those that are apparently useless 23:27:25 nor is x * y, z; 23:27:29 oh wait 23:27:33 that latter one might be 23:27:40 if it could be the comma operator 23:27:53 oerjan, heh 23:28:12 AnMaster: That's either x times y, then z, or an x pointer named y and an x named z. 23:28:42 oerjan, "This language prohibits useless statements and programs"? 23:28:45 I, Gcc the Great and Terrible, have judged your entire program to be apparently useless, and refuse to compile it. 23:28:45 for example && and || could obviously be useful with statements 23:29:38 AnMaster: not particularly well-defined, that... 23:29:40 pikhq, x * y, * z should be non-ambig though 23:29:47 oerjan, it was a joke 23:29:57 *gasp* 23:31:02 AnMaster: actually x * y = z could be a declaration with initialization, couldn't it 23:31:10 AnMaster: x times y, then dereference z, or x pointer y, x pointer z. 23:32:12 pikhq, oh ffs right 23:32:39 AnMaster: actually x * y = z could be a declaration with initialization, couldn't it <-- well, yes that is the only thing it could be afaik? 23:33:04 oerjan, what else could it be? 23:33:04 oh wait right x * y isn't an lvalue 23:33:24 * oerjan thought that backwards 23:33:28 yeah! What do you think this is, C++? 23:33:33 the term "lvalue" and such always confuse me 23:33:56 I mean, it much clearer if you just think about it at another level 23:34:06 AnMaster: actually took me a moment to remember the term. 23:34:17 Actually, I'm not sure you could make operator* return a reference in C++. But it sounds like the kind of thing C++ will let you do. 23:35:04 cpressey, I avoid C++ 23:35:30 pikhq, care to link you lambda header file for C again? 23:35:33 AnMaster: Very wise. 23:35:46 I avoid it now, too, thankfully. 23:36:05 No matter how much Python bugs me, I look back and my C++ days, and I don't look back. 23:36:27 cpressey, why not erlang :) 23:36:27 Ach, and I've never used C++ for a personal project. That would be Wrong. 23:36:56 if it wasn't that parsing intercal is such a pain I would probably try to write a bignum intercal interpreter in erlang 23:36:58 AnMaster: Only sometimes :) 23:37:40 but looking at the lengths c-intercal goes to for parsing... I doubt I even want to try that 23:38:42 cpressey: C++ operators are only required to return a value and be appropriately adic. 23:40:11 cpressey, why not make the operator* return a pointer? 23:40:16 to itself 23:40:33 that way you could make a pointer class you could never dereference 23:41:03 if you can override & too, then you could make a class you can never take the address of! 23:41:57 AnMaster: given the various attempts to build "smart pointers" to work around the language's primitive memory model, I wouldn't be surprised if it has been done. 23:42:18 pikhq: Great! 23:42:28 -!- coppro has joined. 23:42:30 hm I want a circle of pointers in C 23:42:30 AnMaster, cpressey: That sort of stuff is done in the actual FAQ, at http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.25 23:42:39 Then we can x * y = z to our hearts' content. 23:42:41 would only work for void* 23:47:49 void *x = &x; 23:48:12 * uorygl = ihope = kerlo = Warrigal = Tanner Swett 23:48:22 ehird = tusho = alise = Elliott Hird 23:49:35 union p { union p *p; } p = { &p }; ... but maybe that doesn't quite count. 23:49:52 Is it really a good idea to talk real names in this channel 23:50:05 it doesn't really matter 23:50:32 Sgeo: Josiah 'pikhq' Worcester. 23:50:47 Oooh, aaah. 23:50:49 /whois coppro 23:51:11 coppro: ZOMG 23:51:25 INORITE? 23:52:27 uorygl: um Tanner Swett is your real name? 23:54:04 As far as anyone knows 23:55:44 * oerjan didn't know tanner was a first name 23:56:41 * coppro knows two Tanners in real life 23:57:30 hm i found a Tanner Swett on linkedin, but i doubt uorygl has joined university yet 23:57:37 oerjan: Maybe it was a honorific, in this case. 23:58:03 -!- pikhq has quit (Read error: Connection reset by peer). 23:58:10 you mean he's very bronze-colored? 23:59:03 oerjan: Yes; it's the penultimate step before graduating to Tannest. 23:59:14 ok then 23:59:57 There are three Tanner Swetts visible in the book of faces.