Home liberachat/#haskell: Logs Calendar

Logs on 2022-05-09 (liberachat/#haskell)

00:01:28 × xff0x quits (~xff0x@om126033119107.35.openmobile.ne.jp) (Read error: Connection reset by peer)
00:02:45 × chomwitt quits (~chomwitt@2a02:587:dc19:d600:24ae:3716:1088:6d4d) (Ping timeout: 252 seconds)
00:03:37 × wgl quits (~wgl@75-161-32-115.albq.qwest.net) (Quit: wgl)
00:04:02 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
00:12:09 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 276 seconds)
00:12:23 xff0x joins (~xff0x@om126033119107.35.openmobile.ne.jp)
00:14:15 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
00:18:36 × xff0x quits (~xff0x@om126033119107.35.openmobile.ne.jp) (Read error: Connection reset by peer)
00:21:19 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
00:40:13 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
00:44:55 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
00:46:31 Guest97 joins (~Guest97@2804:4d98:3001:15:fd23:41a0:a491:af36)
00:49:56 <Axman6> energizer: that feels like something linear types might help with, though not currently supported by the compiler
00:51:25 <Axman6> if you knew that xs and its contents weren't referenced by anything else, you could potentially mutate the objects when performing map f to avoid reallocation (but that would also depend on things like the object size being smaller afterwards)
00:56:22 <ski> that would be uniqueness types, no ?
00:57:01 <ski> (well, you could still update-in-place the cons cells)
00:57:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
00:57:45 <dminuoso> ski: What is the difference?
00:58:41 <ski> with uniqueness, you know that the reference hasn't been duplicated in the past, but you're allowed to duplicate it in the future (unless you're required to hand back a unique reference, and you can't conjure up another one)
00:58:57 <dminuoso> Ahh I see.
00:59:13 <dminuoso> So what Clean has is properly called uniqueness types then
00:59:21 <ski> with linearity, you are not allowed to duplicate it in the future, but it might still have been duplicated in the past (before being demoted from sharable to linear)
00:59:25 <ski> yes
00:59:50 <ski> (Mercury also has uniqueness, although it's tracked by its inst (instantiation state) system, rather than its type system)
01:01:25 <ski> (although, istr the linear types paper for Haskell mentioned some way of (indirectly) expressing the behaviour of uniqueness, using linearity .. by using CPS, iirc. so it might be that one could say they're dual in some sense, and perhaps (with some awkwardness perhaps) interexpressible (perhaps with some restrictions) .. not totally sure)
01:02:23 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
01:02:50 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:03:20 ec joins (~ec@gateway/tor-sasl/ec)
01:05:22 × jollygood2 quits (~bc8147f2@199.204.85.195) (Quit: CGI:IRC (Session timeout))
01:05:23 <dolio> Being demoted is only a problem if there's a way to have non-linear arrays. So as long as you can only create linear ones, you can use linear types for managing them.
01:06:24 <ski> point
01:06:35 <dolio> That does mean you can't just have one array type if you do want shareable arrays, though.
01:10:40 × Guest97 quits (~Guest97@2804:4d98:3001:15:fd23:41a0:a491:af36) (Quit: Client closed)
01:10:46 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:18 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
01:12:49 xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
01:13:15 zebrag joins (~chris@user/zebrag)
01:13:25 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
01:16:53 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:17:45 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
01:20:10 frost joins (~frost@user/frost)
01:34:00 jmcarthur joins (~textual@c-73-29-224-10.hsd1.nj.comcast.net)
01:34:56 × jmcarthur quits (~textual@c-73-29-224-10.hsd1.nj.comcast.net) (Client Quit)
01:35:20 jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
01:38:07 <jmcarthur> Man, it's been a while since I've hung around here
01:38:56 <pavonia> Welcome back
01:38:58 <jmcarthur> Does anybody know if there anything similar to GArrows or Conal's CCC plugin that's in a reasonably polished state?
01:39:52 <jmcarthur> I'm sad every time I come up with a Category-style interface because it always feels like it *could* be nice to use, but just isn't.
01:40:12 <ski> wb :)
01:40:51 <jmcarthur> :)
01:44:09 <jmcarthur> Basically what I want is just proc notation for "Arrow without arr", which I know everybody wants, so it's likely that if something nice existed I would already know about it, but I'm just checking because I haven't been paying as much attention to everything lately.
01:52:38 × king_gs quits (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634) (Quit: king_gs)
01:56:29 srz joins (~srz@179.36.123.54)
01:58:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
01:59:00 andrey_ joins (~andrey@p200300dbcf097700316169ecbe32078f.dip0.t-ipconnect.de)
02:00:24 ski hasn't, either
02:01:28 × jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
02:01:32 gpncarl joins (~gpncarl@210.12.195.5)
02:01:40 × andrey quits (~andrey@p200300dbcf48ce00934437bb39b09cba.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
02:01:46 pottsy joins (~pottsy@129.227.183.244)
02:03:14 tommd joins (~tommd@97-120-26-41.ptld.qwest.net)
02:03:54 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
02:04:52 jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
02:06:20 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving)
02:10:23 × gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
02:11:52 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:11:52 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:11:52 finn_elija is now known as FinnElija
02:19:20 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
02:20:08 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
02:20:08 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
02:20:08 wroathe joins (~wroathe@user/wroathe)
02:20:09 × alp_ quits (~alp@user/alp) (Ping timeout: 248 seconds)
02:21:11 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:24:36 kimjetwav joins (~user@2607:fea8:2362:b400:c51a:4d23:ff59:2b8)
02:37:59 × jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
02:38:31 jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
02:40:34 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
02:43:04 × jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Ping timeout: 250 seconds)
02:47:45 × gpncarl quits (~gpncarl@210.12.195.5) (Quit: WeeChat 3.4.1)
02:51:48 × td_ quits (~td@94.134.91.69) (Ping timeout: 248 seconds)
02:53:54 td_ joins (~td@94.134.91.132)
02:54:47 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
02:57:02 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
02:59:16 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds)
03:00:07 × Taneb quits (~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Quit: I seem to have stopped.)
03:01:13 Taneb joins (~Taneb@runciman.hacksoc.org)
03:01:50 mixfix41 joins (~sdenyninn@user/mixfix41)
03:02:12 yauhsien_ joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
03:03:43 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
03:10:37 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:10:37 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:10:37 wroathe joins (~wroathe@user/wroathe)
03:11:33 galio joins (~textual@c-174-63-73-241.hsd1.vt.comcast.net)
03:14:31 nate1 joins (~nate@98.45.169.16)
03:15:34 × galio quits (~textual@c-174-63-73-241.hsd1.vt.comcast.net) (Client Quit)
03:15:56 galio joins (~textual@c-174-63-73-241.hsd1.vt.comcast.net)
03:17:54 × srz quits (~srz@179.36.123.54) (Quit: Leaving)
03:20:04 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
03:22:36 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 276 seconds)
03:23:28 uam joins (uid360535@id-360535.hampstead.irccloud.com)
03:36:26 slack1256 joins (~slack1256@181.42.52.221)
03:37:27 mvk joins (~mvk@2607:fea8:5ce3:8500::aa1d)
03:42:06 slac73837 joins (~slack1256@191.125.99.83)
03:44:27 × slack1256 quits (~slack1256@181.42.52.221) (Ping timeout: 256 seconds)
03:46:20 slac73837 is now known as slack1256
03:47:41 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
03:53:23 × tommd quits (~tommd@97-120-26-41.ptld.qwest.net) (Ping timeout: 260 seconds)
03:54:01 jmcarthur joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
04:05:25 × yauhsien_ quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
04:07:51 × galio quits (~textual@c-174-63-73-241.hsd1.vt.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
04:20:03 king_gs joins (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634)
04:26:34 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
04:27:03 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
04:27:08 coot joins (~coot@213.134.190.95)
04:30:37 littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
04:31:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
04:35:05 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
04:35:57 <jackdk> jmcarthur: Someone from Kittyhawk gave a presentation on where they've taken CCC at this year's bobkonf
04:36:10 <jackdk> https://bobkonf.de/2022/pfeil.html
04:38:20 Dorkside69 joins (~dorkside@208.190.197.222)
04:39:00 × Dorkside6 quits (~dorkside@208.190.197.222) (Read error: Connection reset by peer)
04:39:00 Dorkside69 is now known as Dorkside6
04:45:11 × slack1256 quits (~slack1256@191.125.99.83) (Remote host closed the connection)
04:55:40 × mvk quits (~mvk@2607:fea8:5ce3:8500::aa1d) (Ping timeout: 250 seconds)
04:56:58 jargon joins (~jargon@174-22-206-112.phnx.qwest.net)
05:04:05 × mcfrdy quits (~mcfrdy@user/mcfrdy) (*.net *.split)
05:04:05 × dpratt quits (sid193493@id-193493.helmsley.irccloud.com) (*.net *.split)
05:04:05 × TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (*.net *.split)
05:04:05 × SanchayanMaity quits (sid478177@id-478177.hampstead.irccloud.com) (*.net *.split)
05:04:05 × energizer quits (~energizer@user/energizer) (*.net *.split)
05:04:05 × davean quits (~davean@davean.sciesnet.net) (*.net *.split)
05:04:05 × dkeohane2 quits (~dkeohane@ec2-18-189-29-140.us-east-2.compute.amazonaws.com) (*.net *.split)
05:04:05 × bwe quits (~bwe@2a01:4f8:1c1c:4878::2) (*.net *.split)
05:04:13 bwe joins (~bwe@2a01:4f8:1c1c:4878::2)
05:04:15 TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667)
05:04:19 SanchayanMaity joins (sid478177@id-478177.hampstead.irccloud.com)
05:04:47 mcfrdy joins (~mcfrdy@user/mcfrdy)
05:04:54 dpratt joins (sid193493@id-193493.helmsley.irccloud.com)
05:04:57 davean joins (~davean@davean.sciesnet.net)
05:05:22 dkeohane2 joins (~dkeohane@ec2-18-189-29-140.us-east-2.compute.amazonaws.com)
05:08:17 mbuf joins (~Shakthi@122.174.206.211)
05:09:27 energizer joins (~energizer@user/energizer)
05:11:29 × inversed_ quits (~inversed@176.248.27.211) (*.net *.split)
05:11:30 × fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (*.net *.split)
05:11:30 × agrosant quits (~agrosant@79.103.56.172.dsl.dyn.forthnet.gr) (*.net *.split)
05:11:30 × adium quits (adium@user/adium) (*.net *.split)
05:11:30 × matijja quits (~matijja@193.77.181.201) (*.net *.split)
05:11:30 × koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (*.net *.split)
05:11:30 × maerwald quits (~maerwald@user/maerwald) (*.net *.split)
05:11:30 × byorgey quits (~byorgey@155.138.238.211) (*.net *.split)
05:11:30 × simeon quits (~pi@dslb-088-078-150-105.088.078.pools.vodafone-ip.de) (*.net *.split)
05:11:30 × FragByte quits (~christian@user/fragbyte) (*.net *.split)
05:11:30 × m1dnight quits (~christoph@78-22-9-5.access.telenet.be) (*.net *.split)
05:11:30 × gabiruh quits (~gabiruh@vps19177.publiccloud.com.br) (*.net *.split)
05:11:30 × haritz quits (~hrtz@user/haritz) (*.net *.split)
05:11:37 simeon joins (~pi@dslb-088-078-150-105.088.078.pools.vodafone-ip.de)
05:11:38 byorgey joins (~byorgey@155.138.238.211)
05:11:38 koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com)
05:11:39 FragByte joins (~christian@user/fragbyte)
05:11:40 haritz joins (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk)
05:11:45 × haritz quits (~hrtz@82-69-11-11.dsl.in-addr.zen.co.uk) (Changing host)
05:11:45 haritz joins (~hrtz@user/haritz)
05:11:45 matijja joins (~matijja@193.77.181.201)
05:11:46 gabiruh joins (~gabiruh@vps19177.publiccloud.com.br)
05:11:49 fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com)
05:11:59 maerwald joins (~maerwald@mail.hasufell.de)
05:12:11 m1dnight joins (~christoph@78-22-9-5.access.telenet.be)
05:12:12 adium joins (adium@user/adium)
05:12:34 bahamas joins (~lucian@84.232.141.55)
05:13:26 × king_gs quits (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634) (Ping timeout: 250 seconds)
05:14:17 king_gs joins (~Thunderbi@187.201.105.54)
05:15:30 agrosant joins (~agrosant@79.103.56.172.dsl.dyn.forthnet.gr)
05:15:34 inversed joins (~inversed@176.248.27.211)
05:15:45 × agrosant quits (~agrosant@79.103.56.172.dsl.dyn.forthnet.gr) (Max SendQ exceeded)
05:16:04 × littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
05:17:43 chomwitt joins (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592)
05:18:28 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 248 seconds)
05:19:00 × Dorkside6 quits (~dorkside@208.190.197.222) (Ping timeout: 248 seconds)
05:19:50 × inversed quits (~inversed@176.248.27.211) (Ping timeout: 240 seconds)
05:20:02 agrosant joins (~agrosant@79.103.56.172.dsl.dyn.forthnet.gr)
05:21:06 nut joins (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
05:22:43 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
05:22:52 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
05:27:13 Dorkside6 joins (~dorkside@208.190.197.222)
05:27:13 littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
05:27:24 inversed joins (~inversed@176.248.27.211)
05:30:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
05:31:34 × littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
05:32:15 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
05:35:14 michalz joins (~michalz@185.246.204.125)
05:36:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
05:37:16 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:37:39 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Quit: Konversation terminated!)
05:42:54 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
05:44:46 × Dorkside6 quits (~dorkside@208.190.197.222) (Ping timeout: 246 seconds)
05:53:13 × uam quits (uid360535@id-360535.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
05:57:03 × king_gs quits (~Thunderbi@187.201.105.54) (Read error: Connection reset by peer)
05:57:07 king_gs1 joins (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634)
05:59:25 king_gs1 is now known as king_gs
06:02:00 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
06:03:40 Dorkside6 joins (~dorkside@208.190.197.222)
06:23:56 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
06:24:50 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
06:25:56 fef joins (~thedawn@user/thedawn)
06:26:46 × nut quits (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds)
06:34:05 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
06:35:02 nut joins (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
06:36:24 lortabac joins (~lortabac@2a01:e0a:541:b8f0:10ff:daf4:e8f5:4537)
06:36:40 × shailangsa quits (~shailangs@host86-186-127-233.range86-186.btcentralplus.com) (Ping timeout: 260 seconds)
06:42:34 bahamas joins (~lucian@84.232.141.55)
06:43:31 chele joins (~chele@user/chele)
06:43:58 × jargon quits (~jargon@174-22-206-112.phnx.qwest.net) (Remote host closed the connection)
06:47:02 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 250 seconds)
06:47:13 <tomsmeding> ski: that cps trick is this thing: https://hackage.haskell.org/package/linear-base-0.2.0/docs/Data-Array-Mutable-Linear.html#v:alloc
06:47:22 <tomsmeding> Not sure about the other way round
06:49:24 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 240 seconds)
06:50:14 acidjnk joins (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de)
06:50:59 dsrt^ joins (~dsrt@173-160-94-253-atlanta.hfc.comcastbusiness.net)
06:52:31 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
06:55:49 cfricke joins (~cfricke@user/cfricke)
06:57:58 mmhat joins (~mmh@2001:4090:a243:8065:ee08:6bff:fe09:5315)
06:58:56 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
06:59:41 jinsun joins (~jinsun@user/jinsun)
07:04:14 bahamas joins (~lucian@84.232.141.55)
07:04:26 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:06:55 <dminuoso> dolio: Can you elaborate on what you mean by demoted?
07:12:01 <dolio> Well, I wasn't the one who first used it. But, you can always pass a non-linear thing to something expecting a linear thing.
07:12:24 <dolio> Because it's safe to use something linearly.
07:18:22 mikoto-chan joins (~mikoto-ch@84.199.144.234)
07:19:20 <dolio> This is the opposite of uniqueness. It's safe to pass a unique thing to something that doesn't require uniqueness.
07:19:52 shailangsa joins (~shailangs@host86-186-127-233.range86-186.btcentralplus.com)
07:21:11 <sm> is *> different from >> ?
07:21:20 <dminuoso> sm: No.
07:21:28 <sm> thanks
07:24:02 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
07:28:03 × king_gs quits (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634) (Ping timeout: 260 seconds)
07:30:27 kuribas joins (~user@ptr-22ndgz86kjxhmhak.0000808120a2.ip6.access.telenet.be)
07:31:25 alp_ joins (~alp@user/alp)
07:37:51 zeenk joins (~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d)
07:45:38 king_gs joins (~Thunderbi@187.201.105.54)
07:46:39 mastarija joins (~mastarija@2a05:4f46:e04:6000:15e:37d3:79e0:36e0)
07:47:29 machinedgod joins (~machinedg@24.105.81.50)
07:48:38 <mastarija> I'm reading the "Category theory for programmers" and on the page 114 (132 in pdf) it feels like the graph showing bifunctors as a "product" is wrong and is actually a "sum".
07:48:44 <mastarija> https://github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v1.3.0/category-theory-for-programmers.pdf
07:48:51 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
07:48:51 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
07:49:04 <mastarija> Is my intuition correct, or am I misunderstanding something?
07:49:17 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
07:51:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
07:51:50 azimut joins (~azimut@gateway/tor-sasl/azimut)
07:52:38 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
07:57:27 <[exa]> mastarija: I understood it such that both morphisms need to be present, so I'd say the "product" is okay there. If you'd have a sum, it would be "eitherfunctor" or something
07:57:48 <sm> there was a semi recent package announced for rendering module import graphs, does anyone remember it ? Or any tool that works well ?
07:58:24 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:58:59 <[exa]> mastarija: the 'first' and 'second' look kinda like left/right, but actually these are left and right product with `id`
07:59:00 <mastarija> [exa], yes from the text I kind of get that, but the graph is very confusing though.
08:00:04 <[exa]> yeah, would be better if there was a "bag" for both c an d (but that would kinda break the display in the following diagrams)
08:00:09 <mastarija> I'd first define a product of DxC and then map that to E
08:01:10 <mastarija> Ok. I guess that settles it. I was just unsure if this was a shorthand of sorts or if I'm not understanding things correctly.
08:01:11 <mastarija> Thx
08:02:40 <[exa]> yeah doing the product first should be kinda the same, but I'd be afraid that it would become unwieldy later because of the need of deconstructing the products (e.g., how do you extract the `id`s for `first` and `second` later?)
08:03:58 <[exa]> (is the actual product category isomorphic to the bifunctor there? [shrug.gif] )
08:04:31 <mastarija> I guess I'm about to find out :)
08:05:56 <[exa]> ah, literally on the same page
08:05:58 <[exa]> > Categories in which joint functoriality fails are called
08:05:59 <[exa]> premonoidal
08:06:00 <lambdabot> <hint>:1:12: error: parse error on input ‘in’
08:06:27 [exa] apologies for waking lambdabot on monday morning
08:08:30 gehmehgeh joins (~user@user/gehmehgeh)
08:09:40 ccntrq joins (~Thunderbi@exit-1.rz.nue.de.mhd.medondo.com)
08:12:50 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 252 seconds)
08:13:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
08:15:13 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
08:19:05 <Franciman> is there a list of supported platforms by the native code generator of ghc?
08:20:33 <merijn> Franciman: https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms
08:20:43 <Franciman> thanks
08:21:27 <merijn> Seems a bit out of date, though
08:21:34 <merijn> since the new M1 apple isn't mentioned
08:21:45 <Franciman> i couldn't find anything else so far
08:22:06 <merijn> OTOH, last updated 2 months ago
08:22:13 <merijn> And also #ghc, of course :)
08:22:19 <Franciman> well otoh there is the llvm backend
08:22:23 <Franciman> it works on a lot of platforms
08:23:25 <Franciman> thanks
08:23:25 × king_gs quits (~Thunderbi@187.201.105.54) (Read error: Connection reset by peer)
08:24:51 <merijn> Anyway, #ghc is probably the best way to get quick/accurate response about low level details like "what exactly does the NCG run on?"
08:25:29 × kuribas quits (~user@ptr-22ndgz86kjxhmhak.0000808120a2.ip6.access.telenet.be) (Ping timeout: 252 seconds)
08:26:41 king_gs joins (~Thunderbi@187.201.105.54)
08:29:35 CiaoSen joins (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:30:16 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
08:32:16 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
08:32:31 bahamas joins (~lucian@86.120.21.179)
08:39:13 × mastarija quits (~mastarija@2a05:4f46:e04:6000:15e:37d3:79e0:36e0) (Quit: Leaving)
08:41:53 gurkenglas joins (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
08:44:20 littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
08:46:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
08:58:26 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:59:04 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
08:59:57 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 276 seconds)
09:00:09 × o1lo0lol1o[m] quits (~o1lo0lol1@2001:470:69fc:105::1:d1c0) (Quit: You have been kicked for being idle)
09:02:02 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:09:43 × king_gs quits (~Thunderbi@187.201.105.54) (Ping timeout: 256 seconds)
09:14:58 kuribas joins (~user@ptr-22ncmprk7023eeg8.0000808120a2.ip6.access.telenet.be)
09:23:47 × acidjnk quits (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
09:25:16 <sm> don't https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-List.html#v:group & groupBy work only if the list is sorted first ? no mention of this in the haddock
09:26:21 <merijn> sm: hmm?
09:26:31 <merijn> sm: I think you're thinking it does something different from what it does
09:26:44 <merijn> "takes a list and returns a list of lists such that the concatenation of the result is equal to the argument."
09:26:52 <merijn> "Moreover, each sublist in the result contains only equal elements. "
09:27:05 <merijn> i.e., it groups adjacent elements that are equal
09:27:15 <merijn> I don't see how being sorted is required?
09:28:25 <sm> > group [1,2,1,2]
09:28:27 <lambdabot> [[1],[2],[1],[2]]
09:29:11 <sm> apparently it is
09:29:17 <merijn> sm: No?
09:29:19 <sm> as with nub
09:29:28 <merijn> sm: All adjacent equal elements are grouped
09:29:32 <sm> > group $ sort [1,2,1,2]
09:29:33 <lambdabot> [[1,1],[2,2]]
09:29:40 <merijn> sm: Like, the example literally shows
09:29:50 <merijn> > group "Mississippi"
09:29:52 <lambdabot> ["M","i","ss","i","ss","i","pp","i"]
09:30:09 odnes joins (~odnes@5-203-249-228.pat.nym.cosmote.net)
09:30:16 <sm> merijn: maybe so, but the description doesn't say that
09:30:23 <merijn> sm: It literally does?
09:30:30 <merijn> I even just copied and pasted that?
09:30:59 <sm> I'm reading "The group function takes a list and returns a list of lists such that the concatenation of the result is equal to the argument.". Ok I guess it does say that, though not literally.
09:31:02 <sm> thanks
09:31:05 <merijn> order isn't changed, because the concatenation of the result is the same thing
09:31:36 <merijn> I guess you could reword it, but the mississippi example right below it seems pretty clear?
09:33:19 <sm> yes it is, you're right. As with nub I tend to forget and assume this does a different, higher-level operation (group like things, wherever they may be in the list)
09:33:49 <sm> the name sort of implies that
09:33:51 <Hecate> the wording is bad indeed
09:34:57 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:35:01 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:35:13 oxide joins (~lambda@user/oxide)
09:35:26 <sm> (well in my mind it implied that anyway)
09:35:45 <merijn> I mean, you could insert "Groups adjacent elements. That is, <insert old specification>"
09:36:11 <merijn> And by "you" I mean "anyone but me" :D
09:37:10 <dminuoso> I think this is miscommunication. sm expects it to do A), documentation says it does B), though you can do A via B if you sort the input list first.
09:37:46 <dminuoso> The names "group" and "groupBy" are certainly poorly chosen, since their name itself implies what sm wants.
09:37:52 <merijn> well
09:38:01 <merijn> It also implies what it actually does
09:38:14 <merijn> it's just there's 2 different things than can reasonably be described the same way
09:38:35 <dminuoso> If "groupBy" behaves slightly different from what similarly named functions in other programming languages do, it doesnt help. :)
09:38:37 × gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
09:38:39 <dminuoso> Right
09:39:14 <merijn> I think the name is fine, it think the specification is fine (in the sense of complete and accurate), I just think it's lacking a 4 word summary for the impatient
09:39:22 <dminuoso> sm: For what its worth, this actually caused a bug in our compiler that was quite tricky to find. :)
09:39:34 <sm> I can see "group" meaning either behaviour. But I think the one I wanted is the one people most often want, and the name or at least doc of the function could probably be make a little more proof against folks like me
09:39:51 <dminuoso> If you feel the documentation can be improved, feel free to make a pull request.
09:39:57 <sm> dminuoso: thanks, now I feel better! :)
09:40:21 <merijn> sm: Personally whenever I end up wanting to group things your way I tend towards a fold building a Map
09:40:35 <merijn> Which is why we should change the Semigroup instance of Map >.<
09:40:42 <merijn> Join my crusade!
09:40:49 <merijn> Excise the evil stupid instance
09:40:49 <dminuoso> What semigroup instance do you want?
09:40:59 <sm> personally I add a sort.
09:41:09 <merijn> dminuoso: "(Ord k, Semigroup v) => Semigroup (Map k v)"
09:41:27 <dminuoso> This unions them together, right?
09:41:32 <merijn> dminuoso: Yes
09:41:41 <dminuoso> Ah, I see what you want
09:41:42 <merijn> The current version is a left-biased union
09:41:44 <merijn> Which sucks
09:42:06 <merijn> I wanna just do "foldMap (\k -> M.singleton k (Sum 1))" to count stuff
09:42:15 <dminuoso> I fear your crusade is a hopeless one, you will be riding on Dapple.
09:42:16 <merijn> So many useful tricks!
09:42:30 <dminuoso> The kind of breackage that would insue could be hard to measure
09:42:38 <merijn> left-biased union is such a shitty instance :(
09:42:45 <merijn> and I have to reimplement mine every time
09:42:53 <dminuoso> Yeah, but getting rid of that one seems impossible now.
09:43:08 <dminuoso> Well, getting rid of is easy. Replacing it with the one you suggested..
09:43:35 <dminuoso> Can you tie depretation warnings into typeclass instances?
09:43:57 <merijn> not yet
09:44:51 <dminuoso> I think this this is mandatory for your crusade
09:45:14 × mmhat quits (~mmh@2001:4090:a243:8065:ee08:6bff:fe09:5315) (Quit: WeeChat 3.5)
09:45:59 <dminuoso> For me, what I really sorely miss, is a builtin interface for insert that fails on conflict.
09:46:08 <merijn> Ah, yes
09:46:12 <dminuoso> Everywhere I use maps, I re-roll the same thing with alterF
09:46:18 <merijn> dminuoso: Same
09:46:33 <merijn> but never quite exactly the same :\
09:46:42 <dminuoso> Yup!
09:46:57 <dminuoso> So I guess the answer to that is: alterF is exactly right.
09:47:03 <dminuoso> Just uncomfortable to use.
09:50:34 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
09:52:41 <Franciman> lol
09:55:30 × nut quits (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
09:57:26 <dminuoso> How do you reset lambdabot?
09:58:17 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:10ff:daf4:e8f5:4537) (Read error: Connection reset by peer)
09:58:36 × CiaoSen quits (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
09:58:47 <dminuoso> merijn: maybe this helper might be the gap?
09:58:50 <dminuoso> :t insertF
09:58:52 <lambdabot> (Applicative f, Ord k) => (k -> t -> t -> f (Maybe t)) -> k -> t -> M.Map k t -> f (M.Map k t)
09:59:04 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:59:08 <dminuoso> Defined as: insertF f k a = M.alterF go k where go Nothing = pure (Just a); go (Just a') = f k a a'
09:59:18 <tdammers> jeez, for a second there I thought I was reading a political debate: "left-biased union is such a shitty instance"...
09:59:55 <merijn> tdammers: Naah, my political discourse is more: I'm not saying cannibalism is great, but maybe we should bring back eating prime ministers that disappoint...
10:00:18 <merijn> dminuoso: What's the second 't' in that first function?
10:00:38 <merijn> hmm
10:00:50 <merijn> this definition is to confusing for me on one line :p
10:01:16 searemind joins (~searemind@122.161.49.12)
10:01:26 <dminuoso> merijn: Ah that's just the two values, the one existing in the map and the new one
10:01:37 <dminuoso> We can drop the key or the value-to-be-inserted
10:02:00 <dminuoso> The point really is to just let you cover the conflict case
10:02:54 <dminuoso> The choices I usually have is either replace but collect a warning, or dont replace but collect a warning or throw some exception
10:03:25 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
10:05:31 × bahamas quits (~lucian@86.120.21.179) (Ping timeout: 246 seconds)
10:06:28 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
10:07:25 × searemind quits (~searemind@122.161.49.12) (Remote host closed the connection)
10:14:56 × mikoto-chan quits (~mikoto-ch@84.199.144.234) (Ping timeout: 252 seconds)
10:15:24 nut joins (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
10:17:10 × xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
10:17:58 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
10:18:31 lortabac joins (~lortabac@2a01:e0a:541:b8f0:10ff:daf4:e8f5:4537)
10:18:33 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
10:18:40 kuribas` joins (~user@2a02:1808:1:72e3:9db4:7b66:5f90:2ba8)
10:20:09 × kuribas quits (~user@ptr-22ncmprk7023eeg8.0000808120a2.ip6.access.telenet.be) (Ping timeout: 248 seconds)
10:20:24 xaotuk joins (~sasha@2a06:5b00:15fe:9b00::2)
10:21:57 <jmcarthur> jackdk: This looks great! Thank you!
10:23:58 Pickchea joins (~private@user/pickchea)
10:27:10 dhil joins (~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net)
10:28:44 CiaoSen joins (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
10:32:06 <kuribas`> I was attempting to put type variables in a record, but sadly haskell doesn't accept this syntax...
10:32:54 <kuribas`> data Foo :: (FooVars * -> *) where Foo :: { aFoo :: foo foovars , aBar :: bar foovars} -> Foo ('FooVars{ foo = aFoo, bar = aBar})
10:38:59 <tdammers> merijn: any political stance that starts with "I'm not saying cannibalism is great, but..." is at least interesting in my book
10:39:27 <maerwald> xD
10:39:52 <maerwald> "...but it does taste like chicken"
10:40:00 <kuribas`> This works: data Foo :: (FooVars * -> *) where Foo :: { aFoo :: foo foovars , aBar :: bar foovars} -> Foo ('FooVars aFoo aBar)
10:40:07 <int-e> . o O ( Soylent Green )
10:40:31 <kuribas`> But it's not better than data Foo foo bar = ...
10:40:51 <kuribas`> I am doing to much idris probably...
10:44:36 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 276 seconds)
10:46:45 jgeerds joins (~jgeerds@d53604b0.access.ecotel.net)
10:49:12 <kuribas`> I am experimenting with a REST framework using higher kinded records.
10:49:12 <kuribas`> It doesn't like anyone attempted this before?
10:49:13 × jespada quits (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
10:49:14 <kuribas`> Basically the specification would be in an instance of a HKD record.
10:49:15 <kuribas`> For each endpoint you make a record of captures, a record of parameters, etc...
10:51:38 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
10:52:22 kuribas`` joins (~user@ptr-17d51eocv4dr96js6nc.18120a2.ip6.access.telenet.be)
10:52:49 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:53:59 × kuribas` quits (~user@2a02:1808:1:72e3:9db4:7b66:5f90:2ba8) (Ping timeout: 252 seconds)
10:54:11 jespada joins (~jespada@89.238.130.77)
11:04:48 × jmcarthur quits (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Read error: Connection reset by peer)
11:05:02 jmcarthur joins (~jmcarthur@45.15.176.236)
11:07:27 dostoevsky5 joins (~5c42c5384@user/dostoevsky)
11:08:37 × dostoevsky quits (~5c42c5384@user/dostoevsky) (Read error: Connection reset by peer)
11:08:38 dostoevsky5 is now known as dostoevsky
11:10:57 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
11:11:16 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
11:14:51 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
11:19:22 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
11:23:23 mmhat joins (~mmh@2001:4090:a243:8065:ee08:6bff:fe09:5315)
11:25:56 × jgeerds quits (~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
11:28:37 gurkenglas joins (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
11:29:21 mrd joins (~mrd@user/mrd)
11:33:25 <merijn> int-e: I was more referring to: https://en.wikipedia.org/wiki/Johan_de_Witt#Disaster_year_and_De_Witt's_Death :p
11:34:27 xff0x joins (~xff0x@om126033119107.35.openmobile.ne.jp)
11:36:27 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.5)
11:41:06 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:41:07 <geekosaur> dminuoso, did you want @undefine ?
11:41:19 <dminuoso> Ahh yes, thats the one.
11:41:33 <dminuoso> lambdabot is mysterious to me, I cant even figure out how have it tell me how to use it.
11:41:50 × odnes quits (~odnes@5-203-249-228.pat.nym.cosmote.net) (Ping timeout: 240 seconds)
11:42:00 <maerwald> dminuoso: you have to start a relationship
11:42:46 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
11:44:50 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
11:45:36 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
11:46:41 × foul_owl quits (~kerry@23.82.193.89) (Ping timeout: 256 seconds)
11:47:04 × littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
11:47:26 geekosaur joins (~geekosaur@xmonad/geekosaur)
11:47:30 <int-e> @list eval
11:47:30 <lambdabot> eval provides: run let define undefine
11:48:33 <int-e> @help eval
11:48:33 <lambdabot> eval. Do nothing (perversely)
11:49:52 <int-e> (I don't know the story behind that one... maybe some other bot that had an @eval command?)
11:51:10 × jespada quits (~jespada@89.238.130.77) (Ping timeout: 240 seconds)
11:52:06 gensyst joins (gensyst@user/gensyst)
11:52:10 <merijn> @eval foo
11:52:23 <merijn> hmm
11:52:49 <jmcarthur> > "maybe it's just a name for this?"
11:52:50 <lambdabot> "maybe it's just a name for this?"
11:52:57 <geekosaur> that's @run
11:53:02 <jmcarthur> Ah
11:53:27 <jmcarthur> Oh, then eval must just be the name of the plugin, not a command
11:53:27 <merijn> There was one command that just got auto-corrected to echo, was just trying to remember if it was eval or something else :p
11:53:34 <gensyst> I want to create the concept of a "quality", where each instance obviously knows what it's own quality type is. This doesn't work: https://dpaste.com/62UEWPCLP Can you help lead me in the right direction?
11:53:46 <jmcarthur> @help blah
11:53:46 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
11:53:49 <jmcarthur> Hmm
11:53:56 <geekosaur> I really do need to finish my lb help documentation
11:54:07 <merijn> gensyst: Well that first example looks 100% wrong
11:54:13 jespada joins (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
11:54:16 <merijn> gensyst: You've define a class "Foo -> a"
11:54:23 <merijn> Pretty sure that has no sensible instances
11:54:34 <merijn> qual could only return undefined
11:54:46 <dminuoso> Gahh. I've done a huge mistake. I decided that I wanted my server to interact with dbus.
11:54:47 <merijn> eh, quality could only return undefined
11:54:50 <dminuoso> Horrible horrible mistake.
11:54:52 <gensyst> Elsewhere, I have some generic code that has (HasQuality q) => and then I should be able to query the quality - whatever type that may be. (For Dog that happens to be Double)
11:54:55 <merijn> dminuoso: That sounds dumb, yes
11:55:07 <merijn> gensyst: That's not what you wrote, though :)
11:55:17 <merijn> gensyst: And using typeclasses for that sounds like a mistake
11:55:36 kosmikus joins (~kosmikus@nullzig.kosmikus.org)
11:55:58 <geekosaur> had a feeling that "object" meant trying to use typeclasses for OOP
11:56:06 <merijn> gensyst: "quality :: a -> qual" is exactly the same as "quality :: a -> b", can you see how that's...rather useless?
11:56:18 <gensyst> yeah i do now lol
11:56:48 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
11:56:50 <dminuoso> gensyst: The best you can do is this:
11:57:10 <dminuoso> class HasQuality t a | t -> a where quality :: proxy t -> a
11:57:12 <Hecate> hmm.
11:57:20 <Hecate> I'm still very unclear about non-determinism
11:57:21 <merijn> dminuoso: Disagree :p
11:57:35 <Hecate> how does the list monad manages it? I thought it was the prerogative of IO?
11:57:42 <merijn> dminuoso: That certainly does what he intended to write, but I'd argue the best way to do it is to "not" do it :)
11:57:50 <dminuoso> merijn: *shrugs*
11:57:57 <dminuoso> Im just offering insights.
11:57:58 <gensyst> Here was my second attempt, https://dpaste.com/CMZFWUCFS but now suddenly Dog can't become an instance since it's already knows its own quality is Double
11:58:00 <merijn> Hecate: It's a matter of viewpoint, it doesn't do actual non-determinism
11:58:10 <merijn> Hecate: It explores *all* possible paths
11:58:25 <merijn> Which you can see as modelling a stochastic process (i.e. non-determinism)
11:58:33 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
11:58:36 <dminuoso> Hecate: Consider bind on [] as inspecting a "random/non-deterministic" choice and producing a non-deterministic path from that.
11:59:05 <gensyst> merijn, so what would you do instead?
11:59:17 <Hecate> so, like a breadth-first search where all possibilities are explored?
11:59:23 <dminuoso> gensyst: zoom out and look at what the problem is you're trying to solve.
11:59:27 <merijn> Hecate: Yes
11:59:36 <Hecate> hmm.
11:59:45 <dminuoso> Hecate: well its even more, because you can generate more possibilities.
12:00:00 <Hecate> is my intution correct by trying to link this to list comprehensions?
12:00:03 <Hecate> ah.
12:00:06 <Hecate> damnit dminuoso :D
12:00:16 <Hecate> my beautiful baby intuition, all shatered!
12:00:17 <merijn> dminuoso: I mean, whether those possibilities are generated or you are exploring "pre-existing" possibilities is a matter of perspective
12:00:26 <merijn> Hecate: Naah, your intuition works
12:00:26 <gensyst> dminuoso, do you mean I should simply use... functions? someTypeToWhateverQuality as the need arises?
12:00:44 <dminuoso> That sounds reasonable.
12:01:11 <merijn> Hecate: "you can generate more possibilities" (via >>= of "a -> [b]"), but you could consider those (latent) possibilities as "always existing and getting explored/discovered via BFS"
12:01:19 × nut quits (~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
12:01:22 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
12:01:23 <merijn> Hecate: I.e. big step vs small step view ;)
12:01:24 <Hecate> ah okay so it's still coming from the domain
12:01:31 <dminuoso> Over the years, I've slowly come to the point where typeclasses are almost never a good answer. I only resort to them for highly lawful things, or when fiddling a dictionary through manually is a PITA.
12:01:46 <merijn> gensyst: Pretty much
12:01:55 <Hecate> what dminuoso said
12:02:13 <Hecate> (maybe with 2 exceptions for my very specific case but we all have our sins.)
12:02:14 <merijn> I like them for tagless-final style stuff
12:03:07 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
12:03:30 <merijn> Hecate: I assumed that dminuoso was referring to the right-hand of bind introducing "new" possibilities, but of course it's equally valid to just consider those "new" possibilities as "always having been there, but unexplored", since it's all pure anyway
12:03:38 <dminuoso> Hecate: I found ReadS to be a great sourth of intuition about how list represents non-determinism.
12:03:47 <dminuoso> *source even
12:04:32 <Hecate> I see
12:04:57 <Hecate> I think I'm going not to focus too much on the "non-det" terminology here because I'm trying to think in a matter of outside effects, etc
12:05:24 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
12:06:28 <lortabac> non-deterministic in Prolog means "it can have multiple solutions"
12:06:53 <lortabac> if you translate it to Haskell, it's a way to emulate that kind of behavior
12:07:14 <lortabac> ie. a function that can have multiple results
12:07:19 <dminuoso> I guess that perspective maps very nicely to ReadS
12:07:59 <Hecate> that is true
12:08:04 <Hecate> https://koka-lang.github.io/koka/doc/book.html#why-effects <- I found this a nice read
12:08:14 <lortabac> the monad instance allows you to compose functions that can have multiple results, by giving you all the possible combinations
12:08:40 <merijn> Which is equivalent to having a BFS of possibilities you're exploring :p
12:08:57 <lortabac> yes
12:09:03 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Read error: Connection reset by peer)
12:09:08 allbery_b joins (~geekosaur@xmonad/geekosaur)
12:09:11 allbery_b is now known as geekosaur
12:09:11 <lortabac> somehow it only made sense to me after I learned Prolog
12:09:15 <Franciman> or calling the continution multiple times ^^
12:09:30 × jmcarthur quits (~jmcarthur@45.15.176.236) (Ping timeout: 240 seconds)
12:09:45 <lortabac> before learning Prolog the Monad instance for lists seemed completely arbitrary
12:11:43 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
12:11:50 <Hecate> personally I use it for list comprehensions :P
12:11:58 <Hecate> that's the usecase that makes the most sense for me
12:12:09 <Hecate> it's just the "non-det" terminology that messed w/ my intuition
12:12:16 <Hecate> thank you, you three :)
12:15:01 × raym quits (~raym@user/raym) (Ping timeout: 256 seconds)
12:15:51 raym joins (~raym@user/raym)
12:17:49 <Franciman> i can't seem to find ghciu system requirements
12:17:52 <Franciman> ghci*
12:17:56 <Franciman> in the last user manual
12:18:04 <Franciman> can i run it on a mcu?
12:18:29 <Franciman> if not, is there another haskell interpreter working on minimal devices, possibly without host?
12:18:40 <geekosaur> hugs?
12:18:49 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
12:18:52 <geekosaur> ghci is far from minimal; it's literally ghc --interactive
12:18:54 <Franciman> oh it's still active?
12:18:57 <Franciman> nice
12:19:18 <geekosaur> it's not being actively maintained aside from someone keeping it building on modern systems
12:19:39 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:20:55 <gensyst> merijn, dminuoso thanks guys. turned out such a simple solution worked. haskell... lots of hammers to choose from.
12:21:10 <gensyst> or double-edged daggers i should say
12:21:22 <merijn> gensyst: Overenthusiastic overapplication of typeclasses is a classic beginner trap :)
12:21:52 <Franciman> ty very much geekosaur
12:22:03 <Franciman> last release is 2006, i'd love to dig into the code now ^^
12:22:09 <merijn> "I don't understand typeclasses" -> "typeclasses are amazing I should use them everywhere" -> "I should probably almost never implement my own typeclasses except for some niche cases" is the usual development :p
12:22:34 <geekosaur> I skipped the middle step thouhg :)
12:22:58 <gensyst> :o
12:23:01 <merijn> I didn't, it makes diagnosing it in others easier :p
12:23:02 <maerwald> merijn: or just pass your own dictionary
12:23:13 <merijn> maerwald: Right, that's usually the right solution
12:23:14 <geekosaur> Franciman, many people believe ghc should have skipped all the weird record stuff it's come up with over the years and adopted hugs' Trex
12:23:32 <Franciman> Trex?
12:23:49 <merijn> geekosaur: Should skipped all the overloadedlabels/record fields stuff and just enabled NamedFieldPuns and NoFieldSelectors by default
12:24:25 <merijn> overloaded labels and record dot syntax are huge mistakes, which will hurt Haskell for decades to come, don't @ me :p
12:25:03 <exarkun> Speaking of typeclasses, why do both Exception and SomeException exist?
12:25:32 <geekosaur> SomeException isn't a typeclass, it's an existential wrapper for an exception
12:25:33 <dminuoso> exarkun: Great question https://simonmar.github.io/bib/papers/ext-exceptions.pdf
12:25:44 <dminuoso> exarkun: This is one of the best and yet underused features in Haskell.
12:26:00 <dminuoso> We get proper exception hierarchies like you have in Java, with the same "catch a higher base class type of exceptions" semantics.
12:26:08 <Franciman> wow, hugs supports .NET
12:26:16 <merijn> Nobody uses it, because the documentation is only in that paper :p
12:26:23 <dminuoso> Heh.
12:26:26 <geekosaur> Franciman, https://www.haskell.org/hugs/pages/hugsman/exts.html#sect7.2
12:26:35 <merijn> 90% of the uses of extensible exceptions that I know are people cribbing from my phd codebase after linking that here :p
12:26:46 <dminuoso> I belong to the other 10%
12:26:49 <Franciman> oh thanks geekosaur
12:26:54 <Franciman> reminds me of sml's records
12:27:16 acidjnk joins (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de)
12:27:25 <maerwald> merijn: "documentation is only in that paper" is a common thing in haskell
12:27:30 <exarkun> Thanks for the link. On my reading list now. :)
12:28:28 <Franciman> Hugs is written in C :O
12:28:54 <Franciman> maybe it's just the bootstarp
12:28:59 <geekosaur> nope
12:29:13 <geekosaur> iiirc it's actually written in c++
12:29:33 <geekosaur> downside is it's only an interpreter, not a compiler
12:30:38 <geekosaur> …and practically nothing written in the past 15 years works in it because nobody ever ported e.g. text to hugs' extensions system
12:30:54 <dminuoso> I honestly thing a lot of hackage would be way better off, if there was less "who can write the purest code" competitions with competing stacks of language extensions enabled. Just give me IO, and just give me dynamic exception hierarchies.
12:31:12 <merijn> dminuoso: Just give me checked exceptions :(
12:31:23 <dminuoso> merijn: Not trying my luck here.
12:31:36 <merijn> Anyone who mentions Either is getting thwapped with the thwapping stick
12:31:47 <dminuoso> That checked exceptions kickstarts another battle of "best effect system" with dependent typing and at least 20 extensions enabled.
12:31:50 <merijn> dminuoso: I'm irrational :p
12:32:08 <int-e> merijn: Let me bring up Control.Monad.Error then
12:32:12 <merijn> Naah, I am fundamentally convinced most effect systems are a mistake
12:32:26 <dminuoso> I think they are fine as explorations of ideas
12:33:02 <Franciman> thanks geekosaur this is a true pearl
12:33:03 <merijn> I want "functional" types checking the computation done by code. And I want "non-functional" types (wrt things like GC, performance/laziness, exceptions)
12:33:09 <merijn> And *most importantly*
12:33:21 <merijn> I don't want those separate things making each other less readable
12:33:37 <merijn> Which is what Control.Monad.Error and all the effect systems end up doing
12:33:50 <merijn> And basically all other attempts to encode non-functional constraint in Haskell's type system
12:34:02 <maerwald> stop making sense
12:34:05 <merijn> I just want multiple, independent, but collaborating type systems for these different things
12:34:16 <int-e> ...
12:34:38 <merijn> I want statically checked exceptions of which I can guarantee the absence *without* changing division from "Fractional a => a -> a -> a" to encode that in the result
12:34:48 <int-e> I'm not sure this makes any sense. I mean, it's a nice dream to have, but how is that supposed to look like in practice... while maintaining readability?
12:34:51 <dminuoso> maerwald: Since we see eye-to-eye on TLS in Haskell, any preferred library for quickly interacting with HTTPS secured JSON APIs?
12:35:08 <dminuoso> Im seriously debating whether to just put a local nginx reverse proxy to handle TLS...
12:35:11 <merijn> int-e: I've started on prototypes a few times to figure that out/convince people
12:35:22 <dminuoso> So I dont have to rely on cryptonite or others
12:35:24 <merijn> int-e: But then I inevitably run out of motivation to do that in my spare time :p
12:35:40 <merijn> And no one wanted to let me do a PHD on that (at least not in a location I was willing to live)
12:35:48 <merijn> So, we'll probably never know :p
12:36:36 <int-e> GHC does have way too many extensions though... and because they're there, people use them :P
12:37:11 <int-e> (Not all people use all of them, of course. It's like C++ where everyone has their favorite subset. Not a redeeming quality of C++, btw.)
12:37:38 <dminuoso> Maybe we should do an IPO for GHC. By then, stockholders will install a new board that will monetarize GHC. Each use of a Language pragma costs an EUR per download on hackage.
12:37:48 <dminuoso> Problem solved?
12:39:15 <int-e> . o O ( cabal: Warning: This package enables the following extensions: [...]. Do you know what they do? )
12:39:55 <dminuoso> Unrelatedly, Im thinking about a program that just installs a few callbacks via FFI but has nothing else to do. How can I reliably block the main thread?
12:40:06 <dminuoso> Without wasting CPU cycles that is. :-)
12:40:28 <merijn> dminuoso: sleep on MVar
12:40:43 <int-e> make an FFI call that blocks
12:40:44 <dminuoso> merijn: will that not potentially cause deadlock errors?
12:40:55 <merijn> dminuoso: why would it?
12:41:03 <dminuoso> Thought the RTS has some heuristics on MVar to detect them
12:41:26 <Bulby[m]> I love MVar it makes my status bar work good, even with DBus requests that run in a different thread
12:41:33 <dminuoso> Ah but know what, I can just install another signal handler that puts to the MVar.
12:41:38 <dminuoso> Might not be such a terrible idea.
12:41:39 <merijn> dminuoso: It has no heuristics
12:41:49 <merijn> It has deterministic detection
12:41:57 <int-e> I suppose there are worse things to try than forever $ threadDelay 1000000000
12:42:12 <merijn> If all referenced to an MVar are blocked on *that* mvar it detects a deadlock
12:42:15 <geekosaur> thst only lasts 49 days, I think
12:42:25 <int-e> geekosaur: hence "forever"
12:42:27 <geekosaur> oh, not that one
12:42:31 <geekosaur> yeh
12:42:33 <merijn> So, as long as something *can* wake up the MVar it's fine
12:42:43 <dminuoso> "For some reason this program crashes every 1 1/2 months or so. But its fine, we have a cronjob that restarts it every 30 days"
12:42:57 <int-e> > 10^6 / 86400
12:42:59 <lambdabot> 11.574074074074074
12:43:07 <int-e> > 2^32 / 86400
12:43:08 <lambdabot> 49710.26962962963
12:43:10 × oxide quits (~lambda@user/oxide) (Ping timeout: 240 seconds)
12:43:20 <dminuoso> merijn: What's the mechanism to identify "something can" here?
12:43:21 <int-e> ah, that's the 49 days
12:43:28 <int-e> (2^32ms)
12:43:31 <merijn> dminuoso: References to said MVar
12:43:35 <geekosaur> yeh
12:43:38 <merijn> dminuoso: GC roots
12:44:03 <geekosaur> somewhat infamously there was a linux kernel bug where it crashed every 49 days because of a wraparound
12:44:05 <dminuoso> I see, so if the MVar is blocked via one root, there must be an an alternate GC root that points to the same MVar?
12:44:23 <merijn> Each thread is a GC root, so if each thread that has an MVar reference is blocked *on that MVar* it can trivially conclude none of them will ever wakeup
12:44:33 <merijn> dminuoso: Yes, like potential callbacks or whatever
12:44:37 <dminuoso> Perfect.
12:44:38 <dminuoso> Then a signal handler for SIGTERM that puts to the mvar seems great.
12:45:00 <merijn> I'd hesitate to rely on anything involving signal handlers, tbh :p
12:45:03 <dminuoso> (And no, I dont want any stories about how horrible signals are on haskell)
12:45:10 <dminuoso> Damnit, you beat me.
12:45:21 <dminuoso> :)
12:45:22 <merijn> Ok, so stories about how horrible signals are in *any* language, then? :D
12:46:09 <merijn> There's two kinds of people
12:46:13 <Bulby[m]> the i3bar protocol wants you to use status signals to keep going/stop
12:46:25 <merijn> Those who know they can't safely use signals and people *who are wrong*
12:46:30 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
12:47:07 <dminuoso> Is your opinion written down somewhere?
12:47:09 <dminuoso> Maybe a gist at github?
12:47:29 <dminuoso> If I have some time, Id be interested in your argumentation where the fundamnetal problems are (in particular with respect to GHC haskell)
12:47:34 × gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 240 seconds)
12:47:51 <dminuoso> Given that you bring it up every now and then, it might be worth simply having an URL to point to
12:47:53 <merijn> dminuoso: Is it written down somewhere (and how to do it properly?)? Yes!
12:47:55 oxide joins (~lambda@user/oxide)
12:47:58 <dminuoso> Ah!
12:48:00 <dminuoso> Where?
12:48:10 <merijn> dminuoso: Except it's in a GHC issues and I can't find it, because you can't search for issues you commented on on gitlab...
12:48:24 <merijn> Only ones you created
12:48:25 <merijn> RIP
12:48:25 <dminuoso> Haha, sounds like gitlab alright.
12:48:37 gehmehgeh joins (~user@user/gehmehgeh)
12:48:38 <merijn> So "somewhere" :)
12:49:42 <merijn> dminuoso: Ah! God is with you
12:49:47 <merijn> dminuoso: There's a discussion here: https://gitlab.haskell.org/ghc/ghc/-/issues/20031
12:51:30 <merijn> dminuoso: The problem boils down to "signal handling in a multi-threaded process is lunacy, because they weren't designed for that" and since the RTS essentially always uses threads you are *always* a multi-threaded program
12:52:22 <maerwald> dminuoso: https://hackage.haskell.org/package/http-client-openssl
12:53:02 × gensyst quits (gensyst@user/gensyst) (Quit: Leaving)
12:53:28 <maerwald> or https://hackage.haskell.org/package/http-io-streams
12:53:46 <dminuoso> That dependencies list hurts my eyes already. :(
12:53:59 <maerwald> and hvr is listed as maintainer, which gives you bad odds
12:56:25 shriekingnoise joins (~shrieking@201.231.16.156)
12:56:49 <dminuoso> I really dont understand why we have a wealth of complicated http libraries with these large dependency footprints. :(
12:57:14 <maerwald> http-client-openssl isn't that bloated
12:57:45 <dminuoso> Mmm I guess http-client is okayish
12:58:11 <dminuoso> And re hvr, that's a snoyman package. Not sure whether thats better given the current situation! :po
12:58:27 <dminuoso> But that aside, I guess http-client is the way to go.
12:58:42 <dminuoso> Guess together with `json` this might work nicely
13:00:03 <dminuoso> Sometimes I really do envy other languages that give you a simple `import http; http.json("/foo/bar", {a: 1})` type of interface
13:01:16 <maerwald> Well, if one of snoymans packages doesn't work, there's still a chance you can pay fpco to fix it.
13:02:43 bahamas joins (~lucian@84.232.141.55)
13:06:21 odnes joins (~odnes@5-203-206-163.pat.nym.cosmote.net)
13:09:56 × acidjnk quits (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
13:14:20 zebrag joins (~chris@user/zebrag)
13:18:09 jmcarthur joins (~jmcarthur@185.240.244.197)
13:18:47 <jmcarthur> jackdk: The plugin readme on GitHub also led me to the overloaded package, which has a desugaring of (a subset of) proc notation that doesn't require arr
13:19:13 <jmcarthur> Sorry if that was a dup, my client was disconnected and I don't know if it tried to send the original after I reconnected
13:19:39 <Axman6> when using cabal test, how to I pass arguments to the test executable itself?
13:19:53 <maerwald> Axman6: use `cabal run` instead... works better anyway
13:20:03 <Axman6> hmm, how do I do that?
13:20:12 <Axman6> cabal run test:testname-from-cabal-file?
13:20:31 <maerwald> something like that
13:20:46 <maerwald> those : identifiers are hella confusing, so not sure if that particular one works
13:20:49 <geekosaur> cabal run test:testname -- parameters
13:21:40 <Axman6> got it, thank y'all
13:23:05 <maerwald> I think it's <project>:<test|exe>:<name> or so?
13:23:08 Lycurgus joins (~juan@user/Lycurgus)
13:23:59 <maerwald> or rather [<project>:][<test|exe>:]<name>
13:27:24 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
13:28:26 <dminuoso> maerwald: There's a horrid logic behind this.
13:29:23 <dminuoso> In principle its [package:][ctype:]component
13:29:50 <dminuoso> But if memory serves right, you can name files or module names in there as well
13:31:19 <dminuoso> And the exact behavior differs between commands
13:31:35 <dminuoso> Each command calls resolveTargets with different package and component selectors
13:31:36 <Axman6> anyone know if there's a way to get cabal tab completion in zsh?
13:32:16 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
13:33:14 <maerwald> https://github.com/haskell/cabal/blob/master/cabal-install/bash-completion/cabal
13:33:25 <maerwald> zsh supports bash completions afair
13:33:42 <Lycurgus> Axman6, you mean besides making a plugin for it?
13:34:08 <Lycurgus> i think he mans command parm completion
13:34:18 <maerwald> but I'm not sure they will be particularly useful, e.g. if you check --help, it's a dumpster of cli switches that may or may not be relevant
13:34:20 <Lycurgus> *means
13:36:57 <Axman6> hmm, not sure how to use that complletion script
13:37:09 <Axman6> I feel like I've tried this before but failed
13:37:31 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
13:37:43 <maerwald> https://stackoverflow.com/a/8492043
13:37:45 <Axman6> I did find https://github.com/coot/zsh-haskell which is easy enough to install for oh-my-zsh, but it doesn't seem to be able to complete the names of build targets
13:38:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
13:39:58 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
13:41:10 × gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
13:44:30 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
13:46:37 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
13:46:37 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
13:46:37 wroathe joins (~wroathe@user/wroathe)
13:47:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
13:48:51 Sgeo joins (~Sgeo@user/sgeo)
13:50:28 <dminuoso> Ah yes, you can also specify `[package:][ctype:]filepath`, like `cabal build exe:src/Main.hs`
13:50:56 <dminuoso> My memory still says you can also specifiy Haskell module names, but I dont see how
13:54:20 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:56:37 ph88 joins (~ph88@84-30-78-253.cable.dynamic.v4.ziggo.nl)
13:57:12 Simon62 joins (~Simon@ipbcc036f5.dynamic.kabel-deutschland.de)
13:57:40 <Simon62> Hola
13:58:09 <Simon62> Given that code:
13:58:10 <Simon62> f a k : : I n t e g e r −> I n t e g e r
13:58:10 <Simon62> f a k x | t r a c e (” c a l l : f a k ” ++ show x ) F a l s e = x
13:58:11 <Simon62> f a k 0 = 1
13:58:11 <Simon62> f a k n = n ∗ f a k ( n−1)
13:58:23 <Simon62> What does the FALSE mean in that syntax?
13:58:39 <Simon62> In general I'm not 100% sure about the second line
13:59:06 <dminuoso> Simon62: That's an older and no longer needed trick to silence pattern match exhaustiveness warnings.
13:59:09 <Simon62> I think that it just prints each step
13:59:15 <dminuoso> Oh wait
13:59:28 <geekosaur> that's a trick to trace a call. with the guard, it means that leg will never be called, but the trace will still be evaluated
13:59:28 <dminuoso> Yeah, so this is an interesting trick
13:59:35 <geekosaur> so you know when the function was called
13:59:51 <dminuoso> Keep in mind, you have no guarantee this will ever print, or that this will print only once. :)
14:00:02 <Simon62> why?
14:00:20 <Simon62> But what is the "False" there fore?
14:00:22 <Simon62> for*
14:00:28 <Simon62> False = x
14:00:28 <dminuoso> `trace` is a primitive that prints out one string when its second argument is evaluated, if ever.
14:00:34 <geekosaur> to make the guard evaluate to false ("don't execute"")
14:00:51 <geekosaur> the guard is the "|"
14:01:16 <Simon62> Is it perhaps possible that you could paraphrase line 2 for me?
14:01:32 <dminuoso> Drop the trace for a moment.
14:01:55 <Simon62> In my slides it also says there are "two arguments" between | and =
14:02:18 <geekosaur> you copy-pasted that from a pdf, didn't you? it's a mess
14:02:26 <dminuoso> Simon62: between | = is just a single bool expression
14:02:27 <Simon62> yes, sorry
14:02:36 <dminuoso> @let import Debug.Trace
14:02:37 <lambdabot> /sandbox/tmp/.L.hs:132:1: error:
14:02:37 <lambdabot> Debug.Trace: Can't be safely imported!
14:02:37 <lambdabot> The module itself isn't safe.
14:02:40 <dminuoso> Gah.
14:02:46 <dminuoso> trace :: String -> a -> a
14:02:51 <Simon62> Wait a second
14:02:52 <dminuoso> You can see it takes two arguments.
14:02:54 <Simon62> I have the code
14:03:05 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
14:03:10 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds)
14:03:24 <Simon62> import Debug.Trace
14:03:25 <Simon62> fak :: Integer -> Integer
14:03:25 <Simon62> fak x | trace ("call: fak " ++ show x) False = x
14:03:26 <Simon62> fak 0 = 1
14:03:26 <Simon62> fak n = n * fak (n-1)
14:03:54 <dminuoso> Imagine that second line read: `fak x | False = x` for a second
14:03:58 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt)
14:04:03 <dminuoso> Do you see how this is essentially a dead, useless, definition?
14:04:22 <dminuoso> If you ever call `fak`, it would always try out the first definition, evaluate the guard, determine its `False`, and then skip to the next definition.
14:05:29 <Simon62> Why is it "=" and not "=="?
14:05:34 <dminuoso> It's a definition.
14:05:52 <dminuoso> Think along these lines `f x | x > 10 = x * 2`
14:05:59 <dminuoso> See how between | and = there is a Bool expression?
14:06:07 <dminuoso> x > 10 :: Bool
14:06:22 <Simon62> yes
14:06:27 <dminuoso> :t False
14:06:28 <lambdabot> Bool
14:06:31 <dminuoso> This too is a Bool expression
14:06:38 <geekosaur> it might help if you read "|" as "where"
14:06:55 <geekosaur> or as "when" to avoid collision with the "where" keyword
14:07:12 <geekosaur> "fak x, when False, is x"
14:07:25 <dminuoso> Simon62: So `f x | True = x * 7` is a definition, whose guard will always evaluate to True (because True evaluates to.. True..)
14:07:36 <dminuoso> Interesting bit, somewhere in base someone defined `otherwise = True`
14:07:47 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
14:08:31 <dminuoso> Which is why you might have written `| otherwise = ...` - it's just a guard that is always true. When that guard is tried, it will always succeed and use that definition that follows
14:09:01 <dminuoso> `| False = ...` is the opposite, its a guard that always evaluates to false, so the definition is never used. You can think of this as some `if false { ... }` perhaps
14:09:05 <Simon62> "fak x, when False, is x"
14:09:06 <Simon62> Thanks!
14:09:06 <Simon62> The "is" here just lets me think of "==", but I'm about to get it.
14:09:07 <Simon62> So bascially we are definiting "True" as x (and x is whatever the user says x to be, but it is a number) and that does not make sense as you say and therefore it's always True
14:09:39 <geekosaur> no
14:09:42 <Simon62> So the guard (everything after "|") just has to be true so that something happens
14:09:56 <geekosaur> the "= x" never happens because the guard is False
14:09:58 <Simon62> Ah wait, and what is the "trace" needed for then?
14:10:07 <geekosaur> so this is a useless definition
14:10:08 <dminuoso> Simon62: *when the guard is true, the following definition will be used.
14:10:15 <geekosaur> until you drop the "trace" in
14:10:20 <dminuoso> *when the guard is false, its definition will not be used, and the next definition will be tried.
14:10:44 <dminuoso> So a definition with a guard that is statically false will *always* be skipped.
14:10:58 <dminuoso> But to know to skip this definition, GHC has to first evaluate what goes between `|` and `=`
14:11:41 <geekosaur> with the trace, when it evaluates the guard, it prints that it's calling "fak" and its parameter. then, because the second parameter to "trace" is False, the guard evaluates False and it falls through to the next definition
14:11:53 <geekosaur> so this is a cheaty way to get a call trace
14:13:08 <Simon62> interesting
14:13:58 <dminuoso> Simon62: and the reason I said you dont get any guarantees about printing, is because in general the compiler is free to evaluate things once, multiple times, or not at all.
14:13:59 <Simon62> What in Java would you compare these Guards with?
14:14:18 <dminuoso> There's no good equivalent in Java
14:14:28 <Simon62> dminuoso But the compiler has no free will, how can he decide?
14:14:33 <dminuoso> They very broadly encode the idea of "early return"
14:14:38 <dminuoso> But its not a 1:1 mapping
14:14:53 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
14:15:08 <dminuoso> Simon62: It has a huge pile of heuristics to transform code that not a single person understands well. :p
14:15:15 <dminuoso> In simple terms:
14:15:30 <dminuoso> The compiler can simply inline a definition, consider the difference between:
14:15:50 <dminuoso> let x = trace "hello world" 10 in (x, x)
14:15:55 <dminuoso> or if we inline the definition of x
14:16:11 <dminuoso> (trace "hello world" 10, trace "hello world" 10)
14:16:13 <geekosaur> the compiler is free to pick an evaluation strategy as long as it produces the same result as doing things naïvely. purity ensures that there are transformations and evaluation strategies that are safe to use because they will produce the same result
14:16:51 <dminuoso> Simon62: GHC is free to do the above transformation, because it has no idea that `trace` causes a visible side effect - the order of *evaluation* is unspecified.
14:16:55 <Simon62> how do you do the dots at "naïvely"?
14:17:18 <dminuoso> in this sense, `trace` is a dark and evil primitive, whose existence is soley for debugging
14:17:45 <Hecate> It's a diacritic
14:17:49 <Simon62> absolute x
14:17:50 <Simon62>  | x<0 = -x
14:17:50 <Simon62>  | otherwise = x
14:17:51 <Simon62> So this is, how the guards are supposed to be used?
14:17:51 <Simon62> And in my example there isn't even a second option, or, the fak 0 = 1 is the second option, hmm
14:17:56 <geekosaur> I have XCompose set up on right Alt, so it's <right alt> i "
14:18:10 <dminuoso> Simon62: sure!
14:18:18 <dminuoso> Simon62: note that `otherwise` is defined as `True` somewhere
14:18:24 <Simon62> "in this sense, `trace` is a dark and evil primitive, whose existence is soley for debugging" interesting
14:18:24 <dminuoso> That is, in base there is a line that reads `otherwise = True`
14:18:39 <geekosaur> on windows there's a different way to do it, unless you install wincompose and then you can do it the same way
14:18:53 <geekosaur> but wincompose is mostly for when we unix folk have to use windows :)
14:19:23 <dminuoso> Simon62: So in haskell we separate *execution* (which causes visible side-effects) from *evaluation* (which is just substituting variables for their definitions, over and over again)
14:19:36 <dminuoso> and `trace` is evil because it lets you do visible-side effects during evaluation.
14:20:08 <dminuoso> It lets you "observe" during evaluation, but with the quirks that you dont necessarily know the order, and what actually is evaluated
14:20:22 <dminuoso> which is why you cant rely on this at all for production use
14:20:45 <geekosaur> as to your second option, you have three. the first is the trace, the second is the base case, the third the recursive case
14:20:54 <Simon62> :t trace("test")
14:20:55 <lambdabot> error:
14:20:55 <lambdabot> Variable not in scope: trace :: [Char] -> t
14:21:06 <Simon62> :t trace("test") False
14:21:07 <dminuoso> Simon62: lambdabot doesnt expose trace, sadly
14:21:08 <lambdabot> error:
14:21:08 <lambdabot> Variable not in scope: trace :: [Char] -> Bool -> t
14:21:14 <geekosaur> :t Debug.Trace.trace "test"
14:21:15 <lambdabot> a -> a
14:21:22 <dminuoso> Oh, it does?
14:21:24 × xaotuk quits (~sasha@2a06:5b00:15fe:9b00::2) (Ping timeout: 240 seconds)
14:21:33 <geekosaur> only for :t because it can't evaluate it
14:21:37 <dminuoso> Ah
14:21:47 <dminuoso> Simon62: Feel free to `import Debug.Trace` in ghci and play around with it.
14:21:51 <Simon62> :t Trace.trace "test" False
14:21:53 <lambdabot> error:
14:21:53 <lambdabot> Not in scope: ‘Trace.trace’
14:21:53 <lambdabot> No module named ‘Trace’ is imported.
14:22:03 <Simon62> :t Debug,Trace.trace "test" False
14:22:04 <lambdabot> error: parse error on input ‘,’
14:22:06 <Simon62> :t Debug.Trace.trace "test" False
14:22:08 <lambdabot> Bool
14:22:12 <Simon62> hehe
14:22:16 <Simon62> Nice
14:22:18 <Simon62> I get it
14:22:20 <Simon62> Thanks guys
14:23:07 <Simon62> :t Debug.Trace.trace
14:23:09 <lambdabot> String -> a -> a
14:24:02 <int-e> :t Debug.Trace.traceShow
14:24:03 <lambdabot> Show a => a -> b -> b
14:24:22 <dminuoso> :t Debug.Trace.traceShowId
14:24:22 <lambdabot> Show a => a -> a
14:24:24 <dminuoso> My favourite of the bunch
14:24:39 int-e likes this pattern for quick-and-dirty tracing of function calls: foo a b | traceShow ("foo", a, b) False = undefined
14:24:46 <dminuoso> You can drop this into any place with little to no modification :)
14:24:51 <geekosaur> that's what we've been explaining
14:25:04 <dminuoso> Yeah its a cool trick
14:25:14 <Simon62> so basically trace is like print but that it also executes it's second argument afterwards?
14:25:28 <Simon62> Like "print . _some function_"
14:25:34 <dminuoso> Simon62: not quite
14:25:34 <Simon62> notice the "."
14:25:40 <int-e> Ah, missing context as usual :/
14:25:43 <dminuoso> the phrase "execution" is a bit misplaced here.
14:25:52 <dminuoso> Simon62: think of it rather as a "hook" in the evaluator.
14:26:03 <dminuoso> that is, you can hook into the moment when an arbitrary expression gets evaluated.
14:26:46 <dminuoso> (so you see why this might print none, once or multiple times, the actual printing depends on how often that expression really gets evaluated)
14:26:58 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
14:27:12 <Simon62> I see
14:27:26 <Simon62> I wish our prof would have said that trace requiered two arguments earlier haha
14:27:39 <dminuoso> In fact we have an even more dangerous dark primitive to execute *arbitrary* IO things, which is what trace is build around with.
14:28:27 <dminuoso> so `trace` can be thought to install a printing hook
14:29:02 <Simon62> very interesting, thanks
14:29:06 <dminuoso> but we can do other hooks as well, but this is notoriously difficult to use right. but, turns out if all you care is just printing some debug information, it doesnt really matter if you cant reason about the order or frequency
14:29:42 <Simon62> couldn't you also hook a simple print to it somehow?
14:29:56 <dminuoso> Yes, that's trace.
14:30:07 <dminuoso> That's exactly what it is
14:30:13 <Simon62> Alright
14:33:26 <Simon62> dminuoso please excuse that question, but why couldn't I just write "fak x | print ("call: fak " ++ show x) False = x"?
14:33:34 <Simon62> gives me an error
14:33:43 <Simon62> Ah I know
14:33:48 <Simon62> Because print only takes one argument
14:33:59 <Simon62> But doesn't it still work because it's part of the guard
14:34:09 <Simon62> Oh, or the guard can only have one argument at a time right?
14:35:04 <dminuoso> The fundamental first problem is, a guard takes an expression of type Bool
14:35:09 <dminuoso> Secondly
14:35:11 <dminuoso> :t print
14:35:12 <lambdabot> Show a => a -> IO ()
14:35:19 <dminuoso> You're trying to apply `print` to two arguments.
14:35:19 <Simon62> Is it bad coding style if I just always use "True" instead of "otherwise"?
14:35:46 <dminuoso> Simon62: For learning? Does not really matter.
14:35:52 <k`> Simon62: No but it's nonstandard.
14:36:05 <k`> Rather, unconventional.
14:36:06 <Simon62> k` What do you mean by nonstandard?
14:36:14 <dminuoso> Everyone else would use `otherwise`
14:36:21 <Simon62> unconventional: True or otherwise?
14:36:27 <Simon62> I see
14:36:28 <dminuoso> But if you want to use True, especially to learn that guards take bool expressions, go for it?
14:36:55 <Simon62> so otherwise is "de facto" standard? (is that what nonstandard means?)
14:37:07 <Simon62> :t Trace.trace
14:37:08 <lambdabot> error:
14:37:08 <lambdabot> Not in scope: ‘Trace.trace’
14:37:08 <lambdabot> No module named ‘Trace’ is imported.
14:37:14 <Simon62> :t Debug.Trace.trace
14:37:14 <int-e> I'd call `otherwise` idiomatic
14:37:16 <lambdabot> String -> a -> a
14:37:36 <dminuoso> There's also a competion version that uses a separate definition rather than `| otherwise = ...`
14:37:39 <dminuoso> that is, rather than writing:
14:37:48 <dminuoso> f x | x > 10 = ....
14:37:53 <Simon62> Can you give me an example where trace returns an Integer?
14:37:55 <dminuoso> | otherwise = ....
14:37:57 <dminuoso> You might write:
14:38:02 <dminuoso> f x | x > 10 = ...
14:38:06 <dminuoso> f x = ...
14:38:14 <int-e> Simon62: trace "" 0
14:38:16 <dminuoso> Lately I tend to favour the second style
14:38:28 <Simon62> print trace "" 0
14:38:32 <int-e> Simon62: it returns the second argument; if that's an integer...
14:38:36 <int-e> print (trace "" 0)
14:39:12 <int-e> (((print trace) "") 0) makes little sense; it'll complain about a missing Show instance, most likely
14:39:43 <k`> Simon62: Re otherwise -- It's convention, not standard. hlint will complain, and some folks may internally rage, but the meaning is totally obvious.
14:40:01 Simon62 laughes
14:40:47 <int-e> f x | x > 10 = ... | () <- () = ... -- if you *want* to make people rage, try this trick!
14:42:04 <k`> Yeah, please don't do that.
14:42:21 <Simon62> I get a parse error
14:42:24 <int-e> can you be a good programmer without knowing what bad code looks like?
14:43:04 <int-e> > let f x | x > 10 = x-1 | () <- () = x+1 in (f 10, f 11)
14:43:05 <lambdabot> (11,10)
14:43:53 <k`> One advantage is `| True = ...` and `| _ <- () = ...` work without Prelude.
14:44:09 xaotuk joins (~sasha@net64-36-245-109.mbb.telenor.rs)
14:44:52 <dminuoso> Gah, what was that new primitive for impossible guards that dont trigger the ghc exhaustiveness checker diagnostics since Lower Your Guards?
14:44:54 <int-e> k`: `True` will not be in scope then
14:45:01 <k`> If you ever find yourself writing `import Prelude (otherwise)`. I don't think `otherwise` is exported by `Data.Bool`.
14:45:12 Pickchea joins (~private@user/pickchea)
14:45:55 <k`> Oops, well, I'm wrong. Must have been importing `Data.Bool (Bool (..))`.
14:46:20 <dminuoso> does hoogle allow me to search for all values of type Bool in the base package?
14:46:22 <k`> In the future I'll just import all of Data.Bool and use `otherwise`.
14:46:48 moonsheep joins (~user@iespladelestany.xtec.cat)
14:46:51 <opqdonut> contrariwise = unsafePerformIO (modifyIORef global not >> readIORef global)
14:47:30 <k`> dminuoso: No, I don't think so.
14:47:42 × Kaipei quits (~Kaiepi@156.34.47.253) (Ping timeout: 276 seconds)
14:48:02 <dminuoso> Ahh wait, I have it
14:48:05 <dminuoso> https://hackage.haskell.org/package/base-4.16.1.0/docs/GHC-Exts.html#v:considerAccessible
14:48:26 <dminuoso> This is a truly magical version of otherwise.
14:48:36 × xaotuk quits (~sasha@net64-36-245-109.mbb.telenor.rs) (Ping timeout: 248 seconds)
14:49:11 <dminuoso> It's a bit scary that this is not some built-in, Id be curious as to how GHC will differentiate this from `let considerAccessible = True in ...`
14:49:54 × gnyeki quits (~gnyeki@user/gnyeki) (Quit: leaving)
14:50:09 × Simon62 quits (~Simon@ipbcc036f5.dynamic.kabel-deutschland.de) (Quit: Client closed)
14:50:34 xaotuk joins (~sasha@178-222-23-155.dynamic.isp.telekom.rs)
14:50:47 <k`> That is some sorcery.
14:53:22 gnyeki joins (~gnyeki@user/gnyeki)
14:57:53 yoggurt[m] joins (~yoggurtma@2001:470:69fc:105::2:ba5)
14:58:08 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
14:58:47 motherfsck joins (~motherfsc@user/motherfsck)
14:59:35 <int-e> dminuoso: it's fully qualified: considerAccessibleName = varQual gHC_EXTS (fsLit "considerAccessible") considerAccessibleIdKey
15:00:03 jakalx joins (~jakalx@base.jakalx.net)
15:01:09 Kaipei joins (~Kaiepi@156.34.47.253)
15:02:10 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds)
15:03:08 odnes_ joins (~odnes@5-203-206-163.pat.nym.cosmote.net)
15:05:35 × odnes quits (~odnes@5-203-206-163.pat.nym.cosmote.net) (Ping timeout: 256 seconds)
15:08:19 moonsheep parts (~user@iespladelestany.xtec.cat) (ERC 5.4 (IRC client for GNU Emacs 28.1))
15:13:08 × frost quits (~frost@user/frost) (Ping timeout: 252 seconds)
15:13:21 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
15:18:06 xkuru joins (~xkuru@user/xkuru)
15:18:13 × odnes_ quits (~odnes@5-203-206-163.pat.nym.cosmote.net) (Quit: Leaving)
15:20:11 × CiaoSen quits (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
15:24:45 × xaotuk quits (~sasha@178-222-23-155.dynamic.isp.telekom.rs) (Ping timeout: 276 seconds)
15:27:00 × xff0x quits (~xff0x@om126033119107.35.openmobile.ne.jp) (Read error: Connection reset by peer)
15:27:21 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
15:29:21 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
15:30:20 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
15:31:47 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:10ff:daf4:e8f5:4537) (Quit: WeeChat 2.8)
15:33:30 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
15:36:06 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
15:38:01 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
15:39:05 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
15:39:43 × inversed quits (~inversed@176.248.27.211) (Quit: Connection error?!)
15:45:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
15:45:55 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:46:40 inversed joins (~inversed@176.248.27.211)
15:49:01 azimut joins (~azimut@gateway/tor-sasl/azimut)
15:49:14 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
15:50:28 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
15:51:49 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
16:01:50 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 240 seconds)
16:09:45 slack1256 joins (~slack1256@191.126.99.83)
16:11:06 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:11:21 <slack1256> http://conal.net/talks/compiling-to-categories.pdf reading this, I fail to see how this won't be a optimization blocker if it is used as a serious backend.
16:11:29 <slack1256> Has anyone played with this seriously?
16:12:12 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 240 seconds)
16:12:40 × ccntrq quits (~Thunderbi@exit-1.rz.nue.de.mhd.medondo.com) (Quit: ccntrq)
16:13:24 × pottsy quits (~pottsy@129.227.183.244) (Ping timeout: 265 seconds)
16:14:32 tomboy64 joins (~tomboy64@user/tomboy64)
16:16:00 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
16:17:54 vicfred joins (~vicfred@user/vicfred)
16:17:57 <jmcarthur> slack1256: I don't necessarily disagree, but does something jump out at you as especially blocking optimizations?
16:18:16 <jmcarthur> I am recently interested in giving it a shot
16:18:44 × Pickchea quits (~private@user/pickchea) (Ping timeout: 248 seconds)
16:19:50 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
16:23:58 shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
16:24:40 × mmhat quits (~mmh@2001:4090:a243:8065:ee08:6bff:fe09:5315) (Ping timeout: 250 seconds)
16:24:55 × jmcarthur quits (~jmcarthur@185.240.244.197) (Ping timeout: 256 seconds)
16:34:30 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 240 seconds)
16:35:16 × kuribas`` quits (~user@ptr-17d51eocv4dr96js6nc.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
16:37:22 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
16:39:03 mmhat joins (~mmh@2001:4090:a243:802a:ee08:6bff:fe09:5315)
16:50:32 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
16:51:04 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:51:45 gabriel_sevecek joins (~gabriel@188-167-229-200.dynamic.chello.sk)
16:54:59 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
16:58:12 × alp_ quits (~alp@user/alp) (Ping timeout: 248 seconds)
16:58:55 × Kaipei quits (~Kaiepi@156.34.47.253) (Remote host closed the connection)
16:59:12 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:59:20 Kaipei joins (~Kaiepi@156.34.47.253)
16:59:22 kenran joins (~kenran@200116b82b697100b4961f00ddd777f0.dip.versatel-1u1.de)
17:00:58 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Quit: Konversation terminated!)
17:07:03 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
17:07:13 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
17:07:20 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
17:07:23 hgolden joins (~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
17:10:10 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:10:42 bahamas joins (~lucian@84.232.141.55)
17:15:37 stackdroid18 joins (14094@user/stackdroid)
17:15:52 econo joins (uid147250@user/econo)
17:15:54 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 276 seconds)
17:16:27 slac77610 joins (~slack1256@186.11.83.150)
17:18:15 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
17:18:45 × slack1256 quits (~slack1256@191.126.99.83) (Ping timeout: 256 seconds)
17:19:03 × qwedfg_ quits (~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in)
17:20:30 qwedfg joins (~qwedfg@user/qwedfg)
17:21:55 × dsrt^ quits (~dsrt@173-160-94-253-atlanta.hfc.comcastbusiness.net) (Remote host closed the connection)
17:26:06 x_kuru joins (~xkuru@user/xkuru)
17:27:23 bahamas joins (~lucian@84.232.141.55)
17:28:50 × xkuru quits (~xkuru@user/xkuru) (Ping timeout: 240 seconds)
17:30:50 galio joins (~textual@c-174-63-73-241.hsd1.vt.comcast.net)
17:31:46 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 246 seconds)
17:32:04 x_kuru_ joins (~xkuru@user/xkuru)
17:33:05 bahamas joins (~lucian@84.232.141.55)
17:34:50 × x_kuru quits (~xkuru@user/xkuru) (Ping timeout: 240 seconds)
17:37:29 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 248 seconds)
17:38:35 × stackdroid18 quits (14094@user/stackdroid) (Quit: hasta la vista... tchau!)
17:39:10 bahamas joins (~lucian@84.232.141.55)
17:39:38 stackdroid18 joins (14094@user/stackdroid)
17:43:03 x_kuru joins (~xkuru@user/xkuru)
17:43:41 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 256 seconds)
17:45:37 bahamas joins (~lucian@84.232.141.55)
17:45:50 × x_kuru_ quits (~xkuru@user/xkuru) (Ping timeout: 240 seconds)
17:49:50 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 240 seconds)
17:50:39 bahamas joins (~lucian@84.232.141.55)
17:52:04 × coot quits (~coot@213.134.190.95) (Ping timeout: 248 seconds)
17:53:00 eraziel joins (~eraziel@modemcable169.17-58-74.mc.videotron.ca)
17:55:23 alp_ joins (~alp@user/alp)
17:57:53 × qwedfg quits (~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in)
18:00:00 × bliminse quits (~bliminse@host86-164-128-238.range86-164.btcentralplus.com) (Quit: leaving)
18:00:07 × gabriel_sevecek quits (~gabriel@188-167-229-200.dynamic.chello.sk) (Ping timeout: 240 seconds)
18:01:17 qwedfg joins (~qwedfg@user/qwedfg)
18:02:03 × cross quits (~cross@spitfire.i.gajendra.net) (Quit: leaving)
18:03:32 cross joins (~cross@spitfire.i.gajendra.net)
18:04:07 × cross quits (~cross@spitfire.i.gajendra.net) (Client Quit)
18:04:38 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 252 seconds)
18:04:41 cross joins (~cross@spitfire.i.gajendra.net)
18:04:42 × cross quits (~cross@spitfire.i.gajendra.net) (Client Quit)
18:04:59 × eraziel quits (~eraziel@modemcable169.17-58-74.mc.videotron.ca) (Quit: Client closed)
18:05:07 texasmynsted joins (~texasmyns@99.96.221.112)
18:05:40 cross joins (~cross@spitfire.i.gajendra.net)
18:08:54 bliminse joins (~bliminse@host86-164-128-238.range86-164.btcentralplus.com)
18:14:53 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
18:15:14 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
18:16:13 bahamas joins (~lucian@84.232.141.55)
18:20:54 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 276 seconds)
18:21:17 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
18:23:41 acidjnk joins (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de)
18:25:49 jakalx parts (~jakalx@base.jakalx.net) ()
18:27:08 slack1256 joins (~slack1256@191.125.99.72)
18:29:10 × slac77610 quits (~slack1256@186.11.83.150) (Ping timeout: 240 seconds)
18:29:26 f-a joins (f2a@f2a.jujube.ircnow.org)
18:29:47 × mbuf quits (~Shakthi@122.174.206.211) (Quit: Leaving)
18:31:26 jakalx joins (~jakalx@base.jakalx.net)
18:32:04 gurkenglas joins (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
18:33:31 Kaipei is now known as Kaiepi
18:35:42 jmcarthur joins (~jmcarthur@185.240.244.197)
18:35:43 × stackdroid18 quits (14094@user/stackdroid) (Quit: hasta la vista... tchau!)
18:38:35 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:44:49 × galio quits (~textual@c-174-63-73-241.hsd1.vt.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
18:48:02 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:52:53 mvk joins (~mvk@2607:fea8:5ce3:8500::aa1d)
18:53:21 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
18:59:49 slac94526 joins (~slack1256@186.11.83.150)
19:01:23 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
19:01:50 × slack1256 quits (~slack1256@191.125.99.72) (Ping timeout: 252 seconds)
19:03:56 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:09:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
19:13:28 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:14:31 x_kuru_ joins (~xkuru@user/xkuru)
19:17:30 × bahamas quits (~lucian@84.232.141.55) (Ping timeout: 240 seconds)
19:17:30 × x_kuru quits (~xkuru@user/xkuru) (Ping timeout: 240 seconds)
19:17:37 vshender joins (~user@37.214.80.73)
19:17:41 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
19:18:10 vshender parts (~user@37.214.80.73) ()
19:22:09 × oxide quits (~lambda@user/oxide) (Quit: oxide)
19:22:21 Pickchea joins (~private@user/pickchea)
19:25:05 jgeerds joins (~jgeerds@d53604b0.access.ecotel.net)
19:25:14 stackdroid18 joins (~stackdroi@user/stackdroid)
19:31:48 <texasmynsted> Wow super quiet in here today. Everybody must be "in the zone" writing haskell
19:32:54 <Hecate> p. much
19:32:57 <juri_> can confirm.
19:33:32 <f-a> 2,2writing flames
19:34:10 <monochrom> Readying teaching material for Haskell.
19:34:52 <Hecate> deprecating GHC stuff
19:34:54 <Hecate> https://twitter.com/TechnoEmpress/status/1523739993390436353
19:36:48 <maerwald> prolly everyone lazy af until something forces them
19:37:21 <geekosaur> mostly been making calls and such, sadly not at all haskell related
19:38:04 <k`> probably reading through Xlib docs on Tronche and vetting copyrights.
19:38:09 <Hecate> hahahaha
19:38:11 <Hecate> this name is hilarious
19:38:40 <Hecate> in French, "tronche" is a word for "face", less then vulgar but definitely not proper
19:39:06 <geekosaur> no but at some point I need to read through Xlib source code and figure out why something is making an undocumented protocol call
19:39:31 <geekosaur> weirdly, tronche.com has become the go-to for online X11 documentation
19:40:13 <geekosaur> then again that might be appropriate since Xlib is less than vulgar but waqs never really proper and these days has been superseded by xcb
19:40:17 <sm> doing support. Did start the day with writing haskell though.
19:40:46 <maerwald> sm: like "close the window and restart"?
19:41:18 <f-a> «just unsafePerformIO it»
19:41:37 <dminuoso> How do I elegantly express `when (x < 3)` when `x` is in fact `Maybe Int` either way (treating Null as either True or False)?
19:41:38 <Bulby[m]> hahah
19:41:38 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:41:43 <maerwald> my support usually boils down to "read the message on your screen"
19:41:50 <maerwald> "no, the other one too"
19:42:16 <f-a> I had a similar need maerwald
19:42:29 <f-a> I recall there is a whenM in a contrib-extra-whatever package
19:43:03 <sclv> dminuoso: `x ---> fromMaybe 0 x` ? Alternately `fromMaybe True . fmap (< 3) $ x` ?
19:43:28 <sm> at my best, I'll try to see how directly and easily we can get to user satisfaction. It's a useful practice and can be a fun game
19:43:48 f-a nods
19:43:57 <sm> later in the day, it's a lot more terse :)
19:44:04 <f-a> xD
19:44:11 <tomsmeding> sclv: `fromMaybe True . fmap (< 3) $ x` -> `maybe True (< 3) x`
19:44:13 <sclv> in Theory you can express one of the two directions by saying `x < Just 3` but trusting users to understand the ordering properties on Maybe is a mess
19:44:53 <sclv> tomsmeding: nice point
19:44:58 <dminuoso> Mmm, what about `traverse/for` here?
19:45:10 <sm> incidentally tekmo made a nice post referencing stackage: https://www.haskellforall.com/2022/05/the-golden-rule-of-software.html
19:45:16 <dminuoso> for_ x $ \x' -> when (x' > 10) ...
19:45:44 <monochrom> That will effectively treat "Nothing > 10" to be false.
19:45:47 <maerwald> don't use when, use `unless` for maximum confusion
19:46:26 <dminuoso> maerwald: heh, I think this must vary from person to person. I cant parse `unless`
19:46:36 <geekosaur> sounds very Perl
19:46:38 <dminuoso> But apparently some people seem to be happy with it
19:47:09 <tomsmeding> maerwald: to be used together with https://hackage.haskell.org/package/acme-dont-1.2/docs/Acme-Dont.html
19:47:12 <texasmynsted> :-)
19:47:29 slack1256 joins (~slack1256@191.125.99.72)
19:47:41 <dminuoso> tomsmeding: Good things I depend on acme-everything, acme-dont wont be a wasted dependency.
19:47:44 <monochrom> Dijkstra's complaint against "unless" predates Perl. So "unless" predates Perl too. Probably all the way back to Lisp.
19:47:44 <maerwald> dminuoso: https://www.youtube.com/watch?v=hCvHTrUh4os <- this one also talks about `unless` :p
19:48:07 <maerwald> basically: a language that only allows `unless` and some other nonsense for control-flow
19:48:11 <sclv> acme-notwithstanding
19:48:29 <Bulby[m]> ah is perl where acme was derived from?
19:48:35 <geekosaur> iirc perl stole it from basic-plus
19:48:39 <geekosaur> yes
19:48:45 <monochrom> Oh w00t. A language that has only "unless" and "call/cc". >:)
19:48:51 <tomsmeding> dminuoso: ._. acme-everything
19:48:52 <geekosaur> acme is the joke category on cpan
19:49:00 <sclv> well acme is a reference to the old roadrunner cartoons strictly speaking
19:49:18 <maerwald> I'm a fan
19:49:20 monochrom writes paper "call/cc: the ultimate lambda"
19:49:24 <geekosaur> yes
19:49:27 <dminuoso> geekosaur: perl has much better acme things though
19:49:32 <dminuoso> Acme::EyeDrops is my absolute favouriote.
19:49:40 <dminuoso> That one is just superb.
19:49:40 × slac94526 quits (~slack1256@186.11.83.150) (Ping timeout: 246 seconds)
19:49:42 <monochrom> Guy Steeles would have a heart attack :)
19:51:56 <monochrom> The language will be called "advanced", because it's the opposite of "basic". In basic, you go "if ... goto ...". In advanced, you go "call/cc ... unless ...".
19:52:06 <monochrom> Absolutely perfect.
19:55:18 <tdammers> obligatory mentioning of INTERCAL and the COME FROM statement
19:55:38 <geekosaur> I considered raising that
19:55:52 <k`> there `any (fmap (> 3)` and `all (fmap (>3))` depending on whether you want success or failure on Nothing.
19:56:06 <geekosaur> now we just need an INTERCAL-style call/cc
19:56:16 <dminuoso> k`: Mmm, Im not sure I like that either.
19:56:31 <dminuoso> I think the best really is `maybe True (< 3) x` what tomsmeding proposed
19:56:43 <dminuoso> It's clear, its obvious
19:57:49 <k`> Fair enough.
19:57:52 <monochrom> come from with current history?
19:58:25 <k`> Time to reset this continuation before it gets called again.
19:59:03 <maerwald> unless $ always . continue
19:59:24 <monochrom> But yeah "maybe True/False (< 3) x" is short and obvious and agnostic to True/False.
20:00:51 jmdaemon joins (~jmdaemon@user/jmdaemon)
20:02:37 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Ping timeout: 246 seconds)
20:06:57 geranim0 joins (~geranim0@modemcable242.171-178-173.mc.videotron.ca)
20:10:18 indomitable joins (~Beeswachs@gateway/tor-sasl/indomitable)
20:10:36 <indomitable> can monads be composed applicatively? if so why is that the case
20:10:55 <dminuoso> What do you mean by "composed applicatively"?
20:11:13 <indomitable> i mean are monads things that can be composed applicatively
20:11:47 <dminuoso> Monads are exactly all things that happen to be able to implement to methods and satisfy a bunch fo laws.
20:11:59 <dminuoso> s/to methods/two particular methods/
20:12:02 <indomitable> that's fair, but are applicative laws also fulfilled?
20:12:06 <dminuoso> Yes.
20:12:15 <indomitable> are there weird exceptions?
20:12:15 <dminuoso> That's why Applicative is nowadays a superclass of Applicative.
20:12:18 coot joins (~coot@213.134.190.95)
20:12:19 <indomitable> or gotchas?
20:12:20 <dminuoso> That's why Applicative is nowadays a superclass of *Monad
20:12:22 <dminuoso> ^-
20:12:29 <dminuoso> If its a Monad, its automatically Applicative too.
20:12:32 <geekosaur> every monad is an applicative but not every applicative is a monad
20:12:46 <indomitable> but *why* is it also applicative
20:12:53 <indomitable> i understand now that monads are magic, but i am seeking higher turths
20:12:55 <indomitable> truths*
20:13:03 <dminuoso> Monads are not magic.
20:13:06 <tomsmeding> pure = return, (<*>) = ap
20:13:06 <geekosaur> that said, you do lose something if you treat a monad as an applicative: you can't operate conditionally on it
20:13:11 <indomitable> dminuoso, they are if maths is magic
20:13:15 <tomsmeding> that's why a monad is also an applicative functor
20:13:17 <geekosaur> wat
20:13:18 <dminuoso> indomitable: So?
20:13:30 <dminuoso> indomitable: Group theory is complicated stuff. Is adding numbers difficult?
20:13:38 <indomitable> dminuoso, to me, yes
20:13:42 <indomitable> i try not to any time i can avoid it
20:14:03 <dminuoso> I am unsure whether this is going to be a productive discussion.
20:14:11 <indomitable> that's fair
20:14:56 <maerwald> indomitable: https://neilmitchell.blogspot.com/2019/10/monads-as-graphs.html
20:14:58 <indomitable> geekosaur, so once you start treating a monad as applicative, there's no going back? you can't say, collect validation errors, and then decide to do some monadic chaining mid-way and then go back?
20:15:56 <maerwald> I think this also makes clear why you can easily express applicative via monad
20:16:06 <indomitable> maerwald, thanks, i'll give it a read
20:16:07 <dminuoso> "treat a monad as applicative" - I think the basic notion in your head is already twisted.
20:16:15 <f-a> you can use applicative code in monadic code, not viceversa
20:16:52 <k`> I believe geekosaur just meant that Applicative is a superclass of Monad.
20:17:03 <geekosaur> if you use <*> it behaves like any other applicative. you must use >>= to make decisions based on the value
20:17:10 <k`> So if you have a Monad constraint, you can use Applicative methods, but not vice versa.
20:18:03 <geekosaur> nothing stops you from intermixing them, but <*> doesn't gain any additional power from being used on a Monad instead of an Applicative
20:18:54 aliosablack joins (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592)
20:19:04 <dminuoso> indomitable: I think the best thing you can do as a beginner, is to not think about the "bigger picture" - focus on individual instances.
20:19:21 <indomitable> my brain doesn't really work that way, but it's probably good advice dminuoso :-)
20:19:43 <geekosaur> until you try to focus on something too big and then you just get lost
20:19:48 × chomwitt quits (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592) (Ping timeout: 260 seconds)
20:19:55 <indomitable> getting lost is just exploring by accident
20:20:07 <dminuoso> indomitable: Do you have much experience learning monad from scratch? :-)
20:20:10 <geekosaur> only if you recognize it :)
20:20:45 <dminuoso> There's good reason why I suggest focusing on individual instances.
20:20:51 <indomitable> dminuoso, no, but i can abstract experiences from other weirdly difficult things :P
20:21:03 <indomitable> and I don't disagree this is generally a good course of action
20:21:19 <indomitable> but my brain does not always approve of standard learning approaches despite their efficacy in the median
20:22:13 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:24:39 <indomitable> we can't all have good brains (e.g. me) but we can all have benefits from the functional programming paradigm \o/
20:25:09 <k`> Then by all means, start with `fmap :: (a -> b) -> m a -> m b` with laws that preserve identity and composition, then `liftA2 :: (a -> b -> c) -> m a -> m b -> m c` with laws that preserve identity and composition, then `(=<<) :: (a -> m b) -> m a -> m b` with laws that preserve identity and composition, and `pure :: a -> m a` as an identity.
20:25:22 <k`> And don't worry about the specific instances.
20:25:26 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:25:42 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Remote host closed the connection)
20:26:49 <indomitable> k`, that made a surprising amount of sense
20:27:21 <k`> And how the laws for `(=<<)` restrict you to only one definition of `liftA2`, and how `MonadZip` can give you the other one.
20:27:54 <indomitable> not sure my brain is quite ready for those two last ones, will process
20:29:02 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
20:34:31 <indomitable> hey a tor-sasl bro, neat.
20:36:18 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
20:41:23 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
20:42:19 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:42:42 king_gs joins (~Thunderbi@187.201.105.54)
20:46:36 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
20:47:50 × jmcarthur quits (~jmcarthur@185.240.244.197) (Ping timeout: 240 seconds)
20:49:36 mikoto-chan joins (~mikoto-ch@213.177.151.239)
20:51:03 moonsheep joins (~user@user/moonsheep)
20:51:05 moonsheep parts (~user@user/moonsheep) (ERC 5.4 (IRC client for GNU Emacs 28.1))
20:53:10 × indomitable quits (~Beeswachs@gateway/tor-sasl/indomitable) (Quit: Leaving)
20:57:54 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:59:05 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
20:59:16 × kenran quits (~kenran@200116b82b697100b4961f00ddd777f0.dip.versatel-1u1.de) (Quit: WeeChat info:version)
21:00:28 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
21:01:13 × son0p quits (~ff@181.136.122.143) (Ping timeout: 260 seconds)
21:02:03 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
21:04:10 × mvk quits (~mvk@2607:fea8:5ce3:8500::aa1d) (Ping timeout: 250 seconds)
21:06:40 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
21:07:14 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
21:10:56 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:11:24 × ph88 quits (~ph88@84-30-78-253.cable.dynamic.v4.ziggo.nl) (Quit: Leaving)
21:11:50 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
21:12:36 × king_gs quits (~Thunderbi@187.201.105.54) (Read error: Connection reset by peer)
21:15:09 king_gs joins (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634)
21:19:01 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
21:26:06 dsrt^ joins (~dsrt@173-160-94-253-atlanta.hfc.comcastbusiness.net)
21:27:11 chomwitt joins (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592)
21:28:23 × aliosablack quits (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592) (Read error: Connection reset by peer)
21:31:07 <dashkal> Is there a low boilerplate way to build an adt with constant data associated with each constructor? Use case is giving symbolic names to integers in an HTTP API I'm modeling. They don't always start from zero, and aren't always contiguous, so Enum isn't a fit. Right now I'm just writing the data Foo = FooA | FooB | FooC | ... and manual toInt/fromInt conversion functions.
21:31:23 unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
21:31:26 f-a parts (f2a@f2a.jujube.ircnow.org) ()
21:32:41 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:35:06 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
21:35:24 × averell quits (~averell@user/averell) (Quit: .)
21:36:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
21:38:19 son0p joins (~ff@181.136.122.143)
21:38:22 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
21:40:01 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:40:41 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Remote host closed the connection)
21:41:23 × dut quits (~dut@user/dut) (Ping timeout: 260 seconds)
21:42:53 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
21:43:04 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
21:43:45 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
21:46:44 × kilolympus quits (~kilolympu@31.205.200.235) (Ping timeout: 248 seconds)
21:46:50 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds)
21:48:22 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
21:54:57 × kaskal quits (~kaskal@2001:4bb8:2e0:b5bd:e3c0:d71b:f32:84d8) (Quit: ZNC - https://znc.in)
21:55:13 slack5451 joins (~slack1256@186.11.84.150)
21:57:40 littlebo1eep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
21:57:40 kaskal joins (~kaskal@089144207160.atnat0016.highway.bob.at)
21:58:00 × slack1256 quits (~slack1256@191.125.99.72) (Ping timeout: 276 seconds)
21:59:04 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
22:00:12 × coot quits (~coot@213.134.190.95) (Quit: coot)
22:03:43 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
22:04:00 Feuermagier joins (~Feuermagi@user/feuermagier)
22:05:16 galio joins (~textual@c-174-63-73-241.hsd1.vt.comcast.net)
22:05:57 × pierrot quits (~pi@user/pierrot) (Ping timeout: 256 seconds)
22:06:12 pierrot joins (~pi@user/pierrot)
22:07:08 jmd_ joins (~jmdaemon@user/jmdaemon)
22:07:50 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds)
22:07:59 × chomwitt quits (~chomwitt@2a02:587:dc19:d600:d488:150b:e66b:f592) (Ping timeout: 240 seconds)
22:10:04 × littlebo1eep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
22:10:04 foul_owl joins (~kerry@23.82.193.87)
22:11:26 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
22:12:52 xff0x joins (~xff0x@om126033119107.35.openmobile.ne.jp)
22:13:57 ec joins (~ec@gateway/tor-sasl/ec)
22:14:22 × alp_ quits (~alp@user/alp) (Ping timeout: 250 seconds)
22:15:25 nate1 joins (~nate@98.45.169.16)
22:15:39 Tuplanolla joins (~Tuplanoll@91-159-68-39.elisa-laajakaista.fi)
22:17:13 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
22:18:23 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:19:13 <unit73e> I was trying to make a command line argument processing and it turns out cmdargs has a complicated readme talking about pure and unpure but not how do you parse... I managed to figure it out but oof
22:19:48 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
22:20:43 <unit73e> I was not impressed by the documentation but the implementation seems fine
22:20:57 <geekosaur> maybe optparse-applicative will suit you better? (disclaimer: I've tried neither, I know both are popular)
22:22:59 <unit73e> geekosaur, it does seem a lot more normal, thanks
22:24:39 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 276 seconds)
22:25:34 <hpc> optparse-applicative is awesome
22:26:38 × zeenk quits (~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d) (Quit: Konversation terminated!)
22:33:53 yauhsien joins (~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
22:34:37 × king_gs quits (~Thunderbi@2806:103e:29:da71:ba86:4e28:3521:b634) (Quit: king_gs)
22:37:26 × acidjnk quits (~acidjnk@p200300d0c7068b566ddd60c7ad103c7d.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
22:38:21 × yauhsien quits (~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
22:41:44 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
22:44:04 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
22:44:20 jpds joins (~jpds@gateway/tor-sasl/jpds)
22:44:21 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
22:44:40 motherfsck joins (~motherfsc@user/motherfsck)
22:44:42 jmcarthur joins (~jmcarthur@45.15.176.229)
22:48:33 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
22:48:54 averell joins (~averell@user/averell)
23:09:29 spider joins (~spider@vps-951ce37a.vps.ovh.ca)
23:09:36 spider is now known as spider_
23:14:16 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.5)
23:14:27 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:14:40 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
23:15:27 dut joins (~dut@user/dut)
23:20:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
23:20:51 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
23:22:03 × mmhat quits (~mmh@2001:4090:a243:802a:ee08:6bff:fe09:5315) (Quit: WeeChat 3.5)
23:22:10 jmdaemon joins (~jmdaemon@user/jmdaemon)
23:22:28 × jmd_ quits (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
23:22:47 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
23:26:22 × galio quits (~textual@c-174-63-73-241.hsd1.vt.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
23:27:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
23:32:48 littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo)
23:32:52 <jackdk> dashkal: You're not doing status codes, are you? They're already in http-types
23:36:09 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 256 seconds)
23:36:45 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
23:41:16 jmcarthur_ joins (~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
23:42:24 × unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection)
23:43:26 × dhil quits (~dhil@cpc103052-sgyl39-2-0-cust260.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
23:48:20 × jgeerds quits (~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
23:48:42 × slack5451 quits (~slack1256@186.11.84.150) (Remote host closed the connection)
23:48:56 slack1256 joins (~slack1256@186.11.84.150)
23:52:23 × Tuplanolla quits (~Tuplanoll@91-159-68-39.elisa-laajakaista.fi) (Quit: Leaving.)
23:55:34 × littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)

All times are in UTC on 2022-05-09.