Home liberachat/#haskell: Logs Calendar

Logs on 2024-03-07 (liberachat/#haskell)

00:03:37 Sgeo_ joins (~Sgeo@user/sgeo)
00:04:01 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
00:04:05 mastarija joins (~mastarija@141-136-168-205.dsl.iskon.hr)
00:04:49 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 246 seconds)
00:04:53 × mastarija quits (~mastarija@141-136-168-205.dsl.iskon.hr) (Client Quit)
00:05:15 mastarija joins (~mastarija@141-136-168-205.dsl.iskon.hr)
00:05:56 × ph88 quits (~ph88@2a02:8109:9e26:c800:5ab5:db14:e57d:d013) (Remote host closed the connection)
00:09:16 × smalltalkman quits (uid545680@id-545680.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
00:12:22 rvalue joins (~rvalue@user/rvalue)
00:12:49 × iteratee quits (~kyle@162.218.222.207) (Read error: Connection reset by peer)
00:12:59 iteratee joins (~kyle@162.218.222.207)
00:13:37 × res0nat0r0844909 quits (~Fletch@falcon.whatbox.ca) (Quit: Ping timeout (120 seconds))
00:13:51 res0nat0r0844909 joins (~Fletch@falcon.whatbox.ca)
00:17:03 × alexherbo2 quits (~alexherbo@2a02-8440-3240-b056-3594-8200-bad6-a60a.rev.sfr.net) (Remote host closed the connection)
00:17:48 × dostoyevsky2 quits (~sck@user/dostoyevsky2) (Ping timeout: 260 seconds)
00:18:50 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
00:23:16 <geekosaur> I don't know where it's documented, but the support window is the current and previous release
00:23:50 <geekosaur> so 9.6 and 9.8 are currently supported (and a new 9.6 release is being prepared, which will probably be its last because 9.10 is on the way)
00:24:05 <geekosaur> https://gitlab.haskell.org/ghc/ghc/-/wikis/GHC-status
00:27:14 <geekosaur> some packages have wider ghc support windows, for example HLS supports back to ghc 9.2
00:27:22 × mastarija quits (~mastarija@141-136-168-205.dsl.iskon.hr) (Quit: Client closed)
00:32:14 dostoyevsky2 joins (~sck@user/dostoyevsky2)
00:33:11 × Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving)
00:33:17 × mei quits (~mei@user/mei) (Remote host closed the connection)
00:35:41 mei joins (~mei@user/mei)
00:39:11 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Quit: Leaving...)
00:40:24 × inedia quits (~irc@2602:2da:0:80:5054:ff:fe3c:8d93) (Quit: WeeChat 4.1.2)
00:43:21 <geekosaur> hm, actually I think it's current and past two, but at this point 9.4 is only going to be updated if a severe bug is found (which seems unlikely this late in its life)
00:54:10 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 246 seconds)
00:57:49 versatile_ joins (~versatile@176.254.244.83)
00:59:17 redmp joins (~redmp@mobile-166-177-251-21.mycingular.net)
01:00:41 × versatile quits (~versatile@176.254.244.83) (Ping timeout: 256 seconds)
01:07:22 motherfsck joins (~motherfsc@user/motherfsck)
01:16:07 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
01:18:02 son0p joins (~ff@186.121.98.6)
01:19:34 EvanR_ joins (~EvanR@user/evanr)
01:20:02 × EvanR quits (~EvanR@user/evanr) (Read error: Connection reset by peer)
01:20:22 <haskellbridge> <s​m> yea I thought last 3 major releases was common
01:20:27 <haskellbridge> <s​m> but it really depends on your goals
01:20:35 × redmp quits (~redmp@mobile-166-177-251-21.mycingular.net) (Ping timeout: 260 seconds)
01:20:52 <haskellbridge> <s​m> and project
01:23:45 ryanbooker joins (uid4340@id-4340.hampstead.irccloud.com)
01:25:57 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
01:37:54 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
01:41:39 RahulMalhotra joins (~RahulMalh@2409:4051:4e1b:efb5::848:eb13)
01:42:59 × RahulMalhotra quits (~RahulMalh@2409:4051:4e1b:efb5::848:eb13) (Client Quit)
01:47:13 × xff0x quits (~xff0x@2405:6580:b080:900:4382:9a13:8c84:8575) (Ping timeout: 264 seconds)
01:48:20 × Buggys quits (Buggys@Buggy.shelltalk.net) (Ping timeout: 256 seconds)
01:53:40 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
01:53:52 smalltalkman joins (uid545680@id-545680.hampstead.irccloud.com)
01:56:45 Buggys joins (Buggys@shelltalk.net)
02:00:30 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
02:01:11 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds)
02:01:55 Lord_of_Life_ is now known as Lord_of_Life
02:08:14 inedia joins (~irc@2600:3c00:e000:287::1)
02:22:39 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds)
02:26:58 × euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 264 seconds)
02:31:42 euleritian joins (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de)
02:33:11 igemnace joins (~ian@user/igemnace)
02:34:17 Feuermagier joins (~Feuermagi@user/feuermagier)
02:34:41 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:35:55 vnogueira joins (~vnogueira@user/vnogueira)
02:42:41 × mulk quits (~mulk@p5b1123d6.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
02:43:44 mulk joins (~mulk@p5b112b94.dip0.t-ipconnect.de)
02:47:13 × otto_s quits (~user@p4ff2730f.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
02:49:04 otto_s joins (~user@p4ff27fa9.dip0.t-ipconnect.de)
02:52:27 Square2 joins (~Square4@user/square)
02:55:30 × Square quits (~Square@user/square) (Ping timeout: 255 seconds)
02:57:34 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds)
03:00:46 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
03:05:30 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
03:08:23 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
03:08:58 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
03:11:37 × jargon quits (~jargon@154.sub-174-205-226.myvzw.com) (Remote host closed the connection)
03:15:25 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds)
03:27:51 × igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer)
03:29:47 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
03:30:08 Square3 joins (~Square4@user/square)
03:30:19 × Square2 quits (~Square4@user/square) (Ping timeout: 260 seconds)
03:45:07 igemnace joins (~ian@user/igemnace)
03:48:13 bilegeek joins (~bilegeek@2600:1008:b0a1:15d8:bc27:900c:1b6c:2bce)
03:48:19 <jackdk> Can anyone recommend me an FRP library for textmode UIs? I'm most familiar with Reflex's Event/Behavior/Dynamic model but I'd be down to try others (I see `bricki-reflex` was last touched seven years ago)
03:54:46 <haskellbridge> <s​m> that'd be the one I expect
03:56:03 <haskellbridge> <s​m> oh, maybe I'm thinking of https://hackage.haskell.org/package/reflex-vty
03:57:35 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
04:00:02 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
04:01:28 <geekosaur> that's what I'd expect it to be anyway; brick is a traditional GUI over vty, I'd expect FRP to also be built atop vty
04:01:39 <geekosaur> s/GUI/TUI/
04:02:06 <jackdk> somehow I missed that reflex-vty existed. Thanks both
04:02:16 × td_ quits (~td@i53870914.versanet.de) (Ping timeout: 260 seconds)
04:03:52 td_ joins (~td@i53870916.versanet.de)
04:25:08 × bontaq`` quits (~user@ool-45779c03.dyn.optonline.net) (Ping timeout: 260 seconds)
04:26:36 aforemny_ joins (~aforemny@i59F516F6.versanet.de)
04:28:01 × aforemny quits (~aforemny@i59F516E5.versanet.de) (Ping timeout: 264 seconds)
04:29:20 fansly joins (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0)
04:30:00 JamesMowery joins (~JamesMowe@ip98-171-80-211.ph.ph.cox.net)
04:42:29 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
04:43:58 × euleritian quits (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
04:44:16 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
04:48:29 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:55:18 redmp joins (~redmp@mobile-166-171-248-7.mycingular.net)
05:03:24 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
05:05:57 × fansly quits (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0) (Quit: Quit)
05:07:28 fansly joins (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0)
05:07:41 × fansly quits (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0) (Remote host closed the connection)
05:07:43 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
05:07:58 michalz joins (~michalz@185.246.207.205)
05:08:47 × ryanbooker quits (uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
05:11:52 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
05:14:57 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
05:27:52 × michalz quits (~michalz@185.246.207.205) (Quit: ZNC 1.8.2 - https://znc.in)
05:30:38 michalz joins (~michalz@185.246.207.200)
05:30:48 edwardk wakes up and checks in on how things are going around here.
05:35:56 jargon joins (~jargon@154.sub-174-205-226.myvzw.com)
05:36:57 fansly joins (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0)
05:39:45 × qqq quits (~qqq@92.43.167.61) (Remote host closed the connection)
05:41:18 × fansly quits (~fansly@2001:448a:2010:476e:9117:3da:8e3c:52b0) (Client Quit)
05:43:53 × jargon quits (~jargon@154.sub-174-205-226.myvzw.com) (Remote host closed the connection)
05:47:23 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
05:47:57 euleritian joins (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de)
05:48:17 × euleritian quits (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
05:49:40 euleritian joins (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de)
05:55:49 × mei quits (~mei@user/mei) (Remote host closed the connection)
05:58:13 mei joins (~mei@user/mei)
06:02:55 × mjrosenb quits (~mjrosenb@pool-96-232-177-77.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
06:09:44 × euleritian quits (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
06:10:18 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
06:10:23 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds)
06:12:16 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
06:16:53 × redmp quits (~redmp@mobile-166-171-248-7.mycingular.net) (Ping timeout: 256 seconds)
06:18:25 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:23:10 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
06:23:36 euleritian joins (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de)
06:23:40 danza joins (~francesco@151.43.168.41)
06:24:02 Lycurgus joins (~georg@user/Lycurgus)
06:24:33 mjrosenb joins (~mjrosenb@pool-96-232-177-77.nycmny.fios.verizon.net)
06:25:35 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
06:26:14 ec joins (~ec@gateway/tor-sasl/ec)
06:29:36 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
06:34:15 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
06:36:59 <haskellbridge> <s​m> good morning edwardk ☀️
06:37:13 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
06:54:27 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
06:55:58 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:56:13 × petrichor quits (~znc-user@user/petrichor) (Ping timeout: 264 seconds)
06:57:15 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
06:57:57 × echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
06:58:35 acidjnk_new3 joins (~acidjnk@p200300d6e737e753f8b7044289a8517e.dip0.t-ipconnect.de)
06:59:17 echoreply joins (~echoreply@45.32.163.16)
07:06:12 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in)
07:19:04 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
07:20:49 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 264 seconds)
07:23:48 fmd joins (~fmd@user/framend)
07:25:44 × danza quits (~francesco@151.43.168.41) (Ping timeout: 260 seconds)
07:26:42 gabiruh joins (~gabiruh@vps19177.publiccloud.com.br)
07:27:06 zetef joins (~quassel@95.77.17.251)
07:27:50 × mei quits (~mei@user/mei) (Remote host closed the connection)
07:30:15 mei joins (~mei@user/mei)
07:33:14 tr_ev joins (~trev@user/trev)
07:36:56 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
07:38:39 × phma quits (~phma@2001:5b0:212a:dbd8:9225:61ca:7b7d:b499) (Read error: Connection reset by peer)
07:39:23 phma joins (phma@2001:5b0:211f:bff8:ed6a:61e2:ef0c:3875)
07:42:44 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
07:42:47 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:45:34 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
07:46:59 CiaoSen joins (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03)
07:50:18 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:53:46 × euleritian quits (~euleritia@dynamic-176-006-179-235.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
07:54:04 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
07:57:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:00:03 oo_miguel joins (~Thunderbi@78-11-181-16.static.ip.netia.com.pl)
08:06:27 × zetef quits (~quassel@95.77.17.251) (Ping timeout: 255 seconds)
08:06:40 misterfish joins (~misterfis@46.44.172.198)
08:12:46 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 260 seconds)
08:12:52 chele joins (~chele@user/chele)
08:15:50 zetef joins (~quassel@95.77.17.251)
08:22:38 danse-nr3 joins (~danse@185.211.81.183)
08:25:29 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 272 seconds)
08:34:41 × tzh quits (~tzh@c-73-164-206-160.hsd1.or.comcast.net) (Quit: zzz)
08:40:46 × vnogueira quits (~vnogueira@user/vnogueira) (Ping timeout: 260 seconds)
08:41:16 × mei quits (~mei@user/mei) (Remote host closed the connection)
08:41:58 vnogueira joins (~vnogueira@user/vnogueira)
08:41:58 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
08:43:42 mei joins (~mei@user/mei)
08:50:59 <absence> Is it possible to convert from "forall m. C m => a -> m b" to "a -> forall m. C m => m b"? It's kind of like flip, but... :P
08:54:24 × trev quits (~trev@user/trev) (Remote host closed the connection)
08:54:40 trev joins (~trev@user/trev)
08:55:29 <tomsmeding> absence: https://play.haskell.org/saved/BILj1Fqs seems like ghc just... does it?
08:55:43 <tomsmeding> I guess the answer is "eta-expand"
08:56:55 × tr_ev quits (~trev@user/trev) (Quit: tr_ev)
08:57:35 × notzmv quits (~daniel@user/notzmv) (Remote host closed the connection)
08:58:21 <danse-nr3> does not look like flip though, i think the semantic is different (also probably needs parenthesis on the right)
08:59:44 <probie> you don't even need to eta-expand in older versions of GHC
09:00:27 notzmv joins (~daniel@user/notzmv)
09:02:18 <danse-nr3> oh had to check tomsmeding's snippet
09:02:30 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
09:02:42 <ncf> it is a kind of dependent flip
09:02:51 <tomsmeding> in Core it's a flip
09:02:52 <absence> tomsmeding: How about when you fmap such a function?
09:03:08 <tomsmeding> absence: add abundant type signatures, then see how many you can remove
09:03:38 <tomsmeding> when working with explicitly polymorphic functions, you need lots of type signatures
09:04:46 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
09:05:17 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
09:05:35 bilegeek_ joins (~bilegeek@2600:1008:b0a1:15d8:bc27:900c:1b6c:2bce)
09:05:41 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
09:07:58 jau joins (~user@2a04:4540:7212:6d00:e5f3:df01:adee:2cc8)
09:08:09 <absence> tomsmeding: https://play.haskell.org/saved/YxvpfR3U
09:08:16 × bilegeek quits (~bilegeek@2600:1008:b0a1:15d8:bc27:900c:1b6c:2bce) (Ping timeout: 268 seconds)
09:09:50 <probie> absence: https://play.haskell.org/saved/LZ1rvzya
09:09:54 <tomsmeding> absence: https://play.haskell.org/saved/Ve1BBcxh
09:09:56 <tomsmeding> oh
09:10:01 <tomsmeding> lol
09:10:06 <tomsmeding> take probie's version
09:10:24 ania123 joins (~ania123@94-43-231-47.dsl.utg.ge)
09:10:25 travgm__ joins (~travgm@2600:100e:a121:ef84:212e:f7c5:fded:46ea)
09:11:54 <absence> Ahh of course, lambdas can be eta expanded as well. Thanks!
09:12:36 × bilegeek_ quits (~bilegeek@2600:1008:b0a1:15d8:bc27:900c:1b6c:2bce) (Ping timeout: 256 seconds)
09:13:07 × travgm_ quits (~travgm@2600:100e:a121:ef84:212e:f7c5:fded:46ea) (Ping timeout: 256 seconds)
09:14:15 × misterfish quits (~misterfis@46.44.172.198) (Ping timeout: 256 seconds)
09:15:43 × fmd quits (~fmd@user/framend) (Quit: So much programs to build…)
09:25:07 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:e52f:c589:18bb:7d17)
09:30:02 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:31:57 × ft quits (~ft@p508db2e6.dip0.t-ipconnect.de) (Quit: leaving)
09:35:32 × notzmv quits (~daniel@user/notzmv) (Read error: Connection reset by peer)
09:36:53 misterfish joins (~misterfis@84.53.85.146)
09:39:36 notzmv joins (~daniel@user/notzmv)
09:41:33 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:41:41 × danse-nr3 quits (~danse@185.211.81.183) (Ping timeout: 252 seconds)
09:42:15 × zetef quits (~quassel@95.77.17.251) (Quit: No Ping reply in 180 seconds.)
09:47:52 danse-nr3 joins (~danse@151.43.166.155)
09:50:58 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
09:52:21 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
09:52:30 × danse-nr3 quits (~danse@151.43.166.155) (Read error: Connection reset by peer)
09:53:37 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Quit: _)
09:53:47 danse-nr3 joins (~danse@151.43.211.246)
09:53:51 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
09:56:27 × monochrom quits (trebla@216.138.220.146) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in)
10:05:48 zetef joins (~quassel@93.122.251.174)
10:06:11 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 272 seconds)
10:08:54 monochrom joins (trebla@216.138.220.146)
10:15:22 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
10:15:42 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
10:16:03 cfricke joins (~cfricke@user/cfricke)
10:26:16 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 256 seconds)
10:28:53 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
10:32:35 × zetef quits (~quassel@93.122.251.174) (Read error: Connection reset by peer)
10:32:52 × destituion quits (~destituio@2a02:2121:34a:61a6:afbf:6cfe:62a6:9770) (Ping timeout: 260 seconds)
10:36:54 zetef joins (~quassel@95.77.17.251)
10:40:47 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
10:45:30 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:50:55 × Square3 quits (~Square4@user/square) (Ping timeout: 246 seconds)
10:56:19 [[PSYCHIATRIST joins (~PSYCHIAT@46.197.13.174)
11:02:09 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
11:07:37 xff0x joins (~xff0x@2405:6580:b080:900:e821:772c:646b:bc1f)
11:08:38 causal joins (~eric@50.35.85.7)
11:15:11 __monty__ joins (~toonn@user/toonn)
11:17:59 × [[PSYCHIATRIST quits (~PSYCHIAT@46.197.13.174) (Quit: Connection closed)
11:18:48 sidd-dino joins (~sidd-dino@gateway/tor-sasl/sidd-dino)
11:22:13 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 255 seconds)
11:25:20 × igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer)
11:27:25 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
11:28:14 a51 joins (a51@gateway/vpn/protonvpn/a51)
11:35:01 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
11:35:31 euleritian joins (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de)
11:36:44 × ania123 quits (~ania123@94-43-231-47.dsl.utg.ge) (Quit: Client closed)
11:40:42 × euleritian quits (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
11:41:06 euleritian joins (~euleritia@77.22.252.56)
11:43:11 × danse-nr3 quits (~danse@151.43.211.246) (Ping timeout: 264 seconds)
11:43:17 igemnace joins (~ian@user/igemnace)
11:45:31 × euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer)
11:45:37 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 255 seconds)
11:46:05 euleritian joins (~euleritia@77.22.252.56)
11:47:06 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
11:55:14 × zetef quits (~quassel@95.77.17.251) (Remote host closed the connection)
11:57:41 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
12:05:22 danse-nr3 joins (~danse@151.43.155.172)
12:25:48 gehmehgeh joins (~user@user/gehmehgeh)
12:26:07 × CiaoSen quits (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03) (Ping timeout: 246 seconds)
12:26:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:32:05 gehmehgeh is now known as gmg
12:45:46 × euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer)
12:46:36 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
12:58:22 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in)
13:00:15 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
13:00:25 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
13:00:39 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
13:00:52 gabiruh joins (~gabiruh@vps19177.publiccloud.com.br)
13:01:27 gmg joins (~user@user/gehmehgeh)
13:03:43 srz joins (~srz@181.228.49.93)
13:04:28 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (Client Quit)
13:08:34 gabiruh joins (~gabiruh@vps19177.publiccloud.com.br)
13:11:44 tr_ev joins (~trev@user/trev)
13:14:49 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
13:17:49 euleritian joins (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de)
13:19:58 × tr_ev quits (~trev@user/trev) (Quit: tr_ev)
13:19:59 × euleritian quits (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
13:21:43 euleritian joins (~euleritia@77.22.252.56)
13:21:48 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
13:25:34 CiaoSen joins (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03)
13:26:25 × euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 256 seconds)
13:32:12 euleritian joins (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de)
13:32:35 × euleritian quits (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
13:33:04 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
13:40:17 × notzmv quits (~daniel@user/notzmv) (Read error: Connection reset by peer)
13:40:42 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
13:41:05 sord937 joins (~sord937@gateway/tor-sasl/sord937)
13:43:41 notzmv joins (~daniel@user/notzmv)
13:46:27 bontaq`` joins (~user@ool-45779c03.dyn.optonline.net)
13:47:13 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
13:47:47 bwe joins (~bwe@2a01:4f8:1c1c:4878::2)
13:48:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:50:05 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 268 seconds)
13:50:10 euleritian joins (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de)
13:54:41 × danse-nr3 quits (~danse@151.43.155.172) (Ping timeout: 252 seconds)
13:55:28 danse-nr3 joins (~danse@151.43.155.172)
13:55:48 <bwe> Hi, how do I collect errors with Applicative and Monad instances using Semigroup? How do I use the Applicative instance correctly? How do I need to define the Monad instance to NOT short-circuit? https://gist.github.com/benjaminweb/fef460aad1e799f415e25389f9c13783
13:57:44 zetef joins (~quassel@95.77.17.251)
14:04:45 alexherbo2 joins (~alexherbo@2a02-8440-3241-19d1-2046-7c34-1287-cba1.rev.sfr.net)
14:09:39 <danse-nr3> hmm why does it have to be applicative? Maybe you want a reader monad where errors get collected
14:10:16 <[Leary]> bwe: In the error case for `Monad (Either e)` you have an `e` and an `a -> Either e b`; there's no choice but to stop. You can either restrict yourself to Applicative (see 'validation') or use a Monad that may still produce output even when there are errors (see 'monad-chronicle').
14:13:42 <danse-nr3> huh i meant to write "writer monad" ... and i guess i did not get the context of your question. The chronicle monad looks fun though
14:14:45 <[Leary]> Re `sumAll`/`caller`, I think you want `caller = (\a b c -> a + b + c) <$> f1 <*> f2 <*> f3`.
14:26:06 × euleritian quits (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
14:26:06 <bwe> [Leary]: I have functions `f :: a -> b -> c -> Errors [Text] d`. `caller = (\a b c -> f a b c) <$> f1 <*> f2 <*> f3`.
14:26:21 <bwe> f1 :: Errors [Text] Int
14:26:23 euleritian joins (~euleritia@77.22.252.56)
14:26:28 × danse-nr3 quits (~danse@151.43.155.172) (Ping timeout: 268 seconds)
14:26:45 <bwe> f :: a -> b -> c -> Errors [Text] d
14:26:55 <bwe> caller :: Errors [Text] Int
14:27:13 <bwe> Can I get away with only Applicative?
14:27:50 <bwe> [Leary]: calling `f` in the lambda does not compile for me.
14:28:26 danse-nr3 joins (~danse@151.43.155.172)
14:29:50 tri joins (~tri@ool-18bbef1a.static.optonline.net)
14:30:39 fmd joins (~fmd@user/framend)
14:31:55 × alexherbo2 quits (~alexherbo@2a02-8440-3241-19d1-2046-7c34-1287-cba1.rev.sfr.net) (Remote host closed the connection)
14:33:16 alexherbo2 joins (~alexherbo@2a02-8440-3241-19d1-6ced-529c-e3c8-d34a.rev.sfr.net)
14:34:12 <[Leary]> Nope---you'll end up with `Errors [Text] (Errors [Text] d)`. Collapsing that down to `Errors [Text] d` is precisely what Monad is for. Forgetting about typeclasses for a moment, if what you have on hand is only `Left outerErrs`, the inner errors never even happen, so there's no sense in trying to merge them in.
14:34:47 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 264 seconds)
14:34:58 L29Ah joins (~L29Ah@wikipedia/L29Ah)
14:35:07 <bwe> [Leary]: so, it's actually a nice example for bumping into Monad -- I had this feeling yesterday.
14:36:03 × marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli)
14:36:45 × alexherbo2 quits (~alexherbo@2a02-8440-3241-19d1-6ced-529c-e3c8-d34a.rev.sfr.net) (Remote host closed the connection)
14:36:48 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
14:37:12 tr_ev joins (~trev@user/trev)
14:37:26 <bwe> [Leary]: I am not sure whether I've got you right: Can I implement a Monad that does not break execution on encountering first error?
14:37:48 <bwe> [Leary]: What do I really want here?
14:37:58 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 255 seconds)
14:39:52 <probie> bwe: Only if your "monad" can effectively implement `m () -> (a -> m b) -> m b`
14:39:58 __monty__ joins (~toonn@user/toonn)
14:41:06 <[Leary]> You can, but not on top of Either. As I said above, see 'monad-chronicle' <https://hackage.haskell.org/package/monad-chronicle> or even just Writer.
14:42:43 <danse-nr3> yeah i think the issue here is trying to build on top of Either. I vaguely recall the concept of a "logger monad", but not sure what it has different from a writer
14:43:26 × euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 268 seconds)
14:43:29 <bwe> [Leary]: so what is https://hackage.haskell.org/package/monad-validate-1.3.0.0/docs/Control-Monad-Validate.html doing, then?
14:43:52 × CiaoSen quits (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03) (Quit: CiaoSen)
14:44:22 <[Leary]> Something fancier. Ignore it for now.
14:44:44 <bwe> [Leary]: https://hackage.haskell.org/package/validation is only Applicative, hence it does not cover the Monad case I need.
14:45:28 <bwe> [Leary]: …still trying to grasp what `these` does.
14:45:40 euleritian joins (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de)
14:45:48 CiaoSen joins (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03)
14:48:01 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 272 seconds)
14:50:22 <bwe> why do I need either-or-both data type to collect errors? I am fine with not getting the result value if there are any errors AS LONG AS I get all the errors and execution is not short-circuited (except for those functions that need intermediary values that could not be produced).
14:51:01 × tr_ev quits (~trev@user/trev) (Quit: tr_ev)
14:51:16 <bwe> [Leary]: I've looked into the tests of `these` to get some idea, but I couldn't spot any examples that are simple and explain the usage for me.
14:51:57 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.1.2)
14:52:38 <danse-nr3> these and These seem an unrelated topic
14:52:57 <bwe> so, what do I need then?
14:53:10 <glguy> You need These so you can collect intermediate errors without short circuiting
14:54:17 <danse-nr3> hmm maybe they came in the conversation while i was offline. Makes sense now
14:56:53 <bwe> ok, these and monad-chronicle are different animals - which do I want? or better, what's even simpler? is it just a writer monad?
14:59:32 <bwe> glguy: and why do I need for not short circuiting either-or-both? I get that the Monad short circuits for `Left e` case. For `Right b` we did not encounter an error at all.
14:59:41 misterfish joins (~misterfis@87.215.131.98)
15:00:20 <bwe> So we'd need a thing that holds the error and continues the computation, is that right?
15:01:41 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:02:06 <danse-nr3> well i guess there would be recoverable errors (These a b) and not-recoverable ones (This a). Probably chronicle abstracts over a writer you could roll by yourself
15:02:26 tri joins (~tri@ool-18bbef1a.static.optonline.net)
15:03:45 jau_ joins (~user@134.101.168.5.dynamic-pppoe.dt.ipv4.wtnet.de)
15:06:12 × jau quits (~user@2a04:4540:7212:6d00:e5f3:df01:adee:2cc8) (Ping timeout: 256 seconds)
15:06:46 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 256 seconds)
15:08:43 <glguy> bwe: like your said, Left short circuits. Left also carries errors. If you want error and not short circuit you need Both
15:09:33 <glguy> I'm the case of Both the result is probably incomplete or wrong (when you're using it for error tracking like this) but that's up to how you've structured your program
15:10:56 <danse-nr3> was not familiar with Both. Seems equivalent to These
15:11:57 <danse-nr3> although probably better named :P
15:12:35 <glguy> I don't remember the name
15:13:08 <glguy> Oh, it's These not Both
15:13:25 <glguy> But anyway, the thing that was both types
15:13:58 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.1.1)
15:18:43 azimut joins (~azimut@gateway/tor-sasl/azimut)
15:18:53 <haskellbridge> <e​ldritchcookie> hello what is preferred a quantified constraint or a new method ?
15:19:24 <haskellbridge> <e​ldritchcookie> compdata has a HFunctor type
15:19:43 <haskellbridge> <e​ldritchcookie> *type class
15:21:28 <haskellbridge> <e​ldritchcookie> and it seems to me that by the definition it should have a quantified constraint forall f. Functor f => Functor (hf f)
15:26:58 <bwe> glguy: Alright, if `These a b` collects errors, it can't produce `b` result value. So, what happens then? Will it be swapped to `This a` once an unrecoverable error occurs, i.e. no further computation can be done, hence `b` can't be produced.
15:31:00 <glguy> Yeah, swap to the no result only error case and short circuit
15:35:04 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Remote host closed the connection)
15:35:12 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
15:45:00 × puke quits (~puke@user/puke) (Remote host closed the connection)
15:45:23 puke joins (~puke@user/puke)
15:47:22 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
15:49:06 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 268 seconds)
15:49:20 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
15:55:22 × euleritian quits (~euleritia@dynamic-176-006-203-227.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
15:55:41 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
15:58:26 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 252 seconds)
15:59:35 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
15:59:47 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:00:34 × misterfish quits (~misterfis@87.215.131.98) (Ping timeout: 264 seconds)
16:00:40 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
16:01:27 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
16:03:41 × srz quits (~srz@181.228.49.93) (Ping timeout: 240 seconds)
16:04:05 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds)
16:05:37 × danse-nr3 quits (~danse@151.43.155.172) (Read error: Connection reset by peer)
16:05:58 danse-nr3 joins (~danse@151.43.217.59)
16:08:23 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 264 seconds)
16:08:59 euphores joins (~SASL_euph@user/euphores)
16:11:09 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
16:11:13 × igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.1)
16:12:31 EvanR_ is now known as EvanR
16:13:23 <bwe> glguy: That's a great start :). My first approach: https://gist.github.com/benjaminweb/0df0b7af1fef73caf47e5006b99a3a07 . If `f0` gives an error, it can't give a `These a b` value, because there is no `b`. However this `This` leads to short circuit `caller2`. I know I need to have `These a b` instead to not short circuit - but how if I don't have value `b`?
16:18:28 <danse-nr3> then it is a not-recoverable error, i guess
16:19:19 <glguy> bwe: You'll need to restructure your program so that it doesn't immediately depend on an unrecoverable error f0
16:19:51 <glguy> if you have: do x <- f0; ..., then the whole ... depends on there being some x value
16:20:06 <glguy> If you're saying the whole thing depends on the result and you do'nt have one, then certainly that's when things stop
16:21:50 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 260 seconds)
16:22:34 × causal quits (~eric@50.35.85.7) (Quit: WeeChat 4.1.1)
16:22:37 × arahael quits (~arahael@119-18-0-146.771200.syd.nbn.aussiebb.net) (Ping timeout: 264 seconds)
16:23:28 <dminuoso> bwe: So what I might want, is rather than shoehorning it into some monadic type like These, I would have some ambient `Env` data type with say `data Env = Env { warnings :: IORef [Warning], errors :: IORef [Error] }`, and then instead of using a singular >>, I would then develop a toolset of combinators that maybe shortcircuit or not, or maybe set errors (that at some later stage become fatal)
16:23:29 <dminuoso> while producing some default values (such that you can continue on and collect more errors)
16:23:35 <glguy> Two of your choices (maybe there are some more) are to either make up a value and report the error like the restricted sumAll could return the too-big number and record the error about it
16:23:52 <glguy> or to not use Monad for piecing together parts that are independent
16:24:01 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:24:27 <glguy> Switching to using IO won't change the problems you have to solve
16:24:57 <glguy> it's just a different mechanism for storing the errors
16:25:52 <bwe> Well, I am thinking of just making inputs and outputs same: Errors [Text] Int -> Errors [Text] Int
16:26:04 <EvanR> STM can be nice for piecing together parts that are independent
16:26:09 <EvanR> STM all the things
16:26:36 <glguy> It's not obvious to me how STM helps in this case of validation and error gathering, but it's certainly useful in general
16:26:54 <EvanR> didn't read the context sorry
16:27:14 <dminuoso> glguy: Oh it can actually simplify things since it gives you sequentiality, possibility of diagnostics - and the question of "errors" (fatal, or fatal at some delayed time) is a matter of simple `IO a -> IO b -> IO b` combinators.
16:27:15 <glguy> bwe: you should be able to build what you want not using any typeclasses at all
16:27:28 <glguy> dminuoso: No, I don't think it changes the problem in any way
16:27:51 <dminuoso> glguy: Well, it does for me *shrugs*.
16:27:54 <glguy> You still have to deal with all the same questions
16:28:29 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Read error: Connection reset by peer)
16:28:50 <bwe> Let's simplify: I've got two feeder functions `f1` and `f2`. Both get called before `final` which consumes both. If `f1` and `f2` raise an error, both should be returned. In that case `final` cannot be called. If they don't raise an error, `final` might.
16:29:12 <glguy> bwe: try writing what you want directly
16:29:18 <glguy> just write some functions that do the thing you want
16:29:23 <dminuoso> The point really is, rather than trying to encode special error behavior into a type, its easier to just encode it into a simple `case-of` one way or another.
16:29:40 <dminuoso> So I guess we're after the same thing here, glguy.
16:30:05 <glguy> once you have it working "manually" you can look to see if the behaviors you desire correspond to any of the premade stuff
16:30:21 <glguy> you'll get more clarity about how it should work at all that way
16:31:09 <glguy> What you're doing seems "obvious" to me because I've already done it manually before
16:32:33 <glguy> after that you'll probably find correspondence between things you've done in your manual code inside things like the Monad instances for the Validate and These types and you'll be more prepared recognize the patterns
16:33:34 <bwe> glguy: does that include the case idea by dminuoso?
16:33:45 <EvanR> does "parse don't validate" apply
16:34:24 <glguy> bwe: If writing out your own cases on the different constructors is dminuoso's idea, then yes
16:34:46 <dminuoso> EvanR: So in our SDN compiler we can do both. Its just that that most types here have a UselessDefault instance we can use to make up nonsense values for no purpose other than to carry on to collect further errors.
16:34:55 <glguy> EvanR: I think that's the space we're in, but usually that phrase means you shouldn't just check a value is good, you should transform it into a type that only holds good values
16:34:59 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
16:35:10 <glguy> EvanR: in this case the topic is that along the way we'd like to provide as much feedback as possible
16:35:16 <dminuoso> (And they are special values that are identified in assertion passes, just to make sure we dont accidentally leak them out)
16:35:25 <glguy> so don't abort parsing any earlier than you absolutely have ot
16:35:43 <EvanR> yeah, find more problems with the input than 1
16:35:46 <EvanR> potentially
16:36:06 <glguy> sometimes you find errors that only happened *because* you didn't stop at the first error, but ideally that's the less common case :)
16:36:11 <dminuoso> And by module structure, you generally cant accidentally conjure "non-sense values" here other than by `configErrorDef` which automatically sets a fatal error in the compiler environment.
16:36:21 <dminuoso> So.. does that satisfy "parse dont validate"? Id say sure.
16:36:50 <c_wraith> glguy: it's not less common when using C++! I had GCC report several thousand errors in a hundred line program because of one missing semicolon!
16:36:52 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 260 seconds)
16:37:47 <dminuoso> c_wraith: It's a difficult thing to have parser work with incorrect syntax I supose.
16:38:24 <dminuoso> My feeling says there has got to be published research on "recovering" after syntax errors.
16:38:26 <c_wraith> dminuoso: also when templates get involved, they can really make your syntax errors happen replicate over and over.
16:39:36 <c_wraith> dminuoso: have you use uu-parsinglib? It's an interesting experiment. In the case of parse errors, it reports the error then proceeds as if it had found whatever it was expecting.
16:40:47 <dminuoso> Ah another output of Utrecht, it is quite interesting how much research is done in NL.
16:47:36 <danse-nr3> supporting science since galileo's times
16:53:27 <bwe> glguy, dminuoso: https://gist.github.com/benjaminweb/0df0b7af1fef73caf47e5006b99a3a07#file-mylib-hs-L36-L47
16:54:05 <glguy> bwe: looks like you kind of cheated by moving f0 to the bottom, right?
16:54:36 <bwe> glguy: earlier, yes; but ignore caller2 as of now, I've changed caller1
16:54:55 <dminuoso> That all looks rather.. arbitrary.
16:55:18 <dminuoso> This looks like an XY problem.
16:55:54 <dminuoso> Without seeing the actual problem domain such that `this`, `that`, `f0`, `f1` and `f2` make any sense, its really tough to give any advice how to approach this.
16:56:47 <bwe> Let's simplify: I've got two feeder functions `f1` and `f2`. Both get called before `final` which consumes both. If `f1` and `f2` raise an error, both should be returned. In that case `final` cannot be called. If they don't raise an error, `final` might.
16:57:04 <bwe> dminuoso: Well, that's my problem statement I've posted earlier.
16:57:27 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
16:57:40 <dminuoso> bwe: Write the code exactly like you described it.
16:58:24 <dminuoso> Not quite sure what "both should be returend [if f1 and f2 raise an error]" means
16:58:30 <dminuoso> both what?
16:58:41 <probie> both errors
16:58:49 <dminuoso> And if only one returns an error?>
16:58:54 × sidd-dino quits (~sidd-dino@gateway/tor-sasl/sidd-dino) (Remote host closed the connection)
16:59:01 <bwe> any errors of f1 and f2 should be accumulated and returned
16:59:26 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
17:00:51 <dminuoso> bwe: Yeah, so in my compiler I have these primitives: https://gist.github.com/dminuoso/421ab94f671c010d213592dc09af82daf
17:01:15 <bwe> dminuoso: link is dead
17:01:16 <dminuoso> Maybe this approach can help you *shrugs*
17:01:21 <dminuoso> Sorry https://gist.github.com/dminuoso/421ab94f671c010d213592dc09af82da
17:01:31 <dminuoso> Not sure where that trailing f came from
17:02:37 <bwe> glguy: is the current implementation of`caller1` the manual way you meant?
17:04:16 destituion joins (~destituio@2a02:2121:650:17b6:2818:3a8c:bceb:d3de)
17:04:31 <dminuoso> bwe: Anyway, all of this is only useful if this kind of error handling is a recurring theme for you.
17:04:41 <dminuoso> otoh if its a one-off, I wouldnt add a dependency either.
17:05:23 <EvanR> halt and catch fire
17:05:27 <EvanR> there's your error handling
17:05:35 <EvanR> in many trending languages now a days
17:06:13 <dminuoso> Ive just become a fan of IO. *shrugs*
17:06:17 <dminuoso> It makes so many things so easy.
17:06:22 <dminuoso> Collecting state, logging, throwing exceptions...
17:06:45 <dminuoso> All the stuff that otherwise introduces large piles of dependency trees, illegible type errors, and unwieldy type signatures.
17:07:12 <dminuoso> IO - the forgotten monad.
17:07:22 <bwe> What's so hard in accumulating errors? Short circuit only if a function call receives an error value as value. But then return all errors accumulated since.
17:07:33 <dminuoso> bwe: Absolutely nothing! I just accumulate them in an IORef!
17:08:10 <bwe> I am almost about to escape to write Python!
17:08:58 <bwe> dminuoso: why can't this be automatic behaviour in my function using the Monad of that error collecting container?
17:09:41 <dminuoso> bwe: what do you mean by "automatic behavior"?
17:09:46 <dminuoso> IO *is* that behavior.
17:10:35 × ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:e52f:c589:18bb:7d17) (Quit: ubert)
17:10:37 <bwe> dminuoso: collect error to error stack on error, short-circuit on error used as argument in function call, then return error stack.
17:10:44 <bwe> dminuoso: why do I need IO for this?
17:10:51 <EvanR> Writer can also be used to accumulate errors
17:11:23 <EvanR> if that's all your code is dedicated to doing
17:11:26 <bwe> but I mean, what's the recommended way to do this?
17:12:09 <EvanR> when you really know what your code is trying to do, you can use the most appropriate abstraction if it exists, or write a custom type
17:12:17 <EvanR> which is how GHC works
17:12:30 redmp joins (~redmp@mobile-166-171-248-17.mycingular.net)
17:12:31 <EvanR> if you don't know what your code is trying to do, IO helps
17:12:52 <EvanR> but it's a strictly worse situation to be in
17:14:25 <bwe> I need a way to not let the computation to short circuit when feeder functions have errors. I need a way to let the computation short circuit once a value is tried to be consumed that is an error value.
17:14:38 <bwe> EvanR: does Writer solve my need here?
17:14:50 <EvanR> no I thought you were just trying to accumulate error messages
17:15:06 <bwe> EvanR: so, what do I need?
17:15:14 tzh joins (~tzh@c-73-164-206-160.hsd1.or.comcast.net)
17:15:18 <EvanR> short circuiting? That's Maybe or Either
17:15:38 <bwe> glguy: I've searched for some time on gh to find some examples using These to no avail.
17:16:19 <bwe> EvanR: We've been through that before, Left of either forces Monad to short circuit on each error. I need it NOT to short circuit on error.
17:16:28 <EvanR> > liftA2 (+) (Just 2) (Just 2)
17:16:30 <lambdabot> Just 4
17:16:34 <EvanR> > liftA2 (+) (Just 2) Nothing
17:16:35 <lambdabot> Nothing
17:16:49 <EvanR> you want to not short circuit? that's what I thought
17:16:55 <glguy> bwe: These has three cases: Short-circuit with error, Don't short-circuit but also error, Don't short-circuit and no error
17:16:56 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
17:17:20 <glguy> bwe: Most people probably don't use the "these" package, they just write this stuff out manually. The these package doesn't offer that much benefit as a dependency
17:17:47 <bwe> EvanR: https://gist.github.com/benjaminweb/fef460aad1e799f415e25389f9c13783 https://gist.github.com/benjaminweb/0df0b7af1fef73caf47e5006b99a3a07
17:17:49 × redmp quits (~redmp@mobile-166-171-248-17.mycingular.net) (Ping timeout: 264 seconds)
17:18:37 <bwe> glguy: Don't short-circuit but also error -> previous errors collected on the way didn't prevent from calculating result value.
17:19:04 <EvanR> so there's no short circuiting anywhere
17:19:10 <glguy> yeah, even if that result value is flawed for the reasons listed in theerrors
17:19:22 redmp joins (~redmp@mobile-166-137-178-225.mycingular.net)
17:19:35 <glguy> EvanR: I think bwe wants to avoid short-circuiting when possible, but sometimes that's not possible
17:20:01 <bwe> glguy: sometimes: a function tries to use a value that couldn't been produced, i.e. is an error value.
17:20:19 <glguy> bwe: in that case you want to short-circuit
17:20:30 <bwe> glguy: exactly
17:20:45 <EvanR> here's another pattern
17:20:50 <EvanR> :t partition
17:20:51 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
17:20:57 <EvanR> :t partitionEithers
17:20:58 <lambdabot> [Either a b] -> ([a], [b])
17:21:18 <EvanR> if you analyize a list of things into yes values and no errors, you can sort them and use the yes values, and have the errors
17:22:01 <bwe> glguy: but what if `c` gets produced before `f` is called (that takes in `a` and `b`) - in that case c has an error?
17:22:27 <bwe> glguy: we can result a `These [c] d` -- d being result of f
17:23:23 × danse-nr3 quits (~danse@151.43.217.59) (Ping timeout: 264 seconds)
17:23:46 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:24:43 × manwithluck quits (manwithluc@gateway/vpn/protonvpn/manwithluck) (Ping timeout: 260 seconds)
17:25:09 <glguy> I'm lost in the alphabet, I think
17:25:21 manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck)
17:25:42 <glguy> But if f is a function, and it *depends* on a previous computation succeeding because it needs that result to be the function argument, then obviously it can only work if there's a function argument
17:25:52 × notzmv quits (~daniel@user/notzmv) (Ping timeout: 260 seconds)
17:26:05 <glguy> If it could work without one then it shouldn't be a function
17:26:38 <ncf> abcdef[you are here]hij
17:30:25 tri joins (~tri@ool-18bbef1a.static.optonline.net)
17:31:37 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
17:34:48 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 255 seconds)
17:35:51 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 272 seconds)
17:39:47 <bwe> https://gist.github.com/benjaminweb/9a9664625f2ba30d14fc0a338dc8a601 <- desired behaviour is described with tests and comments.
17:40:00 <bwe> (I am persevering…)
17:40:15 notzmv joins (~daniel@user/notzmv)
17:42:29 <bwe> What I want is that the Monad handles that for me.
17:43:01 <glguy> bwe: these are examples I'm imagining https://gist.github.com/glguy/e048cf88a20b2fad8df1917bcc1538b9
17:43:09 <glguy> When it comes to a Monad helping you, you will need to use two different types
17:43:28 <glguy> One is a Monad that short-circuits and another is merely an Applicative that perseveres
17:43:55 <glguy> The Monad will never be able to persevere in the face of a fatal error
17:44:13 Square joins (~Square@user/square)
17:44:14 <glguy> because >>= has a function that relies on there being an argument to apply the function to
17:44:48 <glguy> but an applicative <*> can gather up errors from both of its arguments
17:45:16 <bwe> ah. I want applicative behaviour from a monad. that causes the frustration.
17:45:31 <glguy> or if you don't want to use two types, don't make your thing a monad but provide a manual, non >>= function that does what >>= for when you wanted that behavior
17:45:41 rvalue joins (~rvalue@user/rvalue)
17:46:24 <bwe> glguy: are you getting the idea of what I am trying to accomplish with my last gist?
17:47:07 <glguy> bwe: the thing you want on line 18 is too magical for you to get it using Monad
17:47:47 <glguy> You made line 18 "need" c by virtue of you putting it below line 17
17:48:47 L29Ah joins (~L29Ah@wikipedia/L29Ah)
17:49:56 <haskellbridge> <e​ldritchcookie> uh don't you want callCC?
17:50:11 <bwe> glguy: Fine. So delete line 17. if 15 (a) is an error, b should still be processed. short circuit only once `f` tries to pull in `a` and `b`.i
17:50:39 <glguy> bwe: if you write a <- getA; ...
17:50:48 <glguy> then everything after that depends on a
17:51:11 <glguy> If you want that not to be true you need to not use a Monad. You could still get do-notation using ApplicativeDo
17:51:33 <bwe> glguy: so ApplicativeDo is what I need
17:52:13 <glguy> bwe: using applicativedo to do this kind of validation is what I'm using here https://glguy.net/config-demo/
17:52:38 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:53:11 <bwe> glguy: does These take care of accumulating the errors on the way using ApplicativeDo?
17:53:24 <glguy> bwe: no, because it has a Monad instance
17:53:37 <glguy> and an Applicative instance needs to agree with the Monad instance
17:53:42 <bwe> glguy: so, I shouldn't use These for my situation, right?
17:54:17 <glguy> You shouldn't use These with ApplicativeDo. for that you'd need a different type or just a newtype around These for when you're doing the do-notation parts
17:56:33 <bwe> what do I need then to have the errors accumulate? and short circuiting only once the function tries to use a value that is an error value should be default, or?
17:57:10 drdo8 joins (~drdo@bl5-29-74.dsl.telepac.pt)
17:57:50 <haskellbridge> <e​ldritchcookie> uh why are the semantics of MonadThrow wrong for your use case?
17:57:51 × drdo quits (~drdo@bl5-29-74.dsl.telepac.pt) (Ping timeout: 260 seconds)
17:57:51 drdo8 is now known as drdo
18:01:55 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:02:56 tri joins (~tri@ool-18bbef1a.static.optonline.net)
18:03:19 srz joins (~srz@181.228.49.93)
18:03:27 thailigur joins (~thailigur@94.182.126.244)
18:03:39 <ncf> your monadic sequencing is expressing that the computation `f a b` might depend on the values of a, b, and c. you can't really detect that `f a b` isn't using c within the Monad interface
18:03:59 <ncf> you'd have to somehow parallelise A+B and C
18:05:14 <dolio> It doesn't matter that `f a b` doesn't. The overall computation does.
18:06:07 eldritch_cookie joins (~Srain@177.132.38.123)
18:06:40 <eldritch_cookie> hello apparently the matrix bridge is broken so i was just screaming into the void...
18:06:53 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 240 seconds)
18:07:03 <glguy> eldritch_cookie: your message about MonadThrow came through
18:07:31 <glguy> and then an earlier one about callCC, but I don't know what either had to do with bwe's question
18:08:09 × zetef quits (~quassel@95.77.17.251) (Ping timeout: 272 seconds)
18:08:59 <haskellbridge> <e​ldritchcookie> ok ??? isn't the problem that he wants shortcircuit evaluation??
18:09:05 <haskellbridge> <g​eekosaur> your messages appeaed on both sides of the bridge; what did you think went wrong?
18:10:36 <glguy> eldritch_cookie: the overall topic is about avoiding short-circuiting when possible
18:10:37 bontaq``` joins (~user@165.1.205.230)
18:11:01 <haskellbridge> <e​ldritchcookie> huh?
18:11:14 <haskellbridge> <e​ldritchcookie> doesn't void $ getC work?
18:11:49 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:11:54 <haskellbridge> <e​ldritchcookie> i see no reason why you would call getC not use its bound value and not want any side effects?
18:12:14 × bontaq`` quits (~user@ool-45779c03.dyn.optonline.net) (Read error: Connection reset by peer)
18:13:56 <haskellbridge> <e​ldritchcookie> geekousaur: i my earlier message was ignored, i then read the text on the top of the screen so i just assumed my message never went through,
18:15:59 × bontaq``` quits (~user@165.1.205.230) (Ping timeout: 256 seconds)
18:16:04 <haskellbridge> <e​ldritchcookie> i guess i was having the wrong expectations on discord even if you don't understand why it isn't related to the conversation you still respond
18:19:46 target_i joins (~target_i@user/target-i/x-6023099)
18:21:36 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
18:21:41 × thailigur quits (~thailigur@94.182.126.244) (Quit: Client closed)
18:28:58 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
18:31:04 × euphores quits (~SASL_euph@user/euphores) (Ping timeout: 255 seconds)
18:32:25 × CiaoSen quits (~Jura@2a05:5800:2ad:4600:e6b9:7aff:fe80:3d03) (Ping timeout: 256 seconds)
18:37:26 euphores joins (~SASL_euph@user/euphores)
18:50:05 × srz quits (~srz@181.228.49.93) (Ping timeout: 240 seconds)
18:50:08 <dminuoso> 17:12:52 EvanR │ but it's a strictly worse situation to be in
18:50:39 <EvanR> not knowing what you're supposed to be doing, not IO
18:50:39 <dminuoso> I somewhat disagree with that. Shoehorning all your effects into the type system just to avoid that general IO type seems more like a religious choice, especially because of all the pain that it often entails.
18:51:02 <dminuoso> The effects are either simple and non-composable, or they are composable and very complicated.
18:51:22 <dminuoso> Simple and composable effects is not something we have in Haskell.
18:51:42 <EvanR> on all the advanced solutions to do stuff in IO it seems a lot of times just IO would be simpler
18:51:55 <EvanR> but when IO is not involved I don't know
18:51:56 <monochrom> https://www.vex.net/~trebla/haskell/exception.xhtml :)
18:54:02 <haskellbridge> <e​ldritchcookie> dminuoso: i will have to disagree, i find Effectful quite simple, though if you want to escape IO with it you need a lot of boilerplate
18:54:39 <haskellbridge> <e​ldritchcookie> https://hackage.haskell.org/package/effectful
18:56:24 × destituion quits (~destituio@2a02:2121:650:17b6:2818:3a8c:bceb:d3de) (Ping timeout: 260 seconds)
18:56:39 srz joins (~srz@181.228.49.93)
18:57:53 × srz quits (~srz@181.228.49.93) (Remote host closed the connection)
18:58:29 <monochrom> I'm going to go on a hyperbole and say that I find category theory quite simple too. To prove that if I forgot how much maturity I needed before higher abstractions became simple to me, I would end up giving very derailing advice to beginners.
18:59:40 <monochrom> (I spent a year on universal algebra before I heard of category theory. So yeah of course the latter looks so obvious under the circumstance.)
19:00:09 <int-e> monochrom: "To understand Haskell, you must first understand adjunctions."
19:00:15 <monochrom> hahaha
19:00:47 <int-e> (which btw never clicked for me)
19:01:06 srz joins (~srz@181.228.49.93)
19:01:21 tri joins (~tri@ool-18bbef1a.static.optonline.net)
19:02:01 × srz quits (~srz@181.228.49.93) (Remote host closed the connection)
19:02:47 <monochrom> I also spent a year on lattice theory and Galois adjunctions before I heard of category theory. Even then, I avoided learning category's adjunction (because I hadn't needed it for a long time) until recently.
19:03:39 <monochrom> (Galois adjunction just means the two categories are just partial orders, so everything is simpler and a few things trivialized.)
19:04:48 <monochrom> The paper that finally demanded me to finally learn category's adjunctions seriously is Ralf Hinze's Adjoint Folds And Unfolds.
19:05:30 <monochrom> Oh it also uses Yoneda lemma and Kan extensions and ends and coends, so I am going into that rabbit hole these few weeks.
19:05:58 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 264 seconds)
19:06:52 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection)
19:07:15 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
19:10:50 misterfish joins (~misterfis@84.53.85.146)
19:27:18 <haskellbridge> <e​ldritchcookie> hourglass has 3500 indirect reverse dependencies and not only is it abandoned it doesn't compile on GHC 9.8
19:27:26 <haskellbridge> <e​ldritchcookie> fun
19:27:40 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 260 seconds)
19:40:47 <tomsmeding> @hackage acme-everything
19:40:47 <lambdabot> https://hackage.haskell.org/package/acme-everything
19:41:03 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:48:31 <haskellbridge> <e​ldritchcookie> is that supposed to be relevant to my message, i don't think i know how? i am just annoyed that i can't compile hoogle because tls doesn't compile due to a transitive dependency on hourglass
19:49:43 komikat_ joins (~akshitkr@218.185.248.66)
19:50:06 × komikat quits (~akshitkr@218.185.248.66) (Read error: Connection reset by peer)
19:57:56 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
19:59:45 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:02:35 srz joins (~srz@181.228.49.93)
20:03:52 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:04:45 <int-e> worksforme(tm)
20:05:23 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 264 seconds)
20:06:10 <int-e> (ignoring the fact that filepath-1.5 breaks stuff and it builds an older version instead)
20:06:46 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
20:09:05 dsrt^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net)
20:16:24 wootehfoot joins (~wootehfoo@user/wootehfoot)
20:16:24 Guest0 joins (~Guest0@129.170.197.184)
20:17:32 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:20:22 <Guest0> I’ve been looking into the trace function for debugging, and I found out that writing some code like this:
20:20:22 <Guest0>  myfun a b | trace ("foo " ++ show a ++ " " ++ show b) debug = a + b
20:20:23 <Guest0> allows me to print a message whenever some variable called debug is set to True. However, I would like to look into why this works on a conceptual level - if anyone knows the general name for the technique being used to make trace a third parameter of sorts (?), that would be really helpful
20:21:08 <int-e> that doesn't look right
20:21:45 <int-e> the way it's written, the message will be printed, the guard will evaluate to false and the rhs a + b won't be used.
20:21:54 ft joins (~ft@p508db2e6.dip0.t-ipconnect.de)
20:21:55 <int-e> if debug = False
20:22:12 <Guest0> It's set to true
20:22:38 <int-e> well, trace ... True will print ... and then evaluate to True.
20:22:57 <int-e> > let x | True = 1 in x
20:22:58 <lambdabot> 1
20:23:24 <int-e> so it's like that but with a side effect.
20:24:00 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
20:25:56 <Guest0> I see.  So the idea is that if you're pattern matching on a function and the part after the guard evaluates to False, the match for that particular pattern fails
20:26:23 × srz quits (~srz@181.228.49.93) (Ping timeout: 264 seconds)
20:26:40 <geekosaur> it's not the part after the guard, it's the guard itself
20:27:11 <int-e> my preferred style of doing this is https://paste.tomsmeding.com/GR8qsVSH -- that way the debug code is easy to comment out
20:27:11 <Guest0> Right
20:27:11 <geekosaur> and `Debug.Trace.trace msg a` evaluates to `a`, with a side effect of printing `msg`
20:27:41 <geekosaur> so a quick hack to trace evaluation of functions is to prefix a failing guard with a trace attached
20:28:01 <geekosaur> since the guard fails, evaluation falls through to the actual function
20:28:33 <int-e> (and using tuples and traceShow saves a bunch of `++` and `show` at the expense of a tiny bit of readability)
20:28:45 <tomsmeding> eldritchcookie: oh sorry I was missing the context that this is actually something you're running into
20:29:11 <tomsmeding> I thought I was replying to a joke with a joke
20:30:32 <Guest0> Yeah that definitely looks a lot more clear/readable, thanks for the example
20:30:54 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
20:31:40 × Guest0 quits (~Guest0@129.170.197.184) (Quit: Client closed)
20:35:31 × rncwnd quits (~quassel@2a01:4f8:221:27c6::1) (Ping timeout: 256 seconds)
20:49:14 × chiselfuse quits (~chiselfus@user/chiselfuse) (Ping timeout: 260 seconds)
20:50:29 × fmd quits (~fmd@user/framend) (Ping timeout: 240 seconds)
20:51:18 chiselfuse joins (~chiselfus@user/chiselfuse)
20:52:00 rncwnd joins (~quassel@2a01:4f8:221:27c6::1)
21:01:14 × chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection)
21:01:29 zetef joins (~quassel@95.77.17.251)
21:02:10 chiselfuse joins (~chiselfus@user/chiselfuse)
21:04:10 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
21:06:54 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
21:08:10 zetef_ joins (~quassel@5.2.182.98)
21:08:13 × zetef quits (~quassel@95.77.17.251) (Ping timeout: 264 seconds)
21:08:52 alexherbo2 joins (~alexherbo@2a02-8440-3240-c50e-314b-952c-1197-8413.rev.sfr.net)
21:18:48 tri joins (~tri@ool-18bbef1a.static.optonline.net)
21:23:51 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 272 seconds)
21:27:02 × alexherbo2 quits (~alexherbo@2a02-8440-3240-c50e-314b-952c-1197-8413.rev.sfr.net) (Remote host closed the connection)
21:31:49 × jau_ quits (~user@134.101.168.5.dynamic-pppoe.dt.ipv4.wtnet.de) (Quit: Leaving)
21:32:03 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 260 seconds)
21:33:25 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
21:36:08 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
21:38:43 × rncwnd quits (~quassel@2a01:4f8:221:27c6::1) (Ping timeout: 255 seconds)
21:39:00 mark` joins (~user@user/mark/x-6044658)
21:39:26 × mark` quits (~user@user/mark/x-6044658) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.1))
21:41:00 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:42:01 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:47:41 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
21:48:12 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
21:51:06 × michalz quits (~michalz@185.246.207.200) (Quit: ZNC 1.8.2 - https://znc.in)
21:54:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:57:55 rncwnd joins (~quassel@2a01:4f8:221:27c6::1)
22:01:36 noumenon joins (~noumenon@113.51-175-156.customer.lyse.net)
22:02:03 L29Ah joins (~L29Ah@wikipedia/L29Ah)
22:03:24 pavonia joins (~user@user/siracusa)
22:04:21 jargon joins (~jargon@154.sub-174-205-226.myvzw.com)
22:05:18 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds)
22:06:16 × Katarushisu1 quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Quit: Ping timeout (120 seconds))
22:06:58 × phma quits (phma@2001:5b0:211f:bff8:ed6a:61e2:ef0c:3875) (Read error: Connection reset by peer)
22:08:05 phma joins (phma@2001:5b0:2172:bea8:4de3:ce84:5b1f:c1a2)
22:08:52 Katarushisu1 joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net)
22:15:23 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
22:15:36 ChaiTRex joins (~ChaiTRex@user/chaitrex)
22:16:03 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:19:12 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:20:57 srz joins (~srz@181.228.49.93)
22:23:02 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds)
22:25:01 euphores joins (~SASL_euph@user/euphores)
22:25:45 × zetef_ quits (~quassel@5.2.182.98) (Remote host closed the connection)
22:25:46 ChaiTRex joins (~ChaiTRex@user/chaitrex)
22:29:24 Square3 joins (~Square4@user/square)
22:31:18 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
22:31:53 ChaiTRex joins (~ChaiTRex@user/chaitrex)
22:32:16 × Square quits (~Square@user/square) (Ping timeout: 255 seconds)
22:32:49 tri joins (~tri@ool-18bbef1a.static.optonline.net)
22:33:25 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:37:10 × tri quits (~tri@ool-18bbef1a.static.optonline.net) (Ping timeout: 264 seconds)
22:43:02 fmd joins (~fmd@2a02-8429-4b52-f901-ef8a-cb4a-81a3-e1f5.rev.sfr.net)
22:45:25 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:49:13 Sgeo joins (~Sgeo@user/sgeo)
23:05:39 × travgm__ quits (~travgm@2600:100e:a121:ef84:212e:f7c5:fded:46ea) (Read error: Connection reset by peer)
23:06:26 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds)
23:06:54 travgm__ joins (~travgm@2600:100e:a121:ef84:90d:44c5:aa1d:9cd6)
23:07:24 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
23:09:24 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 268 seconds)
23:16:05 × fmd quits (~fmd@2a02-8429-4b52-f901-ef8a-cb4a-81a3-e1f5.rev.sfr.net) (Ping timeout: 240 seconds)
23:21:06 <zwro> Guest0: this a trick i use https://paste.jrvieira.com/1709853617520
23:24:25 <zwro> not exactly what you want, but it's an easy way to print something whenever the function runs, and easy to just comment out
23:26:50 <geekosaur> they left several hours ago…
23:27:54 <zwro> did they?
23:27:55 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection)
23:27:59 <int-e> they did
23:28:02 endojelly joins (~eselber_p@user/endojelly)
23:28:07 <endojelly> so, indexed lenses...
23:28:08 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
23:28:19 <endojelly> is there an indexed lens/getter to get me *only* the index?
23:28:56 <ncf> :t asIndex
23:28:57 <lambdabot> (Indexable i p, Contravariant f, Functor f) => p i (f i) -> Indexed i s (f s)
23:29:01 <endojelly> Stuff like itraversed<.>itraversed keeps the indices of both levels *and* the value on the last level
23:29:04 <endojelly> oh, I'll try that, thanks
23:29:28 <endojelly> wow, I looked at everything starting with "i", at "withIndex"... didn't notice "asIndex"
23:30:17 × dolio quits (~dolio@130.44.134.54) (Quit: ZNC 1.8.2 - https://znc.in)
23:31:47 dolio joins (~dolio@130.44.134.54)
23:34:31 <endojelly> > itoListOf (itraversed<.itraversed.asIndex) $ fromList [(1, fromList [('a', "foo"), ('b', "bar")]), (2, empty), (3, fromList [('c', "BAZ")])]
23:34:33 <lambdabot> error:
23:34:33 <lambdabot> • Variable not in scope: fromList :: [(a1, f0 a0)] -> t0 (t1 b0)
23:34:33 <lambdabot> • Perhaps you meant one of these:
23:34:43 bontaq``` joins (~user@ool-45779c03.dyn.optonline.net)
23:35:18 <geekosaur> :t M.fromList
23:35:19 <lambdabot> Ord k => [(k, a)] -> M.Map k a
23:35:30 × dolio quits (~dolio@130.44.134.54) (Client Quit)
23:35:31 <endojelly> > itoListOf (itraversed<.itraversed.asIndex) $ M.fromList [(1, M.fromList [('a', "foo"), ('b', "bar")]), (2, empty), (3, M.fromList [('c', "BAZ")])]
23:35:32 <lambdabot> error:
23:35:32 <lambdabot> • Could not deduce (Alternative (M.Map Char))
23:35:32 <lambdabot> arising from a use of ‘empty’
23:35:43 <endojelly> > itoListOf (itraversed<.itraversed.asIndex) $ M.fromList [(1, M.fromList [('a', "foo"), ('b', "bar")]), (2, M.empty), (3, M.fromList [('c', "BAZ")])]
23:35:44 <lambdabot> [(1,'a'),(1,'b'),(3,'c')]
23:35:48 <endojelly> love it, thanks!
23:36:13 × srz quits (~srz@181.228.49.93) (Ping timeout: 272 seconds)
23:39:03 × mei quits (~mei@user/mei) (Remote host closed the connection)
23:41:19 dolio joins (~dolio@130.44.134.54)
23:41:30 mei joins (~mei@user/mei)
23:44:22 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
23:46:07 mhatta joins (~mhatta@www21123ui.sakura.ne.jp)
23:54:39 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
23:58:01 × acidjnk_new3 quits (~acidjnk@p200300d6e737e753f8b7044289a8517e.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)

All times are in UTC on 2024-03-07.