2024-08-19 00:03:12 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-08-19 00:07:04 +0200 | troojg | (~troojg@user/troojg) |
2024-08-19 00:15:18 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds) |
2024-08-19 00:16:20 +0200 | mikess | (~mikess@user/mikess) () |
2024-08-19 00:25:29 +0200 | euleritian | (~euleritia@dynamic-176-006-139-095.176.6.pool.telefonica.de) |
2024-08-19 00:34:39 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
2024-08-19 00:38:40 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2024-08-19 00:38:57 +0200 | califax | (~califax@user/califx) |
2024-08-19 00:39:58 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2024-08-19 00:43:00 +0200 | EvanR | (~EvanR@user/evanr) (Quit: Leaving) |
2024-08-19 00:56:02 +0200 | bilegeek | (~bilegeek@2600:1008:b095:ace0:e956:a894:c484:bbc7) |
2024-08-19 00:56:52 +0200 | ephilalethes | (~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving) |
2024-08-19 00:58:17 +0200 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2024-08-19 01:02:41 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 01:02:41 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 01:02:41 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 01:08:54 +0200 | EvanR | (~EvanR@user/evanr) |
2024-08-19 01:09:15 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 276 seconds) |
2024-08-19 01:10:06 +0200 | ZharMeny | (~user@user/ZharMeny) (Ping timeout: 258 seconds) |
2024-08-19 01:11:25 +0200 | ZharMeny | (~user@user/ZharMeny) |
2024-08-19 01:11:31 +0200 | machinedgod | (~machinedg@d50-99-47-73.abhsia.telus.net) |
2024-08-19 01:12:47 +0200 | euleritian | (~euleritia@dynamic-176-006-139-095.176.6.pool.telefonica.de) (Ping timeout: 258 seconds) |
2024-08-19 01:16:25 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 01:16:25 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 01:16:25 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 01:27:27 +0200 | RedFlamingos | (~RedFlamin@user/RedFlamingos) (Remote host closed the connection) |
2024-08-19 01:27:52 +0200 | naxx | (~brandt@177.191-pool-nas4-sc.sccoast.net) (Quit: WeeChat 4.4.0) |
2024-08-19 01:33:33 +0200 | troojg | (~troojg@user/troojg) (Remote host closed the connection) |
2024-08-19 01:43:19 +0200 | Ranhir | (~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/) |
2024-08-19 01:48:54 +0200 | xff0x | (~xff0x@2405:6580:b080:900:f7ea:ebc:48e7:5791) (Ping timeout: 260 seconds) |
2024-08-19 01:49:19 +0200 | ZharMeny | (~user@user/ZharMeny) (Ping timeout: 260 seconds) |
2024-08-19 01:51:25 +0200 | euleritian | (~euleritia@dynamic-176-000-155-211.176.0.pool.telefonica.de) |
2024-08-19 01:52:55 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 264 seconds) |
2024-08-19 01:53:42 +0200 | Ranhir | (~Ranhir@157.97.53.139) |
2024-08-19 01:55:55 +0200 | acidjnk | (~acidjnk@p200300d6e72cfb28316c3495bdea7799.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
2024-08-19 01:56:43 +0200 | spew | (~spew@201.141.102.132) (Remote host closed the connection) |
2024-08-19 01:57:53 +0200 | euleritian | (~euleritia@dynamic-176-000-155-211.176.0.pool.telefonica.de) (Ping timeout: 255 seconds) |
2024-08-19 01:58:18 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 01:58:21 +0200 | euleritian | (~euleritia@dynamic-176-004-132-012.176.4.pool.telefonica.de) |
2024-08-19 01:59:48 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-08-19 02:04:16 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 02:04:16 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 02:04:16 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 02:06:05 +0200 | tt12310978324 | (~tt1231@syn-075-185-104-199.res.spectrum.com) (Quit: The Lounge - https://thelounge.chat) |
2024-08-19 02:07:03 +0200 | tt123109783243 | (~tt1231@syn-075-185-104-199.res.spectrum.com) |
2024-08-19 02:07:12 +0200 | tt123109783243 | (~tt1231@syn-075-185-104-199.res.spectrum.com) (Read error: Connection reset by peer) |
2024-08-19 02:08:11 +0200 | tt123109783243 | (~tt1231@syn-075-185-104-199.res.spectrum.com) |
2024-08-19 02:10:24 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: Reconnecting) |
2024-08-19 02:10:30 +0200 | wroathe_ | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 02:10:38 +0200 | wroathe_ | (~wroathe@mobile-166-175-56-161.mycingular.net) () |
2024-08-19 02:14:05 +0200 | euleritian | (~euleritia@dynamic-176-004-132-012.176.4.pool.telefonica.de) (Ping timeout: 255 seconds) |
2024-08-19 02:15:49 +0200 | tt123109783243 | (~tt1231@syn-075-185-104-199.res.spectrum.com) (Ping timeout: 248 seconds) |
2024-08-19 02:15:59 +0200 | euleritian | (~euleritia@dynamic-176-001-130-229.176.1.pool.telefonica.de) |
2024-08-19 02:20:05 +0200 | euleritian | (~euleritia@dynamic-176-001-130-229.176.1.pool.telefonica.de) (Ping timeout: 248 seconds) |
2024-08-19 02:20:33 +0200 | euleritian | (~euleritia@dynamic-176-004-137-004.176.4.pool.telefonica.de) |
2024-08-19 02:21:30 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
2024-08-19 02:25:49 +0200 | paddymahoney | (~paddymaho@pool-99-250-30-88.cpe.net.cable.rogers.com) (Ping timeout: 252 seconds) |
2024-08-19 02:27:33 +0200 | euleritian | (~euleritia@dynamic-176-004-137-004.176.4.pool.telefonica.de) (Ping timeout: 248 seconds) |
2024-08-19 02:27:57 +0200 | euleritian | (~euleritia@dynamic-176-007-157-135.176.7.pool.telefonica.de) |
2024-08-19 02:30:45 +0200 | <haskellbridge> | <eldritchcookie> how do i get retrie to compile in ghc 9.10? there is a HLS release that supports 9.10 but to do that they must have compile HLS which needs retrie |
2024-08-19 02:34:33 +0200 | euleritian | (~euleritia@dynamic-176-007-157-135.176.7.pool.telefonica.de) (Ping timeout: 252 seconds) |
2024-08-19 02:34:43 +0200 | euleritian | (~euleritia@dynamic-176-007-194-036.176.7.pool.telefonica.de) |
2024-08-19 02:43:43 +0200 | <geekosaur> | retrie is only required if the retrie plugin is; but that is currently disabled on 9.10 (https://github.com/haskell/haskell-language-server/blob/master/haskell-language-server.cabal#L628) |
2024-08-19 02:45:29 +0200 | <Axman6> | ghcup has hls available for 9.10 too |
2024-08-19 02:45:43 +0200 | <geekosaur> | yes, but it doesn't have the retrie plugin in it |
2024-08-19 02:46:09 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 02:46:09 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 02:46:09 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 02:47:18 +0200 | <Axman6> | sure, I was just questioning the "which needs retrie" |
2024-08-19 02:48:48 +0200 | <haskellbridge> | <eldritchcookie> huh, for some reason i thought the best way to determine if it was from a plugin was to read the .cabal file and misread the section it belonged to. |
2024-08-19 02:50:50 +0200 | bravespear|2 | (~Ranhir@157.97.53.139) |
2024-08-19 02:53:12 +0200 | <monochrom> | Haha "best way ... is to misread ..." |
2024-08-19 02:55:25 +0200 | Feuermagier | (~Feuermagi@user/feuermagier) |
2024-08-19 03:01:11 +0200 | <geekosaur> | true if you're after amusement 😛 |
2024-08-19 03:02:39 +0200 | Natch | (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection) |
2024-08-19 03:05:01 +0200 | xff0x | (~xff0x@om126236143244.32.openmobile.ne.jp) |
2024-08-19 03:08:20 +0200 | bravespear|3 | (~Ranhir@157.97.53.139) |
2024-08-19 03:11:50 +0200 | Natch | (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
2024-08-19 03:14:09 +0200 | euleritian | (~euleritia@dynamic-176-007-194-036.176.7.pool.telefonica.de) (Ping timeout: 252 seconds) |
2024-08-19 03:15:03 +0200 | euleritian | (~euleritia@176.2.65.94) |
2024-08-19 03:15:48 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 03:22:12 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 03:22:12 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 03:22:12 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 03:23:36 +0200 | wroathe | (~wroathe@user/wroathe) (Client Quit) |
2024-08-19 03:29:53 +0200 | euleritian | (~euleritia@176.2.65.94) (Ping timeout: 248 seconds) |
2024-08-19 03:30:48 +0200 | euleritian | (~euleritia@dynamic-176-007-194-180.176.7.pool.telefonica.de) |
2024-08-19 03:32:26 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 272 seconds) |
2024-08-19 03:43:56 +0200 | euleritian | (~euleritia@dynamic-176-007-194-180.176.7.pool.telefonica.de) (Ping timeout: 252 seconds) |
2024-08-19 03:45:10 +0200 | euleritian | (~euleritia@dynamic-176-002-076-203.176.2.pool.telefonica.de) |
2024-08-19 03:49:11 +0200 | tomku | (~tomku@user/tomku) |
2024-08-19 03:58:10 +0200 | euleritian | (~euleritia@dynamic-176-002-076-203.176.2.pool.telefonica.de) (Ping timeout: 248 seconds) |
2024-08-19 03:58:53 +0200 | euleritian | (~euleritia@dynamic-176-001-219-094.176.1.pool.telefonica.de) |
2024-08-19 04:02:31 +0200 | brandt | (~brandt@177.191-pool-nas4-sc.sccoast.net) |
2024-08-19 04:02:46 +0200 | dyniec | (~dyniec@dybiec.info) (Quit: WeeChat 4.2.2) |
2024-08-19 04:03:21 +0200 | euleritian | (~euleritia@dynamic-176-001-219-094.176.1.pool.telefonica.de) (Ping timeout: 252 seconds) |
2024-08-19 04:04:04 +0200 | euleritian | (~euleritia@176.2.74.33) |
2024-08-19 04:08:11 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 04:18:04 +0200 | td_ | (~td@i53870932.versanet.de) (Ping timeout: 260 seconds) |
2024-08-19 04:19:45 +0200 | td_ | (~td@83.135.9.9) |
2024-08-19 04:32:57 +0200 | liamzy__ | Inst |
2024-08-19 04:38:11 +0200 | xff0x | (~xff0x@om126236143244.32.openmobile.ne.jp) (Read error: Connection reset by peer) |
2024-08-19 04:42:25 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 04:42:25 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 04:42:25 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 04:42:44 +0200 | spew | (~spew@201.141.102.132) |
2024-08-19 04:42:57 +0200 | euleritian | (~euleritia@176.2.74.33) (Ping timeout: 252 seconds) |
2024-08-19 04:43:32 +0200 | euleritian | (~euleritia@dynamic-176-003-000-241.176.3.pool.telefonica.de) |
2024-08-19 04:43:58 +0200 | tcard_ | (~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a) |
2024-08-19 04:44:19 +0200 | xff0x | (~xff0x@om126236143244.32.openmobile.ne.jp) |
2024-08-19 04:46:38 +0200 | tcard__ | (~tcard@p3696129-ipxg22301hodogaya.kanagawa.ocn.ne.jp) (Ping timeout: 255 seconds) |
2024-08-19 04:58:31 +0200 | slack1256 | (~slack1256@2803:c600:5111:8029:8ec6:4309:d4fa:d427) |
2024-08-19 05:01:18 +0200 | xff0x | (~xff0x@om126236143244.32.openmobile.ne.jp) (Read error: Connection reset by peer) |
2024-08-19 05:01:44 +0200 | euleritian | (~euleritia@dynamic-176-003-000-241.176.3.pool.telefonica.de) (Ping timeout: 272 seconds) |
2024-08-19 05:03:20 +0200 | <slack1256> | [1/3] Reading about the copying GC and the nonmonving GC, both seem to stop the world (STW), is just that the nonmoving GC only STW for the marking phase. The pause length is proportional to the live memory on both cases.[ |
2024-08-19 05:03:28 +0200 | euleritian | (~euleritia@dynamic-176-003-006-020.176.3.pool.telefonica.de) |
2024-08-19 05:03:30 +0200 | <slack1256> | [2/3] So my question is about what you should do if you *want* (to that you should) to hold 10GBs of linked lists on Gen 1 of the GC. Is the only only store them on compact regions? |
2024-08-19 05:03:44 +0200 | <slack1256> | [3/3] It seems other GC on other languages ecosystems, the STW is proportional to the garbage data instead of the live data. So the previous use case is supported out of the box. The generational hypothesis is even more true on functional languages, so I guess the tradeoff make sense. I just want to understand what is the expected action to the programmer. |
2024-08-19 05:04:11 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 05:04:14 +0200 | <slack1256> | (not* that you should) |
2024-08-19 05:04:22 +0200 | bilegeek | (~bilegeek@2600:1008:b095:ace0:e956:a894:c484:bbc7) (Quit: Leaving) |
2024-08-19 05:08:15 +0200 | spew | (~spew@201.141.102.132) (Remote host closed the connection) |
2024-08-19 05:08:24 +0200 | spew | (~spew@201.141.102.132) |
2024-08-19 05:10:04 +0200 | euleritian | (~euleritia@dynamic-176-003-006-020.176.3.pool.telefonica.de) (Ping timeout: 258 seconds) |
2024-08-19 05:10:11 +0200 | euleritian | (~euleritia@dynamic-176-006-135-085.176.6.pool.telefonica.de) |
2024-08-19 05:10:27 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 258 seconds) |
2024-08-19 05:16:41 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine) |
2024-08-19 05:17:02 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2024-08-19 05:26:54 +0200 | machinedgod | (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 260 seconds) |
2024-08-19 05:27:21 +0200 | <slack1256> | I guess the answer is really to put *more* generations via -G3 etc |
2024-08-19 05:27:42 +0200 | euleritian | (~euleritia@dynamic-176-006-135-085.176.6.pool.telefonica.de) (Ping timeout: 258 seconds) |
2024-08-19 05:27:56 +0200 | euleritian | (~euleritia@dynamic-176-001-218-057.176.1.pool.telefonica.de) |
2024-08-19 05:29:37 +0200 | rini | (~rini@user/rini) (Remote host closed the connection) |
2024-08-19 05:32:05 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 248 seconds) |
2024-08-19 05:32:19 +0200 | tomku | (~tomku@user/tomku) |
2024-08-19 05:32:29 +0200 | spew | (~spew@201.141.102.132) (Remote host closed the connection) |
2024-08-19 05:32:57 +0200 | rini | (~rini@user/rini) |
2024-08-19 05:35:22 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2024-08-19 05:40:53 +0200 | euleritian | (~euleritia@dynamic-176-001-218-057.176.1.pool.telefonica.de) (Ping timeout: 252 seconds) |
2024-08-19 05:48:16 +0200 | aforemny | (~aforemny@2001:9e8:6cd5:1b00:72fb:902d:5353:4bcd) |
2024-08-19 05:49:33 +0200 | aforemny_ | (~aforemny@2001:9e8:6cf4:c700:587f:d6ea:1b3:5684) (Ping timeout: 258 seconds) |
2024-08-19 05:54:05 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 05:56:36 +0200 | euleritian | (~euleritia@dynamic-176-002-076-000.176.2.pool.telefonica.de) |
2024-08-19 06:03:14 +0200 | euleritian | (~euleritia@dynamic-176-002-076-000.176.2.pool.telefonica.de) (Ping timeout: 260 seconds) |
2024-08-19 06:03:49 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) |
2024-08-19 06:04:07 +0200 | _________ | (~nobody@user/noodly) (Ping timeout: 258 seconds) |
2024-08-19 06:12:06 +0200 | _________ | (~nobody@user/noodly) |
2024-08-19 06:13:06 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 06:13:24 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 06:17:07 +0200 | xff0x | (~xff0x@2405:6580:b080:900:e0e6:dea5:baf7:2386) |
2024-08-19 06:19:50 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-08-19 06:23:40 +0200 | spew | (~spew@201.141.102.132) |
2024-08-19 06:27:22 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-08-19 06:28:25 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-08-19 06:30:49 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-08-19 06:30:58 +0200 | euleritian | (~euleritia@77.22.252.56) |
2024-08-19 06:38:04 +0200 | euleritian | (~euleritia@77.22.252.56) (Ping timeout: 260 seconds) |
2024-08-19 06:39:02 +0200 | slack1256 | (~slack1256@2803:c600:5111:8029:8ec6:4309:d4fa:d427) (Remote host closed the connection) |
2024-08-19 06:39:13 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) |
2024-08-19 06:44:37 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
2024-08-19 06:53:50 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 272 seconds) |
2024-08-19 06:56:30 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 07:03:26 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds) |
2024-08-19 07:03:57 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 07:04:15 +0200 | euleritian | (~euleritia@77.22.252.56) |
2024-08-19 07:04:53 +0200 | michalz | (~michalz@185.246.207.193) |
2024-08-19 07:06:38 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 07:11:35 +0200 | euleritian | (~euleritia@77.22.252.56) (Read error: Connection reset by peer) |
2024-08-19 07:12:39 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 07:12:41 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Remote host closed the connection) |
2024-08-19 07:13:23 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 07:14:36 +0200 | Square3 | (~Square4@user/square) |
2024-08-19 07:15:40 +0200 | dolio | (~dolio@130.44.140.168) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-08-19 07:17:37 +0200 | Square | (~Square@user/square) (Ping timeout: 248 seconds) |
2024-08-19 07:17:42 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2024-08-19 07:17:50 +0200 | Square3 | Square |
2024-08-19 07:20:02 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 07:21:24 +0200 | dolio | (~dolio@130.44.140.168) |
2024-08-19 07:24:52 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
2024-08-19 07:25:00 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) |
2024-08-19 07:29:10 +0200 | spew | (~spew@201.141.102.132) (Remote host closed the connection) |
2024-08-19 07:30:04 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2024-08-19 07:31:33 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
2024-08-19 07:33:07 +0200 | jinsun | (~jinsun@user/jinsun) (Ping timeout: 264 seconds) |
2024-08-19 07:34:48 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) |
2024-08-19 07:37:31 +0200 | brandt | (~brandt@177.191-pool-nas4-sc.sccoast.net) (Quit: WeeChat 4.4.0) |
2024-08-19 08:16:41 +0200 | ubert | (~Thunderbi@91.141.68.38.wireless.dyn.drei.com) |
2024-08-19 08:34:21 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 08:51:38 +0200 | terrorjack4 | (~terrorjac@static.163.82.63.178.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat) |
2024-08-19 08:54:00 +0200 | terrorjack4 | (~terrorjac@static.163.82.63.178.clients.your-server.de) |
2024-08-19 09:04:04 +0200 | <c_wraith> | why would you want to keep them in gen 1 in the first place? |
2024-08-19 09:04:42 +0200 | <c_wraith> | (probably a few hours too late to get a reasonable answer) |
2024-08-19 09:08:36 +0200 | acidjnk | (~acidjnk@p200300d6e72cfb5259affcc514115865.dip0.t-ipconnect.de) |
2024-08-19 09:12:04 +0200 | troydm | (~troydm@user/troydm) (Ping timeout: 260 seconds) |
2024-08-19 09:26:23 +0200 | <[exa]> | Hi all, explorative question: so I've got this API client which is assembling a large query result from multiple small queries, where many can go in parallel (but the parallelism is better controlled a bit to avoid going complete BFS and wasting all memory for subresults that are not required yet). Is there some existing good way/monad/library to implement this conveniently? |
2024-08-19 09:26:53 +0200 | <[exa]> | Normally I'd go plain old IO threads with some kind of semaphore to keep the parallel request count at bay, but that seems crude |
2024-08-19 09:28:30 +0200 | CiaoSen | (~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) |
2024-08-19 09:29:05 +0200 | <[exa]> | for bonus features it would be nice to have some possibility to execute stuff speculatively, such as "let's gather some stats before deciding where to go" or "if these requests fail we can just bail out, the other branch will succeed" |
2024-08-19 09:32:38 +0200 | <jackdk> | haxl springs to mind, not that I've used it: https://engineering.fb.com/2014/06/10/web/open-sourcing-haxl-a-library-for-haskell/ . But I think that restricts itself to an Applicative |
2024-08-19 09:34:36 +0200 | euleritian | (~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 09:34:53 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 09:36:30 +0200 | <Inst> | yup, memoize is broken on 9.10.x |
2024-08-19 09:47:22 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) |
2024-08-19 09:52:20 +0200 | kuribas | (~user@ptr-17d51endnrlvux1kiym.18120a2.ip6.access.telenet.be) |
2024-08-19 09:57:27 +0200 | machinedgod | (~machinedg@d50-99-47-73.abhsia.telus.net) |
2024-08-19 10:02:11 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2024-08-19 10:05:13 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-08-19 10:15:17 +0200 | __monty__ | (~toonn@user/toonn) |
2024-08-19 10:15:36 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
2024-08-19 10:17:54 +0200 | gehmehgeh | (~user@user/gehmehgeh) |
2024-08-19 10:21:26 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
2024-08-19 10:30:03 +0200 | ThePenguin | (~ThePengui@cust-95-80-24-166.csbnet.se) (Remote host closed the connection) |
2024-08-19 10:30:38 +0200 | ThePenguin | (~ThePengui@cust-95-80-24-166.csbnet.se) |
2024-08-19 10:32:31 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2024-08-19 10:33:50 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) |
2024-08-19 10:35:30 +0200 | ubert | (~Thunderbi@91.141.68.38.wireless.dyn.drei.com) (Ping timeout: 248 seconds) |
2024-08-19 10:37:29 +0200 | gehmehgeh | gmg |
2024-08-19 10:42:15 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) |
2024-08-19 10:45:56 +0200 | murgeljm | (~murgeljm@APN-122-12-44-gprs.simobil.net) |
2024-08-19 10:46:12 +0200 | murgeljm | (~murgeljm@APN-122-12-44-gprs.simobil.net) (Read error: Connection reset by peer) |
2024-08-19 10:55:06 +0200 | <ncf> | are you sure about that |
2024-08-19 11:21:53 +0200 | CiaoSen | (~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) (Ping timeout: 252 seconds) |
2024-08-19 11:22:22 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
2024-08-19 11:23:30 +0200 | euphores | (~SASL_euph@user/euphores) (Quit: Leaving.) |
2024-08-19 11:29:04 +0200 | euphores | (~SASL_euph@user/euphores) |
2024-08-19 11:35:02 +0200 | Digitteknohippie | (~user@user/digit) |
2024-08-19 11:35:45 +0200 | Digit | (~user@user/digit) (Ping timeout: 252 seconds) |
2024-08-19 11:37:51 +0200 | <Inst> | ncf: is it broken specifically if you use a lib + ghc toolchain? |
2024-08-19 11:37:55 +0200 | <Inst> | in 9.4 it works |
2024-08-19 11:38:04 +0200 | <Inst> | lib + ghci toolchain, rather, it refuses to isntall under cabal install |
2024-08-19 11:38:09 +0200 | <Inst> | let me try to do it with a cabal script |
2024-08-19 11:38:28 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Quit: ash3en) |
2024-08-19 11:39:05 +0200 | <ncf> | oh i thought this was still about recursion, not a literal build failure |
2024-08-19 11:39:42 +0200 | <Inst> | thanks you guys for being so helpful |
2024-08-19 11:41:03 +0200 | Digitteknohippie | Digit |
2024-08-19 11:41:17 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2) |
2024-08-19 11:41:26 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 11:44:32 +0200 | <int-e> | Oh. It builds with 9.6, but not with 9.8. |
2024-08-19 11:44:45 +0200 | <int-e> | Inst: FWIW the lesson hear is that "broken" is very non-descriptive. |
2024-08-19 11:45:07 +0200 | <Inst> | thanks :) |
2024-08-19 11:45:26 +0200 | int-e | made the same assumption as ncf. |
2024-08-19 11:53:21 +0200 | ghodawalaaman | (~thelounge@user/thelounge8234) (Quit: The Lounge - https://thelounge.chat) |
2024-08-19 11:54:23 +0200 | ghodawalaaman | (~thelounge@user/thelounge8234) |
2024-08-19 11:55:10 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Ping timeout: 265 seconds) |
2024-08-19 12:09:34 +0200 | rembo10 | (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-08-19 12:10:24 +0200 | rembo10 | (~rembo10@main.remulis.com) |
2024-08-19 12:17:07 +0200 | ubert | (~Thunderbi@91.141.68.38.wireless.dyn.drei.com) |
2024-08-19 12:25:26 +0200 | doyougnu | (~doyougnu@syn-045-046-170-068.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-08-19 12:26:41 +0200 | bgamari | (~bgamari@64.223.233.64) (Quit: ZNC 1.8.2 - https://znc.in) |
2024-08-19 12:27:11 +0200 | doyougnu | (~doyougnu@syn-045-046-170-068.res.spectrum.com) |
2024-08-19 12:28:06 +0200 | bgamari | (~bgamari@64.223.233.64) |
2024-08-19 12:42:19 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) (Quit: WeeChat 4.3.5) |
2024-08-19 12:42:46 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) |
2024-08-19 12:45:20 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) (Client Quit) |
2024-08-19 12:45:36 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) |
2024-08-19 12:46:51 +0200 | <[exa]> | jackdk: haxl actually looks like quite the thing, thanks a lot |
2024-08-19 12:47:00 +0200 | <[exa]> | at wurst I'll copy from them. :) |
2024-08-19 12:49:39 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-08-19 12:50:33 +0200 | euleritian | (~euleritia@77.22.252.56) |
2024-08-19 12:51:38 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2024-08-19 12:51:55 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) |
2024-08-19 12:59:32 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 244 seconds) |
2024-08-19 13:00:07 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) () |
2024-08-19 13:05:40 +0200 | <Inst> | hmmm |
2024-08-19 13:06:02 +0200 | <Inst> | is there a way to get Haskell to compute a limit? |
2024-08-19 13:07:02 +0200 | <Inst> | these are cat theory limits, though |
2024-08-19 13:07:04 +0200 | <Inst> | https://hackage.haskell.org/package/data-category-0.11/docs/Data-Category-Limit.html |
2024-08-19 13:09:25 +0200 | <ncf> | compute? what's the input, what's the output? |
2024-08-19 13:09:46 +0200 | <Inst> | I was thinking about a bad joke regarding a certain political figure |
2024-08-19 13:10:01 +0200 | <Inst> | "x and disadvantaged minority define the new normal" |
2024-08-19 13:10:06 +0200 | <Inst> | "how do they define the new normal?" |
2024-08-19 13:10:20 +0200 | <Inst> | "by being paid 63.7% that of [insert privileged group here]" |
2024-08-19 13:12:43 +0200 | <Inst> | payOf foo = 0.637 * bar; bar = payOf bar |
2024-08-19 13:12:49 +0200 | <Inst> | that'd just be undefined in Haskell |
2024-08-19 13:15:02 +0200 | euleritian | (~euleritia@77.22.252.56) (Ping timeout: 244 seconds) |
2024-08-19 13:15:29 +0200 | euleritian | (~euleritia@dynamic-176-006-146-067.176.6.pool.telefonica.de) |
2024-08-19 13:15:38 +0200 | <Inst> | wow, lisp doesn't have macros for this either |
2024-08-19 13:16:26 +0200 | <Inst> | i guess you could define an eDSL and have limits as something that operates on the eDSL |
2024-08-19 13:17:11 +0200 | <Inst> | /s/undefined/bottom |
2024-08-19 13:17:35 +0200 | <Inst> | solved in offtopic by exa |
2024-08-19 13:19:45 +0200 | euleritian | (~euleritia@dynamic-176-006-146-067.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
2024-08-19 13:20:17 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) |
2024-08-19 13:21:09 +0200 | <[exa]> | Inst: you'd literally need the eDSL to have a different notion of the let-binding, i.e. a different `=` |
2024-08-19 13:22:00 +0200 | <[exa]> | because whatever you do the `=` is going to create the recursion bottom (unless going for absolutely insane trickery with thunk equality matching or so) |
2024-08-19 13:22:17 +0200 | <Inst> | yes since = is bound, unless you want to implement it monadically and use <- instead |
2024-08-19 13:22:42 +0200 | <[exa]> | in haskell probably best to wrap it in TH brackets, convert to an equation system, and continue as previously |
2024-08-19 13:23:06 +0200 | <[exa]> | with `<-` you might want `mdo` |
2024-08-19 13:23:13 +0200 | <[exa]> | aka MonadFix |
2024-08-19 13:23:40 +0200 | <[exa]> | reactive folks have had success there with similar loopy issues |
2024-08-19 13:28:32 +0200 | <probie> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf cos 1 |
2024-08-19 13:28:34 +0200 | <lambdabot> | 0.7390851332151607 |
2024-08-19 13:30:15 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-08-19 13:30:26 +0200 | <[exa]> | `zip <*> tail` whew nice |
2024-08-19 13:30:53 +0200 | <probie> | @quote zip`ap`tail |
2024-08-19 13:30:53 +0200 | <lambdabot> | quicksilver says: zip`ap`tail the aztec god of consecutive numbers |
2024-08-19 13:31:28 +0200 | <probie> | take 10 $ zip <*> tail $ [1..] |
2024-08-19 13:31:36 +0200 | <probie> | > take 10 $ zip <*> tail $ [1..] |
2024-08-19 13:31:37 +0200 | <lambdabot> | [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10),(10,11)] |
2024-08-19 13:32:11 +0200 | <Inst> | whoa, someone else abusing the applicative instance for (a ->) |
2024-08-19 13:32:40 +0200 | <Inst> | (i personally wish <*> abuse was considered normal) |
2024-08-19 13:33:37 +0200 | Blasius | (~Blasius@5ec169d9.skybroadband.com) (Ping timeout: 248 seconds) |
2024-08-19 13:34:09 +0200 | raym | (~ray@user/raym) (Ping timeout: 248 seconds) |
2024-08-19 13:34:16 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
2024-08-19 13:34:46 +0200 | <probie> | It's an idiom that people recognise. It's important to shuffle it around |
2024-08-19 13:36:09 +0200 | <probie> | > do{t<-tail;take 10 . (`zip` t)} $ [1..] |
2024-08-19 13:36:11 +0200 | <lambdabot> | [(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,8),(8,9),(9,10),(10,11)] |
2024-08-19 13:36:27 +0200 | <Inst> | also the code seems flawed |
2024-08-19 13:36:42 +0200 | <Inst> | let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf cos 0 |
2024-08-19 13:36:46 +0200 | <Inst> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf cos 0 |
2024-08-19 13:36:47 +0200 | <lambdabot> | 0.7390851332151607 |
2024-08-19 13:36:51 +0200 | <Inst> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf cos pi |
2024-08-19 13:36:52 +0200 | <lambdabot> | 0.7390851332151607 |
2024-08-19 13:37:18 +0200 | <Inst> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf cos undefined |
2024-08-19 13:37:18 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 252 seconds) |
2024-08-19 13:37:20 +0200 | <lambdabot> | *Exception: Prelude.undefined |
2024-08-19 13:37:30 +0200 | rosco | (~rosco@175.136.158.234) |
2024-08-19 13:37:33 +0200 | tomku | (~tomku@user/tomku) |
2024-08-19 13:39:17 +0200 | <probie> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf (\n -> (n + (fromIntegral (round n))) / 2) 0.8 |
2024-08-19 13:39:19 +0200 | <lambdabot> | 1.0 |
2024-08-19 13:39:26 +0200 | <probie> | > let limitOf = ((fst . head . dropWhile (uncurry (/=)) . (zip <*> tail)) .) . iterate in limitOf (\n -> (n + (fromIntegral (round n))) / 2) pi |
2024-08-19 13:39:27 +0200 | <lambdabot> | 3.0 |
2024-08-19 13:46:01 +0200 | raym | (~ray@user/raym) |
2024-08-19 13:49:26 +0200 | Miroboru | (~myrvoll@178-164-114.82.3p.ntebredband.no) (Quit: Lost terminal) |
2024-08-19 14:02:58 +0200 | <albet70> | fmap . fmap to unwrap nested list, more one list, more one fmap compose, is this a kind of instiition? |
2024-08-19 14:03:35 +0200 | CiaoSen | (~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) |
2024-08-19 14:06:03 +0200 | Inst | (~Inst@user/Inst) (Read error: Connection reset by peer) |
2024-08-19 14:09:23 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 14:12:23 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 14:12:41 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 14:14:25 +0200 | Inst | (~Inst@user/Inst) |
2024-08-19 14:17:11 +0200 | <ncf> | what's an instiition |
2024-08-19 14:18:57 +0200 | <albet70> | intuition |
2024-08-19 14:22:29 +0200 | <Inst> | (fmap . fmap) is a common idiom to point a function into a nested list (or, essentially, any two types that support the Functor typeclass |
2024-08-19 14:22:53 +0200 | <Inst> | foo :: IO [Int]; foo = pure [1..10] |
2024-08-19 14:23:05 +0200 | <Inst> | (fmap . fmap) (+1) foo |
2024-08-19 14:24:14 +0200 | <Inst> | (fmap f <$>) or fmap f <$> works as well, etc... |
2024-08-19 14:25:21 +0200 | <ncf> | fmap.fmap is fmap for Compose f g |
2024-08-19 14:26:07 +0200 | <ncf> | ideally you could do fmap @(\x -> IO [x]) but haskell doesn't have type-level lambdas so instead you indicate how many "layers" of type constructors you want to peel off by composing fmaps |
2024-08-19 14:30:40 +0200 | <Inst> | iirc aren't dependent types capable of injecting type-level lambdas into Haskell? |
2024-08-19 14:34:33 +0200 | cfricke | (~cfricke@user/cfricke) (Ping timeout: 245 seconds) |
2024-08-19 14:35:03 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Ping timeout: 252 seconds) |
2024-08-19 14:35:48 +0200 | <ncf> | sounds like a category error |
2024-08-19 14:36:37 +0200 | ZharMeny | (~user@user/ZharMeny) |
2024-08-19 14:38:14 +0200 | ZharMeny | (~user@user/ZharMeny) (Read error: Connection reset by peer) |
2024-08-19 14:38:19 +0200 | ZharMeny` | (~user@user/ZharMeny) |
2024-08-19 14:38:33 +0200 | youthlic | (~Thunderbi@user/youthlic) |
2024-08-19 14:40:34 +0200 | ZharMeny` | ZharMeny |
2024-08-19 14:43:43 +0200 | <lortabac> | I guess allowing instances on unsaturated type-level functions would be a little messy |
2024-08-19 14:45:27 +0200 | <lortabac> | does Idris have something like that? |
2024-08-19 14:48:43 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 245 seconds) |
2024-08-19 14:55:17 +0200 | <SrPx> | is there any alternative front-end to GHC nowadays? |
2024-08-19 15:03:43 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 264 seconds) |
2024-08-19 15:03:58 +0200 | tomku | (~tomku@user/tomku) |
2024-08-19 15:07:33 +0200 | <Inst> | <probie> It's an idiom that people recognise. It's important to shuffle it around |
2024-08-19 15:07:33 +0200 | <Inst> | <probie> > do{t<-tail;take 10 . (`zip` t)} $ [1..] |
2024-08-19 15:07:38 +0200 | <Inst> | sarcasm noted there |
2024-08-19 15:08:01 +0200 | <Inst> | also afaik, no one ever uses (r ->) in do notation, right? If they do it, it's reader |
2024-08-19 15:08:15 +0200 | <kuribas> | Noone should use (r ->), like ever. |
2024-08-19 15:08:58 +0200 | <Inst> | i mean people use ReaderT |
2024-08-19 15:09:09 +0200 | <Inst> | ReaderT identity as well, they just don't use (r ->) |
2024-08-19 15:13:32 +0200 | Square | (~Square4@user/square) (Ping timeout: 272 seconds) |
2024-08-19 15:15:20 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) |
2024-08-19 15:15:20 +0200 | wroathe | (~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host) |
2024-08-19 15:15:20 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 15:20:49 +0200 | ubert | (~Thunderbi@91.141.68.38.wireless.dyn.drei.com) (Ping timeout: 248 seconds) |
2024-08-19 15:27:19 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2024-08-19 15:29:14 +0200 | noctux | (~noctux@user/noctux) (Remote host closed the connection) |
2024-08-19 15:32:23 +0200 | <Leary> | [exa]: A straight-forward approach, inheriting nice exception semantics from STM and IO: https://gist.github.com/LSLeary/e139dfe025e2ed5a47040106b321dbc3 |
2024-08-19 15:32:42 +0200 | <Leary> | Not sure if actually helpful; might be too obvious. |
2024-08-19 15:32:52 +0200 | <Leary> | But I had fun writing it, so whatever. |
2024-08-19 15:33:36 +0200 | <[exa]> | yeah actually helpful too, not sure if I use it but in case I don't go with haxl I'd basically have to code the same |
2024-08-19 15:34:15 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) |
2024-08-19 15:34:16 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host) |
2024-08-19 15:34:16 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 15:36:34 +0200 | ystael | (~ystael@user/ystael) |
2024-08-19 15:39:12 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) |
2024-08-19 15:39:30 +0200 | noctux | (~noctux@user/noctux) |
2024-08-19 15:43:25 +0200 | <int-e> | % mapM_ print ([1,2,3],42) |
2024-08-19 15:43:25 +0200 | <yahb2> | 42 |
2024-08-19 15:43:46 +0200 | <int-e> | I swear these tuple instances bite me way more often than the (r ->) ones. |
2024-08-19 15:45:31 +0200 | <Rembane> | I use them so much that I hope that I have internalized them |
2024-08-19 15:45:36 +0200 | <Rembane> | It's my strategy |
2024-08-19 15:45:39 +0200 | <Rembane> | I don't know if it works |
2024-08-19 15:45:49 +0200 | <Rembane> | That they exist is fascinating in itself |
2024-08-19 15:49:36 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-08-19 15:50:15 +0200 | noctux | (~noctux@user/noctux) (Remote host closed the connection) |
2024-08-19 15:52:34 +0200 | <probie> | They're useful from time to time with things like `traverse` |
2024-08-19 15:52:48 +0200 | noctux | (~noctux@user/noctux) |
2024-08-19 15:53:41 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 258 seconds) |
2024-08-19 15:54:12 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) |
2024-08-19 15:54:36 +0200 | <lortabac> | I always try to use the most specific function when there is one. No need to use 'fmap' if you need 'map'. That's also why I'm not a big fan of things like classy-prelude |
2024-08-19 15:55:05 +0200 | <Rembane> | probie: Yeah, but I think I would prefer to have a newtype for it for clarity. |
2024-08-19 15:55:22 +0200 | <Rembane> | OTOH, that's a critique that can be applied to all instances all the time. |
2024-08-19 15:56:09 +0200 | <lortabac> | TBH I consider even the obligation to use 'Monad' to chain IO actions a mistake in the language. I don't see why 'bindIO' etc. shouldn't be exposed in Prelude |
2024-08-19 15:57:03 +0200 | <Rembane> | lortabac: This makes me curious, do you have more motivation or intuition for this? |
2024-08-19 15:57:04 +0200 | <lortabac> | ad-hoc polymorphism should only be used when really needed |
2024-08-19 15:57:42 +0200 | <lortabac> | Rembane: well, the most obvious one would be that newcomers now need to learn monads in order to use IO |
2024-08-19 15:58:01 +0200 | <probie> | Every new name introduced is a name that needs to be learnt |
2024-08-19 15:58:10 +0200 | <lortabac> | of course |
2024-08-19 15:58:28 +0200 | <lortabac> | but now they are obliged to learn a hard concept that they don't need at that stage |
2024-08-19 15:58:28 +0200 | <Rembane> | lortabac: Not reay, they need to learn the funny do-notation and then they're off to the races. |
2024-08-19 15:59:01 +0200 | <lortabac> | yes, books can find a workaround by not mentioning that the 'do' notation is about monads |
2024-08-19 15:59:14 +0200 | <lortabac> | but still it is about monads |
2024-08-19 16:00:31 +0200 | <Rembane> | Indeed |
2024-08-19 16:01:24 +0200 | rosco | (~rosco@175.136.158.234) (Quit: Lost terminal) |
2024-08-19 16:02:41 +0200 | <danse-nr3> | i don't get the preference for specific functions, `map` over `fmap`. If one doesn't use basic haskell abstractions, what's the point of using haskell at all |
2024-08-19 16:03:02 +0200 | noctux | (~noctux@user/noctux) (Remote host closed the connection) |
2024-08-19 16:03:53 +0200 | <probie> | It's about the only non-strict language around with an ecosystem and reasonable performance |
2024-08-19 16:04:05 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
2024-08-19 16:06:39 +0200 | noctux | (~noctux@user/noctux) |
2024-08-19 16:08:42 +0200 | <danse-nr3> | fair point |
2024-08-19 16:08:54 +0200 | <danse-nr3> | :t map (++) |
2024-08-19 16:08:56 +0200 | <lambdabot> | [[a]] -> [[a] -> [a]] |
2024-08-19 16:09:33 +0200 | <danse-nr3> | why would one write code that is less portable though, besides that slight performance improvement? |
2024-08-19 16:09:48 +0200 | <danse-nr3> | :t fmap (<>) |
2024-08-19 16:09:50 +0200 | <lambdabot> | (Functor f, Semigroup a) => f a -> f (a -> a) |
2024-08-19 16:10:23 +0200 | <danse-nr3> | also losing the possibility to interpret its more abstrat meaning and reason in terms of common operation on different instances? |
2024-08-19 16:11:22 +0200 | <kuribas> | danse-nr3: some more specific functions may be more efficient, for example stream fusion. |
2024-08-19 16:11:58 +0200 | <kuribas> | It's also not less portable if you already restrain the type. |
2024-08-19 16:13:09 +0200 | <danse-nr3> | oh, it's not less portable with restrained types then |
2024-08-19 16:14:28 +0200 | <EvanR> | ad hoc polymorphism never "needs" to be used, because you can use "record-of-functions" style OOPish pattern to vary behavior from value to value |
2024-08-19 16:15:09 +0200 | <EvanR> | but type classes shine when you have a nice logical framework that benefits from the idiosyncracy of type class coherence |
2024-08-19 16:15:27 +0200 | <EvanR> | that we can use the + operator in many cases is a nice side effect |
2024-08-19 16:16:25 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) |
2024-08-19 16:16:26 +0200 | <danse-nr3> | maybe the Num instance is not the easiest to highlight the advantages, but Semigroups, Functors ... if one doesn't like them, go looking for another lazy lang really |
2024-08-19 16:17:33 +0200 | <EvanR> | and if you do like Semigroups, Functors, you can still go looking for another language, like scalaz! |
2024-08-19 16:18:08 +0200 | <EvanR> | also lol at another lazy language |
2024-08-19 16:18:15 +0200 | <EvanR> | miranda? |
2024-08-19 16:19:24 +0200 | <Inst> | /s/miranda/mirandaTM |
2024-08-19 16:19:48 +0200 | <haskellbridge> | <thirdofmay18081814goya> anyone ever do haskell interop with agda/idris? |
2024-08-19 16:19:56 +0200 | <haskellbridge> | <thirdofmay18081814goya> do most things in haskell, do dependent stuff in those |
2024-08-19 16:20:05 +0200 | <probie> | Can I even run Miranda on anything other than x86(_64)? |
2024-08-19 16:21:20 +0200 | <Inst> | studying C, I finally understand how alien Haskell can be when two basic concepts require "generics" just to use and understand |
2024-08-19 16:21:34 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 16:22:11 +0200 | <EvanR> | or how alien C, with arbitrary mutation and IO anywhere |
2024-08-19 16:22:34 +0200 | <EvanR> | and bizarre undefined behaviors@! |
2024-08-19 16:22:58 +0200 | <Inst> | and textbooks that are essentially made up of "this is a footgun, don't use it" |
2024-08-19 16:23:34 +0200 | <danse-nr3> | which "two basic concepts" would those be Inst? |
2024-08-19 16:24:11 +0200 | <Inst> | IO a, [a] |
2024-08-19 16:24:17 +0200 | <Inst> | although tbh, is [a] really that alien? |
2024-08-19 16:24:41 +0200 | <EvanR> | you can make [a] in C but it won't be checked by the type system |
2024-08-19 16:24:48 +0200 | <EvanR> | void pointer |
2024-08-19 16:24:55 +0200 | <danse-nr3> | why would they require "generics"? Or you still mean typeclasses by that? |
2024-08-19 16:25:02 +0200 | <lortabac> | danse-nr3: I'm not saying that 'fmap' shouldn't be used, I'm saying we should use the right tool for the job |
2024-08-19 16:25:18 +0200 | <EvanR> | Inst, is probably talking about C generics |
2024-08-19 16:25:44 +0200 | <Inst> | go afaik finally has generics? |
2024-08-19 16:25:46 +0200 | <EvanR> | generics as a term ignores research and is redefined as a different random thing in each language |
2024-08-19 16:26:04 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 16:26:25 +0200 | <Inst> | i guess generics isn't pure then? or it is, provided you pass it a generator :3 |
2024-08-19 16:26:39 +0200 | <EvanR> | we don't know until you clarify what generics you're talking about |
2024-08-19 16:30:21 +0200 | <Inst> | parametric polymorphism, i guess |
2024-08-19 16:30:48 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 272 seconds) |
2024-08-19 16:30:56 +0200 | <EvanR> | C can do that through void pointers, with no guardrails |
2024-08-19 16:31:04 +0200 | cfricke | (~cfricke@user/cfricke) |
2024-08-19 16:31:06 +0200 | <EvanR> | so it's not really alien |
2024-08-19 16:32:54 +0200 | <Inst> | it looks like something that'd fill up 1-2 pages with footgun warnings |
2024-08-19 16:34:07 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) |
2024-08-19 16:34:07 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host) |
2024-08-19 16:34:07 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 16:39:18 +0200 | CiaoSen | (~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) (Ping timeout: 258 seconds) |
2024-08-19 16:39:39 +0200 | Miroboru | (~myrvoll@178-164-114.82.3p.ntebredband.no) |
2024-08-19 16:40:47 +0200 | <lortabac> | danse-nr3: when you have a complex computation, something with multiple layers of Either, Maybe, lists etc. if you use specific types/functions when you get lost you can use typed holes or IDE features to help you follow what is happening. If all you have is fmap's and traverse's, good luck! |
2024-08-19 16:42:12 +0200 | <haskellbridge> | <mauke> If you want to see something funny, look up the type of qsort() in C |
2024-08-19 16:42:40 +0200 | <probie> | you can use TypeApplications to disambiguate without the need to learn about specific names for each names |
2024-08-19 16:43:49 +0200 | <haskellbridge> | <mauke> and if you want to be horrified, check out <tgmath.h> |
2024-08-19 16:44:05 +0200 | <lortabac> | probie: I'm talking about how the compiler can help you, not about how you can help the compiler |
2024-08-19 16:44:34 +0200 | <EvanR> | it stands for Too Good math |
2024-08-19 16:46:07 +0200 | <albet70> | does liftA2 have other names? |
2024-08-19 16:46:26 +0200 | <haskellbridge> | <mauke> liftM2 |
2024-08-19 16:46:29 +0200 | <probie> | `\f x y -> f <$> x <*> y` |
2024-08-19 16:47:49 +0200 | <haskellbridge> | <mauke> I should port to Haskell |
2024-08-19 16:48:14 +0200 | <dolio> | The compiler helps me by picking the right overloading of functions instead of making me do it manually, with a cornucopia of disambiguating names. |
2024-08-19 16:48:23 +0200 | <haskellbridge> | <mauke> ... That renders wrong in Matrix |
2024-08-19 16:49:41 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 16:53:45 +0200 | wroathe | (~wroathe@166.175.189.43) |
2024-08-19 16:53:45 +0200 | wroathe | (~wroathe@166.175.189.43) (Changing host) |
2024-08-19 16:53:45 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 16:55:08 +0200 | <albet70> | what's the name that fmap can work with binary function? |
2024-08-19 16:55:24 +0200 | <albet70> | fmap (+) [1..3] [3..5] |
2024-08-19 16:55:36 +0200 | <dolio> | liftA2? |
2024-08-19 16:57:12 +0200 | <albet70> | no |
2024-08-19 16:57:38 +0200 | <EvanR> | :t zipWith |
2024-08-19 16:57:38 +0200 | <lambdabot> | (a -> b -> c) -> [a] -> [b] -> [c] |
2024-08-19 16:57:47 +0200 | <albet70> | that should be [4,6,8] but (+) <$> [1..3] <*> [3..5] == [4,5,6,5,6,7,6,7,8] |
2024-08-19 16:58:20 +0200 | <albet70> | zipWith it is |
2024-08-19 16:58:21 +0200 | <dolio> | It's [4,6,8] with ZipList. |
2024-08-19 16:58:59 +0200 | <ncf> | > liftA2 (+) (ZipList [1..3]) (ZipList [3..5]) |
2024-08-19 16:59:01 +0200 | <lambdabot> | ZipList {getZipList = [4,6,8]} |
2024-08-19 16:59:31 +0200 | <probie> | All lawful functor instances for a type are identical, but that doesn't hold for applicative |
2024-08-19 17:01:28 +0200 | <albet70> | zipWith is related to transpose? |
2024-08-19 17:01:29 +0200 | <EvanR> | why would you use zipWith f foo bar when you could use getZipList (liftA2 (+) (ZipList foo) (ZipList bar)) |
2024-08-19 17:01:59 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2) |
2024-08-19 17:02:06 +0200 | <EvanR> | albet70, you might be thinking of zip from languages which use list to stand for tuples |
2024-08-19 17:02:13 +0200 | <EvanR> | :t zip |
2024-08-19 17:02:14 +0200 | <lambdabot> | [a] -> [b] -> [(a, b)] |
2024-08-19 17:02:25 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 17:02:32 +0200 | <dolio> | I would definitely use zipWith. But if we're talking about fmap, it's meaningless to generalize to multiple arguments without something like Applicative. |
2024-08-19 17:02:34 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 17:02:49 +0200 | <EvanR> | > zip [1,2,3,4] [5,6,7,8] |
2024-08-19 17:02:51 +0200 | <lambdabot> | [(1,5),(2,6),(3,7),(4,8)] |
2024-08-19 17:03:16 +0200 | <EvanR> | :t zip3 |
2024-08-19 17:03:17 +0200 | <lambdabot> | [a] -> [b] -> [c] -> [(a, b, c)] |
2024-08-19 17:03:18 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 17:03:43 +0200 | <EvanR> | zip in another language :: list of list of value -> list of list of value |
2024-08-19 17:03:51 +0200 | <EvanR> | corresponding to transpose in haskell |
2024-08-19 17:03:51 +0200 | <albet70> | zip is transpose? |
2024-08-19 17:04:08 +0200 | <EvanR> | not in haskell but in a language that doesn't know a tuple from a list |
2024-08-19 17:06:02 +0200 | <Inst> | albet78: new here? |
2024-08-19 17:06:05 +0200 | <Inst> | albet70 |
2024-08-19 17:08:28 +0200 | <albet70> | yes, I'm a newbie |
2024-08-19 17:08:41 +0200 | <Inst> | welcome, and enjoy Haskell! :3 |
2024-08-19 17:09:10 +0200 | <Inst> | i hope the type signatures and annotations aren't too hard, that was a big tripping point for me |
2024-08-19 17:09:23 +0200 | terrorjack4 | (~terrorjac@static.163.82.63.178.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat) |
2024-08-19 17:09:38 +0200 | <EvanR> | and then once you get type signatures, you go back to the real world and wonder why they're not there in e.g. python |
2024-08-19 17:09:53 +0200 | <Inst> | i sort of wish Py stole Haskell's type signature format |
2024-08-19 17:09:58 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 258 seconds) |
2024-08-19 17:10:08 +0200 | <Inst> | but, back to Haskell being alien! |
2024-08-19 17:10:20 +0200 | <Inst> | (actually Py stealing Idris's typesig format would probably have been better) |
2024-08-19 17:10:23 +0200 | <albet70> | that ByteString Lazy Internal String Char stuff are not friendly |
2024-08-19 17:10:39 +0200 | terrorjack4 | (~terrorjac@2a01:4f8:121:32e8::) |
2024-08-19 17:10:42 +0200 | terrorjack4 | (~terrorjac@2a01:4f8:121:32e8::) (Client Quit) |
2024-08-19 17:10:49 +0200 | <EvanR> | not even dependent types would safe dynamic language APIs from themselves |
2024-08-19 17:11:16 +0200 | <EvanR> | Char is pretty straightforward and exists in many languages |
2024-08-19 17:11:18 +0200 | <albet70> | Inst , python have type hint now, and they have pydantic for type check like ts to js I think |
2024-08-19 17:11:19 +0200 | <Inst> | also have you done kinds yet? |
2024-08-19 17:11:20 +0200 | <c_wraith> | TypeScript gets really funny when trying to describe some existing JS APIs |
2024-08-19 17:11:34 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2024-08-19 17:11:36 +0200 | <c_wraith> | type that are longer than implementations... |
2024-08-19 17:11:59 +0200 | <haskellbridge> | <mauke> ByteStrings get a little easier once you realize there are two (and only two) of them |
2024-08-19 17:12:11 +0200 | <EvanR> | and ShortByteString xD |
2024-08-19 17:12:13 +0200 | <danse-nr3> | yeah typescript quite poor at being functional |
2024-08-19 17:12:27 +0200 | <albet70> | when to unify String [Char] Text, and that Strict Internal Lazy stuff |
2024-08-19 17:12:35 +0200 | <EvanR> | do not unify |
2024-08-19 17:12:35 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2024-08-19 17:12:42 +0200 | <EvanR> | that is wrong and broken |
2024-08-19 17:12:51 +0200 | <EvanR> | it's like the belief that there is one number type |
2024-08-19 17:12:57 +0200 | <EvanR> | we just haven't found it yet |
2024-08-19 17:12:57 +0200 | <EvanR> | no |
2024-08-19 17:13:19 +0200 | <EvanR> | what is Internal |
2024-08-19 17:13:20 +0200 | <haskellbridge> | <mauke> String = [Char] |
2024-08-19 17:13:47 +0200 | <haskellbridge> | <mauke> The bit of the error message that is best ignored |
2024-08-19 17:14:08 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) |
2024-08-19 17:14:22 +0200 | <haskellbridge> | <mauke> Only Strict vs Lazy matters |
2024-08-19 17:14:24 +0200 | <EvanR> | something internal literally called Internal is leaking out into errors ? :( |
2024-08-19 17:14:27 +0200 | <Inst> | albet70: kinds tbh probably should be introduced around the same time as parametric types |
2024-08-19 17:14:36 +0200 | <haskellbridge> | <mauke> Yes |
2024-08-19 17:14:47 +0200 | <Inst> | values have types, type constructors (like Char, or []) have kinds |
2024-08-19 17:14:49 +0200 | <albet70> | https://hackage.haskell.org/package/bytestring-0.11.3.1/docs/Data-ByteString-Internal.html |
2024-08-19 17:15:09 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 17:15:21 +0200 | <EvanR> | ok Data.ByteString.Internal is a module name |
2024-08-19 17:15:23 +0200 | <Inst> | Data.ByteString.Internal is a module name |
2024-08-19 17:15:27 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 17:15:40 +0200 | <EvanR> | many libraries stash internal implementation stuff in an Internal submodule |
2024-08-19 17:15:40 +0200 | <Inst> | actually EvanR, you're both better at this and nicer than me, so I'll let you handle it? |
2024-08-19 17:15:52 +0200 | <c_wraith> | EvanR: Internal shows up in error messages when you don't have the correct bytestring type in scope. The error message talks about where it's defined in that case, and they're defined in their respective .Internal modules |
2024-08-19 17:15:55 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 17:17:42 +0200 | <EvanR> | albet70, thing is, [Char] and ByteString isn't even a choice between similars, they are very different for different purposes |
2024-08-19 17:18:06 +0200 | <EvanR> | thinking of them both as "string" is confused |
2024-08-19 17:18:09 +0200 | <albet70> | yes, [Char] is not ByteString |
2024-08-19 17:18:18 +0200 | <EvanR> | so they can't possibly be unified |
2024-08-19 17:18:31 +0200 | <albet70> | [Char], String and Text? |
2024-08-19 17:18:40 +0200 | <albet70> | ByteString and Word? |
2024-08-19 17:18:45 +0200 | <Inst> | are you familiar with the type keyword? |
2024-08-19 17:18:46 +0200 | <EvanR> | other programming languages went through a struggle to decide if they want [Char] OR ByteString as their one string type |
2024-08-19 17:18:52 +0200 | <EvanR> | it's kind of a disaster |
2024-08-19 17:19:08 +0200 | <albet70> | python2 str is bytestring |
2024-08-19 17:19:14 +0200 | <Inst> | the type keyword in Haskell is the typedef keyword in C |
2024-08-19 17:19:20 +0200 | <Inst> | it creates a synonym for a preexisting type |
2024-08-19 17:19:25 +0200 | <Inst> | type String = [Char] |
2024-08-19 17:19:28 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) |
2024-08-19 17:19:28 +0200 | wroathe | (~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host) |
2024-08-19 17:19:28 +0200 | wroathe | (~wroathe@user/wroathe) |
2024-08-19 17:19:40 +0200 | <EvanR> | python has a complex policy on top of their bytestring to make sure it can represent unicode text properly |
2024-08-19 17:19:46 +0200 | <EvanR> | haskell doesn't |
2024-08-19 17:19:56 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) (Quit: on the move) |
2024-08-19 17:19:58 +0200 | <Inst> | isn't bytestring just raw data? |
2024-08-19 17:20:06 +0200 | <Inst> | Word8 vector |
2024-08-19 17:20:07 +0200 | <EvanR> | is that like pure energy? |
2024-08-19 17:20:38 +0200 | <Inst> | Word in Haskell typically refers to an unsigned integer |
2024-08-19 17:20:42 +0200 | <EvanR> | vector of Word8 is an adequate semantics (for strict ByteString) |
2024-08-19 17:21:42 +0200 | <Inst> | so it's a vector (array or typed list) of unsigned integers limited to 8 bits |
2024-08-19 17:21:57 +0200 | <EvanR> | that's getting into the weeds |
2024-08-19 17:22:01 +0200 | <EvanR> | unnecessarily specific |
2024-08-19 17:22:41 +0200 | <EvanR> | numbers zero to 255 |
2024-08-19 17:22:54 +0200 | <Inst> | albet70, still here? |
2024-08-19 17:24:10 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2024-08-19 17:25:26 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) |
2024-08-19 17:26:11 +0200 | spew | (~spew@201.141.102.132) |
2024-08-19 17:26:41 +0200 | <fr33domlover> | o/ What's the recommended extensible record package these days? Is vinyl still the thing? I see there's a few more (in particular the 'topaz' package has been updated in 2024, while vinyl hasn't since 2022) |
2024-08-19 17:27:44 +0200 | <albet70> | sorry, I was coding |
2024-08-19 17:29:06 +0200 | <albet70> | I'm learning that some basic alghrithm for interview, some list stuff |
2024-08-19 17:29:13 +0200 | <EvanR> | vinyl probably still works and sometimes you don't need constant updates |
2024-08-19 17:29:22 +0200 | <EvanR> | haven't heard of topaz |
2024-08-19 17:29:45 +0200 | <Inst> | in py, right? |
2024-08-19 17:29:55 +0200 | <EvanR> | one of the dependent map packages might also work in lieu of vinyl |
2024-08-19 17:30:33 +0200 | <albet70> | haha, I'm learning Data.List and turn it to py for interview, there's no haskell job around |
2024-08-19 17:30:57 +0200 | <Franciman> | albet70: where are you located? Asia/EU/Americas |
2024-08-19 17:31:24 +0200 | <albet70> | Data.List is a very very good for people to solve some interview questions |
2024-08-19 17:31:32 +0200 | <albet70> | Asia |
2024-08-19 17:32:04 +0200 | <Inst> | did you see the Haskell mergesort Data.List.sort yet? |
2024-08-19 17:32:28 +0200 | <Inst> | actually that's not really basic :( |
2024-08-19 17:35:20 +0200 | <c_wraith> | These days, it's kind of the table stakes for a standard library sort, even in the case where you're not trying to 100% maximize efficiency because of the data structure involved |
2024-08-19 17:35:54 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2024-08-19 17:36:24 +0200 | <c_wraith> | But like... if your standard library sort isn't O(n) on sorted input, people will want to fix it. :) |
2024-08-19 17:36:44 +0200 | <albet70> | quickSort (x:xs) = let smallerSorted = quickSort [a | a <- xs, a <= x]; biggerSorted = quickSort [a | a <- xs, a > x] in smallerSorted <> [x] <> biggerSorted |
2024-08-19 17:37:29 +0200 | <c_wraith> | that.... is O(n^2) on sorted input |
2024-08-19 17:37:53 +0200 | <Inst> | yeah people bash that all the time |
2024-08-19 17:38:22 +0200 | <albet70> | it's just for interview time complex is not very important :) |
2024-08-19 17:38:23 +0200 | <Inst> | but there's a different problem with that code |
2024-08-19 17:38:40 +0200 | <albet70> | quickSort [] = [] |
2024-08-19 17:38:48 +0200 | <Inst> | yeah :) |
2024-08-19 17:38:51 +0200 | <albet70> | quickSort :: (Ord a) => [a] -> [a] |
2024-08-19 17:38:59 +0200 | Blasius | (~Blasius@5ec169d9.skybroadband.com) |
2024-08-19 17:39:23 +0200 | <Inst> | also, that's going to do two traversals of the list per sort, do you think you can do it in one traversal? |
2024-08-19 17:39:29 +0200 | CATS | (apic@brezn3.muc.ccc.de) |
2024-08-19 17:39:44 +0200 | <Inst> | erm, per level, not per sort |
2024-08-19 17:40:23 +0200 | <albet70> | I can't do it now |
2024-08-19 17:43:30 +0200 | <EvanR> | I definitely had interviews where they wanted a faster algorithm to solve something |
2024-08-19 17:43:33 +0200 | <EvanR> | jerks |
2024-08-19 17:43:45 +0200 | <int-e> | lol |
2024-08-19 17:44:19 +0200 | youthlic | (~Thunderbi@user/youthlic) (Ping timeout: 252 seconds) |
2024-08-19 17:44:52 +0200 | <albet70> | that must be an algrithm engineer job |
2024-08-19 17:45:37 +0200 | <EvanR> | yeah. ecommerce |
2024-08-19 17:45:40 +0200 | <EvanR> | cutting edge |
2024-08-19 17:46:05 +0200 | <albet70> | AI and algrithm engineer are very popular, and it ask very high skills and experience |
2024-08-19 17:46:27 +0200 | <Inst> | when is Type replacing * by default, anyways? |
2024-08-19 17:46:39 +0200 | <EvanR> | I thought AI was supposed to make it so I don't have to be smart |
2024-08-19 17:46:48 +0200 | <EvanR> | or creative, or human |
2024-08-19 17:47:13 +0200 | <albet70> | gpt 4o even can't produce functional haskell code yet |
2024-08-19 17:47:24 +0200 | <Inst> | also btw, EvanR: impure energy can exist |
2024-08-19 17:47:28 +0200 | <albet70> | AI is just another search engine I think |
2024-08-19 17:47:31 +0200 | <EvanR> | i made working raylib bindings for me |
2024-08-19 17:47:38 +0200 | <EvanR> | it, chat-gpt did |
2024-08-19 17:48:28 +0200 | <albet70> | you can try to ask gpt 4o to generate a code that get title from a web link, see if it works |
2024-08-19 17:48:31 +0200 | CATS | (apic@brezn3.muc.ccc.de) () |
2024-08-19 17:48:50 +0200 | <Inst> | matter-energy is implictly impure energy, no? |
2024-08-19 17:49:00 +0200 | terrorjack4 | (~terrorjac@static.163.82.63.178.clients.your-server.de) |
2024-08-19 17:49:41 +0200 | <albet70> | a few days ago, I tried that, the code gpt 4o produced can't work, and some functions it generated I can't find it on hoogle, it may copy it from some people's code |
2024-08-19 17:50:20 +0200 | <EvanR> | Inst, are you channelling deepak chopra, this is a haskell channel |
2024-08-19 17:50:23 +0200 | <albet70> | but it forget to copy that function's definition |
2024-08-19 17:50:42 +0200 | <Inst> | sosrry for being pedantic |
2024-08-19 17:50:48 +0200 | <Inst> | but then again, this is a haskell channel :3 |
2024-08-19 17:51:14 +0200 | <Inst> | well tbh it's not a term of art in physics |
2024-08-19 17:51:17 +0200 | <Inst> | so i lose |
2024-08-19 17:51:28 +0200 | <EvanR> | not pedantic but mistaking mystic metaphysics for science |
2024-08-19 17:52:42 +0200 | <albet70> | use traverse's early return to write a function allEqual work on a list |
2024-08-19 17:53:36 +0200 | <EvanR> | haskell code to do an HTTP get? |
2024-08-19 17:54:16 +0200 | <Inst> | traverse isn't capable of early return iirc |
2024-08-19 17:54:26 +0200 | <Inst> | unless by early return you mean throwing an exception |
2024-08-19 17:54:42 +0200 | <Inst> | or it's working on a type that has early return baked in |
2024-08-19 17:54:46 +0200 | <EvanR> | it depends on the Applicative |
2024-08-19 17:55:07 +0200 | <ncf> | Writer All |
2024-08-19 17:55:27 +0200 | <EvanR> | :t traverse |
2024-08-19 17:55:28 +0200 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
2024-08-19 17:56:26 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) (Ping timeout: 260 seconds) |
2024-08-19 17:56:44 +0200 | <EvanR> | > sequenceA (Nothing : repeat (Just 'z')) |
2024-08-19 17:56:46 +0200 | <lambdabot> | Nothing |
2024-08-19 17:56:49 +0200 | <Inst> | (a -> Maybe a) -> [a] -> Maybe [a] |
2024-08-19 17:57:08 +0200 | <EvanR> | it either returned early or lambdabot did hypercomputation |
2024-08-19 17:57:15 +0200 | <ncf> | or s/Writer/Const/ i guess |
2024-08-19 17:57:16 +0200 | <Inst> | hypercomputation? |
2024-08-19 17:57:26 +0200 | <EvanR> | it went to the end of the infinite list before returning xD |
2024-08-19 17:58:22 +0200 | <Inst> | raw data is a term of art in statistics, though |
2024-08-19 17:58:27 +0200 | <ncf> | > getAll . getConst $ traverse (\n -> Const (All (even n))) [1..] |
2024-08-19 17:58:29 +0200 | <lambdabot> | False |
2024-08-19 17:58:35 +0200 | <albet70> | python try except version: https://paste.tomsmeding.com/guyWwXF9 |
2024-08-19 17:58:50 +0200 | <EvanR> | well in haskell we don't deal in raw data but in specific datatypes like Word8 |
2024-08-19 17:58:57 +0200 | chiselfuse | (~chiselfus@user/chiselfuse) |
2024-08-19 17:59:03 +0200 | <EvanR> | which isn't special in the abstract haskell world |
2024-08-19 17:59:12 +0200 | wroathe | (~wroathe@user/wroathe) (Quit: leaving) |
2024-08-19 17:59:16 +0200 | <EvanR> | hardware may be optimized to handle it but that's another subject |
2024-08-19 17:59:22 +0200 | <Inst> | serialized data, i guess |
2024-08-19 17:59:42 +0200 | <EvanR> | you could serialize data using Word7 or Word9 |
2024-08-19 18:00:12 +0200 | <EvanR> | and raw data in statistics is probably not all Word8 |
2024-08-19 18:00:56 +0200 | <lisbeths> | i want to return ibis https://usercontent.irccloud-cdn.com/file/iyr5fx5A/Screenshot_2024-08-19-08-59-08-512_com.termux.jpg |
2024-08-19 18:00:59 +0200 | sprout_ | (~sprout@84-80-106-227.fixed.kpn.net) |
2024-08-19 18:01:18 +0200 | euleritian | (~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) (Ping timeout: 276 seconds) |
2024-08-19 18:01:49 +0200 | <lisbeths> | i can do this in ghci but not in a file |
2024-08-19 18:02:14 +0200 | <EvanR> | :t id id |
2024-08-19 18:02:15 +0200 | <lambdabot> | a -> a |
2024-08-19 18:02:39 +0200 | <EvanR> | that's not IO () |
2024-08-19 18:02:45 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) |
2024-08-19 18:02:58 +0200 | <EvanR> | the do has no effect there |
2024-08-19 18:03:04 +0200 | <Inst> | that's so cool, btw |
2024-08-19 18:03:08 +0200 | <albet70> | traverse is another version of fmap, I wonder is there other version of reduce or filter? |
2024-08-19 18:03:26 +0200 | <Inst> | that doesn't work in ghci for me |
2024-08-19 18:03:29 +0200 | <Inst> | i mean coding on your phone |
2024-08-19 18:03:42 +0200 | <Inst> | traverse isn't another version of fmap |
2024-08-19 18:03:51 +0200 | sprout_ | (~sprout@84-80-106-227.fixed.kpn.net) (Client Quit) |
2024-08-19 18:03:58 +0200 | <EvanR> | yafmap |
2024-08-19 18:04:02 +0200 | <EvanR> | yet another fmap |
2024-08-19 18:04:06 +0200 | <EvanR> | and yeah it's not |
2024-08-19 18:04:33 +0200 | <Inst> | lisbeths: I'm curious how you got it working in ghci, though |
2024-08-19 18:04:36 +0200 | sprout_ | (~sprout@84-80-106-227.fixed.kpn.net) |
2024-08-19 18:04:45 +0200 | <ncf> | there is a sense in which traverse is a generalisation of fmap (set f to the Identity applicative), so you can sort of see it as an "effectful fmap" |
2024-08-19 18:04:51 +0200 | <ncf> | :t filterM |
2024-08-19 18:04:52 +0200 | <lambdabot> | Applicative m => (a -> m Bool) -> [a] -> m [a] |
2024-08-19 18:04:54 +0200 | <ncf> | :t foldMapM |
2024-08-19 18:04:55 +0200 | <lambdabot> | error: |
2024-08-19 18:04:56 +0200 | <lambdabot> | • Variable not in scope: foldMapM |
2024-08-19 18:04:56 +0200 | <lambdabot> | • Perhaps you meant one of these: |
2024-08-19 18:05:06 +0200 | <ncf> | :t foldM |
2024-08-19 18:05:07 +0200 | <lambdabot> | (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b |
2024-08-19 18:05:12 +0200 | <lisbeths> | I am saying I can debug it in ghci but I dont have IO in ghc |
2024-08-19 18:05:40 +0200 | <Inst> | you usually get the same error messages when ghc tries to compile |
2024-08-19 18:05:44 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
2024-08-19 18:05:45 +0200 | sprout | (~quassel@2a02-a448-3a80-0-a848-29f8-5180-8beb.fixed6.kpn.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2024-08-19 18:05:46 +0200 | <EvanR> | what happened to your IO in ghc |
2024-08-19 18:06:00 +0200 | <EvanR> | that sounds problematic |
2024-08-19 18:06:31 +0200 | <Inst> | albet70: Haskell has a ton of reduce-like functions, tbh |
2024-08-19 18:06:34 +0200 | <Inst> | it's in Data.Foldable |
2024-08-19 18:06:42 +0200 | <EvanR> | :t fold |
2024-08-19 18:06:42 +0200 | <lisbeths> | i never learned IO. I need a function that prints an char to hegin |
2024-08-19 18:06:43 +0200 | <lambdabot> | (Foldable t, Monoid m) => t m -> m |
2024-08-19 18:06:53 +0200 | <Inst> | hegin? |
2024-08-19 18:07:02 +0200 | <EvanR> | :t putChar |
2024-08-19 18:07:03 +0200 | <lambdabot> | Char -> IO () |
2024-08-19 18:07:06 +0200 | <EvanR> | \o/ |
2024-08-19 18:07:47 +0200 | sprout_ | sprout |
2024-08-19 18:07:48 +0200 | <EvanR> | with putChar and getChar you are ready to implement the chinese room paradox |
2024-08-19 18:08:40 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 18:08:58 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 18:09:37 +0200 | <albet70> | fmap, ap, bind, map,filter,reduce |
2024-08-19 18:10:10 +0200 | <albet70> | map is wonderful |
2024-08-19 18:10:24 +0200 | <albet70> | what's mapReduce? |
2024-08-19 18:10:27 +0200 | CAT_S | (apic@brezn3.muc.ccc.de) |
2024-08-19 18:10:32 +0200 | <EvanR> | map followed by reduce |
2024-08-19 18:10:57 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) |
2024-08-19 18:10:58 +0200 | <albet70> | reduce . map? |
2024-08-19 18:11:31 +0200 | <EvanR> | ... sure |
2024-08-19 18:11:46 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) |
2024-08-19 18:12:01 +0200 | <EvanR> | map followed by reduce in a general sense marketed by google |
2024-08-19 18:12:25 +0200 | <Inst> | accumMapL or accumMapR, iirc |
2024-08-19 18:12:50 +0200 | <EvanR> | :t mapAccumR |
2024-08-19 18:12:51 +0200 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2024-08-19 18:13:15 +0200 | <Inst> | mapAccumL |
2024-08-19 18:13:18 +0200 | <Inst> | mapAccumR |
2024-08-19 18:13:38 +0200 | <EvanR> | this is slightly different from map reduce |
2024-08-19 18:14:04 +0200 | <EvanR> | it's a map which can update a state along the way |
2024-08-19 18:14:17 +0200 | <albet70> | function compose give me a intuition, in python map(lambda xs: map(lambda x: f(x), xs), xss) is not intuition, but (fmap . fmap) f xss is very intuition |
2024-08-19 18:14:49 +0200 | <Inst> | map reduce filters at the same time |
2024-08-19 18:14:58 +0200 | <EvanR> | no |
2024-08-19 18:15:05 +0200 | <EvanR> | no filtering |
2024-08-19 18:15:09 +0200 | <Inst> | https://en.wikipedia.org/wiki/MapReduce ? |
2024-08-19 18:15:46 +0200 | <EvanR> | reduce means you are getting a summary value |
2024-08-19 18:15:56 +0200 | <EvanR> | map means you get something the same size as the input |
2024-08-19 18:16:13 +0200 | <EvanR> | filter is a weird special case |
2024-08-19 18:17:39 +0200 | <EvanR> | it makes sense for list... and there's this Witherable thing |
2024-08-19 18:18:43 +0200 | <albet70> | it's late here, good night |
2024-08-19 18:18:47 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2024-08-19 18:18:49 +0200 | <Inst> | good night :) |
2024-08-19 18:19:10 +0200 | <Inst> | do you think he's somehow doing Standard Chartered? |
2024-08-19 18:20:04 +0200 | <Inst> | probably not |
2024-08-19 18:20:07 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
2024-08-19 18:20:44 +0200 | jinsun | (~jinsun@user/jinsun) |
2024-08-19 18:22:30 +0200 | <lisbeths> | i think my terminal may have the wrong locale? https://usercontent.irccloud-cdn.com/file/AFBMNhho/Screenshot_2024-08-19-09-21-38-808_com.termux.jpg |
2024-08-19 18:23:17 +0200 | <glguy> | lisbeths: you should run the executable not the object file |
2024-08-19 18:23:53 +0200 | <glguy> | GHC will make the executable executable; you won't need to chmod anything |
2024-08-19 18:24:10 +0200 | <EvanR> | you tried to run the .o file |
2024-08-19 18:24:34 +0200 | kuribas | (~user@ptr-17d51endnrlvux1kiym.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1)) |
2024-08-19 18:25:06 +0200 | <lisbeths> | i dont see a .exe I see a .hi |
2024-08-19 18:25:46 +0200 | <glguy> | it won't have a file extension |
2024-08-19 18:26:48 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 18:27:02 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) |
2024-08-19 18:29:41 +0200 | <lisbeths> | that worked hut it broke when I switched to putChar https://usercontent.irccloud-cdn.com/file/DeyPDHRO/Screenshot_2024-08-19-09-28-46-638_com.termux.jpg |
2024-08-19 18:31:22 +0200 | <lisbeths> | could it be fastlisp-compiler.hs~ from emacs |
2024-08-19 18:32:13 +0200 | <EvanR> | :t "h" |
2024-08-19 18:32:14 +0200 | <lambdabot> | [Char] |
2024-08-19 18:32:17 +0200 | <EvanR> | :t 'h' |
2024-08-19 18:32:18 +0200 | <lambdabot> | Char |
2024-08-19 18:32:26 +0200 | dans72065 | (~danse-nr3@user/danse-nr3) |
2024-08-19 18:32:27 +0200 | <EvanR> | different quotes |
2024-08-19 18:33:03 +0200 | <EvanR> | 'h' is a Char while "h" is sugar for 'h':[] |
2024-08-19 18:33:09 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) (Ping timeout: 276 seconds) |
2024-08-19 18:33:34 +0200 | <lisbeths> | ok I have output |
2024-08-19 18:33:59 +0200 | <lisbeths> | oroblem = solved for now |
2024-08-19 18:34:06 +0200 | <EvanR> | you're not getting proper error messages |
2024-08-19 18:34:22 +0200 | <EvanR> | it should have given you type errors for that mistake |
2024-08-19 18:34:34 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) (Ping timeout: 252 seconds) |
2024-08-19 18:35:25 +0200 | <rini> | is there a better way to say this: doIO <&> (>>= doMaybe) |
2024-08-19 18:38:37 +0200 | sprout | (~sprout@84-80-106-227.fixed.kpn.net) (Quit: leaving) |
2024-08-19 18:38:52 +0200 | sprout | (~sprout@84-80-106-227.fixed.kpn.net) |
2024-08-19 18:39:36 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) |
2024-08-19 18:40:20 +0200 | <lisbeths> | trying to define kestrel with lambda as let https://usercontent.irccloud-cdn.com/file/eSddvGSU/Screenshot_2024-08-19-09-39-40-348_com.termux.jpg |
2024-08-19 18:41:03 +0200 | <EvanR> | you didn't put -> |
2024-08-19 18:43:05 +0200 | <lisbeths> | yep and I s/putchar/putChar |
2024-08-19 18:43:27 +0200 | mesaoptimizer | (~mesaoptim@user/PapuaHardyNet) (Quit: nyaa~) |
2024-08-19 18:43:37 +0200 | mesaoptimizer | (~mesaoptim@user/PapuaHardyNet) |
2024-08-19 18:48:49 +0200 | <haskellbridge> | <thirdofmay18081814goya> given a type is there a way to automatically produce a value for it? |
2024-08-19 18:50:17 +0200 | <EvanR> | :t undefined |
2024-08-19 18:50:18 +0200 | <lambdabot> | a |
2024-08-19 18:50:52 +0200 | <EvanR> | if that's not allowed it depends |
2024-08-19 18:52:00 +0200 | <haskellbridge> | <thirdofmay18081814goya> that's a start ty |
2024-08-19 18:52:36 +0200 | <geekosaur> | thirdofmay18081814goya, there is no way to generate values for an arbitrary unconstrained type. there are various constraints that provide ways to generate non-bottom values (for example, Arbitrary from QuickCheck, Default from data-default, Monoid from base) |
2024-08-19 18:52:52 +0200 | <EvanR> | @djinn a -> b -> a |
2024-08-19 18:52:52 +0200 | <lambdabot> | f a _ = a |
2024-08-19 18:53:08 +0200 | <EvanR> | @jinn (a,b) -> (b,a) |
2024-08-19 18:53:09 +0200 | <lambdabot> | f (a, b) = (b, a) |
2024-08-19 18:53:35 +0200 | <mauke> | IIRC oleg has a "djinn"-like method |
2024-08-19 18:53:39 +0200 | <lisbeths> | attempting to use let more deeply https://usercontent.irccloud-cdn.com/file/D3K3GI3P/Screenshot_2024-08-19-09-52-47-869_com.termux.jpg |
2024-08-19 18:53:54 +0200 | <haskellbridge> | <thirdofmay18081814goya> geekosaur: I see ty |
2024-08-19 18:54:22 +0200 | <EvanR> | lisbeths, you're not using let at all |
2024-08-19 18:54:44 +0200 | <lisbeths> | im not using haskell's let |
2024-08-19 18:54:50 +0200 | <mauke> | you need to indent that whole thing |
2024-08-19 18:55:09 +0200 | <lisbeths> | how many spaces, four? |
2024-08-19 18:55:09 +0200 | <EvanR> | in what sense are you using let |
2024-08-19 18:55:12 +0200 | econo_ | (uid147250@id-147250.tinside.irccloud.com) |
2024-08-19 18:55:22 +0200 | <mauke> | if "main" is in column 1, all parts of main's body must be indented at least 1 space |
2024-08-19 18:56:28 +0200 | <mauke> | <mauke> I should port to Haskell <- that was supposed to say "port <ciso646>" |
2024-08-19 18:56:36 +0200 | <mauke> | pwned by markdown |
2024-08-19 19:02:59 +0200 | segfaultfizzbuzz | (~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) (Ping timeout: 255 seconds) |
2024-08-19 19:03:50 +0200 | <lisbeths> | forgot -> in last one. in this one type error https://usercontent.irccloud-cdn.com/file/XWONhEUt/Screenshot_2024-08-19-10-02-45-353_com.termux.jpg |
2024-08-19 19:04:13 +0200 | LukeHoersten | (~LukeHoers@user/lukehoersten) |
2024-08-19 19:05:00 +0200 | <lisbeths> | i need these to be of anonymous type |
2024-08-19 19:05:41 +0200 | <mauke> | kestrel putChar '1' putChar '0' == putChar putChar '0' == type error |
2024-08-19 19:05:53 +0200 | <lisbeths> | ah |
2024-08-19 19:05:55 +0200 | <EvanR> | you forgot or added too many arguments |
2024-08-19 19:06:17 +0200 | <EvanR> | thank goodness for the type system because that code is hard |
2024-08-19 19:07:10 +0200 | <mauke> | :t ?wtf putChar '0' :: IO () |
2024-08-19 19:07:11 +0200 | <lambdabot> | (?wtf::(Char -> IO ()) -> Char -> IO ()) => IO () |
2024-08-19 19:07:36 +0200 | dans72065 | (~danse-nr3@user/danse-nr3) (Ping timeout: 276 seconds) |
2024-08-19 19:08:59 +0200 | <lisbeths> | its just basic church encoding https://usercontent.irccloud-cdn.com/file/nnhCzTyK/Screenshot_2024-08-19-10-08-18-242_com.termux.jpg |
2024-08-19 19:09:56 +0200 | <lisbeths> | i have no idea how haskell types work |
2024-08-19 19:10:54 +0200 | <mauke> | yes, now you're running into the problem that lambda isn't let |
2024-08-19 19:11:09 +0200 | <mauke> | specifically, function arguments aren't polymorphic (by default) |
2024-08-19 19:11:20 +0200 | <lisbeths> | u wot m8 |
2024-08-19 19:11:29 +0200 | <lisbeths> | y lambda no let |
2024-08-19 19:11:32 +0200 | <mauke> | > (\id -> (id 'x', id ())) (\x -> x) |
2024-08-19 19:11:34 +0200 | <lambdabot> | error: |
2024-08-19 19:11:34 +0200 | <lambdabot> | • Couldn't match expected type ‘Char’ with actual type ‘()’ |
2024-08-19 19:11:34 +0200 | <lambdabot> | • In the first argument of ‘id’, namely ‘()’ |
2024-08-19 19:11:44 +0200 | <mauke> | > let id = \x -> x in (id 'x', id ()) |
2024-08-19 19:11:45 +0200 | <lambdabot> | ('x',()) |
2024-08-19 19:12:17 +0200 | <lisbeths> | id shouldnt have an x |
2024-08-19 19:12:58 +0200 | <mauke> | ? |
2024-08-19 19:13:01 +0200 | <lisbeths> | solution: make new lambda that supports let |
2024-08-19 19:13:46 +0200 | <EvanR> | > (\x -> let y = x in y) 'a' |
2024-08-19 19:13:48 +0200 | <lambdabot> | 'a' |
2024-08-19 19:14:17 +0200 | <mauke> | > ((\id -> (id 'x', id ())) :: (forall a. a -> a) -> (Char, ())) (\x -> x) |
2024-08-19 19:14:18 +0200 | <lambdabot> | ('x',()) |
2024-08-19 19:14:35 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) |
2024-08-19 19:16:14 +0200 | <EvanR> | let polymorphism |
2024-08-19 19:16:19 +0200 | <lisbeths> | 🤔 |
2024-08-19 19:16:22 +0200 | <EvanR> | let generalization |
2024-08-19 19:16:25 +0200 | LukeHoersten | (~LukeHoers@user/lukehoersten) (Quit: Textual IRC Client: www.textualapp.com) |
2024-08-19 19:16:37 +0200 | <lisbeths> | indeed, poly moph ism....... |
2024-08-19 19:16:37 +0200 | <mauke> | let therebelight |
2024-08-19 19:17:14 +0200 | <EvanR> | beware therebedragons |
2024-08-19 19:17:35 +0200 | <lisbeths> | needing into lambdae polymorphae |
2024-08-19 19:17:42 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2024-08-19 19:17:58 +0200 | <Inst> | hmmm |
2024-08-19 19:18:02 +0200 | califax | (~califax@user/califx) |
2024-08-19 19:18:09 +0200 | <Inst> | i'm wondering, does Haskell have any functions that declare themselves to be undefined behavior? |
2024-08-19 19:18:27 +0200 | <EvanR> | :t unsafeCoerce |
2024-08-19 19:18:28 +0200 | <lambdabot> | error: Variable not in scope: unsafeCoerce |
2024-08-19 19:18:45 +0200 | <Inst> | unsafeCoerce afaik is platform dependent |
2024-08-19 19:19:10 +0200 | <Inst> | sorry, I just thought it would have been funny to have a function named undefinedBehaviorCoerce |
2024-08-19 19:19:17 +0200 | <Inst> | undefinedBehaviorCoerce = unsafeCoerce |
2024-08-19 19:19:18 +0200 | <Inst> | there |
2024-08-19 19:19:50 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Ping timeout: 265 seconds) |
2024-08-19 19:20:00 +0200 | <lisbeths> | moly porphic types can change into a wet dog and into a wet dog jumping. whereas lambdas wants to be one type |
2024-08-19 19:21:03 +0200 | Smiles | (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2024-08-19 19:21:12 +0200 | <lisbeths> | anonymously typed named polymorphic lambda calculi |
2024-08-19 19:21:33 +0200 | <lisbeths> | of type clojure |
2024-08-19 19:21:35 +0200 | <EvanR> | "anonymously typed" |
2024-08-19 19:21:36 +0200 | <EvanR> | ? |
2024-08-19 19:21:40 +0200 | <lisbeths> | yes |
2024-08-19 19:21:43 +0200 | CrunchyFlakes | (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2024-08-19 19:21:55 +0200 | <lisbeths> | I think thats an ocaml terminology |
2024-08-19 19:22:26 +0200 | <lisbeths> | type * -> * |
2024-08-19 19:22:54 +0200 | <glguy> | anonymously typed probably only makes sense in a language that generates new types for certain kinds of syntax like how in rust or c++ you get an unnamable, freshly generated type when you use a lambda expression |
2024-08-19 19:23:05 +0200 | <glguy> | but it doesn't really make sense to use that terminology in Haskell |
2024-08-19 19:23:17 +0200 | <lisbeths> | I dont know haskell terms |
2024-08-19 19:23:33 +0200 | <lisbeths> | I was raised by angry bash devs |
2024-08-19 19:23:38 +0200 | <EvanR> | * -> * doesn't seem right |
2024-08-19 19:23:40 +0200 | tzh | (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
2024-08-19 19:23:47 +0200 | <glguy> | That's fine, we'll just have you tell you when you use terms that don't make sense |
2024-08-19 19:24:01 +0200 | <lisbeths> | sudo arem are f * |
2024-08-19 19:24:16 +0200 | CrunchyFlakes | (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) |
2024-08-19 19:26:20 +0200 | <lisbeths> | I dont know my next course of action |
2024-08-19 19:26:49 +0200 | <lisbeths> | need more different kinds of lambdas |
2024-08-19 19:27:04 +0200 | <mauke> | have you tried using an untyped language? |
2024-08-19 19:27:22 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 19:27:22 +0200 | <EvanR> | anonymous record type or tuple is just a record type or tuple type it seems |
2024-08-19 19:27:22 +0200 | <lisbeths> | what if I use a krivine machine |
2024-08-19 19:27:23 +0200 | <glguy> | if you want to make some Haskell progress you might start with something like https://www.cs.nott.ac.uk/~pszgmh/pih.html |
2024-08-19 19:27:39 +0200 | <lisbeths> | narrow subset of haskell |
2024-08-19 19:28:04 +0200 | <lisbeths> | krivine machine has non typed lambdas |
2024-08-19 19:28:31 +0200 | <glguy> | Once you know what you're doing you can start worrying about implementing other abstract machines like that |
2024-08-19 19:29:10 +0200 | <lisbeths> | krivine machine be only quad-functional its lets say 40 lines if you're me |
2024-08-19 19:29:49 +0200 | <lisbeths> | ill use haskells let to build it |
2024-08-19 19:30:25 +0200 | remexre | (~remexre@user/remexre) |
2024-08-19 19:30:46 +0200 | <lisbeths> | uhhh is let l3xical? |
2024-08-19 19:32:44 +0200 | <glguy> | The variables introduced by let are lexically scoped |
2024-08-19 19:33:10 +0200 | <mauke> | unless you cheat |
2024-08-19 19:36:08 +0200 | danse-nr3 | (~danse-nr3@user/danse-nr3) () |
2024-08-19 19:36:10 +0200 | <EvanR> | let x = y; y = x in y |
2024-08-19 19:36:47 +0200 | <EvanR> | look y is referenced before it is defined |
2024-08-19 19:36:52 +0200 | <lisbeths> | let does not seem to want in https://usercontent.irccloud-cdn.com/file/AdjCdVbI/Screenshot_2024-08-19-10-35-39-442_com.termux.jpg |
2024-08-19 19:37:17 +0200 | <EvanR> | get rid of do |
2024-08-19 19:37:26 +0200 | <EvanR> | you didn't need it before either |
2024-08-19 19:37:41 +0200 | <EvanR> | or else use the do-version of let |
2024-08-19 19:37:48 +0200 | <EvanR> | which doesn't use in |
2024-08-19 19:37:49 +0200 | <lisbeths> | doh!!!! |
2024-08-19 19:38:07 +0200 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 4.2.2) |
2024-08-19 19:38:42 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Ping timeout: 258 seconds) |
2024-08-19 19:38:59 +0200 | <lisbeths> | success |
2024-08-19 19:43:04 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
2024-08-19 19:53:46 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2024-08-19 19:53:54 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) |
2024-08-19 19:58:23 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-08-19 20:03:57 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds) |
2024-08-19 20:04:26 +0200 | <monochrom> | Yeah Haskell is lexically scoped. |
2024-08-19 20:05:07 +0200 | <monochrom> | I had some fun showing students that bash's "local" is dynamically scoped. They were horrified. |
2024-08-19 20:06:37 +0200 | <monochrom> | On the bright side, I also had some fun using dynamic scoping to explain free theorems, as in explaining how to define the relation for a forall type. |
2024-08-19 20:07:20 +0200 | <monochrom> | (The only application of dynamic scoping I have personally identified so far.) |
2024-08-19 20:08:34 +0200 | <mauke> | could've shown them perl, too |
2024-08-19 20:10:23 +0200 | <monochrom> | My course doesn't have time to teach perl. :) |
2024-08-19 20:10:42 +0200 | <monochrom> | But OK, 2 decades ago the old version of that course included Perl. |
2024-08-19 20:10:43 +0200 | <mauke> | perl (around version 2? 3? not sure) started with 'local' and dynamic scoping, then perl 5 added 'my', which declares proper lexically scoped variables |
2024-08-19 20:11:10 +0200 | <monochrom> | Ah. I think I learned Perl 5 only. |
2024-08-19 20:11:32 +0200 | <mauke> | perl 5 is where it became a real programming language :-) |
2024-08-19 20:12:18 +0200 | <mauke> | adding local variables, general data structures, objects/methods/classes, first-class functions, and all the fun stuff |
2024-08-19 20:13:23 +0200 | <mauke> | or you could go the Common Lisp route where LET creates either a lexical or a dynamic binding, depending on whether the identifier in question has the funny bit set |
2024-08-19 20:13:42 +0200 | <mauke> | so you can never tell what (LET X ...) does in isolation |
2024-08-19 20:14:09 +0200 | <mauke> | ; er, that's (LET ((X 42)) ...), I think |
2024-08-19 20:17:17 +0200 | <monochrom> | Yikes funny bit. |
2024-08-19 20:17:45 +0200 | <monochrom> | Yeah the syntax is (let ((var1 expr1) (var2 expr2) ...) body) |
2024-08-19 20:18:32 +0200 | <monochrom> | Always looks like more parens when you just want one variable, and forget that the syntax is designed to accomodate more. |
2024-08-19 20:18:37 +0200 | <mauke> | I don't think "funny bit" is official terminology. I think it's actually called "special" |
2024-08-19 20:20:14 +0200 | <mauke> | anyway, Common Lisp is great when you really need the semantics of your local bindings to depend on the exact identifiers you use |
2024-08-19 20:21:41 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) (Ping timeout: 248 seconds) |
2024-08-19 20:22:55 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) |
2024-08-19 20:24:18 +0200 | flukiluke | (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Ping timeout: 276 seconds) |
2024-08-19 20:25:56 +0200 | troydm | (~troydm@user/troydm) |
2024-08-19 20:27:58 +0200 | ss4 | (~wootehfoo@user/wootehfoot) |
2024-08-19 20:31:22 +0200 | flukiluke | (~m-7humut@168.138.14.225) |
2024-08-19 20:31:52 +0200 | nrs-status | (~nrs-statu@190.16.167.62) |
2024-08-19 20:32:17 +0200 | Umeaboy | (~Umeaboy@94-255-145-133.cust.bredband2.com) |
2024-08-19 20:33:44 +0200 | ss4 | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2024-08-19 20:34:41 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 20:47:07 +0200 | scubagear | (scubagear@gateway/vpn/protonvpn/scubagear) (Ping timeout: 244 seconds) |
2024-08-19 20:48:45 +0200 | flukiluke | (~m-7humut@168.138.14.225) (Ping timeout: 252 seconds) |
2024-08-19 20:49:07 +0200 | scubagear | (scubagear@gateway/vpn/protonvpn/scubagear) |
2024-08-19 20:49:42 +0200 | flukiluke | (~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) |
2024-08-19 20:56:12 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) (Quit: WeeChat 4.4.0) |
2024-08-19 20:56:28 +0200 | m1dnight | (~christoph@78-20-63-126.access.telenet.be) |
2024-08-19 21:01:20 +0200 | lockna | (~lockna@2a01:4f8:10b:14f1::2) (Read error: Connection reset by peer) |
2024-08-19 21:04:35 +0200 | target_i | (~target_i@user/target-i/x-6023099) |
2024-08-19 21:04:56 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
2024-08-19 21:18:44 +0200 | <Inst> | monochrom, re that easy case |
2024-08-19 21:18:58 +0200 | peterbecich | (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
2024-08-19 21:19:06 +0200 | <Inst> | hmmm, i'm wondering if it's possible to express that concept using fix |
2024-08-19 21:19:45 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
2024-08-19 21:21:41 +0200 | <monochrom> | Tautologically and superficially, all programs can be expressed using fix. |
2024-08-19 21:23:06 +0200 | <c_wraith> | (fix const) (the rest of the program) |
2024-08-19 21:23:07 +0200 | <monochrom> | Example: "f = True" can be rewritten as "f = fix (const True)". |
2024-08-19 21:24:00 +0200 | <c_wraith> | whoops, I needed a . in there |
2024-08-19 21:24:32 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 21:27:23 +0200 | <int-e> | monochrom: why not const True fix |
2024-08-19 21:30:14 +0200 | <ncf> | :t fix . const |
2024-08-19 21:30:15 +0200 | <lambdabot> | c -> c |
2024-08-19 21:30:17 +0200 | <ncf> | :t ($ fix) . const |
2024-08-19 21:30:18 +0200 | <lambdabot> | c -> c |
2024-08-19 21:30:24 +0200 | <ncf> | fun |
2024-08-19 21:34:34 +0200 | <ncf> | const <*> f = id @(domain of f) |
2024-08-19 21:37:22 +0200 | <monochrom> | Can we meet in the middle? const (fix (const True)) fix >:) |
2024-08-19 21:38:16 +0200 | billchenchina- | (~billchenc@2a0d:2580:ff0c:1:4a35:c1dc:b9b7:67d8) |
2024-08-19 21:38:19 +0200 | <monochrom> | OK, I have found that I have a serious error in my type inference tutorial. |
2024-08-19 21:39:14 +0200 | <monochrom> | Coincidentally I am planning to give the exam question "infer the type of \f -> let x = f x in x", and when solving it myself I saw my omission. |
2024-08-19 21:39:39 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 21:40:15 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Quit: ash3en) |
2024-08-19 21:40:35 +0200 | <monochrom> | For a recursive equation like "x = f x", you create an unknown ux for x, infer "f x" under x::ux, unify the answer with ux, then you can generalize. |
2024-08-19 21:40:45 +0200 | <monochrom> | I forgot "unify the answer with ux". |
2024-08-19 21:41:49 +0200 | <mauke> | what does that give you? (a -> a) -> b? |
2024-08-19 21:41:50 +0200 | <monochrom> | So now the inference procedure I taught is broken. (\f -> let x = f x in x) becomes wrongly (ux -> ufx) -> ufx |
2024-08-19 21:41:55 +0200 | <mauke> | oh |
2024-08-19 21:42:14 +0200 | euleritian | (~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) (Ping timeout: 260 seconds) |
2024-08-19 21:42:29 +0200 | <monochrom> | Now I have to think up a different exam question :( |
2024-08-19 21:42:55 +0200 | euleritian | (~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) |
2024-08-19 21:43:01 +0200 | <c_wraith> | ask them to infer the type of loeb |
2024-08-19 21:46:19 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2024-08-19 21:52:33 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 22:00:13 +0200 | <scubagear> | Any recommended FRP libraries for games? Seems Yampa or Dunai can do SDL. Reflex seems a popular FRP library but it looks like it's more oriented to web apps. |
2024-08-19 22:00:19 +0200 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
2024-08-19 22:02:10 +0200 | bilegeek | (~bilegeek@2600:1008:b0a9:82d6:950d:cb91:c8d0:13a5) |
2024-08-19 22:03:54 +0200 | nrs-status | (~nrs-statu@190.16.167.62) (Quit: Client closed) |
2024-08-19 22:05:54 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 258 seconds) |
2024-08-19 22:08:12 +0200 | euleritian | (~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) (Ping timeout: 258 seconds) |
2024-08-19 22:08:32 +0200 | euleritian | (~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) |
2024-08-19 22:08:34 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) |
2024-08-19 22:08:39 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 22:09:15 +0200 | ash3en | (~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Client Quit) |
2024-08-19 22:14:51 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2024-08-19 22:15:29 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2024-08-19 22:16:02 +0200 | hiredman | (~hiredman@frontier1.downey.family) |
2024-08-19 22:16:49 +0200 | foul_owl_ | (~kerry@185.219.141.164) (Ping timeout: 248 seconds) |
2024-08-19 22:19:27 +0200 | <scubagear> | Hm seems you could actually do SDL2 with Reflex. That's interesting. |
2024-08-19 22:20:13 +0200 | foul_owl | (~kerry@174-21-147-232.tukw.qwest.net) |
2024-08-19 22:21:11 +0200 | JuanDaugherty | (~juan@user/JuanDaugherty) |
2024-08-19 22:24:18 +0200 | mikess | (~mikess@user/mikess) |
2024-08-19 22:28:45 +0200 | Blasius_ | (~Blasius@5ec169d9.skybroadband.com) |
2024-08-19 22:31:47 +0200 | Blasius | (~Blasius@5ec169d9.skybroadband.com) (Ping timeout: 255 seconds) |
2024-08-19 22:39:30 +0200 | euleritian | (~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) (Ping timeout: 276 seconds) |
2024-08-19 22:40:02 +0200 | euleritian | (~euleritia@dynamic-176-007-196-137.176.7.pool.telefonica.de) |
2024-08-19 22:46:59 +0200 | euleritian | (~euleritia@dynamic-176-007-196-137.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
2024-08-19 22:47:16 +0200 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2024-08-19 22:48:45 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2024-08-19 22:52:04 +0200 | Achylles | (~Achylles@45.182.57.14) |
2024-08-19 22:55:20 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
2024-08-19 22:55:57 +0200 | michalz | (~michalz@185.246.207.193) (Remote host closed the connection) |
2024-08-19 22:57:19 +0200 | target_i | (~target_i@user/target-i/x-6023099) (Quit: leaving) |
2024-08-19 22:59:30 +0200 | <[exa]> | Is there a warp/wai middleware that would make sure there's not too many concurrent requests being processed at once? |
2024-08-19 22:59:58 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
2024-08-19 23:00:19 +0200 | <monochrom> | Would it be some kind of thread pool? |
2024-08-19 23:00:55 +0200 | <monochrom> | Can it be solved by hardware? I.e., buy a 20-year-old 486. >:) |
2024-08-19 23:01:08 +0200 | <monochrom> | Use a dial-up modem. >:) |
2024-08-19 23:01:43 +0200 | <monochrom> | Wait, 486 is 30-year-old. |
2024-08-19 23:02:00 +0200 | <Rembane> | The classic off by a decade error |
2024-08-19 23:02:38 +0200 | <monochrom> | Time flies like a morphism. Fruit flies like an object. |
2024-08-19 23:03:09 +0200 | <[exa]> | let's emulate the 486 in software tho |
2024-08-19 23:04:28 +0200 | <Rembane> | Brrrrrrrrrrrrm |
2024-08-19 23:04:55 +0200 | <[exa]> | my point is that with literally each web service I was running ever, we had to very carefully make sure that there are limits and it's not going to go explode (e.g. cause OOM) by someone simply opening enough connections and making them wait in the right moment.. now, looking at wai, warp, scotty, etc., there's absolutely no real treatise of these |
2024-08-19 23:05:00 +0200 | <[exa]> | so kinda concerned |
2024-08-19 23:05:29 +0200 | <[exa]> | perhaps I'm missing something obvious (is warp somehow magically resistant to this kind of DoS?) |
2024-08-19 23:05:39 +0200 | <monochrom> | I think you do one-thread-per-client and limit that with a thread pool. |
2024-08-19 23:05:40 +0200 | <EvanR> | it's probably not resistant |
2024-08-19 23:05:46 +0200 | <EvanR> | security is hard |
2024-08-19 23:06:06 +0200 | <EvanR> | DOS is pretty easy |
2024-08-19 23:07:53 +0200 | son0p | (~ff@2800:e2:f80:ee7::5) |
2024-08-19 23:07:54 +0200 | <monochrom> | You also have on-call experts who block IP addresses at the firewall/router in real time. |
2024-08-19 23:08:07 +0200 | <monochrom> | maybe s/on-call/on-duty/ |
2024-08-19 23:08:08 +0200 | <[exa]> | monochrom: any fav implementation of the threadpool? or I just wing it with a TChan or so? |
2024-08-19 23:08:21 +0200 | <EvanR> | MVar [ThreadID] |
2024-08-19 23:08:26 +0200 | <monochrom> | I don't have one. I haven't done this. |
2024-08-19 23:08:27 +0200 | <EvanR> | lol |
2024-08-19 23:09:01 +0200 | <[exa]> | monochrom: yeah btw we've had these experts |
2024-08-19 23:09:10 +0200 | <EvanR> | you don't really need a thread pool in concurrent haskell, you just spawn forkIO threads in the acceptor thread using your connection limit strategy |
2024-08-19 23:09:26 +0200 | <EvanR> | java uses threadpools because they use "heavy weight" OS threads |
2024-08-19 23:09:39 +0200 | <EvanR> | which are apparently slow enough to overengineer threadpools for everything |
2024-08-19 23:09:54 +0200 | <[exa]> | EvanR: "connection limit strategy" is there something ready for this? |
2024-08-19 23:10:05 +0200 | <[exa]> | maybe I just need to find where is the connection limiting knob for warp :D |
2024-08-19 23:10:22 +0200 | <EvanR> | ok "it must be a wai middleware" makes it less trivial |
2024-08-19 23:10:56 +0200 | <[exa]> | monochrom: you don't know why you pay them for like half a year and then the dns DDoS comes, and they have the passwords from the AS blackhole :D |
2024-08-19 23:11:11 +0200 | <[exa]> | EvanR: doesn't really need to be a middleware |
2024-08-19 23:11:24 +0200 | <[exa]> | more like anything that I don't need to do from scratch again :D |
2024-08-19 23:12:21 +0200 | <[exa]> | otoh the MVar with thread IDs (+ an integer) might fit in like 10 lines |
2024-08-19 23:12:38 +0200 | <EvanR> | that was basically a joke |
2024-08-19 23:12:51 +0200 | [exa] | sad |
2024-08-19 23:12:55 +0200 | <EvanR> | no need to hold onto dormant thread IDs |
2024-08-19 23:13:01 +0200 | <EvanR> | just forkIO on demand |
2024-08-19 23:13:27 +0200 | <EvanR> | but this is something that would be done inside the wai middleware |
2024-08-19 23:13:39 +0200 | <EvanR> | aiui |
2024-08-19 23:15:01 +0200 | <EvanR> | the core Var I imagine is a TVar Int saying how many free slots are left, each request thread being wrapped in a finally which bumps the Int back |
2024-08-19 23:15:26 +0200 | <EvanR> | which if the acceptor thread is waiting for 0 to go above 0, wakes up the acceptor thread |
2024-08-19 23:16:54 +0200 | <[exa]> | ok there's 2 WAI ratelimiting middlewares in hackage but no concurrency limiting one |
2024-08-19 23:17:30 +0200 | <[exa]> | I'll assume that I'm searching wrong for today and see tomorrow, if there's still nothing I'll just code this :D |
2024-08-19 23:17:35 +0200 | raehik | (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 258 seconds) |
2024-08-19 23:17:36 +0200 | <[exa]> | EvanR monochrom: thanks a lot! |
2024-08-19 23:17:53 +0200 | Square | (~Square@user/square) |
2024-08-19 23:21:30 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
2024-08-19 23:23:54 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds) |
2024-08-19 23:24:44 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2024-08-19 23:33:57 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2024-08-19 23:34:14 +0200 | jcarpenter2 | (~lol@2603:3016:1e01:b980:1879:8876:e512:52cf) (Ping timeout: 260 seconds) |
2024-08-19 23:35:59 +0200 | lxsameer | (~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds) |
2024-08-19 23:41:21 +0200 | Vajb | (~Vajb@n4v0h48xv84fiqflept-1.v6.elisa-mobile.fi) (Ping timeout: 258 seconds) |
2024-08-19 23:42:53 +0200 | Vajb | (~Vajb@85-76-15-1-nat.elisa-mobile.fi) |
2024-08-19 23:59:31 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |