2024/06/08

2024-06-08 00:09:08 +0000Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2024-06-08 00:09:10 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
2024-06-08 00:10:29 +0000Lord_of_Life_Lord_of_Life
2024-06-08 00:11:58 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 246 seconds)
2024-06-08 00:14:37 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-06-08 01:17:30 +0000jjhoo_(jahakala@user/jjhoo) (Ping timeout: 256 seconds)
2024-06-08 01:18:25 +0000joeyadams(~joeyadams@38.48.105.67)
2024-06-08 01:25:17 +0000xam_(~dev@2405:201:c062:801d:8728:7618:dd19:eaef) (Ping timeout: 240 seconds)
2024-06-08 01:26:28 +0000dev2(~dev@2405:201:c062:801d:74fb:a90f:fd55:89e8)
2024-06-08 01:34:05 +0000jjhoo(~jahakala@user/jjhoo)
2024-06-08 01:59:08 +0000CrunchyFlakes(~CrunchyFl@146.52.130.128) (Read error: Connection reset by peer)
2024-06-08 02:01:17 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de)
2024-06-08 02:07:03 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
2024-06-08 02:28:54 +0000joeyadams(~joeyadams@38.48.105.67) (Quit: Leaving)
2024-06-08 02:37:49 +0000bilegeek(~bilegeek@2600:1008:b012:5182:bbcf:8156:6b3:93d9)
2024-06-08 02:50:17 +0000rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2024-06-08 02:50:49 +0000rvalue(~rvalue@user/rvalue)
2024-06-08 03:00:23 +0000td_(~td@i53870928.versanet.de) (Ping timeout: 268 seconds)
2024-06-08 03:02:07 +0000td_(~td@i53870927.versanet.de)
2024-06-08 03:43:39 +0000xigua(~xigua@user/xigua) (Read error: Connection reset by peer)
2024-06-08 03:43:53 +0000xigua(~xigua@user/xigua)
2024-06-08 03:44:47 +0000dcoutts(~duncan@77.109.149.106) (Ping timeout: 268 seconds)
2024-06-08 03:46:31 +0000euleritian(~euleritia@dynamic-176-006-010-205.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-08 03:46:49 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 03:50:46 +0000aforemny(~aforemny@i59F516E7.versanet.de)
2024-06-08 03:51:05 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 03:51:29 +0000aforemny_(~aforemny@2001:9e8:6cfe:9000:f190:2088:3129:672b) (Ping timeout: 272 seconds)
2024-06-08 03:55:06 +0000dcoutts(~duncan@77.109.149.106)
2024-06-08 04:13:11 +0000dmj`(uid72307@id-72307.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-08 04:26:57 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
2024-06-08 04:27:49 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 04:30:17 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de)
2024-06-08 04:31:21 +0000dcoutts(~duncan@77.109.149.106) (Ping timeout: 268 seconds)
2024-06-08 04:47:45 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2024-06-08 04:48:25 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-06-08 04:57:54 +0000bilegeek(~bilegeek@2600:1008:b012:5182:bbcf:8156:6b3:93d9) (Quit: Leaving)
2024-06-08 05:02:14 +0000takuan(~takuan@178-116-218-225.access.telenet.be)
2024-06-08 05:04:16 +0000troydm(~troydm@user/troydm)
2024-06-08 05:05:06 +0000troydm(~troydm@user/troydm) (Client Quit)
2024-06-08 05:05:24 +0000troydm(~troydm@user/troydm)
2024-06-08 05:18:34 +0000troydm(~troydm@user/troydm) (Ping timeout: 246 seconds)
2024-06-08 05:32:10 +0000Feuermagier(~Feuermagi@user/feuermagier)
2024-06-08 05:46:26 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 05:50:44 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2024-06-08 05:52:20 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 05:54:32 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 05:57:10 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Remote host closed the connection)
2024-06-08 05:57:37 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 06:03:32 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net)
2024-06-08 06:04:52 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 06:08:43 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
2024-06-08 06:08:47 +0000m1dnight_(~christoph@82.146.125.185) (Quit: WeeChat 4.2.2)
2024-06-08 06:09:29 +0000m1dnight(~christoph@82.146.125.185)
2024-06-08 06:16:42 +0000Lycurgus(~georg@user/Lycurgus)
2024-06-08 06:17:46 +0000causal(~eric@50.35.88.207) (Quit: WeeChat 4.1.1)
2024-06-08 06:29:07 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2024-06-08 06:30:34 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-06-08 06:33:49 +0000Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-06-08 06:35:00 +0000harveypwca(~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288)
2024-06-08 06:48:29 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 06:50:35 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 06:51:41 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
2024-06-08 06:52:18 +0000euleritian(~euleritia@dynamic-176-006-005-097.176.6.pool.telefonica.de)
2024-06-08 06:52:40 +0000euleritian(~euleritia@dynamic-176-006-005-097.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-08 06:53:38 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 06:59:44 +0000chiselfuse(~chiselfus@user/chiselfuse) (Remote host closed the connection)
2024-06-08 07:01:04 +0000chiselfuse(~chiselfus@user/chiselfuse)
2024-06-08 07:10:11 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 264 seconds)
2024-06-08 07:11:49 +0000ft(~ft@p508db8fc.dip0.t-ipconnect.de) (Quit: leaving)
2024-06-08 07:12:02 +0000ambareesh(~ambareesh@2601:646:8f01:3aac:aef7:fb34:9419:a905)
2024-06-08 07:13:25 +0000ambareesh(~ambareesh@2601:646:8f01:3aac:aef7:fb34:9419:a905) (Client Quit)
2024-06-08 07:16:22 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 07:17:30 +0000Axman6(~Axman6@user/axman6)
2024-06-08 07:20:50 +0000harveypwca(~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288) (Quit: Leaving)
2024-06-08 07:27:52 +0000Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 260 seconds)
2024-06-08 07:28:26 +0000acidjnk(~acidjnk@p200300d6e714dc900cd3e2d9c55a017d.dip0.t-ipconnect.de)
2024-06-08 07:29:59 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds)
2024-06-08 07:32:30 +0000Maxdamantus(~Maxdamant@user/maxdamantus)
2024-06-08 07:34:48 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 268 seconds)
2024-06-08 07:36:28 +0000michalz(~michalz@185.246.207.200)
2024-06-08 07:40:22 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 07:43:26 +0000gmg(~user@user/gehmehgeh)
2024-06-08 08:02:20 +0000Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
2024-06-08 08:06:37 +0000oo_miguel(~Thunderbi@78-11-181-16.static.ip.netia.com.pl)
2024-06-08 08:11:48 +0000TonyStone(~TonyStone@user/TonyStone) (Ping timeout: 268 seconds)
2024-06-08 08:13:27 +0000 <haskellbridge> <linj> Hi, I am new to Haskell. What is the newest GHC feature to solve a record-related problem once and for all mentioned here? https://youtu.be/rf-lie7U04Q?list=PLOJjn67NeYg9cWA4hyIWcxfaeX64pwo1c&t=2139
2024-06-08 08:13:39 +0000robobub(uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2024-06-08 08:16:27 +0000 <tomsmeding> presumably he's referring to https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/overloaded_record_dot.html#extensio… , but I'm not sure if that "solves a big problem"
2024-06-08 08:16:40 +0000 <tomsmeding> it's an alternative syntax that makes some code a bit nicer to read
2024-06-08 08:17:51 +0000 <haskellbridge> <linj> thanks
2024-06-08 08:48:12 +0000target_i(~target_i@user/target-i/x-6023099)
2024-06-08 08:50:40 +0000michalz(~michalz@185.246.207.200) (Quit: ZNC 1.9.0 - https://znc.in)
2024-06-08 08:51:46 +0000noumenon(~noumenon@113.51-175-156.customer.lyse.net)
2024-06-08 08:54:38 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-06-08 08:56:05 +0000oo_miguel(~Thunderbi@78-11-181-16.static.ip.netia.com.pl) (Ping timeout: 252 seconds)
2024-06-08 09:20:31 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2024-06-08 09:21:31 +0000wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-08 09:24:42 +0000wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2024-06-08 09:25:11 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 09:25:34 +0000stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2024-06-08 09:26:25 +0000stiell(~stiell@gateway/tor-sasl/stiell)
2024-06-08 09:31:30 +0000dcoutts(~duncan@2001:620:130:6092:8b6f:ee09:26cb:f12f)
2024-06-08 09:33:48 +0000 <Franciman> hi, I am encountering a very strange behaviour. This is my code: https://bpa.st/FUZQ
2024-06-08 09:34:06 +0000 <Franciman> i used runhaskell to execute it and it takes 7 seconds, so i had to resort to compilation, and it takes 0.6s to execute
2024-06-08 09:34:30 +0000 <Franciman> on my fully lazy interpreter, it takes 0.14s to execute the same term
2024-06-08 09:34:37 +0000 <Franciman> why is haskell's optimization so lame?
2024-06-08 09:35:42 +0000 <Franciman> outperforming ghc by 500x?
2024-06-08 09:35:44 +0000 <Franciman> what's wrong
2024-06-08 09:36:51 +0000wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-08 09:38:43 +0000dsrt^(~cd@c-98-242-74-66.hsd1.ga.comcast.net)
2024-06-08 09:39:12 +0000 <int-e> GHC doesn't do CSE
2024-06-08 09:39:25 +0000 <int-e> (not entirely true, but true enough to explain this case)
2024-06-08 09:39:31 +0000dcoutts(~duncan@2001:620:130:6092:8b6f:ee09:26cb:f12f) (Ping timeout: 256 seconds)
2024-06-08 09:39:40 +0000 <tomsmeding> link 404s for me?
2024-06-08 09:40:08 +0000 <int-e> yeah it does 404 now for me too... guess I caught it just in time
2024-06-08 09:40:23 +0000 <Franciman> my interpreter neither
2024-06-08 09:40:25 +0000 <int-e> "This paste expires on 2024-06-15 09:33:40.961704."
2024-06-08 09:40:29 +0000 <Franciman> oh sorry it expired
2024-06-08 09:40:31 +0000 <Franciman> wait
2024-06-08 09:40:52 +0000 <Franciman> https://bpa.st/VTCQ
2024-06-08 09:41:19 +0000 <int-e> gamma x y = let z = x id in (z `seq` z) y
2024-06-08 09:41:32 +0000 <Franciman> lewl
2024-06-08 09:41:39 +0000 <Franciman> why doesn't haskell implement full laziness?
2024-06-08 09:41:42 +0000 <int-e> if you do that instead it'll be fast.
2024-06-08 09:42:03 +0000 <int-e> because it interferes with controlling memory usage
2024-06-08 09:42:15 +0000 <int-e> z `seq` z is just z of course; GHC will actually realize that
2024-06-08 09:43:11 +0000 <Franciman> int-e: doesn't laziness also interfer with controlling memory usage?
2024-06-08 09:43:24 +0000 <int-e> yes?
2024-06-08 09:44:04 +0000 <int-e> you can always introduce your own sharing if you need it for performance
2024-06-08 09:44:19 +0000 <int-e> it's hard to get the compiler to avoid sharing and it would be harder if it did this kind of CSE
2024-06-08 09:44:49 +0000 <tomsmeding> classic example is something like `length [1..100000] + length [1..100000]`
2024-06-08 09:45:00 +0000 <int-e> pragmatically... full laziness makes too many programs slower
2024-06-08 09:45:02 +0000 <tomsmeding> that's pretty fast and low-memory, but if you CSE the two lists it gets horrendous
2024-06-08 09:45:33 +0000 <int-e> (or run out of memory)
2024-06-08 09:45:49 +0000 <tomsmeding> (perhaps you need to add 3 more zeros for it to get really bad)
2024-06-08 09:46:34 +0000 <Franciman> int-e: isn't that the same with lazienss compared to call by value?
2024-06-08 09:47:20 +0000 <int-e> Franciman: also your math is off, 7/0.14 is 50
2024-06-08 09:48:03 +0000 <int-e> Franciman: "We already have this problem, so let's make it as bad as we possibly can" isn't pragmatic.
2024-06-08 09:50:08 +0000 <int-e> Laziness and sharing aren't exactly the same thing either. We have `seq` to reduce laziness when it's harmful. We have `let` to introduce sharing when it's helpful. There's "opportunistic CSE" in GHC that also introduces sharing which exists because it's helpful most of the time. It's not always a win and people actually struggle to avoid sharing when that happens.
2024-06-08 09:51:22 +0000 <Franciman> indeed...
2024-06-08 09:51:24 +0000 <Franciman> oh yes 50x
2024-06-08 09:51:27 +0000 <Franciman> sorry
2024-06-08 09:51:55 +0000 <Franciman> having controlled laziness is better
2024-06-08 09:52:02 +0000 <Franciman> call by value wins
2024-06-08 09:52:04 +0000 <tomsmeding> what do you mean with "full laziness"? Do you mean something like the "optimal" graph reduction algorithms?
2024-06-08 09:52:09 +0000 <int-e> And I guess, ultimately, GHC is not primarily optimized for doing fast beta reductions. It's actually more important to have fast pattern matching on data.
2024-06-08 09:52:46 +0000 <Franciman> tomsmeding: it's extracting subexpressions of a lambda that don't depend on the argument
2024-06-08 09:52:57 +0000 <Franciman> so that if you evalaute that lambda too many times, the shared parts are evaluated only once
2024-06-08 09:53:12 +0000 <Franciman> err, if you apply that lambda many times*
2024-06-08 09:53:14 +0000phma(phma@2001:5b0:2172:c168:223e:807a:618e:7153) (Read error: Connection reset by peer)
2024-06-08 09:53:17 +0000tomsmedingthought that was what ghc did with -ffull-laziness, which is default, right?
2024-06-08 09:53:26 +0000 <Franciman> it does not do it at its fullest
2024-06-08 09:53:32 +0000 <tomsmeding> I see
2024-06-08 09:53:38 +0000 <Franciman> it's partial full laziness
2024-06-08 09:53:42 +0000phma(~phma@host-67-44-208-65.hnremote.net)
2024-06-08 09:53:47 +0000 <tomsmeding> maybe it only does it if the subexpression in question is already let-bound or something
2024-06-08 09:53:58 +0000 <int-e> "Default: off but enabled by -O"
2024-06-08 09:54:12 +0000 <Franciman> i applied it, but still no improvement
2024-06-08 09:54:20 +0000 <int-e> yeah it only does it for let bindings
2024-06-08 09:54:20 +0000 <tomsmeding> (and -O is default when compiling with cabal :p)
2024-06-08 09:54:23 +0000 <tomsmeding> ah
2024-06-08 09:54:40 +0000 <int-e> https://downloads.haskell.org/ghc/latest/docs/users_guide/using-optimisation.html#ghc-flag--ffull-… has a note.
2024-06-08 09:54:49 +0000 <tomsmeding> makes sense -- "let" tells ghc that you want to share this thing, and then if you want to do it anyway, let's share it completely
2024-06-08 09:55:03 +0000falafel(~falafel@185-147-214-70.mad.as54203.net)
2024-06-08 09:56:12 +0000 <Franciman> now if i run ghc -O to compile it, finally i get something close to my 0.14s lol
2024-06-08 09:56:15 +0000 <Franciman> IN SHAMBLES
2024-06-08 09:56:25 +0000 <tomsmeding> "now", is that with the let?
2024-06-08 09:56:26 +0000 <Leary> Well, it's probably not that simple. GHC's simplifier /creates/ a lot more `let`s than you write. Just, most of them are heuristically just to be better off inlined than shared.
2024-06-08 09:56:36 +0000 <Franciman> this program is so unlikely to happen in practice btw
2024-06-08 09:56:42 +0000 <Leary> judged*
2024-06-08 09:56:53 +0000 <Franciman> a fun thing is that it also behaves badly with call by value
2024-06-08 09:57:00 +0000falafel_(~falafel@2a0c:5a87:3103:ec01::62b8)
2024-06-08 09:57:20 +0000 <Franciman> tomsmeding: i think ghc is smart enough to figure that let out
2024-06-08 09:57:26 +0000 <Franciman> because it's a CSE case
2024-06-08 09:58:04 +0000 <Franciman> if i changed the arguments then maybe it would struggle more
2024-06-08 09:58:39 +0000lxsameer(~lxsameer@Serene/lxsameer)
2024-06-08 09:59:12 +0000 <tomsmeding> this is a question of "how smart is your optimiser", though; it's not very much related to CBV vs non-strictness
2024-06-08 09:59:24 +0000 <Franciman> that's why full laziness is nice
2024-06-08 09:59:29 +0000 <Franciman> it's not about smartness
2024-06-08 09:59:35 +0000 <Franciman> of the optimiser
2024-06-08 09:59:50 +0000 <tomsmeding> hm?
2024-06-08 09:59:59 +0000falafel(~falafel@185-147-214-70.mad.as54203.net) (Ping timeout: 264 seconds)
2024-06-08 09:59:59 +0000 <Franciman> a dumb ~100 lines interpreter beating >20 years of optimisations
2024-06-08 10:00:05 +0000 <tomsmeding> do you mean the floating-out of expressions that don't depend on arguments?
2024-06-08 10:00:09 +0000 <tomsmeding> that is an optimisation
2024-06-08 10:00:20 +0000 <Franciman> so is laziness wrt call by name
2024-06-08 10:00:26 +0000 <tomsmeding> or a fancy graph-reducing evaluation model
2024-06-08 10:00:37 +0000 <tomsmeding> laziness is evaluation semantics
2024-06-08 10:00:48 +0000 <Franciman> where is the line sorry?
2024-06-08 10:00:51 +0000 <tomsmeding> if you use a graph reducer as your evaluation, then you can also get something like your full laziness
2024-06-08 10:01:07 +0000 <tomsmeding> but if you don't, then you need some explicit transformation to lift out the independent expression
2024-06-08 10:01:46 +0000 <Franciman> laziness also requires some sort of that
2024-06-08 10:01:51 +0000 <tomsmeding> does it?
2024-06-08 10:01:52 +0000 <Franciman> you don't really act on lambda terms per se
2024-06-08 10:02:01 +0000 <Franciman> yes, otherwise how do you define the evaluation semantics?
2024-06-08 10:02:14 +0000 <Franciman> you can express laziness with explicit substitutions or using graphs
2024-06-08 10:02:18 +0000 <Franciman> or using lambda lifting
2024-06-08 10:02:23 +0000 <tomsmeding> or using a heap and beta reduction
2024-06-08 10:02:30 +0000 <tomsmeding> which is the "standard" formulation
2024-06-08 10:02:38 +0000 <tomsmeding> er
2024-06-08 10:02:43 +0000 <tomsmeding> a heap and WHNF evaluation
2024-06-08 10:03:00 +0000 <tomsmeding> nothing in that does CSE for you
2024-06-08 10:03:26 +0000 <Franciman> you can use a heap and whnf evaluation + extraction of maximally free subexpressions from a term
2024-06-08 10:03:30 +0000 <Franciman> what's the difference?
2024-06-08 10:03:32 +0000falafel_(~falafel@2a0c:5a87:3103:ec01::62b8) (Remote host closed the connection)
2024-06-08 10:03:51 +0000 <tomsmeding> it's true that the distinction between "evaluation semantics" and "optimisation" is a bit vague; you could apply some optimisations on-the-fly while evaluating, and then you'd blur the boundaries
2024-06-08 10:03:56 +0000__monty__(~toonn@user/toonn)
2024-06-08 10:04:20 +0000 <Franciman> tomsmeding: just to make it clear, i wanted to understand your point, not trying to argue you are wrong
2024-06-08 10:04:31 +0000 <tomsmeding> yeah no you're right
2024-06-08 10:04:38 +0000 <tomsmeding> I was making a distinction that does not _really_ exist
2024-06-08 10:04:40 +0000 <tomsmeding> only conventionally
2024-06-08 10:05:22 +0000 <tomsmeding> though I _can_ say that you don't need extraction of independent subexpressions from within binding scopes to achieve laziness
2024-06-08 10:05:34 +0000 <tomsmeding> unless you make that part of the definition of "laziness", which is unconventional
2024-06-08 10:05:45 +0000 <Franciman> true
2024-06-08 10:05:52 +0000 <tomsmeding> ghc achieves laziness in the traditional sense, not in this extended sense
2024-06-08 10:05:59 +0000 <Franciman> because you actually extract common variables
2024-06-08 10:06:16 +0000 <Franciman> i mean you do sharing on variables inside a lambda
2024-06-08 10:06:25 +0000 <Franciman> the the variable occurrences bound by a lambda, to be more precise
2024-06-08 10:06:37 +0000 <tomsmeding> yes, but that's sharing directly implied by the syntax
2024-06-08 10:06:42 +0000 <Franciman> true
2024-06-08 10:06:48 +0000 <tomsmeding> a single name has a single shared value on the heap
2024-06-08 10:06:57 +0000 <tomsmeding> and that's all sharing that the evaluator introduces
2024-06-08 10:07:32 +0000 <tomsmeding> this yields a straightforward evaluator that's quite efficient
2024-06-08 10:07:51 +0000 <tomsmeding> if you want to do more, you typically have to sacrifice efficiency of individual reductions to achieve better asymptotics for some programs
2024-06-08 10:07:54 +0000 <Franciman> and there is a fun theory to prove that it is complete and sound w.r.t call by name
2024-06-08 10:08:08 +0000 <Franciman> using non-idempotent set types
2024-06-08 10:08:12 +0000 <tomsmeding> graph reduction evaluators buy in on this idea quite deeply, and can still be fast but that takes significant cleverness
2024-06-08 10:08:18 +0000 <tomsmeding> ghc is more traditional
2024-06-08 10:08:53 +0000 <tomsmeding> also, ghc's model allows you to do stuff like use unsafePerformIO and not break the world in doing so
2024-06-08 10:09:06 +0000 <tomsmeding> good luck with doing that sensibly in an evaluator with full laziness everywhere
2024-06-08 10:09:17 +0000sawilagar(~sawilagar@user/sawilagar)
2024-06-08 10:09:32 +0000 <Franciman> that would be a great problem
2024-06-08 10:09:34 +0000 <Franciman> lol
2024-06-08 10:10:07 +0000 <tomsmeding> and having unsafePerformIO allows your haskell code to be fast on bytestrings, which people have apparently found more important than better asymptotics for certain functional patterns that you can also just fix by being a bit more explicit with the sharing that you want
2024-06-08 10:10:58 +0000 <tomsmeding> there's a place for full laziness evaluators, but ghc optimises less for those usecases
2024-06-08 10:11:32 +0000 <tomsmeding> heck, people have said that the GHC has a suspiciously good concurrent, asynchronous IO manager in its RTS for a pure functional language
2024-06-08 10:13:15 +0000 <tomsmeding> Maia Victor has done a bunch of work on graph reduction engines in Formality (apparently now Kind + HVM or something)
2024-06-08 10:13:41 +0000 <tomsmeding> they've written some blog posts etc on it if you're interested in that space
2024-06-08 10:13:45 +0000 <Franciman> thanks
2024-06-08 10:29:35 +0000falafel(~falafel@2a0c:5a87:3103:ec01::62b8)
2024-06-08 10:35:45 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 10:36:48 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 10:42:31 +0000falafel(~falafel@2a0c:5a87:3103:ec01::62b8) (Ping timeout: 272 seconds)
2024-06-08 10:43:55 +0000noumenon(~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving)
2024-06-08 10:51:56 +0000ss4(~wootehfoo@user/wootehfoot)
2024-06-08 10:53:45 +0000wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
2024-06-08 10:57:20 +0000gorignak(~gorignak@user/gorignak) (Quit: quit)
2024-06-08 10:57:22 +0000wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-08 10:57:36 +0000gorignak(~gorignak@user/gorignak)
2024-06-08 10:58:03 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: WeeChat 4.1.2)
2024-06-08 10:58:51 +0000ss4(~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
2024-06-08 11:02:15 +0000wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
2024-06-08 11:17:43 +0000dcoutts(~duncan@2001:620:130:6092:8b6f:ee09:26cb:f12f)
2024-06-08 11:20:11 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-06-08 11:21:22 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 11:27:22 +0000rvalue-(~rvalue@user/rvalue)
2024-06-08 11:27:25 +0000TactfulCitrus(~al@2a02:8012:87a6:0:fbe0:6116:6e30:e047)
2024-06-08 11:28:31 +0000rvalue(~rvalue@user/rvalue) (Ping timeout: 268 seconds)
2024-06-08 11:31:20 +0000rvalue-rvalue
2024-06-08 11:32:01 +0000 <lxsameer> hey folks let's say we have a record with a field like `X :: IO (Y a)`, how can i hide that a entirely since it doesn't matter for the rest of my code ?
2024-06-08 11:32:39 +0000 <lxsameer> would i make sense to have a record of functions that use X exposed to user rather than exposing X?
2024-06-08 11:32:41 +0000 <Franciman> you mean make it unaccessible?
2024-06-08 11:33:13 +0000 <Franciman> maybe you can use the existential quantifier on X?
2024-06-08 11:33:20 +0000 <lxsameer> Franciman: no, I mean hide the implementation, let me give you a more concrete example
2024-06-08 11:33:21 +0000 <Franciman> so you give it a type that you can't readily use from outside the record
2024-06-08 11:33:43 +0000 <Franciman> i mean something like: data Recordo = forall a. { X :: a, ... }
2024-06-08 11:34:00 +0000 <lxsameer> X :: IO (Pool a) a can be a connection type of different databases (sqlit, postgres....)
2024-06-08 11:34:29 +0000 <Franciman> sorry
2024-06-08 11:34:37 +0000 <Franciman> data Recordo = forall a. Recordo { X :: a, ... }
2024-06-08 11:34:41 +0000 <Franciman> https://wiki.haskell.org/Existential_type
2024-06-08 11:35:10 +0000 <lxsameer> thanks let me read it
2024-06-08 11:35:39 +0000noumenon(~noumenon@113.51-175-156.customer.lyse.net)
2024-06-08 11:38:27 +0000 <lxsameer> Franciman: thanks, I was looking for this
2024-06-08 11:40:02 +0000 <Franciman> maybe GADTs can be helpful too
2024-06-08 11:40:13 +0000 <lxsameer> cheers, I'll have a look
2024-06-08 11:54:41 +0000michalz(~michalz@185.246.207.203)
2024-06-08 11:57:12 +0000TactfulCitrus(~al@2a02:8012:87a6:0:fbe0:6116:6e30:e047) (Ping timeout: 268 seconds)
2024-06-08 12:02:05 +0000dsrt^(~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Remote host closed the connection)
2024-06-08 12:08:12 +0000michalz(~michalz@185.246.207.203) (Quit: ZNC 1.9.0 - https://znc.in)
2024-06-08 12:20:44 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 12:20:47 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 12:21:25 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 12:21:27 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 12:22:22 +0000chexum(~quassel@gateway/tor-sasl/chexum) (Read error: Connection reset by peer)
2024-06-08 12:23:21 +0000chexum(~quassel@gateway/tor-sasl/chexum)
2024-06-08 12:23:51 +0000 <lxsameer> b
2024-06-08 12:24:26 +0000titibandit(e33ffbab65@user/titibandit) (Remote host closed the connection)
2024-06-08 12:24:26 +0000eso(a0662dfd5e@2a03:6000:1812:100::1266) (Write error: Connection reset by peer)
2024-06-08 12:24:26 +0000cjb(813b6d8c75@user/cjb) (Remote host closed the connection)
2024-06-08 12:24:26 +0000henrytill(e0180937c3@2a03:6000:1812:100::e8c) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000cpli(77fc530071@2a03:6000:1812:100::252) (Remote host closed the connection)
2024-06-08 12:24:26 +0000arcadewise(52968ed80d@2a03:6000:1812:100::3df) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000probie(cc0b34050a@user/probie) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000akspecs(00cc8321af@sourcehut/user/akspecs) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f) (Write error: Connection reset by peer)
2024-06-08 12:24:26 +0000JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3) (Remote host closed the connection)
2024-06-08 12:24:26 +0000samhh(7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection)
2024-06-08 12:24:26 +0000aniketd(32aa4844cd@2a03:6000:1812:100::dcb) (Remote host closed the connection)
2024-06-08 12:24:26 +0000pmk(6afe4476a1@2a03:6000:1812:100::26d) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000ursa-major(114efe6c39@2a03:6000:1812:100::11f3) (Write error: Connection reset by peer)
2024-06-08 12:24:26 +0000chaitlatte0(ea29c0bb16@2a03:6000:1812:100::1124) (Remote host closed the connection)
2024-06-08 12:24:26 +0000whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4) (Read error: Connection reset by peer)
2024-06-08 12:24:26 +0000filwisher(2e6936c793@2a03:6000:1812:100::170) (Write error: Broken pipe)
2024-06-08 12:24:26 +0000fgaz_(1ff9197ed6@2a03:6000:1812:100::11ea) (Write error: Broken pipe)
2024-06-08 12:24:26 +0000bsima1(9d7e39c8ad@2a03:6000:1812:100::dd) (Remote host closed the connection)
2024-06-08 12:24:26 +0000jmcantrell(644f1bed9a@user/jmcantrell) (Write error: Connection reset by peer)
2024-06-08 12:24:26 +0000jleightcap(7bc4014b62@user/jleightcap) (Write error: Connection reset by peer)
2024-06-08 12:24:27 +0000shreyasminocha(51fdc93eda@user/shreyasminocha) (Write error: Connection reset by peer)
2024-06-08 12:24:27 +0000fluffyballoon(45ce440a48@2a03:6000:1812:100::e2) (Remote host closed the connection)
2024-06-08 12:24:27 +0000rselim(ce261f06ff@user/milesrout) (Remote host closed the connection)
2024-06-08 12:24:27 +0000lukec(9dfd4d094e@2a03:6000:1812:100::10e) (Write error: Broken pipe)
2024-06-08 12:24:27 +0000sus(1b7af6299f@user/zeromomentum) (Remote host closed the connection)
2024-06-08 12:24:27 +0000raghavgururajan(ea769b8000@user/raghavgururajan) (Read error: Connection reset by peer)
2024-06-08 12:24:27 +0000fn_lumi(3d621153a5@2a03:6000:1812:100::df7) (Remote host closed the connection)
2024-06-08 12:24:27 +0000evanrelf(3addc196af@2a03:6000:1812:100::f0) (Remote host closed the connection)
2024-06-08 12:24:27 +0000samhh_(7569f027cf@2a03:6000:1812:100::e4) (Remote host closed the connection)
2024-06-08 12:24:27 +0000Ankhers(e99e97ef8e@2a03:6000:1812:100::2a2) (Remote host closed the connection)
2024-06-08 12:24:28 +0000jakzale(6291399afa@user/jakzale) (Remote host closed the connection)
2024-06-08 12:24:28 +0000brettgilio(a35ba67324@2a03:6000:1812:100::260) (Remote host closed the connection)
2024-06-08 12:24:28 +0000ggb(a62ffbaf4f@2a03:6000:1812:100::3ac) (Remote host closed the connection)
2024-06-08 12:24:28 +0000alethkit(23bd17ddc6@sourcehut/user/alethkit) (Read error: Connection reset by peer)
2024-06-08 12:24:28 +0000fvr(ef3e56ca8b@2a03:6000:1812:100::3c4) (Remote host closed the connection)
2024-06-08 12:24:28 +0000ymherklotz(cb2c9cfbdd@2a03:6000:1812:100::29a) (Remote host closed the connection)
2024-06-08 12:24:28 +0000lane(809450f172@2a03:6000:1812:100::1300) (Remote host closed the connection)
2024-06-08 12:24:28 +0000duncan(c6181279e3@user/meow/duncan) (Remote host closed the connection)
2024-06-08 12:24:28 +0000sm2n(ae95cb1267@user/sm2n) (Read error: Connection reset by peer)
2024-06-08 12:24:28 +0000b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf) (Read error: Connection reset by peer)
2024-06-08 12:24:28 +0000jkoshy(99b9359beb@user/jkoshy) (Remote host closed the connection)
2024-06-08 12:24:35 +0000lane(809450f172@2a03:6000:1812:100::1300)
2024-06-08 12:24:35 +0000bsima1(9d7e39c8ad@2a03:6000:1812:100::dd)
2024-06-08 12:24:36 +0000whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4)
2024-06-08 12:24:36 +0000ggb(a62ffbaf4f@2a03:6000:1812:100::3ac)
2024-06-08 12:24:36 +0000raghavgururajan(ea769b8000@user/raghavgururajan)
2024-06-08 12:24:36 +0000filwisher(2e6936c793@2a03:6000:1812:100::170)
2024-06-08 12:24:37 +0000jakzale(6291399afa@user/jakzale)
2024-06-08 12:24:37 +0000jmcantrell(644f1bed9a@user/jmcantrell)
2024-06-08 12:24:37 +0000fgaz_(1ff9197ed6@2a03:6000:1812:100::11ea)
2024-06-08 12:24:38 +0000pmk(6afe4476a1@2a03:6000:1812:100::26d)
2024-06-08 12:24:38 +0000eso(a0662dfd5e@2a03:6000:1812:100::1266)
2024-06-08 12:24:38 +0000fluffyballoon(45ce440a48@2a03:6000:1812:100::e2)
2024-06-08 12:24:38 +0000aniketd(32aa4844cd@2a03:6000:1812:100::dcb)
2024-06-08 12:24:38 +0000lukec(9dfd4d094e@2a03:6000:1812:100::10e)
2024-06-08 12:24:39 +0000fn_lumi(3d621153a5@2a03:6000:1812:100::df7)
2024-06-08 12:24:39 +0000henrytill(e0180937c3@2a03:6000:1812:100::e8c)
2024-06-08 12:24:39 +0000evanrelf(3addc196af@2a03:6000:1812:100::f0)
2024-06-08 12:24:40 +0000brettgilio(a35ba67324@2a03:6000:1812:100::260)
2024-06-08 12:24:40 +0000jkoshy(99b9359beb@user/jkoshy)
2024-06-08 12:24:41 +0000duncan(c6181279e3@user/meow/duncan)
2024-06-08 12:24:42 +0000JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3)
2024-06-08 12:24:42 +0000jleightcap(7bc4014b62@user/jleightcap)
2024-06-08 12:24:42 +0000fvr(ef3e56ca8b@2a03:6000:1812:100::3c4)
2024-06-08 12:24:42 +0000cpli(77fc530071@2a03:6000:1812:100::252)
2024-06-08 12:24:42 +0000cjb(813b6d8c75@user/cjb)
2024-06-08 12:24:42 +0000titibandit(e33ffbab65@user/titibandit)
2024-06-08 12:24:42 +0000b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf)
2024-06-08 12:24:43 +0000ursa-major(114efe6c39@2a03:6000:1812:100::11f3)
2024-06-08 12:24:43 +0000sm2n(ae95cb1267@user/sm2n)
2024-06-08 12:24:44 +0000probie(cc0b34050a@user/probie)
2024-06-08 12:24:44 +0000kuruczgy(55b66dd3ae@2a03:6000:1812:100::127f)
2024-06-08 12:24:45 +0000akspecs(00cc8321af@sourcehut/user/akspecs)
2024-06-08 12:24:46 +0000alethkit(23bd17ddc6@sourcehut/user/alethkit)
2024-06-08 12:24:46 +0000arcadewise(52968ed80d@2a03:6000:1812:100::3df)
2024-06-08 12:24:46 +0000shreyasminocha(51fdc93eda@user/shreyasminocha)
2024-06-08 12:24:47 +0000d34df00d(~d34df00d@2600:1702:4f1b:7c10::43) (Excess Flood)
2024-06-08 12:24:47 +0000ymherklotz(cb2c9cfbdd@2a03:6000:1812:100::29a)
2024-06-08 12:24:49 +0000sus(1b7af6299f@user/zeromomentum)
2024-06-08 12:24:50 +0000samhh_(7569f027cf@2a03:6000:1812:100::e4)
2024-06-08 12:24:51 +0000Ankhers(e99e97ef8e@2a03:6000:1812:100::2a2)
2024-06-08 12:24:51 +0000chaitlatte0(ea29c0bb16@user/chaitlatte0)
2024-06-08 12:24:51 +0000samhh(7569f027cf@2a03:6000:1812:100::e4)
2024-06-08 12:24:51 +0000rselim(ce261f06ff@user/milesrout)
2024-06-08 12:25:47 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2024-06-08 12:25:56 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 12:28:34 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: WeeChat 4.1.2)
2024-06-08 12:31:57 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 255 seconds)
2024-06-08 12:38:12 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
2024-06-08 12:38:34 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds)
2024-06-08 12:38:50 +0000euleritian(~euleritia@dynamic-176-006-192-047.176.6.pool.telefonica.de)
2024-06-08 12:39:35 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 12:39:37 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 12:40:27 +0000zetef(~quassel@5.14.129.50)
2024-06-08 12:41:27 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-06-08 12:41:43 +0000ft(~ft@i5C743B45.versanet.de)
2024-06-08 12:42:44 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Client Quit)
2024-06-08 12:43:52 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 12:44:21 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 12:52:46 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 12:55:48 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 255 seconds)
2024-06-08 13:00:58 +0000chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 260 seconds)
2024-06-08 13:01:19 +0000chexum(~quassel@gateway/tor-sasl/chexum)
2024-06-08 13:02:06 +0000euleritian(~euleritia@dynamic-176-006-192-047.176.6.pool.telefonica.de) (Ping timeout: 255 seconds)
2024-06-08 13:02:58 +0000euleritian(~euleritia@dynamic-176-004-183-058.176.4.pool.telefonica.de)
2024-06-08 13:06:46 +0000dagit4374(~dagit@2001:558:6025:38:71c6:9d58:7252:8976)
2024-06-08 13:08:59 +0000dagit(~dagit@24.21.226.72) (Ping timeout: 264 seconds)
2024-06-08 13:14:58 +0000danza(~francesco@151.57.150.48)
2024-06-08 13:18:57 +0000AlexZenon(~alzenon@178.34.163.65) (Ping timeout: 272 seconds)
2024-06-08 13:25:42 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 13:26:16 +0000AlexZenon(~alzenon@178.34.163.65)
2024-06-08 13:27:28 +0000noumenon(~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving)
2024-06-08 13:28:12 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 255 seconds)
2024-06-08 13:31:22 +0000AlexZenon(~alzenon@178.34.163.65) (Ping timeout: 255 seconds)
2024-06-08 13:39:15 +0000AlexZenon(~alzenon@178.34.163.65)
2024-06-08 13:43:02 +0000verde(~user@2a04:4540:7202:1e00:ee9e:56f5:e3d8:f038)
2024-06-08 13:45:44 +0000wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-08 13:52:24 +0000verde(~user@2a04:4540:7202:1e00:ee9e:56f5:e3d8:f038) (Changing host)
2024-06-08 13:52:24 +0000verde(~user@user/verde)
2024-06-08 13:54:48 +0000verde(~user@user/verde) (Quit: Leaving)
2024-06-08 13:54:56 +0000verde(~user@user/verde)
2024-06-08 13:59:43 +0000AlexZenon(~alzenon@178.34.163.65) (Ping timeout: 255 seconds)
2024-06-08 14:00:04 +0000danza(~francesco@151.57.150.48) (Read error: Connection reset by peer)
2024-06-08 14:01:31 +0000zmt01(~zmt00@user/zmt00) (Ping timeout: 260 seconds)
2024-06-08 14:02:36 +0000tremon(~tremon@83.80.159.219)
2024-06-08 14:09:20 +0000AlexZenon(~alzenon@178.34.163.65)
2024-06-08 14:13:23 +0000zetef(~quassel@5.14.129.50) (Remote host closed the connection)
2024-06-08 14:16:37 +0000wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 256 seconds)
2024-06-08 14:23:18 +0000wootehfoot(~wootehfoo@user/wootehfoot)
2024-06-08 14:42:01 +0000verde(~user@user/verde) (Ping timeout: 255 seconds)
2024-06-08 14:46:39 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 14:55:37 +0000rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2024-06-08 14:56:07 +0000rvalue(~rvalue@user/rvalue)
2024-06-08 15:00:00 +0000driib3(~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
2024-06-08 15:03:52 +0000driib3(~driib@vmi931078.contaboserver.net)
2024-06-08 15:10:25 +0000Square(~Square@user/square)
2024-06-08 15:13:04 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 255 seconds)
2024-06-08 15:13:38 +0000Maeda(~Maeda@91-161-10-149.subs.proxad.net)
2024-06-08 15:21:06 +0000harveypwca(~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288)
2024-06-08 15:23:17 +0000oo_miguel(~Thunderbi@78-11-181-16.static.ip.netia.com.pl)
2024-06-08 15:28:08 +0000L29Ah(~L29Ah@wikipedia/L29Ah) ()
2024-06-08 15:31:55 +0000dagit4374(~dagit@2001:558:6025:38:71c6:9d58:7252:8976) (Remote host closed the connection)
2024-06-08 15:33:20 +0000dagit(~dagit@2001:558:6025:38:71c6:9d58:7252:8976)
2024-06-08 15:50:57 +0000Inst_(~Inst@user/Inst)
2024-06-08 15:53:28 +0000Inst(~Inst@user/Inst) (Ping timeout: 246 seconds)
2024-06-08 16:01:50 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net)
2024-06-08 16:05:46 +0000Lycurgus(~georg@user/Lycurgus)
2024-06-08 16:37:48 +0000Lycurgus(~georg@user/Lycurgus) (Quit: leaving)
2024-06-08 16:45:28 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 16:48:09 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de)
2024-06-08 17:10:56 +0000dolio(~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in)
2024-06-08 17:11:51 +0000dcoutts(~duncan@2001:620:130:6092:8b6f:ee09:26cb:f12f) (Ping timeout: 255 seconds)
2024-06-08 17:12:38 +0000dolio(~dolio@130.44.134.54)
2024-06-08 17:15:26 +0000Heffalump(~ganesh@urchin.earth.li)
2024-06-08 17:16:07 +0000Heffalump(~ganesh@urchin.earth.li) ()
2024-06-08 17:17:38 +0000dolio(~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in)
2024-06-08 17:19:12 +0000talukara(~talukara@user/talukara)
2024-06-08 17:19:19 +0000talukara(~talukara@user/talukara) (Max SendQ exceeded)
2024-06-08 17:19:45 +0000talukara(~talukara@user/talukara)
2024-06-08 17:22:47 +0000dolio(~dolio@130.44.134.54)
2024-06-08 17:23:14 +0000talukara(~talukara@user/talukara) (Client Quit)
2024-06-08 17:25:13 +0000dcoutts(~duncan@77.109.149.106)
2024-06-08 17:28:27 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net)
2024-06-08 17:29:05 +0000Heffalump(~ganesh@urchin.earth.li)
2024-06-08 17:29:16 +0000xdminsy(~xdminsy@117.147.70.212) (Ping timeout: 268 seconds)
2024-06-08 17:29:32 +0000boukenshaou(~Boukensha@2401:4900:1cd4:b07a:78ff:838f:4850:1823)
2024-06-08 17:30:09 +0000pavonia(~user@user/siracusa) (Quit: Bye!)
2024-06-08 17:30:17 +0000xdminsy(~xdminsy@117.147.70.212)
2024-06-08 17:38:30 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 17:44:47 +0000Sgeo(~Sgeo@user/sgeo)
2024-06-08 17:56:16 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 18:01:20 +0000harveypwca(~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288) (Remote host closed the connection)
2024-06-08 18:01:39 +0000hammond(proscan@gateway02.insomnia247.nl) (Read error: Connection reset by peer)
2024-06-08 18:01:56 +0000harveypwca(~harveypwc@2601:246:d080:b40:1889:d9bf:2dd8:b288)
2024-06-08 18:05:53 +0000hammond(proscan@gateway02.insomnia247.nl)
2024-06-08 18:19:07 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 18:22:07 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 18:23:29 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 18:24:27 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2024-06-08 18:25:10 +0000FinnElija(~finn_elij@user/finn-elija/x-0085643)
2024-06-08 18:29:57 +0000troydm(~troydm@user/troydm)
2024-06-08 18:30:53 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 18:39:02 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
2024-06-08 18:45:22 +0000gmg(~user@user/gehmehgeh) (Ping timeout: 260 seconds)
2024-06-08 18:47:41 +0000gmg(~user@user/gehmehgeh)
2024-06-08 18:58:27 +0000euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2024-06-08 19:04:27 +0000euphores(~SASL_euph@user/euphores)
2024-06-08 19:14:44 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 256 seconds)
2024-06-08 19:21:30 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 268 seconds)
2024-06-08 19:23:24 +0000Square(~Square@user/square) (Read error: Connection reset by peer)
2024-06-08 19:25:06 +0000Square(~Square@user/square)
2024-06-08 19:35:46 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 19:48:05 +0000remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz) (Ping timeout: 240 seconds)
2024-06-08 19:51:12 +0000remedan(~remedan@ip-62-245-108-153.bb.vodafone.cz)
2024-06-08 19:56:49 +0000michalz(~michalz@185.246.207.203)
2024-06-08 20:01:32 +0000ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2024-06-08 20:02:04 +0000ChaiTRex(~ChaiTRex@user/chaitrex)
2024-06-08 20:02:39 +0000JimL(~quassel@89.162.16.26) (Quit: No Ping reply in 180 seconds.)
2024-06-08 20:03:43 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 20:03:57 +0000waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-06-08 20:04:02 +0000JimL(~quassel@89.162.16.26)
2024-06-08 20:19:28 +0000Square(~Square@user/square) (Ping timeout: 246 seconds)
2024-06-08 20:19:33 +0000L29Ah(~L29Ah@wikipedia/L29Ah)
2024-06-08 20:21:28 +0000euleritian(~euleritia@dynamic-176-004-183-058.176.4.pool.telefonica.de) (Read error: Connection reset by peer)
2024-06-08 20:21:45 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 20:25:30 +0000ChaiTRex(~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
2024-06-08 20:25:31 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 20:28:05 +0000CrunchyFlakes(~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de)
2024-06-08 20:28:08 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 20:31:31 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-06-08 20:32:31 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-06-08 20:33:54 +0000wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2024-06-08 20:39:41 +0000lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 240 seconds)
2024-06-08 20:41:08 +0000L29Ah(~L29Ah@wikipedia/L29Ah) ()
2024-06-08 20:44:29 +0000inedia(~irc@2600:3c00:e000:287::1) (Quit: WeeChat 4.2.2)
2024-06-08 20:47:39 +0000inedia(~irc@2600:3c00:e000:287::1)
2024-06-08 20:50:27 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net)
2024-06-08 20:54:07 +0000Maeda(~Maeda@91-161-10-149.subs.proxad.net) (Quit: leaving)
2024-06-08 20:58:22 +0000pavonia(~user@user/siracusa)
2024-06-08 21:07:33 +0000boukenshaou(~Boukensha@2401:4900:1cd4:b07a:78ff:838f:4850:1823) (Remote host closed the connection)
2024-06-08 21:09:13 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 21:17:46 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 21:41:25 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Ping timeout: 255 seconds)
2024-06-08 21:46:50 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 21:48:49 +0000cpressey(~weechat@33b62f0c.skybroadband.com)
2024-06-08 21:49:50 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2024-06-08 21:50:40 +0000michalz(~michalz@185.246.207.203) (Quit: ZNC 1.9.0 - https://znc.in)
2024-06-08 21:53:52 +0000FeuermagierGuest9152
2024-06-08 21:53:52 +0000Feuermagier_(~Feuermagi@user/feuermagier)
2024-06-08 21:53:52 +0000Guest9152(~Feuermagi@user/feuermagier) (Killed (lead.libera.chat (Nickname regained by services)))
2024-06-08 21:53:52 +0000Feuermagier_Feuermagier
2024-06-08 21:58:16 +0000cpressey(~weechat@33b62f0c.skybroadband.com) (Quit: WeeChat 4.3.0)
2024-06-08 22:04:25 +0000tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2024-06-08 22:08:29 +0000inedia(~irc@2600:3c00:e000:287::1) (Quit: WeeChat 4.2.2)
2024-06-08 22:09:03 +0000euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds)
2024-06-08 22:13:22 +0000euleritian(~euleritia@77.22.252.56)
2024-06-08 22:17:05 +0000Lycurgus(~georg@user/Lycurgus)
2024-06-08 22:19:59 +0000machinedgod(~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 256 seconds)
2024-06-08 22:20:06 +0000dcoutts_(~duncan@77.109.149.106)
2024-06-08 22:20:27 +0000dcoutts(~duncan@77.109.149.106) (Read error: Connection reset by peer)
2024-06-08 22:21:07 +0000__monty__(~toonn@user/toonn) (Quit: leaving)
2024-06-08 22:21:54 +0000Jackneill(~Jackneill@94-21-193-177.pool.digikabel.hu) (Ping timeout: 255 seconds)
2024-06-08 22:30:31 +0000 <hololeap> this is one of those vague questions that I seem to get in trouble for here, but does anyone have any ideas in regards to this kind of boilerplate for writing Monoid instances and how to automate it somehow: https://bpa.st/YD4A
2024-06-08 22:32:00 +0000 <hololeap> or a deeper understanding. I see a lot of that same pattern but I haven't quite figured out what I'm seeing
2024-06-08 22:32:39 +0000 <hololeap> (and yes I wrote that)
2024-06-08 22:32:59 +0000 <geekosaur> it's just the definitions of semigroup and monoid
2024-06-08 22:34:06 +0000 <hololeap> right, but there's often times a constructor that will "dominate", for instance: HelpMode <> _ = HelpMode; _ <> HelpMode = HelpMode
2024-06-08 22:34:07 +0000 <geekosaur> semigroup captures the notion of "combining values", monoid captures the notion of "identity value when combining"
2024-06-08 22:34:27 +0000 <geekosaur> yes, but that depends on the type
2024-06-08 22:34:36 +0000 <haskellbridge> <Heffalump (@hsenag:matrix.org)> I think you'd probably spend more effort defining a clever specification language for that than you would save in writing the boilerplate
2024-06-08 22:34:42 +0000 <haskellbridge> <Heffalump (@hsenag:matrix.org)> unless you have a _lot_ of it
2024-06-08 22:34:51 +0000 <geekosaur> sometimes you get that, sometimes you don't (neither lists nor numbers work that way, for example)
2024-06-08 22:35:00 +0000 <hololeap> ok, maybe I'm the only one who has recognized this pattern
2024-06-08 22:35:58 +0000 <hololeap> It's usually something like: X <> _ = X; _ <> X = X; Y x1 <> Y x2 = ...
2024-06-08 22:37:12 +0000 <haskellbridge> <Heffalump (@hsenag:matrix.org)> I think what you have done is defined a semilattice or similar
2024-06-08 22:37:52 +0000 <hololeap> Heffalump: I think you're right. I watched a talk on that a while back and I kind of get it
2024-06-08 22:39:17 +0000 <EvanR> haskell monoid instance IS the nice specification language xD
2024-06-08 22:39:36 +0000 <hololeap> because here if someone specifies --help, that should override anything else on the command line
2024-06-08 22:40:02 +0000 <haskellbridge> <Heffalump (@hsenag:matrix.org)> EvanR: I don't think it's that simple, hololeap's one has some extra structure
2024-06-08 22:40:41 +0000 <hololeap> so if HelpMode shows up even once in the list from getOpt, it needs to be what remains after running mconcat on the list
2024-06-08 22:40:47 +0000 <hololeap> does that make sense?
2024-06-08 22:41:15 +0000 <EvanR> X <> _ = X; _ <> X = X; Y x1 <> Y x2 = f x1 x2 where ...
2024-06-08 22:42:05 +0000 <EvanR> but shoehorning the behavior of the parsed command line arguments into a monoid instance seems kind like shoehorning
2024-06-08 22:42:19 +0000 <EvanR> parsing them in the first place is another story
2024-06-08 22:42:46 +0000 <hololeap> EvanR: do you want to see the full code? using mconcat worked pretty well
2024-06-08 22:43:19 +0000 <EvanR> I can imagine the config monoid reacting to --help by simply setting the flag in the record saying --help was provided
2024-06-08 22:43:30 +0000 <EvanR> and letting something else deal with the business logic
2024-06-08 22:43:44 +0000 <hololeap> it's just a one file .hs project
2024-06-08 22:44:24 +0000acidjnk(~acidjnk@p200300d6e714dc900cd3e2d9c55a017d.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2024-06-08 22:44:48 +0000 <hololeap> https://github.com/gentoo-haskell/gentoo-haskell/blob/74e70146bf3a60f06966e7239075523568baaced/scr…
2024-06-08 22:45:17 +0000 <hololeap> mconcat is at line 203
2024-06-08 22:46:13 +0000 <EvanR> not saying it won't work but it just seems like a non obvious way to go about it
2024-06-08 22:46:51 +0000 <hololeap> what would be a more obvious way to do this?
2024-06-08 22:47:11 +0000 <hololeap> I tend to think of things in terms of monoids :p
2024-06-08 22:47:13 +0000 <EvanR> do what, implement --help, --verbose, and whatever else?
2024-06-08 22:47:55 +0000 <EvanR> you're lucky you want to do something which can be construed as a valid monoid xD
2024-06-08 22:48:16 +0000 <EvanR> (semigroup)
2024-06-08 22:48:29 +0000 <hololeap> getOpt returns a list of valid options on the command line. if there's even a single --help in there, it needs to show the help menu. otherwise it needs to know if --verbose was passed, even once
2024-06-08 22:48:50 +0000 <EvanR> and you happen to not care what else was passed if --help appears anywhere, just a fluke
2024-06-08 22:49:04 +0000 <monochrom> hololeap: I wonder if you accept "code up the isomorphism with Maybe Verbose, then you can just use Maybe's monoidness"
2024-06-08 22:49:14 +0000 <EvanR> e.g. some programs might want --help <topic> to work
2024-06-08 22:49:27 +0000 <EvanR> or --help <topic> --color xD
2024-06-08 22:49:43 +0000 <hololeap> monochrom: yeah here I could, since it's either help menu or normal mode + verbose option
2024-06-08 22:50:08 +0000 <hololeap> yeah this is a really simple utility
2024-06-08 22:50:24 +0000 <geekosaur> fwiw I agree this feels like "abuse of Monoid/Semigroup"
2024-06-08 22:50:24 +0000 <monochrom> And then if you're reckless, isomorphism = unsafeCoerce haha
2024-06-08 22:50:50 +0000 <hololeap> how would unsafeCoerce work on sum types
2024-06-08 22:51:00 +0000 <geekosaur> intended to say that earlier but I had to run down and meat the grubhub driver 🙂
2024-06-08 22:51:31 +0000 <EvanR> I'm here to call out waste fraud and abuse when you're not here
2024-06-08 22:52:29 +0000 <hololeap> geekosaur: I really thought this was *appropriate* use of monoid/semigroup
2024-06-08 22:52:33 +0000 <EvanR> hololeap, in my reimagining, I implement this short circuiting behavior with an if statement, if --help was provided, do this, otherwise do that xD
2024-06-08 22:52:48 +0000 <hololeap> like, it passes all the monoid/semigroup laws
2024-06-08 22:53:12 +0000 <EvanR> you could also use a monad where all return types are ()
2024-06-08 22:53:15 +0000 <EvanR> but why
2024-06-08 22:53:42 +0000 <hololeap> well, fair, but that's a step further
2024-06-08 22:53:50 +0000 <EvanR> it would pass all laws!
2024-06-08 22:53:57 +0000 <hololeap> I'm just not sure what the step backward would be
2024-06-08 22:53:57 +0000 <EvanR> (but not make any damn sense)
2024-06-08 22:54:13 +0000takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2024-06-08 22:54:19 +0000 <EvanR> like I said, you want it to do X if --help was provided, Y otherwise
2024-06-08 22:54:37 +0000 <EvanR> there's way less code that does that
2024-06-08 22:54:47 +0000 <hololeap> so basically write what I have but don't call it monoid/semigroup :p
2024-06-08 22:55:01 +0000 <geekosaur> hololeap, informally (that is, without recourse to laws) I would expect a mon oid to preserve information. your HelpMode loses it
2024-06-08 22:55:26 +0000 <EvanR> a type use for monoid here is to combine the provided configuration options into a coherence final config record
2024-06-08 22:55:29 +0000 <EvanR> typical*
2024-06-08 22:55:37 +0000 <EvanR> coherent*
2024-06-08 22:55:38 +0000 <geekosaur> the semantics should be "combine", not "replace"
2024-06-08 22:56:06 +0000 <hololeap> have you not seen Data.Semigroup.{First,Last}
2024-06-08 22:56:18 +0000 <EvanR> the semilattice idea does result in losing information
2024-06-08 22:56:49 +0000 <EvanR> it obeys laws
2024-06-08 22:56:56 +0000 <EvanR> you're up there in the evolution of the haskell programmer xD
2024-06-08 22:56:57 +0000 <ncf> i completely disagree that this is an "abuse of Monoid", or "shoehorning", fwiw
2024-06-08 22:57:29 +0000 <ncf> command-line arguments form a monoid under concatenation, so it's only natural to interpret them into a monoid
2024-06-08 22:57:41 +0000 <EvanR> that's not what the instance does or is used like
2024-06-08 22:59:14 +0000 <ncf> ?
2024-06-08 22:59:27 +0000 <EvanR> it doesn't concatenate as such
2024-06-08 22:59:51 +0000 <EvanR> --help deletes the other options
2024-06-08 23:00:40 +0000 <ncf> ..yes, you interpret them into a *different* monoid
2024-06-08 23:00:41 +0000gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-06-08 23:00:42 +0000 <EvanR> it's acting like the infinity for a max monoid
2024-06-08 23:00:59 +0000 <EvanR> it works just a weird way to go about it
2024-06-08 23:01:27 +0000 <ncf> the CLI is a list (i.e. free monoid) of arguments, so you use the universal property to interpret them into the monoid you actually want
2024-06-08 23:01:32 +0000 <ncf> it's not weird at all, it's very principled
2024-06-08 23:01:35 +0000 <EvanR> you sure can
2024-06-08 23:01:44 +0000 <EvanR> it doesn't help achieve the goal really
2024-06-08 23:02:02 +0000 <EvanR> just my perspective from a "can I explain this code to a normal person" angle xD
2024-06-08 23:03:02 +0000 <hololeap> I would hope haskell devs at least understand monoids. I appreciate your perspective EvanR
2024-06-08 23:03:05 +0000 <mauke> > (1 > 2) `max` any even [3, 5, 2]
2024-06-08 23:03:07 +0000 <lambdabot> True
2024-06-08 23:03:32 +0000 <hololeap> and I came here for differing opinions so lay them on
2024-06-08 23:04:14 +0000sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 256 seconds)
2024-06-08 23:04:39 +0000 <EvanR> i.e. "what's this code doing" is it "interpreting the universal monoid into one which is something like a semi lattice" vs "shows help if they do --help" xD
2024-06-08 23:05:25 +0000 <EvanR> code looks like the first but could look like the second
2024-06-08 23:06:58 +0000causal(~eric@50.35.88.207)
2024-06-08 23:10:03 +0000 <hololeap> hm good point
2024-06-08 23:11:27 +0000 <hololeap> especially since the monoid/semigroup instance only used once it could be more readable as a custom function
2024-06-08 23:14:15 +0000 <hololeap> thanks. these kind of insights are hard to come by when you're coding by yourself
2024-06-08 23:21:16 +0000shailangsa(~shailangs@host86-186-127-241.range86-186.btcentralplus.com)
2024-06-08 23:31:37 +0000hiredman(~hiredman@frontier1.downey.family) (Quit: Lost terminal)
2024-06-08 23:34:21 +0000tremon(~tremon@83.80.159.219) (Quit: getting boxed in)
2024-06-08 23:40:29 +0000target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2024-06-08 23:43:35 +0000Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2024-06-08 23:48:43 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 23:52:53 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 240 seconds)
2024-06-08 23:56:42 +0000peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-06-08 23:57:35 +0000 <monochrom> I am against explaining to "normal" people.
2024-06-08 23:58:47 +0000 <EvanR> what an elitist!!!
2024-06-08 23:59:02 +0000 <monochrom> s/elit/profession/
2024-06-08 23:59:08 +0000 <EvanR> retreat to the ivory tower!
2024-06-08 23:59:40 +0000 <monochrom> Every profession will have a lot of things unexplanable to outsiders. This is simply the inevitable consequence of specialization.
2024-06-08 23:59:54 +0000 <monochrom> The alternative is to keep programming unprofessional.