00:02:26 -!- quintopia has quit (Ping timeout: 240 seconds). 00:07:56 -!- quintopia has joined. 00:07:56 -!- quintopia has quit (Changing host). 00:07:56 -!- quintopia has joined. 00:18:19 -!- Lymee has joined. 00:18:19 -!- Lymee has quit (Changing host). 00:18:19 -!- Lymee has joined. 00:20:18 Why does :type (>>= either (const mzero) return) work but when I try to use the "let" command in GHCi it is error? 00:20:48 what is the line producing the error, and the error itself 00:21:46 If I type that without the word ":type" before it, it results in "Ambiguous type variable" error. It does the same if I assign it using let, and even if I do specify the type on there it does the same thing 00:23:02 zzo38: that sounds like the monomorphism restriction 00:23:09 Ambiguous type variable `m0' in the constraints: (MonadPlus m0) arising from a use of `mzero' at :1:33-37 (Monad m0) arising from a use of `return' at :1:40-45 Probable fix: add a type signature that fixes these type variable(s) In the first argument of `const', namely `mzero' 00:23:19 ..... 00:23:19 um 00:23:22 hi 00:23:27 :t (>>= either (const mzero) return) 00:23:28 forall (m :: * -> *) a a1. (MonadPlus m) => m (Either a1 a) -> m a 00:23:42 I just benchmarked lua 00:23:49 x^2 takes ~660 cycles 00:23:55 x*x takes ~1680 00:23:55 oerjan: But sometimes resulting from that restriction it says it is monomorphism restriction. But this time it does not say that. I will try it with turning off monomorphism and see if it work 00:23:56 wth 00:24:34 tiffany: Maybe it requires extra cycles retrieving variable "x" and it does not optimize that. 00:25:34 -!- augur has joined. 00:25:41 Yes; it does work if I turn off monomorphism restriction. 00:26:11 -!- ive has joined. 00:26:36 the only time I've had to turn off MR is when I had a configuration module with numbers in it. 00:26:46 as they are not monomorphic by default. 00:27:54 zzo38: i think the monomorphism restriction is particularly annoying when you are using pointfree definitions such as the above 00:28:14 let f x = x >>= either (const mzero) return would not be hit by it 00:29:10 Well, I am using GHCi; does that make a difference? When writing a code in a .lhs file I will always specify the type in a separate line. 00:29:23 zzo38: maybe the different error message is becaus m0 is a type constructor variable, not a simple type variable which can be defaulted. 00:29:29 *because 00:29:35 (just guessing on that) 00:30:13 zzo38: yes, the monomorphism restriction can be removed in most cases by adding a type signature, or by making a function have explicit arguments. 00:31:24 I always specify a type signature (although there might be some cases in which the definitions are made up by macros or other stuff so that I do not write a type signature), but in GHCi it cannot do that. 00:31:30 zzo38: you _can_ do that with ghci too i think, a let can take a type signature as well 00:31:41 OK 00:32:22 @let test1 = (>>= either (const mzero) return); test1 :: (MonadPlus m) => m (Either a1 a) -> m a 00:32:24 Defined. 00:32:39 hm i guess that does not really prove anything 00:32:41 :t test1 00:32:42 forall (m :: * -> *) a1 a. (MonadPlus m) => m (Either a1 a) -> m a 00:32:55 but that's the syntax anyway 00:32:57 I still like to turn off monomorphism restriction though, since it allows making declarations by macro or Template Haskell or whatever else it is 00:33:13 \/win 4 00:33:32 zzo38: yes, many people think it is annoying and it is often debated. i think it may even be turned off by default in a future ghc. 00:33:58 oerjan: I don't care since it can still be turned off using -X or a LANGUAGE pragma 00:34:22 Some people might want monomorphism restriction. 00:34:47 yeah 00:41:11 -!- augur has quit (Remote host closed the connection). 00:48:15 -!- pikhq_ has joined. 00:51:23 -!- pikhq has quit (Ping timeout: 258 seconds). 00:57:39 -!- tiffany has changed nick to tiffany|away. 01:37:08 -!- sebbu2 has joined. 01:37:08 -!- sebbu2 has quit (Changing host). 01:37:09 -!- sebbu2 has joined. 01:40:23 -!- sebbu has quit (Ping timeout: 240 seconds). 01:59:30 -!- tswett has joined. 01:59:36 And it's going to have 376 different commands. 01:59:45 Won't that be awesome? 02:00:36 What is it? 02:00:40 Yes, but is the bicycle included? 02:00:45 What will have 374 different commands? 02:01:02 The bicycle won't be included; you'll have to build it yourself. 02:01:12 darn 02:01:19 "It" is Smokefly, that game that's still utterly in the planning stage. 02:01:28 It's, like. 02:01:35 * tswett draws the planning stage, and points at it. 02:01:36 It's here. 02:01:55 even the planning stage is in the planning stage 02:02:12 Any other description than just those things? 02:02:18 Precisely. I haven't figured out how I'm going to plan it yet. 02:03:28 > iterate ((`mod`1000).(^2)) 2 02:03:30 [2,4,16,256,536,296,616,456,936,96,216,656,336,896,816,856,736,696,416,56,1... 02:03:45 Okay, okay. Smokefly. It's a game where there's you, and there's the world. You can use materials, tools, and buildings to create other materials, tools, and buildings. 02:04:03 > iterate ((`mod`1000).(^2)) 8 02:04:05 [8,64,96,216,656,336,896,816,856,736,696,416,56,136,496,16,256,536,296,616,... 02:04:19 > iterate ((`mod`1000).(^2)) 32 02:04:21 [32,24,576,776,176,976,576,776,176,976,576,776,176,976,576,776,176,976,576,... 02:05:00 > iterate ((`mod`1000).(^2)) 376 02:05:02 [376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,37... 02:05:14 Yay! 02:05:19 i knew there was something about that number 02:05:37 That's not the thing about it, though. There's a good reason to have 376 commands. 02:05:50 _two_ good reasons 02:05:57 Right, right. 02:06:07 > 376%4 02:06:09 94 % 1 02:06:17 > 94%2 02:06:19 47 % 1 02:06:42 See? 02:07:16 8 times a prime? 02:07:27 That's a very important prime. 02:07:42 ...ok 02:08:10 It is, you see, the number of printable character keys on a US keyboard. 02:08:35 what. 02:09:20 ~!@#$%^&*()_+`1234567890-=qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>? disagrees with you 02:09:21 ...it's a conspiracy! 02:09:37 coppro: do you have separate keys for all those? 02:09:50 tswett: keys or key combinations 02:09:57 Keys. 02:10:00 oh 02:10:05 a US keyboard has just over 100 02:10:23 Those are not all printable character keys. 02:10:32 do you mean graphing characters? 02:10:33 F6, for example, is not a printable character. Nor is tab. 02:10:41 > [n | n<-[0..999], n*n `mod` 1000 == n] 02:10:42 [0,1,376,625] 02:10:49 Granted, the number pad has some extras. 02:10:57 I think F6 might not be a character while Tab is 02:11:26 > [n | n<-[0..9999], n*n `mod` 10000 == n] 02:11:27 [0,1,625,9376] 02:12:38 i guess it's probably obvious if you do (mod 2^k) and (mod 5^k) separately 02:13:44 n*(n-1) === 0 (mod p^k) 02:14:16 => n === 0 or n===1 (mod p^k) 02:16:03 (using that gcd (n,n-1) == 1 and the modulus is a prime power) 02:18:06 so the 8 then, is for combinations of shift/ctrl/alt or the like? 02:18:53 tswett: ^ 02:19:06 Yep. 02:19:20 Sgeo: tab is a character, but it's not printable. 02:19:23 For some reason. 02:19:48 it doesn't have a fixed width 02:21:07 > [n | n<-[0..59], n*n `mod` 60 == n] -- i predict 8 elements 02:21:08 [0,1,16,21,25,36,40,45] 02:28:18 -!- Guardric has joined. 02:51:15 Hmm 02:51:22 Isn't \n decimal 10? 02:51:41 * Sgeo figured out why Ctrl-Shift-u-A works 02:51:46 ª 02:51:49 પ 02:52:06 02:56:03 Sgeo: istr it may be OS-dependent 02:57:04 also, that it's always one char, even on OS'es that use CRLF 02:57:21 (being converted for text files) 02:59:11 I think \n is always one byte (in C), although it may be converted when reading/writing 03:01:33 !c print("%d\n", '\n'); /* 10 on linux, of course */ 03:01:38 Does not compile. 03:01:49 er 03:01:52 !c printf("%d\n", '\n'); /* 10 on linux, of course */ 03:01:54 10 03:02:38 \n is always 10 03:02:45 > '\n 03:02:46 : 03:02:46 unexpected end-of-file in string/character literal... 03:02:49 > ord '\n' 03:02:49 10 03:03:10 copumpkin: i vaguely thought old MacOS used 13, or something 03:03:19 > ord '\r' 03:03:19 13 03:04:32 Can a Turing machine's tape be bounded on one end instead of indefinitely extensible in both directions? 03:05:20 Certainly. 03:05:25 there's a 1 to 1 correspondence between the integers and the naturals 03:05:26 so I'd assume so 03:05:40 It can even be Universal with such a tape. 03:06:09 Can the tape also contain only 0s and 1s and still be universal? 03:06:14 yes. 03:06:22 copumpkin: \n is not always 10. 03:06:40 copumpkin: C makes no statement about the character set. 03:06:44 copumpkin: Nor does POSIX. 03:07:18 Of course, in *practice*, nobody uses anything but ASCII supersets. 03:08:13 http://en.wikipedia.org/wiki/Newline#In_programming_languages 03:08:33 The Turing machine Wiki article mentioned that "In some models the tape has a left end marked with a special symbol; the tape extends or is indefinitely extensible to the right" which made me wonder if a "special symbol" was truly necessary. 03:09:52 It's actually perfectly permissible for stdio to do text translation on POSIX, I think. 03:10:21 -!- copumpkin has quit (Ping timeout: 240 seconds). 03:10:46 -!- copumpkin has joined. 03:11:45 Guardric: well brainfuck is essentially a weirdly encoded turing machine, and needs no special symbol, although it may crash if you go off the left end 03:12:38 see boolfuck, which is TC with just 0 and 1 03:12:45 pikhq_: C makes a few statements, namely: 1) NUL is 0. 2) 0-9 are consecutive 03:13:25 coppro: Ah, right. 03:13:28 Yeah, I know about both of those languages, and I actually wrote my own smallfuck interpreter in Java. 03:13:46 smallfuck is not tc though, iirc 03:13:51 coppro: And that there exist certain characters. 03:13:59 The main reason why I'm asking is because I'm interested in how simple you can make a language or machine while still being Turing complete. 03:15:14 oerjan, I believe smallfuck is Turing-complete because I/O can be memory mapped. 03:15:54 Guardric: urk 03:16:27 smallfuck has a limited tape, that's why it's not tc 03:17:24 Ah, I see. Have you heard of BitChanger? 03:20:04 i must have 03:20:27 it did not leave much of an impression 03:21:36 for ultimate simplicity, see Bitwise Cyclic Tag 03:22:00 It combines the > and @ operators to form the } operator 03:22:10 Guardric: I/O is not necessary for Turing completeness. 03:22:17 Brainfuck is TC without . and , 03:22:25 see also P'' 03:27:19 BCT looks very interesting. The esolang article says 0 deletes the leftmost data-bit - is that equivalent to the act of shifting all symbols to the left, causing the leftmost data-bit to be overwritten? 03:29:10 well yes, assuming you delete the last one instead... 03:33:20 -!- MDude has changed nick to MSleep. 03:34:57 Oh, the output of a BCT program is the sequence of deleted bits? 03:34:59 other minimal stuff for which i'm particularly biased: /// (Slashes), Underload (just the :()^ commands), and brainfuck with 3 unbounded cells. 03:35:39 and then there's Iota and Jot 03:35:59 (and SKI calculus in general) 03:36:02 Awesome, what does 3 unbounded cells for brainfuck mean? 03:36:24 that the tape has just 3 cells, but the cell values are unbounded integers 03:36:44 I would really like to learn how Iota and Jot operate, but unfortunately I cannot comprehend the explanations. 03:36:55 i should also mention minsky machines with 2 registers, which inspired it 03:36:56 Is that Turing-complete? 03:37:10 all the things i mentioned now are tc 03:37:50 oh and of course fractran. 03:37:54 That's surprising to me 03:38:37 the 3-cell part? anyhow the proof is in the Collatz function wiki article 03:39:06 or Iota and Jot? 03:39:20 The 3-cell Turing-complete 03:39:31 What's the difference between Iota and Jot 03:39:43 those are just different encodings of SKI calculus 03:40:15 Do they operate on a tape of binary numbers? 03:40:39 no, they are functions from functions to functions. 03:41:05 or well, what you do is reduce them to minimal form 03:41:53 SKI calculus is again used by encoding lambda calculus in it 03:42:03 How do they compute things then? I thought you need a way to get the output of the calculation 03:42:15 david madore's unlambda page has a nice explanation of stuff 03:42:42 well there are many ways of encoding I/O. lazy-k has one such. 03:43:15 you encode input as a function, apply the program function to it, and get a function which encodes the output 03:44:12 Strange... I can't even begin to understand how it works 03:45:11 well for the input, it is encoded as a list of bytes terminated by 256 iirc. and then you need to know how to encode lists, and bytes. 03:45:45 bytes are encoded as "church numerals" 03:46:22 lists are encoded as pairs of first element, then rest of list. then you need to encode pairs... 03:46:29 but it all bottoms out in the end. 03:46:33 wow 03:50:11 What do you think is the most minimalistic of these languages? (brainfuck, BCT, Iota, Jot, Underload...) 03:50:23 Depends how you define minimalistic 03:50:34 But probably iota or jot 03:50:39 Since they have 1-2 instructions 03:53:15 /// also needs just 2 ;) 03:54:54 Is it possible to have a Turing-complete machine which operates on a left-bounded binary tape with memory mapped I/O and instructions? 03:55:39 Where output is merely the tape's contents after the machine has terminated 03:55:48 almost certainly. there might even be one already in our Category:Brainfuck derivatives 03:56:00 oh wait 03:56:20 I've been looking around for days and the closest I've come is BitChanger, and now perhaps BCT 03:56:30 Guardric: um, by memory mapped, you mean that input is just the initial tape, and output is just the final tape? 03:56:54 i think you have just described the usual turing machine model. 03:56:54 Yes, and the instructions are also on the tape initially 03:57:02 really? 03:57:05 oh instructions... 03:57:25 well, you can do that too, it's called a universal turing machine 03:58:02 (you have a turing machine which interprets the beginning of its tape as the instructions for any other turing machine) 03:58:54 That sounds right, sweet 03:59:13 > filterM (const [True, False]) "rain " 03:59:14 ["rain ","rain","rai ","rai","ran ","ran","ra ","ra","rin ","rin","ri ","ri... 03:59:28 > filterM (const [True, False]) "rain" 03:59:28 ["rain","rai","ran","ra","rin","ri","rn","r","ain","ai","an","a","in","i","... 03:59:48 I love that little trick. 04:00:35 oerjan, I have a hard time fully understanding how the Universal Turing machine works from Wikipedia's article 04:00:46 It's mainly the action table that trips me up 04:01:03 it's easy to understand that it CAN work - look at eval() in python for instance 04:02:42 !perl /(?{`perl -e "eval {print 2}"`})/ #wheeee 04:03:00 !sh perl -v 04:03:09 hmm 04:04:06 Guardric: it's a rather complicated thing, i'd not worry about not understanding it. but it's essentially an interpreter written in the language of turing machines 04:04:31 I'm guessing there's no perl in the egobot sandbox. 04:04:49 !perl print "oh?" 04:04:50 oh? 04:05:00 I mean from bash. 04:05:09 !sh which perl 04:05:10 ​/usr/bin/perl 04:05:16 ah nevermind I see. 04:05:17 tsk tsk 04:05:25 !perl /(?{print `perl -e "eval {print 2}"`})/ #wheeee 04:05:26 2 04:05:41 oerjan, what about a regular Turing machine? What's the difference between the two? 04:06:15 I believe they are the same thing, but the universal Turing machine is just a formalism to describe a particular kind of turing machine? 04:06:25 Guardric: a regular turing machine has an arbitrary instruction set, while a universal one has an instruction set that allows it to simulate any other turing machine 04:06:31 a univeral turing machine is just a specifically coded turing machine 04:07:02 by "instruction set", i mean the same thing as an "action table" 04:07:36 Hmm, I don't understand action tables, and what is meant by states 04:07:53 A state determines your current behaviour and which states you'll transistion into next based on what you see 04:07:55 I understand how languages like brainfuck work, but I guess they're a far cry from Turing machines 04:08:05 not really. 04:08:06 Guardric: a turing machine has a head, which is in a state, and at a position of the tape 04:08:52 for each possible state, and each possible symbol on the tape, the action table tells the TM what to do next 04:09:24 the action table + state is basically equivalent to bf program + position in program 04:09:43 so there are (# of states) * (# of possible symbols) entries in the action table? 04:09:51 yep 04:10:24 cartesian product, bitches. 04:10:31 represent. 04:10:54 the equivalence is not _entirely_ two-way, but you can convert a bf program with bounded cell size into a turing machine action table 04:11:44 except output is meaningless for a turing machine, I believe. 04:11:48 one state per program position, one symbol per cell possibility 04:11:56 ah yes. ignore . and , 04:12:26 So the bf program pointer and cell pointer define the state? 04:13:21 and the state of every cell 04:13:30 no, the cell pointer is different, that corresponds to tape position 04:13:40 Wait, I mean: Does (current program command + current cell value) = state? 04:13:43 which is basically exactly the same thing for bf as for tm's 04:13:52 no, just current program command 04:14:41 Ugh, sorry I'm not getting this >.< 04:14:48 current program command, current cell value, current cell pointer vs. current state, current tape symbol, current tape position 04:15:48 Well, a bf interpreter knows what to do next if you give it the current command and current tape symbol, right? 04:16:06 yes 04:16:07 yup. it just looks at what the symbol is (and the contents under the tape pointer) 04:16:13 and it's a trivial decision 04:16:48 -!- oklopol has joined. 04:17:16 OK cool, let me guess what a smallfuck (binary tape) action table would look like... 04:18:03 -!- CakeProphet has quit (Ping timeout: 252 seconds). 04:18:39 (Command, current tape symbol) Action 04:18:53 (>, irrelevant) Move cell pointer right 04:19:00 (<, irrelevant) Move cell pointer left 04:19:10 (*, irrelevant) Flip bit 04:19:21 Guardric: note that for a turing machine the action includes what state to go to next 04:19:30 which you'll need for [ and ] 04:19:49 * does care about the cell's letter, it has to turn 0 to 1 and 1 to 0 04:19:53 ([, 0) Jump past matching ] if current cell is 0 04:20:20 ([, 1) Do nothing, meaning just move to the next instruction 04:20:30 (], 0) Do nothing 04:20:37 (], 1) Jump back to matching [ 04:21:02 Guardric: also the action table needs to have different entries for identical commands at different points in the bf program 04:21:19 really? how would that work? 04:21:35 What do you mean by different points in the bf program 04:21:47 encode every byte of the brainfuck derivative program as a state from 1 to length 04:21:52 every state points towards the next 04:22:01 EXCEPT ]s which point towards the next OR their corresponding ['s number 04:23:40 I'm looking at the Universal Turing machine Wiki page, " If we denote by (m, n) the class of UTMs with m states and n symbols the following tuples have been found: (15, 2), (9, 3), (6, 4), (5, 5), (4, 6), (3, 9), and (2, 18)." 04:24:05 If I desire a binary tape, that means 15 states are needed? 04:24:35 Guardric: look at the Turing machine page instead, that universal page assumes you already know it 04:25:12 oh hm 04:25:47 -!- Taneb|Kindle has joined. 04:25:51 Guardric: probably 04:25:56 Hello 04:26:13 I am kindled again 04:26:22 hi i thought you'd finished your vacation 04:26:49 Yeah but it is early and I don't wat to turn on th computer 04:27:09 Because it is next to my parents' room 04:27:21 Hmm, so if you have @<>[] commands, you need 7 states? 1 for each @<> and 2 for [ and ]? 04:27:32 And my laptop is out of action 04:27:44 Guardric: i told you, you need one state for each position in the program 04:28:05 So if the program is 300 commands long, you need 300 states? 04:28:11 yep 04:28:21 although you can probably compress it a bit 04:28:27 What are we talking about? 04:28:41 since a tm can do things in 1 step that a bf program needs several for 04:28:43 what if the machine doesn't know how long the program is initially? 04:29:14 Guardric: oh the _universal_ tm does not have states dependent on the bf program 04:29:39 a tm encoded directly from the bf program would 04:29:42 think about how the java virtual machine runs a java program without being coded for it 04:31:43 the universal tm would need to encode the states of the tm it simulates in the tape instead 04:32:25 I'm so confused... 04:32:48 Guardric: a universal tm is essentially an interpreter for tm's 04:33:09 Written as a Tm 04:33:15 Heh, I don't understand that at all =( 04:33:17 like a java interpreter in java would interpret java programs 04:33:31 Guardric: do you understand how interpreters work, in general? 04:33:50 I'd like to think I do, I've written a smallfuck interpreter in Java today 04:34:06 now let's say you were writing a java interpreter in java 04:36:04 let's say it had a class F, and that the program you wanted to run _also_ had a class F. 04:36:43 then you wouldn't want to confuse them. so you would implement the class F in the program you run as something completely different from your original class F. 04:37:22 in the same way, when a universal turing machine interprets a state in the tm it simulates, it would not want to confuse it with its own states. 04:37:49 it would represent it as something on the tape instead 04:38:20 (since, apart from its states which it needs to use for its own purposes, the tape is the only place it can store things) 04:40:04 I really appreciate you explaining so much for me, but I'm sorry to say that I just don't get it. Maybe if we start from a bf or sf perspective, and work from there? 04:40:09 I think the question I need to ask is: Is is possible to encode a bf or sf program on the tape? 04:40:18 certainly 04:40:33 in fact if you have 9 symbols, it's quite easy :P 04:40:39 (1 extra to mark the end) 04:41:25 OK, let's consider a bf machine like so: the first cell of the tape is initially set to n which is the length of the bf program to be executed 04:41:55 why not just encode the whole program in that first cell? 04:42:04 Guardric: er, for turing machines you only a _finite_ set of symbols 04:42:10 *you have 04:42:22 you cannot encode an arbitrary length in a single cell then 04:42:59 you could write the length in the initial cells in binary, though 04:43:00 my noob sense is tingling 04:43:00 Then cells 2 onward contain the program you wish to execute (cell #2 to 2 + n I think) 04:43:23 * oklopol runs away from angry swat 04:43:33 Guardric: i think it would be easier to have just an end marker, no need to store the length 04:44:24 OK then, say the commands +-<>[] are encoded as the numbers 1 through 6, and the end of the program is marked by a 0 04:44:39 yeah 04:44:59 Fun fact: there is a countably infinite number of well-defined algorithms 04:44:59 -!- CakeProphet has joined. 04:44:59 -!- CakeProphet has quit (Changing host). 04:44:59 -!- CakeProphet has joined. 04:45:00 After that 0 comes input, the end of which is also marked by a 0 04:45:13 Taneb|Kindle: did you know 1+2=3? 04:45:26 Guardric: sounds good 04:45:53 oklopol:I have added that one to my list 04:46:00 except what if input has 0's :O 04:46:03 so the value in an input cell can be in the range 1 to # of symbols 04:46:17 OH NO 04:46:23 Where # is finite 04:46:33 Yes, # of symbols is finite 04:46:34 oklopol: well bf often does eof=0 anyway 04:46:41 oerjan: nooooooo 04:47:04 Now, after this second 0 is free-roam area for the machine to do its work 04:47:15 oerjan, I think I am in need of a swat but I cannot remember why 04:47:22 if it's a ubf, i would'be thought there are a constant 256 symbols 04:48:29 Not necassarily 04:48:50 What would the tape look like if I want the program to be "+>+" and the input to be null and the output to be "11"? 04:48:56 yes necessarily 04:49:35 1 4 1 0 0 04:49:51 There is a minimum of two oklpopol 04:49:57 why are you spoonfeeding him 04:50:13 oh hm 04:50:21 oerjan, precisely what I was thinking. Now, could you take me through the execution steps? 04:50:35 you can't execute yet 04:50:43 Do you know how to invent Golf-Haskell? 04:50:46 Because spoonfeed is the longest word in the english language with all its letters in reverse alphabetical order 04:50:52 you don't know where the head is 04:50:54 Guardric: there needs to be some temporary storage as well 04:51:08 oerjan, what do you mean? 04:51:37 Guardric: or wait hm maybe not 04:51:52 Taneb|Kindle: are you sure 04:52:05 Taneb|Kindle: O, I didn't notice that. But now I can see it is in fact in reverse alphabetical order 04:52:08 fairly confident 04:52:27 It is nine letter long but I do not know if there is longer word having that property. 04:52:32 Guardric: first i would shift every right so there is room to put markers on the tape for current bf program position and current bf tape position 04:52:37 *everything 04:52:50 GWR said so 04:52:56 oerjan, I understand 04:53:17 oerjan, let's say the tape starts out that way, 0014100 04:54:05 you only need one zero 04:54:11 in the beginning 04:54:27 oklopol: probably 04:54:47 hmm well true, i'm not sure 04:55:08 better have some elbow room, since bf is insane 04:55:29 although you could also use the zeros after the tape... 04:55:58 fastest eva 04:56:35 I wonder if Uniquode as-is is Turing complete 04:56:44 oerjan, if the number of symbols is finite, would that mean that the amount of accessible cells is finite? 04:56:54 Guardric: no. 04:56:58 [>] will eventually reach every cell 04:57:21 yeah right 04:57:31 [>+] 04:57:35 no 04:57:41 noobs 04:57:44 :( 04:57:45 i'm gonna go 04:57:56 :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 04:58:26 but if you use the first cell to hold the value of the current cell pointer...? 04:58:33 Patashu yours would stop on the first zero cell 04:58:35 Guardric: no you don't. 04:58:38 shh 04:58:42 Guardric: don't do that 04:58:55 you use a 0 _in_ the tape at the spot for the current cell pointer 04:58:56 not in bf 04:59:13 and then similarly as with input, add 1 to the actual cell values 04:59:58 wait what? 05:00:18 -!- Taneb|Kindle has quit (Quit: Kindle browser needs multiple tabs). 05:00:19 Guardric: you said input could be from 1 to max symbols 05:00:31 so it's reasonable to encode bf tape the same way 05:00:33 Insert a 0 after the current command cell? 05:01:40 oerjan, I think I'm getting what you're saying... Keep going with the execution 05:01:56 so first you'd shift everything over two cells? 05:02:06 Guardric: 01410000. the first 0 is the initial bf program pointer, the second is end of program, the third is end of input, the fourth is current bf tape spot, the fifth is end of bf tape so far 05:02:36 i think that should be enough room for things 05:02:44 -!- ive has quit (Quit: leaving). 05:03:25 so we start at the first 0. go right, look at the first command. it's a +. 05:04:13 turn it into 0. go left, turn that into 1 (+) instead. 05:05:09 10410000 and we still need to actually _perform_ the +. go right to the fourth 0, which represents the bf tape pointer. 05:06:38 go right, note there is a 0 there too, representing end of tape. to prolong the tape: turn that into 2, go right beyond tape, make a 0. 05:06:51 104100020 05:07:07 (the 2 represents a bf 1 cell) 05:07:32 go left again to the first 0. you are now ready to perform another command. 05:08:11 as you can see this is verbose, even though i've already summarized many steps of seeking to 0's 05:08:15 -!- darth has joined. 05:09:04 -!- darth has left. 05:09:25 for the 4 (>) instruction we again swap it with the previous 0, seek to the fourth 0, and now swap _that_ with the 2. 05:09:43 140100200 05:10:31 then go back to the first 0 again. the final 1 (+) proceeds much like the first and we end up with 141002020. 05:10:52 at which point we detect that the first 0 has reached the second, so the program ends. 05:11:14 -!- Guardric has quit (*.net *.split). 05:11:14 -!- olsner has quit (*.net *.split). 05:11:23 gah 05:11:27 -!- Guardric has joined. 05:11:31 typical :P 05:11:34 oh 05:11:36 What just happened... 05:11:45 Guardric: what was the last line you saw? 05:11:46 I got disconnected for some reason 05:11:59 go left again to the first 0. you are now ready to perform another command. 05:12:04 argh 05:12:24 as you can see this is verbose, even though i've already summarized many steps of seeking to 0's 05:12:24 * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has joined #esoteric 05:12:24 * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has left #esoteric 05:12:24 for the 4 (>) instruction we again swap it with the previous 0, seek to the fourth 0, and now swap _that_ with the 2. 05:12:24 140100200 05:12:26 then go back to the first 0 again. the final 1 (+) proceeds much like the first and we end up with 141002020. 05:12:29 at which point we detect that the first 0 has reached the second, so the program ends. 05:12:31 * Guardric has quit (*.net *.split) 05:12:33 * olsner has quit (*.net *.split) 05:12:48 * Sgeo feels no guilt 05:12:56 -!- olsner has joined. 05:13:04 Guardric: on irc, netsplits happen, that's just life. 05:13:46 Ah ok, well thank you very much for stepping through that simple program 05:14:34 Guardric: this should work nicely for +-<>. i think it _may_ be possible to use it for [] as well, but it needs some thought for the [] matching seeking 05:14:51 Out of curiosity, how would this work with a binary tape? You would no longer be able to encode integers in a single cell 05:15:10 Guardric: well as i said a tm has finite number of symbols anyway 05:15:52 but in any case, if you want to simulate 256 symbols with a binary tm, just write them down in binary 05:16:37 tm's actually handle that easier than bf, since they can always remember which bit they're at 05:18:14 if you _do_ want unbounded cells, then you need to find some way to encode them. the simplest is unary, just do 0's separated by number of 1's. this does mean you may have to shift the entire tape to increment/decrement things, though 05:19:01 Whoa 05:20:24 but having to shift the entire tape to handle arbitrary data is a known problem for bf with bounded cells anyway 05:20:36 (when programming _in_ bf) 05:21:36 Gotcha 05:24:40 -!- Taneb has joined. 05:24:52 Hello 05:26:27 Would it be incorrect to understand a von Neumman machine as a combination of a quine and a self interpreter? 05:27:09 sounds about right 05:27:19 applies to life in general... 05:38:51 Life's programmer is horrible. I mean, it uses a cheating quine! And that's horrible! 05:39:25 what, cheating? 05:40:43 Why does Haskell sometimes change the type of a function I have defined and specified the type? 05:40:55 !userinterps 05:40:55 ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph gregor hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg 05:41:12 !svedeesh Wow today is a lovely day. 05:41:12 Fuu toodey is a looffely dey. Bork Bork Bork! Bork Bork Bork! Bork Bork Bork! 05:41:25 zzo38: how so? 05:41:26 oerjan, thanks for all your help, I will be back tomorrow probably =) 05:41:51 you're welcome :) 05:41:55 -!- Guardric has quit (Quit: Leaving). 05:42:07 Something else is also wrong; perhaps I am doing something wrong. 05:42:39 I tried to define "instance Ord t => MonadX Set t" but it says it cannot deduce (Ord b) 05:43:06 hm, needs more context 05:44:00 Don't you need a ->? 05:44:08 i would guess you are somehow mixing MonadX Set t 's with MonadX Set b 05:44:14 I put: bindX :: (MonadX m b, MonadX m (m a), MonadX m a) => m b -> (b -> m a) -> m a; bindX x f = joinX (fmapX f x); but somehow it changed the type to Monad m => m b -> (b -> m a) -> m a but it seems it won't do that if there is more than one instance, so I guess it is OK 05:44:32 Taneb: not if MonadX is a multiparameter typeclass 05:44:51 I have much to learn 05:45:00 oerjan: The error is on this definition: fmapX = Data.Set.map; (it doesn't mention "b" at all.) 05:46:12 zzo38: does your MonadX have any functional dependency from Set to t? otherwise it might not know that you are using it at type t 05:46:34 O, that is what is wrong. How do you make functional dependency? 05:46:42 What does functional dependency mean? 05:46:51 class MonadX m t | m -> t where 05:48:05 No, I still get the same problem, even after I added the functional dependency and the LANGUAGE pragmas FunctionalDependencies and UndecidableInstances. 05:48:07 er, m might not be the best letter there, but anyhow. 05:48:25 What does functional dependencies means anyways? 05:48:49 oerjan: Whatever; as long as it is not the same as the other letter it should work 05:50:59 zzo38: normally you cannot deduce from an instance MonadX A B that there is not a different instance MonadX A C, which leads to problems selecting an instance if your function or similar only uses the A type 05:51:26 But the "B" in this example is a variable. 05:52:05 yes, but the point is that b could be _any_ type that happened to have such an instance 05:52:42 and without a functional dependency it cannot deduce that it's the same as you want 05:53:17 But the same error even with functional dependency 05:53:34 oh btw i see that you cannot use a f.d. on MonadX since you _do_ want to use it with more than one b per m 05:53:51 Yes 05:54:17 wait you said it changed the type to Monad m => m b -> (b -> m a) -> m a 05:54:29 that's weird, must be something different 05:54:38 hm... 05:54:49 I think the reason it doesn't work is that it ignores constraints on datatype declarations. I read somewhere that it does that. 05:55:03 zzo38: do you happen to have an instance Monad m => MonadX m b ? that would mess up things 05:55:27 and perhaps in that way 05:55:28 Going to learn some more Haskell 05:55:35 Cos I is Haskell newb 05:55:48 oerjan: Yes I do; but it only changes the type to that if that is the *only* instance. Deleting that instance does not get rid of the (Ord b) error though. 05:55:49 how much do you know 05:56:13 I'mupt to guards in LYAH 05:57:12 Actually I am just past tha 05:57:25 I am up to where IIRC 05:57:30 I wrote the Constantinople implementation in Haskell; and you can print it out if you have TeX. 05:57:53 It isn't best because it is first Haskell program I wrote. 05:58:06 zzo38: you cannot use such an instance unless you have OverlappingInstances set, i believe. 05:59:04 Some things in there could been improved, and I think the "Pointer" type is really ungeneralization of lens; lens is more generalized and does more things. 05:59:55 (I didn't know about lenses at the time I wrote that program.) 06:00:08 OK, I will try OverlappingInstances 06:00:18 :t Data.Set.map 06:00:19 forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b 06:00:27 No, it is still the same error. 06:00:42 zzo38: it's probably that b ^ it cannot deduce the Ord for 06:02:01 But I thought there is an instance for Ord x => Ord (Set x) 06:02:39 or wait hm, there's a b on your bindX too. i'm confused. 06:05:38 > S.map 06:05:39 Overlapping instances for GHC.Show.Show 06:05:40 ((a ->... 06:05:53 zzo38: oh and yes it ignores constraints on datatype declarations, although it does better in some ways if you use GADT syntax instead, iirc 06:06:03 > S.map (\x -> floor $ x / 2) (S.Set [1,2,3,4,5,6]) 06:06:04 Not in scope: data constructor `S.Set' 06:06:15 although that has its own subtleties 06:07:27 > S.map (\x -> floor $ x / 2) (S.fromList [1,2,3,4,5,6]) 06:07:29 fromList [0,1,2,3] 06:08:00 Woops! 06:08:06 :t div --also this 06:08:08 forall a. (Integral a) => a -> a -> a 06:08:54 > S.map $ floor . div 2 $ S.fromList [0..6] 06:08:56 No instance for (GHC.Real.RealFrac (Data.Set.Set t)) 06:08:56 arising from a use ... 06:09:03 > S.map $ floor . (flip div) 2 $ S.fromList [0..6] 06:09:04 No instance for (GHC.Real.RealFrac (Data.Set.Set t)) 06:09:04 arising from a use ... 06:09:18 > S.map (floor . /2) $ S.fromList [0..6] 06:09:19 : parse error on input `/' 06:09:23 > S.map (floor . (/2)) $ S.fromList [0..6] 06:09:25 > S.map (`div` 2) $ S.fromList [0..6] -- cough 06:09:26 fromList [0,1,2,3] 06:09:27 fromList [0,1,2,3] 06:09:33 Oh right 06:09:36 * Lymee facepalm 06:09:40 > S.map (floor . (/2)) $ S.fromList [0..] 06:09:41 WEEEE 06:09:44 mueval-core: Time limit exceeded 06:10:04 not overly lazy, that 06:10:22 i think it may be a tree structure, possibly 06:10:39 it is iirc 06:10:45 On to recursion 06:11:03 Taneb: but first, recursion! 06:12:24 oerjan: bindX is not a class member though; the class members are unitX, joinX, and fmapX. bindX is outside. 06:12:35 aha 06:13:05 But that has nothing to do with the problem I have. I think the problem has to do with ignoring constraints on datatype declarations. 06:14:07 Maybe I cannot fix this program until they fix that problem in GHC. 06:14:57 @pl \x foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x] 06:14:58 (line 1, column 11): 06:14:58 unexpected "|" 06:14:58 expecting pattern 06:15:13 @pl \x foldr (---) $ map (\y -> (x `mod` y) == 0) [2..x] 06:15:14 (line 1, column 53): 06:15:14 unexpected end of input 06:15:15 expecting pattern 06:15:18 @pl \x foldr (~) $ map (\y -> (x `mod` y) == 0) [2..x] 06:15:19 (line 1, column 11): 06:15:19 unexpected "~" 06:15:19 expecting pattern 06:15:27 @pl \x -> foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x] 06:15:28 foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2) 06:15:43 -!- GreaseMonkey has joined. 06:16:29 > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500] 06:16:31 Couldn't match expected type `GHC.Bool.Bool' 06:16:31 against inferred type ... 06:16:34 :< 06:17:16 The definitions of unitX and joinX in the instance declaration do not cause the error. Only fmapX is error. 06:17:31 -!- Taneb has quit (Ping timeout: 252 seconds). 06:18:14 > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) False (enumFromTo 2)) $ [0..500] 06:18:16 Couldn't match expected type `GHC.Bool.Bool' 06:18:16 against inferred type ... 06:18:33 @pl \x -> foldr (||) False $ map (\y -> (x `mod` y) == 0) [2..x] 06:18:34 foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2) 06:18:46 > filter (foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500] 06:18:48 [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,2... 06:19:11 Do you think this problem has to do with ignoring constraints on datatype declarations, or is the problem having to do with something else? 06:19:39 zzo38: i am afraid that they have actually decided to remove constraints on datatype definitions altogether http://www.haskell.org/pipermail/haskell-cafe/2011-June/092922.html 06:19:54 because it works so badly 06:20:02 oerjan: I have read that they have decided to remove it. 06:20:36 Although I am actually unsure whether or not constraints on datatype declarations will fix this problem, I don't know for sure. Do you know? 06:21:33 :t or -- teehee 06:21:34 [Bool] -> Bool 06:21:47 :t any 06:21:48 forall a. (a -> Bool) -> [a] -> Bool 06:22:17 Lymee: ^ 06:22:32 uuu 06:23:06 Lymee: you should maybe @hoogle more :) 06:23:27 @hoogle [Bool] -> Bool 06:23:29 Prelude and :: [Bool] -> Bool 06:23:29 Prelude or :: [Bool] -> Bool 06:23:29 Data.List and :: [Bool] -> Bool 06:23:55 zzo38: what is you MonadX definition? 06:23:58 *your 06:24:24 class MonadX m a where { fmapX :: MonadX m b => (a -> b) -> m a -> m b; unitX :: a -> m a; joinX :: m (m a) -> m a; }; 06:25:09 :t Data.Set.map 06:25:10 forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b 06:26:35 zzo38: ah right, i think it cannot deduce that the MonadX m b instance is of the same type as you are defining, so therefore cannot deduce the Ord. i don't think it has anything to do with datatype contexts. 06:27:01 O, that is why. 06:27:11 it _does_ have to do with what i said about functional dependencies, but unfortunately you really need to not have those 06:27:20 Why can't it deduce that, though? 06:27:36 (I did remove the functional dependencies; but the error is same either way) 06:27:53 because there could be an instance MonadX Set b completely different from your usual one 06:28:10 If I explicit forall will it work? 06:28:12 one which doesn't require Ord 06:28:27 O, OK. 06:28:50 Now I understand why. 06:29:09 But if there was such an instance, then it would be overlapping. 06:29:21 yeah 06:31:38 Well, there is another instance but it doesn't overlap if Set is not instance of Monad. 06:33:17 Is there a way to specify that an instance is final with respect to certain variables? 06:34:56 If you could do that, then it might work, because instance Ord t => MonadX Set t is final with respect to t meaning there can be no other instances of form MonadX Set t 06:38:03 i don't know 06:44:06 It might work if Ord is the constraint of the class instead of the instance, but that beats the purpose. But you might be able to have that without beating the purpose if you have the & kind I proposed (note I changed my proposals from what it was before) 06:46:44 -!- Taneb has joined. 06:47:26 Then you could have class (c a, c (m a)) => MonadX (c :: * -> &) (m :: * -> *) (a :: *) 06:48:52 Do you expect this to work, if it were implemented? 06:49:29 (That is, c is a class of concrete types, m is a monadic (nonconcrete) type, and a is a concrete type.) 06:50:09 what is &? 06:51:05 & means (x -> &) is the kind for classes of type of kind x 06:51:52 what 06:51:54 (I used [x] at first in my proposal, but after reading some more stuff and other people told me some stuff, I realized [x] is no good and (x -> &) is good) 06:52:48 coppro: Well, if you put c a => ..... then what kind is c supposed to be? That is what I have tried to describe; it can be used in constraints. 06:53:18 C is *->* 06:53:20 err, c 06:53:26 c a is * 06:53:44 No, c has to be a class, I think 06:54:20 a 1-adic typeclass is * -> * 06:54:27 a 2-adic typeclass is * -> * -> * and so on 06:55:30 I suppose you could have classes of kind & by itself which could be used if you are writing a module using functions from a nonexistent module (currently you use hs-boot but this might work too, although I am unsure) 06:55:42 coppro: O, is that how it works? 06:55:58 zzo38: * means "a concrete type" 06:56:01 If I type in :kind Eq in GHCi it is error. 06:56:09 so * -> * is a function taking a type, producing a type 06:56:21 coppro: I know that. 06:56:38 oh wait... 06:56:40 nvm I am dumb 06:56:41 But a class is not a type 06:56:43 yeah 06:56:47 it's 3 am 06:56:49 I am le tired 06:58:58 -!- GreaseMonkey has quit (Quit: The Other Game). 07:00:11 zzo38: i am wondering if a GADT like data HasOrd :: * -> * where HasOrd :: Ord a => a -> HasOrd a might work a bit like your c above 07:00:13 If you allowed more-notation across modules, you could even have it import datatypes that are not defined yet, and use classes to import functions that are not defined yet. And then it would work even without hs-boot 07:00:55 (no guarantees though, there are some problems with combining GADT values i think) 07:01:22 oerjan: I think that only constraints the constructor though. 07:04:16 zzo38: maybe but GADT's _does_ give a little more out than just that 07:04:53 hm argh i guess it only works if you have a particular value to unwrap though 07:05:03 fmapX might be too much for it 07:06:37 huh i wonder if you could define an Ord instance for HasOrd a 07:07:38 instance Ord (HasOrd a) where compare (HasOrd x) (HasOrd y) = compare x y oh hm that won't work 07:08:02 it doesn't say which one to get the instance from 07:09:16 Yes; that is what I was thinking of, why I said it is wrong. 07:09:16 instance Ord (HasOrd a) where compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y 07:09:50 would that be enough 07:10:50 i vaguely recall ghc has trouble identifying types extracted from GADT's even when they should obviously be the same though 07:12:56 But constructors are not types. 07:13:52 !haskell {-# LANGUAGE GADT #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y }; main = print $ (HasOrd "hello" < HasOrd "world") 07:14:01 ​/tmp/input.11423.hs:1:13: unsupported extension: GADT 07:14:07 :( 07:14:26 I think you need "GADTs" 07:14:31 !haskell {-# LANGUAGE GADTs #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y }; main = print $ (HasOrd "hello" < HasOrd "world") 07:14:33 -!- nooga has joined. 07:14:34 At least that is what works on my computer 07:16:30 maf 07:16:59 !haskell {-# LANGUAGE GADTs #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = (let cx = compare x in \(HasOrd y) -> cx y) }; main = print $ (HasOrd "hello" < HasOrd "world") 07:17:21 09:17 =EgoBot> syntax error at /tmp/input.23875 line 1, near "}}" 07:17:32 where the heck is the }} D: 07:17:50 obviously layout-inserted, but _where_? 07:19:01 Don't use layout mode if it confuses you! 07:19:24 Use the explicitly "module" command to turn off layout mode for the entire module 07:19:43 !haskell {-# LANGUAGE GADTs #-} module Main where { data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = (let cx = compare x in \(HasOrd y) -> cx y) }; main = print $ (HasOrd "hello" < HasOrd "world") } 07:19:57 ok that helped 07:20:21 oh darn Ord has superclasses 07:20:30 @src Ord 07:20:31 class (Eq a) => Ord a where 07:20:31 compare :: a -> a -> Ordering 07:20:31 (<), (<=), (>), (>=) :: a -> a -> Bool 07:20:31 max, min :: a -> a -> a 07:20:35 @src Eq 07:20:36 class Eq a where 07:20:36 (==), (/=) :: a -> a -> Bool 07:20:44 wait definitely not Show 07:22:55 !haskell {-# LANGUAGE GADTs #-} module Main where { data HasEq a where { HasEq :: Eq a => a -> HasEq a }; instance Eq (HasEq a) where { (==) (HasEq x) = (let ex = (==) x in \(HasEq y) -> ex y) }; main = print $ (HasEq "hello" == HasEq "world") } 07:23:00 False 07:23:03 yay 07:23:18 !haskell {-# LANGUAGE GADTs #-} module Main where { data HasEq a where { HasEq :: Eq a => a -> HasEq a }; instance Eq (HasEq a) where { (==) (HasEq x) = (let ex = (==) x in \(HasEq y) -> ex y) }; main = print $ (HasEq "hello" == HasEq "hello") } 07:23:23 True 07:23:43 ok so that worked. at least in EgoBot's version. 07:25:41 On the wall, I have the picture of creature with one eye and uncountable tentacles. Not because there is too many to count; it is because the artist draw the picture to make it difficult. 07:25:52 heh 07:27:02 (Nobody has ever been able to count as far as I know. Different people try, and get various different answers, but not certain.) 07:32:16 -!- nooga has quit (Ping timeout: 245 seconds). 07:32:28 elliott, Phantom_Hoover, CakeProphet, Homestuck update. 07:32:40 And Taneb 07:32:44 [S]? 07:33:19 -!- zzo38 has changed nick to Homestuck_update. 07:33:21 You rang? 07:33:22 -!- Homestuck_update has quit (Quit: Homestuck_update). 07:34:54 So... Jail Break and by extension Problem Sleuth take place on LOLAF? 07:35:00 *LOFAF 07:35:56 I don't remember if I read Jail Break 07:42:38 -!- oerjan has quit (Quit: Good night). 07:43:15 elliott, Phantom_Hoover, CakeProphet, Taneb, Homestuck news update. 07:55:31 Just got my timetable for THE NEXT ACADEMIC YEAR 07:55:49 Monday: Further Ma, Further Ma, Latin, , Mathematics 07:56:46 Tuesday: Ancient Hi/ ,Mathematics/ , , Further Ma/Latin, Latin 07:57:08 Wednesday: Tutorial, Further Ma, Mathermatics, , Ancient Hi 07:57:24 I'm guessing Ancient Hi is Ave or something 07:57:47 Thursday: Mathematics, , Ancient Hi, , 07:58:06 Friday: Latin, Ancient Hi, Further Ma, Mathematics, 08:17:46 -!- Taneb has changed nick to TanebAFK. 08:36:58 -!- TanebAFK has changed nick to Taneb. 08:37:07 Didn't actually go AFK at all 08:45:29 -!- sebbu2 has changed nick to sebbu. 08:55:15 -!- nooga has joined. 08:55:48 -!- azaq23 has joined. 09:26:36 whats ancient hi? 09:31:12 "ave" 09:34:17 whats ave? 09:34:31 A greeting in Latin 09:34:43 ahh... so its a latin class 09:34:53 No, ancient history 09:35:07 is that like ave maria? 09:35:19 Perhaps 09:35:24 But more like ave ceasar 09:35:29 maybe i saw ave in asterix comics 09:35:48 i knew it sounded familiar 09:35:54 It was in quite a lot 09:59:48 The Uniquode program +)......)M.()#)."(......)).... does nothing in an intersting way 10:00:28 -!- Taneb has quit (Quit: Goodbye). 10:02:43 -!- nooga has quit (Ping timeout: 252 seconds). 10:08:23 -!- CakeProphet has quit (Ping timeout: 268 seconds). 10:34:51 -!- CakeProphet has joined. 10:34:52 -!- CakeProphet has quit (Changing host). 10:34:52 -!- CakeProphet has joined. 10:43:26 -!- Taneb has joined. 10:48:07 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .). 10:49:31 -!- monqy has quit (Quit: hello). 10:50:25 I think that someone should try to make an esolang contest again 11:13:12 Ah, Toshiba tech support hold music 11:23:07 -!- nooga has joined. 11:35:09 -!- nooga has quit (Ping timeout: 276 seconds). 11:40:14 -!- azaq23 has left ("Leaving."). 11:40:32 -!- azaq23 has joined. 11:43:49 -!- nooga has joined. 11:50:44 -!- Phantom_Hoover has joined. 11:58:48 VBefunge-93 is going well 11:59:50 Déjà vu 12:00:08 -!- GuestIceKovu has joined. 12:00:18 Or it would be going well if I could actually open it 12:00:37 -!- Slereah has quit (Ping timeout: 268 seconds). 12:04:16 huh 12:04:25 Visual like Basic? 12:05:48 -!- GuestIceKovu has changed nick to Slereah. 12:08:13 -!- Taneb has quit (Ping timeout: 260 seconds). 12:12:37 -!- NihilistDandy has quit (Read error: Operation timed out). 12:44:02 -!- nooga has quit (Ping timeout: 264 seconds). 12:49:19 -!- boily has joined. 12:51:20 !delinterp Gregor 12:51:21 ​That interpreter doesn't exist! 12:51:25 >_> 12:51:29 !userinterps 12:51:30 ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph gregor hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg 12:51:36 !delinterp gregor 12:51:36 ​Interpreter gregor deleted. 12:51:52 I'm tired of getting poinged every time somebody types !userinterps :P 12:55:51 What did it do? 12:56:24 Visual like Basic? 12:56:33 Yes, in the sense of not being visual at all. 13:01:53 fizzie: Injected Å¿'s and þ's. 13:03:35 !pansy hello 13:03:36 hello 13:03:46 !pansy OK, what does this one do? 13:03:46 OK, what doezth thith one do? 13:04:17 !pansy Lisps? How many text transformers do we even have? 13:04:17 Lithpth? How many tektht tranthformerth do we even have? 13:06:15 -!- derdon has joined. 13:15:15 -!- hiato has joined. 13:30:50 -!- azaq231 has joined. 13:32:06 -!- azaq23 has quit (Ping timeout: 260 seconds). 13:46:04 -!- IRCReaderBOT has joined. 13:46:06 -!- IRCReaderBOT has quit (Excess Flood). 13:52:07 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:00:10 -!- sllide has joined. 14:01:38 -!- nooga has joined. 14:05:17 -!- derrik has joined. 14:08:21 -!- derrik has quit (Client Quit). 14:08:42 -!- derrik has joined. 14:13:32 -!- derrik has quit (Ping timeout: 245 seconds). 14:17:29 -!- nooga_ has joined. 14:20:06 -!- nooga has quit (Ping timeout: 246 seconds). 14:30:10 -!- copumpkin has joined. 14:31:02 -!- NihilistDandy has joined. 14:34:22 -!- augur has joined. 14:37:42 -!- NihilistDandy has quit (Ping timeout: 240 seconds). 14:41:29 -!- NihilistDandy has joined. 14:45:12 -!- pumpkin has joined. 14:46:01 -!- copumpkin has quit (Ping timeout: 258 seconds). 14:46:42 -!- azaq23 has joined. 14:48:22 -!- azaq231 has quit (Ping timeout: 268 seconds). 14:52:46 -!- NihilistDandy has quit (Ping timeout: 252 seconds). 14:57:23 -!- pumpkin has changed nick to copumpkin. 15:10:57 -!- NihilistDandy has joined. 15:14:39 -!- Guardric has joined. 15:26:27 -!- NihilistDandy has quit (Ping timeout: 245 seconds). 15:47:10 -!- elliott has joined. 15:49:17 helo 15:49:17 elliott: You have 3 new messages. '/msg lambdabot @messages' to read them. 15:49:46 I asked David Morgan-Mar two questions about Chef, though he hasn't answered so far. Is there a possibility someone here could answer them? 15:50:24 http://bpaste.net/show/yruvHzWwMQvfLeLH7XYx/ 15:53:09 I think there are implementations of Chef you could check against 15:53:14 at least to see what everyone else thinks 15:53:37 oh gawd, esolangs.org has that annoying everydns thing 15:55:43 elliott: I don't think so. 15:56:20 huh, really? 15:56:34 looks like there's a perl one which is apparently buggy 15:57:09 derdon: Well, the spec is ambiguous; you have two options: wait until DMM responds, or make up your own interpretation and assure everyone it's standard :) 15:57:52 elliott: I could start with #2 and adopt it after I got the response from the holy David 15:58:31 derdon: You could suggest your interpretations to him; there's a good chance he'll just say "that sounds good" :P 15:59:05 derdon: If you write a test suite for Chef interpreters in Chef everyone will treat your interpretation as word of god, even the language creator. (Proof: Mycology.) 15:59:08 elliott: you see the complete mail in the paste. I already shared my thoughts there 15:59:25 I skimmed it :P 15:59:37 -!- augur has quit (Remote host closed the connection). 16:08:21 "Please read Documentation/SubmittingPatches - you must write a proper commit message, add a Signed-Off-By line, and submit to the linux kernel mailing list, CCing the affected maintainers (ie, not Linus in most cases)." 16:08:22 "can you please point me at some url where I can read that submitting patches documentation? thanks!" 16:08:36 pikhq_: putting the kernel on github: mistake of the century 16:09:13 you could have seen that coming 16:10:12 Maybe Linus is doing it for cheap laughs? 16:10:20 (Note: Probably not actually true.) 16:11:34 https://github.com/torvalds/linux/pull/6 16:11:38 This is literally the stupidest thing ever. 16:15:38 -!- MSleep has changed nick to MDude. 16:16:10 fizzie: Does SCKE have specs? 16:16:14 pikhq_: putting the kernel on github: mistake of the century <-- they did what? 16:16:31 Vorpal: http://github.com/torvalds/linux 16:16:37 elliott: why 16:16:46 kernel.org is down so Linus put it on GitHub. He likes it apart from the issues and pull requests, which he hates. 16:16:55 (Because everyone is submitting crap.) 16:16:57 ah 16:17:02 So, basically he likes it as a nicer gitweb. 16:17:04 can't you turn that off 16:17:25 Vorpal: Issues yes, pull requests apparently not although I swear you used to be able to 16:17:31 He's basically just ignoring them. :p 16:17:35 Obviously, the issues and pull requests he's not going to use at all. 16:17:37 pikhq_: Well, + host. 16:17:40 lkml has that covered. 16:17:41 More like a nicer repo.or.cz :P 16:19:52 -!- boily has quit (Ping timeout: 276 seconds). 16:20:57 -!- boily has joined. 16:21:16 -!- augur has joined. 16:21:26 -!- Guardric has quit (Quit: Leaving). 16:24:39 -!- Guardric has joined. 16:27:07 -!- ais523 has joined. 16:28:35 back 16:28:49 elliott: I guess to Torvalds the pull request is an issue then 16:29:15 was that meant to be a joke 16:29:23 elliott: no a pun. 16:29:31 because oerjan wasn't here 16:29:36 vorpal "puns arent jokes" vorpal 16:29:51 elliott: yes, it was meant to be lame 16:30:11 * derdon chuckled 16:42:23 -!- nooga_ has quit (Ping timeout: 260 seconds). 16:44:09 I like how I have exactly one function left in Shiro that feels like it belongs in a Utils module. 16:44:16 And nowhere else. 16:44:33 elliott: YOU HAVE ABANDONED #plof 16:44:52 Not any more 16:45:06 elliott: what is that function? 16:45:09 or at least, what does it do? 16:45:13 ais523: 16:45:14 -- doesn't really belong here, but oh well 16:45:15 makeFingerprint :: String -> Shiro [(FPIns, Shiro ())] -> Fingerprint 16:45:15 makeFingerprint = Fingerprint . packName 16:45:25 It can't go in Types.hs as a "smart constructor" type thing because packName is in Shiro.Value. 16:45:34 heh, Vorpal is still in #feather-lang 16:45:41 if I make progress on Feather, it'll be announced there first! 16:45:50 I can either move packName and packValues into Shiro.Types and put makeFingerprint in there too, or just deal with it being in Shiro.Value or Shiro.Monad. 16:46:37 ah, hmm 16:46:45 so it's Shiro-related utils, not general utils 16:46:58 That's what Shiro.Utils is :P 16:47:00 Or, was 16:47:06 I eliminated it just minutes before adding makeFingerprint 16:47:16 which I tend to have a bunch of in any nontrivial program 16:47:24 I could make Fingerprint.hs like I used to have 16:47:24 in a functional language 16:47:34 But it'd contain exactly one function 16:47:43 reimplementing things is often faster than looking up the standard library 16:47:44 ais523: That's because you haven't heard of looking for things in the libraries 16:47:53 elliott: I can reimplement them in a few seconds 16:47:58 it takes longer than that to look for them 16:48:04 ais523: So can I, but I have the arcane knowledge known as "knowing why that's idiotic" 16:48:09 Am I a bad person for hating people who drone on about how beautiful Euler's identity is? 16:48:16 (The answer is no.) 16:51:11 -!- NihilistDandy has joined. 16:52:39 -!- FireFly has joined. 16:53:21 euler's identity is not as beautiful as euler's identity for TAU 16:54:49 -!- calamari has joined. 17:01:54 Phantom_Hoover is torturing puppies help 17:06:09 The third puppy just got shot in the head instantly. 17:06:45 Well, OK then. 17:06:48 That's clearly not torture. 17:07:07 ais523: hmm, I think I'll just move packValues/packName/makeFingerprint into Types.hs 17:08:03 This does it, I'm sending Gregor in instead. 17:08:14 Gregor: enjoy 17:09:27 I(0gnirts -- addr)Convert an ascii ip address to a 32 bit address 17:09:35 Really? Just IP? No DNS? 17:09:47 I guess that's why fungot uses an IP. 17:09:48 elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want. 17:09:51 But c'mon, surely everyone uses gethostbyname. 17:11:04 Or, hmm 17:13:52 -!- calamari has quit (Quit: Leaving). 17:14:31 OK, this does it, I'm sending him in. 17:14:57 getaddrinfo 17:15:35 Three volleys of crossbow fire later, he's right next to the first marksman with no injuries. 17:15:37 Gregor: w/e, "modern" mr. 17:16:00 Well, that's certainly a sentence. 17:16:21 U/r like, with it's;;;; unbelievebveable.... 17:16:30 Gregor, OK, you're now lying with a spinal injury just outside crossbow range. 17:16:37 me too 17:16:54 AI_NUMERICSERV 17:16:54 The ServiceName argument must be a port number in string form, and service name lookups will not be attempted. 17:16:54 ah 17:17:14 if I make progress on Feather, it'll be announced there first! <-- yay! 17:17:31 not likely to happen though 17:17:32 note: a false statement implies anything 17:17:38 -!- augur has quit (Remote host closed the connection). 17:17:45 Thank god, I'm in the best place possible for Feather information. 17:17:46 ais523: indeed 17:17:47 Vorpal is in the worst. 17:17:53 Of course, rather than recovering Gregor, everyone just reloads the cages. 17:17:55 Also, Vorpal will never hear about Feather because he'll die right before it's released. 17:18:19 elliott: true, you are younger. Statistically you are likely to die after me. 17:18:46 no 17:18:47 gregor 17:18:48 don't 17:18:53 don't run back towards them 17:18:55 please 17:19:15 he,m 17:19:15 revenge 17:19:16 pupy 17:20:03 On the bright side, the siege is down to two marksmen. 17:20:17 ineiros died of thirst, though. 17:21:21 -!- NihilistDandy has quit (Ping timeout: 260 seconds). 17:21:49 Phantom_Hoover: What, why? 17:21:53 We have like a billion drank. 17:22:21 elliott, because he was in a cage trap after being knocked unconscious. 17:22:30 Oh. 17:22:46 ....oh ffs 17:22:51 I forgot to arm him with an axe. 17:22:59 -!- nooga has joined. 17:24:52 Fortunately, he should live. 17:26:27 Phantom_Hoover: Have you noticed that dorfs get thirsty as soon as they enter the danger room and you turn the lever. 17:26:37 Gregor does, yes. 17:26:58 I suspect this is because, as I discovered to my cost, he is quick to tire. 17:29:34 GREGOR STANDS 17:31:52 I have a distinct suspicion that even in this state he'll be able to break the siege. 17:34:01 But then sleep a lot. 17:34:08 I'm going to test this suspicion. 17:35:35 Siege broken. 17:35:52 Yaaaaaaaaaaaaaay enjoy your year. 17:38:41 I have to say, ssh imposes quite an overhead. Compared rsync over ssh to plain rsync for sending an dvd iso over gbit ethernet. Neither maxes out the network link, but with SSH I get on average 36 MB/s and with just rsync I get on average 50 MB/s. I suspect in the latter case the HDD speed of the target computer limits the performance, quite slow laptop disk, and the file is way to large to fit into RAM 17:38:41 . When just sending raw data with netcat I get much better than that. (110 MB/s) 17:40:34 bbl, going to be offline for a bit 17:41:04 -!- Vorpal has quit (Read error: Connection reset by peer). 17:41:31 -!- augur has joined. 17:47:12 -!- cheater_ has joined. 17:47:17 -!- cheater has quit (Ping timeout: 245 seconds). 17:49:37 -!- Taneb has joined. 17:51:16 Hello! 17:51:46 hi 17:51:53 How goes? 17:52:04 goingly 17:52:28 Well, VBefung-93 is nearing completion! 17:52:41 By which I mean I'm about to uncover the hardest bit 17:55:31 Hmm. That "Upgrade through every version of Windows" thing seems a bit lame. Should've started with DOS 1.0. 18:04:52 Visual Basic isn't that bad for an imperative language 18:05:32 pikhq_: ? 18:05:57 Gregor: Someone started with Windows 1.0 and upgraded it to Windows 7. 18:06:12 In how many steps? 18:06:38 My guess would be that the minimum is 1.0 -> 3.11-or-whatever -> maybe XP? -> 7 18:06:52 Gregor: In as many steps 18:07:00 It's an entertaining video :P 18:07:04 presumably it went through every consumer version 18:07:05 He keeps chastising Microsoft for losing his settings. 18:07:09 just because it could 18:07:14 lol 18:07:18 OK, I guess I want to see it :P 18:07:19 But some settings actually went through. 18:07:22 is there any hardware that all versions of Windows install on? 18:07:24 Through like three point one to the latest. 18:07:29 ais523: Yes, the VM used :P 18:07:39 hmm 18:07:44 Gregor: http://www.youtube.com/watch?v=vPnehDhGa14 18:07:48 the VM had the same virtual hardware all the time, though? 18:07:55 ais523: I believe so; it's not that hard 18:08:00 Ninety-five won't boot with too much RAM 18:08:05 But Vista will run on less 18:08:10 Although maybe not well 18:09:21 Maybe I should have @told elliott and Phantom_Hoover 18:09:33 Although you two probably know by now anyway 18:09:37 Told what? 18:09:46 Homestuck update 18:10:00 What the hell does "dim" actually mean 18:10:09 I know what it does, but what does it mean? 18:10:18 Dimensions? 18:10:21 Yep 18:10:24 Was used to define dimensions of an array 18:10:30 "Dim originally (in BASIC) stood for Dimension, as it was used to define the dimensions of an array. 18:10:30 (The original implementation of BASIC was Dartmouth BASIC, which descended from FORTRAN, where DIMENSION is spelled out.) 18:10:30 Nowadays, Dim is used to define any variable, not just arrays, so its meaning in not intuitive anymore." 18:10:34 Its meaning in not intuitive anymore. 18:10:42 Huh 18:10:48 It's like the word Domino 18:10:50 Then types got added. 18:11:01 But not tuples 18:11:11 At least not in 2005 18:14:19 If I were doing Befunge-98 I would define them 18:15:26 Gregor: 1.0 -> 2.0 -> 3.0 -> 3.1 -> 95 -> 98 -> 98 SE -> 2000 -> XP -> Vista -> 7 18:15:39 No 3.11 Windows for Workgroups??? 18:15:45 No ME? 18:15:53 Nor NT? 18:16:03 Welll, NT was never a "consumer" OS. 18:16:06 Neither was 2000, really. 18:16:27 There was a fork in upgrade paths: he could've done 98 SE -> ME -> XP or 98 SE -> 2000 -> XP. 18:16:30 Maybe he chose 98SE -> 2000 since that's the worst possible 9x->NT switchover :P 18:16:58 Gregor: Me NEVER HAPPENED. 18:17:01 One day I may try to get my old 98 (dunno if SE or not) up working again 18:17:01 2000 was the most consumer of the NT line. 18:17:18 Oh, yeah. He did this from physical media that he actually owned. 18:17:20 It works fine, but I can't use a mouse and it has no internet 18:17:43 Does anyone know a valid IP address that does NOT have any host there? 18:18:02 Define "valid". 18:18:19 Valid. 18:18:27 240.0.0.1 18:18:57 'Sat reserved or something? 18:19:10 Yeah, it's the first address in class E. 18:20:25 Deewiant: In SOCK's I, one interprets the unsigned address as if it were signed, yes? 18:20:52 Would've been pretty awesome if he used Win 3.2. 18:21:49 Though. It may not have supported an upgrade: it *was* the first release in Mandarin with Simplified Chinese. 18:23:31 Also a shame he didn't install Win32s. 18:28:12 elliott: 192.168.whatever numbers aren't on your network 18:28:44 240/8 is only dubiously valid, most routers refuse to believe it exists (which is why the rules haven't been changed to make it allocatable) 18:29:11 elliott: also, arguably, 1.2.3.4; there was a host there for a while, but it was taken down again after it was DDOSed to oblivion 18:29:12 Well, routing is irrelevant 18:29:20 I'm just converting string addresses to integers 18:31:19 Shiro/Fingerprints/SOCK.hs:13:9: 18:31:20 Ambiguous occurrence `accept' 18:31:20 It could refer to either `Shiro.Fingerprints.SOCK.accept', 18:31:21 defined at Shiro/Fingerprints/SOCK.hs:34:1 18:31:23 or `Network.Socket.accept', 18:31:25 imported from Network.Socket at Shiro/Fingerprints/SOCK.hs:7:1-21 18:31:27 This could be problematic 18:33:05 I *just* (like, last week) saw a hotel use 1.1.1.1 for the login-to-our-network autoredirect thingamajikc. 18:33:17 Same, actually 18:34:28 192.0.2.0/24 is sometimes-working "sort-of valid but doesn't have any hosts" network. ("Assigned as "TEST-NET" for use solely in documentation and example source code and should not be used publicly.") 18:35:42 (There are two other TEST-NETs too.) 18:38:20 elliott: just qualify it? 18:39:19 ais523: You should never have clashing names ever. 18:39:25 It should be an error, really. 18:39:33 fizzie: Oi, SCKE specs, where eb they. 18:39:36 be 18:39:50 elliott: It doesn't really have any, I don't think. "Sowwy." 18:40:00 fizzie: Does it have... a list of instructions? 18:40:02 Anything? 18:40:53 Well, H and P. I don't really know how anyone even found out about SCKE. 18:41:00 Maybe I wrote something. 18:41:13 fizzie: What does H does, what does P do 18:41:19 http://packages.python.org/PyFunge/fingerprint/SCKE.html <- good enough. 18:41:51 s/does/do/ 18:41:54 Except only the second one 18:42:12 fizzie: Doesn't P require me to keep my own buffer... 18:42:48 Well, I don't know. It's basically a poll()/select() for input. 18:43:11 http://p.zem.fi/54wi <-- here seems to be how I "documented" them. 18:43:18 (Awaysh-woosh.) 18:43:19 Except select() and poll() block. 18:43:49 Not with a zero timeout. 18:43:54 Oh. 18:43:57 That could work. 18:44:06 Now to find out how to get GHC to do that. 18:44:58 Salivili hippit tupput tappyt appyt tipput hilijalleen. 18:45:06 SCKE support - the most pointless thing ever? (I don't think anyone uses it, not even fungot's "configuration header".) 18:45:07 fizzie: mr president, the austrian national library. we have a lot to say about the mass unemployed, the mass media, so that they are the only feasible way of helping the peace process. 18:46:33 ^modes 18:46:39 ^style 18:46:39 What is that fungot command ... 18:46:39 Available: agora alice c64 ct darwin discworld europarl* ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube 18:46:40 Gregor: mr president, i voted for the katiforis report. then in fnord. the problem with the take-up of new technology and its link to growth and employment. those in sweden who find themselves without any rights and further swell the ranks of the trade unions for the european parliament on strengthening environmental integration within community energy policy. 18:46:42 Ah, style. 18:46:42 fizzie: Um, fungot uses SCKE, no 18:46:43 elliott: mr president, it is there and what took place between the executives on the one hand, the interests of economists converge with those of their own. as everyone knows, this is making it possible to bring the date of their approval and decided that account must be taken into account. 18:46:43 ? 18:46:50 elliott: No, it just loads it. :p 18:46:57 fizzie: I... 18:47:00 ^style wp 18:47:01 Selected style: wp (1/256th of all Wikipedia "Talk:" namespace pages) 18:47:13 fungot: Tell me about neutral viewpoints. 18:47:14 Gregor: " on the internet. i've listened to the radio interview and added some additional links. i can check if one of her parents was a fnord catholic fnord who, according to the fnord 18:47:18 fizzie: I like how it requires you to use an IP while loading and not using a fingerprint that lets you use domains too. 18:47:47 "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed] 18:47:59 elliott: See, it didn't originally use SCKE at all, thus the IP requirement; then I added SCKE as a prelude for that HTTP support (for ^bf/^ul/^def) but that never happened. 18:48:04 (Okay, now really away.) 18:49:00 Are any of the Fungies Unicode-safe? 18:49:22 Gregor: Define Unicode-safe 18:49:30 A Funge program is raw binary data 18:49:34 So is Fungespace 18:49:45 What do you want, a file/console reader that decodes from an encoding? 18:50:04 That would be doable, as a fingerprint, but I don't know of any. 18:50:09 No, I wanted code written in Unicode, so that it wouldn't hop left and right improperly if I happened to start my line with a goat. 18:50:31 I mean, I don't actually /want/ that, I was just curious if any existed. 18:51:21 I think Vorpal's efunge or whatever might do that, but only he thinks the standard can be read in a torturous enough way to make that allowable. 18:51:26 Gregor: If you store it in UTF-thirty-two, everything will work fine. 18:51:29 Or, wait, no, it won't. 18:51:40 But you /could/ provide an alternate fungespace loading that took it like that or any encoding. 18:51:43 Only if \x00 is no-op :P 18:51:46 But it wouldn't be the standard's defined entry-point. 18:51:55 Gregor: Invalid instructions reflect. 18:52:03 There are no non-printable-ASCII instructions by default. 18:52:06 Apart from space. 18:52:13 Right. Womp womp. 18:52:21 elliott: and why do you want to check if there's data without retrieving any? 18:52:26 STOP TELLING ME IT'S A BAD IDEA OMG BLAME FIZZIE 18:58:20 Yeah, the P wasn't really that well thought of a thing. 18:59:46 I've finally started on my write-assembly-in-haskell project, have gotten about as far as "instance MonadFix" 19:01:12 olsner: Making it so that the type system catches e.g. mov in the wrong order? 19:01:17 (Like "mov 0 eax" rather than "mov eax 0".) 19:01:43 btw, all my trouble with my OS not working earlier were either due to nasm miscompiling it, or to some build script malfunction 19:01:55 nasm /miscompiling/? 19:02:17 fizzie: Ouch, SCKE will be hard. 19:02:34 fizzie: Not only do I have to bind to select() with the FFI, but I need to read SOCK's state somehow... 19:02:53 elliott: Really, maybe you should just opt for proper NSCK support. 19:03:03 Is NSCK even a thing? 19:03:11 Probably not. 19:03:23 That's not an answer. 19:04:30 I did promise I'd upgrade fungot to use it if it made sense, but I don't think it really got finalized. Certainly not implemented anywhere. 19:04:31 fizzie: duke university fnord bln fnord fnord fnord fnord supuser fnord 16:34, 9 may 2005 ( utc) 19:04:41 Oh, is it another Vorpal non-fingerprint? 19:04:59 Hmm, how the heck to name these functions to avoid clashes. 19:05:39 I had the same code on both computers, but it compiled into something that worked and something that didn't ... but 'make' said it was up-to-date on both of them... so, obviously nasm miscompiled it on one of my computers :) 19:07:10 nah, probably I switched branches and got the sources updated to an older timestamp, which made the binary newer, or something along those lines 19:07:31 olsner: So are you porting your OS to Haskembly? 19:07:42 not yet, haskembly is only half done 19:07:56 olsner: When it is done. 19:08:06 elliott: When it is done. 19:08:26 cool, maybe I'll resurrect my far-superior project that did the same thing that I abandoned a while back 19:08:33 and copy your entire OS and become Windows and rule the world 19:08:34 do it 19:08:47 olsner: but seriously, you are catching "mov 0 eax" right? otherwise lolling at you 19:09:59 yes, mov (spelled $=) currently only accepts registers as targets 19:10:16 and I don't think I'll add support for assigning to constants anytime soon :P 19:11:41 mov :: (Read src, Write dst) => src -> dst -> ASM () 19:11:42 :p 19:11:53 more or less, yes 19:12:22 (!) :: RWAddr -> Int -> RWAddr... though I guess you want the more fancy addressing modes somehow too 19:14:23 the actual type right now is ($=) :: Expr e => Reg -> e -> Asm () 19:14:26 Something I've occasionally wondered: how does NASM decide whether to encode "mov eax, ebx" using the "mov reg32, reg/mem32" or the "mov reg/mem32, reg32" form of the instruction, and whether there's some way you can influence that. 19:14:40 fizzie: -O influences that IIRC 19:14:44 It just picks the shortest, I believe 19:14:52 But those are equally long. 19:14:55 olsner: Gross + wrong :P 19:14:58 fizzie: Flip a coin 19:15:53 elliott: ok, how so? 19:16:24 olsner: Dunno :P 19:16:26 only because Read is called Expr? 19:16:32 Definitely 19:16:35 And ASM is called Asm 19:16:42 yes, that is silly 19:16:50 What was that OMGMAGIC C compiler that was recently released (or announced as going-to-be-released) as F/OSS? SomethingPath ... 19:18:11 EKOPath? 19:18:20 That's the one! 19:18:21 Thanks 19:20:00 fizzie: You're the SOCK expert; what the fuck is the pf argument to S 19:20:06 Can I just ignore it or do I have to store it for later connects or whatever 19:20:22 pf? protocol family? or something? 19:20:51 yeah but 19:20:54 they have values starting with PF_.... 19:20:59 i only know families starting with AF_......... 19:21:13 It's pretty much the same thing. 19:21:23 It's what my socket man page calls "domain". 19:21:51 so I just use AF_ instead of PF_ ok........ 19:22:30 Then why does it also take 19:22:30 pro:1=tcp 19:22:30 2=udp 19:22:36 Oh, hmm 19:23:06 Yeah, how come it takes both DGRAM/STREAM and tcp/udp 19:23:10 I thought DGRAM/STREAM _was_ tcp vs udp 19:23:51 Not necessarily; the type and protocol are independent. 19:24:11 -!- augur has quit (Remote host closed the connection). 19:24:24 Of course SOCK only does tcp/udp, soo... 19:24:26 iirc since inet only has one of each, you don't have to specify the third value to socket() and can just use 0, but other domains have more variants 19:24:41 fizzie: So I should just barf out if the protocol doesn't match the socket type and otherwise ignore it? 19:24:55 (I'll just assume this SOCK thing works *exactly* like socket()) 19:25:36 elliott: Well, you could also pass the corresponding IPPROTO constants to the socket call, just to make sure. 19:26:07 socket :: Family -> SocketType -> ProtocolNumber -> IO SocketSource 19:26:07 Create a new socket using the given address family, socket type and protocol number. The address family is usually AF_INET, AF_INET6, or AF_UNIX. The socket type is usually Stream or Datagram. The protocol number is usually defaultProtocol. 19:26:19 The only defined ProtocolNumber is defaultProtocol, it's literally just a CInt. 19:26:28 Well, defaultProtocol is probably just fine too. 19:26:32 -!- tiffany|away has changed nick to tiffany. 19:26:37 If they don't define the constants. 19:26:40 -!- impomatic has joined. 19:26:44 Hi :-) 19:26:46 Has anyone got a magnetic core memory board I could borrow? 19:27:15 elliott: what is it you're actually trying to do? 19:27:27 fizzie: God, can you join #haskell and apologise and tell them to direct all such questions to you? 19:27:36 bos: code haskell lol 19:29:03 I don't think I want to join a channel as scary as #haskell; plus typing on this phone is sorta too slow. 19:29:17 olsner: So will your DSL let me say "eax $= (ebx*eax)/ecx" and have it expand out? :p 19:29:41 elliott: I hope it will 19:29:43 -!- augur has joined. 19:30:18 olsner: So will it provide register-allocated variables that spill over to the stack? :-P 19:30:21 "x <- var" 19:30:33 i see. i wonder why such an API. 19:30:33 bos: It's old and not very well thought-out; the designer admits as much :) 19:30:36 elliott: so why implement it? 19:30:38 fizzie: Help, I can't answer. 19:30:43 bos: the world runs on legacy systems 19:30:45 oh, that expression example was a bit more complicated than I bothered reading 19:30:45 Thanks sbrg 19:31:18 sbrg: but why would someone want to implement a legacy API in haskell? 19:31:20 I don't think it will do anything that requires temporaries actually 19:31:20 noooooooooo 19:31:36 olsner: What if you told that arithmetic operation which variable to clobber :P 19:32:35 -!- zzo38 has joined. 19:32:44 elliott: Just tell them it's for this COBOL system at a bank, and the legacy API is needed for the older parts to talk to the new code. (On second thought, don't.) 19:32:49 I think I figured out how to make up type level natural numbers by type families. 19:33:19 data TypeZero; data TypeSucc t; 19:33:26 that's not a type family 19:33:33 elliott: sure, you could just build a haskell function that takes some number of registers it needs ... but I imagine it to be a bit hard to build that into any random expression? 19:33:52 data family X n :: *; data instance X TypeZero = Z Int; data instance X (TypeSucc n) = S (X n) (X n); 19:34:04 type family TypePred t :: *; type instance TypePred (TypeSucc t) = t; 19:34:15 but simpler things like eax $= 5*ebx could be rewritten into something with lea 19:34:16 olsner: I meant like (mul a b OhAndYouCanClobberEdx) X-D 19:34:28 See? It is a type family. 19:36:02 zzo38: Well, yes... 19:36:16 And it appears to work; GHCi will know the type of something like S (S (Z 1) (Z 2)) (S (Z 3) (Z 4)) 19:37:38 bos: No. Like I said, the function is wrapped around so that the program being run can use it; my program implements an interface that the program being run utilises. 19:37:38 okay, i'll stop asking about it, since i can't follow your answers. 19:37:40 fizzie: Success 19:37:48 -!- zzo38 has quit (Remote host closed the connection). 19:38:30 -!- Braber01 has joined. 19:39:28 I like how your socket question sidetracked as far as to mentioning COBOL 19:39:32 quick queston what are the f**kf**k equilvents of BrainF**k? 19:40:20 Dunno those languages, do you mean what the brainfuck instructions are in fuckfuck? 19:40:31 http://esoteric.voxelperfect.net/wiki/Fuckfuck has the details. 19:41:53 Anyway, re the earlier protocol thing, I think it might be borderline legal for socket(AF_INET, SOCK_STREAM, 0) to give you a SCTP socket or something; you already create stream SCTP sockets with socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP). 19:42:22 Hmm 19:42:34 Are the values for the IPPROTOs portable? 19:42:48 Of course not. :p 19:43:13 I would expect the "default" stream socket be TCP everywhere though. 19:43:54 -!- Braber01 has quit (Ping timeout: 252 seconds). 19:44:00 They're also somewhat portable in practice, but not guaranteedly. 19:44:25 I think I've seen a naked 6 (or whatever it was) to stand for TCP in some code. 19:44:31 fizzie: It's OK if SCKE's can-read instruction says a closed socket can read, right? 19:45:57 Probably, since the "spec" (if you can call it that) doesn't really say anything about corner cases. 19:47:53 -!- KingOfKarlsruhe has joined. 19:48:00 getprotoent("tcp")->p_proto is a bit more portable than expecting the IPPROTO_TCP constant to be defined, but I don't think Network.Socket exports getprotoent. 19:49:50 I suppose I could get that with the FFI. 19:52:18 fizzie: It sure would be convenient if S took the protocol number directly. 19:53:42 -!- NihilistDandy has joined. 19:56:36 elliott: Perhaps, but since those are not so portable... (It could use the same scheme of "protocol number or 0" though.) 19:56:56 fizzie: Well, I don't care how hard it is for the Funge coders, just for the implementors. There's more of the latter, after all. 19:57:11 A hugely oversaturated market. 19:58:17 There's the whole "the address is on top of the address family on stack" mishap that makes the technically-supported AF_UNIX rather impossible too. 19:58:58 fizzie: Oh, god. 19:59:07 How does rcfunge do it? :P 19:59:37 I don't think it does; it just assumes all addresses are single-cell values. 20:00:34 Not sure what it does to the value in the AF_UNIX case though. 20:00:38 -!- impomatic has left. 20:01:04 Such a meeeeeeeeess 20:01:50 Holy wow, rcfunge's fingerprint mechanism is 20:01:52 Interesting 20:02:03 -!- NihilistDandy has quit (Ping timeout: 246 seconds). 20:02:53 fizzie: rcfunge's sock.c includes code literally byte-identical to scke.c. 20:03:15 It... looks like SOCK includes SCKE, but SCKE exists totalyl separately too with no code reuse??? 20:03:28 o.o 20:06:00 fizzie: So shungot may be working soon :P 20:06:02 elliott: Also it packs the address into a sockaddr_in always, and then just sets the .sin_family field to AF_UNIX if requested. That doesn't really... work. 20:06:08 Nice. 20:07:40 olsner: hmm, I think you want some sort of symbolic expression framework even if you don't offer that fancy stuff 20:07:44 like 20:08:01 readByte :: (Read a) => a -> ASM Word8 20:08:09 you want to be able to implement such a function 20:08:16 -!- oerjan has joined. 20:08:27 so (ASM a) should actually look something like (Writer [AsmStmt] (Symbolic a)) 20:08:44 where Symbolic is an expression language over registers, integers, arithmetic, etc. 20:08:56 and it then gets flattened out to statements 20:09:48 olsner: I guess it could be done simpler but I'm not sure how, but if you can't write "Reg -> Asm Word8" then your monad is really semantically shallow 20:11:55 derdon: Well, the spec is ambiguous; you have two options: wait until DMM responds, or make up your own interpretation and assure everyone it's standard :) 20:12:14 DMM is big on people making up their own interpretations. see: every iwc poll ever 20:12:35 (ok, _nearly_ ever) 20:12:57 olsner: And indeed, "mov" then becomes a lot simpler. 20:13:17 sadly, he is not big on having plenty of time. 20:13:21 olsner: class Read a where peek :: (Bits r) => a -> r (caller chooses size of read by instantiating r) 20:13:49 erm 20:13:52 olsner: class Read a where peek :: (Bits r) => a -> Asm r (caller chooses size of read by instantiating r) 20:13:55 olsner: class (Bits b) => Write a b | a -> b where poke :: a -> b -> Asm () 20:13:56 Then 20:14:04 mov dst src = peek src >>= poke dst 20:14:04 that's not ... very consistent with the usual definition of Read 20:14:10 oerjan: It's a different Read 20:14:25 olsner: I think you can actually do this without any sort of symbolic expression work creeping in, compiling down to exactly what you'd expect 20:14:33 In fact, I think the symbolic thing may simply be a fragment of an ASM statement 20:16:28 I can think of three brainfuck derivatives that I believe are not bad 20:16:39 olsner: Actually that's really cool, because you can implement macros properly 20:16:50 Boolfuck and Bub because they were useful in proving languages Turing-Complete 20:16:51 Instead of needing "weird cpp style macros" and "statement macros" 20:16:59 and Ook! because it was original 20:21:40 :t tell 20:21:41 forall w (m :: * -> *). (MonadWriter w m) => w -> m () 20:22:41 -!- kwertii has joined. 20:23:14 `addquote elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want. 20:23:14 oerjan: i have a proposal for moving israeli settlements so the name may redirect to this page... i agree with fnord. even using the lushootseed name as equivalent to the standard norm 20:23:19 640) elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want. 20:23:23 heh 20:24:05 and it responds with another tempting one. 20:31:13 -!- NihilistDandy has joined. 20:32:17 -!- boily has quit (Ping timeout: 245 seconds). 20:34:36 "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed] 20:34:55 i think that would be a very plausible use of fnord in the original sense 20:35:34 Goodnight 20:35:40 -!- Taneb has quit (Quit: THIRSTY). 20:37:13 -!- augur has quit (Remote host closed the connection). 20:40:36 olsner: My scribblings: http://sprunge.us/ZGhh 20:41:51 olsner: Actually, Expr shouldn't be a data family. It can just be a GADT. 20:42:07 sbrg: but why would someone want to implement a legacy API in haskell? <-- i assume this _is_ a befunge fingerprint we are talking about, any particular reason for not admitting so? :P 20:42:26 *funge-98 20:42:27 oerjan: THEY'D JUDGE ME 20:42:37 oerjan: And I'd NEVER get a function into the network package because "befunge needs it" :P 20:42:45 elliott: YOU MEAN WE'D GET ANOTHER INVASION 20:42:52 THAT TOO 20:43:04 -!- augur has joined. 20:43:05 oh i can see that might be a problem 20:44:10 i _do_ have this feeling #esoteric has become even more haskellish than usual recently 20:45:05 define haskellish 20:45:11 fortunately there is zzo38 to take horrible revenge. 20:45:54 elliott: as in, we may be discussing haskell more often than esolangs 20:46:03 well that's usual 20:46:14 -!- augur has quit (Remote host closed the connection). 20:46:17 ok, but even more than usual 20:51:46 -!- augur has joined. 20:52:20 !help 20:52:21 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 20:53:08 !bf_txtgen http://esolangs.org/wiki/ 20:53:26 -!- Patashu has joined. 20:53:48 !echo Are you there? 20:53:48 Are you there? 20:54:26 !bf_txtgen http://esolangs.org/wiki/ 20:54:44 ​Top %: 0.1 20:55:00 that's ... not encouraging. 20:55:28 Gregor: is it just horribly overworked? 20:55:49 Uhh, not sure what happened there :P 20:55:55 !bf_txtgen hello 20:55:57 !bf_txtgen Hewwo? 20:55:58 ​57 +++++++++++++[>++++++++>+>><<<<-]>.---.+++++++..+++.>---. [197] 20:56:00 ​89 ++++++++++[>+>+++++++>++++++++++><<<<-]>>++.>+.++++++++++++++++++..--------.<---------.<. [628] 20:56:13 heh 20:56:19 What that SHOULD have done is downloaded the page from http://esolangs.org/wiki/ (which may or may not actually work) and generated the text of it. 20:56:23 !bf_txtgen http://www.google.com/ 20:56:26 ​Top %: 0.1 20:56:32 Apparently that doesn't work :P 20:56:33 oh duh :P 20:56:40 ic 20:57:02 !bf_txtgen htsp://esolangs.org/wiki/ 20:57:06 ​207 +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>--.---.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------. [494] 20:58:09 ^def wiki +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,] 20:58:09 Usage: ^def 20:58:15 ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,] 20:58:15 Defined. 20:58:23 ^wiki Brainfuck 20:58:23 http://esolangs.org/wiki/.Brainfuck 20:58:27 oops 20:58:38 ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.,[.,] 20:58:38 Defined. 20:58:42 ^wiki Brainfuck 20:58:42 http://esolangs.org/wiki/Brainfuck 20:59:41 .>-. as the way of printing two t's is not immensely encouraging :P 21:00:17 Well it *is* an evolutionary algorithm. 21:07:00 So it's an optimizing text gen? Interesting 21:08:33 except with EgoBot the optimization tends to get cut short 21:09:58 ^wiki /// 21:09:58 http://esolangs.org/wiki//// 21:10:00 is esolangs.org down? 21:11:38 "You are seeing this message due to the site you are trying to view having its DNS hosted by EveryDNS." 21:11:53 EveryDNS services will be fully discontinued as of September 9th, 2011. 21:11:55 -!- augur has quit (Remote host closed the connection). 21:12:22 D: 21:12:29 esoteric.voxelperfect.net 21:12:55 the EVN address is fine 21:13:04 so presumably it's a DNS issue, especially given the content of the page 21:13:20 rly 21:13:35 That's a very dickish way of handling it. 21:13:36 I guess I'll email the owner of the domain 21:13:52 elliott: pen a strongly-worded note. 21:13:54 "Lawl we're going to MITM you" 21:14:30 Sent an email 21:15:12 -!- tiffany has quit (Ping timeout: 252 seconds). 21:16:05 wat 21:16:14 oerjan: ? 21:16:32 elliott: bad timing on my fungot definition :( 21:16:32 oerjan: i'm not sure. fnord 18:22, 24 july 2005 ( utc) 21:16:51 oerjan: ? 21:16:57 Oh 21:16:59 ^wiki /// 21:17:03 http://esoteric.voxelperfect.net/wiki/Slashes 21:17:08 oerjan: What was the wat though 21:17:09 -!- augur has joined. 21:17:15 elliott: that was the wat 21:17:26 oh 21:18:37 If I put leaq -15(%rip), %rax in my assembly file, GCC (GAS) correctly puts the address 15 bytes before the current IP into %rax. EKOPath, because it's just better, puts leaq 0(%rip), %rax into the .o file, then at link time, finds the appropriate value x such that leaq x(%rip), %rax loads the VALUE -15 into %rax. Making leaq x(%rip), %rax be a fancy way of writing mov $x, %rax for EKOPath. 21:19:07 elliott: that doesn't look good - it means whoever owns the domain isn't answering mail... 21:19:13 Gregor: rewrite it some other way? :P 21:19:15 oerjan: um does it? 21:19:30 oh hm 21:19:33 elliott: I could, but then it would be slower on compilers that aren't retarded ... plus who knows, maybe EKO will still crap all over the new way. 21:19:33 probably spamfiltered 21:19:34 ? 21:19:35 I guess? 21:19:37 elliott: that page says they have sent _several_ notifications before doing this outage stuff 21:19:50 well they could have just not got around to it yet. 21:19:57 "Migrating will only cost a $4.95 migration fee which helps us cover the cost of this new infrastructure, upgraded in preparation for this migration (you will be able to apply this fee to any future purchase made in the next 6 months on DynDNS.com as well)." 21:19:59 haha, what assholes 21:20:06 PAY OR LOSE YOUR SERVICE 21:21:08 isn't 5 dollars cheaper than getting a new dns? 21:21:29 There are several free DNS services. 21:23:03 !bf_txtgen htsp://esoteric.voxelperfect.net/wiki/ 21:23:06 ​293 +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-.-.---.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.-------------------------------------. [567] 21:23:13 -!- tiffany has joined. 21:23:47 ^def wiki bf +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-..----.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.,[.,] 21:23:47 Defined. 21:23:47 Gregor: are they any /good/? 21:23:56 ^wiki Slashes 21:23:56 http://esoteric.voxelperfect.net/wiki/Slashes 21:24:27 -!- azaq23 has quit (Quit: Leaving.). 21:24:56 -!- derdon has quit (Remote host closed the connection). 21:25:02 ais523: I've used the one at afraid.org, and never had any problems with it. I used Granite Canyon a long time ago, and it was fine, but I don't know if it still is. 21:28:01 ais523: changing to esoteric.voxelperfect.net, i see our wiki has some spams on it 21:28:25 oh right, I should use EVN's RSS feed 21:30:04 thanks, I've found them now, deleting... 21:30:47 'twould be great if I could delete spam in one click from my RSS feed reader 21:30:50 elliott: I was gone for a while, but you seem to have been busy 21:31:14 olsner: indeed, i said IMPORTANT THINGS 21:31:41 Gregor: Granite Canyon? 21:32:18 elliott: Upon a quick googlin', looks like they're dead :P 21:32:30 Gregor: RIP 21:32:44 I think destinations should decide their size automatically... also, registers have a size which you can't change - can't for example move a byte into eax without using the explicit sign/zero expand opcode 21:33:08 olsner: I said more important things than that :P 21:33:18 Basically I suspect your current monad can't implement 21:33:30 readByte :: Reg -> Asm Word8 21:33:38 which restricts it a lot and makes the monad much less semantically useful 21:33:40 I read some stuff about symbolic something and then a link to a paste 21:33:43 Then I figured out how to do that and implement it 21:33:59 what is readByte supposed to do? 21:34:08 olsner: Read the byte, at runtime 21:34:17 the byte? which byte? 21:34:20 olsner: The byte in the register 21:34:31 (Assume registers are byte-sized) 21:34:46 -!- monqy has joined. 21:35:09 It has to be -> Asm Byte because you obviously can't implement (readByte >>= f) since the code doesn't "exist" at runtime, but you can do -> Asm Byte which implements all the same things 21:35:10 As shown in my paste 21:35:15 you mean like do { x <- readByte eax; do-stuff-with-x } , where x is magically the value the register had? 21:35:18 You don't really have to do any semantic work at all, it maps directly to your asm structure 21:35:25 olsner: Yes, but it's not magical :) 21:35:37 Then if you have writeByte, a mov reduces to just that 21:35:45 It means you can do a lot more with macros, and your monad is actually semantically meaningful 21:35:49 Rather than just being used for do notation 21:35:56 So then I implemented a scrap of it 21:36:37 -!- AndGregor has joined. 21:37:04 AndGregor: OrGregor 21:38:32 MedianGregor 21:39:00 man this class sure is lame. 21:44:12 elliott: so the general idea is that peek (and other stuff) returns a value describing the source operand, and then you have type families, classes and runtime checking to see if that's possible to combine with the destination operand? 21:46:00 i conclude from the feature list that Uniquode includes Feather as a subset. 21:46:10 haha 21:46:38 also i assume the caste system uses the indian characters. 21:47:16 I mentioned feather in reaction tot he "retroactive self-modification" feature a few days ago and taneb said his approach to it was actually pretty simple?? I forget/dunno how it will work though 21:47:18 olsner: there were no typeclasses necessary 21:47:22 I amended it 21:47:30 and no runtime checking for the destination operation at all, it's handeld in the type system 21:47:43 elliott: hmm, where did you amend it? 21:47:46 the runtime checking was just proving that leaving out unimpelementable things (like (==)) does not cause errors 21:47:59 olsner: next message that pinged you 21:48:11 monqy: feather _is_ pretty simple. it's just incompatible with human brain function, is all. 21:48:36 http://sprunge.us/ZGhh is what I'm reading 21:48:41 olsner: yes 21:48:43 then I corrected it 21:48:45 on IRC 21:48:50 it can just be a simple GADT 21:49:28 right, but it still has type *classes* 21:49:38 a simple GADT and a prehistomorphic prepromorphism, et voila! 21:49:43 wait 21:49:43 olsner: so do you? 21:49:45 *zygo 21:49:56 you'll need a write typeclass too, for when you can write to memory 21:49:59 the typeclasses are really simple 21:50:09 you could eliminate them and still keep the basic idea 21:50:11 I think " olsner: there were no typeclasses necessary" was just supposed to say type families instead of classes 21:50:17 err, right 21:50:32 point is, Expr can be one GADT, no need for families at all 21:50:36 that was a bit confusing, because I saw the type families/GADT comment 21:53:03 what's to prevent you from doing something like { x <- peek eax; mov byte eax ...; mov byte ebx x; } and store the wrong x in ebx? 21:53:07 ah, that tunes.org glitch i saw the other day seems to have been temporary. 21:53:22 i.e. store eax which has now changed 21:53:47 olsner: hmm, ah, that's quite easy to fix 21:53:57 maybe peek should just be internal to your opcodes 21:54:05 no, no 21:54:10 the whole point is that peek is usable by the user 21:54:10 (11.09.04 for some reason does not show as text) 21:54:21 what for? 21:54:23 because it lets you write macros and the like far more expressively 21:54:38 you can get a Byte result out of a macro, and then put it in any register, or memory location, or anything, you desire 21:54:43 rather than having absolutely everythign return ASM () 21:54:48 and passing in the destination 21:54:53 it's much more functional 21:55:47 -!- FireFly has quit (Quit: FireFly). 21:55:52 olsner: anyway, it's easy to fix: registers actually read a type equivalent to (Byte,Ref Bool), one reference per register, that starts out True, and any modifications to a register writes False to the Ref, and you then replace the ref (Ref (Ref Bool) :P) 21:55:58 you just need a Ref type in ASM, so just stick ST on the bottom 21:56:03 the ref is basically just "is this reference still valid" 21:56:36 olsner: but no, yeah, the whole point of this is that you can express peek, and in fact, it doesn't require any more infrastructure than you'll end up writing anyway 21:57:18 why not... mix in parameterised monads and keep track of validity in the type system? 21:57:58 probably not, at the very least I don't think I can successfully combine that with monadfix 21:58:09 olsner: sure, that's more elegant, I'm just saying you can do it without anything extra 21:58:14 I don't see why you need MonadFix 21:58:17 that'd just lead to generating infinite code 21:59:31 but yeah, this is the difference between an assembler that's way more useful than existing ones, and a bunch of glorified print statements :P 22:01:12 well, I use monadfix and recursive do notation to allow forward and backward jumps to labels 22:01:41 hmm, what does that look like? 22:02:10 do you generate all the labels, and then say "here's the label yo" 22:02:17 or do you somehow actually do a backwards reference to the haskell identifier 22:02:28 you write do rec { jmp l; ...; l <- label; } and l gets its future value 22:02:33 right 22:02:42 -!- nooga has quit (Ping timeout: 245 seconds). 22:02:55 hmm, what if you made labels local macros instead... 22:03:02 foo = label $ do { ...; jmp foo; ... } 22:03:07 that might be hard to do purely :P 22:05:34 doesn't need to be pure if it's fun :P 22:06:43 hmm, that might work 22:06:56 (label m) puts m in its internal database of labels, returns the label identifier fo it 22:06:57 for it 22:07:01 yep, that would work olsner 22:07:08 it's just the same as monadfix though basically 22:07:11 because foo would then be of an ASM type 22:07:17 adn you'd need to unpack it at use time 22:07:25 like putting foo somewhere would inline it 22:07:26 yeah 22:07:26 w/e 22:08:08 olsner: i realise my explanation of the peek stuff is rather subpar 22:09:37 is foo here supposed to be a function-like thing where other code would also jmp/call foo and expect it to be included in the program? 22:10:27 It's kind of like a macro :P 22:10:32 But yeah, it's less useful than your recursive do stuff. 22:10:40 anyway, time to sleep 22:18:02 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]). 22:22:40 -!- nooga has joined. 22:24:13 * nooga drunk 22:25:03 how unusual. 22:26:26 i just wanted to read elliott's comment 22:26:46 yep 22:28:39 when was the last time i was here drunk? 22:29:06 * Phantom_Hoover → sleep 22:29:08 -!- Phantom_Hoover has quit (Quit: Leaving). 22:29:56 it's hard to tell 22:30:00 you act like you always are 22:34:41 -!- nooga has quit (Ping timeout: 264 seconds). 23:26:06 -!- ive has joined. 23:35:20 -!- sllide has quit (Read error: Connection reset by peer). 23:41:13 * CakeProphet has been drunk once on #esoteric. 23:41:15 only once. 23:41:25 all of the other stupid shit I say is while completely sober. 23:42:36 -!- copumpkin has quit (Ping timeout: 252 seconds). 23:47:08 ​291977 ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------.+++++++++ 23:47:20 oerjan: congrats 23:48:58 ...wat 23:49:20 ^bf ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------. 23:49:20 XD 23:49:42 I'm surprised the algorithm isn't exponential or whatever 23:50:21 Gregor: are you _sure_ EgoBot's timeout code is working right? :D 23:51:10 oh wait... 23:51:19 http://sprunge.us/gNUi Perhaps the stupidest way of outputting the first 25 numbers in the Fibonacci sequence. 23:52:14 pikhq_: meh, my continuation hack was better 23:52:14 surely there /has/ to be a stupider way than that 23:52:17 with manual stack copying 23:52:28 elliott: Mine is POSIX compliant. 23:52:28 maybe esolangs.org just went up for a moment, and EgoBot has been waiting for all this time :P 23:52:30 Continuations are really ridiculously inefficient for coroutines though :P 23:52:31 OK, that one is pretty stupid 23:52:44 (it seems to down again, but without that dns message) 23:52:50 is that pthreads it's using? or some other posix threading model? 23:53:00 -!- copumpkin has joined. 23:53:10 ais523: POSIX ucontext. It's actually straight-up continuations. 23:53:19 -!- Vorpal has joined. 23:53:28 ah, continuations disguised as threads 23:53:41 (as opposed to continuations implemented using threads, like continuation.i does) 23:53:55 It's not POSIX 2008, though. 23:53:59 (they removed it) 23:54:01 I'm still not sure how you do that, since threads are provably less powerful 23:54:05 But, lol INTERCAL 23:54:12 elliott: spawn a thread, then lock it in an infinite loop 23:54:27 ais523: yes, but you can't rewind a thread 23:54:29 they're more like forks than threads 23:54:31 a continuation has to be callable multiple times 23:54:40 I'm surprised the algorithm isn't exponential or whatever <-- well it doesn't look like it was much optimized 23:54:42 elliott: I just spawn another one 23:54:50 e.g. when it's called once, I make a second before calling the first 23:54:52 hmm 23:54:56 if it's called again, I make a third before calling the second 23:54:59 OK, yeah, that works 23:55:02 fork() is more powerful than threads, though 23:55:14 well, INTERCAL threads are more like fork() 23:55:20 right 23:55:29 only communication's via abstention status 23:55:37 also, you can rewind a thread in INTERCAL 23:55:44 I just didn't 23:56:16 MAYBE DO [...] ... DO GO BACK 23:57:09 elliott: Incidentally, bsnes uses continuations as threads. I'm amazed that manages to work at anything even vaguely resembling a decent speed. 23:57:51 Doesn't it use stack copying 23:58:18 I think it actually just changes the stack pointer.