Logs on 2023-11-07 (liberachat/#haskell)
| 00:12:41 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 240 seconds) |
| 00:13:38 | <EvanR> | newsham, there's an open world assumption. Code should still work if future code is introduced which adds instances. So deciding to do something on "no such instance now" would be wrong in the face of that |
| 00:14:50 | <EvanR> | deciding statically |
| 00:14:53 | → | xff0x joins (~xff0x@2405:6580:b080:900:1034:83b0:f1e0:db5e) |
| 00:14:59 | → | bcksl joins (end@user/bcksl) |
| 00:15:23 | <EvanR> | and deciding dynamically at runtime like those crazy things linked, sounds like asking for pain xD |
| 00:15:30 | × | Athas quits (athas@2a01:7c8:aaac:1cf:d300:623e:69e4:545f) (Quit: ZNC 1.8.2 - https://znc.in) |
| 00:15:40 | → | Athas joins (athas@2a01:7c8:aaac:1cf:d300:623e:69e4:545f) |
| 00:18:30 | <newsham> | yah, I see the point about not doing this dynamically. but I'm still not following the "open world" assumption reasoning. in my mind, when the code is compiling something like `Show a => a -> String` it has to make a static decision to provide the "Show a" at compile time, or provide an error. So in my mind it should be possible to implement |
| 00:18:31 | <newsham> | a `~(Show a) => a -> String`, making the same choice based on the non-existance of (Show a) dictionary. Perhaps not with that same syntax, but, say for example, defining a `class ~(Show a) => Unshowable a` dictionary. |
| 00:18:49 | <newsham> | so there's some ignorance in my model somewhere about why this cant work. |
| 00:18:50 | × | diagprov quits (sid348783@user/diagprov) (Server closed connection) |
| 00:19:03 | → | diagprov joins (sid348783@user/diagprov) |
| 00:19:23 | <EvanR> | if you write a function with type Show a => a -> String, and there's no other information, no it doesn't statically determine anything, yet it still works if linked into other projects |
| 00:19:53 | <EvanR> | it's waiting for a dictionary |
| 00:20:05 | <newsham> | but at the call site, it must decide statically. |
| 00:20:10 | <EvanR> | not necessarily |
| 00:20:25 | <EvanR> | it could be called from yet another parametric function |
| 00:20:28 | <newsham> | how is that implemented under the covers? |
| 00:20:40 | <EvanR> | dictionary passing |
| 00:20:53 | <geekosaur> | Show is in fact a good example of that because many Show instances defer to other Show instances |
| 00:21:07 | <EvanR> | you could think of Show a => a -> String as taking 2 arguments, the dictionary and the thing to be shown |
| 00:21:22 | <newsham> | but the compiler will tell you at compile (or link?) time that it couldnt construct a dictionary for the purpose. |
| 00:21:33 | <newsham> | *nod* |
| 00:21:58 | <EvanR> | yeah if you try to show the ord function it will complain |
| 00:22:03 | <EvanR> | > show ord |
| 00:22:05 | <lambdabot> | "<Char -> Int>" |
| 00:22:11 | <EvanR> | WOW |
| 00:22:17 | <newsham> | `show x` desugars to `show x.showdictionary x` or something akin to it. |
| 00:22:46 | <EvanR> | show instances for everything makes this issue hard demonstrate xD |
| 00:22:57 | <EvanR> | > ord + ord |
| 00:22:59 | <lambdabot> | error: |
| 00:22:59 | <lambdabot> | • No instance for (Num (Char -> Int)) arising from a use of ‘+’ |
| 00:22:59 | <lambdabot> | (maybe you haven't applied a function to enough arguments?) |
| 00:23:12 | <newsham> | dont worry, I will not overgeneralize by lambdabot's hacks :) |
| 00:23:21 | <EvanR> | so it won't compile, but that's different from "does compile but is broken now" |
| 00:24:50 | <EvanR> | (because someone down the line could provide the requisite Num instance, but we based our decision on the fact that it doesn't and never will exist) |
| 00:27:18 | <newsham> | right, but, doesnt ghc statically determine at compile+link time which objects have the right type to meet the required type constraints and generate dictionaries for each applicable type that can be used at the call sites? there's never a case where ghc will compile code and determine at runtime if an object is `Show a` or not, right? |
| 00:27:41 | <EvanR> | the other thing is separate compilation |
| 00:28:12 | <EvanR> | so even if call site is in module A and polymorphic code is in module B, they need to be able to compile separately without knowing about each other yet |
| 00:28:30 | <newsham> | understood that at the point of compiling a single .sh into something like an .o, it might not have the full information. but by the time it is linked, it does, right? (maybe you're talking about dynamic linking here? or the `Dyn` type handling?) |
| 00:28:44 | <newsham> | single .hs (not .sh) |
| 00:28:57 | <EvanR> | so it should do what at link time |
| 00:29:07 | <geekosaur> | but that cannot go back and modify something that was compiled 6 months ago, which it would have to do |
| 00:29:44 | <newsham> | so at link time it could resolve a `class ~(Show a) => Unshowable a where ...` to construct an `Unshowable` dictionary. |
| 00:29:53 | <newsham> | if the language designers chose to |
| 00:30:18 | <geekosaur> | with a custom linker that understood how to write Haskell code and hotpatch a library written 6 months ago? |
| 00:30:31 | <geekosaur> | you're welcome to try to write such a linker |
| 00:30:43 | <newsham> | ok, I see where you're going with this. |
| 00:30:51 | <newsham> | its possible, but perhaps not practical |
| 00:31:31 | <geekosaur> | also said linker needs to deal with C++ templates, Rust, Go, etc. that might be linked into Haskell |
| 00:31:39 | <EvanR> | I have a feeling even if that were possible it would cause other problems |
| 00:31:42 | <newsham> | given that the compiler would like to build these class dictionaries in the object files where the class and instances were defined. |
| 00:31:42 | × | jackdk quits (sid373013@cssa/jackdk) (Server closed connection) |
| 00:31:51 | → | jackdk joins (sid373013@cssa/jackdk) |
| 00:31:52 | <geekosaur> | right now everyone uses the C linker, and nobody wants to change that |
| 00:32:17 | <geekosaur> | C++ has a bunch of template restrictions specifically so they don't have to do this either |
| 00:32:39 | <EvanR> | maybe a sane way to approach your feature would be a global "this type cannot possibly have an instance of class X" and this is communicated globally |
| 00:33:13 | <geekosaur> | but now it's not truly an open typeclass any more. (and indeed one way proposed for this is closed typeclasses) |
| 00:33:20 | <newsham> | i think I have a handle on the reasoning now. I'm not trying to propose this so much as understand the whys. |
| 00:33:22 | <EvanR> | but by itself it kind of sounds like "private" in oop |
| 00:33:42 | <EvanR> | a feature about lack of features |
| 00:34:23 | <newsham> | I guess to add to the reasoning, as types get more expressive, it might be easy to demonstrate that type P is inhabited, but not always possible to know if ~P. |
| 00:34:54 | <geekosaur> | it's doable but you need type witnesses at runtime, as I said earlier |
| 00:35:02 | <EvanR> | well data types are closed, the author designed it to serve a specific purpose and not to be appended to. Doing so could break invariants guaranteed by the type |
| 00:35:34 | → | acidjnk joins (~acidjnk@p200300d6e72b9352bd047a176d81e23c.dip0.t-ipconnect.de) |
| 00:35:54 | <geekosaur> | and it's a different kind of type witness than instance dictionaries |
| 00:36:07 | <geekosaur> | I've seen it but all I recall now is that it involved Refl |
| 00:36:23 | <geekosaur> | which … is useless for looking it up 🙂 |
| 00:38:06 | <EvanR> | newsham, have you seen the typeclasses vs the world video, I'd see which is the 4 or 5 cool things about type classes break if you manage to depend on the non-instance of something |
| 00:38:06 | → | falafel joins (~falafel@62.175.113.194.dyn.user.ono.com) |
| 00:38:08 | × | ProofTechnique_ quits (sid79547@id-79547.ilkley.irccloud.com) (Server closed connection) |
| 00:38:15 | <EvanR> | which of the* |
| 00:38:23 | → | ProofTechnique_ joins (sid79547@id-79547.ilkley.irccloud.com) |
| 00:38:27 | <newsham> | i havent |
| 00:38:35 | <geekosaur> | but that then raises another problem: since it can't be done with a class dictionary, either we now need two extra parameters only one of which is inhabited at runtime, or we need one that is somehow two types at the same time |
| 00:38:54 | <EvanR> | like the diamond dependency "problem" from multiple inheritance actually being not a problem and working perfectly in the type class world |
| 00:39:40 | <newsham> | geekosaur I dont buy that argument. if you're willing to let the compiler decide if a class exists or not, you could use it to construct a class/dictionary as a witness of it not existing. |
| 00:40:06 | <EvanR> | how do you witness the non-existence of something in haskell |
| 00:40:10 | <geekosaur> | so you've ignored the past 15 or so minutes? |
| 00:40:37 | <newsham> | no. i'm just saying I think this is something that could be implemented if it was something that compiler decided was worth implementing. |
| 00:41:17 | × | bcksl quits (end@user/bcksl) (Quit: \) |
| 00:41:35 | <newsham> | anyway, I think this argument is becoming unproductive, and I think I have found out what I was curious about. thank you for helping me along. |
| 00:42:15 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 00:42:16 | <geekosaur> | [07 00:35:54] <geekosaur> and it's a different kind of type witness than instance dictionaries |
| 00:42:39 | × | newsham quits (~newsham@2603-800c-2c01-6825-1540-4c8c-dd9a-bb11.res6.spectrum.com) (Quit: Client closed) |
| 00:43:06 | <geekosaur> | the typeclass dictionary approach only works if there are no "doesn't exist" constraints |
| 00:43:15 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: Lost terminal) |
| 00:43:52 | <geekosaur> | I don't know enough to say if some other approach would be possible, but I'm pretty sure it would come at a very high price relative to typeclass dictionaries |
| 00:43:58 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6dde:4903:7d59:6a8d) (Ping timeout: 272 seconds) |
| 00:44:23 | <EvanR> | maybe it would be productive to have an example use case |
| 00:44:59 | <EvanR> | if it's "default implementation for every type" it seems like there's a more straight forward way |
| 00:45:01 | → | bcksl joins (end@user/bcksl) |
| 00:45:13 | <EvanR> | other languages have that |
| 00:45:39 | <monochrom> | My view: "I have only 100 modules. Is it not possible for the compiler to check all 100 modules, see for itself that Int is not made a Foo instance, therefore it can safely support a way to say 'if Int is not Foo then here is how to make Int a Bar instance'?" Answer: Yes, you have just defeated separate compilation. |
| 00:45:49 | × | bcksl quits (end@user/bcksl) (Remote host closed the connection) |
| 00:46:05 | × | bliminse quits (~bliminse@user/bliminse) (Ping timeout: 240 seconds) |
| 00:46:08 | <monochrom> | The class system is open because it helps with separate compilation. |
| 00:46:40 | <monochrom> | With an open world, then Prolog's negation-as-failure cannot be relied on. |
| 00:48:20 | → | bliminse joins (~bliminse@user/bliminse) |
| 00:49:08 | <monochrom> | But hey! Separate compilation is also standing in the way of mutually import-each-other modules. Perhaps there is a venture for writing a Haskell compiler that has a NoSeparateCompilation extension, by which you can support both CWA and recursive modules. |
| 00:49:14 | <geekosaur> | he's already rejected that because the linker could be taught to rewrite code on the fly |
| 00:49:32 | → | bcksl joins (~bcksl@user/bcksl) |
| 00:49:37 | <monochrom> | Well yeah I wouldn't mind that. |
| 00:49:51 | <monochrom> | Now, who wrote that linker again? >:) |
| 00:50:42 | <geekosaur> | and how does that go if everyone writes their own linker to support all these pie-in-the-sky extensions (I already mentioned C++ template restrictions that come from the linker) |
| 00:50:53 | <c_wraith> | GHC's separate compilation leads to a few different cases where it technically violates the spec. |
| 00:51:33 | <monochrom> | In that case, we are saved by the brutal economic reality that everyone waits for someone else to do it, therefore nothing happens and no harm done. >:) |
| 00:51:36 | <c_wraith> | the lack of mutual imports is one. You can actually violate typeclass coherence without an error too. |
| 00:51:57 | × | John_Ivan quits (~John_Ivan@user/john-ivan/x-1515935) (Quit: Disrupting the dragon's slumber one time too often shall eventually bestow upon all an empirical and indiscriminate conflagration that will last for all goddamn eternity.) |
| 00:52:05 | <monochrom> | Corollary: This is why every real language is harmful. >:) |
| 00:52:52 | <geekosaur> | technically .hs-boot files make ghc spec-conformant there |
| 00:53:08 | <geekosaur> | it says they have to be supported somehow, possibly with extra information |
| 00:53:20 | <geekosaur> | it says nothing about sanity |
| 00:54:02 | <c_wraith> | well... those sure aren't sane! |
| 00:54:10 | <monochrom> | Also, a crazy Haskell compiler that says "put all modules in the same file" is compliant, too. >:) |
| 00:54:50 | <EvanR> | that strategy is viable over in C apparently |
| 00:55:02 | <EvanR> | but is somehow wildly less popular than put all code in one .h file |
| 00:55:53 | <c_wraith> | don't forget "put all your code in one .h file that you #include wherever you want to know about he library, and then define a special macro in one file to tell it to put all the definitions in that file." |
| 00:56:21 | <monochrom> | hehe |
| 00:57:07 | → | clxt joins (~cl_xt@2a09:bac5:9de2:1791::259:c1) |
| 00:57:49 | <EvanR> | separate compilation is a dead end goal |
| 00:58:14 | <geekosaur> | oh god I've seen code like that |
| 00:58:43 | <c_wraith> | one of my friends was telling me a library she was using did that. flecs, maybe? |
| 01:00:16 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
| 01:04:41 | × | falafel quits (~falafel@62.175.113.194.dyn.user.ono.com) (Ping timeout: 240 seconds) |
| 01:09:21 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 01:10:31 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 01:16:24 | → | newsham joins (~newsham@2603-800c-2c01-6825-1540-4c8c-dd9a-bb11.res6.spectrum.com) |
| 01:17:02 | × | hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Quit: Lost terminal) |
| 01:17:03 | <newsham> | " In the many cases in which monomorphization does succeed, it has the additional benefit of leading to very efficient code. |
| 01:17:03 | <newsham> | For instance, all dictionaries (used to implement type classes) are statically eliminated by partial evaluation" |
| 01:17:36 | <newsham> | so the knowledge of "x :: P" can be lost at this stage of compilation. |
| 01:18:41 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Ping timeout: 240 seconds) |
| 01:19:57 | × | JSharp quits (sid4580@id-4580.lymington.irccloud.com) (Server closed connection) |
| 01:20:15 | → | JSharp joins (sid4580@id-4580.lymington.irccloud.com) |
| 01:21:09 | × | clxt quits (~cl_xt@2a09:bac5:9de2:1791::259:c1) () |
| 01:23:27 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 01:25:40 | <geekosaur> | or not known in the first place. `show (Just x) = "Just " ++ show x` — `x` is polymorphic and the dictionary can't be eliminated. (this isn't actually how `Show` works but is simplified) |
| 01:26:29 | <geekosaur> | I left out the showsPrec stuff that uses a dlist rather than append, and deals with inserting parentheses for precedence |
| 01:26:48 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Ping timeout: 260 seconds) |
| 01:30:27 | × | Axman6 quits (~Axman6@user/axman6) (Server closed connection) |
| 01:34:35 | <newsham> | my point above is that it is convenient in separate compilation to perform optimizations on a per-file basis that removes knowledge that "x :: P". it could in theory be preserved and kept til linking time. |
| 01:35:45 | <EvanR> | there are link time optimizations, cross module inlining at least |
| 01:36:04 | <newsham> | ghc knows "x :: P" for all the "x" in the program at some point, but forgets some of it during separate compilation. for any decidable "P" (ghc supprots undecidable types), it could in theory preserve knowledge of all "x :: P" until link time, and compute any "x :: ~P" at link time. |
| 01:36:37 | <newsham> | but it doesnt do that |
| 01:36:59 | <geekosaur> | and never will because a haskell-only linker is no-go |
| 01:37:38 | <geekosaur> | in a world where people expect to link haskell, C, Rust, Go, etc. together, custom per-language linkers are not and cannot be a thing |
| 01:37:54 | <geekosaur> | it's bad enough that ghc needs hacks to allow linking with C++ |
| 01:39:03 | <geekosaur> | hacks which don't scale once you want to link Rust into it |
| 01:39:15 | × | degraafk quits (sid71464@id-71464.lymington.irccloud.com) (Server closed connection) |
| 01:39:24 | → | degraafk joins (sid71464@id-71464.lymington.irccloud.com) |
| 01:40:19 | <newsham> | "and never will" is probably right. "cannot be a thing" is not correct. but off topic. |
| 01:41:07 | <geekosaur> | cannot viablybe a thing |
| 01:41:32 | <geekosaur> | can be a thing if Haskell is to play only with itself, including a severly crippled FFI |
| 01:41:53 | <geekosaur> | this is not a world anyone wants, so it will never happen |
| 01:42:03 | × | Athas quits (athas@2a01:7c8:aaac:1cf:d300:623e:69e4:545f) (Quit: ZNC 1.8.2 - https://znc.in) |
| 01:42:12 | → | Athas joins (athas@2a01:7c8:aaac:1cf:d300:623e:69e4:545f) |
| 01:42:17 | <newsham> | there is a world of things that are possible to do but will not likely be done. |
| 01:42:27 | <geekosaur> | one way or another, you need a closed world. either a closed typeclass, or a closed Haskell |
| 01:42:46 | <monochrom> | OK Copenhagen vs Multiple World, anyone? >:) |
| 01:43:06 | <geekosaur> | like there's an actual difference? |
| 01:43:16 | <geekosaur> | one's the other in a mirror |
| 01:44:10 | <EvanR> | still wondering what the not constraint is for |
| 01:44:48 | <geekosaur> | uh, he's said multiple times, he wants ~(Show x) |
| 01:45:03 | <EvanR> | if there's a convincing use case we can just use a kennedy speech to argue that it should be done even if it's ridiculously hard |
| 01:45:08 | <newsham> | that was the motivation behind the musing. |
| 01:45:12 | <EvanR> | yeah but why |
| 01:45:39 | <EvanR> | is it a default implementation of show or something |
| 01:45:41 | <monochrom> | Wait, I thought Kennedy argued that there was no use case. >:) |
| 01:45:45 | <newsham> | *sigh* I was just trying to understand the practical reasons why it is not supported and/or not easily supported. my questions are already answered. i'm still musing. |
| 01:46:05 | <EvanR> | because we have existing shenanigans to force default Show |
| 01:46:25 | <newsham> | there exists use cases. whether they are worthwhile is a value judgement and an engineering judgement. |
| 01:46:38 | <EvanR> | is this a classical existence? xD |
| 01:46:47 | <EvanR> | use cases exist, trust me |
| 01:47:28 | <newsham> | constructively one use case would be to implement show for non-showables without other hackery. |
| 01:48:00 | <EvanR> | you're negating the show constraint as well as all other ways of doing that |
| 01:48:32 | <EvanR> | I have a positive version: use idris where everything can be shown without any code at all, it's built in |
| 01:48:39 | <EvanR> | it's nice |
| 01:48:58 | <EvanR> | I 3/4 seriously wish haskell had this |
| 01:49:09 | <newsham> | "use cases exist -- here is one, which might not be very motivating, but it does exist" |
| 01:49:23 | <EvanR> | yeah I already guessed that on |
| 01:49:59 | <newsham> | excludedMiddle :: Either P ~P |
| 01:50:08 | <newsham> | now i classic logic much? |
| 01:50:26 | <EvanR> | yeah I don't think ghc can do that |
| 01:50:53 | <newsham> | and around we go |
| 01:51:07 | <newsham> | I guess it keeps the conversation going |
| 01:51:18 | <EvanR> | solve the collatz conjecture please ghc |
| 01:52:57 | <newsham> | Decidable P => |
| 01:59:55 | × | xff0x quits (~xff0x@2405:6580:b080:900:1034:83b0:f1e0:db5e) (Ping timeout: 258 seconds) |
| 02:00:18 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 02:00:46 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:04:38 | → | paddymahoney joins (~paddymaho@cpe883d24bcf597-cmbc4dfb741f80.cpe.net.cable.rogers.com) |
| 02:09:17 | × | dispater quits (~dispater@mail.brprice.uk) (Server closed connection) |
| 02:09:37 | → | dispater joins (~dispater@mail.brprice.uk) |
| 02:15:54 | <dibblego> | data Blah a = Blah -- remind me again that name of this data type please |
| 02:16:27 | <geekosaur> | Proxy? |
| 02:18:04 | <monochrom> | Yeah, Proxy :) |
| 02:18:26 | <monochrom> | The unit functor, applicative, monad. >:) |
| 02:19:40 | <monochrom> | I do not like the following argument, it feels disingenious to me, but the type can be used to refute "monad wraps/contains value to be extracted". :) |
| 02:20:00 | <monochrom> | where "can" = some people buy that argument |
| 02:22:21 | × | otto_s quits (~user@p5de2ff30.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 02:22:55 | <monochrom> | Another trivia pursuit: Moggi's monad papers add a technical definition on top of monads. It's rather long, but an easy corollary is that pure is injective. So Proxy does not satisfy the extra definition. This is reasonable in the papers, the focus is on monads that stand for non-trivial program semantics. |
| 02:24:17 | → | otto_s joins (~user@p4ff276b4.dip0.t-ipconnect.de) |
| 02:30:39 | × | newsham quits (~newsham@2603-800c-2c01-6825-1540-4c8c-dd9a-bb11.res6.spectrum.com) (Ping timeout: 248 seconds) |
| 02:30:57 | <hammond> | cd 4 |
| 02:36:05 | → | mrmr15537 joins (~mrmr@user/mrmr) |
| 02:36:55 | × | mrmr1553 quits (~mrmr@user/mrmr) (Ping timeout: 255 seconds) |
| 02:36:55 | mrmr15537 | is now known as mrmr1553 |
| 02:37:21 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 240 seconds) |
| 02:39:21 | → | ddellacosta joins (~ddellacos@ool-44c738de.dyn.optonline.net) |
| 02:40:44 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6dde:4903:7d59:6a8d) |
| 02:45:30 | × | Athas quits (athas@2a01:7c8:aaac:1cf:d300:623e:69e4:545f) (Quit: ZNC 1.8.2 - https://znc.in) |
| 02:45:39 | → | Athas joins (athas@sigkill.dk) |
| 02:49:05 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 02:49:46 | → | Inst joins (~Inst@120.244.192.250) |
| 02:51:16 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6dde:4903:7d59:6a8d) (Ping timeout: 272 seconds) |
| 02:53:04 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 02:53:16 | <dibblego> | thank ya |
| 02:53:37 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 03:00:18 | → | Axman6 joins (~Axman6@user/axman6) |
| 03:05:59 | × | edr quits (~edr@user/edr) (Quit: Leaving) |
| 03:06:38 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:06:38 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 03:06:38 | finn_elija | is now known as FinnElija |
| 03:09:48 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 256 seconds) |
| 03:11:19 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 264 seconds) |
| 03:13:01 | <lockywolf> | Is it possible to use Cabal to install a different version of GHC locally? |
| 03:13:19 | × | pixelmonk quits (~pixelmonk@173.46.79.26) (Quit: WeeChat 4.1.0) |
| 03:14:14 | <monochrom> | No. |
| 03:17:36 | <dibblego> | ghcup |
| 03:19:01 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:19:39 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 03:20:03 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:22:11 | × | AndreasK quits (sid320732@id-320732.uxbridge.irccloud.com) (Server closed connection) |
| 03:22:20 | → | AndreasK joins (sid320732@id-320732.uxbridge.irccloud.com) |
| 03:33:31 | × | isekaijin quits (~user@user/isekaijin) (Quit: brb) |
| 03:38:15 | → | Pozyomka joins (~pyon@user/pyon) |
| 03:48:41 | × | td_ quits (~td@i53870926.versanet.de) (Ping timeout: 240 seconds) |
| 03:50:45 | → | td_ joins (~td@i5387090C.versanet.de) |
| 03:51:00 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 04:01:12 | × | qhong quits (~qhong@rescomp-21-400677.stanford.edu) (Read error: Connection reset by peer) |
| 04:01:16 | → | qhong_ joins (~qhong@DN160vrd000d6kpg009l6c0000fj.stanford.edu) |
| 04:33:52 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 04:35:01 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 04:41:28 | × | waleee quits (~waleee@h-176-10-144-38.na.cust.bahnhof.se) (Ping timeout: 272 seconds) |
| 04:42:09 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
| 04:42:40 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 04:45:30 | → | aforemny joins (~aforemny@i59F516D1.versanet.de) |
| 04:45:54 | × | aforemny_ quits (~aforemny@2001:9e8:6cd9:8900:f44b:90af:4c17:1875) (Ping timeout: 258 seconds) |
| 04:46:54 | × | natto quits (~natto@129.154.243.159) (Server closed connection) |
| 04:48:48 | → | natto joins (~natto@129.154.243.159) |
| 04:51:01 | → | qqq joins (~qqq@92.43.167.61) |
| 05:02:56 | × | sudden quits (~cat@user/sudden) (Quit: leaving) |
| 05:03:17 | → | trev joins (~trev@user/trev) |
| 05:03:32 | → | sudden joins (~cat@user/sudden) |
| 05:04:26 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 05:21:18 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 255 seconds) |
| 05:27:58 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 05:27:58 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 05:28:23 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 05:28:24 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 05:28:32 | → | Inst joins (~Inst@120.244.192.250) |
| 05:40:34 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 05:46:46 | <lockywolf> | Can somebody have a look at this pull request and tell me what is wrong with it? https://github.com/haskell/hackage-server/pull/1262 |
| 05:55:16 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 05:59:53 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
| 06:04:49 | → | Lycurgus joins (~georg@li1192-118.members.linode.com) |
| 06:04:49 | × | Lycurgus quits (~georg@li1192-118.members.linode.com) (Changing host) |
| 06:04:49 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 06:06:21 | × | Square quits (~Square@user/square) (Ping timeout: 240 seconds) |
| 06:08:31 | × | thegman quits (~thegman@072-239-207-086.res.spectrum.com) (Quit: leaving) |
| 06:15:53 | × | Fangs quits (sid141280@2a03:5180:f:4::2:27e0) (Server closed connection) |
| 06:16:05 | → | Fangs joins (sid141280@id-141280.hampstead.irccloud.com) |
| 06:24:41 | × | ACuriousMoose quits (~ACuriousM@142.166.18.53) (Ping timeout: 240 seconds) |
| 06:26:37 | × | cjay quits (cjay@nerdbox.nerd2nerd.org) (Server closed connection) |
| 06:26:45 | → | cjay joins (cjay@nerdbox.nerd2nerd.org) |
| 06:27:27 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:29:01 | → | harveypwca joins (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) |
| 06:32:24 | <Inst> | quick question about the m word, is it right to have an intuition that the identity laws are primarily about pure / return, not bind? |
| 06:32:29 | <Inst> | yes, bind / join has to be part of it |
| 06:32:34 | → | michalz joins (~michalz@185.246.207.201) |
| 06:32:47 | <Inst> | but it's basically saying that there has to be an identity configuration of the type |
| 06:33:07 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection) |
| 06:33:25 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 06:34:47 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 06:35:23 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 06:36:21 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 07:00:11 | → | Square2 joins (~Square4@user/square) |
| 07:00:55 | × | ysh____ quits (sid6017@id-6017.ilkley.irccloud.com) (Server closed connection) |
| 07:01:05 | → | ysh____ joins (sid6017@id-6017.ilkley.irccloud.com) |
| 07:01:43 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 07:05:36 | × | gdown quits (~gavin@h69-11-149-109.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection) |
| 07:07:46 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:13:16 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 07:26:39 | × | lightandlight quits (sid135476@id-135476.helmsley.irccloud.com) (Server closed connection) |
| 07:26:48 | → | lightandlight joins (sid135476@id-135476.helmsley.irccloud.com) |
| 07:33:33 | → | chele joins (~chele@user/chele) |
| 07:34:53 | → | gmg joins (~user@user/gehmehgeh) |
| 07:35:17 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 07:41:51 | → | lortabac joins (~lorenzo@2a01:e0a:541:b8f0:8e88:94cf:6ada:183f) |
| 07:54:01 | → | catac joins (~Adium@121.145.15.50) |
| 07:57:20 | → | fendor joins (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) |
| 07:59:06 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 258 seconds) |
| 08:02:02 | × | lexi-lambda quits (sid92601@id-92601.hampstead.irccloud.com) (Server closed connection) |
| 08:02:11 | → | lexi-lambda joins (sid92601@id-92601.hampstead.irccloud.com) |
| 08:05:15 | × | dsal quits (sid13060@id-13060.lymington.irccloud.com) (Server closed connection) |
| 08:05:24 | → | dsal joins (sid13060@id-13060.lymington.irccloud.com) |
| 08:07:00 | × | fendor quits (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) (Remote host closed the connection) |
| 08:08:00 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 08:08:08 | → | fendor joins (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) |
| 08:09:20 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:11:12 | → | EvanR_ joins (~EvanR@user/evanr) |
| 08:11:44 | × | EvanR quits (~EvanR@user/evanr) (Ping timeout: 272 seconds) |
| 08:13:26 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:19:53 | × | tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
| 08:21:20 | × | yandere quits (sid467876@id-467876.ilkley.irccloud.com) (Server closed connection) |
| 08:21:30 | → | yandere joins (sid467876@id-467876.ilkley.irccloud.com) |
| 08:24:33 | × | mustafa quits (sid502723@rockylinux/releng/mustafa) (Server closed connection) |
| 08:24:45 | → | mustafa joins (sid502723@rockylinux/releng/mustafa) |
| 08:25:15 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 08:26:07 | × | adanwan_ quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 08:26:35 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 08:30:41 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 240 seconds) |
| 08:33:10 | × | harveypwca quits (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) (Quit: Leaving) |
| 08:34:44 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 08:34:52 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 08:38:17 | → | oo_miguel joins (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
| 08:40:37 | → | Jackneill_ joins (~Jackneill@20014C4E1E058A00193351DCDA9024FA.dsl.pool.telekom.hu) |
| 08:48:10 | ← | catac parts (~Adium@121.145.15.50) () |
| 08:51:05 | → | alp joins (~alp@2001:861:5e02:eff0:7717:48d8:8dae:8ad2) |
| 08:51:24 | × | alp quits (~alp@2001:861:5e02:eff0:7717:48d8:8dae:8ad2) (Changing host) |
| 08:51:24 | → | alp joins (~alp@user/alp) |
| 08:53:54 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 08:54:35 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Server closed connection) |
| 08:54:59 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 08:56:21 | → | Guest|52 joins (~Guest|52@1-36-218-010.ptr.netvigator.com) |
| 09:04:14 | × | andjjj23 quits (~irc@107.170.228.47) (Server closed connection) |
| 09:04:32 | → | andjjj23 joins (~irc@107.170.228.47) |
| 09:04:38 | <tomsmeding> | @tell Inst are the identity laws of a Monoid, i.e. mempty <> x = x = x <> mempty, primarily about mempty? |
| 09:04:38 | <lambdabot> | Consider it noted. |
| 09:07:33 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 09:09:40 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6dde:4903:7d59:6a8d) |
| 09:10:40 | × | s4msung quits (pcWAavz3xz@user/s4msung) (Server closed connection) |
| 09:10:59 | → | s4msung joins (RZuYfCKc6a@user/s4msung) |
| 09:16:01 | × | chessai quits (sid225296@id-225296.lymington.irccloud.com) (Server closed connection) |
| 09:16:11 | → | chessai joins (sid225296@id-225296.lymington.irccloud.com) |
| 09:16:35 | → | eso joins (a0662dfd5e@2604:bf00:561:2000::1266) |
| 09:18:23 | → | eggplant_ joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 09:19:35 | × | Guest|52 quits (~Guest|52@1-36-218-010.ptr.netvigator.com) (Ping timeout: 252 seconds) |
| 09:20:08 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6dde:4903:7d59:6a8d) (Ping timeout: 252 seconds) |
| 09:29:17 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 09:43:55 | → | Inst joins (~Inst@120.244.192.250) |
| 09:49:00 | <Inst> | That's interesting @tomsmeding |
| 09:49:28 | <Inst> | I guess there's probably also a semigroup equivalent of monad, no? |
| 09:52:12 | → | danse-nr3 joins (~danse@151.47.127.210) |
| 09:52:36 | <ncf> | Bind |
| 09:53:57 | <Inst> | i mean associative without an identity element, but pure / eta is identity if you see monads as a monoid in the category of endofunctor |
| 09:54:10 | <Inst> | in other words, no pure / return / eta, only bind / join / map |
| 09:54:53 | <ncf> | yes, that's Bind from semigroupoids |
| 09:56:15 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 09:57:20 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 10:01:23 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds) |
| 10:02:05 | × | ubert quits (~Thunderbi@77.119.202.170.wireless.dyn.drei.com) (Ping timeout: 240 seconds) |
| 10:05:27 | → | ubert joins (~Thunderbi@77.119.214.97.wireless.dyn.drei.com) |
| 10:07:43 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 264 seconds) |
| 10:13:40 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 256 seconds) |
| 10:14:48 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 256 seconds) |
| 10:20:01 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 10:21:01 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 10:23:17 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 10:28:04 | → | arahael joins (~arahael@1.145.70.153) |
| 10:31:37 | <Inst> | https://hackage.haskell.org/package/semigroupoids-6.0.0.1/docs/Data-Functor-Bind.html#t:Bind |
| 10:34:06 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 10:40:44 | × | robertm quits (robertm@lattice.rojoma.com) (Server closed connection) |
| 10:41:06 | → | robertm joins (robertm@lattice.rojoma.com) |
| 10:41:21 | × | arahael quits (~arahael@1.145.70.153) (Ping timeout: 240 seconds) |
| 10:58:49 | → | lg188 joins (~lg188@82.18.98.230) |
| 10:59:53 | × | _0xa_ quits (~user@2001:19f0:5001:2ba8:5400:1ff:feda:88fc) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 11:01:26 | → | _0xa joins (~user@2001:19f0:5001:2ba8:5400:1ff:feda:88fc) |
| 11:01:26 | × | _0xa quits (~user@2001:19f0:5001:2ba8:5400:1ff:feda:88fc) (Changing host) |
| 11:01:26 | → | _0xa joins (~user@user/0xa/x-3134607) |
| 11:02:10 | × | shawwwn quits (sid6132@id-6132.helmsley.irccloud.com) (Server closed connection) |
| 11:02:19 | → | shawwwn joins (sid6132@id-6132.helmsley.irccloud.com) |
| 11:12:21 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 240 seconds) |
| 11:13:17 | × | ft quits (~ft@p4fc2a529.dip0.t-ipconnect.de) (Quit: leaving) |
| 11:14:06 | → | mmhat joins (~mmh@p200300f1c7445e14ee086bfffe095315.dip0.t-ipconnect.de) |
| 11:14:36 | → | xff0x joins (~xff0x@2405:6580:b080:900:c499:902e:6f70:c890) |
| 11:15:45 | × | mmhat quits (~mmh@p200300f1c7445e14ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
| 11:19:58 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 256 seconds) |
| 11:21:46 | × | _0xa quits (~user@user/0xa/x-3134607) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 11:22:52 | → | _0xa joins (~user@2001:19f0:5001:2ba8:5400:1ff:feda:88fc) |
| 11:22:52 | × | _0xa quits (~user@2001:19f0:5001:2ba8:5400:1ff:feda:88fc) (Changing host) |
| 11:22:52 | → | _0xa joins (~user@user/0xa/x-3134607) |
| 11:23:01 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds) |
| 11:25:19 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 11:28:28 | → | __monty__ joins (~toonn@user/toonn) |
| 11:31:07 | × | dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (Server closed connection) |
| 11:31:34 | → | dmj` joins (sid72307@id-72307.hampstead.irccloud.com) |
| 11:32:49 | → | Inst joins (~Inst@120.244.192.250) |
| 11:43:24 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 11:47:05 | → | idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 12:05:49 | → | steew joins (~steew@user/steew) |
| 12:07:35 | × | tomku quits (~tomku@user/tomku) (Server closed connection) |
| 12:07:49 | → | tomku joins (~tomku@user/tomku) |
| 12:17:07 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 12:24:08 | × | alp quits (~alp@user/alp) (Quit: Leaving) |
| 12:24:23 | → | alp joins (~alp@2001:861:5e02:eff0:7717:48d8:8dae:8ad2) |
| 12:25:48 | × | Boarders___ quits (sid425905@id-425905.lymington.irccloud.com) (Server closed connection) |
| 12:26:11 | → | Boarders___ joins (sid425905@id-425905.lymington.irccloud.com) |
| 12:26:25 | × | ddellacosta quits (~ddellacos@ool-44c738de.dyn.optonline.net) (Ping timeout: 255 seconds) |
| 12:28:57 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 12:31:29 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 12:40:46 | → | ddellacosta joins (~ddellacos@2607:fb90:df95:5632:ce76:6ed1:85ad:5fc9) |
| 12:40:54 | → | edr joins (~edr@user/edr) |
| 12:41:15 | → | chomwitt joins (~chomwitt@94.66.63.70) |
| 12:41:53 | × | SanchayanMaity quits (sid478177@id-478177.hampstead.irccloud.com) (Server closed connection) |
| 12:42:03 | → | SanchayanMaity joins (sid478177@id-478177.hampstead.irccloud.com) |
| 12:50:26 | × | danse-nr3 quits (~danse@151.47.127.210) (Ping timeout: 258 seconds) |
| 13:01:33 | × | alp quits (~alp@2001:861:5e02:eff0:7717:48d8:8dae:8ad2) (Ping timeout: 260 seconds) |
| 13:04:43 | × | ddellacosta quits (~ddellacos@2607:fb90:df95:5632:ce76:6ed1:85ad:5fc9) (Ping timeout: 264 seconds) |
| 13:07:37 | × | lally quits (sid388228@id-388228.uxbridge.irccloud.com) (Server closed connection) |
| 13:07:46 | → | lally joins (sid388228@id-388228.uxbridge.irccloud.com) |
| 13:17:16 | × | NiKaN quits (sid385034@id-385034.helmsley.irccloud.com) (Server closed connection) |
| 13:17:26 | → | danse-nr3 joins (~danse@151.35.103.37) |
| 13:17:56 | → | NiKaN joins (sid385034@id-385034.helmsley.irccloud.com) |
| 13:21:05 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 13:21:58 | → | img joins (~img@user/img) |
| 13:24:47 | × | nshepperd2 quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Server closed connection) |
| 13:25:02 | → | nshepperd2 joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 13:26:55 | × | doyougnu- quits (~doyougnu@45.46.170.68) (Ping timeout: 264 seconds) |
| 13:33:37 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 13:34:54 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 13:36:47 | × | fendor quits (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) (Remote host closed the connection) |
| 13:37:43 | × | chomwitt quits (~chomwitt@94.66.63.70) (Ping timeout: 264 seconds) |
| 13:37:49 | → | aliosablack joins (~chomwitt@ppp-94-67-201-151.home.otenet.gr) |
| 13:38:20 | → | fendor joins (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) |
| 13:42:57 | × | aliosablack quits (~chomwitt@ppp-94-67-201-151.home.otenet.gr) (Ping timeout: 258 seconds) |
| 13:47:55 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 264 seconds) |
| 13:57:32 | × | sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection) |
| 13:57:47 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 13:59:47 | × | gooba_ quits (~gooba@90-231-13-185-no3430.tbcn.telia.com) (Quit: Leaving) |
| 14:00:02 | → | gooba joins (~gooba@90-231-13-185-no3430.tbcn.telia.com) |
| 14:00:13 | → | sefidel joins (~sefidel@user/sefidel) |
| 14:02:43 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 14:05:11 | × | gooba quits (~gooba@90-231-13-185-no3430.tbcn.telia.com) (Remote host closed the connection) |
| 14:05:33 | → | gooba joins (~gooba@90-231-13-185-no3430.tbcn.telia.com) |
| 14:08:58 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 14:13:29 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 14:14:20 | → | notzmv joins (~zmv@user/notzmv) |
| 14:24:49 | × | caasih quits (sid13241@id-13241.ilkley.irccloud.com) (Server closed connection) |
| 14:24:59 | → | caasih joins (sid13241@id-13241.ilkley.irccloud.com) |
| 14:26:11 | → | zetef joins (~quassel@95.77.17.251) |
| 14:26:45 | → | aliosablack joins (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) |
| 14:30:51 | → | lhpitn joins (~tn@mail.lebenshilfe-pi.de) |
| 14:31:07 | × | lhpitn quits (~tn@mail.lebenshilfe-pi.de) (Remote host closed the connection) |
| 14:31:26 | × | aliosablack quits (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 252 seconds) |
| 14:31:29 | → | lhpitn joins (~tn@31.172.106.163.static-pppoe.dt.ipv4.wtnet.de) |
| 14:36:31 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 264 seconds) |
| 14:49:42 | → | notzmv joins (~zmv@user/notzmv) |
| 14:50:31 | → | Lycurgus joins (~georg@user/Lycurgus) |
| 14:53:32 | ← | elevenkb parts (elevenkb@thunix.net) (ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1)) |
| 15:04:48 | → | billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) |
| 15:07:43 | → | ddellacosta joins (~ddellacos@146.70.165.106) |
| 15:17:04 | → | rosco joins (~rosco@yp-150-69.tm.net.my) |
| 15:18:11 | × | ddellacosta quits (~ddellacos@146.70.165.106) (Ping timeout: 252 seconds) |
| 15:19:43 | × | rosco quits (~rosco@yp-150-69.tm.net.my) (Remote host closed the connection) |
| 15:20:11 | × | Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving) |
| 15:22:58 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 15:23:07 | → | fweht joins (uid404746@id-404746.lymington.irccloud.com) |
| 15:31:57 | × | Square2 quits (~Square4@user/square) (Remote host closed the connection) |
| 15:36:56 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 15:43:30 | × | Pozyomka quits (~pyon@user/pyon) (Quit: brb) |
| 15:43:39 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
| 15:44:12 | → | Pozyomka joins (~pyon@user/pyon) |
| 15:48:47 | → | tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
| 16:00:22 | × | Pozyomka quits (~pyon@user/pyon) (Quit: brb) |
| 16:00:50 | → | Pozyomka joins (~pyon@user/pyon) |
| 16:09:20 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 252 seconds) |
| 16:13:10 | → | aliosablack joins (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) |
| 16:19:22 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 16:20:41 | × | zetef quits (~quassel@95.77.17.251) (Remote host closed the connection) |
| 16:21:05 | × | aliosablack quits (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 240 seconds) |
| 16:23:41 | × | danse-nr3 quits (~danse@151.35.103.37) (Ping timeout: 240 seconds) |
| 16:25:51 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: WeeChat 4.1.0) |
| 16:27:24 | × | lortabac quits (~lorenzo@2a01:e0a:541:b8f0:8e88:94cf:6ada:183f) (Ping timeout: 258 seconds) |
| 16:30:01 | → | danse-nr3 joins (~danse@151.35.103.37) |
| 16:41:26 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 16:41:50 | <Inst> | https://media.discordapp.net/attachments/531640671149359108/1171489169416134716/image.png?ex=655cdd4f&is=654a684f&hm=4cbfb7e6ec17734e88e1bfc7a563a60b1f3d398edf873740527f6284a30d8229&=&width=850&height=842 |
| 16:41:57 | <Inst> | hmmm, it's impossible to get a random type, right? |
| 16:42:48 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 16:43:06 | <Inst> | since types don't exist at runtime (unless you're using typeable / dynamic, iirc) |
| 16:44:45 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 16:46:12 | → | zetef joins (~quassel@5.2.182.98) |
| 16:47:16 | → | alp joins (~alp@2001:861:5e02:eff0:40fb:3515:43ea:e419) |
| 16:49:57 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 16:49:57 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 16:53:08 | × | eggplant_ quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:53:24 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6d7a:4eb0:231d:253f) |
| 16:53:25 | <danse-nr3> | but values exist at runtime, and they might belong to different types |
| 16:53:47 | <EvanR_> | types as such still don't exist at runtime even with typeable dynamic, but their value level representatives do |
| 16:54:44 | <EvanR_> | it appears you're trying to get a random value of type Int not a random type |
| 16:54:49 | EvanR_ | is now known as EvanR |
| 16:56:22 | <exarkun> | It's not really clear what the image has to do with the question, really |
| 16:56:41 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 16:57:08 | <exarkun> | And it is certainly possible to get a random type - here you go, GHC.Cmm.Expr.Area |
| 16:59:04 | <EvanR> | xkcd certified random |
| 17:00:48 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:00:54 | <monochrom> | :) |
| 17:01:33 | <monochrom> | Probably XY problem too. |
| 17:04:04 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:05:44 | → | AlexNoo_ joins (~AlexNoo@94.233.241.129) |
| 17:06:08 | × | billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Remote host closed the connection) |
| 17:07:56 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 17:08:40 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 17:09:03 | × | AlexZenon quits (~alzenon@178.34.161.199) (Ping timeout: 240 seconds) |
| 17:09:11 | × | AlexNoo quits (~AlexNoo@178.34.161.199) (Ping timeout: 258 seconds) |
| 17:10:19 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 17:10:57 | × | zetef quits (~quassel@5.2.182.98) (Ping timeout: 255 seconds) |
| 17:13:31 | × | danse-nr3 quits (~danse@151.35.103.37) (Ping timeout: 255 seconds) |
| 17:13:45 | → | danse-nr3 joins (~danse@151.43.104.61) |
| 17:16:25 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:17:37 | → | AlexZenon joins (~alzenon@94.233.241.129) |
| 17:22:44 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:27:23 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 17:29:05 | × | jjhoo quits (jahakala@user/jjhoo) (Remote host closed the connection) |
| 17:30:24 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 17:31:10 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:33:32 | AlexNoo_ | is now known as AlexNoo |
| 17:34:56 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 17:35:18 | → | califax joins (~califax@user/califx) |
| 17:35:27 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:36:02 | → | aliosablack joins (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) |
| 17:36:09 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 17:36:38 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:37:01 | → | jjhoo joins (~jahakala@user/jjhoo) |
| 17:39:01 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 17:40:14 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:41:13 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 17:43:41 | × | Inst quits (~Inst@120.244.192.250) (Ping timeout: 240 seconds) |
| 17:44:18 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:44:39 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:45:35 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 17:46:01 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
| 17:47:02 | → | euleritian joins (~euleritia@dynamic-046-114-204-198.46.114.pool.telefonica.de) |
| 17:47:45 | <EvanR> | lets talk about parsers and laziness. In a bog standard parser you have something like ByteString -> Either ParseError a, internally using parsec or something. Let's say you're parsing a big sequence of things. You can't start to process any of the things until this thing resolves to a Left or Right. Since the last item could be borked. Meanwhile you use a lot of memory storing up a big list of things |
| 17:48:40 | <EvanR> | Otoh if you know the parse won't fail, you could make a lazy ByteString -> [Thing] and use less memory |
| 17:49:10 | → | ski joins (~ski@88.131.7.247) |
| 17:49:16 | <geekosaur> | isn't the popint of a parser that you process as you go and throw it out on error? |
| 17:49:20 | <EvanR> | so dumb idea, first run a "would parse" pass which doesn't yield anything except yes or no, then start over, reopen the file, regenerate the bytestring, and parse lazily |
| 17:49:53 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:49:58 | <geekosaur> | race condition ahoy! |
| 17:50:09 | <EvanR> | both steps presumably run without using much memory |
| 17:50:35 | <EvanR> | oh yeah, if someone edits the file between the two steps |
| 17:52:09 | <ski> | ("popint" ?) |
| 17:52:10 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 17:52:24 | geekosaur | can't type |
| 17:52:28 | <geekosaur> | "point" |
| 17:52:34 | <EvanR> | it was a type error |
| 17:52:54 | ski | was confused |
| 17:53:05 | × | euleritian quits (~euleritia@dynamic-046-114-204-198.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 17:53:23 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 17:54:05 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:54:19 | <danse-nr3> | not sure which train of thoughts you are following, but that leading to "do the parse, then open the file again" sounds not promising |
| 17:54:32 | <EvanR> | or seek back to the beginning |
| 17:54:52 | <geekosaur> | anyway how does this situation differ from any compiler, which has to build the AST first and then modify it. especially relevant to GHC which has to e.g. apply fixity in a post-processing pass |
| 17:55:31 | <EvanR> | that depends on what the next step of processing would have been, if it can't be lazy it can't be lazy anyway |
| 17:56:22 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 17:56:22 | <geekosaur> | if you're relying on the last thing in the file parsing, arguably you can't really be lazy |
| 17:56:55 | <EvanR> | if you know the last thing in file would parse, somehow, you can! |
| 17:57:19 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 17:59:14 | × | drewjose quits (~drewjose@129.154.40.88) (Ping timeout: 245 seconds) |
| 17:59:19 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 18:01:39 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:01:44 | <ski> | EvanR : you want some kind of `foldParse' ? |
| 18:02:23 | <EvanR> | :t foldMap |
| 18:02:24 | <lambdabot> | (Foldable t, Monoid m) => (a -> m) -> t a -> m |
| 18:02:35 | yin | is now known as zzz |
| 18:04:22 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
| 18:04:44 | <ski> | something like `foldParse :: (o -> a -> o) -> o -> Parser a -> ByteString -> Either ParseError o', maybe ? |
| 18:05:07 | <monochrom> | It is true that Parsec etc are not lazy (or rather, are not streaming). They were invented for compiler-like use cases where for the rest of the computation, it is acceptable, even necessary, to hold in memory the entirety of some data structure equivalent to the whole input, so there is no point trying to stream (unless you really need to cut down memory footprint from 2n to n, say). |
| 18:05:09 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 18:05:34 | <monochrom> | However, since then, attoparsec etc have already offered streaming options. |
| 18:06:22 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:06:43 | <EvanR> | attoparsec can incrementally be fed input, but there is still no partial results, for a programming language you'd return a whole AST, or if it's a simple list of input items, you'd construct a big list |
| 18:06:50 | <EvanR> | so streaming in but not out |
| 18:07:22 | <EvanR> | grokking foldParse |
| 18:08:11 | <monochrom> | It's also pretty easy to roll your own poor person's streaming for a simple list of items. You run Parsec once per item, not the whole list. |
| 18:08:32 | → | gmg joins (~user@user/gehmehgeh) |
| 18:08:44 | <monochrom> | Then couple that with I/O streaming, e.g., fmap lines getContents or pipes or conduit or... |
| 18:08:58 | <ski> | EvanR : basically `foldl'ing your list of results, except doing it upfront, internally, as each successive item is available, rather than at the end, after getting the whole list |
| 18:09:09 | <EvanR> | now given the thesis that you know it would parse, parsec would work, but now it's doing a bunch of expensive stuff for nothing |
| 18:09:24 | <danse-nr3> | "no partial result", but isn't this the goal of non-strict parsing in the first place? I thought you wanted strict parsing |
| 18:10:01 | <ski> | (what does "strict" vs. "non-strict" mean in this context ?) |
| 18:10:11 | <monochrom> | hee hee |
| 18:10:55 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:10:58 | <EvanR> | strict doesn't apply because nothing is crashing everything is terminating |
| 18:11:10 | <monochrom> | 3 most overused jargons in Haskell: isomorphic, strict, non-strict. >:) |
| 18:11:49 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 18:11:51 | <EvanR> | ski, so move more of the task into the parser |
| 18:12:21 | <ski> | yea, since the parser has that sequence of "parsed results so far", presumably |
| 18:12:23 | <danse-nr3> | you were talking about lazy and i talked about strict, does not sound that mysterious |
| 18:12:32 | × | fendor quits (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) (Ping timeout: 252 seconds) |
| 18:12:51 | <EvanR> | yeah this lazy and that strict are from different departments |
| 18:13:01 | <ski> | i'm not sure whether this would work for parsing another structure than left-associated sequences, though |
| 18:13:17 | <monochrom> | I actually also have a weird trick to get very close to streaming or laziness in the case of eg "many foo" so that it does not wait until the end of the output list. |
| 18:13:59 | <monochrom> | But it requires exposing the Parser type and writing one more combinator. |
| 18:14:26 | <EvanR> | ski, yes generalizations beyond "list" would be cool |
| 18:14:31 | <ski> | (e.g. some syntax tree with inherited and synthesized attributes associated with the grammar productions .. to what extend could we fire those rules, during the parser process, with, let's say, some kind of parser-combinator like parser) |
| 18:15:01 | <ski> | monochrom : which one ? |
| 18:16:57 | ski | 's been thinking about ordered logic lately .. which is related to parsing |
| 18:18:07 | <monochrom> | Suppose the Parser type goes like "newtype P a = MkP{unP :: String -> [] (String, a)}". Define pledge :: P a -> P a; pledge (MkP p) = MkP (\s -> let (s2, a) : tl = p s in (s2, a) : tl) |
| 18:18:07 | <ski> | (also .. i'm reminded i should try to get my application of composable continuations to precedence parsing working ..) |
| 18:18:33 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:19:22 | <monochrom> | "pledge foo" is unsafe in general, but safe if you know that foo doesn't fail. In particular, many p = pledge (some p <|> pure []) makes sense. |
| 18:20:41 | <ski> | right. looks similar to `promiseHead :: Eq a => a -> [a] -> [a]; promiseHead x0 ~(x:xs) = x0 : case x0 == x of True -> xs', which i defined for some tying-the-knot stuff |
| 18:20:49 | <monochrom> | Yeah. |
| 18:20:50 | <EvanR> | is this a noop that introduces a thing that would crash if the assumption of not failing failed |
| 18:21:04 | <monochrom> | Yes. |
| 18:21:45 | <EvanR> | how does it improve memory usage xD |
| 18:22:16 | <ski> | it pulls success earlier in time |
| 18:22:24 | <monochrom> | I also have a version for if the Parser type uses the Leijen-Meijer method of tracking consumedness for disabling backtracking. |
| 18:22:38 | <EvanR> | oh |
| 18:22:46 | <ski> | hm, not sure i know what that is |
| 18:22:49 | <monochrom> | Here is an elementary narrative. |
| 18:23:09 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 18:24:54 | <monochrom> | Suppose I give you "m :: Maybe [Int]". But m could be a thunk that will take huge memory and time before it even resolves to Just (another thunk for the list). |
| 18:25:26 | <monochrom> | But for some reason we already know that it will resolve to Just. (Say, because it came from many foo? :) ) |
| 18:26:56 | <monochrom> | So I write a function "pledge m = let Just xs = m in Just xs". Now within O(1) time you see a "Just" and can move on without waiting. |
| 18:27:14 | <monochrom> | Equivalently use an irrefutable pattern. :) |
| 18:27:50 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:28:06 | <monochrom> | It is like unsafeInterleaveIO but for parsers :) |
| 18:28:56 | <EvanR> | so it uses huge memory and time sooner, so it can be reclaimed sooner |
| 18:29:13 | <ski> | what's that Leijen-Meijer method, then ? |
| 18:29:19 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 264 seconds) |
| 18:29:29 | <monochrom> | This trick is distilled from Wadler's trick in «Monads for Functional Programming» section 5.11. |
| 18:29:59 | <monochrom> | That would be the paper Parsec: Direct-Style Monadic Parser Combinators For The Real World |
| 18:30:21 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:30:26 | <monochrom> | Today's parsec probably CPS that, ironically. :) |
| 18:30:47 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit) |
| 18:31:21 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:31:35 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 18:32:11 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 18:32:12 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 18:32:30 | <monochrom> | The history, probably revisionist, may be: a long time ago there was a CPS solution, then Leijen and Meijer were like "but we can defunctionalize it to a simpler ADT", but then people were like "but ADT is too slow we need to CPS it again" >:) |
| 18:33:26 | <danse-nr3> | CPS continuation passing style and ADT algebraic data types? |
| 18:33:34 | <monochrom> | yeah |
| 18:34:23 | → | neceve joins (~neceve@user/neceve) |
| 18:34:25 | <danse-nr3> | i did not know there was a tradeoff between the two |
| 18:34:29 | <ncf> | adjoint dunctor theorem |
| 18:35:19 | <EvanR> | the tradeoff that CPS is better in every way? xD |
| 18:35:22 | <monochrom> | yeah readable code vs performant code >:) |
| 18:35:30 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:35:56 | <monochrom> | I think "CPS is better" is incidental on GHC. |
| 18:36:04 | <monochrom> | or rather, "CPS is faster". |
| 18:36:32 | <EvanR> | also, readable vs faster is a terrible choice right |
| 18:36:54 | <EvanR> | how has haskell engineers not revolted against that and figured out a fix |
| 18:36:58 | <danse-nr3> | found ncatlab.org/nlab/show/adjoint+functor+theorem but of course it would take me a while to see the connection with continuation passing style. The other day here we were saying that continuation passing was not easy to model mathematically |
| 18:36:58 | <monochrom> | Then again it's probably just "jump table is faster than if-then-else". |
| 18:37:36 | <monochrom> | Well, GHC figured out pointer tagging to make ADTs faster. |
| 18:38:11 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 18:38:16 | <monochrom> | A long time ago Appel was also like "the compiler should auto-CPS everything so the user doesn't have to". |
| 18:38:16 | <int-e> | monochrom: I feel the same but with a different mental model... I think the continuation closures have a better chance of getting inlined than a function that is called with a constructor that starts with a case expression taking that value apart. |
| 18:39:07 | <int-e> | simplified maybe, since each case becomes a separate function, those functions look smaller. |
| 18:39:54 | <EvanR> | so what happened to Appel |
| 18:40:11 | <monochrom> | Yeah, but GHC also has got an insane rewriter for that, and is an important part of the "from vector to stream to nothing" thing. |
| 18:40:27 | <int-e> | (Is this model accurate? Probably not really... ghc is a complex beast.) |
| 18:41:04 | <monochrom> | To be sure, empirically, there are still many cases when human CPSing still beats GHC. |
| 18:41:25 | <monochrom> | But you would be surprised how many other cases GHC works smart. |
| 18:41:29 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:41:41 | <monochrom> | I know because I was. :) |
| 18:42:27 | <monochrom> | This: https://mail.haskell.org/pipermail/haskell-cafe/2013-April/107775.html |
| 18:43:24 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 18:44:32 | <monochrom> | EvanR: I think most FP compilers follow what Appel says. GHC is the exception actually. |
| 18:44:41 | <EvanR> | that's... those isVal tests use pattern matching xD |
| 18:45:29 | <monochrom> | Yeah, but my point is eg isVal-then-fromVal repeats the same pattern matching, and GHC catches that. |
| 18:45:57 | <EvanR> | thank bob for that |
| 18:46:06 | <monochrom> | I think the redundancy can be restored with -O0. |
| 18:46:25 | <EvanR> | style decisions should stay out of performance considerations |
| 18:46:59 | <monochrom> | Well, this is one of those few happy cases when bad style is also slow code >:) |
| 18:47:26 | <EvanR> | yeah it's usually the other way around |
| 18:48:04 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 18:48:14 | <monochrom> | It is not everyday that everything aligns and there is a win-win winner and therefore, human nature being what it is, the human applies a not-gate and chooses the losing solution. >:) |
| 18:50:54 | <exarkun> | always a shame to break a streak |
| 18:51:36 | <int-e> | GHC is smart with redundant cases when it sees them (your code is small enough that everything gets inlined) |
| 18:52:53 | <monochrom> | Yeah, I think the vector library has to manually tell GHC "inline this" much more often. |
| 18:53:30 | <monochrom> | It is why it takes forever to compile. :) |
| 18:53:55 | <monochrom> | good style, fast code, fast build --- pick two. >:) |
| 18:54:07 | × | matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in) |
| 18:54:11 | <exarkun> | *at most |
| 18:54:18 | <int-e> | And hmm, with CPS it would be harder to do that. (you have someCPSMaybe nothingCB1 justCB1 followed by someCPSMaybe nothingCB2 justCB2... now teach the compiler that if the first call returns nothingCB1 then the second call returns nothingCB2 :-P |
| 18:54:21 | <danse-nr3> | good style and fast code forever |
| 18:54:50 | <int-e> | There is no free lunch. |
| 18:54:58 | → | matijja joins (~matijja@193.77.181.201) |
| 18:55:04 | <monochrom> | Then I guess thank God for https://xkcd.com/303/ ? >:) |
| 18:55:11 | danse-nr3 | should probably offer lunch to GHC devs |
| 18:55:24 | × | matijja quits (~matijja@193.77.181.201) (Client Quit) |
| 18:55:32 | <int-e> | monochrom: I don't like eating swords |
| 18:55:44 | <EvanR> | until chat-gpt is asked to write a compiler that can compete with GHC. And it freaks out and produces professor moriarty |
| 18:55:55 | → | matijja joins (~matijja@193.77.181.201) |
| 18:56:22 | <int-e> | It's a bit sad that all the non-ghc compilers more or less died. |
| 18:57:06 | <danse-nr3> | it is a bit the culture we live in. At some point a "best" is chosen and all bubbles point to that |
| 18:58:58 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 18:59:04 | <int-e> | (jhc was particularly exciting because it was so different in many regards, in particular its treatment of type classes.) |
| 18:59:22 | <exarkun> | danse-nr3: is that culture or natural selection |
| 18:59:26 | <danse-nr3> | j standing for? |
| 18:59:33 | <EvanR> | john's |
| 18:59:41 | <ski> | jmeacham |
| 18:59:41 | <monochrom> | natural selection and economics >:) |
| 18:59:42 | <geekosaur> | john meacham? |
| 18:59:53 | <danse-nr3> | nah, natural selection leaves way more room for the existing to survive |
| 19:00:09 | <monochrom> | then again perhaps selection + economics = culture |
| 19:00:22 | <exarkun> | danse-nr3: on the contrary! it is still much easier to revive hugs than, say, a dinosaur. |
| 19:00:41 | <ski> | obligatory : "The story of jhc" <http://repetae.net/computer/jhc/jhc.shtml#the-story-of-jhc> |
| 19:00:52 | <danse-nr3> | add propaganda to the equation monochrom |
| 19:00:54 | <int-e> | maybe the comparison *is* apt. natural selection really isn't very good in the short term |
| 19:01:11 | <monochrom> | dinosaur got an unfair shock. |
| 19:02:20 | <danse-nr3> | except this comparison does not explain why our culture leads to the production of more dinosaurs |
| 19:02:34 | <Rembane> | Network effects? |
| 19:03:03 | <danse-nr3> | which slips out of the natural selection comparison... |
| 19:03:47 | <monochrom> | Dinosaurs got a meteor shock. We will get a nuclear shock or pandemic shock, then most compilers won't survive either. >:) |
| 19:04:22 | <danse-nr3> | glasgow is not that distributed after all |
| 19:04:41 | <monochrom> | Also I think "natural selection leaves way more room for the existing to survive" manifests not in more Haskell compilers but more scripting languages. |
| 19:04:43 | <int-e> | . o O ( yet ) |
| 19:05:01 | <int-e> | . o O ( nothing a big enough explosion can't fix ) |
| 19:05:15 | <int-e> | (re: "not distributed") |
| 19:06:16 | <danse-nr3> | just less mortality for diversity in general monochrom, it can be observed also outside haskell-land |
| 19:06:26 | <monochrom> | Haskell compilers are complex, you should compare that to elephants and whales and see no surprise that they are fewer and rarer. The biosphere and the programsphere both favour low-cost things such as insects and scripting languages. |
| 19:07:15 | × | alp quits (~alp@2001:861:5e02:eff0:40fb:3515:43ea:e419) (Ping timeout: 258 seconds) |
| 19:07:19 | <danse-nr3> | john apparently managed to build a whale all by himself at some point |
| 19:07:25 | <monochrom> | (Yes, I have done the impossibly ridiculous: comparing scripting languages to insects. Ha!) |
| 19:07:45 | <monochrom> | He hasn't added GC, has he? >:) |
| 19:08:35 | <int-e> | who's out there hunting compilers to extinction though |
| 19:08:46 | <int-e> | maybe it's time to move to -offtopic |
| 19:09:17 | <EvanR> | the references section on the story of JHC doesn't seem to have anything on the type classes |
| 19:09:17 | <monochrom> | That would be when we start counting Java compilers >:) |
| 19:09:36 | <EvanR> | how are they different |
| 19:10:14 | × | kraftwerk28 quits (~kraftwerk@164.92.219.160) (Quit: *disconnects*) |
| 19:11:19 | <int-e> | EvanR: IIRC JHC had explicit type witnesses (imagine an ADT representing the type structure of each value), and type classes were implemented by pattern matching on that witness. It was a whole program compiler, so this approach was possible. And hopefully, due to aggressive inlining, most of the type witnesses would not actually be manifested at runtime. |
| 19:11:22 | → | kraftwerk28 joins (~kraftwerk@164.92.219.160) |
| 19:11:57 | → | AlexNoo_ joins (~AlexNoo@94.233.241.129) |
| 19:14:03 | × | trev quits (~trev@user/trev) (Quit: trev) |
| 19:14:27 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 19:14:58 | <ski> | .. Mercury passes around type-infos at run-time .. and has type classes |
| 19:15:01 | × | AlexNoo quits (~AlexNoo@94.233.241.129) (Ping timeout: 240 seconds) |
| 19:17:01 | <ski> | (unfortunately, it also breaks parametricity .. i think if they'd been aiming for it, they could have avoided that) |
| 19:18:03 | <mauke> | reminds me of https://okmij.org/ftp/Computation/typeclass.html#Kaes |
| 19:19:16 | <ski> | oh, shiny, ty ! :) |
| 19:19:59 | <monochrom> | Oh, so Wadler didn't get that first... |
| 19:21:01 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 19:21:30 | × | ThePenguin quits (~ThePengui@cust-95-80-24-166.csbnet.se) (Quit: ThePenguin) |
| 19:23:55 | <mauke> | actually, https://okmij.org/ftp/Computation/typeclass.html#intensional is probably a better link |
| 19:24:09 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 19:24:38 | → | accord joins (uid568320@id-568320.hampstead.irccloud.com) |
| 19:25:06 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 19:26:45 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 19:30:40 | <dolio> | monochrom: The irony is that those types of languages get much more complicated type systems bolted onto them. |
| 19:32:09 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 19:34:49 | <EvanR> | elixir's currently desired type system https://arxiv.org/abs/2306.06391 "a polymorphic type system with set-theoretic types and semantic subtyping" |
| 19:36:36 | <dolio> | Yeah, I saw someone asking about a similar paper for erlang recently. |
| 19:37:07 | <dolio> | According to the paper it was taking ~1 minute to check a 6 line function. |
| 19:38:52 | → | ft joins (~ft@p4fc2a529.dip0.t-ipconnect.de) |
| 19:41:26 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 19:42:23 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6d7a:4eb0:231d:253f) (Remote host closed the connection) |
| 19:42:39 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:43:40 | → | mik3d joins (~mik3d@pool-173-61-131-199.cmdnnj.fios.verizon.net) |
| 19:45:10 | <EvanR> | Stefan Kaes eh... |
| 19:45:58 | <int-e> | school must have been hell |
| 19:48:26 | × | mik3d quits (~mik3d@pool-173-61-131-199.cmdnnj.fios.verizon.net) (Client Quit) |
| 19:51:49 | → | alp joins (~alp@2001:861:5e02:eff0:c4b6:a2a:56cf:4df4) |
| 19:52:37 | AlexNoo_ | is now known as AlexNoo |
| 19:59:00 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:03:01 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 20:05:43 | × | kiriakos quits (~kiriakos@p5b03e4f0.dip0.t-ipconnect.de) (Quit: kiriakos) |
| 20:06:35 | × | asivitz quits (uid178348@id-178348.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:07:18 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 20:09:50 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 20:11:40 | × | dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection) |
| 20:12:02 | → | dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
| 20:12:32 | → | mvk joins (~mvk@2607:fea8:5c9a:a600::900d) |
| 20:12:33 | × | mvk quits (~mvk@2607:fea8:5c9a:a600::900d) (Client Quit) |
| 20:13:14 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 20:13:32 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 20:15:46 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
| 20:16:02 | → | euleritian joins (~euleritia@dynamic-046-114-207-195.46.114.pool.telefonica.de) |
| 20:16:52 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 20:18:30 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6d7a:4eb0:231d:253f) |
| 20:20:01 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 20:21:41 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 20:22:35 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6d7a:4eb0:231d:253f) (Ping timeout: 240 seconds) |
| 20:23:09 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 20:24:39 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 20:25:45 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 20:27:48 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 20:27:50 | × | Pixi quits (~Pixi@user/pixi) (Quit: Leaving) |
| 20:29:04 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 20:29:31 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 20:31:31 | → | pixelmonk joins (~pixelmonk@50.205.76.66) |
| 20:35:55 | × | danse-nr3 quits (~danse@151.43.104.61) (Ping timeout: 264 seconds) |
| 20:38:50 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 20:45:19 | → | Pixi joins (~Pixi@user/pixi) |
| 20:54:10 | × | ski quits (~ski@88.131.7.247) (Ping timeout: 255 seconds) |
| 21:00:39 | → | lortabac joins (~lorenzo@2a01:e0a:541:b8f0:9856:bce6:702c:92bf) |
| 21:01:44 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 21:05:20 | → | danza joins (~francesco@151.43.104.61) |
| 21:07:20 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6d7a:4eb0:231d:253f) |
| 21:09:30 | → | ciiur^ joins (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) |
| 21:10:35 | × | danza quits (~francesco@151.43.104.61) (Read error: Connection reset by peer) |
| 21:13:18 | × | CrunchyFlakes_ quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Quit: ZNC 1.8.2 - https://znc.in) |
| 21:13:55 | → | CrunchyFlakes joins (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
| 21:16:50 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 21:17:13 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 21:17:45 | × | migas9 quits (~migas@static.140.65.63.178.clients.your-server.de) (Remote host closed the connection) |
| 21:18:02 | → | migas9 joins (~migas@static.140.65.63.178.clients.your-server.de) |
| 21:18:32 | → | ubert1 joins (~Thunderbi@77.119.168.33.wireless.dyn.drei.com) |
| 21:18:59 | × | alp quits (~alp@2001:861:5e02:eff0:c4b6:a2a:56cf:4df4) (Ping timeout: 252 seconds) |
| 21:18:59 | × | ubert quits (~Thunderbi@77.119.214.97.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
| 21:19:00 | ubert1 | is now known as ubert |
| 21:20:54 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:21:28 | × | lortabac quits (~lorenzo@2a01:e0a:541:b8f0:9856:bce6:702c:92bf) (Quit: WeeChat 3.5) |
| 21:23:29 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 21:23:44 | → | lortabac joins (~lorenzo@2a01:e0a:541:b8f0:9856:bce6:702c:92bf) |
| 21:25:37 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:26:12 | → | danza joins (~francesco@ge-19-117-186.service.infuturo.it) |
| 21:26:37 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 21:28:20 | × | ciiur^ quits (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) (Ping timeout: 252 seconds) |
| 21:29:01 | → | ciiur^ joins (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) |
| 21:29:19 | → | noscript joins (~james@user/earldouglas) |
| 21:29:47 | × | lortabac quits (~lorenzo@2a01:e0a:541:b8f0:9856:bce6:702c:92bf) (Quit: WeeChat 3.5) |
| 21:29:51 | ← | noscript parts (~james@user/earldouglas) () |
| 21:30:01 | → | earldouglas joins (~james@user/earldouglas) |
| 21:30:04 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:32:32 | ← | earldouglas parts (~james@user/earldouglas) () |
| 21:33:19 | × | ciiur^ quits (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) (Ping timeout: 255 seconds) |
| 21:33:50 | → | ciiur^ joins (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) |
| 21:33:53 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 21:36:41 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:37:33 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 21:40:06 | → | kiriakos joins (~kiriakos@p5b03e4f0.dip0.t-ipconnect.de) |
| 21:40:20 | → | ACuriousMoose joins (~ACuriousM@142.166.18.53) |
| 21:40:50 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:40:54 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:43:08 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 21:46:17 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 21:49:44 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 21:50:05 | × | elkcl quits (~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru) (Ping timeout: 240 seconds) |
| 21:50:10 | × | neceve quits (~neceve@user/neceve) (Ping timeout: 258 seconds) |
| 21:56:38 | → | alp joins (~alp@2001:861:5e02:eff0:152f:3894:dff9:5483) |
| 21:58:36 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 22:00:52 | → | nate2 joins (~nate@c-98-45-169-16.hsd1.ca.comcast.net) |
| 22:01:39 | × | jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
| 22:01:54 | → | jinsun joins (~jinsun@user/jinsun) |
| 22:02:12 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 22:03:22 | → | elkcl joins (~elkcl@broadband-95-84-226-240.ip.moscow.rt.ru) |
| 22:05:18 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 22:05:21 | × | nate2 quits (~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 22:06:12 | → | mechap joins (~mechap@user/mechap) |
| 22:06:14 | → | misterfish joins (~misterfis@84-53-85-146.bbserv.nl) |
| 22:11:14 | × | dagit quits (~dagit@2001:558:6025:38:71c6:9d58:7252:8976) (Server closed connection) |
| 22:16:09 | → | fendor joins (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) |
| 22:16:39 | → | zetef joins (~quassel@5.2.182.98) |
| 22:16:54 | × | zetef quits (~quassel@5.2.182.98) (Remote host closed the connection) |
| 22:20:37 | × | fendor quits (~fendor@2a02:8388:1640:be00:cb6e:46f6:2fe6:1728) (Remote host closed the connection) |
| 22:23:20 | × | pointlessslippe1 quits (~pointless@212.82.82.3) (Ping timeout: 255 seconds) |
| 22:23:51 | × | michalz quits (~michalz@185.246.207.201) (Remote host closed the connection) |
| 22:24:39 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 22:34:43 | × | misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 264 seconds) |
| 22:35:21 | × | kraftwerk28 quits (~kraftwerk@164.92.219.160) (Quit: *disconnects*) |
| 22:35:25 | × | ciiur^ quits (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) (Ping timeout: 255 seconds) |
| 22:36:17 | → | ciiur^ joins (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) |
| 22:36:46 | → | kraftwerk28 joins (~kraftwerk@164.92.219.160) |
| 22:40:02 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 22:41:02 | → | pavonia joins (~user@user/siracusa) |
| 22:41:41 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 22:42:53 | × | ciiur^ quits (~cd@70-88-177-118-Atlanta.hfc.comcastbusiness.net) (Remote host closed the connection) |
| 22:44:55 | × | aliosablack quits (~chomwitt@2a02:587:7a05:2c00:1ac0:4dff:fedb:a3f1) (Ping timeout: 264 seconds) |
| 22:45:33 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 22:46:21 | × | mechap quits (~mechap@user/mechap) (Ping timeout: 240 seconds) |
| 22:51:21 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 22:55:03 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 22:55:14 | × | alp quits (~alp@2001:861:5e02:eff0:152f:3894:dff9:5483) (Ping timeout: 252 seconds) |
| 22:56:19 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:57:30 | × | kraftwerk28 quits (~kraftwerk@164.92.219.160) (Quit: *disconnects*) |
| 22:58:40 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:58:46 | → | kraftwerk28 joins (~kraftwerk@164.92.219.160) |
| 23:02:19 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:04:44 | → | alp joins (~alp@2001:861:5e02:eff0:86bc:a0a1:58c4:4dac) |
| 23:06:57 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:10:08 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:11:33 | × | idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.1.1) |
| 23:13:19 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:14:22 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:17:34 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:19:59 | × | pixelmonk quits (~pixelmonk@50.205.76.66) (Ping timeout: 252 seconds) |
| 23:21:28 | → | pointlessslippe1 joins (~pointless@212.82.82.3) |
| 23:24:05 | × | acidjnk quits (~acidjnk@p200300d6e72b9352bd047a176d81e23c.dip0.t-ipconnect.de) (Ping timeout: 258 seconds) |
| 23:24:17 | × | accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 23:27:12 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:30:27 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:30:28 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:32:38 | × | Jackneill_ quits (~Jackneill@20014C4E1E058A00193351DCDA9024FA.dsl.pool.telekom.hu) (Ping timeout: 252 seconds) |
| 23:33:47 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:42:05 | → | pixelmonk joins (~pixelmonk@50.205.76.66) |
| 23:44:44 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:46:33 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:49:26 | → | todi joins (~todi@p4fd1a3e6.dip0.t-ipconnect.de) |
| 23:52:02 | × | dfg quits (~dfg@user/dfg) (Server closed connection) |
| 23:52:20 | → | dfg joins (~dfg@dfg.rocks) |
| 23:52:20 | × | dfg quits (~dfg@dfg.rocks) (Changing host) |
| 23:52:20 | → | dfg joins (~dfg@user/dfg) |
| 23:56:57 | × | todi quits (~todi@p4fd1a3e6.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
All times are in UTC on 2023-11-07.