2021/08/06

2021-08-06 00:00:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 00:03:36 +0200Atum_(~IRC@user/atum/x-2392232) (Quit: Atum_)
2021-08-06 00:04:22 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 00:05:27 +0200Neuromancer(~Neuromanc@user/neuromancer) (Remote host closed the connection)
2021-08-06 00:05:40 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net) (Ping timeout: 272 seconds)
2021-08-06 00:08:01 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-06 00:12:20 +0200agua_pesada(~agua_pesa@2804:14c:8793:8e2f:48b4:3d09:2f3b:552b)
2021-08-06 00:14:18 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 276 seconds)
2021-08-06 00:15:09 +0200typetetris(sid275937@tinside.irccloud.com)
2021-08-06 00:18:20 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Quit: Quit)
2021-08-06 00:18:20 +0200xff0x_(~xff0x@2001:1a81:5296:aa00:d57e:94f9:9f5a:1218) (Ping timeout: 258 seconds)
2021-08-06 00:18:34 +0200MQ-17J(~MQ-17J@8.21.10.94)
2021-08-06 00:19:08 +0200xff0x_(~xff0x@2001:1a81:5296:aa00:8dc0:fe3f:5c9e:fa3a)
2021-08-06 00:25:07 +0200sheepduck(~sheepduck@user/sheepduck) (Quit: Konversation terminated!)
2021-08-06 00:25:15 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com)
2021-08-06 00:27:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 00:28:03 +0200barzo(~hd@159.146.18.173) (Read error: Connection reset by peer)
2021-08-06 00:30:00 +0200Guest34(~Guest34@2406:3003:2006:447e:fc93:a477:b13c:4b43)
2021-08-06 00:33:07 +0200Guest34(~Guest34@2406:3003:2006:447e:fc93:a477:b13c:4b43) (Client Quit)
2021-08-06 00:33:09 +0200agua_pesada(~agua_pesa@2804:14c:8793:8e2f:48b4:3d09:2f3b:552b) (Quit: CoreIRC for Android - www.coreirc.com)
2021-08-06 00:35:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2021-08-06 00:36:41 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-06 00:36:42 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Client Quit)
2021-08-06 00:36:52 +0200wrengrwrengr_away
2021-08-06 00:37:10 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-06 00:37:31 +0200wrengr_awaywrengr
2021-08-06 00:48:08 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 252 seconds)
2021-08-06 00:48:33 +0200aman(~aman@user/aman)
2021-08-06 00:59:26 +0200dajoer(~david@user/gvx)
2021-08-06 01:05:43 +0200Nahra(~user@static.161.95.99.88.clients.your-server.de) (Remote host closed the connection)
2021-08-06 01:11:22 +0200jjess
2021-08-06 01:14:32 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 252 seconds)
2021-08-06 01:17:56 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:b0d1:cd6e:d590:7ec7)
2021-08-06 01:21:10 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-08-06 01:22:21 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:b0d1:cd6e:d590:7ec7) (Ping timeout: 258 seconds)
2021-08-06 01:23:15 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 01:26:02 +0200vysn(~vysn@user/vysn) (Remote host closed the connection)
2021-08-06 01:26:27 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:298a:b52c:58df:cdd4)
2021-08-06 01:27:11 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-06 01:34:30 +0200Nahra(~user@static.161.95.99.88.clients.your-server.de)
2021-08-06 01:59:09 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
2021-08-06 01:59:22 +0200enoq(~enoq@194-208-179-35.lampert.tv) (Quit: enoq)
2021-08-06 02:00:44 +0200Codaraxis_(~Codaraxis@user/codaraxis)
2021-08-06 02:01:04 +0200retroid_(~retro@5ec19a54.skybroadband.com) (Ping timeout: 258 seconds)
2021-08-06 02:03:07 +0200kor1(~kor1@user/kor1)
2021-08-06 02:03:12 +0200kor1(~kor1@user/kor1) ()
2021-08-06 02:04:18 +0200Codaraxis__(~Codaraxis@user/codaraxis) (Ping timeout: 240 seconds)
2021-08-06 02:07:05 +0200jmorris(uid433911@id-433911.stonehaven.irccloud.com)
2021-08-06 02:09:10 +0200euouae(~euouae@user/euouae)
2021-08-06 02:09:13 +0200 <euouae> Hello
2021-08-06 02:09:19 +0200 <Axman6> o/
2021-08-06 02:09:32 +0200 <euouae> How does --config-file work in cabal? Does anyone know?
2021-08-06 02:09:59 +0200 <euouae> I read in the docs that you can use it together with user-config, such as cabal user-config --config-file foo.cabal, but I get that "--config-file" is not recognized
2021-08-06 02:12:34 +0200 <geekosaur> it works for me but --config-file has to come before the command
2021-08-06 02:12:48 +0200 <geekosaur> cabal --config-file foo.cabal user-config ...
2021-08-06 02:13:39 +0200 <euouae> Oh I see, it's a global option then. Sorry
2021-08-06 02:14:06 +0200 <euouae> Another question is, does cabal 3.4 have any drastic changes in terms of building and installing packages? I noticed the section is not yet written in the docs, but 3.2 is
2021-08-06 02:15:34 +0200 <geekosaur> that I can't help with. (I note that 3.6 was just released but has no online manual at all yet.)
2021-08-06 02:17:34 +0200 <euouae> oh wow
2021-08-06 02:19:08 +0200jesssandcat
2021-08-06 02:19:29 +0200 <monochrom> New today: We're now on to 3.6.0.0 >:)
2021-08-06 02:20:06 +0200vicfred(~vicfred@user/vicfred)
2021-08-06 02:21:02 +0200 <euouae> cabal tells me 3.4 is up to date, although hackage mentions 3.6
2021-08-06 02:21:03 +0200jao(jao@gateway/vpn/protonvpn/jao) (Ping timeout: 276 seconds)
2021-08-06 02:21:07 +0200 <euouae> Not sure why, even though I updated.
2021-08-06 02:22:54 +0200 <davean> euouae: cabal-install and Cabal are seperate
2021-08-06 02:22:57 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-08-06 02:23:08 +0200 <davean> there is a 3.6 Cabal, not so for cabal-install
2021-08-06 02:23:20 +0200 <euouae> what's 3.6 Cabal? Is it cabal-the-spec?
2021-08-06 02:23:25 +0200 <geekosaur> oh, I missed that
2021-08-06 02:23:41 +0200 <geekosaur> Caal is a library for manipulating package descriptions
2021-08-06 02:23:57 +0200 <euouae> Okay
2021-08-06 02:23:59 +0200 <geekosaur> it's used by ghc, stack, cabal-install, and other tools
2021-08-06 02:24:12 +0200 <davean> The important part of Cabal 3.6 is 9.2 stuff
2021-08-06 02:24:13 +0200 <euouae> so Cabal is the library, cabal-install is ... cabal the tool? and we also have the cabal spec. Right?
2021-08-06 02:24:25 +0200 <davean> euouae: correct
2021-08-06 02:24:26 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 02:24:58 +0200 <euouae> davean: Do you know if reading the building & install section of cabal-install 3.2 is OK for using cabal-install 3.4 or am I missing anything super useful?
2021-08-06 02:25:23 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 02:25:33 +0200 <davean> euouae: It'll be fine, the spec is versioned and backwards compatible
2021-08-06 02:26:29 +0200 <euouae> great thanks
2021-08-06 02:30:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 02:30:47 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 02:31:19 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 02:31:30 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 02:33:15 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 02:33:29 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-08-06 02:33:47 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 02:33:55 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 02:37:04 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 02:37:23 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 02:41:02 +0200arkho(~ccc@dynamic-acs-24-112-153-241.zoominternet.net) (Quit: Leaving)
2021-08-06 02:45:01 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-06 02:45:44 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-08-06 02:48:30 +0200P1RATEZ(piratez@user/p1ratez)
2021-08-06 03:05:39 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-06 03:06:10 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 03:07:23 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 03:07:41 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Remote host closed the connection)
2021-08-06 03:08:05 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-08-06 03:08:51 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 03:09:27 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 03:10:54 +0200hiruji(~hiruji@user/hiruji) (Read error: Connection reset by peer)
2021-08-06 03:11:16 +0200hiruji(~hiruji@user/hiruji)
2021-08-06 03:20:17 +0200alx741(~alx741@186.178.109.254) (Quit: alx741)
2021-08-06 03:20:59 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-08-06 03:30:58 +0200favonia(~favonia@user/favonia) (Ping timeout: 240 seconds)
2021-08-06 03:35:51 +0200favonia(~favonia@user/favonia)
2021-08-06 03:40:32 +0200pe200012(~pe200012@218.107.49.28)
2021-08-06 03:44:00 +0200Guest099(~Guest0@187.83.249.216.dyn.smithville.net)
2021-08-06 03:44:22 +0200Guest099(~Guest0@187.83.249.216.dyn.smithville.net) (Client Quit)
2021-08-06 03:45:10 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-08-06 03:54:10 +0200machinedgod(~machinedg@24.105.81.50)
2021-08-06 04:00:10 +0200xff0x_(~xff0x@2001:1a81:5296:aa00:8dc0:fe3f:5c9e:fa3a) (Ping timeout: 240 seconds)
2021-08-06 04:02:22 +0200xff0x_(~xff0x@2001:1a81:52cf:a900:fe8a:f909:9f2c:b4df)
2021-08-06 04:08:35 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-06 04:08:47 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-08-06 04:09:37 +0200Codaraxis__(~Codaraxis@user/codaraxis)
2021-08-06 04:10:15 +0200_xor(~xor@74.215.232.67) (Quit: brb)
2021-08-06 04:12:05 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-06 04:12:24 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi)
2021-08-06 04:12:33 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 258 seconds)
2021-08-06 04:14:09 +0200Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 276 seconds)
2021-08-06 04:15:53 +0200_xor(~xor@74.215.232.67)
2021-08-06 04:17:56 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-08-06 04:17:57 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (lithium.libera.chat (Nickname regained by services)))
2021-08-06 04:17:57 +0200finn_elijaFinnElija
2021-08-06 04:21:31 +0200ukari(~ukari@user/ukari) (Remote host closed the connection)
2021-08-06 04:25:20 +0200td_(~td@94.134.91.183) (Ping timeout: 272 seconds)
2021-08-06 04:25:28 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 04:26:26 +0200td_(~td@muedsl-82-207-238-118.citykom.de)
2021-08-06 04:31:11 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-06 04:45:16 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-08-06 04:47:17 +0200wei2912(~wei2912@112.199.250.21)
2021-08-06 04:49:27 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2021-08-06 04:53:41 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-08-06 04:56:23 +0200retroid_(~retro@5ec19a54.skybroadband.com)
2021-08-06 05:00:49 +0200ukari(~ukari@user/ukari)
2021-08-06 05:02:07 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 05:06:13 +0200Cajun(~Cajun@user/cajun)
2021-08-06 05:07:04 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2021-08-06 05:11:04 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 05:17:53 +0200oso(~oso@2601:58c:c080:a950:f275:2530:b398:680b)
2021-08-06 05:20:10 +0200MQ-17J(~MQ-17J@8.21.10.94) (Ping timeout: 240 seconds)
2021-08-06 05:20:58 +0200euouae(~euouae@user/euouae) (Quit: Client closed)
2021-08-06 05:23:32 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-08-06 05:33:52 +0200pe200012(~pe200012@218.107.49.28) (Ping timeout: 245 seconds)
2021-08-06 05:34:00 +0200pe200012_(~pe200012@183.236.83.77)
2021-08-06 05:36:54 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2021-08-06 05:42:16 +0200xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2021-08-06 05:42:25 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Read error: Connection reset by peer)
2021-08-06 05:42:39 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-08-06 05:50:30 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-06 05:55:07 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 245 seconds)
2021-08-06 05:55:11 +0200Guest56(~Guest56@2001:8003:33f0:c100:e466:919:f866:6e35)
2021-08-06 05:58:55 +0200slack1256(~slack1256@181.203.118.140) (Remote host closed the connection)
2021-08-06 05:59:43 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 244 seconds)
2021-08-06 06:03:07 +0200dansh(~dansh@101.190.222.236)
2021-08-06 06:03:22 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 06:03:43 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-08-06 06:04:17 +0200pe200012_(~pe200012@183.236.83.77) (Ping timeout: 245 seconds)
2021-08-06 06:04:27 +0200pe200012_(~pe200012@113.105.10.33)
2021-08-06 06:04:34 +0200dansh(~dansh@101.190.222.236) (Client Quit)
2021-08-06 06:05:29 +0200pgib(~textual@173.38.117.68) (Ping timeout: 252 seconds)
2021-08-06 06:06:11 +0200Guest56(~Guest56@2001:8003:33f0:c100:e466:919:f866:6e35) (Quit: Client closed)
2021-08-06 06:07:53 +0200MidAutumnHotaru(~MidAutumn@user/midautumnmoon) (Quit: Leaving for a break - theLounge)
2021-08-06 06:08:24 +0200MidAutumnHotaru(~MidAutumn@user/midautumnmoon)
2021-08-06 06:08:32 +0200wagle(~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2021-08-06 06:09:01 +0200wagle(~wagle@quassel.wagle.io)
2021-08-06 06:11:32 +0200bluehat(~bluehat@202.14.120.238)
2021-08-06 06:11:40 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 06:11:50 +0200willbush(~user@47.183.200.14)
2021-08-06 06:12:09 +0200euandreh(~euandreh@2804:14c:33:9fe5:cf01:7cd6:622f:9fda) (Ping timeout: 258 seconds)
2021-08-06 06:12:23 +0200moveeax(~moveeax@202.14.120.238)
2021-08-06 06:12:36 +0200 <moveeax> hi
2021-08-06 06:13:55 +0200bluehat(~bluehat@202.14.120.238) (Remote host closed the connection)
2021-08-06 06:16:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2021-08-06 06:17:21 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 06:22:45 +0200P1RATEZ(piratez@user/p1ratez) (Remote host closed the connection)
2021-08-06 06:24:32 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
2021-08-06 06:26:57 +0200moveax86_64(~moveax86_@202.14.120.238)
2021-08-06 06:27:22 +0200moveeax(~moveeax@202.14.120.238) (Quit: Connection closed)
2021-08-06 06:27:37 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 245 seconds)
2021-08-06 06:27:50 +0200moveax86_64(~moveax86_@202.14.120.238) (Remote host closed the connection)
2021-08-06 06:28:18 +0200vlatkoB(~IRC_clien@188.252.173.111)
2021-08-06 06:31:56 +0200 <jle`> hi
2021-08-06 06:31:57 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-08-06 06:33:01 +0200jle`(~justin@cpe-23-240-75-236.socal.res.rr.com) (Quit: WeeChat 2.7)
2021-08-06 06:33:19 +0200jle`(~justin@cpe-23-240-75-236.socal.res.rr.com)
2021-08-06 06:33:30 +0200 <vlatkoB> /msg NickServ IDENTIFY vlatkoB vlatkoLiberaNode
2021-08-06 06:33:37 +0200 <janus> oops :(
2021-08-06 06:34:00 +0200 <janus> vlatkoB: you should change your password, everybody saw that
2021-08-06 06:34:50 +0200vlatkoB(~IRC_clien@188.252.173.111) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2021-08-06 06:36:37 +0200endlesseditions(~endlessed@135.129.112.36)
2021-08-06 06:39:45 +0200xff0x_(~xff0x@2001:1a81:52cf:a900:fe8a:f909:9f2c:b4df) (Ping timeout: 258 seconds)
2021-08-06 06:40:33 +0200xff0x_(~xff0x@2001:1a81:52cf:a900:d9f9:1622:609d:b2ef)
2021-08-06 06:41:43 +0200endlesseditionsendless
2021-08-06 06:44:17 +0200endless(~endlessed@135.129.112.36) (Quit: Textual IRC Client: www.textualapp.com)
2021-08-06 06:44:36 +0200endlesseditions(~endlessed@135.129.112.36)
2021-08-06 06:44:58 +0200ukari(~ukari@user/ukari) (Remote host closed the connection)
2021-08-06 06:45:22 +0200ukari(~ukari@user/ukari)
2021-08-06 06:48:54 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2021-08-06 06:49:14 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net)
2021-08-06 06:50:01 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2021-08-06 06:51:49 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-08-06 06:53:22 +0200 <jle`> does anyone know if there's a way to "cabal repl" outside of a project and include packages in scope? like `stack ghci --package lens`
2021-08-06 06:53:32 +0200 <jle`> but cabal
2021-08-06 06:55:53 +0200 <c_wraith> cabal repl -b packagename
2021-08-06 06:56:01 +0200 <c_wraith> or --build-depends, but -b is easier to spell
2021-08-06 07:00:26 +0200 <jle`> ooh
2021-08-06 07:00:29 +0200 <jle`> that's the magic word
2021-08-06 07:03:06 +0200 <jle`> hooray it worked thanks!
2021-08-06 07:04:14 +0200stevenxl(uid133530@id-133530.highgate.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 07:04:42 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal)
2021-08-06 07:17:05 +0200anandprabhu(~anandprab@94.202.243.198)
2021-08-06 07:17:35 +0200moveax86_64(~moveax86_@202.14.120.238)
2021-08-06 07:18:13 +0200moveeax(~moveeax@202.14.120.238)
2021-08-06 07:20:03 +0200bgamari(~bgamari@72.65.101.147) (Ping timeout: 276 seconds)
2021-08-06 07:20:10 +0200bgamari_(~bgamari@72.65.101.13)
2021-08-06 07:21:56 +0200 <moveax86_64> testPRIVMSG #haskell :this is a testPONG :pingis
2021-08-06 07:22:12 +0200meinside_(uid24933@id-24933.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 07:22:20 +0200 <Axman6> please don't use the channel for testing
2021-08-06 07:23:10 +0200moveax86_64(~moveax86_@202.14.120.238) (Remote host closed the connection)
2021-08-06 07:23:36 +0200moveeax(~moveeax@202.14.120.238) (Quit: Connection closed)
2021-08-06 07:26:53 +0200tomku(~tomku@user/tomku) (Ping timeout: 252 seconds)
2021-08-06 07:27:50 +0200tomku(~tomku@user/tomku)
2021-08-06 07:28:16 +0200 <Cajun> so a friend gave me a small challenge: given a file like so "[(233,173,20), (200, 10, 155)....]", turn it into an image without the dimensions given. the text file is massive, ~189mb but its all there. i can strictly read the file, but when i go to convert it to a `[(Word8, Word8, Word8)]` the program quickly eats up ~24gb of ram and requires a
2021-08-06 07:28:16 +0200 <Cajun> segfault. heres the meat of the issue: https://paste.tomsmeding.com/r5DDLhAW
2021-08-06 07:29:25 +0200 <Cajun> is there a way i can get that string from the reading of the file to a list without requiring an insane amount of ram? also when i turn on -s, its mainly the GC taking up >90% of runtime
2021-08-06 07:29:55 +0200 <Cajun> kinda like `coerce` but for String -> [(Word8, Word8, Word8)]
2021-08-06 07:30:33 +0200 <jle`> Cajun: what are the Word8s supposed to represent?
2021-08-06 07:30:40 +0200 <Cajun> pixels
2021-08-06 07:30:54 +0200 <jle`> like color channels?
2021-08-06 07:31:15 +0200 <jle`> and this is like a row major representation?
2021-08-06 07:31:20 +0200 <Cajun> in the juicypixels library, it uses `Pixel8` which is a synonym for `Word8` so i might as well convert to Word8
2021-08-06 07:31:39 +0200 <jle`> i'm just trying to understand how the image is encoded heh
2021-08-06 07:31:56 +0200 <jle`> when first looking at the list it seemed like a list of points to connect like an svg maybe heh
2021-08-06 07:32:43 +0200 <Cajun> its literally just a list like this: "[(Num, Num, Num), (Num, Num, Num)......]" where each Num is an RGB value and each tuple makes a pixel
2021-08-06 07:32:44 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 07:32:59 +0200 <Axman6> I would be inclined to split the reading into smaller chunks - assuming you don't need to be super strict with the format, you could so something like: map read . splitOn "," . drop 1 . init
2021-08-06 07:33:03 +0200oxide(~lambda@user/oxide)
2021-08-06 07:33:35 +0200 <jle`> Cajun: so, it's like a scan of pixels from left to right, row to row?
2021-08-06 07:33:44 +0200 <jle`> the color values at each point?
2021-08-06 07:34:10 +0200 <Axman6> it's a lot like a pgm image
2021-08-06 07:34:24 +0200 <Cajun> well its essentially one row, but the challenge is to recover it, so i can say how far the rows go jle`
2021-08-06 07:35:04 +0200 <Axman6> or ppm I guess
2021-08-06 07:35:08 +0200 <Axman6> https://en.wikipedia.org/wiki/Netpbm#File_formats
2021-08-06 07:36:18 +0200 <jle`> hm, i guess the challenge is if there's a streaming file format for images
2021-08-06 07:36:21 +0200 <jle`> then you can just convert directly into there
2021-08-06 07:36:54 +0200 <Cajun> i tried looking for a library that would directly take up a list of tuples and churn out an image, but its appearing to be more difficult
2021-08-06 07:37:11 +0200 <Axman6> I feel like you're overthinking this jle`, it's just the Show output of a [(Word8,Word8,Word8)] that needs to be Read
2021-08-06 07:37:16 +0200 <Cajun> i can try that strategy of splitting the file, but that just defers the work, no?
2021-08-06 07:37:27 +0200 <jle`> Axman6: it can'be be read because it doesn't fit into memory
2021-08-06 07:37:32 +0200 <jle`> at least, that's how i'm interpreting it
2021-08-06 07:37:43 +0200 <jle`> hm but 189mb should fit in memory
2021-08-06 07:37:48 +0200 <Axman6> using lazyIO it should be fine
2021-08-06 07:37:53 +0200 <Cajun> well for some reason its also taking up a bunch of memory and i have no idea why
2021-08-06 07:37:54 +0200 <Axman6> yeah
2021-08-06 07:38:08 +0200 <jle`> if it fits into memory then lazy or non-lazy io shouldn't be an issue either way i think
2021-08-06 07:38:20 +0200 <jle`> the only reason you'd want lazy io if you don't want your whole data in memory
2021-08-06 07:38:26 +0200 <Axman6> well, you can do some calculations, but remember that (Word8,Word8,Word8) takes up much more space than 3*8 bytes
2021-08-06 07:38:40 +0200 <Axman6> there's like two words for the tuple, then two words per Word8
2021-08-06 07:38:43 +0200 <Cajun> reading the file isnt an issue, but `read` -ing it to convert the String to (Word8, Word8, Word8) eats all the ram and essentially crashes it
2021-08-06 07:39:00 +0200 <jle`> ah yeah, 'read' is not really meant for actual work
2021-08-06 07:39:05 +0200 <jle`> it's mostly for debugging
2021-08-06 07:39:17 +0200 <Axman6> so, you might want to add: data Pixel = Pixel {-#UNPACK#-}Word8 {-#UNPACK#-}Word8 {-#UNPACK#-}Word8 and convert the tuple into that
2021-08-06 07:39:38 +0200 <Axman6> missing the ! on those Word8's
2021-08-06 07:39:58 +0200 <Cajun> convert the tuple during the `read` to that?
2021-08-06 07:40:08 +0200 <jle`> so using like splitOn "," (like Axman suggested) should work, that's pretty efficient, especially if you do it over lazy io. otherwise you can use a parser library like attoparsec but that'd be overkill too
2021-08-06 07:40:27 +0200 <jle`> read is mostly meant for debugging, so i wouldn't use it for anything serious
2021-08-06 07:40:35 +0200 <Axman6> yeah - if you have (Word8, Word8, Word8) -> Pixel, then do rdo map (toPixel . read) . ...
2021-08-06 07:40:53 +0200 <jle`> > splitOn ", " "(1,2,3), (4,5,6), (7,8,9)"
2021-08-06 07:40:54 +0200 <lambdabot> ["(1,2,3)","(4,5,6)","(7,8,9)"]
2021-08-06 07:41:22 +0200 <jle`> or depending on your file format you can splitOn "," and chunksOf 3 it or something like that
2021-08-06 07:41:23 +0200 <Axman6> % read " (1,2)" :: (Word8,Word8)
2021-08-06 07:41:23 +0200 <yahb> Axman6: (1,2)
2021-08-06 07:41:32 +0200 <Axman6> splitOn "," should be enough
2021-08-06 07:41:48 +0200 <Cajun> and should that be in another `let` right before it?
2021-08-06 07:42:11 +0200 <Cajun> like `let splitArr = splitOn "," rawList`
2021-08-06 07:42:48 +0200 <Axman6> I would just do it in one go, let imageArr = map (toPixel . read) . splitOn "," . init . drop 1 $ rawList
2021-08-06 07:42:56 +0200falafel(~falafel@pool-96-255-70-50.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2021-08-06 07:43:08 +0200 <Cajun> why do you need the `init . drop 1` in this instance?
2021-08-06 07:43:21 +0200 <Axman6> to get rid ot the [ and ]
2021-08-06 07:43:27 +0200 <Cajun> yeah just figured, makes sense
2021-08-06 07:43:48 +0200 <Axman6> I would definitely not use readFile' either, whatever that is
2021-08-06 07:43:54 +0200koz(~koz@121.99.240.58) (Remote host closed the connection)
2021-08-06 07:43:56 +0200 <Axman6> lazy IO will help you here
2021-08-06 07:44:09 +0200koz(~koz@121.99.240.58)
2021-08-06 07:44:14 +0200 <Axman6> one of the cases where it can actually work, without having to resort to streaming
2021-08-06 07:44:21 +0200 <Cajun> so i do want to lazily read the file, not strictly with `readFile'` ?
2021-08-06 07:44:27 +0200 <Axman6> yes
2021-08-06 07:44:58 +0200 <Axman6> think about the oveahead that 186 million Chars has
2021-08-06 07:45:12 +0200 <Axman6> you will need gigabytes of memory to put that in RAM
2021-08-06 07:45:19 +0200 <jle`> yeah, the advantage of splitOn, map, etc. is that they process the list char-by-char, they never need anything beyond that
2021-08-06 07:45:44 +0200 <jle`> so with lazy io, io is driven by what splitOn, drop, init, map demand
2021-08-06 07:45:47 +0200 <Axman6> each (:) is like three words, then each Char is another two words. and a word is 8 bytes
2021-08-06 07:45:48 +0200 <jle`> and the demand is piece-by-piece
2021-08-06 07:46:09 +0200 <jle`> so you never keep any char's in memory other than what toPixel/read/splitOn are directly processing
2021-08-06 07:46:10 +0200 <Cajun> what library is `splitOn` from? it doesnt seem to be in the prelude
2021-08-06 07:46:20 +0200 <jle`> should be in base in Data.List i think
2021-08-06 07:46:36 +0200 <jle`> oh, it's not :o
2021-08-06 07:46:53 +0200 <Cajun> hoogle says it exists for the `Text` datatype but not for strings
2021-08-06 07:46:59 +0200 <jle`> looks like it's in the 'split' library
2021-08-06 07:47:04 +0200 <jle`> which is pretty commonly used
2021-08-06 07:47:57 +0200 <Axman6> we need to just merge all of splity into base already -_-
2021-08-06 07:48:02 +0200 <Axman6> split*
2021-08-06 07:48:04 +0200 <jle`> +1
2021-08-06 07:48:33 +0200 <jle`> but ì you're learning haskell, it's actually a neat exercise to write it from scratch too. on an unrelated note :)
2021-08-06 07:48:43 +0200 <Axman6> agreed
2021-08-06 07:49:13 +0200 <jle`> *if
2021-08-06 07:49:21 +0200 <Axman6> splitOn :: [a] -> [a] -> [[a]] is significant;y more difficult for a beginner than splitOn :: a -> [a] -> [[a]] too
2021-08-06 07:49:34 +0200 <Cajun> and what is `toPixel` doing in that instance Axman6 ?
2021-08-06 07:50:06 +0200 <Axman6> literally just putting the Word8's into the Pixel constructor, but it's a much more compact representation than the tuple
2021-08-06 07:50:24 +0200 <Axman6> toPixel (r,g,b) = Pixel r g b
2021-08-06 07:50:41 +0200 <Axman6> if you're using juicypixels, this type probably already exists
2021-08-06 07:51:17 +0200 <Axman6> https://hackage.haskell.org/package/JuicyPixels-3.3.5/docs/Codec-Picture.html#t:PixelRGB8
2021-08-06 07:51:18 +0200 <jle`> i feel like you also need to account for the three-ness of the pixels
2021-08-06 07:51:33 +0200 <Axman6> jle`: ?
2021-08-06 07:51:40 +0200 <Cajun> i have a type synonym for something similar: `type RGB8 = (Pixel8, Pixel8, Pixel8)`
2021-08-06 07:51:54 +0200 <jle`> > splitAt "," . drop 1 . init $ "[(233,173,20), (200, 10, 155)]"
2021-08-06 07:51:56 +0200 <lambdabot> error:
2021-08-06 07:51:56 +0200 <lambdabot> • Couldn't match expected type ‘Int’ with actual type ‘[Char]’
2021-08-06 07:51:56 +0200 <lambdabot> • In the first argument of ‘splitAt’, namely ‘","’
2021-08-06 07:52:07 +0200 <jle`> > splitOn "," . drop 1 . init $ "[(233,173,20), (200, 10, 155)]"
2021-08-06 07:52:09 +0200 <lambdabot> ["(233","173","20)"," (200"," 10"," 155)"]
2021-08-06 07:52:17 +0200 <jle`> you get each number instead of each triple
2021-08-06 07:52:33 +0200 <Axman6> aren't you just handing this to juicypixels eventually? why not just go straight to its type? (Word8,Word8,Word8) is horrifically inefficient
2021-08-06 07:53:01 +0200 <Cajun> well what isnt shown in that code segment is handing it off to Repa then to Juicepixels
2021-08-06 07:53:24 +0200 <jle`> if you're just getting the raw Word8's then no need to do anything fancy i think
2021-08-06 07:53:30 +0200 <Axman6> 3*2 + 4 words, so 10 words, which is 80 bytes, per pixel.
2021-08-06 07:53:41 +0200 <jle`> > map read . filter isDigit . splitOn "," $ "[(233,173,20), (200, 10, 155)]" :: [Word8]
2021-08-06 07:53:43 +0200 <lambdabot> error:
2021-08-06 07:53:43 +0200 <lambdabot> • Couldn't match type ‘Char’ with ‘[Char]’
2021-08-06 07:53:43 +0200 <lambdabot> Expected type: [Char] -> [String]
2021-08-06 07:53:59 +0200 <jle`> > map (read . filter isDigit) . splitOn "," $ "[(233,173,20), (200, 10, 155)]" :: [Word8]
2021-08-06 07:54:01 +0200 <lambdabot> [233,173,20,200,10,155]
2021-08-06 07:54:04 +0200 <Cajun> i already have a function `toImage :: Array U DIM2 RGB8 -> Image PixelRGB8` to convert the repa array to a juicepixels image (i could also find something from juicepixels-repa)
2021-08-06 07:54:35 +0200 <endlesseditions> random question thats probably been asked 1 billion times before,,,, but, do you all think haskell is a good lang as an introduction to FP? I mostly use Go and Typescript for microsystem development. Really want to get more into FP but not sure what lang i should mess around with first.
2021-08-06 07:54:46 +0200 <Axman6> just go straight to Pixel8, seriously, you don't have the RAM not to
2021-08-06 07:55:18 +0200 <Cajun> straight to pixel8 but how would i get a list of pixel8 into an image?
2021-08-06 07:55:32 +0200 <jle`> endlesseditions: i'd say just jump straight into fp with haskell :) i got a small taste with ruby but jumping from ruby to haskell worked well for me personally
2021-08-06 07:55:39 +0200 <Axman6> endlesseditions: if you actually want to learn FP, there's basicaslly no better language, because you don't have the choice to dumb things like use mutation or arbitrary effects in the middle of seemingly pure functions
2021-08-06 07:55:47 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-06 07:57:18 +0200 <endlesseditions> cool yeah i was seeing some similar stuff to what you said Axman, regarding other langs that are more multiparidigm and can be a bit more lax in terms of what style of programming you do
2021-08-06 07:57:23 +0200 <Axman6> you could quite easily use generateFoldImage, where acc is actually the list of pixels, assuming that it works in the same order as your image
2021-08-06 07:57:50 +0200 <jle`> Cajun: a juicy pixels image is essentially internally a Data.Vector of pixels
2021-08-06 07:58:01 +0200 <jle`> oh, not even of pixels. of pixel components
2021-08-06 07:58:14 +0200 <Axman6> endlesseditions: people get caught up in wanting features they had in other languages because that's what they're used to. It's a trap (as someone who's been writing Scala recently, I can recommend you never, ever, touch it, just don't)
2021-08-06 07:58:15 +0200 <jle`> https://hackage.haskell.org/package/JuicyPixels-3.3.5/docs/Codec-Picture-Types.html#t:Image
2021-08-06 07:58:27 +0200 <Cajun> hold up am i converting to a list of Pixel8 or a list of PixelRGB8?
2021-08-06 07:58:32 +0200 <jle`> Cajun: so you can literally just throw in a vecotor of Word8's
2021-08-06 07:58:42 +0200 <endlesseditions> oh man i mean scala looked interesting and all but i kinda want to stay away from jvm to be honest aha
2021-08-06 07:58:56 +0200 <jle`> `Image w h (Vector.fromList myListOfWord8s)`
2021-08-06 07:59:05 +0200 <endlesseditions> one thing i really like about go is its ability to compile down into simple binary (even if it is a bit bloated)
2021-08-06 07:59:11 +0200anandprabhu_(~anandprab@86.106.121.228)
2021-08-06 07:59:25 +0200 <Axman6> generateFoldImage (\(p:ps) _x _y (ps,p)) pixels width height should work
2021-08-06 07:59:28 +0200 <jle`> Cajun: of type `Image Pixel8`
2021-08-06 07:59:56 +0200 <Axman6> endlesseditions: Haskell is also a compiled language, which usually doeasn't link to much
2021-08-06 08:00:00 +0200 <Cajun> that would wind up being greyscale, then im turning an rgb image greyscale and would mess it up entirely
2021-08-06 08:00:06 +0200 <endlesseditions> is the Learn You book still the top rec for hoping straight in?
2021-08-06 08:00:20 +0200 <Cajun> as each RGB channel would turn into their own monochrome pixels
2021-08-06 08:00:39 +0200 <lechner> Hi, I would like to mirror Hackage locally to find prerequisites that are not declared correctly. Unfortunately that is what I may be encountering when trying to build the mirroring tool hackage-mirror. What's the fix, please? Thanks! https://paste.debian.net/1206740/
2021-08-06 08:00:39 +0200 <Cajun> they need to stay as 3-tuples then into PixelRGB8
2021-08-06 08:00:44 +0200 <jle`> Cajun: no, it's an internal represetation (if you're talking about my method)
2021-08-06 08:00:51 +0200 <endlesseditions> and do people ever make CLI's or TUI's in haskell? those are some things im definitely interested as i've mostly just been making cli's lately
2021-08-06 08:01:03 +0200 <jle`> Cajun: internally it's stored as a contiguous vector of Word8's. but when you process it as an image, it automatically chunks them up into 3's
2021-08-06 08:01:19 +0200 <Axman6> Cajun: why do you say that? o.O
2021-08-06 08:01:27 +0200 <jle`> so i guess my method is a bit low-level, heh
2021-08-06 08:01:33 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving)
2021-08-06 08:01:39 +0200 <Cajun> ahhh i see. so am i manually constructing an image or something? i still dont get how im making an `Image Pixel8` from a list of word8s
2021-08-06 08:01:47 +0200anandprabhu(~anandprab@94.202.243.198) (Ping timeout: 258 seconds)
2021-08-06 08:01:47 +0200cheater(~Username@user/cheater) (Ping timeout: 258 seconds)
2021-08-06 08:01:49 +0200 <jle`> the JuicyPixels library provides an abstraction to work over the raw contiguous bytes as if it were a color image
2021-08-06 08:02:01 +0200 <Axman6> Ignore jle` and listen to me :P
2021-08-06 08:02:19 +0200 <lechner> I tried to use hvr's hackage-mirror-tool instead but did not fare much better https://paste.debian.net/1206742/ https://github.com/haskell-hvr/hackage-mirror-tool https://groups.google.com/g/stackage/c/Y7NU6qVElZs?pli=1
2021-08-06 08:02:20 +0200 <Axman6> (This is usually very bad advice, but I know what I'm talking about here XD)
2021-08-06 08:02:46 +0200cheater(~Username@user/cheater)
2021-08-06 08:03:49 +0200 <Cajun> now im really confused lol, i now have no idea how im getting from this string to this list of word 8s (im doing this: `map (read . filter isDigit) . splitOn "," $ "[(233,173,20), (200, 10, 155)]" :: [Word8]` right?) then i need that to be a vector and use some function to shove that into an `Image`?
2021-08-06 08:03:54 +0200 <jle`> yeah, we are giving sort of contradictory method, so just having one channel of communication is probably better :p
2021-08-06 08:03:58 +0200 <Axman6> If you do what I'm saying, you will use the minimum memory needed to allocate the image and read data lazily from disk
2021-08-06 08:04:20 +0200 <Axman6> Cajun: that's why you should do what I said instead
2021-08-06 08:04:40 +0200 <Axman6> lechner: #haskell-infrastructure might be a better place to ask
2021-08-06 08:04:45 +0200 <Cajun> well now i have no idea what that was
2021-08-06 08:05:22 +0200 <lechner> Axman6: thanks!
2021-08-06 08:06:23 +0200 <Axman6> you code will literally be: generateFoldImage (\(p:ps) _x _y (ps,p)) (map (toPixel . read) . splitOn "," . init . drop 1 $ rawList) width height, assuming you know the dimensions of the image
2021-08-06 08:06:56 +0200 <Cajun> i dont know the dimensions of the image, but i guess i just can guess and check. is there any harm if the dimensions are too small/big than the original?
2021-08-06 08:07:06 +0200 <Cajun> like, there are too many pixels than are in those dimensions
2021-08-06 08:07:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-08-06 08:07:09 +0200jespada(~jespada@90.254.247.46) (Ping timeout: 258 seconds)
2021-08-06 08:08:20 +0200 <Axman6> if they're too small, that'll be fine. if they're too big, then that "(\(p:ps)" will fail and you'll get an exception
2021-08-06 08:09:03 +0200jespada(~jespada@90.254.247.46)
2021-08-06 08:10:16 +0200 <Axman6> you could put in a case statement in there which checks if the list's empty, and outputs Pixel8 0 0 0
2021-08-06 08:11:51 +0200 <Cajun> i would rather get an exception yelling at me than false hopes raysL
2021-08-06 08:12:01 +0200 <Cajun> oh yeah no emotes lol
2021-08-06 08:12:08 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 258 seconds)
2021-08-06 08:12:45 +0200 <Cajun> so `generateFoldImage` gives type `([Pixel], Image Pixel)` which is great, so what do i do with that `Image Pixel` ?
2021-08-06 08:13:38 +0200 <Axman6> whatever you want?
2021-08-06 08:13:41 +0200 <Axman6> save it to disk?
2021-08-06 08:13:51 +0200 <Cajun> alright, ima see if this works, thanks!
2021-08-06 08:14:21 +0200 <Axman6> writePng looks like a good place to start
2021-08-06 08:15:48 +0200willbush(~user@47.183.200.14) (Remote host closed the connection)
2021-08-06 08:16:07 +0200 <Cajun> problem being, you defined `data Pixel` but that means i need an instance of PngSavable for it
2021-08-06 08:17:42 +0200 <Axman6> like I said a few times, use Pixel8 from JuicyPixels
2021-08-06 08:18:21 +0200slavaqq(~slavaqq@sdmail.sdserver.cz)
2021-08-06 08:22:12 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 245 seconds)
2021-08-06 08:22:15 +0200 <Cajun> now im really confused. `toPixel` doesnt exist for Pixel8, i dont want to use the custom defined thing because it doesnt play well with juicypixels, and that code you gave runs into both of those issues
2021-08-06 08:22:31 +0200 <Cajun> also, the splitOn makes a mess of the strings
2021-08-06 08:22:34 +0200 <Axman6> write it
2021-08-06 08:22:49 +0200 <Cajun> i tried and im quite confused how, considering Pixel8 is a type synonym for word8
2021-08-06 08:23:15 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 258 seconds)
2021-08-06 08:23:19 +0200 <Axman6> noit's not, it's identical to what I defined before: https://hackage.haskell.org/package/JuicyPixels-3.3.5/docs/Codec-Picture.html#t:PixelRGB8
2021-08-06 08:23:26 +0200 <Axman6> uh, ignore that
2021-08-06 08:23:31 +0200 <Cajun> that pixelrgb8 not pixel8
2021-08-06 08:23:55 +0200 <Axman6> right, you have Word8's, just stick them into the PixelRGB8 constructor
2021-08-06 08:24:00 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-06 08:24:11 +0200 <Cajun> alright this makes more sense. i was seriously confused when you were saying pixel8 instead of pixelrgb8
2021-08-06 08:24:12 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com)
2021-08-06 08:24:14 +0200 <Cajun> it compiles now
2021-08-06 08:24:36 +0200 <Axman6> yeah sorry, I forgot those had different names
2021-08-06 08:25:26 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-08-06 08:25:46 +0200xff0x_(~xff0x@2001:1a81:52cf:a900:d9f9:1622:609d:b2ef) (Ping timeout: 240 seconds)
2021-08-06 08:25:52 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds)
2021-08-06 08:26:40 +0200Lord_of_Life_Lord_of_Life
2021-08-06 08:26:44 +0200 <Cajun> so yeah issue with the parsing. the `splitOn` doesnt play well with list-like strings like jle` showed earlier
2021-08-06 08:26:45 +0200 <Cajun> > splitOn "," . drop 1 . init $ "[(233,173,20), (200, 10, 155)]"
2021-08-06 08:26:46 +0200 <lambdabot> ["(233","173","20)"," (200"," 10"," 155)"]
2021-08-06 08:27:36 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Client Quit)
2021-08-06 08:27:43 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:9c72:9058:eb7a:ca08)
2021-08-06 08:27:58 +0200 <Axman6> oh, that's a great point...
2021-08-06 08:28:19 +0200 <Axman6> I forgot that tuples also have ,'s XD
2021-08-06 08:28:20 +0200juhp(~juhp@128.106.188.220) (Quit: juhp)
2021-08-06 08:31:08 +0200chele(~chele@user/chele)
2021-08-06 08:33:00 +0200 <Cajun> > endBy ", " . drop 1 . init $ "[(233,173,20), (200, 10, 155)]"
2021-08-06 08:33:01 +0200 <lambdabot> ["(233,173,20)","(200","10","155)"]
2021-08-06 08:33:05 +0200timexdd(~timexdd@202.14.120.238)
2021-08-06 08:34:11 +0200 <Cajun> i have no idea if the file has spaces
2021-08-06 08:34:11 +0200juhp(~juhp@128.106.188.220)
2021-08-06 08:34:48 +0200 <Cajun> there are, which makes this harder
2021-08-06 08:34:55 +0200 <Axman6> might be time to start using parsers...
2021-08-06 08:35:07 +0200 <Cajun> so much for nice memory usage
2021-08-06 08:37:01 +0200kenran(~kenran@b2b-37-24-119-190.unitymedia.biz)
2021-08-06 08:37:18 +0200 <Axman6> eh? why do you think that won't let you have decent memory usage?
2021-08-06 08:38:01 +0200 <Cajun> thinking it would have some big overhead
2021-08-06 08:38:10 +0200 <Axman6> you should think again
2021-08-06 08:38:10 +0200timexdd(~timexdd@202.14.120.238) (Quit: Connection closed)
2021-08-06 08:38:31 +0200 <Axman6> attoparsec isn't named after a very small unit of measure for nothing
2021-08-06 08:40:17 +0200 <Cajun> i only know so much about parsers. the textbook i read touched on a homemade variety, but i havent touched on them much more
2021-08-06 08:41:26 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:298a:b52c:58df:cdd4) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-06 08:41:42 +0200 <Cajun> hm, attoparsec doesnt seem to be useful for Strings, only ByteStrings
2021-08-06 08:44:44 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:113:1bce:1dde:b94a)
2021-08-06 08:50:02 +0200m4m41(~goober@49.207.205.58)
2021-08-06 08:51:30 +0200burnsidesLlama(~burnsides@client-8-91.eduroam.oxuni.org.uk)
2021-08-06 08:51:35 +0200burnsidesLlama(~burnsides@client-8-91.eduroam.oxuni.org.uk) (Remote host closed the connection)
2021-08-06 08:52:01 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:53:12 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:53:14 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:53:14 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:53:36 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:54:05 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:54:05 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:55:05 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:55:06 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:55:40 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:55:41 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:55:45 +0200 <Axman6> yes, you really want to be doing this using ByteStrings, String is absolutely terrible
2021-08-06 08:56:54 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 08:56:55 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 08:58:08 +0200m4m41(~goober@49.207.205.58) (Quit: Leaving)
2021-08-06 08:59:43 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-08-06 09:00:43 +0200 <Cajun> though i thought we wanted lazy file reading. `Data.ByteString.readFile` is strict
2021-08-06 09:02:42 +0200oxide(~lambda@user/oxide) (Ping timeout: 250 seconds)
2021-08-06 09:03:49 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-08-06 09:04:47 +0200 <Axman6> right, you use lazy bytestrings
2021-08-06 09:05:44 +0200 <Cajun> ah yeah forgot those existed
2021-08-06 09:07:08 +0200 <Cajun> ill have to leave making the parsers for another day, its already 2am lol
2021-08-06 09:07:24 +0200 <Cajun> thanks for the help!
2021-08-06 09:07:26 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-06 09:07:35 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-08-06 09:08:18 +0200Cajun(~Cajun@user/cajun)
2021-08-06 09:08:27 +0200michalz(~michalz@185.246.204.62)
2021-08-06 09:09:25 +0200oxide(~lambda@user/oxide)
2021-08-06 09:09:29 +0200 <jle`> Cajun: yeah, i think overall you can just do map (read . filter isChar) . splitOn "," -- and then you can use `Image PixelRGB8`
2021-08-06 09:10:00 +0200 <jle`> Cajun: the way PixelRGB8 works is that it expects the internal vector to be a list of Word8's, where each group of 3 represents a 3-color-channel pixel
2021-08-06 09:10:37 +0200 <jle`> so you can just do stringToImg :: String -> Image PixelRGB8; stringToImg = Image 100 100 . Vector.fromList . map (read . filter isDigit) . splitOn ","
2021-08-06 09:11:26 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-06 09:11:37 +0200 <jle`> note that internally, in the JuicyPixels library, an image of PixelRGB8's doesn't actually contain any PixelRGB8. it contains a "continguous memory" vector of each component
2021-08-06 09:12:16 +0200 <jle`> PixelRGB8 itself is merely a "view"/abstraction over the internal representation. and so ideally you never access the bytes directly, you ask for pixelrgb8's, and juicypixels aggregates them and gives them to you
2021-08-06 09:13:14 +0200 <jle`> so using the Image constructor is "unsafe" in a way and is pretty low-level, because if you don't have the bytes in exactly the right order and orientation it will fail. but luckily in your case, it happens to magically line up
2021-08-06 09:14:10 +0200wolfshappen_(~waff@irc.furworks.de) (Ping timeout: 258 seconds)
2021-08-06 09:14:57 +0200endlesseditions(~endlessed@135.129.112.36) (Quit: Textual IRC Client: www.textualapp.com)
2021-08-06 09:15:26 +0200Cajun85(~Cajun@user/cajun)
2021-08-06 09:15:34 +0200 <Cajun85> random disconnects are a pain
2021-08-06 09:15:55 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com)
2021-08-06 09:16:17 +0200anandprabhu_(~anandprab@86.106.121.228) (Quit: Leaving)
2021-08-06 09:16:23 +0200 <jle`> Cajun85: ah heh, i figured you did sleep. but i sent a few messages about five minutes ago if you're interested still
2021-08-06 09:16:47 +0200 <Cajun85> i can see them, its just disconnecting for a split second lol
2021-08-06 09:17:12 +0200Shires(~Shires@user/shires)
2021-08-06 09:18:58 +0200Cajun(~Cajun@user/cajun) (Ping timeout: 246 seconds)
2021-08-06 09:19:34 +0200 <Cajun85> it surely did something, though its definitely not 100 by 100
2021-08-06 09:19:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 09:19:58 +0200 <Cajun85> idk how big it is, so ill just keep scaling up until it errors
2021-08-06 09:21:03 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-08-06 09:21:32 +0200tommd(~tommd@cpe-76-179-204-251.maine.res.rr.com) (Remote host closed the connection)
2021-08-06 09:23:32 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-08-06 09:25:30 +0200 <jle`> Cajun85: ah yeah, that was just a placeholder :)
2021-08-06 09:26:04 +0200 <jle`> if you're guessing and checking, one thinkg you can do is to count the number of items and see what the factors are
2021-08-06 09:26:16 +0200 <jle`> length . splitOn ","
2021-08-06 09:26:23 +0200 <jle`> er, and divide that by three :)
2021-08-06 09:27:07 +0200 <jle`> Cajun85: but yeah, important to remember that the only reason this scheme works is because of a big coincidence in that the way your data is encoded happens to be exactly the internal representation juicypixels uses for images (if you flatten the tuples out). so, a happy coincidence
2021-08-06 09:27:26 +0200 <jle`> *for 3-channel color images
2021-08-06 09:27:36 +0200 <Cajun85> very interesting, i didnt realize that. would this also work for 4 channel RGBA?
2021-08-06 09:27:37 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-08-06 09:27:52 +0200 <Cajun85> if it were arity 4 tuples instead
2021-08-06 09:28:00 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-06 09:28:09 +0200 <maerwald[m]> Anyone running stack on FreeBSD?
2021-08-06 09:28:35 +0200 <Axman6> I tried, but it doesn't work on 13.0 :'(
2021-08-06 09:29:23 +0200 <maerwald[m]> I'm building it on 12.2
2021-08-06 09:29:25 +0200aman(~aman@user/aman) (Quit: aman)
2021-08-06 09:29:33 +0200 <jle`> Cajun85: it looks like from https://hackage.haskell.org/package/JuicyPixels-3.3.5/docs/src/Codec.Picture.Types.html#line-1753, PixelRGBA8 expects r, g, b, then alpha channel bytes
2021-08-06 09:29:36 +0200 <Axman6> can't you grab it from pkg?
2021-08-06 09:29:40 +0200 <jle`> so it would work if you did Image PixelRGBA8
2021-08-06 09:29:52 +0200 <jle`> but again, this isn't really a robust way of doing this heh
2021-08-06 09:30:09 +0200 <maerwald[m]> Axman6: i don't use FreeBSD. I'm trying to run the integration tests on it and build binaries
2021-08-06 09:30:15 +0200 <jle`> so an ImageRGBA8 would, in its internal representation, be [r1,g1,b1,a1,r2,g2,b2,a2,...] etc.
2021-08-06 09:30:58 +0200 <jle`> but juicypixels is designed around not having to deal with the internal rep. just taking advantage of a happy coincidence here :)
2021-08-06 09:32:01 +0200kuribas(~user@ptr-25vy0i8khwnki6rybr8.18120a2.ip6.access.telenet.be)
2021-08-06 09:33:03 +0200 <maerwald[m]> Axman6: so what doesn't work on 13?
2021-08-06 09:33:23 +0200 <Axman6> stack is liked against something that has a newer version on 13
2021-08-06 09:33:48 +0200 <maerwald[m]> Ah so you mean upstream binaries don't work
2021-08-06 09:34:34 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 09:34:42 +0200oxide(~lambda@user/oxide) (Ping timeout: 245 seconds)
2021-08-06 09:42:35 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 09:44:43 +0200aman(~aman@user/aman)
2021-08-06 09:46:52 +0200pe200012(~pe200012@113.105.10.33)
2021-08-06 09:47:04 +0200pe200012_(~pe200012@113.105.10.33) (Ping timeout: 272 seconds)
2021-08-06 09:47:09 +0200 <Axman6> yeah
2021-08-06 09:47:14 +0200 <Axman6> I think ghc fails to run too
2021-08-06 09:47:30 +0200 <maerwald[m]> do you have the freebsd 12 compat pkg?
2021-08-06 09:47:43 +0200 <Axman6> no
2021-08-06 09:47:52 +0200 <maerwald[m]> try that
2021-08-06 09:49:04 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 09:49:08 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-06 09:49:33 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 276 seconds)
2021-08-06 09:49:40 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 09:50:58 +0200slavaqq82(~slavaqq@sdmail.sdserver.cz)
2021-08-06 09:51:52 +0200slavaqq(~slavaqq@sdmail.sdserver.cz) (Ping timeout: 246 seconds)
2021-08-06 09:54:33 +0200kenran(~kenran@b2b-37-24-119-190.unitymedia.biz) (Quit: WeeChat info:version)
2021-08-06 09:55:51 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
2021-08-06 09:57:30 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-08-06 09:58:09 +0200vysn(~vysn@user/vysn)
2021-08-06 10:00:09 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 10:05:55 +0200hendursa1(~weechat@user/hendursaga)
2021-08-06 10:08:45 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 244 seconds)
2021-08-06 10:17:27 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-06 10:17:28 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-06 10:17:31 +0200allbery_bgeekosaur
2021-08-06 10:20:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 10:22:37 +0200 <Axman6> Do we have any nice ways to write streams of bits? Looking at https://blog.tempus-ex.com/hello-video-codec/ and wanting a BitstreamWriter
2021-08-06 10:24:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2021-08-06 10:27:22 +0200Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 240 seconds)
2021-08-06 10:28:16 +0200slavaqq82(~slavaqq@sdmail.sdserver.cz) (Ping timeout: 246 seconds)
2021-08-06 10:30:03 +0200 <[exa]> Axman6: you mean "huge amount of stuff that isn't aligned to bytes" ?
2021-08-06 10:30:14 +0200 <Axman6> yeah I guess
2021-08-06 10:30:52 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 10:31:06 +0200 <Axman6> huge isn't a necessaty but the rest, yes
2021-08-06 10:34:48 +0200 <[exa]> like, if you don't need total top performance, you might be good with wrapping a ByteString builder or something
2021-08-06 10:36:04 +0200Cajun85Cajun
2021-08-06 10:36:37 +0200 <[exa]> data ByteBuilder = {buffer :: ByteString, currentByte::Word8, nextBit::Word8 }
2021-08-06 10:37:05 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-08-06 10:38:34 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-08-06 10:43:30 +0200gzj(~GZJ0X@192.243.120.171.16clouds.com)
2021-08-06 10:44:19 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it) (Ping timeout: 258 seconds)
2021-08-06 10:44:55 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 10:45:58 +0200azeem(~azeem@176.201.8.137)
2021-08-06 10:47:09 +0200michalz(~michalz@185.246.204.62) (Read error: No route to host)
2021-08-06 10:47:37 +0200tengu12(~tengu12@cpe-70-121-244-14.neb.res.rr.com)
2021-08-06 10:48:09 +0200gzj(~GZJ0X@192.243.120.171.16clouds.com) (Ping timeout: 258 seconds)
2021-08-06 10:49:17 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-06 10:56:06 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 272 seconds)
2021-08-06 10:57:21 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 258 seconds)
2021-08-06 11:00:03 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-08-06 11:00:34 +0200azeem(~azeem@176.201.8.137)
2021-08-06 11:03:12 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net) (Quit: Connection closed)
2021-08-06 11:03:30 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-08-06 11:05:12 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 256 seconds)
2021-08-06 11:07:09 +0200 <tomsmeding> presumably with another integer indicating the number of bits in nextBit :)
2021-08-06 11:07:47 +0200mei(~mei@user/mei)
2021-08-06 11:07:52 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 11:09:16 +0200agua_pesada(~agua_pesa@2804:14c:8793:8e2f:48b4:3d09:2f3b:552b)
2021-08-06 11:09:36 +0200azeem(~azeem@176.201.8.137)
2021-08-06 11:13:24 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 276 seconds)
2021-08-06 11:14:16 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 256 seconds)
2021-08-06 11:14:26 +0200 <[exa]> tomsmeding: better move the nextBit with << directly than have a counter that you need to transform with << everytime
2021-08-06 11:14:33 +0200 <maerwald[m]> Sounds like `SerialT m (Array Word8)`
2021-08-06 11:15:22 +0200 <[exa]> that can do bits?
2021-08-06 11:15:47 +0200 <maerwald[m]> hmm
2021-08-06 11:15:50 +0200 <tomsmeding> [exa]: yeah sure, but with your current representation how are you going to distinguish between writing 0b1 and writing 0b10
2021-08-06 11:16:22 +0200 <tomsmeding> (or the 1 and 0 the other way round depending on your favourite endianness :p )
2021-08-06 11:16:28 +0200 <[exa]> currentBit = currentBit | nextBit ?
2021-08-06 11:16:42 +0200 <[exa]> (and nextBit <<= 1, sorry for C notation)
2021-08-06 11:17:00 +0200 <tomsmeding> oh wait, 0 <= nextBit < 8 ?
2021-08-06 11:17:12 +0200 <[exa]> nextBit is a power of 2
2021-08-06 11:17:23 +0200 <tomsmeding> aaaaaah yes that makes sense, ignore what I said
2021-08-06 11:17:27 +0200 <[exa]> literally the next bit that would be added if you.. ok
2021-08-06 11:17:31 +0200 <tomsmeding> I mistook the meaning of your fields :p
2021-08-06 11:17:40 +0200 <maerwald[m]> I think you can transform it into a `SerialT m Word8`, but that would be slow, because the event loop is then over every bit.
2021-08-06 11:17:50 +0200 <[exa]> I originally wanted to have nextBitPos :: Word3 but alas, no Word3.
2021-08-06 11:17:51 +0200 <[exa]> :(
2021-08-06 11:18:26 +0200tomsmedingwonders if (bit * mask) is faster or slower than (bit << index)
2021-08-06 11:19:02 +0200 <[exa]> maerwald[m]: if you get the data bit by bit, you're unlikely to improve the speed much...otoh for block data you'd need word shifting anyway
2021-08-06 11:19:50 +0200 <[exa]> tomsmeding: << and & may eat less energy and take less cycles than *
2021-08-06 11:20:08 +0200 <[exa]> but I was over-optimizing for sure, this won't be ever visible with haskell around :D
2021-08-06 11:20:22 +0200 <tomsmeding> wanting the << version means that you want the Word3 version
2021-08-06 11:20:37 +0200 <tomsmeding> yes lol
2021-08-06 11:20:46 +0200azeem(~azeem@176.201.8.137)
2021-08-06 11:21:09 +0200 <[exa]> I like how I still nerdrage on such tiny details, feels like I'm 15 again. :D
2021-08-06 11:21:57 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-08-06 11:22:14 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-06 11:23:03 +0200 <tomsmeding> an important reason why premature micro-optimisation needed to be called evil is that programmers like to do it :p
2021-08-06 11:23:54 +0200 <Rembane> But it's so fun!
2021-08-06 11:24:25 +0200 <tomsmeding> yes
2021-08-06 11:25:07 +0200 <tomsmeding> in that vein: probably better to have {ByteString, Word64, Word6}
2021-08-06 11:25:42 +0200 <[exa]> that is the way.
2021-08-06 11:26:05 +0200 <[exa]> you meant Word64String right.
2021-08-06 11:26:28 +0200 <tomsmeding> lol yes
2021-08-06 11:26:39 +0200 <tomsmeding> (UnboxedVector Word64) possibly
2021-08-06 11:27:14 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-08-06 11:29:00 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:9c72:9058:eb7a:ca08) (Ping timeout: 256 seconds)
2021-08-06 11:29:57 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:4853:8255:fc4e:2378)
2021-08-06 11:30:26 +0200 <[exa]> totally forgot about the !'s
2021-08-06 11:31:17 +0200Maxdamantus(~Maxdamant@user/maxdamantus)
2021-08-06 11:31:19 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)
2021-08-06 11:31:21 +0200jakalx(~jakalx@base.jakalx.net)
2021-08-06 11:32:37 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 258 seconds)
2021-08-06 11:33:03 +0200 <tomsmeding> !
2021-08-06 11:35:40 +0200mcglk_(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2021-08-06 11:37:19 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 11:42:40 +0200slavaqq(~slavaqq@sdmail.sdserver.cz)
2021-08-06 11:43:19 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 11:48:22 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:113:1bce:1dde:b94a) (Ping timeout: 268 seconds)
2021-08-06 11:53:40 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 11:53:40 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 11:53:48 +0200derelict(~derelict@user/derelict) (Quit: WeeChat 3.2)
2021-08-06 11:55:36 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 250 seconds)
2021-08-06 11:58:26 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-08-06 11:59:27 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:4853:8255:fc4e:2378) (Ping timeout: 258 seconds)
2021-08-06 12:00:10 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:1069:a9de:7caa:cf07)
2021-08-06 12:00:33 +0200azeem(~azeem@176.201.8.137)
2021-08-06 12:04:31 +0200pe200012_(~pe200012@113.105.10.33)
2021-08-06 12:04:42 +0200pe200012(~pe200012@113.105.10.33) (Ping timeout: 256 seconds)
2021-08-06 12:05:58 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de)
2021-08-06 12:08:44 +0200__monty__(~toonn@user/toonn)
2021-08-06 12:14:53 +0200slavaqq(~slavaqq@sdmail.sdserver.cz) (Quit: Client closed)
2021-08-06 12:16:19 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 258 seconds)
2021-08-06 12:17:56 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
2021-08-06 12:18:16 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2021-08-06 12:19:30 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-118.prtc.net)
2021-08-06 12:20:59 +0200azeem(~azeem@176.201.8.137)
2021-08-06 12:21:51 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 12:23:08 +0200paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
2021-08-06 12:24:51 +0200derelict(~derelict@user/derelict)
2021-08-06 12:25:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 12:26:17 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2021-08-06 12:28:36 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:460a:4755:73b5:e6f5)
2021-08-06 12:39:19 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 258 seconds)
2021-08-06 12:43:23 +0200azeem(~azeem@176.201.8.137)
2021-08-06 12:48:54 +0200enoq(~enoq@194-208-179-35.lampert.tv)
2021-08-06 12:51:01 +0200 <kuribas> what are your ideas on units, or similar packages? Are they worth it, or is it better to just use Double everywhere (with some type synonyms for clarity)?
2021-08-06 12:52:01 +0200HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 244 seconds)
2021-08-06 12:53:07 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 268 seconds)
2021-08-06 12:53:17 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2021-08-06 12:57:43 +0200 <kuribas> wasn't there a ship that sank because they mixed units?
2021-08-06 13:00:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-08-06 13:00:17 +0200hsek[m](~hsekmatri@2001:470:69fc:105::d18f)
2021-08-06 13:04:36 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 13:04:54 +0200tengu12(~tengu12@cpe-70-121-244-14.neb.res.rr.com) (Quit: Client closed)
2021-08-06 13:07:07 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-06 13:07:35 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 13:08:33 +0200AlexNoo_(~AlexNoo@178.34.160.135)
2021-08-06 13:08:34 +0200Vajb(~Vajb@hag-jnsbng11-58c3a1-224.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-08-06 13:08:52 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-08-06 13:09:19 +0200Vajb(~Vajb@85-76-2-199-nat.elisa-mobile.fi)
2021-08-06 13:09:33 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:460a:4755:73b5:e6f5) (Quit: WeeChat 2.8)
2021-08-06 13:11:08 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2021-08-06 13:11:34 +0200Alex_test(~al_test@94.233.240.129) (Ping timeout: 272 seconds)
2021-08-06 13:11:34 +0200AlexZenon(~alzenon@94.233.240.129) (Ping timeout: 272 seconds)
2021-08-06 13:11:35 +0200Akronymus(~Akronymus@85.31.8.181)
2021-08-06 13:11:47 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 245 seconds)
2021-08-06 13:12:14 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-06 13:12:16 +0200 <Akronymus> Haskell is a pretty cool language.
2021-08-06 13:12:16 +0200AlexNoo(~AlexNoo@94.233.240.129) (Ping timeout: 272 seconds)
2021-08-06 13:12:33 +0200 <Akronymus> Altough, not sure if I am ready yet.
2021-08-06 13:12:40 +0200ablutor(~quassel@wasscher.com) (Quit: going for vitamine d)
2021-08-06 13:13:12 +0200 <kuribas> Akronymus: ready for what?
2021-08-06 13:13:18 +0200 <Akronymus> For haskell.
2021-08-06 13:13:24 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 13:13:32 +0200ablutor(~quassel@wasscher.com)
2021-08-06 13:13:42 +0200 <kuribas> Just try it? You'll never know everything anyway...
2021-08-06 13:13:44 +0200 <Akronymus> So far, only dabbled in f# a bit, and quite frankly, haskell seems a bit scary.
2021-08-06 13:14:41 +0200 <kuribas> Akronymus: haskell is a big language, but you don't need to know everything.
2021-08-06 13:14:48 +0200 <Akronymus> Yeah I get that.
2021-08-06 13:15:13 +0200 <kuribas> If you understand monad transformers, you'll be able to tackle most code.
2021-08-06 13:15:43 +0200 <Akronymus> And there is the big m already. (I think I understand them somewhat at least though)
2021-08-06 13:15:43 +0200Vajb(~Vajb@85-76-2-199-nat.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-08-06 13:15:51 +0200Vajb(~Vajb@n2bovg6licdnldblt-2.v6.elisa-mobile.fi)
2021-08-06 13:16:01 +0200 <Akronymus> Monads aren't that bad.
2021-08-06 13:16:04 +0200 <kuribas> Akronymus: it's more important to understand the concepts behind it, and the idioms.
2021-08-06 13:16:06 +0200Alex_test(~al_test@178.34.160.135)
2021-08-06 13:16:08 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 252 seconds)
2021-08-06 13:16:14 +0200AlexZenon(~alzenon@178.34.160.135)
2021-08-06 13:17:35 +0200 <kuribas> Like: how to separate effects in your program, understanding the state, leveraging combinators to make small languages that solve your problem in a declarative way.
2021-08-06 13:18:05 +0200 <kuribas> I think most people miss the last part, then get disillusioned because they program haskell as if it's java.
2021-08-06 13:18:06 +0200 <Akronymus> I did most of that in f# already.
2021-08-06 13:18:20 +0200 <kuribas> Akronymus: in that case, you're ready for haskell :)
2021-08-06 13:18:25 +0200 <Akronymus> Just, haskell goes so much further with HKT and stuff.
2021-08-06 13:18:58 +0200 <kuribas> HKT are overrated.
2021-08-06 13:19:12 +0200 <Akronymus> And i'll definitely miss the type inference.
2021-08-06 13:19:40 +0200 <kuribas> I mean the sofisticated stuff, basic HKT are ok.
2021-08-06 13:19:44 +0200 <maerwald[m]> Maybe you want to look into F*, which can compile to F#
2021-08-06 13:20:03 +0200 <kuribas> maerwald: F* and haskell have different usecases...
2021-08-06 13:20:05 +0200 <Akronymus> Yeah, you can go quite crazy with types in haskell.
2021-08-06 13:20:18 +0200 <maerwald[m]> kuribas: Haskell has no use case
2021-08-06 13:20:35 +0200 <kuribas> maerwald[m]: go away...
2021-08-06 13:20:48 +0200 <maerwald[m]> F* was designed with a use case in mind, Haskell was an experiment with open ended result
2021-08-06 13:21:26 +0200 <maerwald[m]> So if at all, it's general purpose
2021-08-06 13:22:11 +0200 <Akronymus> Even if it is just learning to be a better programmer, haskell has a use.
2021-08-06 13:22:23 +0200 <Akronymus> And pushing other languages features forward.
2021-08-06 13:22:41 +0200 <maerwald[m]> I didn't say it doesn't, kuribas just misunderstood my statement
2021-08-06 13:23:03 +0200 <kuribas> languages like f# or ocaml allow you to code like it's java or C#
2021-08-06 13:23:15 +0200 <kuribas> in haskell you are forced to do it the functional way.
2021-08-06 13:23:20 +0200 <kuribas> or make a big mess.
2021-08-06 13:23:32 +0200 <Akronymus> That alone is already a use case.
2021-08-06 13:23:36 +0200 <Akronymus> Being limited to functional
2021-08-06 13:23:59 +0200 <Akronymus> F# makes it easy to fall back to imperative/OOP code
2021-08-06 13:24:09 +0200 <maerwald[m]> kuribas: https://hackage.haskell.org/package/xeno is this functional? :)
2021-08-06 13:24:12 +0200 <Akronymus> Which, while useful, also hurts learning
2021-08-06 13:25:06 +0200 <maerwald[m]> apparently, it's the fastest xml parser there is (or so ppl say) even beating several C libraries
2021-08-06 13:25:14 +0200 <maerwald[m]> But when you look at the code, hmm
2021-08-06 13:25:32 +0200 <kuribas> maerwald[m]: don't use that, use my package :) https://hackage.haskell.org/package/hexpat-streamparser
2021-08-06 13:25:43 +0200 <maerwald[m]> kuribas: is it faster?
2021-08-06 13:25:47 +0200 <kuribas> maerwald[m]: it's fast by cheating
2021-08-06 13:26:00 +0200 <kuribas> maerwald[m]: no, but it's standards compliant...
2021-08-06 13:26:31 +0200 <kuribas> and should be efficient enough for most cases...
2021-08-06 13:26:33 +0200 <Akronymus> Does it interface with as functional?
2021-08-06 13:26:37 +0200 <maerwald[m]> well, the reason I brought it up is... there are many cases of non-idiomatic haskell code
2021-08-06 13:26:42 +0200 <maerwald[m]> that somewhat have their place
2021-08-06 13:26:42 +0200 <kuribas> Akronymus: yes it does.
2021-08-06 13:26:49 +0200 <Akronymus> Mostly in libraries though maerwald
2021-08-06 13:26:59 +0200 <maerwald[m]> Are you sure?
2021-08-06 13:27:04 +0200 <Akronymus> kuribas than for most users it is a functional lib
2021-08-06 13:27:09 +0200 <Akronymus> then
2021-08-06 13:27:36 +0200 <kuribas> Akronymus: you build your parser declaratively.
2021-08-06 13:27:57 +0200 <kuribas> parseXMLByteString :: EventListParser e a -> ParseOptions Text Text -> ByteString -> Either (EventParseError e, Maybe XMLParseLocation) a
2021-08-06 13:28:07 +0200 <Akronymus> Like fparsec?
2021-08-06 13:28:17 +0200 <Akronymus> (I know it is a derivative of the parsec from haskell)
2021-08-06 13:28:18 +0200 <kuribas> It's a pure function, though it uses an imperative library under the hood (expat).
2021-08-06 13:28:20 +0200 <maerwald[m]> xeno is the opposite of declarative... so my take is: haskell doesn't force you to be declarative. It just gives you the option
2021-08-06 13:28:40 +0200 <kuribas> Akronymus: yeah, this is structured like parsec.
2021-08-06 13:28:43 +0200 <Akronymus> It HEAVILY encourages you to write idiomatic code.
2021-08-06 13:28:45 +0200 <maerwald[m]> That's why I object that haskell has a use case
2021-08-06 13:29:46 +0200 <kuribas> Akronymus: my library builds on top of the parser-combinators library, which is modelled after parsec.
2021-08-06 13:31:56 +0200 <kuribas> maerwald[m]: What I mean is that the use case people want to use haskell for, is actually not a usecase for haskell. That is, writing programs where you prove everything in the typesystem.
2021-08-06 13:32:13 +0200 <maerwald[m]> I agree
2021-08-06 13:32:33 +0200 <maerwald[m]> But we have forces that want to drive Haskell into that direction
2021-08-06 13:33:22 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 240 seconds)
2021-08-06 13:34:22 +0200MoC(~moc@user/moc)
2021-08-06 13:34:54 +0200 <hpc> to be fair, the tools of writing proofs could be useful for expressing properties of more useful code
2021-08-06 13:35:26 +0200 <maerwald[m]> I don't understand that sentence
2021-08-06 13:35:33 +0200 <hpc> idris is turing-complete and nobody complains about it being a bad proof assistant
2021-08-06 13:36:56 +0200 <juri_> kuribas: I'm 9 years a haskeller, both professionally, and for fun, and i still don't understand monad transformers. :D
2021-08-06 13:37:38 +0200 <maerwald[m]> Maybe because there's not much to understand
2021-08-06 13:38:01 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-06 13:38:50 +0200 <maerwald[m]> well, except for abominations like MonadBaseControl
2021-08-06 13:39:08 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com)
2021-08-06 13:39:39 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-06 13:43:03 +0200 <maerwald[m]> I hate to say it, but maybe `RIO` isn't so far from the truth. Although I prefer an ExceptT/Excepts at the outside
2021-08-06 13:43:11 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com)
2021-08-06 13:44:28 +0200 <kuribas> juri_: I use monad transformers in most of my projects. It means less boilerplate and plumbing.
2021-08-06 13:44:35 +0200 <maerwald[m]> Never understood Snoymans argument against mixing ExceptT with IO
2021-08-06 13:45:18 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2021-08-06 13:45:19 +0200 <maerwald[m]> yes, ExceptT with IO means you may need to catch on two different levels. Isn't that obvious to everyone?
2021-08-06 13:45:36 +0200 <Rembane> Is that argument that he prefers to only have one kind of going-wrong instead of both Left and exceptions?
2021-08-06 13:45:42 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:460a:4755:73b5:e6f5)
2021-08-06 13:45:53 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com)
2021-08-06 13:46:03 +0200 <maerwald[m]> I think the argument was that the type lies and you still need to handle IO exceptions yeah
2021-08-06 13:46:56 +0200 <maerwald[m]> but then you could say `IO (Either a b)` lies as well
2021-08-06 13:47:07 +0200 <maerwald[m]> ExceptT is just a glorified inner Either
2021-08-06 13:47:13 +0200 <maerwald[m]> that composes better
2021-08-06 13:47:18 +0200 <kuribas> It makes sense to have two going-wrongs. One if for stuff you expect the program to handle, the other for stuff where intervention of an admin or operations guy is expected.
2021-08-06 13:48:34 +0200 <kuribas> I use Exceptions for the latter. You just catch the exteption, log it somewhere, and abort the operation.
2021-08-06 13:48:58 +0200 <maerwald[m]> in low level libraries, such as filepath/directory etc, of course I wouldn't expect an ExceptT, because there's no way you can tell what error is expected and what isn't
2021-08-06 13:49:17 +0200 <Akronymus> I know I read about some REALLY weirdly named monad before that someone made as a joke, but can't find it anymore.
2021-08-06 13:49:25 +0200 <Akronymus> It was relevant like 3 pages ago
2021-08-06 13:50:15 +0200wei2912(~wei2912@112.199.250.21) (Quit: Lost terminal)
2021-08-06 13:50:46 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-08-06 13:50:57 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 13:51:14 +0200 <Rembane> Akronymus: Have you seen the Tardis monad?
2021-08-06 13:51:25 +0200 <Akronymus> Nope
2021-08-06 13:51:33 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 13:51:34 +0200 <maerwald[m]> I think the weirdest monad is ContT
2021-08-06 13:51:37 +0200 <Akronymus> But the one I thought of had a 5 word name or something
2021-08-06 13:51:58 +0200 <maerwald[m]> I forget how it works every time
2021-08-06 13:52:15 +0200 <maerwald[m]> learn it again, forget it again
2021-08-06 13:52:19 +0200 <Rembane> maerwald[m]: Yeah, type lie all the time, and we need to handle that too.
2021-08-06 13:54:14 +0200futty(~futty@c83-252-75-55.bredband.tele2.se)
2021-08-06 13:56:17 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 252 seconds)
2021-08-06 13:56:40 +0200 <kuribas> Akronymus: These?
2021-08-06 13:56:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-08-06 13:57:15 +0200 <kuribas> https://hackage.haskell.org/package/these-1.1.1.1/docs/Data-These.html
2021-08-06 13:57:19 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 13:57:47 +0200 <Akronymus> Nope
2021-08-06 13:57:58 +0200 <Akronymus> It was a really long name made out of multiple words
2021-08-06 14:01:31 +0200phma(phma@2001:5b0:210d:cf58:911f:3237:b853:e162) (Read error: Connection reset by peer)
2021-08-06 14:01:44 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 258 seconds)
2021-08-06 14:02:29 +0200phma(~phma@2001:5b0:210d:73a8:1482:7584:9a9a:de0a)
2021-08-06 14:04:02 +0200pe200012_(~pe200012@113.105.10.33) (Ping timeout: 258 seconds)
2021-08-06 14:04:03 +0200pe200012(~pe200012@113.105.10.33)
2021-08-06 14:04:57 +0200 <Akronymus> Sadly gotta go.
2021-08-06 14:04:59 +0200Akronymus(~Akronymus@85.31.8.181) (Quit: Client closed)
2021-08-06 14:06:36 +0200Guest9112(~Guest91@2a02:a212:2180:8d00:cfb7:369e:490f:8f0e)
2021-08-06 14:08:35 +0200Neuromancer(~Neuromanc@user/neuromancer)
2021-08-06 14:10:25 +0200Flow(~none@gentoo/developer/flow)
2021-08-06 14:12:53 +0200 <maerwald[m]> oh, I abuse `Excepts` for `These` and then decide later what error is a warning (and encapsulate a value in the error)
2021-08-06 14:13:28 +0200 <maerwald[m]> not sure anyone has written open sum type version of These
2021-08-06 14:15:35 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 14:16:29 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 14:16:30 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-08-06 14:18:07 +0200 <hpc> ContT isn't that bad - just think (pure x) = ($ x), and what you can do to compose those sorts of functions
2021-08-06 14:18:29 +0200 <hpc> it just looks bad because the definitions have a ton of lambdas and data constructor wrapping
2021-08-06 14:19:12 +0200Guest9112(~Guest91@2a02:a212:2180:8d00:cfb7:369e:490f:8f0e) (Quit: Client closed)
2021-08-06 14:37:06 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:1069:a9de:7caa:cf07) (Remote host closed the connection)
2021-08-06 14:37:22 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:8766:3fda:9e97:b8d5)
2021-08-06 14:38:05 +0200 <lechner> Hi, what's everone's favorite command line option parser, please? Thanks!
2021-08-06 14:38:06 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 250 seconds)
2021-08-06 14:38:29 +0200 <[exa]> lechner: optparse-applicative
2021-08-06 14:38:37 +0200 <maerwald[m]> haskell or in general?
2021-08-06 14:38:55 +0200 <lechner> here
2021-08-06 14:39:01 +0200 <lechner> [exa]: thanks!
2021-08-06 14:39:02 +0200 <maerwald[m]> here?
2021-08-06 14:39:18 +0200 <lechner> hi my name is dory :0
2021-08-06 14:39:31 +0200 <maerwald[m]> nice to meet you dory
2021-08-06 14:39:42 +0200 <lechner> i meant in haskell
2021-08-06 14:40:04 +0200 <maerwald[m]> I don't like any of them, really
2021-08-06 14:40:18 +0200mikoto-chan(~mikoto-ch@ip-193-121-10-50.dsl.scarlet.be)
2021-08-06 14:40:21 +0200 <lechner> and i thought it was early for me
2021-08-06 14:40:21 +0200azeem(~azeem@176.201.8.137)
2021-08-06 14:40:46 +0200 <[exa]> you know the routine
2021-08-06 14:40:52 +0200 <[exa]> coffee >>= back to work
2021-08-06 14:40:58 +0200 <lechner> maerwald[m]: you only write libraries?
2021-08-06 14:41:05 +0200 <maerwald[m]> no
2021-08-06 14:41:26 +0200 <maerwald[m]> but I like cli stuff to be declarative, optparse-applicative isn't
2021-08-06 14:41:43 +0200 <maerwald[m]> although I use it
2021-08-06 14:41:53 +0200 <lechner> [exa]: finally i understand that operator
2021-08-06 14:42:05 +0200 <maerwald[m]> but don't ask me to come up with something better... I'd probably do TH hacks
2021-08-06 14:42:47 +0200 <lechner> maerwald[m]: isn't all of haskell declarative?
2021-08-06 14:42:53 +0200 <maerwald[m]> no
2021-08-06 14:43:45 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2021-08-06 14:44:01 +0200 <maerwald[m]> I don't see how any language can be declarative, unless it's a DSL
2021-08-06 14:44:33 +0200 <maerwald[m]> but you can stretch the word "declarative" to mean "purely functional", but that isn't what it really means
2021-08-06 14:44:34 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:8766:3fda:9e97:b8d5) (Ping timeout: 240 seconds)
2021-08-06 14:44:35 +0200 <[exa]> only pure data is purely declarative
2021-08-06 14:44:48 +0200 <[exa]> json for victory!
2021-08-06 14:45:19 +0200 <lechner> this page may be a good place to enshrine valuable opinions. it says it's out of date, in a remark from 2012! https://wiki.haskell.org/GetOpt
2021-08-06 14:46:19 +0200Pickchea(~private@user/pickchea)
2021-08-06 14:47:11 +0200 <lechner> is 'procedural' or 'imperative' the opposite of 'declarative'?
2021-08-06 14:47:26 +0200 <maerwald[m]> odd question
2021-08-06 14:48:02 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 245 seconds)
2021-08-06 14:48:22 +0200 <futty> Uploaded file: https://uploads.kiwiirc.com/files/bc188da828f4d06043793f35724e5baf/Screenshot_20210806_144733.png
2021-08-06 14:48:50 +0200 <[exa]> futty: many people on IRC won't be able to see that
2021-08-06 14:49:00 +0200 <[exa]> futty: if you can, do a pastebin
2021-08-06 14:49:07 +0200 <futty> I get this error when I try to run the program. I am a bit certain that if I were to define the 0-9 as an aux/helper, I wouldnt get an error. But I want to know why this happens?
2021-08-06 14:49:12 +0200 <futty> alright going to do that
2021-08-06 14:49:25 +0200 <maerwald[m]> futty: you're missing an `x` on the last definitioon
2021-08-06 14:49:46 +0200 <futty> https://pastebin.com/8WXf0tY3
2021-08-06 14:49:49 +0200 <maerwald[m]> below the `9`
2021-08-06 14:50:37 +0200AlexNoo_AlexNoo
2021-08-06 14:50:38 +0200 <futty> I dont Inderstand, I dont have a `9`, which line is it?
2021-08-06 14:50:48 +0200 <[exa]> just below that
2021-08-06 14:51:01 +0200 <[exa]> line 12 on pastebin, add x
2021-08-06 14:51:16 +0200 <maerwald[m]> yes you have a `9`
2021-08-06 14:51:32 +0200 <[exa]> this way it has no idea that the argument is actually called 'x'
2021-08-06 14:52:43 +0200 <lechner> before the guard
2021-08-06 14:52:50 +0200kuribas(~user@ptr-25vy0i8khwnki6rybr8.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2021-08-06 14:53:06 +0200Guest5389(~chris@81.96.113.213) (Remote host closed the connection)
2021-08-06 14:53:11 +0200mcglk(~mcglk@131.191.49.120)
2021-08-06 14:53:12 +0200 <[exa]> yes, the guards come behind the parameter list; you need to specify that you're using 1 parameter there
2021-08-06 14:53:22 +0200markpythonicbitc(~markpytho@50.228.44.6)
2021-08-06 14:53:28 +0200 <[exa]> futty: btw you might like this:
2021-08-06 14:53:31 +0200 <[exa]> > toEnum (fromEnum '0' + 5) :: Char
2021-08-06 14:53:32 +0200 <lambdabot> '5'
2021-08-06 14:53:47 +0200 <lechner> wow
2021-08-06 14:54:17 +0200 <Athas> The GHC bug I encounter most often is the "PAP object entered" thing when enabling profiling. Is there an architectural explanation for why it is so common?
2021-08-06 14:54:51 +0200[exa]discovers console-program for option parsing
2021-08-06 14:54:52 +0200 <futty> I got it. I just forgot the x before guards. Thanks for the toEnum. My uni course showed this long list as pattern matching purposes.
2021-08-06 14:55:25 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-08-06 14:55:25 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-08-06 14:55:32 +0200 <[exa]> futty: it's got an educative value but we're obsessed with compact code :D
2021-08-06 14:55:41 +0200euouae(~euouae@user/euouae)
2021-08-06 14:55:43 +0200hendursaga(~weechat@user/hendursaga)
2021-08-06 14:55:47 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-08-06 14:55:55 +0200 <euouae> Hello
2021-08-06 14:56:00 +0200charukiewicz(~quassel@irouteince04.i.subnet.rcn.com) (Ping timeout: 265 seconds)
2021-08-06 14:56:12 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 14:56:13 +0200 <lechner> hi
2021-08-06 14:56:16 +0200 <euouae> It seems that cabal has changed from sandbox model to nix packages
2021-08-06 14:56:17 +0200 <futty> My first encounters with pattern matching and recursion was a nightmare and i failed the exams but now i find it quite intresting.
2021-08-06 14:56:29 +0200 <euouae> did that happen after cabal install 3.2 ?
2021-08-06 14:56:53 +0200 <maerwald[m]> euouae: yes, sandboxes were removed
2021-08-06 14:57:11 +0200 <euouae> I’m noticing that the docs don’t have build / install instructions
2021-08-06 14:57:39 +0200 <euouae> i was told to learn cabal and stack but the docs of 3.4 are incomplete on that section and it seems like a major featur
2021-08-06 14:58:01 +0200chris(~chris@81.96.113.213)
2021-08-06 14:58:05 +0200chrisGuest6130
2021-08-06 14:58:17 +0200 <euouae> Is there some other way I can learn about cabal install 3.4 ? Other than readthedocs
2021-08-06 15:01:06 +0200alx741(~alx741@186.178.109.254)
2021-08-06 15:01:51 +0200inkbottle[m](~inkbottle@2001:470:69fc:105::2ff5) (Quit: You have been idle for 30+ days)
2021-08-06 15:01:53 +0200hjulle[m](~hjullemat@2001:470:69fc:105::1dd) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:10 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:11 +0200Drezil(~drezilkif@2001:470:69fc:105::7f8) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:12 +0200kosmikus[m](~andresloe@2001:470:69fc:105::95d) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:12 +0200Guest4241(~sylveonma@2001:470:69fc:105::2d95) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:12 +0200autrim64[m](~autrim64m@2001:470:69fc:105::16a1) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:13 +0200jellz[m](~jellzmatr@2001:470:69fc:105::2daa) (Quit: You have been idle for 30+ days)
2021-08-06 15:02:18 +0200Guest6130(~chris@81.96.113.213) (Ping timeout: 240 seconds)
2021-08-06 15:02:37 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it)
2021-08-06 15:02:45 +0200 <euouae> Maybe I can just ignore cabal for now and focus on stack? Or does the sandbox change affect stack too?
2021-08-06 15:03:00 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0)
2021-08-06 15:03:12 +0200Drezil(~drezilkif@2001:470:69fc:105::7f8)
2021-08-06 15:03:24 +0200kosmikus[m](~andresloe@2001:470:69fc:105::95d)
2021-08-06 15:03:31 +0200 <lechner> what is your problem with cabal?
2021-08-06 15:03:36 +0200autrim64[m](~autrim64m@2001:470:69fc:105::16a1)
2021-08-06 15:03:50 +0200Sylveon(~sylveonma@2001:470:69fc:105::2d95)
2021-08-06 15:04:02 +0200jellz[m](~jellzmatr@2001:470:69fc:105::2daa)
2021-08-06 15:04:14 +0200SylveonGuest4011
2021-08-06 15:04:23 +0200mikoto-chan(~mikoto-ch@ip-193-121-10-50.dsl.scarlet.be) (Quit: mikoto-chan)
2021-08-06 15:04:32 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0) ()
2021-08-06 15:04:37 +0200Drezil(~drezilkif@2001:470:69fc:105::7f8) ()
2021-08-06 15:04:44 +0200kosmikus[m](~andresloe@2001:470:69fc:105::95d) ()
2021-08-06 15:04:45 +0200autrim64[m](~autrim64m@2001:470:69fc:105::16a1) ()
2021-08-06 15:04:46 +0200Guest4011(~sylveonma@2001:470:69fc:105::2d95) ()
2021-08-06 15:04:54 +0200jellz[m](~jellzmatr@2001:470:69fc:105::2daa) ()
2021-08-06 15:04:54 +0200 <euouae> I’m new to the tools and I’m trying to read the docs but the 3.4 docs do not describe build & install instructions (says todo)
2021-08-06 15:05:09 +0200 <euouae> and the 3.2 docs describe an obsolete method (sandboxes)
2021-08-06 15:05:24 +0200 <yushyin> https://cabal.readthedocs.io/en/3.4/cabal-commands.html#cabal-v2-build
2021-08-06 15:06:04 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-08-06 15:06:07 +0200 <euouae> Aaah that’s great. Thank you
2021-08-06 15:06:58 +0200 <euouae> https://cabal.readthedocs.io/en/3.4/installing-packages.html#building-and-installing-packages Here’s what I was talking about if anyone is curious
2021-08-06 15:08:31 +0200 <euouae> On 3.4 don’t I just have to say build for v2-build?
2021-08-06 15:09:36 +0200 <yushyin> euouae: yup, with a recent cabal `v2-*' is the default so `build' it is
2021-08-06 15:10:09 +0200 <euouae> Thanks !
2021-08-06 15:11:39 +0200 <yushyin> euouae: I also often don't understand the structure and outline of the cabal documentation. it needs work.
2021-08-06 15:12:28 +0200 <lechner> Should I leave a note here that section 6 still has a Backpack warning? https://github.com/haskell/cabal/issues/6005#issuecomment-850468676
2021-08-06 15:14:01 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-08-06 15:14:04 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net) (Ping timeout: 250 seconds)
2021-08-06 15:16:35 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 252 seconds)
2021-08-06 15:17:02 +0200xff0x_(~xff0x@2001:1a81:52e3:2500:8766:3fda:9e97:b8d5)
2021-08-06 15:17:15 +0200burnside_(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-06 15:17:26 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 15:17:36 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-08-06 15:17:53 +0200img(~img@user/img)
2021-08-06 15:20:53 +0200vicfred_(~vicfred@user/vicfred)
2021-08-06 15:22:58 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 240 seconds)
2021-08-06 15:24:00 +0200vicfred(~vicfred@user/vicfred) (Ping timeout: 272 seconds)
2021-08-06 15:24:32 +0200azeem(~azeem@176.201.8.137)
2021-08-06 15:25:11 +0200 <yushyin> or a pull request
2021-08-06 15:25:32 +0200 <lechner> just drop it?
2021-08-06 15:27:11 +0200 <yushyin> if the issue is resolved, yeah why not?
2021-08-06 15:27:30 +0200sandcatjess
2021-08-06 15:27:53 +0200 <lechner> okay, i am just new and don't want to look too dumb
2021-08-06 15:31:26 +0200futty(~futty@c83-252-75-55.bredband.tele2.se) (Ping timeout: 252 seconds)
2021-08-06 15:31:32 +0200 <yushyin> I think phadej is happy for the help and the worst that can happen is that your PR is closed down.
2021-08-06 15:33:27 +0200Pickchea(~private@user/pickchea) (Ping timeout: 245 seconds)
2021-08-06 15:33:33 +0200 <Athas> I have a program that goes into an infinite loop. Profiling shows it happens in a cost centre called "CAF:$dAllocator_r20f3G", with no location information available. How can I debug this?
2021-08-06 15:35:46 +0200vicfred_(~vicfred@user/vicfred) (Quit: Leaving)
2021-08-06 15:36:24 +0200jneira_(~jneira_@28.red-80-28-169.staticip.rima-tde.net)
2021-08-06 15:36:51 +0200oxide(~lambda@user/oxide)
2021-08-06 15:39:04 +0200charukiewicz(~quassel@irouteinc255.i.subnet.rcn.com)
2021-08-06 15:45:43 +0200 <lechner> yushyin: https://github.com/haskell/cabal/pull/7518
2021-08-06 15:47:05 +0200euouae(~euouae@user/euouae) (Quit: Client closed)
2021-08-06 15:47:09 +0200Pickchea(~private@user/pickchea)
2021-08-06 15:47:28 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 15:49:00 +0200chris(~chris@81.96.113.213)
2021-08-06 15:49:04 +0200chrisGuest5588
2021-08-06 15:49:57 +0200vicfred(~vicfred@user/vicfred)
2021-08-06 15:52:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 15:53:27 +0200Guest5588(~chris@81.96.113.213) (Ping timeout: 245 seconds)
2021-08-06 15:58:44 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 256 seconds)
2021-08-06 16:00:43 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-06 16:01:44 +0200azeem(~azeem@176.201.8.137)
2021-08-06 16:02:08 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-08-06 16:02:15 +0200 <janus> Athas: have you enabled -fprof-auto ? otherwise the cost centres may not be as granular as they could be. afaik https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/profiling.html#compiler-options-fo…
2021-08-06 16:02:36 +0200pe200012(~pe200012@113.105.10.33) (Ping timeout: 250 seconds)
2021-08-06 16:03:50 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:460a:4755:73b5:e6f5) (Quit: WeeChat 2.8)
2021-08-06 16:04:13 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 244 seconds)
2021-08-06 16:04:19 +0200Sgeo(~Sgeo@user/sgeo)
2021-08-06 16:06:32 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-08-06 16:06:55 +0200aman(~aman@user/aman) (Quit: aman)
2021-08-06 16:07:46 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 240 seconds)
2021-08-06 16:14:11 +0200Magnus[m](~magthetch@2001:470:69fc:105::d1a7)
2021-08-06 16:15:42 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Remote host closed the connection)
2021-08-06 16:16:11 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 16:17:38 +0200__monty__(~toonn@user/toonn) (Ping timeout: 252 seconds)
2021-08-06 16:19:00 +0200__monty__(~toonn@user/toonn)
2021-08-06 16:21:00 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 272 seconds)
2021-08-06 16:22:05 +0200 <Athas> janus: turns out it was a typeclass dictionary. I have no idea how that one could be infinitely recursive. I fixed it by refactoring the program to remove the typeclass.
2021-08-06 16:23:17 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-08-06 16:23:53 +0200 <janus> i can't imagine how instance resolution can be infinite since any program any only has a finite amount of types in play, i'd say?
2021-08-06 16:24:30 +0200 <janus> anyway, it would be decided at compile time, no?
2021-08-06 16:26:38 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-08-06 16:28:43 +0200 <Ollie[m]> What's the easiest way to attach an attoparsec `Parser` to a network socket? I want to read and parse enough bytes to fulfill my parser. I guess that parser has no way to really inform `network` of how many bytes it needs, so I'm fine with something that gives me back some left over
2021-08-06 16:28:50 +0200 <Athas> It might create a self-referential dictionary, but I also can't see how that can happen...
2021-08-06 16:29:24 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-06 16:33:04 +0200 <c_wraith> maybe something with UndecidableSuperclasses?
2021-08-06 16:33:18 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 256 seconds)
2021-08-06 16:43:07 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 258 seconds)
2021-08-06 16:43:14 +0200lbseale(~lbseale@user/ep1ctetus)
2021-08-06 16:44:10 +0200azeem(~azeem@176.201.8.137)
2021-08-06 16:49:02 +0200chris(~chris@81.96.113.213)
2021-08-06 16:49:07 +0200chrisGuest7240
2021-08-06 16:50:29 +0200elf_fortrez(~elf_fortr@adsl-72-50-4-118.prtc.net) (Quit: Client closed)
2021-08-06 16:50:42 +0200jmorris(uid433911@id-433911.stonehaven.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 16:50:56 +0200fendor_(~fendor@77.119.214.156.wireless.dyn.drei.com)
2021-08-06 16:51:24 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 276 seconds)
2021-08-06 16:51:29 +0200vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2021-08-06 16:52:00 +0200azeem(~azeem@176.201.8.137)
2021-08-06 16:53:16 +0200viluon(uid453725@id-453725.brockwell.irccloud.com)
2021-08-06 16:53:28 +0200fendor(~fendor@178.115.49.9.wireless.dyn.drei.com) (Ping timeout: 258 seconds)
2021-08-06 16:53:52 +0200 <viluon> hello, I'd like to compile all Stackage packages with a patched GHC. Is this a good place to ask for guidance?
2021-08-06 16:58:09 +0200 <viluon> I'd like to run the packages' test suites after compiling them
2021-08-06 17:00:32 +0200pgib(~textual@173.38.117.81)
2021-08-06 17:01:53 +0200 <janus> viluon: nix makes it easy to swap out the compiler ;)
2021-08-06 17:02:07 +0200 <janus> and they have CI to rebuild hackage
2021-08-06 17:03:41 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es)
2021-08-06 17:06:04 +0200 <viluon> janus: interesting, could you please point me to some resources? I'm sceptical about using Nix, but it may be a viable option
2021-08-06 17:07:59 +0200 <janus> viluon: gabriella has some docs. havn't tried them, but always loved all that she did : https://github.com/Gabriel439/haskell-nix
2021-08-06 17:12:10 +0200 <janus> hmm now i don't know if that is their name any more, thought i saw it somewhere.
2021-08-06 17:13:02 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 245 seconds)
2021-08-06 17:14:28 +0200 <viluon> janus: thanks for the link, I'm reading it now
2021-08-06 17:15:28 +0200enoq(~enoq@194-208-179-35.lampert.tv) (Read error: Connection reset by peer)
2021-08-06 17:15:28 +0200timex(~timex@202.14.120.238)
2021-08-06 17:16:06 +0200azeem(~azeem@176.201.8.137)
2021-08-06 17:16:07 +0200timex(~timex@202.14.120.238) (Client Quit)
2021-08-06 17:16:08 +0200enoq(~enoq@194-208-179-35.lampert.tv)
2021-08-06 17:16:58 +0200notzmv(~zmv@user/notzmv)
2021-08-06 17:17:06 +0200dispater(~dispater@user/brprice) (Quit: ZNC 1.8.1 - https://znc.in)
2021-08-06 17:17:51 +0200 <absence> is it possible to implement something like (MonadIO m1, MonadIO m2) => m1 a -> ExceptT e m2 a?
2021-08-06 17:18:54 +0200dispater(~dispater@user/brprice)
2021-08-06 17:20:20 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-08-06 17:21:01 +0200 <davean> of course not
2021-08-06 17:21:22 +0200Obo(~roberto@70.pool90-171-81.dynamic.orange.es) (Ping timeout: 268 seconds)
2021-08-06 17:21:33 +0200 <Rembane> absence: Do you need it for something in particular?
2021-08-06 17:23:08 +0200zebrag(~chris@user/zebrag)
2021-08-06 17:24:01 +0200 <absence> davean: why "of course"? i realise that m1 is not the same as m2, but at the same time m1 "needs" IO, which m2 "has"...
2021-08-06 17:24:47 +0200 <davean> absence: So? I have something you need, can I be you?
2021-08-06 17:24:55 +0200dajoer(~david@user/gvx) (Quit: leaving)
2021-08-06 17:25:32 +0200 <davean> Its that level of absurdity
2021-08-06 17:25:55 +0200 <davean> I have lungs, you need lungs - what does this mean for us being the same person?
2021-08-06 17:26:27 +0200Core8888(~agua_pesa@191.177.175.57)
2021-08-06 17:26:37 +0200 <davean> We also know you have lungs
2021-08-06 17:26:52 +0200 <absence> davean: right, so i guess what i want would have to be expressed in a different way?
2021-08-06 17:27:03 +0200 <davean> You haven't given any indication of what you want
2021-08-06 17:27:08 +0200 <geekosaur> more to the point, m1 would just be IO if that were enough; the fact that it has a MonbadIo constraint means it needs more. what guarantee is there that m2 provides that more?
2021-08-06 17:27:12 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 258 seconds)
2021-08-06 17:28:25 +0200 <absence> geekosaur: ah, so it's about the "unused" parts of the transformer stacks
2021-08-06 17:28:26 +0200 <maerwald[m]> I want your lungs
2021-08-06 17:28:26 +0200 <maerwald[m]> xD
2021-08-06 17:28:47 +0200 <geekosaur> nor can you "extract" the IO from a MonadIO m => m and use it elsewhere, for the same reason you can't extract the a from an IO a
2021-08-06 17:28:55 +0200 <davean> absence: you've given us no idea how to dissasseble an m1 and look at its parts for example
2021-08-06 17:29:02 +0200 <davean> or to build an m2 for that matter
2021-08-06 17:29:05 +0200 <davean> other than liftIO
2021-08-06 17:29:44 +0200 <davean> Some things allow you to extract the IO, for example ReaderT r IO a does, just runReaderT
2021-08-06 17:31:03 +0200agua_pesada(~agua_pesa@2804:14c:8793:8e2f:48b4:3d09:2f3b:552b) (Ping timeout: 276 seconds)
2021-08-06 17:35:20 +0200 <absence> hmm, i think i expected mtl style stacks to magically sort that out, but that only works when they're related
2021-08-06 17:35:30 +0200rmoe(~rmoe@c-71-236-207-44.hsd1.wa.comcast.net) (Ping timeout: 265 seconds)
2021-08-06 17:36:27 +0200 <geekosaur> in general stuff like this works only because you can build a chain of related monadic expressions. otherwise you couldn't for example have conditionals
2021-08-06 17:36:36 +0200 <davean> absence: I mean even if that could work - you haven't given any constraints that give such a knowlege!
2021-08-06 17:36:42 +0200 <davean> absence: ALL you have given is MonadIO
2021-08-06 17:37:35 +0200 <davean> And you didn't say something like "m1 is some abstract monad that is allowed to do up to X things" and then have m2 have said capabilities
2021-08-06 17:37:43 +0200 <davean> you just said "MonadIO"
2021-08-06 17:37:50 +0200 <davean> if you'd said "forall m1" that might be different
2021-08-06 17:38:27 +0200 <davean> Perhaps you were thinking something like (forall m1 . MonadIO m1 => m1 a) -> ExceptT e m2 a?
2021-08-06 17:38:42 +0200Pickchea(~private@user/pickchea) (Ping timeout: 258 seconds)
2021-08-06 17:40:06 +0200 <davean> absence: I want to make the point you didn't say m1 was abstract, you said it was exactly something. So theres really nothing for MTL to sort out
2021-08-06 17:40:16 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 17:40:21 +0200 <davean> the forall case though might leave some sorting to happen, under the right conditions
2021-08-06 17:42:38 +0200 <absence> davean: i knew that my signature as written doesn't work, the compiler already told me that ;) i wanted to explore related ideas, so the forall m1 one looks interesting. thanks!
2021-08-06 17:43:49 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-08-06 17:45:14 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2021-08-06 17:46:22 +0200charukiewicz(~quassel@irouteinc255.i.subnet.rcn.com) (Ping timeout: 258 seconds)
2021-08-06 17:46:31 +0200charukiewicz_(~quassel@irouteince04.i.subnet.rcn.com)
2021-08-06 17:46:56 +0200zmt00(~zmt00@user/zmt00)
2021-08-06 17:48:11 +0200 <janus> absence: did you see that mtl already has lift for ExceptT?
2021-08-06 17:49:36 +0200jeetelongname(~jeet@host-89-241-98-229.as13285.net)
2021-08-06 17:49:39 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-08-06 17:49:57 +0200zebrag(~chris@user/zebrag)
2021-08-06 17:50:13 +0200 <janus> you have lift, you have "except" (in transformers for taking an Either to ExceptT). it's hard for me to imagine other functions that put things in ExceptT
2021-08-06 17:50:13 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-08-06 17:50:18 +0200 <janus> but maybe my imagination is limited :P
2021-08-06 17:50:42 +0200 <jeetelongname> :t (***)
2021-08-06 17:50:43 +0200 <lambdabot> Arrow a => a b c -> a b' c' -> a (b, b') (c, c')
2021-08-06 17:52:07 +0200 <janus> ok , throwError, may need that also if you have an unconditional failure
2021-08-06 17:52:30 +0200charukiewicz_(~quassel@irouteince04.i.subnet.rcn.com) (Ping timeout: 258 seconds)
2021-08-06 17:52:41 +0200charukiewicz(~quassel@irouteinc02.i.subnet.rcn.com)
2021-08-06 17:53:27 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-08-06 17:53:45 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-08-06 17:54:53 +0200pschorf(~user@c-73-77-28-188.hsd1.tx.comcast.net)
2021-08-06 17:55:05 +0200shapr(~user@pool-108-28-144-11.washdc.fios.verizon.net)
2021-08-06 17:55:54 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 268 seconds)
2021-08-06 17:56:08 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-08-06 17:56:26 +0200oso(~oso@2601:58c:c080:a950:f275:2530:b398:680b) (Quit: Client closed)
2021-08-06 17:57:40 +0200berberman(~berberman@user/berberman)
2021-08-06 17:58:15 +0200berberman_(~berberman@user/berberman) (Ping timeout: 258 seconds)
2021-08-06 17:58:48 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-08-06 17:58:54 +0200ukari(~ukari@user/ukari) (Remote host closed the connection)
2021-08-06 17:59:38 +0200ukari(~ukari@user/ukari)
2021-08-06 18:00:16 +0200 <absence> janus: thanks, but the problem was the mismatch between m1 and m2
2021-08-06 18:00:48 +0200 <janus> aah right , ok. so actually not really related to ExceptT
2021-08-06 18:01:44 +0200euandreh(~euandreh@2804:14c:33:9fe5:4cf:cdfb:eec8:75c0)
2021-08-06 18:02:55 +0200neceve(~quassel@2a02:c7f:607e:d600:d2c9:6317:8847:51b6)
2021-08-06 18:05:09 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 258 seconds)
2021-08-06 18:06:47 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it)
2021-08-06 18:09:32 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net)
2021-08-06 18:11:00 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 18:12:29 +0200rmoe(~rmoe@c-71-236-207-44.hsd1.wa.comcast.net)
2021-08-06 18:14:21 +0200 <lechner> Hi, why does connectPostgreSQL in postgresql-simple expect a ByteString and not a String, please?
2021-08-06 18:15:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds)
2021-08-06 18:15:18 +0200 <dsal> String is bad in general. They'd have to pack it in to a bytestring to send it over the wire anyway, so might as well take it.
2021-08-06 18:15:45 +0200 <dsal> With overloaded strings and optparse-applicative or similar for taking parameters, you might generally not notice the difference.
2021-08-06 18:16:37 +0200 <maerwald[m]> with optparse-applicative you will notice something: https://github.com/pcapriotti/optparse-applicative/issues/368
2021-08-06 18:17:19 +0200 <maerwald[m]> and https://github.com/haskell/bytestring/issues/140
2021-08-06 18:17:42 +0200 <maerwald[m]> (which is used by OverloadedStrings)
2021-08-06 18:17:45 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it) (Read error: Connection reset by peer)
2021-08-06 18:17:55 +0200azeem(~azeem@176.201.8.137)
2021-08-06 18:18:20 +0200 <dsal> Ah. For the same reason ... yeah
2021-08-06 18:19:29 +0200 <maerwald[m]> I use quasi quoters
2021-08-06 18:19:42 +0200 <dsal> You wouldn't notice if you used ascii connection strings. :)
2021-08-06 18:19:59 +0200 <dsal> I've never written a qq. What's the input?
2021-08-06 18:20:11 +0200 <maerwald[m]> yeah
2021-08-06 18:20:36 +0200 <maerwald[m]> A string
2021-08-06 18:20:54 +0200 <dsal> Makes sense.
2021-08-06 18:20:58 +0200Vajb(~Vajb@n2bovg6licdnldblt-2.v6.elisa-mobile.fi) (Ping timeout: 256 seconds)
2021-08-06 18:21:07 +0200 <maerwald[m]> xD
2021-08-06 18:22:24 +0200charukiewicz(~quassel@irouteinc02.i.subnet.rcn.com) (Ping timeout: 258 seconds)
2021-08-06 18:22:29 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 252 seconds)
2021-08-06 18:22:52 +0200charukiewicz(~quassel@irouteince04.i.subnet.rcn.com)
2021-08-06 18:23:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 18:23:22 +0200azeem(~azeem@176.201.8.137)
2021-08-06 18:24:53 +0200Vajb(~Vajb@2001:999:40:408d:1d9e:a80c:4ab7:8954)
2021-08-06 18:26:14 +0200Core8888(~agua_pesa@191.177.175.57) (Ping timeout: 258 seconds)
2021-08-06 18:26:18 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.2)
2021-08-06 18:27:28 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-08-06 18:28:20 +0200lbseale_(~lbseale@user/ep1ctetus)
2021-08-06 18:30:07 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:30:31 +0200haykam2(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:30:57 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-08-06 18:32:22 +0200lbseale(~lbseale@user/ep1ctetus) (Ping timeout: 258 seconds)
2021-08-06 18:33:07 +0200haykam2(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:33:26 +0200haykam3(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:33:50 +0200neceve(~quassel@2a02:c7f:607e:d600:d2c9:6317:8847:51b6) (Remote host closed the connection)
2021-08-06 18:34:35 +0200haykam3(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:34:52 +0200haykam4(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:35:05 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f)
2021-08-06 18:36:00 +0200cpape`(~user@2a01:4f9:c010:632d::1) (Remote host closed the connection)
2021-08-06 18:36:01 +0200enoq(~enoq@194-208-179-35.lampert.tv) (Quit: enoq)
2021-08-06 18:36:12 +0200cpape`(~user@2a01:4f9:c010:632d::1)
2021-08-06 18:36:13 +0200fendor_fendor
2021-08-06 18:36:23 +0200Guest7946(~Guest79@S0106bc3e07325ee3.vw.shawcable.net)
2021-08-06 18:36:26 +0200 <lechner> dsal: Hi, why is String bad in general (other than how it is implemented), please?
2021-08-06 18:36:45 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
2021-08-06 18:36:47 +0200haykam4(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:37:08 +0200haykam5(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:37:57 +0200 <dsal> lechner: mainly that. It's a linked list and has to be serialized to communicate externally
2021-08-06 18:38:14 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2021-08-06 18:38:20 +0200 <Guest7946> Hi All - I have a question about getting emacs haskell modes working with ghcup installed haskell/ghci. Is this the right place?
2021-08-06 18:39:40 +0200haykam5(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:40:25 +0200 <lechner> dsal: i don't mean to argue, but wouldn't the "wire" argument also apply to putX and printX?
2021-08-06 18:40:32 +0200haykam6(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:40:46 +0200smarton(~smarton@gnu/webmaster/smarton) (Quit: ZNC 1.7.2+deb3 - https://znc.in)
2021-08-06 18:41:06 +0200 <dsal> Yeah. It doesn't always matter.
2021-08-06 18:41:20 +0200haykam6(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:41:37 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:41:43 +0200dustinm-(~dustinm@static.38.6.217.95.clients.your-server.de) (Quit: Leaving)
2021-08-06 18:41:50 +0200smarton(~smarton@gnu/webmaster/smarton)
2021-08-06 18:42:07 +0200 <dsal> I'm using an xml library that uses strings and it feels wrong, but I'm also not making anything big or spending much of my time there, so I can't be bothered. :)
2021-08-06 18:42:44 +0200hrnz(~ulli@irc.plumbing) (Ping timeout: 252 seconds)
2021-08-06 18:43:02 +0200 <adamCS> Guest7946: Might be! What's the specific question?
2021-08-06 18:43:36 +0200Pickchea(~private@user/pickchea)
2021-08-06 18:43:46 +0200 <lechner> dsal: Shouldn't that be a reason to reimplement String rather than encourage it's avoidance, like Data.Text?
2021-08-06 18:43:46 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:44:20 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:44:23 +0200 <geekosaur> lechner: there is no reimplementation that would help aside from things like Data.Text
2021-08-06 18:44:24 +0200dustinm(~dustinm@static.38.6.217.95.clients.your-server.de)
2021-08-06 18:44:43 +0200 <Guest7946> Thanks adamCS - I'm running on OS X, I've modified the init.el file to find the ghci executable in the .ghcup directory but the haskell inferior process just keeps dying. I'm not sufficently knowledgable about emacs debugging of subprocesses so I cannot tell why.
2021-08-06 18:45:04 +0200 <Guest7946> Is this configuration known to work? OS X/ghcup installation/emacs modes?
2021-08-06 18:45:33 +0200 <monochrom> I bet backward compatibility may block redefining String.
2021-08-06 18:45:58 +0200 <geekosaur> yes, anything assuming it's a list would fail
2021-08-06 18:46:00 +0200 <dsal> lechner: String is really easy to think about and work with. It's fine for many things. But if you have OverloadedStrings enabled, you don't notice a lot of issues.
2021-08-06 18:46:06 +0200 <geekosaur> which means most things using String
2021-08-06 18:46:20 +0200 <adamCS> Guest7946: Yes, at least for some modes. What are you trying to get working? I use ghcup installed toolchain (ghc/cabal/hls) and then in emacs I use lsp which uses hls (haskell-language-server), What mode needs ghci?
2021-08-06 18:46:23 +0200 <dsal> Though bytestring is weird, I guess. It means something else that overlaps a lot
2021-08-06 18:46:27 +0200 <monochrom> Besides, the same can be said about Bool.
2021-08-06 18:47:04 +0200 <monochrom> You can't solve boolean blindness by redefining Bool. The only solution is discouragement and education.
2021-08-06 18:47:13 +0200 <geekosaur> adamCS: inferior haskell mode
2021-08-06 18:47:18 +0200 <adamCS> Guest7946: often emacs has a buffer someplace that has the stderr of the inferior process. Or maybe the mode can be configured to make such a buffer.
2021-08-06 18:47:41 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:47:59 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:48:22 +0200 <adamCS> geekosaur: Maybe you have better ideas! I don't even really understand major/minor modes. I just have it (haskell and lsp modes) working.
2021-08-06 18:48:53 +0200 <monochrom> I use haskell-mode rather than lsp/hls.
2021-08-06 18:49:00 +0200 <geekosaur> not really, I don't use inferior haskell mode much
2021-08-06 18:49:11 +0200 <Guest7946> @adamCS I think it's just inferior haskell mode... just to run ghci within emacs
2021-08-06 18:49:11 +0200 <lambdabot> Unknown command, try @list
2021-08-06 18:49:15 +0200 <dsal> I've never got lsp working. Too many weird levels of misdirection in my setup.
2021-08-06 18:49:25 +0200 <lechner> monochrom: the disagreement is over String == [Char] right?
2021-08-06 18:49:28 +0200 <dsal> And haskell-mode has worked well on my lawn
2021-08-06 18:49:36 +0200 <adamCS> took me a while to get lsp/hls working. But it's pretty cool when it does.
2021-08-06 18:49:40 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 18:49:46 +0200 <monochrom> But within haskell-mode, the "inferior" option is really an old relic that no one should use.
2021-08-06 18:49:53 +0200 <Guest7946> "There isn't a problem in CS that can't be solved by another level of indirection" ... i forget who said it.
2021-08-06 18:50:17 +0200 <monochrom> Use "interactive-haskell-mode" instead.
2021-08-06 18:50:51 +0200 <Guest7946> Ok, thanks @monochrom I'll reconfigure to use interactive :)
2021-08-06 18:50:54 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:51:03 +0200 <monochrom> But either way, unless you do manual configuration, haskell-mode honours PATH.
2021-08-06 18:51:10 +0200azeem(~azeem@176.201.8.137) (Ping timeout: 250 seconds)
2021-08-06 18:51:18 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:51:28 +0200dustinm(~dustinm@static.38.6.217.95.clients.your-server.de) (Quit: Leaving)
2021-08-06 18:52:59 +0200 <Guest7946> Yes, PATH would be an answer if I know how to modify the "login" PATH in OS X. I'm unsure how PATH gets set in the case where you start from gui.
2021-08-06 18:53:09 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:53:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2021-08-06 18:54:15 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:54:59 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:55:00 +0200econo(uid147250@user/econo)
2021-08-06 18:55:22 +0200Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2021-08-06 18:55:25 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 18:55:47 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:56:11 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-08-06 18:56:13 +0200Atum_(~IRC@user/atum/x-2392232)
2021-08-06 18:56:31 +0200oxide(~lambda@user/oxide) (Ping timeout: 258 seconds)
2021-08-06 18:56:39 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de)
2021-08-06 18:57:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-08-06 19:00:11 +0200Cajun(~Cajun@user/cajun)
2021-08-06 19:00:38 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2021-08-06 19:01:07 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 258 seconds)
2021-08-06 19:01:34 +0200Vajb(~Vajb@2001:999:40:408d:1d9e:a80c:4ab7:8954) (Ping timeout: 250 seconds)
2021-08-06 19:02:51 +0200Vajb(~Vajb@2001:999:51:e847:deb5:e55f:2c83:fc9d)
2021-08-06 19:03:17 +0200Guest7946(~Guest79@S0106bc3e07325ee3.vw.shawcable.net) (Quit: Client closed)
2021-08-06 19:05:36 +0200 <maerwald[m]> There's also https://gitlab.haskell.org/haskell/ghcup-hs#with_ghc-wrapper-eg-for-hls
2021-08-06 19:07:39 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-08-06 19:09:01 +0200 <dsal> Guest6153: emacs has two paths you can set. There's the `PATH` environment that's passed down to subprocesses and the `exec-path` list that it uses to find things.
2021-08-06 19:09:20 +0200 <dsal> Argh, hit the wrong guest.
2021-08-06 19:09:32 +0200hrnz(~ulli@irc.plumbing)
2021-08-06 19:09:33 +0200Vajb(~Vajb@2001:999:51:e847:deb5:e55f:2c83:fc9d) (Ping timeout: 258 seconds)
2021-08-06 19:09:52 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-08-06 19:10:12 +0200euandreh(~euandreh@2804:14c:33:9fe5:4cf:cdfb:eec8:75c0) (Quit: WeeChat 3.2)
2021-08-06 19:10:37 +0200 <monochrom> Yeah the right guest left. Confounding even smart autocompletion.
2021-08-06 19:11:16 +0200 <maerwald[m]> the Right guest Left... english is weird
2021-08-06 19:11:39 +0200mattil(~mattilinn@87-92-57-75.bb.dnainternet.fi)
2021-08-06 19:12:24 +0200 <dsal> Is there `swap` for Either?
2021-08-06 19:12:27 +0200gawen(~gawen@user/gawen) (Quit: cya)
2021-08-06 19:12:36 +0200Vajb(~Vajb@nawgi2ugr2ypv0v7x-3.v6.elisa-mobile.fi)
2021-08-06 19:13:02 +0200 <dsal> I wrote some type that's basically `Either a a`. No idea where I put that or what I called it....
2021-08-06 19:13:12 +0200 <monochrom> I haven't seen one in libraries, but I would be inclined to name it "ingsoc".
2021-08-06 19:13:15 +0200markpythonicbitc(~markpytho@50.228.44.6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-06 19:16:42 +0200gawen(~gawen@user/gawen)
2021-08-06 19:16:50 +0200Vajb(~Vajb@nawgi2ugr2ypv0v7x-3.v6.elisa-mobile.fi) (Ping timeout: 258 seconds)
2021-08-06 19:17:23 +0200Vajb(~Vajb@n4o6cmlync08x7vgp-3.v6.elisa-mobile.fi)
2021-08-06 19:17:56 +0200Pickchea(~private@user/pickchea)
2021-08-06 19:18:54 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-08-06 19:23:32 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2021-08-06 19:28:32 +0200Guest7240(~chris@81.96.113.213) (Remote host closed the connection)
2021-08-06 19:29:27 +0200delYsid(~user@62-178-101-151.cable.dynamic.surfer.at)
2021-08-06 19:29:50 +0200 <delYsid> @hoogle (Monoid (f a), Applicative f) => Maybe a -> f a
2021-08-06 19:29:51 +0200 <lambdabot> Generic.Data.Internal.Utils coerce' :: Coercible (f x) (g x) => f x -> g x
2021-08-06 19:29:51 +0200 <lambdabot> Control.Effect.Lift sendM :: (Has (Lift n) sig m, Functor n) => n a -> m a
2021-08-06 19:29:51 +0200 <lambdabot> Blanks.ScopeW scopeWLiftAnno :: (NatNewtype (ScopeW t n f g) g, Functor t) => t a -> g a
2021-08-06 19:31:48 +0200ukari(~ukari@user/ukari) (Remote host closed the connection)
2021-08-06 19:32:19 +0200ukari(~ukari@user/ukari)
2021-08-06 19:33:24 +0200chris(~chris@81.96.113.213)
2021-08-06 19:33:29 +0200chrisGuest3433
2021-08-06 19:35:41 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it)
2021-08-06 19:36:00 +0200markpythonicbitc(~markpytho@2600:380:c133:d5e:9df4:26a8:3f28:73a8)
2021-08-06 19:38:36 +0200Guest3433(~chris@81.96.113.213) (Ping timeout: 272 seconds)
2021-08-06 19:42:31 +0200Vajb(~Vajb@n4o6cmlync08x7vgp-3.v6.elisa-mobile.fi) (Ping timeout: 258 seconds)
2021-08-06 19:43:02 +0200Atum__(~IRC@user/atum/x-2392232)
2021-08-06 19:45:03 +0200Atum_(~IRC@user/atum/x-2392232) (Ping timeout: 268 seconds)
2021-08-06 19:45:36 +0200Vajb(~Vajb@nzwkg4b83ts4sgjo-3.v6.elisa-mobile.fi)
2021-08-06 19:46:05 +0200curiousgay(~curiousga@77-120-186-48.kha.volia.net) (Ping timeout: 252 seconds)
2021-08-06 19:48:28 +0200markpythonicbitc(~markpytho@2600:380:c133:d5e:9df4:26a8:3f28:73a8) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-06 19:48:41 +0200oxide(~lambda@user/oxide)
2021-08-06 19:52:49 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-08-06 19:58:37 +0200oxide(~lambda@user/oxide) (Ping timeout: 268 seconds)
2021-08-06 20:02:44 +0200pavonia(~user@user/siracusa)
2021-08-06 20:06:41 +0200chris(~chris@81.96.113.213)
2021-08-06 20:06:44 +0200chrisGuest2445
2021-08-06 20:07:20 +0200delYsid(~user@62-178-101-151.cable.dynamic.surfer.at) (Remote host closed the connection)
2021-08-06 20:13:33 +0200oldsk00l(~znc@ec2-18-130-254-135.eu-west-2.compute.amazonaws.com) (Ping timeout: 265 seconds)
2021-08-06 20:15:30 +0200 <lechner> Hi, why does connectPostgreSQL in postgresql-simple expect a strict ByteString instead of lazy, please (or provide an implementation for the latter)? Thanks!
2021-08-06 20:17:07 +0200 <monochrom> You can use "toStrict" easily?
2021-08-06 20:18:06 +0200 <monochrom> I am not the author, but if I were, I wouldn't expect a query to be more than even 1MB long such that lazy bytestring would be called for.
2021-08-06 20:18:11 +0200epolanski(uid312403@id-312403.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 20:18:40 +0200 <lechner> I do, but I thought Haskell is lazy by default. I also do not understand why a separate type is needed to ensure evalution.
2021-08-06 20:19:33 +0200 <monochrom> But postgresql is eager by default.
2021-08-06 20:19:48 +0200 <monochrom> Especially when it wants you to submit a query.
2021-08-06 20:19:54 +0200 <lechner> it's the connection string
2021-08-06 20:20:05 +0200 <monochrom> That too.
2021-08-06 20:21:08 +0200 <lechner> i understand that some routines, like a socket 'receive', deliver a fully evaluated string, but why does that require a separate type?
2021-08-06 20:21:23 +0200Atum__(~IRC@user/atum/x-2392232) (Quit: Atum__)
2021-08-06 20:24:18 +0200Neuromancer(~Neuromanc@user/neuromancer) (Ping timeout: 258 seconds)
2021-08-06 20:25:38 +0200rmoe(~rmoe@c-71-236-207-44.hsd1.wa.comcast.net) (Ping timeout: 250 seconds)
2021-08-06 20:26:26 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 20:27:39 +0200caubert(~caubert@136.244.111.235) (Quit: WeeChat 3.2)
2021-08-06 20:28:38 +0200caubert(~caubert@136.244.111.235)
2021-08-06 20:29:50 +0200bjobjo(~bjobjo@user/bjobjo) (Remote host closed the connection)
2021-08-06 20:31:17 +0200caubert(~caubert@136.244.111.235) (Client Quit)
2021-08-06 20:32:03 +0200rmoe(~rmoe@c-71-236-207-44.hsd1.wa.comcast.net)
2021-08-06 20:32:23 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 20:33:18 +0200caubert(~caubert@136.244.111.235)
2021-08-06 20:33:24 +0200 <monochrom> Given that both kinds of bytestrings are available, I would agree with the author in choosing the non-lazy one to make clear the semantics of the API.
2021-08-06 20:33:47 +0200Erutuon(~Erutuon@user/erutuon)
2021-08-06 20:34:01 +0200 <monochrom> So you would have to escalate it to the level of: why would the bytestring library give you a choice, why didn't it be a dictator.
2021-08-06 20:34:15 +0200goepsilongo(~chacho@2603-7000-ab00-62ed-e8e0-40c9-c788-8ef8.res6.spectrum.com)
2021-08-06 20:34:19 +0200 <monochrom> But I guess once framed that way the answer is pretty clear.
2021-08-06 20:34:41 +0200 <monochrom> We do recognize that laziness is bad for some use cases and there should always be a choice.
2021-08-06 20:35:20 +0200 <lechner> i guess it was too slow or inefficient to have only lazy ByteStrings and "evaluate $ force" at the relevant IO points
2021-08-06 20:39:17 +0200 <lechner> My issue with the ByteString paradigm is, I suppose, that I like to convert UTF-8 to code points at the earliest possibility for input (and the latest for output). Those intermediate Strings are lazy, so in addition to UTF-8 I have to deal with lazy and strict more often
2021-08-06 20:41:19 +0200 <lechner> For Haskell those two often seem to come together; either I have a (lazy) String or a strict BysteString, which nowadays is usually in UTF-8
2021-08-06 20:42:52 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk)
2021-08-06 20:43:05 +0200drd(~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 258 seconds)
2021-08-06 20:46:23 +0200 <lechner> which means I can make my life easier by using the strict version of UTF8.fromString. sorry about thinking aloud
2021-08-06 20:47:12 +0200 <Gurkenglas> When a compilation error is confusing, could I run a debugger on GHC to get more info on how the error arose?
2021-08-06 20:48:10 +0200burnsidesLlama(~burnsides@dhcp168-019.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2021-08-06 20:48:28 +0200 <Gurkenglas> Also, is there a graphical debugger for Haskell? I notice that they are much more pleasant to work with than command-line debuggers.
2021-08-06 20:48:46 +0200 <monochrom> In practice there is no debugger for GHC.
2021-08-06 20:49:04 +0200 <monochrom> Or rather, no debugger that works well on GHC.
2021-08-06 20:49:27 +0200 <lechner> what's the error? most are confusing
2021-08-06 20:50:18 +0200 <lechner> or rather would benefit from more explanation
2021-08-06 20:50:29 +0200 <lechner> for newbies
2021-08-06 20:50:47 +0200 <monochrom> Regarding unicode codepoints, I am surprised that you act like you have never heard of Data.Text before. As if.
2021-08-06 20:53:05 +0200viluon(uid453725@id-453725.brockwell.irccloud.com) (Quit: Connection closed for inactivity)
2021-08-06 20:53:16 +0200jeetelongname(~jeet@host-89-241-98-229.as13285.net) (Remote host closed the connection)
2021-08-06 20:53:29 +0200 <lechner> monochrom: i only read about it, but my JSON and YAML definitions use String, Should I switch?
2021-08-06 20:53:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 20:54:10 +0200 <lechner> they are all short
2021-08-06 20:54:38 +0200 <dsal> IMO: You should fix things you measure as being problems.
2021-08-06 20:55:19 +0200 <dsal> I saw a cool video about unboxing recently that showed how memory is reduced by unboxing. Unless you turn on the optimizer, at which point the unboxed version is optimized less aggressively and it ends up using more memory.
2021-08-06 20:57:32 +0200 <lechner> dsal: right now, i am the bottleneck. that's why i ask so many questions
2021-08-06 20:57:36 +0200 <monochrom> "There isn't a problem in CS that can't be solved by another level of indirection" pairs well with "There isn't a performance penalty that can't be solved by another level of unboxing" >:)
2021-08-06 20:57:36 +0200 <dsal> heh
2021-08-06 20:58:25 +0200 <dsal> lechner: IMO, it's good to have a vague idea of what some of these concepts are. When they show up in bugs, implementation difficulties, or performance issues, you know what to look for.
2021-08-06 20:58:47 +0200 <dsal> There are a lot of Haskell features that just seem stupid and weird to me. Until that one day when I'm like, "Ugh, I can't figure out how to do this... wait..."
2021-08-06 20:59:53 +0200 <Gurkenglas> monochrom, what stops the ghci debugger from working on GHC?
2021-08-06 21:00:11 +0200 <monochrom> GHC is compiled.
2021-08-06 21:00:35 +0200 <monochrom> gdb works poorly on code generated by GHC. GHC code is generated by GHC.
2021-08-06 21:00:39 +0200 <Gurkenglas> Ah. What stops one from running GHC uncompiled?
2021-08-06 21:00:51 +0200 <monochrom> I haven't tried.
2021-08-06 21:00:55 +0200 <geekosaur> there is a way to load ghc into ghci, which ships with the ghc source. it's fragile and breaks every so often
2021-08-06 21:01:32 +0200 <monochrom> ghci debugger is pretty primitive in the first place.
2021-08-06 21:02:38 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-08-06 21:02:48 +0200 <monochrom> Type checking and inference are pretty detailed algorithms in GHC such that even with most ideal debuggers you risk missing the forest for the trees, you will be drowned in unnecessary details.
2021-08-06 21:03:00 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-08-06 21:03:22 +0200 <dsal> `Debug.Trace` == universal debugger.
2021-08-06 21:03:33 +0200 <Gurkenglas> dsal--
2021-08-06 21:03:37 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:a8c6:4beb:a469:3f6e)
2021-08-06 21:03:48 +0200 <monochrom> dsal++
2021-08-06 21:04:04 +0200 <lechner> that costs a beer
2021-08-06 21:04:05 +0200rk04(~rk04@user/rajk)
2021-08-06 21:04:12 +0200 <maerwald[m]> Yes, it allows to debug laziness behavior
2021-08-06 21:05:54 +0200 <xerox> dsal++
2021-08-06 21:06:33 +0200 <dsal> There are different kinds of bugs that require different kinds of debugging procedures. Proper debugger style hasn't been very useful for me in most languages (it was nice in Smalltalk). I had an incredibly rare failure in a server that I found by enabling traces and building a tool to reconstruct the scenario that lead to a stuck thread.
2021-08-06 21:06:37 +0200 <int-e> dsal: do you include https://hackage.haskell.org/package/base-4.15.0.0/docs/Debug-Trace.html#v:traceEvent in that?
2021-08-06 21:06:37 +0200 <monochrom> Moreover, modern type inference algorithms in GHC are written for getting it done, not for explanation. Following its execution does not give you the explanation a human wants, only an explanation a computer wants.
2021-08-06 21:07:10 +0200 <dsal> int-e: I've not used that exact function, but I did go through and name all my threads for eventlog processing. Now I'm going to start using that. :)
2021-08-06 21:07:38 +0200 <monochrom> Although, if you're well-versed with those papers like the OutsideIn(X) paper, you may be able to decode an execution trace.
2021-08-06 21:08:23 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 258 seconds)
2021-08-06 21:08:48 +0200 <int-e> I mean, I love Debug.Trace.trace{,Show} but it has obvious scalability issues.
2021-08-06 21:09:11 +0200 <maerwald[m]> not webscale?
2021-08-06 21:18:21 +0200rk04(~rk04@user/rajk) (Ping timeout: 258 seconds)
2021-08-06 21:21:08 +0200 <int-e> maerwald[m]: wtf does that even mean
2021-08-06 21:21:47 +0200 <maerwald[m]> Means growing your business
2021-08-06 21:22:08 +0200 <int-e> bzzzt
2021-08-06 21:22:15 +0200 <int-e> so buzzy
2021-08-06 21:23:48 +0200 <lechner> it was a tough week for everyone, i can tell
2021-08-06 21:24:19 +0200 <monochrom> I think maerwald[m] was just joking.
2021-08-06 21:24:48 +0200 <lechner> that too.
2021-08-06 21:24:54 +0200 <int-e> yeah I got that, but I did realize that "webscale" is a totally empty word to me, genuinely.
2021-08-06 21:25:14 +0200mattil(~mattilinn@87-92-57-75.bb.dnainternet.fi) (Quit: Leaving)
2021-08-06 21:25:18 +0200 <maerwald[m]> Let me sell you microservices
2021-08-06 21:25:26 +0200 <int-e> Unless you're talking about one of the big companies like Google.
2021-08-06 21:25:43 +0200 <maerwald[m]> And when you get into deployment issues, I'll sell yoe kubernetes
2021-08-06 21:25:52 +0200 <monochrom> I prefer to breathe life back into that empty word and make it a joke word. :)
2021-08-06 21:25:56 +0200 <int-e> Which make up enough of the "web" for the word "webscale" to kind of make sense.
2021-08-06 21:26:16 +0200 <maerwald[m]> Ya, Haskell needs better sales ppl. But it seems that's the main goal of HF. So we're covered.
2021-08-06 21:26:32 +0200 <int-e> Microservices I've seen... https://blog.davetcode.co.uk/post/21st-century-emulator/
2021-08-06 21:26:32 +0200 <maerwald[m]> Sarcastic Friday
2021-08-06 21:26:59 +0200 <lechner> the weekend is coming
2021-08-06 21:27:17 +0200 <int-e> maerwald[m]: tbf your answer was probably exactly what I deserved
2021-08-06 21:27:26 +0200 <maerwald[m]> xD
2021-08-06 21:27:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)
2021-08-06 21:33:23 +0200_bin(~bin@user/bin/x-1583188) (Quit: ZNC - https://znc.in)
2021-08-06 21:33:35 +0200_bin(~bin@user/bin/x-1583188)
2021-08-06 21:33:54 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-08-06 21:35:07 +0200emliunix(~emliunix@2a09:bac0:23::815:b8b)
2021-08-06 21:36:16 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 21:39:30 +0200 <sm> re "could I run a debugger on GHC to get more info on how the error arose?", yes but isn't it often quicker to search for the error message and stare at the code ?
2021-08-06 21:41:11 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-08-06 21:43:39 +0200alx741(~alx741@186.178.109.254) (Ping timeout: 258 seconds)
2021-08-06 21:54:28 +0200Guest2445(~chris@81.96.113.213) (Remote host closed the connection)
2021-08-06 21:55:13 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 21:57:43 +0200alx741(~alx741@186.178.108.253)
2021-08-06 21:58:00 +0200 <monochrom> "A Fresh Calculus for Names Management" I didn't know Moggi was also capable of making puns in paper titles. :)
2021-08-06 21:58:44 +0200 <emliunix> Client: HexChat 2.14.2 • OS: Microsoft Windows 11 专业版 (x64) • CPU: Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (3.00GHz) • Memory: 47.9 GiB Total (32.7 GiB Free) • Storage: 2.0 TiB / 4.4 TiB (2.5 TiB Free) • VGA: NVIDIA GeForce GTX 1060 6GB, Intel(R) UHD Graphics 630 • Uptime: 56m 10s
2021-08-06 21:59:01 +0200 <emliunix> sorry
2021-08-06 22:00:11 +0200 <lechner> wow
2021-08-06 22:01:05 +0200 <dsal> sm: Sometimes the error is just "you used `head`" which is painful the first time you learn you shouldn't have done that. :)
2021-08-06 22:02:44 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-08-06 22:03:35 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
2021-08-06 22:05:06 +0200aegon(~mike@174.127.249.180)
2021-08-06 22:05:32 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 272 seconds)
2021-08-06 22:06:51 +0200juhp(~juhp@128.106.188.220)
2021-08-06 22:10:00 +0200emliunix(~emliunix@2a09:bac0:23::815:b8b) (Remote host closed the connection)
2021-08-06 22:10:02 +0200gehmehgeh(~user@user/gehmehgeh)
2021-08-06 22:10:23 +0200emliunix(~emliunix@2a09:bac0:23::815:b8b)
2021-08-06 22:10:33 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-08-06 22:16:58 +0200roboguy_(~roboguy_@2605:a601:afe7:9f00:c77:b134:29be:aae9)
2021-08-06 22:19:20 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-06 22:23:07 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-08-06 22:23:07 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-08-06 22:23:10 +0200allbery_bgeekosaur
2021-08-06 22:24:32 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2021-08-06 22:25:34 +0200 <Gurkenglas> sm, yes but id like to live in a world where this is automatic
2021-08-06 22:26:52 +0200 <Gurkenglas> a compiler designed such that instead of printing compile errors it has you look at a compiler stacktrace <3
2021-08-06 22:26:53 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-08-06 22:27:23 +0200 <geekosaur> I suspect that'd get old quickly
2021-08-06 22:28:21 +0200 <Gurkenglas> (or debugger states rather than stacktraces)
2021-08-06 22:28:31 +0200 <Gurkenglas> and when that gets old you improve the debugger UI
2021-08-06 22:28:42 +0200silverwhitefish(~hidden@47.202.102.10) (Ping timeout: 250 seconds)
2021-08-06 22:32:49 +0200fendor(~fendor@77.119.214.156.wireless.dyn.drei.com) (Remote host closed the connection)
2021-08-06 22:34:15 +0200Pickchea(~private@user/pickchea)
2021-08-06 22:35:10 +0200jgeerds(~jgeerds@55d45555.access.ecotel.net)
2021-08-06 22:37:42 +0200 <sm> Gurkenglas: to be clear, you want to debug the state of the compiler when it reports a compile error in your program here, not debug your program - right ?
2021-08-06 22:38:28 +0200 <Gurkenglas> yep :)
2021-08-06 22:38:34 +0200 <Gurkenglas> can't debug my program if it won't compile
2021-08-06 22:38:40 +0200 <sm> would that be because you're a ghc developer, or because ghc's error messages are too hard to understand ?
2021-08-06 22:39:14 +0200 <Gurkenglas> the latter. i expect that to happen whenever one has advanced libraries and a strong type system.
2021-08-06 22:39:29 +0200 <sm> I think the "automatic" world you want is one where the errors are simply easy to understand, like Elm
2021-08-06 22:39:35 +0200 <geekosaur> I hyave to imagine that if the compile error is too hard to understand, the backtrace will be no better and probably worse
2021-08-06 22:39:36 +0200 <sm> (reputedly)
2021-08-06 22:40:10 +0200 <sm> way worse..
2021-08-06 22:40:30 +0200 <Gurkenglas> geekosaur, I imagine that as you get more advanced libraries in the same type system, the errors get harder to understand faster than the backtraces
2021-08-06 22:41:24 +0200 <sm> an "EXPLAIN" mode for ghc errors, where it tries to walk you through them in more detail, sounds useful, more than backtraces of ghc's terrifying internals
2021-08-06 22:42:53 +0200 <sm> ie, something designed for human comprehension, rather than a direct reflection of the implementation structure
2021-08-06 22:43:24 +0200 <sm> but sure, both, all, would be great to have
2021-08-06 22:43:42 +0200 <sm> and I'm sure it's doable with some #ghc magic
2021-08-06 22:44:12 +0200 <sm> just stick a printCallStack into ghc's error display code
2021-08-06 22:44:17 +0200Atum_(~IRC@user/atum/x-2392232)
2021-08-06 22:49:50 +0200 <dsal> Gurkenglas: Do you have an example of this sort of thing?
2021-08-06 22:50:16 +0200 <dsal> Most of the time when I have a sufficiently bad type error, it's because I've underspecified things and the guesses/constraints start getting too broad.
2021-08-06 22:50:44 +0200 <c_wraith> another way of saying that is "overuse of classes"
2021-08-06 22:51:14 +0200 <dsal> Yeah. Sometimes you can get really far by just saying what the thing is that you expect to see at a particular site.
2021-08-06 22:51:15 +0200 <Gurkenglas> lens errors, i would guess
2021-08-06 22:51:33 +0200 <dsal> People who don't like lens errors tend to favor optics. :)
2021-08-06 22:53:23 +0200ham2(~ham4@d8D8627D5.access.telenet.be) (Read error: Connection reset by peer)
2021-08-06 22:53:28 +0200 <lbseale_> I am trying to build a GHC package without using cabal or stack, I see I need to define this unit-id hash value in the package info, but I don't know how to generate it. Does anyone?
2021-08-06 22:53:31 +0200 <c_wraith> at least lens errors mean you did something wrong. As opposed to the errors of the form "this is too polymorphic and I can't figure out what you meant"
2021-08-06 22:55:40 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it) (Remote host closed the connection)
2021-08-06 22:55:49 +0200ham2(~ham4@d8D8627D5.access.telenet.be)
2021-08-06 22:55:49 +0200azeem(~azeem@dynamic-adsl-94-34-48-122.clienti.tiscali.it)
2021-08-06 22:56:33 +0200ham2ham
2021-08-06 22:56:37 +0200ham(~ham4@d8D8627D5.access.telenet.be) (Changing host)
2021-08-06 22:56:37 +0200ham(~ham4@user/ham)
2021-08-06 22:57:27 +0200 <dsal> TBH, I bat around at lens errors sometime because I sometimes like not thinking.
2021-08-06 22:59:34 +0200 <monochrom> lens is a case of very leaky abstraction therefore errors require familiarity with implementation details and coding tricks.
2021-08-06 22:59:55 +0200 <c_wraith> Honestly, I don't even see lens as an abstraction
2021-08-06 23:00:26 +0200 <c_wraith> It's a swiss-army knife. It doesn't remove needing to understand things, but it gives you very precise tools for doing exactly what you need
2021-08-06 23:00:36 +0200 <monochrom> OTOH lens not exposing that information is also a strength in being very adaptable, so I don't really complain.
2021-08-06 23:00:51 +0200 <monochrom> err! s/not //
2021-08-06 23:01:08 +0200 <monochrom> (I wasn't making up my mind between "not hiding" and "exposing" heh)
2021-08-06 23:01:27 +0200 <monochrom> <-- quantum superposed typist
2021-08-06 23:02:00 +0200 <monochrom> Yeah swiss-army knife nails it.
2021-08-06 23:02:31 +0200 <monochrom> Generally if you have very interesting type aliases instead of newtypes, you expect this.
2021-08-06 23:02:59 +0200 <monochrom> C++ takes this practice to the level of daily bread.
2021-08-06 23:03:51 +0200 <monochrom> and butter and peanut butter and nutella. :)
2021-08-06 23:05:08 +0200 <lbseale_> Update: the documentation is in a comment in the GHC Main.hs source code >_<
2021-08-06 23:05:11 +0200 <lbseale_> https://github.com/ghc/ghc/blob/master/ghc/Main.hs
2021-08-06 23:05:29 +0200 <monochrom> In which case actually wanting a type checker execution trace is barking up the wrong tree. You think the algorithm actually understands sh*t?
2021-08-06 23:05:37 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-08-06 23:08:21 +0200 <monochrom> John Searle missed the opportunity for coining "The Unification Room". >:)
2021-08-06 23:13:42 +0200pgib(~textual@173.38.117.81) (Quit: 00 PC LOAD LETTER)
2021-08-06 23:17:49 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-08-06 23:18:20 +0200markpythonicbitc(~markpytho@2601:647:5a00:35:a8c6:4beb:a469:3f6e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-08-06 23:22:08 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2021-08-06 23:24:18 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-08-06 23:27:54 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-08-06 23:29:22 +0200jiribenes(~jiribenes@rosa.jiribenes.com) (Ping timeout: 240 seconds)
2021-08-06 23:33:29 +0200jiribenes(~jiribenes@rosa.jiribenes.com)
2021-08-06 23:36:53 +0200arkho(~ccc@dynamic-acs-24-112-153-241.zoominternet.net)
2021-08-06 23:36:55 +0200arkho(~ccc@dynamic-acs-24-112-153-241.zoominternet.net) (Remote host closed the connection)
2021-08-06 23:37:30 +0200neceve(~quassel@2a02:c7f:607e:d600:f762:20dd:304e:4b1f) (Ping timeout: 258 seconds)
2021-08-06 23:40:16 +0200 <raehik> Got a C library that I want to make some Haskell bindings for, and have work on Windows and Linux, but not sure how to build the lib in GHC/Cabal (which I saw a relevant pkg for a simpler lib)
2021-08-06 23:40:56 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-08-06 23:41:13 +0200 <raehik> I've got some function calls working from Cabal, but I don't get how linking will work. How do I tell GHC to link against a dynamic library? Is this a bad idea/what's the alternative
2021-08-06 23:41:23 +0200lavaman(~lavaman@98.38.249.169)
2021-08-06 23:42:38 +0200 <geekosaur> it will link against dynamic C libraries by default; it's shared libraries that are the problem
2021-08-06 23:42:43 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-08-06 23:42:55 +0200 <sclv> raehik: take a look at some bindings for things like curl to see how they're set up https://hackage.haskell.org/package/curl-1.3.8/curl.cabal
2021-08-06 23:43:03 +0200 <geekosaur> (because there's no portable way to do that without also linkingf libc shared, which will break glibc)
2021-08-06 23:43:53 +0200 <raehik> sclv: thank you! was looking for more examples
2021-08-06 23:44:16 +0200 <raehik> geekosaur: I don't think I know what the diff between a dynamic and shared lib is.
2021-08-06 23:44:38 +0200 <raehik> are they both .so / .dlls?
2021-08-06 23:45:14 +0200 <sclv> network has a more complex cabal that can show a bit more stuff off too, like cbits, platform specific conditionals, etc https://hackage.haskell.org/package/network-3.1.2.2/network.cabal
2021-08-06 23:45:22 +0200 <geekosaur> they're the same thing, just different names for it
2021-08-06 23:45:30 +0200 <janus> geekosaur: are you saying it is more portable when linking libc shared? why would that be the case? surely it using musl statically should be more portable than glibc, just because you can link it statically
2021-08-06 23:46:07 +0200 <monochrom> geekosaur, I think you had a typo in "dynamic is default, shared is the problem" in which it should be s/shared/static/
2021-08-06 23:46:11 +0200 <geekosaur> janus, the problem with glibc is it will insist on loading some stuff dynamically anyway (notably nss) and that will break between glibc versions
2021-08-06 23:46:19 +0200 <geekosaur> yes, sorry
2021-08-06 23:46:42 +0200 <geekosaur> static is the problem because glibc doesn't like being static.l which is why musl is recommended for static builds
2021-08-06 23:47:16 +0200 <janus> right, ok, so with the correction it makes more sense. static is perfectly portable (except musl doesn't run on windows) , if you can get it built
2021-08-06 23:49:48 +0200 <raehik> I thought this (tiny) pkg built the C functions into it rather than being dynamic https://hackage.haskell.org/package/lzo
2021-08-06 23:50:44 +0200 <raehik> is that correct. apologies I'm unclear on what goes on during linking in GHC
2021-08-06 23:55:39 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-08-06 23:55:44 +0200lbseale_(~lbseale@user/ep1ctetus) (Ping timeout: 272 seconds)
2021-08-06 23:56:20 +0200 <geekosaur> that package includes the entirety of the C minilzo package, yes. this is usually done to make things easier on Windows, where it can be hard ti locate and use C libraries
2021-08-06 23:57:19 +0200lbseale(~lbseale@user/ep1ctetus)
2021-08-06 23:58:35 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds)