2024/08/19

2024-08-19 00:03:12 +0200euphores(~SASL_euph@user/euphores)
2024-08-19 00:07:04 +0200troojg(~troojg@user/troojg)
2024-08-19 00:15:18 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds)
2024-08-19 00:16:20 +0200mikess(~mikess@user/mikess) ()
2024-08-19 00:25:29 +0200euleritian(~euleritia@dynamic-176-006-139-095.176.6.pool.telefonica.de)
2024-08-19 00:34:39 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2024-08-19 00:38:40 +0200califax(~califax@user/califx) (Remote host closed the connection)
2024-08-19 00:38:57 +0200califax(~califax@user/califx)
2024-08-19 00:39:58 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2024-08-19 00:43:00 +0200EvanR(~EvanR@user/evanr) (Quit: Leaving)
2024-08-19 00:56:02 +0200bilegeek(~bilegeek@2600:1008:b095:ace0:e956:a894:c484:bbc7)
2024-08-19 00:56:52 +0200ephilalethes(~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving)
2024-08-19 00:58:17 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-08-19 01:02:41 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 01:02:41 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 01:02:41 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 01:08:54 +0200EvanR(~EvanR@user/evanr)
2024-08-19 01:09:15 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 276 seconds)
2024-08-19 01:10:06 +0200ZharMeny(~user@user/ZharMeny) (Ping timeout: 258 seconds)
2024-08-19 01:11:25 +0200ZharMeny(~user@user/ZharMeny)
2024-08-19 01:11:31 +0200machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net)
2024-08-19 01:12:47 +0200euleritian(~euleritia@dynamic-176-006-139-095.176.6.pool.telefonica.de) (Ping timeout: 258 seconds)
2024-08-19 01:16:25 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 01:16:25 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 01:16:25 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 01:27:27 +0200RedFlamingos(~RedFlamin@user/RedFlamingos) (Remote host closed the connection)
2024-08-19 01:27:52 +0200naxx(~brandt@177.191-pool-nas4-sc.sccoast.net) (Quit: WeeChat 4.4.0)
2024-08-19 01:33:33 +0200troojg(~troojg@user/troojg) (Remote host closed the connection)
2024-08-19 01:43:19 +0200Ranhir(~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
2024-08-19 01:48:54 +0200xff0x(~xff0x@2405:6580:b080:900:f7ea:ebc:48e7:5791) (Ping timeout: 260 seconds)
2024-08-19 01:49:19 +0200ZharMeny(~user@user/ZharMeny) (Ping timeout: 260 seconds)
2024-08-19 01:51:25 +0200euleritian(~euleritia@dynamic-176-000-155-211.176.0.pool.telefonica.de)
2024-08-19 01:52:55 +0200tomku(~tomku@user/tomku) (Ping timeout: 264 seconds)
2024-08-19 01:53:42 +0200Ranhir(~Ranhir@157.97.53.139)
2024-08-19 01:55:55 +0200acidjnk(~acidjnk@p200300d6e72cfb28316c3495bdea7799.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2024-08-19 01:56:43 +0200spew(~spew@201.141.102.132) (Remote host closed the connection)
2024-08-19 01:57:53 +0200euleritian(~euleritia@dynamic-176-000-155-211.176.0.pool.telefonica.de) (Ping timeout: 255 seconds)
2024-08-19 01:58:18 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2024-08-19 01:58:21 +0200euleritian(~euleritia@dynamic-176-004-132-012.176.4.pool.telefonica.de)
2024-08-19 01:59:48 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-19 02:04:16 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 02:04:16 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 02:04:16 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 02:06:05 +0200tt12310978324(~tt1231@syn-075-185-104-199.res.spectrum.com) (Quit: The Lounge - https://thelounge.chat)
2024-08-19 02:07:03 +0200tt123109783243(~tt1231@syn-075-185-104-199.res.spectrum.com)
2024-08-19 02:07:12 +0200tt123109783243(~tt1231@syn-075-185-104-199.res.spectrum.com) (Read error: Connection reset by peer)
2024-08-19 02:08:11 +0200tt123109783243(~tt1231@syn-075-185-104-199.res.spectrum.com)
2024-08-19 02:10:24 +0200wroathe(~wroathe@user/wroathe) (Quit: Reconnecting)
2024-08-19 02:10:30 +0200wroathe_(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 02:10:38 +0200wroathe_(~wroathe@mobile-166-175-56-161.mycingular.net) ()
2024-08-19 02:14:05 +0200euleritian(~euleritia@dynamic-176-004-132-012.176.4.pool.telefonica.de) (Ping timeout: 255 seconds)
2024-08-19 02:15:49 +0200tt123109783243(~tt1231@syn-075-185-104-199.res.spectrum.com) (Ping timeout: 248 seconds)
2024-08-19 02:15:59 +0200euleritian(~euleritia@dynamic-176-001-130-229.176.1.pool.telefonica.de)
2024-08-19 02:20:05 +0200euleritian(~euleritia@dynamic-176-001-130-229.176.1.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-08-19 02:20:33 +0200euleritian(~euleritia@dynamic-176-004-137-004.176.4.pool.telefonica.de)
2024-08-19 02:21:30 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
2024-08-19 02:25:49 +0200paddymahoney(~paddymaho@pool-99-250-30-88.cpe.net.cable.rogers.com) (Ping timeout: 252 seconds)
2024-08-19 02:27:33 +0200euleritian(~euleritia@dynamic-176-004-137-004.176.4.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-08-19 02:27:57 +0200euleritian(~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 +0200euleritian(~euleritia@dynamic-176-007-157-135.176.7.pool.telefonica.de) (Ping timeout: 252 seconds)
2024-08-19 02:34:43 +0200euleritian(~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 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 02:46:09 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 02:46:09 +0200wroathe(~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 +0200bravespear|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 +0200Feuermagier(~Feuermagi@user/feuermagier)
2024-08-19 03:01:11 +0200 <geekosaur> true if you're after amusement 😛
2024-08-19 03:02:39 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection)
2024-08-19 03:05:01 +0200xff0x(~xff0x@om126236143244.32.openmobile.ne.jp)
2024-08-19 03:08:20 +0200bravespear|3(~Ranhir@157.97.53.139)
2024-08-19 03:11:50 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
2024-08-19 03:14:09 +0200euleritian(~euleritia@dynamic-176-007-194-036.176.7.pool.telefonica.de) (Ping timeout: 252 seconds)
2024-08-19 03:15:03 +0200euleritian(~euleritia@176.2.65.94)
2024-08-19 03:15:48 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2024-08-19 03:22:12 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 03:22:12 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 03:22:12 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 03:23:36 +0200wroathe(~wroathe@user/wroathe) (Client Quit)
2024-08-19 03:29:53 +0200euleritian(~euleritia@176.2.65.94) (Ping timeout: 248 seconds)
2024-08-19 03:30:48 +0200euleritian(~euleritia@dynamic-176-007-194-180.176.7.pool.telefonica.de)
2024-08-19 03:32:26 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 272 seconds)
2024-08-19 03:43:56 +0200euleritian(~euleritia@dynamic-176-007-194-180.176.7.pool.telefonica.de) (Ping timeout: 252 seconds)
2024-08-19 03:45:10 +0200euleritian(~euleritia@dynamic-176-002-076-203.176.2.pool.telefonica.de)
2024-08-19 03:49:11 +0200tomku(~tomku@user/tomku)
2024-08-19 03:58:10 +0200euleritian(~euleritia@dynamic-176-002-076-203.176.2.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-08-19 03:58:53 +0200euleritian(~euleritia@dynamic-176-001-219-094.176.1.pool.telefonica.de)
2024-08-19 04:02:31 +0200brandt(~brandt@177.191-pool-nas4-sc.sccoast.net)
2024-08-19 04:02:46 +0200dyniec(~dyniec@dybiec.info) (Quit: WeeChat 4.2.2)
2024-08-19 04:03:21 +0200euleritian(~euleritia@dynamic-176-001-219-094.176.1.pool.telefonica.de) (Ping timeout: 252 seconds)
2024-08-19 04:04:04 +0200euleritian(~euleritia@176.2.74.33)
2024-08-19 04:08:11 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 04:18:04 +0200td_(~td@i53870932.versanet.de) (Ping timeout: 260 seconds)
2024-08-19 04:19:45 +0200td_(~td@83.135.9.9)
2024-08-19 04:32:57 +0200liamzy__Inst
2024-08-19 04:38:11 +0200xff0x(~xff0x@om126236143244.32.openmobile.ne.jp) (Read error: Connection reset by peer)
2024-08-19 04:42:25 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 04:42:25 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 04:42:25 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 04:42:44 +0200spew(~spew@201.141.102.132)
2024-08-19 04:42:57 +0200euleritian(~euleritia@176.2.74.33) (Ping timeout: 252 seconds)
2024-08-19 04:43:32 +0200euleritian(~euleritia@dynamic-176-003-000-241.176.3.pool.telefonica.de)
2024-08-19 04:43:58 +0200tcard_(~tcard@2400:4051:5801:7500:1e90:74c3:2754:ce8a)
2024-08-19 04:44:19 +0200xff0x(~xff0x@om126236143244.32.openmobile.ne.jp)
2024-08-19 04:46:38 +0200tcard__(~tcard@p3696129-ipxg22301hodogaya.kanagawa.ocn.ne.jp) (Ping timeout: 255 seconds)
2024-08-19 04:58:31 +0200slack1256(~slack1256@2803:c600:5111:8029:8ec6:4309:d4fa:d427)
2024-08-19 05:01:18 +0200xff0x(~xff0x@om126236143244.32.openmobile.ne.jp) (Read error: Connection reset by peer)
2024-08-19 05:01:44 +0200euleritian(~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 +0200euleritian(~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 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2024-08-19 05:04:14 +0200 <slack1256> (not* that you should)
2024-08-19 05:04:22 +0200bilegeek(~bilegeek@2600:1008:b095:ace0:e956:a894:c484:bbc7) (Quit: Leaving)
2024-08-19 05:08:15 +0200spew(~spew@201.141.102.132) (Remote host closed the connection)
2024-08-19 05:08:24 +0200spew(~spew@201.141.102.132)
2024-08-19 05:10:04 +0200euleritian(~euleritia@dynamic-176-003-006-020.176.3.pool.telefonica.de) (Ping timeout: 258 seconds)
2024-08-19 05:10:11 +0200euleritian(~euleritia@dynamic-176-006-135-085.176.6.pool.telefonica.de)
2024-08-19 05:10:27 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 258 seconds)
2024-08-19 05:16:41 +0200Lord_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 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2024-08-19 05:26:54 +0200machinedgod(~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 +0200euleritian(~euleritia@dynamic-176-006-135-085.176.6.pool.telefonica.de) (Ping timeout: 258 seconds)
2024-08-19 05:27:56 +0200euleritian(~euleritia@dynamic-176-001-218-057.176.1.pool.telefonica.de)
2024-08-19 05:29:37 +0200rini(~rini@user/rini) (Remote host closed the connection)
2024-08-19 05:32:05 +0200tomku(~tomku@user/tomku) (Ping timeout: 248 seconds)
2024-08-19 05:32:19 +0200tomku(~tomku@user/tomku)
2024-08-19 05:32:29 +0200spew(~spew@201.141.102.132) (Remote host closed the connection)
2024-08-19 05:32:57 +0200rini(~rini@user/rini)
2024-08-19 05:35:22 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2024-08-19 05:40:53 +0200euleritian(~euleritia@dynamic-176-001-218-057.176.1.pool.telefonica.de) (Ping timeout: 252 seconds)
2024-08-19 05:48:16 +0200aforemny(~aforemny@2001:9e8:6cd5:1b00:72fb:902d:5353:4bcd)
2024-08-19 05:49:33 +0200aforemny_(~aforemny@2001:9e8:6cf4:c700:587f:d6ea:1b3:5684) (Ping timeout: 258 seconds)
2024-08-19 05:54:05 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 05:56:36 +0200euleritian(~euleritia@dynamic-176-002-076-000.176.2.pool.telefonica.de)
2024-08-19 06:03:14 +0200euleritian(~euleritia@dynamic-176-002-076-000.176.2.pool.telefonica.de) (Ping timeout: 260 seconds)
2024-08-19 06:03:49 +0200euleritian(~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 +0200euleritian(~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 06:13:24 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-19 06:17:07 +0200xff0x(~xff0x@2405:6580:b080:900:e0e6:dea5:baf7:2386)
2024-08-19 06:19:50 +0200euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2024-08-19 06:23:40 +0200spew(~spew@201.141.102.132)
2024-08-19 06:27:22 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-19 06:28:25 +0200euphores(~SASL_euph@user/euphores)
2024-08-19 06:30:49 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-08-19 06:30:58 +0200euleritian(~euleritia@77.22.252.56)
2024-08-19 06:38:04 +0200euleritian(~euleritia@77.22.252.56) (Ping timeout: 260 seconds)
2024-08-19 06:39:02 +0200slack1256(~slack1256@2803:c600:5111:8029:8ec6:4309:d4fa:d427) (Remote host closed the connection)
2024-08-19 06:39:13 +0200euleritian(~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de)
2024-08-19 06:44:37 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
2024-08-19 06:53:50 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 272 seconds)
2024-08-19 06:56:30 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 07:03:26 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
2024-08-19 07:03:57 +0200euleritian(~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 07:04:15 +0200euleritian(~euleritia@77.22.252.56)
2024-08-19 07:04:53 +0200michalz(~michalz@185.246.207.193)
2024-08-19 07:06:38 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 07:11:35 +0200euleritian(~euleritia@77.22.252.56) (Read error: Connection reset by peer)
2024-08-19 07:12:39 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-19 07:12:41 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Remote host closed the connection)
2024-08-19 07:13:23 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 07:14:36 +0200Square3(~Square4@user/square)
2024-08-19 07:15:40 +0200dolio(~dolio@130.44.140.168) (Quit: ZNC 1.8.2 - https://znc.in)
2024-08-19 07:17:37 +0200Square(~Square@user/square) (Ping timeout: 248 seconds)
2024-08-19 07:17:42 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2024-08-19 07:17:50 +0200Square3Square
2024-08-19 07:20:02 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 07:21:24 +0200dolio(~dolio@130.44.140.168)
2024-08-19 07:24:52 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds)
2024-08-19 07:25:00 +0200euleritian(~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de)
2024-08-19 07:29:10 +0200spew(~spew@201.141.102.132) (Remote host closed the connection)
2024-08-19 07:30:04 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2024-08-19 07:31:33 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds)
2024-08-19 07:33:07 +0200jinsun(~jinsun@user/jinsun) (Ping timeout: 264 seconds)
2024-08-19 07:34:48 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2024-08-19 07:37:31 +0200brandt(~brandt@177.191-pool-nas4-sc.sccoast.net) (Quit: WeeChat 4.4.0)
2024-08-19 08:16:41 +0200ubert(~Thunderbi@91.141.68.38.wireless.dyn.drei.com)
2024-08-19 08:34:21 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e)
2024-08-19 08:51:38 +0200terrorjack4(~terrorjac@static.163.82.63.178.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat)
2024-08-19 08:54:00 +0200terrorjack4(~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 +0200acidjnk(~acidjnk@p200300d6e72cfb5259affcc514115865.dip0.t-ipconnect.de)
2024-08-19 09:12:04 +0200troydm(~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 +0200CiaoSen(~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 +0200euleritian(~euleritia@dynamic-176-007-192-253.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 09:34:53 +0200euleritian(~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 +0200lxsameer(~lxsameer@Serene/lxsameer)
2024-08-19 09:52:20 +0200kuribas(~user@ptr-17d51endnrlvux1kiym.18120a2.ip6.access.telenet.be)
2024-08-19 09:57:27 +0200machinedgod(~machinedg@d50-99-47-73.abhsia.telus.net)
2024-08-19 10:02:11 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-08-19 10:05:13 +0200cfricke(~cfricke@user/cfricke)
2024-08-19 10:15:17 +0200__monty__(~toonn@user/toonn)
2024-08-19 10:15:36 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2024-08-19 10:17:54 +0200gehmehgeh(~user@user/gehmehgeh)
2024-08-19 10:21:26 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds)
2024-08-19 10:30:03 +0200ThePenguin(~ThePengui@cust-95-80-24-166.csbnet.se) (Remote host closed the connection)
2024-08-19 10:30:38 +0200ThePenguin(~ThePengui@cust-95-80-24-166.csbnet.se)
2024-08-19 10:32:31 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2024-08-19 10:33:50 +0200JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-19 10:35:30 +0200ubert(~Thunderbi@91.141.68.38.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2024-08-19 10:37:29 +0200gehmehgehgmg
2024-08-19 10:42:15 +0200danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-19 10:45:56 +0200murgeljm(~murgeljm@APN-122-12-44-gprs.simobil.net)
2024-08-19 10:46:12 +0200murgeljm(~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 +0200CiaoSen(~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) (Ping timeout: 252 seconds)
2024-08-19 11:22:22 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-19 11:23:30 +0200euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2024-08-19 11:29:04 +0200euphores(~SASL_euph@user/euphores)
2024-08-19 11:35:02 +0200Digitteknohippie(~user@user/digit)
2024-08-19 11:35:45 +0200Digit(~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 +0200ash3en(~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 +0200DigitteknohippieDigit
2024-08-19 11:41:17 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
2024-08-19 11:41:26 +0200ash3en(~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 +0200int-emade the same assumption as ncf.
2024-08-19 11:53:21 +0200ghodawalaaman(~thelounge@user/thelounge8234) (Quit: The Lounge - https://thelounge.chat)
2024-08-19 11:54:23 +0200ghodawalaaman(~thelounge@user/thelounge8234)
2024-08-19 11:55:10 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Ping timeout: 265 seconds)
2024-08-19 12:09:34 +0200rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2024-08-19 12:10:24 +0200rembo10(~rembo10@main.remulis.com)
2024-08-19 12:17:07 +0200ubert(~Thunderbi@91.141.68.38.wireless.dyn.drei.com)
2024-08-19 12:25:26 +0200doyougnu(~doyougnu@syn-045-046-170-068.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in)
2024-08-19 12:26:41 +0200bgamari(~bgamari@64.223.233.64) (Quit: ZNC 1.8.2 - https://znc.in)
2024-08-19 12:27:11 +0200doyougnu(~doyougnu@syn-045-046-170-068.res.spectrum.com)
2024-08-19 12:28:06 +0200bgamari(~bgamari@64.223.233.64)
2024-08-19 12:42:19 +0200m1dnight(~christoph@78-20-63-126.access.telenet.be) (Quit: WeeChat 4.3.5)
2024-08-19 12:42:46 +0200m1dnight(~christoph@78-20-63-126.access.telenet.be)
2024-08-19 12:45:20 +0200m1dnight(~christoph@78-20-63-126.access.telenet.be) (Client Quit)
2024-08-19 12:45:36 +0200m1dnight(~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 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-08-19 12:50:33 +0200euleritian(~euleritia@77.22.252.56)
2024-08-19 12:51:38 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2024-08-19 12:51:55 +0200Smiles(uid551636@id-551636.lymington.irccloud.com)
2024-08-19 12:59:32 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 244 seconds)
2024-08-19 13:00:07 +0200danse-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 +0200euleritian(~euleritia@77.22.252.56) (Ping timeout: 244 seconds)
2024-08-19 13:15:29 +0200euleritian(~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 +0200euleritian(~euleritia@dynamic-176-006-146-067.176.6.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-08-19 13:20:17 +0200euleritian(~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 +0200cfricke(~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 +0200Blasius(~Blasius@5ec169d9.skybroadband.com) (Ping timeout: 248 seconds)
2024-08-19 13:34:09 +0200raym(~ray@user/raym) (Ping timeout: 248 seconds)
2024-08-19 13:34:16 +0200waleee(~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 +0200tomku(~tomku@user/tomku) (Ping timeout: 252 seconds)
2024-08-19 13:37:20 +0200 <lambdabot> *Exception: Prelude.undefined
2024-08-19 13:37:30 +0200rosco(~rosco@175.136.158.234)
2024-08-19 13:37:33 +0200tomku(~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 +0200raym(~ray@user/raym)
2024-08-19 13:49:26 +0200Miroboru(~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 +0200CiaoSen(~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da)
2024-08-19 14:06:03 +0200Inst(~Inst@user/Inst) (Read error: Connection reset by peer)
2024-08-19 14:09:23 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e)
2024-08-19 14:12:23 +0200euleritian(~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 14:12:41 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-19 14:14:25 +0200Inst(~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 +0200cfricke(~cfricke@user/cfricke) (Ping timeout: 245 seconds)
2024-08-19 14:35:03 +0200ash3en(~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 +0200ZharMeny(~user@user/ZharMeny)
2024-08-19 14:38:14 +0200ZharMeny(~user@user/ZharMeny) (Read error: Connection reset by peer)
2024-08-19 14:38:19 +0200ZharMeny`(~user@user/ZharMeny)
2024-08-19 14:38:33 +0200youthlic(~Thunderbi@user/youthlic)
2024-08-19 14:40:34 +0200ZharMeny`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 +0200waleee(~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 +0200tomku(~tomku@user/tomku) (Ping timeout: 264 seconds)
2024-08-19 15:03:58 +0200tomku(~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 +0200Square(~Square4@user/square) (Ping timeout: 272 seconds)
2024-08-19 15:15:20 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net)
2024-08-19 15:15:20 +0200wroathe(~wroathe@mobile-166-175-56-161.mycingular.net) (Changing host)
2024-08-19 15:15:20 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 15:20:49 +0200ubert(~Thunderbi@91.141.68.38.wireless.dyn.drei.com) (Ping timeout: 248 seconds)
2024-08-19 15:27:19 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2024-08-19 15:29:14 +0200noctux(~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 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net)
2024-08-19 15:34:16 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host)
2024-08-19 15:34:16 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 15:36:34 +0200ystael(~ystael@user/ystael)
2024-08-19 15:39:12 +0200danse-nr3(~danse-nr3@user/danse-nr3)
2024-08-19 15:39:30 +0200noctux(~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 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-08-19 15:50:15 +0200noctux(~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 +0200noctux(~noctux@user/noctux)
2024-08-19 15:53:41 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 258 seconds)
2024-08-19 15:54:12 +0200euleritian(~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 +0200rosco(~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 +0200noctux(~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 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
2024-08-19 16:06:39 +0200noctux(~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 +0200JuanDaugherty(~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 +0200wroathe(~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 +0200segfaultfizzbuzz(~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 +0200segfaultfizzbuzz(~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 +0200cfricke(~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 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net)
2024-08-19 16:34:07 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host)
2024-08-19 16:34:07 +0200wroathe(~wroathe@user/wroathe)
2024-08-19 16:39:18 +0200CiaoSen(~Jura@2a05:5800:247:9200:ca4b:d6ff:fec1:99da) (Ping timeout: 258 seconds)
2024-08-19 16:39:39 +0200Miroboru(~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 +0200wroathe(~wroathe@user/wroathe) (Quit: leaving)
2024-08-19 16:53:45 +0200wroathe(~wroathe@166.175.189.43)
2024-08-19 16:53:45 +0200wroathe(~wroathe@166.175.189.43) (Changing host)
2024-08-19 16:53:45 +0200wroathe(~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 +0200lortabac(~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 +0200segfaultfizzbuzz(~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 +0200euleritian(~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 +0200euleritian(~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 +0200terrorjack4(~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 +0200euleritian(~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 +0200terrorjack4(~terrorjac@2a01:4f8:121:32e8::)
2024-08-19 17:10:42 +0200terrorjack4(~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 +0200ChaiTRex(~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 +0200ChaiTRex(~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 +0200euleritian(~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 +0200euleritian(~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 +0200euleritian(~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 +0200wroathe(~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 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net)
2024-08-19 17:19:28 +0200wroathe(~wroathe@mobile-166-175-189-43.mycingular.net) (Changing host)
2024-08-19 17:19:28 +0200wroathe(~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 +0200danse-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 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-08-19 17:25:26 +0200euleritian(~euleritia@dynamic-176-000-011-067.176.0.pool.telefonica.de)
2024-08-19 17:26:11 +0200spew(~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 +0200segfaultfizzbuzz(~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 +0200Blasius(~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 +0200CATS(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 +0200youthlic(~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 +0200CATS(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 +0200terrorjack4(~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 +0200chiselfuse(~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 +0200chiselfuse(~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 +0200wroathe(~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 +0200sprout_(~sprout@84-80-106-227.fixed.kpn.net)
2024-08-19 18:01:18 +0200euleritian(~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 +0200euleritian(~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 +0200sprout_(~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 +0200sprout_(~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 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
2024-08-19 18:05:45 +0200sprout(~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 +0200sprout_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 +0200euleritian(~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 18:08:58 +0200euleritian(~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 +0200CAT_S(apic@brezn3.muc.ccc.de)
2024-08-19 18:10:32 +0200 <EvanR> map followed by reduce
2024-08-19 18:10:57 +0200segfaultfizzbuzz(~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 +0200danse-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 +0200pavonia(~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 +0200segfaultfizzbuzz(~segfaultf@c-73-158-62-240.hsd1.ca.comcast.net) (Ping timeout: 258 seconds)
2024-08-19 18:20:44 +0200jinsun(~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 +0200kuribas(~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 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e)
2024-08-19 18:27:02 +0200segfaultfizzbuzz(~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 +0200dans72065(~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 +0200segfaultfizzbuzz(~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 +0200danse-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 +0200sprout(~sprout@84-80-106-227.fixed.kpn.net) (Quit: leaving)
2024-08-19 18:38:52 +0200sprout(~sprout@84-80-106-227.fixed.kpn.net)
2024-08-19 18:39:36 +0200segfaultfizzbuzz(~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 +0200mesaoptimizer(~mesaoptim@user/PapuaHardyNet) (Quit: nyaa~)
2024-08-19 18:43:37 +0200mesaoptimizer(~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 +0200econo_(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 +0200segfaultfizzbuzz(~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 +0200LukeHoersten(~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 +0200dans72065(~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 +0200danse-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 +0200LukeHoersten(~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 +0200califax(~califax@user/califx) (Remote host closed the connection)
2024-08-19 19:17:58 +0200 <Inst> hmmm
2024-08-19 19:18:02 +0200califax(~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 +0200ash3en(~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 +0200Smiles(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 +0200CrunchyFlakes(~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 +0200tzh(~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 +0200CrunchyFlakes(~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 +0200ash3en(~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 +0200remexre(~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 +0200danse-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 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 4.2.2)
2024-08-19 19:38:42 +0200ash3en(~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 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
2024-08-19 19:53:46 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2024-08-19 19:53:54 +0200euleritian(~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de)
2024-08-19 19:58:23 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-08-19 20:03:57 +0200raehik(~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 +0200euleritian(~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de) (Ping timeout: 248 seconds)
2024-08-19 20:22:55 +0200euleritian(~euleritia@dynamic-176-007-195-049.176.7.pool.telefonica.de)
2024-08-19 20:24:18 +0200flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Ping timeout: 276 seconds)
2024-08-19 20:25:56 +0200troydm(~troydm@user/troydm)
2024-08-19 20:27:58 +0200ss4(~wootehfoo@user/wootehfoot)
2024-08-19 20:31:22 +0200flukiluke(~m-7humut@168.138.14.225)
2024-08-19 20:31:52 +0200nrs-status(~nrs-statu@190.16.167.62)
2024-08-19 20:32:17 +0200Umeaboy(~Umeaboy@94-255-145-133.cust.bredband2.com)
2024-08-19 20:33:44 +0200ss4(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2024-08-19 20:34:41 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 20:47:07 +0200scubagear(scubagear@gateway/vpn/protonvpn/scubagear) (Ping timeout: 244 seconds)
2024-08-19 20:48:45 +0200flukiluke(~m-7humut@168.138.14.225) (Ping timeout: 252 seconds)
2024-08-19 20:49:07 +0200scubagear(scubagear@gateway/vpn/protonvpn/scubagear)
2024-08-19 20:49:42 +0200flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962)
2024-08-19 20:56:12 +0200m1dnight(~christoph@78-20-63-126.access.telenet.be) (Quit: WeeChat 4.4.0)
2024-08-19 20:56:28 +0200m1dnight(~christoph@78-20-63-126.access.telenet.be)
2024-08-19 21:01:20 +0200lockna(~lockna@2a01:4f8:10b:14f1::2) (Read error: Connection reset by peer)
2024-08-19 21:04:35 +0200target_i(~target_i@user/target-i/x-6023099)
2024-08-19 21:04:56 +0200peterbecich(~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 +0200peterbecich(~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 +0200segfaultfizzbuzz(~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 +0200ash3en(~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 +0200billchenchina-(~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 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 21:40:15 +0200ash3en(~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 +0200euleritian(~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 +0200euleritian(~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 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2024-08-19 21:52:33 +0200segfaultfizzbuzz(~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 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
2024-08-19 22:02:10 +0200bilegeek(~bilegeek@2600:1008:b0a9:82d6:950d:cb91:c8d0:13a5)
2024-08-19 22:03:54 +0200nrs-status(~nrs-statu@190.16.167.62) (Quit: Client closed)
2024-08-19 22:05:54 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 258 seconds)
2024-08-19 22:08:12 +0200euleritian(~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) (Ping timeout: 258 seconds)
2024-08-19 22:08:32 +0200euleritian(~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de)
2024-08-19 22:08:34 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e)
2024-08-19 22:08:39 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 22:09:15 +0200ash3en(~Thunderbi@2a02:3100:7c33:4600:18af:2cb4:f788:c54e) (Client Quit)
2024-08-19 22:14:51 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2024-08-19 22:15:29 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2024-08-19 22:16:02 +0200hiredman(~hiredman@frontier1.downey.family)
2024-08-19 22:16:49 +0200foul_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 +0200foul_owl(~kerry@174-21-147-232.tukw.qwest.net)
2024-08-19 22:21:11 +0200JuanDaugherty(~juan@user/JuanDaugherty)
2024-08-19 22:24:18 +0200mikess(~mikess@user/mikess)
2024-08-19 22:28:45 +0200Blasius_(~Blasius@5ec169d9.skybroadband.com)
2024-08-19 22:31:47 +0200Blasius(~Blasius@5ec169d9.skybroadband.com) (Ping timeout: 255 seconds)
2024-08-19 22:39:30 +0200euleritian(~euleritia@dynamic-176-001-130-140.176.1.pool.telefonica.de) (Ping timeout: 276 seconds)
2024-08-19 22:40:02 +0200euleritian(~euleritia@dynamic-176-007-196-137.176.7.pool.telefonica.de)
2024-08-19 22:46:59 +0200euleritian(~euleritia@dynamic-176-007-196-137.176.7.pool.telefonica.de) (Read error: Connection reset by peer)
2024-08-19 22:47:16 +0200euleritian(~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
2024-08-19 22:48:45 +0200justsomeguy(~justsomeg@user/justsomeguy)
2024-08-19 22:52:04 +0200Achylles(~Achylles@45.182.57.14)
2024-08-19 22:55:20 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-08-19 22:55:57 +0200michalz(~michalz@185.246.207.193) (Remote host closed the connection)
2024-08-19 22:57:19 +0200target_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 +0200wootehfoot(~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 +0200son0p(~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 +0200raehik(~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 +0200Square(~Square@user/square)
2024-08-19 23:21:30 +0200segfaultfizzbuzz(~segfaultf@23-93-79-84.fiber.dynamic.sonic.net)
2024-08-19 23:23:54 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
2024-08-19 23:24:44 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2024-08-19 23:33:57 +0200justsomeguy(~justsomeg@user/justsomeguy)
2024-08-19 23:34:14 +0200jcarpenter2(~lol@2603:3016:1e01:b980:1879:8876:e512:52cf) (Ping timeout: 260 seconds)
2024-08-19 23:35:59 +0200lxsameer(~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds)
2024-08-19 23:41:21 +0200Vajb(~Vajb@n4v0h48xv84fiqflept-1.v6.elisa-mobile.fi) (Ping timeout: 258 seconds)
2024-08-19 23:42:53 +0200Vajb(~Vajb@85-76-15-1-nat.elisa-mobile.fi)
2024-08-19 23:59:31 +0200__monty__(~toonn@user/toonn) (Quit: leaving)