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 <zzo38> 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 <monqy> what is the line producing the error, and the error itself
00:21:46 <zzo38> 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 <oerjan> zzo38: that sounds like the monomorphism restriction
00:23:09 <zzo38> Ambiguous type variable `m0' in the constraints: (MonadPlus m0) arising from a use of `mzero' at <interactive>:1:33-37 (Monad m0) arising from a use of `return' at <interactive>: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:27 <oerjan> :t (>>= either (const mzero) return)
00:23:28 <lambdabot> forall (m :: * -> *) a a1. (MonadPlus m) => m (Either a1 a) -> m a
00:23:55 <zzo38> 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:24:34 <zzo38> tiffany: Maybe it requires extra cycles retrieving variable "x" and it does not optimize that.
00:25:34 -!- augur has joined.
00:25:41 <zzo38> Yes; it does work if I turn off monomorphism restriction.
00:26:11 -!- ive has joined.
00:26:36 <CakeProphet> the only time I've had to turn off MR is when I had a configuration module with numbers in it.
00:27:54 <oerjan> zzo38: i think the monomorphism restriction is particularly annoying when you are using pointfree definitions such as the above
00:28:14 <oerjan> let f x = x >>= either (const mzero) return would not be hit by it
00:29:10 <zzo38> 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 <oerjan> 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:35 <oerjan> (just guessing on that)
00:30:13 <oerjan> 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 <zzo38> 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 <oerjan> zzo38: you _can_ do that with ghci too i think, a let can take a type signature as well
00:32:22 <oerjan> @let test1 = (>>= either (const mzero) return); test1 :: (MonadPlus m) => m (Either a1 a) -> m a
00:32:39 <oerjan> hm i guess that does not really prove anything
00:32:42 <lambdabot> forall (m :: * -> *) a1 a. (MonadPlus m) => m (Either a1 a) -> m a
00:32:55 <oerjan> but that's the syntax anyway
00:32:57 <zzo38> 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:32 <oerjan> 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 <zzo38> oerjan: I don't care since it can still be turned off using -X or a LANGUAGE pragma
00:34:22 <zzo38> Some people might want monomorphism restriction.
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 <tswett> And it's going to have 376 different commands.
01:59:45 <tswett> Won't that be awesome?
02:00:40 <oerjan> Yes, but is the bicycle included?
02:00:45 <zzo38> What will have 374 different commands?
02:01:02 <tswett> The bicycle won't be included; you'll have to build it yourself.
02:01:19 <tswett> "It" is Smokefly, that game that's still utterly in the planning stage.
02:01:35 * tswett draws the planning stage, and points at it.
02:01:55 <oerjan> even the planning stage is in the planning stage
02:02:12 <zzo38> Any other description than just those things?
02:02:18 <tswett> Precisely. I haven't figured out how I'm going to plan it yet.
02:03:28 <oerjan> > iterate ((`mod`1000).(^2)) 2
02:03:30 <lambdabot> [2,4,16,256,536,296,616,456,936,96,216,656,336,896,816,856,736,696,416,56,1...
02:03:45 <tswett> 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 <oerjan> > iterate ((`mod`1000).(^2)) 8
02:04:05 <lambdabot> [8,64,96,216,656,336,896,816,856,736,696,416,56,136,496,16,256,536,296,616,...
02:04:19 <oerjan> > iterate ((`mod`1000).(^2)) 32
02:04:21 <lambdabot> [32,24,576,776,176,976,576,776,176,976,576,776,176,976,576,776,176,976,576,...
02:05:00 <oerjan> > iterate ((`mod`1000).(^2)) 376
02:05:02 <lambdabot> [376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,37...
02:05:19 <oerjan> i knew there was something about that number
02:05:37 <tswett> That's not the thing about it, though. There's a good reason to have 376 commands.
02:07:27 <tswett> That's a very important prime.
02:08:10 <tswett> It is, you see, the number of printable character keys on a US keyboard.
02:09:20 <coppro> ~!@#$%^&*()_+`1234567890-=qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>? disagrees with you
02:09:37 <tswett> coppro: do you have separate keys for all those?
02:09:50 <coppro> tswett: keys or key combinations
02:10:05 <coppro> a US keyboard has just over 100
02:10:23 <tswett> Those are not all printable character keys.
02:10:32 <coppro> do you mean graphing characters?
02:10:33 <tswett> F6, for example, is not a printable character. Nor is tab.
02:10:41 <oerjan> > [n | n<-[0..999], n*n `mod` 1000 == n]
02:10:49 <tswett> Granted, the number pad has some extras.
02:10:57 <Sgeo> I think F6 might not be a character while Tab is
02:11:26 <oerjan> > [n | n<-[0..9999], n*n `mod` 10000 == n]
02:12:38 <oerjan> i guess it's probably obvious if you do (mod 2^k) and (mod 5^k) separately
02:13:44 <oerjan> n*(n-1) === 0 (mod p^k)
02:14:16 <oerjan> => n === 0 or n===1 (mod p^k)
02:16:03 <oerjan> (using that gcd (n,n-1) == 1 and the modulus is a prime power)
02:18:06 <oerjan> so the 8 then, is for combinations of shift/ctrl/alt or the like?
02:19:20 <tswett> Sgeo: tab is a character, but it's not printable.
02:19:48 <oerjan> it doesn't have a fixed width
02:21:07 <oerjan> > [n | n<-[0..59], n*n `mod` 60 == n] -- i predict 8 elements
02:28:18 -!- Guardric has joined.
02:51:22 <Sgeo> Isn't \n decimal 10?
02:51:41 * Sgeo figured out why Ctrl-Shift-u-A works
02:56:03 <oerjan> Sgeo: istr it may be OS-dependent
02:57:04 <oerjan> also, that it's always one char, even on OS'es that use CRLF
02:57:21 <oerjan> (being converted for text files)
02:59:11 <zzo38> I think \n is always one byte (in C), although it may be converted when reading/writing
03:01:33 <oerjan> !c print("%d\n", '\n'); /* 10 on linux, of course */
03:01:52 <oerjan> !c printf("%d\n", '\n'); /* 10 on linux, of course */
03:02:46 <lambdabot> unexpected end-of-file in string/character literal...
03:03:10 <oerjan> copumpkin: i vaguely thought old MacOS used 13, or something
03:04:32 <Guardric> Can a Turing machine's tape be bounded on one end instead of indefinitely extensible in both directions?
03:05:25 <copumpkin> there's a 1 to 1 correspondence between the integers and the naturals
03:05:40 <pikhq_> It can even be Universal with such a tape.
03:06:09 <Guardric> Can the tape also contain only 0s and 1s and still be universal?
03:06:22 <pikhq_> copumpkin: \n is not always 10.
03:06:40 <pikhq_> copumpkin: C makes no statement about the character set.
03:06:44 <pikhq_> copumpkin: Nor does POSIX.
03:07:18 <pikhq_> Of course, in *practice*, nobody uses anything but ASCII supersets.
03:08:13 <oerjan> http://en.wikipedia.org/wiki/Newline#In_programming_languages
03:08:33 <Guardric> 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 <pikhq_> 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 <oerjan> 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 <oerjan> see boolfuck, which is TC with just 0 and 1
03:12:45 <coppro> pikhq_: C makes a few statements, namely: 1) NUL is 0. 2) 0-9 are consecutive
03:13:28 <Guardric> Yeah, I know about both of those languages, and I actually wrote my own smallfuck interpreter in Java.
03:13:46 <oerjan> smallfuck is not tc though, iirc
03:13:51 <pikhq_> coppro: And that there exist certain characters.
03:13:59 <Guardric> 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 <Guardric> oerjan, I believe smallfuck is Turing-complete because I/O can be memory mapped.
03:16:27 <oerjan> smallfuck has a limited tape, that's why it's not tc
03:17:24 <Guardric> Ah, I see. Have you heard of BitChanger?
03:20:27 <oerjan> it did not leave much of an impression
03:21:36 <oerjan> for ultimate simplicity, see Bitwise Cyclic Tag
03:22:00 <Guardric> It combines the > and @ operators to form the } operator
03:22:10 <pikhq_> Guardric: I/O is not necessary for Turing completeness.
03:22:17 <pikhq_> Brainfuck is TC without . and ,
03:27:19 <Guardric> 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 <oerjan> well yes, assuming you delete the last one instead...
03:33:20 -!- MDude has changed nick to MSleep.
03:34:57 <Guardric> Oh, the output of a BCT program is the sequence of deleted bits?
03:34:59 <oerjan> other minimal stuff for which i'm particularly biased: /// (Slashes), Underload (just the :()^ commands), and brainfuck with 3 unbounded cells.
03:35:39 <oerjan> and then there's Iota and Jot
03:35:59 <oerjan> (and SKI calculus in general)
03:36:02 <Guardric> Awesome, what does 3 unbounded cells for brainfuck mean?
03:36:24 <oerjan> that the tape has just 3 cells, but the cell values are unbounded integers
03:36:44 <Guardric> I would really like to learn how Iota and Jot operate, but unfortunately I cannot comprehend the explanations.
03:36:55 <oerjan> i should also mention minsky machines with 2 registers, which inspired it
03:37:10 <oerjan> all the things i mentioned now are tc
03:37:50 <oerjan> oh and of course fractran.
03:38:37 <oerjan> the 3-cell part? anyhow the proof is in the Collatz function wiki article
03:39:31 <Guardric> What's the difference between Iota and Jot
03:39:43 <oerjan> those are just different encodings of SKI calculus
03:40:15 <Guardric> Do they operate on a tape of binary numbers?
03:40:39 <oerjan> no, they are functions from functions to functions.
03:41:05 <oerjan> or well, what you do is reduce them to minimal form
03:41:53 <oerjan> SKI calculus is again used by encoding lambda calculus in it
03:42:03 <Guardric> How do they compute things then? I thought you need a way to get the output of the calculation
03:42:15 <oerjan> david madore's unlambda page has a nice explanation of stuff
03:42:42 <oerjan> well there are many ways of encoding I/O. lazy-k has one such.
03:43:15 <oerjan> you encode input as a function, apply the program function to it, and get a function which encodes the output
03:44:12 <Guardric> Strange... I can't even begin to understand how it works
03:45:11 <oerjan> 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 <oerjan> bytes are encoded as "church numerals"
03:46:22 <oerjan> lists are encoded as pairs of first element, then rest of list. then you need to encode pairs...
03:46:29 <oerjan> but it all bottoms out in the end.
03:50:11 <Guardric> What do you think is the most minimalistic of these languages? (brainfuck, BCT, Iota, Jot, Underload...)
03:50:23 <Patashu> Depends how you define minimalistic
03:50:39 <Patashu> Since they have 1-2 instructions
03:53:15 <oerjan> /// also needs just 2 ;)
03:54:54 <Guardric> 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 <Guardric> Where output is merely the tape's contents after the machine has terminated
03:55:48 <oerjan> almost certainly. there might even be one already in our Category:Brainfuck derivatives
03:56:20 <Guardric> I've been looking around for days and the closest I've come is BitChanger, and now perhaps BCT
03:56:30 <oerjan> Guardric: um, by memory mapped, you mean that input is just the initial tape, and output is just the final tape?
03:56:54 <oerjan> i think you have just described the usual turing machine model.
03:56:54 <Guardric> Yes, and the instructions are also on the tape initially
03:57:25 <oerjan> well, you can do that too, it's called a universal turing machine
03:58:02 <oerjan> (you have a turing machine which interprets the beginning of its tape as the instructions for any other turing machine)
03:59:14 <lambdabot> ["rain ","rain","rai ","rai","ran ","ran","ra ","ra","rin ","rin","ri ","ri...
03:59:28 <lambdabot> ["rain","rai","ran","ra","rin","ri","rn","r","ain","ai","an","a","in","i","...
04:00:35 <Guardric> oerjan, I have a hard time fully understanding how the Universal Turing machine works from Wikipedia's article
04:00:46 <Guardric> It's mainly the action table that trips me up
04:01:03 <Patashu> it's easy to understand that it CAN work - look at eval() in python for instance
04:02:42 <CakeProphet> !perl /(?{`perl -e "eval {print 2}"`})/ #wheeee
04:04:06 <oerjan> 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 <CakeProphet> I'm guessing there's no perl in the egobot sandbox.
04:05:25 <CakeProphet> !perl /(?{print `perl -e "eval {print 2}"`})/ #wheeee
04:05:41 <Guardric> oerjan, what about a regular Turing machine? What's the difference between the two?
04:06:15 <CakeProphet> 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 <oerjan> 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 <Patashu> a univeral turing machine is just a specifically coded turing machine
04:07:02 <oerjan> by "instruction set", i mean the same thing as an "action table"
04:07:36 <Guardric> Hmm, I don't understand action tables, and what is meant by states
04:07:53 <Patashu> A state determines your current behaviour and which states you'll transistion into next based on what you see
04:07:55 <Guardric> I understand how languages like brainfuck work, but I guess they're a far cry from Turing machines
04:08:06 <oerjan> Guardric: a turing machine has a head, which is in a state, and at a position of the tape
04:08:52 <oerjan> for each possible state, and each possible symbol on the tape, the action table tells the TM what to do next
04:09:24 <oerjan> the action table + state is basically equivalent to bf program + position in program
04:09:43 <Guardric> so there are (# of states) * (# of possible symbols) entries in the action table?
04:10:54 <oerjan> 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 <CakeProphet> except output is meaningless for a turing machine, I believe.
04:11:48 <oerjan> one state per program position, one symbol per cell possibility
04:11:56 <oerjan> ah yes. ignore . and ,
04:12:26 <Guardric> So the bf program pointer and cell pointer define the state?
04:13:21 <Patashu> and the state of every cell
04:13:30 <oerjan> no, the cell pointer is different, that corresponds to tape position
04:13:40 <Guardric> Wait, I mean: Does (current program command + current cell value) = state?
04:13:43 <oerjan> which is basically exactly the same thing for bf as for tm's
04:13:52 <oerjan> no, just current program command
04:14:41 <Guardric> Ugh, sorry I'm not getting this >.<
04:14:48 <oerjan> current program command, current cell value, current cell pointer vs. current state, current tape symbol, current tape position
04:15:48 <Guardric> Well, a bf interpreter knows what to do next if you give it the current command and current tape symbol, right?
04:16:07 <Patashu> yup. it just looks at what the symbol is (and the contents under the tape pointer)
04:16:13 <Patashu> and it's a trivial decision
04:16:48 -!- oklopol has joined.
04:17:16 <Guardric> 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 <Guardric> (Command, current tape symbol) Action
04:18:53 <Guardric> (>, irrelevant) Move cell pointer right
04:19:00 <Guardric> (<, irrelevant) Move cell pointer left
04:19:21 <oerjan> Guardric: note that for a turing machine the action includes what state to go to next
04:19:30 <oerjan> which you'll need for [ and ]
04:19:49 <Patashu> * does care about the cell's letter, it has to turn 0 to 1 and 1 to 0
04:19:53 <Guardric> ([, 0) Jump past matching ] if current cell is 0
04:20:20 <Guardric> ([, 1) Do nothing, meaning just move to the next instruction
04:20:37 <Guardric> (], 1) Jump back to matching [
04:21:02 <oerjan> Guardric: also the action table needs to have different entries for identical commands at different points in the bf program
04:21:35 <Guardric> What do you mean by different points in the bf program
04:21:47 <Patashu> encode every byte of the brainfuck derivative program as a state from 1 to length
04:21:52 <Patashu> every state points towards the next
04:22:01 <Patashu> EXCEPT ]s which point towards the next OR their corresponding ['s number
04:23:40 <Guardric> 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 <Guardric> If I desire a binary tape, that means 15 states are needed?
04:24:35 <oerjan> Guardric: look at the Turing machine page instead, that universal page assumes you already know it
04:25:47 -!- Taneb|Kindle has joined.
04:26:22 <oerjan> hi i thought you'd finished your vacation
04:26:49 <Taneb|Kindle> Yeah but it is early and I don't wat to turn on th computer
04:27:21 <Guardric> Hmm, so if you have @<>[] commands, you need 7 states? 1 for each @<> and 2 for [ and ]?
04:27:44 <oerjan> Guardric: i told you, you need one state for each position in the program
04:28:05 <Guardric> So if the program is 300 commands long, you need 300 states?
04:28:21 <oerjan> although you can probably compress it a bit
04:28:41 <oerjan> since a tm can do things in 1 step that a bf program needs several for
04:28:43 <Guardric> what if the machine doesn't know how long the program is initially?
04:29:14 <oerjan> Guardric: oh the _universal_ tm does not have states dependent on the bf program
04:29:39 <oerjan> a tm encoded directly from the bf program would
04:29:42 <Patashu> think about how the java virtual machine runs a java program without being coded for it
04:31:43 <oerjan> the universal tm would need to encode the states of the tm it simulates in the tape instead
04:32:48 <oerjan> Guardric: a universal tm is essentially an interpreter for tm's
04:33:15 <Guardric> Heh, I don't understand that at all =(
04:33:17 <oerjan> like a java interpreter in java would interpret java programs
04:33:31 <oerjan> Guardric: do you understand how interpreters work, in general?
04:33:50 <Guardric> I'd like to think I do, I've written a smallfuck interpreter in Java today
04:34:06 <oerjan> now let's say you were writing a java interpreter in java
04:36:04 <oerjan> let's say it had a class F, and that the program you wanted to run _also_ had a class F.
04:36:43 <oerjan> 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 <oerjan> 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 <oerjan> it would represent it as something on the tape instead
04:38:20 <oerjan> (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 <Guardric> 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 <Guardric> I think the question I need to ask is: Is is possible to encode a bf or sf program on the tape?
04:40:33 <oerjan> in fact if you have 9 symbols, it's quite easy :P
04:40:39 <oerjan> (1 extra to mark the end)
04:41:25 <Guardric> 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 <oklopol> why not just encode the whole program in that first cell?
04:42:04 <oerjan> Guardric: er, for turing machines you only a _finite_ set of symbols
04:42:22 <oerjan> you cannot encode an arbitrary length in a single cell then
04:42:59 <oerjan> you could write the length in the initial cells in binary, though
04:43:00 <Guardric> Then cells 2 onward contain the program you wish to execute (cell #2 to 2 + n I think)
04:43:33 <oerjan> Guardric: i think it would be easier to have just an end marker, no need to store the length
04:44:24 <Guardric> 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:59 <Taneb|Kindle> 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 <Guardric> After that 0 comes input, the end of which is also marked by a 0
04:45:13 <oklopol> Taneb|Kindle: did you know 1+2=3?
04:46:00 <oklopol> except what if input has 0's :O
04:46:03 <Guardric> so the value in an input cell can be in the range 1 to # of symbols
04:46:34 <oerjan> oklopol: well bf often does eof=0 anyway
04:47:04 <Guardric> Now, after this second 0 is free-roam area for the machine to do its work
04:47:15 <Taneb|Kindle> oerjan, I think I am in need of a swat but I cannot remember why
04:47:22 <oklopol> if it's a ubf, i would'be thought there are a constant 256 symbols
04:48:50 <Guardric> 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:49:57 <oklopol> why are you spoonfeeding him
04:50:21 <Guardric> oerjan, precisely what I was thinking. Now, could you take me through the execution steps?
04:50:43 <zzo38> Do you know how to invent Golf-Haskell?
04:50:46 <Taneb|Kindle> Because spoonfeed is the longest word in the english language with all its letters in reverse alphabetical order
04:50:52 <oklopol> you don't know where the head is
04:50:54 <oerjan> Guardric: there needs to be some temporary storage as well
04:51:37 <oerjan> Guardric: or wait hm maybe not
04:51:52 <oklopol> Taneb|Kindle: are you sure
04:52:05 <zzo38> Taneb|Kindle: O, I didn't notice that. But now I can see it is in fact in reverse alphabetical order
04:52:27 <zzo38> It is nine letter long but I do not know if there is longer word having that property.
04:52:32 <oerjan> 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:53:17 <Guardric> oerjan, let's say the tape starts out that way, 0014100
04:54:47 <oklopol> hmm well true, i'm not sure
04:55:08 <oklopol> better have some elbow room, since bf is insane
04:55:29 <oklopol> although you could also use the zeros after the tape...
04:56:44 <Guardric> oerjan, if the number of symbols is finite, would that mean that the amount of accessible cells is finite?
04:56:58 <Patashu> [>] will eventually reach every cell
04:57:56 <oklopol> :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
04:58:26 <Guardric> but if you use the first cell to hold the value of the current cell pointer...?
04:58:33 <Taneb|Kindle> Patashu yours would stop on the first zero cell
04:58:35 <oerjan> Guardric: no you don't.
04:58:55 <oerjan> you use a 0 _in_ the tape at the spot for the current cell pointer
04:59:13 <oerjan> and then similarly as with input, add 1 to the actual cell values
05:00:18 -!- Taneb|Kindle has quit (Quit: Kindle browser needs multiple tabs).
05:00:19 <oerjan> Guardric: you said input could be from 1 to max symbols
05:00:31 <oerjan> so it's reasonable to encode bf tape the same way
05:00:33 <Guardric> Insert a 0 after the current command cell?
05:01:40 <Guardric> oerjan, I think I'm getting what you're saying... Keep going with the execution
05:01:56 <Guardric> so first you'd shift everything over two cells?
05:02:06 <oerjan> 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 <oerjan> i think that should be enough room for things
05:02:44 -!- ive has quit (Quit: leaving).
05:03:25 <oerjan> so we start at the first 0. go right, look at the first command. it's a +.
05:04:13 <oerjan> turn it into 0. go left, turn that into 1 (+) instead.
05:05:09 <oerjan> 10410000 and we still need to actually _perform_ the +. go right to the fourth 0, which represents the bf tape pointer.
05:06:38 <oerjan> 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:07:07 <oerjan> (the 2 represents a bf 1 cell)
05:07:32 <oerjan> go left again to the first 0. you are now ready to perform another command.
05:08:11 <oerjan> 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 <oerjan> 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:10:31 <oerjan> 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 <oerjan> 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:27 -!- Guardric has joined.
05:11:45 <oerjan> Guardric: what was the last line you saw?
05:11:46 <Guardric> I got disconnected for some reason
05:11:59 <Guardric> go left again to the first 0. you are now ready to perform another command.
05:12:24 <Sgeo> <oerjan> as you can see this is verbose, even though i've already summarized many steps of seeking to 0's
05:12:24 <Sgeo> * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has joined #esoteric
05:12:24 <Sgeo> * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has left #esoteric
05:12:24 <Sgeo> <oerjan> 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 <Sgeo> <oerjan> 140100200
05:12:26 <Sgeo> <oerjan> 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 <Sgeo> <oerjan> at which point we detect that the first 0 has reached the second, so the program ends.
05:12:31 <Sgeo> * Guardric has quit (*.net *.split)
05:12:33 <Sgeo> * olsner has quit (*.net *.split)
05:12:48 * Sgeo feels no guilt
05:12:56 -!- olsner has joined.
05:13:04 <oerjan> Guardric: on irc, netsplits happen, that's just life.
05:13:46 <Guardric> Ah ok, well thank you very much for stepping through that simple program
05:14:34 <oerjan> 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 <Guardric> 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 <oerjan> Guardric: well as i said a tm has finite number of symbols anyway
05:15:52 <oerjan> but in any case, if you want to simulate 256 symbols with a binary tm, just write them down in binary
05:16:37 <oerjan> tm's actually handle that easier than bf, since they can always remember which bit they're at
05:18:14 <oerjan> 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:20:24 <oerjan> but having to shift the entire tape to handle arbitrary data is a known problem for bf with bounded cells anyway
05:20:36 <oerjan> (when programming _in_ bf)
05:24:40 -!- Taneb has joined.
05:26:27 <Taneb> Would it be incorrect to understand a von Neumman machine as a combination of a quine and a self interpreter?
05:27:19 <oerjan> applies to life in general...
05:38:51 <Lymee> Life's programmer is horrible. I mean, it uses a cheating quine! And that's horrible!
05:40:43 <zzo38> Why does Haskell sometimes change the type of a function I have defined and specified the type?
05:40:55 <EgoBot> β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 <EgoBot> Fuu toodey is a looffely dey. Bork Bork Bork! Bork Bork Bork! Bork Bork Bork!
05:41:26 <Guardric> oerjan, thanks for all your help, I will be back tomorrow probably =)
05:41:55 -!- Guardric has quit (Quit: Leaving).
05:42:07 <zzo38> Something else is also wrong; perhaps I am doing something wrong.
05:42:39 <zzo38> I tried to define "instance Ord t => MonadX Set t" but it says it cannot deduce (Ord b)
05:43:06 <oerjan> hm, needs more context
05:44:00 <Taneb> Don't you need a ->?
05:44:08 <oerjan> i would guess you are somehow mixing MonadX Set t 's with MonadX Set b
05:44:14 <zzo38> 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 <oerjan> Taneb: not if MonadX is a multiparameter typeclass
05:44:51 <Taneb> I have much to learn
05:45:00 <zzo38> oerjan: The error is on this definition: fmapX = Data.Set.map; (it doesn't mention "b" at all.)
05:46:12 <oerjan> 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 <zzo38> O, that is what is wrong. How do you make functional dependency?
05:46:42 <zzo38> What does functional dependency mean?
05:46:51 <oerjan> class MonadX m t | m -> t where
05:48:05 <zzo38> No, I still get the same problem, even after I added the functional dependency and the LANGUAGE pragmas FunctionalDependencies and UndecidableInstances.
05:48:07 <oerjan> er, m might not be the best letter there, but anyhow.
05:48:25 <zzo38> What does functional dependencies means anyways?
05:48:49 <zzo38> oerjan: Whatever; as long as it is not the same as the other letter it should work
05:50:59 <oerjan> 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 <zzo38> But the "B" in this example is a variable.
05:52:05 <oerjan> yes, but the point is that b could be _any_ type that happened to have such an instance
05:52:42 <oerjan> and without a functional dependency it cannot deduce that it's the same as you want
05:53:17 <zzo38> But the same error even with functional dependency
05:53:34 <oerjan> 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:54:17 <oerjan> wait you said it changed the type to Monad m => m b -> (b -> m a) -> m a
05:54:29 <oerjan> that's weird, must be something different
05:54:49 <zzo38> 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 <oerjan> zzo38: do you happen to have an instance Monad m => MonadX m b ? that would mess up things
05:55:27 <oerjan> and perhaps in that way
05:55:28 <Taneb> Going to learn some more Haskell
05:55:35 <Taneb> Cos I is Haskell newb
05:55:48 <zzo38> 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 <monqy> how much do you know
05:56:13 <Taneb> I'mupt to guards in LYAH
05:57:12 <Taneb> Actually I am just past tha
05:57:25 <Taneb> I am up to where IIRC
05:57:30 <zzo38> I wrote the Constantinople implementation in Haskell; and you can print it out if you have TeX.
05:57:53 <zzo38> It isn't best because it is first Haskell program I wrote.
05:58:06 <oerjan> zzo38: you cannot use such an instance unless you have OverlappingInstances set, i believe.
05:59:04 <zzo38> 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 <zzo38> (I didn't know about lenses at the time I wrote that program.)
06:00:08 <zzo38> OK, I will try OverlappingInstances
06:00:19 <lambdabot> forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b
06:00:27 <zzo38> No, it is still the same error.
06:00:42 <oerjan> zzo38: it's probably that b ^ it cannot deduce the Ord for
06:02:01 <zzo38> But I thought there is an instance for Ord x => Ord (Set x)
06:02:39 <oerjan> or wait hm, there's a b on your bindX too. i'm confused.
06:05:39 <lambdabot> Overlapping instances for GHC.Show.Show
06:05:53 <oerjan> 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 <Lymee> > S.map (\x -> floor $ x / 2) (S.Set [1,2,3,4,5,6])
06:06:04 <lambdabot> Not in scope: data constructor `S.Set'
06:06:15 <oerjan> although that has its own subtleties
06:07:27 <oerjan> > S.map (\x -> floor $ x / 2) (S.fromList [1,2,3,4,5,6])
06:08:08 <lambdabot> forall a. (Integral a) => a -> a -> a
06:08:54 <Lymee> > S.map $ floor . div 2 $ S.fromList [0..6]
06:08:56 <lambdabot> No instance for (GHC.Real.RealFrac (Data.Set.Set t))
06:09:03 <Lymee> > S.map $ floor . (flip div) 2 $ S.fromList [0..6]
06:09:04 <lambdabot> No instance for (GHC.Real.RealFrac (Data.Set.Set t))
06:09:18 <Lymee> > S.map (floor . /2) $ S.fromList [0..6]
06:09:19 <lambdabot> <no location info>: parse error on input `/'
06:09:23 <Lymee> > S.map (floor . (/2)) $ S.fromList [0..6]
06:09:25 <oerjan> > S.map (`div` 2) $ S.fromList [0..6] -- cough
06:09:40 <Lymee> > S.map (floor . (/2)) $ S.fromList [0..]
06:10:22 <oerjan> i think it may be a tree structure, possibly
06:11:03 <oerjan> Taneb: but first, recursion!
06:12:24 <zzo38> oerjan: bindX is not a class member though; the class members are unitX, joinX, and fmapX. bindX is outside.
06:13:05 <zzo38> 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 <zzo38> Maybe I cannot fix this program until they fix that problem in GHC.
06:14:57 <Lymee> @pl \x foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:13 <Lymee> @pl \x foldr (---) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:18 <Lymee> @pl \x foldr (~) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:27 <Lymee> @pl \x -> foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:28 <lambdabot> foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)
06:15:43 -!- GreaseMonkey has joined.
06:16:29 <Lymee> > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500]
06:16:31 <lambdabot> Couldn't match expected type `GHC.Bool.Bool'
06:17:16 <zzo38> 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 <Lymee> > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) False (enumFromTo 2)) $ [0..500]
06:18:16 <lambdabot> Couldn't match expected type `GHC.Bool.Bool'
06:18:33 <Lymee> @pl \x -> foldr (||) False $ map (\y -> (x `mod` y) == 0) [2..x]
06:18:34 <lambdabot> foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)
06:18:46 <Lymee> > filter (foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500]
06:18:48 <lambdabot> [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 <zzo38> 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 <oerjan> 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 <oerjan> because it works so badly
06:20:02 <zzo38> oerjan: I have read that they have decided to remove it.
06:20:36 <zzo38> 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:48 <lambdabot> forall a. (a -> Bool) -> [a] -> Bool
06:23:06 <oerjan> Lymee: you should maybe @hoogle more :)
06:23:27 <oerjan> @hoogle [Bool] -> Bool
06:23:55 <oerjan> zzo38: what is you MonadX definition?
06:24:24 <zzo38> 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:10 <lambdabot> forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b
06:26:35 <oerjan> 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:11 <oerjan> it _does_ have to do with what i said about functional dependencies, but unfortunately you really need to not have those
06:27:20 <zzo38> Why can't it deduce that, though?
06:27:36 <zzo38> (I did remove the functional dependencies; but the error is same either way)
06:27:53 <oerjan> because there could be an instance MonadX Set b completely different from your usual one
06:28:10 <zzo38> If I explicit forall will it work?
06:28:12 <oerjan> one which doesn't require Ord
06:28:50 <zzo38> Now I understand why.
06:29:09 <zzo38> But if there was such an instance, then it would be overlapping.
06:31:38 <zzo38> Well, there is another instance but it doesn't overlap if Set is not instance of Monad.
06:33:17 <zzo38> Is there a way to specify that an instance is final with respect to certain variables?
06:34:56 <zzo38> 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:44:06 <zzo38> 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 <zzo38> Then you could have class (c a, c (m a)) => MonadX (c :: * -> &) (m :: * -> *) (a :: *)
06:48:52 <zzo38> Do you expect this to work, if it were implemented?
06:49:29 <zzo38> (That is, c is a class of concrete types, m is a monadic (nonconcrete) type, and a is a concrete type.)
06:51:05 <zzo38> & means (x -> &) is the kind for classes of type of kind x
06:51:54 <zzo38> (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 <zzo38> 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:44 <zzo38> No, c has to be a class, I think
06:54:20 <coppro> a 1-adic typeclass is * -> *
06:54:27 <coppro> a 2-adic typeclass is * -> * -> * and so on
06:55:30 <zzo38> 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 <zzo38> coppro: O, is that how it works?
06:55:58 <coppro> zzo38: * means "a concrete type"
06:56:01 <zzo38> If I type in :kind Eq in GHCi it is error.
06:56:09 <coppro> so * -> * is a function taking a type, producing a type
06:56:21 <zzo38> coppro: I know that.
06:56:41 <zzo38> But a class is not a type
06:58:58 -!- GreaseMonkey has quit (Quit: The Other Game).
07:00:11 <oerjan> 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 <zzo38> 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 <oerjan> (no guarantees though, there are some problems with combining GADT values i think)
07:01:22 <zzo38> oerjan: I think that only constraints the constructor though.
07:04:16 <oerjan> zzo38: maybe but GADT's _does_ give a little more out than just that
07:04:53 <oerjan> hm argh i guess it only works if you have a particular value to unwrap though
07:05:03 <oerjan> fmapX might be too much for it
07:06:37 <oerjan> huh i wonder if you could define an Ord instance for HasOrd a
07:07:38 <oerjan> instance Ord (HasOrd a) where compare (HasOrd x) (HasOrd y) = compare x y oh hm that won't work
07:08:02 <oerjan> it doesn't say which one to get the instance from
07:09:16 <zzo38> Yes; that is what I was thinking of, why I said it is wrong.
07:09:16 <oerjan> instance Ord (HasOrd a) where compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y
07:10:50 <oerjan> i vaguely recall ghc has trouble identifying types extracted from GADT's even when they should obviously be the same though
07:12:56 <zzo38> But constructors are not types.
07:13:52 <oerjan> !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 <EgoBot> β/tmp/input.11423.hs:1:13: unsupported extension: GADT
07:14:26 <zzo38> I think you need "GADTs"
07:14:31 <oerjan> !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 <zzo38> At least that is what works on my computer
07:16:59 <oerjan> !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 <oerjan> 09:17 =EgoBot> syntax error at /tmp/input.23875 line 1, near "}}"
07:17:32 <oerjan> where the heck is the }} D:
07:17:50 <oerjan> obviously layout-inserted, but _where_?
07:19:01 <zzo38> Don't use layout mode if it confuses you!
07:19:24 <zzo38> Use the explicitly "module" command to turn off layout mode for the entire module
07:19:43 <oerjan> !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:20:21 <oerjan> oh darn Ord has superclasses
07:20:31 <lambdabot> (<), (<=), (>), (>=) :: a -> a -> Bool
07:20:44 <oerjan> wait definitely not Show
07:22:55 <oerjan> !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:18 <oerjan> !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:43 <oerjan> ok so that worked. at least in EgoBot's version.
07:25:41 <zzo38> 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:27:02 <zzo38> (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 <Sgeo> elliott, Phantom_Hoover, CakeProphet, Homestuck update.
07:33:19 -!- zzo38 has changed nick to Homestuck_update.
07:33:22 -!- Homestuck_update has quit (Quit: Homestuck_update).
07:34:54 <Taneb> So... Jail Break and by extension Problem Sleuth take place on LOLAF?
07:35:56 <Sgeo> I don't remember if I read Jail Break
07:42:38 -!- oerjan has quit (Quit: Good night).
07:43:15 <Sgeo> elliott, Phantom_Hoover, CakeProphet, Taneb, Homestuck news update.
07:55:31 <Taneb> Just got my timetable for THE NEXT ACADEMIC YEAR
07:55:49 <Taneb> Monday: Further Ma, Further Ma, Latin, , Mathematics
07:56:46 <Taneb> Tuesday: Ancient Hi/ ,Mathematics/ , , Further Ma/Latin, Latin
07:57:08 <Taneb> Wednesday: Tutorial, Further Ma, Mathermatics, , Ancient Hi
07:57:24 <Taneb> I'm guessing Ancient Hi is Ave or something
07:57:47 <Taneb> Thursday: Mathematics, , Ancient Hi, ,
07:58:06 <Taneb> 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 <Taneb> 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:34:31 <Taneb> A greeting in Latin
09:34:53 <Taneb> No, ancient history
09:35:24 <Taneb> But more like ave ceasar
09:35:29 <itidus20> maybe i saw ave in asterix comics
09:35:54 <Taneb> It was in quite a lot
09:59:48 <Taneb> 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 <Taneb> I think that someone should try to make an esolang contest again
11:13:12 <Taneb> 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 <Taneb> VBefunge-93 is going well
12:00:08 -!- GuestIceKovu has joined.
12:00:18 <Taneb> Or it would be going well if I could actually open it
12:00:37 -!- Slereah has quit (Ping timeout: 268 seconds).
12:04:25 <nooga> 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:21 <EgoBot> βThat interpreter doesn't exist!
12:51:30 <EgoBot> β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 <EgoBot> βInterpreter gregor deleted.
12:51:52 <Gregor> I'm tired of getting poinged every time somebody types !userinterps :P
13:01:53 <Gregor> fizzie: Injected ΕΏ's and ΓΎ's.
13:03:46 <EgoBot> OK, what doezth thith one do?
13:04:17 <Phantom_Hoover> !pansy Lisps? How many text transformers do we even have?
13:04:17 <EgoBot> 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 <lambdabot> elliott: You have 3 new messages. '/msg lambdabot @messages' to read them.
15:49:46 <derdon> 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 <derdon> http://bpaste.net/show/yruvHzWwMQvfLeLH7XYx/
15:53:09 <elliott> I think there are implementations of Chef you could check against
15:53:14 <elliott> at least to see what everyone else thinks
15:53:37 <elliott> oh gawd, esolangs.org has that annoying everydns thing
15:55:43 <derdon> elliott: I don't think so.
15:56:34 <elliott> looks like there's a perl one which is apparently buggy
15:57:09 <elliott> 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 <derdon> elliott: I could start with #2 and adopt it after I got the response from the holy David
15:58:31 <elliott> derdon: You could suggest your interpretations to him; there's a good chance he'll just say "that sounds good" :P
15:59:05 <elliott> 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 <derdon> elliott: you see the complete mail in the paste. I already shared my thoughts there
15:59:37 -!- augur has quit (Remote host closed the connection).
16:08:21 <elliott> "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 <elliott> "can you please point me at some url where I can read that submitting patches documentation? thanks!"
16:08:36 <elliott> pikhq_: putting the kernel on github: mistake of the century
16:09:13 <derdon> you could have seen that coming
16:10:12 <elliott> Maybe Linus is doing it for cheap laughs?
16:10:20 <elliott> (Note: Probably not actually true.)
16:11:34 <elliott> https://github.com/torvalds/linux/pull/6
16:11:38 <elliott> This is literally the stupidest thing ever.
16:15:38 -!- MSleep has changed nick to MDude.
16:16:10 <elliott> fizzie: Does SCKE have specs?
16:16:14 <Vorpal> <elliott> pikhq_: putting the kernel on github: mistake of the century <-- they did what?
16:16:31 <elliott> Vorpal: http://github.com/torvalds/linux
16:16:46 <elliott> 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 <elliott> (Because everyone is submitting crap.)
16:17:02 <pikhq_> So, basically he likes it as a nicer gitweb.
16:17:04 <Vorpal> can't you turn that off
16:17:25 <elliott> Vorpal: Issues yes, pull requests apparently not although I swear you used to be able to
16:17:31 <elliott> He's basically just ignoring them. :p
16:17:35 <pikhq_> Obviously, the issues and pull requests he's not going to use at all.
16:17:40 <pikhq_> lkml has that covered.
16:17:41 <elliott> 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:49 <Vorpal> elliott: I guess to Torvalds the pull request is an issue then
16:29:15 <elliott> was that meant to be a joke
16:29:31 <Vorpal> because oerjan wasn't here
16:29:36 <elliott> vorpal "puns arent jokes" vorpal
16:29:51 <Vorpal> elliott: yes, it was meant to be lame
16:42:23 -!- nooga_ has quit (Ping timeout: 260 seconds).
16:44:09 <elliott> I like how I have exactly one function left in Shiro that feels like it belongs in a Utils module.
16:44:33 <Gregor> elliott: YOU HAVE ABANDONED #plof
16:45:06 <ais523> elliott: what is that function?
16:45:09 <ais523> or at least, what does it do?
16:45:14 <elliott> -- doesn't really belong here, but oh well
16:45:15 <elliott> makeFingerprint :: String -> Shiro [(FPIns, Shiro ())] -> Fingerprint
16:45:15 <elliott> makeFingerprint = Fingerprint . packName
16:45:25 <elliott> It can't go in Types.hs as a "smart constructor" type thing because packName is in Shiro.Value.
16:45:34 <ais523> heh, Vorpal is still in #feather-lang
16:45:41 <ais523> if I make progress on Feather, it'll be announced there first!
16:45:50 <elliott> 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:45 <ais523> so it's Shiro-related utils, not general utils
16:46:58 <elliott> That's what Shiro.Utils is :P
16:47:06 <elliott> I eliminated it just minutes before adding makeFingerprint
16:47:16 <ais523> which I tend to have a bunch of in any nontrivial program
16:47:24 <elliott> I could make Fingerprint.hs like I used to have
16:47:24 <ais523> in a functional language
16:47:34 <elliott> But it'd contain exactly one function
16:47:43 <ais523> reimplementing things is often faster than looking up the standard library
16:47:44 <elliott> ais523: That's because you haven't heard of looking for things in the libraries
16:47:53 <ais523> elliott: I can reimplement them in a few seconds
16:47:58 <ais523> it takes longer than that to look for them
16:48:04 <elliott> ais523: So can I, but I have the arcane knowledge known as "knowing why that's idiotic"
16:48:09 <Phantom_Hoover> Am I a bad person for hating people who drone on about how beautiful Euler's identity is?
16:51:11 -!- NihilistDandy has joined.
16:52:39 -!- FireFly has joined.
16:53:21 <cheater> euler's identity is not as beautiful as euler's identity for TAU
16:54:49 -!- calamari has joined.
17:01:54 <elliott> Phantom_Hoover is torturing puppies help
17:06:48 <Gregor> That's clearly not torture.
17:07:07 <elliott> ais523: hmm, I think I'll just move packValues/packName/makeFingerprint into Types.hs
17:09:27 <elliott> I(0gnirts -- addr)Convert an ascii ip address to a 32 bit address
17:09:47 <elliott> I guess that's why fungot uses an IP.
17:09:48 <fungot> 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 <elliott> But c'mon, surely everyone uses gethostbyname.
17:13:52 -!- calamari has quit (Quit: Leaving).
17:15:35 <Phantom_Hoover> Three volleys of crossbow fire later, he's right next to the first marksman with no injuries.
17:16:00 <Gregor> Well, that's certainly a sentence.
17:16:21 <elliott> U/r like, with it's;;;; unbelievebveable....
17:16:30 <Phantom_Hoover> Gregor, OK, you're now lying with a spinal injury just outside crossbow range.
17:16:54 <elliott> The ServiceName argument must be a port number in string form, and service name lookups will not be attempted.
17:17:14 <Vorpal> <ais523> if I make progress on Feather, it'll be announced there first! <-- yay!
17:17:31 <Vorpal> not likely to happen though
17:17:32 <ais523> note: a false statement implies anything
17:17:38 -!- augur has quit (Remote host closed the connection).
17:17:45 <elliott> Thank god, I'm in the best place possible for Feather information.
17:17:53 <Phantom_Hoover> Of course, rather than recovering Gregor, everyone just reloads the cages.
17:17:55 <elliott> Also, Vorpal will never hear about Feather because he'll die right before it's released.
17:18:19 <Vorpal> elliott: true, you are younger. Statistically you are likely to die after me.
17:20:03 <Phantom_Hoover> On the bright side, the siege is down to two marksmen.
17:21:21 -!- NihilistDandy has quit (Ping timeout: 260 seconds).
17:21:49 <elliott> Phantom_Hoover: What, why?
17:21:53 <elliott> We have like a billion drank.
17:22:21 <Phantom_Hoover> elliott, because he was in a cage trap after being knocked unconscious.
17:22:59 -!- nooga has joined.
17:26:27 <elliott> Phantom_Hoover: Have you noticed that dorfs get thirsty as soon as they enter the danger room and you turn the lever.
17:26:58 <Phantom_Hoover> I suspect this is because, as I discovered to my cost, he is quick to tire.
17:31:52 <Phantom_Hoover> I have a distinct suspicion that even in this state he'll be able to break the siege.
17:35:52 <elliott> Yaaaaaaaaaaaaaay enjoy your year.
17:38:41 <Vorpal> 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 <Vorpal> . When just sending raw data with netcat I get much better than that. (110 MB/s)
17:40:34 <Vorpal> 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:52:28 <Taneb> Well, VBefung-93 is nearing completion!
17:52:41 <Taneb> By which I mean I'm about to uncover the hardest bit
17:55:31 <pikhq_> Hmm. That "Upgrade through every version of Windows" thing seems a bit lame. Should've started with DOS 1.0.
18:04:52 <Taneb> Visual Basic isn't that bad for an imperative language
18:05:57 <pikhq_> Gregor: Someone started with Windows 1.0 and upgraded it to Windows 7.
18:06:38 <Gregor> My guess would be that the minimum is 1.0 -> 3.11-or-whatever -> maybe XP? -> 7
18:07:00 <elliott> It's an entertaining video :P
18:07:04 <ais523> presumably it went through every consumer version
18:07:05 <elliott> He keeps chastising Microsoft for losing his settings.
18:07:18 <Gregor> OK, I guess I want to see it :P
18:07:19 <elliott> But some settings actually went through.
18:07:22 <ais523> is there any hardware that all versions of Windows install on?
18:07:24 <elliott> Through like three point one to the latest.
18:07:29 <elliott> ais523: Yes, the VM used :P
18:07:44 <elliott> Gregor: http://www.youtube.com/watch?v=vPnehDhGa14
18:07:48 <ais523> the VM had the same virtual hardware all the time, though?
18:07:55 <elliott> ais523: I believe so; it's not that hard
18:08:00 <elliott> Ninety-five won't boot with too much RAM
18:08:05 <elliott> But Vista will run on less
18:09:21 <Sgeo> Maybe I should have @told elliott and Phantom_Hoover
18:09:33 <Sgeo> Although you two probably know by now anyway
18:09:46 <Sgeo> Homestuck update
18:10:00 <Taneb> What the hell does "dim" actually mean
18:10:09 <Taneb> I know what it does, but what does it mean?
18:10:24 <elliott> Was used to define dimensions of an array
18:10:30 <elliott> "Dim originally (in BASIC) stood for Dimension, as it was used to define the dimensions of an array.
18:10:30 <elliott> (The original implementation of BASIC was Dartmouth BASIC, which descended from FORTRAN, where DIMENSION is spelled out.)
18:10:30 <elliott> Nowadays, Dim is used to define any variable, not just arrays, so its meaning in not intuitive anymore."
18:10:34 <elliott> Its meaning in not intuitive anymore.
18:10:48 <Taneb> It's like the word Domino
18:11:11 <Taneb> At least not in 2005
18:14:19 <Taneb> If I were doing Befunge-98 I would define them
18:15:26 <pikhq_> Gregor: 1.0 -> 2.0 -> 3.0 -> 3.1 -> 95 -> 98 -> 98 SE -> 2000 -> XP -> Vista -> 7
18:15:39 <Gregor> No 3.11 Windows for Workgroups???
18:16:03 <Gregor> Welll, NT was never a "consumer" OS.
18:16:06 <Gregor> Neither was 2000, really.
18:16:27 <pikhq_> There was a fork in upgrade paths: he could've done 98 SE -> ME -> XP or 98 SE -> 2000 -> XP.
18:16:30 <Gregor> Maybe he chose 98SE -> 2000 since that's the worst possible 9x->NT switchover :P
18:16:58 <elliott> Gregor: Me NEVER HAPPENED.
18:17:01 <Taneb> One day I may try to get my old 98 (dunno if SE or not) up working again
18:17:01 <pikhq_> 2000 was the most consumer of the NT line.
18:17:18 <pikhq_> Oh, yeah. He did this from physical media that he actually owned.
18:17:20 <Taneb> It works fine, but I can't use a mouse and it has no internet
18:17:43 <elliott> Does anyone know a valid IP address that does NOT have any host there?
18:18:57 <elliott> 'Sat reserved or something?
18:19:10 <pikhq_> Yeah, it's the first address in class E.
18:20:25 <elliott> Deewiant: In SOCK's I, one interprets the unsigned address as if it were signed, yes?
18:20:52 <pikhq_> Would've been pretty awesome if he used Win 3.2.
18:21:49 <pikhq_> Though. It may not have supported an upgrade: it *was* the first release in Mandarin with Simplified Chinese.
18:23:31 <pikhq_> Also a shame he didn't install Win32s.
18:28:12 <ais523> elliott: 192.168.whatever numbers aren't on your network
18:28:44 <ais523> 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 <ais523> 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 <elliott> Well, routing is irrelevant
18:29:20 <elliott> I'm just converting string addresses to integers
18:31:19 <elliott> Shiro/Fingerprints/SOCK.hs:13:9:
18:31:20 <elliott> Ambiguous occurrence `accept'
18:31:20 <elliott> It could refer to either `Shiro.Fingerprints.SOCK.accept',
18:31:21 <elliott> defined at Shiro/Fingerprints/SOCK.hs:34:1
18:31:23 <elliott> or `Network.Socket.accept',
18:31:25 <elliott> imported from Network.Socket at Shiro/Fingerprints/SOCK.hs:7:1-21
18:33:05 <fizzie> I *just* (like, last week) saw a hotel use 1.1.1.1 for the login-to-our-network autoredirect thingamajikc.
18:34:28 <fizzie> 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 <fizzie> (There are two other TEST-NETs too.)
18:38:20 <ais523> elliott: just qualify it?
18:39:19 <elliott> ais523: You should never have clashing names ever.
18:39:25 <elliott> It should be an error, really.
18:39:33 <elliott> fizzie: Oi, SCKE specs, where eb they.
18:39:50 <fizzie> elliott: It doesn't really have any, I don't think. "Sowwy."
18:40:00 <elliott> fizzie: Does it have... a list of instructions?
18:40:53 <fizzie> Well, H and P. I don't really know how anyone even found out about SCKE.
18:41:00 <fizzie> Maybe I wrote something.
18:41:13 <elliott> fizzie: What does H does, what does P do
18:41:19 <fizzie> http://packages.python.org/PyFunge/fingerprint/SCKE.html <- good enough.
18:41:54 <elliott> Except only the second one
18:42:12 <elliott> fizzie: Doesn't P require me to keep my own buffer...
18:42:48 <fizzie> Well, I don't know. It's basically a poll()/select() for input.
18:43:11 <fizzie> http://p.zem.fi/54wi <-- here seems to be how I "documented" them.
18:43:19 <elliott> Except select() and poll() block.
18:43:49 <fizzie> Not with a zero timeout.
18:44:06 <elliott> Now to find out how to get GHC to do that.
18:44:58 <itidus20> Salivili hippit tupput tappyt appyt tipput hilijalleen.
18:45:06 <fizzie> SCKE support - the most pointless thing ever? (I don't think anyone uses it, not even fungot's "configuration header".)
18:45:07 <fungot> 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:39 <Gregor> What is that fungot command ...
18:46:39 <fungot> 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 <fungot> 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 <elliott> fizzie: Um, fungot uses SCKE, no
18:46:43 <fungot> 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:50 <fizzie> elliott: No, it just loads it. :p
18:47:01 <fungot> Selected style: wp (1/256th of all Wikipedia "Talk:" namespace pages)
18:47:13 <Gregor> fungot: Tell me about neutral viewpoints.
18:47:14 <fungot> 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 <elliott> 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 <Gregor> "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed]
18:47:59 <fizzie> 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 <fizzie> (Okay, now really away.)
18:49:00 <Gregor> Are any of the Fungies Unicode-safe?
18:49:22 <elliott> Gregor: Define Unicode-safe
18:49:30 <elliott> A Funge program is raw binary data
18:49:45 <elliott> What do you want, a file/console reader that decodes from an encoding?
18:50:04 <elliott> That would be doable, as a fingerprint, but I don't know of any.
18:50:09 <Gregor> 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 <Gregor> I mean, I don't actually /want/ that, I was just curious if any existed.
18:51:21 <elliott> 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 <elliott> Gregor: If you store it in UTF-thirty-two, everything will work fine.
18:51:40 <elliott> But you /could/ provide an alternate fungespace loading that took it like that or any encoding.
18:51:43 <Gregor> Only if \x00 is no-op :P
18:51:46 <elliott> But it wouldn't be the standard's defined entry-point.
18:51:55 <elliott> Gregor: Invalid instructions reflect.
18:52:03 <elliott> There are no non-printable-ASCII instructions by default.
18:52:21 <elliott> <dcoutts> elliott: and why do you want to check if there's data without retrieving any?
18:52:26 <elliott> STOP TELLING ME IT'S A BAD IDEA OMG BLAME FIZZIE
18:58:20 <fizzie> Yeah, the P wasn't really that well thought of a thing.
18:59:46 <olsner> I've finally started on my write-assembly-in-haskell project, have gotten about as far as "instance MonadFix"
19:01:12 <elliott> olsner: Making it so that the type system catches e.g. mov in the wrong order?
19:01:17 <elliott> (Like "mov 0 eax" rather than "mov eax 0".)
19:01:43 <olsner> btw, all my trouble with my OS not working earlier were either due to nasm miscompiling it, or to some build script malfunction
19:02:17 <elliott> fizzie: Ouch, SCKE will be hard.
19:02:34 <elliott> 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 <fizzie> elliott: Really, maybe you should just opt for proper NSCK support.
19:04:30 <fizzie> 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 <fungot> fizzie: duke university fnord bln fnord fnord fnord fnord supuser fnord 16:34, 9 may 2005 ( utc)
19:04:41 <elliott> Oh, is it another Vorpal non-fingerprint?
19:04:59 <elliott> Hmm, how the heck to name these functions to avoid clashes.
19:05:39 <olsner> 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 <olsner> 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 <elliott> olsner: So are you porting your OS to Haskembly?
19:07:42 <olsner> not yet, haskembly is only half done
19:08:06 <olsner> elliott: When it is done.
19:08:26 <elliott> cool, maybe I'll resurrect my far-superior project that did the same thing that I abandoned a while back
19:08:33 <elliott> and copy your entire OS and become Windows and rule the world
19:08:47 <elliott> olsner: but seriously, you are catching "mov 0 eax" right? otherwise lolling at you
19:09:59 <olsner> yes, mov (spelled $=) currently only accepts registers as targets
19:10:16 <olsner> and I don't think I'll add support for assigning to constants anytime soon :P
19:11:41 <elliott> mov :: (Read src, Write dst) => src -> dst -> ASM ()
19:12:22 <elliott> (!) :: RWAddr -> Int -> RWAddr... though I guess you want the more fancy addressing modes somehow too
19:14:23 <olsner> the actual type right now is ($=) :: Expr e => Reg -> e -> Asm ()
19:14:26 <fizzie> 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 <elliott> fizzie: -O influences that IIRC
19:14:44 <elliott> It just picks the shortest, I believe
19:14:52 <fizzie> But those are equally long.
19:16:26 <olsner> only because Read is called Expr?
19:16:50 <Gregor> What was that OMGMAGIC C compiler that was recently released (or announced as going-to-be-released) as F/OSS? SomethingPath ...
19:20:00 <elliott> fizzie: You're the SOCK expert; what the fuck is the pf argument to S
19:20:06 <elliott> Can I just ignore it or do I have to store it for later connects or whatever
19:20:22 <olsner> pf? protocol family? or something?
19:20:54 <elliott> they have values starting with PF_....
19:20:59 <elliott> i only know families starting with AF_.........
19:21:13 <fizzie> It's pretty much the same thing.
19:21:23 <fizzie> It's what my socket man page calls "domain".
19:21:51 <elliott> so I just use AF_ instead of PF_ ok........
19:22:30 <elliott> Then why does it also take
19:23:06 <elliott> Yeah, how come it takes both DGRAM/STREAM and tcp/udp
19:23:10 <elliott> I thought DGRAM/STREAM _was_ tcp vs udp
19:23:51 <fizzie> Not necessarily; the type and protocol are independent.
19:24:11 -!- augur has quit (Remote host closed the connection).
19:24:24 <fizzie> Of course SOCK only does tcp/udp, soo...
19:24:26 <olsner> 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 <elliott> fizzie: So I should just barf out if the protocol doesn't match the socket type and otherwise ignore it?
19:24:55 <olsner> (I'll just assume this SOCK thing works *exactly* like socket())
19:25:36 <fizzie> elliott: Well, you could also pass the corresponding IPPROTO constants to the socket call, just to make sure.
19:26:07 <elliott> socket :: Family -> SocketType -> ProtocolNumber -> IO SocketSource
19:26:07 <elliott> 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 <elliott> The only defined ProtocolNumber is defaultProtocol, it's literally just a CInt.
19:26:28 <fizzie> Well, defaultProtocol is probably just fine too.
19:26:32 -!- tiffany|away has changed nick to tiffany.
19:26:37 <fizzie> If they don't define the constants.
19:26:40 -!- impomatic has joined.
19:26:46 <impomatic> Has anyone got a magnetic core memory board I could borrow?
19:27:15 <elliott> <bos> elliott: what is it you're actually trying to do?
19:27:27 <elliott> fizzie: God, can you join #haskell and apologise and tell them to direct all such questions to you?
19:27:36 <olsner> <elliott> bos: code haskell lol
19:29:03 <fizzie> 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 <elliott> olsner: So will your DSL let me say "eax $= (ebx*eax)/ecx" and have it expand out? :p
19:29:41 <olsner> elliott: I hope it will
19:29:43 -!- augur has joined.
19:30:18 <elliott> olsner: So will it provide register-allocated variables that spill over to the stack? :-P
19:30:33 <elliott> <bos> i see. i wonder why such an API.
19:30:33 <elliott> <elliott> bos: It's old and not very well thought-out; the designer admits as much :)
19:30:36 <elliott> <bos> elliott: so why implement it?
19:30:38 <elliott> fizzie: Help, I can't answer.
19:30:43 <elliott> <sbrg> bos: the world runs on legacy systems
19:30:45 <olsner> oh, that expression example was a bit more complicated than I bothered reading
19:31:18 <elliott> <bos> sbrg: but why would someone want to implement a legacy API in haskell?
19:31:20 <olsner> I don't think it will do anything that requires temporaries actually
19:31:36 <elliott> olsner: What if you told that arithmetic operation which variable to clobber :P
19:32:35 -!- zzo38 has joined.
19:32:44 <fizzie> 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 <zzo38> I think I figured out how to make up type level natural numbers by type families.
19:33:19 <zzo38> data TypeZero; data TypeSucc t;
19:33:33 <olsner> 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 <zzo38> data family X n :: *; data instance X TypeZero = Z Int; data instance X (TypeSucc n) = S (X n) (X n);
19:34:04 <zzo38> type family TypePred t :: *; type instance TypePred (TypeSucc t) = t;
19:34:15 <olsner> but simpler things like eax $= 5*ebx could be rewritten into something with lea
19:34:16 <elliott> olsner: I meant like (mul a b OhAndYouCanClobberEdx) X-D
19:34:28 <zzo38> See? It is a type family.
19:36:16 <zzo38> 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 <elliott> <elliott> 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 <elliott> <bos> okay, i'll stop asking about it, since i can't follow your answers.
19:37:48 -!- zzo38 has quit (Remote host closed the connection).
19:38:30 -!- Braber01 has joined.
19:39:28 <olsner> I like how your socket question sidetracked as far as to mentioning COBOL
19:39:32 <Braber01> quick queston what are the f**kf**k equilvents of BrainF**k?
19:40:20 <elliott> Dunno those languages, do you mean what the brainfuck instructions are in fuckfuck?
19:40:31 <elliott> http://esoteric.voxelperfect.net/wiki/Fuckfuck has the details.
19:41:53 <fizzie> 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:34 <elliott> Are the values for the IPPROTOs portable?
19:43:13 <fizzie> I would expect the "default" stream socket be TCP everywhere though.
19:43:54 -!- Braber01 has quit (Ping timeout: 252 seconds).
19:44:00 <fizzie> They're also somewhat portable in practice, but not guaranteedly.
19:44:25 <fizzie> I think I've seen a naked 6 (or whatever it was) to stand for TCP in some code.
19:44:31 <elliott> fizzie: It's OK if SCKE's can-read instruction says a closed socket can read, right?
19:45:57 <fizzie> 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 <fizzie> 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 <elliott> I suppose I could get that with the FFI.
19:52:18 <elliott> fizzie: It sure would be convenient if S took the protocol number directly.
19:53:42 -!- NihilistDandy has joined.
19:56:36 <fizzie> elliott: Perhaps, but since those are not so portable... (It could use the same scheme of "protocol number or 0" though.)
19:56:56 <elliott> 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 <elliott> A hugely oversaturated market.
19:58:17 <fizzie> 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:59:07 <elliott> How does rcfunge do it? :P
19:59:37 <fizzie> I don't think it does; it just assumes all addresses are single-cell values.
20:00:34 <fizzie> Not sure what it does to the value in the AF_UNIX case though.
20:00:38 -!- impomatic has left.
20:01:50 <elliott> Holy wow, rcfunge's fingerprint mechanism is
20:02:03 -!- NihilistDandy has quit (Ping timeout: 246 seconds).
20:02:53 <elliott> fizzie: rcfunge's sock.c includes code literally byte-identical to scke.c.
20:03:15 <elliott> It... looks like SOCK includes SCKE, but SCKE exists totalyl separately too with no code reuse???
20:06:00 <elliott> fizzie: So shungot may be working soon :P
20:06:02 <fizzie> 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:07:40 <elliott> olsner: hmm, I think you want some sort of symbolic expression framework even if you don't offer that fancy stuff
20:08:01 <elliott> readByte :: (Read a) => a -> ASM Word8
20:08:09 <elliott> you want to be able to implement such a function
20:08:16 -!- oerjan has joined.
20:08:27 <elliott> so (ASM a) should actually look something like (Writer [AsmStmt] (Symbolic a))
20:08:44 <elliott> where Symbolic is an expression language over registers, integers, arithmetic, etc.
20:08:56 <elliott> and it then gets flattened out to statements
20:09:48 <elliott> 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 <oerjan> <elliott> 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 <oerjan> DMM is big on people making up their own interpretations. see: every iwc poll ever
20:12:57 <elliott> olsner: And indeed, "mov" then becomes a lot simpler.
20:13:17 <oerjan> sadly, he is not big on having plenty of time.
20:13:21 <elliott> olsner: class Read a where peek :: (Bits r) => a -> r (caller chooses size of read by instantiating r)
20:13:52 <elliott> olsner: class Read a where peek :: (Bits r) => a -> Asm r (caller chooses size of read by instantiating r)
20:13:55 <elliott> olsner: class (Bits b) => Write a b | a -> b where poke :: a -> b -> Asm ()
20:14:04 <elliott> mov dst src = peek src >>= poke dst
20:14:04 <oerjan> that's not ... very consistent with the usual definition of Read
20:14:10 <elliott> oerjan: It's a different Read
20:14:25 <elliott> 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 <elliott> In fact, I think the symbolic thing may simply be a fragment of an ASM statement
20:16:28 <Taneb> I can think of three brainfuck derivatives that I believe are not bad
20:16:39 <elliott> olsner: Actually that's really cool, because you can implement macros properly
20:16:50 <Taneb> Boolfuck and Bub because they were useful in proving languages Turing-Complete
20:16:51 <elliott> Instead of needing "weird cpp style macros" and "statement macros"
20:16:59 <Taneb> and Ook! because it was original
20:21:41 <lambdabot> forall w (m :: * -> *). (MonadWriter w m) => w -> m ()
20:22:41 -!- kwertii has joined.
20:23:14 <oerjan> `addquote <fungot> 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 <fungot> 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 <HackEgo> 640) <fungot> 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:24:05 <oerjan> 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 <oerjan> <Gregor> "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed]
20:34:55 <oerjan> i think that would be a very plausible use of fnord in the original sense
20:35:40 -!- Taneb has quit (Quit: THIRSTY).
20:37:13 -!- augur has quit (Remote host closed the connection).
20:40:36 <elliott> olsner: My scribblings: http://sprunge.us/ZGhh
20:41:51 <elliott> olsner: Actually, Expr shouldn't be a data family. It can just be a GADT.
20:42:07 <oerjan> <elliott> <bos> 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:37 <elliott> oerjan: And I'd NEVER get a function into the network package because "befunge needs it" :P
20:42:45 <oerjan> elliott: YOU MEAN WE'D GET ANOTHER INVASION
20:43:04 -!- augur has joined.
20:43:05 <oerjan> oh i can see that might be a problem
20:44:10 <oerjan> i _do_ have this feeling #esoteric has become even more haskellish than usual recently
20:45:11 <oerjan> fortunately there is zzo38 to take horrible revenge.
20:45:54 <oerjan> elliott: as in, we may be discussing haskell more often than esolangs
20:46:14 -!- augur has quit (Remote host closed the connection).
20:46:17 <oerjan> ok, but even more than usual
20:51:46 -!- augur has joined.
20:52:21 <EgoBot> βhelp: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
20:53:08 <oerjan> !bf_txtgen http://esolangs.org/wiki/
20:53:26 -!- Patashu has joined.
20:54:26 <oerjan> !bf_txtgen http://esolangs.org/wiki/
20:55:00 <oerjan> that's ... not encouraging.
20:55:28 <oerjan> Gregor: is it just horribly overworked?
20:55:49 <Gregor> Uhh, not sure what happened there :P
20:55:58 <EgoBot> β57 +++++++++++++[>++++++++>+>><<<<-]>.---.+++++++..+++.>---. [197]
20:56:00 <EgoBot> β89 ++++++++++[>+>+++++++>++++++++++><<<<-]>>++.>+.++++++++++++++++++..--------.<---------.<. [628]
20:56:19 <Gregor> 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 <Gregor> !bf_txtgen http://www.google.com/
20:56:32 <Gregor> Apparently that doesn't work :P
20:57:02 <oerjan> !bf_txtgen htsp://esolangs.org/wiki/
20:57:06 <EgoBot> β207 +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>--.---.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------. [494]
20:58:09 <oerjan> ^def wiki +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,]
20:58:09 <fungot> Usage: ^def <command> <lang> <code>
20:58:15 <oerjan> ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,]
20:58:23 <fungot> http://esolangs.org/wiki/.Brainfuck
20:58:38 <oerjan> ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.,[.,]
20:58:42 <fungot> http://esolangs.org/wiki/Brainfuck
20:59:41 <oerjan> .>-. as the way of printing two t's is not immensely encouraging :P
21:00:17 <pikhq_> Well it *is* an evolutionary algorithm.
21:07:00 <Patashu> So it's an optimizing text gen? Interesting
21:08:33 <oerjan> except with EgoBot the optimization tends to get cut short
21:09:58 <fungot> http://esolangs.org/wiki////
21:11:38 <KingOfKarlsruhe> "You are seeing this message due to the site you are trying to view having its DNS hosted by EveryDNS."
21:11:53 <KingOfKarlsruhe> EveryDNS services will be fully discontinued as of September 9th, 2011.
21:11:55 -!- augur has quit (Remote host closed the connection).
21:12:55 <ais523> the EVN address is fine
21:13:04 <ais523> so presumably it's a DNS issue, especially given the content of the page
21:13:35 <pikhq_> That's a very dickish way of handling it.
21:13:36 <elliott> I guess I'll email the owner of the domain
21:13:54 <pikhq_> "Lawl we're going to MITM you"
21:15:12 -!- tiffany has quit (Ping timeout: 252 seconds).
21:16:32 <oerjan> elliott: bad timing on my fungot definition :(
21:16:32 <fungot> oerjan: i'm not sure. fnord 18:22, 24 july 2005 ( utc)
21:17:03 <elliott> http://esoteric.voxelperfect.net/wiki/Slashes
21:17:08 <elliott> oerjan: What was the wat though
21:17:09 -!- augur has joined.
21:17:15 <oerjan> elliott: that was the wat
21:18:37 <Gregor> 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 <oerjan> elliott: that doesn't look good - it means whoever owns the domain isn't answering mail...
21:19:13 <elliott> Gregor: rewrite it some other way? :P
21:19:33 <Gregor> 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:37 <oerjan> elliott: that page says they have sent _several_ notifications before doing this outage stuff
21:19:50 <elliott> well they could have just not got around to it yet.
21:19:57 <elliott> "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:21:08 <Patashu> isn't 5 dollars cheaper than getting a new dns?
21:21:29 <Gregor> There are several free DNS services.
21:23:03 <oerjan> !bf_txtgen htsp://esoteric.voxelperfect.net/wiki/
21:23:06 <EgoBot> β293 +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-.-.---.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.-------------------------------------. [567]
21:23:13 -!- tiffany has joined.
21:23:47 <oerjan> ^def wiki bf +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-..----.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.,[.,]
21:23:47 <ais523> Gregor: are they any /good/?
21:23:56 <fungot> 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 <Gregor> 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 <oerjan> ais523: changing to esoteric.voxelperfect.net, i see our wiki has some spams on it
21:28:25 <ais523> oh right, I should use EVN's RSS feed
21:30:04 <ais523> thanks, I've found them now, deleting...
21:30:47 <ais523> 'twould be great if I could delete spam in one click from my RSS feed reader
21:30:50 <olsner> elliott: I was gone for a while, but you seem to have been busy
21:31:14 <elliott> olsner: indeed, i said IMPORTANT THINGS
21:32:18 <Gregor> elliott: Upon a quick googlin', looks like they're dead :P
21:32:44 <olsner> 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 <elliott> olsner: I said more important things than that :P
21:33:18 <elliott> Basically I suspect your current monad can't implement
21:33:30 <elliott> readByte :: Reg -> Asm Word8
21:33:38 <elliott> which restricts it a lot and makes the monad much less semantically useful
21:33:40 <olsner> I read some stuff about symbolic something and then a link to a paste
21:33:43 <elliott> Then I figured out how to do that and implement it
21:33:59 <olsner> what is readByte supposed to do?
21:34:08 <elliott> olsner: Read the byte, at runtime
21:34:20 <elliott> olsner: The byte in the register
21:34:31 <elliott> (Assume registers are byte-sized)
21:34:46 -!- monqy has joined.
21:35:09 <elliott> 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:15 <olsner> you mean like do { x <- readByte eax; do-stuff-with-x } , where x is magically the value the register had?
21:35:18 <elliott> You don't really have to do any semantic work at all, it maps directly to your asm structure
21:35:25 <elliott> olsner: Yes, but it's not magical :)
21:35:37 <elliott> Then if you have writeByte, a mov reduces to just that
21:35:45 <elliott> It means you can do a lot more with macros, and your monad is actually semantically meaningful
21:35:49 <elliott> Rather than just being used for do notation
21:35:56 <elliott> So then I implemented a scrap of it
21:36:37 -!- AndGregor has joined.
21:44:12 <olsner> 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 <oerjan> i conclude from the feature list that Uniquode includes Feather as a subset.
21:46:38 <oerjan> also i assume the caste system uses the indian characters.
21:47:16 <monqy> 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 <elliott> olsner: there were no typeclasses necessary
21:47:30 <elliott> and no runtime checking for the destination operation at all, it's handeld in the type system
21:47:43 <olsner> elliott: hmm, where did you amend it?
21:47:46 <elliott> the runtime checking was just proving that leaving out unimpelementable things (like (==)) does not cause errors
21:47:59 <elliott> olsner: next message that pinged you
21:48:11 <oerjan> monqy: feather _is_ pretty simple. it's just incompatible with human brain function, is all.
21:48:36 <olsner> http://sprunge.us/ZGhh is what I'm reading
21:48:50 <elliott> it can just be a simple GADT
21:49:28 <olsner> right, but it still has type *classes*
21:49:38 <oerjan> a simple GADT and a prehistomorphic prepromorphism, et voila!
21:49:56 <elliott> you'll need a write typeclass too, for when you can write to memory
21:49:59 <elliott> the typeclasses are really simple
21:50:09 <elliott> you could eliminate them and still keep the basic idea
21:50:11 <olsner> I think "<elliott> olsner: there were no typeclasses necessary" was just supposed to say type families instead of classes
21:50:32 <elliott> point is, Expr can be one GADT, no need for families at all
21:50:36 <olsner> that was a bit confusing, because I saw the type families/GADT comment
21:53:03 <olsner> 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 <oerjan> ah, that tunes.org glitch i saw the other day seems to have been temporary.
21:53:22 <olsner> i.e. store eax which has now changed
21:53:47 <elliott> olsner: hmm, ah, that's quite easy to fix
21:53:57 <olsner> maybe peek should just be internal to your opcodes
21:54:10 <elliott> the whole point is that peek is usable by the user
21:54:10 <oerjan> (11.09.04 for some reason does not show as text)
21:54:23 <elliott> because it lets you write macros and the like far more expressively
21:54:38 <elliott> 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 <elliott> rather than having absolutely everythign return ASM ()
21:54:48 <elliott> and passing in the destination
21:55:47 -!- FireFly has quit (Quit: FireFly).
21:55:52 <elliott> 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 <elliott> you just need a Ref type in ASM, so just stick ST on the bottom
21:56:03 <elliott> the ref is basically just "is this reference still valid"
21:56:36 <elliott> 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 <olsner> why not... mix in parameterised monads and keep track of validity in the type system?
21:57:58 <olsner> probably not, at the very least I don't think I can successfully combine that with monadfix
21:58:09 <elliott> olsner: sure, that's more elegant, I'm just saying you can do it without anything extra
21:58:14 <elliott> I don't see why you need MonadFix
21:58:17 <elliott> that'd just lead to generating infinite code
21:59:31 <elliott> 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 <olsner> well, I use monadfix and recursive do notation to allow forward and backward jumps to labels
22:01:41 <elliott> hmm, what does that look like?
22:02:10 <elliott> do you generate all the labels, and then say "here's the label yo"
22:02:17 <elliott> or do you somehow actually do a backwards reference to the haskell identifier
22:02:28 <olsner> you write do rec { jmp l; ...; l <- label; } and l gets its future value
22:02:42 -!- nooga has quit (Ping timeout: 245 seconds).
22:02:55 <elliott> hmm, what if you made labels local macros instead...
22:03:02 <elliott> foo = label $ do { ...; jmp foo; ... }
22:03:07 <elliott> that might be hard to do purely :P
22:05:34 <olsner> doesn't need to be pure if it's fun :P
22:06:56 <elliott> (label m) puts m in its internal database of labels, returns the label identifier fo it
22:07:01 <elliott> yep, that would work olsner
22:07:08 <elliott> it's just the same as monadfix though basically
22:07:11 <elliott> because foo would then be of an ASM type
22:07:17 <elliott> adn you'd need to unpack it at use time
22:07:25 <elliott> like putting foo somewhere would inline it
22:08:08 <elliott> olsner: i realise my explanation of the peek stuff is rather subpar
22:09:37 <olsner> 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 <elliott> It's kind of like a macro :P
22:10:32 <elliott> But yeah, it's less useful than your recursive do stuff.
22:18:02 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
22:22:40 -!- nooga has joined.
22:26:26 <nooga> i just wanted to read elliott's comment
22:28:39 <nooga> when was the last time i was here drunk?
22:29:08 -!- Phantom_Hoover has quit (Quit: Leaving).
22:30:00 <elliott> 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:25 <CakeProphet> 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 <EgoBot> β291977 ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------.+++++++++
23:49:20 <oerjan> ^bf ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------.
23:49:42 <elliott> I'm surprised the algorithm isn't exponential or whatever
23:50:21 <oerjan> Gregor: are you _sure_ EgoBot's timeout code is working right? :D
23:51:19 <pikhq_> http://sprunge.us/gNUi Perhaps the stupidest way of outputting the first 25 numbers in the Fibonacci sequence.
23:52:14 <elliott> pikhq_: meh, my continuation hack was better
23:52:14 <ais523> surely there /has/ to be a stupider way than that
23:52:28 <pikhq_> elliott: Mine is POSIX compliant.
23:52:28 <oerjan> maybe esolangs.org just went up for a moment, and EgoBot has been waiting for all this time :P
23:52:30 <elliott> Continuations are really ridiculously inefficient for coroutines though :P
23:52:31 <ais523> OK, that one is pretty stupid
23:52:44 <oerjan> (it seems to down again, but without that dns message)
23:52:50 <ais523> is that pthreads it's using? or some other posix threading model?
23:53:00 -!- copumpkin has joined.
23:53:10 <pikhq_> ais523: POSIX ucontext. It's actually straight-up continuations.
23:53:19 -!- Vorpal has joined.
23:53:28 <ais523> ah, continuations disguised as threads
23:53:41 <ais523> (as opposed to continuations implemented using threads, like continuation.i does)
23:53:55 <pikhq_> It's not POSIX 2008, though.
23:54:01 <elliott> I'm still not sure how you do that, since threads are provably less powerful
23:54:12 <ais523> elliott: spawn a thread, then lock it in an infinite loop
23:54:27 <elliott> ais523: yes, but you can't rewind a thread
23:54:29 <ais523> they're more like forks than threads
23:54:31 <elliott> a continuation has to be callable multiple times
23:54:40 <oerjan> <elliott> I'm surprised the algorithm isn't exponential or whatever <-- well it doesn't look like it was much optimized
23:54:42 <ais523> elliott: I just spawn another one
23:54:50 <ais523> e.g. when it's called once, I make a second before calling the first
23:54:56 <ais523> if it's called again, I make a third before calling the second
23:55:02 <elliott> fork() is more powerful than threads, though
23:55:14 <ais523> well, INTERCAL threads are more like fork()
23:55:29 <ais523> only communication's via abstention status
23:55:37 <ais523> also, you can rewind a thread in INTERCAL
23:56:16 <ais523> MAYBE DO [...] ... DO GO BACK
23:57:09 <pikhq_> 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 <elliott> Doesn't it use stack copying
23:58:18 <pikhq_> I think it actually just changes the stack pointer.