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:40 <colloinkgravisom> I meant that it's subjective to decide what constitutes an algorithmic difference.
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: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:43 <kallisti> yeah that's pretty much meaningless without further criteria.
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:54 <Madoka-Kaname> But it doesn't say much about programming in the language.
00:08:20 <kallisti> people are likely to use sort when programming in Haskell and in need of a sorting algorithm.
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: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: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: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:59 <colloinkgravisom> Phantom_Hoover: Homespring does not do nothing on the null program.
00:16:19 <Phantom_Hoover> It prints "In Homespring, the null program is not a quine.", or words to that effect.
00:17:12 <colloinkgravisom> One whose semantics presumably do not print out that string on the null program.
00:18:53 <Sgeo> Has anyone written a Homespring quine?
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:35 <colloinkgravisom> Those are alternate implementations of programs whose main implementations appear in the previous table.
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:30 <colloinkgravisom> Phantom_Hoover: Consider defining the semantics of BF as [Ins].
00:26:54 <colloinkgravisom> The semantics of add followed by program p is to increment [...] followed by the semantics of p.
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: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: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:17 <kallisti> colloinkgravisom: I was wondering why Erlang wins in that case.
00:28:50 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> b
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 <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:18 <kallisti> colloinkgravisom: one other is 1-core.
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:43 <kallisti> http://shootout.alioth.debian.org/u64/performance.php?test=threadring
00:30:52 <Phantom_Hoover> colloinkgravisom, if the language doesn't specify what the null program does, you can't deduce that.
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: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: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:40:57 <Sgeo> Err, wrong person
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: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:49 <colloinkgravisom> kallisti: The Haskell benchmark game programs would be better if the maintainer wasn't biased like that :)
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: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: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:56 <Phantom_Hoover> Does it involve being incredibly witty, charming, suave and good-looking?
00:47:37 <kallisti> Phantom_Hoover: witty, charming, suave, and good-looking is more about being kallisti, really.
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: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:01:02 <colloinkgravisom> http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php
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: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:07:00 <Sgeo> They are now talking about disadvantages of FAD
01:07:03 <Sgeo> Particularly abuse
01:07:14 <Sgeo> "is dreading having to debug code that looks like $foo()->bar()[1]->baz('bat')[0]"
01:07:46 <kallisti> PHP programmers are worse than Python programs when it comes to aversion to nested expressions, I guess.
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: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: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: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: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: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:39 <NihilistDandy> Yeah, clients that process every kysroke are overtd
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: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:29:11 <colloinkgravisom> Phantom_Hoover: Are the Sierpinski numbers actually closed under anything, though.
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: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:39 <kallisti> colloinkgravisom: optimize for efficient screen space use.
01:57:47 <kallisti> when designing your synthesizer.
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: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: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:52 <zzo38> Put GPS+Astrolog in that computer
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: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: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:39 <kallisti> colloinkgravisom: that's a sweet ass-car
02:11:23 <kallisti> it's also the only one I would describe as "GOOMH Randall"
02:12:12 <kallisti> colloinkgravisom: recall that it was actually your linking to xkcdsucks that made me familiar with the term
02:13:30 * colloinkgravisom is unable to read "GOOMH" as anything but a single word "goomh" pronounced "goomh".
02:13:55 <zzo38> Are you able to make Astrolog with GPS input on Android based computer?
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: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: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: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: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:29 <kallisti> not necessarily instantaneously
02:19:33 <kallisti> but within a reasonable timeframe.
02:19:40 <kallisti> and think of you as a lesser person.
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: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: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: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:39:10 -!- androidgravisom has joined.
02:42:31 <androidgravisom> I'm going to buy the Wolfram Alpha app and NOBODY CAN STOP ME
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: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: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:51:53 <kallisti> wtf "hepatisis patient height" is a valid query.
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:02:56 -!- androidgravisom has quit (Remote host closed the connection).
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:29 <Vorpal> how can it be in hertz?
03:09:31 <kallisti> maybe I misunderstand the "unit conversions" section.
03:09:52 <kallisti> http://www.wolframalpha.com/input/?i=Germany+electricity+consumption+%2F+calories+in+a+solar+mass+of+Burger+King+hamburgers
03:10:11 <Vorpal> Definition: kilo W = 1000 kg m^2 / s^3
03:10:16 <Vorpal> there are seconds there?
03:10:29 <Vorpal> Definition: calorie = cal_IT = 4.1868 J = 4.1868 kg m^2 / s^2
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:58 <Vorpal> Definition: 238.8459 / s
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:46 <kallisti> both of those quantities have units.
03:12:55 <kallisti> that are not directly inverse.
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: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: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:34 <zzo38> (Even though their blog once mentions ecliptic coordinates)
03:14:39 <Vorpal> which cancels out to give hertz
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:09 <androidgravisom> <Vorpal> kallisti, for these things units(1) is better than Wolfram Alpha :P
03:16:23 <Vorpal> androidgravisom, at least I find it easier to use
03:16:29 <Vorpal> also I don't get the reference
03:16:52 <Vorpal> androidgravisom, seem? really?
03:17:11 <Vorpal> androidgravisom, I guess that keyboard app wasn't that good when you type names of things
03:17:28 -!- DCliche has joined.
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: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:57 <Vorpal> what else can frink do?
03:19:05 <kallisti> runs in 3 seconds on my machine.
03:19:26 <Vorpal> is it in ubuntu repos?
03:19:41 <Vorpal> right, got a link then?
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: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:23 <Vorpal> androidgravisom, that typing thing sucks I think
03:21:32 -!- cheater has quit (Ping timeout: 276 seconds).
03:21:54 <kallisti> my blackberry keyboard is awesome.
03:22:06 <Vorpal> androidgravisom, but compare to an actual keyboard. It is less bulky sure, but typing accuracy seems terrible
03:22:31 <Vorpal> androidgravisom, I should so change to a nick like ][_a328ds
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: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: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:29 <Vorpal> androidgravisom, what were you trying to say instead of "Windsor"?
03:25:57 <Vorpal> Ringgit is not even a real word
03:26:11 <Vorpal> how could that be in the dictionary
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:50 -!- Patashu has quit (Ping timeout: 240 seconds).
03:27:43 <Vorpal> presuppose? seriously?
03:28:18 <Vorpal> it wrote out "exclamation marks"?
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:53 <kallisti> what would cause the real time to faster than the user time.
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: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: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:50 <Vorpal> androidgravisom, this is too absurd to be funny. Because there is no way I can even guess what was meant
03:31:21 <Vorpal> androidgravisom, and gooseflesh seems fairly reasonable
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:46 <Vorpal> androidgravisom, well obviously
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:44 <Vorpal> it is not as good as a desktop keyboard.
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:21 <Vorpal> androidgravisom, what did you actually want?
03:34:31 <Vorpal> can't you type it out slowly
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:36:00 <Vorpal> androidgravisom, remember those old thinkpads with keyboards that folded out?
03:36:16 -!- DCliche has joined.
03:36:32 <Vorpal> I don't think that is a good idea
03:36:42 <Vorpal> https://en.wikipedia.org/wiki/IBM_ThinkPad_Butterfly_keyboard
03:37:48 <Vorpal> "androidgravisom, [...] I apologise for everything"
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:48 <Vorpal> I do think "<androidgravisom> Busy I apologise for everything" is quote-worthy though
03:39:56 -!- Klisz has quit (Ping timeout: 248 seconds).
03:40:07 <Vorpal> a tounge twister or some kind?
03:40:49 -!- cheater has quit (Ping timeout: 240 seconds).
03:41:03 <Vorpal> androidgravisom, that is silly
03:41:10 <Vorpal> androidgravisom, try other vulgar language?
03:41:35 <Vorpal> come on, where did that space go?
03:42:15 <Vorpal> where did "Kids shopping" come from?
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:48 <Vorpal> until it took an arrow to the knee?
03:44:48 <Vorpal> androidgravisom, anyway you said dragon
03:46:00 <Vorpal> wait is this repeating whatever it think you said and see if ends up consistent?
03:46:44 <Vorpal> why is it that software failing at speech recognition is so funny?
03:47:31 <Vorpal> working out great so far
03:47:56 <Vorpal> tell me what the original was instead of "great grandson" btw. Using typing or something
03:48:36 <Vorpal> I thought it was "photoluminescent"
03:48:43 <Vorpal> "photoluminescent" is so much better
03:49:05 <Vorpal> what it cut it short!?
03:49:31 <Vorpal> no you shall not be forgiven for your mangling of the message
03:49:58 <Vorpal> wait it turned "photos and wanted" into "I'm sorry"?
03:50:28 -!- azaq23 has quit (Quit: Leaving.).
03:53:30 <Vorpal> <androidgravisom> Dangling guardian PDT the superior soul <-- what was that
03:54:17 -!- cheater has joined.
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: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: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: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:13:12 -!- const has quit (Quit: 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: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: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: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:19 <zzo38> colloinkgravison: Yes that is one way.
04:24:02 <kallisti> colloinkgravisom: but that won't type in Haskell.
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: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: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: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: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 <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: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: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: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: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:28 <colloinkgravisom> sorry, you passed my threshold of "coherent enough to bother trying to decode"
04:36:43 <kallisti> basically [Char] is done... there are no more inferences to make.
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:38:52 <kallisti> #esoteric is a bad place to learn things.
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: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:55 <colloinkgravisom> kallisti: well you obviously don't understand type inference/checking so start there, try [[hindley milner]]
04:40:11 <monqy> you didn't specify
04:41:53 <monqy> ould that be a good idea
04:43:44 -!- calamari has joined.
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:21 <colloinkgravisom> bleeeeeurgh bed is just so ahrd theres so many rules and restrictions and prices and values
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:27 <monqy> speech recognition
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:48:06 <kallisti> colloinkgravisom: okay, so, [a] is a monotype.
04:49:05 <monqy> power button may be a bad idea
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: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: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: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: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: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: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: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:07:11 <kallisti> but in Haskell, [a] is not considered 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: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: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: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: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:17 <kallisti> I think the reason recursive data structures are allowed is because /Haskell does not consider them to be infinite types/
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:24 <kallisti> monqy: that is what I just said.
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: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: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:47 <monqy> i dont know how to explain these things
05:29:19 <kallisti> because at the type level [a] is not recursively defined. it's just.. [a]
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: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:35:51 <monqy> how is it a set it can contain duplicates??
05:37:01 <monqy> im not seein ght eorder
05:37:14 <kallisti> X[ X[ X [], X[], X[]], X [], X[X [], X[], X[]]]
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: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:42:21 <monqy> congratulatiosn won conrrrecting my words
05:42:29 * Sgeo did not get a single A this semester.
05:43:23 <Sgeo> 4 As and an A-
05:43:25 <kallisti> monqy: other mistakes are permissible.
05:43:34 <kallisti> but you can't misspell colloinkgravisom.
05:43:55 <monqy> can i misspell kallisti? i already have, in the past.
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: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:57 -!- kallisti has changed nick to Hey.
06:11:08 <Hey> @clear-messages
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:57 <kallisti> T is not isomorphic to A because there is no equivalent to T _|_
06:13:50 <kallisti> I honestly don't know how to make that more clear.
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:15:04 <zzo38> Maybe if you put data instead of newtype
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:17:32 <kallisti> _|_ = _|_; T a = a; T _|_ = ???
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:18 <kallisti> that lack of a mapping for T _|_ to something in A.
06:20:14 <monqy> so T _|_ is a value?
06:20:39 <monqy> _|_ inhabits every type
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: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:35 <monqy> a thing that you need
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: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:19 <monqy> ignoring _|_ makes me feel good inside
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: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:34:29 <monqy> it's hard to describe but
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: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: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: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:20:36 <itidus21> if promises could all be kept then there would be very few troubles in the world
07:21:30 <quintopia> keeping such a promise engenders good will with customers
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: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: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: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: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: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: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: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: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: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:02:19 <Ngevd> I do not understand this emoticon
09:02:36 <itidus21> bad ascii art to indicate pointing home with both hands
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: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:05:54 <HackEgo> 2011-12-28.txt:09:05:43: <itidus21> `log cloud seeding
09:06:26 <HackEgo> 2011-12-28.txt:09:03:49: <coppro> itidus21: china can control the weather?
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: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: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: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: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:46:31 <zzo38> Has Gregor ever thought about these kind of things like what I have mentioned here?
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: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: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:23 -!- Taneb has changed nick to Ngevd.
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: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: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:51 <Ngevd> My opinions on Doctor Who
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: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: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:27 <Sgeo> join m_m_a = do {m_a <- m_m_a; m_a }
11:30:54 <lambdabot> arising from a use of `e_11234' at <in...
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:16 -!- SgeoN1 has joined.
11:31:20 <Phantom_Hoover> This is because you are exceptionally stupid and/or gullible.
11:31:27 <SgeoN1> Damn This battery so much
11:31:33 <Ngevd> Note I did not mention the episodes
11:33:00 -!- Sgeo_ has joined.
11:33:12 <Ngevd> This is why I struggle making friends.
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:26 <Sgeo_> > join (Just Nothing)
11:34:28 <Ngevd> kallisti, but I think I'm still a bit behind
11:34:51 -!- Sgeo has quit (Ping timeout: 240 seconds).
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:40 <Sgeo_> Ngevd, you know that (+) adds two numbers, right?
11:36:02 <oerjan> s/repeating/redirecting/
11:36:04 <Sgeo_> > (+) <$> Just 2 <*> Just 3
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: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: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:38:06 <Phantom_Hoover> Yes, it's an expression of the supremacy of the almighty dollar.
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:39:07 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
11:39:11 <Sgeo_> > succ <$> (Just 1)
11:39:17 <Sgeo_> Maybe is a functor
11:39:33 <Ngevd> I knew maybe is a functor
11:40:00 <kallisti> Sgeo_: I believe that's what he meant by "inside the functor"
11:40:06 <Phantom_Hoover> I thought it was f (a -> b) -> f a -> f b for some reason.
11:40:14 <Sgeo_> Phantom_Hoover, that's <*>
11:40:18 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
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: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: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: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: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: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: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:42 <kallisti> Ngevd: yes, this is what happens in the case of list.
11:47:59 <kallisti> Ngevd: but if you look at the type you can infer what happens in the general case.
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:39 <kallisti> it's basically function application, within a parametric type.
11:52:28 <Ngevd> Labbekak, are you new to Haskell?
11:52:45 <kallisti> Ngevd: hopefully that makes everything make a little more sense.
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: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:49 <kallisti> or basically any blizzard game.
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:26 <oerjan> T _|_ = _|_ for newtypes, this is a main difference from data
11:55:33 <kallisti> oerjan: yes I realized that further.
11:55:41 <kallisti> oerjan: so I changed it to data. because it still applies there.
11:57:55 <Ngevd> > map (* last [1,2,3]) [1,2,3]
11:57:56 -!- Sgeo has joined.
11:58:05 -!- Sgeo_ has quit (Read error: Connection reset by peer).
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:56 <Sgeo> > last ((*) <$> [1,2,3] <*> [1,2,3])
11:59:06 <Sgeo> > (*) <$> [1,2,3] <*> [1,2,3]
11:59:15 <Sgeo> A perfect demonstration of applicatives
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: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: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:42 <Sgeo> Also, wasn't sure that a was the appropriate weird thing
12:01:57 <Labbekak> > map ($ 3) [(*1), (*2), (*3)]
12:02:00 <Sgeo> > Just (*) <*> Just a <*> Just b
12:02:12 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
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: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: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: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:10:28 <kallisti> Ngevd: but yeah <$> and <*> make it easy to basically ignore the parametric type wrapping.
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:58 <kallisti> Ngevd: So, for exampke: lines <$> readFile "foo.txt"
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:54 <Sgeo> [1..] == enumFrom 1
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:21 * Sgeo forgets what [1,3..] and [1,3..5] desugar to
12:12:26 <Sgeo> :t enumFromStep
12:12:38 <Ngevd> > enumFromThenTo 1 3 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: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 <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:36 <lambdabot> No instance for (GHC.Num.Num GHC.Types.Char)
12:13:51 <Sgeo> Labbekak, Strings are lists of Chars. Chars are not numbers.
12:14:01 <monqy> > map succ "Albert"
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:16 <monqy> > map (chr . (+1) . ord) "Albert"
12:14:31 <Ngevd> > map chr (map (+1) (map ord "Albert"))
12:15:37 -!- oerjan has quit (Quit: leaving).
12:15:58 <kallisti> Ngevd: (+) <$> (read . getLine) <*> (read . getLine)
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:39 <monqy> @hoogle 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:17:01 <kallisti> Ngevd: (+) <$> readLn <*> readLn
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: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:48 <Ngevd> No, it's less safe
12:18:53 <kallisti> I think it's literally just read <$> getLine
12:19:02 <lambdabot> readLn = do l <- getLine; r <- readIO l; return r
12:19:14 <lambdabot> Source not found. You speak an infinite deal of nothing
12:19:34 <Sgeo> @source readLn
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:21 <Ngevd> Including safety and money
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:50 <lambdabot> <no location info>: parse error on input `:'
12:31:59 <lambdabot> Couldn't match expected type `Int'
12:31:59 <lambdabot> against inferred type `a (b, d) (c, d)'
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: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:55 <monqy> i mean (->) vs (->r)
12:33:07 <Ngevd> (->) isn't a function.
12:33:43 <Ngevd> (->) does not represent the function type
12:33:51 <Sgeo> It's not (r->)?
12:34:10 <kallisti> which is (r->) which is not valid Haskell.
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:35:07 <Sgeo> > (+) <$> (1+) <*> (2-) $ 5
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 <lambdabot> forall a (m :: * -> *). (Monad m) => a -> m a
12:35:49 <lambdabot> Overlapping instances for GHC.Show.Show (a -> b -> a)
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: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: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: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:48 <Ngevd> Reader monad without Reader
12:38:53 <Sgeo> > do { x <- (+1); y <- (*5); return (x+y)} $ 1
12:38:57 <Ngevd> I aspire to be a cruciverbalist
12:39:08 <Sgeo> > do { x <- (+1); y <- (*5); return (x,y)} $ 1
12:39:18 <Sgeo> Ngevd, do you know what the Reader monad is?
12:39:45 <Ngevd> I was making a joke
12:40:29 * Sgeo gives kallisti an A - -
12:40:46 <monqy> is that good or bad....
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:45 <Sgeo> > (\l n -> map (chr . (+n) . ord) l) "Whatup" 5 -- this is how to do a multi-argument lambda
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:02 <monqy> not the palindromes?
12:43:06 <Ngevd> mind.blown == true
12:43:13 <kallisti> but I use that to make palindromes yes.
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:58 <lambdabot> replicateM n x = sequence (replicate n x)
12:44:10 <lambdabot> Couldn't match expected type `m a'
12:44:10 <lambdabot> against inferred type `GHC.Types...
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:45:14 <lambdabot> Couldn't match expected type `m a'
12:45:14 <lambdabot> against inferred type `GHC.Types...
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: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 <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 <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 <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:56 <kallisti> sequence ["abc", "abc", ..., "abc"]
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: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:39 <Ngevd> Sgeo, wait 'till I've learnt monads
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:52:15 <monqy> is friendship a monad
12:52:29 -!- Labbekak has quit (Quit: Page closed).
12:52:34 <monqy> is friendship a comonad
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:53:30 <kallisti> LOL MONADS CAN BE ESCAPED FROM
12:53:38 <monqy> runlist is a filthy lie
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:13 <kallisti> you can't escape friendship monad
12:54:28 -!- pikhq has quit (Quit: See ya Sunday).
12:54:34 <kallisti> you can escape friendship not-monad
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:34 <kallisti> Sgeo: think like monad but backwards.
12:55:41 <monqy> they're pretty much 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:57:04 <Sgeo> kallisti, you mean, other than trivial stuff?
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:24 <kallisti> (partial functions are cheating)
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: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:19:52 <Sgeo> >t liftA2 (+) id id 5
13:19:58 <Sgeo> > liftA2 (+) id id 5
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:26:29 <Ngevd> Hello, kallist. My name is Taneb|Lunch
13:26:33 -!- Ngevd has changed nick to Taneb|Lunch.
13:37:11 <kallisti> Taneb|Lunch: http://sprunge.us/jFQet
13:37:22 <kallisti> you should examine this awesome program.
13:38:16 <kallisti> Taneb|Lunch: http://sprunge.us/jFQe
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: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: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:49:01 <HackEgo> #!/usr/bin/perl -w \ if (defined($_=shift)) { s/ +/ @ /g; exec "bin/@", $_ . " ? welcome"; } else { exec "bin/?", "welcome"; }
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:11 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: welcom: not found
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: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: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: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: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:29 -!- Ngevd has quit (Quit: Goodbye).
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:06:07 <kallisti> erm, pure for lists works fine.
14:06:11 <lambdabot> No instance for (GHC.Show.Show (f t))
14:06:11 <lambdabot> arising from a use of `M1276157568...
14:07:07 <kallisti> lambdabot: why can't you read my mind???
14:08:54 <kallisti> incomprehensibly: perhaps you were thinking of zipWith ($)
14:10:05 <kallisti> you could try #objective-c but I don't if that's a thing.
14:10:31 <kallisti> ... #iphone maybe? I doubt it.
14:10:36 <kallisti> try to find like an iphone dev channel
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:13 <kallisti> (that it's helpful to think of them that way)
14:25:18 <kallisti> it's just not /helpful/ for learning.
14:25:25 <kallisti> "oh actions... okay what does that mean"
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:57 <incomprehensibly> kallisti: yes, but a value of type Maybe a is *not* 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:27:26 <incomprehensibly> in the case of IO, handed to the Haskell runtime and performed
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: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:42 <kallisti> State is not an action by your own 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: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:33 <kallisti> incomprehensibly: we're not talking about 3
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: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:38:37 <Phantom_Hoover> After all, IO is conceptually just State RealWorld, and State is no more esoteric than a list.
14:39:15 <incomprehensibly> I don't get what consing 3 with [] does to it that makes it an action
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: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: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: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:41 <incomprehensibly> Phantom_Hoover: yes, but there are more arguments than just the specification of the type
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:45:26 <incomprehensibly> Just 3 is not an action that can succeed or fail, but the *answer* to such an action.
14:45:56 <Phantom_Hoover> Try going into #haskell, there should be some not very confused at all people in there.
14:46:24 <Phantom_Hoover> I'm not being patronising, you're just 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: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: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 <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:57 <Phantom_Hoover> I don't know that much about monads, and kallisti knows less than he thinks he does.
14:48:41 <Phantom_Hoover> By using >>= on Just 3, you are performing the associated action.
14:48:49 <kallisti> incomprehensibly: so then IO is also not an action
14:48:52 <kallisti> using >>= on IO a is an 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:50:12 <Phantom_Hoover> [a] contains actions which result in a list of values.
14:50:51 <incomprehensibly> Phantom_Hoover: a -> [b] is an example of an action that returns multiple values
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: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:52:44 <lambdabot> Overlapping instances for GHC.Show.Show (b -> a)
14:52:51 <lambdabot> Couldn't match expected type `b -> b1' against inferred type `()'
14:53:01 <Phantom_Hoover> The function monad contains actions which produce a value from some constant.
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: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: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:13 <incomprehensibly> now imagine that person's hands before, dirty, and after, clean.
14:56:51 <Phantom_Hoover> I wish you could force people to talk in another channel.
14:59:04 <kallisti> incomprehensibly: btw in your metaphor values of type IO a are the paper saying "wash your hands"
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: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:01:31 <Phantom_Hoover> This is quite difficult, and I applaud your perseverance.
15:01:46 <kallisti> incomprehensibly: State does not transform anything
15:01:59 <incomprehensibly> but you'er putting zero effort into understanding me, then treating me like I don't know anything
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: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: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:08 <elliott> incomprehensibly: No, the value of type `a` would be the value you get out of that language.
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:56 <lambdabot> forall b a. b -> (a -> b) -> Maybe a -> b
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: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: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: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:53 <kallisti> incomprehensibly: what it is it that makes a value of IO a an action.
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:46 <elliott> Then why are you trying to tell me what you're saying?
15:11:47 <elliott> Depends what you mean by "container".
15:11:57 <incomprehensibly> because any container you make, if it can be nested, is an action by that definition
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: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: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: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:39 <elliott> incomprehensibly: You're mistaking kallisti being stupid and/or annoying for condescending.
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: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: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: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:17:02 <elliott> Also, considering "action" is common terminology throughout the Haskell community, we're in very good company.
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: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: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: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: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: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: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:24:19 <kallisti> I just find it funny that you inferred that, somehow
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:48 <elliott> Phantom_Hoover: *SIMULTANEOUS GODWIN HIGH-FIVE*
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: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: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:30:27 <itidus21> everyone is wrong as proven by the fact that their languages are imperfect
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: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: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:09 <lambdabot> Sum {getSum = *Exception: Prelude.undefined
15:36:10 <kallisti> elliott: I forgot about newtype
15:36:15 <lambdabot> Sum {getSum = *Exception: Prelude.undefined
15:36:49 <kallisti> elliott: so I assume you want [a] to be constructed with newtype?
15:37:09 <elliott> i'm not talking to you about this
15:37:45 <kallisti> well it would make sense with newtype.
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:52 <elliott> no i just don't feel obligated to educate you, especially when you insist you're right
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: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:38 <elliott> this actually just happened
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: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: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: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:47:37 <kallisti> elliott: that is true. you do not offer. Perhaps I shouldn't be so insist.
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: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: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> arising from a use of `e_1123123' at <...
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: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:36 <elliott> readIO uses fail on parse failure
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:24 <elliott> otherwise do { x:xs <- m; ... } would be uncatchable
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:16:15 <kallisti> hmmm so error is ana async exception
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:33: * kallisti nitpick
16:16:54 <elliott> (->) is a type constructor
16:16:59 <elliott> ((->) r) is a type constructor
16:17:05 <kallisti> elliott: something amazing happens later
16:17:28 <elliott> 12:34:59: <monqy> iirc ((->) r) is (-> r) iirc
16:17:36 <kallisti> I'm right and at least 3 other people are wrong
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:51 <kallisti> not only are functions numbers but numbers are functions.
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: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: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:34 <elliott> "Would YOU dare to extract?"
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: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:38 <kallisti> kallisti: yes all of the brilliant esoteric programmers come from Jasper, GA.
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: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: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: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: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: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:56 <kallisti> I'm the honoronororary American ambassador.
16:29:08 <elliott> Phantom_Hoover: I think it's actually in Denmark?
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: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:49 <elliott> Phantom_Hoover: UM JUST PRETEND THE WORLD IS FLAT?
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:33 <elliott> But Hexham only has the sll one.
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: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: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: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:35:45 <kallisti> Phantom_Hoover: YOU LACK THE COMMITMENT OF A REAL SCIENTIST.
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: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:46 <elliott> http://upload.wikimedia.org/wikipedia/commons/1/15/MercTranSph.png
16:38:13 <elliott> Phantom_Hoover: http://en.wikipedia.org/wiki/Equirectangular_projection?
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:53 <elliott> http://www.geomidpoint.com/
16:41:12 <kallisti> hm, I think latitude and longitude is actually not projected to anything.
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: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:19 -!- Ngevd has joined.
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:08 <elliott> This thing, in particular.
16:44:19 <kallisti> Ngevd: are you going to calculate who your ancestors are?
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 <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: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: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: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: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:27 <elliott> kallisti: Where are you again?
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 <lambdabot> Phantom_Hoover: You have 1 new message. '/msg lambdabot @messages' to read it.
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: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: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:50:36 -!- Klisz has joined.
16:50:41 <Phantom_Hoover> http://www.smbc-comics.com/index.php?db=comics&id=2470#comic
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: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: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: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> 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: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:53 -!- Vorpal has joined.
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:15 <Phantom_Hoover> Ngevd, no, because that would pull the point towards Sweden.
16:56:19 <elliott> Using Hexham, Helsinki, Jasper and Edinburgh.
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: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:52 <elliott> Phantom_Hoover: Copy in the latitude and longitude in the separate fields. :p
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:03:01 <Ngevd> Added ais523 and got... Hexham
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: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: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:20 <Ngevd> /Which/ other Newcastle?
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: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:06 <lambdabot> Couldn't match expected type `t1 -> t2 -> t'
17:31:29 <Ngevd> What were you trying to achieve there?
17:32:01 -!- Labbekak has quit (Ping timeout: 258 seconds).
17:32:03 <Ngevd> > ["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:48 <Ngevd> Nah, Haskell thinks you're trying to use a string as a function
17:32:48 <lambdabot> arising from a use of `e_1123456' at <...
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:45 <lambdabot> Couldn't match expected type `Text.PrettyPrint.HughesPJ.Doc'
17:34:57 <Ngevd> > (+) <$> [1,2,3] <*> [4,5,6]
17:35:24 <elliott> > runZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [4,5,6]
17:35:26 <Ngevd> elliott, that would depend on what I am wanting to achieve
17:35:31 <lambdabot> Control.Applicative getZipList :: ZipList a -> [a]
17:35:35 <elliott> > getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [4,5,6]
17:36:59 <Ngevd> > [5,7,9] == [5,6,7,6,7,8,7,8,9]
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:44 <lambdabot> <no location info>: parse error on input `..'
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:18 <elliott> fizzie: There'll be a ship.
17:40:48 <Labbekak_> > map (product . (enumFromTo 1)) [1..5]
17:41:09 <lambdabot> <no location info>: parse error on input `..'
17:41:19 <Ngevd> Haskell is named after Mr. Curry himself
17:41:36 <lambdabot> <no location info>: parse error on input `..'
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:27 <Ngevd> Labbekak_, infinite lists a all over the place in Haskell
17:42:36 -!- copumpkin has joined.
17:42:52 <Labbekak_> ive been reading http://learnyouahaskell.com abit
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: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: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: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: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:43 <kallisti> if you go learn about those I (or someone else) can better explain >>=
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:55:09 <kallisti> (>>=) ls f = concat (map f ls)
17:59:43 <kallisti> (and, in fact, if you replace concat with join, and map with fmap, this is true for every monad)
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: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:36 <kallisti> > join $ fmap return [1,2,3,4] :: [Int]
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:18 <elliott> dfp[hk dph p]ophk opgk[ fghkopfghkopofgh
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: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: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: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:55 <elliott> so you learned monads yesterday
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: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:19:36 <lambdabot> Source not found. The more you drive -- the dumber you get.
18:19:40 <lambdabot> foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
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: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: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:56 <Vorpal> the results were funny
18:50:16 <elliott> Vorpal: Well, I put it back in its box and slept.
18:50:25 <kallisti> elliott: http://labs.scrive.com/2011/12/why-monads/
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:46 <elliott> kallisti: Maybe I, like, already did, like, maybe.
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: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: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: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:58:47 <kallisti> I misread Haskellwiki yet again!
18:59:22 -!- Ngevd has joined.
19:01:54 -!- oerjan has joined.
19:04:27 <elliott> hi welcome to america kallisti
19:04:58 <elliott> kallisti don't want no welcomes :(
19:05:34 -!- ais523 has joined.
19:06:03 -!- cheater has quit (Read error: Connection reset by peer).
19:11:33 * oerjan must have some food first
19:12:08 -!- elliott has changed nick to doop.
19:12:11 <lambdabot> doop: You have 1 new message. '/msg lambdabot @messages' to read it.
19:12:21 <doop> oh, right, ctcps work like that
19:12:23 <doop> @clear-messages
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: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: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: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: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: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: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: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:30 <ais523> to be precise, f+g corresponds to function | Left a -> f a | Right b -> g b
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:10 <ais523> elliott: aha, it's not /that/ completely unlike burro
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:49:35 <fizzie> Phantom_Hoover: Stress levels of physics students.
19:49:47 <elliott> It's like synergy, but stringy.
19:51:02 <lambdabot> forall (a :: * -> * -> *) b d c. (ArrowChoice a) => a b d -> a c d -> a (Either b c) d
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: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: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: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: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: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:42 <ais523> with the usual definition
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: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: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: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: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:07:15 <ais523> I thought the definition was that there were no morphisms in/out
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: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:16:36 <elliott> http://hackage.haskell.org/package/wai
20:16:37 <elliott> http://hackage.haskell.org/package/vault
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:25:29 <Ngevd> Everything is a thing
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: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: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: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: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:39 <lambdabot> Occurs check: cannot construct the infinite type: a = Maybe a
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:24 <Sgeo> > join Nothing
22:58:31 <Sgeo> > join (Just Nothing)
22:58:36 <Sgeo> > join (Just (Just Nothing))
22:58:49 <zzo38> Like I said, Nothing would represent zero in values.
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: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: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: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:54 -!- madbr has joined.
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: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