Home liberachat/#haskell: Logs Calendar

Logs on 2021-06-01 (liberachat/#haskell)

00:04:09 ddellacosta joins (~ddellacos@86.106.143.157)
00:06:00 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
00:06:56 × tremon quits (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
00:07:28 Heffalump joins (~ganesh@urchin.earth.li)
00:07:34 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
00:08:31 jsilver joins (~jonathan@2601:282:300:aa0:e0bc:bc4e:7821:4001)
00:08:35 × ddellacosta quits (~ddellacos@86.106.143.157) (Ping timeout: 252 seconds)
00:08:42 Heffalump parts (~ganesh@urchin.earth.li) ()
00:09:37 × waleee quits (~waleee@h-98-128-228-119.NA.cust.bahnhof.se) (Ping timeout: 272 seconds)
00:12:24 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:13:03 × jsilver quits (~jonathan@2601:282:300:aa0:e0bc:bc4e:7821:4001) (Quit: Leaving)
00:16:58 × Cubic quits (~hannesste@ip5f5be453.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
00:17:37 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
00:17:37 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
00:18:12 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
00:24:05 steeps joins (~steeps@cpc121168-oxfd27-2-0-cust161.4-3.cable.virginm.net)
00:24:32 × cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds)
00:24:53 cheater joins (~Username@user/cheater)
00:30:03 hmmmas joins (~chenqisu1@183.217.202.217)
00:31:41 × argento quits (~argent0@168.227.96.53) (Ping timeout: 252 seconds)
00:34:47 o1lo01ol1o joins (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com)
00:34:55 Erutuon joins (~Erutuon@user/erutuon)
00:39:18 × o1lo01ol1o quits (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com) (Ping timeout: 264 seconds)
00:40:45 × hmmmas quits (~chenqisu1@183.217.202.217) (Quit: Leaving.)
00:41:17 × sm2n quits (~sm2n@user/sm2n) (Ping timeout: 272 seconds)
00:41:30 ddellacosta joins (~ddellacos@89.45.224.40)
00:41:43 hmmmas joins (~chenqisu1@183.217.202.217)
00:42:10 × steeps quits (~steeps@cpc121168-oxfd27-2-0-cust161.4-3.cable.virginm.net) (Quit: Leaving)
00:42:15 Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-133-166.cust.tzulo.com)
00:44:05 × boioioing quits (~boioioing@cpe-76-84-141-127.neb.res.rr.com) (Ping timeout: 264 seconds)
00:45:21 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
00:46:25 × ddellacosta quits (~ddellacos@89.45.224.40) (Ping timeout: 265 seconds)
00:46:32 × bfrk quits (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de) (Ping timeout: 252 seconds)
00:46:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
00:49:00 argento joins (~argent0@168.227.96.53)
00:49:50 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
00:50:56 × oxide quits (~lambda@user/oxide) (Ping timeout: 268 seconds)
00:51:33 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
00:51:41 oxide joins (~lambda@user/oxide)
00:52:20 pe200012 joins (~pe200012@120.236.162.14)
00:52:29 × pe200012_ quits (~pe200012@119.131.208.84) (Ping timeout: 272 seconds)
00:53:42 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
00:53:49 cheater joins (~Username@user/cheater)
00:53:50 notzmv joins (~zmv@user/notzmv)
00:54:16 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 244 seconds)
00:54:16 × hylisper2 quits (~yaaic@111.119.208.67) (Ping timeout: 244 seconds)
00:56:06 Erutuon joins (~Erutuon@user/erutuon)
00:59:22 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
01:01:30 tonyday joins (~user@202-65-93-249.ip4.superloop.com)
01:02:57 chisui joins (~chisui@200116b86662dd0045dcdbf42fb73e43.dip.versatel-1u1.de)
01:03:29 <tonyday> I was wondering if anyone would be interested in a project I'm calling docperf, like doctest except for performance benchmarking?
01:03:33 × wenzel quits (~wenzel@user/wenzel) (Read error: Connection reset by peer)
01:03:57 wenzel joins (~wenzel@user/wenzel)
01:04:24 <tonyday> Covering the basics, like checking the Order claim of a function, and documenting the expected factor.
01:04:34 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
01:05:24 <tonyday> The design ethic would be that performance, like tests, are very useful when they're right next to the code.
01:05:32 boioioing joins (~boioioing@cpe-76-84-141-127.neb.res.rr.com)
01:05:57 <cdsmith> It sounds intriguing. Off-hand, my thoughts are (a) I care about performance claims for only a tiny number of packages, but for that tiny package set, it's very important. Not sure if that argues for or against. And (b) complexity claims in Haskell can be complex, since they depend on how much of the result is evaluated.
01:06:53 <cdsmith> Err, I should have said "can be complicated". That's probably clearer than mixing meanings of "complex"
01:08:16 <tonyday> Yes, I'm forever adding and subtracting -XStrictData or is it -XDataStrict, measuring that empirically. Help with that etc.
01:12:35 × siraben quits (~siraben@user/siraben) (Quit: node-irc says goodbye)
01:12:53 siraben joins (~siraben@user/siraben)
01:16:07 ddellacosta joins (~ddellacos@89.45.224.131)
01:16:51 <tonyday> If someone has designed some "strict in the spline" style, say, then performance usage should be part of the documentation, showing the implications of miss-use.
01:17:34 wei2912 joins (~wei2912@112.199.250.21)
01:20:34 renzhi joins (~xp@2607:fa49:6500:bc00::e7b)
01:20:38 × ddellacosta quits (~ddellacos@89.45.224.131) (Ping timeout: 252 seconds)
01:20:44 × argento quits (~argent0@168.227.96.53) (Ping timeout: 265 seconds)
01:20:44 × ixlun quits (~user@109.249.184.235) (Read error: Connection reset by peer)
01:21:51 ixlun joins (~user@109.249.184.235)
01:22:52 <tonyday> It would be great to direct core to the comments as well. It would be alert to core changes then.
01:24:26 Guest86 joins (~Guest86@189.197.116.11)
01:24:49 hylisper joins (~yaaic@111.119.208.67)
01:24:51 argento joins (~argent0@168.227.96.53)
01:26:53 × ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Ping timeout: 272 seconds)
01:27:08 ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net)
01:28:46 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:28:47 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
01:30:20 Guest86 is now known as ram535
01:32:09 xff0x_ joins (~xff0x@2001:1a81:52ca:4f00:908c:1e58:afd0:4053)
01:34:18 lavaman joins (~lavaman@98.38.249.169)
01:35:45 × xff0x quits (~xff0x@port-92-195-46-148.dynamic.as20676.net) (Ping timeout: 272 seconds)
01:38:55 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
01:45:23 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Ping timeout: 265 seconds)
01:48:03 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
01:48:15 <sm[m]> hi tonyday, it sounds very interesting. Would it be mostly useful for "small" code (tight loops..) ? Or also describing application/system performance ?
01:51:23 <tonyday> small certainly. But my Vector chains break at a certain level of compositional complexity, and it's difficult to spot where. I'd like to see fusion in the lab with some form of benchmark or standard so to speak.
01:51:38 <tonyday> just an example
01:55:42 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
01:55:53 ddellacosta joins (~ddellacos@89.45.224.131)
01:59:29 <tonyday> I do use the same mechanisms to measure latencies in a tcp connection, though, so its pretty flexible.
01:59:48 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
02:00:14 × ddellacosta quits (~ddellacos@89.45.224.131) (Ping timeout: 252 seconds)
02:03:45 o1lo01ol1o joins (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com)
02:04:53 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Ping timeout: 272 seconds)
02:07:12 × argento quits (~argent0@168.227.96.53) (Quit: leaving)
02:07:23 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
02:07:32 argento joins (~argent0@168.227.96.53)
02:07:39 × hubvu quits (uid495858@id-495858.tinside.irccloud.com) (Quit: Connection closed for inactivity)
02:10:26 × Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-133-166.cust.tzulo.com) (Quit: Leaving)
02:10:29 × alex3 quits (~Chel@BSN-77-82-41.static.siol.net) (Ping timeout: 268 seconds)
02:12:54 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:12:54 FinnElija is now known as Guest2152
02:12:54 finn_elija is now known as FinnElija
02:16:02 × Guest2152 quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 268 seconds)
02:21:33 ikex joins (~ash@user/ikex)
02:23:02 × chisui quits (~chisui@200116b86662dd0045dcdbf42fb73e43.dip.versatel-1u1.de) (Ping timeout: 250 seconds)
02:27:47 ddellacosta joins (~ddellacos@86.106.121.196)
02:29:04 × lawt quits (~lawt@2601:200:8101:f140:dea6:32ff:fea1:adfa) (Quit: WeeChat 2.8)
02:31:29 × td_ quits (~td@muedsl-82-207-238-238.citykom.de) (Ping timeout: 264 seconds)
02:32:45 × ddellacosta quits (~ddellacos@86.106.121.196) (Ping timeout: 272 seconds)
02:33:18 td_ joins (~td@94.134.91.112)
02:34:08 falafel_ joins (~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
02:34:14 beka joins (~beka@104.193.170-254.PUBLIC.monkeybrains.net)
02:37:59 myShoggoth joins (~myShoggot@97-120-89-117.ptld.qwest.net)
02:39:53 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 264 seconds)
02:41:23 Erutuon joins (~Erutuon@user/erutuon)
02:42:02 × shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
02:42:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
02:44:23 alex3 joins (~Chel@BSN-77-82-41.static.siol.net)
02:46:36 cheater1__ joins (~Username@user/cheater)
02:46:41 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
02:46:48 cheater1__ is now known as cheater
02:50:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
02:50:34 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 268 seconds)
02:57:57 × boioioing quits (~boioioing@cpe-76-84-141-127.neb.res.rr.com) (Remote host closed the connection)
03:00:37 × xprlgjf quits (~gavin@60.27.93.209.dyn.plus.net) (Ping timeout: 272 seconds)
03:03:31 × boxscape quits (~boxscape@user/boxscape) (Ping timeout: 268 seconds)
03:04:25 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
03:05:22 × oxide quits (~lambda@user/oxide) (Ping timeout: 268 seconds)
03:06:01 × ikex quits (~ash@user/ikex) (Ping timeout: 244 seconds)
03:06:53 ddellacosta joins (~ddellacos@89.46.62.196)
03:07:02 oxide joins (~lambda@user/oxide)
03:07:16 eddiemundo[m] joins (~eddiemun_@2001:470:69fc:105::a9c)
03:07:46 eddiemundo[m] is now known as eddiemundo
03:08:52 × eddiemundo quits (~eddiemun_@2001:470:69fc:105::a9c) (Client Quit)
03:09:08 eddiemundo joins (~eddiemund@2001:470:69fc:105::a9c)
03:11:54 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
03:12:01 × ddellacosta quits (~ddellacos@89.46.62.196) (Ping timeout: 272 seconds)
03:16:18 <arahael> What's the difference between 'set' and 'assign' with haskelll's lenses?
03:16:22 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 264 seconds)
03:16:48 otto_s_ joins (~user@p5de2ffe1.dip0.t-ipconnect.de)
03:18:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
03:19:45 × willbush quits (~user@47.183.200.14) (Remote host closed the connection)
03:20:11 × otto_s quits (~user@p5de2fbac.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
03:20:13 <glguy> arahael, assign uses MonadState
03:21:46 <arahael> glguy: Oooh? I've not covered MonadState as such when it comes to lenses.
03:22:08 × o1lo01ol1o quits (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com) (Remote host closed the connection)
03:23:23 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
03:23:53 o1lo01ol1o joins (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com)
03:24:37 <sm[m]> tonyday: are these effectively performance tests ? Can't you express those with ordinary doctest ?
03:24:50 mustafa joins (~mustafa@rockylinux/releng/mstg)
03:26:35 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
03:26:50 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
03:27:14 berberman_ joins (~berberman@user/berberman)
03:27:41 × berberman quits (~berberman@user/berberman) (Ping timeout: 252 seconds)
03:27:59 AgentM joins (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net)
03:28:14 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
03:28:14 aighearach_ is now known as Aighearach
03:28:48 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
03:28:48 × o1lo01ol1o quits (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com) (Ping timeout: 268 seconds)
03:32:50 × kiweun quits (~sheepduck@2607:fea8:2a60:b700::5d55) (Remote host closed the connection)
03:35:05 sheepduck joins (~sheepduck@2607:fea8:2a60:b700::8a94)
03:35:36 lavaman joins (~lavaman@98.38.249.169)
03:36:17 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 264 seconds)
03:36:54 × nerdypepper quits (znc@152.67.162.71) (Changing host)
03:36:54 nerdypepper joins (znc@user/nerdypepper)
03:37:02 × shiraeeshi quits (~shiraeesh@109.166.59.30) (Ping timeout: 265 seconds)
03:39:03 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
03:40:07 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 244 seconds)
03:40:37 evolve75` joins (~user@c-76-20-160-130.hsd1.mi.comcast.net)
03:40:42 × monochrom quits (trebla@216.138.220.146) (Quit: NO CARRIER)
03:40:59 monochrom joins (trebla@216.138.220.146)
03:44:16 shiraeeshi joins (~shiraeesh@109.166.59.30)
03:45:28 × smitop quits (uid328768@user/smitop) (Quit: Connection closed for inactivity)
03:53:29 × argento quits (~argent0@168.227.96.53) (Remote host closed the connection)
03:54:19 leeb joins (~leeb@KD111239155018.au-net.ne.jp)
03:54:28 × alx741 quits (~alx741@186.178.108.160) (Quit: alx741)
03:54:55 justsomeguy joins (~justsomeg@user/justsomeguy)
04:00:22 × pe200012 quits (~pe200012@120.236.162.14) (Read error: Connection reset by peer)
04:00:48 pe200012 joins (~pe200012@119.131.208.84)
04:02:31 mikoto-chan joins (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be)
04:03:08 mustafa joins (~mustafa@rockylinux/releng/mstg)
04:04:51 lavaman joins (~lavaman@98.38.249.169)
04:05:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:05:25 lavaman joins (~lavaman@98.38.249.169)
04:05:31 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:05:47 lavaman joins (~lavaman@98.38.249.169)
04:05:55 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:06:10 lavaman joins (~lavaman@98.38.249.169)
04:06:17 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:06:32 lavaman joins (~lavaman@98.38.249.169)
04:06:39 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
04:08:16 × renzhi quits (~xp@2607:fa49:6500:bc00::e7b) (Ping timeout: 268 seconds)
04:10:29 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
04:10:30 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 264 seconds)
04:10:48 cheater joins (~Username@user/cheater)
04:12:35 × evolve75` quits (~user@c-76-20-160-130.hsd1.mi.comcast.net) (Ping timeout: 268 seconds)
04:18:18 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
04:18:18 × ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Read error: Connection reset by peer)
04:18:37 ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net)
04:22:10 × slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving)
04:29:54 lbseale_ joins (~lbseale@ip72-194-54-201.sb.sd.cox.net)
04:33:17 × lbseale quits (~lbseale@ip72-194-54-201.sb.sd.cox.net) (Ping timeout: 264 seconds)
04:35:22 wonko joins (~wjc@62.115.229.50)
04:38:22 <tonyday> sm: yes, you just have a few differences; compile not ghci, an ability to record a "performance" in the comments (eg "O(N^2): 12"), and an ability to trigger an error/warning if there is a regression.
04:38:27 dhu1337 joins (~dhu1337@user/dhu1337)
04:38:34 × ram535 quits (~Guest86@189.197.116.11) (Quit: Client closed)
04:39:43 × danso quits (~danso@23-233-111-52.cpe.pppoe.ca) (Ping timeout: 268 seconds)
04:40:27 <tonyday> I think cabal-extras can help with all of that
04:43:43 <tonyday> And we would be able to check for regressions in CI and all that
04:45:10 mustafa joins (~mustafa@rockylinux/releng/mstg)
04:46:55 v01d4lph4 joins (~v01d4lph4@122.160.65.250)
04:46:55 × v01d4lph4 quits (~v01d4lph4@122.160.65.250) (Changing host)
04:46:55 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
04:48:09 × dhu1337 quits (~dhu1337@user/dhu1337) (Quit: dhu1337)
04:48:41 o is now known as niko
04:49:52 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 244 seconds)
04:49:55 lbseale__ joins (~lbseale@ip72-194-54-201.sb.sd.cox.net)
04:53:24 × lbseale_ quits (~lbseale@ip72-194-54-201.sb.sd.cox.net) (Ping timeout: 265 seconds)
04:54:01 o1lo01ol1o joins (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com)
04:56:11 × gambpang quits (~ian@207.181.230.156) (Remote host closed the connection)
04:56:39 × hylisper quits (~yaaic@111.119.208.67) (Quit: Yaaic - Yet another Android IRC client - http://www.yaaic.org)
04:57:20 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
04:58:29 × o1lo01ol1o quits (~o1lo01ol1@cpe-74-72-45-166.nyc.res.rr.com) (Ping timeout: 264 seconds)
05:02:16 × img quits (~img@2405:6580:b1c0:2500:43d1:94bf:adb9:8dcf) (Quit: ZNC 1.8.1 - https://znc.in)
05:04:07 lep is now known as test
05:04:07 test is now known as lep
05:04:49 × AgentM quits (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net) (Quit: Leaving.)
05:10:53 img joins (~img@2405:6580:b1c0:2500:1e68:3732:5209:e4c0)
05:13:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:17:00 hololeap joins (hololeap@user/hololeap)
05:17:16 <hololeap> hi, I'm looking for some help with this: http://sprunge.us/rOOfCr
05:17:57 <hololeap> I set up a GADT rose tree that carries a couple types for each node in a type-level rose tree
05:18:41 <hololeap> at some point I want to forget this extra type-level info and convert it to a regular Tree, but I'm not sure how to do this
05:19:26 <dy> I think that's a forgetful functor... but I can't remember :^)
05:19:38 wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com)
05:21:08 <hololeap> I thought I would need to do something like: fromFoo :: (forall t. FooItem t -> x) -> (forall ts. Foo ts) -> x
05:22:38 × Athas quits (athas@2a01:7c8:aaac:1cf:885f:6d75:b55f:82a8) (Quit: ZNC 1.8.2 - https://znc.in)
05:22:54 Athas joins (athas@2a01:7c8:aaac:1cf:7de4:bc5c:7241:d6d9)
05:24:55 vicfred_ joins (~vicfred@static-198-54-131-72.cust.tzulo.com)
05:25:30 × falafel_ quits (~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 264 seconds)
05:27:53 × schuelermine quits (~schuelerm@user/schuelermine) (Ping timeout: 264 seconds)
05:27:53 chisui joins (~chisui@200116b866065d0037bb6f0935c2f6da.dip.versatel-1u1.de)
05:28:22 × vicfred quits (~vicfred@user/vicfred) (Ping timeout: 264 seconds)
05:30:11 <hololeap> I did just find a typo, but it seems like no matter what I do here I end up with errors like this: Could not deduce: ts2 ~ ts from the context: ts1 ~ 'Node '(r, a) ts
05:30:18 × myShoggoth quits (~myShoggot@97-120-89-117.ptld.qwest.net) (Ping timeout: 264 seconds)
05:30:50 × vicfred_ quits (~vicfred@static-198-54-131-72.cust.tzulo.com) (Quit: Leaving)
05:34:15 pe200012_ joins (~pe200012@120.236.162.14)
05:34:30 × pe200012 quits (~pe200012@119.131.208.84) (Ping timeout: 264 seconds)
05:34:36 × shiraeeshi quits (~shiraeesh@109.166.59.30) (Ping timeout: 268 seconds)
05:35:17 × chisui quits (~chisui@200116b866065d0037bb6f0935c2f6da.dip.versatel-1u1.de) (Quit: Client closed)
05:36:22 × xff0x_ quits (~xff0x@2001:1a81:52ca:4f00:908c:1e58:afd0:4053) (Ping timeout: 244 seconds)
05:36:55 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
05:37:18 xff0x_ joins (~xff0x@2001:1a81:52ca:4f00:5ed9:a747:2841:c1b7)
05:39:27 mustafa joins (~mustafa@rockylinux/releng/mstg)
05:40:48 michalz joins (~user@185.246.204.45)
05:41:51 chomwitt joins (~Pitsikoko@2a02:587:dc02:b00:b16c:5166:feb8:97d5)
05:43:37 Bartosz joins (~textual@24.35.90.211)
05:43:37 × Bartosz quits (~textual@24.35.90.211) (Client Quit)
05:44:41 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 264 seconds)
05:45:19 <hololeap> ok, here's a question that should get to the crux of the issue: if I have a heterogeneous list of types with a Show instance, how can I convert it to a regular list of type [String] ?
05:45:46 <hololeap> *each type in the heterogeneous list has a Show instance
05:47:47 <hololeap> data HList (ts :: [Type]) where ; HNil :: HList '[] ; (:-:) :: Show t => t -> HList ts -> HList (t ': ts)
05:48:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
05:51:33 Bartosz joins (~textual@24.35.90.211)
05:55:05 nschoe joins (~quassel@91-162-58-134.subs.proxad.net)
05:57:02 × beka quits (~beka@104.193.170-254.PUBLIC.monkeybrains.net) (Ping timeout: 244 seconds)
05:57:14 <int-e> hololeap: https://paste.debian.net/1199557/ ...that doesn't seem to raise any difficulties
05:58:20 <int-e> (well, the function is terribly named)
05:59:51 × nschoe quits (~quassel@91-162-58-134.subs.proxad.net) (Ping timeout: 272 seconds)
06:00:34 <Bartosz> dy: I thought about it and I think real world is not a perfect model for functors. A functor can contain an arbitrary type inside, so as a container it has to be enormous. It must be able to hold an aircraft carrier, the sun, the galaxy, etc.
06:00:41 Guest6538 joins (~Guest65@2400:8902::f03c:92ff:fe60:98d8)
06:01:10 <Guest6538> I have a simple Parsec question, how to filter comment on this code https://paste.ubuntu.com/p/tSbwNBNxhw/
06:02:03 <int-e> hololeap: fromHListWith :: (forall a. Show a => a -> b) -> HList ts -> [b] <--this type may be more to the point.
06:02:03 <Guest6538> it parses something like "a=b" is ok, but I'd like to ignore like "--comment"
06:03:02 vicentius joins (~vicentius@user/vicentius)
06:04:49 <dy> Bartosz: so functors are hammerspace :p
06:04:59 × amk quits (~amk@176.61.106.150) (Ping timeout: 252 seconds)
06:05:53 amk joins (~amk@176.61.106.150)
06:08:46 <hololeap> hm, actually my original idea seems to work without the (forall ts. ...) surrounding the tree and forest data types
06:09:49 × vicentius quits (~vicentius@user/vicentius) (Quit: Leaving)
06:11:28 manicennui joins (uid349235@id-349235.tinside.irccloud.com)
06:15:34 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
06:15:42 <hololeap> dy: I think comonads are hammerspace. those are things you can always pull something out of
06:16:24 <dminuoso> Guest6538: https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec-Token.html
06:18:19 <dminuoso> Guest6538: Alternatively you can just reimplement the `space` combinator from megaparsec, it's really trivial
06:18:43 <dminuoso> And adopt the rule that you always use `space` before or after (pick one!) each lexeme
06:20:54 <dy> More concretely (hah) you can also just parse a CST (concrete syntax tree) first and then map it to the AST you want.
06:21:26 <dy> The distinction with a CST is that there exists a bijection from it to/from the original source.
06:21:38 danso joins (~danso@23-233-111-52.cpe.pppoe.ca)
06:21:40 dyeplexer joins (~dyeplexer@user/dyeplexer)
06:22:10 nschoe joins (~quassel@91-162-58-134.subs.proxad.net)
06:22:24 <dminuoso> Mmm, usually a CST does not contain whitespace or comments.
06:24:09 <Guest6538> dminuoso, can I just use parsec to implement that? I don't install megaparsec yet
06:24:13 <dminuoso> Guest6538: Yes.
06:24:20 <dy> They don't contain whitespace but they do contain token positions you could recreate the whitespace from
06:24:26 <dminuoso> https://hackage.haskell.org/package/megaparsec-9.0.1/docs/src/Text.Megaparsec.Lexer.html#space
06:24:31 <dy> Comments otoh are usually in CSTs, at least in my e Irwin en
06:24:31 × Bartosz quits (~textual@24.35.90.211) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:24:35 <dy> My experience*
06:26:13 <hololeap> hm, here's an interesting one: a class function where instances occasionally need extra arguments passed in, in order to produce the desired output.
06:26:41 <dy> hololeap: as an example of...?
06:27:01 × nschoe quits (~quassel@91-162-58-134.subs.proxad.net) (Ping timeout: 268 seconds)
06:27:14 <hololeap> I'm just thinking of ways to implement this
06:27:26 <dy> I missed the context/not in my backlog
06:27:34 <hololeap> no context :p
06:27:45 <dy> What are you trying to implement?
06:27:55 <hololeap> what I just described
06:28:14 <dy> Do you mean class as in typeclass?
06:28:18 <dy> Or like more traditional class?
06:28:23 <hololeap> no, a typeclass
06:28:32 <dy> I'm reminded of how printf works in Haskell
06:28:51 <hololeap> hm, yeah that should be a good example to look at
06:29:23 nschoe joins (~quassel@91-162-58-134.subs.proxad.net)
06:29:57 <dy> The trick there is recursion at the instance definition level I believe
06:30:34 <dy> But I don't think Printf is actually properly type safe.
06:30:55 leeb_ joins (~leeb@KD111239153130.au-net.ne.jp)
06:30:59 <dy> Would require dependent types to be properly type safe I think.
06:31:16 cheater1__ joins (~Username@user/cheater)
06:31:20 lortabac joins (~lortabac@2a01:e0a:541:b8f0:bdf8:f228:7df7:147f)
06:31:31 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
06:31:34 <hololeap> I have 23 language extensions enabled in my module right now :p
06:31:37 cheater1__ is now known as cheater
06:31:59 <dy> I think I heard something about dependent typing coming to mainline GHC?
06:32:03 <dy> I feel like that's... probably going to be messy.
06:32:12 <dy> Refinement types seem a better Pareto optimal choice.
06:32:25 <hololeap> nah
06:32:30 Toast52 joins (~Toast52@151.192.167.120)
06:32:48 <Guest6538> why there's char in parsec, but not string? use satisfy to match a string?
06:32:54 <dy> Refinement types are a bit more intuitive and map nicely to more traditional notions of code contracts.
06:32:55 <hololeap> most of them are quite safe, except maybe AllowAmbiguousTypes and NoMonomorphismRestriction
06:33:29 <dy> There comes a day in every Haskell programmer's life when they just have to give up and enable NoMonomorphismRestricfion :p
06:33:35 × leeb quits (~leeb@KD111239155018.au-net.ne.jp) (Ping timeout: 252 seconds)
06:33:35 <dy> Perhaps for reasons they do not understand.
06:33:44 mustafa joins (~mustafa@rockylinux/releng/mstg)
06:33:47 <dminuoso> Uh. No?
06:34:01 <dy> It's a joke.
06:34:12 <[exa]> Guest6538: https://hackage.haskell.org/package/megaparsec-9.0.1/docs/Text-Megaparsec-Char.html#v:string ?
06:34:19 <dy> Just one of those extensions I've seen people enable blindly after seeing error messages mentioning it a lot.
06:34:26 <Guest6538> [exa] I mean in parsec
06:34:30 <dminuoso> Curious, I have not seen this behavior.
06:34:42 <[exa]> Guest6538: uh sorry I'm aliasing the names automatically now :D
06:34:43 ru0mad joins (~ru0mad@82-64-17-144.subs.proxad.net)
06:34:45 <dminuoso> Guest6538: https://hackage.haskell.org/package/parsec-3.1.14.0/docs/Text-Parsec-Char.html#v:string
06:35:05 <Guest6538> ok, my mistake
06:35:06 × nschoe quits (~quassel@91-162-58-134.subs.proxad.net) (Ping timeout: 264 seconds)
06:35:22 <[exa]> yap there it is :]
06:36:24 <[exa]> even if not, you could easily construct it, roughly as `traverse char`
06:37:20 neceve joins (~quassel@2a02:c7f:607e:d600:a95a:ecd2:e57a:3130)
06:37:58 <dminuoso> string s = tokens show updatePosString s
06:38:29 × mustafa quits (~mustafa@rockylinux/releng/mstg) (Ping timeout: 272 seconds)
06:38:32 <dminuoso> If you naively just parse each character, you'll get horrid error messages.
06:38:41 sondre joins (~sondrelun@cm-84.212.100.140.getinternet.no)
06:39:11 azeem joins (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it)
06:39:26 <dminuoso> Rather than `expected "foobar"`, it would tell you `expected 'b'`, which for more complex strings is not going to be very helpful
06:39:56 <dminuoso> And if there's any <|>, you might not even know what's going on if the character could come from any of the choices.
06:40:22 <[exa]> yeah that's the "roughly" warning. :]
06:40:37 × ru0mad quits (~ru0mad@82-64-17-144.subs.proxad.net) (Quit: leaving)
06:41:39 <[exa]> kinda thinking, why'd they have the "show" in the definition? doesn't it totally obliterate any unicode in the error messages?
06:42:46 × pe200012_ quits (~pe200012@120.236.162.14) (Ping timeout: 264 seconds)
06:45:14 × rubin55 quits (sid175221@id-175221.stonehaven.irccloud.com) ()
06:45:35 rubin55 joins (sid175221@id-175221.stonehaven.irccloud.com)
06:45:56 × rubin55 quits (sid175221@id-175221.stonehaven.irccloud.com) (Client Quit)
06:46:24 rubin55 joins (sid175221@id-175221.stonehaven.irccloud.com)
06:46:32 holy_ joins (~h01y_b4z0@2400:adc1:178:c800:9e45:76a9:57f2:1665)
06:47:24 Cubic joins (~hannesste@ip5f5be453.dynamic.kabel-deutschland.de)
06:50:41 <Guest6538> comment = string "--" *> (manyTill anyChar newline)
06:50:47 <Guest6538> newSpaces = spaces <|> comment
06:51:27 mc47 joins (~yecinem@89.246.239.190)
06:52:08 <hololeap> dy, is this what you were referring to by refinement types? https://hackage.haskell.org/package/refined
06:52:16 <dy> No, think Liquid Haskell
06:52:19 <int-e> > let x --> y = y in 2 --> 4
06:52:20 <lambdabot> 4
06:52:23 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:52:24 <Guest6538> Expected type: ParsecT String u Data.Functor.Identity.Identity () ; Actual type: ParsecT String u Data.Functor.Identity.Identity [Char]; In the second argument of ‘(<|>)’,
06:52:28 <hololeap> I've never used it
06:52:42 <Guest6538> where is wrong?
06:52:59 <Axman6> what is the type of: comment, spaces and <|>
06:53:24 <int-e> :t void
06:53:24 <dy> It looks like that refined package is a similar idea? Not entirely clear. Haven't seen it befofez
06:53:25 <lambdabot> Functor f => f a -> f ()
06:53:32 beka joins (~beka@104.193.170-254.PUBLIC.monkeybrains.net)
06:53:37 <Axman6> int-e: we'll get to that ;)
06:53:38 <Guest6538> oh, <|> ask the same type
06:53:42 <int-e> Axman6: I know
06:54:17 <dy> Untyped comments? In my Haskell?
06:54:26 <dy> "It's more likely than you think!"
06:55:03 <int-e> dy: "untyped", hmmmm. Sometimes it's better to not type a comment and let the code speak for itself.
06:55:28 <int-e> @where semantics
06:55:28 <lambdabot> I know nothing about semantics.
06:55:40 <dminuoso> That should be a quote.
06:55:52 chele joins (~chele@user/chele)
06:56:42 × azeem quits (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it) (Quit: Quit)
06:56:51 azeem joins (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it)
06:58:02 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
06:58:23 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
06:59:29 <hololeap> I also haven't seen it befofez
07:02:34 <Guest6538> comment = string "--" *> (manyTill anyChar newline) $> ()
07:02:40 <Guest6538> newSpaces = spaces <|> comment
07:02:55 <Guest6538> dminuoso use this newSpaces intead of spaces is ok?
07:05:22 <dminuoso> Guest6538: Its not needed, `spaces` already covers this need.
07:06:04 <dminuoso> Guest6538: The idea is that `space` takes three lexers/consumers. One that consumes regular whitespace, one that consumes line comments and one that consumes block comments.
07:06:12 <dminuoso> So if we look at the implementation
07:06:41 <dminuoso> space sp line block = skipMany (choice [sp, line, block])
07:07:00 <dminuoso> You can see this just munches all contiguous whitespace, line and block comments
07:07:29 <dminuoso> Ah naming confusion
07:08:05 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
07:08:18 <dminuoso> Guest6538: Its not enough
07:08:39 <Guest6538> dminuoso, but this `spaces` is from megaparsec?
07:08:55 <dminuoso> Guest6538: So lets avoid confusion now:
07:09:00 <dminuoso> I propose a simple combinator called:
07:09:13 <Guest6538> dminuoso what if the comment character is not '--' but '#' or '//'?
07:09:21 <dminuoso> munch sp line block = skipMany (choice [sp, line, block])
07:09:41 <dminuoso> The implementation of `munch` mimics the implementation of `space` from megaparsec, it's unlike `space` from parsec.
07:09:47 gehmehgeh joins (~user@user/gehmehgeh)
07:10:01 <dminuoso> Guest6538: This combinator is almost like your `newSpaces` but differs chiefly in 3 aspects.
07:10:13 <dminuoso> 1) Your combinator wont work if there's any further whitespace after the comment
07:10:23 <dminuoso> 2) Your combinator wont accept block comments (might be important to you or not)
07:10:34 <dminuoso> 3) Your combinator is fixed rather than parametrized
07:11:02 × tonyday quits (~user@202-65-93-249.ip4.superloop.com) (Remote host closed the connection)
07:12:13 <dminuoso> The idea is that you'd write something like `sc = munch spaces lineComment blockComment where lineComment = string "--" *> manyTill anyChar newline; blockComment = string "{-" *> manyTill anyChar (string "-}")`
07:12:25 jakzale joins (uid499518@id-499518.charlton.irccloud.com)
07:12:28 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
07:13:21 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
07:14:20 thiross joins (~user@173.242.113.143.16clouds.com)
07:14:28 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
07:14:43 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
07:17:43 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
07:17:54 gehmehgeh joins (~user@user/gehmehgeh)
07:17:57 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
07:18:53 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
07:20:37 xprlgjf joins (~gavin@60.27.93.209.dyn.plus.net)
07:22:41 <Guest6538> dminuoso, I should copy `spaces` and `lexeme` from https://hackage.haskell.org/package/megaparsec-9.0.1/docs/src/Text.Megaparsec.Lexer.html#space ?
07:25:51 dpl_ joins (~dpl@77-121-78-163.chn.volia.net)
07:26:25 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
07:26:39 × ixlun quits (~user@109.249.184.235) (Remote host closed the connection)
07:26:49 Shaeto joins (~Shaeto@94.25.234.213)
07:28:33 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
07:35:04 riatre joins (~quassel@2001:310:6000:f::5198:1)
07:36:07 × riatre_ quits (~quassel@2001:310:6000:f::5198:1) (Ping timeout: 272 seconds)
07:36:23 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
07:36:32 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
07:36:35 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
07:36:53 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
07:38:33 × holy_ quits (~h01y_b4z0@2400:adc1:178:c800:9e45:76a9:57f2:1665) (Ping timeout: 268 seconds)
07:38:35 × river quits (~river@tilde.team/user/river) (Quit: Leaving)
07:41:06 × thiross quits (~user@173.242.113.143.16clouds.com) (Ping timeout: 264 seconds)
07:41:14 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
07:44:32 thiross joins (~user@173.242.113.143.16clouds.com)
07:45:28 <albet70> is there bot here?
07:45:32 <dminuoso> Yes.
07:45:58 <albet70> :t id
07:45:59 <lambdabot> a -> a
07:46:14 <dminuoso> We also have yahb, which can be triggered by %
07:46:16 <dminuoso> % :t id
07:46:16 <yahb> dminuoso: a -> a
07:46:36 <albet70> what it short for?
07:46:41 <dminuoso> Yet another haskell bot
07:46:55 <albet70> :)
07:47:04 <dminuoso> yahb exposes ghci directly, while lambdabot is way more special and multi purpose
07:47:21 <dminuoso> lambdabot has stuff like @pl
07:47:40 <albet70> and hoogle bot?
07:47:52 <dminuoso> Mmm, I think lambdabot can hoogle
07:47:56 <dminuoso> @hoogle a -> a
07:47:56 <lambdabot> Prelude id :: a -> a
07:47:56 <lambdabot> Data.Function id :: a -> a
07:47:56 <lambdabot> GHC.Base breakpoint :: a -> a
07:48:03 <albet70> ok
07:48:19 schuelermine joins (~anselmsch@user/schuelermine)
07:48:46 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:49:07 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:52:04 × Athas quits (athas@2a01:7c8:aaac:1cf:7de4:bc5c:7241:d6d9) (Quit: ZNC 1.8.2 - https://znc.in)
07:52:14 Athas joins (athas@sigkill.dk)
07:52:40 × Flonk quits (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (Quit: Ping timeout (120 seconds))
07:53:06 Flonk joins (~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
07:54:32 shryke joins (~shryke@190.43.6.93.rev.sfr.net)
07:56:02 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
07:56:21 shryke_ joins (~shryke@91.103.43.254)
07:56:39 bfrk joins (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de)
07:58:01 nschoe joins (~quassel@178.251.84.79)
07:58:05 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
07:58:45 brandonh joins (~brandonh@151.44.69.241)
07:59:06 × shryke quits (~shryke@190.43.6.93.rev.sfr.net) (Ping timeout: 264 seconds)
07:59:35 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
08:03:27 Bartosz joins (~textual@24.35.90.211)
08:05:04 dhil joins (~dhil@195.213.192.85)
08:07:28 hendursa1 joins (~weechat@user/hendursaga)
08:07:36 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:08:11 × beka quits (~beka@104.193.170-254.PUBLIC.monkeybrains.net) (Ping timeout: 252 seconds)
08:08:35 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
08:08:42 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
08:08:58 × hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
08:10:07 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 252 seconds)
08:12:30 ikex joins (~ash@user/ikex)
08:13:56 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
08:16:54 × azeem quits (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it) (Remote host closed the connection)
08:17:03 azeem joins (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it)
08:19:49 × guest0123 quits (~aaron@2601:602:a080:fa0:21da:7ddc:2cc6:a10c) (Ping timeout: 272 seconds)
08:21:23 × thiross quits (~user@173.242.113.143.16clouds.com) (Ping timeout: 252 seconds)
08:21:37 thiross joins (~user@173.242.113.143.16clouds.com)
08:23:51 fendor_ joins (~fendor@178.165.178.245.wireless.dyn.drei.com)
08:25:23 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:26:42 × fendor quits (~fendor@178.115.56.93.wireless.dyn.drei.com) (Ping timeout: 264 seconds)
08:27:54 × Bartosz quits (~textual@24.35.90.211) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:33:22 holy_ joins (~h01y_b4z0@2400:adc1:178:c800:9e45:76a9:57f2:1665)
08:35:05 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 264 seconds)
08:36:23 fendor_ is now known as fendor
08:36:46 × xff0x_ quits (~xff0x@2001:1a81:52ca:4f00:5ed9:a747:2841:c1b7) (Ping timeout: 264 seconds)
08:37:30 xff0x_ joins (~xff0x@2001:1a81:52ca:4f00:158d:7c0b:fd80:1302)
08:37:37 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds)
08:39:51 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
08:40:41 × schuelermine quits (~anselmsch@user/schuelermine) (Quit: WeeChat 3.1)
08:43:14 <Taneb> I dislike Yesod-style pervasive quasiquotes :(
08:45:02 <Hecate> Taneb: I managed to avoid persistent, working with Yesod
08:45:11 <Hecate> but uh, the route declaration still resists :<
08:46:24 × Guest6538 quits (~Guest65@2400:8902::f03c:92ff:fe60:98d8) (Quit: Client closed)
08:47:08 <albet70> I use scotty
08:47:14 <albet70> it's more easy to ise
08:47:16 <albet70> ise
08:50:05 × azeem quits (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it) (Read error: Connection reset by peer)
08:52:14 × dyeplexer quits (~dyeplexer@user/dyeplexer) (Remote host closed the connection)
08:53:49 × holy_ quits (~h01y_b4z0@2400:adc1:178:c800:9e45:76a9:57f2:1665) (Ping timeout: 272 seconds)
08:56:06 wanagnuj joins (~wanagnuj@101.95.97.158)
08:56:26 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
08:57:25 kuribas joins (~user@ptr-25vy0i96apm5u45pamz.18120a2.ip6.access.telenet.be)
08:58:38 <merijn> Friends don't let friends use persistent >.>
08:59:29 <kuribas> merijn: why not?
09:00:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
09:00:59 <merijn> The API is incredibly hard to use safely/correctly, it makes it incredibly tedious to do non-trivial operations and in general (in the long run) just seems to produce more work than it saves
09:01:33 <merijn> Oh, also easy to leak resources
09:01:38 matsurago joins (~matsurago@nttkyo1723091.tkyo.nt.ngn.ppp.infoweb.ne.jp)
09:01:59 <merijn> Because it was designed for an older version of conduit (that guaranteed prompt finalisation), but conduit no longer does that
09:02:17 azeem joins (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it)
09:02:41 × ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Ping timeout: 264 seconds)
09:03:10 boxscape joins (~boxscape@user/boxscape)
09:03:31 ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net)
09:03:53 × dpl_ quits (~dpl@77-121-78-163.chn.volia.net) (Ping timeout: 264 seconds)
09:04:14 <Taneb> Sadly I am stuck with persistent
09:04:37 <boxscape> % type A :: forall a -> (Allowed a ~ True) => Type; data A a = A a deriving Show
09:04:37 <yahb> boxscape: ; <interactive>:14:45: error:; Ambiguous occurrence `Type'; It could refer to; either `Language.Haskell.TH.Type', imported from `Language.Haskell.TH' (and originally defined in `Language.Haskell.TH.Syntax'); or `Data.Kind.Type', imported from `Data.Kind' (and originally defined in `GHC.Types')
09:04:42 <Taneb> My objection is quasiquotes mean I have to learn another, poorly documented, language, to do anythiing
09:04:43 <boxscape> err
09:04:57 <boxscape> % type family Allowed a where Allowed Int = True; Allowed _ = False
09:04:57 <yahb> boxscape:
09:04:58 <boxscape> % type A :: forall a -> (Allowed a ~ True) => *; data A a = A a deriving Show
09:04:58 <yahb> boxscape:
09:05:02 <boxscape> % A "not allowed"
09:05:02 <yahb> boxscape: A "not allowed"
09:05:09 <boxscape> this does not seem like it should work?
09:05:09 dunj3 joins (~dunj3@2001:16b8:3059:9800:5856:7ab4:1dd8:26ae)
09:06:27 <merijn> Taneb: Same
09:07:02 <merijn> Taneb: But the fact that I have a considerable amount of commits in persistent to keep my own stuff working is why I can't recommend others get started with it :p
09:07:31 <merijn> My advice would be: Just use SQL >.>
09:09:18 <tdammers> SQL is a pretty reasonable DSL for SQL
09:09:28 lavaman joins (~lavaman@98.38.249.169)
09:10:33 <merijn> SQL also really scratches my "purely functional language with a basis in math" itch :p
09:10:51 <nshepperd> boxscape: i don't think class constraints in kinds work, or mean anything
09:11:05 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
09:11:11 cheater1__ joins (~Username@user/cheater)
09:11:11 cheater1__ is now known as cheater
09:11:21 <boxscape> nshepperd I was under the impression that that implies to *class* constraints but not equality constraints, but I might be wrong
09:11:36 Torro joins (Torro@gateway/vpn/protonvpn/torro)
09:12:12 × matsurago quits (~matsurago@nttkyo1723091.tkyo.nt.ngn.ppp.infoweb.ne.jp) (Quit: Leaving)
09:12:16 <boxscape> % type B :: forall a -> Eq a => *; data B a = B a deriving Show
09:12:16 <yahb> boxscape: ; <interactive>:20:11: error:; * Illegal constraint in a kind: forall a -> Eq a => *; * In a standalone kind signature for `B': forall a -> Eq a => *
09:12:26 <boxscape> nshepperd for what it's worth it doesn't say that the equality constraint is illegal
09:12:30 <nshepperd> hm
09:14:05 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
09:14:05 × azeem quits (~azeem@dynamic-adsl-84-220-228-254.clienti.tiscali.it) (Ping timeout: 264 seconds)
09:14:38 <boxscape> % type C :: forall a -> (a ~ Int) => *; data C a = C a deriving Show -- (there's actually no need to bring type families into this)
09:14:38 <yahb> boxscape:
09:15:00 × wei2912 quits (~wei2912@112.199.250.21) (Quit: Lost terminal)
09:15:32 <nshepperd> % :t A
09:15:32 <yahb> nshepperd: forall {a} {ev :: Allowed a ~ 'True}. a -> A a
09:15:48 <boxscape> hm that doesn't look like a constraint
09:16:20 <maerwald> merijn: my suspicion is that it's laziness to learn SQL... which, I agree, is tedious if you don't use raw SQL a lot. It's easy to forget the details, because none of it is intuitive.
09:17:54 <dminuoso> maerwald: But with persistent you have to learn SQL *and* some poorly documented DSL ontop.
09:18:19 <maerwald> Yeah, which is why I usually re-learn SQL
09:18:28 <kuribas> learning a DSL or language in order not to have to understand SQL is a terrible idea.
09:18:33 <dminuoso> It's my experience, that any reasonable use of an "sql abstraction layer" eventually leads to you thinking of queris in terms of SQL, and then figuring out how to write the DSL that produces the expected SQL
09:18:51 <nshepperd> % :t A "not allowed"
09:18:51 <yahb> nshepperd: A String
09:19:00 <dminuoso> nshepperd: cute!
09:19:05 <maerwald> But if I don't use SQL for 1-2 years, most of it is gone from my brain
09:19:11 <dminuoso> So is persistent. :P
09:19:17 <kuribas> dminuoso: which is why my DSL is pretty much 1-1 with SQL.
09:19:24 <nshepperd> not sure that what that is but i guess it can't be a real constraint since A isn't a GADT
09:19:43 <boxscape> I wonder if GHC just instantiates that argument with `Any` and that's that
09:20:01 <kuribas> dminuoso: except that I disallow right joins in the typed layer because it makes null checking very hard.
09:20:37 × brandonh quits (~brandonh@151.44.69.241) (Quit: brandonh)
09:20:43 jumper149 joins (~jumper149@80.240.31.34)
09:21:00 <boxscape> % data D where D :: forall {a} {ev :: a ~ Int}. a -> C a
09:21:00 <yahb> boxscape: ; <interactive>:34:37: error:; * Expected a type, but `a ~ Int' has kind `Constraint'; * In the kind `a ~ Int'; In the definition of data constructor `D'; In the data declaration for `D'
09:21:03 <boxscape> :(
09:21:03 × xff0x_ quits (~xff0x@2001:1a81:52ca:4f00:158d:7c0b:fd80:1302) (Ping timeout: 272 seconds)
09:21:41 <nshepperd> seems possible. a type can't carry evidence anyway so Any is as good as... anything there
09:21:41 xff0x_ joins (~xff0x@2001:1a81:52ca:4f00:8a7f:8182:f670:e586)
09:21:42 <jumper149> Hi, What are currently the best tools for dead code detection regarding Haskell.
09:21:53 azeem joins (~azeem@dynamic-adsl-78-13-240-225.clienti.tiscali.it)
09:21:57 <maerwald> the new weeder
09:22:15 <maerwald> https://github.com/ocharles/weeder
09:22:19 <jumper149> https://hackage.haskell.org/package/weeder ?
09:22:43 <maerwald> yep, since version 2
09:25:01 <jumper149> maerwald: Ok this is looking perfect, let's hope it works well :)
09:25:45 × shryke_ quits (~shryke@91.103.43.254) (Quit: WeeChat 3.1)
09:25:52 <maerwald> dminuoso: yeah... there are only two ways to learn: 1. build an intuition and keep that (and be able to deconstruct the intuition into its components if needed), 2. mess up really hard and learn through PTSD. Frameworks try to avoid both.
09:27:17 × ikex quits (~ash@user/ikex) (Ping timeout: 264 seconds)
09:28:07 shryke joins (~shryke@91.103.43.254)
09:30:13 <dy> maerwald: bash, the only language named after how you learn it!
09:30:19 <dy> Bashing your head against hard surfaces.
09:30:20 xff0x_ is now known as xff0x
09:30:32 <maerwald> dy: yeat, confusingly, I remember a lot of bash pitfalls
09:30:42 <maerwald> because they delete your files and break your environment :)
09:31:00 <dy> Amen to the SQL thing though
09:31:18 <dy> While I do like some ORMs and such, "just write raw SQL" is honestly usually the better approach in the long run
09:31:24 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
09:31:39 <dy> Not to mention many ORMs make even basic n+1 type query optimization a pain
09:32:05 <maerwald> It's also embarrassing to have done backend dev for several years and not be able to write a correct SQL statement without google... but yeah, can you blame us?
09:32:14 <boxscape> nshepperd dumping core reveals it actually passes UnsafeRefl, at least in HEAD, and unsafely coerces a representational equality in 8.10
09:32:23 <dy> Even more infuriating is how frameworks seem to just be completely blind to (materialized) views, triggers, etc
09:32:32 <dy> Or provide no means to handle them in migrations.
09:32:32 <kuribas> maerwald: erm yes? Just grab a book on SQL? Read the mysql (or postgresql) manual?
09:32:40 qbt joins (~edun@user/edun)
09:32:55 <dy> So you have to basically give up your framework's migrations or substantial features if you want to use views, triggers, in-DB constraints etc
09:32:57 <kuribas> maerwald: also, goole to look up some details is fine IMO.
09:33:00 <maerwald> kuribas: when? During saturdays when I'm drunk?
09:33:23 <kuribas> maerwald: for example :)
09:33:26 <dy> Even though that's way better in general as it means you don't have to worry reproducing the same sanity checks and cleaning everywhere
09:34:36 <dy> But yeah stuff that should be easy because of SQL being the way it is are made hard by an ORM layer.
09:34:52 <dy> Like using indices, views, etc to optimize common queries.
09:34:55 cheater1__ joins (~Username@user/cheater)
09:35:05 <dy> Even Django's ORM which is generally pretty good just throws up its hands at views.
09:35:05 × cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds)
09:35:06 cheater1__ is now known as cheater
09:35:23 <kuribas> dy: what's the problem with views?
09:35:37 <dy> There's no real first class support for them.
09:35:38 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 252 seconds)
09:35:49 <dy> You have to basically trick Django into thinking they're normal models.
09:36:13 <dy> And you get no support with migrations and end up with parallel setup code.
09:36:24 <maerwald> I've done django too and ended up doing raw sql pretty quickly
09:36:41 <dy> You have to fake the migrations and then manually write the raw SQL into them
09:36:44 <maerwald> There it was because of abyssmal performance
09:37:07 <dy> prefetch_related + Q
09:37:10 <dy> It's essential.
09:37:24 <dy> Otherwise you'll get 1+N queries everywhere.
09:37:28 <maerwald> People end up loading huge sets into memory and do stuff there, because they don't understand what the ORM does
09:37:33 <dy> Django-debug-toolbar thankfully has a nice query inspector panel.
09:37:42 dminuoso finds that for the majority of problems, handwritten SQL is faster to write and you dont have a bunch of magic semantics in your ORM layer with automatic query twisting, caching, etc.
09:37:50 <dminuoso> And you get predictable performance
09:37:52 <dy> Yeah I tend to agree
09:37:55 <boxscape> % :t C "test" :: C String -- is there any way to actually write the type of `C "test"`?
09:37:55 <yahb> boxscape: ; <interactive>:1:13: error:; * Couldn't match kind `[Char]' with `Int'; Expected: Int; Actual: String; * In an expression type signature: C String; In the expression: C "test" :: C String
09:38:11 <sshine> I remember doing a database join in LINQ some years ago where the predicate was '<' rather than '='... it was possible, but hacky.
09:38:12 <boxscape> % C "test"
09:38:12 <yahb> boxscape: C "test"
09:38:29 <dy> LINQ is just janky monads :p
09:38:35 <dy> Oh I'm sorry "computation expressions"
09:38:38 <sshine> mernerds
09:39:14 <kuribas> dminuoso: this. Orm's solve an imaginary problem
09:39:16 <dminuoso> Is there a way to ruthlessly exit from a Haskell program? exitWith relies on exceptions which are caught on their way up in my program.
09:39:23 <dminuoso> This is just for debugging purposes. :)
09:39:48 Feuermagier joins (~Feuermagi@user/feuermagier)
09:39:55 <boxscape> cause a ghc panic?
09:40:00 × Kaipi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
09:40:24 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
09:40:27 <boxscape> or a segfault
09:40:29 <dminuoso> Mmm. oh well, I guess I could use unsafeCoerce ..
09:40:48 <dminuoso> Is exit(2) not exposed to Haskell-land?
09:40:57 × mc47 quits (~yecinem@89.246.239.190) (Remote host closed the connection)
09:41:17 <maerwald> https://hackage.haskell.org/package/unix-2.7.2.2/docs/System-Posix-Process.html#v:exitImmediately
09:41:35 <maerwald> foreign import ccall unsafe "exit" -- looks good
09:41:51 <dminuoso> maerwald: Ah that looks right, thanks.
09:43:00 <kuribas> merijn: I don't think my library has those problems.
09:43:47 xwx joins (~george@user/george)
09:43:55 <kuribas> merijn: if conduit doesn't finalize, then how do you finalize?
09:43:58 <dminuoso> Nobody thinks their library has problems.
09:44:00 <dminuoso> :-)
09:44:06 dpl_ joins (~dpl@77-121-78-163.chn.volia.net)
09:44:26 <maerwald> kuribas: wait for streamly to get SQL support :p
09:44:27 <kuribas> dminuoso: not until proven otherwise :)
09:44:43 <Taneb> kuribas: sometimes even then ;)
09:44:43 <xwx> does anyone know if you can use a preprocessor (specifically lhs2tex) with the haskell language server?
09:44:59 japh joins (~scp1@user/japh)
09:45:52 <kuribas> dminuoso: also, I haven't made the library official since I still make changes as I use it :)
09:46:22 <boxscape> nshepperd erm I take my last statement about UnsafeRefl back, that's in the Core of any expression in ghci
09:48:10 _xft0 joins (~root@185.234.208.208.r.toneticgroup.pl)
09:48:46 × chomwitt quits (~Pitsikoko@2a02:587:dc02:b00:b16c:5166:feb8:97d5) (Ping timeout: 264 seconds)
09:52:34 Katarushisu joins (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net)
09:54:06 <boxscape> % f :: forall a . (a ~ Int) => C a -> Bool; f = undefined -- this error message surprises me as well tbh
09:54:06 <yahb> boxscape: ; <interactive>:41:30: error:; * Couldn't match expected kind `Int' with actual kind `a'; `a' is a rigid type variable bound by; `forall a. (a ~ Int) => C a -> Bool'; at <interactive>:41:13; * In the type signature: f :: forall a. (a ~ Int) => C a -> Bool
09:56:48 haskman joins (~haskman@171.48.41.1)
10:01:19 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
10:04:29 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
10:04:56 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:05:53 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Ping timeout: 252 seconds)
10:06:22 Guest31 joins (~textual@cpc146410-hari22-2-0-cust124.20-2.cable.virginm.net)
10:06:53 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
10:08:18 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:08:33 × shryke quits (~shryke@91.103.43.254) (Ping timeout: 272 seconds)
10:08:46 satai joins (~satai@static-84-42-172-253.net.upcbroadband.cz)
10:10:32 Nahra joins (~user@static.161.95.99.88.clients.your-server.de)
10:11:47 × bgamari quits (~bgamari@2001:470:e438::1) (Quit: ZNC 1.8.1 - https://znc.in)
10:12:05 bgamari joins (~bgamari@72.65.101.148)
10:13:30 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
10:13:51 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:17:17 × Nahra quits (~user@static.161.95.99.88.clients.your-server.de) (Remote host closed the connection)
10:17:25 shryke joins (~shryke@91.103.43.254)
10:18:34 prite joins (~pritam@user/pritambaral)
10:19:02 Nahra joins (~user@static.161.95.99.88.clients.your-server.de)
10:23:57 × thiross quits (~user@173.242.113.143.16clouds.com) (Ping timeout: 272 seconds)
10:24:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
10:25:06 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:26:46 <boxscape> hah
10:26:47 <boxscape> % type C :: forall a -> (a ~ Int) => *; data C a = C a deriving Show
10:26:47 <yahb> boxscape:
10:26:54 <boxscape> as far as I can tell, this Show instance is impossible to write by hand
10:27:34 <boxscape> (barring, perhaps, unsafeCoerce)
10:28:16 <boxscape> though I'm not even sure that helps
10:30:10 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
10:30:14 <boxscape> you can write one for `C Int`, but not for `Show a => C a`, which the derived one is
10:30:17 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
10:30:24 cheater1__ joins (~Username@user/cheater)
10:30:25 cheater1__ is now known as cheater
10:30:46 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
10:31:09 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:31:34 chomwitt joins (~Pitsikoko@athedsl-20549.home.otenet.gr)
10:31:41 zeenk joins (~zeenk@2a02:2f04:a310:b600:b098:bf18:df4d:4c41)
10:34:10 pera joins (~pera@user/pera)
10:35:14 <boxscape> % :t show @(C _) -- well, this *claims* that it only works for C Int, however...
10:35:14 <yahb> boxscape: C Int -> String
10:35:15 <boxscape> % show (C "foo") -- this works just fine
10:35:15 <yahb> boxscape: "C \"foo\""
10:35:25 × hmmmas quits (~chenqisu1@183.217.202.217) (Quit: Leaving.)
10:35:47 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 272 seconds)
10:35:59 × Toast52 quits (~Toast52@151.192.167.120) (Ping timeout: 272 seconds)
10:36:25 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
10:36:43 × haskman quits (~haskman@171.48.41.1) (Quit: Going to sleep. ZZZzzz…)
10:37:07 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:37:19 <dminuoso> boxscape What is this `type C :: ` annotation?
10:37:37 <boxscape> dminuoso -XStandaloneKindSignatures, or do you mean this specific one?
10:37:41 × chomwitt quits (~Pitsikoko@athedsl-20549.home.otenet.gr) (Ping timeout: 272 seconds)
10:37:43 <dminuoso> I guess that's what I mean
10:37:45 <boxscape> ok
10:38:28 <dminuoso> boxscape: Is there a linkage between the choice of the type variable `a` in the standalone kind signature and the following declaration?
10:38:35 <dminuoso> % type C :: forall b -> (b ~ Int) => *; data C a = C a deriving Show
10:38:35 <yahb> dminuoso:
10:38:39 <boxscape> nope
10:38:49 <boxscape> I don't think ScopedTypeVariables interacts with this, either
10:39:01 <dminuoso> What is => ?
10:39:09 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 272 seconds)
10:39:13 <dminuoso> Dark magic here
10:39:14 <boxscape> same as ever, constraint quantifier
10:39:19 <dminuoso> Oh
10:39:34 <dminuoso> Ah hold on, this `forall b -> ` is a visible something something
10:39:38 <boxscape> yup
10:39:44 <boxscape> visible dependent quantification
10:39:48 <dminuoso> Yes.
10:40:03 <dminuoso> I recall the ghc proposal
10:40:23 <nshepperd> % :t C
10:40:23 <yahb> nshepperd: forall {b} {ev :: b ~ Int}. b -> C b
10:40:48 <dminuoso> % :t C String
10:40:48 <yahb> dminuoso: ; <interactive>:1:3: error:; * Data constructor not in scope: String; * Perhaps you meant one of these: `StringL' (imported from Language.Haskell.TH), variable `string' (imported from Text.Parsec), `Strict' (imported from Control.Lens)
10:40:51 <dminuoso> % :t C "foo"
10:40:51 <yahb> dminuoso: C String
10:40:58 <nshepperd> ???
10:41:17 <boxscape> % :k C String
10:41:17 <yahb> boxscape: (String ~ Int) => *
10:41:32 <dminuoso> {ev :: b ~ Int}
10:41:34 <dminuoso> What is that even saying?
10:41:41 <boxscape> err
10:42:01 <boxscape> pass a dictionary with an equality constraint?
10:42:11 <boxscape> (I'm kind of wondering where the ev name comes from)
10:42:22 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
10:42:24 <dminuoso> boxscape: wouldn't that rather be written as `b ~ Int =>`?
10:42:35 <boxscape> yeah but I guess that's sort of the same thing in core
10:42:40 <dminuoso> this thing is quantified over ev, whose type is (!) b ~ Int
10:42:44 <dminuoso> I have no clue what that means
10:43:09 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:43:09 <boxscape> I mean you can't write it, so it's questionable whether it means anything
10:43:16 <nshepperd> pass a promoted constraint evidence as a type variable, lol
10:43:24 haskman joins (~haskman@171.48.41.1)
10:43:24 <dminuoso> lol
10:44:12 <dminuoso> Well, but wouldnt I be able to write
10:44:19 <nshepperd> also how does it even refer to b when the type variables in the declaration didn't even match up
10:44:45 <dminuoso> nshepperd: that's not a problem
10:44:52 <boxscape> okay "ev" means "evidence"
10:45:10 <dminuoso> boxscape: So I guess your assumption about "pass a dictionary with an equality cosntraint" is right
10:45:15 thiross joins (~user@173.242.113.143.16clouds.com)
10:45:17 <dminuoso> Or it seems reasonable
10:45:21 <dminuoso> but the type signature still looks off
10:45:27 <boxscape> oh yeah absolutely
10:45:36 <nshepperd> except it's a promoted dictionary, which is nonsense
10:45:39 <dminuoso> as that should rahter read `forall b. b ~ Int => b -> C b`
10:46:06 hmmmas joins (~chenqisu1@183.217.202.217)
10:46:06 <dminuoso> Is this some subtle bug?
10:47:08 <boxscape> probably
10:47:12 <nshepperd> dminuoso: isn't it a problem? where is it getting that the type variable which has to be ~ Int, is the same type variable as the first parameter of C? that's not written anywhere
10:47:25 <dminuoso> nshepperd: its from the standalone signature
10:47:34 <dminuoso> % type C :: forall b -> (b ~ Int) => *; data C a = C a deriving Show
10:47:34 <yahb> dminuoso:
10:47:51 <nshepperd> right, b is not a
10:47:54 <dminuoso> boxscape: curious, is the visible dependent qualifier necessary? why cant we use `forall b.`?
10:47:58 <dminuoso> nshepperd: that's irrelevant
10:48:07 <dminuoso> nshepperd: its not in the same scope
10:48:14 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:48:18 <nshepperd> that doesn't help
10:48:25 <boxscape> nshepperd it's the same because it's the first parameter to C, in the standalone kind signature and in its definition
10:48:32 <dminuoso> similar to how you could write: `id :: forall a. a -> a; id @b c = c`
10:48:46 <boxscape> % type D :: forall b . (b ~ Int) => *; data D a = MkD a deriving Show
10:48:46 <yahb> boxscape: ; <interactive>:57:38: error:; * Not a function kind: *; but extra binders found: a; * In the data type declaration for `D'
10:48:53 <nshepperd> hmm
10:48:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:49:08 <dminuoso> boxscape: this diagnostic reads really weird too
10:49:12 <dminuoso> "not a function kind: *"
10:49:29 <boxscape> % type D :: forall b . (b ~ Int) => *; data D @a = MkD a deriving Show -- I would almost expect this to work
10:49:29 <yahb> boxscape: ; <interactive>:59:46: error:; Unexpected type application @a; In the data declaration for `D'
10:49:32 <dminuoso> I think I understand why GHC says this.
10:49:45 <dminuoso> Presumably with the chance, data declarations are *necessarily* visible dependent
10:49:48 <dminuoso> *change
10:49:53 × thiross quits (~user@173.242.113.143.16clouds.com) (Ping timeout: 252 seconds)
10:51:24 <boxscape> hmm, not quite
10:51:27 <boxscape> % :k Proxy
10:51:27 <yahb> boxscape: k -> *
10:51:36 × xff0x quits (~xff0x@2001:1a81:52ca:4f00:8a7f:8182:f670:e586) (Remote host closed the connection)
10:51:43 <boxscape> this has both non-dependent visible and dependent invisible quantification
10:51:52 xff0x joins (~xff0x@2001:1a81:52ca:4f00:a77b:5731:d9ca:93c9)
10:52:01 <boxscape> I think
10:52:32 <boxscape> full kind is `forall k . k -> *`
10:54:01 <dminuoso> % :set -fexplicit-forall
10:54:01 <yahb> dminuoso: Some flags have not been recognized: -fexplicit-forall
10:54:03 <dminuoso> uh
10:54:17 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
10:54:27 <dminuoso> % :set -fprint-explicit-foralls
10:54:28 <yahb> dminuoso:
10:54:30 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:54:31 <dminuoso> % :k Proxy
10:54:31 <yahb> dminuoso: forall {k}. k -> *
10:54:49 <dminuoso> boxscape: this looks very invisible to me
10:55:02 <boxscape> yes, the k is inferred, invisible, and dependent
10:55:05 <boxscape> the forall {k}
10:55:12 <boxscape> but the `k ->` is visible and independent
10:55:24 <dminuoso> uh
10:55:26 <boxscape> or.. non-dependent, not sure
10:55:43 × wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:55:52 <nshepperd> % :t Proxy
10:56:13 <boxscape> I accidentally redefined the data constructor Proxy in a private yahb session I think fwiw :)
10:56:22 <boxscape> but not sure why yahb isn't showing anything
10:56:29 aman joins (~aman@user/aman)
10:56:54 <boxscape> % "yahb?"
10:57:25 <nshepperd> RIP
10:58:28 <dminuoso> 12:55:12 boxscape | but the `k ->` is visible and independent
10:58:36 <dminuoso> boxscape: Are you sure here?>
10:58:46 <boxscape> yep, 98%
10:58:58 × yahb quits (xsbot@user/mniip/bot/yahb) (Ping timeout: 264 seconds)
10:59:54 <boxscape> dminuoso from richard eisenberg's thesis: https://i.imgur.com/2XEl2Ls.png
11:00:03 × favonia quits (~favonia@user/favonia) (Quit: The Lounge - https://thelounge.chat)
11:01:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
11:01:22 <boxscape> (though he has since said calling it "relevant" is a mistake, and it should be "erasable" and "non-erasable" instead of "irrelevant" and "relevant", but that's one of the dimensions we weren't talking about here, anyway)
11:01:24 <dminuoso> boxscape: Ah I see where my confusion comes from.
11:01:45 thiross joins (~user@173.242.113.143.16clouds.com)
11:02:49 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
11:03:45 yahb joins (xsbot@user/mniip/bot/yahb)
11:04:50 <boxscape> % :t Proxy
11:04:51 <yahb> boxscape: forall {k} {a :: k}. Proxy' a
11:04:58 × pera quits (~pera@user/pera) (Ping timeout: 264 seconds)
11:05:05 pera joins (~pera@137.221.132.196)
11:05:19 <boxscape> % :q
11:05:19 <yahb> boxscape:
11:05:22 <boxscape> % :t Proxy
11:05:22 <yahb> boxscape: forall {k} {t :: k}. Proxy t
11:05:28 pera is now known as Guest5645
11:05:39 × haskman quits (~haskman@171.48.41.1) (Quit: Going to sleep. ZZZzzz…)
11:05:46 × megaTherion quits (~therion@unix.io) (*.net *.split)
11:05:47 × farn quits (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) (*.net *.split)
11:06:22 × shryke quits (~shryke@91.103.43.254) (Ping timeout: 268 seconds)
11:06:39 haskman joins (~haskman@171.48.41.1)
11:07:36 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Ping timeout: 268 seconds)
11:09:17 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
11:11:23 megaTherion joins (~therion@unix.io)
11:11:23 farn joins (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505)
11:11:29 Feuermagier joins (~Feuermagi@user/feuermagier)
11:11:45 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Client Quit)
11:11:52 <boxscape> % toDyn (MkC 53 :: C Int)
11:11:52 <yahb> boxscape: ; <interactive>:5:1: error:; * No instance for (Typeable <>) arising from a use of `toDyn'; * In the expression: toDyn (MkC 53 :: C Int); In an equation for `it': it = toDyn (MkC 53 :: C Int)
11:11:54 <boxscape> what?
11:11:55 × Guest5645 quits (~pera@137.221.132.196) (Ping timeout: 268 seconds)
11:11:57 <boxscape> what is <>
11:12:07 waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
11:12:18 <dminuoso> % :t toDyn
11:12:18 <yahb> dminuoso: Typeable a => a -> Dynamic
11:13:40 <dminuoso> % :t MkC
11:13:40 <yahb> dminuoso: forall {a} {ev :: a ~ Int}. a -> C a
11:14:11 <lortabac> is there a way to get the list of all the dependencies of a project (including the transitive ones)?
11:14:22 <dminuoso> lortabac: cabal-plan
11:14:44 <lortabac> is it a separate executable that I need to install?
11:14:57 <dminuoso> Yeah, you can install it with `cabal install cabal-plan` if you like
11:15:14 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
11:15:17 <lortabac> ok thanks
11:17:02 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:17:02 <dminuoso> lortabac: Alternatively you can jq into dist-newstyle/cache/plan.json (cabal-plan is also just an interface for that file)
11:17:28 <lortabac> apparently cabal-plan can generate dot files, it seems worth installing
11:17:40 <dminuoso> Indeed, it can also do transitive reduction, which might be useful to you
11:18:43 × farn quits (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) (Ping timeout: 268 seconds)
11:19:04 farn joins (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505)
11:19:06 bhrgunatha joins (~bhrgunath@2001-b011-8011-18ad-e68c-7ce2-e7ef-f120.dynamic-ip6.hinet.net)
11:19:20 × megaTherion quits (~therion@unix.io) (Ping timeout: 268 seconds)
11:19:29 megaTherion joins (~therion@unix.io)
11:21:14 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:22:59 × bhrgunatha quits (~bhrgunath@2001-b011-8011-18ad-e68c-7ce2-e7ef-f120.dynamic-ip6.hinet.net) (Client Quit)
11:25:09 shryke joins (~shryke@91.103.43.254)
11:25:18 lieuwex parts (~lieuwelie@2001:470:69fc:105::4e6) ()
11:30:42 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:32:27 × Guest31 quits (~textual@cpc146410-hari22-2-0-cust124.20-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
11:34:26 × slep quits (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) (Ping timeout: 252 seconds)
11:34:35 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.1)
11:34:56 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:36:29 keutoi joins (~keutoi@157.48.91.62)
11:36:41 slep joins (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net)
11:37:52 Toast52 joins (~Toast52@151.192.167.120)
11:42:30 × xsperry quits (~as@user/xsperry) (Read error: Connection reset by peer)
11:42:59 lavaman joins (~lavaman@98.38.249.169)
11:44:36 × aman quits (~aman@user/aman) (Quit: aman)
11:44:46 × wanagnuj quits (~wanagnuj@101.95.97.158) (Quit: wanagnuj)
11:46:21 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:46:31 mc47 joins (~yecinem@89.246.239.190)
11:46:59 <thiross> % :t flip
11:46:59 <yahb> thiross: (a -> b -> c) -> b -> a -> c
11:48:18 × shailangsa quits (~shailangs@host165-120-169-73.range165-120.btcentralplus.com) (Ping timeout: 268 seconds)
11:50:38 mattil joins (~mattil@airio.portalify.com)
11:51:07 × eightball quits (~eight@86.106.121.164) (Quit: Leaving)
11:51:16 smitop joins (uid328768@user/smitop)
11:51:23 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 268 seconds)
11:52:11 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
11:52:56 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Ping timeout: 265 seconds)
11:55:23 shiraeeshi joins (~shiraeesh@109.166.57.115)
11:58:32 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
12:00:37 japh parts (~scp1@user/japh) ()
12:03:40 v01d4lph4 joins (~v01d4lph4@122.160.65.250)
12:03:40 × v01d4lph4 quits (~v01d4lph4@122.160.65.250) (Changing host)
12:03:40 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
12:04:04 Toast52_ joins (~Toast52@151.192.167.120)
12:04:23 × sondre quits (~sondrelun@cm-84.212.100.140.getinternet.no) (Ping timeout: 244 seconds)
12:04:29 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
12:06:35 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
12:07:45 × hmmmas quits (~chenqisu1@183.217.202.217) (Quit: Leaving.)
12:08:15 × Toast52 quits (~Toast52@151.192.167.120) (Ping timeout: 272 seconds)
12:09:20 holy_ joins (~h01y_b4z0@103.244.176.36)
12:13:10 zebrag joins (~chris@user/zebrag)
12:18:54 × waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds)
12:18:55 × azeem quits (~azeem@dynamic-adsl-78-13-240-225.clienti.tiscali.it) (Read error: Connection reset by peer)
12:18:59 × holy_ quits (~h01y_b4z0@103.244.176.36) (Remote host closed the connection)
12:20:37 waleee joins (~waleee@h-98-128-228-119.NA.cust.bahnhof.se)
12:20:46 shailangsa joins (~shailangs@host165-120-169-73.range165-120.btcentralplus.com)
12:20:48 azeem joins (~azeem@dynamic-adsl-78-13-240-225.clienti.tiscali.it)
12:27:37 river joins (~river@tilde.team/user/river)
12:33:40 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
12:43:47 bor0 joins (~boro@user/bor0)
12:44:25 × xff0x quits (~xff0x@2001:1a81:52ca:4f00:a77b:5731:d9ca:93c9) (Ping timeout: 268 seconds)
12:44:57 <bor0> Hey, ski :wave: I just did https://github.com/bor0/hoare-imp/commit/d7b154b8d9b68fcf6466b22ff1f40591db3dcdb4 per your suggestions. Now I find myself doing this a lot: https://github.com/bor0/hoare-imp/blob/master/examples/ExampleHoare.hs#L47. Is there a neater way? :)
12:45:05 xff0x joins (~xff0x@2001:1a81:52ca:4f00:7b0a:bab9:5836:8b3b)
12:45:23 otoburb parts (~otoburb@user/otoburb) ()
12:45:29 <bor0> Specifically, the `x >>= \x -> ...` part. `hlint` reported `>=>` but it only slightly helps
12:45:39 × xwx quits (~george@user/george) (Ping timeout: 268 seconds)
12:48:29 <boxscape> :t \pre post step5 hoareConsequence -> pre >>= \pre -> post >>= \post -> step5 >>= \step5 -> hoareConsequence pre step5 post
12:48:30 <lambdabot> Monad m => m t1 -> m t2 -> m t3 -> (t1 -> t3 -> t2 -> m b) -> m b
12:48:32 <boxscape> :t \pre post step5 hoareConsequence -> hoareConsequence <$> pre <*> step5 <*> post
12:48:32 <lambdabot> Applicative f => f a1 -> f a2 -> f a3 -> (a1 -> a3 -> a2 -> b) -> f b
12:48:39 <boxscape> ^ does that work for you bor0?
12:49:12 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
12:49:13 <bor0> Whoa. Let me try that. Looks like it should do it
12:49:30 lavaman joins (~lavaman@98.38.249.169)
12:49:36 <boxscape> :t \pre post step5 hoareConsequence -> liftA3 hoareConsequence pre step5 post -- bor0 alternatively
12:49:37 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
12:49:37 <lambdabot> Applicative f => f a -> f c -> f b -> (a -> b -> c -> d) -> f d
12:51:17 <bor0> It works! Magical. Looks awesome. Thanks!
12:51:21 <boxscape> np
12:51:42 <boxscape> (you'll see this "applicative style" quite often)
12:51:53 × brian_da_mage quits (~Neuromanc@user/briandamag) (Ping timeout: 264 seconds)
12:52:17 <bor0> An interesting ride. From pure functions to monads to applicative. But the end result is totally worth it
12:53:16 <boxscape> that's pretty much the timeline in terms of how people applied the concepts to functional programming, as well :)
12:53:38 berberman joins (~berberman@user/berberman)
12:53:42 × berberman_ quits (~berberman@user/berberman) (Ping timeout: 264 seconds)
12:53:46 pbrisbin joins (~patrick@pool-72-92-38-164.phlapa.fios.verizon.net)
12:53:46 <bor0> History repeats itself! :D
12:56:50 <bor0> Any clue why `ruleJoin <$> ruleSepR pq <*> ruleSepL pq ` doesn't work but `ruleJoin <$> ruleSepR pq <*> ruleSepL pq >>= id` does? `>>= id` seems hacky
12:57:30 <boxscape> (>>= id) is called join
12:57:31 <boxscape> :t join
12:57:32 <lambdabot> Monad m => m (m a) -> m a
12:57:59 <tomsmeding> bor0: if this is your first meeting with those applicative operators, I encourage you to look closely at the types of (<$>) (which is just fmap, by the way), (<*>) and (>>=). Then look at them again the next time you use them. At some point it will become clear how this 'f <$> a <*> b <*> c' style actually works. A bit later you'll realise how Applicative, which is defined by pure and <*>, is
12:57:59 <tomsmeding> actually a bit weaker than Monad, and them you might understand how things like applicative parsing are different from monadic parsing. For me it took a while to get familiar with these type classes, but it's worth spending a bit of time looking at type signatures now and then :)
12:58:07 <boxscape> I imagine you're ending up with a nested Monad in the first expression, and join lets you flatten that to one level of Monad
13:00:22 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:00:44 <bor0> tomsmeding, thanks. I did meet Applicative/Monad and vaguely know their definition. I'm at the level where it isn't obvious what makes a monad and what makes an applicative so my approach is usually to write it "manually" and only then to abstract when it becomes obvious (usually becomes obvious when I join and ping this channel :))
13:01:00 xwx joins (~george@user/george)
13:01:16 alx741 joins (~alx741@186.178.108.160)
13:04:05 geekosaur joins (~geekosaur@069-135-003-034.biz.spectrum.com)
13:04:08 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
13:05:30 × hydroxonium quits (uid500654@id-500654.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
13:05:49 <dminuoso> bor0: Yup, keep on doing this. At some point, Applicative/Monad will kick in completely automatically, without you forcing the issue.
13:06:04 <bor0> Thanks. Right, just like driving. I hope. :)
13:06:07 <dminuoso> Im going to argue, until then its not even important to understand what they abstract over.
13:06:35 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Remote host closed the connection)
13:06:48 × xprlgjf quits (~gavin@60.27.93.209.dyn.plus.net) (Read error: Connection reset by peer)
13:07:32 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
13:08:01 <dminuoso> Applicative is probably a bit harder to grasp, because most Applicative things happen to be Monad too (which subsumes Applicative), so you're less likely to encounter "just Applicative" things.
13:08:05 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
13:08:21 <dminuoso> (Though both interfaces are easy enough to learn, obviously)
13:08:41 wei2912 joins (~wei2912@112.199.250.21)
13:08:54 <bor0> Another thing that smells is the too many `Right`'s here: https://github.com/bor0/hoare-imp/blob/master/src/Gentzen.hs#L31-L42. Any way it can be improved?
13:09:13 <bor0> (Just throwing random code lines, but happy to elaborate further on the code/ideas behind it)
13:09:15 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Ping timeout: 272 seconds)
13:10:33 dunkeln joins (~dunkeln@94.129.65.28)
13:11:06 <boxscape> make a helper function `foo arg = go xs f x >>= \prfx -> Right $ Proof $ arg`, though choose a better name than `foo` :)
13:11:14 <boxscape> and then replace each of those lines with a call to that function
13:11:24 <bor0> I thought of that, but note `go _ f x = f (Proof x)`
13:11:43 <boxscape> right, just keep that line as is
13:11:53 <boxscape> and use the helper function in the other lines
13:12:16 <dminuoso> I can see some elaborate tricks to make the Right go away, but nothing worth your while
13:12:52 × thiross quits (~user@173.242.113.143.16clouds.com) (Remote host closed the connection)
13:12:53 × azeem quits (~azeem@dynamic-adsl-78-13-240-225.clienti.tiscali.it) (Ping timeout: 252 seconds)
13:12:53 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Ping timeout: 264 seconds)
13:13:00 thiross joins (~user@173.242.113.143.16clouds.com)
13:13:11 <boxscape> ah I suppose it has to be slightly different
13:13:18 <boxscape> because arg may depend on prfx/prfy
13:13:43 <boxscape> err, also on x/y
13:13:50 <dminuoso> bor0: though, just use fmap, rather than >>=
13:14:00 <dminuoso> That lets you avoid the Right
13:14:03 <bor0> Yeah. OK, just felt a little bit odd and wanted to double-check if it can be abstracted even further
13:14:13 <dminuoso> Yeah, that's the key thing. Just use fmap, the Right disappears :)
13:14:20 flowz joins (~flowz@2a01:aea0:dd4:1573:a8:24ac:7db2:5b39)
13:14:26 <dminuoso> <&> fits comfortably there
13:14:33 <dminuoso> Looks ergonomically nicer than <$> or fmap
13:14:46 <dminuoso> I'd write it like this:
13:15:01 <dminuoso> go xs f <&> \(Proof f) -> Proof (Not f)
13:15:53 azeem joins (~azeem@dynamic-adsl-94-34-16-203.clienti.tiscali.it)
13:16:05 <bor0> OK, I'll need some time to unpack that. Otherwise I won't be able to update my code when I go back to it in a few days :D
13:16:12 <bor0> Read-only!
13:16:20 <dminuoso> bor0: So let me make it easy to see for you
13:16:34 <dminuoso> First realize that `Right = return` or `Right = pure`
13:17:15 <dminuoso> Then realize you have: fmap f x = pure f <*> x
13:17:39 <dminuoso> Do a bit of juggling
13:17:42 × thiross quits (~user@173.242.113.143.16clouds.com) (Ping timeout: 264 seconds)
13:18:48 thiross joins (~user@173.242.113.143.16clouds.com)
13:20:22 lavaman joins (~lavaman@98.38.249.169)
13:20:44 <boxscape> you could also derive Functor for Proof and then replace `\(Proof f) -> Proof (Not f)` with `fmap Not`, I think
13:20:54 <dminuoso> Yup!
13:21:01 <dminuoso> Or, with <&> that would look even nicer
13:21:17 <dminuoso> go xs f <&> fmap Not
13:21:27 thiross parts (~user@173.242.113.143.16clouds.com) ()
13:21:37 xsperry joins (~as@user/xsperry)
13:21:40 <dminuoso> Or maybe you write g <&&> f = fmap (fmap f) g
13:21:43 <dminuoso> And then you have
13:21:45 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Remote host closed the connection)
13:21:47 <dminuoso> go xs f <&&> Not
13:22:10 <bor0> Reading it makes sense, thanks. Just still need some practice for it to sink in.
13:24:10 geekosaur joins (~geekosaur@069-135-003-034.biz.spectrum.com)
13:24:34 × Toast52_ quits (~Toast52@151.192.167.120) (Quit: Leaving)
13:24:54 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
13:25:04 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in)
13:25:18 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
13:27:06 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
13:27:15 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
13:28:04 × mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Client Quit)
13:28:19 mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
13:29:13 AgentM joins (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net)
13:29:23 × hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1)
13:29:49 hendursaga joins (~weechat@user/hendursaga)
13:32:02 arrowd joins (~arr@2.94.203.147)
13:32:04 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
13:33:40 chomwitt joins (~Pitsikoko@athedsl-20549.home.otenet.gr)
13:33:47 niflce joins (~IceChat95@user/niflce)
13:35:34 <boxscape> Has anyone tried to make STG run on a GPU?
13:36:32 fm joins (~fm@user/fm)
13:36:45 <[exa]> boxscape: but why
13:36:58 <boxscape> idle curiosity, mostly :)
13:37:08 <[exa]> GPUs are _terribly bad_ at that precise kind of computation
13:37:13 <merijn> boxscape: tbh, that sounds like a bad idea
13:37:23 × wonko quits (~wjc@62.115.229.50) (Quit: See You Space Cowboy..)
13:37:34 <boxscape> what is the part of STG that they are bad at?
13:37:37 <[exa]> pointers
13:37:41 <boxscape> Ah, I see
13:37:44 <merijn> Lots of pointers, lots of branches
13:37:55 <[exa]> "control flow" too
13:38:16 <merijn> Poor cache locality, no easy way to do latency hiding due to irregular control flow
13:38:33 <boxscape> okay
13:38:50 <[exa]> technically, it would be extremely interesting to do an experiment of STG vs. nursery in the shared memory
13:38:56 <merijn> boxscape: Basically, GPU memory is rather high latency (high bandwidth, but also high latency)
13:39:08 × shiraeeshi quits (~shiraeesh@109.166.57.115) (Quit: Leaving)
13:39:15 <merijn> boxscape: Which is not a problem if you can do latency hiding due to high levels of parallelism
13:39:17 slowButPresent joins (~slowButPr@user/slowbutpresent)
13:39:30 <[exa]> but likely that's the same esoterism level of "interesting" as "you can do programming with drawing an interpretable bitmap"
13:39:37 <merijn> But the parallelism in current GPUs really wants regular access patterns/control flow, which STG doesn't really have
13:39:49 <boxscape> I see, that makes sense
13:41:05 × keutoi quits (~keutoi@157.48.91.62) (Ping timeout: 264 seconds)
13:41:08 <bor0> `(axiom1 (Var A) >>= \ax1 -> ruleSpec ax1 (Var A))` So I thought something like `ruleSpec <$> axiom1 (Var A) <*> Var A` would work, but not. I need to "lift"(?) the last Var A somehow?
13:41:50 <boxscape> it's more like you're lifting it when it shouldn't be lifted IIUC
13:42:00 <bor0> Or that :)
13:42:11 <boxscape> flip ruleSpec (Var A) <$> axiom1 (Var A)
13:42:12 <boxscape> does that work?
13:42:34 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
13:42:43 keutoi joins (~keutoi@157.48.91.62)
13:43:15 <bor0> With a join prepended, yeah. ghci evals True == (join $ flip ruleSpec (Var A) <$> axiom1 (Var A)) == (axiom1 (Var A) >>= \ax1 -> ruleSpec ax1 (Var A))
13:43:49 <bor0> There's no unlift or something? `flip` seems to be specific,.. what if the argument was 3rd
13:44:10 <boxscape> right, I guess we're not really gaining anywhere here, it's just (axiom1 (Var A) >>= flip ruleSpec)
13:44:49 <bor0> I am happy with it as it is, unless it can look better :)
13:45:21 <boxscape> bor0 I don't think there's a nice way to unlift something at the moment, at least in base
13:45:21 × unyu quits (~pyon@user/pyon) (Quit: WeeChat 3.1)
13:45:43 <boxscape> flip is pretty specific , sometimes there isn't a better way than writing a lambda
13:45:45 <boxscape> e.g.
13:45:49 <boxscape> @pl f a b = f b a
13:45:49 <lambdabot> f = fix flip
13:45:55 <boxscape> eh wait I don't want fix
13:46:01 <boxscape> @pl f a b = g b a
13:46:01 <lambdabot> f = flip g
13:46:04 <boxscape> that's fine
13:46:20 <boxscape> @pl f a d e = g a b c d e f
13:46:20 <lambdabot> f = fix (flip (flip . (flip .) . flip (flip g b) c))
13:46:27 <boxscape> that's definitely not fine, and a lambda is better
13:46:33 <bor0> Haha!
13:47:29 <bor0> That seems like a nice way to make a friendly coworker, if I ever get to write Haskell in production
13:47:41 <boxscape> true
13:47:47 <flowz> hi, haskell newbie with a quick question here. I need to create a tree structure with some special handling of the root node. I tried to encode my idea like the following "MWE": https://pastebin.com/bHdtkJvy . But it doesn't allow me to match the "inner" sum type that way. I haven't been able to figure out how to do so. Would need and appreciate a
13:47:47 <flowz> bit of help :)
13:49:13 ystael joins (~ystael@user/ystael)
13:50:46 pe200012 joins (~pe200012@119.131.208.84)
13:51:54 <[exa]> flowz: you either need to setup overloading, or have a second function for the "inner" tree
13:52:35 <[exa]> flowz: this kind of ad-hoc overloading a function for multiple types (as known from c++ and others) does not combine well with type inference, so haskell doesn't really support it
13:53:41 jneira joins (~jneira@166.red-81-39-172.dynamicip.rima-tde.net)
13:53:42 <flowz> @[exa] thanks for the help, will go for secondary functions then. Though it may be possible someway like that and I just couldn't find the right syntax.
13:53:57 <ski> flowz : `data Tree = Root | Node' looks confused
13:54:22 myShoggoth joins (~myShoggot@97-120-89-117.ptld.qwest.net)
13:54:46 <[exa]> flowz: you might not even need the whole second data structure, I'd go with one Tree structure for everything, and have 2 functions for root and non-root cases (and let the user call the root one always)
13:54:57 <ski> (hint, that declaration is entirely unrelated to the two earlier `data' declarations)
13:55:03 lavaman joins (~lavaman@98.38.249.169)
13:55:59 <flowz> @ski oh, good to know. @[exa] thanks for the tip, I'll probably have to rethink my approach
13:55:59 <lambdabot> Maybe you meant: wiki src ask
13:56:11 <ski> flowz : what are you trying to do ?
13:56:32 <[exa]> flowz: btw @ doesn't work for highlighting on IRC, the convention is to just write `nick:` :]
13:57:30 × haskman quits (~haskman@171.48.41.1) (Quit: Going to sleep. ZZZzzz…)
13:57:51 <arrowd> Speaking of STG, there are many posts on this matter in the Internet, but I haven't found any information on how STG gets mapped to machine instructions.
13:57:54 chddr joins (~Thunderbi@31.148.23.125)
13:57:55 <ski> (from what you've said, i'd go with [exa]'s suggestion)
13:58:00 <arrowd> It isn't being interpreted, right?
13:58:07 <flowz> ski: basically I have to build a balanced tree from some input data and then output the tree in a given format. Choice of language is left to us, so I thought I might use haskell as an exercise (as the task seemed simple enough, and I recently started learning it)
13:58:21 × mattil quits (~mattil@airio.portalify.com) (Remote host closed the connection)
13:58:27 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2-dev)
13:59:06 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
13:59:36 <boxscape> arrowd https://www.microsoft.com/en-us/research/wp-content/uploads/1992/04/spineless-tagless-gmachine.pdf Chapter 9 is "Compiling the STG language to C"
13:59:40 <boxscape> page 52
13:59:41 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
13:59:43 <ski> flowz : and in what way is that related to handling the root differently ?
14:00:58 <flowz> the definition of the btree we are given the root only has 1 value and 2 childs, while all other nodes have /k/ values and /k+1/ childs. It's a weird definition of the balanced tree, haven't been able to find any other resources that define it like that
14:01:08 <arrowd> boxscape: The current GHC does not compile to C. AFAIK, that "registerization" thing is exactly what I'm looking for.
14:01:47 <geekosaur> in ghc, STG is compiled to Cmm which is compiled to assembly language or LLVM IR depending on backend
14:04:40 <arrowd> So, "registerization" is related to Cmm, not STG?
14:05:00 <int-e> flowz: that's restrictive (each node should allow up to 2k-1 children)... but the root is indeed a bit special in b-trees
14:05:20 pe200012_ joins (~pe200012@218.107.17.245)
14:05:41 × pe200012 quits (~pe200012@119.131.208.84) (Ping timeout: 264 seconds)
14:06:54 <geekosaur> I think so, yes. the unregisterized backend still exists (but isn't included in ghc releases) and is another post-Cmm target
14:07:37 <ski> flowz : hm, ok. anyway, the issue with `data Tree = Root | Node' is that this is declaring an (unparameterized) data type, named `Tree', having two possible shapes (data constructors), `Root' and `Node'. these two are entirely unrelated to your (parameterized) *types* `Root' and `Node'
14:08:27 <ski> flowz : basically, `data Tree = Root | Node' is comparable to `data Pet = Cat | Dog' or `data Bool = False | True' .. it's just a data type, having two values
14:10:01 <arrowd> Ok, then I'm interested in STG -> Cmm part.
14:10:48 <ski> flowz : in any case, it seems misguided to want to check whether you're given a root node, or another node. afaiui, you should already know which one you're passed, in every point of the program
14:11:59 × ku quits (~ku@2601:280:c780:7ea0:a15d:a611:c59d:5265) (Ping timeout: 268 seconds)
14:12:10 <flowz> I'm starting to think I should go through some tutorials some more before doing even this (comparatively simple) task. There're still some more basic things I haven't grasped enough. I'll do it in some other language as the deadline is approaching rapidly, but still thanks for all the help and pointers :)
14:13:34 hexfive joins (~eric@50.35.83.177)
14:13:38 <ski> flowz : possibly you could use something like `data Node a = EmptyNode | InternalNode (Node a) [(a,Node a)]', for the internal nodes
14:16:25 <ski> (hm, or maybe you intended `k' to be the same for all internal nodes ?)
14:21:53 × azeem quits (~azeem@dynamic-adsl-94-34-16-203.clienti.tiscali.it) (Read error: Connection reset by peer)
14:22:50 ikex joins (~ash@user/ikex)
14:23:51 <flowz> ski: yep, k should be the same, and I've also got that included in my actual code. But I'm going to do it in some other language for now, as I've only got a couple of hours left, and there's still some other more time-consuming stuff left to do as well.. Though I'll have a look at doing something with haskell at the next good opportunity, as I find
14:23:52 <flowz> the language quite interesting. Again, thanks for all the help, gtg now
14:24:10 × flowz quits (~flowz@2a01:aea0:dd4:1573:a8:24ac:7db2:5b39) (Quit: Client closed)
14:26:24 azeem joins (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it)
14:27:08 adziahel[m] joins (~adziahelm@2001:470:69fc:105::b4d)
14:28:25 × niflce quits (~IceChat95@user/niflce) (Ping timeout: 272 seconds)
14:30:20 lavaman joins (~lavaman@98.38.249.169)
14:31:39 niflce joins (~IceChat95@user/niflce)
14:41:09 koishi_ joins (~koishi_@67.209.186.120.16clouds.com)
14:43:13 × koishi_ quits (~koishi_@67.209.186.120.16clouds.com) (Remote host closed the connection)
14:44:15 Sgeo joins (~Sgeo@user/sgeo)
14:47:46 haskman joins (~haskman@171.48.41.1)
14:48:04 LukeHoersten joins (~LukeHoers@user/lukehoersten)
14:50:30 <[exa]> arrowd: Cmm is a VERY rough lookalike of C, assignment of instructions and registers happens when compiling Cmm
14:51:04 <arrowd> [exa]: So, "registerizing" is basically adding a new backend to Cmm?
14:51:06 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Client Quit)
14:51:38 <[exa]> I'm not sure if I translated "registerizing" correctly
14:52:04 <[exa]> to start, afaik STG has is own notion of registers that is more or less independent of the actual CPU registers
14:52:24 <[exa]> I guess you are interested in how the decision "what data to put into which CPU register" happens right?
14:53:19 <dminuoso> bor0: By the way, this is a bit of a subtle thing but I decided to let you know anyhow. Depending on how deep your Proof is nested, this could perform not so nicely.
14:53:24 <arrowd> I guess so. I imagined it to be more like a direct mapping between STG registers and real CPU registers.
14:53:43 <arrowd> I took the "registerizing" term from here: https://downloads.haskell.org/~ghc/6.4/docs/html/building/sec-porting-ghc.html
14:53:55 <dminuoso> bor0: This is because while there is a Functor law that states `fmap f . fmap g = fmap (f . g)`, GHC will not use this knowledge and fuse these functions `f` and `g` together.
14:54:34 <dminuoso> bor0: There is however a standard trick to ensure fusion occurs. It's something we can talk about in a later point in time if the need arises.
14:54:41 <geekosaur> arrowd, just to let you know, that's fairly old documentation
14:55:05 <arrowd> I know, but I believe this part is still more or less relevant.
14:56:40 <[exa]> arrowd: no, STG is a virtual machine with virtual registers... there will be some correspondence, but mostly accidental
14:58:29 × dunkeln quits (~dunkeln@94.129.65.28) (Ping timeout: 264 seconds)
14:58:33 <arrowd> I'm confused about this.
14:58:51 × haskman quits (~haskman@171.48.41.1) (Ping timeout: 268 seconds)
14:59:08 <arrowd> LLVM is also a VM in a sense, but only architecturally. There are no traces of "VM-ness" in the final compiled executable.
14:59:17 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.1)
14:59:28 × bfrk quits (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
14:59:43 <arrowd> Unlike Java, where the compiled binary is a bytecode, which get interpreted/JITed during execution.
14:59:58 <arrowd> STG is like LLVM in this sense, right?
15:00:14 <merijn> Not really
15:00:23 fart joins (~fart@user/actor)
15:00:24 <merijn> STG is much higher level still
15:00:35 <[exa]> well, in this very rough sense, yes -- it's not interpreted nor JITed, just compiled into next layer
15:00:55 <arrowd> Ok, and the next layer is Cmm?
15:00:58 <[exa]> yes
15:01:03 <merijn> arrowd: FYI, those docs you linked are *ancient*
15:01:04 <[exa]> (I hope)
15:01:19 <merijn> GHC 6.4 is like over a decade old?
15:01:58 amahl joins (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
15:02:18 <arrowd> Good. Now if I try to port GHC to a new ISA, at what level would I need to work? Cmm, right?
15:02:35 <merijn> Correction, over 16 years old :p
15:03:20 <merijn> arrowd: There's two backends in GHC: the native backend that goes from Cmm to assembly directly and an LLVM backend that converts Cmm to LLVM IR, then uses LLVM for that
15:03:34 <arrowd> I'm talking about NCG right now.
15:03:48 <merijn> arrowd: NCG goes from Cmm to a specific ISA, yes
15:04:14 <arrowd> All right, now I get it. Thanks everyone for explanations.
15:04:37 <merijn> arrowd: See also #ghc for questions about GHC specifics
15:04:49 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
15:05:43 Bartosz joins (~textual@24.35.90.211)
15:06:01 <merijn> arrowd: angerman has been working on a NCG backend for Apple's M1 (iirc?), so he probably knows where to get the most up-to-date info
15:08:11 shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net)
15:08:36 × Kaipi quits (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
15:10:51 × oxide quits (~lambda@user/oxide) (Ping timeout: 272 seconds)
15:11:07 Kaipi joins (~Kaiepi@nwcsnbsc03w-47-54-173-93.dhcp-dynamic.fibreop.nb.bellaliant.net)
15:14:46 hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com)
15:16:48 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
15:17:00 <bor0> dminuoso, I guess this is related to `join`? If I don't `join`, I end up with `Proof (Proof ...)`
15:18:10 <ski> bor0 : you have a `Monad Proof' instance ?
15:18:16 oxide joins (~lambda@user/oxide)
15:18:45 <bor0> Nope. Not sure what that would look like, yet. https://github.com/bor0/hoare-imp/blob/master/src/Common.hs#L16-L19
15:19:14 <ski> imho, it'd probably not be usefuö
15:19:53 <boxscape> bor0 note btw that `x >>= f` is the same as `join (f <$> x)`, which is why it came up in some of those translations
15:19:56 <ski> (i was just wondering, since you mentioned `join' and `Proof (Proof (..))' at the same time ..)
15:20:53 renzhi joins (~xp@2607:fa49:6500:bc00::e7b)
15:21:24 <boxscape> hm, seems like it would have been Either String (Either String (Proof (..)))
15:21:25 Guest9 joins (~Guest9@43.241.144.2)
15:21:26 <bor0> Actually, sorry, I meant `Right (Right (Proof ... ))`
15:21:33 <boxscape> or that
15:21:38 <ski> yea, that's another thing
15:22:27 <bor0> But that's probably related to what dminuoso said, "depending how deep your Proof is nested". My expectation is it's only 1 level, right after `Right` - all should be of form `Right (Proof ...)`
15:23:23 × fart quits (~fart@user/actor) (Quit: Connection closed)
15:23:47 × curiousgay quits (~quassel@178.217.208.8) (Ping timeout: 252 seconds)
15:23:52 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:25:15 <boxscape> bor0 I don't think that's what dminuoso meant - to get into Right (Right (Proof (..))) you would have to use (fmap . fmap) f, rather than (fmap f . fmap g). Rather, since `go` is a recursive function, it fmaps again and again, and these fmaps are not automatically optimized into a single fmap
15:26:09 × shailangsa quits (~shailangs@host165-120-169-73.range165-120.btcentralplus.com) ()
15:26:24 <boxscape> (and how often it recurs depends on how deep the data structure of the proof is)
15:26:42 <bor0> Ah, was he talking specifically about `go`? My bad then. I thought it was in general, e.g.:https://paste.tomsmeding.com/aCf3hYea
15:27:06 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:bdf8:f228:7df7:147f) (Quit: WeeChat 2.8)
15:27:25 <bor0> https://paste.tomsmeding.com/H3e0gBbu shows what c1 and c2 are specifically
15:28:02 ubh parts (~ubh@2001:470:69fc:105::852) ()
15:28:55 blizzard joins (~winter@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com)
15:29:05 blizzard is now known as derelict
15:29:29 <ski> bor0> :t hoareSequence
15:29:51 <boxscape> ski https://github.com/bor0/hoare-imp/blob/d7b154b8d9b68fcf6466b22ff1f40591db3dcdb4/src/Hoare.hs#L35
15:29:53 <bor0> https://github.com/bor0/hoare-imp/blob/master/src/Hoare.hs#L35
15:33:27 × qbt quits (~edun@user/edun) (Ping timeout: 272 seconds)
15:34:42 <ski> bor0 : you know you could use `do'-notation, for the `Either' stuff, yes ?
15:35:40 × wei2912 quits (~wei2912@112.199.250.21) (Quit: Lost terminal)
15:35:49 <bor0> I totally forgot about that one! Are you saying these can look better? :D https://github.com/bor0/hoare-imp/blob/master/examples/ExampleTNT.hs
15:36:08 <bor0> (Don't look at the other examples, I still haven't updated all of them to use monadic Either instead of hacky `fromRight`)
15:36:46 <ski> lemma1 = do
15:36:49 <boxscape> that code almost looks like you took something that was written in do-notation and translated it to non-do-notation :)
15:36:58 <bor0> Hahahah.
15:37:03 <ski> step1 <- axiom3 (Var A) (Var B)
15:37:10 <ski> step2 <- ruleSpec step1 (Var D)
15:37:12 <ski> ...
15:37:17 <bor0> Oh man...
15:37:24 <bor0> Time for another rewrite!
15:38:59 <ski> (flipping the order of the `ruleFantasy' parameters might also look nicer)
15:39:04 <bor0> Wow, it just looks amazing this way!
15:39:17 × ikex quits (~ash@user/ikex) (Ping timeout: 264 seconds)
15:39:17 ski smiles
15:39:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
15:40:25 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 272 seconds)
15:40:26 <bor0> Can you expand on the `ruleFantasy` parameters?
15:41:41 × dpl_ quits (~dpl@77-121-78-163.chn.volia.net) (Ping timeout: 264 seconds)
15:42:09 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
15:42:25 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:43:50 <ski> let premise = PropVar (ForAll D (PropVar (Eq (..) (..))))
15:44:12 <ski> step7 <- ruleFantasy premise $ \premise -> do
15:44:30 × boxscape quits (~boxscape@user/boxscape) (Quit: Connection closed)
15:44:33 <bor0> Ah!
15:44:35 <ski> step8 <- ruleSpec premise (Var D)
15:44:39 <APic>
15:44:39 <ski> ...
15:45:00 <bor0> I'll definitely miss those redundant `let f premise`
15:45:01 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
15:45:09 <ski> ruleGeneralize step10 D (Just premise)
15:45:26 <ski> ruleGeneralize step7 C Nothing
15:46:37 <ski> "miss", as in you'll regret removing them, or as in you'll prefer to drop them ?
15:46:40 × Bartosz quits (~textual@24.35.90.211) (Quit: My MacBook has gone to sleep. ZZZzzz…)
15:46:43 boxscape joins (~boxscape@user/boxscape)
15:46:44 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
15:47:30 <ski> (it's not clear to me what the relation between these two different `premise's are, but i kept your variable naming ..)
15:48:03 <bor0> I think it's safe to assume just another redundancy
15:48:46 × dunj3 quits (~dunj3@2001:16b8:3059:9800:5856:7ab4:1dd8:26ae) (Remote host closed the connection)
15:50:07 <bor0> These proofs suddenly became readable! This is fun
15:50:49 <boxscape> Haskell does have a reputation for being a good host language for EDSLs
15:51:03 <ski> readability is a good thing, yea :)
15:51:22 <bor0> boxscape, I thought it had a good reputation for being a good host language without readability, but now with this readability... ++
15:51:35 <boxscape> hehe
15:51:35 dunkeln joins (~dunkeln@94.129.65.28)
15:51:44 × chele quits (~chele@user/chele) (Remote host closed the connection)
15:52:07 <bor0> One thing I really like about doing this in Haskell, vs e.g. in Racket is refactoring. It's a breeze. Almost like random work until ghci is happy
15:52:56 <boxscape> yep static types are pretty cool
15:53:05 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
15:53:10 <boxscape> (though I think racket has an optional static type system? I've never used racket)
15:53:16 Deide joins (~Deide@wire.desu.ga)
15:53:16 × Deide quits (~Deide@wire.desu.ga) (Changing host)
15:53:16 Deide joins (~Deide@user/deide)
15:53:26 ski . o O ( "Follow the types where they lead -- follow the types where they lead. Follow, follow, follow, follow -- follow the types where they lead." )
15:53:44 hseg joins (~gesh@185.120.126.41)
15:54:03 shailangsa joins (~shailangs@host165-120-169-73.range165-120.btcentralplus.com)
15:54:09 <ski> there's Typed Racket, yea
15:54:40 <boxscape> ok
15:54:43 <hseg> stack isn't picking up the new commonmark version (from last friday) on hackage
15:54:58 <hseg> even though I ran stack update
15:55:04 <ski> (one interesting thing is the higher-order blame tracking system, for contracts)
15:55:52 <kosmikus> xwx: lhs2tex-1.24 should work ok with HLS (within certain limits).
15:57:27 × zeenk quits (~zeenk@2a02:2f04:a310:b600:b098:bf18:df4d:4c41) (Quit: Konversation terminated!)
15:58:43 haltux joins (~lbigas@a89-154-181-47.cpe.netcabo.pt)
16:00:25 guest61 joins (~xxx@47.245.54.240)
16:00:37 × haltux quits (~lbigas@a89-154-181-47.cpe.netcabo.pt) (Quit: Leaving)
16:01:43 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
16:02:05 × shryke quits (~shryke@91.103.43.254) (Ping timeout: 264 seconds)
16:02:18 haltux joins (~lbigas@a89-154-181-47.cpe.netcabo.pt)
16:02:29 wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com)
16:03:01 <hseg> nuked $XDG_DATA_HOME/stack, hopefully that helps things
16:05:18 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
16:07:11 × pe200012_ quits (~pe200012@218.107.17.245) (Read error: Connection reset by peer)
16:08:17 shryke joins (~shryke@91.103.43.254)
16:08:46 softinio joins (~softinio@c-73-70-215-171.hsd1.ca.comcast.net)
16:10:17 <kuribas> "cabal haddock --executables" gives an error: cabal: unrecognized 'haddock' option `--executables'
16:10:55 v01d4lph4 joins (~v01d4lph4@122.160.65.250)
16:10:55 × v01d4lph4 quits (~v01d4lph4@122.160.65.250) (Changing host)
16:10:55 v01d4lph4 joins (~v01d4lph4@user/v01d4lph4)
16:11:25 <bor0> ski, boxscape https://github.com/bor0/hoare-imp/blob/master/examples/ExampleTNT.hs 😎
16:11:41 <kuribas> hmm cabal haddock myproject:executables does work...
16:11:50 <boxscape> bor0 nice
16:11:55 <kuribas> the cabal haddock --help text is wrong however.
16:11:56 <geekosaur> looks like it's --haddock-executables ?
16:12:20 favonia joins (~favonia@user/favonia)
16:12:25 × Guest9 quits (~Guest9@43.241.144.2) (Quit: Connection closed)
16:13:08 × favonia quits (~favonia@user/favonia) (Client Quit)
16:13:28 <geekosaur> the text at the top is wrong but the actual option descriptions later are correct
16:14:07 × softinio quits (~softinio@c-73-70-215-171.hsd1.ca.comcast.net) ()
16:15:27 <boxscape> bor0 do step0, step1, step2 etc all have the same type or different types?
16:15:31 <kuribas> geekosaur: right
16:16:32 <boxscape> (whoops step0 doesn't actually exist)
16:16:36 <bor0> All same I believe - either string (error) or proof
16:16:42 <boxscape> ok
16:17:31 <boxscape> bor0 I was thinking about whether it would make sense to use the State monad which is why I asked that, but the answer is no
16:18:11 <boxscape> (the State monad would make sense if you only used step1 for step2, only used step2 for step3, etc.)
16:22:08 × jakzale quits (uid499518@id-499518.charlton.irccloud.com) (Quit: Connection closed for inactivity)
16:22:28 Bartosz joins (~textual@24.35.90.211)
16:23:29 × niflce quits (~IceChat95@user/niflce) (Ping timeout: 272 seconds)
16:23:31 × Bartosz quits (~textual@24.35.90.211) (Client Quit)
16:24:48 niflce joins (~IceChat95@user/niflce)
16:26:10 <gentauro> I find this hilariously funny: https://twitter.com/vamchale/status/1399390668754198532 (it's funny cos it's true)
16:26:35 <gentauro> as a "freelance clownsultant" you see some of the most horrible things created by humans
16:27:05 <boxscape> oh wow I thought that was automatically minified javascript or something but no
16:27:17 × nschoe quits (~quassel@178.251.84.79) (Ping timeout: 264 seconds)
16:27:19 <gentauro> for example, 5000 lines methods, with if statements as wide as a 1000 characters
16:27:48 <gentauro> all kind of logic (and side-effects) hidden everywhere
16:27:53 lbseale__ is now known as lbseale
16:28:11 <gentauro> we must be doing something wrong in this field, since Haskell is not the norm :(
16:28:24 <boxscape> and column 876 of the if statement accidentally has a `=` instead of a `==` ;)
16:28:45 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:29:16 <gentauro> boxscape: I see you also have these nightmares
16:31:16 lavaman joins (~lavaman@98.38.249.169)
16:31:45 <gentauro> as well
16:32:10 <boxscape> mhm
16:33:17 × azeem quits (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it) (Ping timeout: 264 seconds)
16:33:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
16:35:56 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
16:37:30 × chddr quits (~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds)
16:43:08 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
16:43:31 × v01d4lph4 quits (~v01d4lph4@user/v01d4lph4) (Remote host closed the connection)
16:43:54 × neceve quits (~quassel@2a02:c7f:607e:d600:a95a:ecd2:e57a:3130) (Ping timeout: 244 seconds)
16:44:46 sm2n joins (~sm2n@user/sm2n)
16:47:21 <ski> gentauro : how about an `if' condition that's some 77 lines ?
16:47:49 <yin> libera
16:48:01 <yin> ignore this pls
16:48:22 ski glances around nervously
16:48:52 Bartosz joins (~textual@67.135.32.118)
16:49:19 motherfsck joins (~motherfsc@68.235.43.102)
16:49:24 dpl_ joins (~dpl@77-121-78-163.chn.volia.net)
16:49:38 × motherfsck quits (~motherfsc@68.235.43.102) (Quit: quit)
16:50:38 motherfsck joins (~motherfsc@68.235.43.102)
16:50:56 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
16:51:15 beka joins (~beka@104.193.170-254.PUBLIC.monkeybrains.net)
16:51:35 × leeb_ quits (~leeb@KD111239153130.au-net.ne.jp) (Quit: WeeChat 3.1)
16:52:03 × motherfsck quits (~motherfsc@68.235.43.102) (Client Quit)
16:53:19 <gentauro> ski: "some 77 lines"?
16:53:32 × haltux quits (~lbigas@a89-154-181-47.cpe.netcabo.pt) (Quit: Leaving)
16:53:32 <ski> yes
16:53:42 <gentauro> :|
16:53:44 <gentauro> jaiks
16:53:45 × keutoi quits (~keutoi@157.48.91.62) (Quit: leaving)
16:54:05 <ski> it was a fun experiment of writing Prolog in C, i suppose you could say
16:54:58 motherfsck joins (~motherfsc@68.235.43.102)
16:55:23 vjoki joins (~vjoki@2a00:d880:3:1::fea1:9ae)
16:55:37 <ski> bor0 : anyway .. i'm a bit suspicious about `ruleGeneralize'
16:55:52 haskman joins (~haskman@106.201.8.96)
16:56:10 × motherfsck quits (~motherfsc@68.235.43.102) (Changing host)
16:56:10 motherfsck joins (~motherfsc@user/motherfsck)
16:57:00 haltux joins (~haltux@a89-154-181-47.cpe.netcabo.pt)
16:57:27 <ski> (also, personally, i'm continually confused by each intermediate conclusion comment preceding the step that effects it, rather than succeding it)
16:57:48 novasenco parts (novasenco@user/nova) (♥☺)
16:59:21 pavonia joins (~user@user/siracusa)
17:00:52 <monochrom> Once again "what I'm going to do next" vs "what I just did".
17:02:26 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:02:34 <monochrom> This can run deep as the fundamental philosophical divide between "this is what's happening, oh btw here is computer code" vs "this is computer code, oh btw here is what's happening"
17:04:09 benin joins (~benin@183.82.205.186)
17:04:47 Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com)
17:04:51 qbt joins (~edun@user/edun)
17:06:40 Ariakenom joins (~Ariakenom@2001:9b1:efb:fc00:d9c3:69a3:f97b:be95)
17:06:40 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
17:07:05 kmein joins (~weechat@user/kmein)
17:08:31 × Bartosz quits (~textual@67.135.32.118) (Quit: My MacBook has gone to sleep. ZZZzzz…)
17:09:06 <ski> bor0 : part of the point of `ruleFantasy' is that you should be able to nest it. iow, there may be more than one hypothetical assumption, in force, at the same time, and so it seems inappropriate for `ruleGeneralize' to only `Maybe' take a hypothesis
17:09:53 azeem joins (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it)
17:10:11 ec joins (~ec@gateway/tor-sasl/ec)
17:10:16 <ski> (and, it's possible that you've already nested it like this, without realizing it, if you've, from inside a `ruleFantasy', used a lemma that used `ruleFantasy' in its proof
17:10:19 <ski> )
17:12:06 × ec quits (~ec@gateway/tor-sasl/ec) (Client Quit)
17:12:17 ec joins (~ec@gateway/tor-sasl/ec)
17:12:42 bfrk joins (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de)
17:12:54 <monochrom> I don't know whether ruleFantasy is a cute name or a horrible name :)
17:14:38 × motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit)
17:17:16 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:18:28 novasenco joins (novasenco@user/nova)
17:18:48 ski . o O ( maybe both ? )
17:18:56 × hseg quits (~gesh@185.120.126.41) (Quit: WeeChat 3.1)
17:19:17 × myShoggoth quits (~myShoggot@97-120-89-117.ptld.qwest.net) (Ping timeout: 252 seconds)
17:19:22 <novasenco> cabal install alsa-mixer -> http://ix.io/3ov9/
17:19:32 <monochrom> i/sqrt(2) |cute> - i/sqrt(2) |horrible>
17:19:36 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.1)
17:19:45 bitmapper joins (uid464869@id-464869.tooting.irccloud.com)
17:20:26 <novasenco> 07dist/build/Sound/ALSA/Mixer/Internal.i:1: (column 1) [ERROR] >>> Lexical error ! The character '#' does not fit here.
17:20:56 <monochrom> probably gcc vs clang in terms of CPP things
17:21:33 <novasenco> I have both installed. I have no idea how to tell it to prefer one or the other
17:22:19 motherfsck joins (~motherfsc@user/motherfsck)
17:24:17 × sm2n quits (~sm2n@user/sm2n) (*.net *.split)
17:24:17 × oxide quits (~lambda@user/oxide) (*.net *.split)
17:24:17 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (*.net *.split)
17:24:17 × pbrisbin quits (~patrick@pool-72-92-38-164.phlapa.fios.verizon.net) (*.net *.split)
17:24:17 × berberman quits (~berberman@user/berberman) (*.net *.split)
17:24:17 × bor0 quits (~boro@user/bor0) (*.net *.split)
17:24:17 × cheater quits (~Username@user/cheater) (*.net *.split)
17:24:17 × leif quits (uid501722@id-501722.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × joel135 quits (sid136450@id-136450.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × Firedancer quits (sid336191@id-336191.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × mthvedt quits (uid501949@id-501949.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × amir quits (sid22336@user/amir) (*.net *.split)
17:24:17 × peteretep quits (sid143467@id-143467.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × acertain quits (sid470584@id-470584.stonehaven.irccloud.com) (*.net *.split)
17:24:17 × sqrt2 quits (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net) (*.net *.split)
17:24:17 × Megant quits (megant@user/megant) (*.net *.split)
17:24:17 × Aighearach quits (~paris@c-71-63-160-210.hsd1.or.comcast.net) (*.net *.split)
17:24:17 × the-coot[m] quits (~the-cootm@2001:470:69fc:105::95f) (*.net *.split)
17:24:17 × hexology quits (~hexology@user/hexology) (*.net *.split)
17:24:17 × jiribenes quits (~jiribenes@rosa.jiribenes.com) (*.net *.split)
17:24:17 × dexterfoo quits (dexter@2a01:7e00::f03c:91ff:fe86:59ec) (*.net *.split)
17:24:17 × dmwit quits (~dmwit@pool-173-66-86-32.washdc.fios.verizon.net) (*.net *.split)
17:24:17 × vjoki quits (~vjoki@2a00:d880:3:1::fea1:9ae) (*.net *.split)
17:24:17 × thonkpod quits (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d) (*.net *.split)
17:24:17 × NemesisD quits (sid24071@tooting.irccloud.com) (*.net *.split)
17:24:17 × parseval quits (sid239098@brockwell.irccloud.com) (*.net *.split)
17:24:17 × edwtjo quits (~edwtjo@user/edwtjo) (*.net *.split)
17:24:17 × fabfianda[m] quits (~fabfianda@2001:470:69fc:105::6db) (*.net *.split)
17:24:17 × bmsk quits (~user@2001:19f0:5001:2f3b:5400:3ff:fe53:2d96) (*.net *.split)
17:24:17 × dy quits (~dy@user/dy) (*.net *.split)
17:24:17 × Teacup quits (~teacup@user/teacup) (*.net *.split)
17:24:17 × fjmorazan quits (~quassel@user/fjmorazan) (*.net *.split)
17:24:17 × ajb quits (~ajb@cupid.whatbox.ca) (*.net *.split)
17:24:17 × mstruebing quits (~maex@2001:41d0:8:93c7::1) (*.net *.split)
17:24:17 × teehemkay quits (sid14792@id-14792.tooting.irccloud.com) (*.net *.split)
17:24:17 × dixie quits (~dixie@real.wilbury.sk) (*.net *.split)
17:24:17 × funsafe quits (~funsafe@2601:1c1:4200:938f:389d:16a4:ae2d:65aa) (*.net *.split)
17:24:17 × statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (*.net *.split)
17:24:17 × plateno quits (~plateno@user/plateno) (*.net *.split)
17:24:17 × edwardk quits (sid47016@haskell/developer/edwardk) (*.net *.split)
17:24:17 × iphy quits (sid67735@tooting.irccloud.com) (*.net *.split)
17:24:17 × immae quits (~immae@2a01:4f8:141:53e7::) (*.net *.split)
17:24:17 × Hecate quits (~mariposa@user/hecate) (*.net *.split)
17:24:17 × ham quits (~ham4@user/ham) (*.net *.split)
17:24:17 × bcoppens quits (~bartcopp@vpn2.bartcoppens.be) (*.net *.split)
17:24:17 × pie_bnc quits (~pie_bnc@user/pie/x-2818909) (*.net *.split)
17:24:17 × df quits (~ben@51.15.198.140) (*.net *.split)
17:24:17 × liskin quits (~liskin@ackle.nomi.cz) (*.net *.split)
17:24:17 × samebchase quits (~samebchas@51.15.68.182) (*.net *.split)
17:24:17 × bjfs quits (bart@kobayashi.com.pl) (*.net *.split)
17:24:17 × supersven quits (uid501114@charlton.irccloud.com) (*.net *.split)
17:24:17 × mikolaj_ quits (~mikolaj@purple.well-typed.com) (*.net *.split)
17:24:17 × keltono quits (~kelton@x-160-94-179-178.acm.umn.edu) (*.net *.split)
17:24:17 × nitrix quits (~nitrix@user/nitrix) (*.net *.split)
17:24:17 × bsima quits (~bsima@simatime.com) (*.net *.split)
17:24:17 × mikolaj quits (~mikon@duch.mimuw.edu.pl) (*.net *.split)
17:24:17 × bcmiller quits (~bm3719@66.42.95.185) (*.net *.split)
17:24:17 × Aardwolf quits (~lode@77-56-208-202.dclient.hispeed.ch) (*.net *.split)
17:24:17 × alp quits (~alp@user/alp) (*.net *.split)
17:24:17 × Pent quits (sid313808@tooting.irccloud.com) (*.net *.split)
17:24:17 × yushyin quits (0mbcixlPGk@karif.server-speed.net) (*.net *.split)
17:24:17 × seeg quits (~thelounge@static.89.161.217.95.clients.your-server.de) (*.net *.split)
17:24:17 × ivan quits (~ivan@user/ivan) (*.net *.split)
17:24:17 × fryguybob quits (~fryguybob@cpe-74-65-31-113.rochester.res.rr.com) (*.net *.split)
17:24:17 × haasn quits (~nand@haasn.dev) (*.net *.split)
17:24:17 × dragestil quits (~quassel@user/dragestil) (*.net *.split)
17:24:17 × Adran quits (~adran@botters/adran) (*.net *.split)
17:24:17 × agander_m quits (sid407952@id-407952.tinside.irccloud.com) (*.net *.split)
17:24:21 <maralorn[m]> monochrom: You’re in a weird phase.
17:24:21 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
17:24:24 Hecate joins (~mariposa@163.172.211.189)
17:24:24 parseval joins (sid239098@id-239098.brockwell.irccloud.com)
17:24:24 mikolaj joins (~mikolaj@purple.well-typed.com)
17:24:25 mikolaj_ joins (~mikon@duch.mimuw.edu.pl)
17:24:25 supersven joins (uid501114@id-501114.charlton.irccloud.com)
17:24:25 dmwit joins (~dmwit@pool-173-66-86-32.washdc.fios.verizon.net)
17:24:28 bcoppens joins (~bartcopp@vpn2.bartcoppens.be)
17:24:28 dixie joins (~dixie@real.wilbury.sk)
17:24:30 edwtjo joins (~edwtjo@h-79-136-7-145.A213.priv.bahnhof.se)
17:24:30 dexterfoo joins (dexter@2a01:7e00::f03c:91ff:fe86:59ec)
17:24:30 ajb joins (~ajb@cupid.whatbox.ca)
17:24:30 mthvedt joins (uid501949@id-501949.stonehaven.irccloud.com)
17:24:30 teehemkay joins (sid14792@id-14792.tooting.irccloud.com)
17:24:32 keltono joins (~kelton@x-160-94-179-178.acm.umn.edu)
17:24:32 sqrt2 joins (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net)
17:24:32 alp joins (~alp@163.172.83.213)
17:24:32 mstruebing joins (~maex@2001:41d0:8:93c7::1)
17:24:33 Pent joins (sid313808@id-313808.tooting.irccloud.com)
17:24:33 samebchase joins (~samebchas@51.15.68.182)
17:24:35 dragestil joins (~quassel@180-150-39-25.b49627.bne.nbn.aussiebb.net)
17:24:36 Aardwolf joins (~lode@77-56-208-202.dclient.hispeed.ch)
17:24:37 fjmorazan joins (~quassel@user/fjmorazan)
17:24:37 fryguybob joins (~fryguybob@cpe-74-65-31-113.rochester.res.rr.com)
17:24:37 Aighearach joins (~paris@c-71-63-160-210.hsd1.or.comcast.net)
17:24:43 guest0123 joins (~aaron@2601:602:a080:fa0:21da:7ddc:2cc6:a10c)
17:24:45 bjfs joins (bart@kobayashi.com.pl)
17:24:45 yushyin joins (exGFiU2tsp@karif.server-speed.net)
17:24:47 liskin joins (~liskin@ackle.nomi.cz)
17:24:49 amir joins (sid22336@id-22336.stonehaven.irccloud.com)
17:24:49 agander_m joins (sid407952@id-407952.tinside.irccloud.com)
17:24:50 pbrisbin joins (~patrick@pool-72-92-38-164.phlapa.fios.verizon.net)
17:24:51 oxide joins (~lambda@61.0.149.238)
17:24:52 thonkpod joins (~thonkpod@2001:19f0:ac01:b46:5400:1ff:fec7:d73d)
17:24:52 joel135 joins (sid136450@id-136450.stonehaven.irccloud.com)
17:24:52 acertain joins (sid470584@id-470584.stonehaven.irccloud.com)
17:24:52 Firedancer joins (sid336191@id-336191.stonehaven.irccloud.com)
17:24:52 Teacup joins (~teacup@user/teacup)
17:24:52 leif joins (uid501722@id-501722.stonehaven.irccloud.com)
17:24:52 peteretep joins (sid143467@id-143467.stonehaven.irccloud.com)
17:24:52 bmsk joins (~user@2001:19f0:5001:2f3b:5400:3ff:fe53:2d96)
17:24:53 funsafe joins (~funsafe@2601:1c1:4200:938f:389d:16a4:ae2d:65aa)
17:24:54 bor0 joins (~boro@46.217.54.116)
17:24:56 jiribenes joins (~jiribenes@rosa.jiribenes.com)
17:25:00 iphy joins (sid67735@2001:67c:2f08:4::1:897)
17:25:00 NemesisD joins (sid24071@2001:67c:2f08:4::5e07)
17:25:01 nitrix joins (~nitrix@ns569831.ip-51-79-81.net)
17:25:04 immae joins (~immae@2a01:4f8:141:53e7::)
17:25:04 edwardk joins (sid47016@2001:67c:2f08:3::b7a8)
17:25:10 × edwtjo quits (~edwtjo@h-79-136-7-145.A213.priv.bahnhof.se) (Changing host)
17:25:10 edwtjo joins (~edwtjo@user/edwtjo)
17:25:14 ivan joins (~ivan@static.38.6.217.95.clients.your-server.de)
17:25:36 × amir quits (sid22336@id-22336.stonehaven.irccloud.com) (Changing host)
17:25:36 amir joins (sid22336@user/amir)
17:25:46 × edwardk quits (sid47016@2001:67c:2f08:3::b7a8) (Changing host)
17:25:46 edwardk joins (sid47016@haskell/developer/edwardk)
17:25:52 × yushyin quits (exGFiU2tsp@karif.server-speed.net) (Client Quit)
17:25:53 × ivan quits (~ivan@static.38.6.217.95.clients.your-server.de) (Changing host)
17:25:53 ivan joins (~ivan@user/ivan)
17:25:59 bjfs is now known as Guest6937
17:26:02 × nitrix quits (~nitrix@ns569831.ip-51-79-81.net) (Changing host)
17:26:02 nitrix joins (~nitrix@user/nitrix)
17:26:07 bmsk is now known as Guest7513
17:26:11 bor0 is now known as Guest929
17:26:14 yushyin joins (iqIKChYq4t@karif.server-speed.net)
17:26:32 sm2n joins (~sm2n@user/sm2n)
17:26:39 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
17:26:40 statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com)
17:26:42 pie_bnc joins (~pie_bnc@user/pie/x-2818909)
17:26:44 abhixec joins (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
17:26:45 bsima joins (~bsima@simatime.com)
17:26:49 ham joins (~ham4@user/ham)
17:26:56 hexology joins (~hexology@user/hexology)
17:27:09 × yushyin quits (iqIKChYq4t@karif.server-speed.net) (Client Quit)
17:27:11 haasn joins (~nand@haasn.dev)
17:27:17 Adran joins (~adran@botters/adran)
17:27:19 vjoki joins (~vjoki@2a00:d880:3:1::fea1:9ae)
17:27:23 berberman joins (~berberman@user/berberman)
17:27:23 yushyin joins (nrX1Axr00h@karif.server-speed.net)
17:27:54 cheater joins (~Username@user/cheater)
17:28:04 Guest31 joins (~textual@cpc146410-hari22-2-0-cust124.20-2.cable.virginm.net)
17:28:47 × liskin quits (~liskin@ackle.nomi.cz) (Client Quit)
17:28:56 liskin joins (~liskin@ackle.nomi.cz)
17:29:20 bcmiller joins (~bm3719@66.42.95.185)
17:29:24 Megant joins (megant@user/megant)
17:29:47 ku joins (~ku@2601:280:c780:7ea0:d1c6:52a:4bf2:1ff2)
17:30:55 × dunkeln quits (~dunkeln@94.129.65.28) (Ping timeout: 244 seconds)
17:31:55 sbmsr joins (~pi@2600:1700:63d0:4830:7dbf:92d8:fd42:235d)
17:32:48 fabfianda[m] joins (~fabfianda@2001:470:69fc:105::6db)
17:34:22 × Pent quits (sid313808@id-313808.tooting.irccloud.com) ()
17:34:34 Pent joins (sid313808@id-313808.tooting.irccloud.com)
17:34:41 Bartosz joins (~textual@24.35.90.211)
17:39:00 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Ping timeout: 265 seconds)
17:40:29 × azeem quits (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it) (Ping timeout: 264 seconds)
17:40:43 myShoggoth joins (~myShoggot@97-120-89-117.ptld.qwest.net)
17:42:17 × shryke quits (~shryke@91.103.43.254) (Ping timeout: 264 seconds)
17:42:57 geekosaur joins (~geekosaur@069-135-003-034.biz.spectrum.com)
17:43:29 × xff0x quits (~xff0x@2001:1a81:52ca:4f00:7b0a:bab9:5836:8b3b) (Ping timeout: 252 seconds)
17:44:17 xff0x joins (~xff0x@2001:1a81:52ca:4f00:7e41:f92f:ed4d:a7b5)
17:45:20 learner-monad joins (~ehanneken@cpe-174-105-47-100.columbus.res.rr.com)
17:47:42 <dminuoso> Im using context to implement simple basic authentication in Servant. Im pondering whether there is a way to short circuit this process for local unix domain sockets.
17:47:59 <dminuoso> A way to have a cli tool talk to the local management socket skipping authentication
17:48:45 mccoyb joins (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632)
17:48:49 <monochrom> ski: (A tangent from the conversation in freenode #haskell) I once had a student who used "show x == show y" for their (==) too. Except that their handwritten Show instance was wrong. And not just "disapproved by Haskell community" wrong. It downright bottomed out on some values.
17:48:52 <Lycurgus> only answer localhost?
17:49:12 <Lycurgus> (or whitelisted ip)
17:50:27 <mccoyb> Hi -- I'm looking for some FFI help with Haskell. In particular, I'm trying to link a `dylib` in for a wrapper package I'm writing to `MLIR`: https://github.com/femtomc/mlir-hs. I'm having trouble getting linking to work correctly. Does anyone have expertise with this?
17:50:33 the-coot[m] joins (~the-cootm@2001:470:69fc:105::95f)
17:50:54 a6a45081-2b83 joins (~aditya@106.212.79.20)
17:51:18 × a6a45081-2b83 quits (~aditya@106.212.79.20) (Remote host closed the connection)
17:51:46 <dminuoso> Lycurgus: I dont have access to that information when popping a context
17:52:26 <dminuoso> Or maybe I do.. let me dive into this
17:53:32 <ski> monochrom : ouch :/
17:53:35 <Lycurgus> if its unix socket ... also unclear if local carried that already and exactly what context means if it was meant exactly
17:53:45 <edwardk> monochrom: FREX uses unsafePerformIO to show the result of `Q (TExp a)` as an Exp, so comparatively that is a minor sin ;)
17:54:30 y04nn joins (~y04nn@193.32.127.220)
17:54:40 <monochrom> Yeah I wouldn't mind if their show implementation were total and injective. But it failed both.
17:54:42 azeem joins (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it)
17:54:48 neceve joins (~quassel@2a02:c7f:607e:d600:a95a:ecd2:e57a:3130)
17:54:57 <dminuoso> Lycurgus: Im talking servant context. But it seems, that all the magic is in HasServer, and I can implement that for a custom context.
17:55:09 <Lycurgus> mccoyb, looks like you've stepped into llvm which is not mere linking
17:55:09 <dminuoso> So I guess I need to handroll the basic authentication hook for HasServer
17:55:20 <monochrom> If a person fails at recursion, they don't just fail at recursive (==), they fail at recursive show too.
17:55:43 lavaman joins (~lavaman@98.38.249.169)
17:56:16 <mccoyb> Lycurgus, interesting. But I have headers and a dylib, shouldn't I be able to link?
17:56:30 <Lycurgus> dminuoso, ah, well that pkgs comes with a number of auth suggestions
17:56:32 ddellacosta joins (~ddellacos@89.45.224.79)
17:56:39 <Lycurgus> (fully implemented)
17:56:45 <monochrom> btw I saw accursedUnutterablePerformIO in Data.ByteString source code :)
17:56:45 <Lycurgus> *pkg
17:57:23 <mccoyb> This is a pure C API, I don't have to handle name mangling, etc. I'm just wrapping a C API (for more info).
17:57:38 <monochrom> Basically 50% of the functions there utter it. It's very utterable.
17:58:09 <Lycurgus> well linking with that should be straightforward, at least from the c side
17:58:41 × oxide quits (~lambda@61.0.149.238) (Changing host)
17:58:41 oxide joins (~lambda@user/oxide)
17:58:52 <Lycurgus> i didn look at ur link but inferred llvm from the IR in MLIR
17:58:58 vicfred joins (~vicfred@user/vicfred)
17:59:51 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 244 seconds)
18:00:22 × mccoyb quits (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
18:00:35 <Lycurgus> confirmed, fortunately since that was an outrageous stretch
18:00:44 mccoyb joins (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632)
18:00:53 × ddellacosta quits (~ddellacos@89.45.224.79) (Ping timeout: 244 seconds)
18:01:00 <mccoyb> Lycurgus -- sorry, I should have been more clear. Yes, no need for difficulties, just linking with C.
18:01:38 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 252 seconds)
18:01:44 <mccoyb> In general, I'm looking for a Haskell package which I can use as a template, is anyone aware of a package which links with a `dylib`?
18:01:45 <Lycurgus> lemme put it this way, once upon a time linking was straightforward
18:02:03 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
18:02:20 <Lycurgus> and fundamentally it still is
18:02:49 igghibu joins (~igghibu@91.193.5.46)
18:03:45 × dmwit quits (~dmwit@pool-173-66-86-32.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
18:07:21 × Guest31 quits (~textual@cpc146410-hari22-2-0-cust124.20-2.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
18:08:05 <mccoyb> My main issue has been getting this stuff working with `stack` and/or `cabal`. I studied `llvm-hs` relatively deeply -- but thought there could be a simpler way to prototype linking without having a custom `Setup.hs`.
18:08:51 <Lycurgus> is llvm the only backend now?
18:09:19 <Lycurgus> it was optional for a long time
18:09:59 <Lycurgus> after link it's all the same object code
18:10:30 × qbt quits (~edun@user/edun) (Quit: WeeChat 3.1)
18:11:14 <Lycurgus> llvm conceptually is like user microprogamming but just, at least on regular cpus
18:14:46 Guest929 is now known as bor0
18:14:48 × bor0 quits (~boro@46.217.54.116) (Changing host)
18:14:48 bor0 joins (~boro@user/bor0)
18:15:23 <mccoyb> Lycurgus -- when you say backend, do you mean final lower target for MLIR? Or are you referring to usage in a different context?
18:15:57 <Lycurgus> compiler backend, the code generation stage, in this case ghc
18:15:59 <bor0> ski, sorry, I was afk. It's true that `ruleGeneralize` can have multiple premises, but I believe we only care about the inner most premise?
18:16:10 <bor0> ski, I might have, as well, misunderstood its description from GEB :)
18:16:16 × ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Read error: Connection reset by peer)
18:16:24 <dminuoso> monochrom: One does wonder, if the usage frequency is so high, whether that doesn't that desensetizes the authors. I mean if you fling it around at every chance, do you really even pay attention to that danger name?
18:16:31 ubikium joins (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net)
18:16:45 <dminuoso> Might at as well call it "mostlySafePerformIO"
18:16:59 <dminuoso> On the basis that all uses of it are considered safe.
18:17:00 × Bartosz quits (~textual@24.35.90.211) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:17:07 jorjor joins (~jorgemene@85.251.190.6.dyn.user.ono.com)
18:17:31 Bartosz joins (~textual@24.35.90.211)
18:18:09 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
18:18:15 Erutuon joins (~Erutuon@user/erutuon)
18:18:27 × prite quits (~pritam@user/pritambaral) (Quit: Konversation terminated!)
18:18:32 <boxscape> maybe they should have chosen a name that's very difficult to type
18:18:52 × Bartosz quits (~textual@24.35.90.211) (Client Quit)
18:19:01 × Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt)
18:19:09 × ubikium quits (~ubikium@113x43x248x70.ap113.ftth.arteria-hikari.net) (Client Quit)
18:19:13 <dminuoso> accursdeUntturabelPerfformIO
18:19:20 <dminuoso> I guarantee, you will mispell it every time.
18:19:25 <boxscape> haha
18:19:40 <monochrom> Unpopular opinion: Every long caml case name is difficult to type anyway.
18:20:04 <monochrom> haha that's nice
18:22:14 curiousgay joins (~quassel@178.217.208.8)
18:22:48 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
18:24:25 df joins (~ben@51.15.198.140)
18:24:26 × sqrt2 quits (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net) (Ping timeout: 265 seconds)
18:24:46 allbery_b joins (~geekosaur@069-135-003-034.biz.spectrum.com)
18:24:54 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Ping timeout: 264 seconds)
18:27:15 sqrt2 joins (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net)
18:28:45 <maerwald> snake case > camel case
18:28:49 <maerwald> there's research
18:29:00 <maerwald> https://ieeexplore.ieee.org/document/5521745
18:29:19 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:30:58 ddellacosta joins (~ddellacos@89.45.224.170)
18:31:36 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.1)
18:33:49 jorjor parts (~jorgemene@85.251.190.6.dyn.user.ono.com) (Konversation terminated!)
18:33:54 <tdammers> kebab case is best
18:33:57 × neceve quits (~quassel@2a02:c7f:607e:d600:a95a:ecd2:e57a:3130) (Ping timeout: 272 seconds)
18:34:10 <maerwald> only chicken
18:34:55 dunkeln joins (~dunkeln@94.129.65.28)
18:35:17 <maerwald> which language does kebab?
18:35:37 <tdammers> lisps
18:36:02 <tdammers> they can pull it off because prefix-everything notation
18:38:41 <nf> > subjects were trained mainly in the underscore style [...] subjects recognize identifiers in the underscore style more quickly
18:38:42 <lambdabot> <hint>:1:30: error: parse error on input ‘in’
18:38:53 <nf> interesting methodology o_Ô
18:39:49 <tdammers> or maybe just randomizing casing conventions entirely is the best way forward, that way everyone has something to complain
18:41:28 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
18:42:31 <maerwald> haskell is a dense language... I read haskell different than C
18:42:37 <maerwald> I wouldn't want camel case in C
18:43:18 __monty__ joins (~toonn@user/toonn)
18:43:51 <nf> i think it's a matter of habit, probably?
18:43:53 × mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer)
18:44:05 × beka quits (~beka@104.193.170-254.PUBLIC.monkeybrains.net) (Ping timeout: 264 seconds)
18:44:13 <maerwald> of course, but how strong the effects are is the question
18:44:34 mcglk joins (~mcglk@131.191.49.120)
18:45:32 dss joins (~dss@144.202.106.125)
18:46:18 dss parts (~dss@144.202.106.125) ()
18:50:28 × benin quits (~benin@183.82.205.186) (Quit: The Lounge - https://thelounge.chat)
18:51:25 × wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:53:35 × bor0 quits (~boro@user/bor0) (Quit: This computer has gone to sleep)
18:54:44 lavaman joins (~lavaman@98.38.249.169)
18:55:28 wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com)
18:56:10 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 244 seconds)
18:57:00 <monochrom> https://0paste.com/251395 shows the problem with camel case.
18:57:29 <monochrom> Error message: non-exhaustive pattern. Can you catch it?
18:57:49 <xsperry> yes, i not capitalized
18:57:58 <nf> not any more than foo_bar/foo-bar shows the problem with snake case :shrug:
18:58:06 <monochrom> Took both the asker and me 10 minutes.
18:58:22 <ski> @tell bor0 "It's true that `ruleGeneralize` can have multiple premises, but I believe we only care about the inner most premise?" -- no, all of them should be taken into account, for the side condition of generalization (`forall'-intro) (as well as for `exists'-elim)
18:58:22 <lambdabot> Consider it noted.
18:58:58 <xsperry> monochrom, to be honest, if you didn't talk about the problem with camel case first, it would probably take me longer
18:59:08 <monochrom> No, would you spot it when you make this kind of mistakes?
18:59:23 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
18:59:27 <monochrom> In fact, even, would you even make this kind of mistakes with snake case for example?
18:59:32 <maerwald> there should be an error AND a warning
18:59:40 <maerwald> the warning should tell you what's wrong
18:59:48 <ski> error for ?
18:59:49 <maerwald> missing type sig
19:00:01 <xsperry> I don't know. I never actually encountered something similar, I'd use editor's auto completion to type most of that function name for me
19:00:08 <monochrom> The problem exists because you attempt to type I in the first place but then fail.
19:00:25 <monochrom> With snake case you won't even attempt.
19:00:38 <ski> iirc, John Hughes generally doesn't put type signatures on his definitions
19:01:32 guest0123 parts (~aaron@2601:602:a080:fa0:21da:7ddc:2cc6:a10c) ()
19:01:33 × azeem quits (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it) (Read error: Connection reset by peer)
19:02:22 × dunkeln quits (~dunkeln@94.129.65.28) (Ping timeout: 244 seconds)
19:03:55 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 244 seconds)
19:06:35 × wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:08:32 <Torro> .discon
19:08:45 <monochrom> It's /discon or /quit
19:08:45 × Torro quits (Torro@gateway/vpn/protonvpn/torro) (Quit: bye)
19:11:05 azeem joins (~azeem@dynamic-adsl-94-34-34-125.clienti.tiscali.it)
19:13:14 × mc47 quits (~yecinem@89.246.239.190) (Remote host closed the connection)
19:13:32 × ku quits (~ku@2601:280:c780:7ea0:d1c6:52a:4bf2:1ff2) (Ping timeout: 268 seconds)
19:15:01 dunkeln joins (~dunkeln@94.129.65.28)
19:15:46 Erutuon joins (~Erutuon@user/erutuon)
19:17:36 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds)
19:18:17 × sbmsr quits (~pi@2600:1700:63d0:4830:7dbf:92d8:fd42:235d) (Quit: WeeChat 2.3)
19:18:52 tremon joins (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl)
19:23:35 × dunkeln quits (~dunkeln@94.129.65.28) (Ping timeout: 252 seconds)
19:23:35 <dminuoso> nf: sample size of 15 too
19:23:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
19:25:37 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:26:41 ppieters joins (~ppieters@105-213-89-241.access.mtnbusiness.co.za)
19:27:13 ku joins (~ku@2601:280:c780:7ea0:a829:e2b3:d453:ddc1)
19:27:30 <dminuoso> And they were volunteers without any selection methodology
19:29:15 <monochrom> Gosh I suck at C because of Haskell.
19:29:24 beka joins (~beka@104.193.170-254.PUBLIC.monkeybrains.net)
19:29:34 <monochrom> I wrote "int fac(int n) { n == 0 ? 1 : n * fac(n-1); }"
19:30:03 <dminuoso> Ontop, they used just 8 phrases for this study, with no explanation how these phrases were selected either.
19:30:08 <monochrom> Since I didn't say "return" I got machine-dependent answers, in my case it always returns 0.
19:31:11 <dminuoso> monochrom: What surprises me is, your compiler doesn't flat out error out?
19:31:22 <monochrom> No :)
19:31:54 <ski> successful compilation is a wonderful thing
19:32:03 × ppieters quits (~ppieters@105-213-89-241.access.mtnbusiness.co.za) (Remote host closed the connection)
19:34:45 × ddellacosta quits (~ddellacos@89.45.224.170) (Ping timeout: 272 seconds)
19:36:56 <mccoyb> Lycurgus -- I'm not sure if what backend GHC uses is relevant here. This problem is just basically "take a generic .dylib + some C header files and get stack to use them in some foreign calls".
19:37:41 mc47 joins (~yecinem@89.246.239.190)
19:38:05 hiptobecubic joins (~john@c-73-55-99-95.hsd1.fl.comcast.net)
19:43:02 brian_da_mage joins (~Neuromanc@adsl-187.46.190.47.tellas.gr)
19:43:02 × brian_da_mage quits (~Neuromanc@adsl-187.46.190.47.tellas.gr) (Changing host)
19:43:02 brian_da_mage joins (~Neuromanc@user/briandamag)
19:44:04 × Shaeto quits (~Shaeto@94.25.234.213) (Quit: WeeChat 3.1)
19:44:29 × sqrt2 quits (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net) (Ping timeout: 252 seconds)
19:44:41 bor0 joins (~boro@46.217.54.116)
19:44:41 × bor0 quits (~boro@46.217.54.116) (Changing host)
19:44:41 bor0 joins (~boro@user/bor0)
19:44:53 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 272 seconds)
19:44:53 justsomeguy joins (~justsomeg@user/justsomeguy)
19:45:05 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 272 seconds)
19:45:32 × igghibu quits (~igghibu@91.193.5.46) (Quit: Textual IRC Client: www.textualapp.com)
19:46:31 Erutuon joins (~Erutuon@user/erutuon)
19:46:36 × Hecate quits (~mariposa@163.172.211.189) (Changing host)
19:46:36 Hecate joins (~mariposa@user/hecate)
19:46:44 <mccoyb> Asking again in case any active chatters have exp -- has anyone linked (dylib + headers) with stack/cabal before and wouldn't mind chatting about it?
19:47:16 × vicfred quits (~vicfred@user/vicfred) (Quit: Leaving)
19:49:42 <bor0> Thanks ski. I didn't get the `@tell` message, though found your reply on ircbrowse
19:50:04 <bor0> Ah! Right after I post a message here lambdabot messages me.
19:52:24 <dminuoso> bor0: Right. Im specifically talking about the usage of `go`.
19:52:29 × chomwitt quits (~Pitsikoko@athedsl-20549.home.otenet.gr) (Ping timeout: 272 seconds)
19:53:33 <dminuoso> bor0: It's not a major deficit necessarily, but since you're writing non-trivial code I thought I'd point it out. The lack of guaranteed fusion is easily addressed by wrapping it with a particular newtype before doing all the fmapping.
19:55:04 <novasenco> people of #haskell. I am still unable to install alsa-mixer with cabal. https://asciinema.org/a/byZnjGK2NOeaIz7xYne3f8A1I
19:55:21 <dminuoso> Wrap with this https://hackage.haskell.org/package/kan-extensions-5.2.2/docs/Data-Functor-Yoneda.html#v:liftYoneda - do your recursive fmapping, and then lowerYoneda out. Done!
19:55:30 <bor0> Thank you. This is a toy implementation, mainly for learning purposes. But I am now curious, could you show a minimal example of achieving this? In my case, `Proof` is already a newtype - or is the trick to do another wrap?
19:55:33 <dminuoso> And completely ignore the scary sounding names.
19:55:53 <bor0> Ah, Yoneda. Seen that many times, but never learned more about it
19:56:19 <dminuoso> bor0: The gist of Yoneda is: if you have repeated fmap applications, with Yoneda GHC has a chance to fuse the function together.
19:56:21 <dminuoso> That's all
19:56:31 <dminuoso> Without it, you will most likely not get any fusion
19:57:10 <bor0> By fusion you mean the composition law, right?
19:57:42 arson joins (~arson@pool-100-36-47-118.washdc.fios.verizon.net)
19:58:03 <dminuoso> The fmap composition law `fmap f . fmap g`, yes.
19:58:28 <davean> novasenco: too new a GCC
19:58:33 <dminuoso> Turning it into `fmap (f . g)` gives better performance, since the cost of fmap is taken only once
19:58:39 <bor0> OK, I think it makes sense. Thanks. Yeah, one `fmap` (application) on the LHS, and two of them on the RHS so I can see how optimization can be affected
19:59:09 <bor0> (Using fmap (f . g) == fmap f . fmap g)
19:59:11 <novasenco> wat
19:59:47 <dminuoso> bor0: Right. Except while the law holds in our minds, GHC cant know whether all instances actually abide, so we need some trickery to force the issue.
20:00:04 <davean> novasenco: your GCC version is too new
20:00:10 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 252 seconds)
20:00:23 <dminuoso> bor0: Internally, Yoneda is really simple. It's just partially applied fmap, with the Functor instance defined as: fmap f m = Yoneda (\k -> runYoneda m (k . f))
20:01:09 <dminuoso> bor0: And since Yoneda is a newtype, it disappears at runtime entirely. So you can see how repeated fmap application `lowerYoneda . fmap f . fmag g . liftYoneda` gets turned into `fmap (f . g)`
20:01:43 <bor0> I see. I knew newtypes were faster, but not because they disappeared at runtime. That's helpful to know!
20:02:15 <davean> bor0: thats what makes newtype not data
20:03:13 ddellacosta joins (~ddellacos@89.45.224.170)
20:03:57 <dminuoso> bor0: And as a teaser, we have a similar trick for repeated applications of >>=, using Codensity/liftCodensity/lowerDensity! :)
20:04:06 × oxide quits (~lambda@user/oxide) (Ping timeout: 268 seconds)
20:04:21 <dminuoso> If you can look over these scary looking names, they're useful primitives to allow GHC to optimize better
20:04:51 <dminuoso> s/lowerDensity/lowerCodensity/
20:04:52 <bor0> Does `do` notation automatically use *density?
20:04:56 <dminuoso> No.
20:04:59 <novasenco> davean, hmm. okay. anything I can do about that?
20:05:29 <davean> novasenco: well you could set an older gcc, oyu're already setting CC manually
20:05:37 oxide joins (~lambda@user/oxide)
20:05:59 <novasenco> (I don't even know if setting CC does anything; I was grasping at straws)
20:06:31 <davean> anything not gcc11 should work
20:06:52 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:07:06 <davean> https://github.com/haskell/c2hs/issues/268
20:07:51 sqrt2 joins (~ben@tunnel330957-pt.tunnel.tserv6.fra1.ipv6.he.net)
20:08:05 × ddellacosta quits (~ddellacos@89.45.224.170) (Ping timeout: 264 seconds)
20:08:44 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:09:24 <dminuoso> bor0: As far as I can tell, you will need Compose too to make this work.
20:09:32 × arrowd quits (~arr@2.94.203.147) ()
20:11:01 <novasenco> hm. oki. thanks
20:11:29 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 272 seconds)
20:11:31 <dminuoso> Ah no, it wouldn't even work with a nested functor.
20:13:04 <bor0> Thanks, this is all useful, although probably way beyond me at this point. If at least one more person gets to use this, I'll be happy to get deeper into optimization :D
20:13:13 <dminuoso> bor0: Let me show you, it's really simple! :)
20:13:30 ddellacosta joins (~ddellacos@89.46.62.170)
20:13:39 <bor0> Sure! Let's talk specifically about `go`. I think that'll help :D
20:15:53 × _xft0 quits (~root@185.234.208.208.r.toneticgroup.pl) (Ping timeout: 264 seconds)
20:16:01 <davean> novasenco: you might get around it by installing c2hs with a newer language-c, but who knows
20:16:06 × AgentM quits (~agentm@pool-162-83-130-212.nycmny.fios.verizon.net) (Quit: Leaving.)
20:17:24 <dminuoso> bor0: There might be the odd typo here, but roughly this: https://gist.github.com/dminuoso/fef54010b5d7dd475245d6f9b6546737
20:18:17 <dminuoso> Typo fixed, reload! :)
20:18:52 <dminuoso> Ah there's some small impedance mismatching with the argument `x` here
20:19:52 × Cubic quits (~hannesste@ip5f5be453.dynamic.kabel-deutschland.de) (Quit: leaving)
20:20:55 <dminuoso> Ah I see what's wrong. We need to massage the function `f` first
20:21:30 <bor0> Yeah, YESP x vs Either String (Proof x)
20:21:53 <bor0> I noticed that but thought that'd be handled by some of the magic between L5-L9 :D
20:22:09 <dminuoso> bor0: Reload, it should be fine now
20:22:58 dunkeln joins (~dunkeln@94.129.65.28)
20:23:20 ski would use `<$>'
20:23:26 ec joins (~ec@gateway/tor-sasl/ec)
20:24:09 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
20:24:28 <bor0> Small typo on line 13, just a nit.
20:24:36 <bor0> Ahhh Yoneda isn't in base.
20:24:41 <ski> bor0 : oh, another thing i thought about (but forgot to say), is that `applyPropRule' could generalize from `Either String' to any functor
20:24:42 <dminuoso> Yeah, its from kan-extensions
20:24:43 econo joins (uid147250@user/econo)
20:25:04 × kuribas quits (~user@ptr-25vy0i96apm5u45pamz.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
20:25:11 <dminuoso> But, if that's too heavy for you, you can just reimplement Yoneda yourself. It's just a few lines of code.
20:27:13 ixlun joins (~matthew@109.249.184.235)
20:27:52 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:27:53 × michalz quits (~user@185.246.204.45) (Remote host closed the connection)
20:28:09 <dminuoso> The Compose/getCompose could be dropped if you used `x <&&> f = fmap (fmap f) x` probably. Fusion should still happen (because the inner fmap would disappear since its just a newtype)
20:28:30 × dpl_ quits (~dpl@77-121-78-163.chn.volia.net) (Ping timeout: 264 seconds)
20:29:13 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Ping timeout: 272 seconds)
20:37:01 × mikoto-chan quits (~mikoto-ch@ip-213-49-189-31.dsl.scarlet.be) (Ping timeout: 272 seconds)
20:37:13 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
20:41:14 dpl_ joins (~dpl@77-121-78-163.chn.volia.net)
20:41:18 maralorn[m] is now known as maralorn
20:44:34 × maralorn quits (~maralorn@2001:470:69fc:105::251) (Quit: node-irc says goodbye)
20:44:50 maralorn joins (~maralorn@2001:470:69fc:105::251)
20:46:19 arson parts (~arson@pool-100-36-47-118.washdc.fios.verizon.net) ()
20:46:21 × mc47 quits (~yecinem@89.246.239.190) (Quit: Leaving)
20:48:28 × mccoyb quits (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632) (Quit: Textual IRC Client: www.textualapp.com)
20:48:50 Guest60 joins (~Guest60@90.242.128.21)
20:50:19 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
20:50:36 Digit joins (~user@user/digit)
20:51:54 × amahl quits (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 244 seconds)
20:55:10 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 252 seconds)
20:57:19 × orzo quits (joe@lasker.childrenofmay.org) (*.net *.split)
20:57:32 orzo joins (joe@lasker.childrenofmay.org)
20:57:39 Guest60 is now known as Abedegno
20:58:04 × ddellacosta quits (~ddellacos@89.46.62.170) (Remote host closed the connection)
20:58:15 ddellacosta joins (~ddellacos@89.46.62.170)
20:59:57 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
21:01:13 unyu joins (~pyon@user/pyon)
21:01:37 dy joins (~dy@user/dy)
21:06:14 × Abedegno quits (~Guest60@90.242.128.21) (Ping timeout: 250 seconds)
21:06:17 × beka quits (~beka@104.193.170-254.PUBLIC.monkeybrains.net) (Ping timeout: 264 seconds)
21:06:26 × derelict quits (~winter@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com) (Ping timeout: 252 seconds)
21:07:23 × Ariakenom quits (~Ariakenom@2001:9b1:efb:fc00:d9c3:69a3:f97b:be95) (Read error: Connection reset by peer)
21:08:37 × ddellacosta quits (~ddellacos@89.46.62.170) (Remote host closed the connection)
21:09:52 × funsafe quits (~funsafe@2601:1c1:4200:938f:389d:16a4:ae2d:65aa) (Quit: funsafe)
21:10:12 funsafe joins (~funsafe@2601:1c1:4200:938f:389d:16a4:ae2d:65aa)
21:11:43 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
21:14:08 × myShoggoth quits (~myShoggot@97-120-89-117.ptld.qwest.net) (Ping timeout: 252 seconds)
21:15:16 lavaman joins (~lavaman@98.38.249.169)
21:15:24 × dunkeln quits (~dunkeln@94.129.65.28) (Ping timeout: 272 seconds)
21:15:29 sondre joins (~sondrelun@cm-84.212.100.140.getinternet.no)
21:18:33 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:20:06 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
21:20:49 × ixlun quits (~matthew@109.249.184.235) (Read error: Connection reset by peer)
21:22:09 dustinm joins (~dustinm@static.38.6.217.95.clients.your-server.de)
21:26:48 egoist joins (~egoist@186.235.82.52)
21:26:57 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
21:27:55 tromp joins (~textual@dhcp-077-249-230-040.chello.nl)
21:30:23 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:32:34 mccoyb joins (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632)
21:32:37 × mccoyb quits (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632) (Client Quit)
21:33:15 wenzel_ joins (~wenzel@user/wenzel)
21:33:36 allbery_b is now known as geekosaur
21:34:24 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
21:35:40 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
21:36:18 × wenzel quits (~wenzel@user/wenzel) (Ping timeout: 264 seconds)
21:37:18 × learner-monad quits (~ehanneken@cpe-174-105-47-100.columbus.res.rr.com) (Quit: WeeChat 3.1)
21:37:25 × wenzel_ quits (~wenzel@user/wenzel) (Client Quit)
21:39:25 × xsperry quits (~as@user/xsperry) (Read error: Connection reset by peer)
21:39:52 myShoggoth joins (~myShoggot@97-120-89-117.ptld.qwest.net)
21:39:55 mccoyb joins (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632)
21:41:47 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2-dev)
21:43:47 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
21:44:16 imdoor joins (~imdoor@balticom-142-78-50.balticom.lv)
21:44:20 × pbrisbin quits (~patrick@pool-72-92-38-164.phlapa.fios.verizon.net) (Quit: WeeChat 3.1)
21:44:33 pbrisbin joins (~patrick@pool-72-92-38-164.phlapa.fios.verizon.net)
21:45:25 × tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:45:30 ddellacosta joins (~ddellacos@89.45.224.40)
21:45:51 × bfrk quits (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
21:46:26 notzmv joins (~zmv@user/notzmv)
21:47:15 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Quit: Lost terminal)
21:50:06 × ddellacosta quits (~ddellacos@89.45.224.40) (Ping timeout: 264 seconds)
21:51:24 × sheepduck quits (~sheepduck@2607:fea8:2a60:b700::8a94) (Remote host closed the connection)
21:52:27 vdukhovni joins (~vdukhovni@100.2.39.101)
21:53:14 × Digit quits (~user@user/digit) (Ping timeout: 265 seconds)
21:54:14 beka joins (~beka@104.193.170-254.PUBLIC.monkeybrains.net)
21:54:18 × mccoyb quits (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
21:56:06 sheepduck joins (~sheepduck@2607:fea8:2a60:b700::8a94)
21:56:56 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
22:00:30 <novasenco> davean, well, I did ghcup tui and then installed latest ghc and set it. Then, for some reason, it also updated c2hs, though I don't know how or why. And it looks like alsa-mixer is installing ^u^
22:00:41 dutchgriffon joins (~laurens@2604:3d08:4383:6200:14a:dacb:8b69:ead6)
22:00:43 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:01:22 <novasenco> (ie, I installed prereleast,base-4.16.0.0)
22:01:28 <novasenco> s/st/se
22:01:52 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
22:02:56 × haskman quits (~haskman@106.201.8.96) (Quit: Going to sleep. ZZZzzz…)
22:03:19 blankhart joins (~blankhart@pool-72-88-174-206.nwrknj.fios.verizon.net)
22:03:23 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:03:58 <novasenco> sike. It failed with the same error; it just took longer.
22:04:05 ddellacosta joins (~ddellacos@86.106.143.209)
22:04:48 × bor0 quits (~boro@user/bor0) (Quit: Leaving)
22:06:42 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 272 seconds)
22:08:01 <blankhart> is there a canonical discussion of how to implement higher kinded types? (as a compiler writer not as a language user)
22:10:03 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9) (Remote host closed the connection)
22:10:23 <geekosaur> novasenko, either downgrade gcc (if possible) or wait for https://github.com/haskell/c2hs/issues/268 to be fixed
22:12:24 <ski> blankhart : allow type variables to have arbitrary kind ?
22:12:25 × sondre quits (~sondrelun@cm-84.212.100.140.getinternet.no) (Ping timeout: 245 seconds)
22:12:50 <blankhart> looks like i may have been looking for TAPL ch 29
22:13:24 × xwx quits (~george@user/george) (Quit: WeeChat 3.1)
22:15:12 <novasenco> geekosaur, I be waiting -_- In the meantime, at least I have my handy dandy script bound to xmonad key bindings https://gist.github.com/novasenco/a048f34753cc3eb76eef7da5e8b59ee4
22:15:17 × myShoggoth quits (~myShoggot@97-120-89-117.ptld.qwest.net) (Ping timeout: 264 seconds)
22:16:15 <novasenco> (eg, vol -i, vol -d, and vol to (resp) increase vol to nearest mult of 5, decrease vol to nearest multiple of 5, or show volume - all of them use notify-send to show volume. works for now. thanks for your help.)
22:18:13 × hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 252 seconds)
22:18:53 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds)
22:19:03 janus joins (janus@anubis.0x90.dk)
22:19:23 <janus> i am trying to build with profiling, so i put "profiling: true" in cabal.project
22:19:43 <janus> but a transitive dependency called convertible (from hdbc) is failing
22:19:56 <janus> the error message is https://paste.tomsmeding.com/KDHTbbaa
22:20:06 hendursaga joins (~weechat@user/hendursaga)
22:20:26 <janus> how can the profiling libraries for that package be missing? wouldn't cabal know whether it needs rebuilding?
22:26:41 × dpl_ quits (~dpl@77-121-78-163.chn.volia.net) (Ping timeout: 264 seconds)
22:26:44 <janus> is this even the right channel for that question? guess it isn't really specific to haskell the language
22:26:49 <janus> but i don't know of a cabal channel
22:27:22 <monochrom> This is the right channel, but I haven't run into that kind of problem so I have no answer.
22:28:46 <janus> i have ghc from ghcup so it should support profiling (i say that because previously i was using OS packages where you'd have to get that in a separate package)
22:29:51 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5878:fcfd:e07b:ffd9)
22:31:39 × tremon quits (~tremon@217-63-61-89.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
22:31:53 <janus> i suspect it may be somewith with convertible being so old, seems like it wasn't updated for years: https://github.com/hdbc/convertible
22:32:18 <janus> but on the other hand, it has "Build-Type: Simple", so that shouldn't cause problems...
22:32:24 × dragestil quits (~quassel@180-150-39-25.b49627.bne.nbn.aussiebb.net) (Changing host)
22:32:24 dragestil joins (~quassel@user/dragestil)
22:32:24 <dminuoso> Lets say I really wanted to override an existing Show instance, I dont care whether its dirty. Do I have any options?
22:33:05 <dminuoso> I have just 2 types, that occur deeply nested in my data types that have a very unsuitable Show instance. And Im *really* fine with Show otherwise for this output.
22:33:28 <dminuoso> Or is forking my best bet here?
22:33:39 <dminuoso> (that is, forking the library that introduces the undesirable Show instance)
22:34:31 <geekosaur> I don't think overlapping will work if the instance heads are identical (I may be wrong) so forking may be your only alternative
22:35:18 × vdukhovni quits (~vdukhovni@100.2.39.101) (Quit: Client closed)
22:35:26 <dminuoso> mmm, perhaps I should just try overlapping instances then
22:35:29 is7s joins (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e)
22:36:02 <janus> now i wonder what happens if you have two instances, where one requires a 'trivial' constraint like HasCallStack ... hmm
22:36:11 × hrnz quits (~ulli@cherry.hrnz.li) (Quit: das ist mir zu bld hier; bb)
22:36:23 hrnz joins (~ulli@cherry.hrnz.li)
22:38:16 × GIANTWORLDKEEPER quits (~pjetcetal@2.95.204.25) (Ping timeout: 268 seconds)
22:38:33 zeenk joins (~zeenk@2a02:2f04:a310:b600:b098:bf18:df4d:4c41)
22:38:37 <hpc> constraints don't count for instance resolution
22:39:26 <hpc> so like, "instance Applicative f => Monad f" resolves the same as "instance Monad f"
22:39:43 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Remote host closed the connection)
22:39:44 bfrk joins (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de)
22:40:05 geekosaur joins (~geekosaur@069-135-003-034.biz.spectrum.com)
22:40:45 <monochrom> To get dirty, the "reflection" package, or the idea within, may help, I forgot whether it does help. But the idea is you can supply a record value and convert it to a class dictionary and sneak it in by a backdoor, so now without newtyping you can change the dictionary at will.
22:40:55 is7s parts (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e) ()
22:41:03 is7s joins (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e)
22:41:09 GIANTWORLDKEEPER joins (~pjetcetal@2.95.204.25)
22:41:11 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
22:41:37 is7s parts (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e) ()
22:42:30 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
22:43:54 <dminuoso> Mmm, I dont understand the phrasing in https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/instances.html
22:44:12 is7s joins (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e)
22:44:13 <dminuoso> Naively I'd expect `instance {-# OVERLAPPING #-} Show T` to just work
22:44:34 <dminuoso> % instance {-# OVERLAPPING #-} Show Int where show _ = "foo"
22:44:34 <yahb> dminuoso: ; <interactive>:15:30: error:; Duplicate instance declarations:; instance [overlapping] Show Int -- Defined at <interactive>:15:30; instance Show Int -- Defined in `GHC.Show'
22:45:15 <monochrom> overlapping still wants to see at most one match. It is incoherentinstances that is happy with multiple matches just randomly pick one.
22:45:24 <janus> hpc: aaaah right, makes sense! and i see it in the ghc user guide link that dminuoso provided
22:45:33 <dminuoso> monochrom: Oh that might be acceptable!
22:45:53 × fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 264 seconds)
22:45:55 <monochrom> If it picks the one you hate, please don't cry. :)
22:46:54 <dminuoso> Well Ill debug GHC and see how I can massage it into picking the right one :>
22:47:22 <dminuoso> Mmm
22:47:26 <dminuoso> % instance {-# INCOHERENT #-} Show Int where show _ = "foo"
22:47:26 <yahb> dminuoso: ; <interactive>:16:29: error:; Duplicate instance declarations:; instance [incoherent] Show Int -- Defined at <interactive>:16:29; instance Show Int -- Defined in `GHC.Show'
22:48:01 <monochrom> I guess I worded wrong. s/at most one match/a single match that is more specific than all other matches/
22:48:19 <dminuoso> Yeah. I guess IncoherentInstances only works if the matches are not most specific
22:48:45 × niflce quits (~IceChat95@user/niflce) (Ping timeout: 268 seconds)
22:48:57 <monochrom> If you have two incomparable matches, then it's incoherentinstances.
22:50:03 boioioing joins (~boioioing@cpe-76-84-141-127.neb.res.rr.com)
22:50:48 <dminuoso> Why wont GHC let me just specify "discard this dictionary from a package" :(
22:57:48 derelict joins (~winter@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com)
22:57:53 ec_ joins (~ec@gateway/tor-sasl/ec)
22:59:37 mccoyb joins (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632)
23:02:01 neceve joins (~quassel@2a02:c7f:607e:d600:a95a:ecd2:e57a:3130)
23:02:41 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
23:03:17 × alx741 quits (~alx741@186.178.108.160) (Ping timeout: 264 seconds)
23:06:52 × ddellacosta quits (~ddellacos@86.106.143.209) (Remote host closed the connection)
23:06:52 × derelict quits (~winter@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com) (Ping timeout: 272 seconds)
23:11:32 vdukhovni joins (~vdukhovni@100.2.39.101)
23:12:41 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
23:13:21 ddellacosta joins (~ddellacos@89.45.224.118)
23:15:48 myShoggoth joins (~myShoggot@97-120-89-117.ptld.qwest.net)
23:15:51 alx741 joins (~alx741@181.196.69.176)
23:16:46 spatchkaa joins (~spatchkaa@S010600fc8da47b63.gv.shawcable.net)
23:17:06 × vdukhovni quits (~vdukhovni@100.2.39.101) (Quit: Client closed)
23:17:21 × is7s quits (~is7s@2a01:4b00:895f:3d00:a806:e7e7:5179:550e) (Quit: Client closed)
23:18:53 benin joins (~benin@183.82.205.186)
23:21:34 bfrk1 joins (~Thunderbi@200116b845fca000f97ff890167a6943.dip.versatel-1u1.de)
23:21:44 × bfrk quits (~Thunderbi@200116b84593d400e083e41adfb91d63.dip.versatel-1u1.de) (Ping timeout: 244 seconds)
23:21:44 bfrk1 is now known as bfrk
23:24:07 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: nvkjsb)
23:25:28 yav joins (~username@2001:428:6002:405:c8cd:63fb:2af4:b319)
23:27:09 × boioioing quits (~boioioing@cpe-76-84-141-127.neb.res.rr.com) (Remote host closed the connection)
23:29:00 × yav quits (~username@2001:428:6002:405:c8cd:63fb:2af4:b319) (Remote host closed the connection)
23:30:15 yav joins (~username@2001:428:6002:405:c8cd:63fb:2af4:b319)
23:30:32 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:37:11 × ec_ quits (~ec@gateway/tor-sasl/ec) (Quit: ec_)
23:37:27 pavonia_ joins (~user@user/siracusa)
23:39:37 sayola1 joins (~vekto@88.78.152.150)
23:39:54 × pavonia quits (~user@user/siracusa) (Ping timeout: 264 seconds)
23:39:54 × sayola quits (~vekto@dslb-088-078-152-150.088.078.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
23:40:35 × tv quits (~tv@user/tv) (Ping timeout: 272 seconds)
23:41:35 × pavonia_ quits (~user@user/siracusa) (Ping timeout: 245 seconds)
23:41:38 allbery_b joins (~geekosaur@069-135-003-034.biz.spectrum.com)
23:42:00 × yav quits (~username@2001:428:6002:405:c8cd:63fb:2af4:b319) (Remote host closed the connection)
23:42:08 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
23:42:23 × geekosaur quits (~geekosaur@069-135-003-034.biz.spectrum.com) (Killed (NickServ (GHOST command used by allbery_b)))
23:42:28 allbery_b is now known as geekosaur
23:44:14 × sayola1 quits (~vekto@88.78.152.150) (Ping timeout: 272 seconds)
23:44:14 tv joins (~tv@user/tv)
23:46:56 pavonia joins (~user@user/siracusa)
23:47:24 WhyNot joins (~Thunderbi@2a02:aa12:540:e480:d738:2660:2e:8993)
23:48:13 hiruji` joins (~hiruji@72.74.190.75)
23:49:54 × hiruji` quits (~hiruji@72.74.190.75) (Client Quit)
23:49:59 × hiruji quits (~hiruji@user/hiruji) (Ping timeout: 272 seconds)
23:50:18 hiruji joins (~hiruji@user/hiruji)
23:50:41 × mnrmnaugh quits (~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net) (Ping timeout: 264 seconds)
23:51:05 mnrmnaugh joins (~mnrmnaugh@pool-96-252-87-182.bstnma.fios.verizon.net)
23:52:36 × mccoyb quits (~textual@2601:182:d000:3b50:74fc:67c:ef8b:8632) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
23:53:26 × WhyNot quits (~Thunderbi@2a02:aa12:540:e480:d738:2660:2e:8993) (Quit: WhyNot)
23:55:37 derelict joins (~winter@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com)
23:57:47 fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
23:59:11 pavonia_ joins (~user@user/siracusa)

All times are in UTC on 2021-06-01.