00:53:54 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 00:54:04 -!- oklopol has joined. 00:56:39 -!- calamari has joined. 01:02:28 NOOO!!! 01:02:31 MANDATORY FUN DAY IS BACK!! 01:05:37 D:> 01:05:57 -!- Corun_ has quit (Read error: 110 (Connection timed out)). 01:06:47 RodgerTheGreat: :( 01:07:16 haha, i like this shop of the first new one 01:07:17 http://i30.tinypic.com/2zscztk.jpg 01:07:37 though fgsfds is lowercase. 01:12:23 -!- Corun has joined. 01:35:30 -!- jix has quit ("CommandQ"). 01:43:50 bye for today :) 01:44:22 -!- tusho has quit (Remote closed the connection). 02:37:11 -!- bsmntbombdood has joined. 02:38:51 -!- Corun has quit ("This computer has gone to sleep"). 03:24:15 -!- GreaseMonkey has joined. 03:26:56 -!- Nocta has joined. 03:29:35 hi 03:36:35 hi 03:36:40 are you here for the gaysex? 03:47:59 why else 03:48:06 this is THE gaysex channel 03:59:17 ^_^ 03:59:24 ::gaysexes lament:: 03:59:30 unf unf unf 04:05:19 ... 04:05:25 what the christ, you guys. 04:05:51 we left rodger out :( 04:05:55 sorry rodger 04:05:58 ::cums on rodgers face:: 04:07:39 -!- calamari has quit ("Leaving"). 04:08:08 you scared calamari away 04:08:11 shame on you 04:08:24 well, now we know how to separate the men from the boys 04:08:47 by... cuming on their faces? 04:38:17 well i didnt cum on CALAMARI's face 06:19:32 -!- RedDak has quit (Read error: 113 (No route to host)). 07:17:52 Save your love for mudkips. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:11:57 ... 08:12:18 s/#esoteric/#bearcave/ ? 08:14:23 Don't mind augur and his flaming gayness. 08:14:36 GAY GAY GAY 08:17:04 *clears throw* 08:17:13 sorry, i felt there wasnt enough gayness. 08:17:16 had to gay it up in here 08:33:31 -!- GreaseMonkey has quit ("Unisex."). 09:11:58 -!- timotiis has joined. 09:14:29 -!- asiekierka has joined. 09:14:31 Hey 09:15:00 what? was my SNUSPrisc idea that bad? (a RISC in SNUSP) 09:15:17 i think i must make BNUSP 09:16:28 -!- asi33krka has joined. 09:16:36 -!- asiekierka has quit (Nick collision from services.). 09:16:41 -!- asi33krka has changed nick to asiekierka. 09:17:24 SNUSNU 09:21:52 it'll also have not X and Y for memory 09:21:56 but X and TH 09:21:59 X and THread 09:22:11 every thread will have it's own 512-byte memory piece 09:24:07 17 commands so far 09:24:23 all Core SNUSP and Modular SNUSP commands are there 09:24:37 The Bloated SNUSP's & and % are there 09:25:23 and 3 new commands: ^ (nand), ! (global/thread memory swap), and * (swap the global memory value and the thread memory value) 09:25:26 How does it look? 09:26:03 oh wait 09:26:06 ! is skip already 09:26:22 changed the memory swap thing to @ 09:26:26 wait 09:26:27 it 09:26:29 it 09:26:40 darn ENTER, it's ENTER in SNUSP 09:26:55 ok, let it be : 09:27:38 oh well, screw it 09:30:21 -!- Iskr has joined. 09:34:15 -!- jix has joined. 09:37:00 -!- asi33krka has joined. 09:37:08 Back 09:37:11 or wait 09:37:22 -!- asiekierka has quit (Nick collision from services.). 09:37:23 -!- asi33krka has changed nick to asiekierka. 09:54:53 -!- Dewi has quit ("bbs"). 10:16:18 -!- jix has quit ("This computer has gone to sleep"). 10:21:02 -!- asiekierka has quit. 10:27:27 hm 10:27:27 im just wondering if you could code a gui in brainfuck? ;o 10:27:30 i mean in theory ;p 10:29:11 Yes 10:29:14 But would you? 10:30:17 i surely wont do this :) 10:30:25 but i just cant imagine HOW to do this 10:31:39 Nocta : For instance, . could display a pixel of a certain color. 10:31:48 And then go to the next one. 10:31:51 Or something. 10:32:41 hm but couldnt you popup a window with a normal design with brainfuck? ;o 10:33:16 i also dont know how you could "leave" the 30.000 bytes array and for example close any other application 10:33:26 but its turingcomplete ;o 10:35:09 It's just not very good to handle graphics. 10:35:57 i know that its not good for _anything_ ;) but i dont even know if its possible oO 10:37:52 mom, reboot 10:38:06 -!- Nocta has quit. 10:38:20 I'm not your mom. 10:44:32 -!- Nocta has joined. 10:44:35 re ;o 10:50:12 I'm not your mom, Nocta. 10:53:37 not? 10:53:51 Indeed. 10:54:12 and now youre funny? :) 10:54:35 No. 11:00:24 -!- roos has joined. 11:06:06 is there anything like an official brainfuck forum? ;o 11:06:18 this is the official brainfuck forum. 11:07:43 oO 11:08:40 Hi! is anybody speek russian here ? 11:10:19 None that I know of. 11:10:38 There's the esolang forum, but I'm not sure if it's still read 11:13:17 roos: what would you do with a russian speaker if you got a hold of one? 11:19:16 hold of one - what is it 11:22:30 lament just interesting 11:26:36 -!- roos has left (?). 11:31:07 In Soviet Russia... 11:38:39 hm and where's that esolang forum? i just want to read a bit through it, doesnt matter if its still active 11:43:19 http://esoteric.voxelperfect.net/forum/ 11:43:38 But if you really want to read up on brainfuck, read the esowiki article 11:47:04 link? :) 12:34:45 -!- Dewi has joined. 12:39:27 * Nocta slaps Slereah_ around a bit with a large trout 12:41:59 http://esolangs.org/wiki/Brainfuck 12:42:47 -!- Corun has joined. 12:43:21 thx 12:49:12 -!- olsner has quit (Remote closed the connection). 13:37:45 -!- ais523 has joined. 13:47:23 -!- HanDongSeong has joined. 14:05:06 -!- uvanta has joined. 14:06:07 -!- HanDongSeong has quit (Nick collision from services.). 14:06:14 -!- uvanta has changed nick to HanDongSEong. 14:06:17 -!- HanDongSEong has changed nick to HanDongSeong. 14:22:51 -!- Slereah has joined. 14:22:53 -!- Slereah_ has quit (Read error: 104 (Connection reset by peer)). 14:34:46 -!- ais523 has quit (Read error: 104 (Connection reset by peer)). 14:34:52 -!- Corun has quit ("This computer has gone to sleep"). 14:35:26 -!- ais523 has joined. 14:39:05 12:27… Nocta: im just wondering if you could code a gui in brainfuck? ;o <<< PSOX !!!!! 14:39:24 ah, that meme again 14:39:31 I suppose you could do it with ASCII art 14:39:40 psox wtf? 14:39:41 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 14:39:43 -!- Slereah has joined. 14:39:50 ok you could do it with ascii sure ;) 14:39:51 and technically speaking there's no reason why you couldn't implement curses in Brainfuck, except that that would be insane 14:40:00 in soviet russia, the brain fucks you 14:40:04 I don't think PSOX as a GUI, though 14:40:26 s/as/has/ 14:40:39 it's trivial to make something for graphics with , and . 14:41:03 just encode drawing stuff in io some way 14:41:10 sure, but thats not the kind if gui i mean 14:41:27 generally speaking you can do it by putting filters on the input and output 14:41:32 that's how PSOX works, for instance 14:41:33 but actually you cant create a new window with a normal windows-gui with a normal brainfuck implementation 14:41:39 because you lack access to the "real" memory 14:41:44 duh 14:41:51 that's because the Windows API is badly designed 14:45:13 but imagine you have some sort of translator attached to the Brainfuck I/O streams 14:45:27 so the BF program outputs some code meaning "create a window" 14:45:32 and the translator creates a window for it 14:45:40 hm yeah that would be possible 14:45:52 that's the idea behind PSOX, but it never really caught on 14:46:09 but on the other hand you could also write an implementation for brainfuck at the processor-memory or something 14:46:29 you could let it do system calls 14:46:41 ! for interrupts! 14:46:47 (Huh?) 14:46:50 yeah but you cant with do such things with a normal brainfuck implementation 14:46:51 ;o 14:47:31 because the array where brainfuck can play as it wants, is seperated from everything else 14:47:41 so it cant effect anything outside the application 14:47:51 oh you 14:48:18 well, imagine that you output some code saying "read the value of memory location 0xabcdef10" 14:48:24 and you get the value in through standard input 14:48:29 that way it can effect pointers, and so on 14:48:33 but that needs a translater too 14:48:39 s/translater/translator/ 14:48:41 yeah so its not 100% brainfuck :p 14:49:05 Then just make your Brainfuck output ANSI itty bitty squares 14:49:20 It will be 100% brainfuck! 14:49:38 and also terrible for anything that isn't purely a static image 14:50:48 What would worry me is the speed of such a process. 14:51:03 cool speed 14:51:36 It would probably be better to do a monochrome thingy in Boolfuck 14:51:50 * ais523 finds themself wishing for a diff4 14:51:51 it's weird how little people talk about speed restraints given by the implementation of a certain language 14:52:00 or possibly even diff5 14:52:30 or how fast formal languages are @ computation, in terms of rewrites 14:52:34 hmm 14:52:38 hmm... maybe I should diff the output of diff itself 14:52:43 formal languages... i mean like computational models 14:52:56 Well, Brainfuck isn't just a computational model. 14:53:22 what's the difference? 14:53:47 they're just *used* differently, says i. 14:54:34 computational models generally don't specify file formats, whereas programming languages generally do 14:54:37 I think that's the main difference 14:55:29 file formats of source? 14:55:33 yes 14:55:41 well yeah, i guess that's the main difference. 14:55:42 P'' doesn't have a source code file format 14:55:44 Brainfuck does 14:56:53 anyway, my problem at the moment: 14:57:01 there is an old file, which I have changed and someone else has changed 14:57:04 and I want to merge the changes 14:57:10 so far, that's just a simple diff3 14:57:43 however, my copy of the file someone else has changed also has some of my changes in 14:57:51 relative to a fifth version of that same file 15:00:42 * ais523 runs slocate to try to track down just which versions exist and what was based on what 15:00:53 because all the files involved have the same filename 15:00:56 but are in different directories 15:07:54 * ais523 finds the 2 smallest relevant diffs and diffs them in their head 15:18:23 I hope it's right now... 15:19:15 -!- Slereah has quit (Read error: 110 (Connection timed out)). 15:49:22 -!- Corun has joined. 16:08:38 -!- tusho has joined. 16:08:48 hello 16:08:54 tusho: hello 16:08:55 this is my fourth try ... 16:09:03 first one that appeared in the channel 16:09:10 ais523: yeah, it's been misbehaving 16:09:13 sometimes I try xchat fisrt 16:09:14 * ais523 has been filing bugs against gnome-games 16:09:15 sometimes epiphany 16:09:20 there's some kind of weird order that gets it right 16:09:25 epiphany can connect to IRC? 16:09:28 it involves switching to non-graphical stuff when connecting and similar 16:09:30 ais523: no :p 16:09:41 but this is my second first-xchat try 16:09:45 and the first that didnt' crash immediately 16:10:27 -!- Slereah has joined. 16:10:35 ais523: not gonna join #ircnomic _yet_ because i'm not crashing 16:10:43 so direct any messages to me that belong in there here for a second 16:11:13 I didn't have any 16:11:13 ais523: is my perlnomic players.cgi passing? 16:11:20 it's at +3, quorum is 5 16:11:26 it was at +3 last night 16:11:27 :\ 16:11:27 no opposes or abstains, though 16:11:30 any comments? 16:11:40 no 16:11:48 ok, it might pass today I guess 16:11:52 think I should try epiphany? 16:12:05 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 16:12:07 if you think your connection can handle it 16:12:17 ais523: wait, it's not my connection that crashes 16:12:24 your computer than 16:12:26 my connection is great :P 16:12:27 s/than/then/ 16:12:35 ais523: actually, this computer _never_ crashes with windows 16:12:50 the hardware combination is from hell, I think, because linux acts like this with it 16:12:55 strange 16:13:09 I would use windows, except, you know, I'd have to use windows 16:13:16 -!- Slereah has joined. 16:13:19 it can be not that bad 16:13:31 on my Windows desktop at home, I've got much of GNU installed 16:13:38 so I use bash and ls, etc 16:13:45 one warning, though, use copy rather than cp 16:13:51 it can be not that bad! 16:13:56 funnest sentence ever 16:14:00 it looks like a typo, but it isn't 16:14:32 ais523: of course, I cygwin'd it up 16:14:32 it's just nowhere near as comfortable for me 16:14:32 i've spent whole days fiddling with it to get it nice.. still not a fan. 16:14:32 because cp is much slower because it has to go via Windows's file-handling stuff, whereas copy can do it directly 16:14:47 ais523: oh, and I like systems that can fork 16:15:15 for a while i thought cp was for child porn there. 16:15:21 was a fairly weird sentence 16:15:36 hahahah 16:16:01 (read NO FUCKING CP on a forum about 15 minutes ago) 16:16:19 so child porn not involving fucking is a-ok? 16:16:25 :) 16:16:39 reminds me of a recent daily wtf 16:16:39 i can't imagine "fucking" having any other meaning there. 16:16:45 'an unhealthy amount of child porn' 16:17:30 i should leave now... well i've been trying to leave for 1.5 hours 16:17:36 but it's not all that easy leaving the computer 16:17:57 especially the internet with its chats and endless sources of random content 16:18:06 oklopol: STAY. 16:18:32 btw, oklotalk passed with the best possible grade 16:18:44 oklopol: what did you enter it into? 16:18:45 hahahahahaha what 16:18:47 that's not possible 16:18:51 ais523: high school thingy he had to do. 16:18:55 oklotalk--, to be precise 16:18:58 high school graduation project 16:18:59 and why not? 16:19:04 ais523: because it's crazy!!! 16:19:06 :D 16:19:11 well 16:19:11 oklopol: now, give us the source 16:19:14 you promised :3 16:19:45 even if had been a programming language project, it would've been a good one 16:19:54 but it was a fairly open project, no one makes anything nearly that complicated 16:20:08 not that it's that complicated. it's just most people make... crap 16:20:22 hmm 16:20:33 very obscure use of pronouns there. 16:20:46 I want antinouns 16:20:48 tusho: i promised nothing :) 16:20:54 oklopol: but you SAID :( 16:21:01 I HAVE NEVER SAID ANYTHING. 16:21:03 EVER. 16:21:07 ok good point 16:21:13 i'm a DEATHMUTE 16:21:52 DEATHMUTE 16:22:37 i know, it's a bad pun, try not to laugh :| ...oh, wait, try to laugh 16:22:54 ha ah ah 16:22:58 ahhhh 16:23:00 wait what 16:24:04 okay i leave *now*. 16:24:05 -!- oklopol has quit ("( www.nnscript.com :: NoNameScript 4.2 :: www.regroup-esports.com )"). 16:24:14 fuck. 17:03:17 -!- jix has joined. 17:24:27 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1""). 17:52:57 what language is this? in ais523's quitmessage? 17:53:16 -!- uvanta has joined. 17:53:58 -!- handongseong_ has joined. 17:59:55 -!- Judofyr has joined. 18:05:51 -!- HanDongSeong has quit (Nick collision from services.). 18:05:57 -!- handongseong_ has changed nick to HanDongSeong. 18:12:30 -!- uvanta has quit (Read error: 110 (Connection timed out)). 18:35:22 -!- atsampson has quit (Read error: 113 (No route to host)). 18:35:37 what language is this? in ais523's quitmessage? 18:35:38 that is intercal 18:36:49 ok 18:36:56 Nocta: ais523 maintains c-intercal 18:38:04 its designed to be hard to work with? :o 18:38:46 Nocta: do you expect #esoteric to consist of nice fluffy languages? 18:39:10 -!- atsampson has joined. 18:42:20 not really ;p 18:43:56 mh some langauges are designed to be small, others to be hard, and others to look like a piece of shakespear oO 18:44:14 piet looks interesting 18:53:27 Nocta: yes piet is fun 18:57:23 Small languages are hard as a side effect. 18:57:41 thats true, but they are not designed to be hard ;) 18:57:45 And most esolangs aren't that big. 18:58:28 You often need a small compiler to write something actually 18:58:58 not compiler exactly... code generator maybe? 19:00:05 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 19:00:30 -!- Judofyr has joined. 19:08:57 -!- timotiis has quit (Read error: 110 (Connection timed out)). 19:16:25 wot? 19:16:35 What do you mean, mister dong 19:17:37 err 19:17:39 for example 19:18:04 lifthrasiir there wrote a short python script to make his 99 bottles code in Wheel 19:18:20 Oh, you mean a translator to actually write programs? 19:18:31 Slereah: yeah 19:18:37 like, writing in some languages is a pain 19:18:40 so you write a program to write it 19:18:42 Indeed. 19:18:43 yeah, if you call it a translator 19:18:44 in something less painful 19:18:52 HanDongSeong: most of the time the program it generates is hardcoded into it 19:18:58 so it's just a generator 19:19:29 I tried to do that once 19:19:39 but it was even more of a pain in the ass to write it 19:19:46 :( 19:19:49 I'm not a very good programmer. 19:20:15 Slereah: hey, at least you can program 19:20:19 it's a bit leap from none->some 19:20:31 Slereah: what were you trying to generate? 19:20:48 Something to convert pseudo code into Lazy Bird. 19:21:08 Like translating some of the most common operators, and some of the loops and conditional 19:21:10 Slereah: Cool. What kinda pseudo code? 19:21:52 Well, so far my idea was to just replace a bunch of operator with the appropriate combinators 19:22:03 I didn't really have any idea to implement the loops and such 19:22:03 Slereah: like, + and stuff? 19:22:08 so you could do `+22 or whatever 19:22:12 Well, not + per say 19:22:20 Because + is pretty simple in lazy bird 19:22:31 But = is long like a longcat. 19:22:41 Slereah: Okay. So couldn't you have just: 19:22:44 - parsed the lazy bird 19:22:51 - go through and replace = with the right code 19:22:57 - then converted it back into code? 19:23:09 Slereah: you could steal most of the code from lazy bird itself 19:23:20 Well, technically, I could just do a replace = by the combinator 19:23:29 But the loops where a big problem 19:23:46 Slereah: I guess so. 19:23:47 Even with el señor Turingo combinatorre. 19:24:07 Slereah: Oh wells! 19:24:47 Plus, I am currently (not) working on an even awesomer language 19:25:04 Slereah: COOL WHAT IS IT 19:25:17 It is called LIMP :o 19:25:35 A mish mash of the very small functional languages 19:25:42 To make them somehow usable together 19:25:51 Slereah: cool 19:25:55 Slereah: put some haskell in it 19:25:55 :3 19:25:56 (It's actually lambda-iota-mu-pi) 19:26:04 Slereah: hmm 19:26:07 drop iota 19:26:11 and put in some lisp and haskell 19:26:15 then i'll buttsex you 19:26:24 Well, it is call limp because it's also based on lisp 19:26:30 Slereah: OK then, drop iota and add haskell 19:26:34 But it also has mu recursive functions 19:26:37 iota is just booring 19:26:43 IN SUMMARY 19:26:48 The iota is not for the iota language 19:26:50 o 19:26:52 wut is it 19:26:55 It is to sound like Lisp 19:27:03 But like, the original Lisp 19:27:10 Slereah: hokay. well just add some haskell in 19:27:11 The six-function Lisp 19:27:21 What does Haskell have moar? 19:27:27 Slereah: Haskell has tons moar. 19:27:30 It's nothing like lisp 19:27:32 It is le fun 19:27:38 Well, I sort of want to keep it esoteric. 19:27:45 But somehow usable 19:28:00 Slereah: Yes, but haskell is basically eso 19:28:00 :P 19:28:23 It would be mostly lambda calculus - µ recursive functions - original Lisp 19:28:37 Plus I'm trying to work pi calculus in, since I have a pi left. 19:28:38 Slereah: Rite. Add some ha! Skull. 19:28:50 Oh god. Pi calculus + lisp + haskell = I LUV U 19:29:02 µ would provide numbers, lisp would provide lists 19:29:15 And lambdas, well, general functions I suppose. 19:29:15 Slereah: lambda would provide functions 19:29:21 pi would provide AWESOME MESSAGES AND ACTORS AND STUFF 19:29:33 and haskell would provide LAZY MONADIC JOY 19:29:45 I was thinking of treating I/O like one of the actor fellow. 19:29:51 Slereah: Oooh, now that's clever. 19:29:56 and have a channel always open for it. 19:29:56 I/O is just an opaque actor. 19:30:13 Slereah: OK IDEA. 19:30:16 Unify actors and monads. 19:30:22 Ô.Ô 19:30:52 For instance, if x is the channel, a cat would be (x(a).x.0)! or something 19:31:21 Slereah: You could have it that actors are just monadic actions 19:31:21 But I still have no fucking idea what monads are. 19:31:27 but the monadic actions have send/recv stuff 19:31:34 Slereah: ok, do you get category theory, kinda. 19:31:38 I mean, sorta maybe. 19:31:43 No. 19:31:51 Slereah: ok fine. Do you get haskell types? 19:31:58 a -> b -> c is a -> (b -> c) 19:32:05 Well, I know type theory. 19:32:08 and it's a function, from a to (a function from b to c) 19:32:09 The Mathematica one. 19:32:14 Slereah: Right, of course. But do you understand that? 19:32:30 Well, you're just describing priority. 19:32:38 Slereah: No, not really. 19:32:40 I was just explaining the syntax. 19:32:54 Slereah: OK, and do you get what I mean when I say (m a)? It means: the type 'm', given the type argument 'a' 19:33:03 if we don't qualify 'a' or 'm' anywhere else, they can be anything. 19:33:07 Slereah: Got that? 19:33:17 And finally, a :: b means 'a is of type b' 19:33:35 Slereah: Once you've got all that, i'll explain sum of dat monadz 19:33:38 Do you have an example of (m a) 19:33:43 Slereah: yes 19:33:46 (List Integer) 19:33:52 List is a type taking one argument 19:33:56 and we give it the argument Integer 19:33:59 Oh. 19:34:02 Slereah: BUT 19:34:03 'kay 19:34:03 We could do 19:34:04 (List a) 19:34:05 BUTT 19:34:08 meaning 'I don't care what we get' 19:34:10 as long as it's a list 19:34:13 with any 'a' 19:34:27 Slereah: Hokay. Ready for sum HOT MONAD ON MONAD ACKTION 19:34:28 ? 19:35:02 I had this conversation many time before 19:35:08 It never fared very well :o 19:35:12 But you can try 19:35:19 Slereah: Okay. So now that we've got that.. 19:35:29 Slereah: we're going to explain monads, WITHOUT ANY DUMB FUCKING ANALOGIES 19:35:33 (i'm talking to YOU, #haskell) 19:35:39 Slereah: okay, so. 19:35:48 Actually, I never asked #haskell 19:35:48 Slereah: There are some types that classify as MONADS. 19:35:59 Sure, but WHAT ARE MONADS 19:36:01 yeah, just, shut up and say 'ok' when you've digested what i've said :P 19:36:06 Slereah: Shush 19:36:07 OK 19:36:10 All these type 19:36:10 s 19:36:13 have ONE argument 19:36:15 Like List does. 19:36:18 Slereah: got that? 19:36:32 Doesn't everything in Haskell have one argument? 19:36:41 Through hot curry and kebabs. 19:36:45 Slereah: We're talking about types here. 19:36:57 (List Integer) <-- List is a type. Integer is a type. (List Integer) is a type. 19:37:00 List is a type taking one argument. 19:37:06 Slereah: However, Integer takes no arguments. 19:37:09 got that/ 19:37:14 'kay 19:37:32 Slereah: Right. So. 19:37:40 Every monad has some functions on it. 19:37:57 That is, a monad 'm' is a type taking one argument that has some functions that obey some laws. 19:38:14 Slereah: So 'm' is our monad, right? Got that? 19:38:24 Okay. 19:38:39 Slereah: Hokay. So. Here's the first function. 19:38:42 return :: a -> m a 19:39:02 Slereah: So, return takes a value of type 'a', and gives you an 'm a'. 19:39:06 'a' can be anything, 'm' is our monad. 19:39:14 Slereah: Got that? I'll tell you _what_ these do later. 19:39:30 okay 19:39:41 Slereah: OK. Now comes the big, important function. 19:39:46 bind :: m a -> (a -> m b) -> m b 19:39:52 Slereah: WHOOOOOAAA THAT'S A SCARY FUCKING TYPE. 19:39:59 The clue is in the name, Slereah. 19:40:04 Slereah: Basically. 19:40:13 Slereah: You know 'return'? Wrong name for it. 19:40:16 It should be called 'wrap'. 19:40:18 wrap :: a -> m a 19:40:23 Slereah: We WRAP the value into the monad. OK? 19:40:28 Okay. 19:40:29 Now, 'bind' lets us unwrap them. 19:40:31 (Calm down!) 19:40:34 bind :: m a -> (a -> m b) -> m b 19:40:40 Slereah: See that 'a'? That 'a' comes from the 'm a'. 19:40:54 Slereah: BUT, we're not allowed to escape monads. So we have to get it as a function argument, which MUST stay inside the monad. 19:41:04 So we unwrap it, do our stuff, and give back a value still in the monad. 19:41:06 Then bind gives us that value. 19:41:13 Slereah: Got that? 19:41:50 Slereah: i'm about to explain the laws that define exactly how they should behave. 19:41:53 Slereah: ready for that? 19:42:00 Sooo... bind will take some monad infested argument, and return (a -> m b) -> m b? 19:42:17 Which will then give us more g^Hmonads? 19:42:22 Slereah: Well, kinda, but that's not how you should think about it. 19:42:24 Bind takes two arguments. 19:42:40 A monad infested one, a function that takes a _non-infested_ version of the first argument, and returns an infested value, and then returns that value. 19:42:47 So it unwraps the first value to give it to the function. 19:43:01 Slereah: got that? 19:43:33 Yes. 19:43:42 (I'm lying to move along faster) 19:43:42 Slereah: Okay. Now here come the MONAD LAWZ 19:43:58 wrap a `bind` f = f a 19:44:08 Slereah: Since 'wrap' wraps something, then 'bind' unwraps it and gives it to its second argument, 19:44:12 that obviously holds true. Right? 19:44:48 Is that ((wrap a) bind) f? 19:44:53 Slereah: No. 19:44:59 a `f` b = f a b 19:45:05 It's just more convenient this way. 19:45:06 It's: 19:45:07 bind (wrap a) f 19:45:34 Slereah: Rite? 19:45:35 ``bind`wrap a f? 19:45:52 Slereah: In Haskell land we are syntaxfags. 19:46:03 Okay final law 19:46:04 You functional weenies. 19:46:25 bind (bind a f) g = bind a (\x -> bind (f x) g) 19:46:35 Slereah: that one's a bit hard to understand, but basically it means that 'bind' is associative. 19:46:58 Slereah: Now, what is an actual example of a monad? 19:46:59 I also hate you Haskell people for using \ 19:47:06 Slereah: WOULD YOU BELIEVE IT. List is a monad! 19:47:08 ^ is a much better lambda 19:47:16 Slereah: My list monad, would you like to see it? 19:47:20 I don't believe it! 19:47:25 Yes. 19:47:30 Slereah: Hokay. So for list: 19:47:32 wrap a = [a] 19:47:40 Slereah: That's pretty simple, right? We're _wrapping_ a value into a list. 19:47:44 bind :: a -> List a 19:47:47 Yes. 19:47:50 Yep, List is an okay 'm' so far. 19:47:55 err 19:47:56 *wrap 19:47:59 Slereah: And nao for bynd. 19:48:07 bind xs f = concat (map f xs) 19:48:12 Slereah: To explain that: 19:48:16 concat :: List (List a) -> List a 19:48:23 Slereah: i.e. (concat [[1,2],[3,4]] -> [1,2,3,4]) 19:48:29 Slereah: And .. you know map. 19:48:32 I know concatenation. 19:48:34 Rite. 19:48:36 So. 19:48:37 But not so much map 19:48:41 Slereah: Oh. 19:48:47 Also what the fuck is xs 19:48:50 map f [x,y,z] -> [f x,f y, f z] 19:48:51 Slereah: OK? 19:49:00 and 'xs' is just a common name for a list argument. 19:49:05 Slereah: So, let's examine bind's type again 19:49:09 bind :: m a -> (a -> m b) -> m b 19:49:12 Well, since we're doing lists: 19:49:17 bind :: List a -> (a -> List b) -> List b 19:49:28 Slereah: So the first argument we get is a list. 19:49:29 OK. 19:49:36 And the second one takes an element of that list, and returns another list. 19:49:47 Slereah: So, since we've mapped it, we get (List (List b)) 19:49:55 So we concat it, get (List b), and voila! We have our bind return value. 19:49:59 So what does the bind return in this case? 19:50:03 The same list? 19:50:06 Slereah: the concatenation 19:50:10 Slereah: An example: 19:50:18 bind [1,2,3] (\x -> [x,1]) 19:50:20 turns into 19:50:23 [1,1,2,1,3,1] 19:50:40 Slereah: Now, the monad laws. 19:50:52 bind (wrap a) f = f a 19:50:59 (wrap a) is [a] 19:51:00 so 19:51:06 bind [1] (\x -> ...) 19:51:10 Now, bind maps over it. 19:51:11 So 19:51:16 map (\x -> ...) [1] 19:51:24 Then concats it... 19:51:27 concat (map (\x -> ...) [1]) 19:51:34 Slereah: Blargh, I lost you didn't I? 19:52:14 Well, wouldn't f a be (\x -> [x,1]) [1,2,3], which would be [[1,2,3]]? 19:52:17 Or something 19:52:38 Slereah: No, because of the map 19:52:44 map :: (a -> b) -> List a -> List b 19:52:51 Slereah: So if we have (a -> List b) 19:52:59 map :: (a -> List b) -> List a -> List (List b) 19:53:04 which is *almost* binds type 19:53:08 Move the arguments around: 19:53:16 map :: List a -> (a -> List b) -> List (List b) 19:53:20 Success! We just have one too many levels of list. 19:53:22 So concat and: 19:53:25 map :: List a -> (a -> List b) -> List b 19:53:26 aka 19:53:28 bind :: List a -> (a -> List b) -> List b 19:53:32 aka 19:53:36 bind :: m a -> (a -> m b) -> m b 19:54:34 Slereah: am i rite 19:54:58 Sorry, I was talking to my mother. 19:55:12 My problem is 19:55:17 In bind (wrap a) f = f a 19:55:30 The function in bind is supposed to be irrelevant. 19:55:30 Slereah: Wait 19:55:33 No 19:55:38 bind (wrap a) f = f a 19:55:40 look at the wrap 19:55:42 now 19:55:44 let's expand 19:55:47 bind [a] f = f a 19:55:49 let's expand 19:55:53 concat (map f [a]) = f a 19:55:56 Slereah: Do you see now? 19:57:12 concat [f a] = fa? 19:57:25 Slereah: No. 19:57:30 concat [[f a]] = [f a] 19:57:36 Slereah: Remember, f returns a List 19:57:37 but we map 19:57:39 so we get a List List 19:57:42 so we concat to get a List 19:57:53 But map f [x,y,z] -> [f x,f y, f z] :o 19:58:03 Wait 19:58:08 Slereah: Yes.. But f returns a list. 19:58:13 What is f? 19:58:18 Slereah: f is (a -> List b) 19:58:22 where 'a' is the type of elements in the list 19:58:22 Isn't it supposed to be a random function? 19:58:30 -!- oklopol has joined. 19:58:31 Yes, but it must be of a specific type! 19:58:35 bind :: m a -> (a -> m b) -> m b 19:58:38 f is the second argument 19:58:40 m is List 19:58:56 Man I hate Haskell's syntax 19:59:10 Slereah: Somehow I doubt your problem is with the syntax here. 19:59:23 *only with 19:59:51 Could you give the I/O monad thingy? 20:00:41 Slereah: its internal to the haskell impl 20:00:46 obviously, since it actually does the io 20:01:38 Also, what would actually add a monad in my awesome thing that I won't actually ever implement? 20:02:11 cool thing 20:02:19 -!- RodgerTheGreat has quit. 20:06:31 (Hulo?) 20:07:11 Slereah: I have to go now for about 30 mins, soon. 20:07:12 Sorryl. 20:07:23 Bye. 20:07:46 Sorry boy, but me and monads just don't mix :o 20:08:42 Slereah: Keep tryin'. 20:08:44 Ask #haskell. 20:13:22 What I'd like to know is, why do functional people have so much against side effects? 20:13:49 I can understand the concern for an esoteric language, because it's fun to make a language entirely of one paradigm 20:13:55 But why Haskell? 20:14:06 Slereah: it helps enforce correctness 20:14:09 and helps reasoning about programming 20:14:13 and letsy ou do lazy evaluation 20:15:01 Isn't "enforcing correctness" just another term for "being unpractical"? 20:15:29 Slereah: no. 20:15:36 It means that if your program compiles, it probably works 20:15:39 bye for 30mins 20:16:57 'kay 20:17:09 Disregard that. Back for a few minutes. 20:17:44 Heh 20:17:59 So, what would add monad for the limp machine 9000 20:18:09 (Disregard the 9000, it's a bad habit) 20:18:58 Slereah: define 'add monad' 20:19:13 Slereah: My idea was - an actor is a monad. 20:19:19 So, your IO actor, is an actor, but it's also a monad. 20:19:23 Or .. something. 20:20:01 But how would this work out? 20:20:33 Slereah: It's your language, you figure it out. 20:20:36 All I know is IT'D BE AWESOME. 20:20:48 But I don't want no filthy monads in it :o 20:21:07 And since I barely know what it is, it would be hard to work it in some actor 20:21:17 What the fuck is a bind for an actor? 20:21:32 The user is one! And I don't want to be bound! 20:21:39 At least not on the first date. 20:21:57 Slereah: Well, no. 20:22:02 I mean that an actor is a monadic value. 20:22:05 actor = m a 20:22:35 -!- oklofok has joined. 20:22:44 My idea was mainly to do something that's vaguely usable. 20:22:54 Slereah: this could be usable! 20:22:58 You just write your actors as monadic stuff. 20:23:07 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 20:23:33 Doing numbers in pure Lisp is probably not very easy, and doing lists in µ is a fucking hassle. 20:23:45 And lambda calculus is just painfully long. 20:23:53 But what if the three were combined! :o 20:24:02 "painfully long", that's what SHE said 20:24:04 What if, my friend! 20:24:30 I also want to do some sort of library-like feature. 20:24:41 Like you could load a list of pre-existing functions. 20:25:01 Instead of redefining addition for every program, you could just load some arithmetic module 20:26:08 Slereah: monads and side-effects are not very related, by the way. 20:26:13 I'm pondering on what to use for compatibility between functions though. 20:26:32 a monad is just a monad, you can have one in any decent language 20:26:41 Like what would happen if I try successor on something that isn't a number 20:27:05 Like what would happen if I try successor on something that isn't a number 20:27:08 it should success. 20:27:13 lament : isn't the I/O monad supposed to prevent side effects? 20:27:19 Slereah: the IO monad, yes 20:27:19 *rimshot* 20:27:33 Slereah: no, the IO monad is supposed to allow side effects. 20:27:37 Slereah: the IO monad is what we refer to as a "clever trick", though 20:27:39 Haskell would be pretty useless otherwise 20:28:12 I'm not a big fan of types, but the idea of converting things into lambda calculus and lambda calculus in lists and numbers does not appeal much to me 20:28:42 types are fun 20:28:54 Mainly because I'm lazy and it would be retarded to use those functions on something that isn't the right argument 20:30:19 in a context of non-esoteric languages, types are a good way of documenting your code. 20:30:30 So the basic functions would be something like succ, µ, cons, car, cdr, cond, atom, eq. 20:30:34 often you know what a function does just by looking at its signature. 20:30:47 With the constants nil, true, false and 0. 20:30:59 Though true and false could also just be 0 and >0 20:31:21 brb30ms 20:31:29 Slereah: and 'spawn' 20:31:30 and 'send' 20:31:37 (and'wrap'and'bind') 20:31:46 I'm not sure the projection function would be of much use if I have no restriction on the function definition 20:31:53 What would that be? 20:33:17 (Also lambdas and some combinators from the good old lazy bird set) 20:34:18 -!- ihope has joined. 20:35:38 -!- oerjan has joined. 20:35:58 -!- calamari has joined. 20:36:21 ihope, oerjan and calamari all joining at the exact same time 20:36:28 Uh oh. 20:36:29 hi 20:36:33 Ello. 20:36:34 They're coming after me! 20:36:37 yes. 20:36:39 To fill me with monads D: 20:36:44 we know what you're up to 20:36:53 * ihope eats Slereah's upper eyebrow 20:38:27 * ihope administers monads ocularly 20:38:58 BRAINS.. WITH MONADS 20:39:10 It's going to be a Clockwork Orange moment, isn't it? 20:44:10 Yep. 20:44:45 Only with more monads. 20:45:20 "I could see a bit of the ol' functional language, when suddenly, I felt monads" 20:50:25 -!- timotiis has joined. 21:00:28 mh how would you display numbers with more than one digit in the best way in brainfuck? ;o 21:01:36 i vaguely recall PEBBLE has an i2a algorithm 21:02:00 Nocta : You use some sort of dividable - substraction algorithm? 21:02:40 i thought about doing something like this 21:03:03 (PEBBLE-generated bf probably is not optimal in size though) 21:03:21 since it is macro-based, so will have repetitions 21:03:54 ;o 21:05:12 (vague recall as in i think i helped pikhq debug it) 21:06:21 or at least the underlying division macro 21:07:53 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 21:08:07 -!- Judofyr has joined. 21:19:43 i dont really know what you mean 21:21:31 -!- ihope has quit (Read error: 110 (Connection timed out)). 21:21:43 PEBBLE is pikhq's macro language which compiles to bf among others 21:22:24 Is it what they used on the Flintstones? 21:22:26 there is a macro for converting a number to digits 21:22:27 hm so you think i should use this as help? 21:22:54 you might 21:23:34 hm i could write the numbers from 0-9 in the cells from 0-9 21:23:46 also, http://esoteric.voxelperfect.net/wiki/Brainfuck_algorithms 21:23:52 it has divmod at least 21:24:10 and then split the number in 1, 10, 100 and 1000 steps 21:24:26 divmod = %? 21:24:31 modulo 21:24:46 and % simultaneously 21:24:52 er 21:24:54 / and % simultaneously 21:24:59 ah ok 21:25:06 -!- Judofyr_ has joined. 21:25:26 but shouldnt be too hard to make it in bf without macros 21:25:27 very useful for this kind of stuff 21:25:33 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 21:25:49 i mean that wiki page has a divmod 21:26:08 yesterday i wrote the >= operator :o 21:26:09 hm ok 21:29:13 hm? 21:29:31 oerjan, divmod? a python framework iirc 21:32:44 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 21:36:25 -!- Slereah has joined. 21:37:39 -!- RedDak has joined. 21:38:03 python ftw 22:29:36 Lol back 22:30:37 oerjan, divmod? a python framework iirc 22:30:49 AnMaster knows python frameworks, but not mathematical operators 22:31:28 tusho, yes I know what div and mod are 22:31:29 it was a joke 22:31:31 :P 22:31:36 But then again when is divmod used outside of computarrs?* 22:31:59 anyway doesn't the IDIV instruction in x86 return both div and mod results? 22:31:59 Slereah: Never. 22:32:04 in different registers 22:32:08 AnMaster: it was a pretty lame joke but that's to be expected I guess 22:32:08 and yeah. 22:38:43 heh 22:48:27 -!- Iskr has quit ("Leaving"). 23:21:27 -!- timotiis has quit (Read error: 110 (Connection timed out)). 23:26:24 -!- RedDak has quit (Remote closed the connection). 23:34:26 -!- HanDongSeong has quit ("It's Monday morning here in South Korea. I'm going to start new week now"). 23:57:09 -!- tusho has changed nick to ehird`. 23:57:24 -!- ehird` has changed nick to tusho. 23:58:16 -!- jix has quit ("This computer has gone to sleep").