Home liberachat/#haskell: Logs Calendar

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

00:06:02 BanUtama joins (~blake.rai@user/BanUtama)
00:09:05 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
00:11:01 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
00:15:19 × hounded_1969 quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Quit: Leaving)
00:16:58 × hounded quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection)
00:16:58 × hounded_woodstoc quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection)
00:17:56 off^ joins (~off@206.85.120.17)
00:19:05 Sgeo joins (~Sgeo@user/sgeo)
00:20:26 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
00:21:19 × werneta quits (~werneta@137.78.30.207) (Ping timeout: 252 seconds)
00:21:43 noteness joins (~noteness@user/noteness)
00:22:09 BanUtama joins (~blake.rai@user/BanUtama)
00:23:56 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
00:24:13 matthewmosior joins (~matthewmo@173.170.253.91)
00:27:40 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
00:30:44 causal joins (~user@50.35.83.177)
00:32:00 × zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
00:36:53 vysn joins (~vysn@user/vysn)
00:37:03 × hmw[at]1 quits (~hmw@84-113-100-7.cable.dynamic.surfer.at) (Quit: Leaving.)
00:37:20 hmw[at] joins (~hmw@84-113-100-7.cable.dynamic.surfer.at)
00:38:52 BanUtama joins (~blake.rai@user/BanUtama)
00:42:56 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 255 seconds)
00:44:47 stef204 joins (~stef204@user/stef204)
00:50:53 PHO`_ is now known as PHO`
01:02:55 nilradical joins (~nilradica@user/naso)
01:08:11 × xff0x_ quits (~xff0x@2405:6580:b080:900:6c03:b0ff:76cc:e68c) (Ping timeout: 255 seconds)
01:10:26 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
01:10:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
01:11:04 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:14:09 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
01:14:47 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
01:16:26 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:16:55 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:17:12 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:21:10 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
01:21:26 chexum joins (~quassel@gateway/tor-sasl/chexum)
01:29:03 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
01:34:17 frost joins (~frost@user/frost)
01:35:28 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:36:04 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:38:49 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
01:38:58 × machined1od quits (~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 240 seconds)
01:39:17 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
01:45:11 instantaphex joins (~jb@c-73-171-252-84.hsd1.fl.comcast.net)
01:47:25 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
01:47:38 × gurkengl1s quits (~gurkengla@84.138.199.46) (Ping timeout: 240 seconds)
01:50:17 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 268 seconds)
01:50:33 xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
01:50:55 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
01:51:49 × aeka quits (~aeka@2606:6080:1001:17:9ea4:71f9:d294:d7b7) (Quit: ZNC 1.8.2 - https://znc.in)
01:52:06 aeka joins (~aeka@2606:6080:1001:17:9ea4:71f9:d294:d7b7)
02:09:07 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
02:16:40 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:16:40 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:16:40 finn_elija is now known as FinnElija
02:22:20 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
02:23:19 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
02:27:21 × stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6)
02:31:41 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
02:32:20 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
02:34:40 × td_ quits (~td@muedsl-82-207-238-079.citykom.de) (Ping timeout: 268 seconds)
02:35:58 td_ joins (~td@94.134.91.254)
02:38:02 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
02:39:04 × noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds)
02:39:14 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
02:39:36 chexum joins (~quassel@gateway/tor-sasl/chexum)
02:40:16 noteness joins (~noteness@user/noteness)
02:49:28 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
02:51:19 BanUtama joins (~blake.rai@user/BanUtama)
02:54:44 Katarushisu3 joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net)
02:55:18 ysh__ joins (sid6017@id-6017.ilkley.irccloud.com)
02:55:18 jmct_ joins (sid160793@id-160793.tinside.irccloud.com)
02:55:19 megeve_ joins (sid523379@id-523379.hampstead.irccloud.com)
02:55:28 agander_m__ joins (sid407952@id-407952.tinside.irccloud.com)
02:55:34 Noinia joins (~Frank@77-162-168-71.fixed.kpn.net)
02:56:27 bollu4 joins (~bollu@159.65.151.13)
02:56:34 rush joins (~sloorush@52.187.184.81)
02:56:44 jludwig89 joins (~justin@li657-110.members.linode.com)
02:56:45 Hafydd_ joins (jc@user/hafydd)
02:57:01 bonz060_ joins (~quassel@2001:bc8:47a4:a23::1)
02:57:05 dumptruckman_ joins (~dumptruck@23-239-13-163.ip.linodeusercontent.com)
02:57:22 marquis_1ndras joins (~marquis_a@124-150-76-210.tpgi.com.au)
02:57:33 Clint_ joins (~Clint@user/clint)
02:57:44 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
02:57:54 Jonno_FTW joins (~come@api.carswap.me)
02:57:55 × Jonno_FTW quits (~come@api.carswap.me) (Changing host)
02:57:55 Jonno_FTW joins (~come@user/jonno-ftw/x-0835346)
02:57:56 wagle_ joins (~wagle@quassel.wagle.io)
02:58:05 Hecate_ joins (~mariposa@user/hecate)
02:58:18 ChaiTRex joins (~ChaiTRex@user/chaitrex)
02:58:26 red-snail joins (~snail@static.151.210.203.116.clients.your-server.de)
02:58:27 byorgey_ joins (~byorgey@155.138.238.211)
02:58:30 uroboros joins (~ouroboros@user/ouroboros)
02:58:31 poscat0x04 joins (~poscat@114.245.109.158)
02:58:31 bgamari_ joins (~bgamari@64.223.132.170)
02:58:31 kaol_ joins (~kaol@94-237-42-30.nl-ams1.upcloud.host)
02:59:06 Philonous_ joins (~Philonous@user/philonous)
02:59:23 absentia_ joins (~absentia@24-246-53-210.cable.teksavvy.com)
02:59:28 aku_ joins (~aku@163.172.137.34)
02:59:36 ente` joins (~daemon@inferno.barfooze.de)
02:59:43 Igloo joins (~ian@matrix.chaos.earth.li)
02:59:47 carbolymer_ joins (~carbolyme@dropacid.net)
02:59:49 matthewmosior joins (~matthewmo@173.170.253.91)
02:59:55 lisk1n joins (~liskin@xmonad/liskin)
03:00:19 Fischmie1 joins (~Fischmiep@user/Fischmiep)
03:00:32 orcus- joins (~orcus@user/brprice)
03:00:44 gonz_______ joins (sid304396@id-304396.lymington.irccloud.com)
03:01:03 wallymathieu_ joins (sid533252@id-533252.uxbridge.irccloud.com)
03:01:06 LiChen_ joins (uid561437@id-561437.tinside.irccloud.com)
03:01:06 elvishjerricco1 joins (~elvishjer@2001:470:69fc:105::6172)
03:01:18 statusfailed joins (~statusfai@statusfailed.com)
03:01:26 pierrot_ joins (~pi@user/pierrot)
03:01:29 dunj3_ joins (~dunj3@kingdread.de)
03:01:33 hyiltiz_ joins (~quassel@31.220.5.250)
03:01:48 lagash joins (lagash@lagash.shelltalk.net)
03:02:01 dyniec joins (~dyniec@mail.dybiec.info)
03:02:15 systemfault_ joins (sid267009@id-267009.uxbridge.irccloud.com)
03:03:04 × rodental quits (~rodental@38.146.5.222) (*.net *.split)
03:03:04 × zaquest quits (~notzaques@5.130.79.72) (*.net *.split)
03:03:04 × jludwig quits (~justin@li657-110.members.linode.com) (*.net *.split)
03:03:04 × anderson quits (~ande@user/anderson) (*.net *.split)
03:03:04 × Square2 quits (~a@user/square) (*.net *.split)
03:03:04 × Vajb quits (~Vajb@2001:999:70c:2b99:3e15:6929:5bc6:c014) (*.net *.split)
03:03:04 × statusfa1led quits (~statusfai@statusfailed.com) (*.net *.split)
03:03:04 × lagash_ quits (lagash@lagash.shelltalk.net) (*.net *.split)
03:03:04 × Jonno_FT1 quits (~come@api.carswap.me) (*.net *.split)
03:03:04 × glider_ quits (~glider@user/glider) (*.net *.split)
03:03:04 × WzC quits (~Frank@77-162-168-71.fixed.kpn.net) (*.net *.split)
03:03:04 × ente`_ quits (~daemon@inferno.barfooze.de) (*.net *.split)
03:03:04 × barrucadu quits (~barrucadu@carcosa.barrucadu.co.uk) (*.net *.split)
03:03:04 × jao- quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (*.net *.split)
03:03:04 × absentia quits (~absentia@user/absentia) (*.net *.split)
03:03:04 × sloorush quits (~sloorush@52.187.184.81) (*.net *.split)
03:03:04 × ian_ quits (~ian@matrix.chaos.earth.li) (*.net *.split)
03:03:04 × Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (*.net *.split)
03:03:04 × bollu quits (~bollu@159.65.151.13) (*.net *.split)
03:03:04 × byorgey quits (~byorgey@155.138.238.211) (*.net *.split)
03:03:04 × cosimone` quits (~user@93-44-186-171.ip98.fastwebnet.it) (*.net *.split)
03:03:04 × shailangsa_ quits (~shailangs@host86-185-98-81.range86-185.btcentralplus.com) (*.net *.split)
03:03:04 × poscat quits (~poscat@114.245.109.158) (*.net *.split)
03:03:04 × sektor[m] quits (~sektor@2001:470:69fc:105::2:3f60) (*.net *.split)
03:03:04 × jean-paul[m] quits (~jean-paul@2001:470:69fc:105::d1ab) (*.net *.split)
03:03:04 × wallymathieu quits (sid533252@id-533252.uxbridge.irccloud.com) (*.net *.split)
03:03:04 × megeve quits (sid523379@id-523379.hampstead.irccloud.com) (*.net *.split)
03:03:04 × agander_m_ quits (sid407952@id-407952.tinside.irccloud.com) (*.net *.split)
03:03:04 × Boarders__ quits (sid425905@id-425905.lymington.irccloud.com) (*.net *.split)
03:03:04 × gonz______ quits (sid304396@id-304396.lymington.irccloud.com) (*.net *.split)
03:03:04 × mht-wtf quits (~mht@2a03:b0c0:3:e0::1e2:c001) (*.net *.split)
03:03:04 × liskin quits (~liskin@xmonad/liskin) (*.net *.split)
03:03:04 × Hafydd quits (jc@owlchat.newnet.net) (*.net *.split)
03:03:04 × jmct quits (sid160793@id-160793.tinside.irccloud.com) (*.net *.split)
03:03:04 × dyniec_ quits (~dyniec@mail.dybiec.info) (*.net *.split)
03:03:04 × ysh_ quits (sid6017@id-6017.ilkley.irccloud.com) (*.net *.split)
03:03:04 × nshepperd quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (*.net *.split)
03:03:04 × berberman quits (~berberman@user/berberman) (*.net *.split)
03:03:04 × pierrot quits (~pi@user/pierrot) (*.net *.split)
03:03:04 × marquis_andras quits (~marquis_a@124-150-76-210.tpgi.com.au) (*.net *.split)
03:03:04 × catern quits (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) (*.net *.split)
03:03:04 × bonz060 quits (~quassel@2001:bc8:47a4:a23::1) (*.net *.split)
03:03:04 × Hash quits (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) (*.net *.split)
03:03:04 × bgamari quits (~bgamari@64.223.132.170) (*.net *.split)
03:03:04 × auri quits (~auri@fsf/member/auri) (*.net *.split)
03:03:04 × systemfault quits (sid267009@id-267009.uxbridge.irccloud.com) (*.net *.split)
03:03:04 × aku quits (~aku@163.172.137.34) (*.net *.split)
03:03:04 × Hecate quits (~mariposa@user/hecate) (*.net *.split)
03:03:04 × kaol quits (~kaol@94-237-42-30.nl-ams1.upcloud.host) (*.net *.split)
03:03:04 × heath quits (~heath@user/heath) (*.net *.split)
03:03:04 × xstill_ quits (xstill@fimu/xstill) (*.net *.split)
03:03:04 × orcus quits (~orcus@user/brprice) (*.net *.split)
03:03:04 × ouroboros quits (~ouroboros@user/ouroboros) (*.net *.split)
03:03:05 × dunj3 quits (~dunj3@kingdread.de) (*.net *.split)
03:03:05 × hyiltiz quits (~quassel@31.220.5.250) (*.net *.split)
03:03:05 × elvishjerricco quits (~elvishjer@2001:470:69fc:105::6172) (*.net *.split)
03:03:05 × Fischmiep quits (~Fischmiep@user/Fischmiep) (*.net *.split)
03:03:05 × DigitalKiwi quits (~kiwi@137.184.156.191) (*.net *.split)
03:03:05 × mjacob quits (~mjacob@adrastea.uberspace.de) (*.net *.split)
03:03:05 × wagle quits (~wagle@quassel.wagle.io) (*.net *.split)
03:03:05 × LiChen quits (uid561437@id-561437.tinside.irccloud.com) (*.net *.split)
03:03:05 × forell quits (~forell@user/forell) (*.net *.split)
03:03:05 × Philonous quits (~Philonous@user/philonous) (*.net *.split)
03:03:05 × JSharp quits (sid4580@id-4580.lymington.irccloud.com) (*.net *.split)
03:03:05 × Clint quits (~Clint@user/clint) (*.net *.split)
03:03:05 × carbolymer quits (~carbolyme@dropacid.net) (*.net *.split)
03:03:05 × dumptruckman quits (~dumptruck@23-239-13-163.ip.linodeusercontent.com) (*.net *.split)
03:03:05 × red-snail1 quits (~snail@static.151.210.203.116.clients.your-server.de) (*.net *.split)
03:03:05 × remexre quits (~remexre@user/remexre) (*.net *.split)
03:03:05 × leah2 quits (~leah@vuxu.org) (*.net *.split)
03:03:06 jmct_ is now known as jmct
03:03:06 wallymathieu_ is now known as wallymathieu
03:03:06 systemfault_ is now known as systemfault
03:03:07 megeve_ is now known as megeve
03:03:08 jludwig89 is now known as jludwig
03:03:08 Katarushisu3 is now known as Katarushisu
03:03:08 bollu4 is now known as bollu
03:03:08 uroboros is now known as ouroboros
03:03:08 dumptruckman_ is now known as dumptruckman
03:03:18 Boarders___ joins (sid425905@id-425905.lymington.irccloud.com)
03:03:24 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
03:03:37 zaquest joins (~notzaques@5.130.79.72)
03:03:47 remexre joins (~remexre@user/remexre)
03:04:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
03:04:47 mht-wtf joins (~mht@mht.wtf)
03:05:01 JSharp joins (sid4580@id-4580.lymington.irccloud.com)
03:05:33 anderson joins (~ande@user/anderson)
03:06:34 glider joins (~glider@user/glider)
03:06:40 cosimone` joins (~user@93-44-186-171.ip98.fastwebnet.it)
03:07:40 nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9)
03:08:00 barrucadu joins (~barrucadu@carcosa.barrucadu.co.uk)
03:08:24 DigitalKiwi joins (~kiwi@2604:a880:400:d0::1ca0:e001)
03:08:36 heath joins (~heath@user/heath)
03:08:40 sektor[m] joins (~sektor@2001:470:69fc:105::2:3f60)
03:08:54 mjacob joins (~mjacob@adrastea.uberspace.de)
03:10:38 rodental joins (~rodental@38.146.5.222)
03:11:48 jean-paul[m] joins (~jean-paul@2001:470:69fc:105::d1ab)
03:11:53 Square joins (~a@user/square)
03:12:05 leah2 joins (~leah@vuxu.org)
03:12:41 Hash joins (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net)
03:12:47 hololeap_ is now known as hololeap
03:13:36 auri joins (~auri@fsf/member/auri)
03:13:40 forell joins (~forell@user/forell)
03:13:42 xstill_ joins (xstill@fimu/xstill)
03:13:45 berberman joins (~berberman@user/berberman)
03:18:29 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
03:20:21 matthewmosior joins (~matthewmo@173.170.253.91)
03:27:01 Vajb joins (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi)
03:27:10 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds)
03:28:10 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
03:28:45 nilradical joins (~nilradica@user/naso)
03:29:47 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
03:30:03 nilradical joins (~nilradica@user/naso)
03:30:41 jargon joins (~jargon@153.sub-174-205-231.myvzw.com)
03:35:05 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
03:35:34 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:39:28 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
03:40:43 <Inst> erm
03:40:44 <Inst> question
03:40:47 <Inst> is it dumb to attempt to use
03:41:31 × instantaphex quits (~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 252 seconds)
03:42:30 <Inst> criterion to benchmark a function that normally takes 30-90 minutes to run?
03:45:44 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
03:47:11 nilradical joins (~nilradica@user/naso)
03:47:18 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
03:51:13 shailangsa joins (~shailangs@host86-185-98-81.range86-185.btcentralplus.com)
03:51:47 × nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds)
03:52:58 hakutaku joins (~hakutaku@94.25.228.55)
04:03:10 × Vajb quits (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer)
04:03:42 Vajb joins (~Vajb@2001:999:70c:2b99:3e15:6929:5bc6:c014)
04:04:45 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:10:38 × vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 240 seconds)
04:12:44 vglfr joins (~vglfr@194.9.14.33)
04:13:28 nilradical joins (~nilradica@user/naso)
04:19:30 × EsoAlgo quits (~EsoAlgo@129.146.136.145) (Ping timeout: 268 seconds)
04:19:45 gmg joins (~user@user/gehmehgeh)
04:21:29 × vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 252 seconds)
04:21:38 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
04:24:00 <Axman6> it can be made to work but it would be unusual - you'd need to configure timeouts and how many iterations you'd want to run.
04:24:17 <Axman6> generally there would be better way to do that like logging the start and end times during actual use
04:24:18 vglfr joins (~vglfr@194.9.14.33)
04:24:22 kazaf joins (~kazaf@94.180.63.53)
04:26:08 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Read error: Connection reset by peer)
04:26:08 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
04:26:08 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:26:08 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Write error: Connection reset by peer)
04:26:08 × noteness quits (~noteness@user/noteness) (Read error: Connection reset by peer)
04:26:08 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
04:26:08 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Read error: Connection reset by peer)
04:26:08 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
04:26:31 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
04:26:37 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:26:41 ChaiTRex joins (~ChaiTRex@user/chaitrex)
04:26:44 stiell joins (~stiell@gateway/tor-sasl/stiell)
04:26:56 chexum joins (~quassel@gateway/tor-sasl/chexum)
04:26:57 noteness joins (~noteness@user/noteness)
04:27:23 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:28:49 gmg joins (~user@user/gehmehgeh)
04:30:06 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
04:30:29 stiell joins (~stiell@gateway/tor-sasl/stiell)
04:31:14 agander_m__ is now known as agander_m
04:33:05 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
04:33:27 ChaiTRex joins (~ChaiTRex@user/chaitrex)
04:34:55 × luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 268 seconds)
04:35:28 × johnw quits (~johnw@2600:1700:cf00:db0:c8aa:85f9:feb6:ad6f) (Quit: ZNC - http://znc.in)
04:38:18 absentia_ is now known as absentia
04:38:26 × absentia quits (~absentia@24-246-53-210.cable.teksavvy.com) (Changing host)
04:38:26 absentia joins (~absentia@user/absentia)
04:38:43 × Kaipei quits (~Kaiepi@142.68.249.28) (Ping timeout: 252 seconds)
04:47:56 irfan joins (~irfan@user/irfan)
04:51:06 pragma- parts (~chaos@user/pragmatic-chaos) (Bye!)
04:52:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
04:53:58 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:55:01 titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de)
04:57:11 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 255 seconds)
05:00:46 × kazaf quits (~kazaf@94.180.63.53) (Ping timeout: 252 seconds)
05:04:23 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds)
05:05:13 × noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds)
05:07:22 noteness joins (~noteness@user/noteness)
05:07:50 catern joins (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407)
05:10:40 BanUtama joins (~blake.rai@user/BanUtama)
05:17:28 × hakutaku quits (~hakutaku@94.25.228.55) (Ping timeout: 268 seconds)
05:22:41 × raym quits (~raym@user/raym) (Quit: travelling today)
05:22:50 <Inst> axman6
05:22:56 <Inst> i just redid it with just getSystemTime
05:22:59 <Inst> and Data.Time
05:23:08 × jargon quits (~jargon@153.sub-174-205-231.myvzw.com) (Remote host closed the connection)
05:27:11 notzmv joins (~zmv@user/notzmv)
05:31:54 <Inst> btw re Monochrome, have you seen the Chinese Haskell QQ group? I'm on the Wechat, which is about 1/3rd the QQ's size. The QQ is 1k people, ffs.
05:39:37 monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net)
05:42:10 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
05:46:45 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
05:55:58 coot joins (~coot@213.134.176.158)
05:57:16 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:57:36 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:02:17 johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
06:06:03 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
06:06:27 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
06:07:05 ccntrq joins (~Thunderbi@172.209.94.92.rev.sfr.net)
06:07:07 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
06:07:52 nilradical joins (~nilradica@user/naso)
06:08:11 × ski quits (~ski@102-198-142-46.pool.kielnet.net) (Ping timeout: 252 seconds)
06:09:11 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
06:11:46 × vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 268 seconds)
06:12:33 benin0 joins (~benin@183.82.204.69)
06:14:29 ski joins (~ski@102-198-142-46.pool.kielnet.net)
06:15:09 × nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds)
06:17:32 mbuf joins (~Shakthi@2401:4900:264d:2a18:1375:61b7:aab6:5d70)
06:19:01 ubert joins (~Thunderbi@178.115.60.12.wireless.dyn.drei.com)
06:22:54 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
06:27:48 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
06:31:25 cheater joins (~Username@user/cheater)
06:35:20 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
06:35:49 × xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds)
06:36:43 × tzh_ quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
06:37:26 xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
06:37:31 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
06:39:09 vglfr joins (~vglfr@194.9.14.33)
06:40:45 matthewmosior joins (~matthewmo@173.170.253.91)
06:42:41 nilradical joins (~nilradica@user/naso)
06:47:55 lortabac joins (~lortabac@2a01:e0a:541:b8f0:f6c8:3b8a:6258:a564)
06:49:52 cheater joins (~Username@user/cheater)
06:51:51 × nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds)
06:52:20 chele joins (~chele@user/chele)
06:53:01 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
06:57:20 cheater1__ joins (~Username@user/cheater)
06:58:01 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
07:01:44 cheater joins (~Username@user/cheater)
07:02:05 × cheater1__ quits (~Username@user/cheater) (Ping timeout: 252 seconds)
07:05:25 MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl)
07:08:14 × michalz quits (~michalz@185.246.204.73) (Remote host closed the connection)
07:08:41 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
07:08:49 michalz joins (~michalz@185.246.204.75)
07:11:03 × MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.5)
07:11:14 MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl)
07:11:56 nilradical joins (~nilradica@user/naso)
07:12:35 vysn joins (~vysn@user/vysn)
07:16:31 rush is now known as sloorush
07:18:27 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
07:22:26 chomwitt joins (~chomwitt@2a02:587:dc12:7400:755f:cb3e:e77d:78e6)
07:22:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds)
07:23:13 fserucas joins (~fserucas@46.50.4.9)
07:24:50 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:25:16 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
07:26:19 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:27:16 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
07:28:18 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:28:20 aforemny_ is now known as aforemny
07:29:35 × nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds)
07:32:14 cfricke joins (~cfricke@user/cfricke)
07:34:22 × cosimone` quits (~user@93-44-186-171.ip98.fastwebnet.it) (Read error: Connection reset by peer)
07:35:29 jgeerds joins (~jgeerds@55d46bad.access.ecotel.net)
07:36:17 nilradical joins (~nilradica@user/naso)
07:38:00 kuribas joins (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be)
07:39:20 × chomwitt quits (~chomwitt@2a02:587:dc12:7400:755f:cb3e:e77d:78e6) (Ping timeout: 268 seconds)
07:41:11 × nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds)
07:42:55 hakutaku joins (~hakutaku@62.32.91.171)
07:43:14 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
07:47:41 × LiChen_ quits (uid561437@id-561437.tinside.irccloud.com) (Quit: Connection closed for inactivity)
07:50:23 <carbolymer_> this looks like a valid NFData instance, right? https://bpa.st/BYRQ
07:50:27 carbolymer_ is now known as carbolymer
07:50:32 nilradical joins (~nilradica@user/naso)
07:50:47 cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it)
07:52:45 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
07:53:41 zer0bitz joins (~zer0bitz@2001:2003:f748:2000:7d58:b5e3:80b4:aa10)
07:55:07 cheater joins (~Username@user/cheater)
07:55:24 matthewmosior joins (~matthewmo@173.170.253.91)
07:55:42 machinedgod joins (~machinedg@d172-219-86-154.abhsia.telus.net)
07:57:07 acidjnk_new joins (~acidjnk@p200300d6e70586665c86bfb0acf03c2b.dip0.t-ipconnect.de)
07:58:40 × cosimone quits (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection)
07:59:46 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
08:00:14 yvan-sraka joins (~yvan-srak@105.67.135.250)
08:00:21 × kawzeg_ quits (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) (Quit: WeeChat 3.3)
08:00:30 kawzeg joins (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34)
08:01:33 ell joins (~ellie@user/ellie)
08:02:15 cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it)
08:05:14 jese joins (~nikola@93-86-182-196.dynamic.isp.telekom.rs)
08:09:41 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
08:09:41 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
08:09:41 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
08:09:50 mc47 joins (~mc47@xmonad/TheMC47)
08:10:10 jpds joins (~jpds@gateway/tor-sasl/jpds)
08:10:20 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
08:10:27 noteness joins (~noteness@user/noteness)
08:12:08 <Axman6> why use foldr'? I don't even know where that comes from, but it seems like a recipe for stack overflows
08:12:18 <Axman6> % :t foldr deepseq
08:12:18 <yahb2> <interactive>:1:7: error: ; Variable not in scope: deepseq :: a -> b -> b
08:12:35 <tomsmeding> looking at 'assocs' here, it seems one of the two maps is not evaluated https://hackage.haskell.org/package/ordered-containers-0.2.2/docs/src/Data.Map.Ordered.Internal.html#assocs
08:12:43 <tomsmeding> but not sure if that is an issue -- presumably they are filled in lockstep
08:12:45 <Axman6> % :t foldr (seq :: a -> () -> ())
08:12:45 <yahb2> foldr (seq :: a -> () -> ()) ; :: forall {t :: * -> *} {a}. Foldable t => () -> t a -> ()
08:12:59 <tomsmeding> but yeah, foldr should be sufficient
08:13:03 <Axman6> % :t foldl (flip (seq :: a -> () -> ()))
08:13:03 <yahb2> foldl (flip (seq :: a -> () -> ())) ; :: forall {t :: * -> *} {a}. Foldable t => () -> t a -> ()
08:13:12 <tomsmeding> or foldl'
08:13:18 matthewmosior joins (~matthewmo@173.170.253.91)
08:16:49 <Axman6> I think either foldr or foldl' would be fine here, but not foldr', because presumably that needs to traverse the whole list before each pair is passed to deepseq
08:17:25 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
08:17:55 <jese> I have a lambda L to which I want to pass a Vector of Ts (T = an arbitrary type), but the compiler errors out that L accepts a Vector of ConstructorTs. Doing (v :: Vector ConstructorT) does not help. So how to properly do this?
08:17:56 alternateved joins (~user@staticline-31-183-149-36.toya.net.pl)
08:21:46 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
08:22:01 noteness joins (~noteness@user/noteness)
08:24:40 <ski> jese : some more context might help
08:26:23 <Axman6> yeah definitely need to see more code to answer that one
08:31:30 × eggplant_ quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:33:50 <carbolymer> Axman6: wait, why foldr' needs to traverse whole list before processing? doesn't that mean:
08:33:50 <carbolymer> foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)
08:33:50 <carbolymer> that it should start evaluating from first element?
08:36:51 ubert1 joins (~Thunderbi@77.119.164.0.wireless.dyn.drei.com)
08:38:30 × ubert quits (~Thunderbi@178.115.60.12.wireless.dyn.drei.com) (Ping timeout: 268 seconds)
08:38:31 ubert1 is now known as ubert
08:39:33 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 244 seconds)
08:40:11 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
08:40:36 <zzz> carbolymer: what would you expect from foldr (+) 0 [1..] ?
08:40:58 nilradical joins (~nilradica@user/naso)
08:43:30 kawen_ is now known as kawen
08:43:34 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
08:45:25 <tomsmeding> carbolymer: what's the definition of foldr'
08:47:10 × nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds)
08:48:50 mmhat joins (~mmh@p200300f1c72ee918ee086bfffe095315.dip0.t-ipconnect.de)
08:48:57 nilradical joins (~nilradica@user/naso)
08:55:00 <cheater> on a lot of websites, there's often stuff that's kind of annoying. let's say on a movie website you have it sorting according to date ascending instead of descending (annoying because you want to see the latest movies). in gmail, sometimes mailing lists have super long tag names (the [Stuff] that's at the beginning of every email's subject line). I can fix all that using user scripts, using the violent monkey plugin for firefox. it injects javascript
08:55:00 <cheater> into sites i want and the js can change all that stuff automatically, shorten strings or modify them, etc. is a system like that is possible in an application written with haskell? how would that even work?
08:55:23 <carbolymer> zzz: I'm trying to understand the docs - isn't the expression evaluated from the outer layer first?
08:56:05 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
08:56:15 <carbolymer> tomsmeding: foldl and seq
08:56:50 <tomsmeding> carbolymer: foldr' is implemented in terms of foldl and seq? Why isn't it called foldl' then?
08:57:07 × mmhat quits (~mmh@p200300f1c72ee918ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
08:57:56 <tomsmeding> carbolymer: for foldr, that is indeed how it would work: evaluate from the outer layer first
08:58:04 <tomsmeding> hence foldr deepseq is precisely what you want I think :p
08:58:14 × jgeerds quits (~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 268 seconds)
08:58:20 <tomsmeding> whether foldr' also does what you want depends on its precise definition
08:58:27 <carbolymer> hmm
08:58:29 <carbolymer> thanks
08:58:53 × ski quits (~ski@102-198-142-46.pool.kielnet.net) (Ping timeout: 268 seconds)
08:59:08 alp_ joins (~alp@user/alp)
08:59:20 <carbolymer> I guess I should pay more attention to haddocks
09:00:11 <carbolymer> cheater: you want interop js <-> haskell?
09:00:18 × steve[m] quits (~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle)
09:00:52 <cheater> no. i want users to be able to modify the behavior of applications, using some, any, technology, without changing the source of the original application, and hopefully without recompiling
09:00:56 <jese> nvm i solved it
09:01:02 × jese quits (~nikola@93-86-182-196.dynamic.isp.telekom.rs) (Quit: leaving)
09:01:07 steve[m] joins (~stevetrou@2001:470:69fc:105::e0b)
09:01:09 <cheater> that's what user scripts do for users
09:01:21 <tomsmeding> cheater: I feel like that only works in a web context because of the DOM model
09:01:21 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
09:01:49 <cheater> doesn't something like Qt have a dom-like model too?
09:02:22 <tomsmeding> not familiar enough with Qt for that, but in any case that's not haskell :p
09:02:49 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
09:03:25 noteness joins (~noteness@user/noteness)
09:03:36 <cheater> it's not just the dom model though. actions on websites correspond to restful urls, and i can change those. so for example, sorting the list of movies in my previous example, that's done by navigating to a url that in original form has &sort=date&dir=asc. but if i can modify that anchor link's url before the user can click on it, then i can make it dir=desc
09:03:57 steve[m] parts (~stevetrou@2001:470:69fc:105::e0b) ()
09:04:30 × alternateved quits (~user@staticline-31-183-149-36.toya.net.pl) (Remote host closed the connection)
09:04:49 <tomsmeding> what that I guess boils down to, is that the web page gets much of its information from an external systen (the server) that it talks to with a fairly introspectable protocol (i.e. URLs and http requests)
09:04:52 <cheater> i can also gather data from websites and present it in a form that i can use in other programs
09:05:12 <tomsmeding> if you have a single-page web app that downloads the data and then doesn't communicate with the server anymore (those exist), then your url trick wouldn't work
09:05:23 <tomsmeding> and those are closer to how native applications tend to work
09:05:32 <cheater> i don't (yet) know of a way to modify http requests and responses using user scripts or add-ons. but that would be even more powerful
09:06:07 <cheater> i don't know, bear in mind that javascript and html are interpreted languages. i can always change what's going on, modify the data that's in memory, etc
09:06:28 <tomsmeding> html ~ dom model; js being interpreted doesn't really make much of a difference here
09:06:30 <cheater> so even on a single page web app, i can change what's going on
09:06:58 <tomsmeding> unless you're modifying global variables in your user scripts, but that's uncommon, if only because "modern" js stacks tend to not expose any page-global variables
09:07:17 <cheater> no, but they don't need to be page-global to be accessible using some sort of hack
09:07:22 <jackdk> People used to do that by poking into the memory of other programs (search term: "game trainer") and like ReadProcessMemory/WriteProcessMemory in win32 api
09:07:37 <cheater> jackdk: yeah that's true, game trainers are a good example
09:07:44 <cheater> but that's like, way too low level imo
09:07:51 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
09:08:00 <cheater> they'll also do that by dll preloading
09:08:04 <tomsmeding> cheater: I think js modules do something like (function(){ var local = {...}; ... })(); and you can't reasonably access that 'local' from outside
09:08:06 <cheater> so they can catch api calls
09:08:27 <cheater> i wish haskell had a system like dll preloading. is that something that's doable?
09:08:43 <cheater> tomsmeding: you can access it from dev tools though, can you?
09:08:46 <tomsmeding> dll preloading in native applications is roughly comparable to modifying window.alert in JS I guess
09:08:51 <cheater> can't*
09:08:57 <cheater> yeah
09:09:01 <cheater> well it's more
09:09:05 <tomsmeding> in the debugger you mean?
09:09:07 <cheater> yes
09:09:11 <tomsmeding> maybe, but that's not from a user script :p
09:09:22 <cheater> dll preloading is more like being able to modify xhr
09:09:22 <tomsmeding> if you gdb a C program you can also change its variables :p
09:09:33 <tomsmeding> people don't generally call that "scripting the C program"
09:09:37 <cheater> yeah
09:09:41 <tomsmeding> I guess yes
09:10:12 <tomsmeding> you can also gdb a haskell program and do the same thing, it's just that the haskell heap structures and control flow are much less understandable from a simple C-oriented debugger
09:10:17 <tomsmeding> "much less" being an understatement
09:10:33 <cheater> yeah, haskell needs to get its own debugger honestly
09:10:43 <cheater> not having one is kind of carp
09:10:43 <tomsmeding> it's hard though
09:10:49 <cheater> it certainly is
09:10:54 <tomsmeding> if you want to pay someone to work on it :p
09:11:16 <tomsmeding> I agree though, a good debugger for haskell that understands its control flow and memory model would be amazing
09:11:26 mmhat joins (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de)
09:11:46 <cheater> to be honest we just need a basic piece of shit project, once that out, people will flock to make it better
09:11:52 <tomsmeding> it would be ghc-specific though, whereas C-oriented debuggers tend to work for C, C++, D, Rust, and maybe more low-level languages
09:11:53 <cheater> *is
09:12:02 mima joins (mmh@gateway/vpn/airvpn/mima)
09:13:10 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:15:46 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
09:16:02 chexum joins (~quassel@gateway/tor-sasl/chexum)
09:17:23 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
09:17:46 jpds joins (~jpds@gateway/tor-sasl/jpds)
09:23:23 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
09:24:19 cheater joins (~Username@user/cheater)
09:24:43 <[exa]> cheater: many people use haskell in order to be able to forget about the whole debugger business. :D
09:24:59 <cheater> i don't think that's true
09:25:22 <cheater> going from debuggers to print debugging is not an improvement
09:25:33 <[exa]> no, simply do not debug
09:25:43 <tomsmeding> [exa]: I mean, yes; like, haskell without a debugger is sometimes easier to debug than C with a debugger
09:25:44 <kuribas> tomsmeding: I am missing a debugger that let's me choose how to evaluate the expression tree.
09:25:53 <tomsmeding> but that doesn't mean that having a good debugger cannot make things even easier
09:25:58 <kuribas> tomsmeding: the debugger in ghci simply seems to assume you want to step through.
09:25:59 <tomsmeding> kuribas: _yes_
09:26:22 <tomsmeding> I think choosing in what order to evaluate an expression tree is impossible after you've gone to Core
09:26:35 <tomsmeding> because that probably already encodes some decisions w.r.t. order of evaluation
09:26:40 <tomsmeding> and if not Core, then STG or Cmm
09:26:49 <kuribas> tomsmeding: can you bypass core?
09:26:58 <kuribas> core is not strictly haskell.
09:27:02 <tomsmeding> I'm not sure at what point ghci bytecode is generated
09:27:02 <[exa]> cheater: there's 30+ years of research invested into being able to write the programs visibly correct without trying them, utilizing parametricity, types, correct modularization and composition, enforced locality, etc etc. And it pretty much works for me :]
09:27:11 luffy joins (~chenqisu1@183.217.201.23)
09:27:29 <tomsmeding> ghci bytecode is certainly after Core, but perhaps before STG
09:27:30 <kuribas> [exa]: yeah, plus occasionally Debug.Trace
09:27:59 <tomsmeding> kuribas: I'm most concerned about strictness analysis and the ensuing compilation of certain functions as call-by-value
09:28:07 Kaipei joins (~Kaiepi@142.68.249.28)
09:28:15 <tomsmeding> concerned as in, that will prevent choosing order of evaluation later on
09:28:20 <tomsmeding> kuribas: have you ever looked at ghc-vis
09:28:38 <tomsmeding> https://www.youtube.com/watch?v=I4lnCG18TaY
09:28:40 <kuribas> no
09:28:58 <tomsmeding> it's not quite what you're asking about, but you can interactively force heap thunks with it
09:29:09 <cheater> kuribas: that's just print debugging.
09:29:16 <kuribas> cheater: indeed!
09:29:57 <[exa]> cheater: gdb also just prints internal values, right?
09:30:43 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:30:49 <[exa]> wow ghc-vis is cool
09:30:55 <tomsmeding> yes ghc-vis is very cool
09:31:13 <tomsmeding> I've yet to use it on non-trivial examples though
09:34:19 × coot quits (~coot@213.134.176.158) (Quit: coot)
09:34:59 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
09:35:39 cheater1__ joins (~Username@user/cheater)
09:35:43 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds)
09:35:53 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
09:36:02 cheater1__ is now known as cheater
09:36:21 chomwitt joins (~chomwitt@2a02:587:dc15:ef00:5da3:5948:b4:5053)
09:39:34 BanUtama joins (~blake.rai@user/BanUtama)
09:44:09 × yvan-sraka quits (~yvan-srak@105.67.135.250) (Remote host closed the connection)
09:51:02 yvan-sraka joins (~yvan-srak@105.67.135.250)
09:55:22 × mbuf quits (~Shakthi@2401:4900:264d:2a18:1375:61b7:aab6:5d70) (Quit: Leaving)
09:56:40 ski joins (~ski@185.109.152.13)
09:58:52 × titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Quit: Leaving.)
10:05:52 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
10:07:15 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
10:08:25 × darchitect1 quits (~darchitec@2a00:23c6:3584:df01:2d0:4120:37b2:95) (Ping timeout: 244 seconds)
10:11:17 × xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
10:13:08 × monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Client closed)
10:16:01 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
10:16:42 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds)
10:17:50 jpds joins (~jpds@gateway/tor-sasl/jpds)
10:23:45 monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net)
10:26:58 aliosablack joins (~chomwitt@ppp-94-67-201-122.home.otenet.gr)
10:27:04 × chomwitt quits (~chomwitt@2a02:587:dc15:ef00:5da3:5948:b4:5053) (Ping timeout: 268 seconds)
10:29:29 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
10:34:49 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:37:28 alternateved joins (~user@staticline-31-183-149-36.toya.net.pl)
10:40:36 mastarija joins (~mastarija@2a05:4f46:e03:6000:18f8:fb5b:a843:cd18)
10:41:55 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
10:42:27 × hakutaku quits (~hakutaku@62.32.91.171) (Ping timeout: 268 seconds)
10:42:41 <mastarija> Is there something like "multiConst" that can take a constant value `v` and a function with n arguments e.g. `a -> b -> c -> ... -> v` and return a function of type `a -> b -> c -> ... -> v` that always return the initial value `v` no matter what the other arguments are?
10:43:23 hakutaku joins (~hakutaku@62.32.91.171)
10:43:57 <tomsmeding> mastarija: what if `a` is a function type? When would the list of arguments to ignore stop then?
10:44:38 <mastarija> at the return value?
10:44:55 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
10:45:14 <tomsmeding> if I write `multiConst id 1 2 3`, what would be the type of that expression
10:45:59 <mastarija> 1 is not of type (a -> a)
10:46:04 <mastarija> It wouldn't type check
10:46:29 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
10:46:37 <tomsmeding> oh wait I misread
10:47:01 <mastarija> basically, if you give me `id :: a -> a`, then I'd have to get `x -> y -> ... -> (a -> a )`
10:47:02 <tomsmeding> if I understand correctly, this "function with n arguments e.g. `a -> b -> c -> ... -> v` would be completely unused except for its type, right?
10:47:05 <mastarija> as the second argument
10:47:11 <mastarija> yes
10:47:15 titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de)
10:47:27 <tomsmeding> I think you can do this with overlapping instances, but it's a bit gross
10:47:35 × vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 252 seconds)
10:47:39 <mastarija> Yes...
10:47:44 <mastarija> Something like printf
10:47:56 <ski> "arity" is not a well-defined concept in Haskell, unless you take it to be 1 always
10:48:03 <mastarija> But I was hoping we have it already
10:48:10 <tomsmeding> the thing is that you want to "add another function arrow" to the type of multiConst only if the n'th return type of the function is not equal to `a`
10:48:20 <mastarija> yes
10:48:33 <tomsmeding> or, hmmm
10:48:43 <mastarija> no, not really when i think about it
10:49:51 × hakutaku quits (~hakutaku@62.32.91.171) (Ping timeout: 268 seconds)
10:50:27 BanUtama joins (~blake.rai@user/BanUtama)
10:50:30 <mastarija> basically, in `multiConst :: a -> ( x -> ... -> n -> a) -> x -> ... -> n -> a ` first `a` should be determined by last type var of my multiparameter function
10:50:56 <tomsmeding> "determined by" is not going to work
10:51:05 <tomsmeding> in any case you'll need to fix the types from the outside
10:51:20 <tomsmeding> because what is the "last type var" of a function with type `t -> t`
10:51:26 hakutaku joins (~hakutaku@62.32.91.171)
10:51:37 <tomsmeding> if t ~ b -> c, then it becomes (b -> c) -> b -> c, and the last type var is actually b
10:51:44 <tomsmeding> in a polymorphic context, you can't know
10:54:05 <mastarija> I must admit I don't see the issue here.
10:54:23 <mastarija> In my head it's still clear what's what.
10:54:52 <mastarija> If the function is of form t -> t, then my constant should be of type `t`
10:55:00 <tomsmeding> what is the type of `multiConst () id`?
10:55:22 Kaipei is now known as Kaiepi
10:56:01 <mastarija> multiConst :: () -> ( () -> () ) -> () -> ()
10:56:57 <mastarija> multiConst :: t -> ( t -> t ) -> ( t -> t )
10:57:01 <tomsmeding> how can you distinguish that from: multiConst :: () -> ((a -> ()) -> a -> ()) -> (a -> ()) -> a -> ()
10:57:23 <tomsmeding> `id :: (a -> ()) -> a -> ()` is also true
10:57:41 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
10:58:09 <tomsmeding> this is not going to work in general
10:58:55 <tomsmeding> I think even my overlapping instances madness is not going to work -- it would try to find () somewhere in the type of `id`, but it's never going to unambiguously find it
10:59:03 <tomsmeding> with emphasis on _unambiguously_
10:59:19 <mastarija> Again, I'm not sure what's the problem here. To my human brain it's pretty distinguishable. Unless you are talking about GHC capabilities
10:59:32 <tomsmeding> no I'm talking about the haskell type system
10:59:53 kritzefitz parts (~kritzefit@debian/kritzefitz) ()
11:00:02 <tomsmeding> `id :: (a -> ()) -> a -> ()` is more specific than `id :: a -> a`, and in haskell you can always put an expression with a more specific type in place of one with a more general type
11:00:07 kritzefitz joins (~kritzefit@debian/kritzefitz)
11:00:40 <tomsmeding> sometimes you can detect some shenanigans using overlapping instances (to try to match the more specific option, and if that fails, fall back to a more general option), but that doesn't work always
11:00:47 <mastarija> I mean, it's just that the arg 1 has to match with the return value of arg2
11:00:57 × ski quits (~ski@185.109.152.13) (Ping timeout: 268 seconds)
11:01:08 <mastarija> Functional dependencies?
11:01:13 <tomsmeding> it is "the return value" that is not well-defined in haskell
11:01:22 <tomsmeding> because a polymorphic return value might be instantiated to a functoin
11:01:51 <tomsmeding> I don't think functional dependencies help here, they are just an alternative formulation of type families
11:02:09 <tomsmeding> (open type families, at that)
11:02:32 <mastarija> I kind of understood them as a way to distinctly determine x by y or what ever
11:02:44 <mastarija> Or rather x is determined by y
11:02:55 <mastarija> That kind of reasoning seems helpful here.
11:03:48 <tomsmeding> which is precisely what a type family can give you
11:04:04 <mastarija> Maybe if I talk about my usecase it will be more productive :D
11:04:18 <tomsmeding> you might hope to be able to define a type family `ReturnType` such that you can write `multiConst :: ReturnType f ~ a => a -> f -> f`
11:04:26 <tomsmeding> but I don't think that's going to work (I tried it but got stuck)
11:04:47 <mastarija> Basically, I have some functions of form (Maybe Something) -> y -> ... -> m v
11:06:08 xff0x_ joins (~xff0x@2405:6580:b080:900:9f22:be61:9bf8:3a54)
11:06:16 <mastarija> Now, I want to make a helper which in case (Maybe Something) is Nothing, I'd like to throw an error
11:06:44 <tomsmeding> in that monad m?
11:06:48 <mastarija> Yes
11:06:54 <mastarija> One in which I have to throw an error
11:07:17 <mastarija> And I'd otherwise apply a Something to the function
11:07:35 <mastarija> Functions are in form of `Something -> x -> y ->...-> m v`
11:07:41 <mastarija> Rather than `Maybe Something`
11:08:19 <mastarija> But I have `Maybe Something` and would like to return `x -> y -> ... -> m v` if I have Something
11:08:38 <tomsmeding> can any of the x, y, ... types be m values?
11:08:51 <mastarija> or `x -> y -> ... -> m v` where `m v := throwError MyError`
11:08:59 <mastarija> In case there is no Something
11:09:35 <mastarija> tomsmeding, no
11:09:42 <mastarija> (usually :D)
11:09:56 <mastarija> But I'm ok with something that is halfway there
11:12:16 <carbolymer> is this efficient? did I overcomplicate it? https://bpa.st/TOAQ
11:12:42 <tomsmeding> mastarija: ah no, I asked the wrong question; the right question is, can m ever be the reader monad (r->)
11:13:03 <tomsmeding> printf detects the end of its argument sequence by needing to return an IO a instead of an r->a
11:13:31 <carbolymer> (I was also considering foldl' + DList - not sure which would be more efficient for strict map)
11:14:06 <mastarija> tomsmeding, I do have a reader in the stack, but it's a newtype, not pure (r->)
11:14:39 <tomsmeding> carbolymer: concatMap (\(k,vs) -> map (k,) vs) . assocs
11:14:57 <tomsmeding> mastarija: ah that's okay
11:16:53 <carbolymer> tomsmeding: oh shit, that's better, thanks
11:18:33 <tomsmeding> % :set -XMultiParamTypeClasses -XFlexibleInstances
11:18:33 <yahb2> <no output>
11:18:36 <tomsmeding> % class MultiConst a f where multiConst :: IO a -> f -> f
11:18:36 <tomsmeding> % instance MultiConst a (IO a) where multiConst = const
11:18:36 <tomsmeding> % instance MultiConst a f => MultiConst a (b -> f) where multiConst v f = \x -> multiConst v (f x)
11:18:36 <yahb2> <no output>
11:18:37 <yahb2> <no output>
11:18:38 <yahb2> <no output>
11:18:53 <tomsmeding> % :t multiConst (return 10) (\x y z -> print (x, y, z) >> return 42)
11:18:54 <yahb2> multiConst (return 10) (\x y z -> print (x, y, z) >> return 42) ; :: forall {a1} {b1} {a2} {b2} {c}. ; (MultiConst a1 (IO b1), Show a2, Show b2, Show c, Num a1, ; Num b1) => ; a2 ...
11:19:03 <tomsmeding> % :t multiConst (return 10) (\x y z -> print (x::Bool, y::Char, z::Int) >> return 42)
11:19:03 <yahb2> multiConst (return 10) (\x y z -> print (x::Bool, y::Char, z::Int) >> return 42) ; :: forall {a} {b}. ; (MultiConst a (IO b), Num a, Num b) => ; Bool -> Char -> Int -> IO b
11:19:25 <tomsmeding> mastarija: replace IO with your own monad
11:19:26 monadplus[m] joins (~monadplus@2001:470:69fc:105::2:5fa2)
11:19:29 × alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds)
11:19:32 <tomsmeding> it works because IO is a concrete type here
11:20:12 × tubogram44 quits (~tubogram@user/tubogram) (Quit: Ping timeout (120 seconds))
11:20:28 <tomsmeding> if you want it to be "anything else than a function", you could replace the 'IO' with 'm' in the first instance and give the first instance an {-# OVERLAPPING #-} pragma
11:20:59 <tomsmeding> the missing piece of information was that the return type has a recognisable shape :)
11:21:04 tubogram44 joins (~tubogram@user/tubogram)
11:21:08 <tomsmeding> that is unambiguously distinct from r->
11:22:21 × cosimone quits (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection)
11:22:25 <mastarija> Yes. I see, first instance marks the end
11:22:32 <mastarija> And second recurses
11:22:36 <tomsmeding> Yes
11:24:09 <mastarija> Thanks
11:27:37 yaroot_ joins (~yaroot@p2550227-ipngn11101souka.saitama.ocn.ne.jp)
11:27:47 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
11:28:45 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
11:29:01 × yaroot quits (~yaroot@p2543146-ipngn11101souka.saitama.ocn.ne.jp) (Ping timeout: 252 seconds)
11:29:01 yaroot_ is now known as yaroot
11:29:04 × monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
11:30:14 nilradical joins (~nilradica@user/naso)
11:34:18 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
11:34:38 nilradical joins (~nilradica@user/naso)
11:35:06 zeenk joins (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
11:40:57 matthewmosior joins (~matthewmo@173.170.253.91)
11:42:12 noteness_ joins (~noteness@user/noteness)
11:42:58 × noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds)
11:49:01 alp_ joins (~alp@user/alp)
11:53:31 × titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Quit: Leaving.)
11:54:41 × califax quits (~califax@user/califx) (Ping timeout: 268 seconds)
11:54:46 califax_ joins (~califax@user/califx)
11:55:15 × mastarija quits (~mastarija@2a05:4f46:e03:6000:18f8:fb5b:a843:cd18) (Ping timeout: 268 seconds)
11:55:57 califax_ is now known as califax
11:57:45 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:58:03 califax joins (~califax@user/califx)
12:00:15 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds)
12:01:22 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
12:02:51 vglfr joins (~vglfr@37.73.110.255)
12:05:29 cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it)
12:07:35 × mc47 quits (~mc47@xmonad/TheMC47) (Ping timeout: 268 seconds)
12:10:26 kavvadias joins (~kavvadias@2001:9e8:6331:f600:aebb:e42c:4fd0:32c7)
12:10:59 × elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 255 seconds)
12:13:23 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
12:13:45 × vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 252 seconds)
12:14:01 stiell joins (~stiell@gateway/tor-sasl/stiell)
12:16:15 mncheck joins (~mncheck@193.224.205.254)
12:17:32 Milan joins (~Milan@46.245.72.105)
12:17:34 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
12:19:55 × mima quits (mmh@gateway/vpn/airvpn/mima) (Ping timeout: 268 seconds)
12:20:24 <Milan> Hi,would please check whether my understanding of "bound variable " is right or not?  xs aren't same ,we can only consider xs same only within a certain abstraction?
12:21:42 × frost quits (~frost@user/frost) (Quit: Client closed)
12:21:44 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 268 seconds)
12:22:21 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
12:24:10 <Milan> how ever one thing is hard to understand for me :if we have one abstraction as an argument which contains an X ,what does this inner X Bound  to ?
12:25:15 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
12:25:19 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
12:25:28 × vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds)
12:26:09 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
12:28:50 × kavvadias quits (~kavvadias@2001:9e8:6331:f600:aebb:e42c:4fd0:32c7) (Ping timeout: 252 seconds)
12:29:31 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:30:08 × nilradical quits (~nilradica@user/naso) (Remote host closed the connection)
12:30:54 nilradical joins (~nilradica@user/naso)
12:31:50 <nilradical> in the readme for relude -- https://hackage.haskell.org/package/relude -- what does "show is polymorphic over the return type." mean ?
12:35:06 × yvan-sraka quits (~yvan-srak@105.67.135.250) (Remote host closed the connection)
12:35:18 <kritzefitz> nilradical: It means that `show` can not only returns `String`s, but anything that `IsString`.
12:35:55 <nilradical> i see, thank kritzefitz
12:40:54 monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net)
12:44:16 × Milan quits (~Milan@46.245.72.105) (Quit: Client closed)
12:44:17 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
12:46:09 azimut joins (~azimut@gateway/tor-sasl/azimut)
12:47:03 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 268 seconds)
12:47:07 × alp_ quits (~alp@user/alp) (Ping timeout: 252 seconds)
12:51:00 matthewmosior joins (~matthewmo@173.170.253.91)
12:52:37 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
12:53:05 matthewmosior joins (~matthewmo@173.170.253.91)
12:53:39 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
12:53:46 × MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 244 seconds)
12:54:06 stiell joins (~stiell@gateway/tor-sasl/stiell)
12:56:02 × kuribas quits (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
12:56:13 titibandit joins (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47)
12:57:47 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
13:02:31 × aliosablack quits (~chomwitt@ppp-94-67-201-122.home.otenet.gr) (Ping timeout: 252 seconds)
13:03:40 matthewmosior joins (~matthewmo@173.170.253.91)
13:04:05 × acidjnk_new quits (~acidjnk@p200300d6e70586665c86bfb0acf03c2b.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
13:04:29 × off^ quits (~off@206.85.120.17) (Remote host closed the connection)
13:05:32 mc47 joins (~mc47@xmonad/TheMC47)
13:05:36 × Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection)
13:06:50 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
13:07:44 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:07:59 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
13:08:06 matthewmosior joins (~matthewmo@173.170.253.91)
13:09:16 Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net)
13:09:30 jakalx parts (~jakalx@base.jakalx.net) ()
13:10:29 jakalx joins (~jakalx@base.jakalx.net)
13:11:05 × nilradical quits (~nilradica@user/naso) ()
13:11:44 frost joins (~frost@user/frost)
13:11:53 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
13:15:06 Major_Biscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl)
13:16:39 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 268 seconds)
13:16:53 pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02)
13:17:16 × pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Remote host closed the connection)
13:18:34 nilradical joins (~nilradica@user/naso)
13:18:58 byorgey_ is now known as byorgey
13:19:02 × nilradical quits (~nilradica@user/naso) (Client Quit)
13:19:19 nilradical joins (~nilradica@user/naso)
13:20:35 pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02)
13:22:00 lisk1n is now known as liskin
13:24:15 × pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Client Quit)
13:24:52 Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
13:25:32 pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02)
13:27:21 zxx7529 joins (~Thunderbi@user/zxx7529)
13:29:15 Midjak joins (~Midjak@82.66.147.146)
13:30:13 × titibandit quits (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Ping timeout: 268 seconds)
13:31:18 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
13:31:23 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
13:31:29 × Major_Biscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 252 seconds)
13:31:55 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
13:35:10 Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e)
13:36:02 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
13:36:13 × Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Client Quit)
13:36:31 × pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Quit: pmarg)
13:37:54 pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02)
13:39:26 <zzz> is it normal with gloss to have trouble getting keypress events register right? i'm getting duplicates and even triggers "on key up"
13:39:55 × luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 252 seconds)
13:40:02 matthewmosior joins (~matthewmo@173.170.253.91)
13:40:31 <tomsmeding> O.o
13:41:26 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
13:41:59 × noteness_ quits (~noteness@user/noteness) (Ping timeout: 268 seconds)
13:42:52 noteness joins (~noteness@user/noteness)
13:43:27 MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl)
13:43:30 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Quit: o/)
13:43:36 titibandit joins (~titibandi@sunp.ient.rwth-aachen.de)
13:44:27 matthewmosior joins (~matthewmo@173.170.253.91)
13:46:31 Sciencentistguy joins (~sciencent@hacksoc/ordinary-member)
13:46:53 × finsternis quits (~X@23.226.237.192) (Read error: Connection reset by peer)
13:47:08 mima joins (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de)
13:47:17 <zzz> no?
13:48:05 <Guest45> I've never seen that zzz
13:48:27 <zzz> :(
13:48:36 <tomsmeding> yeah that sounds highly suspect, unless your keyboard is malfunctioning :p
13:49:31 <zzz> tried and tested different keyboards
13:49:48 <tomsmeding> zzz: which event exactly are you getting multiple times per keypress?
13:50:08 <tomsmeding> also, are you sure it's not automatic key repeat?
13:50:18 <tomsmeding> (like, holding 'a' will produce lots of 'a's)
13:50:18 <Guest45> How can I branch on the presence of a typeclass instance? The examples of avoiding overlapping instances here https://wiki.haskell.org/GHC/AdvancedOverlap and here https://kseo.github.io/tags/closed%20type%20families.html are both concerned with branching based on types, but I'd like to branch based on whether an instance exists because if it does
13:50:19 <Guest45> I would like to use the instance's features.
13:50:31 <tomsmeding> you cannot
13:50:36 <tomsmeding> everybody seems to want it :p
13:51:32 <tomsmeding> Guest45: it would need to be a runtime check, because if you're in a library, someone who indirectly uses your library might define an instance -- so statically you cannot know
13:51:41 <tomsmeding> and at runtime, type information is erased
13:51:59 <tomsmeding> in TemplateHaskell you can check for the existence of instances, but that's compile-time metaprogramming
13:52:32 Guest3727 joins (~Guest37@31.129.248.21)
13:52:49 <geekosaur> https://hackage.haskell.org/package/ifcxt exists, with limitations
13:52:52 <Guest45> tomsmeding, well I'd be fine doing this with a closed type family, but the syntax isn't even supported to put a constraint on the LHS or RHS of a typeclass instance body.
13:53:15 <tomsmeding> it's also unclear what the semantics would be; what if two different users of your module both define an instance for the type in question, but those instances are different?
13:53:48 × Guest3727 quits (~Guest37@31.129.248.21) (Client Quit)
13:53:52 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
13:54:17 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:55:05 coot joins (~coot@213.134.176.158)
13:55:16 <Guest45> I think I'm describing a slightly different problem... Maybe I've misunderstood and this is the same as the problem you're describing. Here's a paste: https://paste.tomsmeding.com/kIKovVD6
13:55:47 <tomsmeding> in particular, ifcxt only gets the instances that are already defined at the point where you put mkIfCxtInstances
13:55:58 <Guest45> I'll take a look at ifctx
13:56:14 <tomsmeding> Guest45: see the readme here, the haddocks are unavailable https://github.com/mikeizbicki/ifcxt
13:56:56 <tomsmeding> Guest45: hm, that's indeed a bit different than the usual question
13:57:44 × Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed)
13:57:55 Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net)
13:58:13 mncheckm joins (~mncheck@193.224.205.254)
13:58:27 <tomsmeding> still, same issues: if you write a function polymorphic in `a`, then some later user in another package could instantiate that `a` to a type you've never seen before
13:58:29 <Guest45> Ifctx seems like it might be usable, because I could combine the two instances into one.
13:59:12 kuribas joins (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be)
13:59:17 <geekosaur> didn't they say closed type family though? that would prevent added instances
13:59:24 <Guest45> tomsmeding All of the classes and intstances are going to be hidden in the library I'm writing. They're not intended to be comen.
13:59:33 <Guest45> *not intended to be open
13:59:34 <tomsmeding> geekosaur: added instances of the _class_, not the type family
14:00:11 <tomsmeding> Guest45: ah, then it might work -- but you need all of the potentially-used instances (transitively) in scope at the point where you put mkIfCxtInstances ''MyClass
14:00:46 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:01:02 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 268 seconds)
14:01:06 zanyan joins (~zanyan@2a02:6b64:f194:0:1d3f:ed4e:5027:57f2)
14:01:09 califax joins (~califax@user/califx)
14:01:46 <zanyan> hihi, just want to ask a simple question about how the sqrt function works
14:02:20 × frost quits (~frost@user/frost) (Ping timeout: 252 seconds)
14:02:47 <geekosaur> % :i sqrt
14:02:47 <yahb2> type Floating :: * -> Constraint ; class Fractional a => Floating a where ; ... ; sqrt :: a -> a ; ... ; -- Defined in ‘GHC.Float’
14:03:15 <zanyan> https://pastebin.com/xvASWmZ9
14:03:15 × coot quits (~coot@213.134.176.158) (Remote host closed the connection)
14:03:27 <geekosaur> so it depends on the type, which must be an instance of Floating. (if you want integer sqrt you must get it from somewhere else)
14:03:42 <zanyan> oh, right right
14:03:53 <geekosaur> so you want fromIntegral on the parameters
14:03:59 <Guest45> I'm not sure i can use ifctx directly; I'd need a type-level branch as well as a term level branch. I'll try looking at the technique they used and see if I can build what I need.
14:04:04 <geekosaur> and probably ** in place of ^
14:04:11 <zanyan> gotchu, thanks!
14:04:15 × noteness quits (~noteness@user/noteness) (Write error: Connection reset by peer)
14:04:15 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:04:31 noteness joins (~noteness@user/noteness)
14:04:37 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:04:41 <geekosaur> mm, actually ^ should be fine
14:04:44 <geekosaur> :t (^)
14:04:45 <lambdabot> (Integral b, Num a) => a -> b -> a
14:04:46 <zanyan> oh okay
14:04:50 <geekosaur> right
14:04:59 <Guest45> Or maybe the type level branch can populate that flag for me somehow; seem dubious (type to value to type ...)
14:05:13 <geekosaur> singletons does that thing, but rip your sanity
14:05:29 <tomsmeding> Guest45: yeah I feel you might be able to add extra information to the IfCxt class to accomplish what you need
14:05:35 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
14:05:53 <Guest45> I was hoping to avoid going via the value level, but it might be unavoidable.
14:07:08 zebrag joins (~chris@user/zebrag)
14:08:25 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
14:09:04 × mima quits (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) (Ping timeout: 268 seconds)
14:09:51 Clint_ is now known as Clint
14:12:53 × aweinstock quits (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 268 seconds)
14:13:11 ec joins (~ec@gateway/tor-sasl/ec)
14:13:42 matthewmosior joins (~matthewmo@173.170.253.91)
14:14:45 × qhong quits (~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 252 seconds)
14:15:42 <zanyan> okay I managed to do it Geekosaur, thanks!
14:16:40 <zanyan> I forgot that uhhhhh Haskell has left associative functions and so I applied "fromIntegral" like the way you would in an imperative programming language
14:17:58 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
14:18:06 mastarija joins (~mastarija@2a05:4f46:e03:6000:c421:108c:b5ba:309e)
14:19:16 × pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Quit: pmarg)
14:20:14 aweinstock joins (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com)
14:20:32 pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02)
14:20:46 aliosablack joins (~chomwitt@2a02:587:dc15:5e00:4013:2028:e3f3:d52d)
14:21:51 × kuribas quits (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
14:22:41 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 268 seconds)
14:24:08 ec joins (~ec@gateway/tor-sasl/ec)
14:25:47 acidjnk_new joins (~acidjnk@p200300d6e705866645103b1bac763c69.dip0.t-ipconnect.de)
14:27:39 <nilradical> what actually happens when i put `default (Text)` at the top of my file
14:27:46 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
14:27:55 <nilradical> using OverloadedStrings
14:28:11 ec joins (~ec@gateway/tor-sasl/ec)
14:30:37 <nilradical> does it mean whenever i have String in that file, it is secretly Text?
14:31:10 <tomsmeding> nilradical: https://downloads.haskell.org/~ghc/latest/docs/users_guide/exts/overloaded_strings.html#extension-OverloadedStrings
14:31:20 cfricke joins (~cfricke@user/cfricke)
14:31:25 <tomsmeding> search for "Haskell's defaulting mechanism"
14:32:00 <tomsmeding> (normally default declarations are for Num only; OverloadedStrings extends this to IsString)
14:32:32 <albet70> there's Functor for map, Foldable for reduce, is there something for filter?
14:33:25 matthewmosior joins (~matthewmo@173.170.253.91)
14:33:30 <nilradical> tomsmeding: thanks
14:34:10 <lortabac> @hackage witherable -- albet70
14:34:10 <lambdabot> https://hackage.haskell.org/package/witherable -- albet70
14:37:09 mima joins (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de)
14:37:26 × mastarija quits (~mastarija@2a05:4f46:e03:6000:c421:108c:b5ba:309e) (Ping timeout: 268 seconds)
14:39:42 <nilradical> is there a printf (like Text.Printf) for Text?
14:39:43 × aliosablack quits (~chomwitt@2a02:587:dc15:5e00:4013:2028:e3f3:d52d) (Remote host closed the connection)
14:40:02 aliosablack joins (~chomwitt@2a02:587:dc15:5e00:ea1e:e5c0:de8:53e2)
14:41:29 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
14:41:56 <geekosaur> https://hackage.haskell.org/package/vformat-0.14.1.0/docs/Text-Format.html#v:fromString I was looking at the other day
14:42:20 <geekosaur> (ignore the fromString part, OverloadedStrings does that for you)
14:42:55 <nilradical> geekosaur: thanks
14:44:46 × Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed)
14:45:23 Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net)
14:45:36 shriekingnoise joins (~shrieking@186.137.167.202)
14:45:38 × zanyan quits (~zanyan@2a02:6b64:f194:0:1d3f:ed4e:5027:57f2) (Quit: Ping timeout (120 seconds))
14:45:55 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
14:48:14 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
14:48:42 noteness joins (~noteness@user/noteness)
14:49:18 <Guest45> As far as I can tell, the trick that IfCtx uses relies on the term level call to `ifCtx`. I'm contemplating going back from terms to types via some boilerplate minimal singletons stuff. I need to think a bit more though, because there ought to be a way to do the if at the type level.
14:49:48 × In0perable quits (~PLAYER_1@fancydata.science) (Quit: All your buffer are belong to us!)
14:51:02 × dfg quits (~dfg@user/dfg) (Ping timeout: 244 seconds)
14:51:35 × mud quits (~mud@user/kadoban) (Ping timeout: 268 seconds)
14:52:20 `2jt joins (~jtomas@56.red-88-17-82.dynamicip.rima-tde.net)
14:53:09 dfg joins (~dfg@dfg.rocks)
14:53:09 × dfg quits (~dfg@dfg.rocks) (Changing host)
14:53:09 dfg joins (~dfg@user/dfg)
14:53:25 Guest26 joins (~Guest26@cpc151201-smal19-2-0-cust133.19-1.cable.virginm.net)
14:53:37 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds)
14:54:13 × alternateved quits (~user@staticline-31-183-149-36.toya.net.pl) (Remote host closed the connection)
14:56:57 BanUtama joins (~blake.rai@user/BanUtama)
14:57:53 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
14:57:56 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
14:59:19 EsoAlgo joins (~EsoAlgo@129.146.136.145)
15:00:14 kuribas joins (~user@ptr-17d51epg7uxmm3fpjg8.18120a2.ip6.access.telenet.be)
15:01:02 × monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Client closed)
15:01:05 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
15:01:06 vglfr joins (~vglfr@37.73.110.255)
15:01:25 jpds joins (~jpds@gateway/tor-sasl/jpds)
15:02:11 × Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed)
15:02:24 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds)
15:02:31 Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net)
15:03:53 × `2jt quits (~jtomas@56.red-88-17-82.dynamicip.rima-tde.net) (Remote host closed the connection)
15:04:37 Inoperable joins (~PLAYER_1@fancydata.science)
15:04:41 × GoldsteinQ quits (~goldstein@goldstein.rs) (Ping timeout: 268 seconds)
15:04:50 gmg joins (~user@user/gehmehgeh)
15:07:34 × vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 244 seconds)
15:07:39 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
15:07:57 monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net)
15:08:13 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:09:28 matthewmosior joins (~matthewmo@173.170.253.91)
15:10:58 alp_ joins (~alp@user/alp)
15:11:42 vglfr joins (~vglfr@37.73.110.255)
15:13:13 BanUtama joins (~blake.rai@user/BanUtama)
15:13:51 elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
15:14:15 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:f6c8:3b8a:6258:a564) (Quit: WeeChat 2.8)
15:16:17 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
15:17:41 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
15:21:59 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
15:22:13 <nilradical> i have a record type `M` with a field `unity`. using OverloadedRecordDot, if i have `a :: M` and do `a.unit` i get `parse error on input ‘unit’` . If i rename it to 'unity' there is no error . ?
15:22:14 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
15:22:27 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
15:22:43 <nilradical> typo... the 1st `unity` should be `unit`
15:25:59 × Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed)
15:34:08 BanUtama joins (~blake.rai@user/BanUtama)
15:35:47 × vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 252 seconds)
15:37:05 × Inst quits (~Inst@2601:6c4:4080:3f80:258f:9da7:8d32:3e0c) (Ping timeout: 255 seconds)
15:37:22 × hakutaku quits (~hakutaku@62.32.91.171) (Quit: WeeChat 3.6)
15:39:43 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
15:40:07 × acidjnk_new quits (~acidjnk@p200300d6e705866645103b1bac763c69.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
15:40:33 × causal quits (~user@50.35.83.177) (Quit: WeeChat 3.6)
15:41:09 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:44:56 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
15:45:46 cheater joins (~Username@user/cheater)
15:47:18 BanUtama joins (~blake.rai@user/BanUtama)
15:50:52 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
15:51:11 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
15:52:01 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
15:52:33 × titibandit quits (~titibandi@sunp.ient.rwth-aachen.de) (Remote host closed the connection)
15:54:51 × fserucas quits (~fserucas@46.50.4.9) (Ping timeout: 252 seconds)
15:56:26 slack1256 joins (~slack1256@wsip-184-177-0-226.no.no.cox.net)
15:56:52 BanUtama joins (~blake.rai@user/BanUtama)
15:57:11 Milan joins (~Milan@46.245.72.105)
15:57:34 × Milan quits (~Milan@46.245.72.105) (Client Quit)
16:02:25 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
16:02:53 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:03:07 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
16:03:31 Guest94 joins (~Guest94@pool-100-40-26-64.prvdri.fios.verizon.net)
16:03:48 × Guest26 quits (~Guest26@cpc151201-smal19-2-0-cust133.19-1.cable.virginm.net) (Quit: Client closed)
16:04:21 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.6)
16:05:19 × Guest94 quits (~Guest94@pool-100-40-26-64.prvdri.fios.verizon.net) (Client Quit)
16:05:32 <slack1256> Hi, I want to use native haskell data types for configuration. On the first iteration I just used the Read instances. But I want to support comments and descriptions, any libraries I should take a look at?
16:06:18 <slack1256> I am not interested currently on schema declarations or dhall for config, I will keep it simple and use the native haskell representation for now.
16:06:22 qhong joins (~qhong@rescomp-21-400677.stanford.edu)
16:06:28 <geekosaur> dyre?
16:06:46 <geekosaur> (was going to suggest dhall then you said no)
16:08:58 BanUtama joins (~blake.rai@user/BanUtama)
16:11:07 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:11:11 <slack1256> geekosaur: I thought dyre was concerned with automatic recompilation, but seems to do just what I need.
16:11:17 <slack1256> I will go with it for now.
16:12:05 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
16:12:07 <geekosaur[m]> The problem with wanting to do your configuration in Haskell is that either you do it the Dyre way or you need to link all of ghc into your program, which seems a bit heavy for configuration
16:12:24 × alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds)
16:12:40 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
16:14:15 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
16:17:28 vysn joins (~vysn@user/vysn)
16:18:09 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
16:18:49 cheater joins (~Username@user/cheater)
16:23:52 × nilradical quits (~nilradica@user/naso) ()
16:26:36 matthewmosior joins (~matthewmo@173.170.253.91)
16:29:03 titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de)
16:30:32 Milan joins (~Milan@46.245.72.105)
16:30:44 × Milan quits (~Milan@46.245.72.105) (Client Quit)
16:30:58 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:31:00 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
16:34:00 Tuplanolla joins (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi)
16:35:13 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
16:35:31 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
16:39:59 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
16:40:28 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
16:48:19 ski joins (~ski@217.116.228.14)
16:52:18 <kuribas> slack1256: you can use higher kinded records: https://chrispenner.ca/posts/hkd-options
16:53:46 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 268 seconds)
16:57:11 × benin0 quits (~benin@183.82.204.69) (Ping timeout: 252 seconds)
16:57:48 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
16:58:07 raym joins (~raym@user/raym)
16:59:54 benin0 joins (~benin@183.82.30.53)
16:59:59 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
17:00:26 BanUtama joins (~blake.rai@user/BanUtama)
17:00:38 × ridcully quits (~ridcully@p57b5218b.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:02:05 stiell joins (~stiell@gateway/tor-sasl/stiell)
17:03:03 × ski quits (~ski@217.116.228.14) (Ping timeout: 252 seconds)
17:05:25 ridcully joins (~ridcully@pd951fa32.dip0.t-ipconnect.de)
17:05:40 × monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
17:07:15 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
17:08:11 × benin0 quits (~benin@183.82.30.53) (Ping timeout: 252 seconds)
17:08:24 BanUtama joins (~blake.rai@user/BanUtama)
17:08:40 benin0 joins (~benin@183.82.176.176)
17:11:38 econo joins (uid147250@user/econo)
17:13:27 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
17:15:21 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
17:15:46 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
17:16:37 × benin0 quits (~benin@183.82.176.176) (Ping timeout: 252 seconds)
17:16:57 BanUtama joins (~blake.rai@user/BanUtama)
17:17:30 cyanide3dinner joins (~cyanide4d@2402:e280:2149:513:931b:41cb:2a7e:791d)
17:19:24 mud joins (~mud@user/kadoban)
17:22:03 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
17:23:15 × zxx7529 quits (~Thunderbi@user/zxx7529) (Quit: zxx7529)
17:23:17 coot joins (~coot@213.134.176.158)
17:23:22 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:27:02 kenran joins (~kenran@200116b82b0c9300327c25528a273147.dip.versatel-1u1.de)
17:28:37 acidjnk_new joins (~acidjnk@p200300d6e705866691d881defe97b1cb.dip0.t-ipconnect.de)
17:30:06 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
17:34:25 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:36:03 codolio is now known as dolio
17:37:22 ski joins (~ski@217.116.228.14)
17:37:36 BanUtama joins (~blake.rai@user/BanUtama)
17:39:58 × kenran quits (~kenran@200116b82b0c9300327c25528a273147.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
17:42:38 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 255 seconds)
17:43:59 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
17:44:32 kenran joins (~kenran@200116b82b0c93001ede1376b194f04b.dip.versatel-1u1.de)
17:46:35 × kenran quits (~kenran@200116b82b0c93001ede1376b194f04b.dip.versatel-1u1.de) (Client Quit)
17:46:41 × ski quits (~ski@217.116.228.14) (Ping timeout: 255 seconds)
17:52:33 fef joins (~thedawn@user/thedawn)
17:52:38 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
17:52:55 × pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Ping timeout: 268 seconds)
17:53:22 noteness joins (~noteness@user/noteness)
17:55:07 ski joins (~ski@217.116.228.14)
17:57:39 matthewmosior joins (~matthewmo@173.170.253.91)
17:59:30 neceve joins (~quassel@2.26.93.14)
18:01:49 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
18:01:55 matthewmosior joins (~matthewmo@173.170.253.91)
18:02:07 BanUtama joins (~blake.rai@user/BanUtama)
18:03:45 × raym quits (~raym@user/raym) (Remote host closed the connection)
18:07:43 × ski quits (~ski@217.116.228.14) (Ping timeout: 268 seconds)
18:08:52 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
18:09:04 raym joins (~raym@user/raym)
18:10:18 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
18:10:19 Lord_of_Life_ is now known as Lord_of_Life
18:12:22 ski joins (~ski@217.116.228.14)
18:15:53 × irfan quits (~irfan@user/irfan) (Quit: leaving)
18:18:58 mima parts (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) ()
18:23:45 × ski quits (~ski@217.116.228.14) (Ping timeout: 268 seconds)
18:27:06 ski joins (~ski@217.116.228.14)
18:27:53 × kuribas quits (~user@ptr-17d51epg7uxmm3fpjg8.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
18:31:08 × raym quits (~raym@user/raym) (Ping timeout: 244 seconds)
18:33:20 raym joins (~raym@user/raym)
18:36:56 × ski quits (~ski@217.116.228.14) (Remote host closed the connection)
18:38:54 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:40:44 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
18:42:31 ski joins (~ski@217.116.228.14)
18:43:38 seriously joins (~seriously@2001:1c06:1b1d:6f00:efd2:b7b6:20af:5f73)
18:47:11 × neceve quits (~quassel@2.26.93.14) (Ping timeout: 268 seconds)
18:49:36 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
18:53:54 × ski quits (~ski@217.116.228.14) (Remote host closed the connection)
18:54:04 pmarg joins (~pmarg@224.80-203-5.customer.lyse.net)
18:58:20 matthewmosior joins (~matthewmo@173.170.253.91)
18:58:54 × MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 268 seconds)
18:59:24 Hecate_ is now known as Hecate
19:00:48 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
19:01:27 <seriously> hello, is anyone familiar with this HW assignment from Yorgeys CIS 194? https://www.cis.upenn.edu/~cis1940/spring13/hw/05-type-classes.pdf  . Im stuck on the last problem.
19:02:42 <seriously> Specifically, this explanation: https://paste.tomsmeding.com/zYVyJ8YM
19:03:18 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:03:22 <seriously> A gentle push in the right direction would be appreciated
19:04:41 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
19:05:31 <geekosaur> at least one person in here is familiar with it 🙂 but what difficulty are you having with the explanation?
19:06:01 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Quit: WeeChat 3.5)
19:06:03 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
19:06:10 matthewmosior joins (~matthewmo@173.170.253.91)
19:06:59 × ccntrq quits (~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection)
19:07:29 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
19:08:15 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
19:08:33 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
19:08:58 <seriously> "these same functions can be inter-
19:08:58 <seriously> preted as expressions"
19:09:13 ski joins (~ski@217.116.228.14)
19:09:42 <seriously> I dont understand how a function that takes a map and returns maybe integer would look as an expression
19:10:05 <seriously> (M.Map String Integer -> Maybe Integer)
19:10:37 × slack1256 quits (~slack1256@wsip-184-177-0-226.no.no.cox.net) (Ping timeout: 268 seconds)
19:11:26 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds)
19:12:35 <geekosaur> this would make `flip M.lookup "varName"` an expression, whoe value is `Nothing` if `varName` doesn't exist in the Map or `Just x` if it exists with value `x`
19:12:45 <geekosaur> *whose value
19:13:17 <geekosaur> remember that functions are themselves prefectly good values in Haskell
19:13:42 <seriously> And also throughout the problem (excercise 6) the instances of type class Expr make total sense... Instance Expr Integers, Expr Bools, etc... but how the heck does an Expr instance of a function as a type make any sense
19:13:43 o-90 joins (~o-90@gateway/tor-sasl/o-90)
19:14:01 × Kaiepi quits (~Kaiepi@142.68.249.28) (Read error: Connection reset by peer)
19:14:31 <geekosaur> and that partial application of functions makes them quite useful as values
19:14:47 Kaiepi joins (~Kaiepi@142.68.249.28)
19:15:52 <seriously> to clarify my last point: Expr (M.Map String Integer -> Maybe Integer)
19:15:56 <geekosaur> yes
19:15:58 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
19:16:01 <geekosaur> reread what I just said
19:16:08 <seriously> ok
19:17:06 × ski quits (~ski@217.116.228.14) (Remote host closed the connection)
19:17:17 <geekosaur> instead of `flip M.lookup "varName"` it could be `("varName"?!)`; see https://downloads.haskell.org/ghc/9.2.3/docs/html/libraries/containers-0.6.5.1/Data-Map-Lazy.html#v:-33--63-
19:17:39 <geekosaur> oh sorry that's reversed. `("varName"!?)`
19:17:44 <tomsmeding> perhaps also helpful: try to write down the types of all the methods of Expr and HasVars when specialised to those particular function types, and then think separately about how you could sensibly implement those specialised types
19:17:53 ski joins (~ski@217.116.228.14)
19:18:16 × o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
19:18:27 <ski> @type M.lookup "stringly" :: M.Map String Integer -> Maybe Integer -- seriously
19:18:28 <lambdabot> M.Map String Integer -> Maybe Integer
19:20:29 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
19:20:46 BanUtama joins (~blake.rai@user/BanUtama)
19:22:08 Topsi joins (~Topsi@dyndsl-095-033-091-248.ewe-ip-backbone.de)
19:25:07 <seriously> still here just still working through it
19:25:23 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds)
19:27:34 × hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Quit: Konversation terminated!)
19:28:28 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
19:29:40 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
19:30:28 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
19:32:51 jmdaemon joins (~jmdaemon@user/jmdaemon)
19:35:57 × raym quits (~raym@user/raym) (Ping timeout: 252 seconds)
19:37:46 raym joins (~raym@user/raym)
19:41:21 × ski quits (~ski@217.116.228.14) (Remote host closed the connection)
19:42:07 vglfr joins (~vglfr@37.73.110.255)
19:42:35 BanUtama joins (~blake.rai@user/BanUtama)
19:43:43 ski joins (~ski@217.116.228.14)
19:46:11 <tomsmeding> take your time, ascending to the functional level requires laying of new roads in the brain :)
19:46:24 × matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection)
19:49:16 <seriously> '=( thanks ill keep trying
19:51:28 matthewmosior joins (~matthewmo@173.170.253.91)
19:53:11 × ski quits (~ski@217.116.228.14) (Ping timeout: 252 seconds)
19:55:50 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
19:57:23 <seriously> giving up for now will try again tomorow; thanks for the help
19:57:43 × seriously quits (~seriously@2001:1c06:1b1d:6f00:efd2:b7b6:20af:5f73) (Quit: Client closed)
19:58:19 × machinedgod quits (~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 252 seconds)
19:59:35 <monadplus[m]> pbrpy5hv764rezd7
19:59:42 <geekosaur> uh
19:59:44 <tomsmeding> oops?
20:00:10 ski joins (~ski@217.116.228.14)
20:00:11 <Rembane_> Sounds like a good password
20:00:20 <monadplus[m]> My bad sorry
20:00:24 <geekosaur> past tense
20:00:31 <geekosaur> one hopes
20:04:34 raehik joins (~raehik@82.21.176.157)
20:04:44 riverside joins (~riverside@109.249.184.161)
20:05:22 machinedgod joins (~machinedg@d172-219-86-154.abhsia.telus.net)
20:06:47 × fef quits (~thedawn@user/thedawn) (Ping timeout: 268 seconds)
20:07:39 monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net)
20:08:19 fserucas joins (~fserucas@46.50.4.9)
20:08:23 gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net)
20:09:03 matthewmosior joins (~matthewmo@173.170.253.91)
20:09:24 × fserucas quits (~fserucas@46.50.4.9) (Client Quit)
20:09:28 × monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Client Quit)
20:09:28 × titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Remote host closed the connection)
20:09:55 × ski quits (~ski@217.116.228.14) (Remote host closed the connection)
20:12:06 <EvanR> my password is so strong I just tell everyone
20:15:35 gehmehgeh joins (~user@user/gehmehgeh)
20:16:02 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 268 seconds)
20:16:13 <riverside> any news in the haskell world?
20:16:30 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
20:17:45 <geekosaur> as of when? also you may want to peruse discourse.haskell.org
20:19:21 kadoban1 parts (~kadoban@user/kadoban) ()
20:19:57 × raehik quits (~raehik@82.21.176.157) (Ping timeout: 252 seconds)
20:21:02 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
20:23:46 asdf_ joins (~asdf@130.red-83-43-6.dynamicip.rima-tde.net)
20:25:32 <dsal> EvanR: They'll never guess your username.
20:26:49 <geekosaur> there's at least one service I used to use whose password rules were so craptacularly limited that I used the username as the actual password
20:27:55 pgib joins (~textual@173.38.117.69)
20:27:59 <tomsmeding> geekosaur: I suppose that was not a service with public usernames?
20:28:03 <riverside> wow, i wouldnt have expected like 40k views for some of the threads
20:29:11 <riverside> i guess haskell is entering its mainstream phase, i even heard John Carmack mention it on the Lex Fridman podcast
20:29:25 × eternalforms quits (~obsrwr@46.101.168.131) (Remote host closed the connection)
20:29:39 × asdf_ quits (~asdf@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Leaving)
20:30:38 <geekosaur[m]> Carmack's been mentioning it for years (mostly pissing on it)
20:31:54 <riverside> "absurd mindbending paradigm" sort of angle, but he kindly caveated it with something like "C is becoming rarer"
20:32:41 <riverside> top thread SPJ going to work on a new language called "Verse", i wonder how it will compare to haskell
20:34:10 <merijn> riverside: Carmack gave a keynote talking about haskell about 8 years ago too :p
20:34:29 <merijn> My bad, 6 years ago
20:35:42 <merijn> riverside: A lot of the more techy people in games have been on the "C is dead/needs to die/etc." side of the fight for decades :p
20:35:59 <riverside> oh cool. yeah, i guess with people with such a large profile promoting it we should see a pretty decent uptake of users
20:36:31 <riverside> merijn: i think im alergic to curly braces from having haskell as a first language
20:37:02 <riverside> and iv yet to find a functional programing language that compares in terms of clean-ness of syntax
20:37:02 <merijn> riverside: In 2006 (I think? I can't find the exact date of the talk) Tim Sweeney from Epic Games gave a keynote about his vision of "languages for games"
20:37:19 <merijn> Spoiler: Most of the stuff they want in games engines, C is terrible at
20:37:36 <riverside> i dont know enough about the particulars of that field to understand
20:37:37 <merijn> riverside: I dunno if there's a video somehwere, but slides are here: https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf
20:37:46 <riverside> thanks
20:39:00 <Lears> riverside: Did you know you can write do { ...; ...; let { x = ...; y = ... }; ... } if you want to?
20:39:04 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
20:39:23 <riverside> hmm, judging from that it seems like they have the same problems as we do in the scientific programming community, basically fast vector stuff.
20:39:39 <tomsmeding> and did you know that SPJ was (is?) partial to that syntax over the usual indentation-based ("layout") version?
20:39:40 <Lears> There can actually be a lot of curly braces in Haskell.
20:39:51 <riverside> Lears: lol, that actually looks pretty useful
20:39:52 gehmehgeh is now known as gmg
20:39:58 <merijn> tomsmeding: spj syntax is funky in many ways
20:40:21 <merijn> riverside: Technically, Haskell's layout system is defined as syntactic sugar for braces and semicolons :p
20:40:40 <merijn> tomsmeding: SPJ uses prefix semicolons
20:40:46 <riverside> and all of these things makes writing an interpreter kind of difficult
20:40:53 <merijn> Which, frankly, should be a bannable offense
20:40:56 <tomsmeding> re syntactic sugar: yes and in the grossest way possible
20:41:33 <tomsmeding> if the parser encounters a parse error, it goes back and inserts a } and tries again
20:42:05 <tomsmeding> recently I've tried to write a parser for haskell-like syntax without such a hack, and it seems to work fine
20:42:10 <tomsmeding> but there's probably something I'm missing :)
20:42:19 slack1256 joins (~slack1256@wsip-184-177-0-226.no.no.cox.net)
20:42:32 <riverside> that reminds me of genetic programming using SK combinators
20:44:04 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
20:44:36 ChaiTRex joins (~ChaiTRex@user/chaitrex)
20:44:58 <riverside> hmm, those game language slides mention sparse interaction graphs
20:45:10 <riverside> (you can see where im going with that...)
20:45:51 <riverside> i always thought that if graphs were a language primative that it would simplify the implementation of the compiler
20:46:07 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:46:23 <riverside> but got scared off from trying to approach the formal methods style intermediary language we compile to
20:46:35 califax joins (~califax@user/califx)
20:46:42 <riverside> i forget what its called... lambda++ or something
20:46:48 <Cale> merijn: prefix semicolons I can live with, just don't do the garbage where you start a new do-block somewhere in the middle of another and don't increase the indentation level
20:47:08 darchitect1 joins (~darchitec@2a00:23c6:3584:df01:7ab:2377:4825:f9a)
20:47:12 <Cale> That's where I draw the line, haha
20:47:26 × pmarg quits (~pmarg@224.80-203-5.customer.lyse.net) (Remote host closed the connection)
20:47:29 × noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds)
20:47:31 <riverside> recently had to add extra indentation to if statements because of that...
20:47:33 <tomsmeding> riverside: you mean what GHC compiles to?
20:47:37 <riverside> yeah
20:47:42 <tomsmeding> system F?
20:47:45 <riverside> thats it
20:47:55 <riverside> not sure if thats where the graph goes or what
20:47:59 <tomsmeding> Cale: ._.
20:48:20 <geekosaur> isn't the graph more on the STG level?
20:48:35 <tomsmeding> Cale: like, have `when some_condition $ do` and then continue on the same indentation level?
20:48:42 <tomsmeding> geekosaur: I would guess so
20:48:45 <riverside> well there was all this complication of "explicating cycles"
20:48:54 <riverside> geekosaur: idk
20:49:09 <tomsmeding> though I feel like we're talking about graphs on different levels here
20:49:16 <riverside> but yeah sure, you can probably put it at a higher level than system F
20:49:49 <tomsmeding> I haven't looked at the slides (so sorry if I'm mistaken), but I feel like riverside is talking about graphs _in_ the language, whereas STG in some sense uses a graph structure to represent the language itself
20:49:58 <riverside> tomsmeding: i think you just need parametric types, for something like "monadic tails"
20:50:11 tomsmeding has no clue what a monadic tail is
20:50:14 <tomsmeding> :)
20:50:21 <riverside> dont worry about that!
20:50:24 <tomsmeding> :D
20:50:48 <riverside> but yeah, basically in haskell we define a program graph with cycles, because we can compile recursive programs
20:51:39 <riverside> i think my idea was that if some underlying language had such graphs as a primative, that it would simplify the compiler itself
20:51:46 <tomsmeding> though the graph isn't fully statically known
20:52:07 <riverside> basically inferred via typchecking iiuc
20:52:12 <tomsmeding> well, either that or the graph is infinitely large
20:52:16 noteness joins (~noteness@user/noteness)
20:52:39 <riverside> hmm? no you dont unroll it
20:52:46 <riverside> thats why its not a DAG
20:53:06 <riverside> its an actual *graph*, like, tree with cyclic references
20:53:20 <riverside> but we lack the ability to explicate the cycles syntactically
20:53:25 <tomsmeding> hm, I'm thinking about how a program can instantiate a closure with multiple different values to close over
20:53:43 <riverside> oh
20:54:19 <tomsmeding> like, if `\x -> y + x` occurs somewhere, then if y=2 is in scope you get a closure with a 2 in it, whereas if you evaluate that lambda with y=3 in scope, you get a closure with a 3 in it
20:54:29 <tomsmeding> would you consider those two closures different nodes in the graph, or the same node?
20:54:49 <riverside> sorry, im baffled by this
20:54:50 × vysn quits (~vysn@user/vysn) (Ping timeout: 255 seconds)
20:54:53 <tomsmeding> if different nodes, then either the graph is not statically known or infinite; if the same node, then the graph doesn't contain all required information to run the program (I think)
20:55:17 <tomsmeding> f :: Int -> Int -> Int ; f y = let g = \x -> y + x in g y
20:55:21 <tomsmeding> what is the graph for that program
20:55:33 <tomsmeding> for f, that is
20:55:55 <slack1256> How is Control.Monad.Trans.AccumT different that Control.Monad.Trans.Writer.CPS ?
20:56:28 <riverside> oh right, your claiming that some scoping consideration could affect something, im not sure though
20:56:48 <riverside> because there y is in scope for the definition of g
20:56:58 <tomsmeding> riverside: I'm saying that I'm not quite sure what your definition of "the graph" is -- I can think of two possibilities, and neither is, in my mind, very satisfying
20:57:04 causal joins (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e)
20:58:17 <tomsmeding> what f is _calling_, there, is an _instantiation_ of the closure that is g with the y-value given by the argument of f
20:58:40 <tomsmeding> so in my first alternative for the definition of "the graph", f would need to have an arrow to that instantiation
20:58:45 <riverside> i guess you could add an axtra argument to g... but i guess really the graph should contain all the top level information, thought rewriting to avoid the scoping consideration would lead to per-function graphs that dont pull variables in from an outer scope
20:58:50 <riverside> i hadnt considered this, thanks
20:58:51 <tomsmeding> but which instantiation that is, depends on runtime values
20:59:32 <tomsmeding> oh, you mean making every function a closed function by putting the closed-over values in additional arguments?
20:59:49 <riverside> "up to some fancy rewite" yeah
20:59:53 <riverside> rewrite*
20:59:58 <tomsmeding> how would that work for a set of mutually recursive functions
21:00:13 <riverside> would that change anything?
21:00:14 <tomsmeding> say f and g are mutually recursive; do both get two additional arguments, f and g?
21:00:40 biberu joins (~biberu@user/biberu)
21:00:59 <riverside> hmm, probably you would have the graph "at top level"? does that make sense?
21:01:08 <riverside> ie, these wouldnt support per-function graphs
21:01:12 <tomsmeding> sure
21:01:15 <riverside> since they dont exist in isolation
21:01:20 <tomsmeding> yes for sure
21:01:40 <riverside> i guess then you could try and find subgraphs that exist on their own
21:01:55 <riverside> some kind of graph factoring problem
21:02:05 <tomsmeding> which is called strongly connected components? :)
21:02:18 <riverside> there was a graph isomorphism problem also my prof was on about, apparently there are polynomial time algorithms for this
21:02:47 <tomsmeding> given any graph, that produces a DAG of strongly connected components (SCCs), where each SCC is a directed (cluster of) cycles
21:02:58 <tomsmeding> _graph isomorphism_?
21:03:14 <riverside> i guess the idea is that you would want to "compile" it down to some cannoncal form, so that you can do function (in)equality
21:03:18 <tomsmeding> that thing where Lazlo Babai designed a quasi-polynomial algorithm for?
21:03:21 <tomsmeding> don't go there :p
21:03:40 <tomsmeding> a friend of mine implemented Babai's algorithm in C++, and he came out half-alive
21:03:49 <tomsmeding> also the constant factor is ridiculously bad
21:04:40 <riverside> i think there is a theorem for factorin finite automata called the "cascade algorithm" or something
21:04:48 <tomsmeding> fun fact, GHC typechecks let bindings by computing the DAG of SCCs of the bindings, then typechecks the components in topological order
21:06:32 <riverside> hmm, well maybe if you dont care about function equality you dont actually need to check if two programs are isomorphic
21:06:45 <tomsmeding> I don't think you need function equality very often
21:07:03 <tomsmeding> intuitionistic logic doesn't usually assume functional extensionality :)
21:07:08 <riverside> i guess i was just intrigued by the fact that 2 programs *might* factorise the same
21:07:10 × mmhat quits (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
21:07:21 <riverside> and that you could get some kind of canonical form just from compilation
21:07:44 <tomsmeding> if two programs have the same graph, are they the same program?
21:07:52 <riverside> but i guess you dont want to have to then find every different way the same program could be expressed on a graph! which you wouldnt need too unless you were doing function equality
21:07:55 <tomsmeding> do `f x = x + 2` and `f x = x + 3` have the same graph?
21:08:01 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
21:08:01 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
21:08:01 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
21:08:01 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
21:08:01 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:08:01 × noteness quits (~noteness@user/noteness) (Remote host closed the connection)
21:08:05 <riverside> i think he wanted it for genetic programming to promote diversity
21:08:19 noteness joins (~noteness@user/noteness)
21:08:34 stiell joins (~stiell@gateway/tor-sasl/stiell)
21:08:36 ec joins (~ec@gateway/tor-sasl/ec)
21:08:36 ChaiTRex joins (~ChaiTRex@user/chaitrex)
21:08:36 × chele quits (~chele@user/chele) (Remote host closed the connection)
21:08:38 <riverside> tomsmeding: sure
21:08:53 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
21:09:02 gmg joins (~user@user/gehmehgeh)
21:09:15 <riverside> f x = x + f x === f x = f x + x, is kind of what i was talking about
21:09:35 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
21:09:56 <tomsmeding> viewing the graph modulo algebraic laws?
21:10:14 <riverside> i guess this is where the isomorphism comes in
21:10:20 <slack1256> I got a function `add a b = a + b` that is meant to be partially applied, ie: `let f = add <expensive> in ...` . Is there any advantage on writting as `add a = \b -> a + b` in terms of sharing `a`?
21:10:23 <riverside> "their graphs are the same"
21:10:41 <riverside> er "are isomorphic"
21:10:59 <geekosaur> slack1256, I think ghc does let lifting? i.e. does it for you
21:11:00 <slack1256> I know GHC has the concept of arity but that is used for inlining.
21:11:14 <riverside> i guess the symetry in the arguments would have to *also* be explicated, not sure it can be inferred
21:11:50 × zer0bitz quits (~zer0bitz@2001:2003:f748:2000:7d58:b5e3:80b4:aa10) (Ping timeout: 244 seconds)
21:11:57 <tomsmeding> slack1256: if GHC does no optimisations at all and just follows call-by-need, your first version will compute <expensive> only once
21:12:19 <tomsmeding> riverside: hence, isomorphism modulo algebraic laws :p
21:12:30 <tomsmeding> where said laws you have to conjure from somewhere
21:13:18 <slack1256> Mmm I was under the impression there were some theorical problems, but I got that impression from lambda lifting which another different optimization.
21:13:21 <tomsmeding> riverside: this is kind of unrelated, but it makes me think of https://blog.sigplan.org/2021/04/06/equality-saturation-with-egg/
21:13:27 <slack1256> Thanks tomsmeding and geekosaur!
21:13:29 <riverside> yeah, sorry, but yes, exactly that. i mean about the graph though, these "algebraic laws" should be inferable from the program shape i guess
21:14:00 <tomsmeding> from the program shape and laws concerning the primitive operations
21:14:11 <riverside> yeah, like how we actually implement +
21:14:23 <riverside> recursively of course
21:14:33 <tomsmeding> but that quickly gets untenable; it's easy to make commutativity of a two-argument function be equivalent to your favourite hard conjecture
21:14:49 <riverside> damn
21:15:13 <tomsmeding> rice's theorem, paraphrased: any useful static analysis will be partial
21:15:19 <riverside> sure anyway, i dont really want function equality, ... so i guess gentic programing goes out the window
21:15:24 <tomsmeding> (on a turing-complete language)
21:15:57 <riverside> the point was more for syntax
21:16:01 <riverside> i mean, like brevity
21:16:08 <tomsmeding> we went on some tangents :p
21:16:18 <riverside> well, it is *the* tangent
21:16:35 <riverside> good point to rule out the obvious goose chase
21:16:59 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
21:17:41 <riverside> i like the idea of graphs in STG though
21:17:58 <riverside> i might be delusional to think it could simplify the implementation of GHC though
21:18:09 <tomsmeding> the graph in STG, anyway, has a node for every closure created during program execution
21:18:21 <tomsmeding> so those (2, g) and (3, g) are distinct
21:18:29 × dashkal1 quits (~dashkal@user/dashkal) (Quit: WeeChat 3.5)
21:18:34 <geekosaur> I think it could only do so if you could also use it as the input language, but now you make haskell even more brain-breaking than it already is
21:18:34 <tomsmeding> which makes sense -- at runtime they're different objects in memory
21:18:48 <tomsmeding> programming in STG ?!
21:19:06 pavonia joins (~user@user/siracusa)
21:19:08 <tomsmeding> try programming in Unlambda first :p
21:19:21 <riverside> we have list primitives, i cant see how graph primitives would make it incomprehensible
21:19:40 <tomsmeding> graph primitives just let you use graphs as data structures in the language, right?
21:19:50 <tomsmeding> whereas we were talking about the graph structure of the program itself
21:19:52 <tomsmeding> two different things
21:19:55 <geekosaur> right, it's *visualizing* graphs that is the problem
21:20:02 <riverside> ah but sure, GHC is actually written in haskell, i think im confusing "simplifying the implementation of the compiler" with "simplifying the compilation process"
21:20:09 <geekosaur> when they cpomprise the program, as opposed to the data
21:20:09 <tomsmeding> ooooh
21:20:18 mmhat joins (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de)
21:20:27 <tomsmeding> you mean, STG is composed of graph structures, so if Haskell had graph primitives, GHC could use those
21:20:40 <tomsmeding> I highly doubt that would actually yield any significant simplification of GHC
21:20:45 <riverside> i think my brain is caught in a graph recursion
21:20:55 <tomsmeding> ooh a recursive graph
21:21:06 <riverside> argh! my brain!
21:21:36 <riverside> the primatives simply consist of designating cyclic references, otherwise its basically just a tree
21:22:00 <riverside> "im going to put the top of the tree in the middle of the tree now! take note!"
21:22:10 × ubert quits (~Thunderbi@77.119.164.0.wireless.dyn.drei.com) (Ping timeout: 244 seconds)
21:22:41 <tomsmeding> I feel like that would be at most nice syntactic sugar for a simple Haskell graph library that you can already write
21:23:23 <riverside> probably ammeding GADT syntax, so if you make reference to the datatype you are defining, then you can annotate it somehow
21:24:03 <riverside> hmm, thats just off the topp of my head, and seems wrong. im sure i wrote all this down somewhere before...
21:24:20 <tomsmeding> my brain starts to wind down for night anyway
21:25:03 <riverside> ok, so its like, for list, where you say, "either empty, or a value and a list" where this recursive reference to list is used. and you would want to be able to say "not just any old list, *the start of this list*"
21:25:30 <riverside> x = 1 : 2 : x
21:25:40 <tomsmeding> I was just gonna say, you can kind of already do that :
21:25:42 <tomsmeding> :p
21:25:46 <riverside> would have its own special datatype
21:25:49 <tomsmeding> you just can't (easily) observe the graph structure
21:26:01 <riverside> hence the need for the cyclic explication
21:26:46 × ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
21:27:14 ec joins (~ec@gateway/tor-sasl/ec)
21:27:18 <riverside> thus allowing for the representation of recursive programs on a graph that "captures the shape of the program explicitly"
21:27:54 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:28:22 notzmv joins (~zmv@user/notzmv)
21:28:42 <riverside> i guess im still confused as to "how haskell can do this" (ie, allow for recursive function definitions)
21:28:43 × Topsi quits (~Topsi@dyndsl-095-033-091-248.ewe-ip-backbone.de) (Read error: Connection reset by peer)
21:28:46 <riverside> ah, yes i got it
21:29:03 <riverside> but not actually allow to express these same functions in a datatype
21:29:12 matthewmosior joins (~matthewmo@173.170.253.91)
21:29:33 <riverside> which is what makes me think that there is "something you could compile it down too, if it has graph syntax built in"
21:29:51 <riverside> somehow GADT's seem weaker than top level haskell code
21:29:55 <tomsmeding> I think in Haskell a recursive function just has a reference to itself in its closure
21:30:08 <riverside> and i would like that to change, for some reason, which has something to do with compilation, i think
21:30:15 <riverside> sorry, its been ages since i thought about this
21:30:18 <tomsmeding> alternatively, you can assume that 'fix' exists, and build everything on that
21:30:56 <riverside> we really want to explicate the cycles
21:31:07 alp_ joins (~alp@user/alp)
21:31:07 <riverside> fix alone kind of doesnt
21:31:28 <tomsmeding> fix indicates the existence of a back-edge, right?
21:31:51 <tomsmeding> or, hm
21:31:57 <riverside> i mean, "it has a start" is quite different to "and thats mentioned exactly here"
21:32:03 <tomsmeding> right
21:32:34 <tomsmeding> then again, that's precisely what variables do
21:32:41 <riverside> basically, the symbolic dereferencing of bound variables, is "specifying the shape of the graph"
21:32:50 <hpc> the start is wherever you hold your reference to
21:32:59 <riverside> but we cant do that in a datatype, so we cant cast top level code onto a GADT and retain the information
21:33:04 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
21:33:07 <tomsmeding> and if you don't like alpha-renaming, use de bruijn indices
21:33:10 <hpc> (x = 1 : 2 : x) produces the exact same graph as (x = 2 : 1 : x)
21:33:33 <riverside> you get what i mean though?
21:33:46 <tomsmeding> I don't get where GADTs are coming from in the story
21:33:49 finsternis joins (~X@23.226.237.192)
21:33:51 <riverside> that bit
21:34:18 <tomsmeding> what about a simple syntax tree with variable names is not sufficient to you?
21:34:26 <riverside> so we can express a tree
21:34:39 <riverside> but cant tell if one of the branches is a reference to the top of the tree
21:35:03 <riverside> if we could, then it would hold the same information as if we did it all with let bound nodes
21:35:03 <tomsmeding> the graph structure is easily read off the data: any place a name is bound is a potential tip of a backedge, and any occurrence of that variable in its scope is a head of an arrow to that tip position
21:35:46 <tomsmeding> "but cant tell if ... top of the tree" -- if so, said branch would be a variable reference, right?
21:35:52 <riverside> but (1:2:x) = 1:2:1:2:1:2.... oh no! it unrolled
21:36:13 <tomsmeding> like, data Expr = App Expr Expr | Lam Name Expr | Let (Name, Expr) Expr | Var Name
21:36:24 <riverside> i mean, we can use lists for simplicity
21:36:31 <riverside> same principle
21:37:03 <riverside> 1 `cons` 2 `cons` *look heres the start again style cons* x
21:37:48 <riverside> and this i guess gets a special type
21:38:01 <riverside> :: cyclic list of length 2
21:38:15 <tomsmeding> Let ("x", Prim "cons" `App` Lit 1 `App` (Prim "cons" `App` Lit 2 `App` Var "x")) (Var "x")
21:38:34 <tomsmeding> (data Expr = ... | Prim String | Lit Int)
21:38:52 <tomsmeding> graph structure is fully readable from that syntax tree
21:38:55 <riverside> im sure you get what i mean by this point
21:38:58 <tomsmeding> s/readable/apparent/
21:39:10 <riverside> sure, that was never the problem
21:39:12 <tomsmeding> you want some more intrinsic representation of the graph information
21:39:17 <tomsmeding> something "nicer"
21:39:27 <tomsmeding> I'm just apparently unable to see what the nicer approach would be :p
21:39:40 <tomsmeding> I feel like it would always just be an encoding of this same thing, potentially with nicer syntax/ASPI
21:39:41 <tomsmeding> *API
21:39:59 <riverside> when its "written in top level haskell code" all the variable dereferencing comunicates the "shape" of the graph, including the cyclic references, that we can infer just by looking to see where the bound variable is mentioned in its definition
21:40:45 <riverside> but after you do all the substitution, this information is lost
21:41:06 <riverside> i certainly cant tell from the type [Int] that its a cyclic list of length 2
21:41:13 jgeerds joins (~jgeerds@55d46bad.access.ecotel.net)
21:41:27 <riverside> this is "where GADTs come into this"
21:42:06 <riverside> doing whatever it is that we can do in terms of recursive function implementation, but actually within the type system
21:42:21 <riverside> idk, maybe thats not where you want to specify the shape of your program...
21:42:42 <riverside> but i had it for a scientific computation application with a very regular shaped graph (a euclidan grid)
21:42:54 <riverside> which certainly could be expressed using type families
21:43:38 <riverside> ie "calculating the shape of your program directly"
21:43:43 <riverside> i g2g soon
21:43:55 <tomsmeding> g'night (if applicable)
21:43:58 <tomsmeding> (for me it is)
21:45:23 <riverside> are you asking if its night? or if its good? dont make me think about these things, i may desolve in a pool of my own tears
21:45:28 × riverside quits (~riverside@109.249.184.161) (Remote host closed the connection)
21:45:28 × Midjak quits (~Midjak@82.66.147.146) (Quit: Leaving)
21:47:17 Kaipei joins (~Kaiepi@142.68.249.28)
21:47:36 Midjak joins (~Midjak@82.66.147.146)
21:48:14 × Midjak quits (~Midjak@82.66.147.146) (Remote host closed the connection)
21:49:05 Midjak joins (~Midjak@82.66.147.146)
21:50:34 × Kaiepi quits (~Kaiepi@142.68.249.28) (Ping timeout: 244 seconds)
21:52:11 × Midjak quits (~Midjak@82.66.147.146) (Client Quit)
21:53:35 × michalz quits (~michalz@185.246.204.75) (Remote host closed the connection)
21:58:21 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
22:00:29 BanUtama joins (~blake.rai@user/BanUtama)
22:02:10 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.6)
22:03:06 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
22:08:29 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
22:10:04 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
22:10:48 BanUtama joins (~blake.rai@user/BanUtama)
22:14:32 × coot quits (~coot@213.134.176.158) (Quit: coot)
22:16:52 coot joins (~coot@213.134.176.158)
22:17:12 × Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Remote host closed the connection)
22:17:28 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
22:18:01 × coot quits (~coot@213.134.176.158) (Remote host closed the connection)
22:18:07 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
22:18:38 Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com)
22:19:33 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
22:19:37 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
22:22:22 × jgeerds quits (~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 268 seconds)
22:32:18 × ystael_ quits (~ystael@user/ystael) (Ping timeout: 240 seconds)
22:32:44 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:37:55 BanUtama joins (~blake.rai@user/BanUtama)
22:38:29 × zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!)
22:53:23 × Tuplanolla quits (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Quit: Leaving.)
22:58:10 × alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds)
23:03:43 × merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
23:05:35 <phma> What needs to be in a repo to be ready to upload to Hackage?
23:06:53 <hpc> a cabal file, and technically that's pretty much it :P
23:07:58 <geekosaur> last I checked cabal insisted on a LICENSE file. cabal check will tell you what you need
23:09:22 <hpc> you might want to build docs locally and make sure they look right
23:10:36 <EvanR> nah, just yolo upload the package, wait (?) months for docs to build. See they are wrong, and do a fixup
23:10:47 <EvanR> which doesn't require a new release
23:11:31 <phma> is there a stack check?
23:14:51 geekosaur has no idea
23:14:57 luffy joins (~chenqisu1@183.217.201.23)
23:18:38 <geekosaur> my guess is that, just as cabal sdist runs a check first, stack sdist does whatever checks are needed first
23:20:20 × slack1256 quits (~slack1256@wsip-184-177-0-226.no.no.cox.net) (Ping timeout: 268 seconds)
23:29:12 × acidjnk_new quits (~acidjnk@p200300d6e705866691d881defe97b1cb.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
23:30:22 merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
23:36:47 × matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
23:44:23 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 268 seconds)
23:44:25 × BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds)
23:50:27 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
23:50:28 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
23:50:28 wroathe joins (~wroathe@user/wroathe)
23:55:55 BanUtama joins (~blake.rai@user/BanUtama)

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