←2011-12-27 2011-12-28 2011-12-29→ ↑2011 ↑all
00:00:15 <kallisti> to disallow based on algorithmic differences, but I guess that makes it easier to compare?? I don't know.
00:00:32 <colloinkgravisom> ...
00:00:36 <Madoka-Kaname> Well.
00:00:40 <colloinkgravisom> I meant that it's subjective to decide what constitutes an algorithmic difference.
00:00:49 <kallisti> oh, sort of.
00:00:59 <colloinkgravisom> The maintainer claims to have a policy of rejecting differing algorithms, but allows programs with and without parallelism for the same task.
00:01:02 <colloinkgravisom> Which is an algorithmic difference.
00:01:03 <Madoka-Kaname> I suppose, a good way of choosing to accept or not might be "shortest non-trivial, non-overly-naive solution"
00:01:08 <Madoka-Kaname> But that's highly subjective.
00:01:43 <kallisti> yeah that's pretty much meaningless without further criteria.
00:02:02 <Madoka-Kaname> non-trivial means you're not calling sort.
00:02:10 <Madoka-Kaname> non-overly-naive means you're not bogosorting
00:02:56 <kallisti> wat
00:03:03 <colloinkgravisom> What if calling sort is the fastest implementation of sort
00:03:12 <kallisti> "no using libraries"
00:03:17 <kallisti> that's silly.
00:03:27 <Madoka-Kaname> kallisti, well.
00:03:33 <Madoka-Kaname> I suppose that's if the problem is "sort this list"
00:04:10 <Madoka-Kaname> How about "no making the library do the entire job" so it's a comparison of things implemented in the language and not the standard library.
00:04:46 <kallisti> Haskell's sort is implemented in Haskell.
00:04:51 <kallisti> so that's still fairly arbitrary.
00:05:03 <kallisti> but I can see the rationale, I guess.
00:05:40 <kallisti> it's the same reason I'd like all of the Python-C API, Haskell FFI, etc entries to not be counted.
00:07:19 <colloinkgravisom> Madoka-Kaname: Is the benchmark game not a competition to see who's language is fastest and shortest?
00:07:29 <colloinkgravisom> It is surely a testament to an implementation if
00:07:31 <colloinkgravisom> main = interact sort
00:07:38 <colloinkgravisom> produces an extremely fast sorting program.
00:07:54 <Madoka-Kaname> But it doesn't say much about programming in the language.
00:08:05 <kallisti> sure it does.
00:08:20 <kallisti> people are likely to use sort when programming in Haskell and in need of a sorting algorithm.
00:08:27 <Madoka-Kaname> At least.
00:08:38 <Madoka-Kaname> It doesn't say much about programming non-trival things in the language.
00:08:51 <Madoka-Kaname> You might be able to pull things like that off easily, but, more complex, and things fall apart.
00:08:53 <Sgeo> And HQ9+ can't be beat when it comes to 99 bottles of beer on the wall
00:08:56 <kallisti> people are less likely to write everything in C and then hook up to the language implementation.
00:09:54 <Sgeo> Actually, it can, probably. 99 bottles of beer on the wall require a character.
00:10:12 <colloinkgravisom> <Madoka-Kaname> But it doesn't say much about programming in the language.
00:10:13 <colloinkgravisom> Is it meant to?
00:10:19 <monqy> Sgeo: language where everything is 99 bottles of beer on the wall?
00:10:26 <colloinkgravisom> There are a fixed set of simple problems; the idea is to get bragging rights by showing your implementation fastest and shortest.
00:10:34 <Sgeo> monqy, or at least, the empty program
00:10:41 <colloinkgravisom> If you have a very fast standard-library sort, then it would be against the purpose of the game not to use it.
00:10:47 <monqy> the empty program is a thing, after all
00:11:06 <Sgeo> Homespring special-cases it
00:11:12 <kallisti> I think the language benchmark game is indicative of what is at least possible in terms of performance, but isn't really indicative of what "normal programs" do.
00:12:01 <kallisti> the second one is very difficult to determine.
00:12:15 <colloinkgravisom> No shit.
00:12:23 <colloinkgravisom> There are warnings plastered all over the site saying exactly that.
00:12:32 <kallisti> even if you have a large sample of wild programs, how do you categorize them so that you can determine that program in language X does the same thing as program in language Y.
00:13:13 <Phantom_Hoover> <Sgeo> Homespring special-cases it
00:13:22 <Phantom_Hoover> 'Special-cases' seems a bit odd in that context.
00:13:38 <colloinkgravisom> Phantom_Hoover: It actually does, though?
00:14:14 <kallisti> homespring is interesting in that the null program is not a quine. :)
00:15:02 <Phantom_Hoover> colloinkgravisom, but everything is a special-case, isn't it?
00:15:20 <Phantom_Hoover> Why is doing nothing on the null program any less of a special case?
00:15:39 <monqy> but it doesn't do nothing?
00:15:51 <colloinkgravisom> Phantom_Hoover: I don't think you know what Homespring is?
00:15:59 <colloinkgravisom> Phantom_Hoover: Homespring does not do nothing on the null program.
00:16:03 <Phantom_Hoover> I know that.
00:16:19 <Phantom_Hoover> It prints "In Homespring, the null program is not a quine.", or words to that effect.
00:16:50 <colloinkgravisom> Yes.
00:16:58 <colloinkgravisom> But Homespring isn't just a collection of special cases?
00:17:02 <colloinkgravisom> It's an actual language.
00:17:12 <colloinkgravisom> One whose semantics presumably do not print out that string on the null program.
00:17:14 <colloinkgravisom> So it's a special case.
00:18:53 <Sgeo> Has anyone written a Homespring quine?
00:19:20 <colloinkgravisom> I doubt it.
00:19:53 -!- Patashu has joined.
00:20:43 <kallisti> colloinkgravisom: http://shootout.alioth.debian.org/u32/performance.php?test=threadring I find it kind of interesting that he includes the GHC program but not the Java 7 server program
00:21:48 <kallisti> which is listed as an "interesting alternative"
00:23:24 <colloinkgravisom> ...
00:23:35 <colloinkgravisom> Those are alternate implementations of programs whose main implementations appear in the previous table.
00:23:50 <kallisti> yes I understand that.
00:24:12 <Phantom_Hoover> <colloinkgravisom> It's an actual language.
00:24:12 <Phantom_Hoover> <colloinkgravisom> One whose semantics presumably do not print out that string on the null program.
00:24:37 <Phantom_Hoover> I... don't see how you can infer the behaviour of the null program based on the behaviour of all the other programs.
00:24:51 <kallisti> you can't. it's a special case.
00:26:18 <colloinkgravisom> Phantom_Hoover: Um, an inductive definition?
00:26:30 <colloinkgravisom> Phantom_Hoover: Consider defining the semantics of BF as [Ins].
00:26:40 <Phantom_Hoover> Go on.
00:26:43 <colloinkgravisom> The semantics of the null program is to do nothing.
00:26:54 <colloinkgravisom> The semantics of add followed by program p is to increment [...] followed by the semantics of p.
00:26:55 <colloinkgravisom> And so on.
00:26:58 <colloinkgravisom> It's called a base case.
00:27:09 <kallisti> hmm, interesting, Haskell beats everything on the thread-ring challenge except for Erlang on the x86 Ubuntu Intel Q66000 one core.
00:27:18 <kallisti> er
00:27:19 <kallisti> x64
00:27:41 <colloinkgravisom> Phantom_Hoover: Obviously given a black box homespring-without-null-program interpreter you can't deduce the behaviour; it's a property of the mathematical specification.
00:27:50 <colloinkgravisom> kallisti: Haskell's threading is really good.
00:28:04 <kallisti> colloinkgravisom: that wasn't the interesting art.
00:28:04 <Phantom_Hoover> Null program does whatever. (inst:insts) is the base case.
00:28:07 <kallisti> +p
00:28:17 <kallisti> colloinkgravisom: I was wondering why Erlang wins in that case.
00:28:36 <colloinkgravisom> kallisti: Erlang also has really good threading.
00:28:41 <colloinkgravisom> Phantom_Hoover: What?
00:28:45 <colloinkgravisom> Phantom_Hoover: You don't know what a base case is.
00:28:49 <colloinkgravisom> :t foldr
00:28:50 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> b
00:28:54 <colloinkgravisom> Second argument is base case.
00:28:57 <colloinkgravisom> First argument is induction step.
00:29:03 <Phantom_Hoover> colloinkgravisom, I know how inductive definitions and recursion work, thank you very much.
00:29:14 <colloinkgravisom> Phantom_Hoover: Yes, so don't make statements in direct contradiction of those.
00:29:47 <kallisti> colloinkgravisom: the same Erlang program runs much slower on all the other machines. And then suddenly is the fastest on this particular machine.
00:29:50 -!- cheater has quit (Ping timeout: 240 seconds).
00:29:58 <colloinkgravisom> kallisti: Oh. I parsed your statement differently.
00:29:58 <Phantom_Hoover> But you seem to be picking one specific model and saying it's the only legitimate one, in such a way that I've lost track completely of what I was saying.
00:29:59 <kallisti> this is still pretty strange to me, regardless of "X language has good threading"
00:30:04 <colloinkgravisom> kallisti: Are the others >1-core?
00:30:10 <colloinkgravisom> I think Erlang's VM is single-threaded.
00:30:18 <kallisti> colloinkgravisom: one other is 1-core.
00:30:19 <colloinkgravisom> Phantom_Hoover: No, you're just not really making any sense.
00:30:30 <colloinkgravisom> Phantom_Hoover: Of course you can deduce the behaviour of the null program given a specification of the language.
00:30:33 <kallisti> http://shootout.alioth.debian.org/u32/performance.php?test=threadring
00:30:38 <colloinkgravisom> Homespring's spec specifically says that the null program is handled specially.
00:30:42 <kallisti> vs
00:30:43 <kallisti> http://shootout.alioth.debian.org/u64/performance.php?test=threadring
00:30:45 <colloinkgravisom> Specially, i.e. not according to the rules defined elsewhere.
00:30:48 <colloinkgravisom> kallisti: Dunno then.
00:30:52 <Phantom_Hoover> colloinkgravisom, if the language doesn't specify what the null program does, you can't deduce that.
00:31:47 <colloinkgravisom> Phantom_Hoover: No shit?
00:32:01 <Phantom_Hoover> This is basically what I am saying?
00:32:03 <kallisti> colloinkgravisom: the only difference is that it's 64-bit. Could Erlang be faster on a 64-bit machine for some reason?
00:32:25 <colloinkgravisom> Phantom_Hoover: The point is that any reasonable definition will, and you haven't given any evidence that Homespring's spec doesn't, so it just seems like you're complaining about a perfectly valid use of "special case" that the original document itself uses for the sake of it.
00:32:27 <colloinkgravisom> kallisti: Maybe.
00:32:42 <kallisti> *single-threaded 64-bit
00:32:50 <kallisti> s/single-threaded/one core/
00:33:01 <Phantom_Hoover> I have once again lost track of what you're saying completely.
00:33:53 <zzo38> "Hoyle On Poker: A Dead White Guy Teaches You How To Think Like One"
00:34:36 <zzo38> Wild cards must be less than seventeen per deck.
00:36:43 <kallisti> colloinkgravisom: also, Haskell performs comparatively poorly on another threading task. http://shootout.alioth.debian.org/u64q/performance.php?test=chameneosredux
00:38:38 <kallisti> but I'm not really sure what "symmetrical thread rendezvous" is
00:38:43 <kallisti> sounds romantic.
00:39:04 <kallisti> maybe Haskell is not very good at love? :(
00:39:26 <Vorpal> I think I need lighter headphones in the future.
00:39:53 <Vorpal> err, wrong channel
00:40:39 <colloinkgravisom> I think I need lighter headphones in the future.
00:40:57 <Sgeo> Err, wrong person
00:41:17 <Vorpal> lol
00:41:46 <kallisti> "allocate and deallocate many binary trees" so you have to force them to be garbage collected in Haskell?
00:41:54 <Vorpal> colloinkgravisom, /anyway/ the reason was that I just had my headphones on for like 5 hours straight due to watching a live stream and then listening to a podcast
00:41:56 <kallisti> -- normally you would ensure the branches are lazy, but this benchmark
00:41:56 <kallisti> -- requires strict allocation.
00:41:57 <kallisti> ah
00:42:10 <Vorpal> colloinkgravisom, but I didn't intend to discuss that in this channel
00:42:17 <Vorpal> colloinkgravisom, it would be so sgeo to discuss that
00:42:18 -!- cheater has joined.
00:43:10 <colloinkgravisom> Vorpal: It's kind of beautiful that "Sgeo" and "Vorpal" are both adjectives now.
00:43:23 <colloinkgravisom> My name is too long to fall prey to such slander.
00:43:49 <colloinkgravisom> kallisti: The Haskell benchmark game programs would be better if the maintainer wasn't biased like that :)
00:44:03 <colloinkgravisom> TBH, I would just not restrict the algorithms at all.
00:44:15 <colloinkgravisom> If someone comes up with a massively better algorithm, is it really unreasonable to expect everyone else to copy it?
00:44:57 <kallisti> a lot of these benchmarks are DNA-related
00:45:10 <kallisti> this should be called "How well programs compute DNA stuff"
00:45:19 <Vorpal> colloinkgravisom, heh
00:45:26 <Madoka-Kaname> More like "how well programs compute string manipulation"
00:45:38 <Vorpal> <colloinkgravisom> My name is too long to fall prey to such slander. <-- that is a very elliott thing to say
00:46:19 <colloinkgravisom> Vorpal: Shut up you colloinkgravisom piece of shit.
00:46:26 <colloinkgravisom> You're so Phantom_Hoover.
00:46:26 <kallisti> colloinkgravisom: I guess it's a testament to JAva's garbage collection that it actually performs better than C++ on the allocate/deallocate binary trees.
00:46:31 <colloinkgravisom> JAva.
00:46:42 <Phantom_Hoover> How might one be Phantom_Hoover.
00:46:56 <Phantom_Hoover> Does it involve being incredibly witty, charming, suave and good-looking?
00:47:07 <colloinkgravisom> Phantom_Hoover: No, just gay and vampiric.
00:47:09 <colloinkgravisom> Like Twilight.
00:47:37 <kallisti> Phantom_Hoover: witty, charming, suave, and good-looking is more about being kallisti, really.
00:47:44 <kallisti> literally "to the fairest"
00:48:14 <kallisti> or well, Wikipedia says "to the most beautiful" but that's because Wikipedia is racist.
00:51:16 -!- hagb4rd2 has joined.
00:51:36 <kallisti> they should add another parameter to the language benchmark game, where they image the programmer's brain while programming and quantify how much joy they are experiencing.
00:52:45 <kallisti> PHP would rank worst.
00:53:23 -!- calamari has joined.
00:53:30 -!- hagb4rd has quit (Ping timeout: 240 seconds).
00:55:17 <kallisti> Python would rank releatively high because lolzealots. All male Ruby fans would actually have erections while programming.
00:57:18 <kallisti> I guess that's unfair to say though, because all languages have this inexplicable overzealous following (except maybe PHP, no one actually likes PHP)
00:57:33 <Sgeo> kallisti, even the people in ##php don't like PHP
00:58:24 <kallisti> Sgeo: Just wait until you can subscript arbitrary expressions.
00:58:31 <kallisti> then they'll be like "OMG SO EXPRESSIVE"
00:58:45 <zzo38> Yes, it is true; I don't really like PHP either.
01:00:19 <kallisti> Sgeo: didn't they even give it a name or something?
01:00:23 <kallisti> like it's something special.
01:00:57 <colloinkgravisom> nothing is as special as the paamayim nekudotayim
01:01:02 <colloinkgravisom> http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php
01:01:19 <colloinkgravisom> which actually appears in error messages
01:01:21 <colloinkgravisom> with no hint as to what it is at all
01:02:44 <kallisti> huh.
01:03:13 <zzo38> "Paamayim Nekudotayim" is double colon
01:03:18 <kallisti> I guess perl has some equally colorful terminology.
01:03:49 <kallisti> can't call method on non-blessed hashref or whatever.
01:04:15 <Sgeo> kallisti, yes
01:04:39 <Sgeo> I know the abbreviation is FAD
01:05:05 <Sgeo> <TML> Sgeo: !+fad
01:05:05 <Sgeo> <php-bot> Sgeo, Want to be able to access array elements like this: function()[0]? It's called function array dereferencing, and it's coming in PHP 5.4.
01:05:06 -!- iconmaster has quit (Quit: DAMN YOU LIGHTLINK).
01:05:23 <colloinkgravisom> which is on rc4!!!
01:07:00 <Sgeo> They are now talking about disadvantages of FAD
01:07:03 <Sgeo> Particularly abuse
01:07:06 <kallisti> lol
01:07:14 <Sgeo> "is dreading having to debug code that looks like $foo()->bar()[1]->baz('bat')[0]"
01:07:26 <kallisti> wow
01:07:27 <kallisti> really?
01:07:46 <kallisti> PHP programmers are worse than Python programs when it comes to aversion to nested expressions, I guess.
01:08:25 <colloinkgravisom> Sgeo: don't tell them about functional programming
01:08:29 <colloinkgravisom> (no, really: don't)
01:08:46 <kallisti> or Perl.
01:08:49 <kallisti> don't tell them about Perl.
01:09:11 <colloinkgravisom> kallisti: "PHP is language defined by a tool built by some guys who saw a Perl interpreter once and thought it was really neat. They thought that it would just rock to make a similar tool that lived in a webserver and whose default operation was print."
01:09:35 <kallisti> where is this from.
01:09:55 <colloinkgravisom> http://catseye.tc/about/php.html
01:10:32 <kallisti> "One of the most interesting aspects [of PHP version 2] included the way while loops were implemented. The hand-crafted lexical scanner would go through the script and when it hit the while keyword it would remember its position in the file. At the end of the loop, the file pointer sought back to the saved position, and the whole loop was reread and re-executed."
01:10:37 <kallisti> loooool
01:13:37 <NihilistDandy> "I would have to say the single greatest software engineering achievement of PHP is how it taught us all that programming should never be done without having constantly within arm's reach a book with a photo of the author's face on it."
01:14:01 <NihilistDandy> This is why Haskell hasn't caught on, yet. Unless Bonus is an elephant
01:15:55 <kallisti> it actually kind of blows my mind that PHP is faster than Perl in the benchmark game.
01:16:30 <NihilistDandy> Benchmarks are only a good measure of surprise
01:17:00 <colloinkgravisom> `addquote <NihilistDandy> Benchmarks are only a good measure of surprise
01:17:03 <HackEgo> 783) <NihilistDandy> Benchmarks are only a good measure of surprise
01:17:07 <zzo38> PHP is still slow. Even though, some of my programs are PHP implementation of other programming language, such as FurryScript and Icoruma. That makes it very slow. I might eventually rewrite Icoruma in C or Haskell.
01:17:16 <colloinkgravisom> ("A good measure of only surprise" would haev been better, though.)
01:17:37 * NihilistDandy shrugs
01:18:32 <colloinkgravisom> *have
01:19:57 <NihilistDandy> http://catseye.tc/about/cplusplus.html
01:20:08 <NihilistDandy> Gratuitous expertise is a phrase I will be using daily from now on
01:20:19 <kallisti> I was hoping for more than "mostly harmless" on "About Python"
01:20:20 <NihilistDandy> I may put that on a résumé
01:21:25 <colloinkgravisom> kallisti: Can you think of anything *better* to say about Python?
01:21:43 <NihilistDandy> "Perl is what happens when you play Katamari Damacy with the Unix toolchain."
01:22:13 <kallisti> this is an accurate description.
01:23:50 <zzo38> Yet, the IRC client I am using is written in PHP and it runs sufficiently fast.
01:24:06 <zzo38> (It processes every single keystroke, even.)
01:24:30 <kallisti> hax
01:24:39 <NihilistDandy> Yeah, clients that process every kysroke are overtd
01:25:13 <colloinkgravisom> :D
01:25:44 <zzo38> Well, it has to process every keystroke in order to work.
01:25:54 <Phantom_Hoover> <colloinkgravisom> kallisti: Can you think of anything *better* to say about Python?
01:26:04 <Phantom_Hoover> Something something something Sierpinski numbers?
01:26:31 <NihilistDandy> And Scheme's better at that, anyway
01:27:02 <colloinkgravisom> Phantom_Hoover: Wait, how do they relate to Python?
01:27:09 <NihilistDandy> I think I'm having an acid flashback
01:27:28 <colloinkgravisom> NihilistDandy: Better at what?
01:27:31 <Phantom_Hoover> colloinkgravisom, they were invented as a result of an amusingly stupid example in the Python docs.
01:27:54 <Phantom_Hoover> It mentioned that it allowed you to add a set of numbers between C and R, and we were wondering what that would be.
01:27:56 -!- cheater has quit (Read error: Operation timed out).
01:28:12 <NihilistDandy> colloinkgravisom: Sierpinski numbers :D
01:28:47 <colloinkgravisom> Phantom_Hoover: Ohh, right.
01:29:11 <colloinkgravisom> Phantom_Hoover: Are the Sierpinski numbers actually closed under anything, though.
01:29:15 <Phantom_Hoover> Nope.
01:29:28 <colloinkgravisom> Phantom_Hoover: How... good?
01:29:49 <Phantom_Hoover> Weeeellll, I don't recall if I actually proved that they weren't closed under multiplication, but I strongly suspect they weren't.
01:42:54 -!- itidus21 has joined.
01:43:14 -!- cheater has joined.
01:51:19 <colloinkgravisom> Gregor: What fun things can I do with this loltablet :P
01:51:28 <colloinkgravisom> I have absolutely no idea what to do with it.
01:57:02 <kallisti> http://www.cracked.com/article_18983_5-complaints-about-modern-life-that-are-statistically-b.s..html
01:57:14 <kallisti> colloinkgravisom: turn it into a touchscreen synthesizer.
01:57:20 <colloinkgravisom> kallisti: is that an obnoxious or non-obnoxious Cracked article.
01:57:25 <kallisti> non-obnoxious
01:57:26 <colloinkgravisom> Also dude the screen is only 7 inches
01:57:35 <colloinkgravisom> But developing Haskell stuff on it could be cool I guess.
01:57:39 <kallisti> colloinkgravisom: optimize for efficient screen space use.
01:57:47 <kallisti> when designing your synthesizer.
01:58:17 <colloinkgravisom> Phantom_Hoover: Pls verify veracity of obnoxiousness claim,.
01:58:20 <colloinkgravisom> *clam.
01:58:35 <kallisti> colloinkgravisom: it's like, informative and stuff.
02:00:33 <Gregor> colloinkgravisom: That's kinda the issue, isn't it.
02:01:17 <colloinkgravisom> Gregor: SO TEMPTED TO INSTALL INFERNO ON IT
02:01:35 <colloinkgravisom> Sorry, *HELLAPHONE
02:01:37 <colloinkgravisom> Hellablet.
02:01:59 <kallisti> sweet mac book pro and hellablet
02:04:46 <colloinkgravisom> kallisti: Sorry I am ragequitting this article because they're dissing Sugar Sugar which is the BEST WORST SONG EVER.
02:05:14 <Phantom_Hoover> <colloinkgravisom> Phantom_Hoover: Pls verify veracity of obnoxiousness claim,.
02:05:19 <Phantom_Hoover> Non-obnoxious.
02:05:26 <colloinkgravisom> "[Rock music] is deplorable. It is tribal. And it is from America. It follows ragtime, blues, jazz, hot cha-cha and the boogie-woogie, which surely originated in the jungle. We sometimes wonder whether this is the negro's revenge."
02:05:26 <colloinkgravisom> Read more: 5 Complaints About Modern Life (That Are Statistically B.S.) | Cracked.com http://www.cracked.com/article_18983_5-complaints-about-modern-life-that-are-statistically-b.s._p2.html#ixzz1hn6RlHL9
02:05:31 <colloinkgravisom> OK they won me back over with Daily Mail quotes.
02:05:32 <colloinkgravisom> ARGH
02:05:32 <colloinkgravisom> YOU
02:05:33 <colloinkgravisom> FUCKING
02:05:33 <colloinkgravisom> COPY PASTE
02:05:35 <colloinkgravisom> SCRIPT
02:05:35 <colloinkgravisom> ASS
02:05:37 <colloinkgravisom> OF
02:05:39 <colloinkgravisom> SHIT
02:05:52 <zzo38> Put GPS+Astrolog in that computer
02:05:56 <colloinkgravisom> zzo38: ok
02:06:32 <zzo38> (Astrolog has no GPS input; but source-codes is available (although not free-software/open-source, probably due to licensing issues with other parts it was combined with), so it could be modified to have it)
02:07:15 * Phantom_Hoover → sleep
02:07:16 -!- Phantom_Hoover has quit (Quit: Leaving).
02:07:16 <kallisti> colloinkgravisom: but they're dissing Sugar Sugar while BRINGING UP AN INTERESTING POINT ABOUT POPULAR MUSIC COMPARED TO TIMELESS CLASSICS.
02:07:21 -!- derdon has quit (Remote host closed the connection).
02:07:24 <zzo38> Normally, if you push "n" it uses the current date/time and takes the coordinates from the default setting (which you can change), but if it have GPS, then it can be made to, instead, take the coordinates from the GPS.
02:07:41 <zzo38> Possibly it can take the time from the GPS too, if it is possible to do so.
02:08:02 <colloinkgravisom> I wonder if GPS does give time info.
02:09:06 <kallisti> colloinkgravisom: do you like Radiohead?
02:09:06 <zzo38> Astrolog even has a world map on it, and the ability to draw on any chart. Maybe it will sometimes be useful with that kind of computer.
02:09:19 * kallisti is one of those asshole radiohead fans.
02:10:01 <colloinkgravisom> Asshole Radiohead: famous asshole, band.
02:10:13 <colloinkgravisom> Their asses are holes, their radios heads.
02:10:18 <colloinkgravisom> Their surgeons general.
02:10:39 <kallisti> colloinkgravisom: that's a sweet ass-car
02:10:53 <colloinkgravisom> More like a sweet xk-cd.
02:11:02 <kallisti> well, yes.
02:11:23 <kallisti> it's also the only one I would describe as "GOOMH Randall"
02:11:41 <colloinkgravisom> Describing anything like that is unforgivable sin.
02:12:12 <kallisti> colloinkgravisom: recall that it was actually your linking to xkcdsucks that made me familiar with the term
02:12:15 <kallisti> so you can blame yourself.
02:13:30 * colloinkgravisom is unable to read "GOOMH" as anything but a single word "goomh" pronounced "goomh".
02:13:35 <kallisti> same.
02:13:43 <kallisti> GOOMH elliott.
02:13:55 <zzo38> Are you able to make Astrolog with GPS input on Android based computer?
02:13:57 <colloinkgravisom> Goomh Colloinkgravisom.
02:14:00 <colloinkgravisom> zzo38: Probably?
02:14:05 <colloinkgravisom> Isn't Astrolog Windows-only.
02:14:22 <kallisti> `words --eng-gb --finnish 50
02:14:28 <HackEgo> absorman poilem munifeby isopergekry fponn poppim fnfpeach pera lolustam vina nouthangeke sorrbv quirallato scsista elwinderiut noure sekened artaterive laiser lysoidassur bestoarvoimmat seueatteell yhemprobo mowned pros cemenen latiii buryhmivationikiot ski suutorimen her virarchesf lenrecollessum wybui alencziansagni iljaaotta direämmembreet eldobbatii äußerdidalwa old fennari törkeämmte ihorj firmuseva deanamremque
02:14:42 <kallisti> fnfpeach
02:14:56 <kallisti> laiser
02:15:11 <zzo38> No, Astrolog is also available for DOS and UNIX as well as Windows.
02:15:57 <kallisti> Sgeo: you've been lazy with the direämmembreets lately
02:16:44 <colloinkgravisom> fennari
02:16:50 <kallisti> you should have known that, while I was making fun of you constantly for updating us about MSPA, I actually used it as a source of information at the same time.
02:16:50 <colloinkgravisom> ihorj: international house of real jews
02:17:18 <zzo38> Will you need a compiler C into Java to do so?
02:18:25 * kallisti imagines the horribleness of that.
02:18:41 <colloinkgravisom> zzo38: No, Android runs Linux, it just has a srtipped down libc and few traditional tools.
02:18:51 <Sgeo> kallisti, I don't see any updates
02:19:00 <colloinkgravisom> But the UI stuff is Java, so you have to write some Java glue code, presumably with JNI or whatever.
02:19:01 <Sgeo> kallisti, and I'm not always by IRC
02:19:01 <kallisti> Sgeo: you missed the last one, or didn't ping me or something
02:19:04 <colloinkgravisom> I know people do Android stuff in C.
02:19:05 <kallisti> Sgeo: jerk
02:19:13 <Sgeo> kallisti, what, you want me to write a bot?
02:19:21 <kallisti> I want you to do whatever it takes
02:19:23 <kallisti> to inform me
02:19:25 <kallisti> eventually
02:19:29 <kallisti> not necessarily instantaneously
02:19:33 <kallisti> but within a reasonable timeframe.
02:19:36 <kallisti> or I will be upset.
02:19:40 <kallisti> and think of you as a lesser person.
02:19:52 <colloinkgravisom> Wow, people actually do coffee enemas.
02:19:57 <kallisti> colloinkgravisom: yep
02:20:18 <zzo38> Is there a standard processor code or do you need to compile native code differently for different devices?
02:20:36 <Sgeo> kallisti, ok, when I'm updated away from IRC, I'll try to remember to update #esoteric eventually
02:20:40 <colloinkgravisom> zzo38: I don't think there's any actual Android device that runs something that isn't ARM.
02:20:43 <colloinkgravisom> IIRC the x86 port isn't really official.
02:21:07 <kallisti> colloinkgravisom: also: sears catalogs used to sell vibrators.
02:21:57 <kallisti> One of the first vibrators was a steam-powered device called the "Manipulator", which was created by American physician George Taylor, M.D.[2] This machine was a rather awkward device, but was still heralded as some relief for the doctors who found themselves suffering from fatigued wrists and hands.
02:22:03 <kallisti> looooool
02:22:03 <kallisti> I find this notion hilarious.
02:23:04 <kallisti> The "pelvic massage" was especially common in the treatment of female hysteria during the Victorian Era, as the point of such manipulation was to cause "hysterical paroxysm" (orgasm) in the patient. However, not only did they regard the "vulvular stimulation" required as having nothing to do with sex, but reportedly found it time-consuming and hard work.
02:23:09 <kallisti> we've come so far.
02:31:56 <zzo38> There are unofficial Android variants such as Replicant (which removes all proprietary Google stuff from the system), so will many softwares work with it?
02:32:26 <colloinkgravisom> probably
02:39:10 -!- androidgravisom has joined.
02:42:31 <androidgravisom> I'm going to buy the Wolfram Alpha app and NOBODY CAN STOP ME
02:42:45 <monqy> oh no
02:43:12 <androidgravisom> Apart from kallisti or someone who I guess could theoretically talk me out of it.
02:44:00 <androidgravisom> Or the battery running out which it seems like it might soonish.
02:44:28 <kallisti> androidgravisom: wat
02:44:30 <kallisti> what the fuck
02:44:32 <kallisti> are you even thinking
02:44:35 <kallisti> why would you spend MONEY
02:44:37 <kallisti> on a THING
02:44:39 <kallisti> that
02:44:44 <kallisti> is a) not going to be all that useful to you
02:44:47 <kallisti> b) freely available on the internet
02:45:57 <androidgravisom> Um dude it will let me calculate the number of calories in one solar mass of hamburgers with a COMPLETELY STREAMLINED USER INTERFACE
02:46:12 <androidgravisom> Q.E.D.?
02:46:31 <androidgravisom> Also it's under 2 pounds.
02:47:18 <kallisti> two pounds too many.
02:47:52 <androidgravisom> I said under; it's like 1 pound 20 pence.
02:48:20 <kallisti> not worth it.
02:48:41 <androidgravisom> You're not worth it.
02:49:13 <androidgravisom> NBC gig grill jerk used Maghull cashbox shriek org leash go padraig gothic etc period
02:49:24 <androidgravisom> JFK Fagan finish Dougherty offtrack habitation orthodOX captor disposal
02:49:41 <androidgravisom> Stream of Bruno Garth FL JFK fashion poster ricochet fibrinogen hard SC wb JFK
02:49:55 <kallisti> hm W|A has improved a little bit since last I used it to do calculus homework for me.
02:50:18 <androidgravisom> Fibrinogen is a word?
02:51:53 <kallisti> wtf "hepatisis patient height" is a valid query.
02:52:05 <kallisti> *hepatitis
02:52:59 <androidgravisom> But not "your mom's girth".
02:53:28 <androidgravisom> That doesn't fit in a bignum.
02:54:03 <androidgravisom> I should go to sleep soon.
02:54:59 -!- cheater has quit (Ping timeout: 255 seconds).
02:59:48 <kallisti> Result: 1.1×10^-26 kW/Cal (kilowatts per dietary Calorie) (2007 estimate)
03:00:05 <kallisti> when I asked wolfram alpha "Germany electricity consumption / calories in a solar mass of Burger King hamburgers"
03:00:09 <androidgravisom> Oh Lord.
03:00:21 <androidgravisom> The screen is glitching.
03:02:56 -!- androidgravisom has quit (Remote host closed the connection).
03:06:45 <Vorpal> kallisti, wow
03:08:12 -!- incomprehensibly has quit (Quit: Leaving.).
03:08:39 -!- cheater has joined.
03:09:11 <kallisti> also that's apparently 2.73e-27 hertz?? what?
03:09:18 <Vorpal> kallisti, what is?
03:09:21 <kallisti> that figure
03:09:29 <Vorpal> how can it be in hertz?
03:09:31 <kallisti> maybe I misunderstand the "unit conversions" section.
03:09:32 <Vorpal> that makes no sense
03:09:52 <kallisti> http://www.wolframalpha.com/input/?i=Germany+electricity+consumption+%2F+calories+in+a+solar+mass+of+Burger+King+hamburgers
03:09:57 * Vorpal looks
03:10:11 <Vorpal> You have: kW
03:10:11 <Vorpal> You want:
03:10:11 <Vorpal> Definition: kilo W = 1000 kg m^2 / s^3
03:10:13 <Vorpal> well
03:10:16 <Vorpal> there are seconds there?
03:10:29 <Vorpal> You have: cal
03:10:29 <Vorpal> You want:
03:10:29 <Vorpal> Definition: calorie = cal_IT = 4.1868 J = 4.1868 kg m^2 / s^2
03:10:30 <Vorpal> and there
03:10:48 <Vorpal> I don't know if they cancel each other out?
03:10:52 <zzo38> Once someone entered "how much beer can i drink" and it came up with an answer in units of inches to the sixth power. Now it gives different output because it interprets the input differently. But in both cases it is not what is intended.
03:10:57 <kallisti> ah yes
03:10:58 <Vorpal> You have: kW / cal
03:10:58 <Vorpal> You want:
03:10:58 <Vorpal> Definition: 238.8459 / s
03:10:59 <Vorpal> oh yeah
03:10:59 <kallisti> they do.
03:11:02 <kallisti> when you divide
03:11:05 <Vorpal> kallisti, indeed
03:11:07 <kallisti> that leaves you with s^-1
03:11:13 <kallisti> which is hertz
03:11:17 <Vorpal> indeed
03:11:31 <Vorpal> kallisti, for these things units(1) is better than Wolfram Alpha :P
03:11:40 <kallisti> now to interpret what the hell that means.
03:11:57 <zzo38> But how it gets another different answer from what it was last time I tried before.
03:12:02 <Vorpal> kallisti, I don't think the whole sodding thing means anything :P
03:12:08 * kallisti thinks about hertz and how they could relate to german electricity consumption per calories in a solar mass of burger king hamburgers
03:12:34 <Vorpal> kallisti, shouldn't you get an unit-less ratio out of this?
03:12:41 <kallisti> no
03:12:46 <Vorpal> why not
03:12:46 <kallisti> both of those quantities have units.
03:12:51 <Vorpal> well yes
03:12:55 <kallisti> that are not directly inverse.
03:13:01 <kallisti> therefore there is a unit.
03:13:05 <kallisti> in the result of dividing them.
03:13:12 <zzo38> It asked if I wanted to make it interpret it as a multiplication, so I selected that option and it came up with an imaginary number of square drinks (I don't know what kind of unit that is?)
03:13:14 <kallisti> er, not directly equal rather
03:13:17 <kallisti> since you're dividing
03:13:24 <kallisti> if you were multiplying inverses you would get a unitless quantity.
03:13:25 <Vorpal> kallisti, oh right, is that "german electricity consumption per year"?
03:13:35 -!- androidgravisom has joined.
03:13:51 <kallisti> KW-hours per year
03:13:56 <androidgravisom> kallisti: http://stackoverflow.com/questions/8651316/is-there-a-functional-representation-for-strict-evaluation
03:14:06 <Vorpal> and kWh just means some number of J
03:14:18 <zzo38> And it still cannot compute ecliptic coordinates
03:14:29 <Vorpal> and cal translates into J as well iirc
03:14:31 <Vorpal> which mean J/y / J
03:14:34 <zzo38> (Even though their blog once mentions ecliptic coordinates)
03:14:39 <Vorpal> which cancels out to give hertz
03:14:41 <Vorpal> indeed
03:15:42 <kallisti> androidgravisom: well? you better get to answering
03:15:47 <kallisti> if you want your SO rep to go up.
03:16:03 <kallisti> you should explicitly mention how seq has side-effects.
03:16:08 <kallisti> this is important.
03:16:09 <androidgravisom> <Vorpal> kallisti, for these things units(1) is better than Wolfram Alpha :P
03:16:16 <androidgravisom> Drink!!!!!
03:16:18 <kallisti> lol
03:16:20 <androidgravisom> Seem
03:16:21 <kallisti> Drink!!!!!!
03:16:22 <androidgravisom> Seem
03:16:23 <Vorpal> androidgravisom, at least I find it easier to use
03:16:25 <androidgravisom> Seem
03:16:28 <androidgravisom> Seem
03:16:29 <Vorpal> also I don't get the reference
03:16:31 <androidgravisom> Erm
03:16:36 <androidgravisom> Frink
03:16:39 <kallisti> lol
03:16:42 <Vorpal> ah
03:16:42 <androidgravisom> Finally.
03:16:44 <Vorpal> frink
03:16:45 <Vorpal> right
03:16:51 <androidgravisom> Seem!
03:16:52 <Vorpal> androidgravisom, seem? really?
03:16:57 <androidgravisom> Yes.
03:17:11 <Vorpal> androidgravisom, I guess that keyboard app wasn't that good when you type names of things
03:17:24 <androidgravisom> For "erm".
03:17:28 -!- DCliche has joined.
03:17:39 <androidgravisom> The paths are almost identical, so...
03:17:46 <Vorpal> right
03:17:47 <kallisti> `frink kW/kilocalorie
03:17:51 <androidgravisom> But it's really quite lovely in general
03:17:56 <Vorpal> right
03:18:00 <kallisti> why is hackego so slooooowww...
03:18:00 <HackEgo> 2500/10467 (approx. 0.23884589662749595) s^-1 (frequency)
03:18:08 <Vorpal> kallisti, because iirc it runs on codu
03:18:18 <Vorpal> which is slooow
03:18:22 <kallisti> `run time frink kW/kilocalorie
03:18:34 <HackEgo> 2500/10467 (approx. 0.23884589662749595) s^-1 (frequency) \ \ real.0m8.490s \ user 0m8.660s \ sys.0m0.250s
03:18:39 <androidgravisom> Frink is slow to start up to boot
03:18:57 <Vorpal> what else can frink do?
03:19:03 <androidgravisom> Everything.
03:19:05 <kallisti> runs in 3 seconds on my machine.
03:19:08 <Vorpal> apart from that?
03:19:09 <androidgravisom> Seriously.
03:19:11 <kallisti> user time.
03:19:22 <androidgravisom> Google the dogs, they're amazing
03:19:26 <Vorpal> is it in ubuntu repos?
03:19:26 <androidgravisom> Lol
03:19:34 <kallisti> no
03:19:41 <Vorpal> right, got a link then?
03:19:47 <kallisti> http://google.com
03:19:48 <zzo38> I wanted bohlen-pierce music, so I typed in "bohlen-pierce" and its answer is 7646 km
03:20:00 <kallisti> androidgravisom: don't worry, I've got this covered.
03:20:18 <kallisti> androidgravisom: you can save yourself from trying to use your shitty keyboard to talk to Vorpal.
03:20:21 <androidgravisom> Vorpal: no, it's (the single best) closed source thing I've ever used
03:20:32 <androidgravisom> Thankfully it's fully extensible.
03:20:33 -!- Klisz has quit (Read error: Operation timed out).
03:20:33 <Vorpal> oh closed source, right
03:20:38 -!- DCliche has changed nick to Klisz.
03:20:51 <kallisti> androidgravisom: better than dwarf fortress?
03:20:53 <Vorpal> 64-bit version around? Or do I need to mess with 32-bit libraries?
03:21:00 <androidgravisom> kallisti: fsvo sorry
03:21:03 <androidgravisom> Sorry
03:21:06 <androidgravisom> Sorry
03:21:08 <androidgravisom> Sit
03:21:10 <kallisti> lol
03:21:11 <Vorpal> heh
03:21:23 <Vorpal> androidgravisom, that typing thing sucks I think
03:21:23 <androidgravisom> Virtual: it's java
03:21:32 <Vorpal> virtual? really?
03:21:32 -!- cheater has quit (Ping timeout: 276 seconds).
03:21:33 <Vorpal> who is that
03:21:42 <androidgravisom> Nah, it's fifty times better than iPhone keyboard
03:21:46 <Vorpal> well okay
03:21:54 <kallisti> my blackberry keyboard is awesome.
03:22:00 <androidgravisom> It doesn't know your nicks though
03:22:04 <androidgravisom> :p
03:22:06 <Vorpal> androidgravisom, but compare to an actual keyboard. It is less bulky sure, but typing accuracy seems terrible
03:22:17 <androidgravisom> Only because I'm going way too far
03:22:22 <androidgravisom> Fast
03:22:31 <Vorpal> androidgravisom, I should so change to a nick like ][_a328ds
03:22:32 <androidgravisom> I only started using it yesterday
03:22:46 <zzo38> It seems wrong so I entered "what is wrong with you" and its answer is "Human Discourse: Additional functionality for this topic is under development..."
03:23:18 <androidgravisom> Remember when I used to show incoherent babble with my iPhone every night?
03:23:28 <Vorpal> androidgravisom, I tried to forget
03:23:31 <androidgravisom> Now I use a computer instead.
03:23:42 <androidgravisom> Windsor.
03:23:46 <androidgravisom> Windsor.
03:23:49 <Vorpal> ....
03:23:51 <androidgravisom> Windsor.
03:23:57 <Vorpal> come on
03:23:57 <androidgravisom> Timeout
03:24:02 <zzo38> So now make up a open-source/free-software version of a similar thing, so that everyone can correct it if it has these kind of problem
03:24:07 <kallisti> lol
03:24:29 -!- PatashuXantheres has joined.
03:24:51 <Vorpal> androidgravisom, idea: read line then decide if you actually want to send it.
03:24:53 <Vorpal> (You might even if it is wrong, for the comedic value. I assume that is what you are doing actually)
03:25:05 <androidgravisom> Btw I'm deliberately trying to say things I know won't be in its dictionary for comedy purposes
03:25:15 <androidgravisom> :p
03:25:18 <Vorpal> figures
03:25:29 <Vorpal> androidgravisom, what were you trying to say instead of "Windsor"?
03:25:35 <Vorpal> actually "timeout"?
03:25:40 <androidgravisom> Ringgit.
03:25:43 <androidgravisom> Sigh
03:25:45 <Vorpal> no
03:25:49 <androidgravisom> Rimshot
03:25:57 <Vorpal> Ringgit is not even a real word
03:26:11 <Vorpal> how could that be in the dictionary
03:26:15 <Vorpal> that makes /no/ sense
03:26:16 <androidgravisom> That sigh was actually an argh
03:26:22 <Vorpal> hah
03:26:46 <Vorpal> oh god, I'm actually laughing out loud thanks to this but there are people sleeping in the next room
03:26:47 <Vorpal> :(
03:26:50 -!- Patashu has quit (Ping timeout: 240 seconds).
03:27:10 <androidgravisom> Just sooooo playing for the comedic presuppose please
03:27:31 <Vorpal> ?
03:27:33 <Vorpal> what?
03:27:39 <androidgravisom> Sooooo? SERIOUSLY?
03:27:43 <Vorpal> presuppose? seriously?
03:27:51 <androidgravisom> That's not a word exclamation marks
03:28:08 <Vorpal> heh
03:28:18 <Vorpal> it wrote out "exclamation marks"?
03:28:22 <kallisti> `words --eng-all 25
03:28:26 <androidgravisom> No, admittedly
03:28:29 <HackEgo> formode postaft prepa eul grit ambiecurr olbau zre poult rich nob ping flyiatherasyah curly hratysell blach sedenting ceri ocapu uni vexegel colefficefn bach yol baitj
03:28:29 <androidgravisom> I did that
03:28:29 <Vorpal> androidgravisom, aww
03:28:53 <kallisti> what would cause the real time to faster than the user time.
03:28:57 <androidgravisom> Let me try and type that word output
03:28:57 <Vorpal> androidgravisom, "<androidgravisom> Just sooooo playing for the comedic presuppose please" <-- what /were/ you trying to say?
03:29:11 <Vorpal> type that word output?
03:29:14 <Vorpal> right
03:29:56 <kallisti> "User+Sys will tell you how much actual CPU time your process used. Note that this is across all CPUs, so if the process has multiple threads it could potentially exceed the wall clock time reported by Real."
03:30:00 <kallisti> ah
03:30:09 <androidgravisom> Dormouse p post period will get it Albrecht play are our rich Nov ping gooseflesh curly hardshell blah assenting CEO I pappy uni verbal Colleen Bach tool batik
03:30:17 <androidgravisom> GOOSEFLESH
03:30:23 <Vorpal> androidgravisom, ...
03:30:50 <Vorpal> androidgravisom, this is too absurd to be funny. Because there is no way I can even guess what was meant
03:31:20 <androidgravisom> I was reproducing the output of the words program
03:31:21 <Vorpal> androidgravisom, and gooseflesh seems fairly reasonable
03:31:26 <androidgravisom> Badly.
03:31:29 <Vorpal> androidgravisom, ah
03:32:07 <Vorpal> androidgravisom, I have to say a real keyboard is superior. Just imagine writing haskell code with that thing of yours
03:32:12 <Vorpal> that would just be terrible
03:32:22 <Vorpal> or any sort of code even
03:32:37 <androidgravisom> Not a real keyboard that would fit into 7 inches
03:32:38 <monqy> cobol?
03:32:46 <Vorpal> androidgravisom, well obviously
03:32:56 <androidgravisom> Anyway, it's just need an appropriate dictionary
03:33:02 <androidgravisom> For Haskell
03:33:12 <Vorpal> androidgravisom, I'm just saying that for many tasks a device with a real keyboard, such as a laptop, is superior
03:33:31 <monqy> but tablets are the future
03:33:33 <itidus21> sorta like a c64 basic dictionary? :-D
03:33:33 <Vorpal> I'm writing on a laptop atm
03:33:39 <androidgravisom> Okay? I don't think that's a controversial opinion
03:33:44 <Vorpal> it is not as good as a desktop keyboard.
03:33:50 <androidgravisom> Sooooo I'm knot sure what your point is
03:33:54 <androidgravisom> Sooooo
03:33:57 <androidgravisom> Wow
03:33:59 <Vorpal> <androidgravisom> Okay? I don't think that's a controversial opinion <-- I'm not aiming to be controversial
03:34:04 -!- cheater has joined.
03:34:10 <Vorpal> <androidgravisom> Sooooo I'm knot sure what your point is <-- wut?
03:34:10 <androidgravisom> It assumes I want so by default now
03:34:15 <androidgravisom> Ha, then it doesn't
03:34:21 <Vorpal> androidgravisom, what did you actually want?
03:34:29 <androidgravisom> So
03:34:31 <Vorpal> can't you type it out slowly
03:34:39 <androidgravisom> Just pronounce the line
03:34:46 <androidgravisom> It remains coherent
03:34:54 <Vorpal> androidgravisom, well knot -> not obviously
03:35:26 <zzo38> Yes, I do agree they ought to have physical keyboard
03:35:47 <Vorpal> androidgravisom, you could fit a keyboard into that thing
03:35:59 <androidgravisom> No you couldn't
03:36:00 <Vorpal> androidgravisom, remember those old thinkpads with keyboards that folded out?
03:36:04 <Vorpal> you could do that
03:36:11 <androidgravisom> Tearaway
03:36:16 -!- DCliche has joined.
03:36:18 <androidgravisom> Yeaaaaah
03:36:26 <Vorpal> tearaway keyboard?
03:36:26 <Vorpal> nah
03:36:31 <androidgravisom> Lol
03:36:32 <Vorpal> I don't think that is a good idea
03:36:39 <androidgravisom> I'm trying speech recognition again
03:36:42 <Vorpal> https://en.wikipedia.org/wiki/IBM_ThinkPad_Butterfly_keyboard
03:36:44 <Vorpal> androidgravisom, ^
03:36:48 <androidgravisom> It seems to be better now that = British
03:36:57 <androidgravisom> Wow this is actually coherent
03:37:02 <Vorpal> it is
03:37:06 <androidgravisom> Busy I apologise for everything
03:37:11 <Vorpal> apart from the =
03:37:11 <androidgravisom> Is
03:37:13 <Vorpal> and now it fails
03:37:18 <androidgravisom> Busy
03:37:28 <androidgravisom> F I ZZIE
03:37:48 <androidgravisom> Actually plants that outlet by letter
03:37:48 <Vorpal> "androidgravisom, [...] I apologise for everything"
03:37:51 <Vorpal> right
03:37:57 <Vorpal> that works
03:38:04 <androidgravisom> I was apologising to FI ZZ ie
03:38:07 -!- calamari has quit (Ping timeout: 252 seconds).
03:38:07 <Vorpal> you are sorry for everything you did?
03:38:19 <Vorpal> <androidgravisom> Actually plants that outlet by letter <-- what
03:38:20 <Vorpal> was that
03:38:21 <androidgravisom> For my comments about speech recognition
03:38:26 <Vorpal> ah
03:38:28 <androidgravisom> I was apologising for those
03:38:32 <Vorpal> ah
03:38:48 <Vorpal> I do think "<androidgravisom> Busy I apologise for everything" is quote-worthy though
03:38:51 <androidgravisom> It was I actually pronounce that out letter by letter
03:39:27 <androidgravisom> She should ship
03:39:54 <Vorpal> that sounds dirty
03:39:55 <androidgravisom> Book shop shop shop a couple couple of
03:39:56 -!- Klisz has quit (Ping timeout: 248 seconds).
03:40:07 <Vorpal> a tounge twister or some kind?
03:40:18 <Vorpal> tongue*
03:40:37 <androidgravisom> I don't think it wants me to say duck
03:40:39 <androidgravisom> Duck
03:40:41 <androidgravisom> Duck
03:40:45 <androidgravisom> Duck
03:40:47 <Vorpal> fuck?
03:40:49 -!- cheater has quit (Ping timeout: 240 seconds).
03:40:51 <androidgravisom> Yes
03:40:55 <kallisti> what the duck.
03:41:03 <Vorpal> androidgravisom, that is silly
03:41:09 <androidgravisom> I don't give a flying.
03:41:10 <Vorpal> androidgravisom, try other vulgar language?
03:41:11 <androidgravisom> Lol
03:41:23 <androidgravisom> It cut off the"duck"
03:41:35 <Vorpal> come on, where did that space go?
03:41:54 <androidgravisom> Kids shopping but I don't give
03:42:00 <Vorpal> ...
03:42:01 <androidgravisom> LOL
03:42:15 <Vorpal> where did "Kids shopping" come from?
03:42:28 <androidgravisom> No clue
03:43:00 <Vorpal> does google provide the speech recognition software?
03:43:21 <Vorpal> it actually seem better than the built in one on OS X from my experience with that one
03:43:31 <Vorpal> unless it just sucks at accents that badly
03:43:36 <androidgravisom> It's dragon
03:43:48 <androidgravisom> I think it's a Swype specific thing
03:43:48 <Vorpal> until it took an arrow to the knee?
03:43:52 <androidgravisom> Due
03:43:53 <androidgravisom> Site
03:43:56 <androidgravisom> Due
03:43:58 <androidgravisom> Due
03:44:00 <androidgravisom> Die
03:44:14 <androidgravisom> Die die die die die
03:44:26 <androidgravisom> Tasty
03:44:30 <Vorpal> ...
03:44:31 <Vorpal> lol
03:44:48 <Vorpal> androidgravisom, anyway you said dragon
03:44:52 <Vorpal> what did you expect
03:45:09 <androidgravisom> I keep going in feet
03:45:17 <androidgravisom> And keep dragging my feet
03:45:18 <Vorpal> you are?
03:45:26 <androidgravisom> I keep dragging my feet
03:45:33 <androidgravisom> I keep track on my feet
03:45:39 <Vorpal> really
03:45:44 <androidgravisom> You think
03:46:00 <Vorpal> wait is this repeating whatever it think you said and see if ends up consistent?
03:46:07 <androidgravisom> I keep driver Matthew
03:46:11 <Vorpal> that could be fun
03:46:15 <Vorpal> and what
03:46:32 <androidgravisom> No, but I'll try that now
03:46:44 <Vorpal> why is it that software failing at speech recognition is so funny?
03:47:03 <androidgravisom> I'm great grandson and I approve this message
03:47:12 <androidgravisom> I'm great grandson and I approve this message
03:47:18 <Vorpal> hm
03:47:20 <androidgravisom> I agree Branson and I approve this message
03:47:31 <Vorpal> working out great so far
03:47:43 <androidgravisom> I agree Bronson and I approve this message
03:47:55 <androidgravisom> I agree Johnson and I approve this message
03:47:56 <Vorpal> tell me what the original was instead of "great grandson" btw. Using typing or something
03:48:05 <androidgravisom> I agree Johnson and I approve this message
03:48:14 <androidgravisom> "photoluminescent"
03:48:19 <Vorpal> heh
03:48:24 <androidgravisom> "colloinkgravisom"
03:48:28 <Vorpal> oh
03:48:30 <Vorpal> :/
03:48:35 <androidgravisom> I agree Johnson and I approve this message
03:48:36 <Vorpal> I thought it was "photoluminescent"
03:48:43 <Vorpal> "photoluminescent" is so much better
03:48:48 <androidgravisom> I'm totally messed it and I approve this message
03:48:57 <Vorpal> it certainly did!
03:48:58 <androidgravisom> Went to the lesson
03:49:05 <Vorpal> what it cut it short!?
03:49:07 <androidgravisom> Virtually no less
03:49:07 <Vorpal> :(
03:49:15 <androidgravisom> Forgiveness
03:49:31 <Vorpal> no you shall not be forgiven for your mangling of the message
03:49:32 <androidgravisom> Photos and wanted
03:49:41 <androidgravisom> I'm sorry
03:49:43 <Vorpal> lol
03:49:58 <Vorpal> wait it turned "photos and wanted" into "I'm sorry"?
03:50:00 <Vorpal> -_-
03:50:28 -!- azaq23 has quit (Quit: Leaving.).
03:52:11 <androidgravisom> Nah
03:52:23 <androidgravisom> I was going for photoluminescent
03:52:47 <androidgravisom> Dangling guardian PDT the superior soul
03:53:01 <Vorpal> ...
03:53:02 <Vorpal> :(
03:53:30 <Vorpal> <androidgravisom> Dangling guardian PDT the superior soul <-- what was that
03:53:45 <androidgravisom> I'm not sure.
03:53:50 <Vorpal> heh
03:54:17 -!- cheater has joined.
03:59:14 <colloinkgravisom> hi
04:03:03 -!- androidgravisom has quit (Ping timeout: 252 seconds).
04:04:52 <colloinkgravisom> "Can you spot what's wrong with what I'm doing? I'm at a loss. The complaining about constructing infinite types really ticks me off because I though Haskell was all about that sort of thing. It has infinite data structures, so why the problem with infinite types? I suspect it has something to do with that paradox which showed untyped lambda calculus is inconsistent. I'm not sure though. Would be good if someone could clarify."
04:04:54 <colloinkgravisom> this guy is
04:04:57 <colloinkgravisom> dunning-kruger personified
04:05:01 <colloinkgravisom> he'd get along great with kallisti
04:06:04 <kallisti> lolwat
04:06:15 <kallisti> I would never associate myself with this uneducated trash, hmph.
04:06:36 <itidus21> i encountered that paradox while snooping around on wiki
04:06:42 <itidus21> but apparently they fixed it
04:06:48 <itidus21> or did they?
04:07:11 <colloinkgravisom> speaking of dunning-kruger
04:07:57 <itidus21> the dunning-kruger effect in educational materials
04:08:18 <kallisti> colloinkgravisom: it complains about infinite types because infinite types are /impossible/. Anyone with a brain knows this.
04:08:24 <kallisti> sheesh.
04:08:28 <colloinkgravisom> i guess that works
04:08:30 <colloinkgravisom> kallisti: ur joking too rite
04:08:33 <itidus21> all primates have brains
04:08:35 <kallisti> no.
04:08:36 <kallisti> (yes)
04:09:19 <monqy> itidus21: deep
04:09:54 <colloinkgravisom> apart from monqy
04:10:00 <colloinkgravisom> he has brane
04:10:09 <kallisti> My guess would be that Haskell doesn't support infinite types because a) it needs types to be fully realized by the end of compile-time b) infinite types cause the compilation process to not halt thanks to (a)
04:10:15 <kallisti> is that correct?
04:11:31 <colloinkgravisom> wrong and wrong
04:12:12 <monqy> :(
04:13:12 -!- const has quit (Quit: I found a 1 /dev/zero).
04:13:34 <colloinkgravisom> i found a 1 /dev/zero
04:15:14 <kallisti> colloinkgravisom: this is a hard question to google for. can you clarify?
04:16:53 <itidus21> what i have learnt so far in my time here is that mathematics of computation, cellular automata, turing machines, haskell curry, alonzo church, lisp, haskell, brainfuck .. all form a stratum of topics which you will never find in a volume of sams teach yourself c++ in 21 days
04:17:33 <kallisti> that would be a shitty C++ reference if it randomly talked about lisp and brainfuck.
04:18:17 <colloinkgravisom> s/shitty/best/
04:18:35 <itidus21> its not really a reference though so much as set of lessons
04:18:45 <colloinkgravisom> kallisti: anyway no infinite types are not really problematic. we have lists f.e.
04:18:51 <colloinkgravisom> but many programs start typing that we don't want to.
04:18:56 <colloinkgravisom> and i don't know what it does to inference
04:19:22 <kallisti> "And so, to dereference a pointer you use the * operator. Also, Alonzo Church was born in 1903."
04:19:36 <kallisti> colloinkgravisom: I assume you mean infinite type-level lists??
04:19:42 <kallisti> infinite lists do not have an infinite type in Haskell.
04:20:01 <colloinkgravisom> kallisti: is there a way to tell you you're being stupid without hurting your feelings
04:20:13 <kallisti> can you just clarify this simple point?
04:20:27 <itidus21> i don't actually understand any of the topics i listed :P
04:20:47 <itidus21> i just realize that something about them. some ineffable quality in them forms the basis of esoteric programming
04:20:50 <colloinkgravisom> [a] = Maybe (a, [a])
04:21:04 <colloinkgravisom> itidus21: no, more like it forms the basis of what we talk about
04:22:04 <itidus21> somewhere i learned that lewis carroll wrote a book about how people should learn euclid directly from euclid instead of modern textbooks
04:22:16 <itidus21> whether that is actually what the book is about i won't be sure until i've read it
04:22:45 <colloinkgravisom> you should learn lewis carroll talking about euclid directly from lewis caroll instead of internet renditions
04:23:07 <itidus21> i downloaded the book, just haven't read it yet
04:23:17 <itidus21> (yet is a bit hopeful)
04:23:17 <kallisti> colloinkgravisom: hm.
04:23:19 <zzo38> colloinkgravison: Yes that is one way.
04:24:02 <kallisti> colloinkgravisom: but that won't type in Haskell.
04:24:14 <colloinkgravisom> kallisti: yes. because infinite types are banned.
04:24:18 <itidus21> it's easy for someone to learn assembly language without ever being aware of turing or functional programming, etc...
04:24:33 <colloinkgravisom> today we learned kallisti saying "uneducated trash" is the prelude to irony
04:24:51 <kallisti> colloinkgravisom: except they're no problem becauses of lists f.e.
04:24:53 <kallisti> ?
04:25:34 <itidus21> so for someone who only knows BASIC, as perhaps included in a manual in a commodore 64 box, then assembly language might seem elite to him. but for the assembly language programmer then lambda calculus might seem elite to him
04:25:34 <colloinkgravisom> <kallisti> My guess would be that Haskell doesn't support infinite types because a) it needs types to be fully realized by the end of compile-time b) infinite types cause the compilation process to not halt thanks to (a)
04:25:34 <zzo38> You can define a recursive type by newtype
04:25:38 <colloinkgravisom> your reasons are incorrect
04:25:52 <colloinkgravisom> because lists are infinite types (behind data-type wrapping) and neither (a) nor (b) applies
04:26:09 <kallisti> colloinkgravisom: but Haskell doesn't really consider them infinite types does it?
04:26:14 <colloinkgravisom> itidus21: lambda calculus is about a billion times easier than any assembly language
04:26:28 <colloinkgravisom> kallisti: it's an abstract entity, i'll leave the psychoanalysis to you
04:26:39 <kallisti> I guess Haskell just permits a subset of infinite types that can be formed via product and sum types.
04:27:07 <colloinkgravisom> what
04:27:10 <colloinkgravisom> you're dumb
04:27:19 <itidus21> brb
04:27:31 * colloinkgravisom 's patented educational method is based on a healthy amount of superiority and burning hatred for all inferior to him
04:27:49 <kallisti> as you can see it's super effective.
04:27:53 * pikhq discovers the Kindle is pretty much a perfect manga raw reading device
04:27:58 <colloinkgravisom> kallisti: in entertaining me, yes
04:28:12 <kallisti> colloinkgravisom: really? you always seem pretty annoyed
04:28:16 <kallisti> especially if I continue being confused.
04:28:25 <monqy> that's part of the fun
04:28:38 <colloinkgravisom> it's more like... disgust
04:28:38 <kallisti> "gee, no matter how many times I tell him he's stupid or wrong, he continues being stupid and wrong! so frustrating"
04:28:58 <colloinkgravisom> like im sure in ancient times people went to watch i dont know natives rip each other apart
04:29:16 <colloinkgravisom> revelling in their savagery and idiocy, actually this never happened, probably what actually happened was genocide or something
04:29:21 <colloinkgravisom> but the spirit is there
04:29:32 <colloinkgravisom> i'm making a lot of sense, i think i'll knock myself unconscious soon
04:30:09 <kallisti> okay so Haskell supports infinite types, but not at the type... level? I mean, I get that lists are an infinite type, but not how to word why Haskell permits it and not other infinite types.
04:30:34 <colloinkgravisom> you seem to be having trouble with the what, not why
04:31:47 <kallisti> basically you're saying because infinite data structures such as lists are isomorphic to infinite types, Haskell supports infinite types. right?
04:32:10 <kallisti> s/isomorphic/equivalent/ I guess
04:32:17 <colloinkgravisom> let me try this the third time
04:32:20 <colloinkgravisom> <kallisti> My guess would be that Haskell doesn't support infinite types because a) it needs types to be fully realized by the end of compile-time b) infinite types cause the compilation process to not halt thanks to (a)
04:32:26 <colloinkgravisom> if either of these were true, then lists could not exist
04:32:31 <colloinkgravisom> therefore your reasons are wrong
04:32:39 <kallisti> ..
04:32:47 <colloinkgravisom> infer anything about what i am trying to say beyond this at your own peril
04:34:07 <kallisti> well, it has to do with type inference as well.
04:34:51 <kallisti> since [Char] is a concrete type it doesn't have to make the inference that [Char] = Maybe (Char, [Char]) or whatever
04:35:01 <kallisti> whereas something like a = b -> a
04:35:17 <kallisti> is not concrete.
04:35:28 <colloinkgravisom> sorry, you passed my threshold of "coherent enough to bother trying to decode"
04:35:28 <monqy> what
04:35:34 <colloinkgravisom> have fun
04:35:38 <monqy> yes mine too
04:36:43 <kallisti> basically [Char] is done... there are no more inferences to make.
04:37:10 <colloinkgravisom> kallisti
04:37:10 <colloinkgravisom> stop
04:37:19 <colloinkgravisom> also its 5 a m Lauhing Out Loud !!!
04:37:19 <kallisti> colloinkgravisom: no.
04:37:35 <kallisti> I will continue being wrong
04:37:36 <kallisti> loudly
04:37:50 <colloinkgravisom> kallisti: everyone present just gave up on you so i guess if you really want to just continue saying things to no avail so that you embarrass yourself more fully on the permanent record that is the logs then
04:37:51 <colloinkgravisom> have fun!!!
04:38:14 * kallisti sighs.
04:38:52 <kallisti> #esoteric is a bad place to learn things.
04:38:58 <monqy> learn?
04:39:00 <kallisti> yes.
04:39:10 <colloinkgravisom> i've learned tons and tons here, it's just not a good place to learn really basic things
04:39:19 <kallisti> like what? what is basic about this?
04:39:24 <colloinkgravisom> everything
04:39:27 <colloinkgravisom> or rather
04:39:36 <colloinkgravisom> it's not really basic in and of itself but the parts you are stumbling on are
04:39:37 <kallisti> name things that are basic, I will look them up. problem solved.
04:39:39 <colloinkgravisom> anyway monqy tell me to go to bed thanks
04:39:44 <monqy> go to bed
04:39:55 <colloinkgravisom> kallisti: well you obviously don't understand type inference/checking so start there, try [[hindley milner]]
04:40:02 <colloinkgravisom> monqy: ok thnx when
04:40:11 <monqy> you didn't specify
04:40:19 <colloinkgravisom> help
04:40:22 <monqy> D:
04:40:40 <colloinkgravisom> we need our qdb to support bold :(
04:40:47 <colloinkgravisom> Gregor: please unfilter ctrl+b, ctrl+c, thanxkx
04:40:50 <colloinkgravisom> @tell Gregor Gregor: please unfilter ctrl+b, ctrl+c, thanxkx
04:40:51 <lambdabot> Consider it noted.
04:41:45 <colloinkgravisom> ,monqym, should i bed in 8 hr
04:41:53 <monqy> ould that be a good idea
04:42:34 <colloinkgravisom> idm idfn oidrnt ernt rent knwo
04:42:37 <colloinkgravisom> probalbklyjh nto
04:42:39 <colloinkgravisom> praobajklyhl: earlier
04:42:42 <colloinkgravisom> woduewl be beterjer
04:43:17 <monqy> 7hr
04:43:22 <colloinkgravisom> 0hr???
04:43:26 <monqy> -2 hr
04:43:44 -!- calamari has joined.
04:43:48 <colloinkgravisom> ehlp
04:43:50 <zzo38> Maybe if I make Astro-Q, I can include a function to use GPS input. (Astrolog lacks GPS input function)
04:44:18 <monqy> if you should bed in negative hours you are late to bed
04:44:42 <monqy> unless you did bed. good job.
04:45:04 <colloinkgravisom> i
04:45:05 <colloinkgravisom> didnmt
04:45:13 <monqy> oops
04:45:21 <colloinkgravisom> bleeeeeurgh bed is just so ahrd theres so many rules and restrictions and prices and values
04:45:31 <colloinkgravisom> and formfilling
04:46:08 <monqy> for me bed is easeiy i just turn things off then the floor is right there and wow blankeyts how nice
04:46:26 <zzo38> Let's make a list of proposed features of Astro-Q, whether or not any of it will be implemented.
04:47:17 <colloinkgravisom> zzo38: universe
04:47:18 <colloinkgravisom> spatial
04:47:19 <colloinkgravisom> temporal hug
04:47:20 <colloinkgravisom> mechanism
04:47:22 <colloinkgravisom> friend
04:47:26 <colloinkgravisom> (thats one feature)
04:47:27 <monqy> speech recognition
04:47:30 <colloinkgravisom> yes
04:47:35 <colloinkgravisom> on-screen keyboard robot mouse
04:47:38 <colloinkgravisom> on-screen keyboard robot cat
04:47:40 <colloinkgravisom> (they chase)
04:47:46 <zzo38> I don't understand what "spacial temporal hug mechanism friend" means.
04:47:47 <monqy> i need voice commands for my universe spatial temporal hug mechanism friend
04:47:50 <colloinkgravisom> me neither
04:47:54 <colloinkgravisom> that's for astro-q to find out
04:48:06 <kallisti> colloinkgravisom: okay, so, [a] is a monotype.
04:48:38 <colloinkgravisom> im going to turn off my computer now by
04:48:39 <colloinkgravisom> putting my nose
04:48:41 <colloinkgravisom> on the powerb utton
04:48:44 <colloinkgravisom> and smudging it in
04:48:46 <colloinkgravisom> wish me luck monqy
04:48:49 <monqy> luck luck
04:48:59 <colloinkgravisom> help i cant fit
04:49:05 <colloinkgravisom> 4t5rrttdf
04:49:05 <monqy> power button may be a bad idea
04:49:07 <monqy> is it
04:49:11 <kallisti> monqy: okay elliott is leaving, you explain things instead.
04:49:12 <monqy> i dont know expertise in this area...
04:49:18 <monqy> aklistey: what tHigns
04:49:31 <monqy> do you want "explaiend
04:49:51 <kallisti> ytygkyjfuyhtfyuuyyufuyfig
04:49:53 <kallisti> hope that helps.
04:50:00 <monqy> sorrey i cant explaijn that
04:50:06 <monqy> it is a mystery of life
04:50:11 <kallisti> Haskell allows infinite types but also doesn't allow infinite types?
04:50:14 <monqy> what
04:50:16 <kallisti> help.
04:50:19 <monqy> what
04:50:33 <zzo38> One thing I almost certainly intend to include is all the features of Swiss Ephemeris. So Astro-Q will be a superset of Swiss Ephemeris.
04:51:03 <kallisti> monqy: help.
04:51:14 <kallisti> monqy: where you paying attention earlier?
04:51:42 <zzo38> I updated my D&D recording with the latest session.
04:53:09 -!- colloinkgravisom has quit (Ping timeout: 240 seconds).
04:55:34 <kallisti> how do you describe the infinite types that Haskell allows compared to the infinite types it doesn't allow.
04:55:48 <monqy> what do you mean allows and not allows
04:56:13 <kallisti> you can have lists, which are an infinite type, but other infinite types are not allowed.
04:56:18 <monqy> liuke what
04:56:24 <kallisti> a = a -> b
04:56:28 <monqy> but you can have that
04:57:45 <monqy> i think its: newtype Ohno a = Ohno (Ohno a -> a)
04:57:50 <monqy> and then your thing would be: Ohno b
04:57:54 <monqy> ohno
04:57:59 <zzo38> You cannot have any infinite types, not even lists. But what you can have is types where some or all of its constructors have have reference to themself
04:58:13 <zzo38> And values do the same thing
04:58:34 <kallisti> yes. okay. that's what I already knew, then.
04:59:46 <monqy> kallist6ey what do you mean by infinite types
04:59:53 -!- pikhq_ has joined.
05:00:28 <kallisti> monqy: I don't know. Basically elliott said lists are infinite types and then I got confused.
05:00:43 * Sgeo has top comment on a YouTube video
05:00:46 * Sgeo feels weird
05:00:47 <kallisti> congrats.
05:00:48 <monqy> conmgratualtieosne
05:01:06 <monqy> kallisti: well if you don't wnknow what your'e asking aobut: :??????
05:01:17 <monqy> it's hard for me to help
05:01:46 <monqy> sgeo is it a bad video
05:02:10 <Sgeo> http://www.youtube.com/watch?v=fA7UqQtUS7g
05:02:30 -!- pikhq has quit (Ping timeout: 240 seconds).
05:02:40 <monqy> good top comment
05:05:00 <kallisti> I'm confused as to why "Haskell doesn't allow infinite types" is an incorrect statement.
05:06:04 <monqy> because at least to elliott infinite types means something that haskell does anllow
05:06:18 <kallisti> okay, that's what I figured.
05:07:11 <kallisti> but in Haskell, [a] is not considered infinite type..
05:07:26 <kallisti> unless a is an infinite type.
05:09:12 <kallisti> theoretically, [a] = (a, [a]) | [] ...but Haskell does not treat as equivalent to this in any way.
05:09:29 <kallisti> for the purposes of type inference.
05:10:57 <zzo38> Algebraically it is still f(x) = x f(x) + 1 and you can factor and expand and whatever
05:11:23 <kallisti> so I guess it's fair to say that Haskell can't make recursive type inferences.
05:11:26 <kallisti> but can allow infinite types.
05:12:44 <monqy> waht
05:13:12 <kallisti> how is that confusing?
05:13:17 <monqy> whats this about inferences again
05:13:18 <zzo38> Assume x and f(x) are cardinal numbers. If x is nonzero then f(x) will be infinite, I think.
05:14:48 <kallisti> monqy: basically, if Haskell infers a type to be infinite within its type system then it doesn't allow that. If you define a recursively infinite data type (which is theoretically an infinite type) with data/newtype then it can allow this.
05:15:12 <zzo38> If x=1 then f(x) is aleph zero as far as I can tell. The type [()] is like natural numbers but can also be infinite list. Its only property will be its length.
05:15:13 <monqy> ?????
05:16:02 <kallisti> monqy: I feel as though basically anything I'm about to say is going to sound like meaningless gibberish to you.
05:16:07 <monqy> yes
05:18:23 <kallisti> > let intersperse _ [] = []; intersperse _ [x] = x; intersperse s (x:y:xs) = x:s:y:intersperse s xs in intersperse '|' ["a", "b", "c"]
05:18:24 <lambdabot> Occurs check: cannot construct the infinite type: a = [a]
05:18:34 <kallisti> monqy: this is a recursive type inference. it's not allowed.
05:19:35 <kallisti> data [a] = a : [a] | [] -- syntax errors notwithstanding, this contains a recursively defined product type and that's OK.
05:19:51 <monqy> also not allowed: type Bad = [Bad]; what does htis have to do with inference
05:20:18 <kallisti> because that's the type it's trying to construct via inference.
05:20:19 <zzo38> monqy: That is because it is a macro
05:20:26 <zzo38> Kind of
05:21:08 <kallisti> monqy: it has inferred that a is a recursive type... it can't do those when they're inferred in this way (or a type alias as you just said)
05:21:46 <monqy> kallisti: but does it have anything to do with the inference or does it just happen that inference is the only way to get it to go bad
05:22:02 <kallisti> possibly the latter.
05:22:09 <monqy> possibly
05:22:17 <kallisti> I think the reason recursive data structures are allowed is because /Haskell does not consider them to be infinite types/
05:22:23 <monqy> what
05:22:33 <kallisti> -_-
05:23:35 <kallisti> because Haskell considers [a] to be... [a]. not Maybe (a, [a])
05:23:43 -!- MDude has changed nick to MSleep.
05:24:08 <kallisti> obviously if you write type [a] = Maybe (a, [a])
05:24:12 <monqy> and it only has problems if it considers stuff to be infinite types, regardless of if they actually are
05:24:13 <kallisti> haskell will complain about an infinite type.
05:24:18 <kallisti> monqy: yes
05:24:23 <monqy> no
05:24:24 <kallisti> monqy: that is what I just said.
05:24:26 <monqy> i was being
05:24:27 <monqy> joke
05:24:29 <monqy> i
05:24:30 <kallisti> oh
05:24:39 <kallisti> ?
05:25:11 <zzo38> You could probably do: newtype Bad = Bad [Bad]; bad1 :: Bad; bad1 = Bad [Bad [], Bad [], Bad [Bad [], Bad []], Bad [bad1], bad1]; O! Does this kind of mathematical structure have a standard name? ("Bad" probably isn't its standard mathematical term)
05:26:31 <kallisti> monqy: so then what is the best way to describe this different.
05:26:36 <kallisti> *difference
05:26:55 <kallisti> the difference between a recursive type inference and a recursive data type.
05:27:05 <kallisti> that makes one unacceptable and the other one okay.
05:27:08 <kallisti> HOW DO YOU SAY THIS
05:27:12 <kallisti> IN A WAY THAT DOESN'T CONFUSE PEOPLE AAAAAAAH
05:27:15 <monqy> it has to do with stuff
05:27:20 <monqy> official monqy answer
05:28:06 <kallisti> I think it has to do with Haskell not treating recursive types defined via data and newtype to be infinite types.
05:28:14 <monqy> dont
05:28:15 <monqy> say
05:28:15 <monqy> that
05:28:16 <monqy> aagh
05:28:17 <kallisti> at the type level.
05:28:18 <kallisti> ?
05:28:19 <monqy> aaagh
05:28:47 <monqy> i dont know how to explain these things
05:28:47 <monqy> im
05:28:49 <monqy> bad at explain
05:29:19 <kallisti> because at the type level [a] is not recursively defined. it's just.. [a]
05:29:28 <kallisti> there is no infinite loop.
05:29:32 <monqy> ooh
05:29:33 <monqy> i dfounfd
05:29:35 <monqy> a thing
05:29:36 <monqy> that might
05:29:37 <monqy> help
05:29:40 <monqy> maybE
05:29:47 <monqy> or is IT??
05:30:00 <kallisti> ??????????/////////
05:30:05 <monqy> it has a really dumb name its called an occurs chekc????
05:30:32 <monqy> but it might not ehlep...
05:31:36 <kallisti> yes that helps.
05:31:42 <monqy> ok
05:31:48 <kallisti> I wondered what "occurs check" meant...
05:32:08 <kallisti> I had not considered that it was a thing
05:33:46 <zzo38> What is the mathematical structure newtype X = X [X]; called? Mathematically, what typeclasses can it belong to? I think it is a monoid. Is it a semiring or anything else?
05:34:41 <kallisti> it looks to me like an ordered set.
05:34:53 <monqy> wh
05:35:06 <kallisti> ..
05:35:10 <monqy> hhh
05:35:12 <monqy> hhhhh
05:35:51 <monqy> how is it a set it can contain duplicates??
05:36:02 <kallisti> an ordered multiset. :P
05:37:01 <monqy> im not seein ght eorder
05:37:14 <kallisti> X[ X[ X [], X[], X[]], X [], X[X [], X[], X[]]]
05:37:18 <kallisti> weeeee
05:37:21 <monqy> waht
05:37:44 <kallisti> what?
05:37:56 <monqy> what
05:38:11 <kallisti> that is an example of newtype X = X [X]
05:38:11 <zzo38> One of my questions means does this *specific* mathematical structure have a name.
05:38:34 <monqy> kallisti: by ordered multiset did you mean: list??????
05:38:46 <kallisti> well, yes, it's also one of those.
05:38:57 <kallisti> but it allows arbitrary nesting.
05:39:10 <kallisti> like a set, and it has an order, like an ordered set, and can has duplicates, like a multiset.
05:40:25 <monqy> im
05:40:26 <monqy> giving up
05:40:58 <kallisti> I don't understand what's confusing about that.
05:41:15 <monqy> i;ll let future colloingkravisom sort this out, or not bother to, or whatever he wants to do,..,
05:41:40 <kallisti> *colloinkgravisom
05:42:21 <monqy> congratulatiosn won conrrrecting my words
05:42:29 * Sgeo did not get a single A this semester.
05:42:34 <monqy> oops
05:43:23 <Sgeo> 4 As and an A-
05:43:25 <Sgeo> >.>
05:43:25 <kallisti> monqy: other mistakes are permissible.
05:43:34 <kallisti> but you can't misspell colloinkgravisom.
05:43:42 <monqy> o k
05:43:42 <kallisti> it's (c) kallisti
05:43:55 <monqy> can i misspell kallisti? i already have, in the past.
05:44:03 <kallisti> yes
05:44:11 <kallisti> kallisti is not (c) kallisti
05:44:21 <monqy> callistey (C) not kallistey
05:44:36 <kallisti> colloinkgravisom however is a work of art that I (er, well, a progfram I wrewote) made
05:45:50 -!- Vorpal has quit (Ping timeout: 276 seconds).
05:53:12 -!- Sut-Heb has joined.
05:54:41 -!- Sut-Heb has left.
06:10:07 <zzo38> "Casts Aboleniency: Allows +8 on all saving rolls on sneaking an aboleth into the dinner party" [This seems a very specific kind of spell. And also not applicable to the current situation in the game.]
06:10:44 <kallisti> @tell Hey, so I don't think [a] = Maybe (a, [a]) because there's no equivalent to (Just _|_) or (a, Just _|_) or ..
06:10:44 <lambdabot> Consider it noted.
06:10:48 <kallisti> lol
06:10:52 <kallisti> @tell elliott Hey, so I don't think [a] = Maybe (a, [a]) because there's no equivalent to (Just _|_) or (a, Just _|_) or ..
06:10:53 <lambdabot> Consider it noted.
06:10:57 -!- kallisti has changed nick to Hey.
06:11:05 <Hey> hi
06:11:08 <Hey> @clear-messages
06:11:09 <lambdabot> Messages cleared.
06:11:09 <Sgeo> elliott isn't called elliott anymore
06:11:20 -!- Hey has changed nick to kallisti.
06:11:36 <monqy> once you go colloinkgravisom you dont go back..........
06:12:00 <kallisti> @tell colloinkgravisom Hey, so I don't think [a] = Maybe (a, [a]) because there's no equivalent to (Just _|_) or (a, Just _|_) or ..
06:12:01 <lambdabot> Consider it noted.
06:12:24 <monqy> also: what
06:12:45 <kallisti> newtype T = T A
06:12:57 <kallisti> T is not isomorphic to A because there is no equivalent to T _|_
06:13:24 <monqy> what
06:13:28 <kallisti> ..?
06:13:33 <monqy> precisely
06:13:39 <kallisti> indeed
06:13:47 <monqy> help
06:13:50 <kallisti> I honestly don't know how to make that more clear.
06:13:58 <monqy> it sounds
06:13:59 <monqy> confused
06:14:09 <zzo38> But newtype makes them automatically unwraps when compiled?
06:14:29 <monqy> i probably said something bad a while ago though oops....i hope it wasnt really really bad
06:14:36 <monqy> because that would be
06:14:37 <monqy> bad
06:14:54 <kallisti> zzo38: hmmm...
06:15:04 <zzo38> Maybe if you put data instead of newtype
06:15:07 <kallisti> yes.
06:15:27 <monqy> what
06:15:44 <kallisti> monqy: what is the equivalent of T _|_ for type A
06:15:51 <zzo38> But in generally you can ignore _|_ if you want to.
06:15:52 <kallisti> everything else maps to an equivalent value
06:16:05 <monqy> i dont understand your question
06:16:27 <kallisti> >_>
06:17:32 <kallisti> _|_ = _|_; T a = a; T _|_ = ???
06:17:40 <monqy> what
06:17:53 <kallisti> they aren't isomorphic
06:17:54 <kallisti> becase
06:17:55 <kallisti> of that.
06:18:05 <monqy> because of what
06:18:09 <monqy> i dont understand what you mean with that
06:19:00 <kallisti> I mean there's no bijective map between T and A.
06:19:08 <kallisti> because of...
06:19:16 <monqy> because of what
06:19:18 <kallisti> that lack of a mapping for T _|_ to something in A.
06:20:14 <monqy> so T _|_ is a value?
06:20:17 <kallisti> yes.
06:20:23 <kallisti> newtype T = T A
06:20:30 <monqy> ok
06:20:31 <monqy> maps to _|_
06:20:32 <kallisti> or, just
06:20:38 <kallisti> no _|_ maps to _|_
06:20:39 <monqy> _|_ inhabits every type
06:20:42 <monqy> what
06:20:51 <monqy> o
06:20:52 <kallisti> if _|_ mapped to T _|_
06:20:56 <kallisti> then what maps to _|_?
06:21:27 <zzo38> I think that is the difference between newtype and data, or am I wrong?
06:21:36 <kallisti> zzo38: yes it does unwrap in compilation.
06:21:44 <kallisti> so data T = T A
06:21:49 <monqy> i;ll fall back to a nitpick: dont conflate bijections and isomorphism B)
06:22:17 <kallisti> I'm not. I'm saying it usually helps to have a bijective map if there's an isomorphism
06:22:20 <kallisti> since that's like... the thing.
06:22:22 <kallisti> that you need.
06:22:35 <monqy> a thing that you need
06:22:42 <kallisti> yes one of them
06:22:45 <kallisti> a necessary thing.
06:24:07 <kallisti> zzo38: I had forgotten about the C _|_ = _|_ thing. thanks.
06:24:58 <monqy> but whats this about _|_ mapping to _|_
06:25:13 <monqy> is that a thing
06:25:21 <monqy> i guess so
06:25:22 <monqy> but
06:25:23 <kallisti> well, if T and A are sets of their values.
06:25:36 <kallisti> then to make a bijective map, the easiest starting point would be to say _|_ maps to _|_
06:26:44 <zzo38> I think you can usually just ignore _|_ for figuring out their mathematical properties. Otherwise everything would be a monad and comonad and everything else.
06:27:05 <kallisti> return _ = _|_ --yay!
06:27:19 <monqy> ignoring _|_ makes me feel good inside
06:27:24 <monqy> _|_ is scarey
06:27:25 <zzo38> Instead you can say that they mean, sometimes something is mathematically undefined
06:27:37 <zzo38> Which is why it is undefined
06:28:14 <zzo38> Like, factorial of negative integers is undefined.
06:28:39 <monqy> kallisti: oh right with that bijective map thing i was talking about: i rem,embered the point iwas trying to make with the nitpicL: but forgot to say: sometimes you can make a bijective map???
06:28:52 <kallisti> yes, you can.
06:28:54 <kallisti> that is possible.
06:28:56 <kallisti> (???)
06:29:12 <monqy> yes,,,,,,
06:30:39 <monqy> say A is natural nubmers and bottom. _|_ -> _|_; T _|_ -> 0; T 0 -> 1; ... that is assuming this whole mapping bottoms thing isnt fundamentally fdlawed
06:32:22 <zzo38> You can't map bottoms! It is not mathematically correct to do so.
06:32:27 -!- augur has quit (Remote host closed the connection).
06:32:44 <monqy> this makes me feel better
06:33:07 <monqy> because this whole mapping bottoms thing feels really dumb
06:33:14 <monqy> and bad
06:33:18 <monqy> and icky
06:34:02 <kallisti> why
06:34:04 <kallisti> hi
06:34:09 <monqy> hi
06:34:29 <monqy> it's hard to describe but
06:34:32 <monqy> it feels wrong???
06:34:32 <Sgeo> I'm going to go work on my horrible evil magic conversion code, but independently of any connection with my Cap stuff
06:34:42 <monqy> have fun
06:34:45 <Sgeo> (i.e. for the hell of it)
06:35:13 <monqy> kallisti: do you have a definition of what you maen by isomorphism/isomorphic w/r/t haskell types?
06:38:30 -!- kallisti has quit (Ping timeout: 252 seconds).
06:38:34 <monqy> oop
06:41:28 -!- NihilistDandy has quit (Remote host closed the connection).
06:46:11 -!- NihilistDandy has joined.
06:53:08 -!- DCliche has quit (Quit: You are now graced with my absence.).
06:54:54 <NihilistDandy> Anyone in here use package.el and the marmalade repo?
07:10:41 -!- kallisti has joined.
07:10:41 -!- kallisti has quit (Changing host).
07:10:41 -!- kallisti has joined.
07:13:04 -!- sebbu3 has joined.
07:13:05 -!- sebbu3 has quit (Changing host).
07:13:05 -!- sebbu3 has joined.
07:13:22 -!- sebbu2 has quit (Ping timeout: 252 seconds).
07:15:15 <zzo38> If I make electronic device, including for selling, I have to do it as follows:
07:15:22 <zzo38> * The customer has complete freedom to use it and do what they want with it, including modification, even though that would void the warranty.
07:15:27 <zzo38> * Complete specification must be freely available.
07:15:32 <zzo38> * In most cases, no separate computer is required for its use. But it can be used, regardless of architecture or operating system, if you want to, including for user reprogramming.
07:15:36 <zzo38> * The hardware shall be designed to prevent copy protection and DRM from being implemented on it, and all specification of such is freely available and freely implementable.
07:15:40 <zzo38> * No HDMI/HDCP.
07:15:44 <zzo38> * Book can be available in paper, and in computer DVI file and even the source file in case you want to reformat it.
07:15:52 <zzo38> * It can be protected by copyleft and/or trademarks in order to avoid some bad things
07:15:58 <zzo38> * Hackers and hobbyists can possibly use these device for many interesting things.
07:16:03 <zzo38> * Don't overcomplicate things please.
07:16:07 <zzo38> * For softawre, include source codes and valid free-software/open-source, such as GNU GPL v3, or another license if it is based on another software that uses that other license that is still valid free-software/open-source.
07:16:12 <zzo38> * All business shall be accessible by postal mail, although other methods of communication are still possible.
07:17:36 <zzo38> Are they good so far?
07:18:47 <quintopia> sounds overly complicated
07:18:59 <quintopia> just promise not to sue anyone
07:19:05 <quintopia> problems all solved
07:19:22 <itidus21> lol quintopia
07:20:36 <itidus21> if promises could all be kept then there would be very few troubles in the world
07:21:15 <quintopia> but
07:21:30 <quintopia> keeping such a promise engenders good will with customers
07:21:36 <itidus21> disregard my former post
07:21:55 <itidus21> my former post was not logically sound
07:23:25 <zzo38> My idea "Hypernet" for extra-free decentralized universal anonymous encrypted multi-mode network.
07:24:30 <quintopia> free as in beer too?
07:25:07 <itidus21> i understand quite well (but not perfectly) how problems begin when any given human individual responds to his(or her) wants and needs
07:25:19 <zzo38> Yes. Free as in beer too. And free as in speech too.
07:25:37 <itidus21> the most nasty wants and needs are those which involve positioning in a hierarchy
07:27:11 <itidus21> such as, strongest kid in school, top of the chicken pecking order, boss of the company,
07:27:25 <itidus21> upper class
07:27:44 <itidus21> dominant partner in a relationship
07:27:59 <zzo38> The only purpose authorities would have in Hypernet would be specification of free standards, and would have absolutely no other purpose.
07:28:03 <itidus21> high tier level of dominance in a relationship tree
07:30:58 <itidus21> in order to acquire these hierarchical positions one acquires: money, power, fame, underlings, strength, allies
07:31:24 <itidus21> also having control of a resource that others need goes a long way
07:32:01 <Sgeo> I should attempt to understand incoherent instances
07:32:11 <Sgeo> Hopefully this last instance doesn't bring the code into that realm though
07:32:18 <Sgeo> But I'm not smart enough to guess
07:32:24 <itidus21> an ability to exploit the vulnerabilities in others (as seen with mao tse tung)
07:35:13 <monqy> Sgeo: why are you doing typeclass hasck,,,,why,,,,
07:35:25 <Sgeo> monqy, for fun!
07:35:31 <monqy> cries
07:35:43 <Sgeo> monqy, what?
07:35:53 <Sgeo> What's wrong with fooling with stuff for fun?
07:36:02 <Sgeo> This should be the last instance I need to write for this
07:36:05 <Sgeo> Then I'll post it
07:36:19 -!- calamari has quit (Quit: Leaving).
07:36:24 <Sgeo> {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
07:37:10 <monqy> yikes
07:38:57 <Sgeo> My code compiles, but I think it's wrong
07:39:22 <itidus21> control can eventually become not a means but an end. a sense of control gained by making someone do those things which are most distant from their own will, to act most distantly against their own self interest
07:39:56 <itidus21> ^distant from their own will and close to the controllers will, distant from their own self interest and close to the controller's self interest
07:39:59 <Sgeo> Fixed, compiles
07:40:10 <Sgeo> No incoherent instances
07:40:16 <Sgeo> Now I need to find a way to test it :/
07:40:22 <Sgeo> What's a nice isomorphism between types
07:40:31 <Sgeo> Or at least, close enough that I can test on simple stuff
07:40:41 <itidus21> when it's otherwise all the same, it is important for the controller to find means to induce fear and agony in those he is controlling
07:40:42 <Sgeo> Char and Int?
07:41:22 <itidus21> like it's important for north koreans to know that their leader can control the weather (which i am reminded NKs ally china can infact do)
07:41:23 <Sgeo> http://hpaste.org/55792
07:41:30 <Sgeo> I have only compiled it, I have not tested it
07:41:51 <itidus21> but they are to be kept ignorant and having a superstitious understanding
07:42:06 <Sgeo> Kaboom
07:42:39 <itidus21> and.. the controller must be situated in such a way that all hell will break lose if he is removed
07:43:14 <Sgeo> http://hpaste.org/55793
07:43:21 <itidus21> in other words, it was in Saddam's interest to make himself a keystone which if removed would ensue a crumbling of the arch
07:44:01 <pikhq_> itidus21: I suspect in NK control really *is* a means. The targetted end: an easy fucking life for Kim Jong-Il.
07:44:40 -!- kallisti has quit (Ping timeout: 240 seconds).
07:45:02 <itidus21> it is of course the same in the software world, and in the lawyer world
07:46:56 <itidus21> on a side note it is interesting how many plastic toys are sold by cartoons, where the cartoons are exercizes in advertising toys
07:47:39 <itidus21> and, how as they age the animators of those cartoons probably think about the kind of cartoons which could be made
07:48:03 <itidus21> they must ask themselves "are we dumbing down these stories on purpose?"
07:54:06 -!- augur has joined.
08:00:46 -!- sebbu2 has joined.
08:00:47 -!- sebbu2 has quit (Changing host).
08:00:47 -!- sebbu2 has joined.
08:02:10 -!- sebbu3 has quit (Ping timeout: 240 seconds).
08:08:16 -!- aloril has quit (Read error: Operation timed out).
08:14:02 -!- aloril has joined.
08:39:59 <itidus21> but thats all speculation, sometimes things just turn around
08:52:08 -!- Ngevd has joined.
08:52:12 <Ngevd> Hello!
08:54:03 <Ngevd> I'll try last night's Haiku again
08:54:09 <Ngevd> With Haiku I found
08:54:17 <Ngevd> A problem: it lacks support
08:54:21 <Ngevd> For my WiFi card
08:55:35 <coppro> you miss the point of haiku
08:56:01 <Ngevd> I know, it needs to be about the passing of the seasons or something
08:57:07 <coppro> it must include a season reference
08:57:15 <coppro> also your morae are wrong
09:01:22 <itidus21> this is confusing
09:01:29 <itidus21> i wonder what is being talked about
09:01:36 <itidus21> screw you guys, i'm going home
09:01:53 <Ngevd> itidus21, the Haiku operating system lacks support for my WiFi card
09:01:58 <Ngevd> This is a problem
09:02:04 <itidus21> (-> (^_^) (->
09:02:19 <Ngevd> I do not understand this emoticon
09:02:36 <itidus21> bad ascii art to indicate pointing home with both hands
09:02:55 <Ngevd> Oooh
09:03:38 <itidus21> http://fc07.deviantart.net/fs46/f/2009/204/c/2/Screw_you_guys_I__m_going_home_by_h4X0ry0uL34.jpg
09:03:49 <coppro> itidus21: china can control the weather?
09:04:03 <itidus21> `log control the weather
09:04:20 <coppro> 02:41:20 < itidus21> like it's important for north koreans to know that their leader can control the weather (which i am reminded NKs ally china can infact do)
09:04:37 <itidus21> well.. i remember saying that but
09:04:40 <HackEgo> 2011-12-23.txt:00:11:16: <ais523> itidus21: well, the Chinese government can control the weather
09:04:47 <itidus21> haha..
09:04:58 <coppro> ah
09:05:03 <coppro> I smell sarcasm
09:05:43 <itidus21> `log cloud seeding
09:05:54 <HackEgo> 2011-12-28.txt:09:05:43: <itidus21> `log cloud seeding
09:06:01 <coppro> wp
09:06:19 <itidus21> `log control the weather
09:06:24 <itidus21> oops wrong command
09:06:26 <HackEgo> 2011-12-28.txt:09:03:49: <coppro> itidus21: china can control the weather?
09:06:29 <itidus21> sorry
09:06:35 <itidus21> `pastelogs control the weather
09:06:42 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.4416
09:07:08 <zzo38> Remember two tricks of hiding the log query: [1] You can put a letter in square brackets [2] You can send the query by private
09:07:09 <coppro> lazy
09:07:33 <itidus21> lol @ 2008 reference
09:07:48 <coppro> elliott is the meat of this channel, pikhq is the salad, and zzo38 is the desert
09:11:09 <itidus21> so i have been pondering the ways brainfuck can be applied
09:11:52 <Sgeo> It can be more applied with PSOX! Apply today!
09:12:05 <itidus21> as it's wiki page explains, it acts on an array of cells
09:13:25 <itidus21> but it needs complete control over that array eh
09:14:26 -!- oerjan has joined.
09:17:16 <itidus21> like if you were to take an ascii string such as "This is a test.\0" and try to use it as a 16 cell brainfuck array, you couldn't really get very far with it
09:17:50 <itidus21> or could you...
09:18:14 <itidus21> this is where my failure to cognize the distinction between the brainfuck program and the cell array starts to hurt
09:25:11 <itidus21> like it seems to me you would run into trouble that every time you tried to store working numbers, and that doing a string length program would be quite troubling
09:26:24 <itidus21> however, if the string was just used as input, then the program could count the number of input numbers before zero was reached
09:29:32 <oerjan> itidus21: it's actually a little tricky unless you have a 0 before the first T as well, to mark the boundary on both sides (bf tapes often errror out if you go off the left edge)
09:30:47 <oerjan> assuming you have more useable tape to the right, of course
09:30:56 <oerjan> *-r
09:32:32 <oerjan> because if you don't, you will have problems about where to place your counter in such a way as to be able to find the ends of the strings as well
09:32:50 <itidus21> oerjan: the number of times i confuse the difference between the program and the cell tape never fails to amaze me
09:33:07 <itidus21> i think that is the first degree of brainfuckery
09:33:25 <oerjan> itidus21: well there _have_ been esolangs which made them equal, i think
09:34:44 <oerjan> do you know any "normal" programming languages? the cell tape is just the data for the brainfuck program which is the code
09:35:47 <oerjan> and normally when programming you try to distinguish code and data most of the time. except when you're doing tricks based on _not_ doing so.
09:35:51 <itidus21> so, it seems that for the kind of thing i was talking about, a useful extension of brainfuck would be input/output iterators for non-streaming I/O
09:37:08 <oerjan> hm or is oo kind of a subversion of that already.
09:37:55 <oerjan> itidus21: prepare for Phantom_Hoover's brick of wrath
09:38:39 <itidus21> depends what you mean by oo. do you mean object orientation?
09:38:44 <oerjan> yes.
09:38:55 <itidus21> ahh
09:39:43 <itidus21> well i couldn't say if it is or isn't
09:40:15 <zzo38> In writing the annotations for music, I have invented some of my own notations, such as for cadences. Perfect cadence is P, imperfect is P with slash through it, plagal is PL, deceptive is D, closed is a circle around it, semiclosed is half circle, and open has no enclosure. (I is the first letter of "imperfect" but the notation I means the chord on the tonic instead.)
09:40:52 <zzo38> How many of you have ever used your own notations when writing music, or thought about such thing?
09:41:53 <zzo38> Because handwritten uppercase/lowercase is sometimes confused, I don't use uppercase/lowercase roman numerals. I write them all in uppercase. I use + for major, - for minor, x for augmented, and o for diminished; but rarely use them when writing music in major keys since they are implied by the scale.
09:42:03 <zzo38> Sometimes a chord's function is different from its notes; I use double underlines to indicate this when necessary.
09:44:24 <oerjan> <coppro> elliott is the meat of this channel, pikhq is the salad, and zzo38 is the desert <-- i'm the too fat bearnaise sauce
09:45:45 <zzo38> Gregor writes some music, isn't it?
09:45:57 <oerjan> it would appear so
09:46:31 <zzo38> Has Gregor ever thought about these kind of things like what I have mentioned here?
09:47:18 <oerjan> i don't know
09:47:54 <oerjan> `log [G]regor>.*notation
09:48:01 <HackEgo> 2010-03-05.txt:20:00:11: <Gregor> AnMaster: The English word has negative connotation.
09:48:34 <oerjan> `log [G]regor>.*music.*notation
09:48:41 <HackEgo> 2010-01-19.txt:02:58:25: <Gregor> (Lilypond, if you don't know, is TeX for musical notation)
09:49:48 <zzo38> Next time, ask Gregor.
09:51:49 -!- zzo38 has quit (Quit: YES CARRIER).
09:54:00 <itidus21> `pastelogs lilypond
09:54:07 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20141
10:02:24 <oerjan> `addquote <zzo38> Yes, it is true; I don't really like PHP either.
10:02:27 <HackEgo> 784) <zzo38> Yes, it is true; I don't really like PHP either.
10:24:37 -!- Phantom_Hoover has joined.
10:31:39 -!- pikhq has joined.
10:31:45 -!- pikhq_ has quit (Ping timeout: 255 seconds).
10:49:16 -!- Taneb has joined.
10:49:17 -!- Ngevd has quit (Read error: Connection reset by peer).
10:58:34 <oerjan> <colloinkgravisom> revelling in their savagery and idiocy, actually this never happened, probably what actually happened was genocide or something <-- erm, roman circus. case closed.
11:00:53 <oerjan> <colloinkgravisom> sorry, you passed my threshold of "coherent enough to bother trying to decode" <-- never go into teaching, will you? not that i expect you to.
11:02:04 <oerjan> i mean, you are refusing to mention the one piece of information kallisti misses, while he is clearly close to grasping at it, and simultaneously you are deriding him.
11:03:32 <oerjan> clearly you are not arguing in order to help, but in order to fuel your ego by exaggerating other's faults. heck you basically admitted it above.
11:04:17 <oerjan> and not only do you exaggerate other's faults, but you aim your rhetoric in such a way as to trap them further.
11:04:33 <oerjan> it's quite annoying to watch.
11:06:40 <Phantom_Hoover> *others'
11:06:57 <Phantom_Hoover> God, oerjan, you suck at grammar so much, I may even leave because I can't be bothered?
11:09:19 <Taneb> I thought of an interesting way to number combinatory logic things
11:10:13 <Taneb> It's probably been done before
11:14:21 -!- kallisti has joined.
11:16:14 <kallisti> hi
11:16:19 <Taneb> Hello!
11:16:23 -!- Taneb has changed nick to Ngevd.
11:16:25 <kallisti> Taneb: what's up?
11:16:28 <kallisti> how's the Haskell going
11:16:31 <Ngevd> Alright
11:16:40 <Ngevd> I now sort of get what an applicative functor is
11:17:19 <Ngevd> Also, I AM ABOUT TO DEACTIVATE MY LARGER FACEBOOK ACCOUNT
11:18:37 -!- Labbekak has joined.
11:19:05 <Labbekak> Hello
11:20:33 <kallisti> Ngevd: nice
11:20:36 <kallisti> Labbekak: hello
11:20:43 <Ngevd> Labbekak, hello
11:20:45 <kallisti> `welcome Labbekak
11:20:48 <HackEgo> Labbekak: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
11:20:53 <Ngevd> kallisti, it had outlived its purpose.
11:21:02 <Labbekak> Lots of spam on the wiki 0.o
11:21:10 <kallisti> Labbekak: unfortunately...
11:21:16 <Ngevd> It's a wiki with an awful captcha system
11:21:44 <kallisti> ..surely we could make a bot that automatically deletes some spam.
11:22:07 <kallisti> with all of the ridiculous talent we have.
11:22:32 <kallisti> Ngevd: also, that's cool. Applicative is a very useful thing.
11:23:07 <kallisti> do you understand the f <$> x <*> y <*> ... idiom?
11:23:37 * Phantom_Hoover remembers that he still has Ngevd on ignore.
11:23:44 <kallisti> wat why.
11:23:51 <Phantom_Hoover> LIKING MATT SMITH
11:23:51 <Ngevd> My opinions on Doctor Who
11:24:31 <Ngevd> kallisti, sort of
11:25:30 <Ngevd> I maintain my opinion that Matt Smith is a better actor for the Doctor than David Tennant
11:26:04 <kallisti> Ngevd: Essentially, Applicative abstracts the notion of function application onto a parametric type.
11:26:21 <kallisti> so if you have a function wrapped into a parametric type, Applicative allows you apply that function within that wrapping.
11:26:38 <Sgeo> Should I share my intuition of the f <$> x <*> y idiom?
11:26:42 <kallisti> yes.
11:27:04 <Sgeo> It allows you to pass someapplicative x arguments as though they were x
11:27:33 <kallisti> likewise, Functor allows you to lift a function into a parametric type.
11:27:47 <Sgeo> If x is an IO Int, and y is an IO Char, and f is :: Int -> Char -> String, then f <$> x <*> y will probably do what you want
11:28:12 -!- cheater has quit (Ping timeout: 264 seconds).
11:28:20 <Sgeo> It will be an IO String that does the action of x and the action of y then passes those to f and the program to do that is the IO String
11:28:25 <kallisti> yes, that's one way to look at it. It can be used in other situations though.
11:28:46 <Sgeo> Note that if f returns an IO whatever, than the new thing will be IO (IO whatever).
11:28:49 <Sgeo> This bit me once.
11:29:09 <kallisti> yes <*> retains the wrapping around its return value.
11:29:22 <Ngevd> Sgeo, so you'd need to do the <- thingy twice?
11:29:30 <kallisti> if you have a function that returns IO whatever, then you most likely want to use >>= instead.
11:29:41 <Sgeo> Ngevd, I could have, but join is a function that essentially does that.
11:29:44 <Sgeo> :t join
11:29:45 <lambdabot> forall (m :: * -> *) a. (Monad m) => m (m a) -> m a
11:29:51 <kallisti> also >>= allows you to avoid that situation entirely.
11:29:52 <oerjan> <Phantom_Hoover> *others' <-- damn i had a bad feeling about that word but somehow couldn't quite recall why it was wrong.
11:29:55 <Sgeo> Or what kallisti said is probably more idiomatic.
11:30:20 <kallisti> but yes they're equivalent.
11:30:27 <Sgeo> join m_m_a = do {m_a <- m_m_a; m_a }
11:30:53 <kallisti> > [1,2,3,4] >>= id
11:30:54 <lambdabot> No instance for (GHC.Num.Num [b])
11:30:54 <lambdabot> arising from a use of `e_11234' at <in...
11:30:56 <kallisti> er
11:31:10 <Phantom_Hoover> <Ngevd> I maintain my opinion that Matt Smith is a better actor for the Doctor than David Tennant
11:31:12 <kallisti> > [[1,2],[3,4]] >>= id
11:31:13 <lambdabot> [1,2,3,4]
11:31:16 -!- SgeoN1 has joined.
11:31:20 <Phantom_Hoover> This is because you are exceptionally stupid and/or gullible.
11:31:25 <kallisti> > join [[1,2],[3,4]]
11:31:26 <lambdabot> [1,2,3,4]
11:31:27 <SgeoN1> Damn This battery so much
11:31:33 <Ngevd> Note I did not mention the episodes
11:31:34 <kallisti> join m = m >>= id
11:31:50 <Phantom_Hoover> Smith is unbearable in and of himself.
11:33:00 -!- Sgeo_ has joined.
11:33:12 <Ngevd> This is why I struggle making friends.
11:33:13 <Sgeo_> DAMN THIS BATTERY
11:33:55 <kallisti> Ngevd: is there anything that I said that confuses you?
11:34:01 <Phantom_Hoover> Ngevd, why would anyone want to be friends with someone who likes Matt Smith??
11:34:04 <Ngevd> kallisti, Not really
11:34:12 <Ngevd> Phantom_Hoover, Matt Smith would, I assume
11:34:20 <Sgeo_> > join (Just (Just 'a'))
11:34:21 <kallisti> (a much better question than "does any of this confuse you" because someone is more likely to say "yes" even though they don't mean it)
11:34:21 <lambdabot> Just 'a'
11:34:23 <Phantom_Hoover> No, he knows how awful he is too.
11:34:26 <Sgeo_> > join (Just Nothing)
11:34:27 <lambdabot> Nothing
11:34:28 <Ngevd> kallisti, but I think I'm still a bit behind
11:34:31 <Sgeo_> > join (Nothing)
11:34:32 <lambdabot> Nothing
11:34:51 -!- Sgeo has quit (Ping timeout: 240 seconds).
11:35:10 <Labbekak> > 2+2
11:35:11 <lambdabot> 4
11:35:11 <oerjan> <Phantom_Hoover> This is because you are exceptionally stupid and/or gullible. <-- * oerjan briefly ponders repeating the whole rant above to Phantom_Hoover. wait, you are all like this. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
11:35:14 <Labbekak> cool
11:35:40 <Sgeo_> Ngevd, you know that (+) adds two numbers, right?
11:35:41 <Phantom_Hoover> Labbekak, pfft.
11:35:45 <Sgeo_> > (+) 2 2
11:35:46 <lambdabot> 4
11:35:50 <Sgeo_> Watch:
11:35:52 <Phantom_Hoover> > let 2 + 2 = 5 in 2 + 2
11:35:53 <lambdabot> 5
11:36:02 <oerjan> s/repeating/redirecting/
11:36:04 <Sgeo_> > (+) <$> Just 2 <*> Just 3
11:36:05 <lambdabot> Just 5
11:36:11 <Ngevd> Sgeo_, I did not know that. I must have got it confused with ++
11:36:13 <Sgeo_> Ngevd, does that make sense?
11:36:15 <Phantom_Hoover> oerjan, no, not really.
11:36:25 <Ngevd> Sgeo_, yes
11:36:26 <Phantom_Hoover> It's justified in this case because Matt Smith.
11:36:28 <kallisti> Ngevd: lol
11:36:32 <Labbekak> > do { Nothing }
11:36:32 <lambdabot> Nothing
11:36:47 <Sgeo_> > do { return () }
11:36:48 <lambdabot> No instance for (GHC.Show.Show (m ()))
11:36:48 <lambdabot> arising from a use of `M466201207...
11:36:49 <kallisti> Ngevd: (am I the only one that detected sarcasm?)
11:37:02 <Ngevd> kallisti: (sarcasm was there)
11:37:04 <kallisti> (please say no)
11:37:09 * oerjan sits down on his lawn with his cane and recalls something the youngsters call "dissing"
11:37:35 <kallisti> Ngevd: okay so, I'll just explain the f <$> x <*> y idiom briefly
11:37:41 <Phantom_Hoover> ARE YOU A CLOSET MATT SMITH SUPPORTER
11:37:41 <kallisti> Ngevd: are you aware of <$>?
11:38:06 <Phantom_Hoover> Yes, it's an expression of the supremacy of the almighty dollar.
11:38:11 <Phantom_Hoover> Greater than all around it.
11:38:14 <Ngevd> kallisti, it takes a function and a value inside a functor and does the function on the value inside the functor?
11:38:45 <kallisti> Ngevd: yes it's fmap. that's basically what I was asking.
11:38:46 <Sgeo_> It .. kind of, but the result is wrapped in the functor
11:38:49 <Labbekak> > random (mkStdGen 949494) :: (Int, StdGen)
11:38:50 <lambdabot> (261237333865217244,75809027 2103410263)
11:38:57 <Sgeo_> :t succ
11:38:58 <lambdabot> forall a. (Enum a) => a -> a
11:39:03 <Sgeo_> > succ 1
11:39:04 <lambdabot> 2
11:39:06 <Phantom_Hoover> :t fmap
11:39:07 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
11:39:08 <Phantom_Hoover> :t <$>
11:39:09 <lambdabot> parse error on input `<$>'
11:39:11 <Sgeo_> > succ <$> (Just 1)
11:39:12 <lambdabot> Just 2
11:39:12 <Ngevd> > join (.) succ 0
11:39:14 <lambdabot> 2
11:39:17 <Sgeo_> Maybe is a functor
11:39:33 <Ngevd> I knew maybe is a functor
11:39:46 <Phantom_Hoover> Huh, it is fmap.
11:40:00 <kallisti> Sgeo_: I believe that's what he meant by "inside the functor"
11:40:05 <Sgeo_> Oh, ok
11:40:06 <Phantom_Hoover> I thought it was f (a -> b) -> f a -> f b for some reason.
11:40:06 <Ngevd> > (+1) <$> [1..5]
11:40:08 <lambdabot> [2,3,4,5,6]
11:40:14 <Sgeo_> Phantom_Hoover, that's <*>
11:40:17 <Sgeo_> :t (<*>)
11:40:18 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
11:40:21 <Phantom_Hoover> Ah.
11:40:26 <kallisti> Ngevd: okay so for example here's how you do a cartesian product.
11:40:30 -!- cheater has joined.
11:40:33 <Phantom_Hoover> Makes sense.
11:40:42 <kallisti> > (,) <$> [1..3] <*> [1..3]
11:40:42 <lambdabot> [(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)]
11:41:02 <kallisti> Ngevd: first of all you apply (,) <$> [1..3]
11:41:15 <kallisti> :t (,) <$> [1..3]
11:41:16 <lambdabot> forall a b. (Num a, Enum a) => [b -> (a, b)]
11:41:31 <kallisti> this applies (,) to every value in the list [1..3]
11:41:43 <kallisti> and produces a list of curried functions. yes?
11:42:01 <Sgeo_> :t (,) <$> [1..3]
11:42:02 <lambdabot> forall a b. (Num a, Enum a) => [b -> (a, b)]
11:42:35 <kallisti> so now we have a function typed wrapped within a parametric type, namely the list type.
11:42:42 <kallisti> s/typed/type/
11:42:43 <Sgeo_> Hmm, now I'm thinking I can actually find a use for Just Right
11:43:39 <kallisti> this is the situation where applicative is useful. Applicative takes a function type wrapped within a parametric type, and extends the notion of function application "within" this wrapped type.
11:43:42 <Ngevd> kallisti, sorry, I had to brb
11:43:43 <oerjan> but there's no use if there's Nothing Left
11:44:04 <Ngevd> But I am now rb
11:44:17 <kallisti> okay. :)
11:44:21 <kallisti> catch up!
11:44:41 <Ngevd> I still keep forgetting that , is a function
11:44:59 <kallisti> oh, yes. it's kind of a special case.
11:45:18 <kallisti> , is not /actually/ an infix function.
11:45:32 <Ngevd> So, (,) <$> [1..3] is a list of functions
11:45:35 <kallisti> yes
11:46:11 <Phantom_Hoover> Of course, you *can* just look at the type signatures.
11:46:18 <kallisti> since list is an instance of Applicative, lists extend the notion of function application. So that if you have a list of functions, you can apply that list of functions to another list of values.
11:46:21 <Ngevd> And <*> applies each function on the left to each value on the right IN THIS EXAMPLE
11:46:22 -!- SgeoN1 has quit (Quit: Bye).
11:46:29 <Phantom_Hoover> f :: a -> b -> c -> d
11:46:42 <kallisti> Ngevd: yes, this is what happens in the case of list.
11:46:58 <Phantom_Hoover> f <$> x (x :: f a) :: f (b -> c -> d).
11:47:26 <Phantom_Hoover> That <*> y (y :: f b) :: f (c -> d).
11:47:28 <Phantom_Hoover> And so on.
11:47:59 <kallisti> Ngevd: but if you look at the type you can infer what happens in the general case.
11:48:03 <kallisti> :t (<*>)
11:48:04 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
11:48:25 <kallisti> in case of lists this is: [a -> b] -> [a] -> [b]
11:48:42 <Ngevd> This has actually helped a lot
11:49:07 <kallisti> Maybe is also an applicative so: Maybe (a -> b) -> Maybe a -> Maybe b
11:49:27 <kallisti> if you have a function wrapped with Just, you can apply other Maybe values to that function and receive a Maybe result.
11:49:29 <kallisti> :t ($)
11:49:30 <lambdabot> forall a b. (a -> b) -> a -> b
11:49:39 <kallisti> it's basically function application, within a parametric type.
11:52:11 <Labbekak> > last [1, 2, 3]
11:52:11 <lambdabot> 3
11:52:18 <Labbekak> sweet
11:52:28 <Ngevd> Labbekak, are you new to Haskell?
11:52:44 <Sgeo_> > last [1..]
11:52:45 <kallisti> Ngevd: hopefully that makes everything make a little more sense.
11:52:46 <Labbekak> Ngevd, yes :p
11:52:48 <lambdabot> mueval-core: Time limit exceeded
11:53:11 <Labbekak> how does whispering work?
11:53:11 <Ngevd> Labbekak, Haskell is almost the default non-esolang on this channel
11:53:21 <kallisti> Labbekak: what client are you using?
11:53:28 <Labbekak> webchat.freenode
11:53:30 <Sgeo_> qwebirc
11:53:36 <kallisti> Labbekak: in most clients you use the /msg command.
11:53:45 <kallisti> Labbekak: /msg <person> <stuff>
11:53:51 <Ngevd> /msg person message
11:53:52 <kallisti> Labbekak: and that usually opens another window
11:54:16 <Labbekak> oke thanks ;)
11:54:37 <kallisti> Labbekak: WoW?
11:54:39 <kallisti> :P
11:54:49 <kallisti> or basically any blizzard game.
11:54:52 <kallisti> with battle.net
11:55:03 <kallisti> "whispering" is the term used for private messages
11:55:05 <oerjan> 06:12:45: <kallisti> newtype T = T A
11:55:05 <oerjan> 06:12:57: <kallisti> T is not isomorphic to A because there is no equivalent to T _|_
11:55:22 <Sgeo_> o.O I already know what oerjan's going to say
11:55:25 <Labbekak> well i played some WoW yes
11:55:26 <oerjan> T _|_ = _|_ for newtypes, this is a main difference from data
11:55:33 <kallisti> oerjan: yes I realized that further.
11:55:33 <Labbekak> long time ago
11:55:41 <kallisti> oerjan: so I changed it to data. because it still applies there.
11:57:11 <Labbekak> last [1, 2, 3] * [1, 2, 3]
11:57:16 <kallisti> Labbekak: no
11:57:23 <kallisti> type error.
11:57:30 <Labbekak> :(
11:57:34 <kallisti> 3 * [1,2,3] = ?????
11:57:44 <Labbekak> APL knows :p
11:57:52 <kallisti> ah yes
11:57:55 <Ngevd> > map (* last [1,2,3]) [1,2,3]
11:57:56 -!- Sgeo has joined.
11:57:56 <lambdabot> [3,6,9]
11:58:05 -!- Sgeo_ has quit (Read error: Connection reset by peer).
11:58:05 <Labbekak> pff
11:58:07 <Sgeo> I can't even put this laptop in my lap anymore :(
11:58:16 <Ngevd> Haskell doesn't like people cheating
11:58:21 <kallisti> Labbekak: haskell has the restriction that multiplication requires the same type for both operands.
11:58:24 <kallisti> :t (*)
11:58:25 <lambdabot> forall a. (Num a) => a -> a -> a
11:58:56 <Sgeo> > last ((*) <$> [1,2,3] <*> [1,2,3])
11:58:57 <lambdabot> 9
11:59:06 <Sgeo> > (*) <$> [1,2,3] <*> [1,2,3]
11:59:07 <lambdabot> [1,2,3,2,4,6,3,6,9]
11:59:15 <Sgeo> A perfect demonstration of applicatives
11:59:22 <monqy> perfect?
11:59:27 <Ngevd> Sgeo, always the oppurtunist
11:59:47 <kallisti> cartesian product was way better, sheesh. :P
11:59:59 <kallisti> you should leave the teaching to me. :P
12:00:01 <kallisti> bahahahaha
12:00:02 <kallisti> ..
12:00:40 <Sgeo> > (*) <$> [x,y,z] <*> [x,y,z]
12:00:41 <lambdabot> [x * x,x * y,x * z,y * x,y * y,y * z,z * x,z * y,z * z]
12:00:49 <kallisti> yes that's good.
12:00:54 <kallisti> well
12:00:55 <kallisti> almost
12:01:04 <kallisti> > (*) <$> [a,b,c] <*> [x,y,z]
12:01:05 <lambdabot> [a * x,a * y,a * z,b * x,b * y,b * z,c * x,c * y,c * z]
12:01:06 <Sgeo> The spacing is bad
12:01:37 <kallisti> > Just (*) <$> Just a <*> Just b
12:01:37 <lambdabot> Couldn't match expected type `a1 -> a -> b'
12:01:38 <lambdabot> against inferred type `...
12:01:42 <Sgeo> Also, wasn't sure that a was the appropriate weird thing
12:01:46 <kallisti> hh
12:01:50 <kallisti> *huh
12:01:57 <Labbekak> > map ($ 3) [(*1), (*2), (*3)]
12:01:58 <lambdabot> [3,6,9]
12:02:00 <Sgeo> > Just (*) <*> Just a <*> Just b
12:02:01 <lambdabot> Just (a * b)
12:02:07 <kallisti> oh right
12:02:12 <kallisti> > (*) <$> Just a <*> Just b :
12:02:12 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
12:02:15 <kallisti> > (*) <$> Just a <*> Just b
12:02:16 <lambdabot> Just (a * b)
12:02:49 <Sgeo> :t pure
12:02:50 <lambdabot> forall a (f :: * -> *). (Applicative f) => a -> f a
12:03:09 <Sgeo> pure f <*> x <*> y is the same as f <$> x <*> y
12:03:32 <Sgeo> pure takes something and brings it into a functor
12:03:38 <kallisti> *applicative
12:03:44 <monqy> *Applicative
12:03:45 <Sgeo> For Maybe, it's ... kallisti's correct.
12:04:11 <kallisti> monqy: hahahaha silly humans and there significance of capitalization.
12:04:15 <Sgeo> For Maybe, it's Just. For lists, it's putting it in a singleton, like \a -> [a]
12:04:34 <kallisti> same as return for Monad, in... most cases.
12:04:43 <monqy> most cases?
12:04:50 <Sgeo> monqy, idiots exist.
12:04:50 <kallisti> most cases that appear in Haskell programs, yes.
12:04:58 <monqy> idiots? whats that
12:05:14 <Sgeo> Someone who has a pure and a return defined but they do different things?
12:05:19 <kallisti> monqy: dunno. they certainly don't exist on this channel.
12:05:21 <monqy> cries
12:05:24 -!- derdon has joined.
12:05:35 <kallisti> Sgeo: well the case I was thinking of is an Applicative that's not a Monad.
12:06:03 <Sgeo> Fair enough, I guess that's acceptable.
12:06:06 <Sgeo> But if return is defined...
12:06:15 <monqy> a bit funky with the way you worded it yeah but yeah
12:07:02 <kallisti> apologies. I imagine being slightly drunk is not the best time to be EXCELLENT MENTOR 2000.
12:07:17 <kallisti> PERFECT IN ALL WAYS AND STATEMENTS.
12:08:23 <monqy> 2000 is a lot of mentor
12:08:32 <monqy> maybe you should settle for perfect mentor 1999
12:08:39 <kallisti> too retro.
12:08:44 <kallisti> 2000 is FURUTISTSIC
12:10:08 <Labbekak> last [1..5]
12:10:10 <Phantom_Hoover> <monqy> idiots? whats that
12:10:19 <Labbekak> > last[1..5]
12:10:20 <lambdabot> 5
12:10:28 <kallisti> Ngevd: but yeah <$> and <*> make it easy to basically ignore the parametric type wrapping.
12:10:42 <monqy> huh??
12:10:44 <Phantom_Hoover> People who don't understand that monads etc. actually have laws you need to satisfy, not just type signatures.
12:10:50 <Phantom_Hoover> kallisti, ???
12:10:58 <Labbekak> last[1..(last[1..5])]
12:10:58 <kallisti> Ngevd: So, for exampke: lines <$> readFile "foo.txt"
12:11:06 <Labbekak> > last[1..(last[1..5])]
12:11:07 <lambdabot> 5
12:11:17 <Sgeo> :t enumFromTo
12:11:18 <lambdabot> forall a. (Enum a) => a -> a -> [a]
12:11:19 <kallisti> Ngevd: reads a file, splits it into lines, and returns that as the result of an IO action.
12:11:32 <Sgeo> Labbekak, [a..b] notion is syntactic sugar for a function
12:11:32 <monqy> kallisti: but you're not ignoring anything if you put a <$> in there.....
12:11:36 <Ngevd> kallisti, That would have type IO [String], right?
12:11:44 <Sgeo> [1..5] == enumFromTo 1 5
12:11:48 <kallisti> monqy: well, yes... the <$> is what makes the ignoring possible.
12:11:50 <kallisti> Ngevd: yes.
12:11:52 <Labbekak> ah
12:11:54 <Sgeo> [1..] == enumFrom 1
12:11:59 <Labbekak> > enumFromTo 1 5
12:12:00 <lambdabot> [1,2,3,4,5]
12:12:03 <Labbekak> right
12:12:04 <kallisti> monqy: it's.. well, ignoring is not the best way to describe it.
12:12:05 <monqy> kallisti: ignoring by not ignoring
12:12:06 <Ngevd> > enumTo 5
12:12:07 <lambdabot> Not in scope: `enumTo'
12:12:21 * Sgeo forgets what [1,3..] and [1,3..5] desugar to
12:12:26 <Sgeo> :t enumFromStep
12:12:27 <lambdabot> Not in scope: `enumFromStep'
12:12:30 <monqy> :t enumFromBy
12:12:31 <lambdabot> Not in scope: `enumFromBy'
12:12:33 <monqy> oop
12:12:37 <Sgeo> :t enumBy
12:12:38 <monqy> :t enumFromToBy
12:12:38 <Ngevd> > enumFromThenTo 1 3 9
12:12:38 <lambdabot> Not in scope: `enumBy'
12:12:39 <lambdabot> Not in scope: `enumFromToBy'
12:12:39 <lambdabot> [1,3,5,7,9]
12:12:40 <kallisti> monqy: but it allows you to apply functions to inner results of parametric types thereby ignoring the usual dance you would otherwise do with >>= and such.
12:12:41 <monqy> ooop
12:12:44 <Ngevd> I win
12:12:50 <monqy> oh then
12:13:14 <kallisti> perhaps that's a better way to describe what I mean.
12:13:27 <Sgeo> > take 20 (enumFromThen 1 3]
12:13:28 <Labbekak> map (+1) "Albert"
12:13:28 <lambdabot> <no location info>: parse error on input `]'
12:13:29 <Sgeo> > take 20 (enumFromThen 1 3)
12:13:30 <lambdabot> [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39]
12:13:35 <Labbekak> > map (+1) "Albert"
12:13:36 <lambdabot> No instance for (GHC.Num.Num GHC.Types.Char)
12:13:36 <lambdabot> arising from the literal `1...
12:13:51 <Sgeo> Labbekak, Strings are lists of Chars. Chars are not numbers.
12:13:59 <Labbekak> :p
12:14:01 <monqy> > map succ "Albert"
12:14:02 <lambdabot> "Bmcfsu"
12:14:12 <Ngevd> > map char (map (+1) (map ord "Albert"))
12:14:13 <lambdabot> Couldn't match expected type `GHC.Types.Char'
12:14:13 <lambdabot> against inferred type...
12:14:16 <monqy> > map (chr . (+1) . ord) "Albert"
12:14:17 <lambdabot> "Bmcfsu"
12:14:31 <Ngevd> > map chr (map (+1) (map ord "Albert"))
12:14:31 <lambdabot> "Bmcfsu"
12:14:32 <Labbekak> brb
12:15:37 -!- oerjan has quit (Quit: leaving).
12:15:58 <kallisti> Ngevd: (+) <$> (read . getLine) <*> (read . getLine)
12:16:18 <monqy> :t readLine
12:16:18 <lambdabot> Not in scope: `readLine'
12:16:20 <monqy> oop
12:16:26 <kallisti> Ngevd: here's an expression that reads two lines from stdin, converts them to numbers, and adds them together as the result of an IO action.
12:16:31 <Phantom_Hoover> getLine is going to be IO String.
12:16:34 <Phantom_Hoover> :t getLine
12:16:35 <lambdabot> IO String
12:16:36 <kallisti> er
12:16:39 <monqy> @hoogle Read a => IO a
12:16:40 <lambdabot> Prelude readLn :: Read a => IO a
12:16:40 <lambdabot> System.IO readLn :: Read a => IO a
12:16:40 <lambdabot> Prelude readIO :: Read a => String -> IO a
12:16:43 <kallisti> yes... my bad.
12:16:45 <monqy> ahh, readLn
12:17:01 <kallisti> Ngevd: (+) <$> readLn <*> readLn
12:17:06 * Phantom_Hoover has a pascback
12:17:22 <Phantom_Hoover> (it's a flashback but with pascal and it's really unpleasant)
12:17:36 <Ngevd> kallisti, we're ignoring errors, I presume?
12:17:44 <Ngevd> Pesky IO errors, that is
12:17:47 <kallisti> Ngevd: yes
12:17:55 <monqy> I have saved myself from pascbacks by not ever touching pascal, in the past
12:17:57 <kallisti> for those you would want to use catch, I believe.
12:18:38 <Sgeo> Is readLn any safer than read?
12:18:45 <kallisti> don't believe so.
12:18:48 <Ngevd> No, it's less safe
12:18:53 <kallisti> I think it's literally just read <$> getLine
12:19:02 <kallisti> @src readLn
12:19:02 <lambdabot> readLn = do l <- getLine; r <- readIO l; return r
12:19:13 <kallisti> @src readIO
12:19:14 <lambdabot> Source not found. You speak an infinite deal of nothing
12:19:23 <kallisti> yeah same thing I think.
12:19:34 <Sgeo> @source readLn
12:19:35 <lambdabot> readLn not available
12:19:51 <kallisti> Ngevd: no equally unsafe.
12:20:06 <kallisti> you can still catch the exception from readLn
12:20:35 <Ngevd> I have a bizarre concept of many things
12:21:04 <kallisti> me too.
12:21:21 <Ngevd> Including safety and money
12:21:34 <kallisti> safe money and unsafe money.
12:22:08 <Sgeo> unsafeBuySex
12:22:14 <monqy> sgeo.....
12:22:16 <kallisti> moniful safety and unmoniful safety.
12:31:01 <kallisti> Ngevd: oh by the way, functions are a Functor, Monad, and Applicative.
12:31:13 <Ngevd> It is very windy up here
12:31:22 <kallisti> it's pretty windy here as well.
12:31:29 <kallisti> (in Georgia (USA))
12:31:45 <Ngevd> Hmm...
12:31:49 <Labbekak> > :t chr. first
12:31:50 <lambdabot> <no location info>: parse error on input `:'
12:31:51 <Ngevd> Georgia, eg?
12:31:57 <kallisti> Labbekak: just :t
12:31:58 <Ngevd> :t chr . first
12:31:59 <lambdabot> Couldn't match expected type `Int'
12:31:59 <lambdabot> against inferred type `a (b, d) (c, d)'
12:31:59 <lambdabot> Expected type: a b c -> Int
12:32:03 <kallisti> :t first
12:32:04 <lambdabot> forall (a :: * -> * -> *) b c d. (Arrow a) => a b c -> a (b, d) (c, d)
12:32:05 <Phantom_Hoover> <kallisti> Ngevd: oh by the way, functions are a Functor, Monad, and Applicative.
12:32:06 <Phantom_Hoover> ??
12:32:13 <Phantom_Hoover> Do you mean (->r)?
12:32:16 <kallisti> ...yes.
12:32:20 <kallisti> nice nitpick.
12:32:20 <Ngevd> Which are functions
12:32:31 <kallisti> Labbekak: you want fst I think.
12:32:42 <kallisti> Labbekak: first is an Arrow thing, fst is a 2-tuple thing.
12:32:42 <monqy> it's a pretty important distinction??
12:32:53 <Ngevd> :t chr . fst
12:32:53 <lambdabot> forall b. (Int, b) -> Char
12:32:55 <monqy> i mean (->) vs (->r)
12:33:05 <Labbekak> I wasnt really thinking
12:33:07 <Ngevd> (->) isn't a function.
12:33:18 <kallisti> neither is (->r)
12:33:28 <kallisti> they're types.
12:33:29 <kallisti> >_>
12:33:33 * kallisti nitpick
12:33:43 <Ngevd> (->) does not represent the function type
12:33:51 <Sgeo> It's not (r->)?
12:33:52 <kallisti> well, yes it does.
12:33:58 <kallisti> oh... yes
12:33:59 <kallisti> it is.
12:34:02 <kallisti> it's ((->) r)
12:34:10 <kallisti> which is (r->) which is not valid Haskell.
12:34:28 <monqy> waht
12:34:43 <kallisti> monqy: is (r->) valid syntax in Haskell?
12:34:53 <monqy> that's not the wrong part
12:34:59 <monqy> iirc ((->) r) is (-> r) iirc
12:34:59 <monqy> oops
12:35:03 <kallisti> no..
12:35:07 <Sgeo> > (+) <$> (1+) <*> (2-) $ 5
12:35:08 <lambdabot> 3
12:35:09 <monqy> it's
12:35:11 <monqy> ~special~
12:35:17 <kallisti> monqy: .....no
12:35:25 <monqy> ok maybe im just tired
12:35:28 <Sgeo> Of course, lambdabot does its insane functions are numbers thing
12:35:31 <kallisti> :t return
12:35:31 <lambdabot> forall a (m :: * -> *). (Monad m) => a -> m a
12:35:36 <kallisti> :t const
12:35:36 <lambdabot> forall a b. a -> b -> a
12:35:48 <Ngevd> > const + 1
12:35:49 <lambdabot> Overlapping instances for GHC.Show.Show (a -> b -> a)
12:35:49 <lambdabot> arising from a use...
12:36:02 <kallisti> monqy: m = (b->)
12:36:06 * Phantom_Hoover realises he's forgotten which way round the function monad goes.
12:36:07 <Sgeo> Which sounds convenient, but Applicative for functions is simple enough when you develop some intuition about it
12:36:39 <Labbekak> \(l, n) -> map (chr . (+n) . ord) l
12:36:46 <monqy> kallisti: yeah im tired. i'll take your word for it because i cant think enough to do the stuff in my head
12:36:58 <kallisti> monqy: this makes me happy. :)
12:36:59 <Labbekak> > (\(l, n) -> map (chr . (+n) . ord) l) "Whatup" 5
12:37:00 <lambdabot> Couldn't match expected type `t1 -> t'
12:37:00 <lambdabot> against inferred type `[GHC....
12:37:02 <Sgeo> It's just the reader monad. The value you grab out of a function that's not fully applied is the result that the whole shebang will have when the whole shebang's argument is passed to the partially applied function.
12:37:10 <kallisti> monqy: because I'm not wrong by default.
12:37:20 <Sgeo> Wait, no
12:37:20 <kallisti> promising.
12:37:24 <Phantom_Hoover> Yeah, it's r ->.
12:37:29 <Phantom_Hoover> Oops.
12:37:33 <monqy> opse
12:37:40 <Sgeo> is the result that the function will have when the whole shebang's argument is passed to the partially applied function
12:37:49 <Sgeo> Reader monad without Reader:
12:38:21 <monqy> are you going to paste something
12:38:34 <Ngevd> Sgeo, monad?
12:38:35 <Sgeo> > do { x <- (+1); y <- (*5); return x+y} $ 1
12:38:36 <lambdabot> Occurs check: cannot construct the infinite type: a = m a
12:38:41 <Sgeo> ..?
12:38:48 <Ngevd> Reader monad without Reader
12:38:53 <Sgeo> > do { x <- (+1); y <- (*5); return (x+y)} $ 1
12:38:54 <lambdabot> 7
12:38:57 <Ngevd> I aspire to be a cruciverbalist
12:39:06 <kallisti> (>>=) f g x = g x (f x)
12:39:08 <Sgeo> > do { x <- (+1); y <- (*5); return (x,y)} $ 1
12:39:09 <lambdabot> (2,5)
12:39:17 <kallisti> I think..
12:39:18 <Sgeo> Ngevd, do you know what the Reader monad is?
12:39:40 <Ngevd> No
12:39:45 <Ngevd> I was making a joke
12:39:45 <kallisti> it reads. ha, ha.
12:39:52 * kallisti mad joke
12:40:05 <kallisti> (2x joke comob)
12:40:12 * kallisti 2x reference combo
12:40:15 <kallisti> (now 3)
12:40:25 <kallisti> aha ha
12:40:29 * Sgeo gives kallisti an A - -
12:40:46 <monqy> is that good or bad....
12:40:51 <kallisti> I can't tell.
12:40:52 <Sgeo> Worst grade imaginable
12:41:05 <Labbekak> > (\(l, n) -> map (chr . (+n) . ord) l) "Whatup" 5 -- it wont work
12:41:06 <lambdabot> Couldn't match expected type `t1 -> t'
12:41:06 <lambdabot> against inferred type `[GHC....
12:41:26 <Sgeo> Labbekak,
12:41:39 <kallisti> :t ord
12:41:40 <lambdabot> Char -> Int
12:41:45 <Sgeo> > (\l n -> map (chr . (+n) . ord) l) "Whatup" 5 -- this is how to do a multi-argument lambda
12:41:47 <lambdabot> "\\mfyzu"
12:42:02 <Labbekak> Aah oke thanks
12:42:23 <kallisti> and now I blow some peoples minds.
12:42:41 <kallisti> > (`replicateM` "abc") =<< [0..]
12:42:42 <lambdabot> ["","a","b","c","aa","ab","ac","ba","bb","bc","ca","cb","cc","aaa","aab","a...
12:43:00 <Ngevd> AAAAH
12:43:01 <Labbekak> boom
12:43:02 <monqy> not the palindromes?
12:43:06 <kallisti> monqy: no
12:43:06 <Ngevd> mind.blown == true
12:43:13 <monqy> no....
12:43:13 <kallisti> but I use that to make palindromes yes.
12:43:16 <Sgeo> :t replicateM
12:43:17 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a]
12:43:31 * Sgeo gets it, he thinks
12:43:41 <kallisti> it has to do with how sequence works for lists.
12:43:54 <Sgeo> Well, almost get it
12:43:57 <kallisti> @src replicateM
12:43:58 <lambdabot> replicateM n x = sequence (replicate n x)
12:44:10 <kallisti> > sequence "abc" "def"
12:44:10 <lambdabot> Couldn't match expected type `m a'
12:44:10 <lambdabot> against inferred type `GHC.Types...
12:44:13 <monqy> goo
12:44:14 <kallisti> ....looool
12:44:14 <monqy> d
12:44:25 <kallisti> > sequence ["abc","def"]
12:44:26 <lambdabot> ["ad","ae","af","bd","be","bf","cd","ce","cf"]
12:44:38 <kallisti> > sequence ["abc","def","ghi"]
12:44:39 <lambdabot> ["adg","adh","adi","aeg","aeh","aei","afg","afh","afi","bdg","bdh","bdi","b...
12:44:45 <Sgeo> Labbekak, that is the same as:
12:44:56 <Sgeo> > (\l -> \n -> map (chr . (+n) . ord) l) "Whatup" 5 -- this is how to do a multi-argument lambda
12:44:57 <lambdabot> "\\mfyzu"
12:45:13 <Ngevd> > sequence "abc"
12:45:14 <lambdabot> Couldn't match expected type `m a'
12:45:14 <lambdabot> against inferred type `GHC.Types...
12:45:20 <Labbekak> ah yea
12:45:29 <kallisti> so for example if you have a situation where each position of a list can be a list of possibilities, and you want to determine the list of all possibilities...... this is a terrible explanation.
12:45:55 <kallisti> here look at this instead: http://sprunge.us/jFQe
12:45:58 <kallisti> good use of sequence
12:46:01 <Sgeo> But it's only a terrible explanation if you have a situation where each position of a list can be a list of possibilities!
12:46:21 <kallisti> you have a thing that's a list of the possible things at a given position in a list
12:47:12 <kallisti> and another list that's a list of the possible things at another given position in a list, etc.
12:47:12 <kallisti> > sequence ["abc", "def"]
12:47:12 <lambdabot> ["ad","ae","af","bd","be","bf","cd","ce","cf"]
12:47:13 <kallisti> "abc" is the list of possibilities for the first element
12:47:13 <kallisti> "def" for the second
12:47:13 <monqy> > sequence [["excellent", "good", "great"], ["work", "job", "hello"]]
12:47:13 <monqy> oh no did i mess it
12:47:13 <lambdabot> [["excellent","work"],["excellent","job"],["excellent","hello"],["good","wo...
12:47:22 <kallisti> so in http://sprunge.us/jFQe
12:47:22 <monqy> oh my connection just for a few seconds
12:47:35 <kallisti> I use sequence to output the possibilities for the letter sequences of a telephone number
12:47:53 <kallisti> (back in the day number pads on telephones had these letters on them and you could use them to spell out stuff...)
12:48:00 <monqy> i used sequence to make compliments
12:48:17 <monqy> like excellent hello
12:48:40 <kallisti> so anyway if you do sequence (replicate n ls)
12:48:43 <kallisti> where ls = "abc"
12:48:47 <kallisti> then you're basically saying
12:48:56 <kallisti> sequence ["abc", "abc", ..., "abc"]
12:48:59 <kallisti> up to n
12:49:18 <kallisti> > sequence ["abc", "abc", "abc"]
12:49:19 <lambdabot> ["aaa","aab","aac","aba","abb","abc","aca","acb","acc","baa","bab","bac","b...
12:49:28 <kallisti> possible combinations of a, b, and c of link 3
12:49:30 <kallisti> so then...
12:49:42 <Sgeo> Ngevd, you should learn the Reader monad
12:49:50 <kallisti> (`replicateM` "abc") =<< [0..]
12:50:05 <monqy> or the Env Comonad because excitement
12:50:11 <kallisti> just concatenates all of those lists together, for every length n.
12:50:21 <kallisti> s/link/length/
12:50:39 <Ngevd> Sgeo, wait 'till I've learnt monads
12:50:49 <kallisti> oh
12:50:54 <Sgeo> Learning how to use a monad is different from learning how monads work.
12:50:55 <kallisti> yes that's a good thing to learan
12:51:32 <kallisti> s/how monads work/what a monad is/
12:51:42 <monqy> what monad work, how monad is
12:51:54 <kallisti> monqy: monad is but doesn't wor.
12:51:56 <kallisti> k
12:51:57 <kallisti> .
12:52:01 <kallisti> wor.k.
12:52:15 <monqy> is friendship a monad
12:52:24 <kallisti> no you can escape friendship.
12:52:29 -!- Labbekak has quit (Quit: Page closed).
12:52:34 <monqy> is friendship a comonad
12:52:39 <kallisti> uh...
12:52:40 <kallisti> maybe?
12:52:46 <monqy> what is dual to friendship
12:52:48 * Sgeo hits kallisti with a bunch of functions whose name begins with run
12:52:57 <kallisti> not monadic functions
12:53:02 <kallisti> not monad things.
12:53:06 <monqy> runs don't exist
12:53:08 <monqy> sorry sgeo
12:53:26 <kallisti> runList = head
12:53:30 <kallisti> LOL MONADS CAN BE ESCAPED FROM
12:53:37 <kallisti> no
12:53:38 <monqy> runlist is a filthy lie
12:53:39 <kallisti> there is no escape
12:53:41 * Sgeo did not say in general
12:53:43 <kallisti> you will die in monad forever.
12:53:58 <Sgeo> Just that it's wrong to say no monads can be escaped from for limited definitions of escape
12:54:06 <kallisti> but
12:54:10 <monqy> unsafePerformIO
12:54:13 <kallisti> you can't escape friendship monad
12:54:16 <kallisti> proven fact
12:54:16 <monqy> unsafeCoerce
12:54:16 <kallisti> QED
12:54:28 -!- pikhq has quit (Quit: See ya Sunday).
12:54:30 <kallisti> er
12:54:34 <kallisti> you can escape friendship not-monad
12:54:34 <monqy> uh
12:54:36 <kallisti> QED
12:54:42 <monqy> good
12:55:07 <monqy> with comonads you can make a friendship-friendship
12:55:23 <kallisti> monqy: ARE OUR FRIENDSHIPS FRIENDSHIPS
12:55:26 * Sgeo doesn't quite understand comonas
12:55:29 <Sgeo> comonads
12:55:34 <kallisti> Sgeo: think like monad but backwards.
12:55:36 <kallisti> flipped turnways
12:55:41 <monqy> they're pretty much the same
12:56:00 <kallisti> no they are opposites.
12:56:05 <kallisti> are opposites the same?
12:56:05 <monqy> i.e. the same
12:56:07 <monqy> yes
12:56:10 <kallisti> oh okay
12:56:12 <kallisti> they are the same.
12:56:15 <monqy> Sgeo: if you think Reader is a good example Monad, take a look at Env
12:56:31 <monqy> Sgeo: it may or may not even be conceptually simpler than Reader
12:56:39 * kallisti thinks Maybe is a good example monad.
12:56:48 <Sgeo> What is comaybe?
12:56:51 <kallisti> it's like... the bare minimum
12:56:53 <kallisti> of what you need
12:56:54 <kallisti> to be a monad.
12:56:59 <kallisti> kind of.
12:57:00 <kallisti> not really.
12:57:04 <Sgeo> kallisti, you mean, other than trivial stuff?
12:57:08 <kallisti> yes.
12:57:19 <Sgeo> The Trivial monad
12:57:27 <Sgeo> Running from his alter-ego, Identity
12:58:00 <kallisti> I don't think maybe is a comonad...
12:58:08 <kallisti> extract = ???
12:58:24 <kallisti> (partial functions are cheating)
12:58:36 <kallisti> anyway I'll bbl.
12:59:51 <monqy> I don't know of anything that could reasonably be called comaybe
13:00:00 <monqy> but Maybe is an Extend
13:00:54 <Sgeo> Maybe if I saw examples of Env in use...
13:01:12 -!- kallisti has quit (Read error: Operation timed out).
13:02:02 <monqy> Env: (some state, some value)
13:02:07 <monqy> Reader: some state -> some value
13:07:24 <monqy> I'd example but I can't think of anything interestjing
13:08:15 -!- monqy has quit (Quit: hello).
13:13:55 <Phantom_Hoover> :i Env
13:14:33 <Phantom_Hoover> <Sgeo> comonad
13:15:20 <Phantom_Hoover> ISTR from that cothings in category theory are what you get when you reverse the direction of morphisms or something.
13:16:22 <Phantom_Hoover> Like, rather than having f : X → Y, F : C → D, F(f) : F(X) → F(Y), you have F(f) : F(Y) → F(X).
13:16:35 <Phantom_Hoover> So I suppose a comonad would... hmm.
13:18:14 <Phantom_Hoover> Oh, also F(f . g) = F(g) . F(f).
13:19:52 <Sgeo> >t liftA2 (+) id id 5
13:19:58 <Sgeo> > liftA2 (+) id id 5
13:19:58 <lambdabot> 10
13:21:02 <Phantom_Hoover> Yeah, comonads are monads with all the function types reversed.
13:23:56 -!- kallisti has joined.
13:23:57 -!- kallisti has quit (Changing host).
13:23:57 -!- kallisti has joined.
13:24:25 -!- PatashuXantheres has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
13:25:08 <kallisti> hi my name is kallist i
13:26:29 <Ngevd> Hello, kallist. My name is Taneb|Lunch
13:26:33 -!- Ngevd has changed nick to Taneb|Lunch.
13:26:47 <kallisti> Taneb|Lunch: mmmm delicious
13:37:11 <kallisti> Taneb|Lunch: http://sprunge.us/jFQet
13:37:22 <kallisti> you should examine this awesome program.
13:37:45 <Phantom_Hoover> jFQet not found
13:37:49 <Phantom_Hoover> best program?
13:38:16 <kallisti> Taneb|Lunch: http://sprunge.us/jFQe
13:38:18 <kallisti> oopse
13:39:14 <kallisti> Taneb|Lunch: it's one of those questions that's asked on job interviews.
13:39:28 <kallisti> Given a telephone number print all of the possible character sequences that it forms.
13:46:12 -!- Taneb|Lunch has changed nick to Ngevd.
13:46:13 <Ngevd> Back
13:47:19 <kallisti> actually I don't know why I import Control.Applicative.
13:48:11 -!- incomprehensibly has joined.
13:48:18 <Ngevd> The Times Person of the Year 2011... died in 2010
13:48:23 <kallisti> `welcome incomprehensibly
13:48:26 <HackEgo> incomprehensibly:
13:48:37 <incomprehensibly> hello
13:48:41 <Ngevd> `welcome
13:48:45 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
13:48:48 <kallisti> weird.
13:48:57 <Ngevd> `cat bin/welcome
13:49:01 <HackEgo> ​#!/usr/bin/perl -w \ if (defined($_=shift)) { s/ +/ @ /g; exec "bin/@", $_ . " ? welcome"; } else { exec "bin/?", "welcome"; }
13:49:55 <incomprehensibly> `welcome test
13:49:58 <HackEgo> test: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
13:50:08 <incomprehensibly> `welcom Ngevd
13:50:11 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: welcom: not found
13:50:14 <incomprehensibly> `welcome Ngevd
13:50:17 <HackEgo> Ngevd: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
13:50:19 <Ngevd> `welcome incomprehensibly
13:50:23 <HackEgo> incomprehensibly: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
13:50:26 <incomprehensibly> ah
13:50:37 <incomprehensibly> back to normal
13:51:55 <kallisti> Ngevd: anyway it's a pretty un-noteworthy program, except that I use the monad over lists to do something.
13:52:43 <kallisti> also I use lookup for lists, but in a "real program" you'd usually want to use Data.Map's lookup instead.
13:53:35 <kallisti> lookup on [(a,b)] is O(n) worst case. lookup on Map a b is O(log n) worst case.
13:56:52 <kallisti> :t (M.fromList undefined <$>)
13:56:53 <lambdabot> Couldn't match expected type `a -> b'
13:56:53 <lambdabot> against inferred type `M.Map k a1'
13:56:53 <lambdabot> In the first argument of `(<$>)', namely `M.fromList undefined'
13:57:07 <kallisti> oh, yes.
13:57:13 <kallisti> :t fmap (M.fromList undefined)
13:57:14 <lambdabot> Couldn't match expected type `a -> b'
13:57:14 <lambdabot> against inferred type `M.Map k a1'
13:57:14 <lambdabot> In the first argument of `fmap', namely `(M.fromList undefined)'
13:57:20 <kallisti> oh, yes, indeed
13:57:29 <kallisti> :t (<$> M.fromList undefined)
13:57:30 <lambdabot> forall a b k. (Ord k) => (a -> b) -> M.Map k b
13:58:28 <kallisti> ah okay. But I doubt Data.Map has an Applicative instance because there's no Ord instance for functions.
14:02:56 <kallisti> oh wait it doesn't need an ord instance...
14:03:26 <Ngevd> I'm going to do something else for a bit
14:03:28 <Ngevd> Bye!
14:03:29 -!- Ngevd has quit (Quit: Goodbye).
14:04:26 <kallisti> hm weird.
14:04:41 <kallisti> ah I guess pure is difficult to define for Map.
14:05:53 <incomprehensibly> I think for a pure for lists, you need to make it an infinite list rather than a singleton
14:05:54 <incomprehensibly> right?
14:06:01 <incomprehensibly> or else <*> doesn't work right always
14:06:07 <kallisti> erm, pure for lists works fine.
14:06:10 <kallisti> > pure 1
14:06:11 <lambdabot> No instance for (GHC.Show.Show (f t))
14:06:11 <lambdabot> arising from a use of `M1276157568...
14:06:14 <kallisti> ...
14:06:18 <copumpkin> lol
14:06:31 <kallisti> > pure 1 :: [Int]
14:06:32 <lambdabot> [1]
14:07:07 <kallisti> lambdabot: why can't you read my mind???
14:08:09 <incomprehensibly> > (pure (+1)) <*> [1, 2, 3]
14:08:10 <lambdabot> [2,3,4]
14:08:12 <incomprehensibly> oh
14:08:37 <incomprehensibly> > [(+1), (+2)] <*> [1, 2, 3]
14:08:38 <lambdabot> [2,3,4,3,4,5]
14:08:48 <incomprehensibly> oh
14:08:54 <kallisti> incomprehensibly: perhaps you were thinking of zipWith ($)
14:08:57 <incomprehensibly> I thought <*> was like zipWtih ($)
14:08:58 <incomprehensibly> yeah
14:09:34 <incomprehensibly> what's a good objective-c channel?
14:09:39 <kallisti> no such thing.
14:09:43 <kallisti> (I don't know)
14:09:45 <incomprehensibly> ok
14:09:55 <incomprehensibly> because I need to ask a question somewhere
14:10:05 <kallisti> you could try #objective-c but I don't if that's a thing.
14:10:14 <incomprehensibly> nope
14:10:31 <kallisti> ... #iphone maybe? I doubt it.
14:10:36 <kallisti> try to find like an iphone dev channel
14:10:42 <kallisti> or... an objective-c channel.
14:10:45 * kallisti helpful.
14:11:07 <incomprehensibly> #iphonedev is it
14:11:12 <incomprehensibly> although I figured out my problem myself :P
14:11:26 <kallisti> that's always good.
14:19:00 <kallisti> "The Monad class defines the basic operations over a monad, a concept from a branch of mathematics known as category theory. From the perspective of a Haskell programmer, however, it is best to think of a monad as an abstract datatype of actions."
14:19:05 <kallisti> untrue, Haskell docs
14:19:13 <kallisti> (that it's helpful to think of them that way)
14:23:54 <Phantom_Hoover> incomprehensibly, have you been here before?
14:24:12 <incomprehensibly> Phantom_Hoover: yeah, I lurk a lot and occasionally talk
14:24:22 <incomprehensibly> kallisti: yeah, that pisses me off
14:24:42 <incomprehensibly> about the only place it fits is like IO and State
14:24:53 <Phantom_Hoover> It also fits in List and Maybe.
14:24:58 <incomprehensibly> for [], Maybe, etc., it's completely off
14:25:03 <incomprehensibly> it does not fit them in any way whatsoever
14:25:03 <Phantom_Hoover> Nope.
14:25:10 <incomprehensibly> a list is not an action. it's the results of an action.
14:25:12 <Phantom_Hoover> Maybe is obviously computations which can fail.
14:25:13 <kallisti> eh, it fits sort of.
14:25:18 <kallisti> it's just not /helpful/ for learning.
14:25:21 <incomprehensibly> no, Maybe is the *answers* to those computations.
14:25:25 <kallisti> "oh actions... okay what does that mean"
14:25:33 <incomprehensibly> IO actually encodes actions
14:25:42 <kallisti> incomprehensibly: Maybe represents sequencing actions that can possibly fail.
14:25:48 <incomprehensibly> as in, you have putStrLn "something" or getLine, and those are actions that you can do
14:25:52 <Phantom_Hoover> List is trickier, but when you think about it the monad represents nondeterministic computation.
14:25:53 <kallisti> list represents sequencing actions with many possible results.
14:25:54 <kallisti> it kind of fits.
14:25:57 <incomprehensibly> kallisti: yes, but a value of type Maybe a is *not* an action.
14:26:03 <incomprehensibly> a value of type list is *not* an action.
14:26:09 <incomprehensibly> so the type doesn't represent actions.
14:26:11 <kallisti> oh, well, yes.
14:26:13 <kallisti> neither is State.
14:26:13 <Phantom_Hoover> Yes, it does.
14:26:19 <incomprehensibly> Phantom_Hoover: how…?
14:26:24 <incomprehensibly> IO is like a list of instructions
14:26:26 <incomprehensibly> it encodes an action
14:26:27 <Phantom_Hoover> A value of type Maybe is an action which can either result in a value or fail.
14:26:29 <incomprehensibly> but Maybe and list do not
14:26:37 <incomprehensibly> Phantom_Hoover: how is Just 3 an action?
14:26:40 <incomprehensibly> how is Nothing an action?
14:26:48 <incomprehensibly> that's the results of an action which has already been done.
14:26:55 <Phantom_Hoover> Same way (return 3) :: IO Int is an action.
14:27:05 <incomprehensibly> return 3 can be later *executed*.
14:27:08 <incomprehensibly> same as State
14:27:14 <Phantom_Hoover> Define 'executed' here.
14:27:26 <incomprehensibly> in the case of IO, handed to the Haskell runtime and performed
14:27:35 <incomprehensibly> in the case of State, handed an input value, right?
14:27:45 <incomprehensibly> and functions are monads, right?
14:27:55 <incomprehensibly> giving them an argument is executing that action
14:27:56 <Phantom_Hoover> Yes; this came up earlier today.
14:28:04 <incomprehensibly> however, for Just 3, there's no way to execute that
14:28:15 <incomprehensibly> Maybe does not encode actions. it just encodes values that can be the results of actions.
14:29:13 <incomprehensibly> saying that Just 3 is an action is the same type of confusion as saying that getLine is a String.
14:29:22 <incomprehensibly> in the opposite direction
14:29:22 <Phantom_Hoover> How?
14:29:28 <Phantom_Hoover> getLine is manifestly not a String.
14:29:35 <incomprehensibly> yep, and Just 3 is manifestly not an action.
14:29:44 <incomprehensibly> say you have an IO (Maybe a)
14:29:48 <Phantom_Hoover> Action is not a type.
14:29:50 <incomprehensibly> *that* is an action that can succeed or fail
14:29:59 <incomprehensibly> whereas Maybe a is just the answer to that action.
14:30:08 <Phantom_Hoover> It's a concept we're assigning to certain things.
14:30:35 <incomprehensibly> and I'm saying it makes no sense to assign it to Just 3.
14:30:38 <incomprehensibly> is 3 an action?
14:31:02 <incomprehensibly> if Just 3 is an action, 3 is too.
14:31:22 <Phantom_Hoover> You seem to be saying that a monad is an action if there's a function m a -> a.
14:31:35 <kallisti> I think you're confusing "action" with "things that perform side-effects". and you think we're saying "action" means "value"
14:31:40 <incomprehensibly> no, because there is no function for that with IO
14:31:42 <kallisti> State is not an action by your own definition.
14:32:04 <incomprehensibly> ok, forget State
14:32:09 <incomprehensibly> look at Parsec
14:32:21 <incomprehensibly> although State is an action by my own definition
14:32:27 <incomprehensibly> because it encodes an action that you can later perform
14:32:33 <Phantom_Hoover> What *is* your own definition?
14:32:51 <incomprehensibly> what's yours?
14:32:56 <incomprehensibly> I just stated mine
14:33:17 <Phantom_Hoover> Does fromMaybe count as an action by your definition?
14:33:19 <kallisti> incomprehensibly: "encodes an action that you can later perform" describes any lazily evaluated expression.
14:33:26 <kallisti> you realize that State is implemented with pure code, yes?
14:33:31 <incomprehensibly> ok, then every value in Haskell is now an action
14:33:37 <incomprehensibly> kallisti: yes, I realize that.
14:33:38 * incomprehensibly sighs
14:33:39 <Phantom_Hoover> After all, it's doing no more than 'executing' State.
14:33:57 <incomprehensibly> if lazily evaluated values, thunks, etc., are actions, then every single value in Haskell is an actino
14:34:13 <incomprehensibly> but there's *still* an abstract difference between State, ->, IO, etc. than 3
14:34:13 <kallisti> foldr "executes" a list.
14:34:33 <kallisti> incomprehensibly: we're not talking about 3
14:34:36 <kallisti> we're talking about Maybe a
14:34:38 <kallisti> or [a]
14:34:47 <incomprehensibly> ok, well what's the difference between [3] and Just 3 and 3 in terms of action-ness?
14:35:48 <incomprehensibly> because if [3] is an action because of lazy evaluation, the exact same logic applies to 3.
14:36:13 <Phantom_Hoover> It occurs to me that Identity 3 is basically the same as what you're saying about 3.
14:36:42 <kallisti> hm this is basically a semantic thing around the meaning of "action"
14:37:12 <incomprehensibly> I'm saying, people are confusing levels of a hierarchy by saying that the list monad is an actino
14:37:14 <incomprehensibly> action*
14:37:33 <kallisti> I don't think [a] represents an action so much as it represents a value within an action. specifically, a value with zero or more possible values, with >> and >>= acting as a means to sequence computations over these values.
14:37:54 <incomprehensibly> lists do not represent actions.
14:38:00 <incomprehensibly> values of type IO do represent actions.
14:38:11 <Phantom_Hoover> Why?
14:38:26 <incomprehensibly> because lists are plain old values
14:38:29 <incomprehensibly> IO is also plain old values
14:38:34 <kallisti> therefore?
14:38:36 <incomprehensibly> but it's also instrucitons you can execute
14:38:37 <Phantom_Hoover> After all, IO is conceptually just State RealWorld, and State is no more esoteric than a list.
14:38:53 <incomprehensibly> yes, but State is an action you can perform
14:38:55 <incomprehensibly> so is ->
14:39:15 <incomprehensibly> I don't get what consing 3 with [] does to it that makes it an action
14:39:19 <incomprehensibly> it's still a number
14:39:24 <incomprehensibly> it doesn't tell you how to do something
14:39:48 <kallisti> if State represents an action
14:39:51 <kallisti> so does tuples.
14:40:00 <incomprehensibly> sure, you can do some godel encoding stuff and encode actions of type IO in Ints, but then you're missing the point: my definition of action is not defined by the type system
14:40:04 <incomprehensibly> it's defined by how the type is used
14:40:22 <Phantom_Hoover> kallisti, Writer is the tuple monad.
14:40:55 <incomprehensibly> so sure, you can say foldl "executes" a list, and if the list somehow encodes things that foldl can do, and you can frame it that way, then lists are actions. but lists are not being used as actions in the list monad
14:41:05 <incomprehensibly> also, the Identity monad is not an action like -> is
14:41:24 <incomprehensibly> Id is a plain old container
14:41:46 <incomprehensibly> and when you do Id 1 >>= (Id . (+1)), the value you get is just Id 2
14:42:04 <incomprehensibly> you don't get instructions describing how to take a value and add one to it
14:42:07 <Phantom_Hoover> I'm afraid that you appear to be hopelessly confused, and as I am myself slightly more hopefully confused I can't really help.
14:42:08 <kallisti> incomprehensibly: I'm saying that your own definition is inconsistent because it permits State to be an action but not a list.
14:42:19 <Phantom_Hoover> If you wait until elliott turns up, he can probably yell at you for a while.
14:42:47 <incomprehensibly> kallisti: my definition is not inconsistent because there's no boolean predicate over types that tells you whether it's an action!
14:43:02 <kallisti> so it's your own whim
14:43:02 <incomprehensibly> it's just how you use it
14:43:02 <kallisti> okay
14:43:04 <kallisti> can't argue that.
14:43:06 * incomprehensibly sighs
14:43:06 <kallisti> carry on.
14:43:09 <incomprehensibly> no, it's not my own whim
14:43:12 <incomprehensibly> it's in how the type is used.
14:43:15 <kallisti> so it has criteria
14:43:16 <incomprehensibly> so you can use lists as actions
14:43:20 <Phantom_Hoover> <incomprehensibly> kallisti: my definition is not inconsistent because there's no boolean predicate over types that tells you whether it's an action!
14:43:29 <Phantom_Hoover> Sure there is; the one in your head.
14:43:41 <incomprehensibly> Phantom_Hoover: yes, but there are more arguments than just the specification of the type
14:43:48 <incomprehensibly> such as, how it is currently being used.
14:44:03 <Phantom_Hoover> Of course, the action is not determined by the type alone, but by what return and >>= are, but that scarcely matters.
14:44:28 <incomprehensibly> there's a difference between const 3 and 3.
14:44:33 <incomprehensibly> the first is an action that returns 3
14:44:38 <Phantom_Hoover> Erm, wait, *type transformer or whatever.
14:44:41 <incomprehensibly> and the second is just the plain old 3
14:44:50 <incomprehensibly> the same thing is true of const [3] and [3]
14:44:58 <incomprehensibly> the first is a function that can return multiple values
14:45:02 <incomprehensibly> and the second *is* those multiple values
14:45:09 <incomprehensibly> const (Just 3) is the same thing
14:45:15 <incomprehensibly> it's a function that can possibly succeed or fail
14:45:17 <incomprehensibly> it happens to succed
14:45:26 <incomprehensibly> Just 3 is not an action that can succeed or fail, but the *answer* to such an action.
14:45:33 <Phantom_Hoover> You are definitely hopelessly confused here.
14:45:36 <incomprehensibly>
14:45:37 <incomprehensibly> how?
14:45:56 <Phantom_Hoover> Try going into #haskell, there should be some not very confused at all people in there.
14:46:00 <incomprehensibly> I'm making a distinction between layers of a hierarchy
14:46:05 <incomprehensibly> stop being so patronizing
14:46:24 <Phantom_Hoover> I'm not being patronising, you're just really confused.
14:46:28 <incomprehensibly> no, I'm not really confused.
14:46:29 <kallisti> incomprehensibly: IO (IO a) IO a is just a value you get form an action, not an action itself. etc.
14:46:41 <kallisti> *from
14:46:44 <incomprehensibly> if you're calling Just 3 an action, you're really confused, and I don't see how you have any grounds tro call me confused
14:46:59 <Phantom_Hoover> Unfortunately, my own definition of 'action' is itself a rather nebulous thing which can only function if you aren't looking it too closely.
14:47:02 <incomprehensibly> kallisti: yep, that's true! however, IO a is *also* an action itself.
14:47:07 <Phantom_Hoover> Schrodinger's definition, if you will.
14:47:08 <incomprehensibly> it's a hierarchy
14:47:27 <Phantom_Hoover> Where the hell did you arrive at hierarchies from.
14:47:28 <incomprehensibly> kallisti: IO (IO a) is an action that returns an action that returns another value that may or may not be an action, depending on what it is and how it's uisd
14:47:30 <incomprehensibly> used*
14:47:30 <kallisti> incomprehensibly: which suddenly fails on lists and maybe. not only does it fail, it can be demonstrated to fail because of the examples you provide above.
14:47:35 <Phantom_Hoover> Seriously, go into #haskell now.
14:47:36 <incomprehensibly> Phantom_Hoover: not tree hierarchies
14:47:38 <incomprehensibly> Phantom_Hoover: just levels
14:47:47 * incomprehensibly sighs
14:47:53 <incomprehensibly> how is Just 3 an action?
14:47:56 <incomprehensibly> can we go back to that?
14:47:57 <kallisti> incomprehensibly: >>=
14:47:57 <Phantom_Hoover> I don't know that much about monads, and kallisti knows less than he thinks he does.
14:47:58 <kallisti> and >>
14:47:59 <kallisti> and return
14:48:10 <Phantom_Hoover> s/and >>//
14:48:13 <incomprehensibly> kallisti: using >>= is performing an action
14:48:22 <incomprehensibly> but that doesn't mean Just 3 is an action
14:48:28 <Phantom_Hoover> incomprehensibly, yes, it does.
14:48:37 <incomprehensibly> Just 3 >>= (Just . (+1))
14:48:41 <Phantom_Hoover> By using >>= on Just 3, you are performing the associated action.
14:48:44 <incomprehensibly> that's not building up an action
14:48:49 <kallisti> incomprehensibly: so then IO is also not an action
14:48:49 <Phantom_Hoover> i.e. succeeding with a value or failing.
14:48:52 <kallisti> using >>= on IO a is an action
14:48:54 <incomprehensibly> Phantom_Hoover: ok, you're *performing the associated action*
14:48:57 <incomprehensibly> so Just 3 is not an action itself
14:49:01 <Phantom_Hoover> Yes, it is.
14:49:03 <incomprehensibly> it's a value, with an associated action.
14:49:30 <incomprehensibly> because Just 3 is a very different thing from the code that performs Just 3 >>= (Just . (+1))
14:49:36 <Phantom_Hoover> Maybe a contains actions which either succeed, resulting in a value, or fail, resulting in Nothing.
14:49:40 <kallisti> incomprehensibly: except when that code returns Just 3
14:49:44 <kallisti> then they're the same
14:49:45 <kallisti> suddenly
14:49:51 * incomprehensibly sighs
14:49:59 <incomprehensibly> the code is different from the value that it returns
14:50:08 <incomprehensibly> just like const 3 is different from 3
14:50:12 <incomprehensibly> just like IO a is different from a
14:50:12 <Phantom_Hoover> [a] contains actions which result in a list of values.
14:50:14 <kallisti> and id 3 is different from 3
14:50:15 <incomprehensibly> how can you not comprehend this
14:50:30 <incomprehensibly> Phantom_Hoover: no, [a] encodes those lists of values itself
14:50:51 <incomprehensibly> Phantom_Hoover: a -> [b] is an example of an action that returns multiple values
14:50:53 <incomprehensibly> or IO [a]
14:51:01 <incomprehensibly> kallisti: id 3 is equal to 3
14:51:05 <kallisti> incomprehensibly: you're not going to get anywhere by repeating yourself.
14:51:18 <kallisti> incomprehensibly: Just 3 >>= (Just . (+1)) is equal to Just 4
14:51:22 <kallisti> therefore Just 4 is an action.
14:51:29 <incomprehensibly> does not follow
14:51:38 <kallisti> k
14:51:39 <Phantom_Hoover> State r a contains actions which produce a value from some state r, and can alter r in the process.
14:51:42 <kallisti> then your definition is inconsistent.
14:51:46 <incomprehensibly> how?
14:51:56 <incomprehensibly> Phantom_Hoover: correct
14:52:12 <Phantom_Hoover> How is that different from either [a] or Maybe a.
14:52:19 <incomprehensibly> does lambdabot know about the function monad?
14:52:23 <Phantom_Hoover> Yes.
14:52:43 <incomprehensibly> > const 3 >>= (const . id)
14:52:44 <lambdabot> Overlapping instances for GHC.Show.Show (b -> a)
14:52:44 <lambdabot> arising from a use of `...
14:52:51 <incomprehensibly> > const 3 >>= (const . (+1)) ()
14:52:51 <lambdabot> Couldn't match expected type `b -> b1' against inferred type `()'
14:53:01 <incomprehensibly> > (const 3 >>= (const . (+1))) ()
14:53:01 <Phantom_Hoover> The function monad contains actions which produce a value from some constant.
14:53:03 <lambdabot> 4
14:53:53 <kallisti> as far as I can tell your definition of action is:
14:54:05 <kallisti> a) IO values b) State values c) code written with >>= and >>
14:54:11 <kallisti> which is a really useless definition of action.
14:54:22 <incomprehensibly> this is an incredibly frustrating conversation, and I am not enjoying the way you are all talking down to me. I have thought through this position, and I've used Haskell. I'm not a baby. You don't have to act like I'm one.
14:54:24 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:54:46 <Phantom_Hoover> incomprehensibly, I'm not.
14:55:04 <kallisti> incomprehensibly: saying you're wrong is different from talking down to you.
14:55:08 <incomprehensibly> Phantom_Hoover: "you're very confused. go talk to #haskell and they'll fix you up right quick"
14:55:18 <incomprehensibly> yeah, you're not at all
14:55:20 <Phantom_Hoover> But I barely have any idea of what I'm talking about, and kallisti doesn't have much more.
14:55:38 <Phantom_Hoover> In #haskell, there are, surprise surprise, people who know what they are talking about.
14:55:46 <incomprehensibly> ok, imagine a piece of paper that has, written on it, the words "wash your hands".
14:56:02 <incomprehensibly> now imagine a person washing their hands
14:56:13 <incomprehensibly> now imagine that person's hands before, dirty, and after, clean.
14:56:22 <Phantom_Hoover> I wish you could force people to join channels.
14:56:30 <incomprehensibly> I am in #haskell.
14:56:30 <kallisti> try invite
14:56:51 <Phantom_Hoover> I wish you could force people to talk in another channel.
14:56:56 <Phantom_Hoover> Maybe I can paste everything you say?
14:57:05 <Phantom_Hoover> Thank you.
14:59:04 <kallisti> incomprehensibly: btw in your metaphor values of type IO a are the paper saying "wash your hands"
14:59:15 <incomprehensibly> yep
14:59:22 -!- elliott has joined.
14:59:32 <elliott> i'm quitting stack overflow if this guy keeps asking terrible questions
14:59:36 <lambdabot> elliott: You have 5 new messages. '/msg lambdabot @messages' to read them.
14:59:46 <Phantom_Hoover> Oh, speak of the devil and he shall appear ten minutes after you needed him.
15:00:00 <incomprehensibly> kallisti: and Maybe a would be a type that either includes clean hands or failure
15:00:18 <incomprehensibly> elliott: what makes Just 3 an action that doesn't make 3 an action too
15:00:25 <kallisti> incomprehensibly: State does not match your metaphor
15:00:44 <incomprehensibly> kallisti: how does it not
15:00:45 <kallisti> state is not a piece of paper that encodes an action to do anything (aka it doesn't represent a side-effect to be performed)
15:00:49 <Phantom_Hoover> incomprehensibly, the fact that 3 doesn't have bind or return defined?
15:00:56 <incomprehensibly> doing something doesn't have to mean performing a side effect
15:01:05 <incomprehensibly> it can mean transforming a pure value
15:01:21 <Phantom_Hoover> You seem to have confused monads with functions.
15:01:27 * incomprehensibly sighs
15:01:31 <Phantom_Hoover> This is quite difficult, and I applaud your perseverance.
15:01:31 <incomprehensibly> you seem to have confused what I'm saying.
15:01:45 <incomprehensibly> Phantom_Hoover: you say you're not talking down to me
15:01:46 <kallisti> incomprehensibly: State does not transform anything
15:01:48 <kallisti> neither does IO
15:01:57 <kallisti> for that matter
15:01:59 <incomprehensibly> but you'er putting zero effort into understanding me, then treating me like I don't know anything
15:02:08 <incomprehensibly> you're talking down to me
15:02:11 <incomprehensibly> you're being an asshole
15:02:23 <Phantom_Hoover> incomprehensibly, I'm talking down to you now, because I dislike people who assume that because they don't understand things, those things are flawed.
15:02:23 <incomprehensibly> kallisti: watch this
15:02:32 <elliott> <incomprehensibly> elliott: what makes Just 3 an action that doesn't make 3 an action too
15:02:34 <incomprehensibly> Phantom_Hoover: I understand those things, probably better than you do.
15:02:42 <elliott> incomprehensibly: 3 is not of type (m a) for some m that is an instance of Monad.
15:03:18 <incomprehensibly> elliott: I'm disputing that action is an apt name for values of type Monad a => m a
15:03:20 * elliott usually reserves "action" for IO actions, but speaking about "monadic actions" in general is meaningful since "monadic value" is misleading (suggests the value passed to return is "inside" somehow, at least I see this perception a lot when that terminology is used)
15:03:27 <kallisti> incomprehensibly: no one has talked down to you. we said you were wrong.
15:03:32 <kallisti> those are different things.
15:03:41 <incomprehensibly> kallisti: Phantom_Hoover has talked down to me
15:03:46 <incomprehensibly> kallisti: not simply said that I'm wrong
15:04:13 <kallisti> okay.
15:04:21 <kallisti> Phantom_Hoover: shame on you.
15:04:32 <kallisti> incomprehensibly: shame on you for claiming to know more than Phantom_Hoover
15:04:42 <kallisti> elliott: shame on you for being reasonable.
15:04:51 <kallisti> kallisti: shame on you because I don't know what am I doing wrong.
15:05:00 <elliott> 14:25:48: <incomprehensibly> as in, you have putStrLn "something" or getLine, and those are actions that you can do
15:05:00 <elliott> 14:25:52: <Phantom_Hoover> List is trickier, but when you think about it the monad represents nondeterministic computation.
15:05:00 <elliott> 14:25:57: <incomprehensibly> kallisti: yes, but a value of type Maybe a is *not* an action.
15:05:00 <elliott> 14:26:03: <incomprehensibly> a value of type list is *not* an action.
15:05:01 <elliott> 14:26:09: <incomprehensibly> so the type doesn't represent actions.
15:05:03 <elliott> incomprehensibly: A value of type [a] can easily be interpreted as an action in a nondeterministic backtracking language, such as e.g. Prolog.
15:05:08 <elliott> The fact that it can also be not interpreted as this is irrelevant.
15:05:21 <elliott> (Maybe a) is an action in a partial short-circuiting language, etc.
15:05:29 <elliott> (Either e a) is an action in a language with exceptions of type e.
15:05:47 <elliott> The existence of other valid interpretations of these values does not invalidate the action interpretation.
15:05:49 <incomprehensibly> it's not an action in that short-circuiting language, it's a value that you get out of that language.
15:05:55 <elliott> And indeed that interpretation is rqequired to understand the use of do notationw ith them.
15:06:00 <kallisti> incomprehensibly: same logic applies with IO, sir.
15:06:02 <incomprehensibly> an action of that language would be, e.g., an AST. right?
15:06:08 <elliott> incomprehensibly: No, the value of type `a` would be the value you get out of that language.
15:06:11 <elliott> And no, untrue.
15:06:53 <elliott> 14:27:05: <incomprehensibly> return 3 can be later *executed*.
15:06:53 <elliott> 14:27:08: <incomprehensibly> same as State
15:06:55 <elliott> :t maybe
15:06:56 <lambdabot> forall b a. b -> (a -> b) -> Maybe a -> b
15:06:59 <elliott> :t runCont
15:07:00 <lambdabot> forall r a. Cont r a -> (a -> r) -> r
15:07:09 <kallisti> elliott: I failed to find a good example for lists
15:07:11 <elliott> runMaybe :: Maybe a -> r -> (a -> r) -> r
15:07:11 <kallisti> so I went with foldr
15:07:19 <incomprehensibly> what it seems like to me is that since IO is the most prominent monad, since it's used in every compilable Haskell program, etc., people often ascribe features of it to all monads
15:07:22 <elliott> incomprehensibly: Note essential identicality to runCont.
15:07:35 * elliott does not do that at all.
15:07:50 <elliott> It's very powerful to realise that monads are essentially mini programming languages, viewed from the lens of do notation.
15:08:08 <elliott> Maybe is a partial embedded DSL, IO is an imperative embedded DSL.
15:08:09 <incomprehensibly> you know the common misconceptions that monads are a language feature, or a way to cheat to put impurity in a pure language, or that monads are about side effects
15:08:10 <incomprehensibly> etc.
15:08:13 <elliott> State is a stateful embedded DSL.
15:08:23 <elliott> Cont is a call/cc-having embedded DSL.
15:08:26 <incomprehensibly> I think calling values of a monad "actions" is another misconception
15:08:34 <elliott> incomprehensibly: Yes, and I think you're wrong.
15:08:42 <kallisti> I think it's unhelpful for teaching monads, but not incorrect to say.
15:08:42 * elliott is under no confusion as to what your position is.
15:08:52 <incomprehensibly> what a monad is has nothing to do with actions
15:08:53 <kallisti> incomprehensibly: what it is it that makes a value of IO a an action.
15:08:56 <incomprehensibly> it has to do with layers
15:08:59 <incomprehensibly> unit and join
15:09:05 <incomprehensibly> adding and removing layers of a functor
15:09:13 <elliott> incomprehensibly: Yes, that is one interpretation.
15:09:16 <elliott> I am not saying monads are "about" actions.
15:09:23 <elliott> I am saying that "monadic action" is reasonable, consistent, meaningful terminology.
15:09:31 <elliott> That does not mean I think they betray some deep underlying truth about monads or anything.
15:09:44 <incomprehensibly> elliott: I'm saying that actions is an interpretation that applies to only a subset of monads, and has nothing to do with the qualities inherent in a monad, but simply with some specific applications of them
15:10:04 <elliott> <elliott> incomprehensibly: Yes, and I think you're wrong.
15:10:04 <elliott> * elliott is under no confusion as to what your position is.
15:10:17 <elliott> Please stop trying to tell me what you're saying as a substitute for actually replying to things I say.
15:10:31 <incomprehensibly> I'm not
15:10:46 <elliott> Then why are you trying to tell me what you're saying?
15:11:27 <incomprehensibly> ok, the types of runMaybe and runCont are the same
15:11:34 <kallisti> *maybe
15:11:35 <incomprehensibly> does that mean every container is an action?
15:11:38 <kallisti> no
15:11:42 <incomprehensibly> yes it does
15:11:46 <kallisti> okay.
15:11:47 <elliott> Depends what you mean by "container".
15:11:47 <kallisti> yes it does.
15:11:57 <incomprehensibly> because any container you make, if it can be nested, is an action by that definition
15:12:04 <incomprehensibly> because you can make a function of the same type
15:12:05 <elliott> Depends what you mean by "container".
15:12:11 <Phantom_Hoover> No, it means that every container for which you can define return and join is an action.
15:12:18 <Phantom_Hoover> This is not at all odd.
15:12:21 <incomprehensibly> kallisti: will you stop being so god damn condescending towards me
15:12:35 * elliott notes that he doesn't think he completely agrees with kallisti or Phantom_Hoover here, so please don't take their answers as my answers.
15:12:48 <elliott> Also, kallisti isn't being condescending? If anyone's being condescending it's Phantom_Hoover (this is a universal truth).
15:12:58 <incomprehensibly> elliott: "okay. yes it does."
15:13:07 <kallisti> incomprehensibly: you didn't supply a very good reason there.
15:13:09 <incomprehensibly> you can just hear the condescension and rolleyes exuding from his messages
15:13:15 <incomprehensibly> kallisti: I was *about to*, and I did
15:13:16 <kallisti> but I am a victim to mindless peer pressure
15:13:16 <Phantom_Hoover> Well, it does depend on what 'container' means, but it looks like you just mean any t a.
15:13:17 <kallisti> sorry.
15:13:20 <incomprehensibly> can you be the slightest bit patient?
15:13:38 <kallisti> maybe.
15:13:39 <elliott> incomprehensibly: You're mistaking kallisti being stupid and/or annoying for condescending.
15:13:48 * elliott keeper of peace.
15:14:08 <elliott> But seriously, if you're going to interpret things that uncharitably and personally this is a waste of time.
15:14:10 <incomprehensibly> ok, kallisti, I've just been informed you're being stupid and/or annoying
15:14:17 <incomprehensibly> rather than condescending
15:14:19 <incomprehensibly> sorry for the misunderstanding
15:14:21 <Phantom_Hoover> Obviously the condescension from my messages spilt over.
15:14:43 <kallisti> incomprehensibly: I hate your mother.
15:14:47 <elliott> incomprehensibly: Pretty condescending of you, no?
15:14:51 <incomprehensibly> elliott: yep
15:15:05 <incomprehensibly> because I'm incredibly frustrated with this conversation
15:15:14 <incomprehensibly> I think I'm going to give i tup
15:15:17 <incomprehensibly> it up*
15:15:42 <kallisti> yes. this is what happens when two people think they're right in different ways.
15:15:43 <elliott> incomprehensibly: Okay, we'll put it down in the history books that you lost.
15:16:00 <incomprehensibly> fine with me
15:16:08 <incomprehensibly> I don't care how #esoteric defines winning
15:16:16 <itidus21> you will also be accused of inhumanity
15:16:18 <Phantom_Hoover> Excellent, now we just wait until elliott reads oerjan's comments in the logs and get some popcorn.
15:16:19 <incomprehensibly> if they define it as poorly as they define action, it really means nothing
15:16:24 <kallisti> the conversation is about convincing the other person. it becomes frustrating when they refuse to be convinced because they're trying to convince you as well.
15:16:35 <kallisti> waste of time. this should be obvious.
15:16:42 <elliott> incomprehensibly: For someone complaining about how rude we're all being you sure are being a twerp.
15:16:45 <elliott> (Twerp: best word?)
15:16:54 <incomprehensibly> I was attempting to be respectful before
15:17:02 <elliott> Also, considering "action" is common terminology throughout the Haskell community, we're in very good company.
15:17:14 <incomprehensibly> that's what I don't like about the Haskell community
15:17:18 <incomprehensibly> the whole business with monads
15:17:44 <incomprehensibly> it's so cargo cult
15:17:59 <incomprehensibly> people use monads everywhere, and monad transformers
15:18:05 <incomprehensibly> while they *work*, they make your code uglier than most Java
15:18:05 <kallisti> yes I think monads are actions because someone told me to interpret it that way.
15:18:14 <elliott> incomprehensibly: No; that's people who look at Haskell from outside and are unable to distinguish people who know Haskell from people who dabble in it.
15:18:26 <elliott> And, ironically, that complaint only applies to certain monads.
15:18:30 <Phantom_Hoover> incomprehensibly, you know, you can just stop digging this hole.
15:18:48 <incomprehensibly> elliott: it's definitely the worst with the IO monad
15:18:53 <elliott> Yes, putting everything in IO is ugly, yes, putting everything in State is ugly, no, threading error-handling with Either is not ugly, no, modelling nondeterministic computation with [] or a probability monad is not ugly.
15:19:14 <kallisti> incomprehensibly: yes I agree. IO monad is bad for Haskell code.
15:19:16 <elliott> If you go into #haskell you will see people warned away from putting everything in IO, so unless you provide an actual basis for this cargo-culting claim...
15:19:20 <kallisti> I think we should get rid of IO.
15:19:27 <kallisti> it would make compilation much easier.
15:19:31 <elliott> kallisti: Now you *are* being a shit.
15:19:35 <kallisti> loooool
15:19:44 <incomprehensibly> kallisti: I think so too, but there are possible good replacements
15:19:49 <elliott> incomprehensibly: Anyway, it's not like we can just switch to FRP tomorrow so until then the IO monad will continue to be used more than we'd like.
15:19:53 <incomprehensibly> for instance, an FRP system would be way more desirable
15:19:57 <kallisti> elliott: just joking.
15:20:05 <elliott> incomprehensibly: Whining about cargo culting when the alternatives are still topics of active research is shitty.
15:20:07 <kallisti> I stopped taking this conversation seriously long ago.
15:20:19 <elliott> incomprehensibly: Especially since the Haskell community is one of the only communities actually actively developing FRP.
15:20:31 <elliott> (I say "one of" because I think Scala has a thing that's gaining traction.)
15:20:40 <elliott> (Otherwise it'd just be the one, singular. Well, there's that Agda thing too.)
15:20:45 <incomprehensibly> elliott: I've read too much that extols the virtues of monads and how beautifully they solve the problem of IO
15:20:50 <incomprehensibly> for instance, Simon Peyton JOnes
15:21:09 <kallisti> this is not indicative of some kind of mindless Haskell IO monad cult.
15:21:21 <elliott> incomprehensibly: The IO monad is the best way to model imperative programs I've seen; it's first-class, higher-order, etc. etc. etc.
15:21:28 <elliott> That's separate from the issue of how good it is to model IO in general.
15:21:54 <elliott> incomprehensibly: Anyway, you're obviously not actually in the Haskell community or you'd know that most people aren't satisfied with IO.
15:22:10 <incomprehensibly> what does "in the Haskell community" mean
15:22:37 <incomprehensibly> I follow Haskellers, I'm occasionally active in #haskell, etc.
15:22:44 <incomprehensibly> I guess I'm outside it because I hold different impressions than you
15:22:48 <incomprehensibly> no true scotsman
15:22:56 <elliott> incomprehensibly: Dunno, but I know that thinking everyone stuffs everything into monads and thinks IO is the best thing ever proves you aren't.
15:23:46 <incomprehensibly> I really don't want this to come across antagonistically or condescendingly, but don't try to hold the Haskell community to such a high standard
15:23:52 <incomprehensibly> it's not God, and it's not the perfectest
15:23:54 <incomprehensibly> i's just people
15:24:03 <incomprehensibly> so you don't have to rationalize all of its follies
15:24:05 <kallisti> lol?
15:24:08 <incomprehensibly> there are some bad sides to it
15:24:11 <incomprehensibly> kallisti: lol?
15:24:19 <kallisti> I just find it funny that you inferred that, somehow
15:24:21 <kallisti> from elliott just said.
15:24:24 <kallisti> +what
15:24:33 <incomprehensibly> kallisti: he's trying to redefine the Haskell community to fit all of his personal beliefs
15:24:37 <elliott> incomprehensibly: Dammit: you've uncovered my secret promotoin of the Haskell Master Race.
15:24:37 <Phantom_Hoover> incomprehensibly, the Haskell community is not perfect, therefore it must be full of Nazis!
15:24:41 <elliott> *promotion
15:24:42 <Phantom_Hoover> QED.
15:24:46 <incomprehensibly> Phantom_Hoover: yeah, that's what I said
15:24:48 <elliott> Phantom_Hoover: *SIMULTANEOUS GODWIN HIGH-FIVE*
15:24:49 <incomprehensibly> Phantom_Hoover: good job
15:24:50 * incomprehensibly pats on head
15:24:53 <itidus21> godwin's law also applies to haskell
15:24:56 <kallisti> incomprehensibly: not elliott is actually familiar with the Haskell community
15:24:56 <elliott> incomprehensibly: Oh go away.
15:25:00 <kallisti> incomprehensibly: this is not his agenda.
15:25:09 <kallisti> s/not/no/
15:25:16 <Phantom_Hoover> incomprehensibly, no, but it's implied by what you said.
15:25:21 <incomprehensibly> I'm saying, elliott is exhibiting fanboyish loyalty to a community
15:25:24 <elliott> Yes, totally.
15:25:29 <elliott> Psychoanalyse me harder!!!
15:25:30 <kallisti> incomprehensibly: if you go to #haskell they will caution you from overzealous use of IO and (I would think) monad transformers.
15:25:34 <incomprehensibly> redefining it to fit his personal beliefs whenever he disagrees with a common belief there
15:25:37 <elliott> HE DEFENDED IT AGAINST A SINGLE PIECE OF CRITICISM
15:25:45 <elliott> I sentence him to death by accusations of fanboy.
15:25:53 <elliott> incomprehensibly: but seriously though, go away.
15:26:30 <incomprehensibly> elliott: http://d37nnnqwv9amwr.cloudfront.net/entries/icons/original/000/003/617/okayguy.jpg
15:27:08 -!- incomprehensibly has left.
15:27:10 <elliott> Oh! Rage faces! Excellent!
15:27:17 <Phantom_Hoover> incomprehensibly has beaten the Kola Superdeep Borehole for deepest hole!
15:27:18 <elliott> He's assured I will never wish he comes back.
15:27:29 <elliott> Phantom_Hoover: BTW, I'm pretty sure you and kallisti were wrong too, but he was more wrong.
15:28:19 <kallisti> elliott: I pretty much agree with what you said, I just did not word it correctly.
15:28:24 <Phantom_Hoover> elliott, I said that I barely knew what I was talking about, but I knew he was wrong.
15:28:57 <kallisti> elliott: also in the process of thinking about it I changed my mind a few times.
15:28:58 <elliott> kallisti: No, you were wrong, you just aren't right enough to see how your wrongness differed from my rightness.
15:29:01 <elliott> Sorry, *supreme righteousness.
15:29:11 <kallisti> elliott: sure.
15:29:15 <kallisti> whatever you'd like to think.
15:29:35 * kallisti is wrong by default.
15:30:27 <itidus21> everyone is wrong as proven by the fact that their languages are imperfect
15:30:45 <kallisti> itidus21: you are wrong.
15:31:06 <itidus21> yes but i used a paradox :-s
15:31:14 <kallisti> SO DID I
15:31:15 <kallisti> HAHA
15:31:15 <kallisti> HA
15:31:24 * itidus21 chokes
15:31:54 <elliott> kallisti: pls stop being so dumb in logs i've had my fill of dumb for today
15:31:57 <elliott> maybe i'll just quit the internet
15:32:08 <kallisti> elliott: where.
15:32:31 <kallisti> elliott: surely I'm not being dumber than everyone else.
15:32:36 <kallisti> if it's the moment I'm thinking of.
15:32:49 <elliott> `addquote <monqy> kallisti: by ordered multiset did you mean: list??????
15:32:53 <HackEgo> 785) <monqy> kallisti: by ordered multiset did you mean: list??????
15:33:02 <kallisti> sheesh, it's like you put these unrealistic standards of perfection on me.
15:33:10 <kallisti> SUCH A BURDEN. ;_;
15:33:42 <kallisti> elliott: describe to me that ways in which that is not like an ordered multiset.
15:33:43 <elliott> 06:10:52: <kallisti> @tell elliott Hey, so I don't think [a] = Maybe (a, [a]) because there's no equivalent to (Just _|_) or (a, Just _|_) or ..
15:33:43 <elliott> i'm not responding to this
15:35:00 <kallisti> elliott: you're really bad at letting me be wrong.
15:35:07 <kallisti> my wrongness is just going to overwhelm you one day.
15:35:14 <kallisti> because you failed to explain all of these small wrongnesses
15:35:57 <elliott> 06:12:45: <kallisti> newtype T = T A
15:35:57 <elliott> 06:12:57: <kallisti> T is not isomorphic to A because there is no equivalent to T _|_
15:36:02 <elliott> congratulations this is the stupidest you've ever been
15:36:08 <elliott> > Sum undefined
15:36:09 <lambdabot> Sum {getSum = *Exception: Prelude.undefined
15:36:10 <kallisti> elliott: I forgot about newtype
15:36:12 <kallisti> doing that
15:36:15 <elliott> > undefined :: Sum ()
15:36:15 <lambdabot> Sum {getSum = *Exception: Prelude.undefined
15:36:15 <kallisti> elliott: see below
15:36:49 <kallisti> elliott: so I assume you want [a] to be constructed with newtype?
15:36:57 <kallisti> newtype [a] = Maybe (a, [a])
15:37:09 <elliott> i'm not talking to you about this
15:37:45 <kallisti> well it would make sense with newtype.
15:37:53 <kallisti> that they are equivalent
15:39:05 <kallisti> newtype [a] = Oops (Maybe (a, [a]))
15:39:35 <kallisti> elliott: it's almost like you want me to be wrong about basic things
15:39:42 <kallisti> wrong and talking to you almost daily.
15:39:46 <kallisti> about not-basic things.
15:39:52 <elliott> no i just don't feel obligated to educate you, especially when you insist you're right
15:39:59 <kallisti> I /don't/
15:40:18 <kallisti> only /sometimes/
15:40:41 <elliott> no
15:40:42 <elliott> you really do
15:40:43 <elliott> always
15:41:08 <elliott> 10:58:34: <oerjan> <colloinkgravisom> revelling in their savagery and idiocy, actually this never happened, probably what actually happened was genocide or something <-- erm, roman circus. case closed.
15:41:15 <elliott> @tell oerjan THAT'S NOT FAIR YOU WEREN'T HALF-ASLEEP
15:41:16 <lambdabot> Consider it noted.
15:41:19 <elliott> oh god, incomprehensibly just /msg'd me
15:41:36 <elliott> <incomprehensibly> I apologize. You don't have to respond, or ever talk to me again, but I'm sorry for being a retard.
15:41:36 <elliott> <elliott> ok
15:41:36 <elliott> <elliott> hi
15:41:38 <elliott> this actually just happened
15:41:41 <elliott> and now he's offline???
15:41:48 <elliott> wh.....,,,,,
15:41:50 <elliott> Phantom_Hoover: wh,
15:41:54 <kallisti> elliott: I seriously think if you actually took effort to explain simple basic things I would quickly change my mind about something I'm wrong about it.
15:42:01 <elliott> w,,,,,,h
15:42:13 <kallisti> if you, however, conclude that I'm just going to insist I'm right /regardless of any information presented to me/
15:42:22 <kallisti> then... nothing is going to change.
15:43:07 <kallisti> I think you have the mistaken notion that I think I'm infallible. Which is abusrd.
15:45:50 <elliott> 11:00:53: <oerjan> <colloinkgravisom> sorry, you passed my threshold of "coherent enough to bother trying to decode" <-- never go into teaching, will you? not that i expect you to.
15:45:50 <elliott> 11:02:04: <oerjan> i mean, you are refusing to mention the one piece of information kallisti misses, while he is clearly close to grasping at it, and simultaneously you are deriding him.
15:45:50 <elliott> 11:03:32: <oerjan> clearly you are not arguing in order to help, but in order to fuel your ego by exaggerating other's faults. heck you basically admitted it above.
15:45:50 <elliott> 11:04:17: <oerjan> and not only do you exaggerate other's faults, but you aim your rhetoric in such a way as to trap them further.
15:45:53 <elliott> 11:04:33: <oerjan> it's quite annoying to watch.
15:45:55 <elliott> @tell oerjan I /used/ to just point out the one piece of information kallisti appeared to be missing, the problem is that doing so just makes him argue back about it and generally continue insisting he's right; combined with the fact that I was also incredibly tired at the time it was obviously not a good time to try and get an explanation out of me. also, that "admission" was what we refer to as a "joke". I /did/ point him at material I believed
15:45:55 <lambdabot> Consider it noted.
15:46:00 <elliott> would help him, based on misconceptions I perceived; the fact that I can't think of a way to explain without just having him learn these things from the ground-up may be a flaw, but whatever, it's not like I /offer/ to teach.
15:46:04 <elliott> lambdaboooooooooooot
15:46:06 <elliott> or er
15:46:08 <elliott> IRCCCCCCCCC
15:46:10 <elliott> @tell oerjan I /did/ point him at material I believed would help him, based on misconceptions I perceived; the fact that I can't think of a way to explain without just having him learn these things from the ground-up may be a flaw, but whatever, it's not like I /offer/ to teach.
15:46:10 <lambdabot> Consider it noted.
15:47:37 <kallisti> elliott: that is true. you do not offer. Perhaps I shouldn't be so insist.
15:47:40 <kallisti> I CRAVE KNOWLEGE.
15:47:48 <kallisti> like a knowlege vampire.
15:48:15 <elliott> i am perfectly happy trying to teach, but that's a different thing from trying to explain to somebody why they're wrong
15:50:10 <elliott> @tell oerjan anyway, I'm not sure why you've taken it upon yourself to repeatedly complain about me semi-passive-aggressively to the exclusion of basically all others except Phantom_Hoover to some degree. even in the face of people behaving much, much worse.
15:50:10 <lambdabot> Consider it noted.
15:50:33 <Phantom_Hoover> Wait what how do I come into it.
15:50:55 <elliott> 11:35:11: <oerjan> <Phantom_Hoover> This is because you are exceptionally stupid and/or gullible. <-- * oerjan briefly ponders repeating the whole rant above to Phantom_Hoover. wait, you are all like this. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
15:51:03 <elliott> oerjan complains about you once in a blue moon too.
15:51:19 <kallisti> elliott: from my perspective it makes perfect sense why oerjan would do such a thing.
15:51:27 <kallisti> but that's somewhat obvious I think.
15:52:58 <elliott> It would be understandable if he complained about all negative behaviour in the channel, but focusing almost exclusively on me even when there are people doing much worse is bizarre.
15:55:47 <kallisti> Well, I can't think of many regulars who contribute much negative behavior. I suppose I can be quite negative when I'm arguing with you, but otherwise that's the extent of what I contribute to that.
15:56:47 * elliott 's message to oerjan was not an invitation to analyse things deliberately left vague.
15:57:15 <kallisti> -shrug- I don't see any harm in doing so.
15:57:30 <elliott> You seem to expect me to respond to such analyses.
15:59:07 <kallisti> Well, yes, kind of. At least in some insightful way. I don't want any strife to come from it.
15:59:15 <kallisti> if you'd rather not discuss it, that's fine.
16:02:52 <kallisti> in any case, I will be consciously attempting to be more respectful to everyone in the future, because I think I've forgotten such simple things, and it's overall good for our little community for us to be respectful to each other.
16:03:27 <elliott> I think we should instead warmonger and dominate.
16:04:03 <kallisti> heh. I disagree, but in a very disrespectful way.
16:04:04 <Phantom_Hoover> To crush the channels of your enemies beneath your feet and hear the lamentations of their women.
16:04:07 <kallisti> er
16:04:09 <kallisti> respectful oops.
16:04:16 <kallisti> FREUDIAN SLIP HA
16:04:23 <kallisti> asshole dickmunchers.
16:05:37 <elliott> 11:57:11: <Labbekak> last [1, 2, 3] * [1, 2, 3]
16:05:38 <elliott> 11:57:16: <kallisti> Labbekak: no
16:05:38 <elliott> 11:57:23: <kallisti> type error.
16:05:40 <elliott> > last [1, 2, 3] * [1, 2, 3]
16:05:41 <lambdabot> No instance for (GHC.Num.Num [t])
16:05:41 <lambdabot> arising from a use of `e_1123123' at <...
16:05:43 <elliott> argh
16:05:47 <elliott> come on lambdabot, you have instances for everything else
16:06:42 <kallisti> yeah an instance to allow 3 * [1,2,3] should be easy.
16:12:29 <elliott> 12:10:44: <Phantom_Hoover> People who don't understand that monads etc. actually have laws you need to satisfy, not just type signatures.
16:12:37 <elliott> Phantom_Hoover: It is perfectly legitimate for pure and return to disagree.
16:12:50 <elliott> It's just not recommended.
16:13:36 <Phantom_Hoover> Ah, but people who don't understand the latter are unlikely to understand anything at all about that sort of thing.
16:14:02 <elliott> what
16:14:18 <Phantom_Hoover> the words made sense when i thought them??
16:14:24 <elliott> 12:18:53: <kallisti> I think it's literally just read <$> getLine
16:14:24 <elliott> 12:19:02: <kallisti> @src readLn
16:14:24 <elliott> 12:19:02: <lambdabot> readLn = do l <- getLine; r <- readIO l; return r
16:14:24 <elliott> 12:19:13: <kallisti> @src readIO
16:14:24 <elliott> 12:19:14: <lambdabot> Source not found. You speak an infinite deal of nothing
16:14:25 <elliott> 12:19:23: <kallisti> yeah same thing I think.
16:14:27 <elliott> kallisti: no
16:14:36 <elliott> readIO uses fail on parse failure
16:14:41 <kallisti> ah
16:15:01 <kallisti> isn't that just error though?
16:15:02 <elliott> 12:20:35: <Ngevd> I have a bizarre concept of many things
16:15:02 <elliott> 12:21:21: <Ngevd> Including safety and money
16:15:02 <elliott> hi
16:15:16 <elliott> kallisti: no...
16:15:24 <elliott> otherwise do { x:xs <- m; ... } would be uncatchable
16:15:27 <elliott> well
16:15:33 <elliott> not uncatchable but it'd go via the async exceptions and skldfhsdjkf
16:15:36 <elliott> i dno'tw ant to think about that
16:15:42 <elliott> @src IO fail
16:15:42 <lambdabot> fail s = failIO s
16:15:45 <elliott> @src failIO
16:15:45 <lambdabot> failIO s = ioError (userError s)
16:15:52 <elliott> @src ioError
16:15:53 <lambdabot> Source not found. :(
16:15:55 <elliott> it's just throw
16:15:57 <elliott> . IOError
16:15:58 <elliott> or something
16:15:59 <elliott> er
16:16:00 <elliott> throwIO
16:16:15 <kallisti> hmmm so error is ana async exception
16:16:27 <kallisti> whereas throw is not?
16:16:35 <kallisti> I honestly haven't taken much time to learn about Haskell exceptions.
16:16:41 <elliott> 12:33:18: <kallisti> neither is (->r)
16:16:42 <elliott> 12:33:28: <kallisti> they're types.
16:16:42 <elliott> 12:33:29: <kallisti> >_>
16:16:42 <elliott> 12:33:33: * kallisti nitpick
16:16:44 <elliott> kallisti: wrong again!
16:16:50 <kallisti> elliott: SEE BELOW
16:16:53 <kallisti> something amazing happens.
16:16:54 <elliott> (->) is a type constructor
16:16:57 <elliott> (-> r) is invalid syntax
16:16:59 <elliott> ((->) r) is a type constructor
16:17:03 <elliott> ((->) a b) is a type
16:17:05 <kallisti> elliott: something amazing happens later
16:17:05 <kallisti> read
16:17:28 <elliott> 12:34:59: <monqy> iirc ((->) r) is (-> r) iirc
16:17:28 <elliott> 12:34:59: <monqy> oops
16:17:31 <elliott> no monqy no..............
16:17:36 <kallisti> I'm right and at least 3 other people are wrong
16:17:39 <kallisti> ALMOST CONCURRENTLY
16:17:43 <kallisti> it's amazing.
16:18:05 <elliott> 12:35:28: <Sgeo> Of course, lambdabot does its insane functions are numbers thing
16:18:17 <elliott> Sgeo: would you feel awkward again if i pointed out that those instances are due to Conal Elliott
16:18:20 <elliott> like when hsftp
16:18:51 <kallisti> not only are functions numbers but numbers are functions.
16:19:01 <kallisti> > 3 4
16:19:02 <lambdabot> 3
16:20:20 <elliott> 12:52:15: <monqy> is friendship a monad
16:20:20 <elliott> 12:52:24: <kallisti> no you can escape friendship.
16:20:21 <elliott> wrong
16:20:25 <elliott> it's like the martix of soolidityi
16:20:46 <kallisti> elliott: did you note the part where I corrected myself and PH and monqy continued to be wrong for like whole seconds
16:20:49 <kallisti> did you note how amazing it was?
16:21:38 <Phantom_Hoover> <elliott> 12:52:24: <kallisti> no you can escape friendship.
16:21:42 <Phantom_Hoover> You can escape Identity.
16:21:50 <elliott> it was just garden-variety wrongness, as opposed to your hanging gardens of babylon wrongness >:)
16:22:11 <elliott> Phantom_Hoover: HE TRIED TO ESCAPE HIS IDENTITY... BUT CAN HE ESCAPE... FROM HIMSELF
16:22:14 <elliott> THE MONAD.RUNNER
16:22:16 <elliott> THIS SUMMER
16:22:34 <elliott> "Would YOU dare to extract?"
16:22:57 <kallisti> comonad jokes are not allowed
16:23:18 <elliott> 13:48:18: <Ngevd> The Times Person of the Year 2011... died in 2010
16:23:20 <quintopia> ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg sir elliott colloinkgravisom of hexham
16:23:27 <elliott> what, it's one of those sodijosdjiosdjiojoijiojoijsdfiosdjoisdjoisdjo multiple people
16:23:28 <elliott> ones
16:23:29 <elliott> so what
16:23:30 <elliott> also
16:23:32 <elliott> hi quintopia
16:23:33 <elliott> of
16:23:37 <elliott> wherever thefuck you live
16:23:46 <kallisti> Georgia apparently
16:23:52 <kallisti> THERE ARE TWO GEORGIANS
16:23:58 <elliott> OK I'm done logreading apart from the parts where the argument about action.
16:24:07 <elliott> kallisti: get in the same city/town and you can start a third clique
16:24:08 <kallisti> elliott: good idea
16:24:38 <kallisti> kallisti: yes all of the brilliant esoteric programmers come from Jasper, GA.
16:24:46 <kallisti> kallisti: indeed
16:25:31 <elliott> we should have like
16:25:35 <elliott> a hexham-helsinki diplomacy meetup
16:25:40 <elliott> Phantom_Hoover: you can be an honorary hexhite for the duration
16:25:48 <elliott> it would be
16:25:53 <elliott> beautiful crossnation friendship :')
16:25:54 <kallisti> elliott: also I really don't think my wrongness is all that remarkable, it just happens often because I'm talk a lot even when I don't know what I'm talking about.
16:26:01 <kallisti> elliott: this is my secret plan to ensure that someone corrects me.
16:26:04 <kallisti> it's brilliant.
16:26:28 <Phantom_Hoover> elliott, yes
16:26:48 <elliott> Phantom_Hoover: (It's OK we'd have Hexham become an honorary Scottish town so that it wouldn't make you a pansy.)
16:27:10 <elliott> OK first decision, do we hold it in Hexham or Helsinki.
16:27:12 <elliott> Hmm, wait.
16:27:19 <kallisti> (sad ending spoiler: all Europeans are pansies)
16:27:24 <elliott> Phantom_Hoover: Find out what the exact midpoint of the shortest path between Hexham and Helsinki is, please.
16:27:39 <Phantom_Hoover> what if it's in sweden
16:27:40 <kallisti> elliott: that might end up in the ocean somewhere.
16:27:45 <elliott> Phantom_Hoover: I don't think geography works that way.
16:27:51 <elliott> kallisti: We could have it on a ship.
16:27:55 <Phantom_Hoover> do we invade sweden
16:28:17 <kallisti> Phantom_Hoover: we can leave those questions for the risk game (actually I don't think Sweden is a country in risk)
16:28:44 <kallisti> oh I forgot to mention
16:28:56 <kallisti> I'm the honoronororary American ambassador.
16:29:08 <elliott> Phantom_Hoover: I think it's actually in Denmark?
16:29:19 <Phantom_Hoover> Can we invade Sweden anyway.
16:29:23 <kallisti> elliott: that would be convenient.
16:29:24 <elliott> Phantom_Hoover: If I give you the latitude and longitude of Hexham and Helsinki can you do the hard division part.
16:29:45 <kallisti> elliott: since that's like the place that's not ocean.
16:29:50 <kallisti> between those landmasses.
16:29:53 <Phantom_Hoover> I'm not sure if you can just divide.
16:30:01 <Phantom_Hoover> In fact I'm sure you can't just divide.
16:30:04 <elliott> Phantom_Hoover: Well um however you find the midpoint of a line I'M NOT A SCIENTIST!!!
16:30:16 <Phantom_Hoover> elliott, you're finding the midpoint of a great circle.
16:30:23 <kallisti> lol
16:30:49 <elliott> Phantom_Hoover: UM JUST PRETEND THE WORLD IS FLAT?
16:31:02 <Phantom_Hoover> USE DYMAXION
16:31:12 <Phantom_Hoover> (That would be a fairly good approximation, actually.)
16:31:13 <elliott> http://maps.google.com/maps?q=helsinki&hl=en&ll=66.018018,26.894531&spn=45.088568,173.144531&sll=58.378679,9.755859&sspn=13.524544,43.286133&vpsrc=6&hnear=Helsinki,+Finland&t=h&z=3
16:31:14 <elliott> http://maps.google.com/maps?q=Hexham,+UK&hl=en&sll=66.018018,26.894531&sspn=45.088568,173.144531&vpsrc=0&hnear=Hexham,+Northumberland,+United+Kingdom&t=h&z=13
16:31:26 <elliott> OK, I don't know which part is the latitude and longitude there.
16:31:29 <elliott> It could be ll or sll.
16:31:33 <elliott> But Hexham only has the sll one.
16:31:42 <elliott> Wait.
16:31:44 <elliott> Wikipedia has coordinates.
16:32:09 <elliott> Hexham: Coordinates: 54.971°N 2.101°W
16:32:10 <elliott> Helsinki: Coordinates: 60°10′15″N 024°56′15″E
16:32:14 <elliott> Phantom_Hoover: Go forth and calculamate.
16:32:36 <Phantom_Hoover> I don't know enough spherical geometry.
16:33:09 <elliott> Phantom_Hoover: TRY PLEASE!!!
16:33:10 <kallisti> (spoiler: I bet it's in the ocean)
16:33:18 <elliott> Phantom_Hoover: At least just pretend the world is flat and calculate it like that?? COME ON
16:33:22 <Phantom_Hoover> no, you must, ask oerjan
16:33:24 <kallisti> it's okay when I'm rich guys you can borrow my chisip
16:34:08 <Phantom_Hoover> elliott, you gave me one set of coördinates in decimal and the other in minutes and seconds you idiot.
16:34:18 <elliott> Phantom_Hoover: Those are the ones in the Wikipedia article.
16:34:23 <elliott> Phantom_Hoover: Can't you conver them yourself?
16:34:26 <elliott> convert
16:34:29 <kallisti> `frink
16:34:34 <Phantom_Hoover> No, I am too lazy?
16:34:36 <HackEgo> Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 \ at frink.parser.Frink.parseArguments(frink) \ at frink.parser.Frink.main(frink)
16:34:43 <elliott> Phantom_Hoover: Helsinki: 60.170833, 24.9375
16:34:44 <elliott> HAPPY NOW?
16:35:18 <Phantom_Hoover> > (54.971+60.171)/2
16:35:19 <lambdabot> 57.571
16:35:38 <Phantom_Hoover> > (2.101+24.938)/2
16:35:39 <lambdabot> 13.519499999999999
16:35:45 <kallisti> Phantom_Hoover: YOU LACK THE COMMITMENT OF A REAL SCIENTIST.
16:35:50 <Phantom_Hoover> No idea where that actually is.
16:36:14 <elliott> http://maps.google.com/maps?ll=57.570833,13.518889&spn=0.01,0.01&t=m&q=57.570833,13.518889
16:36:17 <elliott> SWEDEEEEEEEEEEEEEEEEEEEEEEN
16:36:47 <elliott> Phantom_Hoover: That's assuming the world is flat, right?
16:37:08 <Phantom_Hoover> And assuming a particular projection.
16:37:25 <elliott> Phantom_Hoover: Which one.
16:37:27 <kallisti> tranverse mercator is what people use for coordinates or something right?
16:37:28 <Phantom_Hoover> But it's close enough that I doubt the geodesic one will be outside Sweden.
16:37:29 <Phantom_Hoover> Dunno.
16:37:45 <Phantom_Hoover> (theta,phi) → (theta,phi).
16:37:46 <elliott> http://upload.wikimedia.org/wikipedia/commons/1/15/MercTranSph.png
16:37:49 <elliott> oh my god this is amazing
16:38:13 <elliott> Phantom_Hoover: http://en.wikipedia.org/wiki/Equirectangular_projection?
16:38:17 <elliott> Hmm, maybe not.
16:39:08 <Phantom_Hoover> Yes, it is.
16:39:14 <elliott> Right.
16:39:44 <elliott> Phantom_Hoover: Are you sure the world isn't round enough to put it in Denmark.
16:39:55 <elliott> http://en.wikipedia.org/wiki/Polyconic_projection Worst map projection.
16:40:02 <Phantom_Hoover> I think the distortion might be enough to move it that far, actually.
16:40:30 <Phantom_Hoover> I don't know if there are any projections which map geodesics to straight lines.
16:40:51 <Phantom_Hoover> http://en.wikipedia.org/wiki/Gnomonic_projection
16:40:52 <Phantom_Hoover> Aha.
16:40:53 <elliott> http://www.geomidpoint.com/
16:40:57 <elliott> I'll just use this?
16:41:12 <kallisti> hm, I think latitude and longitude is actually not projected to anything.
16:41:19 <kallisti> maybe?
16:41:22 <Phantom_Hoover> Hmm, wait, that won't preserve distances.
16:41:32 <elliott> Phantom_Hoover: Er.
16:41:34 <Phantom_Hoover> elliott, but we don't know the algorithm!
16:41:35 <elliott> Phantom_Hoover: Your calculations are wrong.
16:41:43 <elliott> Phantom_Hoover: One of those Hexham coordinates is in the sea.
16:41:58 <Phantom_Hoover> Ah, centre of minimum distance should be it.
16:42:00 <Phantom_Hoover> Eh?
16:42:01 <elliott> And indeed, the midpoint is in Sweden.
16:42:10 <elliott> Phantom_Hoover: Input the coordinates into http://www.geomidpoint.com/; observe matrix of aquidity.
16:42:15 * elliott gets the numbers from Google instead.
16:43:12 <Phantom_Hoover> It's °W for those coörds, not °E.
16:43:15 <Phantom_Hoover> Change the sign.
16:43:19 -!- Ngevd has joined.
16:43:19 <elliott> Oh.
16:43:31 <Ngevd> Hello!
16:43:40 <elliott> Phantom_Hoover: Now the midpoint is in the sea.
16:44:03 <Ngevd> I'm considering unifying my amateurish interests in programming and genealogy
16:44:05 <elliott> http://en.wikipedia.org/wiki/Skagerrak
16:44:07 <Phantom_Hoover> Now then, is that in Swedish waters?
16:44:08 <elliott> This thing, in particular.
16:44:19 <kallisti> Ngevd: are you going to calculate who your ancestors are?
16:44:20 <elliott> The name is Dutch.
16:44:26 <Phantom_Hoover> No, it is not.
16:44:42 <elliott> http://en.wikipedia.org/wiki/File:Oslo_from_holmenkollen.jpg ooh
16:44:53 <elliott> "Both names Skagerrak and Kattegat are commonly held to be of Dutch origin. Skagerrak means in Dutch approximately 'Skagen Channel'. The Danish town of Skagen (The Skaw) lies at the northern tip of the Danish mainland. Rak means 'straight waterway' (compare the Damrak in Amsterdam); it is cognate to 'reach'.[1][2] The ultimate source of this syllable is the Proto-Indo-European root *reg-, 'straight'. The modern Norwegian word rak means 'straight'
16:44:53 <elliott> . There is no evidence to suggest a connection to the modern Danish word rak (meaning rabble or riff-raff)."
16:44:55 <elliott> Phantom_Hoover: SORT OF DUTCH
16:45:00 <elliott> Oh, not in Swedish waters.
16:45:01 <Ngevd> kallisti, no, there's a book about that.
16:45:08 <elliott> @tell fizzie WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:08 <lambdabot> Consider it noted.
16:45:08 <Ngevd> kallisti, Well, my dad's mum's side
16:45:10 <elliott> @tell Deewiant WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:11 <lambdabot> Consider it noted.
16:45:15 <elliott> @tell Phantom_Hoover WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:15 <lambdabot> Consider it noted.
16:45:19 <elliott> @tell Ngevd WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:19 <lambdabot> Consider it noted.
16:45:21 <Deewiant> @messages
16:45:21 <lambdabot> elliott said 10s ago: WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:21 <elliott> @tell kallisti WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:45:22 <lambdabot> Consider it noted.
16:46:10 <kallisti> elliott: I'm sorry but the United States ambassador respectfully declines on the grounds that it does not benefit the interests of the American people.
16:46:11 <lambdabot> kallisti: You have 1 new message. '/msg lambdabot @messages' to read it.
16:46:20 <elliott> OK wait.
16:46:27 <elliott> kallisti: Where are you again?
16:46:31 <kallisti> the United States
16:46:32 <Ngevd> @messages
16:46:32 <lambdabot> elliott said 1m 13s ago: WE WOULD LIKE TO CORDIALLY INVITE YOU TO http://upload.wikimedia.org/wikipedia/commons/0/06/Skagerrak-2005-IV-13_ubt.jpeg
16:46:39 <Phantom_Hoover> elliott, Jasper, Georgia.
16:46:39 <lambdabot> Phantom_Hoover: You have 1 new message. '/msg lambdabot @messages' to read it.
16:46:46 <Phantom_Hoover> The one that looks like any other bit of woodland.
16:46:48 <kallisti> Phantom_Hoover: NO!! MY SECRET LOCATION
16:47:40 <elliott> kallisti: The three-way midpoint is... in the sea.
16:47:47 <elliott> Near Iceland and Greenland. Well, "near".
16:48:05 <elliott> Let's try adding more data points???
16:48:05 <kallisti> elliott: wow this is shocking
16:48:08 <kallisti> I would never considered
16:48:09 <kallisti> that the midpoint
16:48:10 <elliott> Phantom_Hoover: Where in Edinburgh do you live.
16:48:25 <kallisti> between some points in Great Britain, Finland, and the eastern united states
16:48:25 <Phantom_Hoover> Ahahaha nice one.
16:48:32 <elliott> Phantom_Hoover: I guess Edinburgh is small enough to just use the whole thing.
16:48:39 <kallisti> would be in some massive ocean between all of those things.
16:48:53 <elliott> Now it's still below Iceland.
16:49:18 <kallisti> elliott: isn't oerjan in Norway? invite him?
16:49:28 <kallisti> oh.
16:49:45 <kallisti> yes do that.
16:50:36 -!- Klisz has joined.
16:50:41 <Phantom_Hoover> http://www.smbc-comics.com/index.php?db=comics&id=2470#comic
16:50:49 <Phantom_Hoover> FRACTALS /= RECURSION YOU TWAT
16:51:10 <elliott> kallisti: hahahahaha
16:51:31 <kallisti> ha ha?
16:51:53 <kallisti> Phantom_Hoover: solution: stop reading shitty webcomics
16:52:15 <elliott> Oh no, they redesigned bbc.co.uk.
16:52:21 <elliott> kallisti: Excuse me SMBC is objectively good.
16:52:23 <Phantom_Hoover> Again??
16:52:30 <kallisti> Phantom_Hoover: also isn't the mandelbrot set defined recursively?
16:52:41 <elliott> NOOO THEY'VE MADE A TV SERIES OUT OF GREAT EXPECTATIONS???
16:52:43 <elliott> STOP IT BBC
16:52:48 <elliott> kallisti: no.
16:52:55 <Phantom_Hoover> "Fractals are recursive, therefore recursive things are fractals!"
16:52:55 <elliott> Phantom_Hoover: I... just the homepage.
16:52:58 <kallisti> well it's defined by iterating a function
16:53:02 <kallisti> which is... similar.
16:53:59 <kallisti> @src iterate
16:53:59 <lambdabot> iterate f x = x : iterate f (f x)
16:54:00 <kallisti> SEE?
16:54:06 <Phantom_Hoover> The relative self-similarity is the recursion.
16:54:35 <kallisti> > fix ("Recursion works because " ++)
16:54:36 <lambdabot> "Recursion works because Recursion works because Recursion works because Re...
16:55:17 <elliott> Calculation method:
16:55:17 <elliott> Midpoint (Center of gravity)
16:55:17 <elliott> Center of minimum distance
16:55:17 <elliott> Average latitude/longitude
16:55:21 <elliott> Phantom_Hoover: Wait, why didn't I choose the second one.
16:55:25 <elliott> I bet that will solve everything.
16:55:37 <kallisti> I bet it will
16:55:40 <Phantom_Hoover> I already did.
16:55:43 <kallisti> unless minimum distance stops being great circles.
16:55:43 <elliott> Ah, now it's in a different place in that same sea.
16:55:46 <elliott> I will add Jasper again.
16:55:49 <elliott> Jaspersprite, GA.
16:55:53 -!- Vorpal has joined.
16:55:53 <kallisti> lol
16:55:59 <elliott> AHA
16:56:00 <Ngevd> Is Vorpal included?
16:56:03 <Phantom_Hoover> Waitwaitwait, centre of minimum distance and centroid are the same for 2 points.
16:56:07 <elliott> It's...
16:56:09 <elliott> It's now in Edinburgh.
16:56:15 <Phantom_Hoover> Ngevd, no, because that would pull the point towards Sweden.
16:56:16 <Phantom_Hoover> elliott, are
16:56:18 <Phantom_Hoover> are you serious
16:56:19 <elliott> Using Hexham, Helsinki, Jasper and Edinburgh.
16:56:19 <Phantom_Hoover> best
16:56:21 <elliott> Phantom_Hoover: Yes.
16:56:36 <elliott> <option value="Lat: 54.971 Long: -2.101">Lat: 54.971 Long: -2.101</option>
16:56:38 <elliott> <option value="Lat: 60.171 Long: 24.938">Lat: 60.171 Long: 24.938</option>
16:56:39 <elliott> <option value="Lat: 34.468 Long: -84.429">Lat: 34.468 Long: -84.429</option>
16:56:41 <elliott> <option value="Lat: 55.953 Long: -3.188">Lat: 55.953 Long: -3.188</option>
16:56:44 <elliott> Phantom_Hoover: Try it yourself with those.
16:56:46 <Ngevd> elliott, double-weitht Hexham
16:56:50 <kallisti> is it okay if I don't show up even though my location is used in the definition?
16:57:01 <elliott> kallisti: No.
16:57:11 <Phantom_Hoover> Can you link me again.
16:57:35 <elliott> Phantom_Hoover: http://www.geomidpoint.com/
16:58:09 <elliott> http://www.geomidpoint.com/meet/ ;; this one filters the search to places with, e.g. land :P
16:58:40 <Phantom_Hoover> How do I use those <option>s?
16:58:52 <elliott> Phantom_Hoover: Copy in the latitude and longitude in the separate fields. :p
16:58:55 <kallisti> keyboard and mouse
16:58:55 <elliott> (In lat & long mode.)
16:59:02 <kallisti> awww elliott beat me to my awesome clever joke.
16:59:15 <kallisti> except instead of a clever joke
16:59:21 <kallisti> he provided useful information
17:01:48 <Ngevd> I double-weighted Hexham and Triple-wieghted Helsinki, and got... somewhere off the coast of Berwick
17:02:57 <elliott> BEERWIIIIIIICK
17:03:01 <Ngevd> Added ais523 and got... Hexham
17:03:35 <elliott> YESSSSSSSSSS
17:03:40 <elliott> Phantom_Hoover: WE MEET IN HEXHAM
17:04:02 <Ngevd> By Average Lat/Long we get somewhere in the Yorkshire Dales
17:04:08 <Phantom_Hoover> You realise that centre of minimum distance will result in one of the points a large fraction of the time.
17:04:52 <elliott> Phantom_Hoover: Oh, *that's* what it means.
17:04:58 <elliott> I thought it meant the midpoint between the shortest line between the two.
17:05:48 <Phantom_Hoover> Yeah, I can confirm that if one point is within the convex hull of all the others it'll be the centre.
17:05:50 <Ngevd> Added Gregor and got somewhere about 5 miles North of Hexham
17:06:05 <Ngevd> Ooh, we can meet in the Barrasford Arms. They do nice food
17:06:18 <Phantom_Hoover> Still using centre or switched to centroid?
17:07:05 <Phantom_Hoover> Wait, the degeneracy only occurs for 4 points.
17:07:26 <Phantom_Hoover> Wait, scratch that.
17:09:03 <Ngevd> If we include itidus21 we could get some interesting results
17:10:07 <Ngevd> For a serious UK meet-up, I would suggest Newcastle
17:10:32 <elliott> I hate Newcastle?
17:10:50 <Ngevd> Then you don't turn up and don't see me, thus solving three problems at once
17:10:51 <Phantom_Hoover> I hate Newcastle by association with the other Newcastle.
17:11:12 <Ngevd> @ping
17:11:12 <lambdabot> pong
17:11:20 <Ngevd> /Which/ other Newcastle?
17:12:09 <Phantom_Hoover> The one in Ireland.
17:12:18 <Ngevd> Oh, /that/ Newcastle.
17:12:37 <Ngevd> I was thinking of the Newcastle where 22 years ago AN EARTHQUAKE STRUCK KILLING 13
17:24:43 <elliott> 120 over 6.5 :(
17:27:36 -!- Labbekak has joined.
17:28:32 <Ngevd> I've met someone who's met someone who was in a movie with someone who was in a movie with Kevin Bacon
17:29:00 <Ngevd> I'm also two handshakes away from Tony Blair
17:30:35 <fizzie> And two cards short of a full deck.
17:30:35 <lambdabot> fizzie: You have 1 new message. '/msg lambdabot @messages' to read it.
17:30:44 -!- Labbekak_ has joined.
17:31:05 <Labbekak_> > "maybe" "no" "yes"
17:31:06 <lambdabot> Couldn't match expected type `t1 -> t2 -> t'
17:31:06 <lambdabot> against inferred type ...
17:31:29 <Ngevd> What were you trying to achieve there?
17:31:34 <Labbekak_> :p
17:31:42 <Labbekak_> in J thats a list
17:31:53 <Ngevd> Haskell isn't J
17:31:59 <Labbekak_> What?
17:32:01 -!- Labbekak has quit (Ping timeout: 258 seconds).
17:32:03 <Ngevd> > ["maybe", "no", "yes"]
17:32:04 <lambdabot> ["maybe","no","yes"]
17:32:16 <Ngevd> Now /that's/ a list
17:32:18 <Labbekak_> I was thinking Haskell would return the last string
17:32:47 <Labbekak_> > [1, 2, 3] + [4, 5, 6]
17:32:48 <Ngevd> Nah, Haskell thinks you're trying to use a string as a function
17:32:48 <lambdabot> No instance for (GHC.Num.Num [t])
17:32:48 <lambdabot> arising from a use of `e_1123456' at <...
17:33:01 <Labbekak_> how to add two lists together?
17:33:48 <elliott> Labbekak_: zipWith (+)
17:34:18 * elliott likes J too
17:34:18 <kallisti> Labbekak_: if you write a language expecting it to work like another language. Well, I can't help you. :(
17:34:34 -!- sebbu2 has changed nick to sebbu.
17:34:44 <Ngevd> > (+) <$> [1,2,3] <> [4,5,6]
17:34:44 <Labbekak_> Didn't really expect it work :
17:34:45 <lambdabot> Couldn't match expected type `Text.PrettyPrint.HughesPJ.Doc'
17:34:45 <lambdabot> agains...
17:34:50 <Labbekak_> just trying out
17:34:56 <Labbekak_> > zipWith (+) [1,2,3] [3,2,1]
17:34:57 <Ngevd> > (+) <$> [1,2,3] <*> [4,5,6]
17:34:57 <lambdabot> [4,4,4]
17:34:57 <lambdabot> [5,6,7,6,7,8,7,8,9]
17:35:05 <Vorpal> hi
17:35:09 <Labbekak_> hey
17:35:10 <elliott> Ngevd: you want ZipList
17:35:24 <elliott> > runZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [4,5,6]
17:35:25 <lambdabot> Not in scope: `runZipList'
17:35:26 <Ngevd> elliott, that would depend on what I am wanting to achieve
17:35:30 <elliott> @hoogle ZipList a -> a
17:35:31 <lambdabot> Control.Applicative getZipList :: ZipList a -> [a]
17:35:31 <lambdabot> Prelude id :: a -> a
17:35:31 <lambdabot> Data.Function id :: a -> a
17:35:35 <elliott> > getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [4,5,6]
17:35:36 <lambdabot> [5,7,9]
17:36:59 <Ngevd> > [5,7,9] == [5,6,7,6,7,8,7,8,9]
17:37:00 <lambdabot> False
17:37:04 <Ngevd> SEE!?
17:37:40 <fizzie> elliott: I'm not exactly understanding your gracious invitation.
17:38:08 <fizzie> Except now that I look at the context it seems midpointy or somesuch.
17:38:33 <Labbekak_> map (product 1..) [1..5]
17:38:44 <Labbekak_> > map (product 1..) [1..5]
17:38:44 <lambdabot> <no location info>: parse error on input `..'
17:38:54 <Labbekak_> > map (product . (1..)) [1..5]
17:38:55 <lambdabot> <no location info>: parse error on input `..'
17:38:59 <elliott> fizzie: So are you coming??? It's the Hexham-Helsinki Friendship Meetup.
17:39:24 <fizzie> elliott: It looks kinda desolate.
17:40:05 <fizzie> The Hexinki-Helsham Meetup.
17:40:07 <Labbekak_> > fromTo 1 5
17:40:07 <lambdabot> Not in scope: `fromTo'
17:40:18 <elliott> fizzie: There'll be a ship.
17:40:21 <elliott> Then we'll go to Oslo.
17:40:23 <elliott> Labbekak_: enumFromTo
17:40:24 <fizzie> > [1..5]
17:40:24 <lambdabot> [1,2,3,4,5]
17:40:28 <elliott> or that
17:40:31 <Labbekak_> > enumFromTo 1 5
17:40:31 <lambdabot> [1,2,3,4,5]
17:40:48 <Labbekak_> > map (product . (enumFromTo 1)) [1..5]
17:40:49 <lambdabot> [1,2,6,24,120]
17:41:05 <Labbekak_> currying ..?
17:41:08 <Labbekak_> > (1..)
17:41:09 <lambdabot> <no location info>: parse error on input `..'
17:41:19 <Ngevd> Haskell is named after Mr. Curry himself
17:41:35 <Labbekak_> > (1..) 5
17:41:36 <lambdabot> <no location info>: parse error on input `..'
17:41:47 <fizzie> @pl \x -> [1..x]
17:41:48 <lambdabot> enumFromTo 1
17:41:50 <fizzie> Aw.
17:41:56 <elliott> > [1..] -- :p
17:41:57 <lambdabot> [1,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...
17:42:11 <Ngevd> > take 5 ([1..])
17:42:11 <Labbekak_> whaa
17:42:12 <lambdabot> [1,2,3,4,5]
17:42:16 <Labbekak_> careful man
17:42:27 <Ngevd> Labbekak_, infinite lists a all over the place in Haskell
17:42:36 -!- copumpkin has joined.
17:42:38 <Labbekak_> I know just kidding
17:42:52 <Labbekak_> ive been reading http://learnyouahaskell.com abit
17:44:36 <Ngevd> I will go now
17:44:42 <Ngevd> My work here is done
17:44:49 -!- Ngevd has quit (Quit: fungot, can you here me?).
17:44:49 <kallisti> Ngevd: okay I am saying good bye.
17:44:56 <Labbekak_> too late
17:45:02 <kallisti> :(
17:45:18 <Labbekak_> 2 l8
17:45:23 <Labbekak_> im a wizard
17:46:13 <kallisti> Labbekak_: I figure not is a good time to compare you with my totally awesome code http://sprunge.us/hKaK
17:46:20 <kallisti> s/not/now/ HAHAHA IRONY
17:46:41 <kallisti> s/compare/some verb that involves forcing you to look at it/
17:46:57 <kallisti> wtf I need to actually pay attention when I mash buttons on this big field of buttons.
17:47:02 <elliott> I don't.
17:47:10 <Labbekak_> Well it looks cool :p
17:47:51 <kallisti> Labbekak_: the first one takes an alphabet and generates every palindrome in that alphabet.
17:48:00 <kallisti> the second one lists all of the possible brainfuck strings.
17:48:35 <kallisti> though I'm thinking about changing it back to the old version because that's a really verbose function..
17:49:08 <Labbekak_> awesome
17:49:22 <Labbekak_> what does >>= doe
17:49:25 <Labbekak_> *do
17:49:33 <kallisti> elliott: ^^^
17:50:13 <kallisti> I'm going to go get something to eat instead of witnesses the can of worms I just opened.
17:51:42 <kallisti> Labbekak_: do you know about typeclasses yet?
17:52:28 <Labbekak_> nope
17:52:43 <kallisti> if you go learn about those I (or someone else) can better explain >>=
17:52:47 <Labbekak_> ill read
17:53:00 <fizzie> @ty (>>=)
17:53:01 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
17:53:03 <fizzie> The bot already explained it.
17:54:28 <kallisti> Labbekak_: what >>= does depends on the types it's being used with. I'll say that the way it's being used in my program that I linked is equivalent to:
17:54:33 <kallisti> (>>=) = concat . map
17:54:37 <kallisti> on lists
17:54:57 <kallisti> er
17:55:09 <kallisti> (>>=) ls f = concat (map f ls)
17:55:11 <kallisti> rather
17:59:43 <kallisti> (and, in fact, if you replace concat with join, and map with fmap, this is true for every monad)
17:59:50 <kallisti> (but I digress)
18:02:02 <kallisti> > fmap return [1,2,3,4]
18:02:03 <lambdabot> No instance for (GHC.Show.Show (m a))
18:02:03 <lambdabot> arising from a use of `M3415154960...
18:02:16 <kallisti> > fmap return [1,2,3,4] :: [[Int]]
18:02:16 <lambdabot> [[1],[2],[3],[4]]
18:02:27 <kallisti> > join $ fmap return [1,2,3,4] :: [[Int]]
18:02:28 <lambdabot> No instance for (GHC.Num.Num [GHC.Types.Int])
18:02:29 <lambdabot> arising from the literal `...
18:02:36 <kallisti> > join $ fmap return [1,2,3,4] :: [Int]
18:02:37 <lambdabot> [1,2,3,4]
18:06:05 <elliott> "Monads are a way to guarantee the order of operations in a purely functional, lazy language."
18:06:06 <elliott> sdl;opwktp4otb5i -0t4 494ti 4-ti 4-t
18:06:07 <elliott> 4=-ot
18:06:07 <elliott> 4ot
18:06:08 <elliott> ot =-o34=t- o34][etl ][
18:06:08 <elliott> e4ty
18:06:08 <elliott> e4lt]
18:06:10 <elliott> ldfgl esp[kfghp[ s
18:06:12 <elliott> ghp[kp[
18:06:14 <elliott> dkgh okhdjh
18:06:16 <elliott> hopgh
18:06:18 <elliott> dfp[hk dph p]ophk opgk[ fghkopfghkopofgh
18:06:20 <elliott> PUNCH!!!
18:07:48 <kallisti> elliott: lol
18:07:54 <kallisti> elliott: is this /published/ somewhere?
18:08:01 <kallisti> can we hunt this person down and kill them?
18:08:48 <kallisti> elliott: challenge: make the above a valid program string for an esolang
18:08:54 <kallisti> (including the PUNCH!!!)
18:08:55 <elliott> kallisti: If we killed people who are wrong, you'd be so dead.
18:09:35 <kallisti> no, I don't publish my information to people in the guise of facts.
18:09:49 <kallisti> for a wide audience
18:09:55 <kallisti> to read my expert knowlege.
18:10:39 <kallisti> (assuming that's what that is, you never answered my question)
18:11:02 <elliott> http://labs.scrive.com/2011/12/why-monads/
18:11:10 <kallisti> no don't link me...
18:11:35 <kallisti> actually I think I read this when I was learning about monads.
18:11:40 <kallisti> and I thought it was true for a while.
18:11:46 <kallisti> DO YOU SEE WHY WE MUST KILL?
18:11:48 <elliott> um
18:11:49 <elliott> 2011/12
18:11:55 <elliott> so you learned monads yesterday
18:11:58 <kallisti> lol
18:12:00 <kallisti> oh, um...
18:12:01 <kallisti> maybe not
18:12:01 <kallisti> but
18:12:03 <kallisti> this looks familiar
18:12:09 <kallisti> I remember reading something like this before.
18:12:13 <elliott> "I can't remember where I read it and the name of the company, but they designed in a "terrorizer" into their redundant setup. The terrorizer randomly killed processes. Sounds like a good way to know if the system you develop isn't redundant only in the buzz-word checklist." :D
18:14:47 <kallisti> "Finally, a monad must possess a join function that takes a ridiculous burrito of burritos and turns them into a regular burrito. Here the obvious join function is to remove the outer tortilla, then unwrap the inner burritos and transfer their fillings into the outer tortilla, and throw away the inner wrappings."
18:15:59 <kallisti> "
18:16:03 <kallisti> This is true because tortillas are indistinguishable.
18:16:05 <kallisti> I know you are going to point out that some tortillas have the face of Jesus. But those have been toasted, and so are unsuitable for burrito-making, and do not concern us here.
18:16:09 <kallisti> "
18:19:35 <elliott> @src foldl1'
18:19:36 <lambdabot> Source not found. The more you drive -- the dumber you get.
18:19:40 <elliott> @src foldl'
18:19:40 <lambdabot> foldl' f a [] = a
18:19:40 <lambdabot> foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
18:19:42 <elliott> oh, duh
18:28:32 -!- kallisti has quit (Ping timeout: 240 seconds).
18:30:37 -!- kallisti has joined.
18:30:37 -!- kallisti has quit (Changing host).
18:30:37 -!- kallisti has joined.
18:32:45 <Phantom_Hoover> http://www.cracked.com/article_19606_8-apps-designed-specifically-modern-douchebags.html
18:33:01 * Phantom_Hoover notes that the author doesn't seem to understand that creepy is open-source.
18:35:27 -!- derdon has quit (Remote host closed the connection).
18:39:12 -!- variable has joined.
18:43:09 <kallisti> "The beauty of this app is that it allows one to automate text messages and emails to a girlfriend at programmed intervals with an adjustable "relationship intensity" setting."
18:43:12 <kallisti> looooool
18:46:28 -!- Labbekak_ has quit (Quit: Page closed).
18:48:05 <kallisti> elliott: "The result of the first gets passed to the second, whose result gets passed to the third. In other words, they happen in order."
18:48:08 <kallisti> wow this guy
18:48:12 <kallisti> doesn't understand what lazy evaluation means.
18:49:09 <Vorpal> elliott, no longer on the tablet?
18:49:25 <elliott> kallisti: By the way, I'm 115.935484 times better than you.
18:49:26 <elliott> Vorpal: indeed
18:49:49 <Vorpal> elliott, why?
18:49:56 <Vorpal> the results were funny
18:50:16 <elliott> Vorpal: Well, I put it back in its box and slept.
18:50:22 <Vorpal> I see
18:50:25 <kallisti> elliott: http://labs.scrive.com/2011/12/why-monads/
18:50:26 <kallisti> can you like
18:50:27 <kallisti> maybe
18:50:29 <kallisti> write a comment
18:50:30 <elliott> Also I can't write things like http://stackoverflow.com/questions/8659345/why-is-this-simple-haskell-algorithm-so-slow/8659368#8659368 on a tablet.
18:50:31 <kallisti> explaining
18:50:35 <kallisti> how he is like
18:50:36 <kallisti> mistaken
18:50:46 <elliott> kallisti: Maybe I, like, already did, like, maybe.
18:50:52 <elliott> Like, on reddit, maybe.
18:50:52 <Phantom_Hoover> elliott, you were on a tablet?
18:51:03 <elliott> http://www.reddit.com/r/haskell/comments/ntox2/why_monads_what_i_learned_about_monads_working_in/c3bvde7
18:51:06 <elliott> Maybe, like, upvote me, like.
18:51:10 <elliott> Phantom_Hoover: Yes.
18:51:14 <elliott> Phantom_Hoover: It was DRUGS.
18:51:21 <kallisti> elliott: NO DO IT ON HIS WEBSITE
18:51:27 <elliott> (I like how Vorpal's statements make perfect sense with that interpretation of tablet.)
18:52:01 <Vorpal> elliott, which interpretation?
18:52:13 <kallisti> elliott: also he seems to suggest that the Maybe monad has an inherent ordering.
18:52:16 * Vorpal decides it was physically standing on a clay tablet
18:52:50 <elliott> Vorpal: The DRUGS one.
18:53:06 <elliott> kallisti: Well, it does force evaluation of each "statement" before the next one to WHNF (which is just Nothing vs. Just).
18:53:14 <elliott> Of course the actual values are not forced.
18:53:21 <kallisti> right.
18:54:19 <Vorpal> elliott, oh. Right
18:54:25 <Vorpal> elliott, didn't know that meaning
18:54:27 <kallisti> >> is commutative, which doesn't explain sequencing very well. Just 5 >> Nothing is not going to evaluate Just 5 at all.
18:54:35 <kallisti> *commutative for Maybe
18:56:25 <elliott> kallisti: um yes it is
18:56:33 <elliott> > undefined >> Nothing
18:56:34 <lambdabot> *Exception: Prelude.undefined
18:57:03 <elliott> > Nothing >> Just 5
18:57:04 <lambdabot> Nothing
18:58:22 <kallisti> oh hi
18:58:47 <kallisti> I misread Haskellwiki yet again!
18:59:22 -!- Ngevd has joined.
18:59:28 <Ngevd> Hello!
19:01:10 <elliott> hi
19:01:54 -!- oerjan has joined.
19:03:21 <kallisti> oerjan: speak
19:04:27 <elliott> hi welcome to america kallisti
19:04:58 <elliott> kallisti don't want no welcomes :(
19:05:21 * oerjan whistles guiltily
19:05:34 -!- ais523 has joined.
19:06:03 -!- cheater has quit (Read error: Connection reset by peer).
19:08:30 <elliott> Guilty of crimes.
19:11:33 * oerjan must have some food first
19:11:49 <Ngevd> Criminal food
19:12:06 <elliott> @tell doop test
19:12:07 <lambdabot> Consider it noted.
19:12:08 -!- elliott has changed nick to doop.
19:12:10 * doop test
19:12:11 <lambdabot> doop: You have 1 new message. '/msg lambdabot @messages' to read it.
19:12:17 <doop> hmm, weird
19:12:21 <doop> oh, right, ctcps work like that
19:12:23 <doop> @clear-messages
19:12:24 <lambdabot> Messages cleared.
19:12:28 -!- doop has changed nick to colloinkgravisom.
19:21:28 <Ngevd> Sbeezg is one of the stubbiest articles I have ever seen
19:22:24 <oerjan> so, as a manner of some attempt at self-insight as to why i behave this way toward elliott: i have a father who is exceedingly good at twisting any argument in such a way as to make me (and others) feel like they are being fools and not just wrong but guilty for disagreeing with him. therefore i tend to react violently when i perceive similar behavior in others. maybe excessively so.
19:22:35 <Phantom_Hoover> Cat's Eye languages don't need much of an article, since they're well-specified on the website.
19:23:02 -!- cheater has joined.
19:23:51 <Phantom_Hoover> oerjan, can I just point out that liking Matt Smith is something which you should feel wrong and guilty for.
19:24:13 * oerjan swats Phantom_Hoover -----###
19:24:18 <oerjan> yes, you can.
19:24:53 <oerjan> it might hurt more if i had any idea who matt smith is, apart from you mentioning he played the doctor.
19:25:48 <Phantom_Hoover> Well *you* shouldn't feel wrong and guilty for it; Ngevd should.
19:26:27 <oerjan> O KAY
19:27:41 <ais523> oh, hmm, I was thinking about Burro and got a little sidetracked
19:27:42 <lambdabot> ais523: You have 1 new message. '/msg lambdabot @messages' to read it.
19:27:57 <ais523> the resulting language does look superficially like a BF deriv, though, so I'm not sure if I should own up to creating it
19:28:36 <Ngevd> msg me the spec?
19:28:55 <oerjan> dammit closed the wrong window X_X
19:29:29 <ais523> Ngevd: haven't written it yet
19:30:05 <ais523> that's two esolangs I've created in a week, but I haven't written the spec for either (the other one's a declarative OISC, which I proved computable but it's not completely obvious, and I'm now trying to prove TC)
19:30:26 -!- colloinkgravisom has quit (Remote host closed the connection).
19:30:30 <Ngevd> I have one finished, unpublished esolang
19:30:35 -!- elliott has joined.
19:30:57 <Ngevd> It was my first esolang, before I heard of the wiki
19:32:05 <ais523> anyway, and relatedly, anyone here know category theory better than I do? (I don't know it very well)
19:34:23 <oerjan> ais523: well if you know it _very_ badly... :P
19:40:04 <elliott> ais523: If you know it even worse than oerjan and don't want to talk to oerjan, I'M YOUR MAN.
19:40:10 <elliott> Cue Phantom_Hoover.
19:40:34 -!- calamari has joined.
19:42:02 <ais523> oerjan: well, it all started when I was trying to define a tensor for Burro
19:42:10 <ais523> but what I came up with wasn't associative
19:42:15 <oerjan> oh hm tensor
19:42:30 <ais523> I'm not sure if that's a problem, because I can't exactly remember what a tensor is
19:42:42 <elliott> Phantom_Hoover said tensor once, ask him.
19:42:45 <ais523> then I tried to make a field, but I decided that an associative * and + would destroy the categorical structure
19:43:43 <oerjan> i know a definition of tensor product of modules as a universal object, i guess that's categorical
19:44:10 <ais523> tensors are a bit like tuples, IIRC
19:44:14 <ais523> so are cartesian products
19:44:21 <elliott> ais523: cpressey is sceptical there is even a ring language
19:44:25 <ais523> and I can never remember what the distinction is (there often aren't)
19:44:27 <ais523> elliott: what's a ring, again?
19:44:27 <elliott> see http://catseye.tc/cpressey/louie.html#Potro
19:44:38 <elliott> ais523: ...it defines ring on the page :P
19:44:47 <elliott> catseye.tc: ais523 ready
19:44:52 <elliott> ais523: Anyway, fields are rings, so if rings are hard...
19:45:12 <Phantom_Hoover> <ais523> I'm not sure if that's a problem, because I can't exactly remember what a tensor is
19:45:22 <Phantom_Hoover> They're like vectors except more dimensions?
19:45:54 <ais523> elliott: hmm, I was going for completely different + and *
19:46:08 <Vorpal> Phantom_Hoover, how does that work? You can have any number of dimensions for a vector
19:46:22 <Phantom_Hoover> As in, it can be a matrix.
19:46:30 <ais523> to be precise, f+g corresponds to function | Left a -> f a | Right b -> g b
19:46:30 <Vorpal> Phantom_Hoover, ah
19:46:40 <ais523> and f*g responds to function | (a,b) -> (f a, g b)
19:46:43 <ais523> that distributes nicely
19:46:50 <oerjan> i vaguely recall the word is "rank"
19:46:57 <ais523> if you allow various equivalences between types
19:46:59 <Vorpal> Phantom_Hoover, so what do you use tensors for?
19:47:20 <elliott> ais523: that's either and (***)
19:47:37 <elliott> the obvious catamorphisms for Either and (,) I believe
19:47:40 <ais523> elliott: I'm not at all surprised that they have names
19:47:53 <elliott> ais523: what you have is completely unlike burro, anyway
19:47:57 <elliott> if you're going down that route
19:48:00 <elliott> and less interesting :p
19:48:10 <ais523> elliott: aha, it's not /that/ completely unlike burro
19:48:14 <Phantom_Hoover> Vorpal, stress?
19:48:17 <fizzie> Vorpal: You use them to do physics, from what I've seen.
19:48:19 <ais523> because the next step is to identify all the data types
19:48:29 <Phantom_Hoover> Stress... energy?
19:49:30 <Vorpal> Phantom_Hoover, I see
19:49:35 <fizzie> Phantom_Hoover: Stress levels of physics students.
19:49:41 <elliott> Strenegy.
19:49:47 <elliott> It's like synergy, but stringy.
19:50:26 <Ngevd> styngergy
19:51:02 <oerjan> :t (|||)
19:51:02 <lambdabot> forall (a :: * -> * -> *) b d c. (ArrowChoice a) => a b d -> a c d -> a (Either b c) d
19:51:27 <elliott> Ah, it's (|||) and (***).
19:51:38 <elliott> ais523: If you were using Haskell, you could represent your language as an arrow. :p
19:51:48 <elliott> Except you probably don't want arr. :(
19:51:59 <ais523> elliott: actually, that's the point, I think
19:52:08 <ais523> functions have to be arrows
19:53:02 <oerjan> ais523: not category arrows, haskell Arrows
19:53:29 <ais523> oerjan: oh, I see
19:53:35 <ais523> the same name is used for multiple things, as usual?
19:54:37 <ais523> hmm, what's the name for the type that has no values?
19:54:41 <ais523> (as opposed to (), which has one value)
19:55:04 <oerjan> yes, the haskell naming is a bit unfortunate, especially as category arrows show up in haskell as well
19:55:06 <Ngevd> ais523, impossible?
19:55:07 <ais523> "void" also has one value
19:55:17 <elliott> ais523: Void
19:55:21 <ais523> I suppose in an imperative language, "noreturn" would be a good name because that's what it'd mean
19:55:25 <ais523> elliott: nah, void is the same type as ()
19:55:26 <elliott> void doesn't have one value if you mean C
19:55:28 <elliott> it's not really a type
19:55:32 <elliott> ais523: I said Void
19:55:37 <ais523> ah, aha
19:55:43 <elliott> http://hackage.haskell.org/packages/archive/void/0.5.5/doc/html/Data-Void.html, it's the standard name
19:55:55 <ais523> OK, Haskell is now officially not allowed to name anything
19:55:58 <oerjan> ais523: haskell does not permit a type not to have the bottom value, which is all Void has
19:56:06 <elliott> ais523: other common names are ⊥, 0, ∅
19:56:29 <ais523> elliott: yep, those all seem plausible
19:57:05 <ais523> although calling the type ⊥ is calling a type and a value by the same name
19:57:22 <elliott> ais523: well in Haskell ⊥ is the only inhabitant of Void, so...
19:57:32 <elliott> but who cares? () is calling a type and a value by the same name too
19:57:37 <ais523> yes, indeed
19:57:40 <elliott> they're both ⊥, just in different contexts
20:01:30 <ais523> anyway, that's your 0; and 1 is the type with 1 value (empty tuple)
20:03:22 <elliott> ais523: what's my 0
20:03:38 <ais523> elliott: I mean, 0 and 1 for + and *, in terms of tyeps
20:03:39 <oerjan> initial and terminal objects, except that's for Set not haskell
20:03:40 <ais523> *types
20:03:42 <ais523> with the usual definition
20:04:05 <ais523> oerjan: indeed
20:04:21 <ais523> hmm, now I'm trying to remember which is which
20:04:38 <elliott> ais523: I don't see what you're talking about types for
20:04:46 <elliott> since your + and * were about functions
20:04:48 <elliott> not types
20:04:55 <oerjan> the empty set is initial and one-point sets are terminal
20:05:03 <elliott> anyway, you could have just told me that's what you were going for :P + is Either, * is (,), 0 is Void, 1 is ()
20:05:07 <elliott> the obvious laws apply
20:05:15 <elliott> same way you calculate zippers with derivatives
20:05:22 <ais523> elliott: well, the point is, that there's only one type
20:05:27 <ais523> hmm, I am at least vaguely confused
20:05:54 <ais523> the idea's to effectively have types whilst not having them
20:05:56 <ais523> like Ursala
20:06:07 <ais523> all types can be reinterpreted as each otehr
20:06:08 <oerjan> for haskell the requirement of only one function between types breaks down completely; you always have at least undefined and const undefined as separate elements due to seq
20:06:09 <ais523> *other
20:06:18 <ais523> oerjan: where does that requirement come from?
20:06:24 <ais523> I thought that wasn't generally true, or even useful
20:06:42 <oerjan> ais523: it's the definition of initial/terminal objects: only one morphism out/in
20:06:48 <oerjan> for any other object
20:06:53 <ais523> oerjan: ah, I see
20:07:15 <ais523> I thought the definition was that there were no morphisms in/out
20:12:48 <Phantom_Hoover> Consider the identity.
20:14:00 <ais523> <spambot> Court Jobs in Iraq
20:14:05 <ais523> anyone want one of those?
20:14:14 <elliott> wow, WAI is going to depend on a package I helped develop :D
20:14:15 * elliott FAMOUSE
20:14:24 <Phantom_Hoover> <oerjan> for haskell the requirement of only one function between types breaks down completely; you always have at least undefined and const undefined as separate elements due to seq
20:14:35 <elliott> oerjan: Phantom_Hoover: EXCUSEUE ME REVEL IN MY FAME???
20:15:01 <Phantom_Hoover> I thought _|_ made any category theory with Haskell ugly so you just pretend it doesn't exist and continue living happily.
20:15:39 <Phantom_Hoover> Also, what's WAI?
20:16:01 <Phantom_Hoover> ALSO: what is the package?
20:16:36 <elliott> http://hackage.haskell.org/package/wai
20:16:37 <elliott> http://hackage.haskell.org/package/vault
20:16:38 <elliott> Respectively.
20:17:21 -!- NihilistDandy has quit (Quit: Linkinus - http://linkinus.com).
20:17:32 <Phantom_Hoover> I love how the github page for WAI doesn't make it at all obvious what it actually does.
20:18:48 <elliott> It's a GitHub page, they don't have to.
20:19:32 <Vorpal> elliott, are you saying it isn't useful to tell what it is on the github page?
20:20:00 <elliott> Vorpal: No.
20:20:08 <Vorpal> good
20:25:03 <Phantom_Hoover> http://www.reddit.com/r/GEB/
20:25:15 <Phantom_Hoover> The very fact that this is a thing annoys me.
20:25:29 <Ngevd> Everything is a thing
20:25:33 <Ngevd> By definition
20:28:16 -!- MSleep has changed nick to MDude.
20:28:29 <elliott> oerjan: help MonadFix instances are so hard to write :(
20:28:38 <MDude> Godel Escher Bach in general, or discussion of it on Reddit?
20:29:39 -!- oerjan has quit (Remote host closed the connection).
20:35:20 -!- zzo38 has joined.
20:37:17 <elliott> :t takeMVar
20:37:17 <lambdabot> Not in scope: `takeMVar'
20:38:13 <Phantom_Hoover> MDude, the subreddit.
20:38:35 <Phantom_Hoover> Because it's inevitably going to be run by people who think it's so ~deep~.
20:44:22 -!- Ngevd has quit (Quit: Goodbye).
20:46:15 -!- Ngevd has joined.
21:10:23 -!- DCliche has joined.
21:14:26 -!- Klisz has quit (Ping timeout: 268 seconds).
21:16:31 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
21:16:47 <elliott> :t fromIntegral
21:16:48 <lambdabot> forall a b. (Integral a, Num b) => a -> b
21:23:51 -!- Phantom_Hoover has joined.
21:25:56 -!- augur_ has joined.
21:26:10 -!- augur has quit (Read error: Connection reset by peer).
21:30:05 -!- Ngevd has quit (Quit: EARLY SLEEP).
22:10:11 -!- mathMajor has joined.
22:17:03 -!- GreaseMonkey has joined.
22:20:25 -!- mathMajor has quit (Ping timeout: 268 seconds).
22:27:20 <elliott> is mathmajor a math major
22:30:38 <zzo38> I don't know
22:30:59 <elliott> ok
22:34:32 -!- azaq23 has joined.
22:34:41 -!- azaq23 has quit (Max SendQ exceeded).
22:36:20 -!- azaq23 has joined.
22:41:01 <zzo38> Is there any way to use Haskell to create Glulx executables?
22:41:47 <Sgeo> What is Glulx?
22:42:49 <zzo38> It is a virtual machine
22:43:08 <zzo38> Another machine I want to use with Haskell is MMIX
22:45:02 -!- Phantom_Hoover has quit (Quit: Leaving).
22:50:17 <zzo38> Other things I would like to have is C to Glulx, LLVM to Glulx, BASIC to Glulx, and LLVM to MMIX.
22:50:30 <zzo38> (C to MMIX is already implemented by GNU C compiler)
22:51:44 <zzo38> I think the best way to represent type-level natural numbers in Haskell is using uninhabited type (called Zero) for zero, and Maybe for successor. What do you think of this?
22:53:20 <Sgeo> > join $ Just (Just (Just (Just Nothing)))
22:53:21 <lambdabot> Just (Just (Just Nothing))
22:54:06 <Sgeo> join x = if x >= 1 then x-1 else x?
22:54:44 <Sgeo> infinity = fix Join
22:54:51 <zzo38> Yes that would do it, but it isn't really what I meant.
22:54:54 <Sgeo> (Pretty sure I saw something like that somewhere)
22:55:23 <zzo38> For *values*, Nothing would be zero, Just Nothing is one, and so on.
22:55:35 -!- Phantom_Hoover has joined.
22:55:38 <Sgeo> :t fix Just
22:55:39 <lambdabot> Occurs check: cannot construct the infinite type: a = Maybe a
22:55:39 <lambdabot> Expected type: a
22:55:39 <lambdabot> Inferred type: Maybe a
22:55:42 <zzo38> See?
22:55:43 <Sgeo> Darn
22:56:22 <zzo38> If you represent type-level natural numbers this way, there is a very easy implementation of an array with a fixed number of elements. It is simply (->)
22:57:15 <zzo38> And it is even a monad!
22:57:57 <elliott> <Sgeo> join x = if x >= 1 then x-1 else x?
22:58:01 <elliott> i doubt it
22:58:24 <Sgeo> > join Nothing
22:58:25 <lambdabot> Nothing
22:58:31 <Sgeo> > join (Just Nothing)
22:58:32 <lambdabot> Nothing
22:58:36 <Sgeo> > join (Just (Just Nothing))
22:58:37 <lambdabot> Just Nothing
22:58:49 <zzo38> Like I said, Nothing would represent zero in values.
22:58:54 <elliott> oh, right
22:58:59 <zzo38> So, the type-level natural number 5 has values 0 to 4.
23:00:12 <Sgeo> zzo38, you can't write infinity in your system. Although I guess that's part of the point?
23:00:20 <Sgeo> That it's something that exists at type-level
23:01:06 <elliott> the worst part of non-strict semantics is that it makes people talk about "infinity" :(
23:01:11 <zzo38> Sgeo: Yes, it is the point; it is supposed to be type-level numbers.
23:02:02 <ais523> elliott: just use the arbitrary number instead
23:02:19 <ais523> oh, right, in my new language, which I've forgotten the name of and will have to rename unless I remember it, there are certain types of loop that look infinite
23:02:31 <ais523> but the implementation /must/ optimise them into finite loops, according to the spec
23:02:41 <elliott> ais523: anarchy?
23:02:48 <ais523> no, not that one
23:02:56 <ais523> the one that was inspired by Burro
23:03:22 <ais523> hey, you know how much more modular BF gets simply by adding "insert tape element" and "delete tape element" commands?
23:03:27 <ais523> sadly, it's hard to make them reversible
23:03:54 <Phantom_Hoover> Can you just explain the language, rather than giving glimpses of it?
23:04:11 <ais523> no
23:04:20 <ais523> I'm glimpsing because I invented it while asleep
23:04:20 <Phantom_Hoover> It's kind of annoying just to describe some property without any details on why it arises.
23:04:24 <ais523> so remembering it is awkward
23:04:31 <ais523> and I'm not sure it's fully specced out yet
23:04:37 <ais523> I can explain the other language, though, the OISC
23:05:04 <ais523> basically, each command can be referred to (e.g. 1 for the first command, 2 for the second, 3 for the third, etc)
23:05:21 <ais523> well, they're not really commands, more like unknowns
23:05:39 <ais523> and you write, say, 2 * 3 + 4 for "the value of the second command times the value of the third command plus the value of the fourth command"
23:05:53 <ais523> that's the only form allowed, unknown * unknown + unknown (= unknown, the unknown that represents /this/ command)
23:06:00 <ais523> then, all the interp has to do is solve the inequalities
23:06:09 <ais523> and it goes into an infinite loop if there are no solutions
23:06:12 <ais523> (this last bit makes it TC)
23:06:36 <ais523> *(this last bit makes it computable)
23:06:38 <Sgeo> Going into infinite loops doesn't necessarily imply TCness
23:06:50 <ais523> Sgeo: I know, thus the correction
23:12:15 <zzo38> Is there a Haskell package for the category of walks?
23:13:30 <zzo38> Is arr like a functor from (->) to the other category?
23:15:04 <elliott> i think so
23:17:03 <zzo38> Is that a proper way to say what the laws are for the Arrow class?
23:20:41 <zzo38> Maybe, first second *** &&& should be one class, and arr should be another class which is of two categories. And then provide functions which can be used as default definitions of second and &&& when it is from the (->) category. Would that work or make sense at all?
23:22:31 <zzo38> And make them workable with datatype families so that you are not limited to only categories with the same objects as Haskell
23:25:06 <elliott> zzo38: well the problem is that without arr, you can do almost nothing with an Arrow, so you have to replace it somehow
23:25:09 <elliott> see for example http://www.cs.berkeley.edu/~megacz/garrows/
23:26:24 -!- Klisz has joined.
23:29:11 -!- DCliche has quit (Ping timeout: 240 seconds).
23:32:31 <zzo38> I see nothing about functors mention in there. I do like that idea and would like to see something like -XModalTypes in GHC it might sometimes be useful to do stuff
23:38:14 -!- monqy has joined.
23:39:53 <Phantom_Hoover> monqy!
23:39:54 -!- madbr has joined.
23:40:17 <Phantom_Hoover> madbr!
23:40:20 <zzo38> Do you know if it is possible to use ghci with Haskell programs that require a main function written in C?
23:41:25 <monqy> you can interact with the nonmain functions presumably
23:44:01 <madbr> hello
23:46:10 -!- Phantom_Hoover has quit (Ping timeout: 276 seconds).
23:56:12 <elliott> zzo38: I was just saying re: splitting arr out and leaving just first, second, (***) and (&&&)
23:56:22 <elliott> because that doesn't leave a useful typeclass without adding things like garrow does
←2011-12-27 2011-12-28 2011-12-29→ ↑2011 ↑all