Home freenode/#haskell: Logs Calendar

Logs on 2021-04-06 (freenode/#haskell)

00:01:38 <edwardk> lens also offers 'each' in the case you might actually want to trade out As for Bs or some other limited subset
00:01:41 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
00:02:13 × tanner_ quits (~tanner@216.106.138.184) (Client Quit)
00:06:37 hypercube joins (~hypercube@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com)
00:07:28 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
00:11:39 <Tritlo> edwardk: thanks!
00:12:58 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 240 seconds)
00:13:09 × shailangsa quits (~shailangs@host86-186-177-164.range86-186.btcentralplus.com) (Ping timeout: 246 seconds)
00:13:11 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 260 seconds)
00:14:15 tetrahedron joins (hypercube@gateway/vpn/protonvpn/hypercube)
00:15:31 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
00:17:03 × hypercube quits (~hypercube@2603-6011-f901-9e5b-0000-0000-0000-08cf.res6.spectrum.com) (Ping timeout: 260 seconds)
00:20:22 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
00:25:39 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
00:25:58 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
00:28:50 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
00:34:45 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:35:13 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 246 seconds)
00:35:41 × turq quits (~electro@unaffiliated/turq) (Ping timeout: 240 seconds)
00:35:55 shailangsa joins (~shailangs@host86-186-177-179.range86-186.btcentralplus.com)
00:36:46 turq joins (~electro@138.197.8.173)
00:38:40 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:ede4:25d6:732a:13e6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:42:53 nbloomf joins (~nbloomf@2600:1700:ad14:3020:ede4:25d6:732a:13e6)
00:55:39 ezrakilty joins (~ezrakilty@97-126-95-37.tukw.qwest.net)
00:56:13 × stree quits (~stree@68.36.8.116) (Ping timeout: 265 seconds)
00:58:44 vicfred joins (vicfred@gateway/vpn/mullvad/vicfred)
00:59:08 × ezrakilty quits (~ezrakilty@97-126-95-37.tukw.qwest.net) (Client Quit)
01:00:23 × haasn quits (~nand@mpv/developer/haasn) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
01:00:23 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
01:01:33 haasn joins (~nand@mpv/developer/haasn)
01:02:15 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
01:04:26 × Morrow_ quits (~MorrowM_@147.161.9.44) (Ping timeout: 240 seconds)
01:07:40 hexfive joins (~hexfive@50.35.83.177)
01:09:20 stree joins (~stree@68.36.8.116)
01:10:26 bitmapper joins (uid464869@gateway/web/irccloud.com/x-fukzxaddseekbgyz)
01:17:41 × minoru_shiraeesh quits (~shiraeesh@109.166.56.44) (Ping timeout: 240 seconds)
01:18:00 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
01:21:15 ddellacosta joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
01:22:23 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 260 seconds)
01:22:31 × xff0x quits (~xff0x@2001:1a81:523f:b000:30db:80f7:2aff:f171) (Ping timeout: 250 seconds)
01:22:46 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
01:24:10 Tario joins (~Tario@200.119.187.21)
01:24:17 xff0x joins (~xff0x@2001:1a81:5274:b300:d2ad:1716:ab64:e445)
01:25:39 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
01:25:41 Morrow_ joins (~MorrowM_@147.161.9.44)
01:25:41 × ddellacosta quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 240 seconds)
01:25:59 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
01:29:01 × rosterok quits (uid236576@gateway/web/irccloud.com/x-rwvwjsgikbgkbaif) (Quit: Connection closed for inactivity)
01:36:06 × hiroaki quits (~hiroaki@2a02:8108:8c40:2bb8:bf0d:f77b:ccaf:dfd1) (Ping timeout: 246 seconds)
01:37:49 × viluon quits (uid453725@gateway/web/irccloud.com/x-gdkvwokxpicoslby) (Quit: Connection closed for inactivity)
01:37:50 × Tario quits (~Tario@200.119.187.21) (Read error: Connection reset by peer)
01:38:47 Tario joins (~Tario@201.192.165.173)
01:43:13 × Morrow_ quits (~MorrowM_@147.161.9.44) (Quit: Leaving)
01:43:32 Morrow_ joins (~MorrowM_@147.161.9.44)
01:46:00 × vv8 quits (~egp_@128-71-69-136.broadband.corbina.ru) (Ping timeout: 265 seconds)
01:47:27 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds)
01:47:57 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
01:49:21 × superstar64 quits (6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net) (Quit: Connection closed)
01:50:40 CMCDragonkai2 joins (~Thunderbi@120.18.215.85)
01:57:29 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
01:58:01 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
01:58:20 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:58:22 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
01:58:24 × stree quits (~stree@68.36.8.116) (Quit: Caught exception)
01:58:46 stree joins (~stree@68.36.8.116)
01:59:28 × Alleria_ quits (~AllahuAkb@2603-7000-3040-0000-e074-3699-e1b9-39a2.res6.spectrum.com) (Remote host closed the connection)
02:01:43 conal joins (~conal@64.71.133.70)
02:06:25 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
02:06:55 juri__ joins (~juri@79.140.114.222)
02:08:44 × urodna_ quits (~urodna@unaffiliated/urodna) (Quit: urodna_)
02:09:41 × juri_ quits (~juri@79.140.122.136) (Ping timeout: 240 seconds)
02:10:37 drbean_ joins (~drbean@TC210-63-209-214.static.apol.com.tw)
02:21:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
02:22:04 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
02:26:41 × carlomagno quits (~cararell@148.87.23.11) (Quit: Leaving.)
02:27:05 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 268 seconds)
02:37:04 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
02:46:25 × Morrow_ quits (~MorrowM_@147.161.9.44) (Ping timeout: 260 seconds)
02:48:26 × esp32_prog quits (~esp32_pro@91.193.4.202) (Ping timeout: 240 seconds)
02:50:02 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Remote host closed the connection)
02:52:08 × aerona quits (~aerona@2600:6c54:4600:f300:3cfc:ae1:3be3:38e1) (Remote host closed the connection)
02:52:12 rajivr joins (uid269651@gateway/web/irccloud.com/x-capllcjtsollkkrc)
02:53:09 gnumonic joins (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net)
02:53:14 rdivyanshu joins (uid322626@gateway/web/irccloud.com/x-zbthekzvhrqpupmy)
02:53:20 solvr joins (57e3c46d@87.227.196.109)
02:54:19 × theDon quits (~td@muedsl-82-207-238-169.citykom.de) (Ping timeout: 260 seconds)
02:56:02 theDon joins (~td@94.134.91.185)
02:57:44 FinnElija joins (~finn_elij@gateway/tor-sasl/finnelija/x-67402716)
02:57:44 finn_elija is now known as Guest60184
02:57:44 FinnElija is now known as finn_elija
02:59:52 ddellacosta joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
03:01:09 × Guest60184 quits (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Ping timeout: 240 seconds)
03:05:23 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 246 seconds)
03:05:56 × ddellacosta quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 268 seconds)
03:06:20 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
03:08:39 × sagax quits (~sagax_nb@213.138.71.146) (Quit: Konversation terminated!)
03:08:53 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Client Quit)
03:16:00 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
03:16:15 Tario joins (~Tario@201.192.165.173)
03:18:50 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
03:20:45 kum0 joins (~kumo@139.180.144.166)
03:24:25 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 268 seconds)
03:25:21 × solvr quits (57e3c46d@87.227.196.109) (Quit: Connection closed)
03:37:14 × cake_eater quits (~kiweun@2607:fea8:2a62:9600:9db9:9a23:8a1e:6f8c) (Remote host closed the connection)
03:37:30 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
03:39:34 pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net)
03:40:03 × Hellaenergy quits (~Hellaener@178.239.168.171) (Remote host closed the connection)
03:45:11 × ba quits (bandali@fsf/emeritus/bandali) (Quit: ZNC - https://znc.in)
03:47:36 vv8 joins (~egp_@128-71-69-136.broadband.corbina.ru)
03:51:23 esp32_prog joins (~esp32_pro@91.193.4.202)
03:55:45 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
03:55:50 sankarshan joins (~sankarsha@185.204.1.185)
04:00:15 × SupaYoshi quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Quit: Goodbye!)
04:00:48 SupaYoshi joins (~supayoshi@213-10-140-13.fixed.kpn.net)
04:06:41 × stree quits (~stree@68.36.8.116) (Ping timeout: 240 seconds)
04:15:31 raym joins (~ray@115.187.32.14)
04:18:35 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
04:20:03 stree joins (~stree@68.36.8.116)
04:24:46 frozenErebus joins (~frozenEre@37.231.244.249)
04:27:25 ddellacosta joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
04:31:54 × ddellacosta quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 260 seconds)
04:33:12 irc_user joins (uid423822@gateway/web/irccloud.com/x-qgihnlrmtbcmmifd)
04:34:27 irc_user parts (uid423822@gateway/web/irccloud.com/x-qgihnlrmtbcmmifd) ()
04:42:16 <koz_> What's a good way to generate a ByteArray inside a quasi-quoter?
04:42:23 <koz_> ByteArray# is fine too.
04:42:25 × conal quits (~conal@64.71.133.70) (Ping timeout: 265 seconds)
04:43:32 minoru_shiraeesh joins (~shiraeesh@109.166.56.44)
04:43:42 jakalx parts (~jakalx@base.jakalx.net) ("Error from remote client")
04:49:48 jakalx joins (~jakalx@base.jakalx.net)
04:52:18 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
04:54:56 berberman joins (~berberman@unaffiliated/berberman)
04:55:49 × berberman_ quits (~berberman@unaffiliated/berberman) (Ping timeout: 245 seconds)
04:56:46 × Benett quits (~Benett@unaffiliated/benett) (Remote host closed the connection)
04:59:19 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection)
05:00:05 mp___ joins (mp@hell.cx)
05:06:01 × gnumonic quits (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
05:09:47 Benett joins (~Benett@unaffiliated/benett)
05:12:27 × Alleria__ quits (~textual@2603-7000-3040-0000-18fd-c638-1b22-bd1e.res6.spectrum.com) (Ping timeout: 260 seconds)
05:12:46 Alleria joins (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com)
05:13:11 Alleria is now known as Guest66883
05:13:47 emmanuel_erc joins (~user@cpe-74-71-106-64.nyc.res.rr.com)
05:16:28 × plutoniix quits (~q@node-ukd.pool-125-24.dynamic.totinternet.net) (Quit: Leaving)
05:17:27 × sankarshan quits (~sankarsha@185.204.1.185) (Remote host closed the connection)
05:17:31 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:17:50 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Remote host closed the connection)
05:18:10 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:18:19 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Remote host closed the connection)
05:18:59 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:19:39 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Remote host closed the connection)
05:19:54 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:19:55 dougsko joins (~dougsko@139.28.218.148)
05:19:57 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
05:22:34 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Read error: Connection reset by peer)
05:23:24 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:24:41 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 252 seconds)
05:26:37 v01d4lph_ joins (~v01d4lph4@223.177.184.123)
05:26:37 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Read error: Connection reset by peer)
05:32:46 yoneda joins (~mike@193.206.102.122)
05:33:26 aerona joins (~aerona@2600:6c54:4600:f300:e355:7c0:28e4:1962)
05:34:02 × v01d4lph_ quits (~v01d4lph4@223.177.184.123) (Read error: No route to host)
05:34:12 × minoru_shiraeesh quits (~shiraeesh@109.166.56.44) (Ping timeout: 252 seconds)
05:34:19 v01d4lph4 joins (~v01d4lph4@223.177.184.123)
05:35:32 × CMCDragonkai2 quits (~Thunderbi@120.18.215.85) (Quit: CMCDragonkai2)
05:37:11 × proteusguy quits (~proteusgu@cm-58-10-155-117.revip7.asianet.co.th) (Ping timeout: 260 seconds)
05:37:35 × waleee-cl quits (uid373333@gateway/web/irccloud.com/x-jauuiqcdkjlizmjn) (Quit: Connection closed for inactivity)
05:37:46 minoru_shiraeesh joins (~shiraeesh@109.166.56.44)
05:37:52 kiweun joins (~kiweun@2607:fea8:2a62:9600:1112:7dc0:d4f4:fdda)
05:37:54 vchlup joins (~vchlup@nat.brnet.cz)
05:42:54 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Remote host closed the connection)
05:43:01 × kiweun quits (~kiweun@2607:fea8:2a62:9600:1112:7dc0:d4f4:fdda) (Ping timeout: 276 seconds)
05:43:39 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
05:44:15 <edwardk> koz_ does it need to be an actual byte array or can you get away with something like an Addr# literal?
05:47:40 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 265 seconds)
05:48:45 <edwardk> you can produce an Addr# literal and then allocate a bytearray and copy it into the bytearray from the slab of memory. (or if we ever get the ability to talk about 'unmanaged' bytearray#'s, then you'd be able to just directly point an unmanaged bytearray# at the addr# literal)
05:49:14 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
05:50:57 nut joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
05:52:24 Varis joins (~Tadas@unaffiliated/varis)
05:56:17 takuan joins (~takuan@178-116-218-225.access.telenet.be)
05:57:57 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
06:04:18 Pickchea joins (~private@unaffiliated/pickchea)
06:05:08 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:06:33 gnumonic joins (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net)
06:08:03 v01d4lph_ joins (~v01d4lph4@223.177.183.124)
06:08:56 × v01d4lph4 quits (~v01d4lph4@223.177.184.123) (Ping timeout: 265 seconds)
06:11:41 × alx741 quits (~alx741@181.196.69.45) (Ping timeout: 240 seconds)
06:11:49 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:ede4:25d6:732a:13e6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:14:50 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
06:18:48 mice-user joins (b4960d8b@180-150-13-139.b4960d.syd.static.aussiebb.net)
06:22:26 v01d4lph4 joins (~v01d4lph4@223.177.183.124)
06:22:26 × v01d4lph_ quits (~v01d4lph4@223.177.183.124) (Read error: Connection reset by peer)
06:22:50 <koz_> edwardk: Nope, has to be an actual byte array.
06:24:20 Desmond373 joins (b49673ba@180.150.115.186)
06:24:24 <Axman6> There's no IsList instance for ByteArray# right? (mostly unrelated to koz_'s question)
06:24:32 alx741 joins (~alx741@181.196.68.238)
06:26:06 × esp32_prog quits (~esp32_pro@91.193.4.202) (Ping timeout: 240 seconds)
06:26:24 × v01d4lph4 quits (~v01d4lph4@223.177.183.124) (Client Quit)
06:26:26 dyamon joins (~dyamon@cpc69058-oxfd26-2-0-cust662.4-3.cable.virginm.net)
06:27:11 × dyamon quits (~dyamon@cpc69058-oxfd26-2-0-cust662.4-3.cable.virginm.net) (Client Quit)
06:28:16 × stree quits (~stree@68.36.8.116) (Ping timeout: 265 seconds)
06:28:34 <koz_> There isn't, but there _is_ for ByteArray in primitive.
06:30:54 × frozenErebus quits (~frozenEre@37.231.244.249) (Quit: leaving)
06:31:12 frozenErebus joins (~frozenEre@37.231.244.249)
06:31:21 proteusguy joins (~proteusgu@cm-58-10-209-239.revip7.asianet.co.th)
06:31:51 <edwardk> Axman6: can't be. wrong kind
06:35:53 v01d4lph4 joins (~v01d4lph4@223.177.183.124)
06:38:27 <Axman6> :'( that's kind of annoying
06:41:22 stree joins (~stree@68.36.8.116)
06:42:31 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
06:44:20 × v01d4lph4 quits (~v01d4lph4@223.177.183.124) (Remote host closed the connection)
06:44:26 <edwardk> Axman6: working on it https://github.com/ekmett/unboxed
06:45:32 <edwardk> 9.2 gives us unlifted data declarations, and moves BoxedRep in with Unlifted and Lifted as specializations of the same type. so you can now in theory write code that is able to instantiate instances for both Lifted and Unlifted pointer types easily. e.g. Eq
06:48:10 × stree quits (~stree@68.36.8.116) (Quit: Caught exception)
06:48:36 stree joins (~stree@68.36.8.116)
06:49:14 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
06:49:37 amerocu[m] joins (amerocumat@gateway/shell/matrix.org/x-vtmtlyxuaeoeiccp)
06:50:49 solvr joins (57e3c46d@87.227.196.109)
06:57:14 Sornaensis joins (~Sornaensi@79.142.232.102.static.router4.bolignet.dk)
06:57:33 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
06:58:28 × Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
07:00:15 × Sorny quits (~Sornaensi@077213203030.dynamic.telenor.dk) (Ping timeout: 260 seconds)
07:01:24 v01d4lph4 joins (~v01d4lph4@223.177.183.124)
07:01:55 × v01d4lph4 quits (~v01d4lph4@223.177.183.124) (Read error: Connection reset by peer)
07:07:03 v01d4lph4 joins (~v01d4lph4@223.177.183.124)
07:08:15 srk joins (~sorki@2a00:1028:83a6:10aa:333a:80ef:9696:7eea)
07:09:17 nut` joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
07:10:38 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 240 seconds)
07:12:08 × howdoi quits (uid224@gateway/web/irccloud.com/x-sykzqmpormchxxqk) (Quit: Connection closed for inactivity)
07:12:40 gtk joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
07:15:38 × nut quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds)
07:16:56 × srk quits (~sorki@2a00:1028:83a6:10aa:333a:80ef:9696:7eea) (Quit: ZNC 1.8.2 - https://znc.in)
07:18:04 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Remote host closed the connection)
07:19:03 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
07:20:28 × frozenErebus quits (~frozenEre@37.231.244.249) (Ping timeout: 265 seconds)
07:20:37 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
07:20:49 × bgamari_ quits (~bgamari@2001:470:e438::1) (Ping timeout: 245 seconds)
07:21:01 bgamari joins (~bgamari@72.65.102.162)
07:21:14 Varis joins (~Tadas@unaffiliated/varis)
07:22:31 kamotaketsunumin joins (6769235f@103.105.35.95)
07:22:31 <kamotaketsunumin> https://media.discordapp.net/attachments/747637197548552193/828892217254739978/Screenshot_20210406_142102.png?width=1213&height=669
07:22:49 <kamotaketsunumin> What cause Maybe () instead of IO() in there? anyone know?
07:23:06 × minoru_shiraeesh quits (~shiraeesh@109.166.56.44) (Ping timeout: 240 seconds)
07:23:10 <kamotaketsunumin> I'm trying to desugar do notation
07:23:30 <DigitalKiwi> cabal-install-ghc74: Temporary version of cabal-install for ghc-7.4
07:23:41 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 245 seconds)
07:23:54 <raehik> kamotaketsunumin: lookup returns a Maybe
07:23:57 <DigitalKiwi> i do not think temporary means what they think it means
07:24:22 <raehik> looks like it's expecting the lambda on the end to return a Maybe because of that
07:24:27 <DigitalKiwi> is from 2012 lol
07:24:46 <kamotaketsunumin> how to return a Just instead?
07:24:52 <kamotaketsunumin> I though lookup is return Just
07:24:59 <kamotaketsunumin> from type signature I check it
07:25:05 <raehik> :t fromJust
07:25:07 <lambdabot> Maybe a -> a
07:25:12 <kamotaketsunumin> Oh no it's Maybe b
07:25:13 <DigitalKiwi> well, last one...copyright says 2005. all kinds of not temporary lol
07:25:16 <kamotaketsunumin> Eq a => a -> [(a, b)] -> Maybe b
07:25:24 <kamotaketsunumin> did I have to do case of ?
07:25:33 <raehik> your commented code essentially does fromJust via a pattern match so same thing
07:25:38 mikoto-chan joins (~anass@gateway/tor-sasl/mikoto-chan)
07:25:43 <raehik> :t return . fromJust
07:25:44 <lambdabot> Monad m => Maybe a -> m a
07:25:53 <raehik> That gets you what you want (replace m with IO)
07:25:53 <kamotaketsunumin> what?
07:26:01 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
07:26:12 <kamotaketsunumin> formJust ?
07:26:23 × Desmond373 quits (b49673ba@180.150.115.186) (Quit: Connection closed)
07:26:24 <kamotaketsunumin> what is fromJust here?
07:26:32 <raehik> fromJust takes a Maybe and returns the term stored in Just
07:26:40 <raehik> it takes a Maybe a and returns the a
07:26:46 <raehik> if it's Nothing, it errors out
07:26:59 <kamotaketsunumin> ahhh I see, lemme try.
07:27:10 <kamotaketsunumin> strange, it's not in Prelude?
07:27:17 <kamotaketsunumin> did I have to add module/library?
07:27:22 <raehik> so use fromJust to unwrap, and rewrap in IO with return
07:27:31 <raehik> yeah, import Data.Maybe (fromJust)
07:27:40 <kamotaketsunumin> ohh okay Data.Maybe, I got it.
07:27:46 <raehik> (Hoogle is handy for figuring out where to import things)
07:28:14 <kamotaketsunumin> hoogle is hard to explore?
07:28:18 <kamotaketsunumin> Am I the only one?
07:28:26 <raehik> https://hoogle.haskell.org/?hoogle=fromJust
07:29:05 <raehik> I think the UI is fine personally
07:29:32 <raehik> some features might be unclear I'll agree
07:30:32 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
07:31:46 minoru_shiraeesh joins (~shiraeesh@109.166.56.44)
07:32:28 <DigitalKiwi> it took me years to find the Contents button on hackage
07:32:56 mkDoku joins (~TheMule@aftr-37-201-195-134.unity-media.net)
07:33:16 <kamotaketsunumin> main = getArgs >>= \(command : args) -> fromJust (lookup command dispatch) args
07:33:16 <kamotaketsunumin> great
07:33:24 <kamotaketsunumin> it's just work
07:33:26 <raehik> nice!
07:33:28 srk joins (~sorki@unaffiliated/srk)
07:33:59 <raehik> sometimes you can replace the fromJust lookup pattern with a function
07:34:14 <raehik> that way you can remove the fromJust and feel a bit safer
07:35:06 <kamotaketsunumin> emm really? I don't know what happen under fromJust, is there pattern matching behind it? the type signatur just Maybe a -> a
07:35:19 <kamotaketsunumin> safer means no error thrown right?
07:35:23 <raehik> yes, if you pass a Nothing to fromJust it throws a runtime error
07:35:27 <kamotaketsunumin> and the program crash
07:35:33 <kamotaketsunumin> yeah
07:35:53 <raehik> in your code it probably doesn't matter all that much because it would be a clear programmer error and probably happen early
07:36:09 <raehik> but it's good practice to avoid unsafe stuff where possible
07:36:23 zaquest joins (~notzaques@5.128.210.178)
07:37:11 <raehik> try changing your `[(String, [String] -> IO ())]` to a `String -> ([String] -> IO ())`
07:37:22 × beka quits (~beka@gothdyke.mom) (Quit: ZNC 1.6.5+deb1+deb9u2 - http://znc.in)
07:37:34 <kamotaketsunumin> hstodo: Main.hs:30:20-79: Non-exhaustive patterns in lambda <= funny
07:38:02 <kamotaketsunumin> raehik why though?
07:38:10 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
07:38:31 <raehik> why change it? to clarify your types
07:38:34 coot joins (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl)
07:39:04 kiweun joins (~kiweun@2607:fea8:2a62:9600:49c1:f7f6:7281:486d)
07:39:06 <kamotaketsunumin> so? no more lookup?
07:39:13 <raehik> no huge reason, it stood out to me because it was something I noticed in a codebase recently
07:39:32 beka joins (~beka@gothdyke.mom)
07:39:49 <raehik> yes, you could replace `fromJust (lookup command dispatch) args` with `(dispatch command) args`
07:40:51 <raehik> you'll want to change the type as I mentioned, and the dispatch function should be `case cmd of "add" -> add` etc
07:41:24 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Client Quit)
07:41:36 × sayola quits (~vekto@dslb-002-201-085-157.002.201.pools.vodafone-ip.de) (Ping timeout: 245 seconds)
07:41:43 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
07:42:04 <kamotaketsunumin> ah, I use guard instead
07:42:57 × mikoto-chan quits (~anass@gateway/tor-sasl/mikoto-chan) (Quit: mikoto-chan)
07:43:00 <raehik> yep any way is fine
07:43:19 mikoto-chan joins (~anass@gateway/tor-sasl/mikoto-chan)
07:43:19 × kiweun quits (~kiweun@2607:fea8:2a62:9600:49c1:f7f6:7281:486d) (Ping timeout: 258 seconds)
07:43:21 <raehik> if lambda case was default yet I would've said that, it's clearest and shortest
07:43:23 <kamotaketsunumin> ah the way dispatch store is in list, yeah perhaps it's good to just store dispatch as a Param(:t String) -> Command(:t [String] -> IO())
07:43:25 × mikoto-chan quits (~anass@gateway/tor-sasl/mikoto-chan) (Client Quit)
07:43:45 <raehik> great idea
07:43:46 <kamotaketsunumin> lol, I learn a lot of stuff and it's just make sense now.
07:43:52 lurkless joins (~ll@unaffiliated/lurkless)
07:43:57 × aerona quits (~aerona@2600:6c54:4600:f300:e355:7c0:28e4:1962) (Remote host closed the connection)
07:44:33 <raehik> do you know how to make a type synonym? you should do that for the command at least
07:45:04 chele joins (~chele@ip5b40237d.dynamic.kabel-deutschland.de)
07:45:07 <raehik> > type Command = [String] -> IO ()
07:45:09 <lambdabot> <hint>:1:1: error: <hint>:1:1: error: parse error on input ‘type’
07:45:40 <raehik> (ok I don't know how to use the bots here lol)
07:46:02 <kamotaketsunumin> yeah I do know.
07:46:25 <kamotaketsunumin> I'm just get into newtype, but didn't use it right now.
07:46:34 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
07:46:35 <kamotaketsunumin> a stuff like deriving, etc.
07:46:59 jespada joins (~jespada@90.254.243.187)
07:47:39 JON13 joins (a5e1c284@165.225.194.132)
07:47:51 × gnumonic quits (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
07:48:03 × JON13 quits (a5e1c284@165.225.194.132) (Client Quit)
07:49:10 kritzefitz joins (~kritzefit@p548c9398.dip0.t-ipconnect.de)
07:49:20 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
07:49:45 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
07:53:48 <kamotaketsunumin> @raeh
07:53:48 <lambdabot> Unknown command, try @list
07:53:49 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 250 seconds)
07:54:05 <kamotaketsunumin> raehik what big codebase you see?
07:54:15 <kamotaketsunumin> what kind of app is it?
07:54:24 thc202 joins (~thc202@unaffiliated/thc202)
07:56:06 <raehik> a compiler I work on, they used the same lookup pattern
07:56:23 <kamotaketsunumin> compiler, oh right.
07:56:29 <raehik> kamotaketsunumin: I'm also very new to Haskell so I wasn't sure if there was a reason to use it
07:56:30 <kamotaketsunumin> are you making a programming language?
07:56:33 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-fukzxaddseekbgyz) (Quit: Connection closed for inactivity)
07:56:42 <raehik> now I'm quite certain it's an anti-pattern
07:56:50 <kamotaketsunumin> haskell is used in two major thing, compiler or blockchain hahaha
07:57:03 <raehik> no I'm simply working on some research stuff
07:57:30 acidjnk_new joins (~acidjnk@p200300d0c72b95396118d8d56ee70ad6.dip0.t-ipconnect.de)
07:59:51 xourt joins (d4c620ea@212-198-32-234.rev.numericable.fr)
08:04:05 × gitgood quits (~gitgood@80-44-12-39.dynamic.dsl.as9105.com) (Quit: Probably away to do something really awesome)
08:07:00 hendursaga joins (~weechat@gateway/tor-sasl/hendursaga)
08:09:57 × hendursa1 quits (~weechat@gateway/tor-sasl/hendursaga) (Ping timeout: 240 seconds)
08:10:38 × kritzefitz quits (~kritzefit@p548c9398.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
08:10:56 kritzefitz joins (~kritzefit@2003:5b:203b:200::10:49)
08:17:12 mikoto-chan joins (~anass@gateway/tor-sasl/mikoto-chan)
08:17:24 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:17:55 × jack1909_ quits (~qpls@cpeb4750e67d202-cmf81d0fad5840.cpe.net.fido.ca) (Ping timeout: 248 seconds)
08:20:04 jack1909 joins (~qpls@23.105.170.167)
08:20:50 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
08:25:31 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 276 seconds)
08:26:02 Franciman joins (~francesco@host-87-20-23-243.retail.telecomitalia.it)
08:28:27 × jack1909 quits (~qpls@23.105.170.167) (Ping timeout: 260 seconds)
08:28:55 gnumonic joins (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net)
08:28:58 × shailangsa quits (~shailangs@host86-186-177-179.range86-186.btcentralplus.com) (Ping timeout: 260 seconds)
08:29:21 × mikoto-chan quits (~anass@gateway/tor-sasl/mikoto-chan) (Quit: mikoto-chan)
08:29:40 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
08:30:16 jack1909 joins (~qpls@cpeb4750e67d202-cmf81d0fad5840.cpe.net.fido.ca)
08:33:06 × clog quits (~nef@66.114.33.57) (Ping timeout: 260 seconds)
08:33:39 <int-e> shapr: No, I had not seen https://grin-compiler.github.io/ ...quite a bit of activity there, too. Thanks for the link!
08:35:30 × solvr quits (57e3c46d@87.227.196.109) (Quit: Connection closed)
08:36:31 <DigitalKiwi> (setting aside that everything's a compiler) haskell is used for a lot more than that :/
08:37:35 juri__ is now known as juri_
08:38:58 oish joins (~charlie@228.25.169.217.in-addr.arpa)
08:40:10 <minoru_shiraeesh> do people really create compilers with haskell or just prototypes of compilers? and then implement them in C
08:40:29 × Pickchea quits (~private@unaffiliated/pickchea) (Ping timeout: 252 seconds)
08:42:32 <DigitalKiwi> wow i know ghc has some rough spots but to call it a prototype is a bit harsh don't you think ;)
08:42:53 <tomsmeding> someone who implements a compiler in haskell only to then reimplement the thing in C is someone who thoroughly hates themselves
08:43:25 jumper149 joins (~jumper149@80.240.31.34)
08:43:26 × jumper149 quits (~jumper149@80.240.31.34) (Client Quit)
08:44:44 jumper149 joins (~jumper149@80.240.31.34)
08:45:05 × jumper149 quits (~jumper149@80.240.31.34) (Client Quit)
08:45:14 <Uniaika> yes
08:45:28 bahamas joins (~lucian@unaffiliated/bahamas)
08:46:47 <minoru_shiraeesh> I mean, if I'm not mistaken, putting esoteric experimental side-projects aside, majority of compiler are written in C.
08:46:57 <minoru_shiraeesh> *compilers
08:47:31 <raehik> lots of compilers have components written in C for various reasons but otherwise that's not true
08:47:33 <minoru_shiraeesh> I think this is because of manual memory management
08:47:44 <minoru_shiraeesh> as one of the reasons
08:47:55 <Uniaika> minoru_shiraeesh: Elm, PureScript, OCaml, Rust, NodeJS, Go are not written in C
08:48:02 <raehik> the rust compiler is self-hosted
08:48:15 <Uniaika> raehik: and was written in OCaml before that
08:48:20 Pickchea joins (~private@unaffiliated/pickchea)
08:48:23 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
08:48:29 <Uniaika> GHC was first implemented in LazyML
08:48:35 <Uniaika> Hugs on the other hand is in C
08:48:53 <aldum> rust is a lot of C++ also, isn't it?
08:48:55 <Uniaika> p. sure javac is in Java
08:49:20 <Uniaika> hmm, in absolute numbers idk, aldum
08:49:30 <Uniaika> 0.3% of C++ in their GH repo
08:49:46 <Uniaika> but there's also the library/ folder in this repo
08:51:09 jumper149 joins (~jumper149@80.240.31.34)
08:51:43 shailangsa joins (~shailangs@host86-186-136-21.range86-186.btcentralplus.com)
08:51:51 <raehik> Uniaika: wow, I had no idea the Rust compiler was written in an ML originally! very cool
08:52:07 <raehik> I'm surprised. I honestly expected C lol
08:52:27 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
08:52:42 × kamotaketsunumin quits (6769235f@103.105.35.95) (Ping timeout: 240 seconds)
08:54:15 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
08:54:28 <minoru_shiraeesh> Uniaika: "Elm, PureScript, OCaml, Rust, NodeJS, Go are not written in C" - C++ ?
08:54:28 LKoen joins (~LKoen@65.250.88.92.rev.sfr.net)
08:54:51 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
08:56:36 × drbean_ quits (~drbean@TC210-63-209-214.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in)
08:56:55 × stree quits (~stree@68.36.8.116) (Ping timeout: 260 seconds)
08:56:55 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 258 seconds)
08:57:10 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Client Quit)
08:58:32 <xsperry> minoru_shiraeesh agda and idris copmilers were written in haskell
08:58:58 × nut` quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
08:59:19 <Franciman> and that was a serious error
08:59:29 frozenErebus joins (~frozenEre@37.231.244.249)
08:59:33 <xsperry> meh
08:59:43 × gtk quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds)
08:59:45 CaptainIRS joins (9d339880@157.51.152.128)
08:59:50 <enikar> since version 1.5 the go compiler is written in go.
09:00:41 <minoru_shiraeesh> from the rust page in wikipedia: The same year, work shifted from the initial compiler (written in OCaml) to the LLVM-based self-hosting compiler written in Rust.
09:01:24 sedeki joins (~textual@unaffiliated/sedeki)
09:01:25 <merijn> minoru_shiraeesh: Elm and PureScript are written in Haskell, Ocaml is presumably written in Ocaml
09:01:25 __monty__ joins (~toonn@unaffiliated/toonn)
09:01:29 <Uniaika> minoru_shiraeesh: NodeJS is indeed made in C++ if I'm not mistaken
09:02:05 <merijn> minoru_shiraeesh: The main reason compiler components tend to be written in C is that C is the only language with a standardised ABI
09:02:23 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
09:02:25 <merijn> And once you write some component temporarily in C and it works, why bother rewriting it
09:03:04 <minoru_shiraeesh> what do they need llvm for? maybe it simplifies the work
09:03:30 <minoru_shiraeesh> can you create a compiler with java script and llvm?
09:03:38 <minoru_shiraeesh> or python and llvm
09:03:38 <merijn> Same reason with people complaining "Why is GHCs RTS written in C?!" to which the obvious is "Because the first version was and by now we have a 3 decades old, high-performance, battle-tested RTS...why would you spend a year rewriting it from scratch if the only reason is "to make it not C"?"
09:03:53 mettekou joins (~mettekou@d8D875214.access.telenet.be)
09:03:55 viluon joins (uid453725@gateway/web/irccloud.com/x-vxyigueamtfqricd)
09:04:01 <mettekou> Any advice on storing recursive algebraic data types in a relational database?
09:04:10 <merijn> minoru_shiraeesh: LLVM == the low-level virtual machine, it's a framework for generating and optimising assembly in a platform independent way
09:04:19 <merijn> mettekou: "do it manually"
09:04:49 × Unhammer quits (~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
09:05:03 <mettekou> merijn: I am doing it manually, but you have a lot of options: adjacency lists, nested sets...
09:05:22 Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer)
09:05:32 <mettekou> I was wondering whether there's a canonical way.
09:05:43 <merijn> mettekou: tbh, I would forget about ADTs when defining a database schema
09:06:27 <merijn> mettekou: In the sense of: Define a schema for the data you have (and maybe the operation you'll need) and then figure out how to map between that and ADTs
09:06:39 <mettekou> merijn: I don't know, the sum and product types map quite well, if you use the same approach you would use for classes in a class hierarchy in an object-oriented programming language.
09:06:47 <merijn> replicating ADTs in your database sounds way to tightly coupled
09:07:02 <mettekou> merijn: I'm actually trying to store ASTs and program executions for some really minimal DSL.
09:07:12 × vicfred quits (vicfred@gateway/vpn/mullvad/vicfred) (Quit: Leaving)
09:08:08 kuribas joins (~user@ptr-25vy0i98ky9sotgacau.18120a2.ip6.access.telenet.be)
09:08:09 <merijn> That sounds...odd? But I'd probably have something like 1 table for the AST itself and 1 table for each type of node, the AST table just referencing those
09:08:33 <aldum> tables are a product type of sorts ;)
09:08:45 <merijn> So, like, a table of binary operators has an id, operator and 2 references back into the AST table
09:08:52 <sedeki> mettekou i'm here as well (not only in the postgres channel).
09:09:09 <mettekou> merijn: That's the adjacency list approach, which is what I would do as well.
09:09:23 <mettekou> With a recursive CTE, it's easy to query.
09:09:28 <merijn> Morbidly curious why you wanna store an AST into a database, though :>
09:09:35 michalz joins (~user@185.246.204.46)
09:10:06 stree joins (~stree@68.36.8.116)
09:10:37 <mettekou> merijn: I'm modelling industrial processes using a DSL which is based on Gilbreth-style flow process charts.
09:11:36 <mettekou> merijn: Industrial engineers do not like text-based languages, so I'm building a flow process chart editor which also makes these charts executable programs in the DSL.
09:12:04 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
09:12:22 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
09:13:14 <Maxdamantus> If you were creating a text-based language, would you still be trying to store the AST in the database?
09:13:41 <Maxdamantus> ("in the database" presumably means something other than "as a single blob of data"(
09:13:44 <Maxdamantus> ))
09:14:14 <mettekou> Maxdamantus: Yes, because I want to link executions of the process steps to the process steps.
09:14:40 <mettekou> The alternative is indeed JSON/XML/BLOB or files, which is just moving the linking problem to the application code.
09:15:48 <mettekou> Not smart, in my opinion, since an important advantage of using a relational database is delegating referential integrity to it.
09:15:54 <merijn> mettekou: Oooh
09:16:10 <Maxdamantus> I find it hard to imagine that it would be simpler to maintain these things in a relational database, otherwise people would be generally using relational database when writing compilers.
09:16:28 <merijn> mettekou: "Other people who liked process flowcharts and Haskell also liked: Clean" ;)
09:16:30 <mettekou> Maxdamntus: I don't think so, they don't require persistence.
09:16:56 <merijn> mettekou: You should lookup itasks
09:17:00 <Maxdamantus> mettekou: the source files persist.
09:17:25 <merijn> mettekou: https://clean.cs.ru.nl/ITasks
09:17:36 <mettekou> merijn: I'm doing it in F#, but it's a general functional programming problem, so I asked about it here, since there's more activity here. :P
09:17:56 <Maxdamantus> mettekou: you're presumably treating contents of the database as source code, rather than the contents of a text/JSON/binary string/file.
09:18:10 Aquazi joins (uid312403@gateway/web/irccloud.com/x-bmhbjzvaxfjgfshr)
09:18:11 cafce25 joins (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de)
09:18:25 <merijn> mettekou: Well, they literally have a pre-built DSL generating GUIs etc for exactly the kinda stuff you're talking about ;)
09:18:47 <merijn> mettekou: So if your adventurous it could save you weeks/months of work :p
09:19:04 <Maxdamantus> Having worked on something similar, I imagine you would run into issues at some point regarding versioning of the code, including merging.
09:19:58 <Maxdamantus> When people work on the code, they'll probably think in terms of a particular snapshot and make changes to that, then at some point those changes will be merged into the master copy.
09:20:37 <mettekou> Maxdamantus: They define the process once and only revise details, kind of important for production lines.
09:21:00 <mettekou> A single edit after the production line runs already makes them nervous.
09:21:09 <Maxdamantus> and at various stages, you have different "versions" of this code. That will be a bit tricky I think to represent in a RDBMS. Probably a lot simpler to just keep each version of the code in a big string (or JSON/XML structure, whatever)
09:22:24 <Maxdamantus> Right, I would also be nervous using a system built like that.
09:24:08 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
09:24:27 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
09:24:33 coni joins (d4338494@212-51-132-148.fiber7.init7.net)
09:24:35 <Maxdamantus> another reason that the single-version blob approach is useful is that you know that a single version of the entire code is represented by just a string, which in the worst case could be understood by someone technical enough, but you just have to optimise the way you view that string by producing appropriate tooling, so tools that just render that string as a graph, etc.
09:25:28 × noCheese quits (~nocheese@unaffiliated/nocheese) (Quit: I'm out!)
09:25:29 <Maxdamantus> RDBMSes are potentially useful when it doesn't make sense to look at the entire dataset as a unit.
09:25:51 noCheese joins (~nocheese@gw2.aibor.de)
09:25:51 × noCheese quits (~nocheese@gw2.aibor.de) (Changing host)
09:25:51 noCheese joins (~nocheese@unaffiliated/nocheese)
09:27:16 <mettekou> Maxdamantus: "Right, I would also be nervous using a system built like that." - What's that supposed to mean?
09:27:56 fendor joins (~fendor@91.141.0.13.wireless.dyn.drei.com)
09:28:00 Ranhir joins (~Ranhir@157.97.53.139)
09:28:58 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
09:29:30 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 268 seconds)
09:33:33 <Maxdamantus> mettekou: I find it hard to trust systems that don't have some clear representation of the overall code.
09:34:11 <Maxdamantus> mettekou: for a typical text-based programming language, that can simply be the text that makes up each source file.
09:34:50 <Maxdamantus> mettekou: but even for a graphical programming system, there should be something analogous. Something that can at least be serialised into such a source file.
09:35:11 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 260 seconds)
09:35:41 <Maxdamantus> So someone can capture the state of the system into a file, and any other representation can be seen as derived from the contents of that file.
09:36:11 dhouthoo joins (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
09:36:24 <mettekou> Maxdamantus: I don't see why a relational database is not trustworthy in that respect, and flat files are.
09:37:56 <mettekou> mettekou: I'd hate to do reporting queries over flat files, by the way. Even with PostgreSQL's excellent JSON support, for example, I would still hate to do reporting queries over JSON.
09:38:52 <mettekou> I just realized that that's why I want a relational database and compiler writers don't: I need to store executions and do reporting based on them.
09:40:18 <Maxdamantus> Well, your original question was about representing ASTs in relational databases. Unless the approach is to just store the entire tree in a string (which is what I would advocate), you're going to be creating some representation that is harder to use than regular AST structures you would create in memory.
09:40:54 <Maxdamantus> since the way you normally represent ASTs is as some sort of recursive structure, which doesn't inherently work in an RDBMS.
09:42:19 <Maxdamantus> Things like "counting AST nodes" *might* be simpler, but I think the usual things you expect to do with ASTs will likely be harder, since you've got a less direct representation.
09:42:29 <merijn> Maxdamantus: I disagree, recursive things work very well in relational databases
09:42:40 <mettekou> Maxdamantus: an adjacency list works fine with a recursive CTE query.
09:42:48 <merijn> Recursive CTEs are great
09:43:02 <merijn> SQLite has a bunch of nice example applications of recursive CTEs for Fossil
09:43:32 <mettekou> merijn: I'm using PostgreSQL, so I have good recursive CTE support as well.
09:43:57 × sedeki quits (~textual@unaffiliated/sedeki) (Quit: Textual IRC Client: www.textualapp.com)
09:45:51 lotuseater joins (~user@p200300e78705e200e5bac9463b911ab3.dip0.t-ipconnect.de)
09:47:04 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
09:47:04 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
09:47:20 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
09:47:41 mikoto-chan joins (~anass@gateway/tor-sasl/mikoto-chan)
09:48:43 × Pickchea quits (~private@unaffiliated/pickchea) (Ping timeout: 260 seconds)
09:51:14 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 245 seconds)
09:51:23 × mice-user quits (b4960d8b@180-150-13-139.b4960d.syd.static.aussiebb.net) (Ping timeout: 240 seconds)
09:51:31 p4trix joins (~p4trix@19.red-83-49-45.dynamicip.rima-tde.net)
09:51:56 DavidEichmann joins (~david@47.27.93.209.dyn.plus.net)
09:52:31 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
09:52:53 clog joins (~nef@bespin.org)
09:53:18 <mettekou> merijn: iTasks seems interesting, but it may be overkill for my use case (really, the DSL I have doesn't have procedural abstraction, not even branching currently, it's very close to a flow process chart, with only 3 types of nodes).
09:53:33 haskellstudent joins (~quassel@213-225-9-45.nat.highway.a1.net)
09:54:30 kiweun joins (~kiweun@2607:fea8:2a62:9600:615f:d2ef:3b34:54be)
09:54:40 <Maxdamantus> merijn: still seems like unnecessary cognitive overhead. That's all stuff that is abstracted away when dealing with structures in normal programming languages.
09:54:58 <merijn> It should have branching? Pretty sure I saw that years ago already during one of the NL-FP days...at any rate, you can at least steal their design ;)
09:55:09 <Maxdamantus> merijn: when writing recursive structures in Haskell or whatever, you're not having to produce the pointer values for cross-referencing. You can't even inspect them.
09:55:26 <merijn> Maxdamantus: I don't think it's overhead at all, I find recursive CTEs (and really all of SQL) very natural with a purely functional mindset
09:55:49 <merijn> Maxdamantus: heh?
09:55:50 <Maxdamantus> merijn: so why do programming languages normally abstract these things away?
09:56:23 <merijn> Maxdamantus: Have you seen how those recursive CTEs look like? They're...like...the most purely functional thing you can imagine :p
09:56:43 <mettekou> merijn: Yeah, iTasks has branching and much more, I was talking about my own DSL. It doesn't have anything fancy at all.
09:57:08 <kuribas> merijn: but representing stuff like ASTs in a database involves many small tables, and corresponding overhead. I'd just serialize to JSON, and do any processing in haskell.
09:57:08 <mettekou> merijn: No procedural abstraction, no branching, and just 3 "statements" or "expressions".
09:57:37 <merijn> Maxdamantus: See the 3.2, 3.3 and 3.4 examples here: https://sqlite.org/lang_with.html
09:57:38 <mettekou> kuribas: That works fine until you want reporting over executions.
09:57:47 <merijn> kuribas: WHo says "many small tables"
09:57:55 <merijn> kuribas: How many nodetypes does your AST have?
09:58:02 <merijn> kuribas: I'd say 20 is already way high
09:58:06 <Maxdamantus> merijn: admittedly, not, sorry. But if I just imagine fundamentally what the model of a relational datastore is, it seems like if you want to represent recursive things, you need to be exposed somehow to things that are for good reason abstracted away already in typical programming languages.
09:58:14 <merijn> kuribas: And you can probably compact several nodetypes into the same tables
09:58:44 <kuribas> merijn: I was just thinking about my previous company, where they implemented a static schema (for taxes) using many tables..
09:58:57 <kuribas> merijn: it was more than 20 I believe...
09:59:08 <merijn> kuribas: For an AST?
09:59:16 <Maxdamantus> (eg, creating identifiers to be used essentially as pointers)
09:59:20 <tdammers> SQL schemas in the wild are a never-ending source of cruel entertainment
09:59:24 × kiweun quits (~kiweun@2607:fea8:2a62:9600:615f:d2ef:3b34:54be) (Ping timeout: 258 seconds)
09:59:31 <kuribas> merijn: it was a static schema for tax reports.
09:59:47 <merijn> kuribas: How does that relate to the number of tables you'd need for an AST?
09:59:55 <merijn> Also, many tables isn't *inherently* bad
09:59:58 × mkDoku quits (~TheMule@aftr-37-201-195-134.unity-media.net) (Ping timeout: 265 seconds)
10:00:07 <kuribas> merijn: because an AST tend to have many branches as well.
10:00:09 <merijn> As with all tech things: "It Depends (TM)"
10:00:30 <tdammers> my favorite antipattern in this regard is to create tables dynamically, and store their names in columns, as quasi-foreign keys
10:00:38 <merijn> Anyway, the freshly baked bread for lunch is done and it smells better than any tech discussion ;)
10:00:39 <Maxdamantus> I really can't imagine myself looking at a spreadsheet denoting an AST and seeing something more obvious than an AST represented in JSON.
10:01:09 <Maxdamantus> if a spreadsheet is denoting an AST with a bunch of cross-referencing identifiers, I can probably transform it into some JSON that is easier to understand at a glance.
10:01:19 Rudd0 joins (~Rudd0@185.189.115.108)
10:01:26 <kuribas> merijn: the primary reason for using database tables is searchability.
10:02:05 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 250 seconds)
10:02:07 <kuribas> if you don't need that, I don't see any reason at all for dividing you structures into tables.
10:02:54 <kuribas> the haskell typesystem already takes care of consistency.
10:03:09 <mettekou> kuribas: The primary reason for using database tables is eliminating data redundancy, not searchability.
10:03:13 × tomboy64 quits (~tomboy64@unaffiliated/tomboy64) (Ping timeout: 260 seconds)
10:03:18 <tdammers> ^
10:03:57 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
10:04:02 <kuribas> mettekou: why would you have data redundancy in a static scheme, or AST?
10:04:41 <mettekou> kuribas: Network and hierarchical databases (i.e. CODASYL) had indices before Codd came up with the relational model, so they were searchable. The problems were access path dependence and data redundancy.
10:05:22 <mettekou> kuribas: I mean data redundancy in the relational model sense, i.e. the result of unnormalized data.
10:05:31 <tdammers> and in fact modern tree-shaped noSQL databases have the same problem
10:05:43 <tdammers> (or document databases, for that matter)
10:05:52 <mettekou> tdammers: Indeed, as Stonebraker pointed out in "Those that do not learn from the past..."
10:06:26 <tdammers> if you're smart about noSQL, you realize that that's a tradeoff, and that tradeoff may, under certain circumstances, be worth it
10:06:50 <tdammers> but it certainly ruins the idea that noSQL databases are unambiguously superior
10:06:52 Tops2 joins (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de)
10:06:58 <aldum> if you are smart, you realize everythng is a tradeoff, there are no solutions :)
10:07:28 <tdammers> there are solutions alright, it's just that as an adult, you realize at some point that "solution" doesn't mean what you thought it did
10:07:36 <kuribas> tdammers: I just wonder what advantage they have over storing JSONs in a RDBMS.
10:07:59 <mettekou> tdammers: The problem with the NoSQL term is that MongoDB ends up together with Apache Cassandra and Redis.
10:08:28 <mettekou> Whereas relational or SQL is pretty narrow as a category, NoSQL is just anything else.
10:08:29 <tdammers> mettekou: agree completely. couchdb has about as much in common with mongodb as it does with postgres, if not less
10:09:15 <kuribas> mettekou: right, and a good NoSQL database would be complementary to a RDBMs, not a replacement.
10:10:00 royal_screwup211 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
10:10:11 <tdammers> kuribas: not necessarily. they do serve the same general concern, that of persisting large data sets for efficient partial querying and modification
10:10:47 <kuribas> tdammers: but a RDBMs works well for most cases.
10:11:04 <kuribas> I often think people want NoSQL because they don't understand SQL.
10:14:00 <tdammers> because they don't understand SQL, because they don't understand NoSQL, because they believe in unicorns and silver bullets, because they are practicing hype-driven development, because management makes them, ...
10:15:51 <Maxdamantus> in all seriousness though, why are compilers not using SQL?
10:16:15 <Maxdamantus> 21:16:10 < Maxdamantus> I find it hard to imagine that it would be simpler to maintain these things in a relational database, otherwise people would be generally using relational database when writing compilers.
10:16:19 × shalokshalom quits (~quassel@2a02:1748:dd5e:7f60:cf49:8384:7c93:3106) (Remote host closed the connection)
10:16:35 shalokshalom joins (~quassel@2a02:1748:dd5e:7f60:cf49:8384:7c93:3106)
10:16:42 <Maxdamantus> If these relational models are so great, why not replace general data structures in programming languages with relational ones?
10:17:39 <Maxdamantus> You almost never see relational patterns used in memory. They're normally just used for querying larger sets of data stored outside of the main program's memory.
10:18:03 <kuribas> Maxdamantus: I sometimes use a relational model in haskell, for example storing IDs and a map of ID to the object.
10:18:06 <tdammers> relational data structures in memory are a thing in game programming
10:18:09 <haskellstudent> kuribas: do you think high availability requirements is a legitimate reason because of schema migrations? if i store everything as json in a kv store or a kv table in a rdbms i never have to do a schema migration in the db and pause it
10:19:02 <kuribas> haskellstudent: well, you may need to do migration if your datatype that the JSON represents changes.
10:19:21 <haskellstudent> sure, but not in the db
10:19:56 <kuribas> depends, you may want to make sure that the JSON types all have the same structure.
10:20:06 <kuribas> which would require migration
10:20:49 <haskellstudent> which means i can have a newer version of a service write and read a newer version of e.g. an event json in the db while the older versions just ignore any fields in the json they dont know yet.
10:21:05 × coni quits (d4338494@212-51-132-148.fiber7.init7.net) (Quit: Connection closed)
10:21:24 <Maxdamantus> tdammers: I feel like even in game programming, that model ("entity" something something) seems mostly useful if you're intending to share the state incrementally across a network at some point.
10:21:59 <Maxdamantus> So it still doesn't seem inherently better as an in-memory model.
10:22:09 <kuribas> haskellstudent: that will not always work
10:22:15 × royal_screwup211 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
10:22:15 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
10:22:27 <tdammers> Maxdamantus: the main reason this is done is performance, and specifically, cache performance. The idea is that you lay out your data structures such that for the most performance critical operations, the data you need is laid out linearly in memory, so you can zoom over it with the minimum amount of cache misses
10:22:35 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
10:22:46 × rdivyanshu quits (uid322626@gateway/web/irccloud.com/x-zbthekzvhrqpupmy) (Quit: Connection closed for inactivity)
10:23:00 <haskellstudent> kuribas: can you give an example where it would not work?
10:23:53 <tdammers> the alternative, the classic object graph, is really really bad for cache performance: when traversing a list of objects, you're walking a list of pointers to arbitrary heap locations, and each of those pointers is relatively likely to cause a cache miss. And if those objects then contain pointers to other objects, it gets worse.
10:24:00 <kuribas> haskellstudent: if the type changes in incompatible ways
10:24:52 <haskellstudent> kuribas: of course if i removed a field from the json event for example the older services could no longer read it, but they can "ignore" it (logging a parsing error) while they are still running until all old versions of the service are upgraded
10:24:59 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
10:25:03 <tdammers> the schema migration problem exists regardless of sql or not-sql
10:25:08 × Guest66883 quits (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
10:25:11 <kuribas> this
10:25:15 tomboy64 joins (~tomboy64@unaffiliated/tomboy64)
10:25:16 <tdammers> and the mitigation strategies are largely the same too
10:25:28 <tdammers> the disadvantage of a "schema-less
10:25:33 <tdammers> " store is that the schema is implicit
10:25:45 Alleria_ joins (~AllahuAkb@2603-7000-3040-0000-51cb-91e5-ecfa-0406.res6.spectrum.com)
10:25:57 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
10:26:20 <kuribas> tdammers: yeah, it's the same problem with clojure. The idea is that you don't need schemas and static structure, but you still end up with it, just in an implicit and ad-hoc way.
10:26:22 <haskellstudent> tdammers: not necessarily. its can be very explicit, its just defined e.g. in haskell rather than both in the db and in haskell
10:26:57 <tdammers> if you define the schema, then it's no longer schema-less, is it
10:27:27 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
10:27:28 × lawt quits (~lawt@c-73-151-3-92.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
10:27:30 <haskellstudent> correct, i never said it would be. there is no such thing. but i dont need to pause the db to do a migration, that was the only point.
10:28:09 <tdammers> a decent rdbms can do schema modifications without downtime too
10:28:27 <tdammers> you just can't have inconsistent data at any point
10:28:36 <tdammers> like, half of the records in the old schema and the other half in the new
10:28:42 <tdammers> but that's a design feature, really
10:29:31 <kuribas> tdammers: doing a huge transaction to migrate may slow the DB down though...
10:30:09 <tdammers> sure. but so can a huge sweep over a "schema-less" database that changes all the records (documents, whatever) to match the new structure
10:30:37 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
10:32:01 × Alleria_ quits (~AllahuAkb@2603-7000-3040-0000-51cb-91e5-ecfa-0406.res6.spectrum.com) (Ping timeout: 245 seconds)
10:32:50 <haskellstudent> tdammers: but in the case of e.g. an immutable event history that is what i might want. in an sql db i would probably have to create have to create a new table then with the new "incompatible" version. but then i would end up with another table for each such schema change that i ever made.
10:33:09 <kuribas> and then, how do you synchonize the changes in the DB with the service version?
10:34:18 <kuribas> or do let the service detect the previous database version, and handle it gracefully?
10:35:10 <olligobber> No instance for (Language.Haskell.TH.Syntax.Lift TH.Type)
10:35:12 <olligobber> >:(
10:35:21 <haskellstudent> kuribas: service v1 keeps reading v1 events as usual, service v2 still knows how to read the v1 events but also v2
10:35:27 <tdammers> note that it is perfectly possible to implement many changes to an SQL schema in a backwards-compatible way
10:36:00 <tdammers> so what exactly is the difference between v1 and v2? typically, such a change will be "widening" rather than completely changing the schema
10:36:13 <kuribas> tdammers: I suppose you keep your schemas backward compatible unless it because too messy, then run a breaking migration?
10:36:15 <tdammers> add a field, extend a field type to support more values, etc.
10:36:28 <haskellstudent> typically, yes. but we were talking about incompatible chanegs
10:36:37 <haskellstudent> (deleting or renaming a field)
10:36:56 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
10:36:57 <tdammers> and even when you make "breaking" changes, you can often *still* uphold backwards compatibility, e.g., by providing views that have the same structure and name as the old table
10:37:30 <tdammers> deleting fields: don't delete, make optional.
10:37:38 <tdammers> renaming is just delete + add
10:37:42 <tdammers> so just do that
10:37:58 <tdammers> add a column, make the old one optional, and maybe add a constraint saying you can only have one or the other, but not both
10:38:05 <tdammers> or do the "compatibility view" trick
10:38:39 <kuribas> tdammers: so you use a stored procedure to implement the old table "view"?
10:40:05 <tdammers> no, just a plain view will usually work
10:40:09 <tdammers> except for inserts ofc
10:40:34 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
10:40:41 <kuribas> how does that work for JSON?
10:41:02 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:41:16 <tdammers> JSON? I'm talking about relational schemas. JSON you put in there is pretty much opaque.
10:42:11 × frozenErebus quits (~frozenEre@37.231.244.249) (Ping timeout: 240 seconds)
10:43:48 olligobber1 joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
10:44:26 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 265 seconds)
10:46:08 <olligobber1> merijn, hey, why can't I lift a type?
10:46:21 <olligobber1> `No instance for (Language.Haskell.TH.Syntax.Lift TH.Type)'
10:46:35 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
10:46:58 <olligobber1> lol
10:46:59 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:47:03 <olligobber1> merijn, wb
10:47:18 olligobber1 is now known as olligobber
10:48:20 <haskellstudent> tdammers: ok so zero downtime migrations might be possible, but it seems like there are still traps and while they could be avoided it seems more complicated than just having a kv store/table for my events so i know exactly how the system will behave. example: https://gocardless.com/blog/zero-downtime-postgres-migrations-the-hard-parts/
10:50:16 × MindlessDrone quits (~MindlessD@unaffiliated/mindlessdrone) (Ping timeout: 268 seconds)
10:51:35 royal_screwup211 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
10:51:55 MindlessDrone joins (~MindlessD@unaffiliated/mindlessdrone)
10:51:57 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
10:53:06 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
10:54:06 rdivyanshu joins (uid322626@gateway/web/irccloud.com/x-frmbfjisqfxmhgqn)
10:55:38 jpds joins (~jpds@gateway/tor-sasl/jpds)
10:56:24 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
10:57:04 <olligobber> merijn, can I have template haskell help pls?
10:57:21 ukari joins (~ukari@unaffiliated/ukari)
10:58:06 × gnumonic quits (~gnumonic@c-73-170-91-210.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
10:58:25 <merijn> olligobber: Eh, maybe? I'm not really a TH expert :p
10:58:43 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
10:58:45 × NinjaTrappeur quits (~ninja@unaffiliated/ninjatrappeur) (Quit: WeeChat 3.1)
10:58:48 <olligobber> merijn, I'm getting No instance for (Lift Type)
10:58:54 <olligobber> `No instance for (Language.Haskell.TH.Syntax.Lift TH.Type)'
10:59:04 <merijn> Oof...cursed error
10:59:26 NinjaTrappeur joins (~ninja@unaffiliated/ninjatrappeur)
10:59:34 <olligobber> mmhmm
10:59:40 <merijn> I mean, seems perfectly normal there is no Lift instance for Type, but I dread the code that requires that :p
11:00:00 Alleria joins (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com)
11:00:08 <olligobber> I'm just trying to take in a function's name and get its type in an Exp
11:00:23 Alleria is now known as Guest63000
11:00:25 <olligobber> so I guess I want to lift the string instead of the type?
11:01:07 <olligobber> also, why wouldn't there be a lift instance for type?
11:01:11 × jonathanx quits (~jonathan@h-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
11:01:34 <olligobber> lol can I just add deriveLift $ mkName "Type" to my source?
11:01:35 jonathanx joins (~jonathan@h-176-109.A357.priv.bahnhof.se)
11:01:40 <merijn> Lift is the typeclass for "values that can be written as source literals"
11:01:51 <merijn> Type is not something that has values
11:02:02 <olligobber> isn't it?
11:02:05 <merijn> Sounds like you want something like reify or something
11:02:10 <merijn> olligobber: no?
11:02:20 <merijn> What values does type have?
11:02:30 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
11:02:35 <olligobber> https://hackage.haskell.org/package/template-haskell-2.17.0.0/docs/Language-Haskell-TH.html#g:22
11:02:52 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
11:03:05 <merijn> Wait
11:03:11 <olligobber> VarT (Name "Int") ?
11:03:18 <merijn> You're constructing TH *in* TH?
11:03:27 <olligobber> no?
11:03:41 <merijn> olligobber: Then you're very confused ;)
11:04:00 mkDoku joins (~TheMule@aftr-37-201-195-134.unity-media.net)
11:04:01 <olligobber> D:
11:04:04 <merijn> olligobber: Let's rewind
11:04:06 × Guest63000 quits (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com) (Ping timeout: 245 seconds)
11:04:30 <merijn> So, we have Template Haskell which is code, that runs at compile time and produces an AST (that gets compiled into the final program)
11:04:40 <olligobber> yes
11:04:43 <merijn> That AST is represented as Type
11:05:12 <olligobber> part of it is, sure
11:05:20 frozenErebus joins (~frozenEre@37.231.244.249)
11:05:38 Alleria_ joins (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com)
11:05:49 <olligobber> oh
11:05:51 <olligobber> hm
11:05:52 <merijn> The Lift class has, essentially, 1 function: "liftTyped :: t -> m Exp"
11:06:11 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: No route to host)
11:06:13 × acidjnk_new quits (~acidjnk@p200300d0c72b95396118d8d56ee70ad6.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
11:06:19 <merijn> i.e. "given a value (at TH execution time), give me the AST representating that value"
11:06:40 <olligobber> I fixed it!
11:06:47 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
11:06:48 <olligobber> now I get a different error
11:07:01 <sshine> merijn, "liftTyped" as in "it passed GHC's type-check"?
11:07:03 <merijn> But, trying to Lift "Type" implies you are trying to construct the AST of a TH AST at compile time
11:07:07 × rprije quits (~rprije@59-102-63-15.tpgi.com.au) (Ping timeout: 260 seconds)
11:07:12 <olligobber> yeah I was
11:07:25 <merijn> sshine: Well, there's "two" THs in GHC
11:07:48 <olligobber> instead I used a let bind to make it lift the string instead of the Type
11:07:52 <merijn> sshine: There's regular old Template Haskell, which is a Haskell AST that gets compiled, but that AST might be broken and have type errors
11:08:10 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
11:08:12 <merijn> sshine: There's also Typed TH which guarantees the TH generated AST is well-typed
11:08:18 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 240 seconds)
11:08:25 <sshine> merijn, cool!
11:08:33 <merijn> sshine: So really it's more like "liftTyped :: t -> Q (TExp t)"
11:08:34 <olligobber> yeah, I can't use typed th here
11:08:44 <merijn> sshine: vs "lift :: t -> Q Exp"
11:08:50 <sshine> merijn, so supposedly that reduces the C++-like type-error-wall-of-text scenarios?
11:09:12 <merijn> sshine: It means that you get the type error in your TH code, rather then the *generated* code, yeah
11:09:19 <merijn> sshine: Also, it allows some funky hacks
11:09:31 <merijn> sshine: Because you can smuggle typeclass instances backwards!
11:09:56 <olligobber> merijn, so I was basically doing [| show t |] where t :: Type, but now I'm doing let showt = show t in [| showt |]
11:10:08 <sshine> merijn, >_<
11:10:09 <merijn> @hackage validated-literals
11:10:09 <lambdabot> https://hackage.haskell.org/package/validated-literals
11:10:35 <merijn> sshine: I take a look at the "final" type, then smuggle the typeclass from that back to compile time to do validation
11:11:16 <merijn> I need to update it for 9.0, 9.2 and TH 2.17 though >.>
11:11:17 <olligobber> ok, now to make "ForallT [KindedTV a_6989586621679019993 StarT,KindedTV v_7566047373982443483 StarT] [] (AppT (AppT (ConT Functional.Lambda.Typed.TypedLambda) (AppT (AppT ArrowT (VarT a_6989586621679019993)) (VarT a_6989586621679019993))) (VarT v_7566047373982443483))" into something readable
11:11:58 <sshine> merijn, validated-literals is a good example of somewhere where the type-level fu is pretty encapsulated, and the exposed interface is clean and Boring in the exciting way. :-D
11:12:08 <merijn> sshine: Thanks :D
11:12:13 <merijn> That was the goal
11:12:23 <merijn> tbh
11:12:25 <olligobber> yeah, validated-literals is super cool
11:12:29 <merijn> the implementation is trivial
11:12:34 <sshine> I've seen it before. I just haven't used it yet. so nice to get reminded.
11:13:04 jpds joins (~jpds@gateway/tor-sasl/jpds)
11:14:05 <merijn> I'm trying to sneak in enough hacking time to fix Haskell-CI to my liking for GitHub Actions so I can restore CI testing on my repos and update for GHC 9.0 and later, but coding energy is low stuck at home all year >.>
11:14:26 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
11:14:41 × Alleria_ quits (~textual@2603-7000-3040-0000-e045-d645-2e21-7cec.res6.spectrum.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:14:56 <olligobber> ah, pprint, nice: `forall (a_0 :: *) (v_1 :: *) .Functional.Lambda.Typed.TypedLambda (a_0 -> a_0) v_1'
11:16:05 <merijn> olligobber: I can't help but be suspicious of showing a type, then quoting that? Really seems like you'd want something like Name or reify instead?
11:16:32 <olligobber> merijn, I am using reify to get the type
11:17:05 <olligobber> and I'm gonna use pprint instead of show
11:17:05 <merijn> olligobber: Why the show, though?
11:17:11 <olligobber> so it's a string
11:17:17 <merijn> What's gonna happen with that string?
11:17:19 <olligobber> print
11:17:42 <merijn> So you're trying to print the string of the generated TH at compile time?
11:17:43 × xourt quits (d4c620ea@212-198-32-234.rev.numericable.fr) (Ping timeout: 240 seconds)
11:17:48 <olligobber> no
11:17:55 <olligobber> I'm trying to print the type of a function
11:18:04 <olligobber> at runtime
11:18:11 × stree quits (~stree@68.36.8.116) (Ping timeout: 240 seconds)
11:18:44 <merijn> olligobber: A polymorphic function, I assume?
11:18:50 <olligobber> yeah
11:18:55 <merijn> Else you could just use typeRep
11:19:16 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 268 seconds)
11:19:18 <olligobber> oh, I don't just want the type of the thing
11:19:30 <olligobber> the type is TypedLambda t v, and I just want to print t
11:20:01 <olligobber> and it worked! wow
11:24:01 <olligobber> merijn, see: https://gist.github.com/olligobber/a8931ae1ed972e6d524063b079dcdefb
11:24:08 <olligobber> works fine
11:24:42 <olligobber> for one example
11:26:06 <merijn> olligobber: Careful an elder god doesn't fry your brain, staring into that abyss ;)
11:26:17 <olligobber> it's fine
11:26:46 <merijn> That's what all Lovecraft protoganists think before descending into gibbering madness ;)
11:27:26 acidjnk_new joins (~acidjnk@p200300d0c72b95396118d8d56ee70ad6.dip0.t-ipconnect.de)
11:27:46 <olligobber> I chose this path when I started learning haskell
11:28:44 <olligobber> though better variable names from pprinting the types would be nice
11:28:46 <merijn> olligobber: Oh, I am not saying you *shouldn't*, I learned a lot messing with dark arts, but it helps to be aware that what you are doing is in fact dark voodoo :p
11:30:00 <olligobber> oh yeah, typing in "compose" and it returning "(b_0 -> c_1) -> (a_2 -> b_0) -> a_2 -> c_1" and "(λabc.a(bc))" is definitely voodoo
11:30:16 <olligobber> I just wish the voodoo had less unnecessary underscores
11:30:48 <Logio> extra precision is needed when dealing with demons
11:31:30 stree joins (~stree@68.36.8.116)
11:32:23 <merijn> olligobber: I'm still fond of this horror: https://gist.github.com/merijn/6130082 ;)
11:32:46 <merijn> olligobber: You need the underscores because naming things is hard, even if you're a compiler!
11:34:03 <Logio> I'm tempted to press the "report abuse" button on the gist
11:34:09 malumore joins (~malumore@151.62.116.133)
11:35:10 <merijn> Logio: Now realise I wrote that in 2013
11:35:14 <merijn> ;)
11:35:26 <merijn> You can do much worse now :p
11:36:24 <olligobber> merijn, wait, so that is the identity function but it doesn't work on () or Int?
11:36:39 <merijn> olligobber: YEs
11:36:42 <olligobber> o_O
11:36:43 <merijn> Well
11:36:46 × minoru_shiraeesh quits (~shiraeesh@109.166.56.44) (Ping timeout: 240 seconds)
11:36:56 <olligobber> also, I fixed the underscore thing, why can't ghc do it too?
11:36:57 <merijn> olligobber: There's...some catches
11:37:01 <olligobber> oh no
11:37:15 <merijn> olligobber: As in, if you write "1" GHC can't tell if it's Int or not
11:37:22 <olligobber> right
11:37:30 <merijn> So (at least in 2013) it'd throw a hissy fit on polymorphic literals
11:37:34 <olligobber> lol
11:37:47 <merijn> But at least it was a compile time hissy fit!
11:38:23 <merijn> You could probably write something better
11:38:33 <olligobber> so I can't get rid of the underscores?
11:38:37 × CitizenSnips quits (~CitizenSn@irc.refl.club) (Quit: ZNC 1.8.2 - https://znc.in)
11:38:44 <merijn> This is also using a hacky ~ abuse to force the error, because there was no custom type errors at the time
11:38:48 <merijn> olligobber: Probably no
11:38:52 <olligobber> :(
11:39:02 <merijn> olligobber: those type variable names are an internal detail of GHC
11:39:37 <merijn> I mean, you could write code to rename all the type variables before printing...but that seems excessive >.>
11:39:40 <olligobber> I've written a function that takes a traversable of ords and replaces each thing with a distinct name before though
11:40:02 CitizenSnips joins (~CitizenSn@irc.refl.club)
11:40:04 <olligobber> fine, underscores are ok
11:40:14 <olligobber> the point of using template haskell here is to be lazy
11:41:58 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
11:42:19 × royal_screwup211 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
11:42:19 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
11:42:30 geekosaur joins (ac3a53f2@172.58.83.242)
11:42:38 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
11:42:39 <olligobber> as for dark magic, I type "fix", I get "(a_0 -> a_0) -> a_0" and "(λa.(λb.bb)(λb.a(bb)))"
11:46:25 Sorna joins (~Sornaensi@077213203030.dynamic.telenor.dk)
11:46:32 <merijn> I am both impressed and appalled :p
11:46:39 <olligobber> :D
11:47:11 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
11:49:38 <olligobber> oh no, GHC.Types.Bool?
11:49:41 × Sornaensis quits (~Sornaensi@79.142.232.102.static.router4.bolignet.dk) (Ping timeout: 252 seconds)
11:49:42 <olligobber> I just want Bool!
11:50:06 maroloccio joins (~marolocci@pousada3ja.mma.com.br)
11:51:43 Alleria_ joins (~AllahuAkb@2603-7000-3040-0000-51cb-91e5-ecfa-0406.res6.spectrum.com)
11:52:27 × dougsko quits (~dougsko@139.28.218.148) (Remote host closed the connection)
11:53:19 × v01d4lph4 quits (~v01d4lph4@223.177.183.124) (Read error: Connection reset by peer)
11:53:48 v01d4lph4 joins (~v01d4lph4@223.177.183.124)
11:55:21 kiweun joins (~kiweun@2607:fea8:2a62:9600:9c30:fa43:beb0:8b1b)
11:56:01 drbean_ joins (~drbean@TC210-63-209-216.static.apol.com.tw)
11:58:45 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
11:59:57 × kiweun quits (~kiweun@2607:fea8:2a62:9600:9c30:fa43:beb0:8b1b) (Ping timeout: 250 seconds)
12:00:32 × frozenErebus quits (~frozenEre@37.231.244.249) (Ping timeout: 246 seconds)
12:02:10 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:03:27 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
12:03:38 urodna joins (~urodna@unaffiliated/urodna)
12:06:01 × malumore quits (~malumore@151.62.116.133) (Ping timeout: 260 seconds)
12:08:00 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
12:09:11 × haskellstudent quits (~quassel@213-225-9-45.nat.highway.a1.net) (Ping timeout: 260 seconds)
12:15:11 manuel joins (~manuel@185.204.1.185)
12:15:38 <olligobber> huh, is regex not in haskell by default?
12:16:04 <geekosaur> we tend to prefer parsers
12:16:16 <olligobber> fair, but I'm doing hacky stuff
12:16:17 Alleria joins (~textual@mskresolve-a.mskcc.org)
12:16:19 <yushyin> 'in haskell'? we have regex libs on hackage
12:16:30 <olligobber> yeah, but it isn't in base
12:16:41 Alleria is now known as Guest96189
12:17:03 <geekosaur> base is small, not "contains everything"
12:17:28 <olligobber> yeah, and regex should be avoided
12:17:30 <olligobber> hmm
12:17:41 <olligobber> can I do this without regex
12:18:10 <xsperry> you can get regex packages on hackage, just like parser packages
12:18:39 <olligobber> yeah, but there must be a better way of doing this...
12:19:01 <merijn> olligobber: Parser combinators :p
12:19:11 <xsperry> what are you doing?
12:19:22 <merijn> xsperry: Black magic :p
12:19:35 <olligobber> printing a Type but without the underscores after type variables and library names before type constructors
12:20:20 jpds joins (~jpds@gateway/tor-sasl/jpds)
12:20:24 Tario joins (~Tario@201.192.165.173)
12:20:53 <olligobber> I could write my own function...
12:21:00 <geekosaur> :t span
12:21:01 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
12:21:21 <olligobber> nah, I'll just write my own function to render the ast
12:21:30 <olligobber> famous last words
12:21:59 Sorny joins (~Sornaensi@79.142.232.102.static.router4.bolignet.dk)
12:23:18 <Uniaika> olligobber: what do you need regexps for?
12:23:28 <Uniaika> ah, curse, my client has scrolled up
12:23:31 <Uniaika> olligobber: don't mind me
12:23:48 bahamas joins (~lucian@86.120.22.101)
12:23:48 × bahamas quits (~lucian@86.120.22.101) (Changing host)
12:23:48 bahamas joins (~lucian@unaffiliated/bahamas)
12:24:09 <tdammers> personally, my first instinct would be to find a better representation of that Type, one that has more structure to it than just String
12:24:23 nbloomf joins (~nbloomf@76.217.43.73)
12:24:26 × Sorna quits (~Sornaensi@077213203030.dynamic.telenor.dk) (Ping timeout: 240 seconds)
12:24:34 <tdammers> and then build a custom pretty-printer for that, rather than trying to reverse-engineer the existing pretty-printing
12:25:36 <olligobber> well, Type kinda captures that
12:26:16 <tdammers> right, it's Type from TH, isn't it
12:26:23 <olligobber> yeah
12:26:47 <tdammers> so you'd have to bite the bullet and write a pretty-printer that covers all the constructors
12:27:26 <olligobber> or I could make it fail on constructors I don't think it will actually encounter
12:27:27 <tdammers> and then use https://hackage.haskell.org/package/template-haskell-2.17.0.0/docs/Language-Haskell-TH.html#g:16 these fellows to massage individual names into a format you like
12:27:43 <tdammers> yeah, or that. or just print something useless for them
12:27:57 <tdammers> depends how serious and reusable you want to make it
12:28:14 <olligobber> I expect most of my types to be fairly normal
12:28:24 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
12:28:35 <olligobber> huh, what does nameBase do to type variables I wonder
12:29:00 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
12:29:08 <tdammers> same as term variables. report the local name without a module prefix.
12:29:25 <tdammers> if there's an underscore at the end, it'll still havethat
12:29:30 <olligobber> I see
12:29:33 <tdammers> but just removing the underscore isn't difficult at all
12:29:42 <olligobber> what if there is a_0 and a_1
12:29:45 solvr joins (57e3c46d@87.227.196.109)
12:29:57 <tdammers> well, then you would normally want to retain the whole thing to distinguish them
12:30:15 <olligobber> I'm gonna write a smart renamer instead that just uses ['a'..'z'] as type variable names
12:30:33 <tdammers> depends on your use case, but yes, that you could do
12:33:47 × mkDoku quits (~TheMule@aftr-37-201-195-134.unity-media.net) (Ping timeout: 246 seconds)
12:34:22 malumore joins (~malumore@151.62.116.133)
12:34:36 <olligobber> yeah I can re-use something like `reLabelInt :: (Ord x, Traversable t) => t x -> t Integer' from https://github.com/olligobber/DirectProof/blob/master/ReLabel.hs
12:36:39 × geekosaur quits (ac3a53f2@172.58.83.242) (Quit: Connection closed)
12:39:35 geekosaur joins (ac3a53f2@172.58.83.242)
12:41:45 × mikoto-chan quits (~anass@gateway/tor-sasl/mikoto-chan) (Remote host closed the connection)
12:41:50 × CitizenSnips quits (~CitizenSn@irc.refl.club) (Remote host closed the connection)
12:42:52 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
12:43:02 CitizenSnips joins (~CitizenSn@irc.refl.club)
12:43:40 ukari joins (~ukari@unaffiliated/ukari)
12:45:38 ddellacosta joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
12:46:10 × CitizenSnips quits (~CitizenSn@irc.refl.club) (Client Quit)
12:47:00 waleee-cl joins (uid373333@gateway/web/irccloud.com/x-nfsshumoaduyxswb)
12:50:01 CitizenSnips joins (~CitizenSn@irc.refl.club)
12:51:22 mmmattyx joins (uid17782@gateway/web/irccloud.com/x-kuttqhjrmgrkynne)
12:53:43 × shalokshalom quits (~quassel@2a02:1748:dd5e:7f60:cf49:8384:7c93:3106) (Ping timeout: 246 seconds)
12:54:58 × ddellacosta quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 240 seconds)
12:55:32 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
12:56:59 × maroloccio quits (~marolocci@pousada3ja.mma.com.br) (Quit: WeeChat 2.3)
12:59:41 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
13:00:14 bergey joins (~user@pool-74-108-99-127.nycmny.fios.verizon.net)
13:02:11 typetetris joins (uid275937@gateway/web/irccloud.com/x-ffiqklyrigbqxewu)
13:02:47 minoru_shiraeesh joins (~shiraeesh@109.166.56.223)
13:04:42 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
13:08:57 frozenErebus joins (~frozenEre@37.231.244.249)
13:09:06 haskellstudent joins (~quassel@213-225-9-45.nat.highway.a1.net)
13:10:15 × bergey quits (~user@pool-74-108-99-127.nycmny.fios.verizon.net) (Ping timeout: 268 seconds)
13:10:58 × forell quits (~forell@unaffiliated/forell) (Quit: ZNC - https://znc.in)
13:11:11 × deviantfero quits (~deviantfe@190.150.27.58) (Quit: WeeChat 3.1)
13:11:51 forell joins (~forell@unaffiliated/forell)
13:13:05 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
13:13:08 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
13:13:29 × nbloomf quits (~nbloomf@76.217.43.73) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:15:16 carlomagno joins (~cararell@148.87.23.11)
13:17:04 × CaptainIRS quits (9d339880@157.51.152.128) (Quit: Connection closed)
13:19:26 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
13:19:33 barthandelous joins (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9)
13:19:46 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
13:20:05 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
13:21:49 xourt joins (d4c620ea@212-198-32-234.rev.numericable.fr)
13:22:17 <olligobber> ok, my render function is slightly better
13:22:26 <olligobber> `((->) a) a'
13:22:32 <olligobber> `((->) Bool) ((->) Bool) Bool'
13:22:46 <olligobber> could use some work though
13:24:47 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
13:26:23 <olligobber> ah, missing brackets, yay
13:30:00 × LKoen quits (~LKoen@65.250.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.”)
13:31:57 LKoen joins (~LKoen@65.250.88.92.rev.sfr.net)
13:31:59 × LKoen quits (~LKoen@65.250.88.92.rev.sfr.net) (Read error: Connection reset by peer)
13:33:11 <olligobber> yay it worked!
13:34:54 kiweun joins (~kiweun@2607:fea8:2a62:9600:b11f:2c4a:f9e7:6e7d)
13:37:08 <emmanuel_erc> So at my soon to be previous job, I had to maintain a Haskell codebase that is going to be rewritten (to Typescript)
13:37:23 <emmanuel_erc> I think I've heard from people here before that Haskell codebase rewrites are common in the industry.
13:37:43 <olligobber> why not purescript?
13:37:57 <emmanuel_erc> I don't see the need to go into th reasons why it happened at my previous job, but I'd like to ask if it is common that Haskell codebases, what are some common reasons.
13:38:53 <emmanuel_erc> olligobber: Because they think typescript is more popular and they'd like to open source the project (they really want PRs from other people not at the compnay)
13:39:06 × cafce25 quits (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
13:39:11 × kiweun quits (~kiweun@2607:fea8:2a62:9600:b11f:2c4a:f9e7:6e7d) (Ping timeout: 250 seconds)
13:39:17 <olligobber> hmm, as someone who hasn't used typescript I guess I can't judge yet
13:39:41 × stree quits (~stree@68.36.8.116) (Ping timeout: 252 seconds)
13:39:45 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
13:40:24 <lortabac> emmanuel_erc: I don't know how common they are, it has happened to me and I've heard of at least 3 similar rewrite stories at big companies
13:40:45 <olligobber> merijn, want to see the dark magic? https://github.com/olligobber/IotaBF/blob/70d04088bac1f56c4660be1f7ba6e16ef0403a01/src/PrintLambdasTemplate.hs#L34
13:41:21 <olligobber> note I have no idea if it works properly, but it works on my test cases
13:41:46 <lortabac> emmanuel_erc: the common theme seem to be an ambitious manager looking for an easy way of promoting themselves
13:43:35 cafce25 joins (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de)
13:44:07 × cafce25 quits (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de) (Client Quit)
13:44:18 cafce25 joins (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de)
13:44:23 × geekosaur quits (ac3a53f2@172.58.83.242) (Quit: Connection closed)
13:45:11 <emmanuel_erc> that seems to be the case here as well.
13:45:18 × tetrahedron quits (hypercube@gateway/vpn/protonvpn/hypercube) (Ping timeout: 240 seconds)
13:46:44 <emmanuel_erc> I mean they don't come right out and say that. How did everyone else come to the conclusion that there was some ambitious manager looking to promote themselves?
13:47:12 <lortabac> that was my own conclusion
13:47:23 <lortabac> based on the stories I have witnessed and heard
13:47:39 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 260 seconds)
13:49:18 <lortabac> that said, I have also heard of rewrites for technical reasons -- there was a team migrating to Go because of the long GC pauses
13:50:05 <lortabac> they wrote a blog post IIRC
13:50:09 × drbean_ quits (~drbean@TC210-63-209-216.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin2 - https://znc.in)
13:50:10 <merijn> emmanuel_erc: Usually what happens is: Some small team of people write something cool in Haskell that blows other solutions out the water. It takes of. Managers and corporate come in, look at Haskell and go "oh...shit what do we do with this...", hire 100 code monkeys to reimplement the entire thing in Java/C++ and repeat
13:50:25 <merijn> See: BlueSpec
13:51:47 <merijn> Managers/companies don't wanna deal with needing to find people with the right skills, training, etc. they mostly want easily replaced, predictable machine cogs :p
13:51:55 <lortabac> in the company where I work, 2 out of the 3 projects I've worked on have been rewritten
13:52:04 stree joins (~stree@68.36.8.116)
13:52:05 <lortabac> the first one was more or less as merijn described
13:52:33 <lortabac> the second one was more about an ambitious manager blaming Haskell instead of management problems
13:53:15 <merijn> emmanuel_erc: Orson Scott Card's essay on software companies is always relevant: http://www.call-with-current-continuation.org/rants/how-companies-die.txt
13:53:16 <lortabac> then blaming the C# devs who quit the project before finishing the rewrite (because they ran into the same problems as the Haskell team)
13:54:44 bahamas joins (~lucian@unaffiliated/bahamas)
13:55:16 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
13:55:39 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Quit: WeeChat 3.0.1)
13:56:16 <maerwald> lortabac: yes, they tried to hire haskellers with Go experience, I remember.
13:56:19 × ukari quits (~ukari@unaffiliated/ukari) (Ping timeout: 265 seconds)
13:56:52 <merijn> lortabac: To be fair, the project couldn't have been a more perfect worst-case for GHC's GC if they'd tried :p
13:56:57 <merijn> s/the/that
13:57:23 LKoen joins (~LKoen@65.250.88.92.rev.sfr.net)
13:58:16 <maerwald> emmanuel_erc: Typescript is awesome. I know haskellers who switched to TypeScript jobs
13:59:47 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
14:01:07 <shapr> int-e: much more activity here https://github.com/grin-compiler/
14:01:34 <zzz> msg lambdabot :t 3
14:01:43 <zzz> ignore that please
14:01:54 <merijn> zzz: You can't make me!
14:01:55 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
14:02:41 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 268 seconds)
14:03:29 <fendor> maerwald, while I agree, typescript is really cool, I don't like the ecosystem that comes with it, usually
14:04:49 <lortabac> typescript is cool, but rewrites are almost always a bad idea
14:04:59 Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net)
14:05:58 <merijn> I disagree
14:06:04 <merijn> Lots of times they're a great idea
14:06:05 <emmanuel_erc> Regardless, I'm leaving the current job partially because I think the rewrite is a dumb idea and I don't want to work on a codebase that is going to be thrown out eventually.
14:06:27 <emmanuel_erc> They didn't really have an interest in listening to what I had to say about the whole venture.
14:06:31 × `slikts quits (~nelabs@wikipedia/reinis) (Ping timeout: 246 seconds)
14:06:32 <emmanuel_erc> So I've decided to leave.
14:06:42 Tops21 joins (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de)
14:07:14 <maerwald> merijn: the problem is that most ppl think rewrite should include changing langague
14:07:20 <maerwald> while that's often one of the lesser problems
14:08:06 <maerwald> most of the time the continuous growing of the codebase is what kills the bird
14:08:33 <maerwald> assumptions that were true in the beginning aren't anymore, but are still intrinic part of the architecture
14:08:38 <merijn> maerwald: More people should listen to Brooks. Build one to throw away
14:08:43 <maerwald> everything after that is going to be sh*te
14:09:42 <zzz> if i have 'x = 1 :: Num a => a ; y = x :: Int' are x and y the same or is y a copy of x?
14:09:50 <lortabac> merijn: rewrites in the real world are different, they are often made by different people, who end up reinventing the same wheels and making the same mistakes
14:10:02 <merijn> zzz: Yes, no, maybe, you shouldn't care :)
14:10:08 <maerwald> so we have ppl switch languages, frameworks and whatnot... but they rarely switch their *approach* to software engineering
14:10:24 <merijn> lortabac: I'm not responsible for people doing sensible things in a stupid way, thereby ruining the sensibility
14:10:25 <lortabac> "Build one to throw away" is a very good idea if you gain knowledge from the first try
14:10:31 × Tops2 quits (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de) (Ping timeout: 260 seconds)
14:10:47 <merijn> maerwald: Wait...I have to think to program?
14:10:58 <merijn> maerwald: I thought I could just copy&paste from SO
14:11:39 <zzz> merijn: i see. 'x / 2' is fine but 'y / 2' is not
14:11:49 <maerwald> yeah and read blog posts from Google engineers to figure out what framework you need
14:12:06 <maerwald> (because you really have the same set of problem as google has, right?)
14:12:38 Guest15377 is now known as stilgart
14:13:24 <merijn> zzz: Yes, but that's unrelated?
14:13:33 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
14:13:42 tetrahedron joins (~hypercube@137.112.237.23)
14:13:46 × rdivyanshu quits (uid322626@gateway/web/irccloud.com/x-frmbfjisqfxmhgqn) (Quit: Connection closed for inactivity)
14:13:53 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
14:15:00 × haskellstudent quits (~quassel@213-225-9-45.nat.highway.a1.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:15:15 haskellstudent joins (~quassel@213-225-9-45.nat.highway.a1.net)
14:15:51 kiweun joins (~kiweun@dsl-173-206-238-190.tor.primus.ca)
14:15:59 × haskellstudent quits (~quassel@213-225-9-45.nat.highway.a1.net) (Client Quit)
14:16:05 <zzz> merijn: it is?
14:16:13 <merijn> :t (/)
14:16:14 <lambdabot> Fractional a => a -> a -> a
14:16:15 haskellstudent joins (~quassel@213-225-9-45.nat.highway.a1.net)
14:16:30 <merijn> zzz: / only works on types that are instances of Fractional
14:16:38 <merijn> zzz: Int is not an instance of Fractional
14:16:44 <tdammers> maerwald: and also because the choice of framework is the one thing that defines you as an "engineer"
14:16:45 × kiweun quits (~kiweun@dsl-173-206-238-190.tor.primus.ca) (Remote host closed the connection)
14:16:49 <merijn> So using / on something of type Int is a type error
14:17:05 × frozenErebus quits (~frozenEre@37.231.244.249) (Ping timeout: 252 seconds)
14:17:10 × barthandelous quits (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9) (Ping timeout: 276 seconds)
14:17:15 <merijn> zzz: 'y' has type "Int" (whether it's the same as x or not)
14:17:24 <merijn> zzz: You probably want div
14:17:34 <merijn> > 10 `div` 3
14:17:36 <lambdabot> 3
14:17:54 <zzz> no. thats the thing
14:18:00 <zzz> ok, let me try to explain
14:18:04 <merijn> Then you want fromIntegral
14:18:13 <zzz> (1 :: Num a => a) / 2
14:18:13 <merijn> > (10 :: Int) / 3
14:18:15 <lambdabot> error:
14:18:15 <lambdabot> • No instance for (Fractional Int) arising from a use of ‘/’
14:18:15 <lambdabot> • In the expression: (10 :: Int) / 3
14:18:17 <merijn> eh
14:18:18 <merijn> what
14:18:20 <zzz> > (1 :: Num a => a) / 2
14:18:21 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
14:18:21 <lambdabot> 0.5
14:18:22 <merijn> ah, right
14:18:32 <merijn> > fromIntegral (10 :: Int) / 3
14:18:34 <lambdabot> 3.3333333333333335
14:18:45 <zzz> no merijn, here's my problem
14:18:47 <merijn> :t fromIntegral
14:18:48 <lambdabot> (Integral a, Num b) => a -> b
14:18:57 <zzz> i get that, but listen
14:19:05 <zzz> ill try to be concise
14:19:09 <zzz> > (1 :: Num a => a) / 2
14:19:11 <lambdabot> 0.5
14:19:32 <zzz> > (1 :: Int) / 2
14:19:33 <lambdabot> error:
14:19:34 <lambdabot> • No instance for (Fractional Int) arising from a use of ‘/’
14:19:34 <lambdabot> • In the expression: (1 :: Int) / 2
14:19:34 <merijn> That's GHC infers (and solves) a Fractional constraint there
14:19:41 <zzz> this is all good and obvious
14:19:44 CaptainIRS joins (9d339880@157.51.152.128)
14:20:58 notzmv joins (~zmv@unaffiliated/zmv)
14:21:11 <zzz> my problem is when i do 'x = 1 :: Num a => a ; y = x :: Int' i can do x/2 but not y/2
14:21:25 <merijn> Yes
14:21:42 <zzz> which kind of clashes with my idea of referential transparency
14:21:50 <maerwald> tdammers: I've been thinking whether there's a way to capture the notion of code complexity (in terms of intellectual/practical complexity) better, especially over time. But it would always sorta be per compontent/module/function (e.g. via self-reports after a ticket is complete)
14:21:55 <merijn> zzz: Why?
14:22:02 <maerwald> But that quickly breaks down with code refactors
14:22:04 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:22:27 × tetrahedron quits (~hypercube@137.112.237.23) (Quit: WeeChat 3.1)
14:22:35 <emmanuel_erc> Given what has happened to me at this last job, it makes me wonder if persuing Haskell has been worth it or will be so.
14:22:45 <merijn> zzz: If you rewrote "y = 1 :: Int" you'd get the same result
14:22:57 <maerwald> emmanuel_erc: worth for?
14:23:03 <zzz> merijn: because if 'x = y', shouldn't 'x/2 == y/2' ?
14:23:04 <merijn> So, you can trivially replace 'x' with its definition in y.
14:23:29 × LKoen quits (~LKoen@65.250.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.”)
14:23:33 <emmanuel_erc> maerwald: Was learning Haskell worth it? (For job prospects/satisfication)
14:23:37 <lortabac> emmanuel_erc: instead of a big company with a small Haskell team, try targeting companies that are fully committed to Haskell
14:23:46 <merijn> zzz: But x and y have different types
14:23:54 <tdammers> maerwald: "WTF/s" is the established unit for that, I think
14:23:56 <lortabac> it has worked for me (I am starting a new job in a couple of weeks)
14:23:59 <zzz> merijn: i see
14:24:03 <maerwald> tdammers: :p
14:24:36 <merijn> zzz: You can replace sub expressions *in a well-typed expression* with their definition
14:24:46 <merijn> zzz: But your 'y/2' isn't well typed to begin with
14:24:52 <maerwald> emmanuel_erc: well, there are some well paid haskell jobs, but generally you can make better money with other languages
14:25:02 <tdammers> emmanuel_erc: I would say that learning Haskell is worth it even if you never get to use the language itself professionally. Just the concepts you're exposed to, and the clarity gained from working through them and making them your own, is worth every minute of it.
14:25:22 <merijn> zzz: Basically, claims are limited to well-typed expression. Expression that are *not* well-typed may (or may not) conform to those claims
14:25:24 <tdammers> emmanuel_erc: the risk is of course that you may end up spoiling your brain for more, ahem, pedestrian languages
14:25:33 <maerwald> pedestrian :p
14:25:44 <merijn> zzz: In this case, the claim would still hold for your example, despite 'y/2' not being well-typed
14:25:46 <tdammers> *cough*phpedestrian*cough**diescoughing*
14:26:03 <emmanuel_erc> tdammers: Yeah, I can sympathize with that last statement. It annoys me when I don't have algebraic data types (I'm talking the most basic kind).
14:26:22 <maerwald> emmanuel_erc: you can *sorta* have them in typescript
14:26:30 <kuribas> tdammers: that happened. I find every other language painful.
14:26:39 <merijn> zzz: Basically, the idea of interactions between proofs/claims and types is that, to keep our proofs doable, we restrict to proving properties of well-typed expressions
14:26:43 <maerwald> and there are way more opportunities in typescript, so if you're looking for that only...
14:26:58 <merijn> zzz: Making use of the type system to rule out cases that we don't care about
14:27:35 <tdammers> emmanuel_erc: algebraic data types are still a relatively superficial feature. I'm talking more about the big picture. Things like being more aware of side effects, and designing code to keep them contained. Even if your code isn't pure the way Haskell code is, just having the clarity of mind to realize that effects are thing that need particular attention, and understanding some strategies for dealing with
14:27:37 <tdammers> them, is worth a lot.
14:27:54 <merijn> zzz: Consider the trivial type system where no expressions are well-typed. Now all our proofs are trivial! Everything is always true for all well-typed expressions ('cause there aren't any)!
14:28:05 <maerwald> tdammers: rust sharpens your mind too about mutability, just in a different way
14:28:17 <tdammers> maerwald: no doubt.
14:28:20 <zzz> merijn: that used to be my intuition, but then 'x = 1 ; y = x :: Int ; z = x :: Double' gives me an error
14:28:23 <merijn> zzz: Vice versa, consider the untyped case where *everything* is well-typed, now proving anything becomes impossible
14:28:23 <haskellstudent> i would have said just having any decent static type system is a huge improvement
14:28:30 <tdammers> maerwald: rust also wasn't the first thing I thought of when I said "pedestrian"
14:28:31 <merijn> zzz: Ah!
14:28:36 bahamas joins (~lucian@unaffiliated/bahamas)
14:28:37 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
14:28:39 <emmanuel_erc> rust is even more esoteric than Haskell in some ways
14:28:40 <merijn> zzz: That one is a kinda funny edge case
14:28:55 <maerwald> I can be convinced to do haskell, rust and typescript. They all have ADTs
14:28:56 <merijn> zzz: You have discovered the "Dreaded Monomorphism Restriction"
14:29:01 <haskellstudent> esoteric? :)
14:29:01 <emmanuel_erc> well esoteric isn't the right word... there are less use cases for rust IMO
14:29:07 <tdammers> yeah, having a type system and type checker that actually pull their weight can do wonder to the damage that Java and its brethren may have inflicted on your brain
14:29:12 × v01d4lph4 quits (~v01d4lph4@223.177.183.124) (Remote host closed the connection)
14:29:12 <maerwald> emmanuel_erc: it's verbose af, but pretty neat
14:29:25 <merijn> zzz: Which is actually kinda related to your original question
14:29:30 tanuki joins (~quassel@173.168.178.1)
14:29:46 <zzz> merijn: oh i see
14:29:52 <merijn> zzz: Since '1' is polymorphic it can be used at infinitely many different types, right?
14:30:20 <merijn> zzz: Now, logically, you can't keep infinite different values in memory, so your only other option is to compute them every time their used
14:30:32 <maerwald> and verbose languages (like C) have the tendency to make you skip lines of code in order to understand the broad meaning... and then there's this huge gap between high-level and actual understaning (including all the memory tricks in a codepath)
14:30:33 <zzz> i would think so. but i have an idea of what you are talking about i've encountered it before
14:30:35 rj joins (~x@gateway/tor-sasl/rj)
14:30:36 <merijn> zzz: But assume '1' was instead something that was super expensive to compute. That'd be bad
14:31:18 <merijn> zzz: We have the situation where 'x = ...' *looks* like it is a value that's only computed once, but ends up computed many times...that'd be bad
14:31:21 × kritzefitz quits (~kritzefit@2003:5b:203b:200::10:49) (Remote host closed the connection)
14:31:43 <haskellstudent> emmanuel_erc: afaik a simple way to put it is that rust is better if performance and latency (no gc pauses) and/or memory usage is really important. haskell is more high level but has gc with the pros and cons of that, its harder to reason about performance and memory usage.
14:31:59 <zzz> merijn: yes
14:32:06 <merijn> zzz: So the monomorphism restriction says "if something *looks* like a value (as opposed to a function), we monomorphise it" this guarantees the expected "constant computation time"
14:32:14 <maerwald> pick the language your engineers like, whatever that is :)
14:32:20 <emmanuel_erc> haskellstudent: Yeah, I realize that distinction.
14:32:21 <haskellstudent> emmanuel_erc: but i also found rust pretty viable for building an API backend service
14:32:33 <merijn> zzz: But that only works if it *can* be monomorphic. But you example tries to turn it into both Int *and* Double
14:32:46 <emmanuel_erc> haskellstudent: Have you tinkered around with rust + webassembly?
14:32:49 <merijn> zzz: That's only possible if 'x = 1' was polymorphic, which we just said was tricky
14:33:11 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 240 seconds)
14:33:15 mkDoku joins (~TheMule@aftr-37-201-195-134.unity-media.net)
14:33:32 <merijn> zzz: If you wrote your original example as 'x :: Num a => a; x = 1' (so explicit polymorphic literal) then 'y :: Double; y = x' and 'z :: Int; z = x' *would* work
14:34:00 <merijn> (The polymorphic type signature on 'x' saying "I know what I'm doing, I'm okay with recomputing this for all possible values"
14:34:06 <merijn> )
14:34:10 <haskellstudent> emmanuel_erc: i have a couple months experience each with both haskell (and a bit with ghcjs) and rust but didnt try webassembly because it still seems a bit too early for that. it seems like webassembly bundles turn out even bigger than what ghcjs produces?
14:34:50 <dolio> Wow, that's hard to believe.
14:36:01 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
14:36:01 <haskellstudent> emmanuel_erc: for frontend i tried miso and i found it pretty quick go get started with and the minified and gzipped js is around 100k minimum. i am currently evaluating reflex so i have no opinion on it yet but the minimum js size turns out around 200k IIRC
14:36:36 <zzz> merijn: so in conclusion, be dilligent with your signatures
14:37:05 <maerwald> haskellstudent: hasn't ghcjs development basically stalled?
14:37:33 frozenErebus joins (~frozenEre@37.231.244.249)
14:37:45 <haskellstudent> maerwald: not at all as far as i can tell? both miso and reflex/obelisk seem to be actively maintained and used in production
14:37:59 <maerwald> haskellstudent: those are frameworks
14:38:17 <emmanuel_erc> haskellstudent: So which framework is easier to use in your opinion, reflex or miso?
14:38:28 <merijn> zzz: Well, the MMR trade-off is: MMR enabled (default): things that look like values behave like values (in terms of compute), which sometimes triggers loud type errors when monomorphising fails. The alternative (MMR disabled) is: it always compiles, but sometimes things that look like values are super expensive in a way that's hard to detect
14:38:30 <haskellstudent> maerwald: yes i know but if you are talking about ghcjs that is what you are probably using
14:38:50 <maerwald> haskellstudent: I mean only the compiler and it looks stalled
14:39:20 <haskellstudent> maerwald: i am assuming that if they are actively used and maintained, ghcjs would at least get bugfixes when needed?
14:39:51 <maerwald> https://github.com/ghcjs/ghcjs is this the correct repo?
14:40:41 <haskellstudent> emmanuel_erc: thats what im trying to find out, but as i said so far i can only tell you that miso is easier to get started with, and it might have a bit better performance, which may or may not matter to you
14:40:47 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
14:41:19 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 260 seconds)
14:41:55 <maerwald> latest commit 14 months old doesn't sound like a healthy, well-maintained compiler
14:41:58 mouseghost joins (~draco@87-206-9-185.dynamic.chello.pl)
14:41:58 × mouseghost quits (~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
14:41:58 mouseghost joins (~draco@wikipedia/desperek)
14:42:19 <zzz> merijn: got it. thank you for the explanation
14:42:24 <haskellstudent> maerwald: new dev activity is on other branches, at least here for example: https://github.com/ghcjs/ghcjs/commits/hkm/nix-ghc-8.10
14:42:37 <maerwald> ah
14:43:06 <haskellstudent> maerwald: you are looking at the "stable" branch i guess which will probably only get bugfixes while they work on the next release somewhere else
14:43:20 barthandelous joins (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9)
14:44:48 <haskellstudent> maerwald: as far as i can tell there is enough production usage of reflex and miso and therefore ghcjs to be reasonably confident that it will be sufficiently well supported for the next years and i would invest in learning and building on it
14:47:02 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
14:47:50 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:47:51 × barthandelous quits (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9) (Ping timeout: 260 seconds)
14:48:06 mikoto-chan joins (~anass@gateway/tor-sasl/mikoto-chan)
14:50:38 <haskellstudent> maerwald: especially if you ask, what are the alternatives? i briefly tried purescript, the compiler is slow af so not an option. with miso and reflex you can use instant live reload. which i really want to have in my workflow. elm is fast to compile and run but its far too limiting from what i have read. and its they are both not haskell obviously which means no code sharing which means wasted time. i have not looked closely at
14:50:38 <haskellstudent> rust wasm but since i prefer haskell in general it would be ideal ofc if using haskell everywhere works well. and according to obsidian systems at least it works very well, so i am optimistic (also from what i have tried so far).
14:51:08 <maerwald> haskellstudent: well, the obvious alternative is typescript
14:51:28 <merijn> PureScript seems the more obvious alternative :p
14:51:50 <maerwald> too volatile
14:51:52 <tdammers> personally, I still find myself going back to just hand-writing javascript
14:53:11 <merijn> maerwald: Yes, but your volatility is below channel average :p
14:53:22 <merijn> s/volatility/volatility tolerance
14:53:27 <tdammers> it's not great, it's not haskell, but it has massive social inertia going for it, it's practically guaranteed to not go anywhere anytime soon, it's maintained, I know it well enough for there to be no nasty surprises, and it offers an absolutely seamless gradation of "fanciness", starting from writing in a <script> tag directly in your HTML template all the way to webpack + nodejs + whatever
14:53:42 <solvr> I thought we tried the "alternate JS syntax" thing with CoffeeScript and we agreed it's not worth it
14:53:48 <solvr> But I guess bad ideas never die.
14:53:49 <haskellstudent> tdammers: as long as the quantity and complexity stays very low interpreted languages can be nice. the moment you exceed that however you get problems in my experience.
14:53:50 bahamas joins (~lucian@unaffiliated/bahamas)
14:54:09 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:54:12 <tdammers> haskellstudent: yes, and so the trick is to keep the complexity low, which, with enough discipline, is often possible.
14:54:40 <tdammers> you have to draw very clear boundaries in order to keep things contained, and be religiously about documenting and respecting those boundaries, but it is doable
14:54:51 <haskellstudent> solvr: coffeescript is pointless, its just another syntax. it does not give you a type system, which would be the crucial difference.
14:55:00 <maerwald> aha! I figured out a minimal example that breaks lazy bytestring GC/streaming: https://paste.tomsmeding.com/o1aCZ5wk
14:55:12 <solvr> haskellstudent, I agree
14:55:34 <solvr> haskell_1, I use TS but TS crucially minimizes non-standard syntax, and offers types.
14:55:34 <tdammers> of course "enough discipline" isn't something you can get in the kind of team that would typically write JS, so there's that
14:55:38 <maerwald> I guess this is what happens in `tar` too
14:55:42 <haskellstudent> tdammers: but why do that if you can do that AND have a good type system to help you reduce defects (and thus save time) even more? i mean thas why i am using haskell in the first place
14:56:00 <tdammers> haskellstudent: because all that type stuff comes with a harsh penalty in practice
14:56:03 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
14:56:09 <tdammers> the language itself is just a small part of the equation
14:56:15 <emmanuel_erc> So I'm just trying out miso right now.
14:56:20 <haskellstudent> tdammers: and i think there is also a lot of potential to increase productivity and decrease complexity if you can leverage code sharing
14:56:22 <emmanuel_erc> Installation was super easy
14:56:32 <haskellstudent> tdammers: what penalty?
14:56:35 <emmanuel_erc> and much faster than reflex
14:56:35 <solvr> tdammers depends on the type system and the community around it
14:56:43 <tomsmeding> maerwald: that's unfortunate
14:56:57 <haskellstudent> tdammers: except for having to spend some time learning new things?
14:57:15 <tdammers> haskellstudent: compile times. library ecosystem. additional accidental complexity introduced by the compiler. longer turnaround times. potentially buggy compilers. more moving parts to your build system.
14:57:48 <haskellstudent> tdammers: like i said earlier, i have instant love reloading working with both miso and reflex
14:57:52 <tdammers> fun story: we had a fairly decent purescript codebase at one job, things were humming along smoothly, until someone asked for a slippy map
14:58:03 <haskellstudent> and i mean instant. on a old cpu.
14:58:06 <fresheyeball> haskellstudent: shameless plug http://shpadoinkle.org/docs/index.html
14:58:13 <fresheyeball> my alternative to Reflex and Miso
14:58:19 <merijn> haskellstudent: For small stuff, maybe :)
14:58:23 <Uniaika> fresheyeball: hehe
14:58:26 <fresheyeball> Faster than Reflex, without the boilerplate of Elm
14:58:28 <merijn> haskellstudent: GHC isn't super fast, sadly
14:58:39 <merijn> haskellstudent: I highly doubt ghcjs is faster
14:58:50 <maerwald> rust isn't fast either
14:58:54 <maerwald> Go is
14:59:04 <fresheyeball> maerwald: you mean compile times?
14:59:05 <merijn> maerwald: Yeah, but Go is shite :p
14:59:06 <Uniaika> compiler speed or executable speed?
14:59:11 <maerwald> compiler speed
14:59:14 <Uniaika> yes
14:59:18 <Uniaika> you're indeed right
14:59:30 <maerwald> developing Go is awesome, if you can bear the language
14:59:31 <haskellstudent> merijn: so far i could at least always see any compiler errors within 1s or so using halive
14:59:39 <fresheyeball> yes yes, compilers that don't help the engineer go super fast by not helping
14:59:44 <haskellstudent> gotta go now, see you later
14:59:46 <tdammers> now, in a JS project, I could have just dropped leaflet into my dependencies, and whip up a map to show anywhere on any page with maybe a dozen lines of code. not elegant, but works as advertised. for purescript, I looked into the options, and concluded that I had two of them: create my own slippy map library in native purescript, or make a purescript wrapper for leaflet
15:00:09 <Uniaika> fresheyeball: actually I think codegen has also been somewhat sacrificed for compiler speed
15:00:14 <maerwald> tdammers: and both of them expensive engineering tasks
15:00:17 <tdammers> I picked option 2, but fortunately, the company in question went out of business before I got to do more than superficial work on that
15:00:23 <fresheyeball> Uniaika: good point
15:00:23 <tdammers> maerwald: exactly.
15:00:25 <maerwald> heh
15:00:47 molehillish joins (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4)
15:00:48 nbloomf joins (~nbloomf@2600:1700:ad14:3020:9469:29ae:2372:7bd6)
15:00:50 <maerwald> that reminds me when I was working on an event sourced haskell codebase...
15:00:53 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
15:01:13 <maerwald> tdammers: which relied heavily on ixset-typed :)
15:01:25 <maerwald> (we even forked it)
15:01:35 <maerwald> none of those were business domain problems
15:01:37 <tdammers> I mean, yes, an idiomatic slippy map in purescript would be a hell of a lot more elegant than leaflet. but leaflet has the whopping advantage of existing.
15:01:53 _d0t joins (void@gateway/vpn/mullvad/d0t/x-89419360)
15:01:56 <merijn> maerwald: I blame acid-state for false advertising, popularising ixset
15:01:58 bitmapper joins (uid464869@gateway/web/irccloud.com/x-fmeoowlskniejelz)
15:02:23 × acidjnk_new quits (~acidjnk@p200300d0c72b95396118d8d56ee70ad6.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
15:02:31 <tdammers> 90% of all problems in "haskell in industry" code are the fault of acid-state. or servant.
15:02:35 tdammers runs away
15:02:44 <merijn> tdammers: Probably true
15:03:16 <maerwald> most of the engineering hours went into either debugging performance issues or buying more ram or into solving problems that don't exist in actual database systems
15:03:43 <merijn> Most people excited about acid-state should really just want SQLite
15:03:47 <maerwald> because someone in the beginning thought: hey, it might be cool if we...
15:04:11 × haskellstudent quits (~quassel@213-225-9-45.nat.highway.a1.net) (Ping timeout: 240 seconds)
15:04:28 <maerwald> and like always... the guy didn't stay long enough to see all of the fallout of their decisions :)
15:04:38 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
15:04:56 <_d0t> ohai! I'm getting HLS to segfault on my project. How do I even begin with debugging it? 0_o
15:04:59 <tdammers> merijn: IMO, anyone who isn't using postgresql and cannot explain in under 100 words why not should be using postgresql
15:05:24 <merijn> tdammers: "managing a server is a hassle" :p
15:05:28 <maerwald> tdammers: "event sourcing is cooler"?
15:05:43 <maerwald> (tbf, you can bolt it onto a postgresql database anyway)
15:05:45 <shapr> _d0t: did you install from ghcup?
15:05:47 <tdammers> apt install postgres; createdb whatever; psql whatever # there, you just "managed a server"
15:05:55 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
15:06:00 <_d0t> shapr: nope. I tried both nixos version and the last git build.
15:06:03 <merijn> tdammers: That requires me to have a machine
15:06:06 <shapr> _d0t: also, you could ask on the #haskell-language-server IRC channel, sometimes it's more active
15:06:11 × malumore quits (~malumore@151.62.116.133) (Ping timeout: 268 seconds)
15:06:14 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
15:06:21 <_d0t> ah didn't know it was a thing
15:06:22 <merijn> tdammers: I can run SQLite anywere :p
15:06:23 <shapr> _d0t: you get the same segfault from both? that sounds like a bug to me
15:06:36 <_d0t> shapr: dunno about the "same", but both do segfault
15:06:47 <tdammers> merijn: "I have to run on a machine where I can't install anything" would be a valid excuse, I guess
15:07:02 <shapr> _d0t: do you get a segfault from any project?
15:07:13 <_d0t> shapr: doesn't seem so
15:07:23 <_d0t> shapr: but it seems restricted to only ghc 8.6.5
15:07:25 <merijn> tdammers: How about: "I wanna treat my database as an application file format" and "I want to easily archive, share, and distribute my database"? :p
15:07:45 <shapr> _d0t: are you able to try a later version? perhaps 8.10.4 ?
15:07:58 <tdammers> merijn: those would work too.
15:08:01 <_d0t> shapr: not with this project. But I tried with another one and it worked.
15:08:08 <shapr> I don't remember whether HLS 1.0 supports 8.6.5
15:08:10 <tdammers> though one could arguably share psql-dumps
15:08:11 × tomboy64 quits (~tomboy64@unaffiliated/tomboy64) (Ping timeout: 240 seconds)
15:08:16 <_d0t> shapr: it does
15:08:19 <shapr> oh good
15:08:34 <_d0t> in fact, it's the oldest supported version rn
15:08:35 <tdammers> but yeah, if you want to use it as an application file format, then that's smack in the middle of sqlite's design space
15:09:02 <infinisil> Is there a good `Arbitrary Value` somewhere? Where Value is from aeson
15:09:05 <shapr> _d0t: did you generate your own hie.yaml ?
15:09:13 <merijn> tdammers: My flowchart is usually: "I need a database" -> 'Will SQLite work? If yes, then SQLite. If no, then are you sure?' -> "Yes, I'm sure" -> 'Ok, use postgres' :p
15:09:25 <_d0t> shapr: yup
15:09:47 <shapr> _d0t: if you're using hls 1.0 does it work without a generated hie.yaml ?
15:10:04 <_d0t> shapr: lemme check
15:10:04 <shapr> that is, does the implicit cradle succeed?
15:10:06 <maerwald> merijn: I had to migrate at least once from sqlite to postgresql, so I start with postgresql too
15:10:15 <tdammers> merijn: same for me, except the other way around.
15:10:23 <maerwald> even if it's not the optimal decision, it's not a problem
15:10:42 <tdammers> maerwald: the key is to realize that you need to up your game early, when switching DBMS isn't too painful yet
15:10:47 <merijn> maerwald, tdammers: Maybe I would too in a company setting where we had servers anyway
15:11:08 <tdammers> and yeah, if "having a server" is an issue, then I can totally understand your choice
15:11:14 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
15:11:17 <merijn> But for my personal code that's generally "application running on one machine, not networked" SQLite is a much more sensible default
15:11:18 <tdammers> for me, "database is locked" is more of a show stopper
15:11:38 <tdammers> most of my stuff is networked in some way anyway
15:11:49 <merijn> And the ability to just SCP a file from my laptop to a remote server/etc. is a feature
15:12:40 <infinisil> Oh, found the answer myself, there's an Arbitrary Value in aeson itself: https://github.com/haskell/aeson/blob/master/tests/Instances.hs#L170
15:12:50 Deide joins (~Deide@217.155.19.23)
15:12:57 <maerwald> I could see using sqlite in desktop apps or other tools. It's cheap, why store config etc in files?
15:13:08 <maerwald> but for backend I don't find it too appealing
15:13:14 <merijn> maerwald: Right, that's the sorta thing I'm thinking
15:13:34 <merijn> maerwald: But even for backend stuff it'd be better than acid-state :p
15:14:03 barthandelous joins (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9)
15:14:30 <shapr> _d0t: my hope is that the hie.yaml is confusing hls, but it still shouldn't segfault
15:14:31 LKoen joins (~LKoen@65.250.88.92.rev.sfr.net)
15:14:32 <_d0t> shapr: it started, but then it began running the build via cabal+nix, and I'm not gonna wait for that
15:14:42 <shapr> _d0t: you may have to
15:14:51 <shapr> I mean
15:15:02 <shapr> If you haven't already built the project, hls will do that for you
15:15:05 <_d0t> shapr: not sure it's a good idea. It's gonna take quite a while. Is it possible to force hls to use stack?
15:15:18 <shapr> I don't know, sorry
15:15:37 <shapr> At work we use stack without nix for building, hls is okay with that
15:15:46 <shapr> at home I use cabal+nix
15:15:57 <_d0t> shapr: yeah, I do this to. But here without hie.yaml hls reverts to cabal.
15:16:09 <shapr> that's surprising
15:16:26 <shapr> oh wait, at work I've always generated my own hie.yaml
15:16:36 <_d0t> and now it tries to build ghc from source
15:16:41 <_d0t> nope, definitely not going this way
15:16:42 <shapr> and at home I never do, and I always use cabal+nix at home
15:16:45 × rj quits (~x@gateway/tor-sasl/rj) (Ping timeout: 240 seconds)
15:16:46 <shapr> _d0t: ok that's bad
15:17:11 <shapr> _d0t: I'd suggest reporting a bug on github or joining #haskell-language-server and asking one of the devs
15:17:15 × bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
15:17:16 <_d0t> ok
15:17:20 <shapr> I'm just an excited user :-)
15:17:21 <_d0t> thanks!
15:18:04 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:18:04 <tdammers> merijn: re scp, if you can have postgresql databases on both ends, with unix auth, then it's almost as easy: psql-dump thedatabase | ssh theserver psql thedatabase
15:18:25 <merijn> tdammers: Now I have to manage *double* the number of servers!
15:18:37 × barthandelous quits (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9) (Ping timeout: 252 seconds)
15:19:08 <tdammers> well, all my computers basically have postgres clusters running on them anyway, so the overhead is absolutely minimal
15:19:18 <maerwald> merijn: hire a nix engineer, they'll do it for you
15:19:42 <tdammers> but my use cases are different. I need multiple concurrent connections pretty much from day 1 in most projects
15:21:07 rj joins (~x@gateway/tor-sasl/rj)
15:21:19 × raym quits (~ray@115.187.32.14) (Quit: leaving)
15:22:22 <merijn> maerwald: I can't even afford to work on my own stuff, let alone pay someone for it :p
15:22:42 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
15:22:43 × steerio quits (~steerio@aviv.kinneret.de) (Quit: leaving)
15:22:55 × whataday quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
15:24:02 whataday joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
15:24:55 × whataday quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
15:26:02 whataday joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
15:31:15 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
15:31:44 × LKoen quits (~LKoen@65.250.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:33:24 ulidtko joins (~ulidtko@194.54.80.38)
15:39:10 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:41:11 × dcoutts quits (~duncan@94.186.125.91.dyn.plus.net) (Ping timeout: 240 seconds)
15:41:50 × mettekou quits (~mettekou@d8D875214.access.telenet.be) (Quit: Leaving)
15:44:11 z0 joins (~zzz@2001:8a0:de1b:9601:85ea:cf54:e2e4:7d25)
15:44:28 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
15:44:40 hiptobecubic joins (~john@unaffiliated/hiptobecubic)
15:48:04 barthandelous joins (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9)
15:48:12 LKoen joins (~LKoen@65.250.88.92.rev.sfr.net)
15:49:18 esp32_prog joins (~esp32_pro@91.193.4.202)
15:49:27 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
15:50:01 × alx741 quits (~alx741@181.196.68.238) (Ping timeout: 260 seconds)
15:52:12 × barthandelous quits (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9) (Ping timeout: 246 seconds)
15:53:10 Wuzzy joins (~Wuzzy@p5790e46d.dip0.t-ipconnect.de)
15:55:44 ukari joins (~ukari@unaffiliated/ukari)
15:56:30 hypercube joins (hypercube@gateway/vpn/protonvpn/hypercube)
15:57:46 gtk joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
15:58:00 zyklotomic joins (~ethan@unaffiliated/chocopuff)
15:58:20 × z0 quits (~zzz@2001:8a0:de1b:9601:85ea:cf54:e2e4:7d25) (Quit: z0)
15:58:54 <dmj`> maerwald: nix engineer is a thing now?
15:59:08 <maerwald> dmj`: sure
16:00:01 <monochrom> I would s/engineer/admin/ but it is a millenial trend to call every position "engineer".
16:00:31 × stree quits (~stree@68.36.8.116) (Ping timeout: 260 seconds)
16:00:36 <aldum> imo better than the gen X trend of calling every position a manager
16:00:46 × esp32_prog quits (~esp32_pro@91.193.4.202) (Ping timeout: 240 seconds)
16:01:02 <aldum> or at least not worse
16:01:42 <dmj`> bash engineer
16:02:11 × gtk quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 240 seconds)
16:02:17 <monochrom> If you answer emails for an elected politician you can be called "legislator's social media engineer"
16:03:13 <monochrom> If you were a spin doctor for said politician, you are now a spin engineer.
16:03:15 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
16:03:31 <aldum> spin epidemiologist these days :V
16:03:41 <maerwald> is this supposed to "leak" 1GB? https://paste.tomsmeding.com/WbAcQ3rq
16:03:51 ToastInTheMachin joins (~ToastInTh@172.93.177.196)
16:04:05 × molehillish quits (~molehilli@2600:8800:8d06:1800:b54a:36bf:7632:87f4) (Ping timeout: 252 seconds)
16:04:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:05:42 tomboy64 joins (~tomboy64@unaffiliated/tomboy64)
16:06:39 × ToastInTheMachin quits (~ToastInTh@172.93.177.196) (Read error: Connection reset by peer)
16:07:19 <dmj`> maerwald: yes
16:07:32 <dmj`> maerwald: you're not incrementally processing the list
16:07:46 <dmj`> maerwald: the sink is your writeFile, but you're keeping the list in memory with null check
16:08:01 <maerwald> dmj`: but there's no chunk overlap
16:08:40 <dmj`> maerwald: it's still a list, it's same problem with avg xs = sum xs / fromIntegral (length xs)
16:08:56 × whataday quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
16:09:00 <dmj`> the second you have to take two passes on a list, you're can't incrementally process it
16:09:21 <dmj`> you*
16:09:22 Rudd0 joins (~Rudd0@185.189.115.108)
16:09:42 bahamas joins (~lucian@unaffiliated/bahamas)
16:09:59 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
16:10:02 whataday joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
16:10:35 <maerwald> is there a way to make this work with bytestring only?
16:11:00 <tomsmeding> maerwald: let's apply fusion terminologies to this; to remove the sharing in that code, you need vertical fusion to merge the 'take' and 'writeFile' loops over the buffer into, say, loop 1, and again vertical fusion to merge the 'drop' and 'null' loops into loop 2; then you can use horizontal fusion to merge loop 1 and loop 2 into a single loop. At this point there is only one consumer, which can
16:11:00 <tomsmeding> then merge using vertical fusion with 'readFile' to produce constant memory usage
16:11:17 <tomsmeding> I suspect that the horizontal fusion is the thing that's not being performed because there's explicit monadic sequencing between the writeFile and the null
16:11:17 <shapr> I want to be a nix engineer!
16:11:33 fendor_ joins (~fendor@91.141.3.10.wireless.dyn.drei.com)
16:12:13 <tomsmeding> intuition for vertical vs horizontal fusion: make a data flow graph of your code where nodes are operations (take/drop/writeFile etc), and arrows generally point downwards
16:12:51 <tomsmeding> vertical fusion is merging two directly vertically connected nodes into one; horizontal mutatus mutandis
16:12:55 <tomsmeding> *mutatis
16:13:26 stree joins (~stree@68.36.8.116)
16:13:46 × fendor quits (~fendor@91.141.0.13.wireless.dyn.drei.com) (Ping timeout: 240 seconds)
16:14:01 gitgood joins (~gitgood@80-44-12-39.dynamic.dsl.as9105.com)
16:15:49 <tomsmeding> in fact, in dmj` 's avg example, it's again horizontal fusion of the 'sum' and 'length' loops that could make it constant-memory; not sure if ghc does that, but there are other compilers for other languages that do
16:16:21 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
16:17:17 <dmj`> streaming is about keeping a predictable amount of bytes in memory at any given time, laziness does this for you, for free, but it only works if nobody else is sharing your thunk, the second someone else shares it, you just accumulate in memory instead of incrementally processing
16:17:51 <dmj`> sum and length both share `xs`, sum can't process it incrementally, because length is demanding it
16:18:08 <dmj`> it's the same with writeFile and null in maerwald's example
16:18:13 <maerwald> is there an unsafe way to work around it?
16:18:47 <tomsmeding> dmj`: indeed, unless the compiler can see the definitions of 'sum' and 'length' and fuse their loops together into one pass over the list; again I don't know if ghc does this, but it's theoretically possible
16:19:01 <dmj`> tomsmeding: I haven't been able to get ghc to do horizontal fusion of sum and length, code had to become uncurry (/) $ foldl' (\(x,y) n -> (x + n, y + 1)) (0,0) xs
16:19:13 <tomsmeding> maerwald: wild guess: does it help if you use BSL.splitAt instead of take/drop? Small chance
16:19:24 Sornaensis joins (~Sornaensi@077213203030.dynamic.telenor.dk)
16:19:42 <tomsmeding> dmj`: yeah there you manually performed horizontal fusion :) Too bad about ghc
16:19:48 <dmj`> tomsmeding: GHCs optimizer won't do that I believe, and vector fusion relies on rewrite rules that don't always fire
16:19:50 <tomsmeding> it's very difficult to do in general though
16:19:52 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 265 seconds)
16:19:55 <maerwald> tomsmeding: I thought that too, but no, splitAt can't do it
16:20:01 <tomsmeding> sad
16:20:38 <dmj`> tomsmeding: GHC only optimizes across a single module at a time as well (blind JMP problem), those functions are defined in a different module, GHC would need to have the entire program in memory to do that.
16:20:47 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:21:03 <dmj`> maerwald: delete the "rest" and the "null"
16:21:10 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
16:21:31 <maerwald> dmj`: this is a minimal example... can't be done in the real code
16:21:54 <maerwald> there, rest is part of an unfoldr
16:22:15 <maerwald> and at every step it will leak `content`
16:22:21 <tomsmeding> dmj`: surely sum and length are inlined in ghc :p
16:22:53 <maerwald> I think it's time to get a drink and be sad
16:23:00 <tomsmeding> dmj`: 1. that's what {-# INLINE abc #-} is for, and 2. ghc does that for small functions anyway
16:23:31 × Sorny quits (~Sornaensi@79.142.232.102.static.router4.bolignet.dk) (Ping timeout: 260 seconds)
16:23:44 <tomsmeding> maerwald: if bytestring had offered a read function that only reads a prefix of a file (i.e. 1GB), then you could split the readFile in two; that would work
16:23:51 <tomsmeding> but that probably doesn't work in the full tar case either
16:24:44 <maerwald> I'll just rewrite that logic with streamly
16:24:58 Sorna joins (~Sornaensi@79.142.232.102.static.router4.bolignet.dk)
16:25:24 <tomsmeding> yeah making the bytestring _explicitly_ streaming instead of only implicitly via laziness is probably the way out
16:25:45 <maerwald> and streamly interacts well with bytestring, so it can be done incrementally
16:26:07 <dmj`> tomsmeding: main = do { [n] <- fmap read <$> getArgs; let xs = [1..n]; print (sum xs / fromIntegral (length xs)) }
16:26:12 <dmj`> tomsmeding: that will OOM your process for large n
16:26:45 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
16:27:09 <dmj`> tomsmeding: I don't think inlining can save you here
16:27:26 × Sornaensis quits (~Sornaensi@077213203030.dynamic.telenor.dk) (Ping timeout: 240 seconds)
16:28:47 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:29:04 <dmj`> tomsmeding: running with +RTS -s -RTS will be like 0% productivity
16:30:41 × MidAutumnHotaru quits (~MidAutumn@unaffiliated/midautumnhotaru) (Quit: Quit 啾)
16:31:21 MidAutumnHotaru joins (~MidAutumn@unaffiliated/midautumnhotaru)
16:32:46 alx741 joins (~alx741@181.196.68.238)
16:33:41 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:34:38 × MidAutumnHotaru quits (~MidAutumn@unaffiliated/midautumnhotaru) (Client Quit)
16:35:43 MidAutumnHotaru joins (~MidAutumn@unaffiliated/midautumnhotaru)
16:37:18 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
16:37:41 × mkDoku quits (~TheMule@aftr-37-201-195-134.unity-media.net) (Ping timeout: 240 seconds)
16:37:50 geekosaur joins (82650c7a@130.101.12.122)
16:38:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:39:08 <tomsmeding> dmj`: inlining + horizontal fusion can fix that because it yields the same as your handwritten foldr
16:39:08 howdoi joins (uid224@gateway/web/irccloud.com/x-unpvrllwptrnqqhb)
16:39:30 <tomsmeding> ghc does the inlining but not the hor. fusion
16:41:19 qqqq3 joins (3e1d4450@62.29.68.80)
16:42:39 × zyklotomic quits (~ethan@unaffiliated/chocopuff) (Remote host closed the connection)
16:42:41 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
16:43:05 zyklotomic joins (~ethan@66.154.104.2)
16:43:42 <qqqq3> Hello everyone, im faced with this error https://paste.tomsmeding.com/siTshGL1. Can someone explain this to me ?
16:44:24 jpds joins (~jpds@gateway/tor-sasl/jpds)
16:45:09 × xourt quits (d4c620ea@212-198-32-234.rev.numericable.fr) (Quit: Connection closed)
16:45:34 <geekosaur> what were you expecting (xs "-") to do?
16:46:09 <geekosaur> it's complaining because it expects xs to be a function, since it's applied to a string argument, but it's not
16:46:37 <qqqq3> how can i spesify my input to be char?
16:47:45 <dcbdan> '-' is a Char, "-" == ['-'] is a String
16:48:21 <qqqq3> so if i do a function like this test 'x' = x
16:48:29 <qqqq3> would the test function only expect chars ?
16:49:13 <joel135> :t \x -> 'x' == x
16:49:14 <lambdabot> Char -> Bool
16:49:25 <geekosaur> yes
16:49:37 <qqqq3> Thanks everyone
16:50:06 × zaquest quits (~notzaques@5.128.210.178) (Read error: Connection reset by peer)
16:50:34 zaquest joins (~notzaques@5.128.210.178)
16:51:40 <fresheyeball> error, called at compiler/utils/Maybes.hs:55:27 in ghc:Maybes
16:51:42 <fresheyeball> expectJust, called at compiler/ghci/Linker.hs:719:28 in ghc:Linker
16:51:45 <fresheyeball> how can I begin debugging this?
16:51:50 <fresheyeball> I have no idea how to begin
16:51:59 <fresheyeball> I think this is an issue with backpack and TH
16:54:47 × ericsagn1 quits (~ericsagne@2405:6580:0:5100:3c1:b586:27b7:7153) (Ping timeout: 260 seconds)
16:55:24 esp32_prog joins (~esp32_pro@91.193.4.202)
16:55:44 × cafce25 quits (~cafce25@ipbcc3009d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
16:55:54 <dcbdan> I don't know. Could it be that a Nothing is being passed in incorrectly?
16:56:09 rdivyanshu joins (uid322626@gateway/web/irccloud.com/x-gwsdixqwmnlinkah)
16:56:37 <geekosaur> that error is buried somewhere inside of ghc itself
16:56:43 haskellstudent joins (~quassel@213-225-9-45.nat.highway.a1.net)
16:59:40 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:00:29 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
17:01:00 aerona joins (~aerona@2600:6c54:4600:f300:17d9:d4ff:325b:67dc)
17:01:09 kritzefitz joins (~kritzefit@212.86.56.80)
17:02:29 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
17:04:31 Enrico63 joins (520efe97@cpc92708-cmbg20-2-0-cust150.5-4.cable.virginm.net)
17:04:43 × mupf quits (~micha@v22017094964653601.ultrasrv.de) (Quit: WeeChat 3.0)
17:05:11 <Enrico63> Hello there, can anybody help me get started with  http://mightybyte.github.io/monad-challenges/
17:05:12 <Enrico63> ?
17:05:15 mupf joins (~micha@v22017094964653601.ultrasrv.de)
17:05:18 × qqqq3 quits (3e1d4450@62.29.68.80) (Quit: Connection closed)
17:05:26 <fresheyeball> Enrico63: what do you need help with?
17:06:17 <Enrico63> I've posted a message on the github page: https://github.com/mightybyte/monad-challenges/issues/81 . In short, when I do `ghci Set1.hs` I get the error `ghc: unexpected RTS argument: Set1.hs`
17:06:21 notzmv joins (~zmv@unaffiliated/zmv)
17:07:48 <Enrico63> fresheyeball, I have to mention that following the instruction I run `cabal install` in the directory of the repo. Then when I found that issue on the github page, I also run `cabal install --package-env /PATH_TO_YOUR_FOLDER --lib` (with `/PATH_TO_YOUR_FOLDER` changed to `$PWD`, and I was in the repo's dir).
17:07:54 ericsagn1 joins (~ericsagne@2405:6580:0:5100:a729:cf9f:aaab:a664)
17:08:45 mkDoku joins (~TheMule@aftr-37-201-195-134.unity-media.net)
17:09:38 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:09:46 × solvr quits (57e3c46d@87.227.196.109) (Quit: Connection closed)
17:10:13 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:10:29 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
17:10:58 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
17:12:11 molehillish joins (~molehilli@ip98-165-87-166.ph.ph.cox.net)
17:12:16 × molehillish quits (~molehilli@ip98-165-87-166.ph.ph.cox.net) (Client Quit)
17:12:27 <joel135> https://hoogle.haskell.org/?hoogle=Application
17:12:56 <joel135> There are no parentheses in the second entry! "type Application = Request -> Response -> IO ResponseReceived -> IO ResponseReceived"
17:14:33 <monochrom> Are they even remotely related?
17:14:51 <geekosaur> the parentheses are in the originals, if you click through
17:15:01 <joel135> yes they are there when i click
17:15:11 <Enrico63> Hello there, can anybody help me get started with http://mightybyte.github.io/monad-challenges/ ? I've posted a message on the github page: https://github.com/mightybyte/monad-challenges/issues/81 . In short, when I do `ghci Set1.hs` I get the error `ghc: unexpected RTS argument: Set1.hs`. I have to mention that following the instruction I run
17:15:11 <Enrico63> `cabal install` in the directory of the repo. Then when I found that issue on the github page, I also run `cabal install --package-env /PATH_TO_YOUR_FOLDER --lib` (with `/PATH_TO_YOUR_FOLDER` changed to `$PWD`, and I was in the repo's dir).
17:15:57 <geekosaur> Enrico63, do you have an alias for ghci, perhaps?
17:16:38 <Enrico63> Yes, `alias ghci='ghci +RTS -M100M -c30'`. I forgot about that. And I don't even know why I have it :/
17:16:49 <Enrico63> i suppose `command ghci` will be enough..?
17:16:59 <Enrico63> yes
17:16:59 <geekosaur> yes
17:17:04 <monochrom> Well that's easy. ghci='ghci +RTS -M100M -c30 -RTS'
17:17:06 <geekosaur> or add '-RTS' to the end of that aliass
17:17:32 <monochrom> This is why remote tech support is impossible.
17:18:11 <Enrico63> monochrom, what? Forgetting we have some settings/aliases?
17:18:17 <monochrom> Yes.
17:18:29 × bahamas quits (~lucian@unaffiliated/bahamas) (Quit: leaving)
17:18:33 <Enrico63> Eh, that happens when we're new to some things, I suppose
17:19:12 ADG1089 joins (~aditya@122.163.139.43)
17:19:15 solvr joins (57e3c46d@87.227.196.109)
17:19:23 <Enrico63> If that alias is there, it's for some reason I thought was good, at that time. I vaguely remember ghci using a load of RAM
17:19:54 <Enrico63> However, it seems geekosaur makes impossible things, then :D
17:19:55 Pickchea joins (~private@unaffiliated/pickchea)
17:20:09 <geekosaur> I'm a sysadmin, I think of such things :)
17:20:12 HannaM joins (~quassel@p54849510.dip0.t-ipconnect.de)
17:21:08 <Enrico63> geekosaur, for whatever reason I did put that alias in my config files, appending `-RTS` at the end of it... what does it?
17:21:24 <monochrom> "end of the RTS things"
17:21:38 <geekosaur> +RTS starts passing parameters directly to ghc's runtime system, -RTS stops
17:22:09 <geekosaur> --RTS (with double hyphen) both stops and forces any later +RTS to be passed through to the application, if you need to do that for some reason
17:23:06 <Enrico63> oh,ok, so it's just like +RTS and -RTS are opening and closing parenthesis around stuff to be passed to the runtime system (whatever that means)
17:24:45 <ADG1089> why don't people check in cabal.project?
17:25:10 doraemon joins (~doraemon@117.222.71.159)
17:26:29 <tomsmeding> Enrico63: indeed :)
17:27:04 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
17:27:32 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
17:27:40 <geekosaur> Enrico63, you may want to close that issue with an explanation. also you appended to an unrelated issue, you should probably have opened a new one (it's too late now)
17:28:13 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
17:28:46 barthandelous joins (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9)
17:29:43 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
17:31:02 cub3s_ joins (bifunc2@gateway/vpn/protonvpn/bifunc2)
17:31:03 × forell quits (~forell@unaffiliated/forell) (Quit: ZNC - https://znc.in)
17:31:25 aenesidemus joins (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net)
17:31:43 × todda7 quits (~torstein@athedsl-09242.home.otenet.gr) (Ping timeout: 268 seconds)
17:32:14 × notzmv quits (~zmv@unaffiliated/zmv) (Read error: Connection reset by peer)
17:32:39 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Ping timeout: 246 seconds)
17:32:42 × Enrico63 quits (520efe97@cpc92708-cmbg20-2-0-cust150.5-4.cable.virginm.net) (Quit: Connection closed)
17:32:52 forell joins (~forell@unaffiliated/forell)
17:34:00 <cub3s_> When I publish a Haskell library, I usually put a stack.yaml file in there with a resolver. Should I be doing this? This file is sort of useless because anyone who compiles the library is going to use their own stack.yaml resolver (or Nix file, or just pure cabal) anyway.
17:34:11 × kuribas quits (~user@ptr-25vy0i98ky9sotgacau.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
17:34:30 <cub3s_> well, unless they just want to download my library only, and compile/test it in isolation
17:34:47 <glguy> cub3s_: it's not useful for someone depending on your library, but if stack's useful at all it could be useful for someone developing your library
17:34:51 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
17:35:09 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
17:35:16 dcoutts joins (~duncan@94.186.125.91.dyn.plus.net)
17:35:27 <glguy> if you have interesting extra-deps listed, it could serve as a shortcut to updating their own file
17:35:28 <cub3s_> glguy, ok now, in a similar way, shouldn't i also include a nix file pinned to a specific nixpkgs commit? (in a similar way that stack.yaml is pinned to specific resolver)
17:35:34 vicfred joins (~vicfred@unaffiliated/vicfred)
17:36:05 <glguy> cub3s_: I'd suppose it's just a question of what your other library developers need and what you want to support and actively test
17:36:19 <glguy> stale build information doesn't help anyone
17:36:48 × barthandelous quits (~calebbrze@2600:1007:b0a1:3aa7:b579:e4ea:b055:38a9) (Quit: WeeChat 3.1)
17:37:17 <cub3s_> yeah
17:37:36 <cub3s_> it's starting to make sense to me to have both stack and nix support, as those are the most common
17:38:29 × CaptainIRS quits (9d339880@157.51.152.128) (Quit: Connection closed)
17:38:43 <minoru_shiraeesh> emmanuel_erc: "Regardless, I'm leaving the current job partially because I think the rewrite is a dumb idea and I don't want to work on a codebase that is going to be thrown out eventually."
17:38:51 <minoru_shiraeesh> emmanuel_erc: "They didn't really have an interest in listening to what I had to say about the whole venture."
17:39:08 <minoru_shiraeesh> emmanuel_erc: "Given what has happened to me at this last job, it makes me wonder if persuing Haskell has been worth it or will be so."
17:39:36 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:39:51 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
17:40:18 <minoru_shiraeesh> I see your point and the way you feel, but on the other hand, I recently heard a saying "don't let a love for a language blind you"
17:40:19 × vicfred quits (~vicfred@unaffiliated/vicfred) (Client Quit)
17:40:27 ukari joins (~ukari@unaffiliated/ukari)
17:41:44 <minoru_shiraeesh> if you take another perspective, the task of rewriting a codebase is an interesting one.
17:42:30 <monochrom> How long ago was that conversation?
17:42:52 <minoru_shiraeesh> :) it was 3 hours ago
17:43:34 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
17:44:46 <cub3s_> yeah rewrite in haskell and get paid for it?! not bad if you otherwise like it and will gain valuable haskell experience. "it'll be thrown out eventually". that's not really the employee's problem, is it? someone else bears the risk.
17:45:22 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
17:45:31 <geekosaur> this is rewriting away from haskell, iirc
17:45:34 <geekosaur> to typescript
17:45:39 <cub3s_> oh, my bad
17:46:06 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 260 seconds)
17:46:56 × zyklotomic quits (~ethan@66.154.104.2) (Changing host)
17:46:56 zyklotomic joins (~ethan@unaffiliated/chocopuff)
17:48:28 zfnmxt_ is now known as zfnmxt
17:49:26 vicfred joins (vicfred@gateway/vpn/mullvad/vicfred)
17:49:27 <minoru_shiraeesh> hmm, turns out he was in the position of maintaining legacy code that was in the process of being ported to other language
17:49:48 <minoru_shiraeesh> then my point about rewriting being an interesting task doesn't apply
17:50:19 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds)
17:50:25 Tops2 joins (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de)
17:52:11 × Tops21 quits (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de) (Ping timeout: 240 seconds)
17:52:53 Ory0n joins (~Ory0n@mob-5-91-113-166.net.vodafone.it)
17:53:43 acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
17:54:01 × zyklotomic quits (~ethan@unaffiliated/chocopuff) (Quit: WeeChat 3.1)
17:54:46 × zaquest quits (~notzaques@5.128.210.178) (Ping timeout: 240 seconds)
17:54:56 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
17:55:05 × mkDoku quits (~TheMule@aftr-37-201-195-134.unity-media.net) (Ping timeout: 265 seconds)
17:55:22 × geekosaur quits (82650c7a@130.101.12.122) (Ping timeout: 240 seconds)
17:55:53 Ory0n parts (~Ory0n@mob-5-91-113-166.net.vodafone.it) ("Leaving")
17:56:46 × acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Client Quit)
18:05:24 × esp32_prog quits (~esp32_pro@91.193.4.202) (Quit: esp32_prog)
18:05:41 × solvr quits (57e3c46d@87.227.196.109) (Quit: Connection closed)
18:07:04 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
18:07:10 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
18:07:52 ukari joins (~ukari@unaffiliated/ukari)
18:08:49 × coot quits (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
18:10:20 geekosaur joins (82650c7a@130.101.12.122)
18:12:26 × rajivr quits (uid269651@gateway/web/irccloud.com/x-capllcjtsollkkrc) (Quit: Connection closed for inactivity)
18:13:23 notzmv joins (~zmv@unaffiliated/zmv)
18:14:24 <maerwald> did they ever say what kind of code it was?
18:14:35 <maerwald> If it was frontend, I'd say that might be quite reasonable
18:15:22 jj2021 joins (~JJ@cpe-76-185-168-105.satx.res.rr.com)
18:15:26 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
18:17:45 shalokshalom joins (~quassel@2a02:1748:dd5e:7f60:cf49:8384:7c93:3106)
18:17:46 <maerwald> tomsmeding: https://arxiv.org/abs/1207.2017 can I maybe hack around my problem with that? :p
18:18:54 <tomsmeding> maerwald: I'm not sure how "un-sharing" a 1GB buffer would look :p
18:19:33 × srk quits (~sorki@unaffiliated/srk) (Ping timeout: 246 seconds)
18:20:29 eacameron joins (uid256985@gateway/web/irccloud.com/x-ewulhovpekfjgces)
18:21:35 × stree quits (~stree@68.36.8.116) (Ping timeout: 260 seconds)
18:22:40 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
18:25:00 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
18:25:19 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
18:25:59 × thc202 quits (~thc202@unaffiliated/thc202) (Quit: thc202)
18:26:28 <maerwald> hmm, so another workaround would be to ditch lazy bytestring and recored file offsets, then have the call site re-read the file at those offsets
18:26:37 fendor__ joins (~fendor@178.115.129.28.wireless.dyn.drei.com)
18:27:03 <tomsmeding> that should work yes
18:27:17 <maerwald> since metadata is small in size, the memory leaks there aren't noticable
18:27:20 doraemon parts (~doraemon@117.222.71.159) ()
18:27:43 <maerwald> s/metadata/header/
18:29:38 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
18:29:42 × fendor_ quits (~fendor@91.141.3.10.wireless.dyn.drei.com) (Ping timeout: 268 seconds)
18:30:53 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
18:31:53 <haskellstudent> ok i was wrong regarding wasm bundle size. maybe what i remembered reading was the size before optimizations. afterwards rust wasm is just slightly larger than js and performs better. asterius (haskell wasm) output .wasm for todomvc (https://asterius.netlify.app/demo/todomvc/index.html#/completed) is 132k gzipped which is pretty good actually. but of course it will take a while untill haskell wasm is production ready, if ever.
18:33:56 fendor joins (~fendor@178.165.131.170.wireless.dyn.drei.com)
18:34:56 stree joins (~stree@68.36.8.116)
18:35:35 × fendor__ quits (~fendor@178.115.129.28.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
18:36:32 × typetetris quits (uid275937@gateway/web/irccloud.com/x-ffiqklyrigbqxewu) (Quit: Connection closed for inactivity)
18:36:43 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
18:37:12 × manuel quits (~manuel@185.204.1.185) (Remote host closed the connection)
18:39:11 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
18:41:34 × tomboy64 quits (~tomboy64@unaffiliated/tomboy64) (Quit: Off to see the wizard.)
18:41:38 × darjeeling_ quits (~darjeelin@115.215.43.37) (Ping timeout: 246 seconds)
18:43:49 tomboy64 joins (~tomboy64@unaffiliated/tomboy64)
18:45:04 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
18:45:33 × aenesidemus quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Quit: Leaving)
18:47:28 Forlorn_ joins (~Forlorn@unaffiliated/forlorn)
18:48:41 maroloccio joins (~marolocci@pousada3ja.mma.com.br)
18:48:46 Codaraxis joins (Codaraxis@gateway/vpn/mullvad/codaraxis)
18:48:49 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
18:50:01 <mikoto-chan> sorry if off-topic but what are a free category and a graph in category theory?
18:50:27 <mikoto-chan> most search results are very vague, I'm learning CT to better understand Haskell
18:51:49 × ADG1089 quits (~aditya@122.163.139.43) (Remote host closed the connection)
18:54:09 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
18:54:29 <koz_> Learning CT will not necessarily help understanding Haskell, FWIW.
18:54:32 <hololeap> https://ncatlab.org/nlab/show/free+category ; https://en.wikipedia.org/wiki/Graph_(discrete_mathematics)
18:54:36 darjeeling_ joins (~darjeelin@122.245.210.109)
18:56:12 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
18:56:40 <mikoto-chan> koz_: things like Monoids and Kleisli categories were far easier to grasp in mathematics than Haskell for me
18:56:55 <koz_> mikoto-chan: YMMV.
18:57:06 × hive-mind quits (~hivemind@rrcs-67-53-148-69.west.biz.rr.com) (Ping timeout: 260 seconds)
18:59:20 __minoru__shirae joins (~shiraeesh@5.101.59.224)
18:59:24 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 252 seconds)
18:59:26 × minoru_shiraeesh quits (~shiraeesh@109.166.56.223) (Ping timeout: 240 seconds)
19:00:53 × tomboy64 quits (~tomboy64@unaffiliated/tomboy64) (Ping timeout: 246 seconds)
19:01:11 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
19:01:19 molehillish joins (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4)
19:01:21 × molehillish quits (~molehilli@2600:8800:8d06:1800:6d47:e2d7:e78c:8f4) (Remote host closed the connection)
19:01:30 <cub3s_> is it possible to configure cabal such that it will ERROR instead of downloading a package, if that package is not found in Nix store?
19:02:04 <cub3s_> the default seems to be, if it's not found on nix store (within a nix shell), it still downloads/builds it using regular hackage
19:02:18 <hololeap> mikoto-chan: i think the concept is just really obvious and simple, which is why it feels "vague" to you
19:02:25 norsxa joins (uid494793@gateway/web/irccloud.com/x-nletjvianbknahyj)
19:02:28 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Remote host closed the connection)
19:02:46 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
19:03:30 × maroloccio quits (~marolocci@pousada3ja.mma.com.br) (Quit: WeeChat 2.3)
19:03:34 × Franciman quits (~francesco@host-87-20-23-243.retail.telecomitalia.it) (Quit: Leaving)
19:03:39 <mikoto-chan> hololeap: alright let's say I want to learn CT for fun but there's no channel to discuss it on Freenode
19:03:43 <mikoto-chan> maybe ##math?
19:04:51 <hololeap> i've asked CT questions on occasion in #haskell and nobody complained. ##math works but don't expect anyone there to know anything about haskell
19:05:39 × rdivyanshu quits (uid322626@gateway/web/irccloud.com/x-gwsdixqwmnlinkah) (Quit: Connection closed for inactivity)
19:06:08 × frozenErebus quits (~frozenEre@37.231.244.249) (Ping timeout: 246 seconds)
19:07:55 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
19:08:14 <mikoto-chan> I will change the state of the universe with Monad IO so that Haskell doesn't exist when I'm gonna ask questions in ##math :)
19:08:37 <monochrom> ##category-theory or ##category, I forgot which
19:08:59 <joel135> ^ both are empty
19:08:59 <hololeap> as far as your question about free categories, that nLab article lays it out well. there really isn't much to it.
19:09:47 hive-mind joins (~hivemind@rrcs-67-53-148-69.west.biz.rr.com)
19:10:57 <monochrom> ##categorytheory
19:11:31 <joel135> ok
19:11:32 <monochrom> Some of them are some of us, you will be in good hands. :)
19:11:52 × cub3s_ quits (bifunc2@gateway/vpn/protonvpn/bifunc2) (Quit: Leaving)
19:12:00 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
19:13:05 ukari joins (~ukari@unaffiliated/ukari)
19:15:50 hiroaki joins (~hiroaki@2a02:908:4b18:8c40:cdf8:a3f:92b1:70de)
19:18:36 son0p joins (~ff@181.136.122.143)
19:23:16 Guest29958 joins (~amcrae@194.37.96.82)
19:25:40 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
19:25:58 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
19:26:11 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
19:26:33 cgfuh joins (~cgfuh@181.167.191.58)
19:31:49 `slikts joins (~nelabs@wikipedia/reinis)
19:34:02 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:34:43 todda7 joins (~torstein@athedsl-09242.home.otenet.gr)
19:35:13 × hololeap quits (~hololeap@unaffiliated/hololeap) (Quit: Quit)
19:37:17 coot joins (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl)
19:38:08 tomboy64 joins (~tomboy64@unaffiliated/tomboy64)
19:39:00 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
19:41:48 Sorny joins (~Sornaensi@077213203030.dynamic.telenor.dk)
19:42:23 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
19:42:43 notzmv joins (~zmv@unaffiliated/zmv)
19:43:51 hololeap joins (~hololeap@unaffiliated/hololeap)
19:44:51 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
19:45:11 × Sorna quits (~Sornaensi@79.142.232.102.static.router4.bolignet.dk) (Ping timeout: 240 seconds)
19:45:12 × hololeap quits (~hololeap@unaffiliated/hololeap) (Client Quit)
19:46:08 Franciman joins (~francesco@host-87-20-23-243.retail.telecomitalia.it)
19:46:36 gesties joins (a7f8ae19@167.248.174.25)
19:47:05 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 246 seconds)
19:48:08 hololeap joins (~hololeap@gateway/tor-sasl/hololeap)
19:48:11 × hypercube quits (hypercube@gateway/vpn/protonvpn/hypercube) (Ping timeout: 265 seconds)
19:48:22 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
19:49:19 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 260 seconds)
19:49:41 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
19:49:48 Lord_of_Life_ is now known as Lord_of_Life
19:49:50 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
19:50:32 × hololeap quits (~hololeap@gateway/tor-sasl/hololeap) (Remote host closed the connection)
19:50:54 hololeap joins (~hololeap@gateway/tor-sasl/hololeap)
19:56:14 × dhouthoo quits (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 3.0)
19:56:26 jakalx parts (~jakalx@base.jakalx.net) ()
20:00:59 × __minoru__shirae quits (~shiraeesh@5.101.59.224) (Ping timeout: 260 seconds)
20:02:58 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:03:35 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
20:05:11 × petersen quits (~petersen@redhat/juhp) (Ping timeout: 240 seconds)
20:05:55 × coot quits (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
20:07:10 coot joins (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl)
20:08:19 petersen joins (~petersen@redhat/juhp)
20:08:25 hypercube joins (~hypercube@75.186.121.128)
20:08:40 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
20:09:36 × todda7 quits (~torstein@athedsl-09242.home.otenet.gr) (Ping timeout: 260 seconds)
20:12:42 todda7 joins (~torstein@athedsl-09242.home.otenet.gr)
20:12:45 × mikoto-chan quits (~anass@gateway/tor-sasl/mikoto-chan) (Ping timeout: 240 seconds)
20:13:35 notzmv joins (~zmv@unaffiliated/zmv)
20:14:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:15:49 jess is now known as j
20:19:41 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
20:19:45 × coot quits (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
20:22:27 × Guest29958 quits (~amcrae@194.37.96.82) (Remote host closed the connection)
20:23:49 × sm2n quits (~sm2n@bras-base-hmtnon143hw-grc-13-70-54-76-62.dsl.bell.ca) (Read error: Connection reset by peer)
20:23:50 sm2n_ joins (~sm2n@bras-base-hmtnon143hw-grc-13-70-54-76-62.dsl.bell.ca)
20:23:52 sm2n_ is now known as sm2n
20:28:55 jakalx joins (~jakalx@base.jakalx.net)
20:32:49 enoq joins (~textual@194-208-146-143.lampert.tv)
20:35:13 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
20:38:21 × Forlorn_ quits (~Forlorn@unaffiliated/forlorn) (Read error: Connection reset by peer)
20:41:21 × sudden quits (~lax@unaffiliated/laxask) (Ping timeout: 265 seconds)
20:41:45 × geekosaur quits (82650c7a@130.101.12.122) (Quit: Connection closed)
20:41:53 mnrmnaugh parts (~mnrmnaugh@unaffiliated/mnrmnaugh) ("Leaving")
20:42:09 sudden joins (~lax@unaffiliated/laxask)
20:42:17 awk joins (~mnrmnaugh@unaffiliated/mnrmnaugh)
20:42:56 × awk quits (~mnrmnaugh@unaffiliated/mnrmnaugh) (Remote host closed the connection)
20:42:59 × stree quits (~stree@68.36.8.116) (Ping timeout: 260 seconds)
20:43:27 mnrmnaugh joins (~mnrmnaugh@unaffiliated/mnrmnaugh)
20:45:37 × jumper149 quits (~jumper149@80.240.31.34) (Quit: WeeChat 3.1)
20:47:36 Eprom joins (~Eprom@185.169.233.10)
20:49:16 × todda7 quits (~torstein@athedsl-09242.home.otenet.gr) (Ping timeout: 260 seconds)
20:50:24 todda7 joins (~torstein@athedsl-09242.home.otenet.gr)
20:50:46 × Pickchea quits (~private@unaffiliated/pickchea) (Quit: Leaving)
20:53:54 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 246 seconds)
20:54:43 lawt joins (~lawt@c-73-151-3-92.hsd1.ca.comcast.net)
20:55:23 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
20:56:18 stree joins (~stree@68.36.8.116)
20:57:27 nut joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
20:59:51 × gesties quits (a7f8ae19@167.248.174.25) (Quit: Connection closed)
21:00:45 × xff0x quits (~xff0x@2001:1a81:5274:b300:d2ad:1716:ab64:e445) (Ping timeout: 250 seconds)
21:01:46 xff0x joins (~xff0x@2001:1a81:5274:b300:8230:bebe:5967:a961)
21:02:51 ADG1089 joins (~aditya@122.163.139.43)
21:04:16 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
21:04:39 <ADG1089> does this (https://paste.tomsmeding.com/jngJObwO) mean I have to switch away form using HashMap, what are some other alternatives?
21:05:02 × vv8 quits (~egp_@128-71-69-136.broadband.corbina.ru) (Ping timeout: 265 seconds)
21:05:36 × Varis quits (~Tadas@unaffiliated/varis) (Ping timeout: 260 seconds)
21:05:44 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
21:06:07 × Narinas quits (~Narinas@187-178-93-112.dynamic.axtel.net) (Read error: Connection reset by peer)
21:06:59 acidjnk_new joins (~acidjnk@p200300d0c72b9510b1ed14260384c0cf.dip0.t-ipconnect.de)
21:08:16 Narinas joins (~Narinas@187-178-93-112.dynamic.axtel.net)
21:08:38 × heatsink quits (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
21:11:41 × todda7 quits (~torstein@athedsl-09242.home.otenet.gr) (Ping timeout: 240 seconds)
21:12:00 × _d0t quits (void@gateway/vpn/mullvad/d0t/x-89419360) (Quit: Konversation terminated!)
21:12:58 dpl joins (~dpl@77-121-78-163.chn.volia.net)
21:16:21 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
21:16:47 × Tops2 quits (~Tobias@dyndsl-095-033-088-082.ewe-ip-backbone.de) (Read error: Connection reset by peer)
21:17:31 × jj2021 quits (~JJ@cpe-76-185-168-105.satx.res.rr.com) (Ping timeout: 260 seconds)
21:21:23 <haskellstudent> ADG1089: i am just a haskell noob, but my first thought is how could anyone answer that without any context? i can see that you have some haskell application that spends around 20% of its time in hashmap related functions. ok now what does that tell us? nothing.
21:23:16 × xff0x quits (~xff0x@2001:1a81:5274:b300:8230:bebe:5967:a961) (Ping timeout: 258 seconds)
21:23:59 xff0x joins (~xff0x@2001:1a81:5274:b300:73fd:d48e:9253:e66b)
21:25:07 deviantfero joins (~deviantfe@190.150.27.58)
21:25:58 × rzmt quits (~rzmt@87-92-180-112.rev.dnainternet.fi) (Ping timeout: 260 seconds)
21:28:10 usr25 joins (~usr25@unaffiliated/usr25)
21:28:49 × kristijonas quits (~kristijon@78-56-32-39.static.zebra.lt) (Remote host closed the connection)
21:29:12 kristijonas joins (~kristijon@78-56-32-39.static.zebra.lt)
21:31:23 × nut quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds)
21:32:13 heatsink joins (~heatsink@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
21:32:27 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 260 seconds)
21:33:38 × Franciman quits (~francesco@host-87-20-23-243.retail.telecomitalia.it) (Quit: Leaving)
21:34:00 __minoru__shirae joins (~shiraeesh@5.101.59.224)
21:34:17 todda7 joins (~torstein@athedsl-09242.home.otenet.gr)
21:36:42 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
21:37:00 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
21:37:46 × oish quits (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 268 seconds)
21:38:00 <ADG1089> yeah maybe that was a wrong question without context
21:43:30 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-47-67-70-101-46.dsl.bell.ca) (Quit: ZNC 1.8.2 - https://znc.in)
21:44:10 pieguy128 joins (~pieguy128@bras-base-mtrlpq5031w-grc-47-67-70-101-46.dsl.bell.ca)
21:45:44 × chele quits (~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
21:46:41 × enoq quits (~textual@194-208-146-143.lampert.tv) (Quit: Textual IRC Client: www.textualapp.com)
21:46:45 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
21:48:00 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
21:53:06 × HannaM quits (~quassel@p54849510.dip0.t-ipconnect.de) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
21:54:43 rzmt joins (~rzmt@87-92-180-112.rev.dnainternet.fi)
21:57:36 × NGravity quits (csp@gateway/shell/xshellz/x-beigeckolcvbhubi) (Ping timeout: 246 seconds)
21:57:50 × fendor quits (~fendor@178.165.131.170.wireless.dyn.drei.com) (Remote host closed the connection)
21:58:26 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
21:58:41 × __minoru__shirae quits (~shiraeesh@5.101.59.224) (Ping timeout: 265 seconds)
21:58:44 × LKoen quits (~LKoen@65.250.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.”)
22:00:07 × hendursaga quits (~weechat@gateway/tor-sasl/hendursaga) (Remote host closed the connection)
22:00:32 hendursaga joins (~weechat@gateway/tor-sasl/hendursaga)
22:00:39 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
22:01:01 myShoggoth joins (~myShoggot@75.164.73.93)
22:01:02 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
22:01:05 NGravity joins (csp@gateway/shell/xshellz/x-yvbxxozqugoitghs)
22:02:54 × ericsagn1 quits (~ericsagne@2405:6580:0:5100:a729:cf9f:aaab:a664) (Ping timeout: 245 seconds)
22:03:52 × lambda quits (~xiretza@mail.xiretza.xyz) (Ping timeout: 276 seconds)
22:06:46 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
22:07:04 notzmv joins (~zmv@unaffiliated/zmv)
22:07:58 pavonia joins (~user@unaffiliated/siracusa)
22:10:05 × ArsenArsen quits (~Arsen@fsf/member/ArsenArsen) (Changing host)
22:10:05 ArsenArsen joins (~Arsen@managarm/dev/ArsenArsen)
22:14:05 royal_screwup219 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
22:15:24 ericsagn1 joins (~ericsagne@2405:6580:0:5100:b937:4ffa:f3c4:aca7)
22:15:34 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
22:15:41 × kristijonas quits (~kristijon@78-56-32-39.static.zebra.lt) (Ping timeout: 240 seconds)
22:19:06 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 260 seconds)
22:20:47 × javran quits (~javran@108-201-186-97.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 245 seconds)
22:21:26 kristijonas joins (~kristijon@78-56-32-39.static.zebra.lt)
22:25:45 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
22:27:27 × michalz quits (~user@185.246.204.46) (Remote host closed the connection)
22:30:11 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
22:30:47 ddellacosta joins (~ddellacos@86.106.143.174)
22:30:49 ddellaco_ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
22:30:50 × ddellaco_ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Remote host closed the connection)
22:31:49 ddellac__ joins (~ddellacos@ool-44c73afa.dyn.optonline.net)
22:32:20 Desmond373 joins (b49673ba@180.150.115.186)
22:33:18 sveit joins (~sveit@2001:19f0:ac01:247:5400:ff:fe5c:689f)
22:33:50 simplegauss joins (~simplegau@2001:19f0:ac01:247:5400:ff:fe5c:689f)
22:34:10 × egorbelibov quits (~65676f72@2001:8a0:5708:2a00:e0c3:c7c:460b:c7eb) (Remote host closed the connection)
22:34:25 × royal_screwup219 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
22:34:25 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
22:34:44 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
22:35:46 × ddellac__ quits (~ddellacos@ool-44c73afa.dyn.optonline.net) (Ping timeout: 240 seconds)
22:36:07 × lotuseater quits (~user@p200300e78705e200e5bac9463b911ab3.dip0.t-ipconnect.de) (Quit: ERC (IRC client for Emacs 27.1))
22:38:56 × sdrodge quits (~sdrodge@unaffiliated/sdrodge) (Ping timeout: 246 seconds)
22:38:58 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
22:39:06 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
22:39:40 Tario joins (~Tario@201.192.165.173)
22:43:15 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
22:44:45 cyjia15 joins (6779d067@103.121.208.103)
22:45:32 × cyjia15 quits (6779d067@103.121.208.103) (Client Quit)
22:45:36 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:9469:29ae:2372:7bd6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:49:55 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
22:51:19 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds)
22:54:22 sdrodge joins (~sdrodge@unaffiliated/sdrodge)
22:55:22 rprije joins (~rprije@59-102-63-15.tpgi.com.au)
22:58:02 × cheater quits (~user@unaffiliated/cheater) (Read error: Connection reset by peer)
22:58:31 cheater joins (~user@unaffiliated/cheater)
22:59:41 × Desmond373 quits (b49673ba@180.150.115.186) (Quit: Connection closed)
23:01:33 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
23:02:16 × mouseghost quits (~draco@wikipedia/desperek) (Quit: mew wew)
23:04:11 × stree quits (~stree@68.36.8.116) (Ping timeout: 240 seconds)
23:05:19 × hiroaki quits (~hiroaki@2a02:908:4b18:8c40:cdf8:a3f:92b1:70de) (Ping timeout: 260 seconds)
23:05:25 vv8 joins (~egp_@128-71-69-136.broadband.corbina.ru)
23:09:46 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:13:43 × haskellstudent quits (~quassel@213-225-9-45.nat.highway.a1.net) (Ping timeout: 260 seconds)
23:13:58 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
23:14:05 × notzmv quits (~zmv@unaffiliated/zmv) (Ping timeout: 265 seconds)
23:17:35 stree joins (~stree@68.36.8.116)
23:18:18 CMCDragonkai2 joins (~Thunderbi@120.17.224.123)
23:19:30 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:19:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds)
23:23:03 × crestfallen quits (~john@128.32.176.159) (Ping timeout: 260 seconds)
23:25:39 × zebrag quits (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!)
23:26:01 zebrag joins (~inkbottle@aaubervilliers-651-1-244-162.w83-200.abo.wanadoo.fr)
23:27:45 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
23:30:50 × vicfred quits (vicfred@gateway/vpn/mullvad/vicfred) (Quit: Leaving)
23:35:50 × emmanuel_erc quits (~user@cpe-74-71-106-64.nyc.res.rr.com) (Ping timeout: 265 seconds)
23:44:13 mach1speed joins (~textual@S0106f0b4d2c39cee.va.shawcable.net)
23:45:26 × p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 260 seconds)
23:46:23 × hypercube quits (~hypercube@75.186.121.128) (Ping timeout: 260 seconds)
23:48:09 p8m joins (p8m@gateway/vpn/protonvpn/p8m)
23:48:10 BonesJoh2son65 joins (~wheetseek@pool-173-75-8-46.pitbpa.fios.verizon.net)
23:48:33 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
23:48:52 <BonesJoh2son65> part
23:48:53 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:48:55 BonesJoh2son65 parts (~wheetseek@pool-173-75-8-46.pitbpa.fios.verizon.net) ()
23:49:49 <Axman6> ADG1089: Did you want to give us more context? Mayve your app should be spending 15% of its time in looking up in hashmaps, maybe it's the wrong data type entirely
23:54:03 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 268 seconds)
23:56:11 × Sorny quits (~Sornaensi@077213203030.dynamic.telenor.dk) (Ping timeout: 240 seconds)
23:59:07 Tario joins (~Tario@199.58.83.9)

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