2020/12/14

2020-12-14 00:00:16 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Ping timeout: 240 seconds)
2020-12-14 00:01:54 +0100xsperry(~as@unaffiliated/xsperry) ()
2020-12-14 00:02:06 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-12-14 00:04:58 +0100Rembane(~Rembane@li346-36.members.linode.com) (Remote host closed the connection)
2020-12-14 00:07:14 +0100Rembane(~Rembane@li346-36.members.linode.com)
2020-12-14 00:08:53 +0100 <quarters> hello. I'm trying to follow this tutorial https://adit.io/posts/2013-04-15-making-a-website-with-haskell.html while stripping out some of the "magical"/unexplained parts like a number of the import statements and seeing it break and learning by identifying the missing parts that made it break. While doing this, I get an error: https://dpaste.org/zyus error: parse error on input ‘deriving’ and was wondering what the bare minimum
2020-12-14 00:08:53 +0100 <quarters> for addressing this could be
2020-12-14 00:09:35 +0100 <Rembane> quarters: Add the words after the word deriving. :)
2020-12-14 00:09:57 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 00:10:05 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net) (Quit: alestane)
2020-12-14 00:11:44 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net)
2020-12-14 00:11:45 +0100plutoniix(~q@node-uhc.pool-125-24.dynamic.totinternet.net) (Quit: Leaving)
2020-12-14 00:12:55 +0100cosimone(~cosimone@2001:b07:ae5:db26:1fb3:ef3f:ece2:c6f8)
2020-12-14 00:15:18 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-14 00:15:43 +0100Sheilong(uid293653@gateway/web/irccloud.com/x-besskplfeidxcvug) (Quit: Connection closed for inactivity)
2020-12-14 00:15:50 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 00:16:45 +0100 <quarters> Rembane: sorry. I don't understand. I tried looking up deriving to see its usage and found this which is also confusinghttps://stackoverflow.com/questions/6082090/haskell-deriving-show-for-custom-type
2020-12-14 00:17:01 +0100 <Axman6> quarters: as far as I understand, the syntax of the quasiquote used by persistent is not the same as the syntax for defining haskell data types
2020-12-14 00:17:29 +0100 <Axman6> I would be surprised if deriving is supported in the quasiquote at all
2020-12-14 00:17:36 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 00:17:45 +0100 <quarters> Axman6: thank you! quasiquote was it!
2020-12-14 00:17:50 +0100 <Axman6> hmm, I'm wrong, sorry
2020-12-14 00:18:13 +0100 <quarters> I now found the reason why {-# LANGUAGE QuasiQuotes #-}
2020-12-14 00:18:14 +0100 <quarters> was included :)
2020-12-14 00:18:19 +0100 <quarters> from here https://gist.githubusercontent.com/egonSchiele/5400694/raw/ed1a15dc0d768ce603ab788ecd149862457533a…
2020-12-14 00:18:25 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
2020-12-14 00:18:29 +0100 <Axman6> yes, that's what [persist| ... |] is
2020-12-14 00:18:29 +0100 <quarters> which I removed intentionally since there was no explanation of its purpose
2020-12-14 00:18:41 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-12-14 00:18:49 +0100conal_(~conal@64.71.133.70) (Ping timeout: 265 seconds)
2020-12-14 00:18:54 +0100 <quarters> I'm trying to lazily learn haskell concepts, if that makes sense
2020-12-14 00:19:09 +0100 <Axman6> this does not seem like a good approach to me
2020-12-14 00:20:32 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-12-14 00:21:07 +0100 <Axman6> and trying to learn haskell by starting with yesod seems like a particularly difficult path, there is _a lot_ magic in yesod
2020-12-14 00:21:08 +0100 <merijn> Axman6: persistent uses deriving in its quasi quoter for, well, adding deriving :p
2020-12-14 00:21:16 +0100 <Axman6> yeah I was wrong
2020-12-14 00:22:18 +0100christo(~chris@81.96.113.213)
2020-12-14 00:22:24 +0100 <Axman6> without having the whole code I assumed that the quasiquote was working because the extension would have been enabled
2020-12-14 00:23:24 +0100 <merijn> but yeah, randomly copying code and commenting out bits isn't going to be very educational
2020-12-14 00:23:38 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.)
2020-12-14 00:23:42 +0100Alleria_(~AllahuAkb@2604:2000:1484:26:243e:f6eb:6465:f2c9) (Ping timeout: 260 seconds)
2020-12-14 00:24:03 +0100 <quarters> ok. I will rethink my approach then :)
2020-12-14 00:24:39 +0100 <Axman6> asking questions in here when you get stuck on something will be much more fruitful
2020-12-14 00:24:53 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-14 00:24:58 +0100 <quarters> my concern is that I'll frontload all the learning while losing a lot of it due to disuse
2020-12-14 00:24:59 +0100 <monochrom> This is a good approach if you comment out everything web-related.
2020-12-14 00:25:20 +0100solonarv(~solonarv@astrasbourg-157-1-27-135.w90-40.abo.wanadoo.fr) (Ping timeout: 256 seconds)
2020-12-14 00:25:23 +0100Alleria_(~AllahuAkb@2604:2000:1484:26:bd49:94e5:c539:ee9b)
2020-12-14 00:25:33 +0100 <monochrom> In fact, s/comment out/delete/
2020-12-14 00:26:15 +0100 <Axman6> the web was a mistake
2020-12-14 00:27:44 +0100 <monochrom> You aspire "one day I'll join NASA and build rockets" so you apply for engineering school and you get admitted.
2020-12-14 00:28:15 +0100 <monochrom> First year courses are basic physics, basic engineering drawing, basic calculus, basic toy examples, basic everything.
2020-12-14 00:28:31 +0100 <Axman6> man, reading that post is just reminding me how painful yesod is
2020-12-14 00:28:34 +0100 <monochrom> That's how you build a rocket. By not starting with "project-based learning".
2020-12-14 00:29:16 +0100 <monochrom> If you don't take Haskell types seriously, there is no way you will understand any of the web frameworks on Hackage.
2020-12-14 00:29:25 +0100 <Axman6> oh it's not even yesod, it's just persistent which is painful
2020-12-14 00:29:34 +0100 <monochrom> It is not enough to "know" them. You have to take them seriously.
2020-12-14 00:30:28 +0100 <Axman6> yeah trying to use a Haskell web framework, except the most stringly typed ones, without having a good grasp of haskell types and some patterns is going to be very painful
2020-12-14 00:30:31 +0100 <quarters> will the hls also be able to suggest pragmas that can fix issues?
2020-12-14 00:32:25 +0100 <Axman6> sometimes... but if hls isn't going to help you if you don't know the language to begin with
2020-12-14 00:32:37 +0100cosimone(~cosimone@2001:b07:ae5:db26:1fb3:ef3f:ece2:c6f8) (Quit: cosimone)
2020-12-14 00:36:31 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-12-14 00:41:36 +0100shenyi(uid216035@gateway/web/irccloud.com/x-jphgcsxjzhmtvsqg) (Quit: Connection closed for inactivity)
2020-12-14 00:41:59 +0100 <nineonine> hello everyone. I have 2 packages that I develop locally - `foo` and `bar`. How do I tell Cabal that `bar` should use locally built library from `foo` ?
2020-12-14 00:43:14 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-14 00:43:25 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds)
2020-12-14 00:45:42 +0100 <merijn> nineonine: You want a cabal.project file
2020-12-14 00:46:32 +0100 <merijn> nineonine: Just add a line "packages: " with paths to the cabal files
2020-12-14 00:46:40 +0100 <merijn> https://github.com/merijn/broadcast-chan/blob/master/cabal.project#L1
2020-12-14 00:46:56 +0100 <merijn> (the other lines are pretty much unnecessary/optional)
2020-12-14 00:47:05 +0100 <nineonine> merijn, many thanks!
2020-12-14 00:47:13 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com) (Ping timeout: 260 seconds)
2020-12-14 00:47:44 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com)
2020-12-14 00:48:54 +0100Kronic(~Kronic___@84.203.98.133) (Read error: Connection reset by peer)
2020-12-14 00:50:02 +0100 <quarters> I had thought that the code here https://gist.githubusercontent.com/egonSchiele/5400694/raw/ed1a15dc0d768ce603ab788ecd149862457533a… would run just fine, but I'm seeing this error: "Not in scope: ‘persist’"
2020-12-14 00:50:29 +0100__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-12-14 00:50:36 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 240 seconds)
2020-12-14 00:52:06 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net)
2020-12-14 00:55:18 +0100Mikagami(~MOSCOS@152.32.70.55)
2020-12-14 00:55:32 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru) (Quit: vfaronov)
2020-12-14 00:56:11 +0100shons(~shons@182.1.111.32) (Quit: Leaving)
2020-12-14 00:56:58 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Ping timeout: 260 seconds)
2020-12-14 00:58:16 +0100MOSCOS(~MOSCOS@122.54.107.175) (Ping timeout: 240 seconds)
2020-12-14 00:58:42 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-14 01:00:08 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
2020-12-14 01:00:28 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK)
2020-12-14 01:00:52 +0100Mikagami(~MOSCOS@152.32.70.55) (Ping timeout: 265 seconds)
2020-12-14 01:02:45 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 01:03:59 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-12-14 01:04:47 +0100dcoutts(~dcoutts@unaffiliated/dcoutts) (Read error: No route to host)
2020-12-14 01:05:02 +0100dcoutts(~dcoutts@33.14.75.194.dyn.plus.net)
2020-12-14 01:05:02 +0100dcoutts(~dcoutts@33.14.75.194.dyn.plus.net) (Changing host)
2020-12-14 01:05:02 +0100dcoutts(~dcoutts@unaffiliated/dcoutts)
2020-12-14 01:06:25 +0100Gigabitten(~Somn@098-127-002-172.res.spectrum.com)
2020-12-14 01:10:10 +0100dax(dax@bitbot/dax)
2020-12-14 01:11:11 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2020-12-14 01:11:59 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-12-14 01:13:29 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 01:15:47 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds)
2020-12-14 01:16:55 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-12-14 01:17:04 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: fuzzypixelz)
2020-12-14 01:18:17 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 01:21:47 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de)
2020-12-14 01:22:24 +0100notzmv(~user@unaffiliated/zmv)
2020-12-14 01:22:43 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net) (Quit: alestane)
2020-12-14 01:25:55 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
2020-12-14 01:26:19 +0100Wuzzy(~Wuzzy@p549c9bc8.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-12-14 01:31:15 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com) (Read error: Connection reset by peer)
2020-12-14 01:31:16 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 01:31:23 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de) (Ping timeout: 260 seconds)
2020-12-14 01:33:17 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de)
2020-12-14 01:36:33 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 01:36:57 +0100mirrorbird(~psutcliff@2a00:801:2d6:5a31:e851:a991:dd63:f024)
2020-12-14 01:37:26 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-12-14 01:37:49 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com)
2020-12-14 01:38:13 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-12-14 01:38:36 +0100SomeoneSerge(~someone-s@89.46.223.79) (Ping timeout: 272 seconds)
2020-12-14 01:40:27 +0100Ariakenom(~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se) (Quit: Leaving)
2020-12-14 01:43:41 +0100christo(~chris@81.96.113.213)
2020-12-14 01:46:50 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 272 seconds)
2020-12-14 01:46:54 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 01:47:16 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 240 seconds)
2020-12-14 01:48:18 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-12-14 01:48:26 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2020-12-14 01:52:06 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-14 01:54:56 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 01:55:12 +0100conal(~conal@64.71.133.70)
2020-12-14 01:56:12 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 260 seconds)
2020-12-14 01:56:18 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 01:58:10 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net) (Remote host closed the connection)
2020-12-14 01:58:42 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-14 01:59:42 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 01:59:48 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-14 01:59:58 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds)
2020-12-14 02:00:00 +0100karolus(~karolus@static.32.230.217.95.clients.your-server.de) (Read error: Connection reset by peer)
2020-12-14 02:02:29 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net)
2020-12-14 02:03:18 +0100catchme(uid355354@gateway/web/irccloud.com/x-mmxzzojjfcqrnkrg) (Quit: Connection closed for inactivity)
2020-12-14 02:05:50 +0100notzmv(~user@unaffiliated/zmv) (Remote host closed the connection)
2020-12-14 02:09:02 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 260 seconds)
2020-12-14 02:10:12 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 260 seconds)
2020-12-14 02:16:53 +0100notzmv(~user@unaffiliated/zmv)
2020-12-14 02:18:50 +0100notzmv(~user@unaffiliated/zmv) (Remote host closed the connection)
2020-12-14 02:18:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 02:19:36 +0100notzmv(~user@unaffiliated/zmv)
2020-12-14 02:20:09 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 02:21:06 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 258 seconds)
2020-12-14 02:21:40 +0100thunderrd(~thunderrd@183.182.111.131)
2020-12-14 02:22:15 +0100_xor(~xor@74.215.46.133) (Quit: brb)
2020-12-14 02:23:03 +0100justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-12-14 02:24:32 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-14 02:29:11 +0100 <ezzieyguywuf> do y'all use any code formatters? if so which? (i.e. ormolu, brittany)
2020-12-14 02:30:13 +0100 <monochrom> I don't use one. But fourmolu has a better attitude than ormolu. :)
2020-12-14 02:30:40 +0100 <ezzieyguywuf> lol, do you care to ellaborate?
2020-12-14 02:30:49 +0100Gigabitten(~Somn@098-127-002-172.res.spectrum.com) (Quit: Leaving)
2020-12-14 02:31:21 +0100 <monochrom> ormula dictates an inconfigurable amount of space.
2020-12-14 02:31:46 +0100 <ezzieyguywuf> ah, yikes
2020-12-14 02:31:53 +0100 <ezzieyguywuf> lol, nvm maybe I'll just keep formatting it myself
2020-12-14 02:31:59 +0100alestane(~nevin@pool-98-118-117-32.bstnma.fios.verizon.net) (Quit: alestane)
2020-12-14 02:32:19 +0100 <monochrom> fourmolu hasn't got around to make it configurable, but at least the readme is a funny roast.
2020-12-14 02:32:21 +0100waddlepon(~waddlepon@2603:3024:182f:9300:d0e9:3a86:762e:80e1)
2020-12-14 02:33:52 +0100 <monochrom> and promises making it configurable
2020-12-14 02:34:45 +0100columbarius(~columbari@mue-88-130-54-086.dsl.tropolys.de) (Ping timeout: 240 seconds)
2020-12-14 02:34:57 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-14 02:35:30 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 02:37:06 +0100columbarius(~columbari@mue-88-130-54-110.dsl.tropolys.de)
2020-12-14 02:37:35 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net) (Ping timeout: 245 seconds)
2020-12-14 02:38:39 +0100mirrorbird(~psutcliff@2a00:801:2d6:5a31:e851:a991:dd63:f024) (Quit: Leaving)
2020-12-14 02:40:42 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-12-14 02:45:13 +0100jedws(~jedws@121.209.189.201)
2020-12-14 02:47:16 +0100guest1214(~user@49.5.6.87)
2020-12-14 02:48:06 +0100Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-12-14 02:48:10 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 265 seconds)
2020-12-14 02:48:42 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds)
2020-12-14 02:48:44 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-14 02:49:26 +0100Lord_of_Life_Lord_of_Life
2020-12-14 02:50:33 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2020-12-14 02:51:13 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net) (Ping timeout: 264 seconds)
2020-12-14 02:52:14 +0100Tops21(~Tobias@dyndsl-095-033-094-096.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2020-12-14 02:53:29 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-12-14 02:53:42 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-12-14 02:53:52 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 256 seconds)
2020-12-14 02:57:41 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-12-14 02:58:05 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-14 02:59:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 03:00:45 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-14 03:01:45 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-14 03:03:30 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-14 03:05:33 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-12-14 03:12:56 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 03:13:14 +0100xff0x(~fox@2001:1a81:5293:a900:f3be:5ee0:a079:bf8c) (Ping timeout: 258 seconds)
2020-12-14 03:13:50 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 03:14:57 +0100xff0x(~fox@2001:1a81:52c8:2700:e7c7:677d:c779:9206)
2020-12-14 03:17:50 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 256 seconds)
2020-12-14 03:18:08 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-14 03:21:44 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
2020-12-14 03:22:45 +0100 <ezzieyguywuf> `undefined` is so handy, let's me really build up my functions piece by piece with ghcid's help
2020-12-14 03:23:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 03:24:02 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-12-14 03:24:28 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 03:28:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-14 03:32:05 +0100quarters(~quarters@38-73-246-124.starry-inc.net) (Ping timeout: 240 seconds)
2020-12-14 03:34:47 +0100quarters(~quarters@38-73-246-124.starry-inc.net)
2020-12-14 03:35:45 +0100quarters(~quarters@38-73-246-124.starry-inc.net) (Changing host)
2020-12-14 03:35:45 +0100quarters(~quarters@unaffiliated/quarters)
2020-12-14 03:38:47 +0100 <glguy> ezzieyguywuf, you know about using _, too?
2020-12-14 03:40:09 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 03:40:25 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 03:40:53 +0100 <koz_> I, on the other hand, adore ormolu.
2020-12-14 03:40:55 +0100 <koz_> cabal-fmt too.
2020-12-14 03:41:33 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 03:45:49 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2020-12-14 03:47:08 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 265 seconds)
2020-12-14 03:47:55 +0100shailangsa(~shailangs@host86-186-177-155.range86-186.btcentralplus.com) (Ping timeout: 246 seconds)
2020-12-14 03:49:07 +0100jespada(~jespada@90.254.245.49)
2020-12-14 03:50:44 +0100 <ezzieyguywuf> glguy: yea I use _ as well thank
2020-12-14 03:51:08 +0100wei2912(~wei2912@unaffiliated/wei2912)
2020-12-14 03:51:12 +0100 <ezzieyguywuf> *thanks, though I'll use _ in "production" stuff when I just don't need something, whereas `undefined` is strictly for "in development"
2020-12-14 03:52:35 +0100 <glguy> no, _ is for in development to get type information
2020-12-14 03:52:54 +0100 <ezzieyguywuf> glguy: hrm, I used () for that, can you explain how I might use _ as you've described?
2020-12-14 03:54:40 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 256 seconds)
2020-12-14 03:56:02 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2020-12-14 03:56:08 +0100 <glguy> put _ somewhere where you might have put undefined next time
2020-12-14 03:56:55 +0100 <ezzieyguywuf> glguy: I'll try it out thanks
2020-12-14 03:59:27 +0100 <DigitalKiwi> glguy: i tried putting the znc-playback arguments in flipped and i don't know if it worked because i might not have had a buffer to play but it didn't error
2020-12-14 04:00:26 +0100Gigabitten(~Somn@098-127-002-172.res.spectrum.com)
2020-12-14 04:01:00 +0100 <glguy> I pushed a fix for that, too
2020-12-14 04:02:04 +0100 <DigitalKiwi> oh no am i going to have to update nixpkgs again :D
2020-12-14 04:03:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 04:03:36 +0100 <justsomeguy> Huh, type holes are new to me. I just found this article. It has a lot of examples, maybe it will be helpful for ezzieyguywuf, too. https://reasonablypolymorphic.com/blog/typeholes/index.html
2020-12-14 04:03:37 +0100 <quarters> hello. is there a way to generate a gitignore with cabal? if not, may I ask what's typically included in a gitignore for a cabal project?
2020-12-14 04:05:54 +0100 <DigitalKiwi> https://gist.github.com/Kiwi/70b6385e90822d3a9c849d8d261ba4d0 this is one i have
2020-12-14 04:06:10 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 272 seconds)
2020-12-14 04:06:42 +0100 <quarters> DigitalKiwi: thanks!
2020-12-14 04:06:43 +0100 <DigitalKiwi> another has this instead .ghc.environment.x86_64-linux*
2020-12-14 04:06:45 +0100 <ezzieyguywuf> justsomeguy: thanks.
2020-12-14 04:06:48 +0100 <justsomeguy> quarters: Here's a link to a repo of language-specific gitignores: https://github.com/github/gitignore/blob/master/Haskell.gitignore ; Hopefully someone else can chime in about how to generate it with cabal.
2020-12-14 04:07:08 +0100 <quarters> justsomeguy: excellent!
2020-12-14 04:07:13 +0100jmchael(~jmchael@87.112.60.168) (Remote host closed the connection)
2020-12-14 04:07:16 +0100 <DigitalKiwi> if you don't use nix you don't need to ignore result
2020-12-14 04:08:02 +0100 <koz_> % let (|) = (<>)
2020-12-14 04:08:03 +0100 <yahb> koz_: ; <interactive>:7:7: error: parse error on input `)'
2020-12-14 04:08:10 +0100 <koz_> Oh damn.
2020-12-14 04:10:44 +0100shailangsa(~shailangs@host86-186-196-229.range86-186.btcentralplus.com)
2020-12-14 04:11:27 +0100christo(~chris@81.96.113.213)
2020-12-14 04:11:32 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
2020-12-14 04:12:39 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th)
2020-12-14 04:12:51 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 04:14:08 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 04:14:10 +0100 <iqubic> $ let (|) = <>
2020-12-14 04:14:12 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-12-14 04:14:24 +0100 <koz_> iqubic: (||) works
2020-12-14 04:14:33 +0100 <iqubic> % let (|) = <>
2020-12-14 04:14:34 +0100 <yahb> iqubic: ; <interactive>:8:7: error: parse error on input `)'
2020-12-14 04:14:40 +0100 <iqubic> Why?
2020-12-14 04:14:49 +0100 <iqubic> % let | = <>
2020-12-14 04:14:49 +0100 <yahb> iqubic: ; <interactive>:9:5: error: parse error on input `|'
2020-12-14 04:14:55 +0100 <iqubic> Why doesn't that work?
2020-12-14 04:15:01 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 04:18:19 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-14 04:20:01 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 264 seconds)
2020-12-14 04:23:37 +0100theDon(~td@muedsl-82-207-238-126.citykom.de) (Ping timeout: 264 seconds)
2020-12-14 04:25:01 +0100theDon(~td@muedsl-82-207-238-224.citykom.de)
2020-12-14 04:26:10 +0100xirhtogal(~lagothrix@unaffiliated/lagothrix)
2020-12-14 04:26:10 +0100lagothrix(~lagothrix@unaffiliated/lagothrix) (Killed (card.freenode.net (Nickname regained by services)))
2020-12-14 04:26:10 +0100xirhtogallagothrix
2020-12-14 04:26:56 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-14 04:27:42 +0100drbean(~drbean@TC210-63-209-148.static.apol.com.tw)
2020-12-14 04:32:40 +0100 <justsomeguy> The haskell report says that these operators are reserved, and can't be used as identifiers for user-defined namebindings (variables or function names). “reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ̃ | =>”.
2020-12-14 04:32:55 +0100 <justsomeguy> (From ch2, lexical structure, page 10.
2020-12-14 04:32:59 +0100 <justsomeguy> )
2020-12-14 04:37:34 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-14 04:41:23 +0100 <iqubic> Weird. You learn something new every day.
2020-12-14 04:47:37 +0100cybai_(~cybai@2400:4050:3122:900:8422:f0e8:f906:32e1) (Remote host closed the connection)
2020-12-14 04:48:08 +0100cybai(~cybai@2400:4050:3122:900:f972:eeae:cdef:b336)
2020-12-14 04:51:08 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 272 seconds)
2020-12-14 04:52:36 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th) (Ping timeout: 240 seconds)
2020-12-14 04:52:38 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 04:52:57 +0100cybai(~cybai@2400:4050:3122:900:f972:eeae:cdef:b336) (Ping timeout: 260 seconds)
2020-12-14 04:53:46 +0100sakirious(~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
2020-12-14 04:55:38 +0100FreeBirdLjj(~freebirdl@101.87.168.174)
2020-12-14 04:57:44 +0100 <quarters> I'm using blazehtml and was looking to add a click handler but found that this doesn't seem to be an option. is there a popular alternative to blazehtml if that's the case?
2020-12-14 04:58:23 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th)
2020-12-14 04:58:58 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2020-12-14 05:00:01 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Quit: I seem to have stopped.)
2020-12-14 05:00:01 +0100haasn(~nand@mpv/developer/haasn) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2020-12-14 05:00:14 +0100FreeBirdLjj(~freebirdl@101.87.168.174) (Ping timeout: 260 seconds)
2020-12-14 05:00:32 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection)
2020-12-14 05:01:23 +0100haasn(~nand@mpv/developer/haasn)
2020-12-14 05:01:25 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-12-14 05:01:38 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0)
2020-12-14 05:02:28 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-12-14 05:04:18 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th) (Remote host closed the connection)
2020-12-14 05:05:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 05:09:17 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
2020-12-14 05:11:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-12-14 05:13:06 +0100sgibber2018(~arch-gibb@208.85.237.137)
2020-12-14 05:15:33 +0100notzmv(~user@unaffiliated/zmv) (Remote host closed the connection)
2020-12-14 05:16:20 +0100notzmv(~user@unaffiliated/zmv)
2020-12-14 05:16:43 +0100_xor(~xor@74.215.46.133)
2020-12-14 05:18:05 +0100hexfive(~hexfive@50-47-142-195.evrt.wa.frontiernet.net) (Quit: i must go. my people need me.)
2020-12-14 05:20:54 +0100 <sm[m]> would you expect toList on a map to give you items sorted by key ?
2020-12-14 05:21:22 +0100 <monochrom> Yes.
2020-12-14 05:22:17 +0100 <sm[m]> I don't see guaranteed in the haddocks. On most machines, eg my mac, after running toList on a HashMap, they are are sorted by key. But on this one linux machine, they are not. All the libraries involved are the same version AFAICT
2020-12-14 05:22:42 +0100 <sm[m]> peculiar
2020-12-14 05:23:43 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-12-14 05:23:45 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 240 seconds)
2020-12-14 05:24:03 +0100 <monochrom> I thought you meant map = Data.Map
2020-12-14 05:24:47 +0100jespada(~jespada@90.254.245.49)
2020-12-14 05:27:32 +0100 <sm[m]> well, I wondered first if it's a normal expectation for maps generally, but then specifically for HashMap.
2020-12-14 05:27:48 +0100 <sm[m]> It seems I had better sort to be sure. Weird. Thanks monochrom
2020-12-14 05:28:51 +0100elliott_(~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Quit: WeeChat 2.9)
2020-12-14 05:29:53 +0100 <int-e> sm[m]: I'd expect toList to be linear time in the number of elements... so sorting is out. I'd also expect it to only depend on the represented set for purity reasons.
2020-12-14 05:31:03 +0100irc_user(uid423822@gateway/web/irccloud.com/x-zenuktarsyvguvmu)
2020-12-14 05:32:10 +0100elliott__(~elliott@pool-108-45-178-3.washdc.fios.verizon.net)
2020-12-14 05:32:11 +0100 <int-e> Looking at Data.Hashmap, it returns elements sorted by their hash.
2020-12-14 05:32:14 +0100 <sm[m]> int-e: so, you'd expect the order after toList to be indeterminate ? makes sense, I guess I have just been lucky for a long time
2020-12-14 05:33:12 +0100quarters(~quarters@unaffiliated/quarters) (Ping timeout: 260 seconds)
2020-12-14 05:33:29 +0100 <sm[m]> ok.. still a mystery it seems
2020-12-14 05:34:39 +0100 <int-e> And looking more closely, it sorts elements by their hash, then their key (as a lexicographic product)
2020-12-14 05:34:42 +0100 <sm[m]> int-e: I got as far as the Foldable instance at https://hackage.haskell.org/package/unordered-containers-0.2.13.0/docs/Data-HashMap-Internal.html#… .. where did you see that it sorts ?
2020-12-14 05:34:47 +0100 <int-e> sm[m]: maybe all your maps have size 0 and 1
2020-12-14 05:34:55 +0100 <sm[m]> ohh.. hash, not key
2020-12-14 05:34:56 +0100 <int-e> sm[m]: I looked inside
2020-12-14 05:35:33 +0100conal(~conal@64.71.133.70)
2020-12-14 05:36:10 +0100 <int-e> Oh, how many hashmaps are there.
2020-12-14 05:36:39 +0100 <int-e> I was in the hashmap package somehow, sorry.
2020-12-14 05:37:40 +0100 <sm[m]> ok, no problem. I don't see any sort in https://hackage.haskell.org/package/unordered-containers-0.2.13.0/docs/Data-HashMap-Internal.html which I'm using, but it might be there
2020-12-14 05:37:45 +0100Gigabitten(~Somn@098-127-002-172.res.spectrum.com) (Quit: Leaving)
2020-12-14 05:39:17 +0100 <sm[m]> correction, I'm using https://hackage.haskell.org/package/unordered-containers-0.2.10.0/docs/Data-HashMap-Strict.html
2020-12-14 05:39:42 +0100 <int-e> Hrm I don't think unordered-containers meets my expectations there.
2020-12-14 05:40:12 +0100conal(~conal@64.71.133.70) (Ping timeout: 260 seconds)
2020-12-14 05:40:20 +0100 <sm[m]> I believe it does https://hackage.haskell.org/package/unordered-containers-0.2.10.0/docs/src/Data.HashMap.Base.html#…
2020-12-14 05:40:38 +0100 <int-e> yes
2020-12-14 05:40:55 +0100 <int-e> well, yes, if it hasn't changed between 0.2.13 and 0.2.10.
2020-12-14 05:42:37 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net) (Remote host closed the connection)
2020-12-14 05:42:43 +0100sh1n(~user@181.229.242.252)
2020-12-14 05:43:47 +0100 <int-e> sm[m]: So it sorts by hash, but in case of a hash collision it produces the elements in something like insertion order, probably messed up further by deletions.
2020-12-14 05:44:08 +0100 <sm[m]> hmm.. and maybe hashing is different on this macine
2020-12-14 05:45:33 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 05:48:03 +0100 <int-e> so, essentially, the order has to be treated as random.
2020-12-14 05:48:21 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 05:48:57 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Remote host closed the connection)
2020-12-14 05:49:03 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2020-12-14 05:49:21 +0100cybai(~cybai@240d:1b:59:da58:4cf5:65ff:657b:eb18)
2020-12-14 05:49:48 +0100 <sm[m]> these are very small and simple maps.. the keys are ["a:k", "b:i","b:j", "c"]
2020-12-14 05:51:39 +0100argento(~argent0@168.227.97.29)
2020-12-14 05:51:45 +0100cybai_(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae)
2020-12-14 05:52:56 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-14 05:54:12 +0100cybai(~cybai@240d:1b:59:da58:4cf5:65ff:657b:eb18) (Ping timeout: 260 seconds)
2020-12-14 05:54:12 +0100 <int-e> % import Data.Hashable
2020-12-14 05:54:12 +0100 <yahb> int-e:
2020-12-14 05:54:18 +0100 <int-e> % import qualified Data.HashMap.Strict as H
2020-12-14 05:54:18 +0100 <yahb> int-e:
2020-12-14 05:54:23 +0100 <int-e> % newtype X = X Int deriving (Eq, Ord, Show); instance Hashable X where hashWithSalt _ _ = 42
2020-12-14 05:54:24 +0100 <yahb> int-e:
2020-12-14 05:54:27 +0100 <int-e> % let { h1 = H.fromList [(X 1, 1),(X 2, 2)]; h2 = H.fromList [(X 2, 2),(X 1, 1)] } in (h1 == h2, H.toList h1, H.toList h2)
2020-12-14 05:54:28 +0100 <yahb> int-e: (True,[(X 1,1),(X 2,2)],[(X 2,2),(X 1,1)])
2020-12-14 05:55:07 +0100 <int-e> (ah, 8 lines instead of the 5 I wanted... I didn't account for yahb acknowledging every single line)
2020-12-14 05:56:43 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 05:58:11 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-14 05:58:26 +0100Tario(~Tario@201.192.165.173)
2020-12-14 06:00:55 +0100johnw(~johnw@haskell/developer/johnw) (Quit: ZNC - http://znc.in)
2020-12-14 06:01:08 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-14 06:03:32 +0100sh1n(~user@181.229.242.252) (Read error: Connection reset by peer)
2020-12-14 06:09:36 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 240 seconds)
2020-12-14 06:12:37 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 265 seconds)
2020-12-14 06:18:58 +0100skiold(~skiold@gateway/tor-sasl/skiold) (Remote host closed the connection)
2020-12-14 06:19:19 +0100skiold(~skiold@gateway/tor-sasl/skiold)
2020-12-14 06:20:04 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-12-14 06:23:03 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-14 06:23:10 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 06:25:00 +0100 <int-e> Now who wanted a readBin in Numeric :)
2020-12-14 06:25:06 +0100loller_(uid358106@gateway/web/irccloud.com/x-mihovarsyqmgvojm)
2020-12-14 06:31:01 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2020-12-14 06:31:10 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net)
2020-12-14 06:35:23 +0100pinoo(1fa1c813@31-161-200-19.mobile.kpn.net)
2020-12-14 06:35:26 +0100pinoo(1fa1c813@31-161-200-19.mobile.kpn.net) (Remote host closed the connection)
2020-12-14 06:35:44 +0100salaam(1fa1c813@31-161-200-19.mobile.kpn.net)
2020-12-14 06:36:03 +0100salaam(1fa1c813@31-161-200-19.mobile.kpn.net) (Remote host closed the connection)
2020-12-14 06:36:32 +0100gouninaaaa(1fa1c813@31-161-200-19.mobile.kpn.net)
2020-12-14 06:36:40 +0100gouninaaaa(1fa1c813@31-161-200-19.mobile.kpn.net) (Remote host closed the connection)
2020-12-14 06:37:04 +0100goouninaa(1fa1c813@31-161-200-19.mobile.kpn.net)
2020-12-14 06:38:27 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 06:42:18 +0100doct0rhu(~orctarorg@pool-72-88-158-154.nwrknj.fios.verizon.net) (Quit: Leaving)
2020-12-14 06:43:12 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 06:43:14 +0100polyphem(~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 264 seconds)
2020-12-14 06:44:26 +0100Khisanth(~Khisanth@115.sub-174-197-143.myvzw.com) (Ping timeout: 256 seconds)
2020-12-14 06:46:19 +0100goouninaa(1fa1c813@31-161-200-19.mobile.kpn.net) (Ping timeout: 245 seconds)
2020-12-14 06:52:08 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 06:52:56 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2020-12-14 06:53:30 +0100 <justsomeguy> Is there a way to suppress GHCi's greeting banner “GHCi, version 8.8.3: https://www.haskell.org/ghc/ :? for help ...”? I don't see any options for it in “ghci --help” or the ghc user guide.
2020-12-14 06:53:53 +0100 <justsomeguy> I'm hoping I just overlooked it, though.
2020-12-14 06:55:26 +0100SteveMcIntyre(~SteveMcIn@195.140.213.38) (Remote host closed the connection)
2020-12-14 06:56:21 +0100adder(~adder@unaffiliated/adder)
2020-12-14 06:56:29 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th)
2020-12-14 06:56:34 +0100 <adder> hello, how can i get the Int from X Int?
2020-12-14 06:57:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-12-14 06:57:40 +0100Khisanth(~Khisanth@115.sub-174-197-143.myvzw.com)
2020-12-14 06:58:04 +0100 <jle`> adder: what is the definition of X?
2020-12-14 06:58:20 +0100 <adder> X :: * -> *
2020-12-14 06:58:20 +0100 <adder> Defined in ‘XMonad.Core’
2020-12-14 06:58:58 +0100 <jle`> ah. since X has a Monad instance, you can bind the Int in do notation
2020-12-14 06:59:13 +0100 <jle`> or use myX >>= (\myInt -> ...)
2020-12-14 06:59:53 +0100 <jle`> or in a do block, do myInt <- myX; ..., etc.; the myInt will be in scope for the rest of the do block
2020-12-14 07:00:04 +0100 <jle`> in this method though your final result value will still be X (something)
2020-12-14 07:00:54 +0100 <int-e> justsomeguy: it's linked to verbosity... ghci -v0
2020-12-14 07:01:01 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-14 07:01:54 +0100 <int-e> and I don't know whether that suppresses anything useful
2020-12-14 07:02:27 +0100 <int-e> (I've never asked the question -- I don't mind the banner.)
2020-12-14 07:05:07 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Remote host closed the connection)
2020-12-14 07:08:46 +0100Foobarblob(188838c2@ip24-136-56-194.ga.at.cox.net) (Remote host closed the connection)
2020-12-14 07:09:10 +0100elliott__(~elliott@pool-108-45-178-3.washdc.fios.verizon.net) (Ping timeout: 265 seconds)
2020-12-14 07:10:36 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 07:14:37 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2020-12-14 07:14:50 +0100 <justsomeguy> Nice. I don't really mind the banner, either, but I don't want it in the terminal recordings I'm making right now, either.
2020-12-14 07:15:27 +0100 <justsomeguy> I said either twice. I tend to repeat words when I'm tired. This is probably a good sign that I should go to sleep.
2020-12-14 07:18:18 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com) (Ping timeout: 260 seconds)
2020-12-14 07:18:30 +0100adder(~adder@unaffiliated/adder) (Remote host closed the connection)
2020-12-14 07:18:45 +0100 <justsomeguy> I didn't think to try -v0 since the user guide says it's the default.
2020-12-14 07:18:57 +0100mounty(~mounty@2001:8000:2f59:0:400b:cdf8:4398:2a2e) (Ping timeout: 258 seconds)
2020-12-14 07:19:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 07:21:31 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 07:22:55 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 07:24:19 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 258 seconds)
2020-12-14 07:24:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 07:34:08 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2020-12-14 07:34:40 +0100monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2020-12-14 07:36:23 +0100argento(~argent0@168.227.97.29) (Quit: leaving)
2020-12-14 07:36:47 +0100SanchayanMaity(~Sanchayan@223.226.34.150)
2020-12-14 07:37:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-12-14 07:38:56 +0100Khisanth(~Khisanth@115.sub-174-197-143.myvzw.com) (Ping timeout: 240 seconds)
2020-12-14 07:39:14 +0100echoreply(~echoreply@unaffiliated/echoreply) (Quit: WeeChat 1.9.1)
2020-12-14 07:39:42 +0100echoreply(~echoreply@unaffiliated/echoreply)
2020-12-14 07:39:46 +0100johnw(~johnw@haskell/developer/johnw)
2020-12-14 07:40:29 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Quit: Connection closed)
2020-12-14 07:42:58 +0100monochrom(trebla@216.138.220.146)
2020-12-14 07:43:45 +0100ccapndave(~ccapndave@80-218-89-57.dclient.hispeed.ch)
2020-12-14 07:44:42 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::77a4) (Ping timeout: 260 seconds)
2020-12-14 07:45:19 +0100waddlepon(~waddlepon@2603:3024:182f:9300:d0e9:3a86:762e:80e1) (Read error: Connection reset by peer)
2020-12-14 07:45:43 +0100waddlepon(~waddlepon@2603:3024:182f:9300:d0e9:3a86:762e:80e1)
2020-12-14 07:48:05 +0100caef^(caef@ip98-184-89-2.mc.at.cox.net) (Ping timeout: 240 seconds)
2020-12-14 07:48:41 +0100caef^(~hph@ip98-184-89-2.mc.at.cox.net)
2020-12-14 07:50:01 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 07:51:01 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-14 07:51:32 +0100 <ccapndave> Hey everyone - I'm pretty new to Haskell and am trying to write something involving a parser (using Megaparsec)
2020-12-14 07:51:42 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 265 seconds)
2020-12-14 07:51:59 +0100 <ccapndave> I'm a bit confused about the documentation - I'm using megaaparsec-8.0.0, which has documentation here: https://hackage.haskell.org/package/megaparsec-8.0.0
2020-12-14 07:52:02 +0100barila(~barila@4e69b241.skybroadband.com)
2020-12-14 07:52:25 +0100 <ccapndave> However, there is definitely a function called manyTill (I know because I can use it), but it doesn't appear anywhere in the documentation that I can see. Isn't the documentation auto-generated from the source?
2020-12-14 07:52:40 +0100Aleyna(~Aleyna@4e69b241.skybroadband.com) (Ping timeout: 256 seconds)
2020-12-14 07:52:49 +0100Khisanth(~Khisanth@115.sub-174-197-143.myvzw.com)
2020-12-14 07:53:02 +0100[RuCTFE]tswr(~RuCTFE]ts@195.140.213.38)
2020-12-14 07:53:10 +0100 <ccapndave> Or is it actually there somewhere and I'm just missing it
2020-12-14 07:53:23 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 07:53:36 +0100 <MarcelineVQ> it comes in because Text.Megaparsec re-exports https://hackage.haskell.org/package/parser-combinators-1.2.0/docs/Control-Monad-Combinators.html
2020-12-14 07:53:52 +0100 <MarcelineVQ> you'll find it at https://hackage.haskell.org/package/megaparsec-8.0.0/docs/Text-Megaparsec.html#g:1
2020-12-14 07:54:22 +0100 <boxscape> I'm trying to write a pattern synonym that I can use like (Prefix "test" rest) to check if a String starts with "test". `pattern Prefix prefix rest <- (splitAt 4 -> (prefix, rest))` works, but I'd like to use the length of the prefix instead of 4. `pattern Prefix prefix rest <- (splitAt (length prefix) -> (prefix, rest))` doesn't work, it says that
2020-12-14 07:54:22 +0100 <boxscape> prefix is not in scope. Is there a way to make this work?
2020-12-14 07:55:32 +0100 <ccapndave> MarcelineVQ: Aha
2020-12-14 07:55:38 +0100 <ccapndave> Thanks very much!
2020-12-14 07:55:39 +0100 <koz_> boxscape: Try writing a helper function returning a Maybe, then go 'that function with args -> Just'
2020-12-14 07:55:50 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-14 07:55:56 +0100 <boxscape> koz_ ah, I'll try that, thanks
2020-12-14 07:56:08 +0100 <koz_> I find that easier to do in many cases.
2020-12-14 07:58:02 +0100 <boxscape> hm but won't I still have to give that function prefix as an argument, and since it's on the left side of the view pattern it'll still say that it's not in scope?
2020-12-14 07:58:22 +0100hiroaki(~hiroaki@ip-37-201-147-254.hsi13.unitymediagroup.de)
2020-12-14 07:58:36 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-14 07:59:42 +0100 <boxscape> koz_
2020-12-14 07:59:44 +0100 <boxscape> oh
2020-12-14 07:59:52 +0100 <boxscape> you meant without writing a pattern synonym, right?
2020-12-14 08:00:00 +0100 <boxscape> I guess that should work
2020-12-14 08:00:06 +0100 <koz_> Yeah - basically, wrap your logic in a function, then use that function in the synonym.
2020-12-14 08:00:33 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 08:01:38 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net)
2020-12-14 08:05:02 +0100aqd(~aqd@87-92-163-238.rev.dnainternet.fi)
2020-12-14 08:05:51 +0100 <boxscape> koz_ I still don't fully understand how I'm supposed to use the function in the synonym but I can do (prefix "test" -> Just rest) now, which pretty much does what I want
2020-12-14 08:06:06 +0100Vulfe(~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Ping timeout: 258 seconds)
2020-12-14 08:07:05 +0100Unode(~Unode@unaffiliated/unode) (Quit: Off it goes)
2020-12-14 08:07:21 +0100Unode(~Unode@unaffiliated/unode)
2020-12-14 08:07:58 +0100kupi(uid212005@gateway/web/irccloud.com/x-mjbkiotsmhixgetl) (Quit: Connection closed for inactivity)
2020-12-14 08:11:06 +0100bitmagie(~Thunderbi@200116b806e8c6005046439d05e8bc2c.dip.versatel-1u1.de)
2020-12-14 08:11:40 +0100olligobber(~olligobbe@unaffiliated/olligobber)
2020-12-14 08:16:23 +0100bitmagie(~Thunderbi@200116b806e8c6005046439d05e8bc2c.dip.versatel-1u1.de) (Quit: bitmagie)
2020-12-14 08:18:24 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:bcf8:5fc6:a3cf:8574) (Quit: Bye)
2020-12-14 08:18:48 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-12-14 08:20:40 +0100jamestmartin(~james@jtmar.me) (Quit: ZNC 1.8.2+deb1 - https://znc.in)
2020-12-14 08:22:42 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 08:24:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:2465:8c15:4fac:3d31) (Remote host closed the connection)
2020-12-14 08:24:04 +0100jamestmartin(james@jtmar.me)
2020-12-14 08:24:25 +0100quarters(~quarters@38-73-246-124.starry-inc.net)
2020-12-14 08:26:34 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 08:27:05 +0100 <ccapndave> I am failing badly with this parser :( I'm trying to parse a CSV file, but I can't get it to work. Is there some kind of JSFiddle thing for Haskell so I can share code online with people?
2020-12-14 08:28:58 +0100 <boxscape> ccapndave https://paste.tomsmeding.com/
2020-12-14 08:29:31 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-12-14 08:30:10 +0100 <ccapndave> https://paste.tomsmeding.com/TtQkWPvo
2020-12-14 08:30:34 +0100 <ccapndave> Its sort of half in GHCI so I can't paste a complete program, but I can't understand why this doesn't parse my single line of CSV
2020-12-14 08:30:53 +0100devalot(~ident@mail.pmade.com) (Quit: ZNC - http://znc.in)
2020-12-14 08:31:23 +0100irclogger_com(~irclogger@li659-42.members.linode.com) (Ping timeout: 260 seconds)
2020-12-14 08:31:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-14 08:35:01 +0100hiroaki(~hiroaki@ip-37-201-147-254.hsi13.unitymediagroup.de) (Ping timeout: 256 seconds)
2020-12-14 08:35:44 +0100cfricke(~cfricke@unaffiliated/cfricke)
2020-12-14 08:37:20 +0100devalot(~ident@mail.pmade.com)
2020-12-14 08:37:48 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 08:39:04 +0100irclogger_com(~irclogger@li659-42.members.linode.com)
2020-12-14 08:39:48 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 08:40:55 +0100Varis(~Tadas@unaffiliated/varis) (Remote host closed the connection)
2020-12-14 08:41:35 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 08:43:25 +0100 <ccapndave> It seems to be the `newline` (or my use of it) that is causing the problem - https://paste.tomsmeding.com/3FdRgzUA
2020-12-14 08:45:10 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 08:45:32 +0100 <jchia> ccapndave: the newline is matched as part of the "many ..." You didn't say that newline shouldn't match
2020-12-14 08:45:37 +0100 <ccapndave> Argh
2020-12-14 08:45:41 +0100 <ccapndave> (facepalm)
2020-12-14 08:46:15 +0100 <ccapndave> Is this the right way to write this, even?
2020-12-14 08:46:30 +0100 <jchia> i normally just use the cassava package
2020-12-14 08:46:42 +0100caef^(~hph@ip98-184-89-2.mc.at.cox.net) ()
2020-12-14 08:46:47 +0100 <ccapndave> I started off with that, but I'm a Haskell noob and there were too many other things to learn to get that going
2020-12-14 08:46:57 +0100 <ccapndave> And anyway, I'd like to write the parser
2020-12-14 08:47:06 +0100 <ccapndave> And anyway anyway I have a weird CSV file that isn't quite legal
2020-12-14 08:47:25 +0100 <jchia> idk what the "normal way" is. as long as it works properly for many different cases, including corner cases and the code is not too 'weird' or inefficient, i think it's fine
2020-12-14 08:48:11 +0100 <jchia> what you have looks fine to me other than the treatment of newline
2020-12-14 08:48:14 +0100 <ccapndave> `sepEndBy (many $ noneOf [';', '\n']) ";" <* newline` - that seems to work
2020-12-14 08:48:42 +0100christo(~chris@81.96.113.213)
2020-12-14 08:49:25 +0100quarters(~quarters@38-73-246-124.starry-inc.net) (Ping timeout: 240 seconds)
2020-12-14 08:49:46 +0100seliopou(seliopou@entropy.tmok.com) (Ping timeout: 260 seconds)
2020-12-14 08:50:01 +0100Varis(~Tadas@unaffiliated/varis)
2020-12-14 08:51:43 +0100seliopou(seliopou@entropy.tmok.com)
2020-12-14 08:52:07 +0100 <boxscape> ccapndave fwiw you can write [';', '\n'] as ";\n", though I suppose whether that's clearer is up for debate
2020-12-14 08:52:24 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 08:52:38 +0100 <ccapndave> Ah, because a string is a list of characters
2020-12-14 08:53:04 +0100christo(~chris@81.96.113.213) (Ping timeout: 256 seconds)
2020-12-14 08:53:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 08:53:05 +0100 <boxscape> yeah, although I suppose if you have OverloadedStrings enabled it might not quite work like that, not sure
2020-12-14 08:53:26 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 08:53:43 +0100 <boxscape> No I think it should
2020-12-14 08:54:14 +0100 <ccapndave> It does :+1:
2020-12-14 08:55:13 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
2020-12-14 08:55:21 +0100taka234(~u0_a418@36.90.62.223)
2020-12-14 08:55:27 +0100 <ccapndave> For bonus points, is there anything I can do in `sepEndBy (many $ noneOf [';', '\n']) ";" <* newline` so that it skips any `\r` characters (i.e. they just get removed from the input)?
2020-12-14 08:55:52 +0100 <ccapndave> I seem to end up with a trailing `\r` on the last element
2020-12-14 08:56:17 +0100taka234(~u0_a418@36.90.62.223) ()
2020-12-14 08:57:49 +0100 <ccapndave> Ah, got it - `sepEndBy (many $ noneOf [';', '\n', '\r']) ";" <* string "\r\n"`
2020-12-14 09:00:07 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 09:00:47 +0100christo(~chris@81.96.113.213)
2020-12-14 09:01:00 +0100seliopou(seliopou@entropy.tmok.com) (Ping timeout: 256 seconds)
2020-12-14 09:01:48 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 256 seconds)
2020-12-14 09:01:50 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 09:02:19 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Client Quit)
2020-12-14 09:04:55 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2020-12-14 09:10:06 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-12-14 09:10:37 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Ping timeout: 246 seconds)
2020-12-14 09:13:09 +0100cybai(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae)
2020-12-14 09:14:17 +0100irc_user(uid423822@gateway/web/irccloud.com/x-zenuktarsyvguvmu) (Ping timeout: 260 seconds)
2020-12-14 09:14:52 +0100loller_(uid358106@gateway/web/irccloud.com/x-mihovarsyqmgvojm) (Ping timeout: 260 seconds)
2020-12-14 09:15:03 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com)
2020-12-14 09:15:27 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Ping timeout: 260 seconds)
2020-12-14 09:15:27 +0100cybai_(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae) (Ping timeout: 260 seconds)
2020-12-14 09:15:27 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) (Ping timeout: 260 seconds)
2020-12-14 09:15:27 +0100psamim(samimpmatr@gateway/shell/matrix.org/x-flynuotvhbmrlxjh) (Ping timeout: 260 seconds)
2020-12-14 09:15:27 +0100immae(~immae@2a01:4f8:141:53e7::) (Ping timeout: 260 seconds)
2020-12-14 09:16:02 +0100zgrep(~zgrep@ircpuzzles/2015/april-fools/sixth/zgrep) (Ping timeout: 260 seconds)
2020-12-14 09:16:02 +0100alephu5[m](alephu5mat@gateway/shell/matrix.org/x-sazbrzymzspemrdm) (Ping timeout: 260 seconds)
2020-12-14 09:16:29 +0100psamim(samimpmatr@gateway/shell/matrix.org/x-tnbwcntwhxafximz)
2020-12-14 09:16:37 +0100alephu5[m](alephu5mat@gateway/shell/matrix.org/x-pqqyohtvhpdzzjvu)
2020-12-14 09:16:41 +0100zgrep(~zgrep@ircpuzzles/2015/april-fools/sixth/zgrep)
2020-12-14 09:16:48 +0100loller_(uid358106@gateway/web/irccloud.com/x-uvkkhmtclnplmhkh)
2020-12-14 09:16:54 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com) (*.net *.split)
2020-12-14 09:16:54 +0100barila(~barila@4e69b241.skybroadband.com) (*.net *.split)
2020-12-14 09:16:54 +0100MOSCOS(~MOSCOS@122.54.107.175) (*.net *.split)
2020-12-14 09:16:54 +0100Rudd0(~Rudd0@185.189.115.108) (*.net *.split)
2020-12-14 09:16:54 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (*.net *.split)
2020-12-14 09:16:54 +0100taurux(~taurux@net-188-152-78-21.cust.dsl.teletu.it) (*.net *.split)
2020-12-14 09:16:54 +0100dragestil(~quassel@fsf/member/dragestil) (*.net *.split)
2020-12-14 09:16:54 +0100electrostat(~dag@unaffiliated/electrostat) (*.net *.split)
2020-12-14 09:16:54 +0100lep-delete(~lep@94.31.80.94) (*.net *.split)
2020-12-14 09:16:54 +0100Aleksejs(~Aleksejs@haskell.lv) (*.net *.split)
2020-12-14 09:16:54 +0100dagnabbit(~thelounge@140.82.8.179) (*.net *.split)
2020-12-14 09:16:54 +0100Igloo(~igloo@matrix.chaos.earth.li) (*.net *.split)
2020-12-14 09:16:54 +0100StoneToad(~StoneToad@199-167-119-150.ppp.storm.ca) (*.net *.split)
2020-12-14 09:16:54 +0100phaul(~phaul@ruby/staff/phaul) (*.net *.split)
2020-12-14 09:16:54 +0100bandali(znc@fsf/interns/bandali) (*.net *.split)
2020-12-14 09:16:54 +0100quinn(~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (*.net *.split)
2020-12-14 09:16:55 +0100ent(entgod@kapsi.fi) (*.net *.split)
2020-12-14 09:16:55 +0100int-e(~noone@int-e.eu) (*.net *.split)
2020-12-14 09:16:55 +0100wpcarro_(sid397589@gateway/web/irccloud.com/x-uilyvixlkpnvjftn) (*.net *.split)
2020-12-14 09:16:55 +0100iteratee(~kyle@162.211.154.4) (*.net *.split)
2020-12-14 09:16:55 +0100beka(~beka@gothdyke.mom) (*.net *.split)
2020-12-14 09:16:55 +0100questionmarkking(~questionm@165.227.7.85) (*.net *.split)
2020-12-14 09:16:55 +0100thebnq(~bnq@herrokitty.com) (*.net *.split)
2020-12-14 09:16:55 +0100Firedancer_(~Firedance@178.62.203.79) (*.net *.split)
2020-12-14 09:16:55 +0100arianvp(~weechat@arianvp.me) (*.net *.split)
2020-12-14 09:16:55 +0100ario(~ario@178.62.234.211) (*.net *.split)
2020-12-14 09:16:55 +0100statusfailed(~statusfai@statusfailed.com) (*.net *.split)
2020-12-14 09:16:55 +0100tasuki(~tasuki@198.211.120.27) (*.net *.split)
2020-12-14 09:16:55 +0100mupf(~micha@v22017094964653601.ultrasrv.de) (*.net *.split)
2020-12-14 09:16:55 +0100Tourist(~tourist@unaffiliated/tourist) (*.net *.split)
2020-12-14 09:16:55 +0100fr33domlover(~fr33domlo@fsf/member/fr33domlover) (*.net *.split)
2020-12-14 09:16:55 +0100digia(~digia@unaffiliated/digia) (*.net *.split)
2020-12-14 09:16:55 +0100edwinb(sid69486@gateway/web/irccloud.com/x-ttfxxggsnhwcnlbe) (*.net *.split)
2020-12-14 09:16:55 +0100kozowu(uid44796@gateway/web/irccloud.com/x-ehcrldadbfrqmeyx) (*.net *.split)
2020-12-14 09:16:55 +0100vk3wtf(~doc@203.221.224.44) (*.net *.split)
2020-12-14 09:16:55 +0100rookie101(~rookie@207.154.204.166) (*.net *.split)
2020-12-14 09:16:55 +0100jonge(jonge@kofferbomber.org) (*.net *.split)
2020-12-14 09:16:55 +0100APic(apic@apic.name) (*.net *.split)
2020-12-14 09:16:55 +0100kjak(~kjak@pool-173-73-38-16.washdc.fios.verizon.net) (*.net *.split)
2020-12-14 09:16:55 +0100esph(~weechat@unaffiliated/esph) (*.net *.split)
2020-12-14 09:16:55 +0100sarahzrf(~sarahzrf_@sarahzrf.com) (*.net *.split)
2020-12-14 09:16:56 +0100duairc(~shane@ana.rch.ist) (*.net *.split)
2020-12-14 09:16:56 +0100michalrus(m@michalrus.com) (*.net *.split)
2020-12-14 09:16:56 +0100cyberlard(~cyberlard@unaffiliated/jludwig) (*.net *.split)
2020-12-14 09:16:56 +0100lortabac(~lortabac@51.158.65.124) (*.net *.split)
2020-12-14 09:16:56 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (*.net *.split)
2020-12-14 09:16:56 +0100sea-gull(~sea-gull@li1815-136.members.linode.com) (*.net *.split)
2020-12-14 09:16:56 +0100anoe(~anoe@delanoe.org) (*.net *.split)
2020-12-14 09:16:56 +0100jtcs_(~jtcs@vmi359854.contaboserver.net) (*.net *.split)
2020-12-14 09:16:56 +0100pounce(~pounce@ns379743.ip-5-196-70.eu) (*.net *.split)
2020-12-14 09:16:56 +0100cjay(cjay@nerdbox.nerd2nerd.org) (*.net *.split)
2020-12-14 09:16:56 +0100kipras`away(~kipras@92.61.39.34) (*.net *.split)
2020-12-14 09:17:07 +0100ixian(~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269)
2020-12-14 09:17:14 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 09:17:27 +0100irc_user(uid423822@gateway/web/irccloud.com/x-mulzyjdnnccbeoef)
2020-12-14 09:18:05 +0100immae(~immae@2a01:4f8:141:53e7::)
2020-12-14 09:19:25 +0100wraithm(~wraithm@unaffiliated/wraithm) (Ping timeout: 264 seconds)
2020-12-14 09:20:01 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker) (Ping timeout: 264 seconds)
2020-12-14 09:20:01 +0100aib(~aib@unaffiliated/aib42) (Ping timeout: 264 seconds)
2020-12-14 09:22:09 +0100aib(~aib@unaffiliated/aib42)
2020-12-14 09:22:21 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com)
2020-12-14 09:22:21 +0100barila(~barila@4e69b241.skybroadband.com)
2020-12-14 09:22:21 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-14 09:22:21 +0100Rudd0(~Rudd0@185.189.115.108)
2020-12-14 09:22:21 +0100rprije(~rprije@14-201-170-17.tpgi.com.au)
2020-12-14 09:22:21 +0100taurux(~taurux@net-188-152-78-21.cust.dsl.teletu.it)
2020-12-14 09:22:21 +0100dragestil(~quassel@fsf/member/dragestil)
2020-12-14 09:22:21 +0100electrostat(~dag@unaffiliated/electrostat)
2020-12-14 09:22:21 +0100lep-delete(~lep@94.31.80.94)
2020-12-14 09:22:21 +0100Aleksejs(~Aleksejs@haskell.lv)
2020-12-14 09:22:21 +0100dagnabbit(~thelounge@140.82.8.179)
2020-12-14 09:22:21 +0100Igloo(~igloo@matrix.chaos.earth.li)
2020-12-14 09:22:21 +0100StoneToad(~StoneToad@199-167-119-150.ppp.storm.ca)
2020-12-14 09:22:21 +0100phaul(~phaul@ruby/staff/phaul)
2020-12-14 09:22:21 +0100bandali(znc@fsf/interns/bandali)
2020-12-14 09:22:21 +0100quinn(~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
2020-12-14 09:22:21 +0100ent(entgod@kapsi.fi)
2020-12-14 09:22:21 +0100int-e(~noone@int-e.eu)
2020-12-14 09:22:21 +0100wpcarro_(sid397589@gateway/web/irccloud.com/x-uilyvixlkpnvjftn)
2020-12-14 09:22:21 +0100iteratee(~kyle@162.211.154.4)
2020-12-14 09:22:21 +0100beka(~beka@gothdyke.mom)
2020-12-14 09:22:21 +0100questionmarkking(~questionm@165.227.7.85)
2020-12-14 09:22:21 +0100ario(~ario@178.62.234.211)
2020-12-14 09:22:21 +0100thebnq(~bnq@herrokitty.com)
2020-12-14 09:22:21 +0100Firedancer_(~Firedance@178.62.203.79)
2020-12-14 09:22:21 +0100arianvp(~weechat@arianvp.me)
2020-12-14 09:22:21 +0100statusfailed(~statusfai@statusfailed.com)
2020-12-14 09:22:21 +0100tasuki(~tasuki@198.211.120.27)
2020-12-14 09:22:21 +0100mupf(~micha@v22017094964653601.ultrasrv.de)
2020-12-14 09:22:21 +0100Tourist(~tourist@unaffiliated/tourist)
2020-12-14 09:22:21 +0100fr33domlover(~fr33domlo@fsf/member/fr33domlover)
2020-12-14 09:22:21 +0100digia(~digia@unaffiliated/digia)
2020-12-14 09:22:21 +0100edwinb(sid69486@gateway/web/irccloud.com/x-ttfxxggsnhwcnlbe)
2020-12-14 09:22:21 +0100kozowu(uid44796@gateway/web/irccloud.com/x-ehcrldadbfrqmeyx)
2020-12-14 09:22:21 +0100vk3wtf(~doc@203.221.224.44)
2020-12-14 09:22:21 +0100rookie101(~rookie@207.154.204.166)
2020-12-14 09:22:21 +0100jonge(jonge@kofferbomber.org)
2020-12-14 09:22:21 +0100APic(apic@apic.name)
2020-12-14 09:22:21 +0100kjak(~kjak@pool-173-73-38-16.washdc.fios.verizon.net)
2020-12-14 09:22:21 +0100esph(~weechat@unaffiliated/esph)
2020-12-14 09:22:21 +0100sarahzrf(~sarahzrf_@sarahzrf.com)
2020-12-14 09:22:21 +0100duairc(~shane@ana.rch.ist)
2020-12-14 09:22:21 +0100michalrus(m@michalrus.com)
2020-12-14 09:22:21 +0100cyberlard(~cyberlard@unaffiliated/jludwig)
2020-12-14 09:22:21 +0100lortabac(~lortabac@51.158.65.124)
2020-12-14 09:22:21 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
2020-12-14 09:22:21 +0100sea-gull(~sea-gull@li1815-136.members.linode.com)
2020-12-14 09:22:21 +0100anoe(~anoe@delanoe.org)
2020-12-14 09:22:21 +0100jtcs_(~jtcs@vmi359854.contaboserver.net)
2020-12-14 09:22:21 +0100pounce(~pounce@ns379743.ip-5-196-70.eu)
2020-12-14 09:22:21 +0100cjay(cjay@nerdbox.nerd2nerd.org)
2020-12-14 09:22:21 +0100kipras`away(~kipras@92.61.39.34)
2020-12-14 09:22:28 +0100thecoffemaker(~thecoffem@unaffiliated/thecoffemaker)
2020-12-14 09:22:29 +0100wraithm(~wraithm@unaffiliated/wraithm)
2020-12-14 09:22:39 +0100Rudd0(~Rudd0@185.189.115.108) (Max SendQ exceeded)
2020-12-14 09:22:46 +0100Rudd0(~Rudd0@185.189.115.108)
2020-12-14 09:23:37 +0100seliopou(seliopou@entropy.tmok.com)
2020-12-14 09:24:08 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-ztimugujetgdzvmd) (Quit: Connection closed for inactivity)
2020-12-14 09:24:27 +0100heatsink(~heatsink@2600:1700:bef1:5e10:6502:5181:8024:4fc5)
2020-12-14 09:24:28 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer)
2020-12-14 09:24:45 +0100dnlkrgr(~dnlkrgr@HSI-KBW-46-223-1-192.hsi.kabel-badenwuerttemberg.de)
2020-12-14 09:25:59 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl)
2020-12-14 09:26:17 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 09:28:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 09:28:26 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 09:28:54 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 09:29:27 +0100heatsink(~heatsink@2600:1700:bef1:5e10:6502:5181:8024:4fc5) (Ping timeout: 260 seconds)
2020-12-14 09:30:34 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2020-12-14 09:30:54 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 09:31:20 +0100SomeoneSerge(~someone-s@185.59.222.93)
2020-12-14 09:31:27 +0100kenran(~kenran@i59F67B59.versanet.de)
2020-12-14 09:31:30 +0100kuribas(~user@ptr-25vy0i9bg572eo5kib2.18120a2.ip6.access.telenet.be)
2020-12-14 09:32:25 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 09:36:08 +0100 <kuribas> ski: I found the solution for my problem: https://gist.github.com/kuribas/dc0721c819925a85666c4a313224aabd
2020-12-14 09:37:16 +0100 <kuribas> ski: I compose the query in parallel for the applicative computations, but the monadic computations are suspended.
2020-12-14 09:38:11 +0100 <kuribas> ski: I keep reducing the computation (and accumulate the query, fetch the results for each step), until all monadic actions are resolved.
2020-12-14 09:38:25 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b)
2020-12-14 09:38:32 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b) ()
2020-12-14 09:39:33 +0100christo(~chris@81.96.113.213)
2020-12-14 09:40:35 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b)
2020-12-14 09:40:45 +0100drbean(~drbean@TC210-63-209-148.static.apol.com.tw) (Ping timeout: 240 seconds)
2020-12-14 09:40:53 +0100christo(~chris@81.96.113.213) (Read error: Connection reset by peer)
2020-12-14 09:40:55 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b) ()
2020-12-14 09:40:57 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b)
2020-12-14 09:41:02 +0100daaaamien(~damien@2a01:e34:ef93:9a60:1adb:f2ff:fe40:717b) ()
2020-12-14 09:41:25 +0100christo(~chris@81.96.113.213)
2020-12-14 09:42:02 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 09:42:15 +0100danso(~dan@69-165-210-185.cable.teksavvy.com) (Quit: WeeChat 2.9)
2020-12-14 09:44:45 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 09:49:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-12-14 09:49:35 +0100plutoniix(~q@ppp-223-24-162-39.revip6.asianet.co.th) (Quit: Leaving)
2020-12-14 09:50:31 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 09:54:12 +0100cheater1(~user@unaffiliated/cheater)
2020-12-14 09:54:42 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-12-14 09:54:58 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 09:56:46 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 256 seconds)
2020-12-14 09:56:48 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2020-12-14 09:57:04 +0100cheater2(~user@unaffiliated/cheater)
2020-12-14 09:57:04 +0100cheater2cheater
2020-12-14 09:58:49 +0100cheater1(~user@unaffiliated/cheater) (Ping timeout: 265 seconds)
2020-12-14 09:59:52 +0100cheater1(~user@unaffiliated/cheater)
2020-12-14 10:00:39 +0100Kronic(~Kronic___@84.203.98.133)
2020-12-14 10:00:41 +0100raichoo(~raichoo@dslb-188-101-184-012.188.101.pools.vodafone-ip.de)
2020-12-14 10:00:50 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 10:01:49 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 260 seconds)
2020-12-14 10:01:58 +0100cheater1cheater
2020-12-14 10:02:56 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 10:02:58 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 10:03:31 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 10:03:56 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
2020-12-14 10:05:15 +0100cheater1(~user@unaffiliated/cheater)
2020-12-14 10:07:04 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 260 seconds)
2020-12-14 10:07:10 +0100cheater1cheater
2020-12-14 10:07:57 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-14 10:08:32 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 10:08:49 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2020-12-14 10:09:24 +0100Tops2(~Tobias@dyndsl-095-033-026-139.ewe-ip-backbone.de)
2020-12-14 10:10:08 +0100Yumasi(~guillaume@2a01:e0a:5cb:4430:5178:619c:fc92:5a85)
2020-12-14 10:13:41 +0100Yumasi(~guillaume@2a01:e0a:5cb:4430:5178:619c:fc92:5a85) (Client Quit)
2020-12-14 10:19:00 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-vdkgorsbhzvcovdf) (Quit: Connection closed for inactivity)
2020-12-14 10:19:24 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-12-14 10:20:09 +0100thevishy(~Nishant@103.210.43.17)
2020-12-14 10:20:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 10:23:01 +0100datajerk(~datajerk@sense.net) (Ping timeout: 264 seconds)
2020-12-14 10:23:04 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 10:24:34 +0100MidAutumnHotaru(~MidAutumn@154.91.197.93) (Quit: Quit 啾)
2020-12-14 10:25:08 +0100MidAutumnHotaru(~MidAutumn@154.91.197.93)
2020-12-14 10:25:34 +0100heatsink(~heatsink@2600:1700:bef1:5e10:64f2:cc09:9230:6a2f)
2020-12-14 10:26:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-12-14 10:27:20 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 265 seconds)
2020-12-14 10:30:29 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2020-12-14 10:30:42 +0100heatsink(~heatsink@2600:1700:bef1:5e10:64f2:cc09:9230:6a2f) (Ping timeout: 260 seconds)
2020-12-14 10:31:50 +0100__monty__(~toonn@unaffiliated/toonn)
2020-12-14 10:33:07 +0100sgibber2018(~arch-gibb@208.85.237.137) (Quit: WeeChat 2.9)
2020-12-14 10:33:29 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-14 10:34:44 +0100wei2912(~wei2912@unaffiliated/wei2912) (Quit: leaving)
2020-12-14 10:34:52 +0100ccapndave(~ccapndave@80-218-89-57.dclient.hispeed.ch) (Remote host closed the connection)
2020-12-14 10:35:02 +0100seliopou(seliopou@entropy.tmok.com) (Ping timeout: 260 seconds)
2020-12-14 10:41:21 +0100seliopou(seliopou@entropy.tmok.com)
2020-12-14 10:41:45 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 10:42:06 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 10:42:27 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 10:42:36 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 10:43:32 +0100cybai(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae) (Remote host closed the connection)
2020-12-14 10:44:08 +0100cybai(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae)
2020-12-14 10:45:12 +0100datajerk(~datajerk@sense.net)
2020-12-14 10:45:36 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 10:48:06 +0100seliopou(seliopou@entropy.tmok.com) (Ping timeout: 256 seconds)
2020-12-14 10:48:36 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 265 seconds)
2020-12-14 10:48:38 +0100cybai(~cybai@240d:1b:59:da58:2c69:2217:c058:ffae) (Ping timeout: 264 seconds)
2020-12-14 10:49:29 +0100thc202(~thc202@unaffiliated/thc202)
2020-12-14 10:50:02 +0100michalz(~user@185.246.204.48)
2020-12-14 10:50:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 264 seconds)
2020-12-14 10:53:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-12-14 10:56:18 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 258 seconds)
2020-12-14 10:56:22 +0100berberman_(~berberman@unaffiliated/berberman)
2020-12-14 10:56:44 +0100toorevitimirp(~tooreviti@117.182.180.221)
2020-12-14 10:57:53 +0100seliopou(seliopou@entropy.tmok.com)
2020-12-14 10:59:03 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
2020-12-14 11:00:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 11:00:27 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 11:00:34 +0100jedws(~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 11:02:12 +0100xff0x(~fox@2001:1a81:52c8:2700:e7c7:677d:c779:9206) (Ping timeout: 260 seconds)
2020-12-14 11:02:16 +0100seliopou(seliopou@entropy.tmok.com) (Ping timeout: 246 seconds)
2020-12-14 11:03:20 +0100xff0x(~fox@2001:1a81:52c8:2700:e7c7:677d:c779:9206)
2020-12-14 11:05:54 +0100seliopou(seliopou@entropy.tmok.com)
2020-12-14 11:06:44 +0100ADG1089(~adg1089@122.163.222.222)
2020-12-14 11:07:51 +0100 <ADG1089> any idea how to parse a java project to find (indirect top level) usages of a function and then aggregate an annotation parameter from all of such top level callee context methods
2020-12-14 11:08:03 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Quit: Connection closed)
2020-12-14 11:08:08 +0100 <ADG1089> iow, trying to find all spring endpoints which use a function
2020-12-14 11:08:24 +0100 <merijn> Eh, besides "write a parser"? :p
2020-12-14 11:09:07 +0100 <ADG1089> i hope there are something like com.github.javaparser which parses java AST
2020-12-14 11:10:05 +0100irc_user(uid423822@gateway/web/irccloud.com/x-mulzyjdnnccbeoef) (Quit: Connection closed for inactivity)
2020-12-14 11:12:29 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8)
2020-12-14 11:15:18 +0100 <dminuoso> ADG1089: java-callgraph?
2020-12-14 11:19:35 +0100ph88(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de)
2020-12-14 11:19:39 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net)
2020-12-14 11:19:51 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::4e53)
2020-12-14 11:20:00 +0100 <ph88> hi all
2020-12-14 11:20:25 +0100 <boxscape> hi
2020-12-14 11:20:38 +0100 <ADG1089> dminuoso: i used call hierearchy from IDE and extracted leaf nodes, need to get annotation information for them now.
2020-12-14 11:21:10 +0100 <ph88> I have a selection (a set of things) on which i apply filters (like: all things that are not "A" whatever that is) is there any way i can use the type system to proof that my selection will not be empty when i apply filter ?
2020-12-14 11:22:01 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it)
2020-12-14 11:22:19 +0100barila(~barila@4e69b241.skybroadband.com) (Ping timeout: 260 seconds)
2020-12-14 11:22:22 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it) (Client Quit)
2020-12-14 11:22:37 +0100xff0x(~fox@2001:1a81:52c8:2700:e7c7:677d:c779:9206) (Ping timeout: 260 seconds)
2020-12-14 11:22:38 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it)
2020-12-14 11:22:40 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2020-12-14 11:23:33 +0100 <boxscape> ph88 can you make a type similar to what NonEmpty is for List for your set type and have filter return a value of that type?
2020-12-14 11:23:34 +0100xff0x(~fox@2001:1a81:52c8:2700:14b6:ad9d:db0c:f54b)
2020-12-14 11:24:11 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it) (Client Quit)
2020-12-14 11:24:34 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it)
2020-12-14 11:24:37 +0100 <aplainzetakind> https://dpaste.com/G2A63PHUM I can't learn to easily identify why such megaparsec complaints arise.
2020-12-14 11:24:38 +0100drincruz(~adriancru@ool-44c748be.dyn.optonline.net) (Ping timeout: 260 seconds)
2020-12-14 11:25:02 +0100 <lortabac> boxscape: how would you guarantee that an arbitrary filter will not return an empty collection?
2020-12-14 11:25:26 +0100 <ph88> boxscape, i think then it goes wrong at the time i want to construct NonEmpty
2020-12-14 11:25:26 +0100 <aplainzetakind> I used `string` without complaints in what I think is an identical context in another module.
2020-12-14 11:26:11 +0100polyrain(~polyrain@2001:8003:e501:6901:7c75:50f5:f008:c028)
2020-12-14 11:26:21 +0100 <boxscape> lortabac I understood the problem statement as that always being the case but I suppose it does seem likely for a filter statement to sometimes return an empty collection
2020-12-14 11:26:56 +0100 <dminuoso> ph88: Do you have an underlying representation fixed already?
2020-12-14 11:27:06 +0100 <dminuoso> Or can't you just keep your set of things inside a NonEmpty directly?
2020-12-14 11:27:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 11:27:49 +0100 <dminuoso> Oh I see what lortabac meant
2020-12-14 11:27:56 +0100 <lortabac> I don't think there is a simple way to prove that the predicate will be True for at least one element
2020-12-14 11:28:07 +0100 <dminuoso> Also, this takes you directly into dependent programming.
2020-12-14 11:28:20 +0100 <lortabac> maybe the simplest way is Liquid Haskell
2020-12-14 11:28:40 +0100 <lortabac> if you are willing to include it into your toolchain
2020-12-14 11:29:01 +0100 <ph88> yes could be interesting
2020-12-14 11:29:02 +0100Kaeipi(~Kaiepi@47.54.252.148)
2020-12-14 11:29:20 +0100Kaiepi(~Kaiepi@47.54.252.148) (Remote host closed the connection)
2020-12-14 11:29:33 +0100 <[exa]> aplainzetakind: are OverloadedStrings on/off?
2020-12-14 11:30:04 +0100 <__monty__> Even in dependently typed languages I think you'd have to pass a proof that your predicate holds for at least one element in the collection.
2020-12-14 11:30:08 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 11:30:31 +0100 <lortabac> ph88: a Liquid Haskell tutorial https://youtu.be/zCJV0xNY06o
2020-12-14 11:30:32 +0100 <dminuoso> __monty__: Well that's what they asked for...
2020-12-14 11:30:38 +0100nolrai(4c1bcada@c-76-27-202-218.hsd1.or.comcast.net)
2020-12-14 11:30:39 +0100Someguy123(~someguy@unaffiliated/compgenius999) (Ping timeout: 272 seconds)
2020-12-14 11:30:41 +0100 <dminuoso> "i can use the type system to proof ..."
2020-12-14 11:30:52 +0100 <aplainzetakind> [exa]: On.
2020-12-14 11:31:35 +0100 <ph88> thanks lortabac
2020-12-14 11:31:52 +0100 <kuribas> ph88: easiest is to return a Maybe Set, which is either Nothing, or a non-empty set.
2020-12-14 11:31:57 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 11:31:58 +0100peutri(~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 256 seconds)
2020-12-14 11:32:03 +0100 <kuribas> ph88: don't even think about going the dependently typed way.
2020-12-14 11:32:34 +0100 <ph88> why is that kuribas ?
2020-12-14 11:32:41 +0100 <kuribas> I mean, it's good for fun and to learn more about type systems, but it's not very useful for any practical purpose.
2020-12-14 11:32:57 +0100 <boxscape> (to be clear liquid haskell is separate from the dependently typed way)
2020-12-14 11:33:04 +0100ekleog(~ii@prologin/ekleog) (Ping timeout: 265 seconds)
2020-12-14 11:33:08 +0100 <dminuoso> I dont think there's anything wrong to pursue this idea either way.
2020-12-14 11:33:08 +0100 <kuribas> yeah liquid haskell is refinement types.
2020-12-14 11:33:11 +0100 <boxscape> aplainzetakind does it work if you give a type signature to "mem["
2020-12-14 11:33:12 +0100 <boxscape> ?
2020-12-14 11:33:14 +0100 <kuribas> which are easier than dependent types.
2020-12-14 11:33:20 +0100 <dminuoso> Some people tend to have "strong feelings" thinking about what's best for you..
2020-12-14 11:33:34 +0100 <__monty__> That's obviously a false statement, kuribas. You should really specify what you mean by "practical" because theorem proving is very practical indeed imo.
2020-12-14 11:33:44 +0100 <dminuoso> To say that dependent types are not very useful for any practical purpose is very debatable.
2020-12-14 11:33:46 +0100 <nolrai> Hey, so `cis pi` from Data.Complex gives me `1.0 :+ 1.222...e-16` Which I mean isn't off by a lot..but seems like I should be able to do better.
2020-12-14 11:34:07 +0100 <kuribas> __monty__: I am not saying it's not practical. I am just saying that it has diminishing returns.
2020-12-14 11:34:09 +0100 <nolrai> Err.. -1.0
2020-12-14 11:34:13 +0100 <dminuoso> kuribas: To you, perhaps.
2020-12-14 11:34:16 +0100 <aplainzetakind> boxscape: No.
2020-12-14 11:34:19 +0100 <boxscape> hmm
2020-12-14 11:34:39 +0100 <kuribas> dminuoso: indeed. I've found the solution most of the time heavier than the problem it's solving.
2020-12-14 11:34:41 +0100 <dminuoso> Without knowing the constraints of their project, it's very hard to say what's useful and what's not.
2020-12-14 11:34:50 +0100 <kuribas> true
2020-12-14 11:35:32 +0100 <lortabac> I think both a solution based on GADTs and one based on Liquid Haskell can be interesting to explore
2020-12-14 11:35:44 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-14 11:35:53 +0100 <lortabac> however at work I would be very hesitant
2020-12-14 11:35:57 +0100 <[exa]> aplainzetakind: what does the typesystem think if you put a hole into the type of the whole function?
2020-12-14 11:35:58 +0100 <dminuoso> Superficially, I'd say provably correct software can be quite valuable.
2020-12-14 11:36:14 +0100cybai(~cybai@210.160.37.89)
2020-12-14 11:36:17 +0100barila(~barila@4e69b241.skybroadband.com)
2020-12-14 11:36:18 +0100 <lortabac> I'd probably just accept that types do not encode 100% of the invariants and move on
2020-12-14 11:36:20 +0100MOSCOS(~MOSCOS@122.54.107.175) (Remote host closed the connection)
2020-12-14 11:36:30 +0100 <kuribas> I've found most of the time that you can find a satisfactory solution that doesn't use advanced type system features.
2020-12-14 11:36:34 +0100 <dminuoso> lortabac: Yeah, like I said. It depends on the constraints. :)
2020-12-14 11:36:48 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-14 11:36:56 +0100 <merijn> kuribas: -XKitchenSink is like spice, a little can go a long way :p
2020-12-14 11:36:57 +0100 <dminuoso> If being provably correct is worth more than the engineering overhead behind it, say because it's a mission critical piece...
2020-12-14 11:37:17 +0100 <boxscape> nolrai that's IEEE754 floating point numbers for you, I suppose
2020-12-14 11:37:25 +0100 <aplainzetakind> [exa]: It complains at the caller site.
2020-12-14 11:37:29 +0100 <lortabac> dminuoso: yes, "depends on the context" is probably the best answer
2020-12-14 11:37:54 +0100 <aplainzetakind> Because the caller also needs InputStream s => Parser s a
2020-12-14 11:37:56 +0100 <nolrai> boxscape: I mean its really from storing radians I think..but yeah.
2020-12-14 11:38:08 +0100 <aplainzetakind> It says f0 is not that sort of thing.
2020-12-14 11:38:13 +0100 <kuribas> dminuoso: I've read that a lot of "mission critical" software doesn't use formal methods or functional programming, they just have stronger reviews and more guidelines.
2020-12-14 11:39:03 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it) (Quit: Leaving)
2020-12-14 11:39:06 +0100 <[exa]> aplainzetakind: so what does it say for `string "mem[" :: _` ?
2020-12-14 11:39:25 +0100 <Kronic> Reviews and guidelines are fairly fragile
2020-12-14 11:39:41 +0100 <dminuoso> kuribas: Our inhouse SDN solution employs some (albeit simplistic) formal methods to verify correctness of the resulting network.
2020-12-14 11:39:46 +0100 <kuribas> It's also scary how low the standards are for software in cars, etc...
2020-12-14 11:39:58 +0100 <nolrai> kuribas: I mean lots of "mission critical" software fails anyway.
2020-12-14 11:40:01 +0100 <kuribas> dminuoso: cool
2020-12-14 11:40:18 +0100 <__monty__> If this is for a hobby project I'd actually try dependent types first. Always good to have at least some understanding of people's praises and criticisms.
2020-12-14 11:40:42 +0100cybai(~cybai@210.160.37.89) (Ping timeout: 260 seconds)
2020-12-14 11:40:52 +0100 <Kronic> Nevermind cards, I've worked in finanance and automation (i.e. robotic arms that if you put in the wrong value could rip a person in half), in my experience most of it is just "well this worked before so we'll do that"
2020-12-14 11:41:02 +0100 <kuribas> I'd learn dependent types because it gives you more insight into type theory, not because it will make everything you write bug-free.
2020-12-14 11:41:18 +0100 <Kronic> But not in the traditional "follow the same method" kind of way, more like "I'm going to copy paste 20,000 lines of code and that's just how it is"
2020-12-14 11:41:41 +0100 <srk> /o\
2020-12-14 11:41:50 +0100 <Kronic> cars*
2020-12-14 11:41:55 +0100ADG1089(~adg1089@122.163.222.222) ()
2020-12-14 11:42:01 +0100srktrying to haskell robotics and its quite fun
2020-12-14 11:42:10 +0100 <kuribas> dminuoso: I also made the guess that ph88 having an empty set, would not rip a person in half, statistically speaking :-)
2020-12-14 11:42:13 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it)
2020-12-14 11:42:20 +0100 <__monty__> Kronic: If certification is involved that doesn't even seem like a bad strategy. Getting new software certified is probably way too costly.
2020-12-14 11:42:28 +0100 <aplainzetakind> [exa]: Could not deduce IsString s for Tokens s.
2020-12-14 11:42:39 +0100 <Kronic> You're absolutely right __monty__
2020-12-14 11:42:56 +0100 <Kronic> Getting new anything is costly, that's why much of it runs on VB 6 and C++ 98
2020-12-14 11:42:57 +0100 <kuribas> isn't format methods more used in hardware now, like CPUs?
2020-12-14 11:42:59 +0100 <[exa]> aplainzetakind: and Tokens s is [Char] or something else?
2020-12-14 11:43:57 +0100 <aplainzetakind> So, if I modify my InputStream synonym to include IsString (Tokens s), I need FlexibleContexts but I think it will work. But other modules who use InputStream start complaining.
2020-12-14 11:44:16 +0100 <aplainzetakind> I'm trying to make things compatible with both String and Text
2020-12-14 11:44:19 +0100 <__monty__> Amazon apparently also puts TLA+'s model checker to good use. Probably for distributed systems.
2020-12-14 11:44:22 +0100 <aplainzetakind> Tokens Text ~ Text
2020-12-14 11:44:30 +0100 <aplainzetakind> Tokens String ~ String
2020-12-14 11:45:26 +0100cybai(~cybai@2400:4050:3122:900:f184:f643:35b2:1419)
2020-12-14 11:45:41 +0100 <aplainzetakind> Strange thing is, I have been able to do this so far.
2020-12-14 11:46:19 +0100 <aplainzetakind> Oh no I haven't.
2020-12-14 11:46:21 +0100 <srk> I've started a toy Haskell CAS for optimizing kinematic expressions but quickly hit a brick wall trying to test it using quickcheck due to inf / div by zeroes. sounds like a job for Agda :|
2020-12-14 11:46:22 +0100 <aplainzetakind> Damn.
2020-12-14 11:46:24 +0100 <[exa]> aplainzetakind: it looks to me as if it cannot deduce that Tokens s ~ [Char]
2020-12-14 11:46:35 +0100 <[exa]> from the available Token s ~ Char
2020-12-14 11:46:42 +0100 <aplainzetakind> I added Tokens s ~ Text to the signature.
2020-12-14 11:46:55 +0100 <aplainzetakind> (I'm presenly working with Text).
2020-12-14 11:47:02 +0100 <[exa]> which technically it cannot because there is certainly more than 1 possibility for Tokens
2020-12-14 11:48:03 +0100 <[exa]> srk: the quickcheck preconditions don't help? (==>, NonZero, ...) ?
2020-12-14 11:48:06 +0100 <aplainzetakind> So adding IsString (Tokens s) to the constraints of InputStream should solve it.
2020-12-14 11:48:22 +0100 <aplainzetakind> How harmful is FlexibleContexts considered to be?
2020-12-14 11:48:59 +0100 <merijn> aplainzetakind: Not at all
2020-12-14 11:49:05 +0100 <[exa]> AFAIK everyone is using that...
2020-12-14 11:49:10 +0100flatmap(~flatmap@p200300dd371871005d2f5b8118e8cdf6.dip0.t-ipconnect.de)
2020-12-14 11:49:11 +0100 <aplainzetakind> Alright then.
2020-12-14 11:49:19 +0100 <merijn> aplainzetakind: The report is overly strict in what it allows for typeclasses
2020-12-14 11:49:27 +0100flatmap(~flatmap@p200300dd371871005d2f5b8118e8cdf6.dip0.t-ipconnect.de) (Client Quit)
2020-12-14 11:49:50 +0100 <boxscape> aplainzetakind as a further bit of evidence that it's uncontroversial, it's going to be included in GHC2021 by unanimous decision
2020-12-14 11:50:06 +0100 <boxscape> (at least, it's looking like that'll be the case)
2020-12-14 11:50:22 +0100 <[exa]> that reminds me, are the "state of haskell" results available already?
2020-12-14 11:50:22 +0100 <merijn> FlexibleContexts is about as controversial as saying "I like music" :p
2020-12-14 11:51:09 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-12-14 11:51:27 +0100Tops21(~Tobias@dyndsl-095-033-026-139.ewe-ip-backbone.de)
2020-12-14 11:51:36 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
2020-12-14 11:52:16 +0100ccapndave(~ccapndave@213.55.220.76)
2020-12-14 11:53:19 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
2020-12-14 11:54:55 +0100 <aplainzetakind> My problem remains unsolved.
2020-12-14 11:55:25 +0100Tops2(~Tobias@dyndsl-095-033-026-139.ewe-ip-backbone.de) (Ping timeout: 264 seconds)
2020-12-14 11:55:32 +0100 <aplainzetakind> Now it's not satisfied with having IsString (Tokens s) but demands Tokens s ~ Text.
2020-12-14 11:56:17 +0100 <aplainzetakind> OK I think I see why.
2020-12-14 11:56:21 +0100 <aplainzetakind> I hope.
2020-12-14 11:56:29 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 11:57:22 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-12-14 12:00:01 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net)
2020-12-14 12:00:08 +0100Kronic(~Kronic___@84.203.98.133) (Ping timeout: 256 seconds)
2020-12-14 12:00:51 +0100 <tomsmeding> boxscape: "by unanimous decision" -- in what venue? The state of haskell survey?
2020-12-14 12:01:08 +0100 <boxscape> tomsmeding steering committee votes
2020-12-14 12:01:15 +0100 <boxscape> tomsmeding see bottom of this page https://github.com/ghc-proposals/ghc-proposals/blob/ghc2021/proposals/0000-ghc2021.rst
2020-12-14 12:01:22 +0100 <tomsmeding> thanks!
2020-12-14 12:05:55 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2020-12-14 12:09:10 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 12:09:43 +0100 <tomsmeding> interested to see some not-entirely-safe extensions like GeneralizedNewtypeDeriving and FlexibleInstances make the cut (probably), though they are indeed very useful
2020-12-14 12:10:17 +0100 <boxscape> tomsmeding there was some discussion about GND on the mailing list but not much
2020-12-14 12:11:43 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
2020-12-14 12:11:54 +0100 <boxscape> tomsmeding more generally some people advocate using DerivingVia over GND
2020-12-14 12:13:50 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 264 seconds)
2020-12-14 12:14:32 +0100 <tomsmeding> oh, neat!
2020-12-14 12:15:12 +0100 <tomsmeding> didn't realise it generalised GND, will try to remember :p
2020-12-14 12:15:28 +0100 <tomsmeding> (G2ND?)
2020-12-14 12:15:48 +0100c4droid(~user@2409:8970:2b0:222e:dd3f:5bcc:17f1:9354)
2020-12-14 12:17:19 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 12:17:38 +0100Kronic(~Kronic___@84.203.98.133)
2020-12-14 12:18:54 +0100rprije(~rprije@14-201-170-17.tpgi.com.au) (Ping timeout: 260 seconds)
2020-12-14 12:19:00 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2020-12-14 12:20:55 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 12:21:14 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 12:21:30 +0100c4droid(~user@2409:8970:2b0:222e:dd3f:5bcc:17f1:9354) ("ERC (IRC client for Emacs 27.1)")
2020-12-14 12:22:50 +0100esp32_prog(yoann@gateway/vpn/protonvpn/esp32prog/x-46565127)
2020-12-14 12:25:38 +0100koz_(~koz@121.99.240.58) (Ping timeout: 256 seconds)
2020-12-14 12:27:40 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2020-12-14 12:28:00 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 12:28:11 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2020-12-14 12:29:05 +0100gzj(~gzj@unaffiliated/gzj) (Remote host closed the connection)
2020-12-14 12:29:05 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-14 12:29:26 +0100gzj(~gzj@unaffiliated/gzj)
2020-12-14 12:30:32 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 12:32:23 +0100Kronic_(~Kronic___@163.172.230.173)
2020-12-14 12:32:34 +0100SanchayanMaity(~Sanchayan@223.226.34.150) (Remote host closed the connection)
2020-12-14 12:33:19 +0100SanchayanMaity(~Sanchayan@223.226.34.150)
2020-12-14 12:35:21 +0100 <aplainzetakind> How can I make the Proxy in the second line behave as I expect? https://dpaste.com/6EYUAT96U
2020-12-14 12:35:24 +0100koz(~koz@121.99.240.58)
2020-12-14 12:36:07 +0100Kronic(~Kronic___@84.203.98.133) (Ping timeout: 260 seconds)
2020-12-14 12:36:30 +0100 <aplainzetakind> That is Text.Megaparsec.chunkToTokens
2020-12-14 12:38:51 +0100 <srk> [exa]: iirc part of the problem was that you can get expression such as 0^(-1) due to generated AST (Pow (Lit Zero) (Sub (Lit Zero) (Lit One))
2020-12-14 12:39:43 +0100alinab(uid468903@gateway/web/irccloud.com/x-xcymeicsljvzypjb) (Quit: Updating details, brb)
2020-12-14 12:40:04 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Read error: Connection reset by peer)
2020-12-14 12:40:25 +0100 <srk> and problematic things can appear after e.g. simplification or derivation. type system would help .. :D
2020-12-14 12:40:34 +0100alinab(sid468903@gateway/web/irccloud.com/x-fkffdhjrtekfjgxd)
2020-12-14 12:41:19 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 246 seconds)
2020-12-14 12:43:55 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-12-14 12:45:24 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 12:49:48 +0100Tario(~Tario@201.192.165.173)
2020-12-14 12:50:10 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 256 seconds)
2020-12-14 12:51:05 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com)
2020-12-14 12:51:12 +0100 <ccapndave> I have just written my first ever program in Haskell
2020-12-14 12:51:18 +0100 <ccapndave> And it actually does something useful
2020-12-14 12:51:34 +0100 <ccapndave> This language is awesome :)
2020-12-14 12:51:38 +0100 <boxscape> ccapndave congrats!
2020-12-14 12:51:44 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 12:52:24 +0100 <ccapndave> Now I have an uncontrollable urge to refactor it
2020-12-14 12:52:43 +0100 <boxscape> yeah haskell does that to me, too
2020-12-14 12:55:40 +0100z0_(~z0@188.251.81.116)
2020-12-14 12:55:53 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-14 12:56:05 +0100 <aplainzetakind> Trying to write this function but Proxy doesn't let me: https://dpaste.com/7SU74Y5M7
2020-12-14 12:57:07 +0100 <boxscape> aplainzetakind in most contexts Proxy has to be used either with a type signature or with (Proxy @SomeType)
2020-12-14 12:58:08 +0100ambiso9(~ambiso@209.182.239.205) (Quit: The Lounge - https://thelounge.chat)
2020-12-14 12:58:29 +0100 <boxscape> hmm although considering the return type of chunkToTokens also contains s I'm not quite sure if that can help here
2020-12-14 12:58:31 +0100 <aplainzetakind> I want the s free, so how can I give it some type?
2020-12-14 12:58:52 +0100z0(~z0@188.250.3.59) (Ping timeout: 260 seconds)
2020-12-14 12:58:55 +0100 <boxscape> aplainzetakind you can say (Proxy @s) if you have ScopedTypeVariables
2020-12-14 12:59:19 +0100 <boxscape> and write `forall s .` at the beginning of the type signature for chunkToTokens'
2020-12-14 12:59:27 +0100 <ski> or `Proxy :: Proxy s'
2020-12-14 12:59:53 +0100 <boxscape> (without the `forall s`ScopedTypeVariables won't actually be engaged)
2020-12-14 13:00:40 +0100FreeBirdLjj(~freebirdl@101.87.168.174)
2020-12-14 13:02:41 +0100ambiso9(~ambiso@209.182.239.205)
2020-12-14 13:03:47 +0100mouseghost(~draco@wikipedia/desperek)
2020-12-14 13:03:57 +0100 <aplainzetakind> Great thanks.
2020-12-14 13:04:12 +0100 <aplainzetakind> Didn't know about ScopedTypeVariables
2020-12-14 13:04:28 +0100 <aplainzetakind> Though this doesn't feel too safe?
2020-12-14 13:04:49 +0100cads2(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-14 13:04:54 +0100 <aplainzetakind> Like Proxy was there to ensure something and I circumvented it.
2020-12-14 13:05:17 +0100FreeBirdLjj(~freebirdl@101.87.168.174) (Ping timeout: 260 seconds)
2020-12-14 13:05:43 +0100 <merijn> aplainzetakind: ScopedTypeVariables are fine
2020-12-14 13:06:09 +0100 <ski> no, `Proxy' is there so you can fix / pin down the `s' when calling the operation, despite no other parameter or result type mentioning `s'
2020-12-14 13:06:20 +0100 <merijn> aplainzetakind: The problem is that (normally) type variable scope is limited to the type signature, so if you use 'a' in a where block or local annotation, that 'a' is *different* from the 'a' in the top level signature
2020-12-14 13:06:42 +0100 <merijn> aplainzetakind: ScopedTypeVariables extends the scope of variables in top level types to the entire body/where block of a binding
2020-12-14 13:07:53 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net)
2020-12-14 13:08:05 +0100 <aplainzetakind> merijn: I understand the effect, but I thought there should be reason for the default.
2020-12-14 13:08:17 +0100 <aplainzetakind> Not based on any concrete reasoning.
2020-12-14 13:08:22 +0100 <aplainzetakind> If it's fine it's fine.
2020-12-14 13:08:47 +0100cads(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 260 seconds)
2020-12-14 13:09:00 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2020-12-14 13:09:23 +0100cads(~cads@ip-64-72-99-232.lasvegas.net)
2020-12-14 13:10:05 +0100waddlepon(~waddlepon@2603:3024:182f:9300:d0e9:3a86:762e:80e1) (Ping timeout: 258 seconds)
2020-12-14 13:10:17 +0100 <boxscape> aplainzetakind some people aren't happy with the way ScopedTypeVariables works, but safety is not the concern
2020-12-14 13:10:22 +0100 <merijn> aplainzetakind: The reason is "you often wanna write polymorphic helpers and needing unique type variables is kinda annoying"
2020-12-14 13:10:24 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
2020-12-14 13:10:59 +0100cads2(~cads@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2020-12-14 13:11:08 +0100 <boxscape> Richard had an interesting example of couter-intuitive behavior here https://mail.haskell.org/pipermail/ghc-steering-committee/2020-December/001973.html
2020-12-14 13:11:10 +0100 <merijn> aplainzetakind: like, I often use 'a' as polymorphic type in both the top level and the where block and having those be forced to be the same can be annoying, in terms of risk/safety there's no problems
2020-12-14 13:11:19 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection)
2020-12-14 13:13:16 +0100fendor_(~fendor@178.165.129.207.wireless.dyn.drei.com)
2020-12-14 13:13:45 +0100 <aplainzetakind> I see. Personally ScopedTypeVariables version feels more natural then.
2020-12-14 13:14:07 +0100 <aplainzetakind> I usually use a to mean 'that a' and find myself realizing that's not how it works.
2020-12-14 13:14:45 +0100Kronic__(~Kronic___@84.203.98.133)
2020-12-14 13:14:55 +0100gzj(~gzj@unaffiliated/gzj) (Quit: Leaving)
2020-12-14 13:15:40 +0100fendor(~fendor@178.115.130.118.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
2020-12-14 13:16:30 +0100zantyr(~zantyr@188.147.96.252.nat.umts.dynamic.t-mobile.pl)
2020-12-14 13:17:55 +0100 <dminuoso> aplainzetakind: That's a historical accident, sadly.
2020-12-14 13:18:16 +0100Kronic_(~Kronic___@163.172.230.173) (Ping timeout: 240 seconds)
2020-12-14 13:18:22 +0100 <dminuoso> If we were to reinvent Haskell from scratch, we'd probably have the behavior of ScopedTypeVariables on by default without explicit forall.
2020-12-14 13:18:53 +0100 <ski> an inverted `ScopedTypeVariables' has been discussed here
2020-12-14 13:19:32 +0100 <boxscape> dminuoso one counter-argument to that is that you can write type declarations far away from functions bodies and its where clauses, though I suppose one could have disallowed that, as well
2020-12-14 13:20:08 +0100ski. o O ( discontiguous/1 )
2020-12-14 13:20:41 +0100Kronic__Kronic
2020-12-14 13:21:41 +0100 <Kronic> Huh I never noticed that
2020-12-14 13:21:46 +0100 <Kronic> Is there a way to disable that ?
2020-12-14 13:21:48 +0100 <dminuoso> The one part Im not quite happy about, is pattern type signatures.
2020-12-14 13:21:57 +0100 <boxscape> why not?
2020-12-14 13:22:01 +0100 <boxscape> Kronic I don't think so
2020-12-14 13:22:08 +0100 <Kronic> That's unfortunate
2020-12-14 13:22:15 +0100 <dminuoso> boxscape: For the same reason I'm excited for `id @a = ...`
2020-12-14 13:22:26 +0100 <dminuoso> It's a clutch that doesn't fit well
2020-12-14 13:22:31 +0100 <boxscape> that's fair
2020-12-14 13:22:58 +0100 <boxscape> Kronic Richard mentioned in the email I linked above that he saw some people write C-style header files, included via CPP, for Haskell programs
2020-12-14 13:23:09 +0100 <boxscape> with those header files containing the type declarations
2020-12-14 13:25:59 +0100 <ski> interesting
2020-12-14 13:26:27 +0100 <superstar64> i have this idea for a state based typeclass system for my language, where `F a => x` corresponds to `F a -> (x, F a)`
2020-12-14 13:26:29 +0100polyrain(~polyrain@2001:8003:e501:6901:7c75:50f5:f008:c028) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 13:26:32 +0100 <superstar64> has this been thought of before?
2020-12-14 13:27:40 +0100 <Kronic> huh... I feel like that should be something you have to enable and not something that is on by default
2020-12-14 13:28:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d)
2020-12-14 13:29:23 +0100 <dminuoso> Kronic: superstar64 Yes.
2020-12-14 13:29:35 +0100 <dminuoso> superstar64: The concept is captured by MonadState, but it's even more general than that
2020-12-14 13:29:35 +0100 <superstar64> is there a paper on this?
2020-12-14 13:29:53 +0100drbean(~drbean@TC210-63-209-88.static.apol.com.tw)
2020-12-14 13:30:07 +0100 <superstar64> that requires do notation, my idea doesn't
2020-12-14 13:30:15 +0100 <dminuoso> No it does not require do notation
2020-12-14 13:30:26 +0100 <merijn> superstar64: Nothing requires do notation
2020-12-14 13:30:30 +0100 <superstar64> it forces you to wrap your code in monad
2020-12-14 13:30:38 +0100 <dminuoso> That's a flawed thinking.
2020-12-14 13:31:03 +0100 <superstar64> don't typeclasses already correspond to an implicit reader monad?
2020-12-14 13:31:12 +0100 <superstar64> why not an implicit state monad, or any other monad
2020-12-14 13:31:14 +0100halbGefressen(~halbGefre@2a02:810d:f40:2a9c:a4fe:2adc:248b:466f)
2020-12-14 13:31:22 +0100 <dminuoso> No, that's at best an implementation detail
2020-12-14 13:31:42 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 13:31:46 +0100 <dminuoso> And also not "reader monad"
2020-12-14 13:31:46 +0100 <superstar64> it's what i want in my language, i'm just asking if this exist already
2020-12-14 13:31:58 +0100 <dminuoso> I think, you have some flawed conception about what "monad" means
2020-12-14 13:32:29 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 13:32:42 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d) (Ping timeout: 260 seconds)
2020-12-14 13:32:44 +0100 <pjb> It's a dyad but with only one element.
2020-12-14 13:32:55 +0100 <dminuoso> superstar64: Let's explore your `F a -> (x, F a)` idea for a moment. Any sugar you want to build here, *already* is inherently monadic whether you call it that or not.
2020-12-14 13:33:41 +0100 <superstar64> if `f : F a => x -> y` and `x : F a => x` then `f(x) : F a => y`, typeclasses implicity call `pure` and `<*>` on your code
2020-12-14 13:33:45 +0100 <superstar64> just only for the reader monad
2020-12-14 13:34:01 +0100 <pjb> It's a gang if Chinese bandits, but with only one bandit.
2020-12-14 13:34:05 +0100 <pjb> s/if/of/
2020-12-14 13:34:41 +0100 <Kronic> what's wrong with it being a monad anyway?
2020-12-14 13:34:44 +0100_ashbreeze_(~mark@72-161-253-71.dyn.centurytel.net) (Read error: Connection reset by peer)
2020-12-14 13:34:44 +0100 <superstar64> `pure' : x -> (F a => x)`
2020-12-14 13:35:19 +0100 <superstar64> Kronic, it would be nice if people could write imperative code in my language without jumping though hoops if you wanted to
2020-12-14 13:35:55 +0100 <Kronic> Why is using a monad a hoop?
2020-12-14 13:36:05 +0100 <dminuoso> "using a monad"..
2020-12-14 13:36:09 +0100 <Kronic> Not trying to belittle you I just don't get where you are coming from
2020-12-14 13:36:14 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net)
2020-12-14 13:36:14 +0100 <ski> if `t :: T |- f t :: a -> b' and `t :: T |- x t :: a', then `t :: T |- (f t) (x t) :: b'. function application implicitly calls `(<*>)', yes ?
2020-12-14 13:36:41 +0100halbGefressen(~halbGefre@2a02:810d:f40:2a9c:a4fe:2adc:248b:466f) (Quit: halbGefressen)
2020-12-14 13:36:56 +0100 <dminuoso> superstar64: Anyhow, what you're asking for is precisely captured by MonadState
2020-12-14 13:37:08 +0100 <ski> dminuoso, i'm not so sure
2020-12-14 13:37:22 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-12-14 13:37:44 +0100 <ski> reminds me more of threaded attributes in attribute grammars
2020-12-14 13:37:46 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 265 seconds)
2020-12-14 13:37:56 +0100 <superstar64> ski i think so
2020-12-14 13:38:26 +0100iinuwa(iinuwamatr@gateway/shell/matrix.org/x-lmbenmarrebbdhru) ("User left")
2020-12-14 13:40:17 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 13:40:20 +0100 <ski> superstar64 : it's backwards. you can explain/understand how free variables are "distributed" to parallel subexpressions (like with application), in terms of input/reader, but that doesn't "make them implicitly call `(<*>)'"
2020-12-14 13:40:47 +0100 <ski> (ditto for how evidence for constraints are distributed)
2020-12-14 13:42:41 +0100 <ski> `(<*>)' is an operation defined in Haskell. conceptually, understanding basic application (and also type class overloading), comes before understanding something like `(<*>)', whose usage builds upon the former
2020-12-14 13:42:43 +0100 <superstar64> `main :: IO => (String, String)``main = (getStr,getStr)`
2020-12-14 13:42:56 +0100geekosaur(ac3a536c@172.58.83.108)
2020-12-14 13:43:02 +0100 <kuribas> is there a monoid over kleisli composition?
2020-12-14 13:43:23 +0100 <ski> (if you were talking about a mathematical version of `(<*>)', that you used to understand or talk about the semantics of a language, then that could be a different discussion)
2020-12-14 13:43:38 +0100 <Taneb> kuribas: not in base but there's Data.Monoid.Endomorphism in monoid-extras
2020-12-14 13:43:42 +0100 <superstar64> ski i know that, i'm just saying that typeclass desugaring is effectively a auto reader monad
2020-12-14 13:43:48 +0100 <Taneb> Which takes a category as a parameter
2020-12-14 13:44:05 +0100 <ski> superstar64 : did you even check out linear implicit parameters ?
2020-12-14 13:44:15 +0100 <superstar64> that's a thing?
2020-12-14 13:44:21 +0100 <ski> it was a thing
2020-12-14 13:45:08 +0100 <ski> it automatically called a `split' operation, everytime the implicit parameter would be passed on to two (or more) subcomputations
2020-12-14 13:45:15 +0100 <ski> (there was no state-threading)
2020-12-14 13:45:24 +0100 <kuribas> Taneb: ok, thanks :)
2020-12-14 13:46:08 +0100 <boxscape> https://www.reddit.com/r/haskell/comments/6ps8zs/linear_implicit_parameters/
2020-12-14 13:46:12 +0100 <ski> superstar64 : your `main' example looks like it wants to express side-effect annotations
2020-12-14 13:46:14 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 13:46:15 +0100 <boxscape> linear implicit parameter discussion
2020-12-14 13:46:28 +0100mouseghost(~draco@wikipedia/desperek) (Quit: mew wew)
2020-12-14 13:46:34 +0100 <superstar64> i think i might have rediscovered that yes
2020-12-14 13:47:39 +0100 <ski> superstar64 : "Fun with Linear Implicit Parameters" by TheHunter in 2005-05 at <https://wiki.haskell.org/The_Monad.Reader/Issue2/FunWithLinearImplicitParameters> might be interesting
2020-12-14 13:48:06 +0100 <superstar64> i'll have to look into this more i guess
2020-12-14 13:48:19 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-14 13:49:02 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit)
2020-12-14 13:49:53 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 13:49:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 13:51:58 +0100jmchael(~jmchael@87.112.60.168)
2020-12-14 13:54:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-12-14 14:00:53 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2020-12-14 14:03:41 +0100jedws(~jedws@121.209.189.201)
2020-12-14 14:04:47 +0100olligobber(~olligobbe@unaffiliated/olligobber) (Ping timeout: 260 seconds)
2020-12-14 14:04:54 +0100carlomagno(~cararell@148.87.23.12)
2020-12-14 14:09:42 +0100SomeoneSerge(~someone-s@185.59.222.93) (Ping timeout: 260 seconds)
2020-12-14 14:10:26 +0100 <kuribas> hmm, I have an interesting monad instance: instance Monad (DataSourceT query m) where ds >>= f = f <$> ds
2020-12-14 14:10:31 +0100 <kuribas> is this a free monad?
2020-12-14 14:10:42 +0100Rudd0(~Rudd0@185.189.115.108) (Read error: Connection reset by peer)
2020-12-14 14:11:27 +0100 <kuribas> wait, that's wrong...
2020-12-14 14:13:46 +0100cosimone(~cosimone@2001:b07:ae5:db26:1fb3:ef3f:ece2:c6f8)
2020-12-14 14:13:55 +0100 <boxscape> % :t \(ds :: m a) (f :: (a -> m b)) -> f <$> ds
2020-12-14 14:13:55 +0100 <yahb> boxscape: Functor m => m a -> (a -> m b) -> m (m b)
2020-12-14 14:13:58 +0100 <boxscape> missing the join there, eh
2020-12-14 14:14:04 +0100Entertainment(~entertain@104.246.132.210)
2020-12-14 14:14:13 +0100 <kuribas> yeah
2020-12-14 14:14:51 +0100 <superstar64> wait, you can type annotation on lambda variables?
2020-12-14 14:15:11 +0100 <boxscape> yeah, though I'm somewhat surprised that it realizes that I want those `a`s to be the same
2020-12-14 14:15:23 +0100 <geekosaur> part of ScopedTypevariables I think
2020-12-14 14:15:29 +0100 <superstar64> my world has been changed
2020-12-14 14:18:21 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-12-14 14:19:23 +0100 <tomsmeding> :t \x f -> join (fmap f x)
2020-12-14 14:19:24 +0100 <lambdabot> Monad m => m a1 -> (a1 -> m a2) -> m a2
2020-12-14 14:19:37 +0100 <tomsmeding> kuribas: I think with join, you've implemented >>= in terms of >>=
2020-12-14 14:20:05 +0100 <kuribas> tomsmeding: yeah, the correct implementation is a bit more complicated.
2020-12-14 14:20:13 +0100 <tomsmeding> as in: x >>= f = f <$> x is always valid :)
2020-12-14 14:20:22 +0100 <tomsmeding> (no, join (f <$> x))
2020-12-14 14:20:29 +0100tomsmedingfell in the same trap
2020-12-14 14:20:42 +0100sh9(~sh9@softbank060116136158.bbtec.net)
2020-12-14 14:20:44 +0100ccapndave(~ccapndave@213.55.220.76) ()
2020-12-14 14:20:50 +0100 <kuribas> my new instance is to large to paste here...
2020-12-14 14:20:52 +0100 <int-e> obey the laws!
2020-12-14 14:21:06 +0100 <tomsmeding> of not falling in the trap?
2020-12-14 14:21:07 +0100 <kuribas> it's only fmap in one case...
2020-12-14 14:21:09 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2020-12-14 14:21:18 +0100 <int-e> tomsmeding: of the monad class, in this case
2020-12-14 14:22:32 +0100 <kuribas> but it still looks free-monadish...
2020-12-14 14:23:19 +0100 <kuribas> I guess it's just as inefficient then...
2020-12-14 14:23:31 +0100 <boxscape> tomsmeding In an ideal world that would be the default implementation of >>= and you could define a Monad instance in terms of join if you wanted
2020-12-14 14:23:52 +0100 <boxscape> alas, join is not part of the Monad class for some roles-related reason
2020-12-14 14:24:31 +0100 <boxscape> Though Ryan Scott made a blog post at some point saying QuantifiedConstraints would let us get it in there, so I'm not sure if there's a good reason for why it's still not part of the class
2020-12-14 14:25:05 +0100 <int-e> ?
2020-12-14 14:25:23 +0100 <boxscape> I'm not sure what you're asking
2020-12-14 14:25:28 +0100 <tomsmeding> int-e: https://paste.tomsmeding.com/bcyGojqR I'm satisfying the laws, don't worry :p
2020-12-14 14:25:31 +0100 <int-e> isn't it historical reasons
2020-12-14 14:25:43 +0100 <boxscape> int-e https://gitlab.haskell.org/ghc/ghc/-/wikis/roles2
2020-12-14 14:26:14 +0100 <int-e> ...30 minutes later...
2020-12-14 14:28:05 +0100 <int-e> So it... breaks GND in some cases... okay I can believe that.
2020-12-14 14:30:03 +0100 <int-e> But I also suspect that this isn't the reason why join isn't in the Monad class. But it is a good reason why we can't just add it, thanks!
2020-12-14 14:30:23 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-14 14:30:23 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net) ()
2020-12-14 14:30:44 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 14:30:56 +0100 <boxscape> I suppose if this reason didn't exist, if it hadn't been for the Applicative-Monad proposal, join likely also wouldn't be in Monad
2020-12-14 14:31:20 +0100 <kuribas> how is the transformation called to make free efficient?
2020-12-14 14:31:30 +0100son0p(~son0p@181.136.122.143)
2020-12-14 14:32:15 +0100 <int-e> codensity?
2020-12-14 14:32:27 +0100 <kuribas> right, thanks!
2020-12-14 14:34:19 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2020-12-14 14:34:42 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 14:34:43 +0100 <int-e> http://comonad.com/reader/2011/free-monads-for-less-3/ (linking the last post because forward links are hard to find)
2020-12-14 14:35:07 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 14:36:35 +0100 <dminuoso> 14:14:51 superstar64 | wait, you can type annotation on lambda variables?
2020-12-14 14:36:41 +0100 <int-e> kuribas: And there's an implementation of it that predates all that theory: https://hackage.haskell.org/package/MonadPrompt
2020-12-14 14:37:01 +0100 <kuribas> int-e: which one should I take?
2020-12-14 14:37:06 +0100 <kuribas> or roll my own version?
2020-12-14 14:37:11 +0100 <int-e> (I'm biased, I was involved in that one)
2020-12-14 14:38:11 +0100 <int-e> Honestly, between MonadPrompt, free, operational, and probably more... I don't even know what the exact trade-offs are.
2020-12-14 14:39:02 +0100 <kuribas> I just want something to easily plug into my own type.
2020-12-14 14:39:22 +0100 <kuribas> kan-extension has to many dependencies...
2020-12-14 14:40:01 +0100 <int-e> Oh I finally get what you want, hmm.
2020-12-14 14:40:03 +0100Someguy123(~someguy@unaffiliated/compgenius999)
2020-12-14 14:40:07 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 14:40:34 +0100st8less(~st8less@2603:a060:11fd:0:115c:d596:5b1b:f8ff)
2020-12-14 14:40:43 +0100 <kuribas> codensity is like ContT over a monad right?
2020-12-14 14:41:26 +0100 <kuribas> ah, it's actually a generalization of ContT...
2020-12-14 14:41:31 +0100kupi(uid212005@gateway/web/irccloud.com/x-ukhucmkqxxkluaif)
2020-12-14 14:41:34 +0100 <kuribas> with the return type polymorphic...
2020-12-14 14:41:47 +0100 <int-e> Yeah isn't it really just ContT except you never mess with the continuations?
2020-12-14 14:41:54 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2020-12-14 14:42:00 +0100 <kuribas> haha, right :)
2020-12-14 14:42:13 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 14:42:42 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com) (Ping timeout: 260 seconds)
2020-12-14 14:43:10 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com)
2020-12-14 14:43:49 +0100chang(~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com)
2020-12-14 14:44:05 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2020-12-14 14:44:25 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 14:46:25 +0100drbean(~drbean@TC210-63-209-88.static.apol.com.tw) (Ping timeout: 264 seconds)
2020-12-14 14:48:38 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 14:49:35 +0100 <Kronic> Question: What is one thing you guys like to point to when trying to convince people to give haskell a trial? I've been chatting to a co-worker about it for a while on and off, here and there, and I've mentioned many good things about Haskell but it's hard to think of one thing that is easily demonstrable that is also definitively better than what you might find in a run of the mill language. tl;dr What's that killer feature that I can point to to
2020-12-14 14:49:35 +0100 <Kronic> encourage people to give it a shot?
2020-12-14 14:50:12 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Remote host closed the connection)
2020-12-14 14:50:32 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 14:51:36 +0100 <kuribas> the ability to create expressive and concise code which is also very robust.
2020-12-14 14:51:52 +0100 <Kronic> I find it hard to locate just one thing to talk about because while I know the concurrency is good and the type system is amazing, for me what drives me to learn haskell is the combination of many things.
2020-12-14 14:52:41 +0100 <kuribas> Kronic: indeed, concurrency is easier when you go purely functional, and onlike other languages, haskell can garantee you stay pure.
2020-12-14 14:53:14 +0100 <kuribas> Kronic: compare that to lock free mutable structures, which are incredibly hard to write.
2020-12-14 14:53:43 +0100 <kuribas> concurrency is just so easy to add as an afterthought, which isn't true in other language.
2020-12-14 14:53:51 +0100urodna(~urodna@unaffiliated/urodna)
2020-12-14 14:55:20 +0100 <int-e> kuribas: the code really looks like GND should work :-/ https://paste.debian.net/1176860/
2020-12-14 14:55:30 +0100 <Kronic> I feel like that's a really good point right there
2020-12-14 14:55:46 +0100 <Kronic> Not specifically concurrency, but adding it after the fact
2020-12-14 14:55:49 +0100 <kuribas> int-e: ah cool :)
2020-12-14 14:56:13 +0100 <Kronic> I guess refactoring is probably the main thing that would attract people I know, considering that is a pain point in some of my work codebases
2020-12-14 14:56:19 +0100 <kuribas> Kronic: I can imagine in java you have to be careful about tons of things.
2020-12-14 14:57:08 +0100 <Kronic> No need for me to imagine, you certainly have to be careful. I've plenty of experience in Java
2020-12-14 14:58:11 +0100ekleog(~ii@prologin/ekleog)
2020-12-14 14:58:38 +0100 <int-e> kuribas: I wouldn't be surprised if the version in `free` uses `unsafeCoerce` for better performance
2020-12-14 14:58:53 +0100 <kuribas> coerce to what?
2020-12-14 14:59:02 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net) (Ping timeout: 260 seconds)
2020-12-14 14:59:03 +0100 <int-e> kuribas: basically, fmap = unsafeCoerce fmap, and so on, with type signatures to pick the right one
2020-12-14 14:59:21 +0100 <kuribas> right
2020-12-14 14:59:29 +0100 <int-e> just like the old GND would do
2020-12-14 14:59:34 +0100hexfive(~hexfive@50-47-142-195.evrt.wa.frontiernet.net)
2020-12-14 15:00:17 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net)
2020-12-14 15:00:43 +0100dmiles(~dmiles@c-98-232-203-165.hsd1.wa.comcast.net)
2020-12-14 15:00:55 +0100 <superstar64> is there a different between `instance F a a` and `instance (a ~ b) => F a b`?
2020-12-14 15:01:52 +0100 <kuribas> superstar64: yes
2020-12-14 15:02:16 +0100 <kuribas> the first instance is not a candidate when a and b are different.
2020-12-14 15:02:31 +0100 <kuribas> the second one is, but will the fail.
2020-12-14 15:03:18 +0100ski. o O ( `f(A,B) :- !,A = B.' )
2020-12-14 15:04:47 +0100 <superstar64> ski does does your `!` mean here?
2020-12-14 15:05:00 +0100bitmapper(uid464869@gateway/web/irccloud.com/x-xqjrsmravzeoznkf)
2020-12-14 15:05:03 +0100 <ski> cut
2020-12-14 15:05:19 +0100 <ski> it's a Prolog thing
2020-12-14 15:06:00 +0100 <superstar64> it's fun being in a position of already written a unifier and not knowing anything about prolog
2020-12-14 15:06:03 +0100 <ski> it basically means "disregard other possibilities of making the f/2 call succeed"
2020-12-14 15:06:46 +0100 <ski> (which seems similar to the effect that `instance a ~ b => F a b' has)
2020-12-14 15:08:26 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th)
2020-12-14 15:08:55 +0100 <ski> (`!' is one of the main non-declarative / impure constructs in Prolog. so this points to perhaps the aforementioned behaviour of instance heads also ought to be considered non-declarative ..)
2020-12-14 15:10:37 +0100robbert-vdh(~robbert-v@128.199.60.252)
2020-12-14 15:12:07 +0100 <tomsmeding> merijn: earlier you convinced me that cabal flags were only for build configurations and not intended to be specified by end-users, but now I read the cabal docs and find "most of the time a flag represents certain feature, that can be switched on or off by the package user", and the relevant `manual` field: https://cabal.readthedocs.io/en/3.4/cabal-package.html#pkg-field-flag-manual
2020-12-14 15:12:11 +0100 <tomsmeding> so what's the deal? :p
2020-12-14 15:12:29 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 15:13:31 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-14 15:13:35 +0100 <geekosaur> sounds like the cabal devs gave up
2020-12-14 15:13:36 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2020-12-14 15:13:37 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 15:15:22 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 15:16:18 +0100 <int-e> tomsmeding: It's meant for enabling specific features... say debugging builds.
2020-12-14 15:17:06 +0100christo(~chris@81.96.113.213)
2020-12-14 15:18:14 +0100 <tomsmeding> which is exactly what merijn was arguing was _not_ the point of flags, assuming that I understood correctly
2020-12-14 15:18:31 +0100 <int-e> it's the point of *manual* flags
2020-12-14 15:18:35 +0100 <tomsmeding> and if that's one possible use of flags, that begs the question why setting them is so terribly cumbersome
2020-12-14 15:18:50 +0100 <tomsmeding> or does "just setting a flag" "just work" with manual flags?
2020-12-14 15:19:02 +0100 <tomsmeding> I have to admit that I've probably only tried it with non-manual flags
2020-12-14 15:19:31 +0100 <int-e> they have limited use, obviously, because you don't have a good way of depending on a package-with-a-particular-flag-set, so basically to keep things sane, the flags can only affect performance, not functionality.
2020-12-14 15:19:37 +0100 <merijn> tomsmeding: The only other solution is "integrating flags in the constraint solver"
2020-12-14 15:19:47 +0100motherfsck(~motherfsc@unaffiliated/motherfsck)
2020-12-14 15:19:50 +0100 <merijn> tomsmeding: Which exponentially blows up the search space and makes things more complicated
2020-12-14 15:20:01 +0100 <tomsmeding> makes sense
2020-12-14 15:20:10 +0100 <int-e> (for libraries. leaf packages like executables are a different matter, perhaps)
2020-12-14 15:20:23 +0100 <tomsmeding> good point int-e
2020-12-14 15:20:30 +0100 <merijn> tomsmeding: And no one wants to deal with that, so dependencies can't specify flags, and therefore you shouldn't use them
2020-12-14 15:21:04 +0100 <tomsmeding> so that means that for libraries, non-manual flags are for build configuration, and manual flags are available for end-user configuration but due to implementation difficulty hard to use and thus not recommended?
2020-12-14 15:21:08 +0100 <merijn> tomsmeding: It's not so much that "feature flags are bad" it's "there's no reasonably way to support feature flags without exploding complexity and there's not enough manpower or compute"
2020-12-14 15:21:57 +0100 <tomsmeding> yes I see
2020-12-14 15:21:59 +0100 <merijn> People already complain if the constraint solver can't handle build plans
2020-12-14 15:22:33 +0100 <int-e> for library, 'enable debugging' and maybe a 'enable experimental features' is about the scope I'd be willing to use manual flags for... so things not really targeted at users but at testers and developers.
2020-12-14 15:25:24 +0100 <kuribas> is there a "free monad" over another monad?
2020-12-14 15:26:07 +0100 <kuribas> so, forall r. (m a -> r) -> (m f -> r) -> r ?
2020-12-14 15:26:59 +0100 <ski> `f' ?
2020-12-14 15:27:25 +0100 <kuribas> newtype F f m a = forall r. (m a -> r) -> (m f -> r) -> r
2020-12-14 15:27:43 +0100 <int-e> f has a kind problem there
2020-12-14 15:28:04 +0100 <ski> `f' has kind `Type'
2020-12-14 15:28:09 +0100 <kuribas> https://hackage.haskell.org/package/free-5.1.4/docs/Control-Monad-Free-Church.html#t:F
2020-12-14 15:28:32 +0100 <superstar64> kuribas, isn't that equivalent to `newtype F f m a = Left (m a) | Right (m f)`
2020-12-14 15:28:48 +0100 <kuribas> right newtype F f m a = F forall r. (m a -> r) -> (m f r -> r) -> r
2020-12-14 15:29:10 +0100 <kuribas> superstar64: yes (and it's wrong)
2020-12-14 15:29:13 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d)
2020-12-14 15:29:24 +0100 <ski> so `m's not supposed to have kind `Type -> Type' ?
2020-12-14 15:29:28 +0100manafbtc(~manaf.bit@196.64.192.193)
2020-12-14 15:29:34 +0100 <manafbtc> hi
2020-12-14 15:29:37 +0100 <kuribas> ski: yes, m is the monad
2020-12-14 15:29:51 +0100 <superstar64> kuribas, now there's a kind error with m
2020-12-14 15:29:59 +0100 <ski> how can both `m a' and `m f r' have kind `Type'. is `m' polymorphic ?
2020-12-14 15:30:02 +0100 <kuribas> m (f r) then?
2020-12-14 15:30:21 +0100 <ski> hello manafbtc
2020-12-14 15:31:59 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-12-14 15:32:27 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection)
2020-12-14 15:33:12 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64)
2020-12-14 15:33:48 +0100 <ski> what do you mean by free monad over another monad ?
2020-12-14 15:34:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d) (Ping timeout: 260 seconds)
2020-12-14 15:34:23 +0100 <kuribas> I am not sure ... :-P
2020-12-14 15:34:46 +0100manafbtc(~manaf.bit@196.64.192.193) ()
2020-12-14 15:34:50 +0100 <ski> the free vector space over a vector space would just be that same vector space. so it seems to me that a free monad over a monad would be the same as that monad (but perhaps with some efficiency gains ?). but possibly you don't mean quite that
2020-12-14 15:35:15 +0100 <superstar64> `Constructor ‘ForallP’ must use the type variable only as the last argument of a data type` what does this mean exactly?
2020-12-14 15:35:26 +0100 <superstar64> i'm trying to use derive functor
2020-12-14 15:36:03 +0100 <ski> (hm, i guess the efficiency gains i know about comes from forgetting that it's a monad, only treating it as a functor, and then taking the free monad over that functor ..)
2020-12-14 15:36:17 +0100 <kuribas> ski: I have a type that looks very freeish...
2020-12-14 15:36:28 +0100 <superstar64> here's the constructor ` ForallP (TypeSystem.Forall Linearity Stage (Kind p) (Type p)) deriving (Show, Functor)`
2020-12-14 15:36:30 +0100 <kuribas> better I'll work it out and come back
2020-12-14 15:36:39 +0100 <ski> mhm
2020-12-14 15:37:01 +0100 <ski> superstar64 : using GND ?
2020-12-14 15:37:08 +0100 <superstar64> what's GND?
2020-12-14 15:37:18 +0100 <ski> `GeneralizedNewtypeDeriving'
2020-12-14 15:37:28 +0100 <superstar64> i'm using derive functor
2020-12-14 15:37:40 +0100 <superstar64> ` default-extensions: MultiParamTypeClasses, FunctionalDependencies, DeriveTraversable, FlexibleInstances, NoMonomorphismRestriction, TypeFamilies, PatternSynonyms`
2020-12-14 15:37:43 +0100nolrai(4c1bcada@c-76-27-202-218.hsd1.or.comcast.net) (Remote host closed the connection)
2020-12-14 15:37:43 +0100 <ski> i'm assuming the data constructor is for some type `Foo p' ?
2020-12-14 15:38:20 +0100 <superstar64> https://pastebin.com/raw/z2PATHRu
2020-12-14 15:39:07 +0100clynamen(~clynamen@37.183.22.31) (Read error: Connection reset by peer)
2020-12-14 15:39:19 +0100clynamen(~clynamen@net-37-116-47-122.cust.vodafonedsl.it)
2020-12-14 15:39:30 +0100 <superstar64> i guess i could write the map manually, it's only 3 lines
2020-12-14 15:40:11 +0100 <ski> % data Foo a = Mk [a] (Maybe a) deriving Functor
2020-12-14 15:40:11 +0100 <yahb> ski:
2020-12-14 15:40:17 +0100 <ski> % data Foo a = Mk (Either [a] (Maybe a)) deriving Functor
2020-12-14 15:40:17 +0100 <yahb> ski: ; <interactive>:30:49: error:; * Can't make a derived instance of `Functor Foo': Constructor `Mk' must use the type variable only as the last argument of a data type; * In the data declaration for `Foo'
2020-12-14 15:40:31 +0100SanchayanMaity(~Sanchayan@223.226.34.150) (Remote host closed the connection)
2020-12-14 15:40:42 +0100 <ski> % data Foo a = Mk [a] (Either a String) deriving Functor
2020-12-14 15:40:42 +0100 <yahb> ski: ; <interactive>:33:48: error:; * Can't make a derived instance of `Functor Foo': Constructor `Mk' must use the type variable only as the last argument of a data type; * In the data declaration for `Foo'
2020-12-14 15:40:44 +0100 <ski> % data Foo a = Mk [a] (Either String a) deriving Functor
2020-12-14 15:40:45 +0100 <yahb> ski:
2020-12-14 15:41:20 +0100 <superstar64> is it a ghc bug?
2020-12-14 15:41:25 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net) (Read error: Connection reset by peer)
2020-12-14 15:41:32 +0100SanchayanMaity(~Sanchayan@223.226.34.150)
2020-12-14 15:42:00 +0100 <ski> seems each parameter type can only mention the parameter (the last parameter of the declared data type) "at the end"
2020-12-14 15:42:47 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
2020-12-14 15:43:17 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net)
2020-12-14 15:44:21 +0100 <boxscape> which makes sense, since `instance Functor (Either a)` exists, but `instance Functor (\b -> Either a b)` does not
2020-12-14 15:44:26 +0100st8less(~st8less@2603:a060:11fd:0:115c:d596:5b1b:f8ff) (Ping timeout: 264 seconds)
2020-12-14 15:44:29 +0100 <boxscape> er
2020-12-14 15:44:38 +0100 <boxscape> instance Functor (\b -> Either b a), even
2020-12-14 15:45:12 +0100 <boxscape> no that's not right either
2020-12-14 15:45:16 +0100st8less(~st8less@2603:a060:11fd:0:115c:d596:5b1b:f8ff)
2020-12-14 15:45:31 +0100 <dminuoso> boxscape: That's a moot argument.
2020-12-14 15:45:41 +0100 <dminuoso> I dont think it's the real reason either.
2020-12-14 15:46:32 +0100 <ski> yes, since it (with two exceptions) will just call `fmap' on components (whose types mention, but is not identical to, the type parameter), according to <https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#deriving-functor…>
2020-12-14 15:46:49 +0100 <boxscape> well, I'd say it's a manifestation of the real reason, which is, you can only make Functor instances over the rightmost parameter of a type constructor, hence why only the first Either instance exists
2020-12-14 15:47:12 +0100 <ski> (the two exceptions apparently being tuple types, and function types)
2020-12-14 15:47:49 +0100 <boxscape> (s/why//)
2020-12-14 15:48:01 +0100 <ski> .. makes me wonder whether we should have a type class for expressing that a type class is functorial ..
2020-12-14 15:48:31 +0100 <dminuoso> Uh.. perhaps I just expected this to use generics, rather..
2020-12-14 15:48:38 +0100 <dminuoso> Mmm
2020-12-14 15:49:08 +0100 <ski> (e.g. `Eq' is clearly contravariant, while `Bounded' is covariant)
2020-12-14 15:49:48 +0100 <boxscape> % type F :: (a -> Constraint) -> Constraint; class F a
2020-12-14 15:49:49 +0100 <yahb> boxscape:
2020-12-14 15:49:53 +0100 <boxscape> % instance F Functor
2020-12-14 15:49:53 +0100 <yahb> boxscape:
2020-12-14 15:49:59 +0100 <boxscape> hm I had no idea you could do this
2020-12-14 15:50:48 +0100da39a3ee5e6b4b0d(~da39a3ee5@mx-ll-171.5.29-209.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 15:51:40 +0100 <ski> so perhaps `data Foo a = Bounded a => MkFoo [a] deriving Functor' and `data Bar a = MkBar (Eq a => [a]) deriving Functor' ought to work, with `DeriveFunctor' ?
2020-12-14 15:51:50 +0100sMuNiX(~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca) (Ping timeout: 256 seconds)
2020-12-14 15:53:00 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 15:53:29 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d)
2020-12-14 15:54:32 +0100geekosaur(ac3a536c@172.58.83.108) (Remote host closed the connection)
2020-12-14 15:55:16 +0100Kronic(~Kronic___@84.203.98.133) (Quit: Leaving)
2020-12-14 15:55:49 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-14 15:56:53 +0100sMuNiX(~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca)
2020-12-14 15:57:14 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 15:57:31 +0100danso(~dan@69-165-210-185.cable.teksavvy.com)
2020-12-14 15:59:17 +0100SanchayanMaity(~Sanchayan@223.226.34.150) (Ping timeout: 256 seconds)
2020-12-14 15:59:40 +0100SanchayanMaity(~Sanchayan@223.226.34.150)
2020-12-14 16:00:17 +0100clynamen(~clynamen@net-37-116-47-122.cust.vodafonedsl.it) (Ping timeout: 260 seconds)
2020-12-14 16:00:52 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:bbcd:9454:7ae:76c2:209d) (Ping timeout: 260 seconds)
2020-12-14 16:01:52 +0100clynamen(~clynamen@net-93-71-86-202.cust.vodafonedsl.it)
2020-12-14 16:02:55 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2020-12-14 16:09:31 +0100hseg(~gesh@IGLD-84-228-238-87.inter.net.il)
2020-12-14 16:10:12 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-14 16:10:30 +0100kritzefitz(~kritzefit@212.86.56.80)
2020-12-14 16:12:06 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
2020-12-14 16:12:58 +0100day(~Unknown@unaffiliated/day)
2020-12-14 16:13:26 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Ping timeout: 256 seconds)
2020-12-14 16:15:38 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 16:18:08 +0100SanchayanMaity(~Sanchayan@223.226.34.150) (Quit: SanchayanMaity)
2020-12-14 16:18:14 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
2020-12-14 16:18:38 +0100st8less(~st8less@2603:a060:11fd:0:115c:d596:5b1b:f8ff) (Ping timeout: 264 seconds)
2020-12-14 16:19:50 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 256 seconds)
2020-12-14 16:20:28 +0100st8less(~st8less@inet-167-224-197-181.isp.ozarksgo.net)
2020-12-14 16:20:39 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2020-12-14 16:21:27 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 16:22:18 +0100fresheyeball(~isaac@c-71-237-105-37.hsd1.co.comcast.net)
2020-12-14 16:26:09 +0100ulidtko|k(~ulidtko@194.54.80.38)
2020-12-14 16:26:26 +0100christo(~chris@81.96.113.213)
2020-12-14 16:26:49 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 260 seconds)
2020-12-14 16:27:26 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 16:27:33 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 16:27:34 +0100DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
2020-12-14 16:27:41 +0100christo(~chris@81.96.113.213)
2020-12-14 16:28:43 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 16:28:54 +0100ulidtko(~ulidtko@193.111.48.79) (Ping timeout: 256 seconds)
2020-12-14 16:30:43 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d)
2020-12-14 16:30:47 +0100boxscape(54a35b08@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.91.8) (Quit: Connection closed)
2020-12-14 16:31:57 +0100perry69420(b6445553@182.68.85.83)
2020-12-14 16:34:18 +0100boxscape(86ab2d6b@gateway/web/cgi-irc/kiwiirc.com/ip.134.171.45.107)
2020-12-14 16:34:30 +0100Kaeipi(~Kaiepi@47.54.252.148) (Remote host closed the connection)
2020-12-14 16:35:10 +0100Kaeipi(~Kaiepi@47.54.252.148)
2020-12-14 16:35:17 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d) (Ping timeout: 260 seconds)
2020-12-14 16:35:41 +0100Kaeipi(~Kaiepi@47.54.252.148) (Remote host closed the connection)
2020-12-14 16:36:03 +0100aev(~Admin@pool-108-5-152-94.nwrknj.fios.verizon.net)
2020-12-14 16:36:14 +0100Kaeipi(~Kaiepi@47.54.252.148)
2020-12-14 16:39:52 +0100Ariakenom(~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se)
2020-12-14 16:42:30 +0100whatisRT(~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2020-12-14 16:42:30 +0100superstar64(6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net) (Remote host closed the connection)
2020-12-14 16:44:01 +0100Cthalupa(~cthulhu@47.186.47.75) (Ping timeout: 264 seconds)
2020-12-14 16:44:31 +0100whatisRT(~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de)
2020-12-14 16:44:57 +0100Cthalupa(~cthulhu@47.186.47.75)
2020-12-14 16:47:21 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com)
2020-12-14 16:48:20 +0100polyphem(~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
2020-12-14 16:48:42 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 272 seconds)
2020-12-14 16:53:47 +0100 <dolio> ski: That's actually not correct, though.
2020-12-14 16:54:43 +0100 <dolio> Treating classes as functorial depending on their methods could introduce non-canonical instances.
2020-12-14 16:55:58 +0100 <dolio> Because applying a map `f : a -> b` to the instance for `a` doesn't necessarily give you the instance for `b` (or flip it for contravariant things).
2020-12-14 17:00:39 +0100Rudd0(~Rudd0@185.189.115.98)
2020-12-14 17:02:43 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 17:03:16 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-rvftuowotlhsrsqk)
2020-12-14 17:06:04 +0100son0p(~son0p@181.136.122.143) (Ping timeout: 256 seconds)
2020-12-14 17:11:27 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 260 seconds)
2020-12-14 17:11:31 +0100terrorjack(~terrorjac@static.23.111.201.195.clients.your-server.de)
2020-12-14 17:12:18 +0100jmchael(~jmchael@87.112.60.168) (Quit: Leaving)
2020-12-14 17:12:34 +0100stzsch(~stzsch@187.44.81.18)
2020-12-14 17:12:55 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 17:13:05 +0100stzsch(~stzsch@187.44.81.18) (Client Quit)
2020-12-14 17:13:19 +0100stzsch(~stzsch@187.44.81.18)
2020-12-14 17:13:26 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-12-14 17:14:03 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds)
2020-12-14 17:14:06 +0100 <ski> hm, good point. you lose uniqueness, since given many different `a -> b', and a single evidence of a `C a' constraint, you'd get, in general, many different evidence for a `C b' constraint
2020-12-14 17:15:28 +0100tomboy64(~tomboy64@gateway/tor-sasl/tomboy64)
2020-12-14 17:16:45 +0100machinedgod(~machinedg@24.105.81.50)
2020-12-14 17:16:46 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds)
2020-12-14 17:17:17 +0100stzsch(~stzsch@187.44.81.18) (Client Quit)
2020-12-14 17:18:16 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 240 seconds)
2020-12-14 17:18:36 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-12-14 17:21:50 +0100 <ski> % type role DictBounded representational; data DictBounded a = Bounded a => DB
2020-12-14 17:21:51 +0100 <yahb> ski: ; <interactive>:51:1: error:; * Role mismatch on variable a: Annotation says representational but role nominal is required; * while checking a role annotation for `DictBounded'
2020-12-14 17:21:57 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis)
2020-12-14 17:22:20 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 17:22:25 +0100mouseghost(~draco@87-206-9-185.dynamic.chello.pl)
2020-12-14 17:22:25 +0100mouseghost(~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
2020-12-14 17:22:25 +0100mouseghost(~draco@wikipedia/desperek)
2020-12-14 17:23:36 +0100day(~Unknown@unaffiliated/day) (Ping timeout: 240 seconds)
2020-12-14 17:23:55 +0100aqd(~aqd@87-92-163-238.rev.dnainternet.fi) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-12-14 17:24:46 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2020-12-14 17:25:59 +0100hekkaidekapus](~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-12-14 17:26:28 +0100jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2020-12-14 17:27:52 +0100jamm(~jamm@unaffiliated/jamm) (Remote host closed the connection)
2020-12-14 17:29:03 +0100hekkaidekapus[(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-12-14 17:29:09 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 17:30:27 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 17:31:04 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d)
2020-12-14 17:31:22 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 17:32:34 +0100perry69420(b6445553@182.68.85.83) (Remote host closed the connection)
2020-12-14 17:34:17 +0100nhs(~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
2020-12-14 17:35:16 +0100nhs(~nhs@c-67-180-177-103.hsd1.ca.comcast.net)
2020-12-14 17:35:46 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2020-12-14 17:35:57 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d) (Ping timeout: 260 seconds)
2020-12-14 17:39:17 +0100Kronic(~Kronic___@84.203.98.133)
2020-12-14 17:44:50 +0100heatsink(~heatsink@2600:1700:bef1:5e10:8cf6:ea5e:26b8:985d)
2020-12-14 17:45:30 +0100petersen(~petersen@redhat/juhp) (Quit: petersen)
2020-12-14 17:46:28 +0100petersen(~petersen@redhat/juhp)
2020-12-14 17:49:41 +0100kozkoz_
2020-12-14 17:51:22 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net)
2020-12-14 17:52:34 +0100solonarv(~solonarv@astrasbourg-157-1-27-135.w90-40.abo.wanadoo.fr)
2020-12-14 17:54:28 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net) (Remote host closed the connection)
2020-12-14 17:54:37 +0100geekosaur(42d52137@66.213.33.55)
2020-12-14 18:00:01 +0100ph88^(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de)
2020-12-14 18:01:44 +0100aev(~Admin@pool-108-5-152-94.nwrknj.fios.verizon.net) ()
2020-12-14 18:03:49 +0100ph88(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
2020-12-14 18:05:36 +0100 <__monty__> I have to say my perception of HN is in line with merijn's. Lobste.rs is supposed to be better in some way but to me it reads pretty same-y.
2020-12-14 18:05:52 +0100 <__monty__> Sorry, that was meant for -offtopic.
2020-12-14 18:11:39 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
2020-12-14 18:11:51 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 18:13:12 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 18:14:05 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 18:18:49 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 260 seconds)
2020-12-14 18:20:19 +0100quarters(~quarters@unaffiliated/quarters)
2020-12-14 18:25:20 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2020-12-14 18:26:16 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com) (Ping timeout: 240 seconds)
2020-12-14 18:27:30 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com)
2020-12-14 18:27:46 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2020-12-14 18:32:07 +0100benjamingr__(uid23465@gateway/web/irccloud.com/x-urcfavraxgmoltak)
2020-12-14 18:32:50 +0100esp32_prog(yoann@gateway/vpn/protonvpn/esp32prog/x-46565127) (Ping timeout: 256 seconds)
2020-12-14 18:33:20 +0100Saukk(~Saukk@2001:998:ec:954:1c59:9bb5:b94c:3)
2020-12-14 18:33:33 +0100 <xerox_> hah I didn't know you could have empty where blocks!
2020-12-14 18:33:45 +0100 <xerox_> I removed all of the bindings from there and it just compiled
2020-12-14 18:33:52 +0100 <geekosaur> don't see why not
2020-12-14 18:34:11 +0100toorevitimirp(~tooreviti@117.182.180.221) (Quit: Konversation terminated!)
2020-12-14 18:35:33 +0100 <xerox_> it just never happened to me before
2020-12-14 18:35:51 +0100robbert-vdh(~robbert-v@128.199.60.252) ("WeeChat 3.0")
2020-12-14 18:38:22 +0100toorevitimirp(~tooreviti@117.182.180.221)
2020-12-14 18:40:56 +0100boxscape(86ab2d6b@gateway/web/cgi-irc/kiwiirc.com/ip.134.171.45.107) (Ping timeout: 240 seconds)
2020-12-14 18:42:37 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Quit: p-core)
2020-12-14 18:44:12 +0100cohn(~noone@unaffiliated/cohn) ()
2020-12-14 18:46:20 +0100 <mniip> wow I just realized that the docs on Data.Number.CReal are misleading
2020-12-14 18:46:42 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-12-14 18:48:40 +0100 <mniip> >Note that the comparison operations on CReal may diverge since it is (by necessity) impossible to implementent them correctly and always terminating.
2020-12-14 18:48:52 +0100 <mniip> this gives the impression that Eq may not terminate
2020-12-14 18:49:06 +0100 <mniip> but instead what happens is that Eq always terminates but is sometimes incorrect!
2020-12-14 18:49:21 +0100 <mniip> > 0 == (2^^(-138) :: CReal)
2020-12-14 18:49:24 +0100 <lambdabot> True
2020-12-14 18:50:05 +0100 <Vulfe> yeah that's a little bit surprising
2020-12-14 18:50:34 +0100aqd(~aqd@84.20.147.33)
2020-12-14 18:51:33 +0100cohn(~noone@unaffiliated/cohn)
2020-12-14 18:54:16 +0100 <mniip> in the same bin, there are CReal's that 'show' to the same string but aren't ==
2020-12-14 18:54:31 +0100 <polyphem> hi , i think i have heard there is a way to easily find out all the packages that use a specific package on hackage as a dependency . However now it doesnt come to my mind. Suggestions ?
2020-12-14 18:54:33 +0100 <mouseghost> cereal
2020-12-14 18:54:48 +0100conal(~conal@64.71.133.70)
2020-12-14 18:55:00 +0100 <solonarv> polyphem: https://packdeps.haskellers.com/reverse ?
2020-12-14 18:56:36 +0100 <polyphem> solonarv: nice, thanks
2020-12-14 18:56:45 +0100aqd(~aqd@84.20.147.33) (Ping timeout: 240 seconds)
2020-12-14 18:58:01 +0100h1ccup(47ee2144@gateway/web/cgi-irc/kiwiirc.com/ip.71.238.33.68)
2020-12-14 18:58:17 +0100 <h1ccup> in parsec, i have a parser that, by succeeding in one of its branches, causes the overall parse to fail. how do i make the parse backtrack to also try its other branches?
2020-12-14 18:58:40 +0100fendor_fendor
2020-12-14 18:58:46 +0100 <xerox_> what if you stick 'try' before it
2020-12-14 18:59:10 +0100 <monochrom> change "xxx <|> yyy" to "try xxx <|> yyy"
2020-12-14 18:59:17 +0100 <h1ccup> xerox_: doesn't work cuz a branch succeeds
2020-12-14 18:59:42 +0100 <h1ccup> monochrom: if xxx succeeds, how do i get it to try yyy?
2020-12-14 19:00:09 +0100 <monochrom> No, my xxx is non-atomic, part of it succeeds.
2020-12-14 19:00:31 +0100 <xerox_> that's what I had gotten from your explanation as well
2020-12-14 19:00:57 +0100 <geekosaur> that, or you should just attempt yyy before xxx insteadof the other way around
2020-12-14 19:01:04 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-12-14 19:01:07 +0100 <monochrom> "try xxx <|> yyy", if xxx is partly successful but eventually fails, will come back to do yyy.
2020-12-14 19:01:45 +0100 <h1ccup> xxx is wholly successful, it's just part of a larger parse where it should not succeed. in that case i want it to try yyy
2020-12-14 19:02:06 +0100 <monochrom> This is my xxx, I say that it is not wholly successfully, therefore it is not.
2020-12-14 19:02:20 +0100 <monochrom> You fit my example into your code properly.
2020-12-14 19:02:35 +0100ubert(~Thunderbi@p200300ecdf351475e6b318fffe838f33.dip0.t-ipconnect.de)
2020-12-14 19:03:22 +0100 <h1ccup> my actual example that i can't figure out: i want to parse a sequence of digits, but only allowed lengths. countr ns p = choice $ (try . flip count p) <$> ns
2020-12-14 19:03:41 +0100 <sclv> write a parser that parses a sequence of digits of any length
2020-12-14 19:03:58 +0100 <sclv> then write another parser that calls it, then checks the result and fails if its not an allowed length
2020-12-14 19:04:09 +0100 <sclv> then wrap `try` around that outer parser
2020-12-14 19:04:39 +0100 <h1ccup> sclv: i agree that would work, but would like to understand why mine doesn't and if there's a way in its vein that would.
2020-12-14 19:05:32 +0100 <h1ccup> i know i could sort ns descending but feel that's a bit brutish
2020-12-14 19:05:55 +0100 <sclv> lol if that's the only issue, then yes, sort it descending
2020-12-14 19:06:00 +0100 <sclv> ffs
2020-12-14 19:06:30 +0100 <h1ccup> but in general shouldn't there be a way to make it try other branches when a succeeding branch makes the whole parse fail?
2020-12-14 19:06:44 +0100 <sclv> no
2020-12-14 19:07:04 +0100 <Kronic> Interesting, we're talking about parsers I was just about to ask a question
2020-12-14 19:07:16 +0100 <sclv> not without exponential blowup and also without introducing a ridiculously infeasible grammar
2020-12-14 19:07:41 +0100 <sclv> i mean you can wrap everything in a try everwhere, or use an "inverse" system with `commit` like polyparse
2020-12-14 19:07:46 +0100 <sclv> but like just write a nice grammar
2020-12-14 19:07:46 +0100 <Kronic> Originally I wanted to write this: count 7 $ map string ["F", "B"] but obviously this does not work because the types do not match
2020-12-14 19:07:58 +0100 <Kronic> So I came up with count 7 $ char 'F' <|> char
2020-12-14 19:08:14 +0100 <Kronic> oops... 'B' on the end there. Is there a better way to do this ?
2020-12-14 19:08:34 +0100 <sclv> you could use `oneOf`?
2020-12-14 19:08:36 +0100 <dolio> I'm not sure `try` can even do this. It sounds like ambiguous sub-grammars.
2020-12-14 19:09:04 +0100 <Kronic> Let me look into that
2020-12-14 19:09:26 +0100 <h1ccup> i'm thinking like prolog where it would keep trying every choicepoint until something succeeds overall, why is that bad?
2020-12-14 19:09:42 +0100LKoen(~LKoen@29.248.88.92.rev.sfr.net) (Remote host closed the connection)
2020-12-14 19:10:39 +0100 <dolio> Because you need to think like how parsec actually works, or use a different library.
2020-12-14 19:10:55 +0100 <sclv> `try` is dual to `commit` http://hackage.haskell.org/package/polyparse-1.3/src/docs/index.html
2020-12-14 19:11:13 +0100 <sclv> but if you're super ambiguous everywhere then your grammar is awful
2020-12-14 19:11:19 +0100 <dolio> Maybe Earley can do ambiguous sub-grammars like this. Not sure.
2020-12-14 19:11:30 +0100 <sclv> and having to try every choicepoint everywhere always leads to a huge space and time blowup
2020-12-14 19:11:48 +0100 <sclv> i.e. its bad for the same reason a lot of code in prolog is slow
2020-12-14 19:11:58 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 19:12:46 +0100 <h1ccup> definitely easy to write bad prolog, but not too hard to write good prolog :) so polyparse is roughly these semantics? i'll look into it!
2020-12-14 19:13:07 +0100 <h1ccup> what are the pros/cons compared to parsed?
2020-12-14 19:13:11 +0100 <h1ccup> *parsec
2020-12-14 19:13:30 +0100 <monochrom> Yes, parsec kills backtracking by default, you have to opt-in for backtracking by adding "try" at suitable places where you want backtracking.
2020-12-14 19:14:01 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-12-14 19:14:02 +0100 <h1ccup> just seemed like there would be a place to put try in this example to get what i want
2020-12-14 19:14:03 +0100 <monochrom> (char '*" >> zzz) <|> yyy = prolog (char '*', cut, zzz) or yyy
2020-12-14 19:14:05 +0100 <sclv> parsec/megaparsec's main advantage is that its really widely used, well maintained, efficient, and feature complete with a lot of helpers and helper packages
2020-12-14 19:14:37 +0100 <sclv> polyparse is neat mainly as an example of another way to do things, but without any real world advantage as far as i'm concerned
2020-12-14 19:14:40 +0100Saukk(~Saukk@2001:998:ec:954:1c59:9bb5:b94c:3) (Remote host closed the connection)
2020-12-14 19:14:43 +0100 <monochrom> To get rid of that cut, you go "try (char '*' >> zzz) <|> yyy"
2020-12-14 19:15:22 +0100xff0x(~fox@2001:1a81:52c8:2700:14b6:ad9d:db0c:f54b) (Ping timeout: 260 seconds)
2020-12-14 19:15:25 +0100 <sclv> the problem is that function you have on its own can succeed in multiple ways and the first way it succeeds doesn't accord with parts of the grammar not in your function
2020-12-14 19:15:35 +0100 <sclv> so you need to wrap literally _everything_ _all the way up_ in try
2020-12-14 19:15:55 +0100 <sclv> i.e. try and commit are dual not locally but only on the basis of a whole program transform
2020-12-14 19:15:58 +0100 <dolio> If polyparse uses commit, I'm not sure it will do this, either.
2020-12-14 19:16:05 +0100geekosaur(42d52137@66.213.33.55) (Remote host closed the connection)
2020-12-14 19:16:14 +0100 <sclv> dolio: i mean just never commit!
2020-12-14 19:16:27 +0100 <dolio> No, I mean, commiting isn't the problem with this example.
2020-12-14 19:16:46 +0100 <dolio> The problem is like greediness.
2020-12-14 19:16:50 +0100 <sclv> *insert hack standup comedy joke about boyfriends here*
2020-12-14 19:17:27 +0100 <sclv> i think the problem is there's multiple "right" results the parser could give (potentially one for every "allowed" length) and you only get one
2020-12-14 19:17:32 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-12-14 19:17:32 +0100 <monochrom> what, boyfriends never commit and never try?
2020-12-14 19:17:44 +0100 <dolio> Like, b* parses as many bs as possible, but this example wants it to keep track of the possibility of parsing all possible number of bs, because some of the choices might cause failures down the line.
2020-12-14 19:17:54 +0100geekosaur(42d52137@66.213.33.55)
2020-12-14 19:18:07 +0100 <monochrom> But yeah, LL(k) grammars are much preferred.
2020-12-14 19:18:07 +0100 <dolio> *Without* factoring the parser for that.
2020-12-14 19:19:15 +0100 <sclv> yeah, actually, even if you wrap everything in try it'll always locally give the wrong result without a full refactor
2020-12-14 19:19:51 +0100 <sclv> but if you have a full "list of successes" parser then it should handle that directly i think, idk?
2020-12-14 19:19:53 +0100 <dolio> To make that work in parsec you need to do stuff like `(b* >> x) <|> (b* >> y) <|> ...`, and can't factor out the `b*`.
2020-12-14 19:19:56 +0100chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-12-14 19:20:27 +0100 <dolio> I mean, that still won't work, but hopefully my idea is clear.
2020-12-14 19:20:48 +0100 <monochrom> Text.ParserCombinators.ReadP is the one that anticipates ambiguity resolution and comes with GHC.
2020-12-14 19:21:25 +0100 <monochrom> (and IIRC uses a method that mitigates expoential blow-up)
2020-12-14 19:22:10 +0100ph88_(~ph88@2a02:8109:9e00:7e5c:e5be:9ca5:5a00:b997)
2020-12-14 19:23:13 +0100 <dolio> sclv: Yeah, I guess so. I think parsec doesn't do that, though, even with try. It's assuming the grammar isn't ambiguous.
2020-12-14 19:23:27 +0100 <dolio> try/commit is a level of optimization beyond that.
2020-12-14 19:23:39 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-12-14 19:24:58 +0100[RuCTFE]tswr(~RuCTFE]ts@195.140.213.38) (Remote host closed the connection)
2020-12-14 19:25:37 +0100ph88^(~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2020-12-14 19:25:56 +0100tomku(~tomku@unaffiliated/tomku) (Ping timeout: 240 seconds)
2020-12-14 19:26:54 +0100greisean(~greisean@2607:fea8:2c40:a3::4db7)
2020-12-14 19:27:09 +0100xff0x(~fox@2001:1a81:52c8:2700:14b6:ad9d:db0c:f54b)
2020-12-14 19:28:52 +0100 <dolio> In prolog/mercury terminology, I think parsec/polyparse is inherently semidet (and any stuff that appears nondet becomes semidet by picking the first solution), while commit is like cut (discard all possible backtracking).
2020-12-14 19:29:43 +0100fresheyeball(~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.7.1)
2020-12-14 19:29:47 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2020-12-14 19:29:48 +0100 <dolio> I don't know polyparse, though, so that's based on the idea that it's just the dual operation of parsec.
2020-12-14 19:30:21 +0100nineonine(~nineonine@50.216.62.2)
2020-12-14 19:31:10 +0100 <ezzieyguywuf> lol, just tried to start `ghci` three times in a row and accidentally typed `ghcid`
2020-12-14 19:31:17 +0100 <ezzieyguywuf> guess which one I use more often 🤣
2020-12-14 19:31:33 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 19:32:38 +0100esotericn(~daniel@5.148.79.26)
2020-12-14 19:32:40 +0100tomku(~tomku@unaffiliated/tomku)
2020-12-14 19:33:14 +0100 <monochrom> Text.ParserCombinators.ReadP demo:
2020-12-14 19:33:35 +0100 <monochrom> % import qualified Text.ParserCombinators.ReadP as ReadP
2020-12-14 19:33:36 +0100 <yahb> monochrom:
2020-12-14 19:33:45 +0100 <esotericn> hello all. I'm very much a haskell noob; mainly trying to build a project I've been given within Nix. I think I'm having an issue with an incompatibility between two package versions and wondered if anyone else might have come across it before
2020-12-14 19:33:54 +0100 <ski> the committed-choice causes distributivity `( p <|> q ) >> r = ( p >> r ) <|> ( q >> r )' (or `( p ; q ),r <=> ( p,r ; q,r )' in Prolog terms, where `;' is disjunction, and `,' is (ordered) conjunction) to fail
2020-12-14 19:33:58 +0100 <monochrom> polymono = ReadP.readP_to_S (liftA2 (,) (many (ReadP.char 'a')) (ReadP.char 'a' <* ReadP.eof)
2020-12-14 19:34:01 +0100 <monochrom> err
2020-12-14 19:34:04 +0100 <monochrom> % polymono = ReadP.readP_to_S (liftA2 (,) (many (ReadP.char 'a')) (ReadP.char 'a' <* ReadP.eof)
2020-12-14 19:34:04 +0100 <yahb> monochrom: ; <interactive>:5:94: error: parse error (possibly incorrect indentation or mismatched brackets)
2020-12-14 19:34:05 +0100 <Kronic> Thanks for the tip about oneOf sclv !
2020-12-14 19:34:15 +0100 <monochrom> % polymono = ReadP.readP_to_S (liftA2 (,) (many (ReadP.char 'a')) (ReadP.char 'a' <* ReadP.eof))
2020-12-14 19:34:16 +0100 <yahb> monochrom:
2020-12-14 19:34:19 +0100 <esotericn> scotty-tls 0.4.1 with ghc-8.8.2 and warp-tls-3.3.0
2020-12-14 19:34:33 +0100 <Kronic> count 7 $ oneOf ['F', 'B'] :: Parser String
2020-12-14 19:34:33 +0100 <Kronic> -- that's that I ended up with
2020-12-14 19:34:54 +0100 <esotericn> getting Module ‘Network.Wai.Handler.WarpTLS’ does not export ‘keyFile’ which I assume is just some API incompatibility
2020-12-14 19:34:56 +0100 <Kronic> I had to figure out satisfy first though, and I basically ended up rewriting oneOf
2020-12-14 19:35:00 +0100 <monochrom> That parser says a* a $
2020-12-14 19:35:16 +0100 <monochrom> % polymono "aaaaa"
2020-12-14 19:35:17 +0100 <yahb> monochrom: [(("aaaa",'a'),"")]
2020-12-14 19:36:05 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2020-12-14 19:36:07 +0100 <monochrom> It successfully knows that 4 a's are right for the a* because internally it tries all possibilities and then kills the ones that don't work out for the final a$
2020-12-14 19:36:38 +0100 <ski> also the following fails, because of things like greediness, lookahead, check for end-of-input : if `p' can parse `s', and `q' can parse `t', then `liftA2 (,) p q' can parse `s <> t'
2020-12-14 19:37:16 +0100hseg(~gesh@IGLD-84-228-238-87.inter.net.il) (Ping timeout: 240 seconds)
2020-12-14 19:37:18 +0100ph88_(~ph88@2a02:8109:9e00:7e5c:e5be:9ca5:5a00:b997) (Quit: Leaving)
2020-12-14 19:37:40 +0100jonatan(~nate@h77-53-70-163.cust.a3fiber.se) (Quit: leaving)
2020-12-14 19:37:44 +0100 <ezzieyguywuf> how would you go about turning a `123456.67 :: Double` into a `"123,456.67" :: Data.Text`?
2020-12-14 19:38:33 +0100 <Kronic> I have to say, this the members of this IRC are exceptionally helpful. I'm half kicking myself for not joining sooner.
2020-12-14 19:38:48 +0100jonatan(~nate@h77-53-70-163.cust.a3fiber.se)
2020-12-14 19:38:57 +0100 <esotericn> heh, just checked it out and looked at the logs, 3.3.0 is the breaking change. cool, will just downgrade that
2020-12-14 19:39:10 +0100 <merijn> ezzieyguywuf: Sadly there's not really a convenient formatting function I like >.>
2020-12-14 19:39:12 +0100 <ezzieyguywuf> Kronic: +1 (I will also kick you....)
2020-12-14 19:39:21 +0100o1lo01ol_(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 19:39:26 +0100 <merijn> @quote psychic.mega
2020-12-14 19:39:26 +0100 <ezzieyguywuf> merijn: drat. guess I could roll my own pretty easily...
2020-12-14 19:39:26 +0100 <lambdabot> MyCatVerbs says: [talking about #haskell] seriously, it's like the entire planet got mutant powers and many all the people here just happened to get Psychic MegaHelpFulness.
2020-12-14 19:39:59 +0100 <ezzieyguywuf> this may be the one Killer Feature that python has over haskell then, i.e. string formatting
2020-12-14 19:39:59 +0100 <monochrom> No, I refuse to play psychic, even when I can.
2020-12-14 19:40:15 +0100 <ezzieyguywuf> 🤡
2020-12-14 19:40:19 +0100 <h1ccup> ski, are these general arguments that parsec is bad? monochrom, where does ReadP fit in to the ecosystem? i'd never looked into it assuming it was a pre-parsec relic, but looks like that's wrong?
2020-12-14 19:40:45 +0100 <merijn> ezzieyguywuf: I mean, it should be easy enough, split into whole and fractional part (I know there is a function for that), then print that
2020-12-14 19:40:51 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-14 19:40:55 +0100 <dolio> Parsec is good. Ambiguous parses are bad.
2020-12-14 19:41:06 +0100 <ski> h1ccup : i guess you could call them dissatisfactions ..
2020-12-14 19:41:10 +0100 <ezzieyguywuf> merijn: adding the commas will be the non-trivial piece I think
2020-12-14 19:41:16 +0100 <merijn> ezzieyguywuf: Clearly your new mission in life is: Implement a nice formatting function and open an issue to get it added to Numeric in GHC :p
2020-12-14 19:41:18 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 19:41:20 +0100 <sclv> most people use megaparsec for serious work or trifecta for really fancy error reporting etc
2020-12-14 19:41:27 +0100 <monochrom> These are general arguments that parsec is good. Most people design LL(k) grammars and are against the inefficiency of unconditional pervasive backtracking.
2020-12-14 19:41:28 +0100ezzieyguywufsalutes to merijn
2020-12-14 19:41:40 +0100 <sclv> readP is good because its simple and therefore purpose-built for the ghc codebase
2020-12-14 19:41:54 +0100 <merijn> ReadP is simple in implementation, maybe
2020-12-14 19:41:59 +0100 <monochrom> ReadP comes with GHC.
2020-12-14 19:42:01 +0100 <ezzieyguywuf> is Data.Text even in Prelude though....?
2020-12-14 19:42:06 +0100 <merijn> I found it *incredibly* hard to write sensible parsers with it
2020-12-14 19:42:19 +0100howdoi(uid224@gateway/web/irccloud.com/x-qbshrgqkqrzaxnce)
2020-12-14 19:42:19 +0100 <merijn> ezzieyguywuf: Naah, but once you can produce String it's a simple "T.pack" to fix that
2020-12-14 19:42:22 +0100 <sclv> yeah, i agree its not very intuitive -- its really there for "internal" use imho
2020-12-14 19:42:28 +0100hseg(~gesh@IGLD-84-228-238-87.inter.net.il)
2020-12-14 19:42:36 +0100 <monochrom> But I think I can explain why no one is aware of ReadP precisely because it comes with GHC.
2020-12-14 19:42:45 +0100 <sclv> i.e. its built to generate `read` instances for and not much else
2020-12-14 19:42:46 +0100 <ski> h1ccup : the `polyparse' docs page that got linked before briefly mentions `ReadP' at the end. (also, there's `parsek', by Koen Claessen)
2020-12-14 19:42:47 +0100 <ezzieyguywuf> for what my $0.02 is worth, I found readP helpful for learning some general broad strokes of parsing/parsers in haskell, but then moved on to megaparsec after that.
2020-12-14 19:42:55 +0100 <ezzieyguywuf> merijn: fair point.
2020-12-14 19:43:06 +0100o1lo01ol1o(~o1lo01ol1@bl8-213-81.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-12-14 19:43:10 +0100 <merijn> ezzieyguywuf: But hey, feel free to add a special optimised case to Text too! ;)
2020-12-14 19:43:11 +0100 <ezzieyguywuf> merijn: but Data.Text may have some functions that will make it easier to implement...
2020-12-14 19:43:21 +0100 <monochrom> It is along the same line as: GHC comes with a user guide and library docs installed, right on your hard disk, that's why you never knew they existed.
2020-12-14 19:43:23 +0100 <Kronic> I started with megaparsec more or less yesterday or the day before, and the megaparsec tutorial is something I've found to be very useful
2020-12-14 19:43:39 +0100 <merijn> monochrom: Pfft, why would you ever read a user guide?
2020-12-14 19:43:44 +0100knupfer(~Thunderbi@mue-88-130-61-105.dsl.tropolys.de)
2020-12-14 19:43:57 +0100 <merijn> GHC User Guide is the single most undervalued piece of Haskell documentation/writing
2020-12-14 19:43:57 +0100 <monochrom> In general, people spend lifetimes search on the web and not one single second taking a look at what they've got on their own disks.
2020-12-14 19:43:59 +0100 <ezzieyguywuf> Kronic: I found the userguide both useful and overwhelming.
2020-12-14 19:44:16 +0100 <monochrom> This is called anti-introvertism.
2020-12-14 19:44:35 +0100 <Kronic> it is certainly overwhelming. Haskell resources have a tendency to load a cannon full to absolute brim with knowledge and blast it into your face without much warning
2020-12-14 19:44:42 +0100dawiss(~dawiss@178.43.15.214.ipv4.supernova.orange.pl)
2020-12-14 19:44:49 +0100 <Kronic> I don't know how I would explain it better either though, so I'm not one to talk
2020-12-14 19:45:21 +0100 <sclv> well the users guide is built also as a reference tome for skilled people
2020-12-14 19:45:24 +0100 <geekosaur> @remember Kronic Haskell resources have a tendency to load a cannon full to absolute brim with knowledge and blast it into your face without much warning
2020-12-14 19:45:25 +0100 <lambdabot> Okay.
2020-12-14 19:45:25 +0100skihas the GHC user guide URL memorized since years ..
2020-12-14 19:45:30 +0100 <h1ccup> as far as i understood, megaparsec wouldn't differ from parsec on this backtracking issue right?
2020-12-14 19:45:35 +0100Guest90644(~botro@s91904426.blix.com)
2020-12-14 19:45:38 +0100 <xerox_> what's a nice way to go about this: (h,w) = let (_,(h1,w1)) = A.bounds area in (h1+1,w1+1)
2020-12-14 19:45:41 +0100 <sclv> no the semantics are basically the same
2020-12-14 19:45:47 +0100 <sclv> megaparsec is just really "parsec evolved"
2020-12-14 19:45:55 +0100 <ezzieyguywuf> Kronic: I know how I would explain it better - (1) provide a short, quick, "here's how it works!" type of deal, (2) add a little more info for "you'll probably need this to really get going", (3) put the rest in a link at the bottom that says "User Guide"
2020-12-14 19:46:09 +0100 <monochrom> As for purely technical merit, one could critique that ReadP doesn't come with as many helper functions as parsec or megaparsec. But this is just chicken-and-egg networking effect, no? megaparsec provides more helpers because more users talked to authors.
2020-12-14 19:46:24 +0100 <Kronic> be sure to do that when you're finished learning ezzieyguywuf :)
2020-12-14 19:46:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-12-14 19:46:26 +0100 <merijn> monochrom: Well it's also much slower and harder to reason about :p
2020-12-14 19:46:36 +0100 <ski> xerox_ : lower bounds are `(0,0)' ?
2020-12-14 19:46:38 +0100jneira(501e6453@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.100.83)
2020-12-14 19:46:40 +0100 <xerox_> ski: yup
2020-12-14 19:46:55 +0100 <ezzieyguywuf> Kronic: lol, merijn already gave me an assignment, and i'm also trying to become a gentoo developer, so dunno if I can add anything to the list :-P
2020-12-14 19:47:48 +0100 <monochrom> merijn, I think Koen Clasen has a paper that explains how ReadP's cost is already pretty decent for when you need to support ambiguity and things like a*a$
2020-12-14 19:48:01 +0100 <sclv> ((+1) *** (+1)) . snd $ A.bounds area
2020-12-14 19:48:06 +0100 <sclv> or similar
2020-12-14 19:48:14 +0100 <merijn> monochrom: Right, but then I'd argue that supporting ambiguous grammars is a misfeature :p
2020-12-14 19:48:15 +0100 <monochrom> or rather, what clever tricks they played to keep the cost decent.
2020-12-14 19:48:17 +0100 <sclv> *** is from control.arrow and its really for tuple golf only
2020-12-14 19:48:36 +0100 <sclv> the initial definition is just dandy imho for plain readability
2020-12-14 19:48:44 +0100ezzieyguywufcowers in fear of the word "arrow"...("what is it!?!?!?!?!")
2020-12-14 19:48:46 +0100 <monochrom> Yes, I still very much agree we should design LL(k) grammars in the first place.
2020-12-14 19:49:01 +0100 <ski> xerox_ : i guess i'd look for a way to do it for arbitrary bounds .. which seems hard, here
2020-12-14 19:49:03 +0100 <monochrom> But regex fans will always want a*a$ one in a while.
2020-12-14 19:49:05 +0100 <merijn> ezzieyguywuf: Good news for you!
2020-12-14 19:49:07 +0100 <xerox_> ski: yeah
2020-12-14 19:49:37 +0100 <merijn> ezzieyguywuf: Arrow is an abstraction that never took off and can be relegated to "historical curiosity" since no one is really using it anyway!
2020-12-14 19:49:43 +0100 <ski> xerox_ : how're you using `h' and `w' ?
2020-12-14 19:49:44 +0100 <ezzieyguywuf> NICE!!!!
2020-12-14 19:49:51 +0100 <merijn> And the only functions people do use, they only use the function versions of it
2020-12-14 19:49:51 +0100ezzieyguywuftips hat to merijn
2020-12-14 19:50:14 +0100 <ski> i guess `Kleisli' is occasionally used ?
2020-12-14 19:50:33 +0100 <merijn> Maybe, but even that's rare
2020-12-14 19:50:39 +0100 <ski> yes
2020-12-14 19:50:40 +0100 <merijn> Might as well just use >=>
2020-12-14 19:50:46 +0100 <xerox_> ski: why? just using them in some calculations later, where they appear as they are; I thought I'd try Array not to shuffle around (Set,Int,Int) say, I think I'll make an helper that gives me the height and width and that's it
2020-12-14 19:50:51 +0100 <monochrom> Kleisli is as occasionally used as Arrow is occasionally used.
2020-12-14 19:50:52 +0100 <ezzieyguywuf> I've sen `Kleisli` from time-to-time in documentation.
2020-12-14 19:51:09 +0100 <ski> @type runKleisli . first . Kleisli
2020-12-14 19:51:10 +0100 <lambdabot> Monad m => (b -> m c) -> (b, d) -> m (c, d)
2020-12-14 19:51:13 +0100 <Kronic> So, here's a question - if I am confident in the result of a parse application in megaparsec, is there a way I can get the data back unwrapped or must I always deal with Either/Maybe ?
2020-12-14 19:51:14 +0100 <monochrom> Because what merijn said, you can use >=> already and it just needs Monad.
2020-12-14 19:51:20 +0100 <sclv> people talk about kleisli composition even without the wrapper
2020-12-14 19:51:21 +0100 <sclv> right
2020-12-14 19:51:48 +0100 <merijn> Kronic: You always gotta deal with Either/Maybe
2020-12-14 19:51:48 +0100 <monochrom> Therefore, you use the Kleisli wrapper only because someone made you use Arrow.
2020-12-14 19:51:59 +0100 <Kronic> That's alright, I figured as much
2020-12-14 19:52:03 +0100 <Kronic> Thanks anyway :)
2020-12-14 19:52:04 +0100 <merijn> Kronic: But, otoh, "dealing with" can simply be "error and exit" like I do in my AOC code :p
2020-12-14 19:52:19 +0100 <Kronic> That's exactly what I'm going to do :)
2020-12-14 19:52:48 +0100 <ski> xerox_ : i was wondering if they were basically needed for iteration, or to fit some interface that requires them
2020-12-14 19:53:00 +0100 <ski> (or perhaps some other purpose)
2020-12-14 19:53:18 +0100 <merijn> Kronic: https://github.com/merijn/AdventOfCode2020/blob/master/Day2.hs#L23-L28 (spoilers for day 2, obviously)
2020-12-14 19:53:25 +0100 <xerox_> iteration it is, computing a path and want to stop at height/width
2020-12-14 19:53:47 +0100 <Kronic> Ah, I know how to do it -- I was just wondering if there was a nice shorthand like unsafeParse or something
2020-12-14 19:53:58 +0100Codaraxis(Codaraxis@gateway/vpn/mullvad/codaraxis) (Read error: Connection reset by peer)
2020-12-14 19:54:08 +0100 <merijn> Kronic: There's fromJust, but that's for criminals :p
2020-12-14 19:54:31 +0100 <ski> @type inRange
2020-12-14 19:54:32 +0100 <lambdabot> Ix a => (a, a) -> a -> Bool
2020-12-14 19:54:36 +0100 <ski> @type range
2020-12-14 19:54:38 +0100 <lambdabot> Ix a => (a, a) -> [a]
2020-12-14 19:55:03 +0100bitmagie(~Thunderbi@200116b806e8c6005046439d05e8bc2c.dip.versatel-1u1.de)
2020-12-14 19:55:14 +0100 <Kronic> a criminal I shall be
2020-12-14 19:55:43 +0100 <ezzieyguywuf> lol, I burned out on AOC, too many other bricks in the fire (or w/e the saying is...)
2020-12-14 19:55:43 +0100 <monochrom> You do have just cause to use fromJust in your context.
2020-12-14 19:55:49 +0100 <ski> `\(Just x) -> x' gives better error messages, if the impossible happens
2020-12-14 19:55:55 +0100geekosaur(42d52137@66.213.33.55) (Ping timeout: 245 seconds)
2020-12-14 19:55:56 +0100 <monochrom> And you would be right to use fromRight.
2020-12-14 19:56:30 +0100 <monochrom> I do think people generally overblow "OMG I have to deal with this other case???!!!"
2020-12-14 19:56:54 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2020-12-14 19:57:42 +0100 <monochrom> I gave my students a homework question "merge two sorted lists into one". I had a student asking "may I assume that the two input lists have the same length?"
2020-12-14 19:57:48 +0100 <monochrom> WHY WOULD YOU NEED IT
2020-12-14 19:58:09 +0100 <monochrom> Is it so much more work to have 2 base cases?
2020-12-14 19:58:15 +0100 <tomjaguarpaw> If you say "yes" you may find out :)
2020-12-14 19:58:55 +0100 <Kronic> in which language monochrom ?
2020-12-14 19:58:59 +0100 <monochrom> Haskell
2020-12-14 19:59:07 +0100 <Kronic> Oh okay. No idea lmao
2020-12-14 19:59:15 +0100 <monochrom> Even in asm it is not that bad.
2020-12-14 19:59:17 +0100 <dolio> Yes, they're both infinitely long.
2020-12-14 20:01:51 +0100Codaraxis(~Codaraxis@ip68-5-90-227.oc.oc.cox.net)
2020-12-14 20:03:24 +0100berberman(~berberman@unaffiliated/berberman)
2020-12-14 20:03:55 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
2020-12-14 20:04:14 +0100berberman_(~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
2020-12-14 20:04:56 +0100 <kuribas> is there a shorter way for (liftA2 (<*>) (pure e1) e2)?
2020-12-14 20:05:08 +0100 <merijn> kuribas: Compose? :)
2020-12-14 20:05:11 +0100 <kuribas> or (liftA2 (<*>) e1 (pure e2)?
2020-12-14 20:05:18 +0100 <monochrom> I would be OK with a 1st-year absolute beginner asking that. But this is a 3rd-year course.
2020-12-14 20:05:24 +0100 <kuribas> merijn: ?
2020-12-14 20:05:52 +0100 <monochrom> You are getting a glimpse of what kind of programmers you will get in the future writing code that means life and death to you.
2020-12-14 20:05:54 +0100 <merijn> kuribas: Well, not shorter but you can probably jimmy the context to get it helpful: "getCompose $ pure e1 <*> Compose e2"
2020-12-14 20:06:00 +0100 <kuribas> :t \e1 e2 -> liftA2 (<*>) (pure e1) e2
2020-12-14 20:06:02 +0100 <lambdabot> (Applicative f1, Applicative f2) => f2 (a -> b) -> f1 (f2 a) -> f1 (f2 b)
2020-12-14 20:06:03 +0100 <merijn> :t Data.Functor.Compose.Compose
2020-12-14 20:06:05 +0100 <lambdabot> forall k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1). f (g a) -> Data.Functor.Compose.Compose f g a
2020-12-14 20:06:19 +0100 <kuribas> :t \e1 e2 -> getCompose $ pure e1 <*> Compose e2
2020-12-14 20:06:21 +0100 <lambdabot> error:
2020-12-14 20:06:21 +0100 <lambdabot> Variable not in scope: getCompose :: f0 b -> t1
2020-12-14 20:06:30 +0100 <monochrom> If there is one small corner case, taking just one line of trivial code to deal with, such that omitting it means death to you, including it means saving your life.
2020-12-14 20:06:37 +0100 <kuribas> merijn: that's not shorter :)
2020-12-14 20:06:39 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Remote host closed the connection)
2020-12-14 20:06:41 +0100 <monochrom> You can bet that this programmer would rather you die.
2020-12-14 20:06:59 +0100 <merijn> kuribas: Like I said, it depends on context. If you need to do it a lot you can pre-wrap with Compose to clean things up
2020-12-14 20:07:00 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: Lost terminal)
2020-12-14 20:07:02 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2020-12-14 20:07:12 +0100DTZUZU(~DTZUZU@205.ip-149-56-132.net) (Remote host closed the connection)
2020-12-14 20:07:16 +0100 <kuribas> merijn: I was wondering if it would reduce to fmap....
2020-12-14 20:07:22 +0100DTZUZU(~DTZUZU@205.ip-149-56-132.net)
2020-12-14 20:07:28 +0100 <kuribas> I guess not...
2020-12-14 20:07:38 +0100Codaraxis_(~Codaraxis@91.193.4.10)
2020-12-14 20:08:12 +0100 <merijn> oh, wait
2020-12-14 20:08:26 +0100 <merijn> kuribas: Isn't that just "fmap (fmap e)"
2020-12-14 20:08:41 +0100christo(~chris@81.96.113.213)
2020-12-14 20:08:42 +0100 <merijn> or "fmap e1 <$> e2"
2020-12-14 20:08:49 +0100 <merijn> That's shorter at least! :>
2020-12-14 20:09:01 +0100jaykru(~user@unaffiliated/jaykru)
2020-12-14 20:10:05 +0100 <kuribas> hmm, it might...
2020-12-14 20:10:45 +0100 <jaykru> starting to play with parsec. i'm trying to parse strings like "0101010101". the parser I have now is `many1 $ oneOf "01"`, but this skips leading zeros for some reason I don't understand. Any tips?
2020-12-14 20:10:57 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 20:11:25 +0100 <kuribas> merijn: right, that works :) And the second?
2020-12-14 20:11:41 +0100Codaraxis(~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 265 seconds)
2020-12-14 20:11:56 +0100geekosaur(42d52137@66.213.33.55)
2020-12-14 20:13:39 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-14 20:13:50 +0100 <kuribas> :t \e1 e2 -> fmap e1 <$> e2
2020-12-14 20:13:52 +0100 <lambdabot> (Functor f1, Functor f2) => (a -> b) -> f1 (f2 a) -> f1 (f2 b)
2020-12-14 20:14:18 +0100 <kuribas> :t \e1 e2 -> liftA2 (<*>) (pure e1) e2
2020-12-14 20:14:20 +0100 <lambdabot> (Applicative f1, Applicative f2) => f2 (a -> b) -> f1 (f2 a) -> f1 (f2 b)
2020-12-14 20:14:46 +0100 <kuribas> no, types are different
2020-12-14 20:14:57 +0100 <ski> @type \e0 e1 -> (e0 <*>) <$> e1
2020-12-14 20:14:59 +0100 <lambdabot> (Applicative f1, Functor f2) => f1 (a -> b) -> f2 (f1 a) -> f2 (f1 b)
2020-12-14 20:15:05 +0100 <ski> @type \e0 e1 -> e0 <&> (<*> e1)
2020-12-14 20:15:07 +0100 <lambdabot> (Applicative f1, Functor f2) => f2 (f1 (a -> b)) -> f1 a -> f2 (f1 b)
2020-12-14 20:15:20 +0100 <ski> @type \e0 e1 -> liftA2 (<*>) (pure e0) e1
2020-12-14 20:15:22 +0100 <lambdabot> (Applicative f1, Applicative f2) => f2 (a -> b) -> f1 (f2 a) -> f1 (f2 b)
2020-12-14 20:15:28 +0100 <ski> @type \e0 e1 -> liftA2 (<*>) e0 (pure e1)
2020-12-14 20:15:30 +0100 <lambdabot> (Applicative f1, Applicative f2) => f1 (f2 (a -> b)) -> f2 a -> f1 (f2 b)
2020-12-14 20:15:47 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 20:16:08 +0100 <kuribas> that's shorter but not much cleaner...
2020-12-14 20:16:13 +0100 <kuribas> I guess the core is the same?
2020-12-14 20:16:23 +0100 <ski> liftA2 f (pure x) i = fmap (f x) i
2020-12-14 20:16:37 +0100 <ski> liftA2 f i (pure x) = fmap (flip f x) i
2020-12-14 20:16:50 +0100avdb(~avdb@213.177.155.250)
2020-12-14 20:17:31 +0100 <ski> kuribas : not sure what you're asking about
2020-12-14 20:17:32 +0100jaykru(~user@unaffiliated/jaykru) (Ping timeout: 260 seconds)
2020-12-14 20:17:46 +0100 <kuribas> if the compiled code is the same?
2020-12-14 20:18:02 +0100 <kuribas> only after inlining I suppose...
2020-12-14 20:18:58 +0100zantyr(~zantyr@188.147.96.252.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 272 seconds)
2020-12-14 20:19:00 +0100jaykru(~user@unaffiliated/jaykru)
2020-12-14 20:19:07 +0100conal(~conal@64.71.133.70)
2020-12-14 20:19:19 +0100 <ski> jaykru : i think you don't want `oneOf'
2020-12-14 20:19:46 +0100brodie_(~brodie@207.53.253.137)
2020-12-14 20:20:15 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 20:20:56 +0100o1lo01ol_(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
2020-12-14 20:22:59 +0100 <Kronic> monochrom I know people who graduated with a masters who couldn't solve fizzbuzz in any language if you gave them an hour
2020-12-14 20:23:13 +0100raichoo(~raichoo@dslb-188-101-184-012.188.101.pools.vodafone-ip.de) (Quit: Lost terminal)
2020-12-14 20:23:18 +0100 <Kronic> It's great that you are teaching people Haskell though, it gives me hope :)
2020-12-14 20:23:44 +0100 <tomsmeding> monochrom: in that example assuming equal length doesn't even let you leave out a base case
2020-12-14 20:23:55 +0100 <tomsmeding> probably stemmed from a misunderstanding about what the assignment was
2020-12-14 20:24:05 +0100zantyr(~zantyr@188.147.96.252.nat.umts.dynamic.t-mobile.pl)
2020-12-14 20:24:27 +0100 <ezzieyguywuf> hrm, how can i `[Either a b] -> Either a [b]`, or is this non-sensical?
2020-12-14 20:24:47 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5) (Ping timeout: 260 seconds)
2020-12-14 20:25:08 +0100 <sclv> nonsensical
2020-12-14 20:25:17 +0100 <joel135> [Left a1, Left a2] -> ??
2020-12-14 20:25:17 +0100 <jaykru> ski: I tried replaceing `oneOf "01"` with `satisfy (\x -> x == '0' || x == '1')` and get the same behavior where it skips the first 0
2020-12-14 20:25:21 +0100 <ski> @type sequence :: [Either a b] -> Either a [b]
2020-12-14 20:25:22 +0100 <sclv> or wait, actually, you can write it
2020-12-14 20:25:23 +0100 <lambdabot> [Either a b] -> Either a [b]
2020-12-14 20:25:26 +0100Tario(~Tario@201.192.165.173)
2020-12-14 20:25:29 +0100 <sclv> lol there it is
2020-12-14 20:25:37 +0100 <ezzieyguywuf> ski: 😮
2020-12-14 20:25:44 +0100 <geekosaur> you can write it,, I figured it was sequence, but your question is still valid
2020-12-14 20:25:45 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net)
2020-12-14 20:25:56 +0100 <sclv> its a good exercise to think through logically what it _must_ do
2020-12-14 20:26:07 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145) (Quit: Connection closed)
2020-12-14 20:26:12 +0100 <ski> @type partitionEithers
2020-12-14 20:26:13 +0100 <lambdabot> [Either a b] -> ([a], [b])
2020-12-14 20:26:14 +0100 <ezzieyguywuf> sclv: working through that now...
2020-12-14 20:26:22 +0100 <ezzieyguywuf> ski: I've used partitionEithers!
2020-12-14 20:26:28 +0100 <sclv> there's actually a lot of things it can do, you should think about which ones would make the most sense
2020-12-14 20:26:53 +0100 <sclv> i.e. what sequence does may _not_ be what you want
2020-12-14 20:27:19 +0100 <merijn> ezzieyguywuf: Even better yet, there is also Validation which aggregates errors, rather than returning the first
2020-12-14 20:27:29 +0100 <merijn> But Validation is Applicative only
2020-12-14 20:27:49 +0100 <jle`> yeah, we can have Monoid a => [Either a b] -> Either a [b]
2020-12-14 20:27:54 +0100 <sclv> all you know is if there's no `a` it can only give you back the `b`s -- but even then it may not give you all of them
2020-12-14 20:28:13 +0100 <ezzieyguywuf> merijn: first I've heard of Validation, that's nice!
2020-12-14 20:28:20 +0100jmchael(~jmchael@87.112.60.168)
2020-12-14 20:28:21 +0100 <ezzieyguywuf> for right now I just want to bail out on the first error.
2020-12-14 20:28:36 +0100tomku(~tomku@unaffiliated/tomku) (Ping timeout: 256 seconds)
2020-12-14 20:28:37 +0100 <sclv> yeah, then sequence works -- its just treating Either like an error monad
2020-12-14 20:28:41 +0100 <ezzieyguywuf> indeed.
2020-12-14 20:28:51 +0100 <geekosaur> or sequenceA for that matter
2020-12-14 20:28:52 +0100 <sclv> also a good exercise to write it by hand
2020-12-14 20:28:56 +0100 <ski> jaykru : it sounds like you don't want to accept either `0' or `1' there, but rather a sequence starting with `0', followed by `1'
2020-12-14 20:28:56 +0100ystael(~ystael@209.6.50.55) (Quit: Lost terminal)
2020-12-14 20:29:08 +0100 <jle`> sequence should also guarantee that the list in the Right is of the same length as the input list
2020-12-14 20:29:14 +0100 <merijn> @hackage either -- ezzieyguywuf It's in this package
2020-12-14 20:29:14 +0100 <lambdabot> https://hackage.haskell.org/package/either -- ezzieyguywuf It's in this package
2020-12-14 20:29:17 +0100 <jle`> which constraints the behavior significantly
2020-12-14 20:29:30 +0100 <jle`> otherwise you could just use `const (Right [])`
2020-12-14 20:29:31 +0100 <ski> too bad `Validation' isn't in lambdabot ..
2020-12-14 20:29:41 +0100 <jle`> it's in 'transformers'
2020-12-14 20:29:51 +0100 <jle`> under a different name
2020-12-14 20:30:05 +0100 <jle`> > import Control.Applicative.Lift
2020-12-14 20:30:07 +0100 <lambdabot> <hint>:1:1: error: <hint>:1:1: error: parse error on input ‘import’
2020-12-14 20:30:14 +0100 <ski> @let import Control.Applicative.Lift
2020-12-14 20:30:16 +0100 <lambdabot> Defined.
2020-12-14 20:30:56 +0100p-core(~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
2020-12-14 20:31:02 +0100brodie_(~brodie@207.53.253.137) (Quit: brodie_)
2020-12-14 20:31:22 +0100 <jle`> > runErrors . traverse eitherToErrors $ [Left "hi", Right 10, Left "ok", Right 12]
2020-12-14 20:31:25 +0100 <lambdabot> Left "hiok"
2020-12-14 20:31:35 +0100 <jle`> > runErrors . traverse eitherToErrors $ [Right 10, Right 12]
2020-12-14 20:31:38 +0100 <lambdabot> Right [10,12]
2020-12-14 20:32:51 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:d49:4176:8f36:b5d5)
2020-12-14 20:33:36 +0100jaan(~jaan@139-144-191-90.dyn.estpak.ee)
2020-12-14 20:33:52 +0100 <ski> that's using `Semigroup' ?
2020-12-14 20:34:00 +0100jaanaramend
2020-12-14 20:34:09 +0100 <ezzieyguywuf> I always get confused between transformers and mtl...
2020-12-14 20:34:18 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-14 20:34:23 +0100 <jaykru> ski: what I'm looking for is basically (0|1)+ if you're familiar with regexp; i don't see why the parser I came up with doesn't work :P
2020-12-14 20:34:44 +0100 <jaykru> i don't see why i should need to special-case a leading zero
2020-12-14 20:34:51 +0100 <monochrom> What is the type of oneOf again?
2020-12-14 20:35:13 +0100tomku(~tomku@unaffiliated/tomku)
2020-12-14 20:35:16 +0100 <monochrom> Ah OK found it.
2020-12-14 20:35:43 +0100 <jaykru> oneOf :: Stream s m Char => [Char] -> ParsecT s u m Char
2020-12-14 20:36:08 +0100 <jle`> 🎿 i think it requires Monoid
2020-12-14 20:36:33 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Remote host closed the connection)
2020-12-14 20:36:35 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 20:36:37 +0100 <xerox_> what is that lil drawing
2020-12-14 20:36:40 +0100 <jle`> based on the Applicative instance for Const
2020-12-14 20:36:42 +0100 <jle`> xerox_: it's a ski
2020-12-14 20:36:46 +0100 <jaykru> i tried unfolding oneOf into satisfy and a predicate describing the characters I want to match, but that didn't really help matters. It seems like many1 is the source of the problem
2020-12-14 20:36:52 +0100fendor(~fendor@178.165.129.207.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-14 20:37:01 +0100 <ski> > (left NE.toList . runErrors . traverse (eitherToErrors . left NE.fromList)) [Left "hi",Right 10,Left "ok",Right 12]
2020-12-14 20:37:03 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net) (Remote host closed the connection)
2020-12-14 20:37:04 +0100 <lambdabot> error:
2020-12-14 20:37:04 +0100 <lambdabot> • Could not deduce (Monoid (NE.NonEmpty Char))
2020-12-14 20:37:04 +0100 <lambdabot> arising from a use of ‘traverse’
2020-12-14 20:37:08 +0100 <xerox_> jle`: xD
2020-12-14 20:37:10 +0100 <jle`> :'(
2020-12-14 20:37:13 +0100fendor(~fendor@178.165.129.207.wireless.dyn.drei.com)
2020-12-14 20:37:18 +0100 <ezzieyguywuf> why does hlint think there's a parse error on line 4? https://dpaste.com/HDLQJVVQD
2020-12-14 20:37:20 +0100 <jle`> xerox_: yeah my client has an emoji autosubstitution
2020-12-14 20:37:41 +0100avdb(~avdb@213.177.155.250) (Quit: WeeChat 2.9)
2020-12-14 20:37:41 +0100Benett(~Benett@unaffiliated/benett) (Remote host closed the connection)
2020-12-14 20:37:47 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-12-14 20:38:03 +0100avdb(~avdb@213.177.155.250)
2020-12-14 20:38:05 +0100 <ski> jaykru : if you're wanting to express `(0|1)+', then i don't see why you have a problem with it accepting leading zeros
2020-12-14 20:38:16 +0100 <jle`> 🎿 the instance should be Apply f => Applicative (Lift f)
2020-12-14 20:38:18 +0100h1ccup(47ee2144@gateway/web/cgi-irc/kiwiirc.com/ip.71.238.33.68) (Quit: Connection closed)
2020-12-14 20:38:22 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-12-14 20:38:22 +0100 <tomsmeding> good client
2020-12-14 20:38:25 +0100 <jaykru> I /want/ it to accept leading zeroes
2020-12-14 20:38:29 +0100 <jle`> but Apply is not available
2020-12-14 20:38:31 +0100 <jaykru> currently it doesn't parse the leading 0
2020-12-14 20:38:34 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net)
2020-12-14 20:38:41 +0100 <ski> jle` : too bad :(
2020-12-14 20:39:05 +0100 <jaykru> `parse ... "010101"` gives me "10101"
2020-12-14 20:39:19 +0100merijnpresses X to doubt
2020-12-14 20:39:32 +0100 <merijn> Full code, input and results in a pastebin or I don't believe it :)
2020-12-14 20:39:45 +0100 <jaykru> ok gimme a sec :)
2020-12-14 20:39:58 +0100 <merijn> I'm 95% sure you're messing *something* else up if that's what happens
2020-12-14 20:40:04 +0100pavonia(~user@unaffiliated/siracusa)
2020-12-14 20:40:11 +0100 <merijn> Like, converting to a number and printing that
2020-12-14 20:40:12 +0100 <sm> jaykru: your parser is good, and will work if you test it by itself. Maybe a previous parser is consuming the 0s ?
2020-12-14 20:40:24 +0100 <merijn> Or, indeed, preceding parsers
2020-12-14 20:40:25 +0100Deide(~Deide@217.155.19.23)
2020-12-14 20:40:35 +0100avdb(~avdb@213.177.155.250) (Client Quit)
2020-12-14 20:40:35 +0100conal(~conal@64.71.133.70)
2020-12-14 20:40:47 +0100 <sm> (and if you see me repeat this in a minute, apologies, the matrix bridge is having trouble :()
2020-12-14 20:40:56 +0100kupi(uid212005@gateway/web/irccloud.com/x-ukhucmkqxxkluaif) (Quit: Connection closed for inactivity)
2020-12-14 20:41:05 +0100avdb(~avdb@213.177.155.250)
2020-12-14 20:41:47 +0100 <jle`> if at first you don't succeed, `try` and `try` again
2020-12-14 20:41:52 +0100 <ski> jle` : i see. makes sense, making a free `Applicative' from an `Apply'
2020-12-14 20:42:15 +0100 <jle`> yeah, that's the spirit of it, at least. the same way you have Semigroup m => Monoid (Maybe m)
2020-12-14 20:42:16 +0100Benett(~Benett@unaffiliated/benett)
2020-12-14 20:42:23 +0100skinods
2020-12-14 20:42:33 +0100 <jle`> i feel like this is something that should be in functor-combinators
2020-12-14 20:42:47 +0100 <jle`> i have `MaybeF` which is an identical type but the behavior is different
2020-12-14 20:42:48 +0100ubert(~Thunderbi@p200300ecdf351475e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2020-12-14 20:43:04 +0100 <jaykru> Yeah, so it seems the bitstring parser does work in isolation, not seeing why this eats the 0 though https://pastebin.com/raw/ztQHwiwP
2020-12-14 20:43:38 +0100 <geekosaur> read ieats it
2020-12-14 20:43:56 +0100 <geekosaur> there's nowhere for leading zeros to be stored in the numeric representation of the string
2020-12-14 20:44:00 +0100 <ski> i was thinking `sequence' on `Validation'/`Errors' ought to be able to give a `Data.List.NonEmpty' in the exceptional case, since there's always at least one
2020-12-14 20:44:00 +0100 <jaykru> oh wow
2020-12-14 20:44:12 +0100 <merijn> Called it
2020-12-14 20:44:14 +0100 <jaykru> thank!
2020-12-14 20:44:25 +0100 <jaykru> yes, yes, congrats
2020-12-14 20:44:26 +0100 <merijn> Bow to my psychic powers :p
2020-12-14 20:44:41 +0100 <jle`> ski : it does for Validation itself
2020-12-14 20:44:45 +0100 <jle`> from the validation library
2020-12-14 20:44:53 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2020-12-14 20:45:12 +0100joel135bows and arrows
2020-12-14 20:45:20 +0100skiagain thinks `void' ought to be banished from `Data.Functor',`Control.Monad'
2020-12-14 20:45:26 +0100 <ski> jle` : hm, i see
2020-12-14 20:46:26 +0100 <jle`> hm, i wonder why `MaybeF` even exists in functor-combinators
2020-12-14 20:46:34 +0100 <jle`> it looks like the goal is to get a free Alternative instance
2020-12-14 20:46:52 +0100jaykruasks ski what's a better alternative to using void for throwing away intermediate monadic computations
2020-12-14 20:46:53 +0100 <jle`> maybe i could kill it and make a proper Lift instead
2020-12-14 20:47:07 +0100jaykruis only visiting Haskell-land from Coq-world
2020-12-14 20:48:11 +0100 <jle`> 🎿 ah hah, i found it
2020-12-14 20:48:12 +0100 <jle`> https://hackage.haskell.org/package/semigroupoids-5.3.4/docs/Data-Functor-Apply.html#t:MaybeApply
2020-12-14 20:48:19 +0100 <jle`> also MaybeF was the wrong type
2020-12-14 20:48:33 +0100 <tomsmeding> jle`: _ <-
2020-12-14 20:48:48 +0100 <tomsmeding> sorry, wrong mention! jaykru: _ <-
2020-12-14 20:49:00 +0100 <tomsmeding> there was a blog post about that a while ago
2020-12-14 20:49:00 +0100 <jaykru> yeah, but why is this better than void?
2020-12-14 20:49:04 +0100 <kuribas> :t (() *>)
2020-12-14 20:49:06 +0100 <lambdabot> error:
2020-12-14 20:49:06 +0100 <lambdabot> • Couldn't match expected type ‘f a0’ with actual type ‘()’
2020-12-14 20:49:06 +0100 <lambdabot> • In the first argument of ‘(*>)’, namely ‘()’
2020-12-14 20:49:12 +0100 <kuribas> :t (() <*)
2020-12-14 20:49:13 +0100 <jaykru> perhaps more clear to people already familiar with do notation
2020-12-14 20:49:13 +0100ski. o O ( <shapr> I'm addicted to arrows. * shapr begins his own paper "Generalizing Arrows to Spears" <shapr> Spears can do anything efficiently, but they have sixty thousand laws they must satisfy, and we haven't actually found one yet. <raphael> maybe "Generalizing Arrows to Nuclear Weapons" would simply be: unsafeInterleaveIO )
2020-12-14 20:49:14 +0100 <lambdabot> error:
2020-12-14 20:49:14 +0100 <lambdabot> • Couldn't match expected type ‘f a’ with actual type ‘()’
2020-12-14 20:49:14 +0100 <lambdabot> • In the first argument of ‘(<*)’, namely ‘()’
2020-12-14 20:49:22 +0100 <jle`> () <$
2020-12-14 20:49:51 +0100 <kuribas> :t (() <$)
2020-12-14 20:49:51 +0100 <ski> jaykru : rename it to `ignore' or something like that, or the other two suggestions
2020-12-14 20:49:53 +0100 <lambdabot> Functor f => f b -> f ()
2020-12-14 20:50:28 +0100 <joel135> Isn't void just redundant in a 'do' block?
2020-12-14 20:50:34 +0100 <monochrom> Yes.
2020-12-14 20:50:42 +0100 <justsomeguy> Is there a widely agreed on way to handle non-unique record field accessor functions?
2020-12-14 20:50:43 +0100 <monochrom> But some people are religious about -Wall
2020-12-14 20:50:47 +0100 <ski> imho `void :: Functor f => f a -> f ()' has no business being in base modules, outside of FFI
2020-12-14 20:50:48 +0100 <monochrom> YES IT'S A RELIGION
2020-12-14 20:51:01 +0100 <joel135> ok
2020-12-14 20:51:13 +0100 <merijn> monochrom: I'm religious about -Wall, but also religious about -Wno-unused-do-binds :p
2020-12-14 20:51:18 +0100fendor(~fendor@178.165.129.207.wireless.dyn.drei.com) (Remote host closed the connection)
2020-12-14 20:51:23 +0100 <tomsmeding> jaykru: https://tech.freckle.com/2020/09/23/void-is-a-smell/
2020-12-14 20:51:27 +0100 <monochrom> I agree with your religion :)
2020-12-14 20:51:51 +0100 <ski> jaykru : the name `void' here comes from `void' in C, not a Haskell concept. `void' would, however, be a natural alias for `absurd :: Void -> a'
2020-12-14 20:51:55 +0100 <kuribas> count me a member too
2020-12-14 20:52:06 +0100greisean(~greisean@2607:fea8:2c40:a3::4db7) (Quit: greisean)
2020-12-14 20:52:09 +0100 <jle`> now if only there was an easy to use api for MaybeApply
2020-12-14 20:52:13 +0100 <adamCS> Huh. Trying OverloadedLabels for the first time (via Optics) and it's...weird that even when you import a module qualified, the labels are not qualified since they come from class instances. It makes sense and still seems wrong somehow. I guess I'll get over it?
2020-12-14 20:53:13 +0100 <jle`> > (traverse (MaybeApply . left (Const . NE.fromList))) [Left "hi",Right 10,Left "ok",Right 12]
2020-12-14 20:53:15 +0100 <lambdabot> error:
2020-12-14 20:53:15 +0100 <lambdabot> Data constructor not in scope:
2020-12-14 20:53:15 +0100 <lambdabot> MaybeApply :: Either (Const (NE.NonEmpty Char) b0) b1 -> f b
2020-12-14 20:53:24 +0100 <jle`> @let import Data.Functor.Apply
2020-12-14 20:53:25 +0100 <lambdabot> Defined.
2020-12-14 20:53:27 +0100 <jle`> > (traverse (MaybeApply . left (Const . NE.fromList))) [Left "hi",Right 10,Left "ok",Right 12]
2020-12-14 20:53:29 +0100 <lambdabot> error:
2020-12-14 20:53:29 +0100 <lambdabot> • No instance for (Show
2020-12-14 20:53:29 +0100 <lambdabot> (MaybeApply (Const (NE.NonEmpty Char)) [Integer]))
2020-12-14 20:53:30 +0100 <monochrom> qualify the module that gave you the class.
2020-12-14 20:54:03 +0100 <jle`> > left getConst . runMaybeApply $ (traverse (MaybeApply . left (Const . NE.fromList))) [Left "hi",Right 10,Left "ok",Right 12]
2020-12-14 20:54:06 +0100 <lambdabot> Left ('h' :| "iok")
2020-12-14 20:54:10 +0100 <jle`> ^ ski
2020-12-14 20:54:12 +0100 <ski> jaykru : you can note that val ignore : 'a -> unit is a standard function in both SML and OCaml
2020-12-14 20:54:42 +0100 <tomsmeding> jaykru: though that blog post doesn't actually say anything against the use of 'void' specifically; '_ <-' would have the exact same argument
2020-12-14 20:54:48 +0100 <tomsmeding> I misremembered what the post was about apparently
2020-12-14 20:54:53 +0100 <dminuoso> adamCS: Right, it's just because of how OverloadedLabels works.
2020-12-14 20:55:04 +0100 <monochrom> If multiple modules re-export that class and you're importing them all, then qualify them all.
2020-12-14 20:55:08 +0100 <jaykru> I guess the moral is just do none of this stuff when using do-notation
2020-12-14 20:55:24 +0100p3n(~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Quit: ZNC 1.8.2 - https://znc.in)
2020-12-14 20:57:02 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 20:57:24 +0100 <ski> jle` : ah, cool :)
2020-12-14 20:57:44 +0100 <adamCS> dminuoso: Yeah. It's just disconcerting since they act like field selectors. monochrom, how? The class is from the magic of OverloadedLabels, right? What would I qualify?
2020-12-14 20:58:01 +0100 <monochrom> tomsmeding: I think the blog's message is "We’re trained to follow GHC’s guidance somewhat blindly"
2020-12-14 20:58:01 +0100conal(~conal@64.71.133.70) (Read error: Connection reset by peer)
2020-12-14 20:58:14 +0100 <tomsmeding> I think so too
2020-12-14 20:58:15 +0100greisean(~greisean@2607:fea8:2c40:a3::4db7)
2020-12-14 20:58:18 +0100 <idnar> -Wunused-do-bind seems pretty useful
2020-12-14 20:58:47 +0100zantyr(~zantyr@188.147.96.252.nat.umts.dynamic.t-mobile.pl) (Quit: Lost terminal)
2020-12-14 20:59:08 +0100 <tomsmeding> it is, except in parsers sometimes
2020-12-14 20:59:15 +0100skiidly glances at people somewhat blindly following `hlint's suggestions
2020-12-14 20:59:32 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 260 seconds)
2020-12-14 21:00:02 +0100 <merijn> idnar: How so?
2020-12-14 21:00:11 +0100 <idnar> but it's not the only use for void, I've sometimes written `if x then void a else void b` or so
2020-12-14 21:00:12 +0100 <monochrom> adamCS: Ah OK then I am toasted.
2020-12-14 21:00:30 +0100 <adamCS> dimuouso: I guess I need to embrace more deeply the idea that "#foo" means "get me the labeled-as-foo part of anything with a foo-part that has been correctly instanced." and then the qualification sensibly sits on the thing the label acts on.
2020-12-14 21:00:39 +0100 <adamCS> dminuoso: ^
2020-12-14 21:01:29 +0100 <merijn> idnar: I mean, the number of times "I should've bound something to a variable and used it, but forgot" is vanishingly small
2020-12-14 21:01:35 +0100 <monochrom> #foo is syntax sugar for fromLabel @"foo" (I'm just reading it off the GHC user guide)
2020-12-14 21:01:49 +0100jaykru(~user@unaffiliated/jaykru) (Remote host closed the connection)
2020-12-14 21:01:54 +0100 <monochrom> I think syntax sugar can be helped as much as do-notation can be helped.
2020-12-14 21:02:06 +0100jaykru(~user@unaffiliated/jaykru)
2020-12-14 21:02:54 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-12-14 21:03:08 +0100cvlad-(sid203065@gateway/web/irccloud.com/x-kgwwtdcwktijsmay) (Ping timeout: 246 seconds)
2020-12-14 21:03:12 +0100 <adamCS> monochrom: Yeah. Just surprising at first. I'll have to see how it settles in the brain.
2020-12-14 21:03:19 +0100wpcarro_(sid397589@gateway/web/irccloud.com/x-uilyvixlkpnvjftn) (Ping timeout: 260 seconds)
2020-12-14 21:03:25 +0100conal(~conal@64.71.133.70)
2020-12-14 21:03:29 +0100 <ski> idnar : discounting `void (if x then a else b)' ?
2020-12-14 21:03:30 +0100alanz(sid110616@gateway/web/irccloud.com/x-enbknkhtbzmhwhvg) (Ping timeout: 258 seconds)
2020-12-14 21:03:30 +0100aristid(sid1599@gateway/web/irccloud.com/x-yiksygoupevldqqs) (Ping timeout: 258 seconds)
2020-12-14 21:03:33 +0100 <idnar> merijn: usually the mistake for me is "I forgot to use the result"
2020-12-14 21:03:39 +0100d0liver(sid363046@gateway/web/irccloud.com/x-klrkxlxkdtrlbbwl) (Ping timeout: 264 seconds)
2020-12-14 21:03:41 +0100loller_(uid358106@gateway/web/irccloud.com/x-uvkkhmtclnplmhkh) (Read error: Connection reset by peer)
2020-12-14 21:03:41 +0100jared-w(uid405292@gateway/web/irccloud.com/x-ipmzhtzxqfarjsqt) (Read error: Connection reset by peer)
2020-12-14 21:03:41 +0100natim87(sid286962@gateway/web/irccloud.com/x-ncrxsokgqnkrgrgf) (Read error: Connection reset by peer)
2020-12-14 21:03:41 +0100joshmeredith(sid387798@gateway/web/irccloud.com/x-asdwgzewpjdjmslj) (Read error: Connection reset by peer)
2020-12-14 21:03:41 +0100lally(sid388228@gateway/web/irccloud.com/x-bnjavsttoxuogooa) (Read error: Connection reset by peer)
2020-12-14 21:03:41 +0100cemerick(sid54985@gateway/web/irccloud.com/x-bubkwfmgbakwqyik) (Read error: Connection reset by peer)
2020-12-14 21:03:47 +0100benwr____(sid372383@gateway/web/irccloud.com/x-xypphoshdxsnierw) (Write error: Connection reset by peer)
2020-12-14 21:03:48 +0100systemfault(sid267009@gateway/web/irccloud.com/x-gzvcgufgrbzhytha) (Read error: Connection reset by peer)
2020-12-14 21:03:49 +0100davetapley(sid666@gateway/web/irccloud.com/x-xjppgfjbvjpedrys) (Read error: Connection reset by peer)
2020-12-14 21:03:49 +0100SrPx(sid108780@gateway/web/irccloud.com/x-xegzulneumbuiqbu) (Read error: Connection reset by peer)
2020-12-14 21:03:49 +0100eruditass(uid248673@gateway/web/irccloud.com/x-bonpdgcxjhnmearr) (Read error: Connection reset by peer)
2020-12-14 21:03:51 +0100AndreasK(uid320732@gateway/web/irccloud.com/x-frmbvilzwwwmnfhv) (Read error: Connection reset by peer)
2020-12-14 21:03:53 +0100liquorice(sid267884@gateway/web/irccloud.com/x-tddcmkucbvdtyubo) (Ping timeout: 260 seconds)
2020-12-14 21:03:53 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 265 seconds)
2020-12-14 21:04:01 +0100alanz(sid110616@gateway/web/irccloud.com/x-rrsfkppqcemgwtjf)
2020-12-14 21:04:01 +0100aristid(sid1599@gateway/web/irccloud.com/x-araifyjxsevgfmuf)
2020-12-14 21:04:02 +0100joshmeredith(sid387798@gateway/web/irccloud.com/x-wfbaanpqgsgsrife)
2020-12-14 21:04:02 +0100jared-w(uid405292@gateway/web/irccloud.com/x-rydbvdzocyurwpmv)
2020-12-14 21:04:02 +0100cemerick(sid54985@gateway/web/irccloud.com/x-ixdpfuwpprqysidz)
2020-12-14 21:04:02 +0100natim87(sid286962@gateway/web/irccloud.com/x-ubcfknudcwgbcyoh)
2020-12-14 21:04:02 +0100ski. o O ( "It's dead, Jim." )
2020-12-14 21:04:04 +0100lally(sid388228@gateway/web/irccloud.com/x-udblkappiwdfbwqx)
2020-12-14 21:04:06 +0100benwr____(sid372383@gateway/web/irccloud.com/x-yhpqlbemzbtsvkdw)
2020-12-14 21:04:08 +0100wpcarro_(sid397589@gateway/web/irccloud.com/x-aweknydjzbeukkit)
2020-12-14 21:04:11 +0100systemfault(sid267009@gateway/web/irccloud.com/x-dkcecvusgryhzeno)
2020-12-14 21:04:11 +0100d0liver(sid363046@gateway/web/irccloud.com/x-qxjdqmetdorukkyz)
2020-12-14 21:04:15 +0100 <idnar> ski: imagine a :: IO a, b :: IO b
2020-12-14 21:04:19 +0100davetapley(sid666@gateway/web/irccloud.com/x-ozkmjnucwfthiscc)
2020-12-14 21:04:25 +0100 <ski> idnar : yes ?
2020-12-14 21:04:27 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 21:04:31 +0100loller_(uid358106@gateway/web/irccloud.com/x-spyjxhxfyjxkokcy)
2020-12-14 21:04:31 +0100SrPx(sid108780@gateway/web/irccloud.com/x-utvsxqnjqyxqxbbf)
2020-12-14 21:04:42 +0100 <ski> oh. i see what you mean
2020-12-14 21:04:47 +0100wonko7(~wonko7@2a01:e35:2ffb:7040:14a1:46f4:68f7:2133) (Ping timeout: 260 seconds)
2020-12-14 21:04:49 +0100AndreasK(uid320732@gateway/web/irccloud.com/x-jsmyjulmopxjbqpc)
2020-12-14 21:04:51 +0100eruditass(uid248673@gateway/web/irccloud.com/x-uogbxpwdjidcirdz)
2020-12-14 21:05:07 +0100cvlad-(sid203065@gateway/web/irccloud.com/x-tonetmfmrrlnwmtg)
2020-12-14 21:05:30 +0100 <monochrom> This is why I said in haskell-cafe that this issue is personal.
2020-12-14 21:05:50 +0100 <ski> i suppose if you `mapM'/... with a pattern that introduces a skolem, that would be another use case
2020-12-14 21:05:51 +0100liquorice(sid267884@gateway/web/irccloud.com/x-sshcjibpmbnripit)
2020-12-14 21:06:36 +0100 <monochrom> There is no absolute objective technical merit for many warnings in -Wall. There is only personalized technical merit for it, conditioned upon what kind of mistakes you, not me, are likely to make.
2020-12-14 21:06:42 +0100 <idnar> merijn: possibly I'm doing something else wrong to run into this
2020-12-14 21:06:42 +0100thevishy(~Nishant@103.210.43.17) (Read error: Connection reset by peer)
2020-12-14 21:07:08 +0100thevishy(~Nishant@103.210.43.17)
2020-12-14 21:07:26 +0100 <monochrom> I'm OK with the outcome that since GHC has to choose one default, it can choose the way that doesn't benefit me but benefits other people.
2020-12-14 21:07:38 +0100 <monochrom> But please don't speak like it's objectively absolute. It's anything but.
2020-12-14 21:08:01 +0100 <idnar> monochrom: I started turning things on one by one rather than -Wall, heh
2020-12-14 21:08:25 +0100 <merijn> idnar: Well, usually I don't write thing in do blocks until I need their results, so "forgetting" isn't an issue :p
2020-12-14 21:08:36 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 240 seconds)
2020-12-14 21:09:07 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2020-12-14 21:09:25 +0100ski. o O ( goal-directed action list generation )
2020-12-14 21:09:43 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-14 21:10:03 +0100avdb(~avdb@213.177.155.250) (Quit: avdb)
2020-12-14 21:12:33 +0100ubert(~Thunderbi@p200300ecdf351475e6b318fffe838f33.dip0.t-ipconnect.de)
2020-12-14 21:13:35 +0100 <dminuoso> adamCS: So Im writing a library that makes similar use of OverloadedLabels, so perhaps I have a different mind model.
2020-12-14 21:13:56 +0100 <dminuoso> adamCS: The key thing to realize is that these symbols are literals, not variables.
2020-12-14 21:14:22 +0100 <dminuoso> You don't qualify `1` either, do you?
2020-12-14 21:16:15 +0100 <dminuoso> The idea of # is that it's a type-driven lookup for a value. It's sort of like a `lookup` on a globally available map.
2020-12-14 21:16:43 +0100p3n(~p3n@217.198.124.246)
2020-12-14 21:16:51 +0100fendor(~fendor@178.165.129.207.wireless.dyn.drei.com)
2020-12-14 21:16:56 +0100conal(~conal@64.71.133.70)
2020-12-14 21:17:06 +0100justsomeguyfinds -Wall really overwhelming, personally.
2020-12-14 21:17:29 +0100jamm(~jamm@unaffiliated/jamm)
2020-12-14 21:17:33 +0100 <justsomeguy> But I am definitely pretty new to Haskell overall, and prone to information overload.
2020-12-14 21:17:47 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 21:19:01 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-12-14 21:20:33 +0100wonko7(~wonko7@lns-bzn-55-82-255-183-4.adsl.proxad.net)
2020-12-14 21:21:11 +0100 <sm> justsomeguy: it's tough when you first turn it on with some existing code. The best way is to keep it on and fix each little thing as it appears
2020-12-14 21:21:30 +0100_linker_(~linker@2a02:a31a:a041:9a80:d53f:65ba:e641:4efb)
2020-12-14 21:22:07 +0100 <sm> or, just enable some of the individual -W's to start
2020-12-14 21:22:17 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
2020-12-14 21:22:26 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-12-14 21:22:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-12-14 21:23:18 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2020-12-14 21:24:12 +0100 <justsomeguy> The problem I run into is that I save my file when I'm incrementally writing a function, before I have working code (when I'm still writing all patterns for an equasion, or when rearranging them), and then ghcid throws a ton of errors in my face. This is sometimes useful, but often too distracting. It probably a workflow issue, really. I should figure out a better cadence for saving, or make the terminal drop-down or something.
2020-12-14 21:24:33 +0100vicfred(~vicfred@unaffiliated/vicfred) (Ping timeout: 256 seconds)
2020-12-14 21:24:48 +0100 <justsomeguy> But yeah, I've been enabling -W's one at a time, and that's much less distracting.
2020-12-14 21:24:48 +0100 <monochrom> Your workflow is fine. It's what a lot of us do.
2020-12-14 21:25:23 +0100geekosaur(42d52137@66.213.33.55) (Remote host closed the connection)
2020-12-14 21:25:33 +0100 <sm> justsomeguy: when learning, or just when confused, I get the code compiling, then make Really Small Changes while watching ghcid / hls
2020-12-14 21:25:52 +0100 <sm> at times this is literally "change one character"
2020-12-14 21:26:04 +0100rprije(~rprije@14-203-203-69.tpgi.com.au)
2020-12-14 21:26:22 +0100 <sm> also, just pick the top error, no need to look at them all
2020-12-14 21:26:40 +0100geekosaur(42d52137@66.213.33.55)
2020-12-14 21:26:41 +0100 <monochrom> The correct solution is to have an easy way to enable and disable -Wall one-shot.
2020-12-14 21:26:57 +0100tomku(~tomku@unaffiliated/tomku) (Ping timeout: 260 seconds)
2020-12-14 21:27:01 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
2020-12-14 21:27:34 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com)
2020-12-14 21:27:40 +0100 <monochrom> This is what an IDE should boast. Not fancy completion. Not fancy hovering tips. But two buttons, one says "check without -Wall" and the other says "check with -Wall".
2020-12-14 21:27:52 +0100 <monochrom> Because only you know when to use which.
2020-12-14 21:28:28 +0100 <justsomeguy> Right. It just feels like information overload a lot of the time. Between the repl, hlint, and intellisense autosuggesting completions for every word I write. On the other hand, once I have some working code that I'm modifying, rather that incrementally creating, those things become really useful.
2020-12-14 21:28:48 +0100 <justsomeguy> Ah I must go, my bus is here.
2020-12-14 21:29:25 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-12-14 21:29:37 +0100 <sm> moral: command your tools
2020-12-14 21:31:52 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2020-12-14 21:32:12 +0100jaykru(~user@unaffiliated/jaykru) (Ping timeout: 260 seconds)
2020-12-14 21:32:33 +0100 <idnar> with lsp in my editor the warnings and errors show up as annotations (squigglies + hover + etc) to my code and I find it easy to ignore things that are "under construction"
2020-12-14 21:33:06 +0100tomku(~tomku@unaffiliated/tomku)
2020-12-14 21:33:50 +0100jb55(~jb55@gateway/tor-sasl/jb55)
2020-12-14 21:37:06 +0100knupfer(~Thunderbi@mue-88-130-61-105.dsl.tropolys.de) (Quit: knupfer)
2020-12-14 21:37:20 +0100knupfer(~Thunderbi@mue-88-130-61-105.dsl.tropolys.de)
2020-12-14 21:37:21 +0100MOSCOS(~MOSCOS@122.54.107.175) (Remote host closed the connection)
2020-12-14 21:37:45 +0100MOSCOS(~MOSCOS@122.54.107.175)
2020-12-14 21:39:30 +0100ubert(~Thunderbi@p200300ecdf351475e6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-12-14 21:40:02 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 21:43:14 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-12-14 21:43:17 +0100vicfred(~vicfred@unaffiliated/vicfred)
2020-12-14 21:45:26 +0100bliminse(~bliminse@host86-140-186-196.range86-140.btcentralplus.com) (Ping timeout: 256 seconds)
2020-12-14 21:46:52 +0100 <adamCS> dminuoso: Yes. I just wasn't thinking about them clearly, just trying to get something new to work, then, after a few tries, realized why the syntax was not what I had expected. Mental model adjustment occurring as I type...
2020-12-14 21:46:57 +0100thevishy(~Nishant@103.210.43.17) (Quit: Leaving)
2020-12-14 21:54:37 +0100conal(~conal@64.71.133.70)
2020-12-14 21:56:22 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2020-12-14 21:57:20 +0100Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 256 seconds)
2020-12-14 21:57:55 +0100dawiss(~dawiss@178.43.15.214.ipv4.supernova.orange.pl) (Remote host closed the connection)
2020-12-14 21:58:40 +0100cronokirby(~lucas@175.245.61.188.dynamic.wline.res.cust.swisscom.ch)
2020-12-14 22:01:35 +0100ComposerMike(~Mike@047-037-150-174.res.spectrum.com)
2020-12-14 22:03:12 +0100_ashbreeze_(~mark@184-157-32-85.dyn.centurytel.net) (Remote host closed the connection)
2020-12-14 22:03:42 +0100Stanley|00(~stanley00@unaffiliated/stanley00)
2020-12-14 22:03:50 +0100ComposerMike(~Mike@047-037-150-174.res.spectrum.com) (Client Quit)
2020-12-14 22:03:58 +0100Ariakenom(~Ariakenom@h-98-128-229-53.NA.cust.bahnhof.se) (Quit: Leaving)
2020-12-14 22:04:25 +0100Stanley00(~stanley00@unaffiliated/stanley00) (Ping timeout: 240 seconds)
2020-12-14 22:04:39 +0100kuribas(~user@ptr-25vy0i9bg572eo5kib2.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2020-12-14 22:06:44 +0100geekosaur(42d52137@66.213.33.55) (Remote host closed the connection)
2020-12-14 22:07:02 +0100gawen(~gawen@movzbl.root.sx) (Quit: cya)
2020-12-14 22:10:25 +0100thc202(~thc202@unaffiliated/thc202) (Quit: thc202)
2020-12-14 22:10:56 +0100tomku(~tomku@unaffiliated/tomku) (Ping timeout: 256 seconds)
2020-12-14 22:11:52 +0100cronokirby(~lucas@175.245.61.188.dynamic.wline.res.cust.swisscom.ch) (Ping timeout: 260 seconds)
2020-12-14 22:14:29 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving)
2020-12-14 22:14:47 +0100urodna(~urodna@unaffiliated/urodna) (Read error: Connection reset by peer)
2020-12-14 22:16:10 +0100Jesin(~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
2020-12-14 22:16:29 +0100tomku(~tomku@unaffiliated/tomku)
2020-12-14 22:17:24 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it) (Ping timeout: 260 seconds)
2020-12-14 22:17:54 +0100son0p(~son0p@181.136.122.143)
2020-12-14 22:21:14 +0100Franciman(~francesco@host-82-54-12-32.retail.telecomitalia.it)
2020-12-14 22:26:56 +0100tomsmedingsees someone on the haskell-cafe mailing list ask for compilers to assembly written in haskell, that are more fancy than the basic one they've written themselves; also me: has written an absolute mess of a compiler a while ago and wonders whether to post it; also me: realises their compiler is like 5x as fancy as mine
2020-12-14 22:27:26 +0100tomsmedingstill wonders whether to post it just to inspire some horror in people
2020-12-14 22:27:28 +0100bitmagie(~Thunderbi@200116b806e8c6005046439d05e8bc2c.dip.versatel-1u1.de) (Quit: bitmagie)
2020-12-14 22:30:40 +0100Stanley|00(~stanley00@unaffiliated/stanley00) (Remote host closed the connection)
2020-12-14 22:32:39 +0100 <Rembane> Do it! :D
2020-12-14 22:32:43 +0100 <Rembane> Horror <3
2020-12-14 22:33:20 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection)
2020-12-14 22:33:54 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net)
2020-12-14 22:34:25 +0100greisean(~greisean@2607:fea8:2c40:a3::4db7) (Quit: greisean)
2020-12-14 22:36:17 +0100hiroaki(~hiroaki@2a02:908:4b1b:20a0::4e53) (Ping timeout: 272 seconds)
2020-12-14 22:36:23 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
2020-12-14 22:36:51 +0100 <tomsmeding> I actually think I'm not going to, I have a reputation at stake :p
2020-12-14 22:37:24 +0100 <tomsmeding> I can post it here though, that at least sort-of justifies my effort just now to make it buildable with cabal instead of a makefile: https://git.tomsmeding.com/langhs/tree/
2020-12-14 22:37:25 +0100 <Rembane> tomsmeding: You need a secret identity, like for instance "absolutelynottomsmeding"
2020-12-14 22:37:45 +0100 <tomsmeding> imreallynot@tomsmeding.com
2020-12-14 22:38:23 +0100 <tomsmeding> it can compile this: https://git.tomsmeding.com/langhs/tree/l/bf.lang to x64 assembly
2020-12-14 22:38:32 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection)
2020-12-14 22:39:01 +0100 <tomsmeding> though the two lifetime analysis modules I've written apparently disagree on that program, so I'm not sure whether it's actually correct or only accidentally
2020-12-14 22:39:10 +0100vfaronov(~vfaronov@broadband-95-84-210-78.ip.moscow.rt.ru)
2020-12-14 22:39:32 +0100 <tomsmeding> (in case you think "I see three lifetime analysis modules": correct, the "2" one is incomplete)
2020-12-14 22:39:37 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 22:41:36 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Ping timeout: 256 seconds)
2020-12-14 22:42:17 +0100 <Rembane> ^^
2020-12-14 22:42:26 +0100gawen(~gawen@movzbl.root.sx)
2020-12-14 22:42:58 +0100conal(~conal@64.71.133.70) (Ping timeout: 246 seconds)
2020-12-14 22:44:34 +0100jaykru(~user@unaffiliated/jaykru)
2020-12-14 22:44:56 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds)
2020-12-14 22:45:33 +0100 <fendor> ah, liveness analysis! The first time I learned that lattices are awesome
2020-12-14 22:46:15 +0100 <tomsmeding> I postponed learning that until taking an actual compilers course :p
2020-12-14 22:46:34 +0100justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-12-14 22:47:07 +0100conal(~conal@198.8.81.80)
2020-12-14 22:48:40 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2020-12-14 22:48:54 +0100 <fendor> Maybe I gotta do that to finally understand them
2020-12-14 22:48:59 +0100 <fendor> or understand them better
2020-12-14 22:49:29 +0100DavidEichmann(~david@62.110.198.146.dyn.plus.net) (Remote host closed the connection)
2020-12-14 22:51:29 +0100 <monochrom> Of the whole compiler course there are basically about only 3 lectures that use lattices: liveness analysis, reachability analysis, and value numbering.
2020-12-14 22:51:31 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-12-14 22:51:54 +0100 <monochrom> So if you already know them, or even just the first two, you are already finished.
2020-12-14 22:53:30 +0100 <justsomeguy> What is a lattice? A mathematical structure?
2020-12-14 22:53:36 +0100 <monochrom> yes
2020-12-14 22:54:56 +0100fendor(~fendor@178.165.129.207.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2020-12-14 22:56:33 +0100fendor(~fendor@178.165.129.102.wireless.dyn.drei.com)
2020-12-14 22:57:01 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-14 22:59:01 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
2020-12-14 23:00:32 +0100Rudd0(~Rudd0@185.189.115.108)
2020-12-14 23:02:28 +0100sfvm(~sfvm@37.228.215.77)
2020-12-14 23:03:29 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi)
2020-12-14 23:03:43 +0100grumble(~Thunderbi@freenode/staff/grumble) (Quit: Well, would you look at the time. I've almost missed my ambiguous, non-existent appointment that I have scheduled just when I start to lose interest in my current conversation.)
2020-12-14 23:04:49 +0100fuzzypixelz_(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-14 23:05:13 +0100eruditass(uid248673@gateway/web/irccloud.com/x-uogbxpwdjidcirdz) (Quit: Connection closed for inactivity)
2020-12-14 23:05:44 +0100 <fendor> guess I am finished with lattices then :(
2020-12-14 23:06:32 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
2020-12-14 23:06:33 +0100fuzzypixelz_fuzzypixelz
2020-12-14 23:06:54 +0100 <monochrom> No, you have finished what a compiler course has to say about lattices.
2020-12-14 23:07:01 +0100 <monochrom> IOW very little. :)
2020-12-14 23:07:13 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi) (Client Quit)
2020-12-14 23:07:27 +0100 <Rembane> Compiler course about lattices: They have a top, a bottom and boring stuff in the middle
2020-12-14 23:07:30 +0100 <tomsmeding> Another compiler-relevant thing with lattices is usage analysis: is this value used never, once, or more times?
2020-12-14 23:08:42 +0100mounty(~mounty@2001:8000:2f59:0:4077:efbd:e6d:4dbf)
2020-12-14 23:09:03 +0100 <dolio> Are compiler courses taught by classical logicians?
2020-12-14 23:09:06 +0100greisean(~greisean@2607:fea8:2c40:a3::4db7)
2020-12-14 23:10:09 +0100 <nshepperd> i would have thought lattices would show up in type checking too
2020-12-14 23:11:47 +0100 <nshepperd> isn't unification a lattice joining sort of operation?
2020-12-14 23:12:05 +0100grumble(~Thunderbi@freenode/staff/grumble)
2020-12-14 23:12:38 +0100kav(~kari@dsl-hkibng42-56733f-225.dhcp.inet.fi)
2020-12-14 23:13:02 +0100 <monochrom> I think what happens is a compiler course content sticks to classical logic, regardless of who teaches it.
2020-12-14 23:13:03 +0100hello_dafnyworld(5f5ac5fd@ip5f5ac5fd.dynamic.kabel-deutschland.de)
2020-12-14 23:13:28 +0100 <monochrom> It makes do by, for example, defining "live" to really just mean "not obviously dead".
2020-12-14 23:13:45 +0100knupfer(~Thunderbi@mue-88-130-61-105.dsl.tropolys.de) (Ping timeout: 240 seconds)
2020-12-14 23:17:56 +0100columbarius(~columbari@mue-88-130-54-110.dsl.tropolys.de) (Ping timeout: 240 seconds)
2020-12-14 23:19:51 +0100hello_dafnyworld(5f5ac5fd@ip5f5ac5fd.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2020-12-14 23:19:53 +0100 <monochrom> Type checking does not use unification. Type inference does.
2020-12-14 23:20:34 +0100columbarius(~columbari@muedsl-82-207-236-112.citykom.de)
2020-12-14 23:20:51 +0100 <monochrom> Few compiler courses cover type inference. Those that do, they can still choose to not prove that unification gives you the mgf, in fact not even to state it.
2020-12-14 23:20:57 +0100coot(~coot@37.30.50.101.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-12-14 23:21:18 +0100 <monochrom> If you don't talk about mgf then there is no lattice theory to bring up.
2020-12-14 23:21:25 +0100 <monochrom> err, s/mgf/mgu/
2020-12-14 23:22:18 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2020-12-14 23:22:33 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net)
2020-12-14 23:23:43 +0100 <monochrom> For example, Appel's textbook just writes down the 10-line unification algorithm, and says no more.
2020-12-14 23:25:33 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Remote host closed the connection)
2020-12-14 23:25:49 +0100mirrorbird(~psutcliff@2a00:801:2d6:5a31:e851:a991:dd63:f024)
2020-12-14 23:25:57 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2020-12-14 23:27:36 +0100aev_software(~aev@pool-108-5-152-94.nwrknj.fios.verizon.net) (Ping timeout: 240 seconds)
2020-12-14 23:28:58 +0100kritzefitz(~kritzefit@212.86.56.80) (Remote host closed the connection)
2020-12-14 23:29:07 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2020-12-14 23:29:38 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
2020-12-14 23:30:26 +0100fuzzypixelz(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Client Quit)
2020-12-14 23:30:55 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)
2020-12-14 23:32:45 +0100Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds)
2020-12-14 23:33:55 +0100elliott__(~elliott@pool-108-51-101-42.washdc.fios.verizon.net)
2020-12-14 23:34:18 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt)
2020-12-14 23:35:39 +0100mbomba(~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
2020-12-14 23:37:08 +0100softwarm(4408f588@ip68-8-245-136.sd.sd.cox.net)
2020-12-14 23:38:36 +0100o1lo01ol1o(~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 240 seconds)
2020-12-14 23:38:59 +0100michalz(~user@185.246.204.48) (Remote host closed the connection)
2020-12-14 23:40:51 +0100ddellacosta(dd@gateway/vpn/mullvad/ddellacosta)
2020-12-14 23:41:07 +0100gawen(~gawen@movzbl.root.sx) (Quit: cya)
2020-12-14 23:43:45 +0100gawen(~gawen@movzbl.root.sx)
2020-12-14 23:43:46 +0100kenran(~kenran@i59F67B59.versanet.de) (Remote host closed the connection)
2020-12-14 23:45:27 +0100jaykru(~user@unaffiliated/jaykru) (Ping timeout: 260 seconds)
2020-12-14 23:45:59 +0100 <sclv> lattice theory is incredibly beautiful and CS uses like four basic definitions and THATS IT
2020-12-14 23:46:37 +0100 <sclv> there's a lot of connections to various logics and completeness properties etc iirc
2020-12-14 23:47:08 +0100_linker_(~linker@2a02:a31a:a041:9a80:d53f:65ba:e641:4efb) (Remote host closed the connection)
2020-12-14 23:47:39 +0100 <sclv> the whole of varieties, etc
2020-12-14 23:48:30 +0100carldd0(~carldd@90-224-49-113-no56.tbcn.telia.com) (Quit: Ping timeout (120 seconds))
2020-12-14 23:48:55 +0100carldd0(~carldd@90-224-49-113-no56.tbcn.telia.com)
2020-12-14 23:49:20 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2020-12-14 23:49:29 +0100FreeBirdLjj(~freebirdl@101.87.168.174)
2020-12-14 23:50:44 +0100lagothrixGuest83978
2020-12-14 23:50:44 +0100xirhtogal(~lagothrix@unaffiliated/lagothrix)
2020-12-14 23:50:44 +0100Guest83978(~lagothrix@unaffiliated/lagothrix) (Killed (hitchcock.freenode.net (Nickname regained by services)))
2020-12-14 23:50:44 +0100xirhtogallagothrix
2020-12-14 23:51:00 +0100Kronic_(~Kronic___@84.203.98.133)
2020-12-14 23:51:26 +0100aramend(~jaan@139-144-191-90.dyn.estpak.ee) ()
2020-12-14 23:52:22 +0100Kronic(~Kronic___@84.203.98.133) (Ping timeout: 256 seconds)
2020-12-14 23:53:14 +0100sim590(~sim590@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 260 seconds)
2020-12-14 23:53:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2020-12-14 23:53:59 +0100danso(~dan@69-165-210-185.cable.teksavvy.com) (Quit: WeeChat 2.9)
2020-12-14 23:54:13 +0100FreeBirdLjj(~freebirdl@101.87.168.174) (Ping timeout: 264 seconds)
2020-12-14 23:54:20 +0100dycan(~dycan@101-137-177-60.mobile.dynamic.aptg.com.tw)
2020-12-14 23:54:52 +0100conal(~conal@198.8.81.80) (Quit: Computer has gone to sleep.)
2020-12-14 23:55:05 +0100Kronic_(~Kronic___@84.203.98.133) (Ping timeout: 240 seconds)
2020-12-14 23:56:17 +0100sim590(~sim590@modemcable090.207-203-24.mc.videotron.ca)
2020-12-14 23:56:35 +0100conal(~conal@198.8.81.80)
2020-12-14 23:56:45 +0100conal(~conal@198.8.81.80) (Client Quit)
2020-12-14 23:57:28 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net) (Ping timeout: 272 seconds)
2020-12-14 23:58:18 +0100monadmatt(~user@119-17-128-101.771180.mel.nbn.aussiebb.net)