00:00:52 non-associative semicategory 00:01:26 ok this is another term that i google and the only instance is me making the joke here before 00:01:39 non-associative semicategories, like the word "apple" 00:01:51 oerjan: again with dead people. are you a zombie or something? <-- try bribing me with brains... 00:02:57 will brawn do? delicious, savoury brawn spread on hot and buttered toasts? 00:03:06 MAYBE 00:03:52 brawn on bran over brain 00:04:17 the new BBBBLT sandwich. 00:05:39 can you add some brown cheese? 00:05:46 sort of seems to fit 00:05:53 what's brown cheese? 00:06:00 norwegian specialty 00:06:36 http://en.wikipedia.org/wiki/Brunost 00:07:06 I think I can find that somewhere. 00:07:14 oh well. time to go eat again. 00:07:15 compulsory part of our foreigner test kit, together with lutefisk 00:07:17 http://en.wikipedia.org/wiki/File:Messmor.jpg this is disgusting 00:07:25 lutefisk will come after that. 00:07:27 -!- boily has quit (Quit: Poulet!). 00:07:30 -!- cuttlefish has quit (Remote host closed the connection). 00:08:03 Hmm... I think I'm going to write some repetitive code for the sake of occasional TCO 00:08:34 nooooo don't write repetitive code 00:08:38 sgeo 00:08:39 dont 00:08:50 "what monqy said" (am i doing this right) 00:09:04 I'm sure I could make it unrepetitive 00:09:15 then why don't you 00:09:25 It will still make the code slightly uglier 00:09:48 what do you mean by tco anyway 00:09:51 Sgeo: is this like when interpreting the last element of a list? it rings a bell 00:10:14 Yes 00:10:49 If the last element that I'm interpreting is Compile, then there's no more work to be done save for that Compile, which starts interpreting the next element on the compiler stack 00:10:59 maybe you should use a different data structure alt. not care because this is a silly proof of concept and not a production quality whatever the heck you're making 00:11:29 i think it came up similarly for ^ in an underload interpreter 00:11:37 or was it elliott's compiler 00:12:02 Compile being the last element is going to be the most common case, I think 00:13:15 I can make the rare case work by simply calling to the common case while protecting the state, I think 00:13:25 what's sgeo doing 00:13:33 nooodl_: TCO'ing 00:13:52 There is an StateT s m a thing that calls StateT s m a while reverting back afterwards, right? 00:14:28 what do you mean by while reverting 00:14:55 :t mapStateT 00:14:57 (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b 00:15:08 That is, something like 00:15:12 wrong mapping thing 00:15:26 StateT s m a -> StateT s m a 00:15:39 are you looking for something like `local` 00:15:43 Possibly 00:15:50 local works on StateT? 00:15:50 what's possibly 00:15:54 no 00:16:33 withStateT I think I saw which the name makes me think along those lines 00:16:54 Wait, no 00:17:00 how about you use precise words to describe what you want 00:17:22 I want to take a stateful action and execute it and then undo the changes to the state 00:17:27 ok 00:18:02 Possibly get >>= runStateT / 00:18:03 ? 00:18:18 Erm, well, something along those lines 00:18:41 get >>= \s -> do v <- x; put s; return v 00:18:50 i was just about to say that but with applicative notation 00:18:53 "much prettier" 00:19:14 i'm not sure you can do it with only applicative notation 00:19:20 i mean 00:19:31 instead of just part of it 00:19:37 x <* put s i guess 00:19:40 yes 00:19:49 I also don't need the result 00:19:52 ok 00:19:54 I'm doing it for the side effects 00:19:57 ok 00:20:34 anyway, the above should work 00:20:54 no it won't!!!! keeping the result around ⇒ bloat ⇒ unacceptable 00:20:55 unless you need to catch throws inside x too 00:21:06 *from inside 00:21:16 and reset the state even then 00:26:07 What's wrong with my runStateT solution? 00:28:08 Halite, if you're interested in learning how to write interpreters, the standard first language to target is eodermdrome <-- nice try 00:29:30 it's my master plan 00:29:36 someday a savant will enter the channel 00:29:48 and we will all be propelled into a glorious new dawn 00:32:58 FUCK YOU KATE 00:33:24 Typing on a line beginning with [] does NOT mean "indent me indent me please please please" 00:34:37 oh dear, is it making your brainfuck code too unreadable 00:37:38 It's turning my correct Haskell code into incorrect Haskell code 00:37:56 :t runStateT 00:37:58 StateT s m a -> s -> m (a, s) 00:39:38 Blah, oerjan's way was easier 00:41:02 My code, as it currently stands 00:41:06 It compiles so far :) https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc 00:42:02 oh 00:42:10 in that case; why are you using kate 00:42:49 Because it wasn't irritating me until just then 00:42:59 I can live with sometimes faulty code hilighting 00:43:27 but there's a whole hierarchy of why here 00:43:34 for instance: why are you using kde 00:44:21 Because I like KDE? Also this system is a bit broken, in such a way that whether I'm using KDE or GNOME tends to vary on whether X works when I boot up 00:44:28 Although X has been working, so 00:44:34 ah linux 00:44:53 i do recall switching to KDE because i fuckxed up my GNOME install 00:45:56 i think the horrific brokenness that ultimately trashed my laptop started when i experimented briefly with kde 00:46:04 it's a gateway drug 00:58:30 I can feel this thing getting closer to completion 01:07:34 -!- augur_ has joined. 01:16:45 I just need to remember how to parse parens 01:16:50 Parens, my eternal nemesis 01:20:33 Conceptually, the code I'm writing is the result of compiling ,+[-:,+]! by hand 01:21:13 (EOF=-1) 01:25:20 :t runWriter 01:25:22 Writer w a -> (a, w) 01:26:34 :t execState 01:26:36 State s a -> s -> s 01:26:43 I never rember exec vs eval 01:28:01 I wonder if the State monad is good or bad for my globals addiction 01:28:19 With it, one writes code that looks like it's accessing a global, but it's all confined 01:28:47 On the one hand, it lets me write in that style, on the other, when I move into other languages... 01:29:41 -!- Phantom_Hoover has quit (Remote host closed the connection). 01:36:01 globals addition 01:37:41 ****addiction 01:39:14 ★★★★hi monqy 01:40:54 hi 01:41:15 @quote monqy 01:41:15 Plugin `quote' failed with: getRandItem: empty list 01:42:19 What might an interpreted Trustfuck look like/! 01:42:33 good question 01:46:22 i wonder if there are good generalizations of poker 01:47:06 there's kolmogorov poker 01:47:21 where instead of a fixed hand ranking, you can challenge someone's hand by producing a shorter program to generate your hand 01:47:39 probably a p. shitty game tho 02:02:03 Sgeo: most languages have some way to confine 'globals' 02:02:46 i like how the Linux kernel shoehorns basically a fourth layer of scoping for static-storage variables into the C language 02:04:15 'static' vars in functions have static scope, 'static' vars at file level have file scope, non-'static' vars at file level are scoped to a whole kernel module 02:04:26 but if you want it to be visible outside that kernel module you have to add EXPORT_SYMBOL(foo) as well 02:05:06 * Sgeo decides that the state monad is analogous to dynamic scoping 02:05:16 With an implicit name 02:09:55 and only one value 02:18:20 the reader monad with its local might fit even better. 02:23:22 kmc: That's one of those tricky linker tricks, isn't it? 02:24:13 Maybe I should just have one very long line representing the bulk of the program 02:24:23 Rather than a multitude 02:24:55 what do you mean by that 02:25:12 code = all the code in the program save for two lines 02:25:17 * Sgeo is deja vuing 02:25:39 This program needs to ultimately output almost itself save for two lines 02:25:55 And those two lines are different 02:26:13 pikhq: well, the trick is just that the kernel has its own dynamic linker/loader for modules, and so gets to decide which symbols are dynamically resolvable 02:26:26 i don't actually know if they implement this layer of scoping when stuff gets compiled in 02:26:39 you might need unique names anyway for the compiled-in case 02:27:24 They probably do; as far as I know, they link each module into a single object and then vmlinuz is linked from those. 02:27:35 mm 02:27:53 (binutils has some thing where you can link a bunch of objects into a single object file that's still not fully linked...) 02:30:39 there's ld -r 02:33:56 Sgeo: do you know about explicit {} blocks in haskell? 02:34:16 For things like do? Yes 02:34:32 so that you don't need to care about layout 02:35:15 Some of these functions are on multiple lines. I don't see what's wrong with just outputting what's here 02:35:56 just trying to help in case getting indentation right trips you up 02:35:56 Seriously, it's going to output a mostly-quine with two things changed, and those two things are not functions 02:36:02 Ok 02:36:56 > let a=1; b=2 in a+b 02:36:57 3 02:38:28 * Sgeo sets indentation to none 02:38:32 Fuck you, fuck you, and fuck you Kat 02:38:34 Kate 02:39:34 lol 02:39:43 an omnishambles 02:41:31 -!- copumpkin has quit (Read error: Connection reset by peer). 02:41:59 -!- copumpkin has joined. 02:44:16 -!- WeThePeople has joined. 02:45:49 TYPING THE WORD IN DOES NOT MEAN INDENT INSANELY 02:46:09 Nor does typing a comma 02:50:59 Meh, my parser is not perfect at detecting unbalanced [] 02:52:07 It assumes [ have a ] at the end if there isn't, and ] followed by nothing might just be dropped 02:52:13 Is this a big deal? 02:57:24 what i did in the fueue brainfuck interpreter was to keep a flag of whether i'm already inside a loop. then it's easy to discern those cases. 02:59:29 :t runStateT 02:59:30 then in either case, exactly one of ] and eof are permitted to occur. 02:59:30 StateT s m a -> s -> m (a, s) 03:02:07 mind you, in haskell it should still be simpler to use parsec. 03:02:25 Probably >.> 03:02:46 Right now I'm so close to getting this working 03:02:48 fsvo working 03:06:24 A 4,886 character line 03:06:32 Maybe this is not the best idea for readability 03:07:11 Oh crud 03:11:00 hm? 03:11:08 I forgot to write main 03:11:13 At least, that what that crud was about 03:11:16 Currently having another crud 03:11:21 This program is going to be a PITA to edit 03:11:48 what were you expecting 03:12:38 Not to need to edit it very much 03:13:32 monqy: Something ... someone ... nothing. 03:13:42 Are you hungry? 03:13:50 ???????????????? 03:14:25 hi 03:14:46 hi 03:14:49 did you ever explain comma categories 03:15:11 or was it just that "limited version" of them 03:15:31 i explained the specific instance of them you want for free objects...for a more general explanation you'd be better served just looking them up 03:15:54 good point 03:16:18 mr.hird and i did a few "adjunctions" to get "free functors´ 03:16:23 it was p. great 03:16:39 alrite 03:16:50 https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc 03:16:54 Still need to test it 03:17:11 monqy: you know how you can make the "Cont monad" out of adjunction of (-> r) -| (-> r)? 03:17:25 probably you've said that? maybe??? idk 03:17:34 going into Haskᵒᵖ 03:17:44 monqy: its "pretty nifty" 03:18:10 monqy: have you ever noticed that Cont'sjoin = contramap (Cont'sreturn)?? 03:19:04 primitive.o: In function `rQf_info': 03:19:04 (.text+0xa74): undefined reference to `mtlzm1zi1zi0zi2_ControlziMonadziTrans_zdfMonadIOIO_closure' 03:19:07 wat 03:19:27 mtl-1.1.0.2_Control.Monad.Trans_$fMonadIOIO_closure 03:19:27 hth 03:19:33 probably you did something bad 03:21:05 Not only that, I tried to mess around in GHCi a bit 03:21:06 There's a big 03:21:08 bug 03:21:36 ouch 03:21:49 That big was a typo for bug 03:21:52 a big 03:21:53 bug? 03:21:57 that soudns dangerous 03:22:10 so big that you have to pause after saying big 03:22:26 As soo as it saw , as input it output 03:22:34 i've written some pretty terrible bugs 03:22:40 but i've never written a big 03:22:41 bug 03:24:34 -!- impomatic has quit (Read error: Connection reset by peer). 03:28:10 There's no bug. I'm just an idiot. 03:28:29 yay! 03:29:12 Well, there's still a bug 03:29:17 Just not what I was thinking 03:29:30 -!- nooodl_ has quit (Ping timeout: 260 seconds). 03:30:01 I think. 03:30:07 -!- oklopol has quit (Read error: Connection reset by peer). 03:30:27 -!- oklopol has joined. 03:30:43 In this case https://plus.google.com/107913314994758123748/posts/3adHiA9yq9D 03:30:53 elliott: We should get around to doing Kan extensions. 03:31:29 Hmm, wrong channel. 03:31:45 I guess elliott is in both channels. 03:32:14 he's been idle for quite a while. 03:32:53 I know. 03:39:01 Ok, so one problem: Input is broken 03:39:18 Problem two: Output is cobroken. 03:39:31 I think loops are broken too 03:41:11 if eof then Just <$> getChar else return Nothing 03:41:14 derp 03:41:16 ƪ 03:41:35 oops 03:41:58 time of check time of use! 03:42:56 Um. I guess that's a theoretical problem with the isEOF vs my original catch-based way, but that's not the large bug 03:44:13 :t \f -> return True >>= f . guard 03:44:15 (Monad m, MonadPlus m1) => (m1 () -> m b) -> m b 03:44:34 Anyways, now to see waht the deal with loops is 03:44:35 :t \f g -> return True >>= maybe f g . guard 03:44:36 Monad m => m b -> (() -> m b) -> m b 03:44:53 :t \f g -> return True >>= fromMaybe g . guard 03:44:55 Couldn't match expected type `m0 b0' with actual type `()' 03:44:55 Expected type: Bool -> Maybe (m0 b0) 03:44:55 Actual type: Bool -> Maybe () 03:44:59 :t \f g -> return True >>= fromMaybe f g . guard 03:45:01 (Monad m, MonadPlus m1) => (m1 () -> m b) -> Maybe (m1 () -> m b) -> m b 03:45:57 :t \x -> guard :: Maybe () 03:45:58 Couldn't match expected type `Maybe ()' 03:45:58 with actual type `Bool -> m0 ()' 03:45:58 In the expression: guard :: Maybe () 03:46:02 :t \x -> guard x :: Maybe () 03:46:04 Bool -> Maybe () 03:46:17 oh 03:47:10 Ok, so loops are broken somehow 03:49:01 Or maybe output's broken, wat 03:49:30 the primTranslate cases for [] look fine to me 03:50:55 * Sgeo is assuming the problem is in interpret' 03:51:01 I'm testing things out by changing program 03:56:59 -!- pikhq has quit (Read error: Connection reset by peer). 03:57:00 Well, that's one problem 03:57:06 Out doesn't continue interpretation 03:57:16 -!- pikhq has joined. 04:04:40 -!- Arc_Koen has quit (Quit: Arc_Koen). 04:05:52 I think some of this is me failiing at Brainfuck 04:05:55 failing 04:07:02 -!- copumpkin has quit (Read error: Connection reset by peer). 04:07:19 -!- copumpkin has joined. 04:08:13 kmc: http://www.theproofistrivial.com/ 04:09:27 "Just biject it to a trivial algebra whose elements are semi-decidable posets", sounds quite trivial. 04:09:52 I just successfully compiled and ran a trivial Trustfuck program 04:10:20 excellent. now we can take over the world. 04:10:37 The gist is now updated with the latest version 04:10:57 very good 04:11:03 http://www.youtube.com/watch?v=KmK0bZl4ILM 04:11:05 truth 04:14:42 Ok, so my next test will be this: 04:15:06 Creating a compiler for a variation of Trustfuck in which each character maps to the character above it 04:15:14 And then writing a cat program in that dialect 04:15:58 Erm 04:16:05 Easiest thing to do, character below it 04:16:27 > inc 04:16:29 Not in scope: `inc' 04:16:29 Perhaps you meant one of these: 04:16:29 `int' (imported fro... 04:16:35 > succ 04:16:37 No instance for (GHC.Show.Show (a0 -> a0)) 04:16:37 arising from a use of `M77076... 04:16:38 ty 04:18:04 > map pred ",+[-.,+]" 04:18:06 "+*Z,-+*\\" 04:19:44 fuck 04:21:02 I'm an idiot who can barely remember how to use his own language 04:23:45 module `main:Main' is defined in multiple files: predtest.hs 04:23:46 predtest.hs 04:23:55 Oh 04:24:14 It works! 04:24:23 I guess there are some things currently untested 04:31:56 oerjan, ais523 if you logread, anyone else? Feel free to play with it 04:38:16 I'm far too lazy to even figure out what trustfuck is 04:39:47 sgeo's brainfuck derivative 04:46:34 coppro, shall I attempt to explain it? 04:55:02 "\35\52\56\63\48" 04:55:06 > "\35\52\56\63\48" 04:55:08 "#48?0" 04:58:03 I could (should?) be storing the unparsed versions rather than the parsed versions, I think 04:58:10 Take up less space in the compiled program 04:58:25 Might be important for trying to compile that large game 05:07:29 Hmm. 05:07:43 A Trustfuck compiler targetting x86 might not require writing x86 code directly 05:13:12 Just need to write C code that alters its memory then retrieves all of its ... 05:21:46 -!- dessos has quit (Ping timeout: 240 seconds). 05:34:16 -!- WeThePeople has quit (Quit: Leaving). 05:35:51 > '\59' 05:35:53 ';' 05:45:53 > '\10' 05:45:55 '\n' 05:46:11 > '\64' 05:46:13 '@' 05:46:15 > '\65' 05:46:17 'A' 05:46:19 Ok 05:46:23 * Sgeo is derptastic today 05:47:53 okay 06:03:51 -!- hogeyui has quit (Ping timeout: 276 seconds). 06:20:41 -!- DHeadshot has quit (Read error: Connection reset by peer). 06:20:47 -!- DH____ has joined. 06:21:20 -!- noam has quit (Read error: Connection reset by peer). 06:21:45 -!- noam has joined. 06:36:27 -!- hogeyui has joined. 06:54:10 > popCount (65::Int) 06:54:11 2 06:55:16 @ty popCount 06:55:18 Bits a => a -> Int 06:55:37 I guess it's in Bits? 06:55:40 Everything is in Bits. 06:55:41 yeah 06:55:56 @ty popSixSquishUhuhCiceroLipschitz 06:55:58 Not in scope: `popSixSquishUhuhCiceroLipschitz' 06:56:02 the ridiculous thing is, they have this function but none to find the highest set bit... 06:56:37 There isn't one for lowest set bit either, right? 06:56:52 not afaict 06:56:54 * shachaf would like to take this moment to mention that de Bruijn indices are the future. 06:57:01 OKAY 06:57:24 > toListOf bits 123 06:57:27 [True,True,False,True,True,True,True,False,False,False,False,False,False,Fa... 06:57:35 good function 06:57:46 :t bits 06:57:47 (Applicative f, Bits b, Indexable Int p) => p Bool (f Bool) -> b -> f b 06:58:27 Hmm. gzip in Haskell is probably fairly easy. Funny. 07:07:31 -!- Halite has joined. 07:08:42 hai 07:08:52 `welcome Halite, pikhq 07:08:58 Halite,: pikhq: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) 07:09:11 `welcome ChanServ 07:09:13 ChanServ: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) 07:09:16 lol 07:11:41 hello 07:12:19 monqy: 07:12:40 (btw that was 0006 ACKNOWLEDGE) 07:14:19 ok 07:16:10 -!- Halite has quit (Changing host). 07:16:10 -!- Halite has joined. 07:17:01 I'm trying to crash HackEgo in the other channel by sending a WHILE loop. 07:18:57 HackEgo, die 07:19:32 hackego's feelings???? 07:20:51 monqy: good point in the other channel 07:21:30 thachaf 07:21:31 HackEgo is set up with version control. Anything happens, it can be revertred 07:21:37 `ls 07:21:39 ​= 0 \ bin \ brainfuck.fu \ canary \ dbg.out \ egobot.tar.xz \ etc \ factor \ factor-linux-x86-64-0.95.tar.gz \ foo \ foo.err \ foo.out \ fueue.c \ ibin \ interps \ karma \ lib \ paste \ quines \ quotes \ quotese \ run~ \ share \ sudo \ %sudo \ test \ wisdom \ zalgo.hs 07:21:41 you're wonqy 07:21:46 `run rm canary 07:21:49 No output. 07:21:57 `ls 07:22:01 ​= 0 \ bin \ brainfuck.fu \ canary \ dbg.out \ egobot.tar.xz \ etc \ factor \ factor-linux-x86-64-0.95.tar.gz \ foo \ foo.err \ foo.out \ fueue.c \ ibin \ interps \ karma \ lib \ paste \ quines \ quotes \ quotese \ run~ \ share \ sudo \ %sudo \ test \ wisdom \ zalgo.hs 07:22:12 Wait, what's = 0 ? 07:22:22 `file = 0 07:22:25 ​= 0: ERROR: cannot open `= 0' (No such file or directory) 07:22:27 `cat = 0 07:22:29 No output. 07:22:32 `file = 0 07:22:34 ​= 0 : empty 07:22:43 `rm = 0 07:22:46 No output. 07:23:00 `file canary 07:23:02 -!- HackEgo has quit (Remote host closed the connection). 07:23:05 uh 07:23:22 someone apparently succeeded! 07:23:45 file canary shouldn't kill it, right? 07:23:46 >.> 07:24:07 oh hm 07:24:19 i think maybe i did 07:24:54 iirc HackEgo isn't supposed to keep empty files, so maybe deleting one breaks things 07:26:54 weird it claims it was added by coppro's `addquote http://codu.org/projects/hackbot/fshg/index.cgi/file/36a0f4a7116c/%3D%200%20 07:28:00 -!- epicmonkey has joined. 07:29:52 oh no it existed before 07:31:31 been there a while it seems 07:32:52 can HackEgo rejoin 07:33:25 only Gregor can make it 07:33:40 he seems idle at the moment 07:34:48 he might be sleeping at this time 07:34:50 NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO 07:34:53 Gregor, 07:35:03 @time Gregor 07:35:05 Local time for Gregor is Thu Feb 14 02:35:04 07:35:05 Halite, play with Trustfuck for a while if you're bored 07:35:18 Sgeo, please give a TF Interpreter 07:35:26 There's no interpreter, just a compiler 07:35:43 http://esolangs.org/wiki/Trustfuck 07:36:27 https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc is a Haskell file. Compile it with GHC. Then feed it Trustfuck as input, it will output some Haskell code 07:36:47 Compile that Haskell code, and run the result, and that's the Trustfuck program 07:37:11 So, let's say I have somecode.tf 07:37:13 I might do 07:37:32 ./primitive < somecode.tf > somecode.hs 07:37:41 ghc --make somecode.hs -o somecode 07:37:43 ./somecode 07:38:34 -!- epicmonkey has quit (Read error: Operation timed out). 07:38:35 -!- DH____ has quit (Ping timeout: 260 seconds). 07:40:09 Incidentally, here's the Trustfuck compiler written in Trustfuck 07:40:09 ,+[-:,+]! 07:40:36 The Haskell code can be viewed as being basically that, hand-compiled 08:01:25 :t _head 08:01:27 Cons (->) f s s a a => LensLike' f s a 08:06:53 -!- carado has joined. 08:10:16 > ([], [1,2,3]) ^? (_1 . _head <|> _2 . _head) 08:10:18 No instance for (Control.Applicative.Alternative 08:10:19 ((->) 08:10:19 ... 08:10:26 > ([], [1,2,3]) ^? (_1 . _head) 08:10:30 Nothing 08:24:48 > ([], [1,2,3]) ^? (both . _head) 08:24:51 Just 1 08:38:36 -!- sebbu2 has joined. 08:38:36 -!- sebbu2 has quit (Changing host). 08:38:36 -!- sebbu2 has joined. 08:39:46 -!- sebbu has quit (Ping timeout: 272 seconds). 08:42:31 -!- azaq23 has joined. 08:42:41 -!- azaq23 has quit (Max SendQ exceeded). 08:43:05 -!- azaq23 has joined. 08:52:12 :t zoom 08:52:13 Zoom m n s t => LensLike' (Control.Lens.Internal.Zoom.Zoomed m c) t s -> m c -> n c 08:56:10 :t (^~) 08:56:13 (Integral e, Num a) => ASetter s t a a -> e -> s -> t 08:56:24 oops 08:56:29 -!- epicmonkey has joined. 08:56:56 :T over 08:57:00 :t over 08:57:02 Profunctor p => Setting p s t a b -> p a b -> s -> t 09:02:12 -!- oerjan has quit (Quit: leaving). 09:03:27 -!- Taneb has joined. 09:10:07 -!- sebbu2 has changed nick to sebbu. 09:17:14 -!- nooodl_ has joined. 09:37:34 "Bueue"!? 09:56:10 -!- md_5 has quit (Remote host closed the connection). 09:56:40 -!- md_5- has joined. 09:58:14 -!- Taneb has quit (Ping timeout: 256 seconds). 09:58:56 -!- Taneb has joined. 10:16:07 -!- monqy has quit (Quit: hello). 10:16:55 -!- mroman has joined. 10:24:02 -!- DHeadshot has joined. 10:47:35 -!- sebbu has quit (Ping timeout: 260 seconds). 10:48:29 -!- Halite has quit (Remote host closed the connection). 10:51:19 -!- sebbu has joined. 10:51:19 -!- sebbu has quit (Changing host). 10:51:19 -!- sebbu has joined. 10:53:30 -!- copumpkin has quit (Ping timeout: 264 seconds). 10:54:07 -!- copumpkin has joined. 11:01:07 -!- sebbu2 has joined. 11:01:07 -!- sebbu2 has quit (Changing host). 11:01:07 -!- sebbu2 has joined. 11:02:45 -!- sebbu has quit (Ping timeout: 260 seconds). 11:07:42 -!- HackEgo has joined. 11:20:11 -!- md_5- has changed nick to md_5. 11:20:14 -!- aloril has quit (Ping timeout: 276 seconds). 11:24:54 -!- ncultures has joined. 11:24:55 -!- ncultures has left. 11:25:45 :t _head 11:25:47 Cons (->) f s s a a => LensLike' f s a 11:27:02 Is (.).(.) infix or prefix? 11:28:40 -!- ncultures has joined. 11:28:40 -!- ncultures has left. 11:29:13 Prefix 11:29:24 :t (.).(.) 11:29:26 (Functor f1, Functor f) => (a -> b) -> f (f1 a) -> f (f1 b) 11:29:45 Actually, it's nigh-unusable unless you put brackets around it 11:30:06 > ((.).(.)$(+1)) (1, [1,2,3]) 11:30:09 (1,[2,3,4]) 11:33:08 -!- sebbu2 has changed nick to sebbu. 11:34:02 -!- aloril has joined. 11:56:42 -!- oonbotti has quit (Remote host closed the connection). 11:56:57 -!- oonbotti has joined. 11:57:56 -!- DHeadshot has quit (Ping timeout: 245 seconds). 11:58:13 -!- Lumpio- has quit (Ping timeout: 246 seconds). 12:10:51 -!- nooga has joined. 12:13:30 -!- carado has quit (Read error: Connection timed out). 12:16:49 -!- sebbu2 has joined. 12:17:05 -!- sebbu2 has quit (Changing host). 12:17:05 -!- sebbu2 has joined. 12:18:03 -!- sebbu has quit (Ping timeout: 245 seconds). 12:22:17 http://mobile.osnews.com/story.php/26784/Opera-to-switch-desktop-mobile-browsers-to-WebKit/ 12:22:54 what? 12:23:59 I'm a little bit disappointed right now, but I get their point. 12:26:12 I really hope they open source presto 12:26:18 but probably not 12:34:07 uh 12:34:14 what? 12:35:51 Help I now have two libraries on Hackage 12:35:56 -!- Lumpio- has joined. 12:36:32 Taneb: base 4.5.*? 12:36:39 Thanks for hating GHC 7.6 users. 12:36:46 Also I can't look at the actual code. 12:36:47 shachaf, that's me being sleepy when checking the depends 12:38:01 It would actually work in base 3.0.3.1 12:38:28 Taneb: Does your package have free groups? 12:38:42 Alas, no 12:38:47 :-( 12:38:50 I want free groups! 12:41:38 shachaf, the dependency is less stupid now 12:42:13 Although free groups are still missing 12:42:52 And I still can't see the code. 12:43:06 (is that my fault, or Hackage's?) 12:43:23 Anyway, it's just a class Monoid m => Group m where invert :: m -> m 12:43:26 Taneb: "<5"? 12:43:28 Plus a few instances 12:43:30 Are you sure about that? 12:43:34 REASONABLY 12:43:55 Hmm, I guess it works. 12:45:29 It's got instance Num a => Group (Sum a); instance Fractional a => Group (Product a); instance Group a => Group (Dual a) 12:45:37 And all the tuple ones that Data.Monoid has 12:47:02 There's nothing that special 12:47:07 Free groups'd be harder 12:47:32 Is newtype Foo a = Foo { runFoo :: forall g. (a -> g) -> g } equivalent to a free group? 12:48:15 ...I don't think so 12:48:28 It's equivalent to a 12:49:15 Er. 12:49:18 Group g => 12:50:47 Let me think about that for a bit 12:54:19 It is a group 13:05:09 > (Product <> Product) 7 13:05:11 Product {getProduct = 49} 13:05:14 neat 13:06:26 Huh 13:06:39 :t getProduct . Product <> Product 13:06:41 Occurs check: cannot construct the infinite type: b0 = Product b0 13:06:41 Expected type: b0 -> b0 13:06:41 Actual type: b0 -> Product b0 13:06:46 :t getProduct . (Product <> Product) 13:06:48 Num b => b -> b 13:07:41 instance Monoid b => Monoid (a -> b) where 13:07:41 mempty _ = mempty 13:07:41 mappend f g x = f x `mappend` g x 13:08:37 > getSum $ (Sum <> Sum) 10 13:08:39 20 13:08:42 nooodl_: Can you come up with a free group type for me, please? 13:09:39 i just had to up what a free group is so probably i won't be of much help 13:10:48 hmmmm 13:12:18 this sounds like it'd be impossible to define as a type 13:12:37 Haskell is bad at things like commutativity and invertibility. :-( 13:14:46 a free group can have multiple free generating sets, right 13:15:05 ? 13:15:07 like for (Z,+) you have could have S = {1} or S = {-1} 13:15:27 (i'm reading http://en.wikipedia.org/wiki/Free_group because i'm bad) 13:15:33 (at group theory) 13:16:24 Hmm. I'm not sure what you mean. 13:16:40 Ah, you're going in the other way. 13:17:00 I mean: Given some generating set S, give me a free group over that set. 13:17:12 ohh i see 13:17:28 [] is a free monoid in a similar way. 13:17:30 (also: given an operator?) 13:17:35 No, you make the operator. 13:17:49 What shachaf wrote earlier is a group 13:18:17 Given the set S = {A,B,C}, you can give me the free monoid: (MS,(++),[]), where MS = {[], [A], [B], [C], [A,A], ,[C,A,B,A], ...} 13:18:32 Note that you pick your own operation here. What the elements actually are doesn't really matter. 13:18:43 But it needs Ranks2Types 13:18:53 Taneb: Just PolymorphicComponents!!!!!!!!!! 13:19:04 It needs some extension 13:19:10 Sure. 13:19:10 so that type would be... FreeGroup S 13:19:16 nooodl_: You can look at Nat as a free monoid over some singleton generating set. 13:19:22 That's the same as saying that [()] ~ Nat 13:19:38 Where [] = 0, [()] = 1, and so on. 13:19:41 (++) becomes addition. 13:19:50 right 13:20:07 Now, if you define data Unit = Unit and data Younit = Younit, [Unit] and [Younit] are equivalent. 13:21:42 nooodl_: Anyway, a free group would be similar, except you also have inverses. 13:22:09 So if your generating set is {A, B, C}, then you'd make up new elements A^-1, B^-1, C^-1 13:22:25 It doesn't matter what A,B,C actually were originally. You're making up inverses for them. 13:23:23 Then you can take "" (the empty word) as an element of Freegroup S, and also A, AB, AAA, ABA^-1, etc. 13:23:35 But ABB^-1A isn't an element. 13:23:40 Or rather it's equivalent to AA. 13:23:50 (Note: That means [A, B, B^-1, A]) 13:24:17 let me guess, ABB⁻¹A⁻¹ is equal to ""? 13:24:33 Right. 13:25:09 So you've made up a group structure from any set at all. 13:25:18 And in a sense this is the "minimal" group structure you can make. 13:25:41 (For example, this is also a monoid -- just forget about the invertibility -- but it's not a "minimal" monoid, because it has all these extra elements.) 13:31:10 For groups I took a leaf from edwardk's book and inlined things so that the core is shorter 13:31:33 However, I did not experiment with eta-expansion 13:51:24 shachaf, your Group seems to be rather useless 13:51:30 No, wait 13:51:31 Nevermind 13:52:50 shachaf: A^-1 would be {B, C} right? 13:53:05 Or not? 13:53:34 Oh wait, it wouldn't be, you're talking about something else 13:55:08 Groups 13:58:09 -!- sebbu2 has changed nick to sebbu. 14:00:56 Haskell and GHC don't seem to come with stuff for groups, just for monoids 14:01:44 That's why I wrote a small library in 5 minutes and uploaded it to Hackage 14:01:49 http://hackage.haskell.org/package/groups-0.1.0.1 14:02:28 class (Monoid a) => Group a where { invert :: a -> a } 14:02:33 Right? 14:02:59 Yeah 14:03:07 That's pretty much exactly my definition 14:03:39 The main difference is formatting and I used the letter 'm' rather than 'a' 14:05:43 And I still haven't decided whether to go to the UV party or not 14:11:13 -!- Arc_Koen has joined. 14:15:33 Taneb: You could make Group instances for Ordering and Maybe a 14:15:49 ...no you can't 14:16:22 > mempty :: Maybe String 14:16:24 Nothing 14:16:38 Give me a value x such that x <> Just "hello" is Nothing 14:17:04 Oh, you're right 14:17:29 Believe me, I actually double-checked those 14:17:36 You can't make an instance for Any or All either 14:17:56 You could make an instance for Xor possibly? 14:18:13 If there was a Xor 14:18:34 Possibly 14:19:20 invert = id 14:19:58 -!- boily has joined. 14:20:09 Would have to define the Xor monoid first though 14:20:09 -!- carado has joined. 14:20:39 Yeah 14:21:05 I don't want that to be on my head, though 14:22:02 newtype Xor = Xor { getXor :: Bool } instance Monoid Xor where { mempty = False; mconcat = (/=) } instance Group Xor where { invert = id } 14:22:29 Looks good? 14:23:56 ...almost 14:24:05 Xor always makes me thing of some alien overlord 14:24:21 THE ALMIGHTY XOR, MASTER OF THE LOGIC GATE 14:24:33 newtype Xor = Xor {getXor :: Bool} deriving (Eq); instance Monoid Xor where {mempty = Xor False; mconcat = (/=) } instance Group Xor where {invert = id} 14:24:42 Xor is weaker than Nand and Nor though 14:24:57 Taneb: Oh right 14:25:01 Good catch 14:25:12 That's why Xor needs his henchman, Not 14:25:45 Don't be true or i'll invert you. 14:27:10 I don't think Xor + Not is universal 14:27:13 But I am not sure 14:27:22 I dunno either 14:27:49 But I needed to act quickly! 14:27:51 For humor timing 14:28:14 You can make Not using Xor though 14:28:23 Hmm, yes 14:28:24 not = xor 1 14:28:25 Then Xor and -> 14:28:36 And as Xor isn't universal, neither is Xor + Not 14:28:36 Well, you need both xor and 1 14:28:40 How do you pronounce -> in programming? 14:28:42 1 is free 14:28:44 "to" 14:28:47 And you can't make a 1 using xor 14:29:42 Well, by 1 I mean True 14:30:00 Too used to thinking bitwise 14:30:02 I understood that 14:30:22 Hmm 14:30:46 I think XNOR is as universal as XOR 14:30:53 Because with XNOR you can't get 0 14:34:17 afaik NAND,NOR,XOR,XNOR can each cover all logical operations. 14:34:17 -!- Taneb has quit (Quit: Leaving). 14:35:03 -!- Taneb has joined. 14:35:04 -!- Nisstyre has quit (Ping timeout: 272 seconds). 14:36:04 I think it's only nand and nor? 14:47:45 *XOR&XNOR 14:49:13 -!- Nisstyre has joined. 14:49:56 Yeah, wikipedia says XOR isn't universal 14:50:18 FNORD 14:50:20 XOR + implication is 14:50:27 FNORD is universal, of course 14:50:36 Implication + NOT is so it's not too surprising 14:50:58 -!- mekeor has joined. 14:54:25 -!- azaq23 has quit (Ping timeout: 248 seconds). 15:02:01 -!- dessos has joined. 15:03:27 -!- upgrayeddd has joined. 15:04:43 more than a decade of logs, wow 15:04:54 `welcome upgrayeddd 15:04:58 upgrayeddd: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) 15:05:26 thank you Taneb 15:05:29 To be honest, the pre-2005 days are pretty quiet. 15:05:58 Not even people coming in to get magic advice 15:05:59 ? 15:07:16 Slereah_: Well, I mean, http://codu.org/logs/log/_esoteric/2003-01-19 looks like a pretty typical day to me. 15:07:30 -!- Phantom_Hoover has joined. 15:07:51 upgrayeddd, so, what brings you to the channel 15:08:19 heh 15:08:24 I forget when I came in 15:08:26 2007 maybe? 15:08:36 Taneb: jconn said there was an open session here and I was curious 15:12:22 "Open session"? 15:12:42 jconn apparently stores a sandbox for each person 15:12:44 jconn, ls 15:12:45 jconn, ls: 15:12:46 Sgeo, open sessions are: Sgeo,#jsoftware Taneb,#esoteric Okasu,#jsoftware Sgeo,#esoteric crassus,#e3b solemn,#jsoftware fftw,#jsoftware b_jonas,#jsoftware Elision,#jsoftware 15:12:46 Sgeo, done list 15:14:32 Let's trick shachaf into using the bot! 15:23:36 -!- oerjan has joined. 15:25:08 -!- impomatic has joined. 15:26:58 What bot 15:27:29 -!- cuttlefish has joined. 15:28:14 Taneb, jconn 15:28:32 Because if shachaf uses it, he'll be on the ls: list 15:28:34 Whose bot is that? 15:28:38 And when did I use it 15:28:47 afk 15:29:26 -!- azaq23 has joined. 15:35:47 "Bueue"!? <-- wat 15:36:02 The name is too darn similar to Fueue 15:36:23 ...says the guy who deleted the first Numberwang to replace it with a completely different language 15:36:34 OKAY 15:40:49 oerjan: WHY SO CAPITALIST? 15:41:03 wat 15:41:15 wats are the tool of the bourgeousie 15:41:38 oh shit there's only one u in bourgeoisie 15:41:43 it seemed frencher that way 15:41:54 buourgueuousuiue 15:42:05 ow. 15:43:17 baeiourgaeoiusaeiou 15:43:22 AAAARGH! 15:43:26 stop! 15:45:17 have some beaaaujoileaise 15:46:26 that's wanton cruelty to the common French vowel. 15:58:17 darn i've accidentally stopped my watch 15:58:23 no wonder i'm getting hungry 15:58:51 Is this the watch that pipes glucose directly into your arteries? 15:59:28 no, but i was planning to wait until half past 3 to eat and just started wondering why it wasn't already the time 15:59:38 (it's 5) 15:59:50 :( 16:00:11 oh wait, just half past 4 16:00:46 It's just turned 4 here 16:00:48 @time oerjan 16:00:50 Local time for oerjan is Thu Feb 14 17:00:48 2013 16:00:56 i mean the plan 16:00:58 Oh 16:03:45 -!- sebbu has quit (Ping timeout: 260 seconds). 16:08:03 wtf 16:08:12 My Nook says that A Clockwork Rocket only has 316 pages 16:08:17 Is it really a short book? 16:08:24 Was planning on wasting a few hours reading it today 16:08:56 A 30 minute read isn't going to cut it :( 16:09:49 If 316 pages takes 30 minutes, that's a page every 6 seconds. 16:11:34 Gregor: that doesn't sound so unreasonable 16:11:50 Sgeo: (how can you plan to waste a few hours on something but only have 30 minutes) 16:11:59 It does if you're actually reading. And it's not The Cat in the Hat. 16:13:19 I preferred the sequel 16:13:36 how fast can you read cat in that hat 16:13:39 that is the real question here 16:14:22 Ok, so I don't actually know how fast I read 16:14:49 The point is I'm going to need to spend a few hours, and if a book takes too short to read, I'm going to need to find something else to do afterwards 16:15:27 316 pages isn't a quick read 16:17:12 I've just ordered a plain grey t-shirt 16:17:34 These two facts are fundamentally interrelated 16:17:44 -!- Halite has joined. 16:18:10 someone make a valentines day esolagn 16:18:17 Nah 16:18:27 OH YAH 16:18:57 sup salty 16:19:30 quintopia, hey square utopia 16:19:45 wait, soup salty 16:19:48 mmm soup 16:19:52 Halite Soup 16:20:09 Halite, feel free to make one yourself 16:20:16 BrainSoup 16:20:26 Norfsoup 16:20:28 Preferably not based on brainfuck 16:20:32 Sorfsoup 16:20:47 how can I make a programming language not based on BF 16:21:01 Look at unlambda 16:21:10 link 16:21:11 i cant think of a good v-day idea. it doesnt seem like a commercial holiday for candy, cards, and flowers has much in common with esolangery 16:21:51 Trustlambda? 16:21:57 quintopia, buy flower of colour "Hello world!" 16:22:09 it's valentines day? 16:22:12 * Sgeo wonders if Unlambda might be a good base for a new Trust family language 16:22:37 Except I don't know if I want to write an Unlambda interpreter 16:22:39 languages that are basically procedural with weird themed syntax are not very fun imo 16:22:50 `wiki Unlambda 16:22:52 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wiki: not found 16:23:00 ...we don't have that? 16:23:06 !wiki Unlambda 16:23:11 ^wiki Unlambda 16:23:11 http://esoteric.voxelperfect.net/wiki/Unlambda 16:23:22 oh that ... is outdated. 16:23:24 Ah, ye old classic wiki 16:23:34 Sgeo: are you having nostalgia for the old wiki url 16:23:40 i am 16:23:55 surprisingly, no 16:24:00 the way none of us knew what voxelperfect.net actually 16:24:01 oh well, the link does work 16:24:01 was 16:24:04 good times, good times 16:24:07 Phantom_Hoover: it was graue's domain 16:24:19 a domain of perfect voxels 16:24:21 I don't think it hosted anything except the esolangs stuff 16:24:33 There was another thing for esolang files on that domain 16:24:35 http://voxelperfect.net/ is a pretty good placeholder page, that looks new 16:24:39 Sgeo: yes that's still hosted there 16:25:39 * Sgeo wonders if Unlambda might be a good base for a new Trust family language <-- my self-interpreter is almost meta-circular already! 16:25:50 self-circular is almost meta-interpreter 16:26:30 -!- Halite has left ("Halting execution"). 16:26:44 -!- Halite has joined. 16:26:53 wrong channel to part on lolol 16:26:54 that's how it managed to have an eigenratio of 1 16:26:58 trying to part #irp 16:29:41 oerjan: thought: perhaps the best way to define "non-cheating self-interpreter" is "self-interpreter with eigenratio > 1" 16:30:06 of course then someone will define a very silly joke language with a "slow self-interpreter" command... 16:30:27 eigenration? 16:30:31 how can an interpreter self-interpretate 16:30:48 eigenration: How much of your own body you're allowed to eat per day if stranded. 16:30:57 you write an interpreter for in 16:31:16 like writing an interpreter for BF in BF 16:31:25 yes 16:31:30 how would you interpretate the interpreter 16:31:38 what 16:31:52 how would you interpretate the self-interpreter 16:31:55 I wrote a compiler for Trustfuck in Trustfuck 16:32:12 Is the compiler cheating? 16:32:26 Halite, it works exactly the same as running the self-interpreter with any other interpreter 16:32:28 Sgeo, possible if there is a TF interpreter 16:32:28 that's the point 16:32:37 I don't think Xor + Not is universal <-- indeed not, and i shall have to point you to the Post Lattice again 16:32:56 Halite, there are currently no TF interpreters, only TF compilers 16:32:57 NOR and NAND are functionally complete 16:33:15 Sgeo, laise 16:33:34 I have to think about whether interpreted TF misses the point... 16:33:45 Halite: the post lattice gives you a way to see exactly which sets of boolean functions are functionally complete, and if not, what they _do_ generate 16:34:01 Although the infrastructure is there 16:34:23 oerjan, go look at TF go look at TF go look at TF? 16:34:27 oerjan, NOR and NAND are functionally complete, and so are its neighbours OR+NOT and AND+NOT 16:34:55 yes Halite 16:34:56 Halite: i am trying to tell you that i already know quite a lot more than this 16:34:58 i think oerjan knows this 16:35:21 http://en.wikipedia.org/wiki/File:Post-lattice-centre.svg] 16:35:39 i like the descriptive labels 16:36:23 http://upload.wikimedia.org/wikipedia/commons/1/19/Post-lattice.svg wow 16:36:37 Phantom_Hoover: I like how it looks like a cube with some crap sticking out of it. 16:36:40 Um, not cube. What's the word again? 16:37:13 Phantom_Hoover: WHAT IS THE NAME FOR A 3D RECTANGLE HELP 16:37:17 cuboid 16:37:18 parallelipiped? 16:37:27 cuboid elliott !!!!! 16:37:30 tetrahedron 16:37:31 The 4-day time cube. 16:37:31 thanks you nooodl_ 16:37:38 `THANK nooodl_ 16:37:38 tesseract 16:37:40 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: THANK: not found 16:38:34 elliott: btw some of the discussion i had with that eigenratio guy was how the known brainfuck self-interpreters don't seem to have a finite eigenratio at all (they use quadratic time as the tape grows), although i thought i had a way to fix it. alas he didn't seem to have much time for the discussion, i didn't hear from him any more after a while 16:39:20 parallelopiped is 3d parallelogram Phantom_Hoover 16:39:48 i think you'll find it's parallelapiped, quintopia 16:40:18 i might...IF I LOOKED 16:40:28 but that would be cheating 16:40:37 oerjan, how does he define eigenratio 16:41:04 what is an eigenratio 16:41:16 It sounds interesting and vaguely familiar 16:41:30 a rough measure of the efficiency of a self-interpreter 16:41:36 Okay 16:42:26 Hey, Haskell has data construction syntax that looks like [something| insert stuf here] right? 16:42:36 Yes...? 16:43:10 he seems to define it as the limit as n -> infinity of the ratio of time taken to simulate an n interpreter stack to the time taken to simulate an n-1 interpreter stack 16:43:18 Can't find a haskell wiki page about it 16:43:20 oerjan: hm 16:43:30 oerjan: you can generalise that to an eigenfunction, right? 16:43:34 (what's abuse of terminology) 16:44:01 um that sounds like an eigenvector in a function space 16:44:01 'eigenfunction' is already taken by those dastardly linear algebraists 16:44:10 right 16:44:22 oerjan: hence abuse of terminology :P 16:44:34 I mean s.t. an eigenratio of k would become f(x) = kx 16:45:11 elliott: in fact i _did_ conclude that there should be something like r^(n^2) for the brainfuck self-interpreters, so i've had similar idea 16:45:12 i was about to suggest o notation but that would be stupid 16:45:41 elliott, er, wouldn't an eigenratio be f(x) = k^x 16:46:09 er sure 16:46:43 i guess metacircular interpreters would have linear eigenfunctions 16:46:49 Phantom_Hoover: that is, i _think_ that if you take the logarithm of f(x), its limit will be a polynomial instead of linear for brainfuck, so you can look at the degree and the coefficient of the largest exponent 16:47:29 also it would be nice if they were defined more abstractly than realtime 16:47:34 but I guess you can just reuse big-O notation's "step" 16:47:48 it's all a bit dodgy to me 16:48:01 because obviously you need to have some dummy program to cap off the stack 16:48:13 FreeFull: are you thinking about list comprehensions or quasiquotations? (the latter are [something| insert stuff here |]) 16:48:28 and you can easily set things up so all the numbers vary wildly depending on what program you use 16:48:48 oerjan: btw what do you think about his golden ratio speculation? (http://eigenratios.blogspot.co.uk/2007/11/search-for-phi-holy-golden-ratio.html) it appeals to me but I don't know if it seems like coincidence to someone more competent 16:49:10 oerjan: Quasiquotations, thanks 16:50:11 Seems those aren't for data like I thought 16:50:12 elliott, er, so wait 16:50:19 Phantom_Hoover: the thing that makes brainfucks nonlinear isn't that they aren't metacircular, it's that they frequently need to move through the tape for a long while 16:50:32 oerjan, er 16:50:40 that's not what i meant 16:51:09 i mean if you define the eigenfunction as just being the limit of the time taken 16:51:19 then metacircular interpreters are rougly linear 16:51:57 'proper' self-interpreters are exponential or more, presumably 16:54:06 Phantom_Hoover: anyway the thing about the linear case is that with a nice interpreter you get a linear matrix describing how operations are implemented in terms of many operations at the previous stage, and if the operations are sufficiently cross-implemented, you get that perron-frobenius theory applying so that everything converges to the eigenspace of a universal eigenvector 16:55:08 and so the eigenratio then exists completely stringently 16:55:16 sorry oerjan i'm not doing that much maths today 16:55:47 Phantom_Hoover: it's the same principle behind the proposed new scoring for bfjoust, btw 16:55:55 -!- copumpkin has quit (Ping timeout: 252 seconds). 16:56:35 -!- copumpkin has joined. 16:56:52 oerjan: thanks a lot :( 16:57:58 then metacircular interpreters are rougly linear <-- oh right, yeah that's what happened with the unlambda 16:58:26 elliott: what? 16:58:49 There doesn't seem to be documentation for GHC.Arr at http://www.haskell.org/ghc/docs/latest/html/libraries/index.html 16:59:17 I wanted to look at the source ): 17:00:37 elliott: well the golden ratio clearly isn't a lower bound 17:01:23 FreeFull: hm i think i've managed to guess urls for such stuff before... 17:02:23 http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.1/src/GHC-Arr.html#Array 17:03:00 oerjan: well if you exclude "cheating" self-interpreters somehow 17:03:02 FreeFull: this was simple, the source link from Array in the Data.Array module pointed directly there :P 17:04:40 elliott: it seems like a matter of deciding how many operations you minimally can implement an operation with before you call it cheating. even the golden ratio seems a little low when you put it that way. 17:05:25 -!- varnie has joined. 17:05:36 oerjan: right 17:05:37 because you cannot get the golden ratio without _some_ operations being implemented with just one underlying operation 17:05:56 and once you admit that, it doesn't seem that implausible to go even lower 17:06:11 hm so I wonder if there is any limit to how small an eigenratio can be if it is > 1 17:06:14 I guess not really 17:06:18 if you just have enough operations 17:06:33 oerjan: btw what about eigenratios > 0 < 1 :P 17:06:35 oerjan: Aww, seems to be a primitive =P 17:06:43 what about a TC OISC, how would that count here? 17:06:57 FreeFull: you can implement the immutable array interface (inefficiently) in pure haskell 17:07:09 well, even efficiently, if you use a tree 17:07:16 no guarantees of contiguousness in memory though 17:07:32 yeah if you have a cycle of operations where everyone is implemented in terms of one other except _one_ which is implemented in terms of two others, then you can get arbitrarily close to n by making the number of them large enough. i think. 17:07:48 *close to 1 17:08:17 oerjan: I guess an eigenratio < 1 is where you have an instruction that somehow saves time by doing the work of two others... 17:08:30 ...and for that instruction itself to take less time to interpret than it saves 17:10:26 elliott: Well, the only purpose of Data.Array seems to be convienience and speed 17:10:52 Data.Array is not as convenient nor perhaps as fast as you might hope for. take a look at the vector packgae 17:15:26 -!- azaq23 has quit (Max SendQ exceeded). 17:19:00 -!- epicmonkey has quit (Ping timeout: 260 seconds). 17:22:27 esoteric 17:22:38 esolang 17:23:19 -!- Zuu has joined. 17:24:49 -!- Zuu has left. 17:25:49 -!- sebbu has joined. 17:25:49 -!- sebbu has quit (Changing host). 17:25:49 -!- sebbu has joined. 17:26:03 elliott: How well does Data.Vector do multidimensional stuff though? 17:26:27 FreeFull: you can nest vectors manually, or see the "repa" package, which does multidimensional arrays on top of vector with automatic parallelisation 17:26:34 though I think the API is in flux maybe? 17:26:50 there is a nice http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Repa_Tutorial. I don't know if it is up to date 17:46:45 http://en.wikipedia.org/wiki/Worshipful_Company_of_Hackney_Carriage_Drivers 17:55:05 I have an idea for an esolang 17:55:43 the worshipful company of etc sounds like something out of a terry pratchett book 17:56:26 He had to get inspiration from somewhere 17:57:00 Halite: what is it 17:58:50 elliott, that the esolang's only boolean operation will be - not NAND - not NOR - but f(three bit integer a, boolean b, boolean c) 17:59:47 elliott, ahem, f(four bit integer a, boolean b, boolean c) 18:01:10 it's basically a multiplexer where b is the most significant bit of the selector and c is the least significant bit of the selector. Also, a is the integer whose bx2 + c bit is selected 18:01:30 b*2 18:01:36 b*2 + c bit 18:08:08 Halite: What is the output type? boolean? 18:08:17 Can you construct the integer out of four booleans? 18:08:29 FreeFull, the output is boolean 18:08:44 FreeFull, you can construct a out of four booleans 18:08:51 -!- oerjan has quit (Quit: leaving). 18:09:43 if you know how to merge two bits together, then it's a multiplexer with b and c merged (assuming booleans are single-bit integers) 18:11:26 a "repa" tutorial? is that a typo or a euphemism? 18:11:45 and(b,c) would be something like f(1000,b,c) right? 18:12:04 -!- azaq23 has joined. 18:12:10 So the a is basically the logic table for whatever boolean operation 18:12:28 yes 18:12:35 a is the logic table 18:13:43 f(1000,1,1) will be 1, as ab is 11 and the (binary) 11th (fourth including 00) bit of a is 1 18:14:02 so you can make NAND 18:14:06 and NOR 18:14:21 0111 and 0001 18:14:32 with f(0111,b,c) and f(0001,b,c) 18:14:54 you've got it exactly right 18:15:07 You could do this as a DSL 18:15:40 what is a DSL 18:16:00 domain-specific language 18:16:25 what is a domain-specific language 18:16:37 Digital subscriber line. 18:16:38 a language specialized to one problem domain 18:16:45 as opposed to a general purpose programming language 18:16:54 what is a google 18:17:04 people also talk about "embedded DSLs" which are libraries for a general purpose language that support rich syntax that makes them feel like a mini-langauge of their own 18:17:07 Well, I meant EDSL 18:17:09 but also yes google it 18:19:04 http://zem.fi/ttd_logic/gate.png that's like the very same thing, it's been configured to be a NAND gate. 18:19:43 dood you that? 18:20:04 *doed 18:20:19 I doed it quite a long time aggo. 18:20:27 fizzie: o.o 18:20:39 I didn't know that game was turing-complete 18:21:00 well 18:21:01 it's not 18:21:08 bounded storage and all that 18:21:22 True 18:21:45 http://zem.fi/ttd_logic/ttd_4adder.png This looks surprisingly like an electronic circuit when zoomed out (large image warning) 18:22:03 The AI scripting language ("Squirrel") in it (nowadays) probably is. 18:22:06 why do people still do that in the broadband age 18:22:47 Phantom_Hoover: Because having a fast connection doesn't mean the page has a fast upstream 18:23:00 And some people might still have small amounts of RAM or something 18:23:10 I've always thought it's more about the memory thing. 18:23:17 i think nortti has nobody to blame but himself 18:23:21 -!- epicmonkey has joined. 18:23:30 Loading up a 10k x 10k image on my phone makes everything all sucky, for example. 18:23:35 I got back from the toilet 18:23:44 Halite.. 18:23:46 ... 18:23:47 ........ 18:23:51 what could I call my logic table function 18:24:05 Phantom_Hoover, whatt 18:24:10 whattt 18:24:13 Halite: You should borrow a term from intercal 18:24:15 Phantom_Hoover: Have you never seen Firefox try to load a gigantic image. 18:24:17 whatttttttt 18:24:23 * boily lends his personal ellipses supply to Phantom_Hoover 18:24:28 elliott, i did... once 18:24:29 FreeFull, can you give me a link to intercal 18:24:34 i think i repressed the memory 18:24:42 FreeFull, I don't know what intercal even is 18:24:47 iirc alt-sysrq stopped working 18:24:52 (careful, they're canadian dots, aligned to SI. they may not fit with US customary dots.) 18:25:14 FreeFull: Random fact: there was a single farm there in the middle (due to the terrain generator); it got mostly overwritten by the hacked-in copy-paste, but the fields still remain and get tilled. 18:25:33 fizzie: Cool 18:25:53 Halite: Do you at least know befunge and brainfuck? 18:25:58 boily: what about scottish dots 18:26:05 also I believe they are US customary "periods" 18:26:08 FreeFull, I know BrainFuck a little bit and I've only heard of Befunge 18:26:25 Halite: Ok, go on and read about INTERCAL now 18:26:27 how can you know brainfuck 'a little bit' 18:26:28 I showed fungot's source to some people today, and they thought it was in brainfuck. Honestly, people these days! 18:26:28 fizzie: you know as 18:26:43 elliott: those are fine. 20% better! 18:27:00 do you only understand +-.<]? 18:27:13 fizzie: What, they can't tell befunge apart from brainfuck? 18:27:45 You know, is there a 2D brainfuck? 18:27:49 FreeFull: I suppose "the non-initiated" just know both look funny, and I suppose the sources mention the word "brainfuck" in comments. 18:27:58 I'm pretty sure there is. 18:28:15 Hmm, minifuck-2d 18:28:37 Which isn't brainfuck but is brainfucky enough 18:29:18 Dimensifuck is reasonably close too. 18:29:33 2D brainfuck wouldn't be much different from regular brainfuck 18:29:38 Phantom_Hoover, I only understand that BF uses +-.,[] (and sometimes #! ) symbols 18:30:35 I'm reasonably certain there's the "obvious" "2D brainfuck" that's bf +-.,<> and then the directional commands and some conditional direction-changer. 18:32:02 -!- azaq23 has quit (Max SendQ exceeded). 18:32:13 Brainloller is pretty much that except the source format is an image. 18:32:17 reasonably interesting idea: only implement directional commands for x-axis movement. ( and ) or something 18:32:21 -!- Phantom_Hoover has quit (Ping timeout: 276 seconds). 18:32:31 It even has the same [] loops (along the "current direction"). 18:32:32 and have | be a conditional up-down thingy 18:33:41 I want to call my function LCOP (Logic Custom OPeration) 18:33:43 actually, screw ( and ), you could work with conditional directional commands only 18:33:47 If | will be conditional, you can get rid of [] 18:34:02 +-.,<>_| stealing _| from befunge 18:34:28 -!- azaq23 has joined. 18:34:41 for example, LCOP(1000,x,y) = x AND y 18:35:03 -!- hagb4rd has joined. 18:35:15 in decimal, LCOP(8,x,y) 18:36:08 oh, and @ to stop running, of course 18:36:10 Halite: Your language would allow recursion, right? 18:36:38 FreeFull, why not 18:36:51 FreeFull, if JS supports recursion 18:37:11 I think recursion + LCOP would be enough to make it turing-complete, not sure though 18:37:19 Why are you implementing it in JS? D: 18:37:26 -!- ogrom has joined. 18:38:55 I think that thing was called "B" *somewhere*, but I can't recall at all where, or why. (Might have been B for "boolean" or "binary" or both.) 18:40:15 FreeFull, because then it'd be easier to not make it Brainfucking. Simply set var lang = {big object with commands being properties} and then lang.command will execute a command 18:40:55 i hate myself for inventing this... 18:40:57 FreeFull, basically a custom set of custom JS commands 18:41:22 nooodl_, be happy :D 18:41:30 Javascript does recursion but doesn't do tail-call optimisation or anything 18:41:40 So it'll eat up memory if you put it into an infinite loop that way 18:41:45 FreeFull, :c 18:42:25 FreeFull, I could make tail-call optimisation myself, just put a few yields at the end of a while (true) loop 18:42:26 Gnah, once every couple of months I keep accidentally opening a PDF file in Emacs. 18:42:30 The worst thing is that it works. 18:45:06 Your fault for using emacs 18:45:18 When you try to open a pdf in vim, all you get is gibberish 18:45:20 FreeFull: It's so close to "evince". 18:45:35 FreeFull: I think ECMAScript 4 (which kind of retroactively never happened) required tail call optimization. 18:45:37 v isn't even that close to m 18:45:52 I don't know if they have any plans for it for Harmony. 18:46:45 http://wiki.ecmascript.org/doku.php?id=harmony:proper_tail_calls has at least some kind of a proposal. 18:48:44 hmmm 18:48:53 here's a thing that reverses stdin 18:48:53 http://bpaste.net/show/DHOattKOtoIOCHu8CWid/ 18:49:04 i think it looks pretty cool 18:50:35 I'm calling my language SaltScript 18:51:24 That doesn't tell you anything about the language itself 18:51:35 Why not bitswitch 18:52:09 Or maybe Nybswitch 18:52:21 nybswytch 18:52:22 Perfect 18:52:57 what should i write an interpreter in 18:52:57 https://github.com/dzamkov/SaltScript There is this saltscript already 18:53:08 nooodl_: itself 18:53:10 Then bootstrap 18:53:12 :( 18:53:13 nooodl_: haskell 18:53:36 Haskell is too easy 18:53:38 that could be interesting 18:53:56 i'm afraid it's going to look really bad 18:54:05 i've never done anything... state-y... in haskell 18:54:32 what is the language 18:54:45 ugh is it a brainfuck derivative 18:54:57 no... its a good brainfuck derivative 18:55:33 Can someone tell me what C++ templates are in language I understand? 18:55:46 SaltScript 18:55:51 http://bpaste.net/show/QvVFMDSNVcPbuBVUEOX3/ that's my conversion of ,[>,]<[.<] 18:56:06 (i hope) 18:56:33 Taneb: C++ templates are intentionally confusing 18:56:37 Minimal-2D is I think what I was thinking of when mentioning that "obvious" "2D-brainfuck". 18:57:07 Taneb: They're basically generic functions 18:57:24 anyway you can do bf nicely in haskell with a zipper for the tape 18:57:51 Taneb: they are a weird hybrid between a glorified macro system and a system of generic / polymorphic types 18:58:01 how do you handle loops 18:58:13 hmm. wait 18:58:14 elliott: So U [a] a [a] 18:58:17 For the tape 18:58:25 I need help in implementing f(four-bit a,boolean b,boolean c) 18:58:34 Taneb: you can think of it as polymorphism implemented by a glorified macro system, but many details of that "implementation" leak into the semantics 18:58:42 :( 18:58:43 FreeFull: or even data Tape a = Tape (Tape a) a (Tape a) 18:58:45 Basically, it's a logic table definer 18:58:49 that gives you a two-ways-infinite tape 18:59:26 Halite: return a & (1 << (b * 2 + c)) != 0; 18:59:36 and they're totally duck-typed. there's no in-language concept of "what sort of classes can i put in this template parameter and have it work" 18:59:38 Halite: It's basically (a >> ((b<<1)|c)) & 1 I think 18:59:45 you can't know until you've pasted that type into all the code and try to type check it 18:59:56 Or what nooodl_ said 18:59:59 FreeFull, I'll ask on ##javascript 19:00:21 Both should work I think 19:00:25 nooodl_'s might be faster 19:00:51 it's probably even faster if you combine them into 19:01:02 (a >> ((b<<1)|c)) & 1 19:01:03 a & (1 << ((b << 1) | c)) 19:01:45 meh, they're probably equally fast 19:02:40 what formats do a, b, and c have to be in the script 19:03:00 Halite: I'm assuming they're just numbers here 19:03:18 And that b and c are only 0 or 1 19:03:25 FreeFull, what about a 19:03:33 Also a number 19:03:35 FreeFull, is a something like 1000 or is it 8 19:03:36 from 0 to 15 19:03:45 8 19:03:51 it doesn't work 19:03:59 returns nothing 19:04:07 wait 19:04:12 problem with my code I think 19:04:17 f(8,1,1) should return 1 19:04:21 forgot to add ; 19:04:43 still does not work 19:04:48 You probably want to make more custom so that you can write 1000 instead of 8 19:04:50 what's your function like 19:04:59 (a >> ((b<<1)|c)) & 1 19:05:17 Halite: I just typed that from the brain, not guaranteed to work 19:05:20 http://sprunge.us/GEAi it seems fine for that single test case. 19:05:21 try "return"... 19:05:23 wait 19:05:29 nooodl_, I did put return 19:05:35 what fizzie did 19:05:39 the arguments aren't a, b and c in the code 19:05:47 oh 19:05:59 they're table,x,y 19:06:25 so (table >> ((x<<1)|y)) & 1 should work 19:06:42 yes! 19:06:54 Well, what did you think a, b and c were? 19:07:05 a = table, b = x, and c = y 19:07:08 Yeah 19:07:12 What did you have them as before? 19:07:18 before 19:07:29 it was always table,x,y for the args 19:07:42 wait 19:07:45 I do not understand 19:07:49 Ww 19:08:29 How rude, they've removed octal literals from ECMA-262. :/ 19:08:51 lolwhat 19:09:20 table is not 3 bits, it's 4 bits 19:09:22 It's just decimal and hex ever since version 3 of it. 19:09:31 oh 19:09:48 they should have a custom bits() function, so you can choose the number of bits 19:10:10 base* 19:10:13 wrong 19:10:16 wrong word 19:10:39 they should have a base() function, so you can choose the base, where decimal = 10, hex = 16, etc. 19:10:51 octal would be 8 19:10:55 binary 1 19:11:05 Not 2, then? 19:11:25 Halite: You could use strings and then convert to numbers 19:11:36 Then you could have binary in the string 19:11:56 Javascript's to number function does take a base parameter 19:12:03 Anyway, nobody but some Erlang hippies &c. seem to bother with arbitrary-base number literals. 19:12:54 FreeFull, I'm talking to someone else about their rant about octal's removal from ECMA-262 19:13:35 fizzie: I think they should add base 7 19:13:45 Hex should be good enough to replace octal, right? 19:13:46 loloctal 19:13:49 Welcome to the future. 19:14:03 FreeFull: And use a leading 0 to denote that. 19:15:26 wow everyone who's ever written a single line of haskell is going to hate me after i show them this 19:16:56 nooodl_: Show us, see it as an opportunity to improve 19:17:08 yeah, when it's finished 19:17:26 Write ugly code -> refactor isn't a bad approach when you don't know how to write pretty code on the first go 19:18:37 And sometimes you can't go the pretty code straight away path at all 19:19:57 you can make ugly code pretty by adding indentation and whitespace 19:19:59 nowadays, I never write pretty code first. my workflow looks like: write ugly stupid obvious code -> see what happens -> rinse off bad parts -> repeat. 19:21:01 my workflow looks like: write whitespaced pretty code -> see what happens -> repeat 19:21:21 one step less 19:21:33 no water needed 19:21:56 sometimes it's write ugly code -> see what happens -> repeat 19:22:03 but that's my early time 19:22:12 https://github.com/FMNSSun/Burlesque/blob/master/Burlesque/Eval.hs#L695 <- improve :) 19:23:00 SaltScript is getting on quite nicely 19:24:16 Halite: "you can make ugly code pretty by adding indentation and whitespace" You clearly haven't seen truly ugly code, or don't know what truly pretty code looks like 19:24:39 https://github.com/FMNSSun/Burlesque/blob/master/Burlesque/Eval.hs#L339 <- all that case stuff looks really chaotic. 19:24:46 but I don't know any other way to do it. 19:27:02 -!- sirdancealot has joined. 19:27:47 runState (DFState code tape@(Tape _ curr _) pos@(x,y) dir@(dx,dy) input) = ... 19:27:52 i already want to kill myself because of this line 19:32:42 -!- Halite has quit (Remote host closed the connection). 19:36:50 nooodl_: What language are you interpreting again? 19:37:05 the brainfuck interpreter i invented a while ago 19:37:18 uhh 19:37:20 brainfuck derivative 19:37:36 -!- mekeor has quit (Quit: novus ordo seclorum). 19:37:37 Briiiiick. 19:37:52 like http://esolangs.org/wiki/Minimal-2D but instead of /UDLR there's only conditional up/down and left/right commands 19:40:14 What sort of person goes around thumbing down a quite popular and well produced video on youtube. It is a well produced lets play, so there is not really that people could hate what the guy said. In fact I never seen a video on youtube with more than a few hundred views that didn't at least have a couple of thumbs down. 19:40:19 It boggles my mind. 19:41:05 i've wondered the same thing 19:41:46 maybe they: disliked the video 19:42:05 nooodl_: you do not need to be writing like that 19:42:20 uh oh 19:43:14 what's the alternative 19:44:00 Sooo, HackEgo can do sockets again, but the Google Translate API is now a paid service. 19:44:02 Suggestions? 19:44:19 Gregor: BABELFISH 19:44:24 Or just screen-scrape. 19:44:26 Can't be that hard. 19:44:33 ooh, i just remembered 19:44:47 elliott: Google Translate is crazy HTML5 stuff... 19:44:48 the update syntax thingy 19:44:59 Gregor: Sure, but under the hood it's going to do an HTTP request. 19:45:02 Unless it's websockets or something. 19:45:07 By "screenscrape" I just mean hack something up with curl. 19:45:09 Fair nuff. 19:45:10 And sed. 19:45:25 Or I guess Python and BeautifulSoup if you want to be FANCY 19:45:28 Sooo, HackEgo can do sockets again, but the Google Translate API is now a paid service. <-- how did you fix sockets on umlbox? 19:45:35 Vorpal: I gave it a handshake. 19:45:45 nooodl_: that syntax is awful too 19:45:49 Oh, the other issue was Python being stupid. 19:45:54 Gregor, and that fixed the kernel panic? 19:46:02 No, that was Python stupidity. 19:46:06 okay 19:46:09 wtf still 19:46:12 Vorpal: In some version of Python, they changed it so that pipes from child processes were cloexec by default. 19:46:21 That caused nonsense when I told the guest to use said pipes by fd. 19:46:47 ah 19:47:03 `wl es en Hola 19:47:05 Hola 19:47:08 Fail 19:47:13 well, "state { tape = succ <$> tape, pos = nextPos }" is probably better than "DFState code (succ <$> tape) nextPos dir input" 19:47:20 actually. now that i write it out 19:47:27 `wl en es narcissism 19:47:30 Narcisismo 19:47:33 Weeeh 19:47:34 - 2013-02-14 19:47:19 INFO Connecting to "127.0.0.1:6697"... 19:47:34 Cannot connect to 127.0.0.1:6697: Connection refused 19:47:34 ^C- 2013-02-14 19:47:22 ERROR Connection failed 19:47:37 Gregor, hm 19:47:42 it doesn't crash 19:47:47 but it does appear to be working either 19:47:49 I wonder why 19:47:59 Vorpal: What's your command line? 19:48:00 god how do i write haskell code 19:48:05 (I assume you upgraded and rebuilt) 19:48:28 Gregor, I did git pull -u && make nokernel && make install PREFIX=same-as-before 19:48:43 Gregor, also I used -R6697:irc.someserverIreplacedforthisline.net:6697 19:49:08 let me try it with netcat on the 6667 port instead of the ssl one 19:49:12 To test, running bash in the guest and then running the command you care about from that bash. 19:49:30 Gregor: `wl is purposely crap 19:49:34 if you are expecting useful results 19:49:58 $ $HOME/local/umlbox/bin/umlbox -B -R6667:irc.sporksmoo.net:6667 netcat 127.0.0.1 6667 19:49:58 sh: 1: /home/arvid/local/umlbox/bin/umlbox-mudem: not found 19:49:58 /bin/sh could not be executed 19:49:58 (UNKNOWN) [127.0.0.1] 6667 (?) : Connection refused 19:50:00 elliott: Yes, I know. 19:50:00 wait, what? 19:50:17 Vorpal: -B doesn't include $HOME/local/umlbox/bin ;) 19:50:17 Gregor, 19:50:18 $ ls /home/arvid/local/umlbox/bin/umlbox-mudem 19:50:19 /home/arvid/local/umlbox/bin/umlbox-mudem 19:50:21 hm 19:50:25 Gregor, oh, okay 19:50:32 `which umlbox-mudem 19:50:33 ​/usr/bin/umlbox-mudem 19:50:34 -!- ais523 has joined. 19:50:35 so mudem needs to run inside 19:50:44 `run cat `which umlbox-mudem` 19:50:45 @messages? 19:50:45 ​ELF............>.....@.....@........7..........@.8..@.........@.......@.@.....@.@........................................@......@............................................@.......@.....L/......L/........ .............0.......0`......0`................... ...........(0......(0`.....(0`............................ 19:50:45 Sorry, no messages today. 19:50:48 rigth 19:50:48 I maybe should add .../bin to the default -B path, but I don't like -B being dynamic... 19:50:50 right* 19:51:04 `run umlbox-mudem abc 19:51:06 Use: umlbox-mudem {0|1} [sockets...] 19:51:07 Gregor, eh, I'm not running it so that ../bin would help me anyway 19:51:07 nice blink btw 19:51:28 Vorpal: I mean the bin path in which umlbox-mudem resides. 19:51:39 Gregor, oh right, makes sense 19:51:52 Needs to run on bot host and guest. 19:51:59 elliott: umlbox-mudem is a socket multiplexer/demultiplexer. 19:52:18 elliott: It multiplexes a number of tcp or unix domain sockets over stdin/stdout. 19:52:32 there we go 19:53:11 Gregor, why is ctrl-c being broken? :/ 19:53:13 Gregor: yes I was just trying to mess it up 19:53:31 hm 19:53:39 elliott: You're not going to mess it up by manually running the mudem ^^ 19:53:58 Vorpal: The guest interprets ctrl+C, and doesn't really have job control support due to nonsense. 19:54:12 Gregor: I CAN TRY 20:00:40 The net for a dodecahedron looks like two flowers 20:05:12 Gregor, hm 20:05:35 Gregor, yeah I'm running that old irc bot I wrote in bash years ago inside. It might be that which is messing around with ctrl-c 20:05:38 I don't remember 20:06:03 -!- varnie has quit (Quit: Leaving). 20:06:09 what are you doing with it 20:08:18 By the way, umlbox is also a great fakeroot :) 20:08:21 elliott, laughing at it 20:08:30 Gregor, hah 20:08:30 Organising things is hard 20:08:41 and yeah it messes with trap 20:08:46 so yep, messing with ctrl-c 20:08:54 though it doesn't appear it should be ignoring it 20:09:00 I'm confused as to why it does 20:09:09 Gregor, it might be the lack of job control I guess 20:17:43 I... don't think I properly understood Makefiles back then 20:17:45 this is a mess XD 20:18:09 some targets lacked proper dependency info and were always built 20:26:42 i remember it being very enterprisey for a bash bot 20:27:11 how can a bot be enterprisey? 20:27:49 If you try to use !welcome, it offers a welcome for a one-time fee of $49.95, or discounted if you have a coupon code. 20:27:58 boily: you should have seen 20:30:19 * boily checks his wallet... 20:30:24 !welcome 20:42:17 yep. feels enterprisey enough. 20:49:46 if you try to use !welcome it sends 3 "sales engineers" to your company to figure out the maximum amount it could charge you 20:51:54 !please-dont-send-me-any-sales-engineers-here 21:01:36 ~metar CYUL 21:01:36 CYUL 142000Z 22009KT 15SM BKN050 01/M06 A2989 RMK SC7 SLP124 21:02:04 ~metar EGNT 21:02:05 EGNT 142050Z 26009KT 9999 FEW030 05/03 Q1009 21:02:10 What does that mean 21:02:17 I think it's the weather near here 21:02:21 But I don't know how 21:03:58 they have space people in satellites with binoculars watching the weather 21:05:11 Taneb: you report means it's kinda chilly, with a few clouds. otherwise, nothing particularly interesting or notable. 21:05:21 Sounds about right 21:10:46 It also means it was 20:50 (UTC) on the 14th day of the month. 21:11:58 -!- augur_ has quit (Remote host closed the connection). 21:12:50 09KT of wind I guess counts as some sort of a low-moderate breeze? 21:13:47 So, basically what you'd expect for the north of England on a February night 21:14:51 you're lucky to have sane units in your metars. I'm stuck with a weird mixture of just about everything, even inches of mercury. 21:15:05 ! 21:15:17 * Sgeo is back 21:15:19 -!- sivoais has quit (Ping timeout: 260 seconds). 21:15:37 boily: inches of mercury is a measure of pressure, right? 21:15:53 yes 21:16:02 29.97 inHg is 101.325 kPa. 21:16:03 millimeters of mercury is more conventional, I think 21:16:44 ugh numbers in haskell are weird 21:16:53 So, they haven't just got a ruler next to a thermometre 21:16:54 Int and Integer and Integral 21:16:57 nooodl_, how so? 21:17:40 i somewhat understand the differences, but i don't know which one to use where 21:17:47 Int is machine-word sized, Integer is unbounded, Integral isn't a type 21:17:58 It's a class that generalizes over integral types 21:18:03 Such as Int and Integer 21:18:28 ais523: but you have to be careful with canadian metars, A2989 is QFE (29.89 inHG with elevation calibrated at airfield level) and SLP124 is QNH (1012.4 hPa sea level pressure). 21:19:01 The Finnish Meteorological Institute's weather page uses units of hPa (aka mbar but they write hPa) for atmospheric pressure. 21:19:17 as any sane national weather office. 21:20:22 ~metar EFHK 21:20:23 EFHK 142050Z 11005KT 9999 -SG BKN009 BKN030 M02/M03 Q1030 TEMPO SCT008 BKN030 21:20:51 ~metar EGNC 21:20:52 EGNC 141750Z 23009KT 9999 FEW020 05/04 Q1009 21:22:22 ~metar EGED 21:22:22 --- Station not found! 21:22:29 I wonder if you can implement factorial more efficiently than product [1..n] 21:22:44 product [2..n] 21:22:50 hth 21:23:17 (doesn't work with n == 1) 21:23:22 (i think) 21:23:25 Taneb: It actually does work with n == 1 21:23:33 Oh, sweet! 21:23:33 > product [2..1] 21:23:35 1 21:23:46 ~eval [2..1] 21:23:47 [] 21:23:49 It's ever so slightly more efficient 21:23:54 Possibly 21:24:10 > product [2..0] 21:24:11 1 21:25:12 ~metar UOOO 21:25:12 UOOO 142100Z 04012MPS 0250 R01/0800U DRSN HZ NSC M38/M42 Q1013 NOSIG RMK QFE746 0139//41 21:25:19 Well, that's kind of on the cold side. 21:26:45 ~metar UESO 21:26:45 UESO 142100Z 21003MPS 2000 BR NSC M46/M49 Q1024 NOSIG RMK QFE766 21:26:48 As is that. 21:26:49 ~eval gamma 5 21:26:49 Error (1): No instance for (Math.Gamma.Gamma a0) arising from a use of `e_15' 21:26:50 The type variable `a0' is ambiguous 21:26:50 Possible fix: add a type signature that fixes these type variable(s) 21:26:50 Note: there are several potential instances: 21:26:50 instance Math.Gamma.Gamma (Data.Complex.Complex GHC.Types.Double) 21:26:50 -- Defined in `gamma-0.9.0.2:Math.Gamma' 21:26:50 instance Math.Gamma.Gamma (Data.Complex.Complex GHC.Types.Float) 21:26:51 -- Defined in `gamma-0.9.0.2:Math.Gamma' 21:26:51 instance Math.Gamma.Gamma GHC.Types.Double 21:26:52 -- Defined in `gamma-0.9.0.2:Math.Gamma' 21:26:52 ...plus one otherNo instance for (GHC.Show.Show a0) 21:26:53 arising from a use of `M6213143843420178839.show_M6213143843420178839' 21:26:53 The type variable `a0' is ambiguous 21:26:54 Possible fix: add a type signature that fixes these type variable(s) 21:26:56 Lol 21:27:03 woops ¬_¬'... 21:27:12 :t gamma 21:27:14 Not in scope: `gamma' 21:27:26 ~eval gamma 5 :: Double 21:27:27 24.0 21:27:51 cuttlefish's output should be restricted 21:28:28 the thing is, I can't recompile cuttlefish. the libs I use won't compile with GHC 7.6. 21:30:27 -!- ogrom has quit (Quit: Left). 21:36:57 boily: Fix the libs 21:37:09 Might be fixable with just some pragmas 21:41:53 -!- hagb4rd has quit (Ping timeout: 252 seconds). 21:42:22 -!- augur has joined. 21:44:35 ion: don't remind me of my lost $1,000,000,000,000. 21:45:08 elliott: How did you lose $1,000,000,000,000? 21:45:39 which nigerian prince owes you a cool amount of money? 21:45:51 kmc: I was JUST ABOUT to say that same joke. 21:45:52 ion: something about a certain cable offering me $1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 for my nick 21:45:53 You JOKE THIEF 21:46:24 elliott: Wow, that's like all the money in the world TIMES all the money in the world! 21:46:40 Dollars squared? 21:49:43 elliott: here's my code for the thing http://hpaste.org/82379 21:50:17 nooodl_: for a start, using Tape Word8 gets you overflow behaviour for free. no mods needed 21:50:34 apparently my tac implementation was broken... but the program in there seems to find the last byte in stdin so that's cool 21:50:49 oh. cool 21:51:04 oh god there's some stupid leftover debug things 21:51:21 import Debug.Trace (trace), and the Show instance for Tape/DFState 21:51:43 FreeFull: hm. looks like the exception model changed between 2011 and now. 21:52:39 boily: rather, the long-deprecated one finally got removed 21:52:57 That would be a bigger change then 21:53:21 man, the anything-but-haskell programmer in me really feels like adding some spaces to ((0,0),(torusWidth-1,torusHeight-1)) 21:53:35 you can add spaces. 21:53:40 nooodl_: I would recommend not storing the input in the state like that 21:53:56 multi-letter variable names?!?!?!?! go back to the java mines you corporate drone slave 21:54:01 instead you can make run :: DFState -> String -> String 21:54:13 and then you can also write runIO :: DFState -> IO (), which can do interactive IO 21:54:25 i see 21:54:45 kmc: Ideal haskell has no variables at all, right? 21:54:48 Everything is pointless! 21:54:55 riiiight 21:55:35 FreeFull: so, yeah. I fear the complete rewrite. besides, simpleirc can't do SSL, which our company's server uses. 21:55:47 :t (,) ((,) 0 0) ((,)) 21:55:49 (Num b, Num a) => ((a, b), a1 -> b1 -> (a1, b1)) 21:55:59 also interesting: i tried to run it on codepad.org but this happened http://codepad.org/748jN02r 21:56:06 -!- Phantom_Hoover has joined. 21:56:09 nooodl_: if I wrote that I would probably then iterate it to a free monad based version. 21:56:30 I never get how to extract the internal function outside to make application easy 21:56:51 While staying pointfree 21:58:02 what was (,) ((,) 0 0) ((,)) supposed to be? 22:00:30 A way to make a tuple of tuples 22:00:51 I guess I didn't have to write (0,0) as ((,) 0 0) 22:01:18 @pl \x y -> ((0,0),(x,y)) 22:01:18 ((,) (0, 0) .) . (,) 22:01:24 I guess that's what I wanted 22:01:29 nooodl_: I would probably also not use Array but that's just me 22:01:51 elliott: i'd considered Tape (Tape Char) for the code... 22:01:59 I still don't get the way . works when partially applied like that 22:02:14 :t ((,) (0,0) .) 22:02:16 (Functor f, Num t1, Num t) => f a -> f ((t, t1), a) 22:02:17 nooodl_: that would be a bad idea 22:02:20 FreeFull: ignore that :t 22:02:22 stupid Caleskell 22:02:35 -!- boily has quit (Quit: Poulet!). 22:02:39 -!- cuttlefish has quit (Remote host closed the connection). 22:02:41 ((,) (0,0) .) :: (Num t, Num t1) => (a -> b) -> a -> ((t, t1), b) 22:04:05 elliott: what would you have used instead? [[Char]]? 22:04:47 nooodl_: possibly (Int,Int) -> Char. since you never modify the playfield, and you can construct (Int,Int) -> Char from Array (Int,Int) Char which, if inlined, should be just as performant 22:07:01 So value :: (Int,Int) -> Char; value = (playfield !) 22:07:41 well then you're still using Array 22:08:04 I like this book, although so far it seems to still be world building 22:08:12 Does The Clockwork Rocket have an actual plot? 22:09:13 oh, is it good practice to *always* write explicit type signatures for functions 22:10:29 I think in vanilla Haskell there are some cases where you can't 22:10:45 (for functions in where and let, I think?) 22:11:12 oh, yeah, i've never done that 22:11:38 I mean, there is syntax for it, but some circumstances where it's inadequate, iirc 22:11:45 nooodl_: s/functions/top-level definitions/ 22:11:53 not the same thing 22:12:01 (there are non-function top-level definitions, and non-top-level definition functions) 22:12:13 in my example lines 13-26 seem really ugly and verbose 22:12:24 all of the lines are ugly and verbose 22:12:42 elliott: so, i should've also written "torusWidth :: Int", for example? 22:13:17 generally, yes, though it doesn't really matter for a small program :P 22:13:37 note that in the absence of you using them as Int they would be defaulted to Integer 22:13:53 also, nah, some of them are ugly and terse. also some of them are blank!! 22:14:05 nooodl_: really I would just use Word32 or something for the Array 22:14:08 and not have any explicit mods 22:14:16 or what I'd have actually done is write Integer and have no wrapping 22:14:17 elliott, have you seen my code? 22:14:20 :/ 22:14:21 right now this implementation is sub-TC! 22:14:29 is of a sub-TC language, rather 22:14:31 Sgeo: no 22:14:51 https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc 22:15:20 wouldn't Word32 mean a 2^32 by 2^32 array 22:15:43 oh, I guess. you can use Map or HashMap for sparse storage 22:16:09 this is what I did in my Befunge-98 implementation and it worked well enough, though I planned to switch to something much more complex for optimisation purposes 22:16:45 Sgeo: not the nicest code ever yes 22:17:29 Not the worst I hope? 22:18:56 that would be esme 22:19:49 So, I'm somewhere between perfection and actual blithering lack of meaning 22:19:57 hmm how horrible is my code 22:37:23 -!- hagb4rd has joined. 22:37:40 -!- nooga has quit (Ping timeout: 256 seconds). 22:42:51 -!- Waffa has joined. 22:44:06 -!- Waffa has quit (Quit: Waffa). 22:46:52 -!- epicmonkey has quit (Ping timeout: 252 seconds). 22:47:01 -!- Taneb has quit (Quit: Leaving). 22:48:26 -!- carado has quit (Ping timeout: 256 seconds). 22:49:22 -!- sirdancealot has quit (Remote host closed the connection). 22:52:55 -!- sirdancealot7 has joined. 23:03:48 -!- fungot has quit (Ping timeout: 248 seconds). 23:03:50 -!- augur has quit (Remote host closed the connection). 23:05:02 -!- myndzi has quit (Ping timeout: 245 seconds). 23:08:18 -!- myndzi has joined. 23:12:07 -!- fizzie has quit (Ping timeout: 245 seconds). 23:18:46 http://i.imgur.com/r396dsr.jpg 23:22:18 reposting from the front page of /r/math? 23:23:56 -!- fizzie has joined. 23:24:16 Phantom_Hoover: how dare he 23:24:35 he's turning into ion! 23:24:45 turnion 23:40:38 oh noes 23:40:55 onion / scallion 23:41:03 onion / scallion union 23:41:05 @arrrr /math 23:41:06 Drink up, me 'earties 23:41:31 ℝ math 23:43:27 kmc doesn't appreciate the comonad hiding in every monad. 23:44:11 where does it hide 23:44:35 -!- sivoais has joined. 23:45:36 in the other category 23:47:10 shachaf: extract :: Monad m => Kleisli m (m a) a; duplicate :: Monad m => Kleisli m (m a) (m (m a)) 23:47:50 elliott: Right. 23:48:17 I like how extract is id. 23:48:33 return :: Comonad w => Cokleisli w a (w a); join :: Comonad w => Cokleisli w (w (w a)) (w a) -- whoa, man 23:48:46 I like how duplicate = return, join = extract 23:48:57 duplicate = return? 23:49:04 But duplicate :: m a -> m (m (m a)) 23:49:05 Well, return . return and extract . extract 23:49:10 For Kleisli/Cokleisli respectively. 23:49:13 Are those the correct implementations? 23:49:22 I mean, are you sure how of those returns isn't fmapped or something? 23:49:29 Dunno. Ask adj.hs 23:49:31 s/how // 23:49:37 Are you sure of those returns? 23:50:00 s#.$#one /# 23:51:53 elliott: Anyway Kleisli comonads are boring. 23:52:10 The Haskop comonad is kind of silly. 23:52:27 Because extract literally = return 23:53:57 contReturn x f = f x 23:54:05 contJoin = (. contReturn) 23:54:11 contFmap f = (. (. f)) 23:58:45 @pl \f -> (. (. f)) 23:58:45 flip (.) . flip (.) 23:59:06 :t (flip (.) . flip (.)) 23:59:08 Functor f => f a -> (f b1 -> b) -> (a -> b1) -> b