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.