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