Home freenode/#haskell: Logs Calendar

Logs on 2020-12-14 (freenode/#haskell)

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

All times are in UTC on 2020-12-14.