Home liberachat/#haskell: Logs Calendar

Logs on 2023-01-07 (liberachat/#haskell)

00:02:01 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
00:03:08 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
00:07:46 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
00:07:50 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Client Quit)
00:09:59 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
00:10:35 Guest72 joins (~Guest72@240f:a1:8a75:1:6d29:acad:cc8d:29c7)
00:10:50 × Guest72 quits (~Guest72@240f:a1:8a75:1:6d29:acad:cc8d:29c7) (Client Quit)
00:12:46 justsomeguy joins (~justsomeg@user/justsomeguy)
00:13:35 xff0x joins (~xff0x@p3326132-ipngn2103sapodori.hokkaido.ocn.ne.jp)
00:20:41 titibandit1 joins (~titibandi@xdsl-87-78-235-220.nc.de)
00:21:56 shriekingnoise joins (~shrieking@186.137.175.87)
00:27:24 × hyperbolic-dg quits (~quassel@i577AA562.versanet.de) (Quit: https://quassel-irc.org - Komfortabler Chat. Überall.)
00:29:26 × johnjaye quits (~pi@173.209.64.74) (Ping timeout: 252 seconds)
00:31:20 johnjaye joins (~pi@173.209.64.74)
00:31:23 L29Ah joins (~L29Ah@wikipedia/L29Ah)
00:36:32 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:36:32 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:36:32 wroathe joins (~wroathe@user/wroathe)
00:37:07 × titibandit1 quits (~titibandi@xdsl-87-78-235-220.nc.de) (Remote host closed the connection)
00:50:40 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
00:51:47 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
01:00:22 × caryhartline quits (~caryhartl@107.140.218.181) (Quit: caryhartline)
01:04:10 freeside joins (~mengwong@103.252.202.159)
01:04:34 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
01:06:08 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
01:07:08 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 272 seconds)
01:10:23 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:08 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 246 seconds)
01:11:41 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
01:11:47 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Remote host closed the connection)
01:12:02 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
01:12:03 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
01:14:35 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 264 seconds)
01:16:30 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:04 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
01:27:55 bilegeek joins (~bilegeek@2600:1008:b02b:c49d:317:e6bb:7c61:3a0a)
01:29:56 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
01:31:46 melonai joins (~mel@rnrd.eu)
01:31:54 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
01:33:10 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
01:33:14 × mechap quits (~mechap@user/mechap) (Ping timeout: 246 seconds)
01:35:16 mechap joins (~mechap@user/mechap)
01:38:22 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 252 seconds)
01:38:55 × xff0x quits (~xff0x@p3326132-ipngn2103sapodori.hokkaido.ocn.ne.jp) (Ping timeout: 260 seconds)
01:39:52 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:45:08 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
01:49:32 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
01:50:41 razetime joins (~Thunderbi@49.207.222.244)
01:55:09 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
01:55:54 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 272 seconds)
01:56:04 <Inst> is there any research on sequenceA_ + list based metaprogramming in Haskell?
01:58:01 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:58:01 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:58:02 wroathe joins (~wroathe@user/wroathe)
02:01:13 × Neuromancer quits (~Neuromanc@user/neuromancer) (Quit: Going offline, see ya! (www.adiirc.com))
02:08:25 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
02:15:29 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
02:20:55 × bilegeek quits (~bilegeek@2600:1008:b02b:c49d:317:e6bb:7c61:3a0a) (Ping timeout: 260 seconds)
02:23:00 bilegeek joins (~bilegeek@2600:1008:b02b:c49d:317:e6bb:7c61:3a0a)
02:32:49 son0p joins (~ff@2604:3d08:5b7f:5540:98a9:2169:15a1:4c7f)
02:36:03 × tremon quits (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
02:37:05 <mauke> :t sequenceA_
02:37:06 <lambdabot> (Foldable t, Applicative f) => t (f a) -> f ()
02:41:19 × teddyc quits (theodorc@cassarossa.samfundet.no) (Ping timeout: 260 seconds)
02:47:04 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
02:49:20 boxscape_ joins (~boxscape_@81.191.27.107)
02:49:57 <boxscape_> oof. Usually you can write `withFrozenCallStack $ error $ "foo"`, but *not* `withFrozenCallStack . error $ "foo"`. (you'd get a type error).
02:50:06 <boxscape_> but with impredicative types you *can* write it
02:50:14 <boxscape_> But if you do, it doesn't actually freeze the callstack
02:50:26 <boxscape_> took me a minute to figure out what happened there
02:54:38 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Quit: WeeChat 3.7.1)
02:56:15 fizbin joins (~fizbin@user/fizbin)
02:57:04 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
02:57:11 × ciarltb^ quits (~ciarltb@76.145.190.81) (Remote host closed the connection)
02:59:51 × AlexNoo quits (~AlexNoo@178.34.150.228) (Read error: Connection reset by peer)
03:02:03 × AlexZenon quits (~alzenon@178.34.150.228) (Ping timeout: 252 seconds)
03:02:05 × Alex_test quits (~al_test@178.34.150.228) (Ping timeout: 246 seconds)
03:06:12 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
03:08:00 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Quit: WeeChat 3.7.1)
03:10:38 × td_ quits (~td@83.135.9.2) (Ping timeout: 272 seconds)
03:11:17 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
03:12:00 td_ joins (~td@83.135.9.51)
03:13:27 v0id_ptr joins (~adrift@user/ptr-frac7al/x-0038398)
03:13:54 × bilegeek quits (~bilegeek@2600:1008:b02b:c49d:317:e6bb:7c61:3a0a) (Quit: Leaving)
03:22:29 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
03:24:09 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
03:31:39 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
03:33:33 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Client Quit)
03:35:46 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
03:45:09 × ddellacosta quits (~ddellacos@143.244.47.85) (Ping timeout: 260 seconds)
03:50:18 AlexNoo joins (~AlexNoo@178.34.160.114)
03:51:19 Alex_test joins (~al_test@178.34.160.114)
03:51:39 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
03:51:49 AlexZenon joins (~alzenon@178.34.160.114)
03:57:01 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds)
03:59:37 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:59:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:59:37 finn_elija is now known as FinnElija
04:03:21 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 268 seconds)
04:08:54 × AlexNoo quits (~AlexNoo@178.34.160.114) (Read error: Connection reset by peer)
04:12:34 × Alex_test quits (~al_test@178.34.160.114) (Ping timeout: 260 seconds)
04:12:42 × AlexZenon quits (~alzenon@178.34.160.114) (Ping timeout: 272 seconds)
04:15:52 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
04:23:03 AlexNoo joins (~AlexNoo@178.34.160.38)
04:23:50 Alex_test joins (~al_test@178.34.160.38)
04:24:41 AlexZenon joins (~alzenon@178.34.160.38)
04:26:10 justsomeguy joins (~justsomeg@user/justsomeguy)
04:27:21 freeside joins (~mengwong@103.252.202.159)
04:34:55 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Quit: WeeChat 3.7.1)
04:38:18 libertyprime joins (~libertypr@203.96.203.167)
04:38:51 × AlexNoo quits (~AlexNoo@178.34.160.38) (Read error: Connection reset by peer)
04:39:59 × razetime quits (~Thunderbi@49.207.222.244) (Remote host closed the connection)
04:40:47 × Alex_test quits (~al_test@178.34.160.38) (Ping timeout: 246 seconds)
04:42:35 × Kaipei quits (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 246 seconds)
04:42:40 × AlexZenon quits (~alzenon@178.34.160.38) (Ping timeout: 252 seconds)
04:49:44 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
04:55:06 × harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
05:03:37 rnat joins (uid73555@id-73555.lymington.irccloud.com)
05:06:05 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
05:09:18 FiorTheDog joins (~Srain@2601:640:8a00:584:8158:bce4:e149:ce4)
05:10:10 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Client Quit)
05:12:04 FiorTheDog parts (~Srain@2601:640:8a00:584:8158:bce4:e149:ce4) (Leave.)
05:24:53 AlexNoo joins (~AlexNoo@178.34.160.164)
05:26:03 Alex_test joins (~al_test@178.34.160.164)
05:29:27 AlexZenon joins (~alzenon@178.34.160.164)
05:31:14 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
05:38:09 ix joins (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2)
05:43:11 freeside joins (~mengwong@103.252.202.159)
05:44:47 × ix quits (~ix@2a02:8010:674f:1:2641:8cff:fe93:cdb2) (Quit: WeeChat 3.7.1)
05:48:20 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
05:56:06 freeside joins (~mengwong@103.252.202.159)
06:06:04 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
06:13:53 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 255 seconds)
06:14:27 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
06:16:24 jinsun joins (~jinsun@user/jinsun)
06:19:14 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Ping timeout: 252 seconds)
06:19:38 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
06:20:54 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
06:21:58 <freeside> so, I'm lacking a word for a thing. If I have a 1 dimensional array I use Data.Vector. If I have a 2 dimensional array I use Data.Matrix. If I need to go to 3 or more dimensions, I need ...
06:22:15 <freeside> i'm looking at https://github.com/achirkin/easytensor
06:23:27 <boxscape_> you've found your answer then? Tensor is the word I'd use
06:23:53 <freeside> ok, just making sure. There seem to be a bunch of libraries for tensors, is there a generally accepted choice?
06:24:16 <boxscape_> I can't help you there but hopefully someone else can
06:25:16 <freeside> thank you, grateful. I was two class instances deep into writing my own Collection k a when I was like, surely I do not need to reinvent this wheel.
06:25:58 <freeside> i just want to fmap (+1) over an data structure of arbitrary dimension, is that too much for a girl to ask?
06:26:31 <boxscape_> yeah that sounds like a reasonable request :D
06:26:52 razetime joins (~Thunderbi@49.207.222.244)
06:28:52 × Ram-Z quits (~Ram-Z@li1814-254.members.linode.com) (Ping timeout: 272 seconds)
06:32:35 × v0id_ptr quits (~adrift@user/ptr-frac7al/x-0038398) (Ping timeout: 268 seconds)
06:35:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:42:41 Ram-Z joins (~Ram-Z@li1814-254.members.linode.com)
06:43:34 abhixec joins (~abhinav@c-67-169-139-16.hsd1.ca.comcast.net)
06:43:39 Lycurgus joins (~juan@user/Lycurgus)
06:46:55 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
06:47:50 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds)
06:49:21 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
06:54:03 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
06:54:56 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:56:00 trev joins (~trev@user/trev)
06:58:29 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
07:00:40 × echoreply quits (~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
07:07:23 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 264 seconds)
07:09:30 Xeroine joins (~Xeroine@user/xeroine)
07:12:17 × rnat quits (uid73555@id-73555.lymington.irccloud.com) (Quit: Connection closed for inactivity)
07:12:48 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
07:14:38 <davean> freeside: you can also just make Vectors of Vectors.
07:15:04 <davean> The rest is an inteface problem :-p
07:16:02 Guest9971 joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
07:16:11 <davean> But yah, there are a bunch of half solutions
07:17:26 <davean> Or over complicated ones for not really that goal
07:17:29 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
07:17:32 <davean> its an area we could really improve on
07:18:10 <freeside> mmm, i see
07:20:07 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
07:20:31 <Logio> If you're not looking to do (multi)linear algebra, then you should look at arrays instead of tensors, IMO
07:21:08 <davean> Like Repa is SUPER complicated
07:21:22 <davean> (and focuses on parallelism)
07:22:26 <freeside> okay. i'm basically trying to organize relatively simple tabular data, the way people use spreadsheets to do 80% of what SQL databases are used for
07:23:24 <freeside> my first attempt was a Map k (Map j a) which is OK but when i realized i needed a transpose function i thought i'd shop around for wheels that had already been invented
07:24:21 <Logio> if you wan't transposes, it's doesn't sound like simple tabular data?
07:24:28 <freeside> i'd be ok with a Data.Matrix, I just need some overhead to maintain column/row header titles for ease of access
07:24:40 <freeside> sometimes you need to add the columns, sometimes you need to add the rows, is all
07:26:07 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Remote host closed the connection)
07:26:29 <Logio> then something like easytensor is probably what you want
07:26:51 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
07:27:00 davean hands Logio an OLAP Cube
07:27:01 caryhartline joins (~caryhartl@2600:1700:2d0:8d30:6884:b2dc:6ddb:78f2)
07:29:00 <Logio> davean: first time I've heard of OLAP, I guess I should consider myself lucky for that
07:29:56 <Logio> OTOH I've done quite a bit of work on hyperspectral datacubes (also implemented pretty much the equivalent of easytensor (or xarray in Python) for those in Matlab
07:30:53 <Logio> compared to anything like those I'd say Repa is much less complicated :)
07:32:43 <Logio> for the complicated cases you basically want an in-memory relational database
07:36:00 <[Leary]> freeside: You might be interested in https://github.com/mixphix/deep-map
07:36:12 <freeside> for my minilanguage, I'm instantiating my Exprs into Foldable, Ord, Eq, Semigroup, Num so as to be able to evaluate sentences like "given seven categories of net income, reduce net incomes, pro rata, of those categories which have positive net incomes, by the negative net incomes, leaving the previously negative net incomes at 0 after the reduction."
07:36:43 <freeside> this stuff is terribly tedious and reduces to a bunch of filters and fmaps and sums and so on, i just need to lift those ideas into a DSL
07:38:05 <freeside> in the columns, i have things like "income", "expenses", "extraordinary income", "extraordinary expenses", and then in the rows I have "due to employment" "due to rent" "due to agricultural activity" and so on
07:38:51 <freeside> DeepMap looks very close to what I would want
07:41:03 <freeside> i will extra-deps it into my stack.yaml
07:43:37 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
07:43:40 × hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
07:43:57 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
07:44:14 acidjnk joins (~acidjnk@p200300d6e715c42934bb1e2b0605c41b.dip0.t-ipconnect.de)
07:45:28 hrberg joins (~quassel@171.79-160-161.customer.lyse.net)
07:45:40 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
07:52:19 igghibu joins (~igghibu@178.249.211.75)
07:55:02 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:56:22 <razetime> where can I learn more advanced concepts of haskell beyond basic tutorials?
07:56:46 <razetime> i found only 3 links on the wiki here: https://wiki.haskell.org/Learning_Haskell#Advanced_tutorials
07:58:36 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
08:01:30 <freeside> https://wiki.haskell.org/Learning_Haskell#Material_for_self-study says "If you want to dig deeper, see Books and tutorials.
08:01:42 <freeside> you could look at If you want to dig deeper, see Books and tutorials.
08:01:58 <freeside> sorry, i meant to paste If you want to dig deeper, see Books and tutorials.
08:02:01 <freeside> asdfaser
08:02:17 <freeside> my paste is borked, sorry. https://blog.ocharles.org.uk/pages/2014-12-01-24-days-of-ghc-extensions.html
08:02:29 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:08:10 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
08:09:23 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Remote host closed the connection)
08:11:07 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:12:00 <freeside> https://aphyr.com/posts/342-typing-the-technical-interview
08:14:36 <jackdk> razetime: http://jackkelly.name/wiki/haskell.html is my curated list
08:21:19 × caryhartline quits (~caryhartl@2600:1700:2d0:8d30:6884:b2dc:6ddb:78f2) (Quit: caryhartline)
08:26:36 mei_ joins (~mei@user/mei)
08:28:42 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
08:29:16 × mei quits (~mei@user/mei) (Ping timeout: 252 seconds)
08:29:20 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
08:32:26 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:36:49 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 252 seconds)
08:37:05 moet joins (~moet@mobile-166-171-251-105.mycingular.net)
08:38:20 × Guest9971 quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 255 seconds)
08:38:38 <moet> Any idea where the Monoid constraint comes from in this applicative oneliner? https://paste.tomsmeding.com/3S0jgbym
08:40:17 × Vajb quits (~Vajb@2001:999:405:5eb2:8d39:b832:a9ee:9bdf) (Read error: Connection reset by peer)
08:40:34 freemanX joins (~user@14.100.44.229)
08:41:09 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
08:41:56 × trev quits (~trev@user/trev) (Read error: Connection reset by peer)
08:42:12 trev joins (~trev@user/trev)
08:42:38 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
08:42:54 <[Leary]> % :t pure @((,) _)
08:42:54 <yahb2> pure @((,) _) :: Monoid w => a -> (w, a)
08:43:12 <[Leary]> You can't write pure without it.
08:44:47 <freeside> https://hackage.haskell.org/package/base-4.17.0.0/docs/src/GHC.Base.html#line-469
08:45:49 <moet> Ah, its on the instance head. weird.
08:46:09 <razetime> jackdk: thanks a lot
08:46:21 <moet> `pure x = (mempty, x)`
08:46:25 <moet> thanks [Leary] freeside
08:48:50 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
08:49:31 bilegeek joins (~bilegeek@103.sub-174-208-234.myvzw.com)
08:51:29 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 252 seconds)
08:52:51 Umeaboy joins (~Umeaboy@94-255-145-133.cust.bredband2.com)
08:52:54 <Umeaboy> Hi!
08:53:08 <boxscape_> hi
08:53:41 <Umeaboy> Why is the README.md telling users to run build source-dist when it isn't working inside the hadrian folder?
08:53:48 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
08:53:49 <Umeaboy> Is the documentation a bit outdated?
08:54:11 <Umeaboy> I'm trying to get a grip of it so that I can build and port it to Mageia.
08:54:34 <Umeaboy> I have completed the first stage.
08:54:40 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
08:54:40 <Umeaboy> That went fine.
08:54:52 <boxscape_> you're talking about building ghc? You might get better answers in #ghc
08:54:52 <Umeaboy> I'm reading what to do next.
08:54:57 <Umeaboy> OK.
08:54:59 <Umeaboy> Sorry.
08:55:01 <Umeaboy> :)
08:55:12 <boxscape_> no worries
08:55:59 <boxscape_> (though this isn't the most active time of day for either channel)
08:56:06 sammelweis joins (~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
08:57:06 notzmv joins (~zmv@user/notzmv)
08:57:31 Vajb joins (~Vajb@2001:999:405:5eb2:8d39:b832:a9ee:9bdf)
08:59:26 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
09:00:37 × trev quits (~trev@user/trev) (Remote host closed the connection)
09:01:00 trev joins (~trev@user/trev)
09:07:43 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
09:10:42 × kee quits (~~kee@user/wizzwizz4) (Read error: Connection reset by peer)
09:11:25 kee joins (~~kee@user/wizzwizz4)
09:17:41 × moet quits (~moet@mobile-166-171-251-105.mycingular.net) (Quit: leaving)
09:18:58 × sammelweis quits (~quassel@c-68-48-18-140.hsd1.mi.comcast.net) (Quit: No Ping reply in 180 seconds.)
09:20:15 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:20:31 × igghibu quits (~igghibu@178.249.211.75) (Quit: igghibu)
09:22:04 × acidjnk quits (~acidjnk@p200300d6e715c42934bb1e2b0605c41b.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
09:27:18 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
09:27:33 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
09:28:15 jakalx parts (~jakalx@base.jakalx.net) ()
09:32:21 vhs joins (~vhs@78-66-105-254-no600.tbcn.telia.com)
09:32:26 vhsconnect joins (~vhs@78-66-105-254-no600.tbcn.telia.com)
09:34:27 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
09:37:10 jakalx joins (~jakalx@base.jakalx.net)
09:41:16 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
09:41:54 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
09:47:45 sammelweis joins (~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
09:50:59 × sammelweis quits (~quassel@c-68-48-18-140.hsd1.mi.comcast.net) (Client Quit)
09:52:03 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
09:53:48 × trev quits (~trev@user/trev) (Remote host closed the connection)
09:54:08 trev joins (~trev@user/trev)
09:59:01 × trev quits (~trev@user/trev) (Remote host closed the connection)
09:59:21 trev joins (~trev@user/trev)
10:03:18 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:03:36 trev joins (~trev@user/trev)
10:04:41 × tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
10:05:31 Speedbird joins (~Speedbird@94.230.79.152)
10:06:17 acidjnk joins (~acidjnk@p200300d6e715c429e462ed5ea333447e.dip0.t-ipconnect.de)
10:09:15 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 248 seconds)
10:12:23 × thongpv87 quits (~thongpv87@2402:9d80:389:9e3a:648f:1ca5:2c13:2a3a) (Ping timeout: 255 seconds)
10:12:31 sammelweis joins (~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
10:19:18 <Inst> wait, is 2-tuple just an primitive writer monad in the same way that reader is based on the function monad?
10:20:43 <boxscape_> exactly
10:21:05 × bilegeek quits (~bilegeek@103.sub-174-208-234.myvzw.com) (Quit: Leaving)
10:21:18 <Inst> huh, that's interesting, so effcetvily every time you output a tuple, you output a writer monad
10:22:10 <boxscape_> I don't know if I would call it "outputting a writer monad" but that's basically correct
10:24:26 thongpv87 joins (~thongpv87@2402:9d80:389:9e3a:2c87:afe4:cc1d:eda4)
10:24:29 <Inst> i have a hate-on for monad trans
10:24:52 <boxscape_> why?
10:25:18 <Inst> performance, complexity
10:25:36 <boxscape_> I see
10:25:52 <[exa]> performance and complexity....as in, too good?
10:25:53 <Inst> i'm wondering how valid it is to use writer monad via the tuple interface, although writer monad is known for space leaks, so the unadjusted tuple monad is likely to be worse
10:26:22 <Inst> https://github.com/haskell-effectful/effectful/blob/master/benchmarks/README.md
10:27:09 <Inst> but since you can skip the monad and just use the function monad and tuple monad instead of writer monad, that's a big improvement
10:27:15 <Inst> writer monad and reader monad
10:29:22 <[exa]> where's the source code for that benchmark?
10:29:49 Kaipei joins (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net)
10:29:57 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:30:14 trev joins (~trev@user/trev)
10:30:23 <Inst> no clue, but lexi lambda was the same way, but her eff library i heard was abandoned
10:30:43 <Inst> https://www.youtube.com/watch?v=0jI-AlWEwYI
10:31:44 <[exa]> anyway yeah that's the result I'd basically expect, it's pretty much okay (modulo the capability of ghc to optimize out some type hay) but don't do deep monad stacks
10:31:55 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Remote host closed the connection)
10:32:18 <boxscape_> hmm I'm using a fused-effects deep monad stack right now, maybe I should rethink that
10:32:36 <[exa]> the point of transformers is that they're super powerful for relatively low code overhead (at least compared to the type magicks in eff and others)
10:33:11 <Inst> kmett confessed to passing an IORef around with implicit parameters as a hack to get a cheaper RWST
10:33:13 <Guest5476> Inst: her library is not compatiable with current list of delim.cont primops, so there should be performed some work to make it up to date
10:33:24 <[exa]> I'd say if there's ever another hs compiler, transformers will be easily portable; not sure about eff
10:34:29 <[exa]> I can't see why people consider the "passing IORef around" as cheating or hacking. it's a normal way to help the compiler to produce a good runtime representation
10:34:44 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:34:46 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
10:35:02 trev joins (~trev@user/trev)
10:35:24 <Inst> as far as i understand, there's basically two schools, one that hates monad transformers, i.e, professionals who write in straight IO and pure code, or readerT pattern, and people who like monad trans
10:35:44 <boxscape_> I guess because it means you end up using IO for something that, semantically, doesn't need it?
10:36:02 <[exa]> like, ofcourse ghc would ideally be able to magically realize it by itself, but you don't help it a lot by throwing in the insensitive amount of data structure mess
10:36:04 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:36:17 <[exa]> did anyone already try doing zippers on effects?
10:36:21 trev joins (~trev@user/trev)
10:36:33 <Inst> i deeloped a hatred on monad trans when someone helped me build a cheap ed clone
10:36:36 <[exa]> boxscape_: yeah IO hurts, might have been ST or so
10:36:49 <Inst> because there was way too much monad trans wrapping IO
10:36:51 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
10:37:08 <[exa]> Inst: why hate? no one pushes you to use that. :D
10:37:31 <freeside> oh hey, that reminds me. My code wants to output to two streams, analogous to STDOUT and STDERR, except the plan is to buffer things up and dump all output at the end in a structured form -- basically org-mode header blocks vs #+begin_example / #+end_example, with a "table of contents" and so on. What approach should I take -- Writer { a::[String], b::[String] } ?
10:37:52 <[exa]> Inst: anyway, it's super useful for many purposes where saving programmer time balances out the computer time, the latter is much cheaper
10:38:02 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
10:38:05 <Inst> it's my fault anyways, because i asked to learn monad trans because there was so much code using it
10:38:12 <Inst> and arguably using reader / writer monad is more dishonest than monad trans
10:38:20 <Inst> erm, function / tuple monad is more dishonest than monad trans
10:38:27 <[exa]> it's not, it's your choice
10:38:31 <Inst> readerT / writerT at least shows up in the type system
10:39:00 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:39:06 <[exa]> the Writer over the (,) is literally just a tag that helps you to communicate this to other programmers. "Hey this is not an actual tuple tuple, I'm using it to write a log instead"
10:39:16 trev joins (~trev@user/trev)
10:39:37 Lord_of_Life_ is now known as Lord_of_Life
10:39:40 <[exa]> +- some helpful side gains, like you can make the writer strict to avoid accumulation of thunkery
10:40:09 <Inst> there's still some old stuff, like why snoyman stuck to readerT because all the monad transformer monads had issues
10:40:24 <Inst> writer T was supposed to still be space leaking, same with state
10:40:42 <boxscape_> WriterT is fine with the CPS implementation
10:40:42 <[exa]> people make choices, that's normal. :D
10:40:50 × iqubic quits (~avi@2601:602:9502:c70:3dee:aba8:ea3d:300b) (Ping timeout: 260 seconds)
10:40:55 <Inst> ah, nice to hear
10:41:03 <boxscape_> transformers has Lazy, Strict, and CPS Writer, the only one that should be used is CPS though, afaik
10:41:15 <boxscape_> (as in, the "transformers" package)
10:42:11 <Inst> i hope by the time i catually know what i'm doing, someone will have a mature and performant algebraic effects system up and i don't have to bother with monad trans ever again
10:42:11 <boxscape_> I guess there could be some use-cases for Lazy Writers
10:43:16 <boxscape_> honestly I'm fairly happy with most effects systems that exist. But I don't usually do performance-critical things
10:43:17 <[exa]> CPS writer is basically the same as state? (w -> a,w ?)
10:43:44 <boxscape_> I don't know, I just read people saying that I should use CPS over strict and follow their advice :)
10:43:52 × libertyprime quits (~libertypr@203.96.203.167) (Quit: leaving)
10:44:06 <[exa]> like, yeah, it makes sense
10:44:37 × razetime quits (~Thunderbi@49.207.222.244) (Remote host closed the connection)
10:44:55 <Inst> well, trying to keep haskell performance is nice, as an advertisement, at least, because juspay doubled their resource efficiency when they switched from purescript / node.js to haskell
10:45:00 fserucas joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
10:45:04 <Inst> and now juspay is paying haskell foundation
10:45:15 <[exa]> \o/
10:45:20 <Inst> on monad tier
10:45:26 <boxscape_> do they use GHCJS?
10:45:48 <boxscape_> or did they use purescript for backend stuff?
10:46:58 <Inst> no clue, i thought they went native
10:46:59 <Inst> https://skillsmatter.com/skillscasts/17411-how-we-migrated-65k-lines-of-javascript-code-to-haskell-good-bad-and-ugly
10:47:13 <Inst> they transpiled their purescript to haskell
10:47:21 <Inst> https://blog.monadfix.com/nau-introduction
10:48:10 <boxscape_> hmm I see
10:48:11 <[exa]> oh noes it wants a login
10:49:31 <[exa]> Inst: they say they have a few pain points, if you watched the cast can you pls summarize?
10:50:28 <Inst> should be direct access
10:50:30 titibandit1 joins (~titibandi@xdsl-87-78-235-220.nc.de)
10:50:33 <Inst> https://www.youtube.com/watch?v=nRLOtbjEtyE
10:50:41 <boxscape_> nice
10:51:10 <boxscape_> tbh I never even considered that people might be using purescript for non-frontend code
10:52:09 <Inst> i think it was purescript, not sure, could have been straight functional JS
10:52:12 <freeside> as someone who needs to translate between Haskell and Purescript, it pains me that Purescript syntax is almost but not quite Haskell syntax
10:53:41 <boxscape_> Inst: well, since the transpiler is for purescript, it would make sense
10:53:44 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
10:55:04 × vhs quits (~vhs@78-66-105-254-no600.tbcn.telia.com) (Remote host closed the connection)
10:55:04 × vhsconnect quits (~vhs@78-66-105-254-no600.tbcn.telia.com) (Remote host closed the connection)
10:56:07 × trev quits (~trev@user/trev) (Remote host closed the connection)
10:56:17 × Speedbird quits (~Speedbird@94.230.79.152) (Quit: Client closed)
10:56:21 <DigitalKiwi> purescript_node.js
10:56:23 trev joins (~trev@user/trev)
10:58:13 <Inst> complaints about... [exa], initial learning curve, compilation time, pure functions throwing exceptions
10:58:16 <Inst> from the slide
10:59:14 <DigitalKiwi> they complained about you [exa]? 15 minutes of shame
10:59:41 <freeside> seems unnecessarily personal
11:00:18 fizbin joins (~fizbin@user/fizbin)
11:01:13 × trev quits (~trev@user/trev) (Remote host closed the connection)
11:01:33 <DigitalKiwi> freeside: do you like the row types though
11:01:45 trev joins (~trev@user/trev)
11:02:02 <DigitalKiwi> the only feature i know about in purescript lol
11:03:44 <Inst> exa, typo
11:05:22 <[exa]> Inst: ah thanks
11:05:45 <[exa]> anyway yeah folks, pls remove me from ghc10, I'm not a good addition to the language
11:05:55 × thongpv87 quits (~thongpv87@2402:9d80:389:9e3a:2c87:afe4:cc1d:eda4) (Ping timeout: 256 seconds)
11:07:32 × titibandit1 quits (~titibandi@xdsl-87-78-235-220.nc.de) (Ping timeout: 246 seconds)
11:09:10 axeman joins (~quassel@2a02:8109:a3c0:ed8:9392:cd42:dc8a:7cd9)
11:09:22 <boxscape_> That will have to go through the official proposal process
11:09:32 <freeside> digitalkiwi: with the presence of row types, i was expecting JSON parsing to be easier, and for there to be easier integration between records and json.
11:13:08 × trev quits (~trev@user/trev) (Remote host closed the connection)
11:13:54 trev joins (~trev@user/trev)
11:18:37 × shriekingnoise quits (~shrieking@186.137.175.87) (Quit: Quit)
11:18:49 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:19:14 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
11:22:11 titibandit1 joins (~titibandi@xdsl-87-78-235-220.nc.de)
11:22:32 mbuf joins (~Shakthi@49.204.114.1)
11:27:41 xff0x joins (~xff0x@2405:6580:b080:900:c792:9a92:2632:4781)
11:32:25 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
11:36:31 × trev quits (~trev@user/trev) (Remote host closed the connection)
11:36:57 trev joins (~trev@user/trev)
11:37:00 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Ping timeout: 255 seconds)
11:38:20 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
11:41:51 <freeside> say, how do i discover the fixity of (,) ?
11:43:03 × dextaa quits (~DV@user/dextaa) (Read error: Connection reset by peer)
11:43:07 <Heffalump> freeside: I think it has the weakest possible binding
11:43:07 × axeman quits (~quassel@2a02:8109:a3c0:ed8:9392:cd42:dc8a:7cd9) (Ping timeout: 260 seconds)
11:43:25 dextaa joins (~DV@user/dextaa)
11:46:20 <Inst> :i?
11:46:43 <Inst> wow, it's not listed
11:48:04 <freeside> probably because it's doing double duty as a tuple constructor and list separator
11:48:23 <freeside> it's a floor wax and a dessert topping!
11:49:26 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:50:01 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 252 seconds)
11:53:28 axeman joins (~quassel@2a02:8109:a3c0:ed8:ce56:f99d:50c4:44c8)
11:57:29 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
11:57:35 × acidjnk quits (~acidjnk@p200300d6e715c429e462ed5ea333447e.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
12:00:01 jakalx joins (~jakalx@base.jakalx.net)
12:03:40 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
12:05:30 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
12:10:54 × sammelweis quits (~quassel@c-68-48-18-140.hsd1.mi.comcast.net) (Quit: No Ping reply in 180 seconds.)
12:14:12 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
12:15:23 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
12:16:35 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
12:20:55 mei joins (~mei@user/mei)
12:21:27 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
12:21:43 tremon joins (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl)
12:23:08 × panovia quits (~user@user/siracusa) (Quit: Bye!)
12:23:50 × mei_ quits (~mei@user/mei) (Ping timeout: 246 seconds)
12:24:41 × axeman quits (~quassel@2a02:8109:a3c0:ed8:ce56:f99d:50c4:44c8) (Ping timeout: 256 seconds)
12:25:19 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.7.1)
12:32:20 CiaoSen joins (~Jura@p200300c9572e35002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
12:33:47 fizbin joins (~fizbin@user/fizbin)
12:34:52 <lyxia> fixity doesn't make sense for "," because the outer brackets make it unambiguous to parse.
12:36:13 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
12:36:46 <lyxia> and for reference the grammar of Haskell is in the report https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-360003.8
12:38:35 <boxscape_> so "cabal --upload" will only upload a package candidate by default, right?
12:38:57 <boxscape_> err, "cabal upload"
12:39:20 <ncf> infixl 0 `comma`; comma = (,)
12:39:22 <ncf> :^)
12:39:23 img joins (~img@user/img)
12:41:53 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
12:43:43 × img quits (~img@user/img) (Client Quit)
12:44:11 img joins (~img@user/img)
12:44:56 <freeside> thank you lyxia, i did look for it in the report ... for some time
12:45:14 × img quits (~img@user/img) (Client Quit)
12:45:52 <boxscape_> hmm reading a blog post that seems to imply that it does not upload a candidate, but it's from 2020
12:46:32 <int-e> ncf: infixl, why left?
12:46:34 <lyxia> boxscape_: it does candidates by default
12:46:39 <boxscape_> ok, thanks
12:47:20 <ncf> int-e: no reason. i guess right is more common.
12:47:43 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
12:48:06 img joins (~img@user/img)
12:48:16 <int-e> ncf: I'd prefer `infix`... well, hypothetically. I prefer (,) of course :)
12:49:51 <ncf> agda's comma is infixr, for what it's worth
12:50:32 <ncf> i guess in general it should have the same associativity as ×
12:50:33 <boxscape_> hackage gives me a 403 error if I try to upload a package candidate 🤔
12:50:42 <ncf> so that a , b , c : A × B × C
12:51:24 <ncf> boxscape_: don't they need to activate your account or something like that first?
12:51:31 <boxscape_> ah, maybe
12:51:59 razetime joins (~Thunderbi@49.207.222.244)
12:52:13 <ncf> see the red box in https://hackage.haskell.org/users/register-request
12:52:32 <boxscape_> -.- how did I miss that
12:52:34 <boxscape_> thanks
12:53:10 <int-e> ncf: ah, that's a different context though if you don't have proper triples.
12:56:47 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 252 seconds)
12:59:07 acidjnk joins (~acidjnk@p200300d6e715c429707e98a68aa77666.dip0.t-ipconnect.de)
13:01:07 thongpv87 joins (~thongpv87@2402:9d80:34d:fde9:8a11:e98e:b8b0:cf04)
13:06:16 __monty__ joins (~toonn@user/toonn)
13:11:45 <boxscape_> Oh, I just figured out how I missed it. I didn't read it carefully i
13:11:56 <boxscape_> enough and thought the "Request account" button already includes a request for activation
13:12:23 <boxscape_> I'll suggest to change it to "create account"
13:14:39 <MangoIV[m]> Hi, I want to write something like the following function:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/e744cf824ed41da718c8c11df880426e45a35cd9>)
13:15:00 <MangoIV[m]> * Hi, I want to write something like the following function:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/2bd9c606eea22fe6c83e0ce3560791d3a72836f1>)
13:15:05 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
13:15:41 <MangoIV[m]> (I'm using the type names used by generics-sop because I thought those would be most familiar)
13:17:29 <mauke> why is the `=>` inside of the parentheses?
13:17:45 __monty__ joins (~toonn@user/toonn)
13:18:20 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
13:19:01 califax joins (~califax@user/califx)
13:19:04 × Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer)
13:19:19 <MangoIV[m]> because the statement of the function is that "if I have some List for that All Top holds then I can always remove that constraint", if you move it outwards then it's merely id.
13:20:03 Xeroine joins (~Xeroine@user/xeroine)
13:20:38 <int-e> You have to provide evidence for `All Top xs` in order to evaluate that (All Top xs => NP f xs) value.
13:20:59 <MangoIV[m]> isn't matching on Nil evidence enough? why not?
13:21:17 <int-e> there's nothing to match
13:21:30 <boxscape_> in other words, it has to be evaluated e
13:21:33 <boxscape_> before you can match on it
13:21:35 <boxscape_> I suppsoe
13:21:46 <int-e> operationally, the NP f xs value that you get may depend on the All Top xs dictionary (if that's a class).
13:22:37 <mauke> All and Top are both classes
13:22:54 <boxscape_> oh I would have expected All to be a type family
13:22:58 <MangoIV[m]> ok, I get that reasoning, but I do not get why it doesn't work, can somebody please try to explain what I'm misunderstanding? I think that matching on '[] should provide GHC with the ability to reduce the type family and getting a dictionary for () should be possible
13:23:23 <MangoIV[m]> All is indeed a type family
13:23:23 <MangoIV[m]> although in generics-sop it's a type class synonym for a type family
13:23:23 <MangoIV[m]> to get partial application
13:23:34 <MangoIV[m]> as do not need that, in my case it is a type family
13:23:35 <boxscape_> ah
13:24:14 <mauke> `class (AllF c xs, SListI xs) => All (c :: k -> Constraint) (xs :: [k])`
13:24:53 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
13:25:32 <MangoIV[m]> (that's not how I implement it, for simplicity sake, this is the first line:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/1cf5f5be679a60501a9d48794f376362970f4dec>)
13:26:24 <int-e> Conceptually, I guess you want NP f xs -> All Top xs, so wiggling CPS style that would be NP f xs -> (All Top xs => r) -> r
13:27:30 <MangoIV[m]> I think it should be the other way around, no? I want to subsume the constraint
13:27:34 <MangoIV[m]> not add it
13:29:13 <MangoIV[m]> lemme check whether it helps me, though, thank you
13:30:21 <int-e> I don't understand how your function is supposed to work. `All Top xs => NP f xs` doesn't give you a value until you provide the `All Top xs` evidence. Crucially, you have no `xs` to pattern match against.
13:30:50 <int-e> (types are erased at runtime)
13:31:29 <MangoIV[m]> why? I think matching on HNil gives me evidence?
13:31:34 <MangoIV[m]> that's why it's a GADT?
13:31:44 <int-e> Where's the value to pattern match?
13:31:53 <MangoIV[m]> the NP?
13:32:28 <int-e> There is no NP. You only have `All Top xs => NP f xs` which isn't a value... what I just wrote above.
13:32:32 <MangoIV[m]> <MangoIV[m]> "ok, I get that reasoning, but..." <- hence my question here; i don't understand why GHC forgets the evidence provideded by the match on HNil
13:32:44 <int-e> There's no match!
13:33:10 <MangoIV[m]> > <@mangoiv.:matrix.org> Hi, I want to write something like the following function:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/af198fc750c8c8ac65e47988508a1fcefe3f9682>)
13:33:13 <lambdabot> <hint>:1:1: error: parse error on input ‘<@’
13:33:32 <mauke> no, you don't
13:33:50 <int-e> you write `dischargeAllTop Nil = Nil` but that becomes `dischargeAllTop x = case x of Nil -> Nil`, and in order to evaluate that, you need to evaluate x.
13:33:50 <mauke> you don't have a value to match on yet (because trying to get that value leads to a type error)
13:34:12 <int-e> And in order to evaluate x, you need to provide the `All Top xs` evidence.
13:34:21 <mauke> also, wouldn't you need something like withDict pureAll ...?
13:34:42 <mauke> I'm looking at https://hackage.haskell.org/package/sop-core-0.5.0.2/docs/Data-SOP-Dict.html
13:35:11 <int-e> So unless you can conjure `All Top xs` for *any* type xs, this isn't going to work.
13:35:38 <mauke> what a coincidence :-) `pureAll :: SListI xs => Dict (All Top) xs`
13:35:43 × acidjnk quits (~acidjnk@p200300d6e715c429707e98a68aa77666.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
13:36:00 <int-e> Note the `SListI xs =>` constraint there.
13:36:06 <int-e> That makes all the difference.
13:36:31 <MangoIV[m]> that's a pity
13:36:32 <MangoIV[m]> int-e: the reason why I'm doing this is to prove that... so the reason is that _to match on Nil_ I first have to know my proposition but I can only know it by matching on Nil
13:36:34 <mauke> yeah, I guess that says xs must be a type list
13:36:41 × kris7t quits (~kris7t@marussy.com) (Remote host closed the connection)
13:37:22 alfonsox joins (~quassel@103.87.57.65)
13:37:30 kris7t joins (~kris7t@marussy.com)
13:37:47 <boxscape_> kind of reminds of trying to prove Peirce's law in a constructive context, not sure if it's related though
13:37:51 <mauke> oh, it gets weirder. type SListI = All Top :-(
13:39:04 <MangoIV[m]> yeah, it looks like `All Top xs => All c xs` so that gives you All Top xs => All Top xs in case c ~ Top
13:39:16 <MangoIV[m]> I guess that's the trick that generics-sop uses
13:39:22 <MangoIV[m]> to get around that problem
13:43:10 kris7t parts (~kris7t@marussy.com) ()
13:48:32 zmt00 joins (~zmt00@user/zmt00)
13:48:37 acidjnk joins (~acidjnk@p200300d6e715c429707e98a68aa77666.dip0.t-ipconnect.de)
13:52:12 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
13:56:25 <MangoIV[m]> ok; so apparently using that you can then create a singleton that witnesses the list spine, which you can then use to get the necessary dicts in scope
13:59:40 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Quit: beteigeuze)
14:00:06 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
14:01:40 <int-e> Right, singletons are largely about getting values (which aren't erased at runtime) for type evidence.
14:07:34 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:07:35 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:10:06 × [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Client Quit)
14:10:07 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
14:12:02 freeside joins (~mengwong@103.252.202.159)
14:13:44 biberu\ joins (~biberu@user/biberu)
14:14:29 × biberu quits (~biberu@user/biberu) (Ping timeout: 246 seconds)
14:15:18 biberu\ is now known as biberu
14:16:53 × CiaoSen quits (~Jura@p200300c9572e35002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
14:17:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
14:19:23 × acidjnk quits (~acidjnk@p200300d6e715c429707e98a68aa77666.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
14:21:27 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
14:23:37 <Inst> hey [exa], if you want to humor me because I'm really sick
14:23:52 <Inst> it's possible to stuff a group of IO () values into a list
14:23:58 <Inst> can't Eq it, of course
14:24:07 <Inst> then you can sequence the list to run it
14:24:27 <Inst> but you can also reverse, take, index, etc
14:24:40 <[exa]> yeah that's true
14:24:41 <Inst> this isn't real Haskell, but it sounds like there's probably something fun you can do with it
14:24:54 <[exa]> how come it's not real haskell?
14:25:01 <Inst> we have template Haskell for this
14:25:17 <Inst> someone complained because after I built a blackjack calculator with 10 lines of IO and 2000 lines of calculation and combinators
14:25:25 <Inst> I claimed IO was like a scripting language in Haskell
14:25:38 <Inst> correctly, it's closer to a eDSL
14:25:48 <Inst> they countered that that intuition is like a monad burrito tutorial
14:25:52 <Inst> because it disguises that IO is a value
14:25:56 <Inst> that IO types are values
14:26:25 <Inst> evidently, the sequenceA_ is fun to get an intuition for IO as a value; i.e, limited metaprogramming based on IO
14:26:30 <Inst> erm, IO values in a list
14:27:05 × fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Quit: Leaving)
14:27:13 <[exa]> burritos are crutches for those of feeble faith. :D
14:27:38 <Inst> any metaprogramming exercise ideas?
14:28:06 <[exa]> it's literally an eDSL, it's special just because it computes a (the!) value that the ghc kinda requires from you
14:28:28 <[exa]> > sequence $ reverse [print 5, print 6]
14:28:30 <lambdabot> <IO [()]>
14:28:46 <[exa]> (it prints 6 then 5 but lambdabot ain't friends with IO)
14:28:58 <Inst> but everyone i talked to claimed that the notion of treating IO as a scripting language was bad
14:29:37 <[exa]> how is this a scripting language?
14:29:54 <Inst> I guess I was thinking of it as an analogy to Py + Numpy
14:29:56 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
14:30:00 <Inst> since that was what happened with my blackjack calculator
14:30:03 <Inst> tiny main, huge program
14:30:38 <[exa]> tbh, that may be okay. The calculator doesn't need much IO interaction between reading the task and spewing out the result, so why have IO ops?
14:31:45 <[exa]> if there are obvious stages or sequentiality in the calculation, there might be monads that make the whole thing simpler (State that holds known evaluations, etc...)
14:32:08 <[exa]> maybe they were referring to the situation when you implement and interpret the eDSL yourself?
14:32:25 <Inst> ehhh, I used it to produce a log, which is being fed to a Servant server, which is being held up because a friend is being tasked to help develop the JS interface for it
14:33:06 Guest|34 joins (~Guest|34@158.181.134.236)
14:33:11 <[exa]> yeah at that point you might love having a magic offloader for log entries that should be spewed out, so that you don't need to carry them manually
14:33:15 <Inst> anyways, if you can think up any cool ideas for IO-list metaprogramming, let me know
14:33:17 × Guest|34 quits (~Guest|34@158.181.134.236) (Client Quit)
14:33:31 <[exa]> metaprogramming as in real templatehaskell, or in eDSLs?
14:33:35 <Inst> it seems fun, if a bit superfluous, but the idea is
14:33:44 biberu\ joins (~biberu@user/biberu)
14:33:46 <Inst> i mean the idea of manipulating an IO () list via sequence
14:34:05 × alfonsox quits (~quassel@103.87.57.65) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:34:18 <Inst> it seems, to begin with, way more accessible than template haskell, and also helps solidify the idea of an IO Value, as opposed to IO being syntax
14:34:28 <Inst> I have no idea how hardcore imperative people think
14:34:34 <[exa]> ah, hah. I once did some kind of a program that was supposed to do multiple simple actions in one "transaction", the actions were selected by the user on a commandline
14:34:45 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
14:34:48 <[exa]> so I had literal `M.Map String (IO ())`
14:34:59 × biberu quits (~biberu@user/biberu) (Ping timeout: 260 seconds)
14:35:19 biberu\ is now known as biberu
14:35:28 <[exa]> then you open the transaction, traverse the argument list, run the list of IO actions that you find with sequence, close the transaction
14:35:32 <[exa]> it was luvly.
14:36:29 <[exa]> (in something like C++ you would have `std::map<std::string, some_function_pointer>` or so)
14:37:09 CiaoSen joins (~Jura@p200300c9572e35002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
14:38:49 fizbin joins (~fizbin@user/fizbin)
14:40:04 <Inst> it's more like tokens + transform, no?
14:42:42 <[exa]> yeah, it was very roughly like: getArgs >>= sequence . map (myHandlers M.!)
14:43:01 <[exa]> not sure if that even typechecks but I guess you get the idea
14:43:29 <[exa]> anyway, the design space of various embeddings/metaprogrammings is pretty wide
14:43:38 <[exa]> lemme google 1 thing
14:46:10 acidjnk joins (~acidjnk@p200300d6e715c42998a7643da4cfbc51.dip0.t-ipconnect.de)
14:47:35 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
14:48:59 × mechap quits (~mechap@user/mechap) (Ping timeout: 260 seconds)
14:50:13 <[exa]> there are various encodings of the programs (eDSLs and alike); you may choose between initial and final representation, and tagged and tagless encoding
14:50:38 mechap joins (~mechap@user/mechap)
14:51:18 Guest49 joins (~Guest49@2409:4064:613:746a:ac10:4c65:5042:bba1)
14:53:25 × Guest49 quits (~Guest49@2409:4064:613:746a:ac10:4c65:5042:bba1) (Client Quit)
14:55:25 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
14:55:48 <[exa]> Inst: anyway this is probably a good reading https://serokell.io/blog/introduction-tagless-final (I can't find the post I wanted but this should do)
14:56:58 × titibandit1 quits (~titibandi@xdsl-87-78-235-220.nc.de) (Remote host closed the connection)
14:57:23 <[exa]> for your use case it might be nice for systematizing what is and isn't useful for various kinds of program manipulation out there
14:59:54 <Inst> reading
15:00:23 <Inst> tbh i'm trying to write a book for fun (it's so bad I'm now ashamed to show it) and I just need exercise ideas
15:00:31 <Inst> I was more thinking of
15:00:32 <Inst> https://blog.jle.im/entry/first-class-statements.html
15:00:53 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
15:01:01 <Jadesheit[m]> Isn't the only function that can typecheck `a -> a` the identity function? (apart from sketchy coercion)
15:01:39 <Jadesheit[m]> * typecheck `forall a, * a., * a -> a`
15:03:16 <Inst> id.id
15:03:52 <Jadesheit[m]> that's identically equal to the identity function
15:04:56 <Inst> \s\identity function\identity function and derivatives of\
15:05:02 <Jadesheit[m]> `id . id` can be expanded as `\x -> id (id x)`, `\x -> id x` which is just `id`
15:06:20 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
15:07:07 Yurez23 joins (~Yurez23@46.36.117.226)
15:07:18 <[exa]> Jadesheit[m]: given some mathematically optimistic conditions about evaluation and lack of `seq`, the only 2 possible implementations of `a->a` are truly `id` and an `undefined` somehow constrained to return the same type as `a`
15:08:07 × tremon quits (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Ping timeout: 268 seconds)
15:11:04 <[exa]> Inst: ha, well, for exercises... implement any of the base languages (forth/lisp/prolog/ML/shell), revelant exercises will spawn magically
15:12:07 <Guest5476> I can write a function with a -> a type, that will have special treatment to Bool values, using realyUnsafePtrEquality
15:12:33 <[exa]> Guest5476: yeah but well, you know, pls don't. :D
15:12:41 <Guest5476> I will call it "realyUnsafeId"
15:12:58 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
15:14:05 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
15:15:43 × freemanX quits (~user@14.100.44.229) (Ping timeout: 252 seconds)
15:17:41 <Guest5476> BTW, it sounds like a good examination for data sharing knowledge
15:20:39 tremon joins (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl)
15:20:44 jakalx joins (~jakalx@base.jakalx.net)
15:25:20 × Yurez23 quits (~Yurez23@46.36.117.226) (Quit: Client closed)
15:30:48 Yurez23 joins (~Yurez23@46.36.117.226)
15:34:45 × phma quits (phma@2001:5b0:210d:e648:536c:bd68:b90b:47da) (Read error: Connection reset by peer)
15:35:13 phma joins (~phma@host-67-44-208-26.hnremote.net)
15:35:42 emmanuelux joins (~emmanuelu@user/emmanuelux)
15:36:22 mc47 joins (~mc47@xmonad/TheMC47)
15:40:17 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving)
15:42:11 geekosaur joins (~geekosaur@xmonad/geekosaur)
15:43:21 ddellacosta joins (~ddellacos@89.45.224.178)
15:43:37 × Yurez23 quits (~Yurez23@46.36.117.226) (Quit: Client closed)
15:45:27 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
15:46:39 × califax quits (~califax@user/califx) (Remote host closed the connection)
15:46:53 califax_ joins (~califax@user/califx)
15:48:09 califax_ is now known as califax
15:49:22 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
15:50:27 axeman joins (~quassel@2a02:8109:a3c0:ed8:53bb:6cbb:d8cb:4271)
15:50:29 emmanuelux joins (~emmanuelu@user/emmanuelux)
15:51:53 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Client Quit)
15:54:18 emmanuelux joins (~emmanuelu@user/emmanuelux)
15:58:01 × hsw quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Remote host closed the connection)
15:58:20 hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
15:59:24 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
16:01:57 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
16:15:34 <MangoIV[m]> <MangoIV[m]> "I guess that's the trick that..." <- just for who cares: it's easier to get around this problem by just using... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/e07ae38cdae1e6aad4afbee459fc4bd7e312b21a>)
16:17:51 <dgpratt[m]> feeling dumb, how do I generalize this function `f n = [[n0, n1, n2 ] | n0 <- [0..n], n1 <- [n0..n], n2 <- [n1..n]]` such that the number of iterations / elements in the inner list is based on a numeric argument?
16:18:49 <freeside> recurse or traverse
16:23:37 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
16:24:06 <freeside> myfunction depth nLow nHigh ... and somewhere you will want concat, or concatMap ...
16:26:23 × acidjnk quits (~acidjnk@p200300d6e715c42998a7643da4cfbc51.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
16:30:03 <mauke> let gen 0 _ = [[]]; gen k (lo, hi) = [ n : suf | n <- [lo .. hi], suf <- gen (k-1) (n, hi) ] in gen 3 (0, 3)
16:30:24 <mauke> > let gen 0 _ = [[]]; gen k (lo, hi) = [ n : suf | n <- [lo .. hi], suf <- gen (k-1) (n, hi) ] in gen 3 (0, 3)
16:30:25 <lambdabot> [[0,0,0],[0,0,1],[0,0,2],[0,0,3],[0,1,1],[0,1,2],[0,1,3],[0,2,2],[0,2,3],[0,...
16:31:20 <mauke> > let gen 0 _ = [[]]; gen k (lo, hi) = [ n : suf | n <- [lo .. hi], suf <- gen (k-1) (n, hi) ] in gen 4 (0, 1)
16:31:23 <lambdabot> [[0,0,0,0],[0,0,0,1],[0,0,1,1],[0,1,1,1],[1,1,1,1]]
16:31:59 <mauke> :t let gen 0 _ = [[]]; gen k (lo, hi) = [ n : suf | n <- [lo .. hi], suf <- gen (k-1) (n, hi) ] in gen
16:32:01 <lambdabot> (Eq t, Num t, Enum a) => t -> (a, a) -> [[a]]
16:32:22 <mauke> good enough
16:32:34 <stefan-_> I am working on AoC day 17 with a field type of `[Word8]` (bit-based operations), it turns out that drop, foldl+reverse and (++) take about 95% of the time
16:32:50 <stefan-_> are there better alternatives than a list of Word8?
16:33:43 <carbolymer> ByteString?
16:33:43 <freeside> data.vector
16:34:37 <freeside> looking at the puzzle, why not data.matrix
16:37:08 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
16:37:43 <dgpratt[m]> that appears to be exactly what I was trying to do, thanks mauke
16:39:18 <stefan-_> freeside, part 2 requires a field height of 10^12, I guess I will run into space problems with Data.Matrix
16:39:21 <dgpratt[m]> wish I could have figured that out myself, but I'll settle for knowing how to do it now :)
16:39:27 <stefan-_> (probably also with [Word8])
16:41:04 <byorgey> stefan-_: for part 2 you want to find a way to do it that doesn't require actually simulating/storing the entire thing.
16:41:34 <byorgey> stefan-_: you might also consider a Set (Int,Int)
16:41:42 <stefan-_> byorgey, there is a cycle after n*m steps, but I couldnt figure out how to make use of this information yet
16:41:47 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Ping timeout: 260 seconds)
16:41:53 <stefan-_> byorgey, that was my first try
16:41:54 <byorgey> stefan-_: yes, that's on the right track
16:43:09 <byorgey> stefan-_: your first try was Set (Int,Int)? And it was too slow?
16:43:47 <stefan-_> byorgey, it is currently twice as fast as the [Word8]-based solution, I just wanted to give [Word8] a try
16:44:44 <byorgey> ah, I see. Yes, lists have a lot of overhead. They are great when used as a control structure, i.e. for loop, but not so good as a data structure
16:44:58 <stefan-_> also it might be possible to prune the lower parts of the field, which are no longer reachable
16:46:02 <byorgey> I don't do any pruning and my solution using Set (Int,Int) is quite fast (0.05s).
16:49:20 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
16:49:33 <stefan-_> ok, then maybe I should put a bit more thought into the cycle structure
16:49:49 <stefan-_> thanks for the help byorgey, freeside and carbolymer
16:52:22 <kjlid[m]> So I'm using Data.Time.Format.ISO8601.iso8601Show to print a date but I currently get it in the format 2023-01-07T17:41:11.600203379+01:00 but I want it in the format 2023-01-07T17:51:34+01:00. How do I get rid of the milliseconds? Maybe it's just me but the documentation at https://hackage.haskell.org/package/time-1.12.2/docs/Data-Time-Format-ISO8601.html isn't completely obvious
16:52:40 <kjlid[m]> s/milliseconds/decimals/
16:53:33 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:54:07 × kora9 quits (~kora@user/Kora9) (Quit: WeeChat 3.5)
16:57:08 jakalx joins (~jakalx@base.jakalx.net)
16:59:43 <sm> aside: seriously, what the hell good is a "standard" you have to "buy"
16:59:44 <sm> https://www.iso.org/obp/ui/#iso:std:iso:8601:ed-3:v1:en
16:59:56 <sm> good morning all !
17:00:30 <darkling> People have been asking that question for *years*.
17:00:56 <sm> CHF187 to read it ?
17:01:30 <c_wraith> It's way worse in some other fields. You have to pay thousands to get a copy of the legal requirements for construction in a lot of places.
17:01:55 <sm> in that case, https://hackage.haskell.org/package/time-1.12.2/docs/Data-Time-Format-ISO8601.html delegating to it for documentation is a serious bug
17:02:12 <freeside> http://blog.archive.org/2022/10/19/2022-internet-archive-hero-award-carl-malamud/
17:02:51 <freeside> fortunatley ISO8601 is well enough explained elsewhere, e.g. https://en.wikipedia.org/wiki/ISO_8601
17:04:38 <darkling> I've had to look at a bunch of geospatial standards recently. Fortunately, they're dual-published, so I suspect the OGC gets all the traffic to their version of the text, and the ISO gets a whole load of nope.
17:04:49 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:05:12 <kjlid[m]> The C standard is CHF 208
17:06:02 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
17:06:18 <sm> kjlid: I would avoid that module, unless you're willing to trial and error each of its formats, and make your own format instead using the codes at https://hackage.haskell.org/package/time-1.12.2/docs/Data-Time-Format.html
17:06:19 <dolio> You can get old versions of that, at least.
17:06:20 <kjlid[m]> Aww okay
17:06:42 <dolio> For free, that is.
17:07:00 <geekosaur> nobody reads it anyway 😈
17:07:10 <dolio> I read it. :)
17:07:19 <sm> I tried to read it just now
17:08:42 <kjlid[m]> But you're too cheap to cough up a measly CHF187 to figure out how to format dates?
17:09:41 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
17:10:08 <kjlid[m]> I wonder if the writer of this documentation actually paid up and figured everyone would do the same
17:10:22 <freeside> https://www.amazon.com/Calendrical-Calculations-Ultimate-Edward-Reingold/dp/1107683165/ is a lot cheaper than the last time i looked
17:10:30 <pragma-> "This standard has been withdrawn."
17:10:41 <razetime> how do i apply a function to each element in a tuple?
17:10:48 <pragma-> If y'all pay for a withdrawn standard, that's going to be even funnier.
17:11:46 <c_wraith> razetime: there's no general tool for that. mostly because different sizes of tuple are completely unrelated types
17:12:03 <razetime> i see. so it just needs to be pattern matched
17:12:18 <c_wraith> :t bimap -- razetime: but if you're working with pairs, this exists
17:12:20 <lambdabot> Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
17:13:30 <ncf> if you've got lenses handy, `over each`
17:13:45 acidjnk joins (~acidjnk@p200300d6e715c403c13dad5c816a3096.dip0.t-ipconnect.de)
17:13:55 × mbuf quits (~Shakthi@49.204.114.1) (Quit: Leaving)
17:13:59 <c_wraith> ncf: I don't recommend that in general, because it requires every tuple element have the same type. That's not how tuples are usually used
17:14:40 <ncf> fair
17:14:58 sm imagines traffic lights that blink in special codes, you have to be a subscriber to know what they mean
17:17:59 jinsun__ joins (~jinsun@user/jinsun)
17:17:59 × jinsun quits (~jinsun@user/jinsun) (Killed (tantalum.libera.chat (Nickname regained by services)))
17:17:59 jinsun__ is now known as jinsun
17:18:51 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 268 seconds)
17:19:48 freeside joins (~mengwong@103.252.202.159)
17:21:13 <darkling> sm: Don't give them ideas... :(
17:22:23 <sm> traffic lights don't build themselves you know! We've got to fund them somehow
17:22:26 <kjlid[m]> Oooh, I like it. Add microtransactions to traffic
17:22:56 <[exa]> "pls show me how not to die on this crossroads" just for $1.35 *ka-ching*
17:23:38 <darkling> How many brands of traffic light would you have to license in order to be able to use the self-drive on your car?
17:23:44 <hpc> kjlid[m]: that's just toll roads :P
17:23:49 <darkling> (Cost/month, of course)
17:24:33 <[exa]> darkling: no problem there, self-driving can be cashed for separately
17:25:12 <razetime> c_wraith: bimap is useful, thanks
17:25:26 <razetime> well, until i decided to use a tuple of 4 values
17:25:43 <[exa]> quadrimap!
17:27:31 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 260 seconds)
17:29:00 freeside joins (~mengwong@103.252.202.159)
17:30:08 igghibu joins (~igghibu@178.249.211.75)
17:33:15 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 252 seconds)
17:36:13 titibandit1 joins (~titibandi@xdsl-87-78-235-220.nc.de)
17:36:47 <MangoIV[m]> hcmap
17:38:30 × beteigeuze quits (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Read error: Connection reset by peer)
17:39:03 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
17:40:04 × titibandit1 quits (~titibandi@xdsl-87-78-235-220.nc.de) (Remote host closed the connection)
17:40:31 <mauke> :t bimap
17:40:33 <lambdabot> Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
17:41:18 <mauke> :t uncurry bimap . uncurry bimap
17:41:20 <lambdabot> error:
17:41:20 <lambdabot> • Couldn't match type ‘p0 a c -> p0 b d’
17:41:20 <lambdabot> with ‘(a1 -> b1, c1 -> d1)’
17:41:39 <mauke> oh, duh
17:41:59 × gdd quits (~gdd@2001:470:1f13:187:31f4:d139:4ea3:c0fd) (Ping timeout: 246 seconds)
17:42:54 gdd joins (~gdd@2001:470:1f13:187:e8a5:fbff:fe29:42f5)
17:44:44 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
17:47:49 freeside joins (~mengwong@103.252.202.159)
17:55:44 Profpatsch joins (~Profpatsc@static.88-198-193-255.clients.your-server.de)
17:56:07 <Profpatsch> I saw a “Generalization of the difference list trick” thing somewher, either with Monoid or with Category
17:56:55 × axeman quits (~quassel@2a02:8109:a3c0:ed8:53bb:6cbb:d8cb:4271) (Ping timeout: 260 seconds)
17:57:08 <dolio> It's related to Cayley's theorem/the Yoneda lemma.
17:57:21 freemanX joins (~user@14.100.44.229)
18:00:06 <Profpatsch> dolio: can you remember which module it was in?
18:00:18 <razetime> is there an online editor for haskell which lets you load your program into ghci?
18:00:28 <dolio> Probably Data.Monoid. Endo.
18:00:35 <ncf> https://hackage.haskell.org/package/profunctors-5.6.2/docs/Data-Profunctor-Ran.html#t:Codensity
18:00:44 <[exa]> razetime: see topic :]
18:00:58 <[exa]> also repl.it had something if you need more complicated setups
18:01:11 <ncf> or https://hackage.haskell.org/package/kan-extensions-5.2.5/docs/Control-Monad-Codensity.html
18:02:02 <razetime> replit looks more like it, i need to load the file in the interpreter to test functions
18:02:23 <Profpatsch> dolio: Aaaah, thank you, you are right, it’s in Data.Semigroup
18:02:49 <geekosaur> tbh if I'm at that point, I'd go with local ghci. can install packages as well, which you generally can't with online setups
18:03:01 <Inst> question
18:03:08 <ncf> oh, *that* generalisation
18:03:09 <Inst> is there an "IO problem" in Haskell?
18:03:48 <ncf> what's an IO problem
18:04:04 <Inst> that is to say, Haskell has a separation between pure and impure code, manifested by either the IO layer or monadic code
18:04:14 <Inst> consequently, you have questions like:
18:04:24 <Inst> "how much of my code should be pure and how much should be impure?"
18:04:30 <Inst> "if i have to have impure code, how should I structure it?"
18:04:50 <geekosaur> Inst, usually that's not a problem except to newcomers, instead it encourages separatingt your logic cleanly
18:05:24 enthropy joins (~enthropy@66.7.90.250)
18:05:45 <Inst> the way I understand it is that all the effects systems are sort of a response to what I'd call the IO problem
18:06:11 <dolio> What is the IO problem?
18:06:21 <geekosaur> the way I understand it is effects systems are a response to a perceived problem with mtl
18:06:30 <geekosaur> not with IO as such
18:06:35 <Inst> i'm including MTL as an effects system
18:07:05 <monochrom> There is no "IO problem". Let's end the pointless "discussion" and move on.
18:07:15 <geekosaur> ^
18:07:24 Plebbu joins (~user@52.124.39.58)
18:07:25 <Inst> okay, fine
18:07:28 <ncf> oh man can we have the same monochrom in #categorytheory
18:07:28 <geekosaur> I explained what's up with IO earlier
18:07:42 <Inst> it's considered solved in Haskell
18:07:49 <geekosaur> once you learn code structuring, IO is a friend, not a problem
18:07:54 <dolio> I think the seeds of MTL might predate IO as a monad.
18:08:11 <dolio> I assume Wadler's original monads paper has examples that aren't IO.
18:08:14 <Inst> i default to doing all computations in as much pure code as possible
18:08:25 <geekosaur> and what you learn with it will also benefit you in other languages
18:08:34 <monochrom> ncf: I tried! Years ago I already predicted that heinz is a crackpot and suggested you guys to ban or at least ignore. Since then they have only become worse.
18:08:38 <Inst> but sometimes i wonder if that's the best solution, especially since i prefer IO / pure isntead of monad trans
18:09:07 <ncf> i don't even know who the mods are in that channel
18:09:32 <ncf> apparently "tapas" is the founder... but they're not even in the channel
18:09:47 <Inst> oh, i know who that is, you can find her on FP discord
18:09:48 <ncf> sorry, wildly off-topic
18:10:20 <Inst> geekosaur: as i've said before, I've reached 200:1 pure to IO ratios
18:10:34 <Inst> but some programs you need more code in IO
18:11:02 <Profpatsch> Inst: Isn’t that a moot discussion
18:11:22 <Profpatsch> the same best practices apply whether you are writing Haskell or elisp or javascript
18:12:09 <Inst> it's just weird when you're doing haskell and you have more than 50% of your code in IO
18:12:24 <Profpatsch> No
18:12:33 <Profpatsch> That’s the only code that does anything
18:12:51 <Profpatsch> The rest is up to what you want to *do*
18:12:53 <dolio> I write a lot of non-IO code that does stuff.
18:13:06 <Profpatsch> if all you want to do is run a then b than c, that’s IO
18:13:11 <Profpatsch> *then
18:13:33 <Profpatsch> If you want to test shit or run it in a different way, then you should probably factor it out
18:13:40 <Profpatsch> that’s all there is to it
18:14:00 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:14:35 <Profpatsch> (Haskell provides a *lot* better mechanisms to factor stuff out than other languages do, which is its main advantage)
18:14:40 <Inst> hmmmm, i just guess with more IO intensive code, I need more practice moving stuff out, like changing conditions to be based on a <$> isntead of a >>=, etc
18:15:01 <Inst> and being better at isolating the stuff that actually calls IO
18:15:21 <Profpatsch> Inst: floating out pure’s is a very simple refactor which will come naturally after a while
18:15:46 <Profpatsch> writing left-to-right Haskell helps with that, but that’s just my opinion
18:17:35 <ncf> what's a left-to-right haskell
18:18:00 <Profpatsch> writing left to right, top to bottem
18:18:03 <Profpatsch> *bottom
18:18:25 <ncf> that's how most text editors work
18:18:35 <monochrom> I guess it means "h >>> g >>> f" instead of "f . g . h"
18:18:48 <Profpatsch> getLine <&> Text.pack <&> Text.split " " & traverse putStrLn
18:19:10 <ncf> ah, diagrammatic order
18:19:11 <ncf> i like that
18:19:21 <Profpatsch> the last one should be a >>= instead of &
18:19:37 <Inst> maybe could I get code review here?
18:19:38 <Inst> https://github.com/liamzee/Dicewarist/blob/master/app/Dicewarist.hs
18:21:05 <Profpatsch> But can be applied to pure code as well, e.g. myMap & Map.toList <&> Json.parse <&> eitherToValidationList & sequence & \case { Failure errs -> error errs; Success a -> pure a }
18:21:32 <Profpatsch> (ofc this would go on a bunch of lines instead but for the sake of brevity)
18:29:33 <enthropy> writing code for dear-imgui makes me want static variables. IE. an IORef defined where it's used but one that keeps the old value across iterations of mainLoop. Since template haskell now supports -XImplicitParams it seems like I could have $(ref "x" mempty) expand out to "?x_unique_number", and then I can generate the first part of  main = do x_1
18:29:34 <enthropy> <- newIORef mempty; let ?x_1 = x_1 in mainLoop. Or does such a thing already exist?
18:30:43 × razetime quits (~Thunderbi@49.207.222.244) (Remote host closed the connection)
18:33:31 shriekingnoise joins (~shrieking@186.137.175.87)
18:34:11 <enthropy> is it correct that the unsafePerformIO newIORef trick only works at top-level?
18:35:54 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Quit: WeeChat 3.7.1)
18:37:16 <monochrom> I don't know about "only", but I know about "simplest to predict".
18:38:31 <monochrom> A reassuring thought being that base itself needs a few of those too, so you know that GHC cannot mishandle them.
18:38:39 <geekosaur> I'd say "only necessary"
18:39:13 <geekosaur> because anywhere else you have control over it already
18:39:47 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
18:49:31 × CiaoSen quits (~Jura@p200300c9572e35002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
18:52:27 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 248 seconds)
18:57:35 × mc47 quits (~mc47@xmonad/TheMC47) (Quit: Leaving)
18:58:15 mc47 joins (~mc47@xmonad/TheMC47)
19:06:16 × mei quits (~mei@user/mei) (Quit: mei)
19:06:52 jinsun is now known as Guest3215
19:06:52 jinsun__ joins (~jinsun@user/jinsun)
19:06:52 × Guest3215 quits (~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services)))
19:06:52 jinsun__ is now known as jinsun
19:10:57 freeside joins (~mengwong@103.252.202.159)
19:15:50 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
19:16:44 freeside joins (~mengwong@103.252.202.159)
19:19:48 cameron_ joins (~quassel@050-089-109-059.res.spectrum.com)
19:21:25 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
19:21:26 × Plebbu quits (~user@52.124.39.58) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.2.50))
19:21:39 jinsun joins (~jinsun@user/jinsun)
19:23:54 × Kaipei quits (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net) (Ping timeout: 252 seconds)
19:23:56 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:26:14 × phma quits (~phma@host-67-44-208-26.hnremote.net) (Read error: Connection reset by peer)
19:27:02 wroathe joins (~wroathe@50.205.197.50)
19:27:02 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
19:27:02 wroathe joins (~wroathe@user/wroathe)
19:27:21 phma joins (phma@2001:5b0:210d:7648:cd95:5ae2:112e:6872)
19:27:58 econo joins (uid147250@user/econo)
19:28:03 × lbseale quits (~quassel@user/ep1ctetus) (Ping timeout: 260 seconds)
19:29:48 × freemanX quits (~user@14.100.44.229) (Remote host closed the connection)
19:30:32 Benzi-Junior joins (~BenziJuni@dsl-149-66-52.hive.is)
19:30:35 × foul_owl quits (~kerry@157.97.134.61) (Ping timeout: 252 seconds)
19:30:54 <Benzi-Junior> What does (..) mean in imoprt ?
19:31:20 cameron_ is now known as scoopahdoopah
19:32:29 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
19:32:31 <enthropy> I wrote the implicitparams/template haskell option https://gist.github.com/aavogt/2312f92289b1bcf65cd506b365949a56 but I don't see the mistake in my generated code that ghc is pointing out
19:32:53 <Benzi-Junior> i.e. "import Types (MTL (..))"
19:32:54 <boxscape_> Benzi-Junior if you have `import Data.Maybe (Maybe(..))` it means import Maybe and all its constructors, i.e. Nothing and Just
19:35:46 Kaipei joins (~Kaiepi@nwcsnbsc03w-47-55-159-86.dhcp-dynamic.fibreop.nb.bellaliant.net)
19:36:19 <Benzi-Junior> boxscape_, ahh that makes sense
19:37:07 wroathe joins (~wroathe@50.205.197.50)
19:37:07 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
19:37:07 wroathe joins (~wroathe@user/wroathe)
19:39:20 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
19:40:37 <Benzi-Junior> also in the line "data TL = TL {}" what is the significance of "{}"
19:41:00 <Benzi-Junior> I mean it seems to me to be a constructor with 0 named fields
19:41:27 <boxscape_> that is correct
19:41:42 <boxscape_> it's the same as `data TL  = TL`
19:42:13 <Benzi-Junior> ok I guess that means Im expected to fill it in
19:42:18 fizbin joins (~fizbin@user/fizbin)
19:42:48 <boxscape_> hm, could be, depends on what the task is I suppose
19:43:24 <Benzi-Junior> I hate doing programming tests, I never know what parts I should be changing and which ones are just setup
19:43:55 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Ping timeout: 260 seconds)
19:43:56 <boxscape_> hm sounds like what you hate is poorly designed programming tests :P
19:45:17 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
19:45:56 × boxscape_ quits (~boxscape_@81.191.27.107) (Quit: Connection closed)
19:46:36 foul_owl joins (~kerry@193.29.61.203)
19:47:16 gmg joins (~user@user/gehmehgeh)
19:48:51 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
19:49:57 boxscape_ joins (~boxscape_@81.191.27.107)
19:51:18 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds)
19:55:09 Sgeo joins (~Sgeo@user/sgeo)
19:57:11 × ddellacosta quits (~ddellacos@89.45.224.178) (Ping timeout: 264 seconds)
19:57:50 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:00:31 califax joins (~califax@user/califx)
20:02:24 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:02:37 iqubic joins (~avi@2601:602:9502:c70:8f59:bc2:c041:8ab2)
20:03:22 califax joins (~califax@user/califx)
20:04:04 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
20:04:54 jakalx joins (~jakalx@base.jakalx.net)
20:05:14 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
20:06:53 CiaoSen joins (~Jura@p200300c9572e35002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
20:10:06 <enthropy> I solved my problem above and updated the gist. The issue is the same as: `(\e -> let ?x = "" in e) ?x` doesn't work like `let ?x = "" in ?x` does.
20:12:01 × acidjnk quits (~acidjnk@p200300d6e715c403c13dad5c816a3096.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
20:16:14 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 260 seconds)
20:16:27 Guest9971 joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
20:18:34 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
20:20:02 cyphase joins (~cyphase@user/cyphase)
20:20:12 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
20:21:42 × freeside quits (~mengwong@103.252.202.159) (Ping timeout: 272 seconds)
20:22:34 × trev quits (~trev@user/trev) (Remote host closed the connection)
20:23:37 × hueso quits (~root@user/hueso) (Quit: hueso)
20:23:54 acidjnk joins (~acidjnk@p200300d6e715c403c13dad5c816a3096.dip0.t-ipconnect.de)
20:25:22 justsomeguy joins (~justsomeg@user/justsomeguy)
20:33:10 caef^ joins (~caef@76.145.190.81)
20:33:12 freeside joins (~mengwong@103.252.202.159)
20:35:03 × enthropy quits (~enthropy@66.7.90.250) (Quit: Client closed)
20:41:37 briandaed joins (~briandaed@185.234.210.211.r.toneticgroup.pl)
20:55:24 panovia joins (~user@user/siracusa)
20:59:17 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:01:56 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
21:07:26 jmdaemon joins (~jmdaemon@user/jmdaemon)
21:08:49 echoreply joins (~echoreply@45.32.163.16)
21:15:39 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
21:16:08 wroathe joins (~wroathe@50.205.197.50)
21:16:08 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
21:16:08 wroathe joins (~wroathe@user/wroathe)
21:20:35 AlexNoo_ joins (~AlexNoo@178.34.160.164)
21:20:35 × Alex_test quits (~al_test@178.34.160.164) (Ping timeout: 268 seconds)
21:21:02 Alex_test joins (~al_test@178.34.160.164)
21:21:12 × AlexNoo quits (~AlexNoo@178.34.160.164) (Ping timeout: 268 seconds)
21:21:21 fizbin joins (~fizbin@user/fizbin)
21:21:23 AlexNoo_ is now known as AlexNoo
21:21:52 × AlexZenon quits (~alzenon@178.34.160.164) (Ping timeout: 272 seconds)
21:22:37 × briandaed quits (~briandaed@185.234.210.211.r.toneticgroup.pl) (Remote host closed the connection)
21:22:44 AlexZenon joins (~alzenon@178.34.160.164)
21:23:42 esph joins (~weechat@user/esph)
21:25:37 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds)
21:25:40 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
21:27:49 lbseale joins (~quassel@user/ep1ctetus)
21:28:29 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 246 seconds)
21:29:04 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
21:37:51 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
21:38:47 Lycurgus joins (~juan@user/Lycurgus)
21:40:49 hueso joins (~root@user/hueso)
21:45:06 wroathe_ joins (~wroathe@50.205.197.50)
21:45:38 × wroathe quits (~wroathe@user/wroathe) (Killed (NickServ (GHOST command used by wroathe_!~wroathe@50.205.197.50)))
21:45:47 wroathe_ is now known as wroathe
21:45:59 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
21:45:59 wroathe joins (~wroathe@user/wroathe)
21:50:55 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
21:53:35 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
21:53:54 × mechap quits (~mechap@user/mechap) (Ping timeout: 268 seconds)
21:55:02 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
21:55:23 mechap joins (~mechap@user/mechap)
22:01:23 gmg joins (~user@user/gehmehgeh)
22:02:02 × talismanick quits (~talismani@2601:644:9380:5c00::43de) (Ping timeout: 255 seconds)
22:02:18 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
22:06:32 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Remote host closed the connection)
22:06:50 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
22:08:18 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00)
22:08:21 × phma quits (phma@2001:5b0:210d:7648:cd95:5ae2:112e:6872) (Read error: Connection reset by peer)
22:09:02 phma joins (~phma@host-67-44-208-226.hnremote.net)
22:12:02 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
22:14:20 justsomeguy joins (~justsomeg@user/justsomeguy)
22:14:43 × boxscape_ quits (~boxscape_@81.191.27.107) (Quit: Connection closed)
22:14:50 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
22:15:08 L29Ah joins (~L29Ah@wikipedia/L29Ah)
22:15:24 <justsomeguy> Hi Haskell. I'm thinking of switching to GHCi as my interactive command-line shell, in order to learn by immersion. If you've tried this before -- how did it go?
22:16:18 <geekosaur> you probably want to look into
22:16:23 <geekosaur> @hackage turtle
22:16:24 <lambdabot> https://hackage.haskell.org/package/turtle
22:19:49 <justsomeguy> Oh, this is fun. :)
22:21:23 justsomeguy sips coffee while stack compiles 21 new packages...
22:23:14 <sm> beats punching in hex codes, eh ??
22:24:20 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
22:24:36 <DigitalKiwi> there's also shelly, shh, and HSH
22:24:58 <dolio> Yeah, I wouldn't use ghci as a shell. It's really not built for that.
22:25:21 <DigitalKiwi> https://gist.github.com/Kiwi/ffc08bffb15798dc4b1ec2a1c47c6191#file-program-cabal-hs
22:26:33 <justsomeguy> It's really just a way to force myself to interact with Haskell for learning purposes. I like learning this way. I learned the linux cli by switching to text mode and getting rid of my other OS. I also had python as my interactive prompt for a few months.
22:27:14 <dolio> It's probably worse than python. But the latter also sounds terrible to me.
22:27:52 <dolio> I use ghci any time I have, like, random calculations to do, though.
22:28:12 <[exa]> justsomeguy: force a hobby project into haskell, that helps. ghci isn't much of a productivity tool AFAIK, more like introspection/quickhacking/debugging
22:29:53 <DigitalKiwi> shellcheck is the closest i get to using haskell for my shell
22:30:23 <justsomeguy> You can even use it in your shell ^_^ https://github.com/HenrikBengtsson/shellcheck-repl
22:30:24 × igghibu quits (~igghibu@178.249.211.75) (Quit: igghibu)
22:30:25 <Jadesheit[m]> dolio: yup same
22:31:30 <DigitalKiwi> somehow i always end up stuck on the second step of the atrocious/marvelous bash one liners -> bash script -> haskell rewrite pipeline
22:32:01 <DigitalKiwi> dolio: yup i have ghci on my phone for that lol
22:32:33 <DigitalKiwi> https://github.com/t184256/nix-on-droid
22:33:04 <justsomeguy> To be honest I have way too many 30+ line bash scripts. I try to rewrite them a function at a time, but I'm just not that good at proper programming yet.
22:34:09 <dolio> Anyhow, you can do it. I just don't think you're going to enjoy writing `putStrLn =<< readCreateProcess (shell "ls") ""` instead of `ls`. And I'm not sure it'll actually teach much useful, either.
22:35:20 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
22:35:51 <DigitalKiwi> https://github.com/luke-clifton/shh
22:36:44 <DigitalKiwi> lol HSH https://wiki.github.com/jgoerzen/hsh
22:39:31 <DigitalKiwi> https://github.com/jekor/redo this is a fun project/video series
22:39:32 Guest6780 joins (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
22:39:51 <DigitalKiwi> https://www.youtube.com/watch?v=zZ_nI9E9g0I&list=PLxj9UAX4Em-Ij4TKwKvo-SLp-Zbv-hB4B
22:42:17 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:43:39 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
22:44:17 jpds joins (~jpds@gateway/tor-sasl/jpds)
22:45:12 × haritz quits (~hrtz@user/haritz) (Ping timeout: 252 seconds)
22:45:14 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
22:45:39 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
22:46:53 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:47:49 <DigitalKiwi> github be like never send that request again me be like i'm going to get everyone i know to send it
22:48:56 cheater_ joins (~Username@user/cheater)
22:50:10 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:51:51 × cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds)
22:52:00 cheater_ is now known as cheater
22:58:20 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:07:00 × Guest6780 quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 272 seconds)
23:09:49 × hashn3rd quits (~hashn3rd@ip72-221-42-80.ks.ks.cox.net) (Ping timeout: 252 seconds)
23:12:27 hashn3rd joins (~hashn3rd@ip72-221-42-80.ks.ks.cox.net)
23:20:55 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.7.1)
23:23:23 × acidjnk quits (~acidjnk@p200300d6e715c403c13dad5c816a3096.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:23:48 <energizer> looks like * needs Num. why can't it work on any old monoid?
23:24:54 <monochrom> Because any old monoid uses mappend, and any new monoid uses <>
23:25:04 <geekosaur> you're looking for `stimes`, I think
23:25:49 <geekosaur> and defining an operator to mean completely different things in different contexts is unprincipled
23:26:13 slack1256 joins (~slack1256@191.126.99.79)
23:26:30 <energizer> why doesn't <> do string concatenation?
23:26:43 <monochrom> But it does.
23:26:46 <geekosaur> > "hello" <> "World"
23:26:48 <lambdabot> "helloWorld"
23:27:09 <energizer> ghci> "ab <> "cd"
23:27:09 <energizer> <interactive>:9:12: error:
23:27:09 <energizer> lexical error in string/character literal at end of input
23:27:24 <energizer> oh jeez
23:27:28 <energizer> ok
23:27:43 <monochrom> I mean, it's not even a type error.
23:28:05 <energizer> is there a left-division and right-division operator?
23:28:53 <monochrom> hmatrix has them for matrices.
23:28:54 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 255 seconds)
23:29:11 <energizer> > 4 <> 5
23:29:13 <lambdabot> error:
23:29:13 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M880724369330...
23:29:13 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
23:29:26 <energizer> why doesn't that do multiplication?
23:29:37 <mauke> > let (*) = (<>) in 4 * 5 :: Sum
23:29:38 <lambdabot> error:
23:29:38 <lambdabot> • Expecting one more argument to ‘Sum’
23:29:38 <lambdabot> Expected a type, but ‘Sum’ has kind ‘* -> *’
23:29:45 <mauke> * :: Sum Int
23:29:49 <geekosaur> because there are two possible monoids for numbers
23:29:49 <mauke> heh
23:29:55 <mauke> > let (*) = (<>) in 4 * 5 :: Sum Int
23:29:57 <lambdabot> Sum {getSum = 9}
23:30:01 <mauke> there we go
23:30:03 <geekosaur> you have to pick one by using the Sum or Product newtype
23:30:29 <monochrom> No, my question is why doesn't it do bitwise xor.
23:30:35 <energizer> geekosaur: surely multiplication is the better one
23:30:36 <geekosaur> (well, a lot more than two, but two reasonable choices tfor "the" monoid)
23:30:42 <geekosaur> not so surely
23:31:04 <monochrom> At this point you are unable to distinguish between what you want and what other people want.
23:31:39 <mauke> why is multiplication better? it doesn't even have an inverse
23:31:54 <energizer> is it fair to say haskell's choice of what is "the monoid" for a type is "a judgment call"
23:32:08 <monochrom> Oh heh mauke you have a better point. :)
23:32:44 <energizer> mauke: multiplication doesn't have an inverse?
23:32:46 <monochrom> Has anything in programming not been a judgment call?
23:33:02 <darkling> monochrom: It's a matter of opinion. ;)
23:33:02 <energizer> yes lots of things have a single correct answer
23:33:03 <monochrom> Has programming ever been not a social construct?
23:33:15 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
23:33:44 <monochrom> Why didn't Turing invent the lambda calculus and why didn't Church invent the state-and-tape machine?
23:33:55 <mauke> energizer: what is the multiplicative inverse of 1 :: Integer?
23:34:04 <monochrom> And BTW yes invent not discover.
23:35:37 <energizer> what is the inverse operator of <> ?
23:36:50 max_ joins (~max@cpe-65-28-251-121.cinci.res.rr.com)
23:37:03 Inst_ joins (~Inst@2601:6c4:4081:54f0:d621:5cdd:9051:c240)
23:37:25 × hgolden quits (~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
23:37:45 × max_ quits (~max@cpe-65-28-251-121.cinci.res.rr.com) (Client Quit)
23:39:01 × mizlan quits (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
23:39:12 × tremon quits (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
23:39:37 myxokephale joins (~max@cpe-65-28-251-121.cinci.res.rr.com)
23:40:36 <energizer> if i can divide by a matrix, seems like i should be able to divide by a string to chop it off
23:41:01 × Inst quits (~Inst@2601:6c4:4081:54f0:d0af:c75:9422:ed4) (Ping timeout: 252 seconds)
23:41:44 <jackdk> https://hackage.haskell.org/package/monoid-subclasses-1.2.1/docs/Data-Semigroup-Cancellative.html#t:LeftReductive
23:44:16 × Guest9971 quits (~finn@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds)
23:45:26 <dolio> Because Church was trying to invent a meta-theory for variable binding of logic.
23:46:29 <mauke> ... and Turing was trying to invent a formal device for turning coffee into theorems?
23:50:50 <energizer> jackdk: that's cool, thanks
23:51:37 <dolio> Also, every time you add an instance for some random type that is probably unexpected (like saying that Strings being numbers), you have to weigh it against all the errors you're no longer going to get when you accidentally use the operations on the wrong type.
23:52:27 mizlan joins (~mizlan@c-67-169-7-31.hsd1.ca.comcast.net)
23:52:45 <energizer> strings being numbers isn't the idea; rather strings and numbers being monoids
23:53:10 <dolio> They already are both monoids.
23:53:28 <energizer> > 4 <> 5
23:53:30 <lambdabot> error:
23:53:30 <lambdabot> • Ambiguous type variable ‘a0’ arising from a use of ‘show_M438551538721...
23:53:31 <lambdabot> prevents the constraint ‘(Show a0)’ from being solved.
23:53:40 <mauke> strings and numbers aren't monoids
23:53:48 <dolio> Oh yeah.
23:53:50 <mauke> (strings, (++), "") is a monoid
23:53:58 <mauke> and so is (integers, (+), 0)
23:54:14 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:cc20:d690:f22b:cb00) (Remote host closed the connection)
23:55:11 <mauke> heh, or (Int, min, maxBound)
23:55:18 <dolio> Anyhow, you specifically brought up 'dividing' strings to chop them off.
23:55:24 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
23:55:26 <dolio> Which is also a number operation.
23:57:34 <monochrom> I just doubt that anyone who asks "why isn't <my POV> adopted in the standard" can accept "unexpected".
23:58:52 <energizer> idk what "unexpected" means there
23:59:49 <DigitalKiwi> are you only using prime numbers

All times are in UTC on 2023-01-07.