Home liberachat/#haskell: Logs Calendar

Logs on 2025-03-25 (liberachat/#haskell)

00:00:47 × sprotte24 quits (~sprotte24@p200300d16f03d500a58d694121a6d0cd.dip0.t-ipconnect.de) (Quit: Leaving)
00:01:24 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
00:01:33 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
00:01:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:07:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:13:51 × inca quits (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com) (Ping timeout: 252 seconds)
00:14:02 <EvanR> it seems --load-file and GHC_ENVIRONMENT= don't work together, throwing a GhcException "Package environment \".ghc.environment.x86_64-linux-9.6.3\" (specified in GHC_ENVIRONMENT) not found"
00:14:24 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 252 seconds)
00:15:22 inca joins (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com)
00:16:27 <EvanR> and apparently isnt required anymore anyway...
00:17:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:19:51 × inca quits (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com) (Ping timeout: 244 seconds)
00:20:28 sp1ff joins (~user@c-67-160-173-55.hsd1.wa.comcast.net)
00:22:09 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:24:34 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
00:24:59 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
00:25:23 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:26:16 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (Remote host closed the connection)
00:26:31 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
00:26:40 inca joins (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com)
00:28:43 × PotatoGim quits (sid99505@id-99505.lymington.irccloud.com) (Ping timeout: 245 seconds)
00:30:36 PotatoGim joins (sid99505@lymington.irccloud.com)
00:32:43 Square joins (~Square@user/square)
00:34:35 infinity0 joins (~infinity0@pwned.gg)
00:35:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:38:23 kh0d joins (~kh0d@212.200.65.82)
00:38:28 × acidjnk quits (~acidjnk@p200300d6e71c4f84f984511b1aacfb73.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
00:40:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
00:42:53 × kh0d quits (~kh0d@212.200.65.82) (Ping timeout: 245 seconds)
00:42:53 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
00:43:26 alfiee joins (~alfiee@user/alfiee)
00:47:49 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
00:51:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:53:24 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 246 seconds)
00:54:33 × xff0x quits (~xff0x@2405:6580:b080:900:551a:8945:d45c:6ab4) (Ping timeout: 252 seconds)
00:56:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:00:36 sarna joins (~sarna@d192-22.icpnet.pl)
01:00:58 × dsrt^ quits (~dsrt@c-71-199-187-173.hsd1.ga.comcast.net) (Read error: Connection reset by peer)
01:01:09 dsrt^ joins (dsrt@c-71-199-187-173.hsd1.ga.comcast.net)
01:07:06 × s3 quits (~s3@user/bn) (Ping timeout: 265 seconds)
01:07:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:12:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:13:44 kh0d joins (~kh0d@212.200.65.82)
01:18:32 × kh0d quits (~kh0d@212.200.65.82) (Ping timeout: 244 seconds)
01:23:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:23:31 kh0d joins (~kh0d@212.200.65.82)
01:27:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
01:29:10 alfiee joins (~alfiee@user/alfiee)
01:33:14 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
01:33:18 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
01:35:23 × kh0d quits (~kh0d@212.200.65.82) (Ping timeout: 245 seconds)
01:38:26 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:38:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:43:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:47:01 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
01:50:53 kh0d joins (~kh0d@212.200.65.82)
01:53:11 s3 joins (~s3@user/bn)
01:54:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:56:15 × kh0d quits (~kh0d@212.200.65.82) (Ping timeout: 244 seconds)
02:01:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
02:02:53 × polykernel quits (~polykerne@user/polykernel) (Remote host closed the connection)
02:03:45 polykernel joins (~polykerne@user/polykernel)
02:05:33 × j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 244 seconds)
02:05:57 j1n37 joins (~j1n37@user/j1n37)
02:10:29 kh0d joins (~kh0d@212.200.65.82)
02:12:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:13:53 × yaroot quits (~yaroot@p3747022-ipxg13101souka.saitama.ocn.ne.jp) (Remote host closed the connection)
02:15:14 alfiee joins (~alfiee@user/alfiee)
02:15:30 × emergence quits (emergence@vm0.max-p.me) (Quit: emergence)
02:15:34 × kh0d quits (~kh0d@212.200.65.82) (Ping timeout: 260 seconds)
02:16:38 Garbanzo joins (~Garbanzo@2602:304:6eac:dc10::2e)
02:17:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:19:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
02:23:13 yaroot joins (~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c)
02:23:34 emergence joins (thelounge@vm0.max-p.me)
02:23:58 × zlqrvx quits (~zlqrvx@101.175.150.247) (Read error: Connection reset by peer)
02:24:33 zlqrvx joins (~zlqrvx@2001:8003:8c8b:e00:374a:bdcb:457c:d1e3)
02:25:14 kh0d joins (~kh0d@212.200.247.164)
02:27:39 × euphores quits (~SASL_euph@user/euphores) (Ping timeout: 260 seconds)
02:28:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:30:23 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 245 seconds)
02:32:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:34:06 × orslon^ quits (~orslon@c-71-199-187-173.hsd1.ga.comcast.net) (Ping timeout: 252 seconds)
02:35:14 orslon^ joins (orslon@c-71-199-187-173.hsd1.ga.comcast.net)
02:35:21 euphores joins (~SASL_euph@user/euphores)
02:35:56 × emergence quits (thelounge@vm0.max-p.me) (Quit: emergence)
02:37:53 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
02:38:51 emergence joins (thelounge@vm0.max-p.me)
02:43:35 Aspen55 joins (~Aspen@2a09:bac2:a7f2:1800::264:bb)
02:43:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:45:23 tavare joins (~tavare@user/tavare)
02:48:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
02:51:03 × Aspen55 quits (~Aspen@2a09:bac2:a7f2:1800::264:bb) (Quit: Client closed)
02:58:13 <haskellbridge> <Liamzee> have we gone over this yet?
02:58:14 <haskellbridge> <Liamzee> https://web-frameworks-benchmark.netlify.app/result?asc=0&f=axum,actix,servant&l=haskell&metric=totalRequestsPerS&order_by=level64
02:59:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:59:46 kh0d joins (~kh0d@212.200.247.164)
03:00:04 × glguy quits (glguy@libera/staff/glguy) (Read error: Connection reset by peer)
03:00:59 alfiee joins (~alfiee@user/alfiee)
03:01:36 glguy joins (glguy@libera/staff/glguy)
03:02:42 <haskellbridge> <Liamzee> the surprising part is that scotty is beating axum and actix at low scales, when scotty isn't known for its performance
03:04:27 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 244 seconds)
03:04:27 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:05:01 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
03:05:11 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
03:05:27 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:09:37 <haskellbridge> <dmjio> I’d expect servant and Scotty to be the same since they’re both basically warp. A 5x diff is sus
03:15:31 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:18:07 kh0d joins (~kh0d@212.200.247.164)
03:20:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:28:50 <haskellbridge> <Liamzee> yeah. tbh, full disclosure, both get beaten by ookami and microhttp
03:29:12 <haskellbridge> <Liamzee> but generally a high performance haskell library should be able to reach 50% of rust, which is just saying web frameworks need love
03:31:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:36:36 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:36:36 werneta joins (~werneta@syn-071-083-160-242.res.spectrum.com)
03:38:23 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
03:40:21 <haskellbridge> <dmjio> We can just FFI into the fastest C web server
03:41:48 <haskellbridge> <dmjio> And use bytestring builder, with some light staging
03:42:06 <monochrom> It would also be most buggy.
03:43:29 <haskellbridge> <dmjio> I don’t buy that. C still runs the world
03:44:22 <monochrom> But do you buy: The glue code you write for FFI adds one more opportunity for bugs?
03:44:50 <haskellbridge> <dmjio> Where are all the rust network stacks. TCP/IP is the global highway of information and it’s predominantly in C
03:44:50 <monochrom> IMO that's even more buggy than plain C.
03:45:17 <haskellbridge> <dmjio> Rust is trying to make its way into the kernel with great difficulty
03:46:23 alfiee joins (~alfiee@user/alfiee)
03:48:36 <haskellbridge> <dmjio> It’s too pervasive. Like cobol it’s never going away
03:49:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:50:30 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 246 seconds)
03:52:37 Square2 joins (~Square4@user/square)
03:54:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:54:19 <haskellbridge> <dmjio> monochrom do you buy there is an inverse correlation between the most used software and the most correct software
03:55:48 × Square quits (~Square@user/square) (Ping timeout: 245 seconds)
03:55:55 <haskellbridge> <Liamzee> why does it have to be linear
03:55:59 <monochrom> Sure.
04:05:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:06:20 <Axman6> Well, when first looking at that benchmark, the Servant implementation uses String everywhere...
04:07:20 <haskellbridge> <dmjio> Until you can make writing Lean as easy and as familiar as JavaScript, I don’t see the situation changing any time soon.
04:07:22 <haskellbridge> I am optimistic about Zig though. You have to keep the foot gun accesible.
04:07:33 <haskellbridge> <dmjio> Axman6: Someone is sand baggin’ us
04:08:19 <haskellbridge> <dmjio> Zig embodies the Berkeley school philosophy which is why it will continue to succeed.
04:09:46 <Axman6> Looking at what the servers actually do, I would be surprised if there's heaps of overhead from using String, but there could be some. Changing it to Text should reduce conversions though
04:09:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:11:54 <monochrom> Oh Lean will never be as easy as C. Even Haskell will never be.
04:12:25 <monochrom> Haskell or similar languages can be a sweet spot of not too many bugs and not too slow.
04:14:07 <monochrom> But we don't even need that for the inverse correlation between most used and most correct, no? Social media has also shown us the inverse correlation between most believed and most correct. Like we need to rationalize that.
04:20:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:25:18 <haskellbridge> <Liamzee> also re dmjio: it's possible servant breaks the specialization in warp, but i'm not really familiar with warp in terms of its type architecture
04:27:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
04:28:34 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 260 seconds)
04:31:47 alfiee joins (~alfiee@user/alfiee)
04:32:19 × notdabs quits (~Owner@2600:1700:69cf:9000:c43:fe75:997:32d7) (Read error: Connection reset by peer)
04:36:01 <haskellbridge> <dmjio> Liamzee: It wouldn’t surprise me at all if HasServer dictionaries weren’t getting specialized given the incremental compilation nature of GHC and cross module inlining limitations. But 5x still sounds heavy.
04:36:29 <haskellbridge> <dmjio> monochrom: That’s fair.
04:36:38 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
04:37:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:42:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
04:44:36 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
04:44:56 aforemny_ joins (~aforemny@2001:9e8:6cde:a00:bd3b:75a2:c3bc:65be)
04:45:48 weary-traveler joins (~user@user/user363627)
04:46:42 × aforemny quits (~aforemny@2001:9e8:6cc3:cb00:4bbe:2838:488d:a24d) (Ping timeout: 276 seconds)
04:51:02 <davean> dmjio that is also a lot of parsing via a lot of type level implied machinery
04:52:38 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.5.2)
04:53:08 <haskellbridge> <dmjio> The biggest upfront cost is the first request. The graph reduces and subsequent requests do less work
04:53:29 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:57:34 kh0d joins (~kh0d@212.200.247.164)
04:57:46 <haskellbridge> <dmjio> Parsing shouldn’t be any different. Servant handlers operate on an already parsed request, much like Scotty
04:58:54 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
05:00:58 michalz joins (~michalz@185.246.207.197)
05:03:46 × inca quits (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com) (Ping timeout: 248 seconds)
05:03:48 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 244 seconds)
05:04:16 × cross quits (~cross@spitfire.i.gajendra.net) (Quit: Lost terminal)
05:05:12 inca joins (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com)
05:09:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:14:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
05:16:32 × inca quits (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com) (Ping timeout: 272 seconds)
05:16:51 alfiee joins (~alfiee@user/alfiee)
05:16:51 inca joins (~inca@4-138-135-64.gray-ng.dsl.pinetreenetworks.com)
05:21:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
05:21:25 kh0d joins (~kh0d@212.200.247.164)
05:25:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:30:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
05:31:29 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 265 seconds)
05:40:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:45:23 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:56:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:01:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
06:01:54 alfiee joins (~alfiee@user/alfiee)
06:02:24 kh0d joins (~kh0d@212.200.247.164)
06:06:34 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
06:07:28 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 245 seconds)
06:09:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:11:29 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
06:13:28 takuan joins (~takuan@d8D86B601.access.telenet.be)
06:14:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
06:16:46 fp joins (~Thunderbi@wireless-86-50-141-186.open.aalto.fi)
06:18:46 × Garbanzo quits (~Garbanzo@2602:304:6eac:dc10::2e) (Remote host closed the connection)
06:19:10 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:21:00 × fp quits (~Thunderbi@wireless-86-50-141-186.open.aalto.fi) (Ping timeout: 246 seconds)
06:21:13 kh0d joins (~kh0d@212.200.247.164)
06:21:35 fp joins (~Thunderbi@2001:708:20:1406::1370)
06:25:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:26:06 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 265 seconds)
06:26:39 kh0d joins (~kh0d@212.200.247.164)
06:28:35 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
06:30:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
06:41:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:42:35 × petrichor quits (~znc-user@user/petrichor) (Ping timeout: 252 seconds)
06:43:03 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds)
06:43:13 petrichor joins (~znc-user@user/petrichor)
06:43:59 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 265 seconds)
06:46:58 alfiee joins (~alfiee@user/alfiee)
06:48:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:50:17 chele joins (~chele@user/chele)
06:51:13 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
06:54:08 ThePenguin9 joins (~ThePengui@cust-95-80-24-166.csbnet.se)
06:54:30 × ThePenguin quits (~ThePengui@cust-95-80-24-166.csbnet.se) (Read error: Connection reset by peer)
06:54:30 ThePenguin9 is now known as ThePenguin
06:57:01 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
06:59:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:00:02 × caconym quits (~caconym@user/caconym) (Quit: bye)
07:01:01 caconym joins (~caconym@user/caconym)
07:03:12 random-jellyfish joins (~developer@85.50.149.196)
07:03:12 × random-jellyfish quits (~developer@85.50.149.196) (Changing host)
07:03:12 random-jellyfish joins (~developer@user/random-jellyfish)
07:04:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
07:09:12 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
07:13:13 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
07:13:40 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
07:14:56 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
07:15:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:15:14 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
07:16:19 Lord_of_Life_ is now known as Lord_of_Life
07:20:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
07:22:46 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:22:49 × jcarpenter2 quits (~lol@2603:3016:1e01:b960:d420:7c16:1b3d:a360) (Ping timeout: 260 seconds)
07:25:05 jcarpenter2 joins (~lol@2603:3016:1e01:b960:842d:fcc5:786c:255c)
07:27:41 kh0d joins (~kh0d@212.200.247.164)
07:30:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:31:44 JuanDaugherty joins (~juan@user/JuanDaugherty)
07:32:03 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 245 seconds)
07:32:23 alfiee joins (~alfiee@user/alfiee)
07:33:54 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Quit: ZNC 1.9.1 - https://znc.in)
07:35:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:35:54 × tavare quits (~tavare@user/tavare) (Remote host closed the connection)
07:36:38 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
07:46:07 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
07:46:30 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
07:46:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:50:08 cipherrot joins (~znc-user@user/petrichor)
07:50:55 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:51:25 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
07:51:31 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:53:19 × petrichor quits (~znc-user@user/petrichor) (Ping timeout: 260 seconds)
07:55:25 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
07:58:04 acidjnk joins (~acidjnk@p200300d6e71c4f24c8a043139ebe92bd.dip0.t-ipconnect.de)
07:59:34 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
08:02:31 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
08:04:01 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 248 seconds)
08:07:28 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
08:08:48 × puke quits (~puke@user/puke) (Remote host closed the connection)
08:09:40 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
08:10:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
08:13:37 puke joins (~puke@user/puke)
08:15:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
08:17:35 kh0d joins (~kh0d@212.200.247.164)
08:17:47 alfiee joins (~alfiee@user/alfiee)
08:22:35 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
08:26:25 fp1 joins (~Thunderbi@2001:708:150:10::1d80)
08:28:22 × fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 268 seconds)
08:28:27 fp1 is now known as fp
08:34:19 × kh0d quits (~kh0d@212.200.247.164) (Read error: Connection timed out)
08:35:58 kh0d joins (~kh0d@212.200.247.164)
08:39:27 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
08:43:40 fp1 joins (~Thunderbi@2001:708:20:1406::1370)
08:44:05 × fp quits (~Thunderbi@2001:708:150:10::1d80) (Ping timeout: 248 seconds)
08:44:05 fp1 is now known as fp
08:44:36 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds)
08:54:03 merijn joins (~merijn@77.242.116.146)
09:01:34 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 260 seconds)
09:02:50 alfiee joins (~alfiee@user/alfiee)
09:07:32 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
09:14:25 petrichor joins (~znc-user@user/petrichor)
09:17:41 × cipherrot quits (~znc-user@user/petrichor) (Ping timeout: 248 seconds)
09:21:27 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
09:26:52 kuribas joins (~user@2a02:1808:43:dbd9:6ca7:205b:89ae:6340)
09:30:21 × jcarpenter2 quits (~lol@2603:3016:1e01:b960:842d:fcc5:786c:255c) (Ping timeout: 246 seconds)
09:31:40 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
09:32:23 jcarpenter2 joins (~lol@96.78.87.197)
09:32:59 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
09:33:26 lxsameer joins (~lxsameer@Serene/lxsameer)
09:35:45 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 248 seconds)
09:35:49 cipherrot joins (~znc-user@user/petrichor)
09:36:49 × petrichor quits (~znc-user@user/petrichor) (Ping timeout: 244 seconds)
09:38:35 × fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 252 seconds)
09:42:44 ash3en joins (~Thunderbi@89.56.182.235)
09:43:02 × werneta quits (~werneta@syn-071-083-160-242.res.spectrum.com) (Read error: Connection reset by peer)
09:43:12 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
09:44:06 humasect joins (~humasect@dyn-192-249-132-2.nexicom.net)
09:45:43 merijn joins (~merijn@77.242.116.146)
09:46:48 werneta joins (~werneta@syn-071-083-160-242.res.spectrum.com)
09:48:10 × ft quits (~ft@p508db463.dip0.t-ipconnect.de) (Quit: leaving)
09:49:30 × cipherrot quits (~znc-user@user/petrichor) (Ping timeout: 272 seconds)
09:49:34 alfiee joins (~alfiee@user/alfiee)
09:51:56 petrichor joins (~znc-user@user/petrichor)
09:52:29 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
09:53:09 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Read error: Connection reset by peer)
09:53:10 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
09:53:10 × califax quits (~califax@user/califx) (Remote host closed the connection)
09:53:27 califax joins (~califax@user/califx)
09:53:38 ChaiTRex joins (~ChaiTRex@user/chaitrex)
09:53:51 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
09:54:34 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
09:54:50 fp joins (~Thunderbi@130.233.70.95)
09:56:29 merijn joins (~merijn@77.242.116.146)
09:58:40 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:102d:f23f:3d0e:5609)
09:58:57 JuanDaugherty joins (~juan@user/JuanDaugherty)
10:01:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
10:03:41 merijn joins (~merijn@77.242.116.146)
10:09:32 kh0d joins (~kh0d@212.200.247.164)
10:12:43 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
10:18:37 tabaqui joins (~tabaqui@167.71.80.236)
10:20:20 kh0d joins (~kh0d@212.200.247.164)
10:24:49 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
10:24:58 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 245 seconds)
10:27:03 cipherrot joins (~znc-user@user/petrichor)
10:28:46 × petrichor quits (~znc-user@user/petrichor) (Ping timeout: 272 seconds)
10:29:08 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 245 seconds)
10:34:38 alfiee joins (~alfiee@user/alfiee)
10:35:03 × ash3en quits (~Thunderbi@89.56.182.235) (Ping timeout: 252 seconds)
10:36:40 merijn joins (~merijn@77.242.116.146)
10:39:07 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
10:39:40 ash3en joins (~Thunderbi@89.56.182.235)
10:49:00 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
10:49:02 × fp quits (~Thunderbi@130.233.70.95) (Ping timeout: 265 seconds)
10:49:07 × FragByte quits (~christian@user/fragbyte) (Quit: Quit)
10:49:43 kh0d joins (~kh0d@212.200.247.164)
10:51:02 FragByte joins (~christian@user/fragbyte)
10:51:45 dhil joins (~dhil@2a0c:b381:52e:3600:4562:2dab:a736:76b0)
10:52:33 × ash3en quits (~Thunderbi@89.56.182.235) (Ping timeout: 244 seconds)
10:54:19 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 244 seconds)
10:55:42 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: leaving)
10:57:29 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
11:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
11:02:16 caconym joins (~caconym@user/caconym)
11:04:27 × yaroot quits (~yaroot@2400:4052:ac0:d901:1cf4:2aff:fe51:c04c) (Read error: Connection reset by peer)
11:04:41 yaroot joins (~yaroot@p3747022-ipxg13101souka.saitama.ocn.ne.jp)
11:16:52 j1n37- joins (~j1n37@user/j1n37)
11:17:03 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 244 seconds)
11:20:03 alfiee joins (~alfiee@user/alfiee)
11:24:02 xff0x joins (~xff0x@2405:6580:b080:900:f588:30f2:ad44:5069)
11:24:37 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
11:26:36 kuribas` joins (~user@ip-188-118-57-242.reverse.destiny.be)
11:28:21 × kuribas quits (~user@2a02:1808:43:dbd9:6ca7:205b:89ae:6340) (Ping timeout: 248 seconds)
11:29:57 × orslon^ quits (orslon@c-71-199-187-173.hsd1.ga.comcast.net) (Ping timeout: 248 seconds)
11:30:04 orslon^ joins (dehsou@c-71-199-187-173.hsd1.ga.comcast.net)
11:32:08 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds)
11:36:06 wootehfoot joins (~wootehfoo@user/wootehfoot)
11:36:41 × humasect quits (~humasect@dyn-192-249-132-2.nexicom.net) (Quit: Leaving...)
11:43:17 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds)
11:44:19 merijn joins (~merijn@77.242.116.146)
11:46:36 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds)
11:50:24 kh0d joins (~kh0d@212.200.247.164)
11:51:23 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
11:56:00 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:56:49 merijn joins (~merijn@77.242.116.146)
11:57:02 <[exa]> gah, is there some easily rememberable rule of thumb for monad transformer order? I.e., how to instinctively know whether one wants `StateT s Parser` or `ParserT (State s)`
11:57:16 <[exa]> I always have to look at the implementation to just be sure
11:59:59 pdw joins (~user@215.156.62.185.bridgefibre.net)
12:04:24 <tomsmeding> @unmtl
12:04:24 <lambdabot> err: Parse error: ;
12:05:26 alfiee joins (~alfiee@user/alfiee)
12:06:29 <[exa]> tomsmeding: yeah that's what I kinda do in head and want to have a shortcut around it
12:07:16 <tomsmeding> it's still doing the same thing in the end, but you can think about the eliminator functions: if you have a StateT s Parser, then you'll runStateT and get something in the Parser monad
12:07:27 <tomsmeding> whereas if you have a ParserT (State s), you'll run the parser and get something in the state monad back
12:07:46 <tomsmeding> this indirectly tells you what the actual semantics of your stack is
12:08:01 <tomsmeding> without having to look at the precise implementation of the monad data types
12:09:04 <tomsmeding> this is most clear with State and Except -- with StateT s (Except e), you run the state monad and then get an Except out, i.e. you get a state irrespective of whether there was an exception
12:09:28 <tomsmeding> with ExceptT e (State s), you run the ExceptT to _maybe_ get a State out
12:09:40 <tomsmeding> @unmtl ExceptT e (State s)
12:09:40 <lambdabot> err: `ExceptT e (State s)' is not applied to enough arguments, giving `/\A. s -> (Either e A, s)'
12:09:42 <tomsmeding> @unmtl ExceptT e (State s) a
12:09:42 <lambdabot> s -> (Either e a, s)
12:09:48 <tomsmeding> I'm wrong
12:09:53 <tomsmeding> disregard all that I say
12:09:54 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
12:09:57 <[exa]> you see, it's friggin confusing
12:09:59 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
12:10:03 tomsmeding hides in a corner
12:10:28 <[exa]> technically you were right but it just does the other thing
12:10:32 <[exa]> I think
12:10:43 <tomsmeding> there's a trick I found out a while ago: if you're okay with accessing your monad through mtl classes, then you can use DerivingVia to document what you're doing
12:11:13 <tomsmeding> newtype M a = M (s -> (Either e a, s)) deriving (Functor, Applicative, Monad, MonadState s, MonadExcept e) via (ExceptT e (State s) a)
12:11:55 <tomsmeding> you don't have to write the methods, but you also get compiler-checked documentation of wtf your monad is actually doing (namely, that type inside the M)
12:12:38 <tomsmeding> if you don't need the mtl methods, then honestly just write out the monad manually, using transformers just makes the thing more opaque
12:13:02 <[exa]> yeah I see
12:13:39 <tomsmeding> [exa]: right, the correct version was: if you have a `MT N a`, then the first eliminator goes `MT N a -> N (M a)`
12:14:02 <[exa]> that's ok
12:15:53 <[exa]> kinda trying to find the trick that tells the students if the State will get reset by Parser or not. in this case I guess N(M a) says kinda "N dominates M" so the M will get reset if e.g. N backtracks... and now I hope that's right.
12:16:31 <tomsmeding> it's rather important whether it's `N (M a)` or `NT M a`
12:16:38 <tomsmeding> they behave differently
12:16:55 <tomsmeding> case in point:
12:16:57 kh0d joins (~kh0d@212.200.247.164)
12:17:02 <tomsmeding> @unmtl ExceptT e (State s) a
12:17:02 <lambdabot> s -> (Either e a, s)
12:17:08 <tomsmeding> this looks a lot like State s (Either e a)
12:18:11 <tomsmeding> I can't help you, sorry
12:18:17 fp joins (~Thunderbi@130.233.70.95)
12:19:50 __monty__ joins (~toonn@user/toonn)
12:22:04 <EvanR> I'm crippled because the first thing I read about monads was on wikipedia where it stated "writing monad definitions directly is difficult"
12:22:23 <EvanR> so now it's difficult forever and I have to rely on transformers xD
12:22:30 <tomsmeding> it's the only thing that's actually understandable
12:22:33 <int-e> @src forever
12:22:33 <lambdabot> forever a = let a' = a >> a' in a'
12:22:55 <tomsmeding> EvanR: reinvent all the monads, dig yourself deep into NIH and rewrite all the basic monads
12:22:59 <tomsmeding> then you'll understand monads
12:23:12 <EvanR> I can write the individual rogues gallery of monads
12:23:32 <int-e> EvanR: May I suggest a dose of "You Could Have Invented Monads (And Maybe You Already Have)"?
12:23:41 <EvanR> but combining them to get what a combination of transformers would produce
12:24:18 <tomsmeding> the trick is to understand why the individual monad implementations do what they do, e.g. why `s -> (a, s)` makes _sense_ as a state monad
12:24:25 <haskellbridge> <maerwald> monad stacks are OOP
12:24:26 <tomsmeding> then if you want a combination, write the underlying function that does that
12:24:42 <tomsmeding> then write the Functor, Applicative, Monad instances for that
12:24:42 <[exa]> tomsmeding: yeah maybe I should just draw a very clean picture that the types get flipped when they have the T in them
12:24:56 <[exa]> maerwald: nooooooooooooooooooo
12:24:56 <int-e> The monad concept is *very* abstract. Work with the instances.
12:25:06 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
12:25:43 <EvanR> it's ridiculous because, despite the claim on 2005 wikipedia, writing individual monad instances isn't very difficult at all. You almost can't mess up
12:25:56 <EvanR> because of the types
12:26:26 <haskellbridge> <maerwald> Yes, OOP is characterized by clouded control flow and side effect stacked on top of each other. That's exactly what transformers do.
12:27:04 <haskellbridge> <maerwald> but we celebrate the "bind" interface and label the whole thing as pure
12:27:40 <haskellbridge> <maerwald> no one cares about ergonomics and if your average engineer can actually reason about what happens during execution (don't come with denotational semantics)
12:27:47 <EvanR> I wish OOP was as easy as transformers xD
12:27:47 <tomsmeding> maerwald: are you complaining about monad transformer stacks like `StateT s (Except e)`, or also about manually-written monads like `newtype M a = M (s -> (Either e a, s))`
12:27:58 <haskellbridge> <maerwald> all of it
12:28:01 <int-e> EvanR: Well that's assuming you understand types. Those are to-tally inscrutible too and make EVERYBODY™'s eyes bleed.
12:30:48 kh0d joins (~kh0d@212.200.247.164)
12:32:58 <haskellbridge> <Liamzee> maerwald: deep-stacked monad transformers have been known to be a code-smell since like 2011, 2015 at the latest
12:33:06 <haskellbridge> <Liamzee> maerwald:
12:33:56 <haskellbridge> <Liamzee> at least because of O(n) performance penalties in bind
12:34:29 hattckory joins (~hattckory@70.27.118.207)
12:35:15 <EvanR> log n improvement in time to market though, similar to "just write a bunch of python code real fast and ship it"
12:35:26 <EvanR> don't worry about what happens down the road
12:35:50 <haskellbridge> <Liamzee> afaik isn't that the point of the free monads crowd?
12:36:15 <haskellbridge> <Liamzee> i.e, shouldn't free monad interpreter beat mtl in terms of ergonomics?
12:37:19 <haskellbridge> <maerwald> Free monads have bad performance
12:37:44 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
12:37:51 <EvanR> there's freeer monad
12:37:56 <EvanR> which has some optimizations
12:38:04 <haskellbridge> <maerwald> eff was supposed to fix it, but Alexis probably will never finish it
12:38:55 <haskellbridge> <magic_rb> Delim conts have some fundamental issues when used within effect systems iirc
12:39:41 <haskellbridge> <magic_rb> The current fastest way is either "Reader IO a" or "effectful" which is exactly a "Reader IO a". Risk is you might confuse GHC
12:40:31 <haskellbridge> <Liamzee> did you guys take a look at nammayatri?
12:41:13 <haskellbridge> <Liamzee> granin seems to have made himself the foremost proponent of free monad interpreters because of his aggressive sell and his work at juspay
12:41:37 <haskellbridge> <Liamzee> https://github.com/nammayatri/nammayatri
12:41:48 <haskellbridge> <magic_rb> Free monads will be always slow afaiu so their a no go for me
12:41:54 × hattckory quits (~hattckory@70.27.118.207) (Ping timeout: 260 seconds)
12:42:25 <int-e> EvanR: exercise: relate https://hackage.haskell.org/package/MonadPrompt-1.0.0.5/docs/Control-Monad-Prompt.html#t:Prompt and freeer monads
12:43:03 <haskellbridge> <Liamzee> i'm not sure if nammayatri used free monads, though
12:44:44 <EvanR> what is the airspeed velocity of a free monad
12:45:13 <EvanR> int-e, in the middle of writing a teletype like free monad now!
12:45:36 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
12:45:44 kh0d joins (~kh0d@212.200.247.164)
12:48:36 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds)
12:49:52 <EvanR> I did it and the code looks nothing like free or freer
12:50:01 <int-e> TBH I'm just a tad sad that the idea of expressing an API as a GADT seems to be forgotten. (See the example on https://hackage.haskell.org/package/MonadPrompt-1.0.0.5/docs/Control-Monad-Prompt.html ). Free monads do get you the same functionality but you have to work a tad harder.
12:50:34 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 244 seconds)
12:50:41 jespada joins (~jespada@2800:a4:229c:8a00:e032:2eec:bdbe:deac)
12:50:57 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds)
12:51:00 <EvanR> https://paste.tomsmeding.com/pmd8nbPr
12:51:51 × jespada quits (~jespada@2800:a4:229c:8a00:e032:2eec:bdbe:deac) (Client Quit)
12:52:59 kh0d joins (~kh0d@212.200.247.164)
12:52:59 <tomsmeding> int-e: it looks to me like that Prompt monad just factors out the commonalities between most (all?) free monads -- the Pure constructor and the continuations on all the effect constructors
12:53:02 <int-e> that would be data Tele a where { Put :: Char -> Tele (); Get :: Tele Char }
12:53:17 <tomsmeding> (and it's CPS-transformed to make it less readable)
12:53:27 <tomsmeding> (and presumably faster)
12:53:34 <int-e> tomsmeding: yeah. it *also* predates the popularization of free monads
12:53:35 alfiee joins (~alfiee@user/alfiee)
12:53:40 <tomsmeding> I see
12:54:28 <EvanR> and then what, use another data structure to represent the nesting structure
12:54:48 <EvanR> I thought it was an exercise in "writing the monad instance directly" xD
12:55:13 <tomsmeding> that exercise stands, and you're doing well with Tele :p
12:55:24 <EvanR> oh you're doing the GADT version
12:56:09 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: leaving)
12:56:45 jespada joins (~jespada@2800:a4:229c:8a00:e032:2eec:bdbe:deac)
12:57:00 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
12:57:06 <tomsmeding> EvanR: now do nondeterminism ([a]), state (s -> (a, s)), exceptions (Either e a), parsers (String -> Either e (String, a))
12:57:12 hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca)
12:57:13 <EvanR> the data type Tele a reminds me of the [Maybe a] from the Stack thing yesterday
12:57:27 <int-e> IIRC the relation is that a prompt descriptor (is that a good term?) `P a` translates to the functor `F b = forall a. (a, P a -> b)` for use in a free monad construction.
12:57:32 <EvanR> instead of the structure it's the commands
12:58:14 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
13:00:05 merijn joins (~merijn@77.242.116.146)
13:00:07 <int-e> Pretty sure that was it. And you can specialize the freeer monad type for that shape of functor and optimize it a little and get the definition that MonadPrompt uses.
13:01:16 <int-e> err I'm stupid
13:01:28 <int-e> It's `F b = forall a. (P a, a -> b)`
13:01:45 <tomsmeding> that feels better, yeah
13:01:56 <tomsmeding> I was having doubts but I wasn't sure how to fix it
13:01:58 <int-e> The danger of trying to remember things :-)
13:02:25 <tomsmeding> the values in the P constructors are the outputs of the effect, the type index is the input for its continuation (the reply)
13:02:28 <[exa]> tomsmeding: ohhhhhhhhhhhh I found a rule of thumb!
13:02:44 <tomsmeding> s/outputs/inputs/
13:02:44 <[exa]> tomsmeding: "you can't reset IO", which is why IO is always the last thing in stack
13:02:46 <tomsmeding> lol
13:03:19 weary-traveler joins (~user@user/user363627)
13:03:21 <tomsmeding> [exa]: so inner things can run outer things strangely (reset, run multiple times, etc.) but outer things cannot influence inner things?
13:03:23 <Leary> int-e: AKA `Coyoneda P`.
13:04:05 <[exa]> tomsmeding: roughly.
13:04:15 <tomsmeding> [exa]: NT M a runs into M (N a), so AT (BT (CT M)) a in the end runs in M
13:04:23 <haskellbridge> <alexfmpe> int-e: https://hackage.haskell.org/package/reflex-gadt-api
13:05:10 ash3en joins (~Thunderbi@89.56.182.235)
13:05:18 <tomsmeding> [exa]: I like
13:05:20 <haskellbridge> <alexfmpe> (specialized for reflex-dom, just pointing out gadt api isn't quite forgotten)
13:06:01 <int-e> alexfmpe: Oh, nice :)
13:08:31 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
13:10:07 <Leary> Some effect systems like 'effectful' are also effectively reviving these "GADT API"; e.g. https://hackage.haskell.org/package/effectful-core-2.5.1.0/docs/Effectful-Dispatch-Dynamic.html
13:11:08 kh0d joins (~kh0d@212.200.247.164)
13:12:20 <EvanR> inner and outer "things"?
13:12:27 <EvanR> I have another rule of thumb
13:12:30 <EvanR> burritos
13:12:54 <tomsmeding> everyone who seriously suggests burritos are a good monad intuition are actually burritos themselves
13:13:32 <EvanR> and in light of yesterday's discussion of stacks
13:13:39 <EvanR> "last in the stack" could mean anything
13:14:08 <EvanR> due to your interpretation function producing the opposite order of instructions and LTR RTL language issues
13:14:17 <tomsmeding> the "inner" and "outer" here referred to monad transformer stacks like StateT s (ExceptT e IO) a
13:14:27 <EvanR> ok now that's a burrito
13:14:29 <tomsmeding> where StateT is the outer and IO is the inner
13:14:37 <tomsmeding> I think that's fairly unambiguous
13:14:46 <EvanR> yes but what is last
13:14:46 <int-e> Leary: hmm the example looks dubious (where does m come from?)
13:14:52 <EvanR> "innermost"
13:14:53 <tomsmeding> EvanR: no one said "last" here
13:14:55 <int-e> Leary: but I see what you mean
13:14:57 <EvanR> scroll up lol
13:15:10 <tomsmeding> oh I see
13:15:21 <tomsmeding> okay that last was "inner"
13:15:46 <EvanR> the innermost layer of burritos can't be reset
13:15:58 <int-e> oh nm
13:16:14 <int-e> each value can come with its own m
13:16:51 <Leary> Yes, it's just a little higher-order tweak on the same idea.
13:20:14 <haskellbridge> <Liamzee> actually, StateT case is sort of confused, no?
13:20:55 <tomsmeding> EvanR: case in point why burritos are not appropriate here: if you have StateT s IO a, then even though IO is arguably the "inner" monad here, it's actually the IO burrito that contains the State burrito
13:20:59 <tomsmeding> @unmtl StateT s IO a
13:20:59 <lambdabot> s -> IO (a, s)
13:21:23 <tomsmeding> see, if you just write out `s -> IO (a, s)` all is clear
13:21:43 <haskellbridge> <Liamzee> ummmm
13:22:04 <EvanR> IO is the crunchy outer layer of the purely functional program burrito, so it's just that the "stack" is upside down
13:22:22 <haskellbridge> <Liamzee> IO (s -> (a, s)), s -> (IO a, s)
13:22:45 <haskellbridge> <Liamzee> in the case provided by lambdabot, is IO beneath state or is state beneath IO?
13:22:59 <tomsmeding> that's up to the blog post writer
13:23:24 <EvanR> is the real version of StateT s IO a more like lambdabot or more like Liamzee
13:23:29 <tomsmeding> to wit, neither of the options that Liamzee just gave are particularly useful in practice
13:23:32 <haskellbridge> <Liamzee> it's lambdabot
13:23:40 <EvanR> oh it's two versions from Liamzee
13:23:48 <tomsmeding> lambdabot just expands the newtypes
13:23:54 <haskellbridge> <Liamzee> i just came up with some nonsense versions to try to illustrate
13:24:10 <EvanR> I guess we need to complete all the possibilities
13:24:12 <haskellbridge> <Liamzee> how ridiculous the notion of outside and inside can be with some of these monad transformers
13:24:14 <EvanR> s -> (a, IO s)
13:24:17 <haskellbridge> <Liamzee> you have a data dependency on state
13:24:22 <tomsmeding> > newtype StateT s m a = StateT { runStateT :: s -> m (a,s) }
13:24:33 <haskellbridge> <Liamzee> then IO wraps the output (a, s) pair
13:24:40 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 244 seconds)
13:24:52 <tomsmeding> Liamzee: I agree re ridiculousness of inside/outside, but the original question was about intuition about monad transformer stacks _without_ expanding their definitions
13:25:03 <EvanR> "IO wraps the pair" ok now I'm losing it with the burrito analogy, I feel like that might be off the farm
13:25:06 <tomsmeding> and as long as you keep the newtypes unexpanded, there's a clear outer/inner in your source text
13:25:17 <tomsmeding> even if, operationally, things go weirdly inside out
13:25:18 <EvanR> the IO type wraps the product type yes, as far as the types go
13:25:56 <haskellbridge> <Liamzee> sorry
13:26:10 <EvanR> inside outside is also getting confused more when you get MonadBaseControl which calls the innermost "the base"
13:26:12 <EvanR> (I think)
13:26:25 <EvanR> is the base inside or outside the building
13:26:30 <EvanR> or tower
13:26:38 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 245 seconds)
13:26:49 <EvanR> it's underneath that's for sure
13:26:50 <tomsmeding> the "right-hand side" of `let x = a in b` is in the middle
13:27:00 <tomsmeding> and the "body" is on the right
13:27:27 <tomsmeding> the physical analogy only goes so far
13:27:41 <tomsmeding> it's counterproductive to try to stretch it to its limits
13:27:53 <haskellbridge> <Liamzee> i guess that's why people say monad transformers are confusing, because the type wrapping of IO doesn't follow the operational wrapping
13:28:10 <tomsmeding> not just with IO, that goes for most (all?) monad transformers
13:28:15 <tomsmeding> IO is not special here
13:28:18 <EvanR> MonadBaseControl would have you believe your "stack" is "based" on IO. But by the previous discussion your program underworld is hanging from the IO planetary crust!
13:28:29 <EvanR> I reject "wrapping"
13:28:35 <EvanR> because it sounds like values
13:28:41 kh0d joins (~kh0d@212.200.247.164)
13:28:53 <EvanR> x, [x], [[x]], [[[x]]]
13:28:56 <EvanR> more wrapping
13:29:06 <tomsmeding> just expand all the newtypes and write the underlying function directly, dispense with this discussion
13:29:09 <EvanR> but people are probably talking about the type constructors
13:30:02 <EvanR> https://paste.tomsmeding.com/NAB9RiFP
13:30:40 <haskellbridge> <Liamzee> yeah afaik, monad trans makes no sense without looking at the type definition, i don't think there's a simple rule to predict what the real construction is like until you see it
13:31:02 <EvanR> I couldn't call Empty "Nil" no matter how hard I tried. And I wanted to call this type NonDeterm but it was too long and numerous
13:31:19 <tomsmeding> what prevented "Nil"?
13:31:29 <EvanR> I kept typing Empty into the definitions
13:31:34 <tomsmeding> ah :p
13:31:38 <EvanR> so eventually I just changed the constructor to Empty
13:31:49 <tomsmeding> if you define Semigroup and Monoid instances then you can type 'mempty' instead
13:32:02 <tomsmeding> and with an Alternative instance, it could even be 'empty'
13:32:19 <EvanR> but it's being pattern matched, does it work as a pattern
13:32:24 <tomsmeding> ah, no
13:32:32 <EvanR> probably for the best
13:34:08 <tomsmeding> EvanR: if you put the 'empty' pattern-matching case last, i.e. after the Cons case, then it does work
13:34:11 <tomsmeding> just ignore the GHC warning
13:34:29 <EvanR> lol
13:34:51 <EvanR> gratuitous newtype
13:35:05 bliminse joins (~bliminse@user/bliminse)
13:35:10 <EvanR> new NonDeterm a = NonDeterm { getPossibilities :: [a] }
13:35:19 × kuribas` quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.3))
13:35:41 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
13:37:17 <EvanR> so you're saying you can combine this monad with others
13:37:46 <EvanR> s -> [IO (a, s)]
13:37:50 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
13:38:07 <EvanR> what did I just do
13:38:21 <tomsmeding> actually, the proper monad transformer for [a] is rather tricky
13:38:22 kh0d joins (~kh0d@212.200.247.164)
13:38:38 <tomsmeding> you can write what you just did, but it doesn't work well
13:38:49 <tomsmeding> https://hackage.haskell.org/package/list-t-1.0.5.7/docs/ListT.html
13:38:51 Shsl-Junko-POSER joins (~Shsl-Junk@50.235.208.178)
13:39:20 <kuribas> mixing backtracking with IO also is dangerous...
13:39:23 <tomsmeding> to understand what's going on there, note that `data KindOfAList a = KindOfAList (Maybe (a, KindOfAList a))` is essentially equivalent to [a]
13:40:52 <EvanR> what is the run function
13:41:19 alfiee joins (~alfiee@user/alfiee)
13:41:29 <EvanR> uncons :: ListT m a -> m (Maybe (a, ListT m a))
13:41:59 <tomsmeding> the run function of what?
13:43:03 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 244 seconds)
13:43:10 cheater joins (~Username@user/cheater)
13:43:23 <EvanR> @unmtl ListT (State s) a
13:43:23 <lambdabot> s -> ([] a, s)
13:43:50 <EvanR> @unmtl StateT [] a
13:43:50 <lambdabot> err: `StateT [] a' is not applied to enough arguments, giving `/\A. [] -> a (A, [])'
13:43:55 <EvanR> @unmtl StateT [] s a
13:43:55 <lambdabot> [] -> s (a, [])
13:44:15 <EvanR> squint
13:44:25 <EvanR> [s -> (a, [])] ?
13:44:43 <EvanR> no
13:44:59 <EvanR> [] is the wrong kind
13:45:56 kh0d joins (~kh0d@212.200.247.164)
13:45:57 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
13:47:38 <tomsmeding> @unmtl StateT s [] a
13:47:38 <lambdabot> s -> [] (a, s)
13:48:06 <tomsmeding> the "inner monad" is always the penultimate argument, to fit the kind of MonadTrans
13:48:14 × ash3en quits (~Thunderbi@89.56.182.235) (Quit: ash3en)
13:49:04 ash3en joins (~Thunderbi@89.56.182.235)
13:49:19 <EvanR> oh [] was a datakind I guess
13:49:35 <EvanR> gotta love it
13:50:07 <EvanR> the more stuff the compiler accepts the less able it is to notice your nonsense
13:51:19 <EvanR> implementing s -> [] (a, s)
13:51:24 <EvanR> monad instance
13:51:29 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
13:52:29 <tomsmeding> lambdabot's @unmtl is not smart enough for DataKinds, it just does dumb parsing I think
13:52:47 <tomsmeding> it knows `F a b c` as data types, so it translates `[a]` to `[] a` before doing anything
13:52:56 <tomsmeding> if the result doesn't kind check, that's up to the user
13:53:20 <tomsmeding> rather, if your _input_ to @unmtl doesn't kind check, then garbage-in garbage-out
13:54:32 <EvanR> lovely
13:54:51 <int-e> I suspect that it barely knows that [] is a type constructor
13:55:08 <int-e> @unmtl RWST a a a a a
13:55:08 <lambdabot> a -> a -> a (a, a, a)
13:55:22 <tomsmeding> @unmtl StateT StateT StateT StateT
13:55:22 <lambdabot> err: `StateT' is not applied to enough arguments, giving `/\A B C. A -> B (C, A)'
13:55:24 <tomsmeding> oh
13:55:47 <tomsmeding> @unmtl StateT F F F
13:55:47 <lambdabot> F -> F (F, F)
13:56:01 <int-e> Oh, right, it will know the arity of the known MTL transformers.
14:00:18 × jespada quits (~jespada@2800:a4:229c:8a00:e032:2eec:bdbe:deac) (Ping timeout: 272 seconds)
14:03:10 kh0d joins (~kh0d@212.200.247.164)
14:03:33 jespada joins (~jespada@2800:a4:22ac:eb00:e45c:1f6c:60ff:fb6b)
14:06:00 × Shsl-Junko-POSER quits (~Shsl-Junk@50.235.208.178) (Quit: Client closed)
14:06:21 <EvanR> ok guess I should have done State before doing list state
14:06:37 <EvanR> maybe wikipedia was right
14:07:27 <tomsmeding> EvanR: the issue is more that [] doesn't lend itself well to making a transformer version
14:07:32 <int-e> EvanR: try to get Cont r a right the first time
14:07:41 <tomsmeding> State, Except, Reader, Parser etc. work much better as transformers
14:07:44 <int-e> first try, that is
14:08:10 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 265 seconds)
14:08:27 <EvanR> continuations. I know this </jurassicpark>
14:10:26 × haetsal quits (~quassel@221.138.168.192) (Remote host closed the connection)
14:11:14 haetsal joins (~quassel@221.138.168.192)
14:13:58 × cipherrot quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in)
14:19:12 petrichor joins (~znc-user@user/petrichor)
14:24:44 zungi joins (~tory@user/andrewchawk)
14:27:24 alfiee joins (~alfiee@user/alfiee)
14:30:08 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
14:30:39 rvalue joins (~rvalue@user/rvalue)
14:32:12 <pdw> bgamari: In case you missed the date typo at https://www.haskell.org/ghc/, Latest News there lists the recent 9.12.2 release under "14 Mar 2024" (i.e. not '25). The 9.12.2 download page also has "released 14th Mar 2024".
14:32:12 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
14:32:27 kh0d joins (~kh0d@212.200.247.164)
14:33:31 JuanDaugherty joins (~juan@user/JuanDaugherty)
14:35:45 × Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds)
14:36:13 × acidjnk quits (~acidjnk@p200300d6e71c4f24c8a043139ebe92bd.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
14:37:03 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 252 seconds)
14:38:17 jmcantrell joins (~weechat@user/jmcantrell)
14:45:19 Square joins (~Square@user/square)
14:45:28 <mauke> 9.6.7 doesn't even exist exist
14:45:35 <mauke> s/exist$/yet/
14:45:48 <tomsmeding> yes it does
14:45:55 <tomsmeding> since, like, yesterday
14:46:24 <mauke> not according to the official website
14:46:31 <EvanR> shadow versions
14:46:34 <mauke> there's no release announcement
14:46:44 <tomsmeding> it was on the mailing list and it's in ghcup
14:47:17 kh0d joins (~kh0d@212.200.247.164)
14:47:18 <mauke> the "secret menu"
14:48:22 <tomsmeding> other things were also forgotten apparently https://mail.haskell.org/pipermail/ghc-devs/2025-March/021956.html
14:48:24 <JuanDaugherty> ghcup doesn wait or smoke test or nuthin?
14:48:36 <tomsmeding> it was released and ghcup does smoke test
14:48:41 <tomsmeding> it just wasn't posted on haskell.org
14:49:08 <JuanDaugherty> makes sense h,o be slow
14:49:14 <tomsmeding> there have also been release candidates and the maintainer of ghcup is aware of those, including what the actual difference is between the release candidates and the final release
14:49:37 <tomsmeding> if nothing changed between the final RC and the actual release, and the RC was already smoke tested, one doesn't need to wait
14:50:28 <haskellbridge> <maerwald> 9.6.7 release manager is in the hospital
14:50:48 <haskellbridge> <maerwald> So there might be some rough corners regarding release process
14:51:18 <tomsmeding> :/
14:52:34 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal)
14:53:20 <haskellbridge> <maerwald> JuanDaugherty: Wait for what?
14:53:22 <haskellbridge> <maerwald> Myself?
14:53:31 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
14:53:51 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
14:54:19 <JuanDaugherty> haskellbridge <maerwald> y not
14:55:03 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
14:55:05 <haskellbridge> <maerwald> Release announcement went to: ghc-releases, discourse, haskell-cafe and the #haskell-releases:matrix.org channel
14:56:06 <haskellbridge> <maerwald> Smoke tests are here https://github.com/haskell/ghcup-metadata/actions/runs/14034851759
14:56:09 <JuanDaugherty> i'm good with 9.6.6, just making convo; is something juicy in the new old branch?
14:56:14 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 260 seconds)
14:56:43 acidjnk joins (~acidjnk@p200300d6e71c4f24c8a043139ebe92bd.dip0.t-ipconnect.de)
14:56:50 <haskellbridge> <maerwald> 9.6.6 has a kqueue bug
14:57:08 <JuanDaugherty> good to know, ty
14:57:29 <JuanDaugherty> for like sparks ans stuff?
14:57:36 <JuanDaugherty> *and
14:57:41 <haskellbridge> <maerwald> https://downloads.haskell.org/ghc/9.6.7/docs/users_guide/9.6.7-notes.html
14:57:52 <haskellbridge> <maerwald> FreeBSD is known to trigger it
14:58:14 <JuanDaugherty> but not linux?
14:58:41 <JuanDaugherty> (even better to know its on bumfuc OS)
14:59:06 <haskellbridge> <maerwald> Check the release notes
14:59:57 kh0d joins (~kh0d@212.200.247.164)
15:00:11 <EvanR> FreeBumfucSD?
15:00:48 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
15:01:15 × werneta quits (~werneta@syn-071-083-160-242.res.spectrum.com) (Ping timeout: 252 seconds)
15:02:43 <EvanR> birkhoff Basic Geometry 3rd edition is annoying right here: the definition of locus is a figure which includes all the points that satisfy a given condition (or conditions) and no other points. Then regards this as an if and only if, with one direction going "if a point satisfies the condition, it's on the locus"
15:03:28 <JuanDaugherty> reviewing that reminded me of how sbcl is always fixin stuff that isn broke in the better cls
15:03:33 <EvanR> Then it goes on to prove the converse "if a point satisfies the condition, it lies on the locus" by using "The indirect method. For suppose that the condition is not true..."
15:04:02 <EvanR> I'm like that is evident directly from the definition why are you using an indirect method lol
15:05:43 × Square quits (~Square@user/square) (Ping timeout: 244 seconds)
15:06:03 <EvanR> I wrote that backwards
15:06:14 <EvanR> the converse is "if a point lies on the locus, it satisfies the condition"
15:06:30 <EvanR> which if locus was a GADT-like thing with constructor OnLocus :: x:Point -> c:Condition x -> Locus c x
15:06:35 <EvanR> you would already know that
15:06:42 × kh0d quits (~kh0d@212.200.247.164) (Ping timeout: 246 seconds)
15:08:01 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
15:08:25 ChaiTRex joins (~ChaiTRex@user/chaitrex)
15:09:26 × ash3en quits (~Thunderbi@89.56.182.235) (Quit: ash3en)
15:12:21 kh0d joins (~kh0d@212.200.247.164)
15:13:48 alfiee joins (~alfiee@user/alfiee)
15:17:53 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
15:19:49 × kh0d quits (~kh0d@212.200.247.164) (Remote host closed the connection)
15:20:37 kh0d joins (~kh0d@212.200.247.164)
15:33:15 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
15:33:42 <haskellbridge> <Liamzee> question about this code
15:33:45 <haskellbridge> <Liamzee> https://github.com/nammayatri/nammayatri/blob/main/Backend/app/provider-platform/dynamic-offer-driver-app/Main/src/Tools/SMS.hs
15:34:01 <haskellbridge> <Liamzee> does sendSMS not actually use its where clause?
15:34:13 <haskellbridge> <Liamzee> I mean, it calls handler, but I don't think it actually uses the other elements?
15:38:25 <mauke> {..} can hide many secrets
15:39:01 × Adeon quits (sid418992@id-418992.lymington.irccloud.com) (Ping timeout: 248 seconds)
15:39:12 <haskellbridge> <Liamzee> yeah, that's what I'm assuming
15:40:03 Adeon joins (sid418992@id-418992.lymington.irccloud.com)
15:40:46 <EvanR> what does Sms.SmsHandler {..} mean on the right hand side
15:40:53 <EvanR> I've seen {..} in a pattern
15:41:14 <haskellbridge> <Liamzee> https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/record_wildcards.html
15:41:17 <mauke> same thing as in a pattern, but backwards
15:41:39 <haskellbridge> <Liamzee> i'm guessing it's somehow allowing the where names to override items
15:41:43 <haskellbridge> <Liamzee> interesting technique
15:41:52 ash3en joins (~Thunderbi@89.56.182.235)
15:42:17 × kh0d quits (~kh0d@212.200.247.164) (Quit: Leaving...)
15:42:29 <mauke> not much to override if there's nothing there in the first place
15:44:06 <EvanR> that is some weird syntax
15:44:15 <haskellbridge> <Liamzee> sloccount says it's 290k lines, 250k lines haskell
15:44:19 <haskellbridge> <Liamzee> Juspay, very interesting app
15:44:39 <haskellbridge> <Liamzee> https://github.com/nammayatri/nammayatri
15:45:29 <EvanR> another way to "not repeat yourself" in Foo {a=a, b=b, c=c} is RecordPuns
15:46:02 <EvanR> then at least it doesn't seem to be spooky action at a distance
15:46:32 <haskellbridge> <Liamzee> they could actually just inline the damn thing
15:46:57 <EvanR> that would be too easy to read
15:53:30 <haskellbridge> <Liamzee> speaking of galapagos haskell
15:53:32 <haskellbridge> <Liamzee> https://so.gitee.com/?q=haskell
15:54:02 <haskellbridge> <Liamzee> apparently, #1, China has a policy of supporting FOSS, #2, Gitee is the approved Chinese FOSS repo, #3, you have to be approved by censors before your code posts
15:55:18 notdabs joins (~Owner@2600:1700:69cf:9000:5812:4103:61ba:7880)
15:56:15 <haskellbridge> <Liamzee> not sure how mature this package is
15:56:17 <haskellbridge> <Liamzee> https://gitee.com/flyingsheeplp/mynes
16:00:13 alfiee joins (~alfiee@user/alfiee)
16:02:46 user363627 joins (~user@user/user363627)
16:03:19 × weary-traveler quits (~user@user/user363627) (Ping timeout: 260 seconds)
16:04:51 <haskellbridge> <terrorjack> haskell jp community is like a 10x larger galapagos
16:05:00 <haskellbridge> <terrorjack> https://haskell.jp
16:05:02 <haskellbridge> <Liamzee> you saw my XHS posting, right?
16:05:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
16:05:08 <haskellbridge> <terrorjack> nah
16:05:36 <haskellbridge> <Liamzee> i mean Kazu Yamamoto is like maintaining the network packages
16:05:52 <haskellbridge> <Liamzee> and of course, what's his name, mr "implemented goto via free monads"
16:05:54 <haskellbridge> <terrorjack> oh wait, you're the guy asking about typeable etc?
16:06:02 <haskellbridge> <Liamzee> ;_;
16:06:14 <haskellbridge> <Liamzee> so we're in the same wechat, then
16:06:44 <haskellbridge> <terrorjack> i see
16:06:57 sprotte24 joins (~sprotte24@p5dd5d056.dip0.t-ipconnect.de)
16:07:49 <haskellbridge> <Liamzee> i was more wondering why Haskell is a total abortion in Haskell, like, according to them, EMQ only maintains winterland's legacy systems
16:07:58 <haskellbridge> <Liamzee> erm, total abortion in China
16:08:53 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 248 seconds)
16:10:27 <haskellbridge> <terrorjack> well it takes someone motivated
16:10:39 <haskellbridge> <Liamzee> Vincent Zhang iirc blew up
16:10:46 <haskellbridge> <Liamzee> he had a start-up, tried for a few years
16:10:52 <haskellbridge> <Liamzee> gave up
16:10:54 <haskellbridge> <Liamzee> or what was his name?
16:10:56 <EvanR> like lisp was based on church, an american, so lisp took off in america, while ML was based on russel and whitehead, and took off in europe
16:11:05 <EvanR> what's china's deal
16:11:13 sprotte24_ joins (~sprotte24@p5dd5d056.dip0.t-ipconnect.de)
16:11:16 × sprotte24_ quits (~sprotte24@p5dd5d056.dip0.t-ipconnect.de) (Remote host closed the connection)
16:11:25 <haskellbridge> <terrorjack> "using haskell" is not worth a single bullet point in your powerpoint to be shown to vcs obviously
16:11:36 geekosaur thinks it more likely that companies want cheap disposable programmers, therefore python and js
16:12:02 <haskellbridge> <Liamzee> hey, huawei is a rust supporter
16:13:35 Googulator joins (~Googulato@2a01-036d-0106-01d5-c415-995d-99e3-7810.pool6.digikabel.hu)
16:14:06 <haskellbridge> <terrorjack> i've no interest in why haskell has no momentum in china; i do have interest why you're obsessed with haskell in china
16:15:10 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 244 seconds)
16:20:16 <haskellbridge> <Liamzee> lots of programmers, lots of increasingly good programmers
16:20:45 <haskellbridge> <Liamzee> i see it like Thinkpad, which IBM was profiting off marginally, got bought out by Lenovo, became way more profitable although, obviously, the brand was tarnished somewhat
16:21:05 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2)
16:21:18 <haskellbridge> <Liamzee> of course, in this scenario, Anduril moved first, and they're funding Well-Typed
16:22:22 user363627 is now known as weary-traveler
16:25:20 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds)
16:25:29 <haskellbridge> <Liamzee> EvanR: apparently Chinese devs were trained heavily on C++, and one thing to notice is that productivity enhancing tools are less important when you have cheap labor
16:25:30 LainExperiments joins (~LainExper@user/LainExperiments)
16:25:53 <haskellbridge> <Liamzee> Indian developers, for instance, make 1/20th the salaries of American developers
16:26:22 <haskellbridge> <Liamzee> the cost of labor is much more expensive relative to capital, which probably explains why Huawei and Bytedance went for Rust
16:26:29 <haskellbridge> <terrorjack> well then, either some chinese firm needs to make a real profit using haskell, or they need to maintain a fork that they can rebrand as an innovative product to get government grant
16:26:40 <haskellbridge> <Liamzee> because Rust essentially has no hardware efficiency cost relative to C++
16:26:42 <haskellbridge> <terrorjack> the latter is much more pragmatic
16:27:01 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
16:27:03 <haskellbridge> <Liamzee> terrorjack: I'd say, a Chinese firm makes a real profit with a real product, but founders are a bit Haskell-crazy
16:27:17 <haskellbridge> <Liamzee> the Chinese are just too pragmatic, I think there were many problems historically with commercial Haskell that enabled only niche use
16:27:45 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
16:27:53 <haskellbridge> <Liamzee> the choice of language in this day and age matters less than what your business plan is and what your organization is
16:28:01 <haskellbridge> <terrorjack> wish them all the luck lol
16:28:10 <EvanR> this programming language class warfare is unsettling
16:28:19 <haskellbridge> <terrorjack> no shortage of hobbyists in school, but as they graduate they need to put food on the table. end of story
16:28:42 <haskellbridge> <terrorjack> "programming language class"? sorry?
16:29:09 <haskellbridge> <terrorjack> there are only half baked compiler construction classes that waste over half of the time to teach you about automatas and how to write parsers
16:29:59 <haskellbridge> <Liamzee> He meant class warfare, but you can see how social class influences the sociology of Haskell, right?
16:30:19 <EvanR> that's funny where your parsing of my message stopped
16:30:26 <EvanR> it was only 3 more words I promise
16:30:53 <haskellbridge> <terrorjack> ah, class warfare as in class struggle
16:31:06 <EvanR> I don't know about social class I figured it was more about educational background
16:31:13 <EvanR> which I guess could be related
16:31:41 <haskellbridge> <Liamzee> one of the drives in Haskell community, I think, is to not be a commodity programmer working an equivalent of 996, which is a potential selling point of Haskell
16:32:01 <EvanR> that sounds like "elitism" that we're always getting accused of
16:32:32 <haskellbridge> <Liamzee> i'm unsettled too, i guess
16:33:04 <EvanR> but getting a better job should be a drive in general regardless of language or field
16:33:21 euphores joins (~SASL_euph@user/euphores)
16:33:46 <EvanR> despite what we might hear from the government xD
16:34:00 merijn joins (~merijn@77.242.116.146)
16:35:32 <haskellbridge> <Liamzee> iirc the archetypical chinese developer career is that you work your ass off until you're 35, when you can't handle the schedule anymore, then you either retire or move into management
16:35:59 <haskellbridge> <Liamzee> pay is supposed to be better than the alternatives
16:36:05 × fp quits (~Thunderbi@130.233.70.95) (Ping timeout: 248 seconds)
16:36:29 <haskellbridge> <Liamzee> the long-term investment part of haskell, then, is probably not there
16:40:11 <EvanR> one area I was wondering about is embedded chips. When the memory is low, haskell has no chance of running aiui
16:40:22 <EvanR> though there are DSLs to produce programs for low memory environments
16:41:26 <EvanR> with the increased amount of computronium in products this explains a lack of haskell, or opportunity for such safe DSLs
16:45:37 alfiee joins (~alfiee@user/alfiee)
16:45:39 <haskellbridge> <Liamzee> Travis Whittaker is working on it, and I think that's one thing they're funding Well-Typed for
16:45:54 <haskellbridge> <Liamzee> I like Linear Haskell
16:49:57 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 246 seconds)
16:50:40 × acidjnk quits (~acidjnk@p200300d6e71c4f24c8a043139ebe92bd.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
16:51:40 <haskellbridge> <Liamzee> the unfortunate part, though, is that much of the work will end up being classified
16:52:51 × jespada quits (~jespada@2800:a4:22ac:eb00:e45c:1f6c:60ff:fb6b) (Quit: My Mac has gone to sleep. ZZZzzz…)
16:54:39 × ash3en quits (~Thunderbi@89.56.182.235) (Ping timeout: 260 seconds)
16:55:42 × LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
17:01:02 × sp1ff quits (~user@c-67-160-173-55.hsd1.wa.comcast.net) (Remote host closed the connection)
17:03:48 <merijn> EvanR: Just program your chip directly in Haskell ;)
17:03:54 <merijn> @where clash
17:03:54 <lambdabot> I know nothing about clash.
17:03:56 <merijn> aww
17:04:05 <EvanR> you mean the hardware design
17:04:13 <merijn> yeah
17:04:13 <merijn> https://clash-lang.org
17:04:34 <merijn> Also, there was a project for low-level Haskell
17:05:08 <merijn> I forget the name of the spec
17:05:13 <mauke> @where+ clash https://clash-lang.org/
17:05:13 <lambdabot> Okay.
17:05:39 <EvanR> cooool
17:06:02 <merijn> EvanR: It was a project at the university of Oregon (iirc)
17:06:18 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:06:20 <merijn> The project is dead before they did anything in terms of usable artifacts, but the spec is an interesting read
17:06:24 <merijn> I just can't remember the bloody name
17:06:50 <EvanR> retrocomputing
17:06:58 <EvanR> not to be confused with reversible computing
17:08:44 <merijn> EvanR: Ah, Habit that was it
17:09:04 <merijn> EvanR: https://www.habit-lang.org
17:09:51 <EvanR> now I remember that one
17:11:23 ash3en joins (~Thunderbi@89.56.182.235)
17:11:47 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 244 seconds)
17:14:44 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
17:16:40 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
17:18:19 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
17:19:10 × pdw quits (~user@215.156.62.185.bridgefibre.net) (Remote host closed the connection)
17:19:24 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
17:19:35 euphores joins (~SASL_euph@user/euphores)
17:20:43 zungi joins (~tory@user/andrewchawk)
17:21:12 × califax quits (~califax@user/califx) (Ping timeout: 264 seconds)
17:22:28 califax joins (~califax@user/califx)
17:28:14 <EvanR> int-e, well my Cont Monad instance typechecked I dunno if it's right though
17:28:49 <EvanR> probably wrong
17:31:41 alfiee joins (~alfiee@user/alfiee)
17:34:20 × ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:102d:f23f:3d0e:5609) (Quit: ubert)
17:34:32 × raym quits (~ray@user/raym) (Ping timeout: 252 seconds)
17:35:46 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
17:36:29 raym joins (~ray@user/raym)
17:37:33 <cheater> i thought retrocomputing was where you uncompute data, reversing the entropy gradient compared to normal computing
17:38:01 Pozyomka joins (~pyon@user/pyon)
17:38:25 Garvita joins (~Garvita@103.72.6.69)
17:39:17 Garvita is now known as gogetter
17:39:33 <gogetter> are here any mentors for gsoc?
17:40:20 Garvita joins (~Garvita@103.72.6.69)
17:42:02 Garvita is now known as gog
17:43:56 jespada joins (~jespada@2800:a4:22ac:eb00:e45c:1f6c:60ff:fb6b)
17:44:22 <EvanR> cheater, I said NOT to be confused
17:45:01 × Pozyomka quits (~pyon@user/pyon) (Quit: brb)
17:45:08 <cheater> sorry, i retrocomputed your sentence and all i got was "those two things are exactly the same."
17:46:03 Pozyomka joins (~pyon@user/pyon)
17:51:12 × siers quits (~ij@user/ij) (Ping timeout: 246 seconds)
17:51:33 siers joins (~ij@user/ij)
17:53:31 × haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection)
17:57:26 × gog quits (~Garvita@103.72.6.69) (Quit: Client closed)
17:57:26 × gogetter quits (~Garvita@103.72.6.69) (Quit: Client closed)
17:57:27 haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com)
17:57:27 ChanServ sets mode +v haskellbridge
17:59:36 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
18:00:58 × ash3en quits (~Thunderbi@89.56.182.235) (Ping timeout: 272 seconds)
18:02:35 Sayman joins (~Sayman@2401:4900:1ca3:94e0:9065:574c:a43:a4ea)
18:04:42 <Sayman> Hi there, as I discussed about the enhancements in yesod framework. So I have submitted my proposal on it after getting an appreciative message from one of you, can you guide me what should be my next step to get selected?
18:06:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:08:01 Clint squints.
18:10:37 <Sayman> what do you mean by that?
18:10:48 Guest76 joins (~Guest76@host-79-31-115-228.retail.telecomitalia.it)
18:11:03 Guest76 parts (~Guest76@host-79-31-115-228.retail.telecomitalia.it) ()
18:11:10 ash3en joins (~Thunderbi@89.56.182.235)
18:11:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
18:13:46 × dhil quits (~dhil@2a0c:b381:52e:3600:4562:2dab:a736:76b0) (Quit: Leaving)
18:14:02 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
18:16:10 × ash3en quits (~Thunderbi@89.56.182.235) (Ping timeout: 272 seconds)
18:16:27 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:21:06 alfiee joins (~alfiee@user/alfiee)
18:21:19 <EvanR> are you an artificial intelligence
18:21:41 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 248 seconds)
18:22:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:23:11 <Sayman> no I am a human being, but yeah if you are asking of an ai student so that's what my current field of studies for graduation
18:25:05 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
18:25:21 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
18:27:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
18:28:30 <cheater> no he's asking if you're a bot because you talk like a bot
18:28:50 <cheater> your message was refering to context that wasn't there
18:29:00 <cheater> try relaxing a bit and talking like a human being
18:29:32 <tomsmeding> calm down a bit. Sayman posted here before -- I remember, but clearly cheater does not
18:29:43 <EvanR> yes they did
18:30:06 <cheater> i'm calm, just explaining where Evan's comment comes from
18:30:07 <tomsmeding> Sayman: on irc, people are far from always actively watching the channel, so if your previous message was a while ago, you can count on it that the readers now will not have the context from last time
18:30:26 <tomsmeding> also EvanR: accusing someone of being an AI is rather... rude.
18:30:45 <tomsmeding> (or you have a _much_ better opinion of current AI than I do.)
18:31:29 <cheater> i don't think he was being fully serious
18:31:49 <cheater> but if he was, i suggest we throw Evan into the pit
18:31:56 <tomsmeding> Sayman: re "next step to get selected": contact the haskell GSoC people, there ought to be some names or contact details somewhere. No one can guarantee you get selected, obviously -- but it can't hurt to get in touch with actual human beings behind the program
18:32:14 <tomsmeding> cheater: fair :)
18:32:39 <Sayman> okay but how to get there contacts?
18:32:47 <tomsmeding> where did you subit?
18:32:50 <tomsmeding> *submit
18:33:13 <Sayman> I am sorry I thought I was just talking normally!
18:33:20 <EvanR> does half serious get the half-pit
18:33:33 <tomsmeding> I think you were. :)
18:33:33 <Sayman> I submitted the proposal in GSoC official site
18:33:41 <Sayman> after registring
18:34:00 <Sayman> *Registering
18:34:04 <tomsmeding> I looked here https://summerofcode.withgoogle.com/programs/2025/organizations/haskellorg and found https://summer.haskell.org/contact.html through there
18:34:22 <tomsmeding> the haskell.org committee seems a bit broad for this, but given as it's linked here, perhaps they know who to turn to
18:34:52 <tomsmeding> this channel is also mentioned there, but this is a general haskell channel -- perhaps you'll accidentally find some GSoC people here too, but not necessarily
18:35:34 <tomsmeding> EvanR: perhaps. :P
18:35:42 <Sayman> Ohh okay I just posted this here
18:35:53 <tomsmeding> EvanR: though not sure what being thrown in a half-pit entails, practically
18:36:02 <Sayman> Because I found the link to this chat group in GSoC official site
18:36:27 <tomsmeding> this is a good place to ask help about haskell, not about GSoC specifically. :)
18:36:42 <tomsmeding> *ask for
18:36:58 <Sayman> and fun fact it's midnight in my country and I am just sitting infront of my laptop reading about how people got confuse between a normal human being and a bot :)
18:37:09 <Sayman> Ohh okay
18:37:14 <tomsmeding> :)
18:37:27 <tomsmeding> to be fair, there's too many bots these days, some paranoia is perhaps to be expected :p
18:37:30 <Sayman> Now I understoof the general purpose of this community channel
18:37:51 <tomsmeding> though asking is unlikely to get an honest answer from a bot, perhaps.
18:37:59 <Sayman> tomsmeding I can understand
18:38:31 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:38:37 <EvanR> tomsmeding, +3 bonus on your roll to get out
18:40:06 <tomsmeding> on a d-howmany?
18:40:42 <EvanR> 6
18:41:59 <tomsmeding> I guess that would work :p
18:45:14 × jess quits (meow@libera/staff/cat/jess) ()
18:45:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
18:50:05 Pixi` joins (~Pixi@user/pixi)
18:51:34 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
18:52:38 ljdarj joins (~Thunderbi@user/ljdarj)
18:53:39 × Pixi quits (~Pixi@user/pixi) (Ping timeout: 260 seconds)
18:55:17 vanishingideal joins (~vanishing@user/vanishingideal)
18:56:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
19:00:42 caconym joins (~caconym@user/caconym)
19:01:24 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
19:01:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
19:07:10 alfiee joins (~alfiee@user/alfiee)
19:08:36 zungi joins (~tory@user/andrewchawk)
19:10:44 glguy_ joins (glguy@libera/staff/glguy)
19:11:05 × glguy quits (glguy@libera/staff/glguy) (Read error: Connection reset by peer)
19:11:21 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 246 seconds)
19:13:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:13:56 × leah2 quits (~leah@vuxu.org) (Ping timeout: 244 seconds)
19:18:18 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
19:19:58 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
19:20:35 crabtastic joins (uid695166@id-695166.lymington.irccloud.com)
19:21:03 × Sayman quits (~Sayman@2401:4900:1ca3:94e0:9065:574c:a43:a4ea) (Quit: Client closed)
19:23:43 ash3en joins (~Thunderbi@89.56.182.235)
19:24:21 × ash3en quits (~Thunderbi@89.56.182.235) (Client Quit)
19:25:44 Digitteknohippie joins (~user@user/digit)
19:26:44 leah2 joins (~leah@vuxu.org)
19:27:54 × Digit quits (~user@user/digit) (Ping timeout: 260 seconds)
19:29:00 pavonia joins (~user@user/siracusa)
19:29:04 × AlexZenon quits (~alzenon@178.34.150.194) (Ping timeout: 260 seconds)
19:29:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:33:11 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
19:33:31 ljdarj joins (~Thunderbi@user/ljdarj)
19:33:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
19:35:01 ljdarj1 joins (~Thunderbi@user/ljdarj)
19:35:57 ft joins (~ft@p508db463.dip0.t-ipconnect.de)
19:37:42 Digitteknohippie is now known as Digit
19:37:42 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
19:37:42 ljdarj1 is now known as ljdarj
19:38:27 chamlis parts (~chamlis@user/chamlis) ()
19:43:37 target_i joins (~target_i@user/target-i/x-6023099)
19:44:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:47:36 AlexZenon joins (~alzenon@178.34.150.194)
19:49:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
19:52:34 alfiee joins (~alfiee@user/alfiee)
19:55:53 acidjnk joins (~acidjnk@p200300d6e71c4f2435ff52636e0f7274.dip0.t-ipconnect.de)
19:57:05 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
19:57:09 × j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 248 seconds)
19:57:30 j1n37 joins (~j1n37@user/j1n37)
19:57:39 ash3en joins (~Thunderbi@89.56.182.235)
20:00:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:04:07 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
20:04:31 × ash3en quits (~Thunderbi@89.56.182.235) (Quit: ash3en)
20:05:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
20:14:08 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 245 seconds)
20:14:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:21:00 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
20:21:06 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
20:30:18 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:32:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:34:35 infinity0 joins (~infinity0@pwned.gg)
20:37:07 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
20:38:19 alfiee joins (~alfiee@user/alfiee)
20:42:35 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
20:47:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:52:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
21:02:16 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
21:03:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:08:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:08:56 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
21:09:17 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
21:13:07 × jespada quits (~jespada@2800:a4:22ac:eb00:e45c:1f6c:60ff:fb6b) (Quit: My Mac has gone to sleep. ZZZzzz…)
21:13:57 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
21:15:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:17:00 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
21:17:03 gmg joins (~user@user/gehmehgeh)
21:19:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
21:24:04 alfiee joins (~alfiee@user/alfiee)
21:28:18 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
21:30:00 dhil joins (~dhil@2a0c:b381:52e:3600:e1a5:fd6:a5ba:3633)
21:31:02 × michalz quits (~michalz@185.246.207.197) (Remote host closed the connection)
21:31:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:32:27 glguy_ is now known as glguy
21:35:47 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
21:36:08 × haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection)
21:36:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:36:10 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
21:36:35 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
21:38:43 × tabaqui quits (~tabaqui@167.71.80.236) (Ping timeout: 245 seconds)
21:39:39 haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com)
21:39:39 ChanServ sets mode +v haskellbridge
21:40:34 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 265 seconds)
21:44:42 polykernel joins (~polykerne@user/polykernel)
21:46:41 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
21:46:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:48:01 JuanDaugherty joins (~juan@user/JuanDaugherty)
21:52:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
21:53:33 × takuan quits (~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection)
21:54:19 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:55:08 × dhil quits (~dhil@2a0c:b381:52e:3600:e1a5:fd6:a5ba:3633) (Ping timeout: 244 seconds)
21:58:09 × hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 248 seconds)
22:00:18 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
22:02:42 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:07:59 sabathan2 joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
22:08:19 × sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Ping timeout: 260 seconds)
22:08:22 sabathan2 is now known as sabathan
22:09:23 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
22:09:48 alfiee joins (~alfiee@user/alfiee)
22:14:02 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
22:16:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:21:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
22:24:58 Sgeo joins (~Sgeo@user/sgeo)
22:31:01 weary-traveler joins (~user@user/user363627)
22:32:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:32:46 otto_s joins (~user@p5de2f2e9.dip0.t-ipconnect.de)
22:33:41 <otto_s> Hello.
22:34:01 × weary-traveler quits (~user@user/user363627) (Client Quit)
22:34:21 <otto_s> What is an explanation of the following: ?
22:34:25 <otto_s> let x = -1 :: Complex Double
22:34:36 <otto_s> let y = (-1):+0 :: Complex Double
22:35:12 <otto_s> Then x == y evaluates to True, but log x == log y evaluates to False.
22:35:40 <otto_s> (The logs are conjugates of each other.)
22:37:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
22:38:14 <otto_s> (And I know that both are in a sense "good" answers of the log function -- that's not my questions.)
22:38:37 <otto_s> *-s
22:47:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:50:54 <EvanR> > log (-1 :: Complex Double)
22:50:55 <lambdabot> 0.0 :+ (-3.141592653589793)
22:51:05 <EvanR> > log ((-1) :+ 0 :: Complex Double)
22:51:07 <lambdabot> 0.0 :+ 3.141592653589793
22:51:42 <EvanR> > decodeFloat (realPart (-1 :: Complex Double))
22:51:43 <lambdabot> (-4503599627370496,-52)
22:51:58 <EvanR> > decodeFloat (realPart ((-1) :+ 0 :: Complex Double))
22:51:59 <lambdabot> (-4503599627370496,-52)
22:52:15 <EvanR> > decodeFloat (imaginaryPart (-1 :: Complex Double))
22:52:16 <lambdabot> error:
22:52:16 <lambdabot> Variable not in scope: imaginaryPart :: Complex Double -> a0
22:52:46 <EvanR> check the imaginary parts
22:53:12 <geekosaur> :t imagPart
22:53:13 <lambdabot> Complex a -> a
22:54:03 <EvanR> > decodeFloat (imagPart (-1 :: Complex Double))
22:54:05 <lambdabot> (0,0)
22:54:15 <EvanR> > decodeFloat (imagPart ((-1) :+ 0 :: Complex Double))
22:54:17 <lambdabot> (0,0)
22:54:18 <otto_s> > decodeFloat $ imagPart ((-1) :+ 0)
22:54:19 <lambdabot> (0,0)
22:54:23 <EvanR> o_O
22:54:31 <otto_s> I see no difference! ^^
22:54:35 <EvanR> what is the log function depending on
22:54:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
22:54:52 <EvanR> here's something
22:55:01 <EvanR> > decodeFloat 0
22:55:02 <lambdabot> (0,0)
22:55:07 <EvanR> > decodeFloat (-0)
22:55:08 <lambdabot> (0,0)
22:55:12 alfiee joins (~alfiee@user/alfiee)
22:55:25 <EvanR> that's the only thing I can think of
22:55:35 <mauke> > owl
22:55:36 <lambdabot> (0,0)
22:55:52 <EvanR> (.) . (.)
22:56:01 <mauke> > negate (2 :+ 3)
22:56:02 <lambdabot> (-2.0) :+ (-3.0)
22:56:07 <mauke> hah
22:56:20 <mauke> yes, so unary - negates both parts
22:56:29 <otto_s> Ah.
22:56:39 <otto_s> > isNegativeZero $ imagPart (-1 :: Complex Double)
22:56:40 <lambdabot> True
22:56:56 <otto_s> isNegativeZero $ imagPart ((-1) :+ 0 :: Complex Double)
22:57:00 <otto_s> > isNegativeZero $ imagPart ((-1) :+ 0 :: Complex Double)
22:57:02 <lambdabot> False
22:57:16 <EvanR> mystery solved
22:57:22 <otto_s> Yes. :)
22:57:26 <EvanR> and decodeFloat is not the be all end all of the value
22:57:44 <mauke> > let x = 0; y = -0 in (x == y, recip x == recip y)
22:57:46 <lambdabot> (True,False)
22:58:26 <EvanR> float functions break congruence of function application
22:58:47 <mauke> petition to remove Double from the language
22:58:54 <otto_s> Hehe.
22:59:54 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
23:03:22 <geekosaur> keep it but require `import IEEE754Insanity`
23:05:23 × poscat quits (~poscat@user/poscat) (Ping timeout: 245 seconds)
23:05:44 poscat joins (~poscat@user/poscat)
23:05:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:06:04 weary-traveler joins (~user@user/user363627)
23:06:16 <otto_s> Is there a reason, why the imaginary party of -1 :: Complex Double *should* be -0 ?
23:08:54 <otto_s> Oh, I see, mauke answered that already.
23:10:41 <otto_s> Floats are evil. *g*
23:10:43 <geekosaur> I think the full answer involves complex numbers as being on a plane, and having trig on them produce results in the correct quadrant?
23:11:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
23:12:26 <otto_s> No, I think the culprit is just:
23:12:29 <otto_s> > isNegativeZero $ negate 0
23:12:31 <lambdabot> True
23:13:12 <geekosaur> right, but what I said is why the whole "negative zero" thing exists in the first place. see also atan2
23:13:17 <otto_s> (and then late, of course, how log decides where to go)
23:14:11 <otto_s> Yes.
23:15:39 <geekosaur> sadly it's been a looong time since I last did this stuff so it's all become kinda fuzzy ("use it or lose it")
23:16:25 <geekosaur> last time I touched it was 1985
23:21:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:23:08 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:25:18 × byte quits (~mu@user/byte) (Quit: Leaving)
23:25:48 × sarna quits (~sarna@d192-22.icpnet.pl) (Ping timeout: 245 seconds)
23:26:38 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
23:27:21 aetepe joins (~aetepe@188.119.22.83)
23:30:26 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
23:33:37 byte joins (~mu@user/byte)
23:35:20 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 252 seconds)
23:35:45 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
23:37:31 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:40:56 alfiee joins (~alfiee@user/alfiee)
23:42:05 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
23:45:17 sarna joins (~sarna@d192-22.icpnet.pl)
23:45:45 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
23:45:46 × sprotte24 quits (~sprotte24@p5dd5d056.dip0.t-ipconnect.de) (Quit: Leaving)
23:51:04 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
23:53:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:57:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)

All times are in UTC on 2025-03-25.