00:01:04 -!- CADD has joined. 00:01:06 -!- CADD has quit (Client Quit). 00:03:56 Even if I can represent most interesing things with getter+modifier, it may actually be _easier_ for end-users to define a van Laarhoven style lens 00:03:58 :/ 00:05:53 oerjan: elliott: i brute-force checked all brainfuck programs of length <= 10, and only two of them reverse input: ,[<,]>[.>] and ,[>,]<[.<] 00:06:06 what a sensible thing to do 00:06:21 nooodl: wait, really? 00:06:26 did you actually do that 00:06:39 that first one is invalid if you disallow left tape underflow 00:06:41 which is fairly standard 00:06:50 oh, both of them are wrong in that case 00:08:28 ignoring + and - you get only about 73 million programs, which isn't really a lot! and many of those are invalid (i.e. mismatched []) 00:09:35 here's my completely awful thing http://sprunge.us/jSJA 00:11:21 nooodl: + and - could be used 00:11:25 for loop conditiony stuff 00:11:36 this is kinda fun. here's a bunch of echo programs http://sprunge.us/bjVe 00:12:18 does it check things in parallel? 00:12:39 nope it's really inefficient 00:13:00 I guess + and - would blow it up too much 00:14:57 nooodl: you could also filter out programs containing NOPs (><, <>, -+, +-) 00:15:10 since an equivalent shorter program would already have been tried 00:15:32 the solution is obvious, just run esotope on every input program to remove duplicates 00:16:19 :D 00:16:41 actually that could even be viable 00:16:42 if you reuse the IR 00:23:01 -!- nooga_ has quit (Ping timeout: 248 seconds). 00:27:25 here's all possible outputs for 5-character brainfuck programs http://sprunge.us/eXIL 00:28:20 wait this can't possibly handle things like ,[.,] or ,[.-] 00:34:18 nooodl: Maybe that's all the possible finite outputs 00:34:47 Although ,[.-] would be finite 00:34:49 ,[.-] is finite 00:34:49 yeah 00:39:42 Except on EOF = -1 bignum implementations. :D 00:42:02 -!- augur has quit (Remote host closed the connection). 00:44:51 -!- blotter has quit (Ping timeout: 265 seconds). 00:48:40 nooodello 00:53:56 bellotter 00:54:56 * oerjan might point out that mangling people's nicks probably doesn't nickping them, hth hth 00:55:10 ...what just happened 00:55:24 test 00:55:31 * oerjan tests hth 00:55:32 `coins 00:55:33 flabillcoin sbtealpediumcoin andcoin cumcoin benerancecoin irculuscoin easedcoin xbtizedcoin skacoin alcacoin migolcoin unfustiglcoin zwissercoin rumcoin noobcoin philosoecoin thorecoin btfcoin inverundcoin 92.12coin 00:55:41 elliott: i sense a bug hth 00:55:58 cumcoin 00:56:00 skacoin 00:56:13 There are unsafeCoerces in lens apparently :/ 00:56:29 i think shachaf knows all about that 00:56:57 Sgeo: there are plans to change those to the new (safe) coerce eventually 00:57:02 there is so much unsafe coercing in Servo :/ 00:57:08 oerjan: what's the safe coerce 00:57:29 kmc: the one that has typeclass restriction to check that the types actually can be coerced 00:57:36 ok 00:57:49 what are examples of pairs of types that "actually can be coerced" 00:58:23 I want to quote what someone said to me in #haskell-lens, but it's not publically logged as far as I can tell 00:58:24 any newtype wrapping (with constructor visible), things that only differ in phantom types 00:58:45 helloerjan. i don't want to ping people. i want to test if they are paying attention. 00:58:55 and "parametric" type constructors applied to those 00:59:00 pinging people who are busy would be bothersome 00:59:19 (using the new role system) 00:59:37 -!- Sprocklem has quit (Ping timeout: 272 seconds). 01:00:50 oerjan: any progress on TCness of RePairate-2? you know you want to know for sure. 01:01:25 -!- blotter has joined. 01:02:16 quintopia: oh, i sort of put that away after you started mumbling about _exactly_ 2 01:02:27 because i have no idea how to do _that_ 01:03:09 but yes, i have a design sketch that i think should work for <= 2 01:03:41 (in my head, mostly) 01:04:32 oerjan: well i want to see that. obviously, the exactly 2 thing would be super-cool, but I recognize it is a very difficult problem. m in {0,2} would be good enough for now. 01:04:58 -!- nooodl has quit (Quit: Ik ga weg). 01:08:00 oerjan: i don't think that's necessary 01:08:07 in fact i've been 01:08:13 mostly arguing against the new coerce 01:08:18 shachaf: oh? 01:08:27 but only in places like irc that spj doesn't see, so it's not relevant one way or the other 01:08:40 well, ok, i have nothing against this safe coerce thing, it just isn't really relevant to lens 01:08:54 what is relevant to lens is a 5-line patch spj implemented over a year ago 01:09:02 oh? 01:09:13 https://ghc.haskell.org/trac/ghc/ticket/7542 01:09:27 ok, 10 line patch 01:10:15 The issue is that (foo . NewtypeConstructor) turns into (foo . id) post-denewtypification, and (foo . id) is (\x -> foo x), which isn't the same as foo 01:10:44 why isn't it again 01:10:53 But that patch makes it so that strict composition is enough, because foo `seq` (\x -> foo x) should be equal to foo. 01:10:59 Bike: seq can distinguish them. 01:11:07 > (undefined :: Int -> Int) `seq` () 01:11:10 *Exception: Prelude.undefined 01:11:11 oh foo can be bottom you mean 01:11:12 > ((\x -> undefined x) :: Int -> Int) `seq` () 01:11:13 () 01:11:14 Yes. 01:11:17 yeah makes sense 01:12:07 So to show what the Core would look like if GHC did it correctly, I introduced composition operators that aren't composition at all but are actually unsafeCoerce. 01:12:20 And edwardk said "that's a good idea, let's put it in". 01:12:53 But anyway the point is that the whole thing can be fixed with the strict composition thing in GHC HEAD. 01:13:35 However, partly as a result of this bug I filed, SPJ wrote https://ghc.haskell.org/trac/ghc/wiki/NewtypeWrappers 01:13:41 "See #7542 for a real life example." 01:14:12 This newtype wrappers mechanism, and the various other things proposed to solve this issue, are far more complicated than the thing that actually fixes it. 01:14:50 whoa, there was discussion on that ticket 6 days ago 01:15:47 Maybe it's not quite that simple. 01:16:49 But I'm still wholeheartedly on the side of fixing this via a compiler optimization of strict composition rather than all this complicated coercion business. 01:18:21 -!- Sprocklem has joined. 01:45:50 -!- Sprocklem has quit (Ping timeout: 264 seconds). 01:46:35 -!- blotter has quit (Ping timeout: 260 seconds). 01:49:03 -!- prooftechnique has quit (Quit: Lost terminal). 01:54:05 -!- blotter has joined. 01:54:57 -!- Phantom__Hoover has quit (Quit: Leaving). 02:00:15 -!- augur has joined. 02:06:38 -!- yorick has quit (Read error: Connection reset by peer). 02:07:38 `unidecode .. 02:07:38 ​[U+002E FULL STOP] [U+002E FULL STOP] 02:08:43 weird why does the wiki mark it as changed. 02:50:17 oerjan, is HackEgo yours? 02:50:34 `author 02:50:35 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: author: not found 02:50:40 lol 02:50:55 no it's Gregor's 02:55:41 Does the name cartesian-compose make sense for a function that composes functions, but, when one function in the chain returns multiple values, it maps the rest of the composition onto it, rather, than, say, providing the results as multiple arguments? 02:56:02 Still not sure if I can just use this cartesian-compose, or if I need to change what a getter can do 02:56:06 `test 02:56:07 No output. 02:57:01 `test xa 02:57:01 No output. 02:57:28 `say xa 02:57:28 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: say: not found 02:59:44 `dmesg 02:59:44 Initializing cgroup subsys cpuset \ Initializing cgroup subsys cpu \ Initializing cgroup subsys cpuacct \ Linux version 3.13.0-umlbox (hackbot@codu) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 Wed Jan 29 12:56:45 UTC 2014 \ On node 0 totalpages: 73344 \ free_area_init_node: node 0, pgdat 60318390, node_mem_map 62c3a000 \ Normal zone: 1003 pages used 02:59:47 aha 02:59:53 `echo hi 02:59:54 hi 03:00:02 `halt -p 03:00:02 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: halt: not found 03:00:04 lol 03:00:27 `wget 03:00:28 wget: missing URL \ Usage: wget [OPTION]... [URL]... \ Try `wget --help' for more options. 03:01:07 `whoami 03:01:08 whoami: cannot find name for user ID 5000 03:01:21 `cat /etc/passwd 03:01:21 cat: /etc/passwd: No such file or directory 03:01:32 `pwd 03:01:33 ​/hackenv 03:01:36 `help 03:01:36 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 03:01:45 `? help 03:01:46 help? ¯\(°​_o)/¯ 03:01:48 oh well. 03:01:53 lol 03:01:58 `ls . 03:01:58 98076 \ bdsmreclist \ bin \ canary \ cat \ complaints \ :-D \ dog \ etc \ factor \ fb \ fb.c \ head \ hello \ hello.c \ ibin \ index.html \ interps \ lib \ paste \ pref \ prefs \ quines \ quotes \ share \ src \ test \ Test \ Test.hi \ Test.hs \ Test.o \ tmp \ UNPA \ wisdom \ wisdom.pdf 03:02:06 `ls / 03:02:06 bin \ dev \ etc \ hackenv \ home \ lib \ lib64 \ opt \ proc \ sbin \ sys \ tmp \ usr 03:02:15 `ls /etc 03:02:16 alternatives \ java-6-openjdk 03:02:40 `rm 03:02:41 rm: missing operand \ Try `rm --help' for more information. 03:02:47 oh well, when all else fails... 03:02:47 `du -sm ./:-D 03:02:48 du: invalid option -- ' ' \ du: invalid option -- '.' \ du: invalid option -- '/' \ du: invalid option -- ':' \ du: invalid option -- '-' \ Try `du --help' for more information. 03:02:53 `rm -rf / 03:02:53 rm: invalid option -- ' ' \ Try `rm --help' for more information. 03:03:04 `rm --help 03:03:04 Usage: rm [OPTION]... FILE... \ Remove (unlink) the FILE(s). \ \ -f, --force ignore nonexistent files, never prompt \ -i prompt before every removal \ -I prompt once before removing more than three files, or \ when removing recursively. Less intrusive than -i, \ 03:03:20 `env 03:03:20 TERM=linux \ http_proxy=http://127.0.0.1:3128 \ HACKENV=/hackenv \ PATH=/hackenv/bin:/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin \ PWD=/hackenv \ LANG=en_NZ.UTF-8 \ SHLVL=0 \ HOME=/tmp 03:03:34 `ps -aux 03:03:35 warning: bad ps syntax, perhaps a bogus '-'? \ See http://gitorious.org/procps/procps/blobs/master/Documentation/FAQ \ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND \ 0 1 0.0 0.1 1012 272 ? S 03:03 0:00 /init \ 0 2 0.0 0.0 0 0 ? S 03:03 0:00 [kthreadd] \ 0 03:03:52 did you expect a sensible display 03:04:08 say what? 03:04:17 `python -c "print 1" 03:04:17 ​ File "", line 1 \ "print 1" \ ^ \ IndentationError: unexpected indent 03:04:52 `find . -type f 03:04:53 find: `. -type f': No such file or directory 03:05:01 `tee ./a 03:05:07 `ps 03:05:14 `echo hi 03:05:19 lol, i think it worked 03:06:02 No output. 03:06:03 ​ PID TTY TIME CMD \ 286 ? 00:00:00 init \ 288 ? 00:00:00 sh \ 290 ? 00:00:00 ps \ 291 ? 00:00:00 cat 03:06:04 hi 03:06:10 ah, time out 03:06:31 Gregor, you should add blotter: what 03:07:05 the reason HackEgo wasnt responding for a while is b/c tee was blocking on stdin 03:07:17 if the exec cmd is followed by it'll nullify the stdin, preventing anything from blocking on it 03:07:43 hm 03:07:46 -!- Frooxius has quit (Ping timeout: 245 seconds). 03:08:45 `ls /sbin 03:08:46 agetty \ badblocks \ blkid \ blockdev \ cfdisk \ ctrlaltdel \ debugfs \ depmod \ dhclient \ dhclient-script \ dmsetup \ dumpe2fs \ e2fsck \ e2image \ e2label \ e2undo \ fdisk \ findfs \ fsck \ fsck.cramfs \ fsck.ext2 \ fsck.ext3 \ fsck.ext4 \ fsck.ext4dev \ fsck.minix \ fsck.nfs \ fsfreeze \ fstab-decode \ fstrim \ getty \ halt \ hwclock \ ifconfig 03:09:04 `ls /dev 03:09:05 agpgart \ audio \ audio1 \ audio2 \ audio3 \ audioctl \ console \ core \ dsp \ dsp1 \ dsp2 \ dsp3 \ fd \ full \ kmem \ loop0 \ loop1 \ loop2 \ loop3 \ loop4 \ loop5 \ loop6 \ loop7 \ mem \ midi0 \ midi00 \ midi01 \ midi02 \ midi03 \ midi1 \ midi2 \ midi3 \ mixer \ mixer1 \ mixer2 \ mixer3 \ mpu401data \ mpu401stat \ null \ port \ ptmx \ pts \ ram \ 03:09:18 `cat /dev/dsp 03:09:19 cat: /dev/dsp: Permission denied 03:09:24 oh shit were being hackd 03:09:30 lol, no 03:09:49 wait, why the hell does it have midi and dsp out 03:10:04 Gregor have you been djing behind our backs 03:10:34 `cat - 03:10:58 `sh -e "echo hi" 03:10:59 sh: 0: Illegal option - 03:11:04 hm that does seem to block stuff 03:11:05 No output. 03:11:17 an ejoyable dos 03:11:19 `run echo hi 03:11:19 `sh -c "echo hi" 03:11:19 hi 03:11:20 sh: 0: Illegal option - 03:11:52 ` doesn't actually run the command with shell expansion and stuff, you need to use `run 03:12:18 also someone defined `` as an abbreviation of that 03:12:42 oh ok 03:13:21 `run echo hi | tr h H 03:13:22 Hi 03:13:36 Bike: Gregor sometimes composes music 03:13:44 `run cat /dev/null | tr '\0' '#' 03:13:45 No output. 03:14:07 damn, no /dev/zero 03:14:10 `ls /dev/zero 03:14:11 ​/dev/zero 03:14:13 oh 03:14:18 `run cat /dev/zero | tr '\0' '#' 03:14:19 ​########################################################################################################################################################################################################################################################################################################################################################### 03:15:27 `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/' | tr b '\n' 03:15:30 No output. 03:15:40 `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/g' | tr b '\n' 03:15:43 No output. 03:16:00 `run cat /dev/zero | tr '\0' a | sed 's/aa/ab/g' | tr b 'c' 03:16:03 No output. 03:16:17 stop misbehaving HackEgo :-( 03:16:38 `run cat /dev/zero | tr '\0' '\n' 03:16:38 No output. 03:16:54 blotter: HackEgo strips trailing newlines 03:17:08 yeah i see :-( 03:18:25 and also has some buffering problems with long lines 03:18:47 or hm 03:19:48 i'm not entirely sure why you're getting no input on all of those 03:20:17 oh maybe it's sed which cannot handle it 03:20:34 it never gets to the end of the line to print out the result 03:20:42 ``cat /dev/zero | tr '\0' a | sed 's/aa/ab/' 03:20:43 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: `cat: not found 03:20:48 `` cat /dev/zero | tr '\0' a | sed 's/aa/ab/' 03:20:52 No output. 03:21:05 `run cat bin/\` 03:21:06 exec bash -c "$1" 03:25:15 `ls /hackenv/src/buttsnack 03:25:16 ls: cannot access /hackenv/src/buttsnack: No such file or directory 03:25:26 `ls /hackenv/bin/buttsnack 03:25:26 ​/hackenv/bin/buttsnack 03:25:28 lol 03:30:20 -!- Taneb has changed nick to Tasnout. 03:30:53 -!- ter2 has quit (Read error: Connection reset by peer). 03:35:19 * oerjan is guessing Tasnout met a dane 03:36:19 kmc: your safe-globals package seems a bit dead on a modern GHC 03:36:59 hm wait that's wrong, it's spelled næb 03:37:22 `coins 03:37:24 repocoin oxycoin .yachcoin sartcoin pooncoin sciacoin shooncoin tre-calcoin palcoin strecoin halietzellcoin hydrainecoin trideadfteloppensigcoin kimlcoin counterncoin strelcoin bolitershacoin procoin niggerecoin lnussintecoin 03:37:45 Can C/shellscripts polyglot be made? 03:38:27 Perhaps you can if the first line is #define 03:41:06 -!- Sorella has quit (Quit: It is tiem!). 03:41:42 haskell-lens isn't answering my lens question :( 03:51:23 -!- ter2 has joined. 03:52:08 Sgeo: have you managed to confuse them or is there nobody awake 03:52:27 I'm hoping it's just that no-one's awake 03:52:44 Either that or I didn't explain my question well, I don't think it's an inherently confusing question 03:52:55 Suppose I have a.both.b 03:52:55 Will either a or b have the ability to look at or manipulate both values, or only each value one at a time? 03:53:31 :t both 03:53:32 Applicative f => (a -> f b) -> (a, a) -> f (b, b) 03:53:54 hm 03:54:32 -!- Tasnout has changed nick to Taneb. 03:54:46 OK, I managed to write a C/shellscripts polyglot. 03:55:48 :t (a :: Lens' Int (Bool, Bool) . both . (b :: Lens' Bool Char) 03:55:49 Illegal symbol '.' in type 03:55:50 Perhaps you intended -XRankNTypes or similar flag 03:55:50 to enable explicit-forall syntax: forall . 03:56:04 :( 03:56:14 :t (a :: ALens' Int (Bool, Bool) . both . (b :: ALens' Bool Char) 03:56:14 Illegal symbol '.' in type 03:56:15 Perhaps you intended -XRankNTypes or similar flag 03:56:15 to enable explicit-forall syntax: forall . 03:56:20 :( :( 03:56:24 Missing parens 03:56:31 :t (a :: Lens' Int (Bool, Bool)) . both . (b :: Lens' Bool Char) 03:56:33 Couldn't match expected type `((Bool, Bool) -> f (Bool, Bool)) 03:56:33 :t (a :: ALens' Int (Bool, Bool)) . both . (b :: ALens' Bool Char) 03:56:33 -> Int -> f Int' 03:56:33 with actual type `Expr' 03:56:34 Couldn't match type `Expr' 03:56:34 with `((Bool, Bool) 03:56:35 -> Control.Lens.Internal.Context.Pretext 03:56:39 fuck ur type 03:56:57 I blame lambdabot 03:57:10 :t (afucklambdabot :: Lens' Int (Bool, Bool)) . both . (bfucklambdabot :: Lens' Bool Char) 03:57:11 Not in scope: `afucklambdabot' 03:57:11 Not in scope: `bfucklambdabot' 03:57:30 :t (undefined :: Lens' Int (Bool, Bool)) . both . (undefined :: Lens' Bool Char) 03:57:31 Applicative f => (Char -> f Char) -> Int -> f Int 03:57:34 zzo38: is it a QUINE 03:57:38 :( 03:57:42 :) 03:57:52 quintopia: No, it isn't. It doesn't even do the same thing in C as shellscripts. 03:57:57 I have no idea how to translate that into a lambda 03:58:15 and by "lambda", I mean "answer to my question" 03:58:28 Concepts right next to each other, or something 03:58:36 b can only look at one value at a time 03:58:41 As far as b knows, there is only one value 03:58:43 zzo38: make one that's a QUINE IN BOTH 03:58:50 a deals with two values. 03:59:02 quintopia: Maybe another time; this time I don't have such an intention. 03:59:03 Taneb: but not because of both, I'm guessing, but because it actually sees the pair? 03:59:11 i bet if it's possible to make a quine in both, then someone already has. 03:59:21 oerjan: Yes, probably. 03:59:28 Sgeo, yes 03:59:43 The first line is #define echo echo1( and then #define echo1(x) 04:00:13 Taneb: btw the trick to get types that way is to use implicit variables 04:00:19 And then the actual shell scripts (terminated by exit), and thenn it undefines those two macros. 04:00:52 :t (?a :: Lens' Int (Bool, Bool)) . both . (?b :: Lens' Bool Char) 04:00:53 Could not deduce (?a::((Bool, Bool) -> f1 (Bool, Bool)) 04:00:53 -> Int -> f1 Int) 04:00:53 arising from a use of implicit parameter `?a' 04:01:01 What it does is echo >/dev/null and then runs gcc. 04:01:07 well, it should have been. 04:01:21 zzo38: does it compile itself? 04:01:25 quintopia: Yes. 04:01:31 Great, so... all I need to do to be confident in my representation being satisfactory (once I start using cartesian-compose) is ... understand prisms 04:01:43 hm maybe those have trouble with rank-N 04:01:45 oerjan, I thought I used ImplicitParams. I blame the fact that it's 4 am 04:01:59 Hmm, worse comes to worst, I could have prism be a subtype of lens, I think 04:02:42 Since my representation will support traversals just fine, it's just prisms may (or may not) be more than a traversal... just a traversal reversible into a getter... somehiw 04:03:07 Also need to understand folds, but I think those are just getters? 04:04:16 Sgeo: prisms and lenses are not contained in each other either way 04:04:36 What I'm calling a 'lens' is more fiexible than a lens 04:04:43 I don't know if anyone else has written C/shellscripts polyglots at all; do you know of any such things? 04:04:43 flexible 04:05:42 please don't call it a lens thne 04:05:43 *then 04:06:25 :/ what should I call it 04:06:45 a generalized lens 04:06:51 i love general 04:07:01 zzo38: I wrote a C / shell / python / haskell / brainfuck / DOS .COM file polyglot 04:07:28 zzo38: such a program won the 1986 IOCCC 04:07:30 http://www.spinellis.gr/blog/20100112/ 04:07:39 C/shell is pretty easy because of #if 0 and because shell doesn't do static syntax checking 04:07:56 kmc: Yes, #if 0 or whatever 04:07:57 kmc: what did it do 04:08:09 quintopia: prints "Hello, $lang!" for each lang 04:08:32 kmc: needs more brainfuck 04:09:03 kmc: make the brainfuck part a quine 04:09:05 :P 04:09:07 it starts with a blank line 04:09:09 that's kind of annoying 04:09:12 it seems the polymath project to reduce the size of the known minimal gap between primes has got down to 270 04:09:37 oerjan: maximal gap? 04:10:32 well it's a little confusing 04:10:55 it's "for all N there exist primes >= N closer than this gap" 04:11:06 *+ distinct 04:12:01 closer or equally close 04:12:51 I have seen another one to check what programming language it is; but it was different, and also included both Plain TeX and LaTeX. 04:13:18 http://michaelnielsen.org/polymath1/index.php?title=Bounded_gaps_between_primes 04:24:22 -!- prooftechnique has joined. 04:26:46 My "lenses" might not match up with Haskell lenses, but they're still a pair of getter+modifier 04:29:18 -!- password2 has joined. 04:33:25 -!- prooftechnique has quit (Quit: leaving). 04:41:24 Am I a bad person for using λ in my source files? 04:43:44 -!- prooftechnique has joined. 04:45:23 Doesn't seem like sleep is happening 04:48:17 I strongly recommend ensuring that it happens at some point, otherwise it could happen forever 04:48:36 hmm, that doesn't... quite mean what I intended it to 04:52:32 -!- CADD has joined. 04:52:32 -!- CADD has quit (Client Quit). 05:07:53 -!- Sprocklem has joined. 05:09:25 :t both 05:09:26 Applicative f => (a -> f b) -> (a, a) -> f (b, b) 05:09:29 :t neither 05:09:30 Not in scope: `neither' 05:09:30 Perhaps you meant `either' (imported from Data.Either) 05:09:43 :t either 05:09:44 (a -> c) -> (b -> c) -> Either a b -> c 05:09:58 not very related 05:10:29 yeah i see 05:10:50 this channel is a botfest ^_^ 05:11:20 `coins 05:11:21 smuragrapcoin qualcoin optincoin chintcoin pointcoin gregxcoin cvocoin immicoin bluelcoin redcoin minisetercoin padabccoin alnecoin hq9+coin boationcoin preputecoin cobcoin zeicoin miindeltorcoin stucoin 05:11:42 hq9+coin 05:11:56 imo cocoin 05:12:36 Qualcoin, mined by chinese factory workers 05:12:45 :t ignored 05:12:46 Applicative f => pafb -> s -> f s 05:13:21 i think that may be the thing that corresponds most to "neither" in the sense that matches with "both" 05:13:56 Sure. Or "none" in the sense that matches with "each". 05:14:46 ^celebrate 05:14:47 \o| c.c \o/ ಠ_ಠ \m/ \m/ \o_ c.c _o/ \m/ \m/ ಠ_ಠ \o/ c.c |o/ 05:14:47 | c.c.c | ¯|¯⌠ `\o/´ | c.c.c | `\o/´ ¯|¯⌠ | c.c.c | 05:14:47 >\ c.c |\ >\| | |\ c.c /'\ | >\| |\ c.c /| 05:14:48 (_|¯`\ /´\ 05:14:48 |_) (_| |_) 05:14:57 -!- jix_ has quit (Ping timeout: 252 seconds). 05:15:02 blotter: botfest you said? 05:15:08 `coins 05:15:09 unbaccoin cogscoin yeartraccoin xnigmentacoin turdocicoin uustencoin hungcoin cronkeymacoin iluriencoin alcodaycoin zombcoin fulcoin noilogcoin theolanguinncoin opmecoin rydcoin vingintercoin matcoin ruberiggcoin cancoin 05:15:34 -!- jix has joined. 05:15:50 -!- blotter has quit (Ping timeout: 264 seconds). 05:17:36 World of Padman seems to have generally 0 players online 05:17:37 :( 05:20:34 :t united -- here's the other one i was trying to find 05:20:36 Functor f => (() -> f ()) -> a -> f a 05:20:52 united :: Lens' a () 05:22:33 the following three exist: Lens' s (); Lens' Void a; Prism' s Void 05:22:43 but Prism' () a doesn't 05:23:10 shocking 05:24:07 How important are the prism-specific features of prisms? 05:24:31 how important are the ocean-specific features of oceans? 05:25:36 oerjan: hm, that seems more reasonable to me now than it did back then 05:32:54 -!- itsy has quit (Ping timeout: 265 seconds). 05:37:05 -!- blotter has joined. 05:47:34 -!- prooftechnique has quit (Quit: leaving). 05:51:11 -!- luserdroog has joined. 06:03:51 -!- oerjan has quit (Quit: Fnord!). 06:25:22 -!- tromp_ has quit (Read error: Connection reset by peer). 06:25:45 -!- tromp has joined. 06:34:49 -!- Sprocklem has quit (Remote host closed the connection). 06:35:08 SQLite now added recursive queries now. There is an example SQL program that solves sudoku puzzle, given. 06:35:58 -!- trout has quit (Read error: Connection reset by peer). 06:38:46 The WITH clause look like a really good feature. 06:45:50 -!- password2 has quit (Ping timeout: 264 seconds). 06:45:59 -!- blotter_ has joined. 06:49:16 -!- blotter has quit (Ping timeout: 265 seconds). 07:10:42 zzo38: show me? 07:10:54 CTEs? 07:10:57 recursive? 07:14:58 how was I not already following ISO/IEC JTC1/SC22/WG21 on twitter??? 07:15:21 kmc: http://www.sqlite.org/lang_with.html 07:15:28 i, what 07:16:01 that's uh... C++ standards? 07:16:05 yes 07:16:25 zzo38: I like the Mandelbrot set renderer as well :D 07:29:46 zzo38: inductive data types in Inform? https://twitter.com/chrisamaphone/status/435247774712344577 07:33:52 He needs to specify whether he means Inform6 or Inform7, which are two different programming languages. I don't know much of either. 07:36:19 I think a problem with WebGL is that everyone ends up making their own control scheme, there's no consistency 07:36:36 Which may be good for some games, but generic places to explore, some consistency might be useful 07:37:10 zzo38: she 07:37:21 (I think) 07:37:24 and a followup tweet says i7 07:37:35 zzo38: oh, I thought you knew a lot about inform 07:41:49 so do the recursive WITH clauses make SQLite into a logic programming language 07:41:53 or some other kind of thing 07:50:58 kmc: I don't know, but it allows loops and recursion without triggers, so it can be used in a query by itself. 07:51:11 It looks to be an extremely useful feature. 08:01:03 -!- luserdroog has quit (Ping timeout: 245 seconds). 08:04:35 -!- blotter_ has quit (Ping timeout: 272 seconds). 08:11:15 But SQL does have unusual features compared to other programming languages; many of which can be useful in the applicable circumstances. Other features I think would be useful to have are overridable views, trigger indices, and ordered triggers. 08:14:29 And the ability to rename views would also be useful. 08:39:56 I don't know much about logic programming language; if you know then hopefully you would know whether WITH clauses can make SQL into logic programming language. 08:58:20 So, I won't be changing my representation to just modifiers, I think. Although I will try to provide a function to turn a modifier into a getter+modifier pair, although it's only meant to be used on non-lazy structures 08:58:35 Racket does have the occasional lazy structure, so I hope this is the right decision 09:21:19 Sgeo, did you know that lens is turing complete 09:23:11 Now I do 09:23:12 Howso? 09:24:55 Well, the easiest way I've seen is by simulation of B,C,K,W with fix to get round Hindley-Milner 09:24:55 It suddenly occurs to me that I have no idea if this is a good idea :/ 09:25:20 Well, when I run my test, it will probably break horribly if this is a bad idea 09:25:30 "good" is a false concept. There is no justice in this world, Sgeo. 09:25:36 @type over mapped `asTypeOf` \a b c -> a (b c) 09:25:38 Functor ((->) t) => (a -> b) -> (t -> a) -> t -> b 09:25:56 @type view flipped `asTypeOf` \a b c -> a c b 09:25:57 (a -> b -> c) -> b -> a -> c 09:26:18 @type view curried (view _1) `asTypeOf` \a b -> a 09:26:19 b1 -> b -> b1 09:26:45 Oh hey, looks like it did break horribly 09:26:52 @type perform (over mapped acts acts) `asTypeOf` \a b -> a b b 09:26:53 Monad ((->) t) => (t -> t -> b) -> t -> b 09:27:02 And the grand finale: 09:27:27 @type over mapped (view flipped (foldrOf folded (over mapped) (view simple)) ((&) ^?! ignored)) (toListOf repeated) 09:27:28 (a -> a) -> a 09:28:11 it's so simple. 09:29:36 :t (.) join . (.) . flip 09:29:37 (a -> b -> c) -> (a -> b) -> a -> c 09:30:19 :t (.) join . flip . (.) (.) 09:30:19 (a -> b -> c) -> (a -> b) -> a -> c 09:42:46 -!- shikhin has joined. 09:48:09 What is the algorithm to figure out how to create a "frequent words" table so that text containing any sequence of characters which are included in the table can be compressed? It is slightly complicated, because the cost of the text may occasionally differ slightly depending on which table it is in. 09:59:20 I either need to rework getters to use lists instead of multiple-valued return, or rework composition of modifiers to be compatible with multiple-valued returns 10:00:59 I think the former may make more sense 10:19:37 -!- nooga has joined. 10:23:56 -!- MoALTz has joined. 10:53:20 -!- Sellyme has quit (Excess Flood). 10:54:02 -!- Sellyme has joined. 10:56:55 -!- Sellyme has quit (Excess Flood). 10:57:41 -!- Slereah__ has quit (Ping timeout: 248 seconds). 10:59:01 -!- Sellyme has joined. 11:15:16 @djinn (a -> b -> c) -> (a -> b) -> a -> c 11:15:17 f a b c = a c (b c) 11:15:40 @pl f a b c = a c (b c) 11:15:41 f = ap 11:15:53 Taneb: It's all just ap 11:17:30 I bet there is a simpler way to do ap with lens 11:17:39 Without using cheaty lambdas 11:29:09 > over mapped (view flipped (foldrOf folded (over mapped) (view simple)) ((&) ^?! ignored)) (toListOf repeated) id 11:29:13 mueval-core: Time limit exceeded 11:41:38 -!- nooga has quit (Ping timeout: 265 seconds). 11:45:06 -!- nooga has joined. 11:49:02 I am running into problems that are, fundamentally, caused by being in a dynamic language 11:49:31 (lens-mod (hash 'a 5) (compose-lens (at 'a) (at 'b)) (const 6)) 11:50:00 What is that supposed to do, exactly? The item at 'a in the original object isn't a dict that (at 'b) would know how to modify 11:51:47 -!- nooga has quit (Ping timeout: 252 seconds). 11:54:01 -!- conehead has quit (Quit: Computer has gone to sleep.). 11:56:28 Sgeo: You're on your own 12:05:27 -!- nooga has joined. 12:06:05 The only solution that comes readily to mind is having a separate mode for setters 12:06:15 So, getter+modifier+setter tuple 12:06:20 But that seems horrific 12:07:11 Unless... I can have a lens that would 'fail', instead somehow ask upstream what to do 12:07:30 Like, sending some kind of signal, that const would, by its very nature, ignore, but other things wouldn't 12:07:42 Except... hmm 12:08:52 (values) is a thing that unless you ignore it, you choke on it 12:09:03 (Or otherwise specifically look for it) 12:23:05 lens.rkt is now safely on GitHub. 12:40:51 -!- MindlessDrone has joined. 12:55:45 -!- Fusl has joined. 12:55:46 -!- yorick has joined. 12:56:02 -!- Fusl has left ("Konversation terminated!"). 12:57:11 -!- nyuszika7h has joined. 13:04:47 -!- Phantom_Hoover has joined. 13:18:43 -!- realzies has changed nick to dgw__. 13:18:54 -!- dgw__ has changed nick to realzies. 13:19:12 -!- Frooxius has joined. 13:21:46 -!- realzies has changed nick to some1special. 13:21:58 -!- some1special has changed nick to realzies. 13:30:21 Sgeo: I wonder if Typed Racket would work better 13:32:06 Or I just modify all modifiers to receive a signal saying 'no value given' 13:32:52 Some modifiers might choke on that (car-l, cdr-l), some might not 13:35:17 Ultimately, const would not care that there's no value given, because it provides a value. 13:35:27 But a different user-supplied modifier would fail with an arity error 13:37:24 Hmm, just now decided to check for lenses in other dynamically-typed languages 13:37:28 pylens exists 13:38:22 I need sleep 13:45:52 -!- heroux has joined. 14:27:44 -!- MoALTz has quit (Read error: Connection reset by peer). 14:28:25 -!- MoALTz has joined. 14:32:47 -!- MoALTz has quit (Read error: Connection reset by peer). 14:48:17 -!- password2 has joined. 15:20:05 -!- Phantom_Hoover has quit (Read error: Operation timed out). 15:35:35 -!- shikhout has joined. 15:39:00 -!- shikhin has quit (Ping timeout: 265 seconds). 15:39:01 -!- shikhout has changed nick to shikhin. 15:43:20 -!- ter2 has quit (Read error: Connection reset by peer). 15:48:29 -!- constant has joined. 16:06:41 mmm , shikhout sounds nederlands 16:14:40 password2: Nah, it's a play on my primary nick (my real name), shikhin. 16:14:49 password2: So, shikhout and shikherr are my secondary nicks. 16:14:54 *and tertiary 16:17:48 -!- blotter has joined. 16:21:56 -!- shikhin has quit (Ping timeout: 245 seconds). 16:25:02 -!- tertu has joined. 16:34:15 -!- tromp_ has joined. 16:34:40 ah 16:34:48 hout means wood in my language 16:36:51 -!- tromp has quit (Ping timeout: 245 seconds). 16:44:05 -!- blotter_ has joined. 16:45:51 -!- blotter has quit (Ping timeout: 260 seconds). 17:04:10 Drewno means wood in my language 17:06:34 -!- tertu has quit (Ping timeout: 260 seconds). 17:13:26 -!- Slereah has joined. 17:35:17 -!- nooodl has joined. 17:43:40 what language is that? 17:45:13 ah polish 17:48:50 -!- nooodl has quit (Ping timeout: 264 seconds). 17:50:31 -!- nooodl has joined. 17:52:57 -!- heroux has quit (Ping timeout: 272 seconds). 17:57:35 -!- heroux has joined. 18:04:29 -!- nooodl has quit (Ping timeout: 265 seconds). 18:07:31 `coins 18:07:32 doncoin gebsoncoin polycoin tempncoin paranhehcoin isccoin subamcoin emocoin mdjcoin @!coin versigcoin msizecoin haccoin roadlycoin nolocoin gasphalcshicoin sothesecoin calcoin bigehotorcoin retuacoin 18:09:51 hot or coin 18:10:16 -!- password2 has quit (Ping timeout: 245 seconds). 18:10:23 Fun fact : coin means "quack" in french 18:10:27 coin coin 18:14:14 Duck is kaczka in Polish 18:20:18 -!- prooftechnique has joined. 18:21:39 cuckoo coin 18:23:48 -!- password2 has joined. 18:41:13 -!- password2 has quit (Ping timeout: 265 seconds). 19:08:06 -!- JesseH has quit (Ping timeout: 245 seconds). 19:08:55 -!- JesseH has joined. 19:52:27 -!- Phantom_Hoover has joined. 19:52:48 which of these fuckin bots has quotes again 19:52:50 `quote box 19:52:51 46) Maternal instincts? Don't you just leave the thing in a box until it starts crying, and then shake it until it stops? \ 518) according to physics and maths can we theoretically have a box with infinite cookies inside? \ 637) BOXBOT IS TERRIBLE NOBODY LIKES BOXBOT He's just a box with arms 19:53:07 `quote broke 19:53:08 174) zzo38: A better definition would probably fix Avogadro's number. It's broken? \ 380) * Sgeo mutters about broken toilets #toilet is useless is #toilet even a thing I'm looking for help with toilets \ 497) But I mean, why fix it if it ain't broke? Except now it is \ 795) the other day I b 19:54:39 `quote HackEgo 19:54:39 33) `translatefromto hu en Hogy hogy hogy ami kemeny How hard is that \ 74) let's put that in the HackEgo quotes files, just to completely mystify anyone who looks back along them in the future \ 310) `quote django ​352) django is named after a person? thought it would be a gira 19:55:19 I wonder which bot has the most quotes, fungot perhaps? 19:55:19 olsner: there is winscheme48, too.) 19:57:45 `run tr ' ' '\n' < quotes | grep '^<.*>$' | sort | uniq -c | sort -nr | paste 19:57:47 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.14276 19:57:57 Oh, no pasteing allowed. 19:58:01 `run tr ' ' '\n' < quotes | grep '^<.*>$' | sort | uniq -c | sort -nr 19:58:01 ​ 142 \ 132 \ 109 \ 100 \ 96 \ 95 \ 88 \ 78 \ 68 \ 63 \ 61 \ 55 \ 52 \ 52 \ 49 \ 42 \ 32 \ 26 \ 19:58:11 Well, it's the first bot-like thing in the list, anyway. 19:58:55 :O 19:59:36 `run /usr/bin/paste 19:59:56 I guess that kind of pasteing is fine. 20:00:06 No output. 20:00:13 no pasting allowed? 20:00:30 wait what the heck, i'm in more quotes than itidus? 20:00:32 travesty 20:08:32 -!- conehead has joined. 20:23:38 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds). 20:25:54 -!- Phantom_Hoover has joined. 20:40:34 -!- nooodl_ has joined. 20:44:48 -!- blotter__ has joined. 20:45:26 -!- nooga has quit (Quit: Lost terminal). 20:46:22 -!- blotter_ has quit (Ping timeout: 265 seconds). 20:52:41 Do you like SQL? 20:54:06 -!- MindlessDrone has quit (Quit: MindlessDrone). 20:54:34 I don't like that SQL is so strongly identified with its concrete syntax, and that SQL is still commonly used by gluing together strings in another programming languages 20:54:58 the interface between an application and a database should be something richer than strings 20:55:23 I don't like that strongly gluing of SQL either, but I don't generally use it that way anyways. 20:56:12 And you can use things like ?1 ?2 rather than joining strings using other programs, if you do need to pass parameters to the SQL statements. 20:56:42 SQL can be used fine by itself, and if the program allows the user to enter SQL statements. 20:59:06 SQL is actually a complete programming language, although one which is unusual, it is still good for many things. 21:00:20 Do you disagree with any of this? 21:03:20 not really 21:03:47 parameters like ?1 are an improvement, but don't really address my core complaint, which isn't about SQL but about how the world works more generally 21:04:11 perhaps I will try to explain later 21:05:20 Actually I think I agree your statement about "how the world works more generally", but that doesn't make SQL bad; it just means database interfaces are lacking. 21:06:01 I do generally work with SQL by writing all of the SQL statements, triggers, etc in one file, so the program is mainly written in SQL and any extensions required may be written in C. 21:06:26 The other way around seems more common, and perhaps your complaint addresses that. 21:36:13 yeah 21:36:15 basically I am annoyed that the only truly universal data format is ASCII text 21:38:16 and so when you design a new file format / language / protocol, you have to put a lot of thought into how to represent it as ASCII text 21:39:10 and both designers and implementers tend to screw this up in ways that make life miserable 21:39:52 in particular it causes a lot of security problems due to improper escaping 21:40:22 and the fact that escaping needs to be aware of multiple layers at once 21:40:48 Actually a lot of things can be done with binary data, if you know the endianness and all of that stuff. 21:43:09 e.g. perfectly well-formated JSON can still cause trouble when it's pasted after a HTML " 21:43:35 whereas if you think mostly in terms of trees, you still need to serialize them at some point, but that can be a core low-level library and you only have to get it right there 21:50:14 It is possible to work-around the "" problem though. But there are in fact binary formats meant to be usable similar to JSON but if you want binary rather than text format. 22:25:01 -!- Sprocklem has joined. 22:30:43 -!- Phantom_Hoover has quit (Remote host closed the connection). 22:32:53 -!- Phantom_Hoover has joined. 22:37:26 -!- Phantom_Hoover has quit (Ping timeout: 264 seconds). 22:46:39 -!- oerjan has joined. 22:51:00 * oerjan just realized you could do let s = it in ghci 22:51:06 -!- boily has joined. 22:51:12 hoily 22:52:18 hellœrjan! 22:55:27 -!- metasepia has joined. 23:00:54 `coins 23:00:55 knhcoin sticcoin catccoin flattocoin wiecoin flecoin cariacoin d1reratcoin drocoin brzrocoin recolouxcoin subicoin subulolchicoin nicidicoin commucoin comercoin sallingpowrtyrevolucoin twomacoin genomecoin cradicoin 23:01:23 zzo38: sure, it is usually possible to work around design flaws in any kind of system 23:01:56 but you can't count on every developer to know all the traps and workarounds and apply them perfectly 100% of the time 23:02:02 and even if they did it would still be a large cost 23:03:23 * boily chokes on trying to say “brzrocoin” 23:04:34 -!- prooftechnique has quit (Quit: leaving). 23:13:22 -!- Sorella has joined. 23:28:27 -!- augur has quit (Remote host closed the connection). 23:28:54 -!- augur has joined. 23:30:33 -!- augur has quit (Read error: Connection reset by peer). 23:30:37 -!- augur has joined. 23:50:47 nocoin 23:54:54 -!- prooftechnique has joined. 23:56:40 `run echo KCUF | rev 23:56:41 FUCK 23:57:30 `run echo 'GAB A KCUF' | rev 23:57:31 FUCK A BAG 23:57:37 Gregor, your bot has misbehaving 23:57:54 *is 23:57:55 Knights Christian United in Faith 23:58:01 `relcome blotter__ 23:58:02 ​blotter__: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: . (For the other kind of esoterica, try #esoteric on irc.dal.net.) 23:58:48 `run echo 'CMK UOY KCUF' | rev 23:58:49 FUCK YOU KMC 23:58:56 wow so mean 23:59:09 `coins 23:59:10 dungcoin objectcoin podoccoin muguecoin iorslccoin pyraziecoin afelycoin ilecoin rfremblebraicoin pircoin blongcoin minarycodcoin soncoin laoticacoin blacroncalcoin commencoin dravitycoin genocoin elzellornicoin mithcoin 23:59:31 tittycoin appears to be missing