Logs on 2023-04-28 (liberachat/#haskell)
| 00:01:00 | <Axman6> | ok yeah it does surprise me that isn't there |
| 00:01:45 | × | Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 240 seconds) |
| 00:02:07 | → | Square2 joins (~Square4@user/square) |
| 00:02:16 | × | Square quits (~Square4@user/square) (Remote host closed the connection) |
| 00:02:36 | → | offtherock joins (~blurb@96.45.2.121) |
| 00:02:49 | × | bilegeek_ quits (~bilegeek@225.sub-174-208-233.myvzw.com) (Write error: Broken pipe) |
| 00:02:51 | → | bilegeek joins (~bilegeek@225.sub-174-208-233.myvzw.com) |
| 00:03:27 | <mauke> | it's a bit like discovering that int main(void) { int x = 0; return x; } has undefined behavior in C |
| 00:03:33 | × | rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection) |
| 00:07:49 | → | nick4 joins (~nick@98.186.193.170) |
| 00:08:40 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 00:08:40 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 00:08:40 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:09:01 | × | accord quits (uid568320@id-568320.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 00:09:02 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6) |
| 00:09:12 | → | Sauvin joins (~sauvin@user/Sauvin) |
| 00:09:25 | × | nick3 quits (~nick@98.186.193.170) (Ping timeout: 240 seconds) |
| 00:10:24 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 253 seconds) |
| 00:11:33 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:17:40 | <oddline> | mauke: what's the UB there? I'd believe it - C has UB in the oddest places - but I just can't see where it would be? |
| 00:17:55 | × | Wauchope quits (~Wauchope@cpc86639-seve26-2-0-cust168.13-3.cable.virginm.net) (Remote host closed the connection) |
| 00:19:13 | <mauke> | no sequence point between the initialization of x and the read from x in return |
| 00:21:21 | → | bratwurst joins (~dfadsva@2604:3d09:207f:f650::9c24) |
| 00:21:22 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 00:22:38 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 00:23:27 | × | segfaultfizzbuzz quits (~segfaultf@23.93.74.212) (Ping timeout: 255 seconds) |
| 00:23:35 | <int-e> | mauke: Isn't the end of an initializer a sequence point? |
| 00:24:29 | <mauke> | if you can find something in the C standard that says so, I would sleep much better |
| 00:24:59 | <mauke> | the end of a statement is a sequence point, but declarations aren't statements |
| 00:25:15 | <mauke> | there is a sequence point at the end of each initializer expression, but 0 has no side effects anyway |
| 00:25:49 | → | Wstfgl0 joins (~me-me@2602:ff16:3:0:1:dc:beef:d00d) |
| 00:36:01 | <int-e> | mauke: There's a concept of a "full expression"; an initializer is a full expression; the operand of the `return` statement is another full expression; there's a sequence point between those. Section 6.8 in the N2310 draft (also the N3096 draft), and I would be surprised if the official standard didn't have it. |
| 00:36:38 | → | zfnmxt joins (~zfnmxt@user/zfnmxt) |
| 00:36:40 | <int-e> | (And there's an appendix summarizing sequence points but I expect you'd say that that's not normative.) |
| 00:38:16 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) |
| 00:38:45 | <int-e> | (The appendix is still useful because it also talks about full expressions.) |
| 00:40:07 | <Clinton[m]> | Does anyone have any thoughts on this design question? https://stackoverflow.com/questions/76125393/how-to-model-a-mutable-key-value-map-in-a-monad-transformer-stack |
| 00:42:51 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) (Ping timeout: 248 seconds) |
| 00:43:14 | <int-e> | mauke: IIUC that means that even int x = 0, y = x; is just fine. (compound literals are excluded from that rule though, I didn't quote it in full. So a[2] = {0, a[0]}; is UB) |
| 00:43:28 | <int-e> | mauke: err, int a[2] = ... |
| 00:44:12 | <mauke> | <mauke> there is a sequence point at the end of each initializer expression, but 0 has no side effects anyway |
| 00:44:33 | × | zeenk quits (~zeenk@2a02:2f04:a20f:5200::7fe) (Quit: Konversation terminated!) |
| 00:53:49 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 00:56:06 | <zfnmxt> | I need a simple library to solve a system of linear diophantine equations (so a linear equation with integer solutions/coefficients). Importantly, I don't want it to depend on any external solver, so no IO-based solvers. Does anyone have any recommendations? |
| 00:59:29 | <Axman6> | Well my first suggestion was going to be SBT but i guess that's out |
| 01:00:01 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 240 seconds) |
| 01:00:22 | <Axman6> | what's you reason for not wanting IO? |
| 01:01:01 | <zfnmxt> | Just annoying to deal with and I don't want that dependency. |
| 01:03:01 | <zfnmxt> | I'm guessing you meant SBV, not SBT, right? |
| 01:04:14 | × | nitrix quits (~nitrix@user/nitrix) (Quit: ZNC 1.8.2 - https://znc.in) |
| 01:04:37 | <int-e> | mauke: So we also need to unpack "initial value". Which at first glance is clear enough... the initial value of x is 0. x is never modified, so reading it returns 0. The language around that has actually been improved in the 3096 draft, which removes the conflicting statement that all declared variables have an undefined intial value, even when there's an initializer. I'm puzzled though what this... |
| 01:04:38 | <Axman6> | uh, probably |
| 01:04:43 | <int-e> | ...says about int x = x; now though. |
| 01:05:08 | <int-e> | mauke: Anyway, I'll admit that this is harder to figure out than I thought. |
| 01:05:29 | <jackdk> | assemble the equations into matrix-vector form and reduce to row echelon form? |
| 01:06:43 | <jackdk> | https://hackage.haskell.org/package/matrix-0.3.6.1/docs/Data-Matrix.html#v:rref , for example? |
| 01:07:38 | <jackdk> | https://hackage.haskell.org/package/hmatrix or possibly the tools in here? |
| 01:08:42 | <zfnmxt> | jackdk: Yeah, I thought I might have to do something like that. Just wanted to avoid the work if it's already been done 🙃 |
| 01:09:00 | → | nick2 joins (~nick@98.186.193.170) |
| 01:10:28 | <zfnmxt> | I think you have to use a special version of row echelon form where you don't require the leading entries to be 1. So there are annoying complications like that. But thanks, guess I'll probably end up doing that. |
| 01:10:42 | × | nick4 quits (~nick@98.186.193.170) (Ping timeout: 255 seconds) |
| 01:10:50 | → | nitrix joins (~nitrix@user/nitrix) |
| 01:11:05 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:13:35 | <jackdk> | I'm not sure; that's just dividing each row by the leading value. And is it not always possible to go from row echelon to reduced row echelon? |
| 01:13:37 | × | bratwurst quits (~dfadsva@2604:3d09:207f:f650::9c24) (Quit: Leaving) |
| 01:15:26 | × | Wstfgl0 quits (~me-me@2602:ff16:3:0:1:dc:beef:d00d) (Ping timeout: 246 seconds) |
| 01:17:04 | <int-e> | mauke: I'll stop now, but so far I have not found anything to suggest that `int x = x;` is "undefined behavior" as defined by the standard; instead it seems to unfold to "the initial value of x is the initial value of x". |
| 01:17:40 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:22:51 | → | Wstfgl0 joins (~me-me@2602:ff16:3:0:1:dc:beef:d00d) |
| 01:26:38 | <mauke> | int-e: from what I recall, in C99 all automatic variables are created (with indeterminate values) on entry to their containing block. their initializers run when their declaration is executed |
| 01:26:52 | <mauke> | in that model, int x = x; has UB because it reads an indeterminate value |
| 01:30:11 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 01:34:25 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 240 seconds) |
| 01:35:29 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 01:43:19 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 01:45:02 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 01:48:46 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 01:56:03 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 02:00:00 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 248 seconds) |
| 02:00:32 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
| 02:01:40 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 276 seconds) |
| 02:08:55 | → | nick3 joins (~nick@98.186.193.170) |
| 02:09:47 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
| 02:10:14 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 02:11:00 | × | nick2 quits (~nick@98.186.193.170) (Ping timeout: 255 seconds) |
| 02:20:12 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 02:20:12 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 02:20:12 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:28:20 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:29:39 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:32:08 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 240 seconds) |
| 02:32:38 | → | gmg joins (~user@user/gehmehgeh) |
| 02:36:10 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) |
| 02:46:34 | → | nate1 joins (~nate@98.45.169.16) |
| 02:50:22 | → | xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 02:53:10 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.) |
| 02:54:16 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 258 seconds) |
| 02:54:27 | → | sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
| 02:55:08 | × | td_ quits (~td@i53870923.versanet.de) (Ping timeout: 251 seconds) |
| 02:55:20 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds) |
| 02:55:33 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds) |
| 02:56:05 | → | td_ joins (~td@i5387093d.versanet.de) |
| 02:57:59 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:06:06 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 03:08:03 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 03:08:32 | → | nick4 joins (~nick@98.186.193.170) |
| 03:10:01 | × | jero98772 quits (~jero98772@2800:484:1d84:9000::2) (Remote host closed the connection) |
| 03:11:16 | × | nick3 quits (~nick@98.186.193.170) (Ping timeout: 252 seconds) |
| 03:13:45 | × | nick4 quits (~nick@98.186.193.170) (Ping timeout: 240 seconds) |
| 03:39:05 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 03:49:06 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 254 seconds) |
| 04:00:23 | → | razetime joins (~quassel@43.254.111.18) |
| 04:01:07 | × | bilegeek quits (~bilegeek@225.sub-174-208-233.myvzw.com) (Quit: Leaving) |
| 04:03:36 | → | bilegeek joins (~bilegeek@225.sub-174-208-233.myvzw.com) |
| 04:04:30 | × | euandreh quits (~Thunderbi@189.6.18.7) (Ping timeout: 260 seconds) |
| 04:06:10 | × | bilegeek quits (~bilegeek@225.sub-174-208-233.myvzw.com) (Client Quit) |
| 04:12:15 | × | mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
| 04:13:06 | → | mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001) |
| 04:15:45 | × | razetime quits (~quassel@43.254.111.18) (Ping timeout: 240 seconds) |
| 04:15:50 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 04:20:19 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 04:21:03 | → | michalz joins (~michalz@185.246.207.222) |
| 04:21:03 | × | thegeekinside quits (~thegeekin@189.180.38.222) (Ping timeout: 255 seconds) |
| 04:32:32 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 240 seconds) |
| 04:34:44 | <segfaultfizzbuzz> | https://www.ebay.com/itm/115639811711 ha |
| 04:35:04 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 04:35:07 | <segfaultfizzbuzz> | in the most hostile view of the world can these things have malware on them |
| 04:35:48 | <segfaultfizzbuzz> | used cpus, that is (amd, intel etc) |
| 04:42:32 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 04:45:04 | → | Bocaneri joins (~sauvin@user/Sauvin) |
| 04:45:20 | × | ddellacosta quits (~ddellacos@static-198-44-136-216.cust.tzulo.com) (Ping timeout: 248 seconds) |
| 04:45:27 | Bocaneri | is now known as Guest2961 |
| 04:46:46 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 276 seconds) |
| 04:47:36 | × | Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 255 seconds) |
| 04:48:57 | → | mokee joins (~mokee@37.228.215.215) |
| 04:50:31 | × | mokee quits (~mokee@37.228.215.215) (Client Quit) |
| 04:51:19 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 276 seconds) |
| 04:51:23 | → | mokee joins (~mokee@37.228.215.215) |
| 04:52:57 | × | mokee quits (~mokee@37.228.215.215) (Client Quit) |
| 04:53:16 | → | mokee joins (~mokee@37.228.215.215) |
| 04:54:33 | Guest2961 | is now known as Sauvin |
| 05:00:37 | → | segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
| 05:04:01 | × | elkcl quits (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Ping timeout: 252 seconds) |
| 05:05:34 | → | ddellaco1 joins (~ddellacos@146.70.165.230) |
| 05:15:43 | → | fun-safe-math joins (~fun-safe-@c-24-22-94-205.hsd1.or.comcast.net) |
| 05:20:17 | → | jonathan_ joins (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se) |
| 05:24:15 | → | razetime joins (~quassel@43.254.111.18) |
| 05:36:10 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 05:36:22 | → | thegeekinside joins (~thegeekin@189.180.38.222) |
| 05:41:43 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
| 05:42:03 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 248 seconds) |
| 05:45:04 | × | lightandlight quits (sid135476@id-135476.helmsley.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:04 | × | lexi-lambda quits (sid92601@2a03:5180:f:4::1:69b9) (Read error: Connection reset by peer) |
| 05:45:04 | × | tnks quits (sid412124@id-412124.helmsley.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:05 | × | hongminhee quits (sid295@id-295.tinside.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:05 | × | sclv quits (sid39734@haskell/developer/sclv) (Read error: Connection reset by peer) |
| 05:45:05 | × | chessai quits (sid225296@id-225296.lymington.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:05 | × | iphy quits (sid67735@id-67735.lymington.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:06 | × | AndreasK quits (sid320732@id-320732.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:06 | × | aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:06 | × | lally quits (sid388228@id-388228.uxbridge.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:06 | × | caasih quits (sid13241@id-13241.ilkley.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:11 | × | dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (Ping timeout: 264 seconds) |
| 05:45:14 | → | aristid joins (sid1599@id-1599.uxbridge.irccloud.com) |
| 05:45:14 | → | AndreasK joins (sid320732@id-320732.uxbridge.irccloud.com) |
| 05:45:14 | × | pepeiborra quits (sid443799@id-443799.ilkley.irccloud.com) (Read error: Connection reset by peer) |
| 05:45:16 | × | totbwf quits (sid402332@id-402332.uxbridge.irccloud.com) (Ping timeout: 252 seconds) |
| 05:45:16 | × | snek quits (sid280155@id-280155.lymington.irccloud.com) (Ping timeout: 252 seconds) |
| 05:45:16 | × | b20n quits (sid115913@id-115913.uxbridge.irccloud.com) (Ping timeout: 252 seconds) |
| 05:45:16 | × | Firedancer quits (sid336191@id-336191.hampstead.irccloud.com) (Ping timeout: 252 seconds) |
| 05:45:16 | × | ysh____ quits (sid6017@id-6017.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
| 05:45:19 | × | glowcoil quits (sid3405@id-3405.tinside.irccloud.com) (Ping timeout: 265 seconds) |
| 05:45:20 | → | chessai joins (sid225296@id-225296.lymington.irccloud.com) |
| 05:45:20 | → | lexi-lambda joins (sid92601@id-92601.hampstead.irccloud.com) |
| 05:45:20 | → | hongminhee joins (sid295@id-295.tinside.irccloud.com) |
| 05:45:20 | → | tnks joins (sid412124@id-412124.helmsley.irccloud.com) |
| 05:45:21 | → | sclv joins (sid39734@haskell/developer/sclv) |
| 05:45:21 | → | iphy joins (sid67735@id-67735.lymington.irccloud.com) |
| 05:45:21 | → | caasih joins (sid13241@id-13241.ilkley.irccloud.com) |
| 05:45:21 | → | lally joins (sid388228@id-388228.uxbridge.irccloud.com) |
| 05:45:21 | → | lightandlight joins (sid135476@id-135476.helmsley.irccloud.com) |
| 05:45:29 | → | pepeiborra joins (sid443799@id-443799.ilkley.irccloud.com) |
| 05:46:21 | → | glowcoil joins (sid3405@id-3405.tinside.irccloud.com) |
| 05:46:23 | → | snek joins (sid280155@id-280155.lymington.irccloud.com) |
| 05:46:44 | → | dmj` joins (sid72307@id-72307.hampstead.irccloud.com) |
| 05:48:25 | → | b20n joins (sid115913@id-115913.uxbridge.irccloud.com) |
| 05:48:25 | → | ysh____ joins (sid6017@id-6017.ilkley.irccloud.com) |
| 05:48:25 | → | Firedancer joins (sid336191@id-336191.hampstead.irccloud.com) |
| 05:48:26 | → | totbwf joins (sid402332@id-402332.uxbridge.irccloud.com) |
| 05:49:46 | → | trev joins (~trev@user/trev) |
| 05:50:32 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
| 05:52:55 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 05:53:44 | → | slack1256 joins (~slack1256@186.11.11.208) |
| 05:56:08 | <slack1256> | I got a GUI program for a pomodoro timer. I need to emit the /ding/ sound when the timers is up. Other packages call mplayer directly over a mp3. To avoid runtime dependencies, is there a package that offers a more direct alternative? |
| 05:57:16 | → | akegalj joins (~akegalj@199-128.dsl.iskon.hr) |
| 05:58:54 | <slack1256> | nvm, SDL-mixer is what I want. |
| 06:14:16 | × | fun-safe-math quits (~fun-safe-@c-24-22-94-205.hsd1.or.comcast.net) (Quit: Leaving) |
| 06:17:25 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 06:19:23 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 06:23:04 | × | akegalj quits (~akegalj@199-128.dsl.iskon.hr) (Quit: leaving) |
| 06:29:44 | → | mncheckm joins (~mncheck@193.224.205.254) |
| 06:33:07 | × | jinsl quits (~jinsl@123.117.251.25) (Ping timeout: 252 seconds) |
| 06:33:59 | → | jinsl joins (~jinsl@123.117.251.25) |
| 06:35:36 | × | johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in) |
| 06:36:05 | → | johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) |
| 06:36:18 | × | echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
| 06:37:12 | → | echoreply joins (~echoreply@45.32.163.16) |
| 06:38:27 | × | segfaultfizzbuzz quits (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Quit: segfaultfizzbuzz) |
| 06:39:47 | → | johnw` joins (~user@76-234-69-149.lightspeed.frokca.sbcglobal.net) |
| 06:40:20 | × | johnw` quits (~user@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Remote host closed the connection) |
| 06:40:49 | × | slack1256 quits (~slack1256@186.11.11.208) (Ping timeout: 252 seconds) |
| 06:45:01 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 06:45:30 | → | czy joins (~user@host-140-25.ilcub310.champaign.il.us.clients.pavlovmedia.net) |
| 06:47:07 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:29a4:629e:d3d5:2aa) |
| 06:48:33 | × | ft quits (~ft@p4fc2a88b.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:00:19 | × | phma quits (~phma@67.44.208.163) (Read error: Connection reset by peer) |
| 07:01:03 | → | phma joins (phma@2001:5b0:211c:9778:71a0:7bbd:aef8:6f85) |
| 07:01:31 | × | sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 248 seconds) |
| 07:01:56 | → | ubert joins (~Thunderbi@2003:ec:df15:58f9:1a2f:1ab6:a43c:6560) |
| 07:03:59 | × | ubert quits (~Thunderbi@2003:ec:df15:58f9:1a2f:1ab6:a43c:6560) (Client Quit) |
| 07:04:48 | <geekosaur> | @tell slack1256 only if you're already using SDL. if not, I just invoke paplay instead of mplayer or something else heavy (https://github.com/geekosaur/xmonad.hs/blob/skkukuk/xmonad.hs#L306-L307) |
| 07:04:48 | <lambdabot> | Consider it noted. |
| 07:06:42 | <geekosaur> | @tell slack1256 but portable really isn't a thing here aside from SDL_mixer. different command on Macs and Windows and maybe under different Linux audio systems… |
| 07:06:42 | <lambdabot> | Consider it noted. |
| 07:08:14 | → | vpan joins (~0@212.117.1.172) |
| 07:09:42 | → | crvs joins (~crvs@212.37.18.202) |
| 07:12:59 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 07:15:37 | × | razetime quits (~quassel@43.254.111.18) (Ping timeout: 276 seconds) |
| 07:16:44 | → | acidjnk joins (~acidjnk@p200300d6e715c4095c08899fd7601df9.dip0.t-ipconnect.de) |
| 07:22:09 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:26:17 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:37:02 | × | czy quits (~user@host-140-25.ilcub310.champaign.il.us.clients.pavlovmedia.net) (Remote host closed the connection) |
| 07:38:29 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 07:38:40 | → | razetime joins (~quassel@43.254.111.18) |
| 07:39:58 | × | harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
| 07:40:31 | × | thegeekinside quits (~thegeekin@189.180.38.222) (Ping timeout: 240 seconds) |
| 07:46:11 | → | nate1 joins (~nate@98.45.169.16) |
| 07:49:38 | → | zeenk joins (~zeenk@2a02:2f04:a20f:5200::7fe) |
| 07:50:56 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
| 07:55:38 | → | kalj joins (~kalj@h-158-174-207-174.NA.cust.bahnhof.se) |
| 07:56:13 | × | razetime quits (~quassel@43.254.111.18) (Remote host closed the connection) |
| 07:56:40 | → | monoidal joins (~monoidal@2a01cb0801ce4b0086d567e14f5ca343.ipv6.abo.wanadoo.fr) |
| 07:56:42 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 07:57:51 | × | kalj quits (~kalj@h-158-174-207-174.NA.cust.bahnhof.se) (Client Quit) |
| 08:01:31 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 08:07:36 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) (Remote host closed the connection) |
| 08:08:11 | → | chanceyan joins (~chanceyan@user/chanceyan) |
| 08:08:21 | × | chanceyan quits (~chanceyan@user/chanceyan) (Client Quit) |
| 08:08:56 | → | chanceyan joins (~chanceyan@user/chanceyan) |
| 08:10:36 | <DigitalKiwi> | hi210.0 |
| 08:12:47 | <geekosaur> | gesundheit! |
| 08:19:49 | → | barcisz joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 08:20:29 | × | chanceyan quits (~chanceyan@user/chanceyan) (Quit: chanceyan) |
| 08:20:59 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
| 08:30:53 | × | mokee quits (~mokee@37.228.215.215) (Quit: Lost terminal) |
| 08:33:53 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 08:43:11 | → | chele joins (~chele@user/chele) |
| 08:47:15 | → | c0c0 joins (~coco@212-51-146-137.fiber7.init7.net) |
| 08:49:11 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 08:50:14 | → | mokee joins (~mokee@37.228.215.215) |
| 08:51:19 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:51:20 | → | Guest45678 joins (~Guest4567@p200300cf072e68ea6b29732cbdb21e80.dip0.t-ipconnect.de) |
| 08:51:30 | → | coot joins (~coot@213.134.170.228) |
| 08:52:11 | × | coot quits (~coot@213.134.170.228) (Remote host closed the connection) |
| 08:53:10 | → | acidjnk_new joins (~acidjnk@p200300d6e715c409096287d884e9e013.dip0.t-ipconnect.de) |
| 08:53:59 | × | acidjnk quits (~acidjnk@p200300d6e715c4095c08899fd7601df9.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 08:59:24 | <DigitalKiwi> | c vfrd |
| 09:00:03 | × | ac1 quits (~aloiscoch@2001:470:69fc:105::65) (Quit: You have been kicked for being idle) |
| 09:00:03 | × | kadenwolff[m] quits (~kadenwolf@2001:470:69fc:105::1:d97f) (Quit: You have been kicked for being idle) |
| 09:00:08 | × | flo[m]1 quits (~flosansps@2001:470:69fc:105::1:c22d) (Quit: You have been kicked for being idle) |
| 09:08:06 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) |
| 09:12:32 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) (Ping timeout: 246 seconds) |
| 09:17:49 | × | gawen quits (~gawen@user/gawen) (Quit: cya) |
| 09:19:09 | → | gawen joins (~gawen@user/gawen) |
| 09:19:10 | × | mokee quits (~mokee@37.228.215.215) (Quit: off) |
| 09:20:44 | → | mokee joins (~mokee@37.228.215.215) |
| 09:28:14 | × | mokee quits (~mokee@37.228.215.215) (Quit: off) |
| 09:28:32 | → | mokee joins (~mokee@37.228.215.215) |
| 09:33:03 | × | Guest45678 quits (~Guest4567@p200300cf072e68ea6b29732cbdb21e80.dip0.t-ipconnect.de) (Quit: Client closed) |
| 09:33:05 | × | mokee quits (~mokee@37.228.215.215) (Client Quit) |
| 09:33:22 | → | mokee joins (~mokee@37.228.215.215) |
| 09:46:45 | × | monoidal quits (~monoidal@2a01cb0801ce4b0086d567e14f5ca343.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 09:48:30 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 09:49:37 | → | monoidal joins (~monoidal@2a01cb0801ce4b0086d567e14f5ca343.ipv6.abo.wanadoo.fr) |
| 09:52:11 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-196c-66e3-323f-365c.rev.sfr.net) |
| 09:53:33 | → | kuribas joins (~user@ptr-17d51em5uqcvks54820.18120a2.ip6.access.telenet.be) |
| 09:56:57 | × | barcisz quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 09:57:43 | → | barcisz joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 10:00:10 | × | monoidal quits (~monoidal@2a01cb0801ce4b0086d567e14f5ca343.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 10:00:11 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-196c-66e3-323f-365c.rev.sfr.net) (Remote host closed the connection) |
| 10:00:30 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-196c-66e3-323f-365c.rev.sfr.net) |
| 10:01:30 | × | andreas303 quits (andreas303@is.drunk.and.ready-to.party) (Ping timeout: 260 seconds) |
| 10:01:41 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 10:02:15 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 10:03:06 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Client Quit) |
| 10:06:20 | × | mokee quits (~mokee@37.228.215.215) (Quit: off) |
| 10:07:03 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 10:08:27 | × | xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds) |
| 10:11:32 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 10:13:33 | × | barcisz quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 10:14:53 | → | gurkenglas joins (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) |
| 10:15:38 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Read error: Connection reset by peer) |
| 10:20:14 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 10:20:49 | → | mokee joins (~mokee@37.228.215.215) |
| 10:22:34 | × | mokee quits (~mokee@37.228.215.215) (Client Quit) |
| 10:29:52 | × | Vajb quits (~Vajb@2001:999:40c:13d9:8e03:c3a5:f9c8:cadc) (Ping timeout: 248 seconds) |
| 10:30:22 | → | Vajb joins (~Vajb@2001:999:705:9eb4:3be1:37ee:6d1b:ae10) |
| 10:34:09 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-196c-66e3-323f-365c.rev.sfr.net) (Remote host closed the connection) |
| 10:39:02 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 10:39:45 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 10:40:00 | × | cheater quits (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com)) |
| 10:40:32 | → | __monty__ joins (~toonn@user/toonn) |
| 10:42:25 | → | Guest45678 joins (~Guest4567@p200300cf072e68ea6b29732cbdb21e80.dip0.t-ipconnect.de) |
| 10:42:35 | → | cheater joins (~Username@user/cheater) |
| 10:42:57 | × | robobub quits (uid248673@2a03:5180:f:5::3:cb61) (Quit: Connection closed for inactivity) |
| 10:47:10 | × | cheater quits (~Username@user/cheater) (Client Quit) |
| 10:51:52 | → | cheater joins (~Username@user/cheater) |
| 10:53:41 | × | cheater quits (~Username@user/cheater) (Client Quit) |
| 10:54:23 | × | crvs quits (~crvs@212.37.18.202) (Ping timeout: 246 seconds) |
| 11:01:39 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 11:02:08 | × | Guest45678 quits (~Guest4567@p200300cf072e68ea6b29732cbdb21e80.dip0.t-ipconnect.de) (Quit: Client closed) |
| 11:02:13 | → | gemmaro joins (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) |
| 11:04:19 | × | Typedfern quits (~Typedfern@60.red-83-37-32.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:04:19 | × | typedfern_ quits (~Typedfern@60.red-83-37-32.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:09:46 | → | crvs joins (~crvs@212.37.18.202) |
| 11:14:24 | <jade[m]> | Is it sensible to rewrite... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/76d672b7c22a943f38d43ee430d8d17c9426979d>) |
| 11:17:27 | <kaol> | foldMap may be a less surprising choice. |
| 11:17:50 | <ncf> | i think it's clarifying |
| 11:19:14 | <mauke> | :t maybe (pure ()) |
| 11:19:15 | <lambdabot> | Applicative f => (a -> f ()) -> Maybe a -> f () |
| 11:20:13 | <jade[m]> | that may also work |
| 11:20:18 | <jade[m]> | thank you |
| 11:20:54 | <mauke> | @let purée x = pure x |
| 11:20:55 | <lambdabot> | Defined. |
| 11:21:28 | <mauke> | :t maybe . purée |
| 11:21:29 | <lambdabot> | Applicative f => a1 -> (a2 -> f a1) -> Maybe a2 -> f a1 |
| 11:21:58 | → | Guest67 joins (~Guest67@ext-1-005.eduroam.chalmers.se) |
| 11:23:05 | × | Guest67 quits (~Guest67@ext-1-005.eduroam.chalmers.se) (Client Quit) |
| 11:28:32 | <[Leary]> | Looks like a clear and proper use of `for_` to me. Also, the argument order also matters a lot here; the joy is in being able to write `for_ foo \bar -> do ...`, which is awkward with `maybe` / `traverse_` / `foldMap`. |
| 11:29:24 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 11:30:02 | <hpc> | mauke: @let dice = randomIO? :D |
| 11:31:46 | <jade[m]> | god, I love when and unless |
| 11:32:47 | <hpc> | guard is pretty nice too |
| 11:36:30 | <jade[m]> | yup |
| 11:39:18 | → | barcisz joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 11:41:41 | <jade[m]> | I don't know why I'm so hung up in the aesthetics of code ....... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/12c33ab470945bdf271adef23f82b88ccecfc2c2>) |
| 11:41:46 | → | monoidal joins (~monoidal@2a01cb0801ce4b009fd62379833425c7.ipv6.abo.wanadoo.fr) |
| 11:43:53 | → | barcisz28 joins (~barcisz@public-gprs527309.centertel.pl) |
| 11:43:55 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 11:44:29 | <mauke> | I like the first one |
| 11:45:24 | <[Leary]> | You use `whenM` so that you don't have to make this decision. Otherwise the first one. It's the most clear and obvious, and you get to give you condition a nice name. |
| 11:47:12 | × | barcisz quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Ping timeout: 248 seconds) |
| 11:47:40 | → | nate1 joins (~nate@98.45.169.16) |
| 11:48:06 | <jade[m]> | ok now |
| 11:48:33 | <jade[m]> | ``` |
| 11:48:33 | <jade[m]> | foo >>= (`when` $ do) |
| 11:49:06 | <jade[m]> | * ```... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/179a2e13baf22051eefca4c6337d83df65b315ea>) |
| 11:49:07 | <jade[m]> | haha |
| 11:49:10 | <jade[m]> | * ```... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/20106cf1a969a0e55082fa6bdb52167931bd09b8>) |
| 11:49:10 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Read error: Connection reset by peer) |
| 11:49:22 | <jade[m]> | [Leary]: I'll probably use this one |
| 11:50:14 | <[Leary]> | I can only pray that you jest. |
| 11:51:13 | <[Leary]> | Also, since we're talking about aesthetics, you mus'n't forget your BlockArguments. They make everything better. |
| 11:51:26 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 11:52:25 | → | barcisz2888 joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 11:52:29 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 11:56:01 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 11:56:29 | × | barcisz28 quits (~barcisz@public-gprs527309.centertel.pl) (Ping timeout: 265 seconds) |
| 11:59:42 | ski | would prefer it if Matrix users would try not to "correct" messages, in channels bridged to IRC, such as this one |
| 12:00:01 | <ski> | (also not sending multi-line messages would make things simpler) |
| 12:00:26 | <ski> | jade[m] : fwiw, the brackets in `(Just x) -> f x' are redundant |
| 12:01:23 | <ski> | (and i think `for_' on `Maybe' is fine) |
| 12:02:17 | <hpc> | ski: eh, it's basically just an automatic pastebin i think |
| 12:02:28 | <hpc> | (agreed about message editing though) |
| 12:02:43 | × | monoidal quits (~monoidal@2a01cb0801ce4b009fd62379833425c7.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 12:04:04 | × | gemmaro quits (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) (Remote host closed the connection) |
| 12:04:15 | <ski> | except that people often send rather short, often incomplete, multi-line messages, a bit opposed to how people more intentionally often tend to use pastebins |
| 12:05:07 | <ski> | for such short things, i'd prefer seeing one long single message, or a few somewhat shorter messages in succession, neither of them requiring an external link lookup |
| 12:06:26 | <yushyin> | i usually ignore links without any context, thus if the multiline message starts with 'Hi .... (full message at <...>)' i tend to ignore it |
| 12:06:27 | <ski> | (still, the editing is the more annoying aspect, true) |
| 12:06:46 | <ski> | yea, good point |
| 12:07:04 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 12:08:29 | <ski> | (fwiw, i also think up to around ten lines of code pasted into a channel is fine ..) |
| 12:09:56 | <yushyin> | for me personally the soft limit on this is 3 lines, the hard limit is 5 lines |
| 12:10:58 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 12:11:48 | <ski> | sometimes i do enter multiple lines in succession, with indentation and all. but i don't paste them, i type them as-is, into the IRC client |
| 12:12:34 | → | jpds1 joins (~jpds@gateway/tor-sasl/jpds) |
| 12:14:32 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 12:17:03 | <somerandomnick> | I want to point my matterbridge at matrix instead of IRC. what is the endpoint for that |
| 12:17:38 | <somerandomnick> | @where matrix |
| 12:17:38 | <lambdabot> | I know nothing about matrix. |
| 12:21:44 | → | ubert joins (~Thunderbi@2a02:8109:abc0:6434:2f3a:6587:811:db87) |
| 12:23:09 | → | titibandit joins (~titibandi@user/titibandit) |
| 12:23:44 | <__monty__> | somerandomnick: Is `#haskell:libera.chat` what you're looking for? |
| 12:24:56 | → | Guest42100 joins (~Guest42@95.91.231.168) |
| 12:26:15 | × | barcisz2888 quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 12:26:31 | → | Typedfern joins (~Typedfern@60.red-83-37-32.dynamicip.rima-tde.net) |
| 12:26:36 | → | barcisz2888 joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 12:29:43 | × | somerandomnick quits (~somerando@217.160.36.77) (Remote host closed the connection) |
| 12:30:32 | → | xff0x joins (~xff0x@ai098135.d.east.v6connect.net) |
| 12:31:55 | × | Inst_ quits (~Inst@2601:6c4:4081:54f0:e436:a84f:8a3c:7b5) (Ping timeout: 250 seconds) |
| 12:35:02 | <dminuoso> | It finally occured to me why JSON is so popular. |
| 12:35:12 | → | bontaq joins (~user@ool-45779b84.dyn.optonline.net) |
| 12:35:34 | <dminuoso> | Deep inside programmers long for ADTs in languages with fairly poor or unergonomic ways to make simple sum or product types. |
| 12:36:49 | <yushyin> | lol |
| 12:38:48 | → | somerandomnick joins (~somerando@217.160.36.77) |
| 12:39:08 | → | somerandomnick[m joins (~somerando@2001:470:69fc:105::3:4f2e) |
| 12:39:44 | × | somerandomnick quits (~somerando@217.160.36.77) (Remote host closed the connection) |
| 12:41:40 | <lortabac> | I don't get it. JSON is more or less serialized JavaScript values. Where are the ADT's? |
| 12:42:26 | <somerandomnick[m> | @ping |
| 12:42:26 | <lambdabot> | pong |
| 12:43:03 | <dminuoso> | lortabac: Oh you can encode ADTs with it just fine. |
| 12:43:05 | <lortabac> | (I do agree that all programmers unconsciously long for sum types, but what's the relation with JSON?) |
| 12:44:07 | <dminuoso> | Oh I was just staring at another JSON configuration file, and it occured to me that the reason its used widely, is because JSON is usually directly mapped to types that embody untyped/unbounded ADTs. |
| 12:44:16 | × | acidjnk_new quits (~acidjnk@p200300d6e715c409096287d884e9e013.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 12:45:09 | <dminuoso> | But you're right, this isnt about JSON necessarily - though its syntax is generally very closely mirrored in many modern languages with attribute sets, lists, etc |
| 12:45:13 | <lortabac> | I think you are inverting cause and effect, JSON is popular because it's just JavaScript, it doesn't require you to learn a new syntax |
| 12:46:22 | <lortabac> | and that kind of "ADT" encoding is very common in the JS world |
| 12:46:31 | <somerandomnick[m> | [discord] <srn777> @ping |
| 12:50:12 | <somerandomnick[m> | @ping |
| 12:50:12 | <lambdabot> | pong |
| 12:50:27 | <ski> | you're bridging Discord, now ? |
| 12:51:16 | <somerandomnick[m> | im on discord, yes. going over matrix.org is very slow tho |
| 12:52:25 | <ski> | personally, i'd prefer not bridging this channel to Discord |
| 12:52:35 | <yushyin> | ^ |
| 12:53:12 | <somerandomnick[m> | its a private server. just me and my different personas talking to you |
| 12:53:20 | <yushyin> | it's also against discord's TOS |
| 12:53:42 | <ski> | Discord still keeps complete logs, and mines it for data |
| 12:53:52 | → | gemmaro joins (~user@240f:74:d1f0:1:ba1:e787:c9e:b1dc) |
| 12:54:08 | <probie> | They can already scrape https://ircbrowse.tomsmeding.com/browse/lchaskell if they want that |
| 12:55:21 | <somerandomnick[m> | this is a public chat |
| 12:55:23 | <ski> | i doubt they'll go to the trouble to automatically identify and scrape third-party logs |
| 12:55:24 | × | vpan quits (~0@212.117.1.172) (Quit: Leaving.) |
| 12:55:33 | <somerandomnick[m> | i choose matterbridge as my client to matrix chat |
| 12:56:18 | → | kalj joins (~kalj@h-158-174-207-174.NA.cust.bahnhof.se) |
| 12:56:33 | <somerandomnick[m> | hajimemashite |
| 12:58:48 | <merijn> | Anyone know if there's a more accessible version of "What Every Computer Scientist Should Know About Floating-Point Arithmetic"? I don't actually care about all the theorems and proofs, I just want some useful guidance on how to improve my accracy >.> |
| 12:59:05 | <ski> | @where floating-point |
| 12:59:05 | <lambdabot> | "What Every Programmer Should Know About Floating-Point Arithmetic" at <http://floating-point-gui.de/> and "What Every Computer Scientist Should Know About Floating-Point Arithmetic" by David |
| 12:59:05 | <lambdabot> | Goldberg in 1991 at <http://docs.sun.com/source/806-3568/ncg_goldberg.html> and <http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.102.244> |
| 13:00:01 | <merijn> | ski: did you just link the exact thing I mentioned *not* wanting? :p |
| 13:00:07 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 276 seconds) |
| 13:00:38 | <ski> | the first link might be applicable ? |
| 13:00:38 | <merijn> | ski: I'm reading that one right now, but it's too much theorem and proof and not enough actionable advice |
| 13:01:54 | <merijn> | ski: I mean, not really? That first link is like "explaining first year programmers why 0.1+0.2 is not 0.3". My questions are more: given a whole bunch of FP math, how do I minimise the introduce FP error |
| 13:02:54 | <dminuoso> | probie: Legally that's a different thing. |
| 13:02:58 | <merijn> | Like, I know how IEEE-754 representation works and why problems occur. I just don't know actionable advise for *minimising* my error over large computations |
| 13:04:58 | <kuribas> | merijn: There is software that can help with that |
| 13:05:29 | <kuribas> | it was in schema I believe... |
| 13:05:46 | <merijn> | Herbie? |
| 13:05:58 | <ski> | hmm .. sounds like you want a practical intro to numerical analysis concepts like numerical stability, well-conditioning, &c. ? |
| 13:06:17 | <kuribas> | merijn: yeah |
| 13:06:33 | <probie> | The textbook my university chose for "High Performance Scientific Computing" used to have a reasonable chapter on this, but the name of it escapes me |
| 13:06:36 | <merijn> | kuribas: I was looking at that too, but I need to gather approximate input ranges first |
| 13:06:36 | <kuribas> | merijn: also the beginning of Numerical Methods for scientists and engineers is good |
| 13:06:55 | <kuribas> | mostly basic stuff though. |
| 13:07:51 | <merijn> | I have some fairly basic stuff which has some number ranges which making my spidey-sense tingle |
| 13:10:57 | × | phma quits (phma@2001:5b0:211c:9778:71a0:7bbd:aef8:6f85) (Read error: Connection reset by peer) |
| 13:11:05 | <merijn> | ski: Possibly, I could probably use a decent intro in numerical stuff anyway, but it's hard to find good text books :p |
| 13:11:42 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) |
| 13:11:50 | → | phma joins (phma@2001:5b0:2143:d3b8:7a30:9fcb:3105:385a) |
| 13:12:29 | <kuribas> | merijn: https://www.amazon.com/Numerical-Methods-Scientists-Engineers-Mathematics/dp/0486652416 |
| 13:13:35 | × | Guest42100 quits (~Guest42@95.91.231.168) (Quit: Connection closed) |
| 13:15:07 | → | Guest4233 joins (~Guest42@95.91.231.168) |
| 13:16:05 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) (Ping timeout: 246 seconds) |
| 13:16:08 | <merijn> | That is...surprisingly cheap :p |
| 13:16:31 | × | Guest4233 quits (~Guest42@95.91.231.168) (Client Quit) |
| 13:17:25 | jpds1 | is now known as jpds |
| 13:19:03 | <merijn> | Anyway, it seems like the magical keyword I need is "Kahan summation" :p |
| 13:20:41 | → | andreas303 joins (andreas303@is.drunk.and.ready-to.party) |
| 13:20:51 | Square2 | is now known as Square |
| 13:26:24 | <probie> | merijn: oh man, that brings back traumatic memories |
| 13:26:42 | → | ft joins (~ft@p4fc2a88b.dip0.t-ipconnect.de) |
| 13:27:06 | → | jero98772 joins (~jero98772@2800:484:1d84:9000::2) |
| 13:27:39 | <merijn> | "Ah, cool, I see you're using your personal development budget to learn about numerical methods and stochastic differential equations! Which project are you using this?" |
| 13:27:59 | <merijn> | 'I'm optimising math about a videogame...' >.> |
| 13:36:20 | <lortabac> | merijn: do you know the math-functions package? |
| 13:36:30 | <lortabac> | @hackage math-functions |
| 13:36:30 | <lambdabot> | https://hackage.haskell.org/package/math-functions |
| 13:36:44 | <somerandomnick[m> | what game |
| 13:37:23 | <probie> | Something you may want to consider is that your CPU can likely do two fp adds and two fp muls at the same time, so for peak performance try and balance adds and multiplications so none of those execution units are sitting idle |
| 13:38:58 | <merijn> | lortabac: No, and also this code isn't Haskell :p But since my problem is (essentially) language agnostic and I get higher quality answers here, that's my default :p |
| 13:41:16 | <lortabac> | maybe it's still useful to read the code, probably quicker than reading a whole book :P |
| 13:47:09 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:29a4:629e:d3d5:2aa) (Quit: WeeChat 2.8) |
| 13:47:55 | × | ubert quits (~Thunderbi@2a02:8109:abc0:6434:2f3a:6587:811:db87) (Ping timeout: 248 seconds) |
| 13:51:57 | → | ubert joins (~Thunderbi@ip4d17361f.dynamic.kabel-deutschland.de) |
| 13:52:43 | × | vjoki quits (~vjoki@2a00:d880:3:1::fea1:9ae) (Quit: ...) |
| 13:53:27 | → | vjoki joins (~vjoki@2a00:d880:3:1::fea1:9ae) |
| 13:54:14 | × | ManofLetters[m] quits (~manoflett@2001:470:69fc:105::3be) (Ping timeout: 246 seconds) |
| 13:54:14 | × | naine[m] quits (~naine-env@2001:470:69fc:105::3:2e57) (Ping timeout: 246 seconds) |
| 13:54:14 | × | maralorn quits (~maralorn@2001:470:69fc:105::251) (Ping timeout: 246 seconds) |
| 13:54:35 | × | polykernel[m] quits (~polykerne@user/polykernel) (Ping timeout: 246 seconds) |
| 13:54:35 | × | Clinton[m] quits (~clintonme@2001:470:69fc:105::2:31d4) (Ping timeout: 246 seconds) |
| 13:54:56 | × | luffy[m]1 quits (~luffyinte@2001:470:69fc:105::3:4cd5) (Ping timeout: 246 seconds) |
| 13:54:56 | × | tiagsmm[m] quits (~tiagsmmma@2001:470:69fc:105::3:4002) (Ping timeout: 246 seconds) |
| 13:54:56 | × | joyfulmantis[m] quits (~joyfulman@2001:470:69fc:105::3:400a) (Ping timeout: 246 seconds) |
| 13:54:56 | × | teo quits (~teo@user/teo) (Ping timeout: 246 seconds) |
| 13:54:56 | × | oak- quits (~oak-@2001:470:69fc:105::fcd) (Ping timeout: 246 seconds) |
| 13:54:56 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 246 seconds) |
| 13:55:08 | × | Me-me quits (~Me-me@user/me-me) (Quit: Something has gone terribly, terribly wrong, that being that I'm not here any more.) |
| 13:58:19 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 14:01:03 | → | thegeekinside joins (~thegeekin@189.180.38.222) |
| 14:05:19 | → | General joins (~General@net-37-179-166-221.cust.vodafonedsl.it) |
| 14:06:57 | → | ManofLetters[m] joins (~manoflett@2001:470:69fc:105::3be) |
| 14:08:40 | → | naine[m] joins (~naine-env@2001:470:69fc:105::3:2e57) |
| 14:08:54 | → | maralorn joins (~maralorn@2001:470:69fc:105::251) |
| 14:09:26 | × | dumarrr^ quits (~dumarrr@c-76-105-96-13.hsd1.ga.comcast.net) (Remote host closed the connection) |
| 14:10:03 | → | polykernel[m] joins (~polykerne@user/polykernel) |
| 14:10:17 | → | Clinton[m] joins (~clintonme@2001:470:69fc:105::2:31d4) |
| 14:11:37 | → | oak- joins (~oak-@2001:470:69fc:105::fcd) |
| 14:11:44 | → | joyfulmantis[m] joins (~joyfulman@2001:470:69fc:105::3:400a) |
| 14:13:04 | → | tiagsmm[m] joins (~tiagsmmma@2001:470:69fc:105::3:4002) |
| 14:14:05 | → | sm joins (~sm@plaintextaccounting/sm) |
| 14:14:19 | → | teo joins (~teo@user/teo) |
| 14:15:38 | × | kalj quits (~kalj@h-158-174-207-174.NA.cust.bahnhof.se) (Ping timeout: 245 seconds) |
| 14:18:30 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 14:23:22 | × | gurkenglas quits (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 14:25:37 | → | cheater joins (~Username@user/cheater) |
| 14:28:40 | × | jero98772 quits (~jero98772@2800:484:1d84:9000::2) (Ping timeout: 260 seconds) |
| 14:38:19 | → | zaquest joins (~notzaques@5.130.79.72) |
| 14:41:08 | → | jero98772 joins (~jero98772@2800:484:1d84:9000::2) |
| 14:43:12 | → | mokee joins (~mokee@37.228.215.215) |
| 14:49:46 | × | mokee quits (~mokee@37.228.215.215) (Quit: off) |
| 14:50:06 | → | mokee joins (~mokee@37.228.215.215) |
| 14:50:25 | → | dostoyevsky2 joins (~sck@user/dostoyevsky2) |
| 14:51:09 | → | jinsl- joins (~jinsl@2408:8207:2557:88e0:211:32ff:fec8:6aea) |
| 14:51:18 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.8) |
| 14:51:19 | × | mokee quits (~mokee@37.228.215.215) (Client Quit) |
| 14:51:25 | × | jinsl quits (~jinsl@123.117.251.25) (Ping timeout: 252 seconds) |
| 14:51:28 | <dostoyevsky2> | https://github.com/ButlerOS/haskell-butler <- are there any particular distributed features in Haskell that made this virtual/distributed OS possible? |
| 14:51:32 | → | luffy[m]1 joins (~luffyinte@2001:470:69fc:105::3:4cd5) |
| 14:52:17 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:57:19 | → | acidjnk_new joins (~acidjnk@p200300d6e715c468b4bf77e5a0595f20.dip0.t-ipconnect.de) |
| 14:58:04 | <geekosaur> | I'm not sure I'd say it has more features; I would say it'd be a lot harder to make mistakes using them. See for example why almost nobody uses STM outside of Haskell |
| 15:00:00 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:6cda:c72d:6503:1251) |
| 15:00:59 | <ski> | (expressiveness vs. "reasonability") |
| 15:05:44 | × | oats quits (~thomas@user/oats) (Quit: until later, my friends) |
| 15:07:51 | <monochrom> | implementor's freedom vs reasoner's freedom |
| 15:08:12 | <monochrom> | "My freedom is your slavery." :) |
| 15:08:31 | <ski> | rights vs. duties |
| 15:08:43 | <monochrom> | Yeah |
| 15:08:57 | <monochrom> | Programming is a dialectic class struggle between the implementor and the user. |
| 15:11:56 | × | General quits (~General@net-37-179-166-221.cust.vodafonedsl.it) (Ping timeout: 246 seconds) |
| 15:22:01 | × | jinsl- quits (~jinsl@2408:8207:2557:88e0:211:32ff:fec8:6aea) (Quit: ZNC - https://znc.in) |
| 15:26:13 | → | gurkenglas joins (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) |
| 15:26:52 | → | jinsl joins (~jinsl@123.120.170.97) |
| 15:27:45 | → | econo joins (uid147250@user/econo) |
| 15:30:29 | <ncf> | typeclass struggle |
| 15:34:43 | ← | dostoyevsky2 parts (~sck@user/dostoyevsky2) () |
| 15:35:43 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 15:38:15 | × | jero98772 quits (~jero98772@2800:484:1d84:9000::2) (Ping timeout: 250 seconds) |
| 15:39:02 | × | AlexZenon quits (~alzenon@178.34.150.15) (Ping timeout: 252 seconds) |
| 15:39:46 | × | Alex_test quits (~al_test@178.34.150.15) (Ping timeout: 252 seconds) |
| 15:44:16 | × | ubert quits (~Thunderbi@ip4d17361f.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 15:44:35 | → | AlexZenon joins (~alzenon@178.34.150.15) |
| 15:45:02 | → | Alex_test joins (~al_test@178.34.150.15) |
| 15:45:08 | → | Sgeo_ joins (~Sgeo@user/sgeo) |
| 15:47:17 | × | Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 246 seconds) |
| 15:49:13 | → | nate1 joins (~nate@98.45.169.16) |
| 15:49:46 | × | crvs quits (~crvs@212.37.18.202) (Read error: Connection reset by peer) |
| 15:51:12 | → | jero98772 joins (~jero98772@2800:484:1d84:9000::2) |
| 15:53:56 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 15:53:57 | × | extor quits (~extor@ns3018124.ip-149-202-82.eu) (Remote host closed the connection) |
| 15:57:20 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 15:57:54 | → | General joins (~General@net-37-179-166-221.cust.vodafonedsl.it) |
| 15:58:14 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 15:58:47 | × | ddellaco1 quits (~ddellacos@146.70.165.230) (Quit: WeeChat 3.8) |
| 16:00:07 | × | AndreiDuma[m] quits (~andreidum@2001:470:69fc:105::3:390f) (Quit: You have been kicked for being idle) |
| 16:25:09 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 16:30:53 | → | ddellacosta joins (~ddellacos@146.70.165.230) |
| 16:36:54 | → | Joao003 joins (~Joao003@2804:840:8309:0:60f9:6293:872c:15aa) |
| 16:37:09 | <Joao003> | Does someone actually use (<$) |
| 16:38:11 | <ski> | i imagine it's used with parsers, e.g. |
| 16:41:19 | <Joao003> | e.g. what? |
| 16:42:13 | <[exa]> | I use it for parsing stuff like: EmptyParens <$ string "()" |
| 16:43:04 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 276 seconds) |
| 16:43:11 | <Joao003> | (<$>) only maps over the last type variable |
| 16:43:25 | <Joao003> | That's why it maps over the entirety of a list |
| 16:44:01 | × | General quits (~General@net-37-179-166-221.cust.vodafonedsl.it) (Quit: Leaving) |
| 16:44:53 | <Joao003> | > fmap (*2) [1..3] |
| 16:44:54 | <lambdabot> | [2,4,6] |
| 16:45:53 | <yushyin> | usually in parser combinator code, you will see (<$) and ($>) |
| 16:46:23 | <Joao003> | ($>) is flip (<$)? |
| 16:46:49 | <Joao003> | Yes it is |
| 16:47:48 | <Joao003> | Is (<&>) actually used somewhere? |
| 16:48:11 | × | jero98772 quits (~jero98772@2800:484:1d84:9000::2) (Ping timeout: 246 seconds) |
| 16:50:24 | <lyxia> | it can be quite neat to avoid parentheses around the lambda |
| 16:54:17 | <sm> | I used it yesterday in a chain of function calls that turned monadic half way through |
| 16:54:35 | sm | sent a code block: https://libera.ems.host/_matrix/media/v3/download/libera.chat/34a09009167c4901b192d49a3dfcde535f6d0017 |
| 16:54:36 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:59:43 | → | jero98772 joins (~jero98772@2800:484:1d84:9000::2) |
| 17:04:12 | × | zeenk quits (~zeenk@2a02:2f04:a20f:5200::7fe) (Quit: Konversation terminated!) |
| 17:07:28 | × | kuribas quits (~user@ptr-17d51em5uqcvks54820.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 17:08:28 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 17:17:19 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 17:17:37 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 17:18:24 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 17:18:47 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 17:19:20 | <Joao003> | lyxia: Example? |
| 17:24:18 | × | fbytez quits (~uid@2001:bc8:2117:100::) (Changing host) |
| 17:24:18 | → | fbytez joins (~uid@user/fbytez) |
| 17:29:35 | <probie> | Look at the example sm sent. One of my previous workplaces had a very lens-focused style that made similar use of <&> to sm and often had code which looked like `res <- foo ^. someLens & doMonadicThing <&> mapResult`. |
| 17:29:46 | <ddellacosta> | lol I just went looking for some examples of where I use it in one of my projects and realized I'm not sure I like most of my uses of it...but in any case Joao003 here's one place I think it's passable, at least: https://github.com/ddellacosta/automation-service/blob/119d948f3476f25fac6cd756a6e5701a2dc9fd39/src/Service/Daemon.hs#L193-L195 |
| 17:30:44 | <ddellacosta> | I think there I just wanted to keep the liftIO with the nextRunning call, but as others point out it tends to be about making a bit of code feel more natural, which is somewhat subjective |
| 17:30:45 | <Joao003> | <&> = flip (<$>)? Probably yes |
| 17:30:58 | <ddellacosta> | yeah I just think of it as reversing (<$>) |
| 17:32:49 | <Joao003> | ($) = flip (&), so logically (<$>) = flip (<&>) |
| 17:36:11 | <sm> | is it my imagination or does <$> have different precedence from $. I kept trying to use it and having to switch to `fmap (...) $` instead |
| 17:38:53 | <probie> | sm: not your imagination at all. ($) is infixr 0 and and (<$>) is infixl 4 |
| 17:38:53 | <xerox> | sm: if you do :info ($) and :info (<$>) in ghci you can see it |
| 17:39:38 | <sm> | thanks! I realised that afterward but asking humans is helpful sometimes |
| 17:39:52 | <probie> | (&) and (<&>) are both infixl 1 so are easier to use together |
| 17:40:12 | <somerandomnick[m> | sm: the flesh is weak, only the machine is eternal |
| 17:40:24 | <xerox> | glad to be a rubber ducky |
| 17:41:21 | <sm> | I guess it's for a reason, but a pity that <$> breaks with $ in this aspect |
| 17:41:41 | <sm> | breaks consistency |
| 17:44:27 | <jean-paul[m]> | Anyone know of a tool for generating visualizations of type class hierarchies? I would like the reflex-dom hierarchy on my wall. |
| 17:44:40 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 17:45:47 | <sm> | A little real world context for new haskellers: the above code snippet looks simple now but was hard to discover, especially with HLS broken as usual. It took some time. Easier next time hopefully. |
| 17:55:58 | <[exa]> | jean-paul[m]: well as the first attempt you can try to throw it to dot and see |
| 17:57:15 | <[exa]> | jean-paul[m]: here https://www.graphviz.org/docs/layouts/dot/ |
| 17:57:21 | <jean-paul[m]> | I don't know the name of the tool that spits out dot given a pile of haskell |
| 17:58:01 | <jean-paul[m]> | 🤔 |
| 17:58:02 | <jean-paul[m]> | Do you mean "just type the graph source in yourself"? |
| 17:58:26 | <jean-paul[m]> | This would likely be a good learning experience but I'm not sure I can bring myself to do it. |
| 17:58:39 | <[exa]> | hm true that I kinda assumed |
| 17:59:06 | <[exa]> | afaik you might have luck sourcing the info from haddock |
| 17:59:07 | <jean-paul[m]> | I dunno how many edges there are but I'm gonna guess upwards of a hundred |
| 17:59:29 | <geekosaur> | do you want stack dot? |
| 18:00:05 | <jean-paul[m]> | Ah neat. I probably also want that, but that's not what I meant. |
| 18:00:09 | <ddellacosta> | ah yeah, I was trying to remember how I did that once at my last job. Must have been https://docs.haskellstack.org/en/stable/dependency_visualization/index.html |
| 18:00:59 | <jean-paul[m]> | I think want the nodes to be type classes and the edges to be "requires" |
| 18:01:46 | <jean-paul[m]> | Maybe I should ask ldlework how he made https://raw.githubusercontent.com/dustinlacewell/haskell-typeclass-atlas/master/atlas.png |
| 18:02:00 | <ddellacosta> | oh yeah this is not the typeclass hierarchy, whoops. But I swear I did that once. I had a convo about the output file with my coworkers |
| 18:05:29 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 18:05:52 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 18:07:27 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 18:07:31 | <jean-paul[m]> | I guess it looks hand-crafted, https://github.com/dustinlacewell/haskell-typeclass-atlas/blob/master/atlas.plantuml |
| 18:07:42 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 18:10:00 | <ddellacosta> | jean-paul[m]: aha, I think it must have been this: https://github.com/jonascarpay/calligraphy |
| 18:10:28 | <ddellacosta> | jean-paul[m]: lots of info here https://jonascarpay.com/posts/2022-04-26-calligraphy-tutorial.html |
| 18:10:48 | × | barcisz2888 quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 18:11:07 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 18:11:09 | → | barcisz2888 joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 18:11:35 | → | Bocaneri joins (~sauvin@user/Sauvin) |
| 18:11:59 | Bocaneri | is now known as Guest8107 |
| 18:12:28 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 18:13:36 | <jean-paul[m]> | nice, thanks |
| 18:14:43 | × | Sauvin quits (~sauvin@user/Sauvin) (Ping timeout: 276 seconds) |
| 18:14:55 | <ddellacosta> | sure thing, glad I found it again myself! |
| 18:19:49 | <[exa]> | wow lovely |
| 18:19:52 | <[exa]> | thanks guys :] |
| 18:20:22 | <ddellacosta> | yeah I remember it working pretty well |
| 18:21:08 | <geekosaur> | @where+ call-graph https://github.com/jonascarpay/calligraphy https://jonascarpay.com/posts/2022-04-26-calligraphy-tutorial.html |
| 18:21:08 | <lambdabot> | Okay. |
| 18:22:32 | × | jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in) |
| 18:24:15 | <ddellacosta> | nice |
| 18:33:16 | jade[m] | uploaded an image: (215KiB) < https://libera.ems.host/_matrix/media/v3/download/matrix.org/aYSSIpMueCcDQSQhKsNWKYnp/image.png > |
| 18:33:25 | <jade[m]> | basically a graphics programmer |
| 18:38:04 | → | elkcl joins (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) |
| 18:39:35 | <[exa]> | jade[m]: quality metal reminder, thx |
| 18:40:43 | <eldritchcookie[m> | does the socket library encrypt the messages? |
| 18:40:56 | <eldritchcookie[m> | is there any network library that does? |
| 18:41:32 | <[exa]> | eldritchcookie[m: socket does not encrypt anything by default, you want extra protocol over that such as TLS or SSL |
| 18:42:05 | <Joao003> | Did you know that the S combinator can be defined as \x y z -> uncurry x $ fmap y (z, z)? |
| 18:43:02 | <mauke> | I prefer ap |
| 18:45:54 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 18:45:54 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 18:45:54 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:45:55 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds) |
| 18:46:52 | <probie> | Joao003: Yes, but I also fail to see what's interesting about that definition (is it the first time you've seen the functor instance for (,)?) |
| 18:47:26 | <Joao003> | probie: I'm just testing out my knowledge of fmap. |
| 18:48:30 | <probie> | There's a functor instance on `(,) a`, so fmap applied the function to second element of the tuple, so you end up with `\x y z -> uncurry x (z, y z)` which becomes the canonical definition of S when uncurry in applied |
| 18:48:41 | <probie> | s/fmap applied/fmap applies/ |
| 18:48:50 | <probie> | s/in applied/is applied/ |
| 18:49:54 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 18:50:41 | <Joao003> | `\x y z -> x z (y z)` is too vanilla for me, so I decided to use fmap. |
| 18:51:37 | <mauke> | > ap (f :: Expr -> Expr -> Expr) g x |
| 18:51:39 | <lambdabot> | f x (g x) |
| 18:52:20 | <Joao003> | :t ap |
| 18:52:21 | <lambdabot> | Monad m => m (a -> b) -> m a -> m b |
| 18:52:46 | <eldritchcookie[m> | why is it monad? |
| 18:52:48 | <Joao003> | Monads are Applicatives too, I guess. |
| 18:53:24 | <eldritchcookie[m> | i thought it was defined as ap = (<*>) |
| 18:53:25 | <Joao003> | @src Applicative |
| 18:53:25 | <lambdabot> | class Functor f => Applicative f where |
| 18:53:25 | <lambdabot> | pure :: a -> f a |
| 18:53:25 | <lambdabot> | (<*>) :: f (a -> b) -> f a -> f b |
| 18:53:40 | <Joao003> | @src ap |
| 18:53:40 | <lambdabot> | ap = liftM2 id |
| 18:53:45 | <Joao003> | liftM2 id |
| 18:53:49 | <probie> | `ap` predates the Applicative typeclass |
| 18:54:34 | <Joao003> | > ap (+) (*2) 3 |
| 18:54:36 | <lambdabot> | 9 |
| 18:54:42 | <Joao003> | That's S! |
| 18:54:53 | × | gurkenglas quits (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 18:54:56 | × | pyook quits (~puke@user/puke) (Remote host closed the connection) |
| 18:54:56 | <probie> | > (+) <*> (*2) $ 3 |
| 18:54:58 | <lambdabot> | 9 |
| 18:54:59 | <eldritchcookie[m> | sure but isn't it planned to drop return from monad and make it applicative why not do the same thing here? |
| 18:55:18 | → | pyook joins (~puke@user/puke) |
| 18:55:36 | <probie> | :t return |
| 18:55:37 | <lambdabot> | Monad m => a -> m a |
| 18:55:43 | <Joao003> | > uncurry (+) $ fmap (*2) (3, 3) |
| 18:55:45 | <lambdabot> | 9 |
| 18:56:15 | <Joao003> | @src liftM2 |
| 18:56:15 | <lambdabot> | liftM2 f m1 m2 = do |
| 18:56:15 | <lambdabot> | x1 <- m1 |
| 18:56:15 | <lambdabot> | x2 <- m2 |
| 18:56:15 | <lambdabot> | return (f x1 x2) |
| 18:56:38 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 18:56:52 | <mauke> | @. undo src liftM2 |
| 18:56:52 | <Joao003> | Does everyone here agree that the name `return` is misleading? |
| 18:56:52 | <lambdabot> | liftM2 f m1 m2 = m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2) |
| 18:57:40 | <probie> | Changing the requirement from `Monad` to `Applicative` breaks "bad" code where the `Monad` and `Applicative` instances differ, but there is real code where that is the case |
| 18:58:07 | <probie> | which is why that change hasn't exactly been rushed through |
| 18:58:57 | <Joao003> | :t liftM2 id (+) (*2) |
| 18:58:58 | <lambdabot> | Num a2 => a2 -> a2 |
| 18:59:49 | <Joao003> | Why are functions monads? |
| 19:00:11 | <monochrom> | Joao003: I need to share a logic joke with you. |
| 19:00:38 | <monochrom> | 4 logicians go to a bar. The server asks "so, is it beer for everyone?" |
| 19:00:46 | <monochrom> | 1st logician says "I don't know" |
| 19:00:50 | <monochrom> | 2nd logician says "I don't know" |
| 19:00:54 | <monochrom> | 3rd logician says "I don't know" |
| 19:01:04 | × | barcisz2888 quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 19:01:05 | <monochrom> | 4th logician says "therefore yes!" |
| 19:01:11 | <monochrom> | Explain why. >:) |
| 19:01:21 | <probie> | Joao003: Because ((->) r) is the reader monad (sans newtype) |
| 19:01:26 | <monochrom> | And now to answer your question: I don't know. |
| 19:01:45 | <jade[m]> | Joao003: because we can provide an instance for `(->) r` |
| 19:01:47 | <nitrix> | monochrom, They would've said "No" if they didn't want one. Otherwise, they had to wait for everyone to answer to conclude that everyone wanted one. |
| 19:01:47 | <yushyin> | because you can define a lawful instance! |
| 19:02:03 | <monochrom> | (about the "return" question) |
| 19:02:08 | <Joao003> | I still don't understand |
| 19:02:12 | <monochrom> | Yeah nitrix :) |
| 19:02:59 | <probie> | Oh man, that reminds me of epistemic logic puzzles ("I don't know, I don't know, I don't know, now I know") |
| 19:03:06 | <jean-paul[m]> | monochrom: it's because the lion eats the zebra right? |
| 19:04:47 | <monochrom> | It was a cartoon/comic from Spiked Math, if you know that it once existed. It pokes fun on those induction logic puzzles "there is an island of 100 logicians..." |
| 19:04:56 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
| 19:04:56 | <jade[m]> | `(->) r` is simply a type which takes values "from" r to something else, so we can write a monad instance... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/cf4058b7b7ecd463c00893fc0d81d9cd7958f7c1>) |
| 19:05:08 | <jade[m]> | just because it works |
| 19:05:35 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 19:05:36 | <monochrom> | Yeah probie exactly. :) |
| 19:06:33 | <jade[m]> | return is trivially const (simply return = pure from the applicative instance as it should be) |
| 19:06:51 | <jade[m]> | and from there you can verify all laws apply |
| 19:06:55 | <jade[m]> | which they do |
| 19:06:58 | <jade[m]> | @Joao003 |
| 19:06:58 | <lambdabot> | Unknown command, try @list |
| 19:07:12 | <jade[m]> | shush |
| 19:07:21 | → | tremon joins (~tremon@83.80.159.219) |
| 19:08:13 | <Joao003> | (->) r is of type a -> r -> a? |
| 19:08:55 | <jade[m]> | no, `(->) r a` is the same as `r -> a` |
| 19:09:10 | <jade[m]> | are you familiar about how value level infix functions are desugared? |
| 19:09:34 | <monochrom> | "(->) r" is already a type. |
| 19:09:48 | <jade[m]> | `(->) r` is simply `(->)` applied to one argument, namely the left side |
| 19:09:52 | <monochrom> | Just like you don't ask "Int is of type what?" |
| 19:09:55 | <jade[m]> | as a splice you could write it as `(r ->)` |
| 19:10:21 | <jade[m]> | monochrom: of kind `* -> *`, as `Monad` expects |
| 19:10:21 | <Joao003> | You can't do splices in types IIRC |
| 19:10:40 | <monochrom> | I don't know what "splice" means. |
| 19:10:56 | <jade[m]> | I wouldn't know, I just thought it could help |
| 19:11:02 | <jade[m]> | monochrom: `(+1)` for example |
| 19:11:04 | <probie> | Probably what the report would refer to as a section |
| 19:11:06 | <monochrom> | But Haskell totally accepts "instance Foo ((->) r)" as long as Foo is defined accordingly. |
| 19:11:13 | <jade[m]> | partially applying an infiy operator |
| 19:11:25 | <jade[m]> | probie: that's the word, my bad |
| 19:11:38 | <monochrom> | Whatever mental model you have now that doesn't accept "instance Foo ((->) r)", you need to throw it away. |
| 19:12:02 | <monochrom> | Along the same line, "instance Functor (Either e)" is totally fine. |
| 19:12:46 | <monochrom> | Indeed, perhaps you figure out "instance Functor (Either e)" and "instance Functor ((->) r)" first. |
| 19:13:51 | <monochrom> | And perhaps you just need to know that so-called "X -> Y" is syntax sugar for (->) X Y |
| 19:14:08 | <monochrom> | so now it's really analogous to Either A B. |
| 19:14:29 | <monochrom> | Actually, ((->) X) Y and (Either A) B. |
| 19:14:39 | <jade[m]> | think of it as `Monad` expecting a type with one 'parameter' (`* -> *`) like `Maybe`. |
| 19:14:39 | <jade[m]> | `(->)` expects two 'parameters' (`* -> * -> *`), so partially applying it to a generic `r` gives you a kind `* -> *` |
| 19:15:22 | <Joao003> | (->) is a typeclass I think |
| 19:15:27 | <monochrom> | No. |
| 19:15:49 | <mauke> | (->) is a type constructor (of 2 (type) arguments) |
| 19:15:59 | <mauke> | Int takes no arguments |
| 19:15:59 | <monochrom> | It would be like saying "Int and Either are typeclasses". No. |
| 19:16:01 | <mauke> | Maybe takes one |
| 19:16:30 | <Joao003> | mauke: So what is the type of (->)??? |
| 19:16:46 | <jade[m]> | it does not have a type |
| 19:16:47 | <monochrom> | (->) is already a type. |
| 19:16:48 | <ncf> | :k (->) |
| 19:16:49 | <lambdabot> | * -> * -> * |
| 19:16:57 | <monochrom> | Again, you don't ask "what's the type of Int". |
| 19:16:57 | <jade[m]> | it only has a kind |
| 19:17:36 | <Joao003> | So why is it not on Hoogle if it's a type!? |
| 19:18:02 | <jade[m]> | that's more or less a good question, it probably should be |
| 19:18:08 | <monochrom> | Because Hoogle is neither complete nor final? |
| 19:18:12 | <jade[m]> | but it doesn't have classic documentation afaik |
| 19:18:21 | <ncf> | because it's built in, it's not defined anywhere |
| 19:18:27 | <jade[m]> | yep |
| 19:18:37 | <jade[m]> | though you can think of it as being |
| 19:18:40 | <monochrom> | It's doc is in the Haskell2010 Report |
| 19:18:50 | <Joao003> | (->) is the core of the language, LOL |
| 19:18:54 | <jade[m]> | it's nothing "special" special |
| 19:20:02 | <Joao003> | Type constructors are of type (->) |
| 19:20:08 | <mauke> | no |
| 19:20:11 | <jade[m]> | no |
| 19:20:24 | <jade[m]> | `(->)` *is* a type constructor |
| 19:20:32 | <mauke> | that's a different -> (for now) |
| 19:20:32 | <jade[m]> | it constructs types from other types |
| 19:21:05 | <Joao003> | Type operator? (+) is of type (->) Int ((->) Int Int) |
| 19:21:26 | <jade[m]> | yes, actually |
| 19:21:28 | <monochrom> | (+) is not a type operator. |
| 19:21:32 | <jade[m]> | not quite |
| 19:21:35 | <jade[m]> | take Num |
| 19:21:35 | <Joao003> | (->) is |
| 19:21:44 | <jade[m]> | monochrom: I think they mean the right thing |
| 19:22:02 | <jade[m]> | but plus is not ideal because it itself is part of a typeclass |
| 19:22:03 | <jade[m]> | so you'd need a constraint |
| 19:22:05 | <Joao003> | I was just saying that the function (+) is of type (->) Int ((-> Int Int) |
| 19:22:08 | <monochrom> | No, I think by now no one knows what they mean. Not even themselves. |
| 19:22:09 | <Joao003> | I was just saying that the function (+) is of type (->) Int ((->) Int Int) |
| 19:22:14 | <Joao003> | Sorry! |
| 19:22:23 | <mauke> | that's correct |
| 19:22:24 | <jade[m]> | monochrom: oh come on, don't be so mean |
| 19:22:28 | <jade[m]> | they are getting there |
| 19:22:49 | <mauke> | really, we're just playing with syntax here |
| 19:23:23 | <monochrom> | No. Firstly, we need to be on the same page. Secondly, that page cannot use the same word for two conflicting things. |
| 19:23:24 | <Joao003> | WHY CAN TYPES TAKE OTHER TYPES |
| 19:23:37 | <Joao003> | THIS IS BECOMING TYPE FUNCTIONS |
| 19:23:40 | <mauke> | :t Left 42 :: Int `Either` String |
| 19:23:41 | <lambdabot> | Either Int String |
| 19:23:50 | <monochrom> | Either that, or we need not talk to each other at all. |
| 19:23:51 | <jade[m]> | because `(->)` is a type-level function from types to types |
| 19:24:09 | <mauke> | Joao003: that's just what parameterized types are |
| 19:24:16 | <probie> | Joao003: the "type" of a type is called a kind |
| 19:24:41 | <probie> | something like Maybe is of kind * -> * (i.e it takes one type, and returns a new type) |
| 19:24:45 | <jade[m]> | now, do we have something like the "type" of kinds? /j |
| 19:24:53 | <mauke> | sorta |
| 19:25:05 | × | Square quits (~Square4@user/square) (Ping timeout: 240 seconds) |
| 19:25:10 | <Joao003> | Response to a joke? Satisfactory |
| 19:25:37 | <eldritchcookie[m> | if i rember correctly kinds and types are unified |
| 19:26:05 | <eldritchcookie[m> | so we have Int :: Type but Type is a Type |
| 19:26:51 | <mauke> | https://i.imgur.com/JcspoU2.jpg infinite power |
| 19:26:56 | <Joao003> | Either doesn't need to be it's own type, since we can have a pair of values with a boolean to determine if it's Left or Right |
| 19:27:12 | <Joao003> | s/it's own/its own/ |
| 19:27:21 | <jade[m]> | what |
| 19:27:22 | <eldritchcookie[m> | wow |
| 19:27:29 | <mauke> | a + a = 2 * a |
| 19:27:33 | <mauke> | that's just basic algebra |
| 19:27:34 | <monochrom> | "called it". |
| 19:28:26 | <jade[m]> | without trying to be mean, it sort of feels like we're talking to chatGPT |
| 19:28:57 | <Joao003> | Similarly for Maybe, we can have a value with a boolean to determine if it's Just or Nothing |
| 19:29:23 | <jade[m]> | I don't understand what you are trying to say |
| 19:29:24 | <mauke> | Joao003: how do you deal with Void, which has no values? |
| 19:29:42 | <Joao003> | Simple: [] |
| 19:29:47 | <mauke> | wat |
| 19:29:51 | <jade[m]> | what |
| 19:29:56 | <mauke> | [] is not of type Void |
| 19:30:03 | <Joao003> | Wait |
| 19:30:10 | <Joao003> | Void needs to be a builtin |
| 19:30:16 | <jade[m]> | no |
| 19:30:19 | <mauke> | Nothing :: Maybe Void -- is ok |
| 19:30:23 | <jade[m]> | data Void |
| 19:30:25 | <jade[m]> | right there |
| 19:30:26 | <mauke> | but you can't have (False, ???) |
| 19:31:07 | <jade[m]> | bottom ;) |
| 19:31:23 | <mauke> | or in Haskell 98: newtype Void = MkVoid Void |
| 19:31:24 | <jade[m]> | something something inhabitant of every type something something |
| 19:31:54 | <jade[m]> | mauke: wait, that's hilarious |
| 19:32:14 | <jade[m]> | but can you not have MkVoid undefined just fine? |
| 19:32:17 | <Joao003> | ... Why do we have tuples of three, tuples of four, and etc? Can't we just use lists? |
| 19:32:31 | → | pavonia joins (~user@user/siracusa) |
| 19:32:41 | <geekosaur> | you can't (easily) have a list whose items have different types |
| 19:32:41 | <jade[m]> | they are statically sized and also every element is uniquely typed |
| 19:33:01 | <Joao003> | Ok, pairs of pairs of pairs of pairs... |
| 19:33:12 | <jade[m]> | jade[m]: this suspicious is growing ever stronger |
| 19:33:13 | <mauke> | jade[m]: fix MkVoid == undefined |
| 19:33:17 | <geekosaur> | some of the other haskell-like languages do that |
| 19:33:22 | <jade[m]> | s/suspicious/suspicion/, s/is// |
| 19:35:03 | <monochrom> | I prefer "newtype D = MkD (D -> D)" :) |
| 19:35:05 | <Joao003> | Wait... Can we make a Turing-Complete language just from () and (,)? |
| 19:35:11 | <Joao003> | And functions? |
| 19:35:37 | <jade[m]> | the lambda calculus is turning complete |
| 19:36:18 | <Joao003> | How many types can we represent just using () and (,)? |
| 19:36:41 | <jade[m]> | infinitely many, given an infinite amount of input types |
| 19:36:57 | <Joao003> | True is ((),()) and False is ((),((),())) |
| 19:37:03 | <geekosaur> | the original turing tarpit 🙃 |
| 19:37:08 | <jade[m]> | what are you doing |
| 19:37:11 | <jade[m]> | oh, I see |
| 19:37:28 | <jade[m]> | I don't get what you are doing |
| 19:37:30 | <Joao003> | Trying to make functioning types from only () and (,) |
| 19:37:46 | <jade[m]> | but why |
| 19:37:52 | <Joao003> | For fun :D |
| 19:37:52 | <eldritchcookie[m> | True isn't a type |
| 19:37:58 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 19:38:14 | <Joao003> | eldritchcookie[m: Bool is, that's why I made True AND False |
| 19:38:27 | <jade[m]> | what |
| 19:38:28 | <geekosaur> | but those are different types |
| 19:38:46 | <geekosaur> | this is not Smalltalk |
| 19:39:28 | <Joao003> | Ints could be represented by a sign then bits |
| 19:40:00 | <geekosaur> | being the pragmatic type, I have to ask: why? |
| 19:41:11 | <eldritchcookie[m> | which library and cryptographic algorithm do you guys recommend for confirming identity? |
| 19:41:20 | <geekosaur> | I'd just end up writing a preprocessor to turn something sane-ish into this language, kinda like I did with MS-BASIC back in the day |
| 19:41:24 | <jade[m]> | geekosaur: to be fair, that was probably what people asked when Alonzo Church created the lambda calculus |
| 19:41:35 | <monochrom> | ssh and openssl :) |
| 19:41:48 | → | gurkenglas joins (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) |
| 19:41:59 | <monochrom> | OK, I just mean I use them for myself. I don't know what to recommend. |
| 19:42:28 | <monochrom> | But I'm going to go out on a limb and say this unpopular opinion: cryptonite etc are fine. |
| 19:42:45 | <monochrom> | Yes yes yes vulnerable to timing attacks etc |
| 19:43:15 | <monochrom> | Will you users actually have a chance to try timing attacks? |
| 19:43:22 | <geekosaur> | tbh we don't know that it is, we just also don't know that it isn't |
| 19:43:24 | <somerandomnick[m> | Networking and Cryptographic Library by Bernstein |
| 19:43:51 | <somerandomnick[m> | marshal into C if necessary.. best crypto lib ever NaCl |
| 19:43:52 | <eldritchcookie[m> | i am more worried that i will have to change the implementation due to quantum computers in the not so distant future |
| 19:44:46 | <geekosaur> | and I've always wondered if use on a vps would be safe-ish because of herd immunity |
| 19:44:55 | <somerandomnick[m> | https://pqcrypto.org/ |
| 19:45:23 | <somerandomnick[m> | well then all discrete log based is dead |
| 19:45:46 | <geekosaur> | (that is, how does the attacker ensure that they're getting your side channels?) |
| 19:45:55 | → | barcisz joins (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) |
| 19:46:01 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 19:46:52 | <monochrom> | Yeah. It's why I think that scaremongering about timing attacks is getting old. |
| 19:46:59 | → | Guest4277 joins (~Guest42@ip5f5be7a8.dynamic.kabel-deutschland.de) |
| 19:49:21 | <monochrom> | Well I guess I should be grateful for the progress implied. E.g., we no longer scaremonger about low hanging fruits like SQL injection. |
| 19:50:24 | davean | looks at monochrom and wonders if there is still remote crashes in cryptonite |
| 19:50:59 | → | nate1 joins (~nate@98.45.169.16) |
| 19:51:01 | <[exa]> | lol. |
| 19:51:42 | <monochrom> | Well if it crashes, that's a critique I can get on board. |
| 19:51:50 | <davean> | also, some of its timing attacks are REALLY easy - like its encoding being expodential in time |
| 19:52:12 | <monochrom> | OK fair if it's that bad. |
| 19:52:34 | <davean> | Not sure how you'd exploit that one mind you since thats the base64 IIRC |
| 19:52:41 | <davean> | but like, we're talking REALLY BAD |
| 19:53:00 | <davean> | not like as bad as you tihnk code might be, but like worse than you thought someone could write that code |
| 19:53:43 | <davean> | yandere: Its the base64 in memory, right? |
| 19:55:44 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
| 19:55:46 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 19:57:47 | → | Sciencentistguy0 joins (~sciencent@hacksoc/ordinary-member) |
| 19:58:26 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) |
| 20:00:01 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 276 seconds) |
| 20:00:01 | Sciencentistguy0 | is now known as Sciencentistguy |
| 20:04:40 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-9891-d6f4-c1fa-3e8e.rev.sfr.net) (Remote host closed the connection) |
| 20:08:10 | → | alexherbo2 joins (~alexherbo@211.190.65.81.rev.sfr.net) |
| 20:08:45 | × | alexherbo2 quits (~alexherbo@211.190.65.81.rev.sfr.net) (Remote host closed the connection) |
| 20:08:50 | → | jpds1 joins (~jpds@gateway/tor-sasl/jpds) |
| 20:08:56 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 20:09:04 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-85e1-23ae-ea70-6ae4.rev.sfr.net) |
| 20:13:45 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-85e1-23ae-ea70-6ae4.rev.sfr.net) (Remote host closed the connection) |
| 20:14:07 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-85e1-23ae-ea70-6ae4.rev.sfr.net) |
| 20:19:14 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
| 20:20:18 | × | vgtw quits (~vgtw@user/vgtw) (Quit: ZNC - https://znc.in) |
| 20:23:11 | × | alexherbo2 quits (~alexherbo@2a02-842a-8180-4601-85e1-23ae-ea70-6ae4.rev.sfr.net) (Remote host closed the connection) |
| 20:26:20 | <yandere> | I don't even benchmark against vincent's base64 anymore because i couldn't see the pixels for the benchmarks of the other b64 libraries |
| 20:26:27 | <yandere> | or any of his stuff, really |
| 20:27:06 | <yandere> | I'm begging the community to please rewrite most of his libraries |
| 20:27:58 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 20:28:20 | <somerandomnick[m> | is that the guy who wrote basement |
| 20:28:31 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 20:32:03 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 20:34:47 | jpds1 | is now known as jpds |
| 20:37:05 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
| 20:38:34 | → | Bocaneri joins (~sauvin@user/Sauvin) |
| 20:38:46 | → | zeenk joins (~zeenk@2a02:2f04:a20f:5200::7fe) |
| 20:38:58 | Bocaneri | is now known as Guest4154 |
| 20:39:36 | <davean> | yandere: may favorite part is when someone accesses primitives explicitely marked as unsafe and doesn't follow the invariants! |
| 20:40:45 | × | Guest8107 quits (~sauvin@user/Sauvin) (Ping timeout: 240 seconds) |
| 20:41:36 | <davean> | On remote data! |
| 20:45:23 | <somerandomnick[m> | no. the type system was supposed to save me. if your choice is to rewrite cryptographic code in haskell, then why not introduce smth like a SafeInt where comparison, addition, etc. are all constant time |
| 20:45:27 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 20:46:17 | <davean> | somerandomnick[m: Huh? How does that apply? Who said we didn't already have that? |
| 20:46:33 | <somerandomnick[m> | OR marshal into C then you get bug fixes from "upstream" |
| 20:47:56 | <somerandomnick[m> | SafeInt exists? |
| 20:48:43 | <davean> | Well the properties you described describe Int |
| 20:49:50 | <somerandomnick[m> | oh snap |
| 20:49:50 | → | heraldo joins (~heraldo@user/heraldo) |
| 20:50:06 | <somerandomnick[m> | Int in GHC is timing-resistant? |
| 20:50:18 | <davean> | Inherently ... |
| 20:50:33 | <jade[m]> | isn't it in all languages? |
| 20:50:34 | <davean> | as are Int32, Int64, etc for the obvious reasons |
| 20:50:35 | → | rekahsoft joins (~rekahsoft@bras-base-orllon1122w-grc-04-174-88-193-177.dsl.bell.ca) |
| 20:50:48 | <davean> | jade[m]: Almost. Some don't HAVE an "Int" exactly, like python but almost all |
| 20:50:56 | × | elkcl quits (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Remote host closed the connection) |
| 20:50:58 | → | jludwig joins (~justin@li657-110.members.linode.com) |
| 20:51:05 | <jade[m]> | I mean they all use the same mechanism basically |
| 20:51:10 | <davean> | exactly |
| 20:51:16 | <jean-paul[m]> | IntX being constant time doesn't magically save you. |
| 20:51:16 | <somerandomnick[m> | is it because compairing two machine words in some CPU is constant? |
| 20:51:18 | <jade[m]> | behind the scenes, in terms of cpu addition and shit |
| 20:51:30 | <davean> | Like python is an exception but there are only a few exceptions - JS is also an exception |
| 20:51:31 | → | elkcl joins (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) |
| 20:51:33 | Guest4154 | is now known as Sauvin |
| 20:51:36 | <somerandomnick[m> | because I dont expect addition in any CPU to be constant time |
| 20:51:44 | <davean> | somerandomnick[m: It absolutely is |
| 20:51:45 | <geekosaur> | jade[m], you haven't seen PHP, have you? |
| 20:51:48 | <somerandomnick[m> | but that is also a cool idea |
| 20:52:02 | <somerandomnick[m> | davean: I think we disagree here |
| 20:52:07 | <davean> | somerandomnick[m: Infact, it so much is that a lot of CPUs run their addition at 2x clock speed |
| 20:52:23 | <jade[m]> | geekosaur: luckily not, I fear I'm too young for that |
| 20:52:28 | <davean> | No, Int addition on a CPU defiantely is fixed time |
| 20:52:34 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 20:52:41 | <geekosaur> | and has been since early CPUs |
| 20:52:50 | <geekosaur> | unless you count very early bit-slice cpus |
| 20:52:54 | <davean> | You would have to do a LOT of work for it not to be |
| 20:52:58 | <jean-paul[m]> | Your application logic on top of Int addition to handle overflow is what's not constant time. |
| 20:53:16 | <jean-paul[m]> | Your naive ByteString comparisons are what's not constant time. |
| 20:53:31 | <jade[m]> | davean: for the same sized integers, right? it'll always be an and with a carry bit xor |
| 20:53:39 | <jean-paul[m]> | All of your early-terminating-depending-on-input algorithms are what's not constant time. |
| 20:53:57 | <davean> | jean-paul[m]: exactly. |
| 20:54:09 | <davean> | Just your standard triangle cascade |
| 20:54:45 | <davean> | JS isn't constant time because it uses Double, Double is VERY different |
| 20:55:08 | <davean> | Python isn't because A) it does a lot of sharing tricks, B) it falls through to an Interger (IIRC) |
| 20:55:15 | <jade[m]> | IEEE754 :3 |
| 20:55:48 | <davean> | These are the basics though |
| 20:59:58 | × | elkcl quits (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) (Remote host closed the connection) |
| 21:01:03 | × | kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux) |
| 21:01:07 | × | mei quits (~mei@user/mei) (Ping timeout: 276 seconds) |
| 21:01:23 | → | kimiamania joins (~65804703@user/kimiamania) |
| 21:02:06 | <somerandomnick[m> | davean: I found this interesting post (yes I googled our disagreement) |
| 21:02:09 | <somerandomnick[m> | https://lwn.net/ml/linux-kernel/20230125012801.362496-1-ebiggers@kernel.org/ |
| 21:02:16 | <somerandomnick[m> | he claims: |
| 21:02:23 | <somerandomnick[m> | According to documentation that Intel published recently [1], Intel CPUs... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/828995dd0c84901bef1f0a9f23e370e1679c65e3>) |
| 21:03:15 | <geekosaur> | bleh. I recall hearing about that |
| 21:03:26 | → | elkcl joins (~elkcl@broadband-37-110-27-252.ip.moscow.rt.ru) |
| 21:03:34 | <geekosaur> | I'm not sure you can do anything with it without full details of the microarchitecture though |
| 21:03:49 | <geekosaur> | which Intel protects heavily, it's trade secret if nothing else |
| 21:04:09 | × | jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in) |
| 21:13:57 | <somerandomnick[m> | you could run more additions. on pseudo random numbers. The Num instance of SafeInt would run those under the hood. then it is more noisy |
| 21:14:58 | <somerandomnick[m> | some numbers may be more noisy then others.. |
| 21:17:52 | × | bontaq quits (~user@ool-45779b84.dyn.optonline.net) (Remote host closed the connection) |
| 21:22:45 | × | barcisz quits (~barcisz@79.191.75.215.ipv4.supernova.orange.pl) (Quit: Connection closed) |
| 21:26:44 | → | mei joins (~mei@user/mei) |
| 21:29:20 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds) |
| 21:29:50 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 21:30:35 | × | michalz quits (~michalz@185.246.207.222) (Remote host closed the connection) |
| 21:30:40 | × | mncheckm quits (~mncheck@193.224.205.254) (Ping timeout: 248 seconds) |
| 21:43:52 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 21:45:59 | × | Joao003 quits (~Joao003@2804:840:8309:0:60f9:6293:872c:15aa) (Quit: Leaving) |
| 21:47:36 | <somerandomnick[m> | stupid idea, I shall find the time safest instructions in arm64 and amd64 and build Num and Cmp operations on top of those primitives. Or fail loudly |
| 21:51:22 | <geekosaur> | which you have to do on x86_64 vfor multiple intel and amd chipsets, and on arm for a shitload of chipsets |
| 21:52:54 | <somerandomnick[m> | i forgor 💀 |
| 21:53:22 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Quit: Lost terminal) |
| 22:05:44 | <hippoid> | hello, i've got this haskell/turtle/stack script i'm running in a nix shell: https://termbin.com/vywk. i've don't `chmod u+x` on it, and every time i run it i get this warning: https://termbin.com/nkmw |
| 22:06:13 | <hippoid> | about a missed-extra-shared-lib. should this warning concern me? |
| 22:06:27 | <hippoid> | and how I can turn it off? |
| 22:10:45 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 22:13:07 | → | mei joins (~mei@user/mei) |
| 22:15:29 | → | nattiestnate joins (~nate@202.138.250.55) |
| 22:16:48 | × | nattiestnate quits (~nate@202.138.250.55) (Client Quit) |
| 22:17:10 | → | nattiestnate joins (~nate@202.138.250.62) |
| 22:17:40 | × | merijn quits (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 22:19:38 | × | rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-04-174-88-193-177.dsl.bell.ca) (Ping timeout: 246 seconds) |
| 22:22:25 | → | talismanick joins (~user@campus-042-001.ucdavis.edu) |
| 22:23:08 | × | mei quits (~mei@user/mei) (Ping timeout: 246 seconds) |
| 22:26:33 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 22:31:32 | × | acidjnk_new quits (~acidjnk@p200300d6e715c468b4bf77e5a0595f20.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 22:36:55 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 22:37:02 | × | vulpine quits (xfnw@tilde.team) (Quit: Connection reset by purr) |
| 22:38:55 | → | vulpine joins (xfnw@tilde.team) |
| 22:40:41 | → | mei joins (~mei@user/mei) |
| 22:40:45 | × | gurkenglas quits (~gurkengla@dynamic-046-114-180-206.46.114.pool.telefonica.de) (Ping timeout: 240 seconds) |
| 22:42:56 | → | gurkenglas joins (~gurkengla@dynamic-089-204-130-021.89.204.130.pool.telefonica.de) |
| 22:43:33 | <sm> | search the net for that message maybe |
| 22:44:42 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 22:52:44 | → | Me-me joins (~Me-me@user/me-me) |
| 22:58:37 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:00:22 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
| 23:09:50 | → | vgtw joins (~vgtw@user/vgtw) |
| 23:19:32 | × | Guest4277 quits (~Guest42@ip5f5be7a8.dynamic.kabel-deutschland.de) (Quit: Connection closed) |
| 23:25:59 | × | heraldo quits (~heraldo@user/heraldo) (Quit: heraldo) |
| 23:27:35 | → | merijn joins (~merijn@c-001-001-006.client.esciencecenter.eduvpn.nl) |
| 23:27:40 | × | kritzefitz quits (~kritzefit@debian/kritzefitz) (Ping timeout: 260 seconds) |
| 23:29:40 | → | kritzefitz joins (~kritzefit@debian/kritzefitz) |
| 23:33:34 | → | dsrt^ joins (~dsrt@c-76-105-96-13.hsd1.ga.comcast.net) |
| 23:39:09 | → | fun-safe-math joins (~fun-safe-@c-24-22-94-205.hsd1.or.comcast.net) |
| 23:40:15 | → | mauke_ joins (~mauke@user/mauke) |
| 23:41:45 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 240 seconds) |
| 23:41:45 | mauke_ | is now known as mauke |
| 23:42:59 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:52:29 | → | nate1 joins (~nate@98.45.169.16) |
| 23:57:17 | × | nate1 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
All times are in UTC on 2023-04-28.