Home freenode/#haskell: Logs Calendar

Logs on 2020-11-02 (freenode/#haskell)

00:00:02 × strattog quits (~strattog@154.13.1.56) ()
00:00:07 × atk quits (~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
00:00:32 atk joins (~Arch-TK@erebus.the-tk.com)
00:02:17 conal joins (~conal@64.71.133.70)
00:02:25 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
00:02:46 × conal quits (~conal@64.71.133.70) (Client Quit)
00:04:05 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
00:08:02 sajith joins (~sajith@fsf/member/nonzen)
00:08:37 sajith_ joins (~sajith@fsf/member/nonzen)
00:09:21 Gurkenglas_ joins (Gurkenglas@gateway/vpn/protonvpn/gurkenglas)
00:10:05 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 268 seconds)
00:12:52 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 246 seconds)
00:14:04 × invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 240 seconds)
00:14:38 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
00:17:52 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
00:19:36 × nckx quits (~nckx@tobias.gr) (Quit: Updating my Guix System — https://guix.gnu.org)
00:19:52 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
00:20:19 conal joins (~conal@198.8.81.68)
00:20:42 sam___ joins (~sam@75.116.205.77.rev.sfr.net)
00:23:13 nckx joins (~nckx@tobias.gr)
00:24:31 invaser joins (~Thunderbi@31.148.23.125)
00:24:52 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
00:28:29 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
00:28:47 × invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 260 seconds)
00:31:38 aarvar joins (~foewfoiew@50.35.43.33)
00:32:14 fendor_ joins (~fendor@91.141.1.122.wireless.dyn.drei.com)
00:32:31 Varis joins (~Tadas@unaffiliated/varis)
00:34:08 × argent0 quits (~argent0@168.227.96.4) (Ping timeout: 268 seconds)
00:35:16 × fendor quits (~fendor@91.141.0.119.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
00:36:13 mimi_vx joins (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c)
00:37:03 × tmciver quits (~tmciver@cpe-172-101-40-226.maine.res.rr.com) (Quit: leaving)
00:37:22 tmciver joins (~tmciver@cpe-172-101-40-226.maine.res.rr.com)
00:39:34 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:39:43 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:41:04 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
00:41:06 xerox_ joins (~xerox@unaffiliated/xerox)
00:41:43 × bendo quits (~bendo@130.61.122.121) (Ping timeout: 256 seconds)
00:42:28 × Tario quits (~Tario@200.119.185.187) (Ping timeout: 260 seconds)
00:42:43 bendo joins (~bendo@130.61.122.121)
00:42:52 × Chi1thangoo quits (~Chi1thang@87.112.60.168) (Ping timeout: 272 seconds)
00:43:10 Tario joins (~Tario@201.191.91.236)
00:44:14 plutoniix joins (~q@175.176.222.7)
00:44:26 christo joins (~chris@81.96.113.213)
00:44:43 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 246 seconds)
00:45:32 × machinedgod quits (~machinedg@207.253.244.210) (Ping timeout: 256 seconds)
00:46:22 pera joins (~pera@unaffiliated/pera)
00:50:49 × Aquazi quits (uid312403@gateway/web/irccloud.com/x-qmwibrdpzphrklso) (Quit: Connection closed for inactivity)
00:51:42 <Raito_Bezarius> can I unpack Maybe [a] into [a] using prelude?
00:51:50 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
00:51:50 <Raito_Bezarius> saying that None → [] and Some l → l
00:51:57 Nachtgespenst joins (~user@unaffiliated/siracusa)
00:52:08 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
00:52:17 machinedgod joins (~machinedg@207.253.244.210)
00:52:20 <c_wraith> why Prelude in particular?
00:52:32 <Raito_Bezarius> hm, rather base libraries then
00:53:01 <c_wraith> :t fromMaybe []
00:53:03 <lambdabot> Maybe [a] -> [a]
00:53:07 mbomba joins (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca)
00:53:09 <Raito_Bezarius> thanks, c_wraith !
00:53:54 elliott__ joins (~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
00:54:09 christo joins (~chris@81.96.113.213)
00:54:38 argent0 joins (~argent0@168.227.96.4)
00:55:14 Axman6 joins (~Axman6@pdpc/supporter/student/Axman6)
00:55:33 Guest95559 joins (~ccallahan@139.28.218.148)
00:55:57 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
00:56:55 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
00:58:35 wroathe_ joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
00:59:06 × nerdypepper quits (nerdypeppe@152.67.160.69) (Quit: bye)
00:59:18 nerdypepper joins (nerdypeppe@152.67.160.69)
00:59:25 × DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Ping timeout: 246 seconds)
00:59:59 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
01:00:38 × sam___ quits (~sam@75.116.205.77.rev.sfr.net) (Ping timeout: 264 seconds)
01:01:06 Deide joins (~Deide@217.155.19.23)
01:02:19 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
01:02:37 carlomagno joins (~cararell@148.87.23.11)
01:03:14 × wroathe_ quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
01:05:01 × elliott__ quits (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 246 seconds)
01:06:31 × m0rphism quits (~m0rphism@HSI-KBW-046-005-177-122.hsi8.kabel-badenwuerttemberg.de) (Ping timeout: 260 seconds)
01:08:08 <koz_> foldMap (: []) works too I think?
01:09:37 DigitalKiWicked is now known as DigitalKiwi
01:10:47 × aarvar quits (~foewfoiew@50.35.43.33) (Ping timeout: 260 seconds)
01:10:50 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 264 seconds)
01:11:10 <MarcelineVQ> that'd be Maybe a -> [a] but foldMap id should be fine
01:13:28 <MarcelineVQ> > fold (Just [3]) -- I like to write fold instead of foldMap id tho
01:13:31 <lambdabot> [3]
01:13:53 conal joins (~conal@198.8.81.68)
01:14:01 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
01:14:23 <koz_> MarcelineVQ: You could do 'foldMap pure' as well.
01:14:28 <MarcelineVQ> 'just prelude' would be maybe [] id tho
01:14:33 <koz_> But fold is the slickest.
01:14:42 <koz_> 'foldMap id' is Prelude-only-able.
01:15:16 <MarcelineVQ> watch this shit
01:15:22 <MarcelineVQ> > concat (Just [3])
01:15:24 <lambdabot> [3]
01:16:04 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Ping timeout: 240 seconds)
01:16:25 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:17:35 <koz_> MarcelineVQ: Ooooooo
01:17:39 <koz_> SpoooOOOky
01:17:50 LambdaScientist joins (~Android@24.42.199.176)
01:18:18 <hololeap> was concat always Foldable t => t [a] -> [a]?
01:19:50 <davean> no, foldable didn't always exist, why?
01:21:44 aarvar joins (~foewfoiew@50.35.43.33)
01:22:14 × ericsagn1 quits (~ericsagne@2405:6580:0:5100:24ed:9b41:b671:d88b) (Ping timeout: 268 seconds)
01:22:38 Lord_of_Life_ joins (~Lord@46.217.223.45)
01:24:43 × Lord_of_Life quits (~Lord@46.217.216.248) (Ping timeout: 260 seconds)
01:25:29 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
01:29:44 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
01:30:15 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
01:30:19 christo joins (~chris@81.96.113.213)
01:31:43 danso joins (~dan@69-165-210-185.cable.teksavvy.com)
01:31:59 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
01:32:13 christo joins (~chris@81.96.113.213)
01:33:49 ericsagn1 joins (~ericsagne@2405:6580:0:5100:3b3a:dfa6:d69e:5cd8)
01:34:04 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
01:35:33 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
01:38:20 × urodna quits (~urodna@unaffiliated/urodna) (Read error: Connection reset by peer)
01:42:06 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
01:42:07 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 246 seconds)
01:42:10 <edwardk> clearly it should be redefined to 'foldMap toList', as the toList definition for list is the identify function, and then it can be (Foldable f, Foldable g) => f (g a) -> [a]
01:42:40 <edwardk> missed opportunity
01:43:14 jedws joins (~jedws@101.184.150.81)
01:43:22 <edwardk> we could kill so many catMaybes with that
01:44:00 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
01:46:12 × aarvar quits (~foewfoiew@50.35.43.33) (Ping timeout: 272 seconds)
01:46:40 <dolio> In Haskell 1.4 it was `MonadPlus m => [m a] -> m a`
01:48:03 × dmwit quits (~dmwit@pool-108-18-228-100.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
01:49:45 dmwit joins (~dmwit@pool-108-28-166-212.washdc.fios.verizon.net)
01:53:40 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Quit: WeeChat 2.9)
01:57:30 hackage gargoyle 0.1.1.0 - Automatically spin up and spin down local daemons https://hackage.haskell.org/package/gargoyle-0.1.1.0 (abrar)
01:58:31 hackage gargoyle-postgresql-nix 0.3.0.0, gargoyle-postgresql 0.2.0.0 (abrar): https://qbin.io/joint-mixer-6yez
01:59:12 × kjak quits (~kjak@pool-173-73-38-16.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
01:59:30 hackage gargoyle-postgresql-connect 0.1.0.0 - Connect to gargoyle-managed postgresql instances https://hackage.haskell.org/package/gargoyle-postgresql-connect-0.1.0.0 (abrar)
02:03:45 <hololeap> i just remembered it being [[a]] -> [a], but maybe this was a simplification presented to beginners
02:05:35 <davean> ew, ugly, who uses lists? :-p
02:06:09 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:08:01 × leah2 quits (~leah@vuxu.org) (Ping timeout: 264 seconds)
02:08:49 × Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
02:09:04 × alp quits (~alp@2a01:e0a:58b:4920:e0bd:5b09:72db:411d) (Ping timeout: 240 seconds)
02:10:16 <dsal> Is this #lisp?
02:10:44 <davean> Apparently.
02:10:58 <davean> /part
02:10:59 <nshepperd> hee, foldMap toList is a nice trick (but wait, is it efficient? maybe it should be toList . foldMap toDiffList)
02:11:04 <davean> /join #haskell
02:14:58 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
02:17:44 × akad_ quits (~akad@109107030050.radomsko.vectranet.pl) (Ping timeout: 240 seconds)
02:18:09 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
02:18:22 ronbrz joins (~ronbrz@207.229.174.134)
02:19:53 jbox joins (~atlas@unaffiliated/jbox)
02:20:17 × ech quits (~user@gateway/tor-sasl/ech) (Remote host closed the connection)
02:22:16 × bennofs1 quits (~benno@dslb-094-222-054-143.094.222.pools.vodafone-ip.de) (Quit: WeeChat 2.9)
02:22:50 Gurkenglas__ joins (~Gurkengla@unaffiliated/gurkenglas)
02:23:08 wei2912 joins (~wei2912@unaffiliated/wei2912)
02:23:44 <Raito_Bezarius> Dis there a way to easily debug when megaparsec seems to do an infinite loop?
02:23:46 <Raito_Bezarius> -d
02:23:57 <Raito_Bezarius> I tried to put dbg but it's quite tedious as I have many parsers
02:26:05 × Gurkenglas_ quits (Gurkenglas@gateway/vpn/protonvpn/gurkenglas) (Ping timeout: 240 seconds)
02:26:48 <dolio> It was [[a]] -> [a] in Haskell 98 and 2010, I think.
02:27:23 mimi_vx joins (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c)
02:30:34 <sm[m]> Raito_Bezarius: add a bunch of dbg, trace, or just an error call. Reload in ghci to see changes faster
02:30:58 <Raito_Bezarius> sm[m]: unfortunately adding a bunch didn't give me anything
02:31:11 <Raito_Bezarius> I think it was in the internals of makeExprTable
02:31:14 <Raito_Bezarius> or something
02:31:21 <sm[m]> move them around until you narrow down where it gets stuck
02:31:28 × stree quits (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
02:31:32 <sm[m]> or, comment out code until it stops doing that
02:31:46 stree joins (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
02:31:47 <Raito_Bezarius> I was wondering of a method which can "enable" some verbose mode in megaparsec in general
02:32:04 <Raito_Bezarius> this method of moving out things does not seem to scale well with a lot of parsers alas
02:32:16 <Raito_Bezarius> but maybe this is a proficiency thing
02:32:29 <Raito_Bezarius> (and I'm already using ghci+parseTest+reload)
02:32:41 <hololeap> \
02:33:01 <hololeap> dolio: good to know. i remember seeing that in a tutorial somewhere.
02:33:18 jbox parts (~atlas@unaffiliated/jbox) ("WeeChat 2.9")
02:34:03 <sm[m]> in hledger, I do it in two ways. 1, include debug/trace statements in most parsers, which activates only with --debug=N. 2, insert such statements temporarily where needed, for quick troubleshooting in GHCI
02:35:03 <hololeap> Raito_Bezarius: just found this https://hackage.haskell.org/package/megaparsec-9.0.1/docs/Text-Megaparsec-Debug.html
02:35:39 <hololeap> from here https://hoogle.haskell.org/?hoogle=debug%20package%3Amegaparsec
02:35:42 <sm[m]> Raito_Bezarius: 1 (permanent, optional tracing) is handy to see the big picture, and for troubleshooting user installations. 2 (temporary tracing) is good for targetted debugging
02:35:49 inkbottle joins (~inkbottle@aaubervilliers-654-1-1-110.w83-200.abo.wanadoo.fr)
02:36:13 <Raito_Bezarius> hololeap: this is the dbg I spoke about afaik
02:36:14 × jespada quits (~jespada@90.254.243.98) (Ping timeout: 272 seconds)
02:36:46 × zebrag quits (~inkbottle@aaubervilliers-654-1-111-120.w86-198.abo.wanadoo.fr) (Ping timeout: 256 seconds)
02:36:46 <Raito_Bezarius> if a dbgAll would exist and would recursively set dbg to all subparsers that'd be nice
02:36:51 <Raito_Bezarius> but I suppose it'd create too much verbose output
02:37:07 <sm[m]> yes that would be nice, and yes would need to be optional
02:37:22 <Raito_Bezarius> I agree that would have to be optional
02:38:09 <sm[m]> you might need a bit more practice, it shouldn't take too many traces & ghci reloads to narrow down the problem
02:38:20 jespada joins (~jespada@90.254.245.49)
02:38:23 <Raito_Bezarius> in fact, some minutes after I realized what was going on
02:38:32 <sm[m]> heh
02:38:32 <Raito_Bezarius> but I admit that with too much tiredness in the blood, it's quite hard
02:38:42 <Raito_Bezarius> so I was wondering of a better way :p
02:38:49 <Raito_Bezarius> thanks for the advice sm[m] though :)
02:39:17 <sm[m]> I think both ways have their uses.. and stepping in a debugger would also be a nice option, not so easy for us alas
02:40:33 × acidjnk_new quits (~acidjnk@p200300d0c7226044298aa97eef668aef.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
02:40:44 toorevitimirp joins (~tooreviti@117.182.183.132)
02:42:44 × machinedgod quits (~machinedg@207.253.244.210) (Ping timeout: 240 seconds)
02:42:58 × texasmynsted quits (~texasmyns@212.102.45.115) (Remote host closed the connection)
02:43:55 texasmynsted joins (~texasmyns@212.102.45.115)
02:44:01 <Raito_Bezarius> is there a way to create record using Applicative syntax?
02:45:26 <gobbleguy> Raito_Bezarius: this is doing that: https://github.com/glguy/irc-core/blob/v2/src/Client/Configuration/ServerSettings.hs#L421-L430
02:45:49 <gobbleguy> with the ApplicativeDo and RecordWildCards extensions
02:46:16 <Raito_Bezarius> thanks gobbleguy !
02:46:38 <sm[m]> and you know about doing it with function syntax I guess: Foo field1val field2val ...
02:46:48 × electricityZZZZ quits (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
02:47:00 <Raito_Bezarius> oh right, sm[m]
02:47:04 <Raito_Bezarius> nice :-)
02:47:28 <sm[m]> but RecordWildCards requires less maintenance as your record changes. Might also be more error-prone/less-readable for some
02:48:34 × texasmynsted quits (~texasmyns@212.102.45.115) (Ping timeout: 258 seconds)
02:48:38 × lemmih quits (~lemmih@2406:3003:2072:44:51b:ea3d:d135:394c) (Ping timeout: 264 seconds)
02:50:29 × ddellacosta quits (~dd@86.106.121.168) (Ping timeout: 258 seconds)
02:51:01 sm[m] loves RecordWildCards
02:51:23 lemmih joins (~lemmih@2406:3003:2072:44:2c90:c5a8:23d6:f0a8)
02:53:24 drbean joins (~drbean@TC210-63-209-71.static.apol.com.tw)
02:57:44 × xff0x quits (~fox@2001:1a81:5341:f200:c657:86c0:ac7a:d369) (Ping timeout: 240 seconds)
02:58:04 <xsperry> what would make it more error-prone?
02:58:17 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:59:12 akad_ joins (~akad@109107030050.radomsko.vectranet.pl)
02:59:44 <dsal> NamedFieldPuns
02:59:45 xff0x joins (~fox@2001:1a81:537c:3e00:a716:2819:5bdd:ec6f)
03:00:02 × Guest95559 quits (~ccallahan@139.28.218.148) ()
03:03:05 <dsal> Er, that'd make it less error prone.
03:03:57 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 260 seconds)
03:03:59 × darjeeling_ quits (~darjeelin@122.245.121.118) (Ping timeout: 268 seconds)
03:04:50 × juri_ quits (~juri@178.63.35.222) (Ping timeout: 264 seconds)
03:06:38 × meowphius quits (~meowphius@pool-96-237-166-172.bstnma.fios.verizon.net) (Ping timeout: 272 seconds)
03:06:54 machinedgod joins (~machinedg@207.253.244.210)
03:07:08 <dsal> gobbleguy: You can reduce the redundancy of the `fromMaybe "" <$> optSection'` there
03:07:54 × Gurkenglas__ quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 272 seconds)
03:07:55 <dsal> Actually, more than that.
03:08:51 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (barjavel.freenode.net (Nickname regained by services)))
03:09:00 lagothrix joins (~lagothrix@unaffiliated/lagothrix)
03:10:20 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:12:03 × machinedgod quits (~machinedg@207.253.244.210) (Ping timeout: 260 seconds)
03:15:54 darjeeling_ joins (~darjeelin@115.215.40.228)
03:20:10 × dmwit quits (~dmwit@pool-108-28-166-212.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
03:21:54 dmwit joins (~dmwit@pool-108-28-166-212.washdc.fios.verizon.net)
03:22:04 guest112 joins (~user@49.5.6.87)
03:23:50 elliott__ joins (~elliott@pool-108-51-141-12.washdc.fios.verizon.net)
03:24:56 mbomba joins (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca)
03:25:12 × nerdypepper quits (nerdypeppe@152.67.160.69) (Quit: bye)
03:26:30 nerdypepper joins (nerdypeppe@152.67.160.69)
03:26:45 SqueakyBeaver joins (4a823731@cpe-74-130-55-49.kya.res.rr.com)
03:28:25 × theDon quits (~td@94.134.91.196) (Ping timeout: 240 seconds)
03:29:16 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Ping timeout: 268 seconds)
03:30:37 theDon joins (~td@muedsl-82-207-238-028.citykom.de)
03:32:29 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Read error: Connection reset by peer)
03:33:12 Stanley00 joins (~stanley00@unaffiliated/stanley00)
03:33:13 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 264 seconds)
03:34:00 mimi_vx joins (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c)
03:36:30 hackage macrm 1.0.0.5 - Alternative rm command for macOS that remove files/dirs to the system trash https://hackage.haskell.org/package/macrm-1.0.0.5 (satosystems)
03:44:26 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
03:44:58 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
03:45:19 christo joins (~chris@81.96.113.213)
03:47:58 <dsal> Woah, that's a lot of code.
03:49:31 <MarcelineVQ> system $ printf "mv %s %s" file dest
03:49:57 <dsal> https://github.com/dustin/trash/blob/master/trash.m <-- I wrote this in objc using the native support for trashing.
03:50:16 <MarcelineVQ> kernel support for trashring?
03:51:47 <dsal> The ~/.Trash thing is kind of special and the behavior of dragging files in is a little magic. The second time you drop a file in with the same name, e.g., you get some anti-collision stuff and such.
04:03:52 × akad_ quits (~akad@109107030050.radomsko.vectranet.pl) (Ping timeout: 256 seconds)
04:04:46 falafel joins (~falafel@24-223-105-148.static.cablene.com)
04:04:54 petersen joins (~petersen@redhat/juhp)
04:05:10 × jedws quits (~jedws@101.184.150.81) (Quit: My MacBook has gone to sleep. ZZZzzz…)
04:08:26 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 264 seconds)
04:10:05 × rekahsoft quits (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
04:17:00 × johnw quits (~johnw@haskell/developer/johnw) (Quit: ZNC - http://znc.in)
04:23:24 × SqueakyBeaver quits (4a823731@cpe-74-130-55-49.kya.res.rr.com) (Ping timeout: 245 seconds)
04:27:04 jedws joins (~jedws@101.184.150.81)
04:41:36 johnw joins (~johnw@haskell/developer/johnw)
04:42:35 dyeplexer joins (~lol@unaffiliated/terpin)
04:43:37 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Read error: Connection reset by peer)
04:43:46 Saukk joins (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4)
04:44:06 Stanley00 joins (~stanley00@unaffiliated/stanley00)
04:52:22 × wei2912 quits (~wei2912@unaffiliated/wei2912) (Remote host closed the connection)
04:54:03 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
04:54:58 × vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving)
04:55:17 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
04:55:25 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
04:56:04 × Axman6 quits (~Axman6@pdpc/supporter/student/Axman6) (Remote host closed the connection)
05:04:26 × Tario quits (~Tario@201.191.91.236) (Ping timeout: 272 seconds)
05:05:44 × sh9 quits (~sh9@softbank060116136158.bbtec.net) (Quit: sh9)
05:08:26 × Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 264 seconds)
05:08:37 justsomeguy joins (~justsomeg@216.186.218.241)
05:08:37 × justsomeguy quits (~justsomeg@216.186.218.241) (Changing host)
05:08:37 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
05:10:32 Tario joins (~Tario@200.119.185.133)
05:13:26 × yinfeng quits (~yinfeng@2001:250:5002:8100::1:851e) (Quit: WeeChat 2.9)
05:14:05 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
05:17:44 × conal quits (~conal@198.8.81.68) (Ping timeout: 272 seconds)
05:19:02 <jackdk> Where do the names `Star` and `Costar` come from? (The ones that appear in `profunctors`)
05:21:30 × xff0x quits (~fox@2001:1a81:537c:3e00:a716:2819:5bdd:ec6f) (Ping timeout: 268 seconds)
05:21:57 xff0x joins (~fox@2001:1a81:537c:3e00:c8f2:34d9:3609:f336)
05:24:27 conal joins (~conal@198.8.81.68)
05:24:30 christo joins (~chris@81.96.113.213)
05:25:09 mimi_vx joins (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c)
05:26:18 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
05:26:53 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
05:31:04 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
05:31:14 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
05:31:34 yinfeng joins (~yinfeng@2001:250:5002:8100::1:851e)
05:31:39 <int-e> jackdk: I guess a combination of notation, namely F^*, and an affinity for movie references.
05:32:59 reset joins (~reset@84.39.116.180)
05:33:29 <int-e> http://blog.sigfpe.com/2011/07/profunctors-in-haskell.html called them UpStar for F^* and DownStar for F_*
05:38:05 × LambdaScientist quits (~Android@24.42.199.176) (Quit: -a- Connection Timed Out)
05:38:40 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Quit: WeeChat 2.9)
05:39:24 × yinfeng quits (~yinfeng@2001:250:5002:8100::1:851e) (Quit: WeeChat 2.9)
05:40:49 × is_null quits (~jpic@pdpc/supporter/professional/is-null) (Ping timeout: 246 seconds)
05:40:56 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:41:15 yinfeng joins (~yinfeng@2001:250:5002:8100::1:851e)
05:41:38 LambdaScientist joins (~LambdaSci@24.42.199.176)
05:41:42 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
05:42:06 LambdaScientist joins (~LambdaSci@24.42.199.176)
05:42:10 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
05:42:23 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
05:42:38 LambdaScientist joins (~LambdaSci@24.42.199.176)
05:42:42 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
05:43:08 LambdaScientist joins (~LambdaSci@24.42.199.176)
05:43:13 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
05:43:23 × argent0 quits (~argent0@168.227.96.4) (Remote host closed the connection)
05:43:25 day_ joins (~Unknown@unaffiliated/day)
05:43:39 LambdaScientist joins (~LambdaSci@24.42.199.176)
05:43:44 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
05:44:08 × Saukk quits (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) (Remote host closed the connection)
05:46:24 × day quits (~Unknown@unaffiliated/day) (Ping timeout: 240 seconds)
05:46:24 day_ is now known as day
05:47:20 <jackdk> so the Costar thing is a pun, like Biff/Tannen?
05:49:28 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
05:49:31 is_null joins (~jpic@pdpc/supporter/professional/is-null)
05:51:24 <int-e> jackdk: well, maybe :)
05:51:38 <int-e> but there is also an actual duality
05:57:00 knupfer joins (~Thunderbi@87.123.206.240)
05:59:06 × mokulus_ quits (~mat@176.111.230.96) (Read error: Connection reset by peer)
05:59:41 mokulus_ joins (~mat@176.111.230.96)
05:59:44 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 268 seconds)
06:00:01 × reset quits (~reset@84.39.116.180) ()
06:00:32 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
06:01:46 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds)
06:06:02 × knupfer quits (~Thunderbi@87.123.206.240) (Ping timeout: 264 seconds)
06:11:02 coot joins (~coot@37.30.60.135.nat.umts.dynamic.t-mobile.pl)
06:11:09 <danso> i see this pattern often in my code where i end up in many nested `case` expressions
06:11:13 <danso> https://github.com/ninedotnine/soucc/blob/main/src/TypeChecker/TypeChecker.hs#L61-L75
06:11:43 <danso> usually `do` notation makes these go away, but here it only works for the outer monad (State)
06:11:51 <danso> and i would like it to work with Either as well
06:12:09 <danso> i'm sure i've read about the cure for this problem on a blog somewhere, but i don't know how to find it now. help?
06:12:37 knupfer joins (~Thunderbi@200116b82c45b30000b473fffe3f50e6.dip.versatel-1u1.de)
06:12:37 × knupfer quits (~Thunderbi@200116b82c45b30000b473fffe3f50e6.dip.versatel-1u1.de) (Client Quit)
06:12:52 knupfer joins (~Thunderbi@87.123.206.240)
06:13:24 <jackdk> danso: sounds like a job for monad transformers, specifically ExceptT
06:13:58 <jackdk> if I understand you correctly, you can temporarily work with a transformer, you don't have to use it all over your program
06:14:35 <jackdk> `run_globals defns = runExceptT $ do ...` etc
06:15:31 <danso> thanks, i will start reading
06:15:48 <danso> this occurs in many places in my program; maybe it would be appropriate to use ExceptT throughout
06:16:25 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
06:17:18 × knupfer quits (~Thunderbi@87.123.206.240) (Ping timeout: 260 seconds)
06:19:39 × is_null quits (~jpic@pdpc/supporter/professional/is-null) (Ping timeout: 260 seconds)
06:20:24 dorkside9 joins (~tdbgamer@208.190.197.222)
06:21:14 juri_ joins (~juri@178.63.35.222)
06:21:19 × dorkside quits (~tdbgamer@208.190.197.222) (Ping timeout: 268 seconds)
06:21:19 dorkside9 is now known as dorkside
06:22:50 × falafel quits (~falafel@24-223-105-148.static.cablene.com) (Ping timeout: 264 seconds)
06:24:45 × ski quits (~ski@nc-2504-30.studat.chalmers.se) (Ping timeout: 240 seconds)
06:25:44 ski joins (~ski@nc-2504-30.studat.chalmers.se)
06:29:18 × drbean quits (~drbean@TC210-63-209-71.static.apol.com.tw) (Ping timeout: 272 seconds)
06:36:48 × Jeanne-Kamikaze quits (~Jeanne-Ka@68.235.43.86) (Ping timeout: 256 seconds)
06:38:02 <danso> does it make a difference whether i use `StateT s (Either e a)` or `ExceptT e (State s) a` ?
06:43:14 × xff0x quits (~fox@2001:1a81:537c:3e00:c8f2:34d9:3609:f336) (Ping timeout: 264 seconds)
06:44:07 xff0x joins (~fox@2001:1a81:537c:3e00:f9de:e525:5d75:c389)
06:45:59 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
06:46:15 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
06:47:05 berberman joins (~berberman@unaffiliated/berberman)
06:52:14 <int-e> danso: They're isomorphic as types, but the latter has a handy Monad instance that propagates errors (approximately what your `case`s do)
06:52:36 <int-e> (or exceptions, whatever)
06:54:08 <int-e> danso: Err
06:54:52 <int-e> danso: Sorry, I misread because the former is wrong... you must have meant StateT s (Either e) a.
06:55:29 <int-e> danso: In which case, the main difference is that the former will forget the state on an exception/error.
06:55:50 <danso> ah i see i mistyped
06:55:56 <danso> oops
06:56:02 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:56:12 <danso> okay, i definitely want to keep the state
06:56:15 <danso> thanks int-e
06:56:52 Axman6 joins (~Axman6@pdpc/supporter/student/Axman6)
06:56:52 <danso> curious, why does that happen?
06:58:44 × elliott__ quits (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
06:59:00 drbean joins (~drbean@TC210-63-209-59.static.apol.com.tw)
06:59:46 <int-e> @unmtl StateT s (Either e a)
06:59:46 <lambdabot> err: `StateT s (Either e a)' is not applied to enough arguments, giving `/\A. s -> Either e a (A, s)'
06:59:51 <int-e> @unmtl StateT s (Either e) a
06:59:51 <lambdabot> s -> Either e (a, s)
07:00:19 mimi_vx joins (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c)
07:00:29 <int-e> Because StateT puts the resulting state into the monadic return value and Either's Left doesn't have one.
07:00:41 <int-e> @unmtl ErrorT e (State s) a
07:00:41 <lambdabot> s -> (Either e a, s)
07:01:05 × yinfeng quits (~yinfeng@2001:250:5002:8100::1:851e) (Quit: WeeChat 2.9)
07:01:19 × toorevitimirp quits (~tooreviti@117.182.183.132) (Quit: Konversation terminated!)
07:01:51 <int-e> Whereas this always has a state. (ErrorT is a bit weird and deprecated, but @unmtl doesn't know ExceptT)
07:02:45 <danso> ah thanks, the ErrorT left me confused
07:03:35 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
07:04:36 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
07:05:22 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Read error: Connection reset by peer)
07:08:25 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 240 seconds)
07:08:31 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
07:08:46 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:09:33 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Remote host closed the connection)
07:09:39 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
07:10:31 × Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
07:11:27 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
07:14:09 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
07:17:10 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
07:17:34 berberman joins (~berberman@unaffiliated/berberman)
07:17:53 chaosmasttter joins (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de)
07:19:27 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
07:21:13 <energizer> what is the name of the function that takes f : X -> Y and Either X Null, if a is Null returns Null otherwise `f a`?
07:22:31 <energizer> (forgive my word choice, i'm not experienced with this kind of stuff)
07:22:40 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
07:23:59 <energizer> for example, it takes addOne and either a number or null, and if it's null returns null, but otherwise increments the number
07:24:48 <energizer> f addOne null = null; f addOne 3 = 4
07:25:17 <danso> what you're talking about is basically fmap
07:25:35 <danso> but you seem to be mixing a few different ideas here
07:25:41 <energizer> oh?
07:25:55 × ski quits (~ski@nc-2504-30.studat.chalmers.se) (Ping timeout: 260 seconds)
07:25:58 × sfvm quits (~sfvm@37.228.215.148) (Remote host closed the connection)
07:26:03 <danso> @t fmap
07:26:04 <lambdabot> Maybe you meant: tell thank you thanks thesaurus thx tic-tac-toe ticker time todo todo-add todo-delete type v @ ? .
07:26:13 <danso> @type fmap
07:26:14 <lambdabot> Functor f => (a -> b) -> f a -> f b
07:26:43 <danso> is your `Null` defined like `data Null = Null` ?
07:27:02 <danso> i think you most likely mean Maybe instead of Either
07:27:05 frankie2 joins (~frankie@185.104.184.43)
07:27:30 <energizer> Maybe sounds like like it's in the right direction
07:27:52 <danso> also fmap on Either maps a function over the right side, not the left one
07:28:15 <danso> fmap on maybe is
07:28:28 <danso> fmap f (Just a) = Just (f a)
07:28:35 <danso> fmap f Nothing = Nothing
07:28:44 <energizer> yeah that's what i mean ^
07:29:19 <danso> if you want to get cute you could use <$> or <&>
07:29:36 <dminuoso> In fact, <$> is very typical
07:29:44 <danso> a <&> f is the same as `fmap f a`
07:30:10 <dminuoso> With a bit of squinting <$> behaves a bit like ($), which is possibly why they both have a dollar in their name.
07:32:16 sQVe joins (~sQVe@unaffiliated/sqve)
07:32:44 <energizer> how is <$> used here?
07:33:10 <danso> f <$> a
07:33:30 <danso> `<$>` is the same as `flip <&>`
07:33:34 <danso> @type <$>
07:33:36 <lambdabot> error: parse error on input ‘<$>’
07:33:38 christo joins (~chris@81.96.113.213)
07:33:40 <danso> @type (<$>)
07:33:42 <lambdabot> Functor f => (a -> b) -> f a -> f b
07:35:12 <energizer> ok i get it
07:35:45 <dminuoso> c.f.:
07:35:48 <dminuoso> :t ($)
07:35:49 <lambdabot> (a -> b) -> a -> b
07:37:10 dhouthoo joins (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
07:37:17 <energizer> is <$> or <&> more used?
07:37:27 <dminuoso> <$> by far
07:37:45 <dminuoso> Depending on the project and situation you might either see fmap or <$> being used more
07:37:51 <dminuoso> Sometimes its handy to use both at the same time
07:37:59 <dminuoso> fmap f <$> g
07:38:00 × Tario quits (~Tario@200.119.185.133) (Ping timeout: 256 seconds)
07:38:42 Tario joins (~Tario@201.191.91.236)
07:39:03 <danso> haskellers are pretty inconsistent on this point, you can see
07:39:29 <danso> <$> is preferred over <&> but >>= is preferred over =<<
07:39:39 <dminuoso> Dunno about that
07:39:43 <dminuoso> I prefer =<< by far :p
07:40:03 <danso> and i prefer <&> !
07:40:04 <dminuoso> In fact, =<< often arises when I write code with <$> first, just to realize it should have been bind instead.
07:40:13 <danso> i don't think either of us are in the majority though :^)
07:40:15 <dminuoso> I found <&> to be useful in writing decoders :)
07:40:44 <dminuoso> f x 1 = getWord32 <&> Something
07:40:48 <dminuoso> f x 2 = getWord32 <&> AnotherThing
07:41:00 <dminuoso> For a sufficiently large f this aligns much more nicer
07:41:08 <danso> one of the haskell survey questions should have been >>= vs =<<
07:41:21 <danso> pity we just missed it
07:41:29 <dminuoso> Didn't get the memo
07:42:50 toorevitimirp joins (~tooreviti@117.182.183.132)
07:45:50 <energizer> why is it called <&> ?
07:46:28 <dminuoso> energizer: Presmuably because (&) is a flipped ($)
07:46:39 <dminuoso> % :t ($)
07:46:40 <yahb> dminuoso: (a -> b) -> a -> b
07:46:43 <dminuoso> % :t (<$>)
07:46:43 <yahb> dminuoso: Functor f => (a -> b) -> f a -> f b
07:46:46 <dminuoso> % :t ($)
07:46:46 <yahb> dminuoso: (a -> b) -> a -> b
07:46:49 <dminuoso> % :t (<$>)
07:46:49 <yahb> dminuoso: Functor f => (a -> b) -> f a -> f b
07:47:08 <dminuoso> % :t (<&>)
07:47:09 <yahb> dminuoso: Functor f => f a -> (a -> b) -> f b
07:47:10 <dminuoso> Sorry
07:47:12 <dminuoso> :)
07:47:17 <dminuoso> % :t (&)
07:47:17 <yahb> dminuoso: a -> (a -> b) -> b
07:47:27 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
07:48:26 Sanchayan joins (~Sanchayan@106.200.218.30)
07:48:48 christo joins (~chris@81.96.113.213)
07:48:51 <energizer> alright, so why are they called & and $ ?
07:49:05 <danso> dminuoso, the survey is definitely still open
07:49:08 <danso> i believe it was posted today
07:49:28 <danso> energizer, because they're common things to do, so they should be short
07:50:27 <energizer> $ kinda looks like flipping, yknow
07:50:57 mimi1vx joins (~mimi@tulipan.habr.nat.praha12.net)
07:51:11 <energizer> & is like 'and' but i'm not sure if fmap is related to 'and'
07:51:15 <dminuoso> Well you have to call them something..
07:51:33 <dminuoso> There's very limited ASCII characters available
07:52:34 <energizer> yeah sometimes notation is just "gotta pick something" and sometimes there's a hidden connection to some concept
07:52:38 <danso> i think you have misunderstood
07:52:44 <danso> $ is apply
07:52:48 <danso> as in function application
07:52:53 <danso> f(x) is f $ x
07:52:54 <dminuoso> energizer: I dont think there's a particular reason for those choices on function application.
07:53:14 <danso> & is apply with its arguments flipped, so x & f is f(x)
07:53:36 <energizer> mhmm
07:53:47 <danso> the parallel is that <$> is fmap and <&> is fmap with its args flipped
07:54:00 <dminuoso> energizer: You could ask on haskell-cafe though, if you're curious.
07:54:02 × mimi_vx quits (~mimi@2a01:490:16:1026:8cbe:b3f3:f284:209c) (Ping timeout: 264 seconds)
07:54:10 <energizer> ok that does make it clearer. thanks.
07:54:14 <dminuoso> It's possible someone there knows of a connection, perhaps they were burrowed from another language
07:54:30 <dminuoso> Or maybe from some field in mathematics
07:54:54 <dminuoso> Though I think the primary reason would be
07:55:18 <dminuoso> There aren't many other characters ASCII characters left that suggest different things
07:55:28 cosimone joins (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
07:55:35 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
07:55:44 <dminuoso> -+*^ are already used for arithmatic
07:55:51 <danso> i don't know of languages that predate haskell that use an operator for fn application
07:56:04 <dminuoso> @ cant be used as a standalone operator because its used for as-paterns
07:56:11 <danso> i suspect the same as you. what else would it be? @? #? ~?
07:56:17 vicfred joins (~vicfred@unaffiliated/vicfred)
07:56:32 <dminuoso> So what you're left with is #, $ and &
07:56:42 <danso> @-patterns were only added into ghc in the last few years, i think
07:56:42 <lambdabot> Unknown command, try @list
07:56:50 <dminuoso> Oh, then include @ in that list
07:57:02 <danso> $ definitely predates it by at least 15 years
07:57:04 <dminuoso> Out of those, perhaps $ renders less widely and reads better than the rest.
07:57:19 <energizer> coulda been `??` ?
07:57:25 <dminuoso> Sure, could have.
07:57:45 <dminuoso> But then you'd ask "why chose ?? and not $" :)
07:57:51 <energizer> heheh
07:58:09 <danso> is ? actually used for anything other than implicit params?
07:58:23 <danso> it might not be an allowed operator character
07:58:29 <dminuoso> % f ? g = f + g
07:58:29 <yahb> dminuoso: ; <interactive>:324:1: warning: [-Wname-shadowing] This binding for `f' shadows the existing binding defined at <interactive>:168:1
07:58:31 <dminuoso> Seems fine
07:58:51 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
07:58:53 <danso> hm, i don't recall ever seeing it used
07:59:21 idhugo joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
07:59:21 <dminuoso> ? is used a lot in lens operators
07:59:30 <dminuoso> Think it's usually for things that deal with Maybe
07:59:48 <dminuoso> % :t (?~)
07:59:48 <yahb> dminuoso: ASetter s t a (Maybe b) -> b -> s -> t
08:00:01 <danso> i could see it working as the function `Maybe a -> a -> a`
08:00:02 <dminuoso> % :t (^?)
08:00:02 <yahb> dminuoso: s -> Getting (First a) s a -> Maybe a
08:02:23 × sQVe quits (~sQVe@unaffiliated/sqve) (Quit: Bye!)
08:05:35 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
08:06:07 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
08:06:40 <energizer> that's like regex
08:07:59 × Inoperable quits (~PLAYER_1@fancydata.science) (Excess Flood)
08:09:07 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
08:09:54 leah2 joins (~leah@vuxu.org)
08:10:36 chele joins (~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
08:11:01 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
08:11:18 kritzefitz joins (~kritzefit@fw-front.credativ.com)
08:14:43 Inoperable joins (~PLAYER_1@fancydata.science)
08:15:32 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
08:16:52 × danso quits (~dan@69-165-210-185.cable.teksavvy.com) (Quit: WeeChat 2.9)
08:20:43 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
08:21:57 manu1511 joins (~manu@194-208-201-025.tele.net)
08:22:04 manu1511 parts (~manu@194-208-201-025.tele.net) ()
08:23:36 × drbean quits (~drbean@TC210-63-209-59.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin1 - https://znc.in)
08:27:02 alp joins (~alp@88.126.45.36)
08:27:31 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Remote host closed the connection)
08:28:02 thir joins (~thir@pd9e1bd8a.dip0.t-ipconnect.de)
08:28:14 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
08:28:22 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
08:30:44 × cosimone quits (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
08:31:05 cosimone joins (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
08:31:52 <merijn> Don't forget !? from containers
08:32:05 × thir quits (~thir@pd9e1bd8a.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
08:32:44 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
08:32:44 × Stanley00 quits (~stanley00@unaffiliated/stanley00) ()
08:34:53 × cosimone quits (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
08:35:15 cosimone joins (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd)
08:36:10 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
08:36:16 <tomsmeding> Accelerate has (?) for the infix if-operator of the EDSL: https://hackage.haskell.org/package/accelerate-1.3.0.0/docs/Data-Array-Accelerate.html#v:-63- (warning, large page)
08:38:46 cfricke joins (~cfricke@unaffiliated/cfricke)
08:41:39 × alp quits (~alp@88.126.45.36) (Remote host closed the connection)
08:41:49 britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch)
08:42:02 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-almrgtblciiegvzz) (Quit: Connection closed for inactivity)
08:43:19 × Inoperable quits (~PLAYER_1@fancydata.science) (Excess Flood)
08:43:38 borne joins (~fritjof@200116b864ec3c00c8b76624f4b75a13.dip.versatel-1u1.de)
08:47:10 <tomsmeding> programming language documentation pages are the best browser benchmarks nowadays
08:47:28 Franciman joins (~francesco@host-79-36-167-172.retail.telecomitalia.it)
08:50:15 Neo-- joins (~neo@188-230-154-134.dynamic.t-2.net)
08:51:01 Inoperable joins (~PLAYER_1@fancydata.science)
08:51:22 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
08:51:26 Varis joins (~Tadas@unaffiliated/varis)
08:51:42 Stanley00 joins (~stanley00@unaffiliated/stanley00)
08:52:00 hackage cobot-io 0.1.3.9 - Biological data file formats and IO https://hackage.haskell.org/package/cobot-io-0.1.3.9 (ozzzzz)
08:56:08 × britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
08:56:18 todda7 joins (~torstein@2a02:587:d28:2900:bd30:f5ea:90f2:33aa)
08:58:34 × bliminse quits (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 246 seconds)
08:58:36 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
08:58:42 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
08:59:28 bliminse joins (~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
09:00:01 × frankie2 quits (~frankie@185.104.184.43) ()
09:03:03 × cosimone quits (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Remote host closed the connection)
09:03:04 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
09:03:32 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
09:05:58 × jneira quits (501e64fa@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.100.250) (Ping timeout: 268 seconds)
09:07:19 × chkno quits (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer)
09:07:29 chkno joins (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net)
09:07:44 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
09:14:48 thc202 joins (~thc202@unaffiliated/thc202)
09:17:31 britva joins (~britva@2a02:aa13:7240:2980:fc63:822e:7d74:772d)
09:17:44 flatmap joins (~flatmap@p200300dd370a47007ce3847efe0685c7.dip0.t-ipconnect.de)
09:23:01 × day quits (~Unknown@unaffiliated/day) (Ping timeout: 264 seconds)
09:23:12 m0rphism joins (~m0rphism@HSI-KBW-046-005-177-122.hsi8.kabel-badenwuerttemberg.de)
09:23:12 day joins (~Unknown@unaffiliated/day)
09:26:47 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
09:27:11 sam___ joins (~sam@228.175.185.81.rev.sfr.net)
09:28:54 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
09:30:14 kuribas joins (~user@ptr-25vy0i9b0d7gsf4mjtv.18120a2.ip6.access.telenet.be)
09:31:33 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
09:33:06 × bliminse quits (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 256 seconds)
09:33:25 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
09:33:45 bliminse joins (~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
09:36:48 × xff0x quits (~fox@2001:1a81:537c:3e00:f9de:e525:5d75:c389) (Ping timeout: 268 seconds)
09:37:18 xff0x joins (~fox@2001:1a81:537c:3e00:725d:2adb:f456:fdfe)
09:37:56 yinfeng joins (~yinfeng@2001:250:5002:8100::5e0b)
09:38:15 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
09:39:32 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
09:40:13 jonathanx joins (~jonathan@dyn-8-sc.cdg.chalmers.se)
09:40:23 DavidEichmann joins (~david@43.240.198.146.dyn.plus.net)
09:44:12 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 268 seconds)
09:44:23 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
09:44:32 LambdaScientist joins (~LambdaSci@24.42.199.176)
09:44:36 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
09:44:42 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
09:45:00 hackage sdl2 2.5.3.0 - Both high- and low-level bindings to the SDL library (version 2.0.6+). https://hackage.haskell.org/package/sdl2-2.5.3.0 (OliverCharles)
09:45:01 LambdaScientist joins (~LambdaSci@24.42.199.176)
09:45:05 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
09:45:30 LambdaScientist joins (~LambdaSci@24.42.199.176)
09:45:33 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
09:45:57 LambdaScientist joins (~LambdaSci@24.42.199.176)
09:46:00 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
09:46:26 LambdaScientist joins (~LambdaSci@24.42.199.176)
09:46:30 × LambdaScientist quits (~LambdaSci@24.42.199.176) (Excess Flood)
09:47:58 berberman_ joins (~berberman@unaffiliated/berberman)
09:49:14 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
09:50:05 × britva quits (~britva@2a02:aa13:7240:2980:fc63:822e:7d74:772d) (Quit: This computer has gone to sleep)
09:50:11 × flatmap quits (~flatmap@p200300dd370a47007ce3847efe0685c7.dip0.t-ipconnect.de) (Quit: Textual IRC Client: www.textualapp.com)
09:55:34 donri joins (~donri@139.28.218.148)
09:56:22 pera joins (~pera@unaffiliated/pera)
09:58:29 britva joins (~britva@31.10.157.156)
09:59:12 × guest112 quits (~user@49.5.6.87) (Remote host closed the connection)
09:59:43 × dustypacer quits (~pi@2600:6c50:80:2f4a:e9d0:6569:1cea:d1d4) (Read error: Connection reset by peer)
10:01:03 ski joins (~ski@remote11.chalmers.se)
10:06:47 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
10:09:31 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
10:13:51 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
10:14:15 tuple joins (~igloo@c-67-169-78-228.hsd1.ca.comcast.net)
10:14:42 × tuple quits (~igloo@c-67-169-78-228.hsd1.ca.comcast.net) (Client Quit)
10:18:44 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
10:20:28 × geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 272 seconds)
10:22:01 hackage postgresql-libpq 0.9.4.3 - low-level binding to libpq https://hackage.haskell.org/package/postgresql-libpq-0.9.4.3 (phadej)
10:22:26 acidjnk_new joins (~acidjnk@p200300d0c72260501db9c4f6165b2eaf.dip0.t-ipconnect.de)
10:22:46 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
10:23:03 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
10:27:10 nshepperd26 joins (~nshepperd@li364-218.members.linode.com)
10:27:13 eedgit22 joins (~chat.free@95.179.237.21)
10:27:46 × rotaerk quits (~rotaerk@ender.afternet.org) (Ping timeout: 265 seconds)
10:27:50 stree_ joins (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
10:27:53 × pjb quits (~t@2a01cb04063ec5002c0fc7d86fb8e728.ipv6.abo.wanadoo.fr) (Read error: Connection reset by peer)
10:27:53 × nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Read error: Connection reset by peer)
10:27:54 × stree quits (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Excess Flood)
10:27:54 × eedgit2 quits (~chat.free@95.179.237.21) (Read error: Connection reset by peer)
10:27:54 × p3n quits (~p3n@217.198.124.246) (Ping timeout: 260 seconds)
10:27:54 nshepperd26 is now known as nshepperd2
10:27:54 eedgit22 is now known as eedgit2
10:27:56 × nekomune quits (~nekomune@comfy.moe) (Quit: ZNC 1.7.2 - https://znc.in)
10:28:03 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
10:28:14 nekomune joins (~nekomune@comfy.moe)
10:28:15 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 265 seconds)
10:29:20 alp joins (~alp@2a01:e0a:58b:4920:34a0:e5bb:3231:c2c3)
10:29:57 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Read error: Connection reset by peer)
10:30:24 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
10:32:44 khaladrogo_lite joins (~khaladrog@2405:204:5204:7e58:f1ab:1e40:6c9b:8f55)
10:34:46 × rprije quits (~rprije@194-193-168-77.tpgi.com.au) (Ping timeout: 268 seconds)
10:35:01 × sam___ quits (~sam@228.175.185.81.rev.sfr.net) (Ping timeout: 264 seconds)
10:39:33 ubert joins (~Thunderbi@p200300ecdf1e53d1e6b318fffe838f33.dip0.t-ipconnect.de)
10:45:33 LKoen joins (~LKoen@79.160.9.109.rev.sfr.net)
10:50:06 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
10:55:18 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
10:55:27 whatisRT joins (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f)
10:56:54 sam___ joins (~sam@5.197.204.77.rev.sfr.net)
10:57:13 sh9 joins (~sh9@softbank060116136158.bbtec.net)
10:57:27 pjb joins (~t@2a01cb04063ec5002c0fc7d86fb8e728.ipv6.abo.wanadoo.fr)
11:01:25 rotaerk joins (rotaerk@2600:3c02::f03c:91ff:fe70:4a45)
11:01:27 × nkly quits (~nkly@ip5b40d080.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
11:01:42 domjancik joins (~domj@77.139.218.14)
11:02:00 × domj quits (~domj@77.139.218.14) (Ping timeout: 256 seconds)
11:02:26 × Codaraxis quits (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 264 seconds)
11:02:31 nkly joins (~nkly@ip5b40d080.dynamic.kabel-deutschland.de)
11:03:15 is_null joins (~jpic@pdpc/supporter/professional/is-null)
11:05:30 Codaraxis joins (~Codaraxis@ip68-5-90-227.oc.oc.cox.net)
11:06:35 × rotaerk quits (rotaerk@2600:3c02::f03c:91ff:fe70:4a45) (Ping timeout: 272 seconds)
11:06:52 × darjeeling_ quits (~darjeelin@115.215.40.228) (Quit: WeeChat 2.9)
11:07:53 darjeeling_ joins (~darjeelin@115.215.40.228)
11:12:12 <dminuoso> Is using equality constraints as "type level let-bindings" a sane thing to do?
11:12:12 × Codaraxis quits (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 256 seconds)
11:12:41 <dminuoso> in particular to sort of "bind the result of a tyfam"
11:13:03 <dminuoso> e.g. `forall m s. (m ~ MappedInto s, Foo s, Bar m, Quux m) => ...`
11:14:36 Codaraxis joins (~Codaraxis@ip68-5-90-227.oc.oc.cox.net)
11:15:26 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
11:15:45 cfricke joins (~cfricke@unaffiliated/cfricke)
11:16:34 Eason0210 joins (~user@101.85.10.81)
11:16:55 × sam___ quits (~sam@5.197.204.77.rev.sfr.net) (Ping timeout: 260 seconds)
11:17:27 sam___ joins (~sam@5.197.204.77.rev.sfr.net)
11:21:52 × zincy__ quits (~tom@host86-169-79-54.range86-169.btcentralplus.com) (Remote host closed the connection)
11:23:36 × Tario quits (~Tario@201.191.91.236) (Ping timeout: 256 seconds)
11:25:42 × Codaraxis quits (~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Remote host closed the connection)
11:26:16 Tario joins (~Tario@200.119.184.48)
11:27:38 × chaosmasttter quits (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
11:30:32 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
11:33:46 × LKoen quits (~LKoen@79.160.9.109.rev.sfr.net) (Remote host closed the connection)
11:34:35 × ubert quits (~Thunderbi@p200300ecdf1e53d1e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
11:35:16 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
11:36:50 × whatisRT quits (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f) (Quit: ZNC 1.7.5 - https://znc.in)
11:37:26 × Eason0210 quits (~user@101.85.10.81) (Quit: ERC (IRC client for Emacs 28.0.50))
11:40:03 × xelxebar quits (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 240 seconds)
11:40:46 xelxebar joins (~xelxebar@gateway/tor-sasl/xelxebar)
11:41:33 meowphius joins (~meowphius@pool-96-237-166-172.bstnma.fios.verizon.net)
11:42:27 Eason0210 joins (~user@101.85.10.81)
11:44:26 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Ping timeout: 264 seconds)
11:45:03 × SupaYoshi quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Quit: Goodbye!)
11:47:26 × _xor quits (~xor@74.215.46.133) (Ping timeout: 264 seconds)
11:47:26 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
11:49:57 drbean joins (~drbean@TC210-63-209-202.static.apol.com.tw)
11:51:19 chaosmasttter joins (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de)
11:52:26 × donri quits (~donri@139.28.218.148) (Remote host closed the connection)
11:52:51 rotaerk joins (rotaerk@2600:3c02::f03c:91ff:fe70:4a45)
11:53:27 Aquazi joins (uid312403@gateway/web/irccloud.com/x-onbapdmfluqaidcp)
11:56:34 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
11:57:07 × Tario quits (~Tario@200.119.184.48) (Ping timeout: 258 seconds)
11:59:35 Tario joins (~Tario@200.119.184.48)
12:01:00 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
12:01:56 _xor joins (~xor@74.215.46.133)
12:06:38 × britva quits (~britva@31.10.157.156) (Quit: This computer has gone to sleep)
12:07:00 wei2912 joins (~wei2912@unaffiliated/wei2912)
12:07:11 LKoen joins (~LKoen@79.160.9.109.rev.sfr.net)
12:08:45 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
12:09:08 <matthew-> is there a ghc command or something that'll tell me how an expression is being bracketed?
12:10:13 SupaYoshi joins (~supayoshi@213-10-140-13.fixed.kpn.net)
12:10:14 <matthew-> in res = Subst $ Map.map (apply (Subst s1)) s2 `Map.union` s1, I'm assuming the s2 is an arg to Map.map, and not an arg to Map.union
12:10:17 <merijn> matthew-: No, but you can query the precedence of operators via ":i"
12:10:58 <merijn> matthew-: Easy answer, infix precedence is *always* lower than function application
12:11:47 <merijn> matthew-: infix precedence ranges from 0 to 9, function application has precedence 10 (and record syntax has 11, but that's a bit niche), so 's2' is indeed an argument to Map.map
12:11:57 <matthew-> ahh yes, I remember that rule.
12:12:00 <matthew-> cool, thank you very much.
12:12:12 <merijn> % :i `elem`
12:12:12 <yahb> merijn: type Foldable :: (* -> *) -> Constraint; class Foldable t where; ...; elem :: Eq a => a -> t a -> Bool; ...; -- Defined in `Data.Foldable'; infix 4 `elem`
12:12:25 <Uniaika> I feel like the bracketing is Subst $ (Map.map (apply (Subst s1)) s2) `Map.union` s1
12:12:47 <Uniaika> that's my intuition
12:12:58 × plutoniix quits (~q@175.176.222.7) (Quit: Leaving)
12:13:00 <merijn> matthew-: So ":i `Map.union`" in ghci should tell you its precedence
12:13:30 hackage haskoin-core 0.17.1 - Bitcoin & Bitcoin Cash library for Haskell https://hackage.haskell.org/package/haskoin-core-0.17.1 (jprupp)
12:13:37 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
12:14:22 invaser joins (~Thunderbi@31.148.23.125)
12:15:44 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
12:18:34 <typetetris> ... is there any benefit to learning arrows and this "arrow style" ? Looking into the niv source code it seems to be some kind of obfuscation technique to scare people away.
12:18:52 <merijn> typetetris: Not really
12:19:02 <merijn> typetetris: Arrow as an abstraction is mostly obsolete
12:19:26 <typetetris> If it is obsolete, what is its replacement?
12:19:57 <merijn> Category from Control.Category, Applicative, and Profunctor all replace different aspects of it
12:20:27 × Stanley00 quits (~stanley00@unaffiliated/stanley00) ()
12:20:49 <merijn> There's no real "this replaces all of Arrow" thing, it's mostly that Arrow had rather limited applicability and different aspects of it have been subsumed by more useful abstraction (like those 3)
12:20:58 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
12:21:35 <typetetris> merijn: Is there some introductory material for the combination of those three things? (Like the papers mentioned in https://downloads.haskell.org/ghc/latest/docs/html/users_guide/glasgow_exts.html#arrow-notation for arrows for example)
12:21:44 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
12:22:10 <merijn> No clue, I'm just parrotting people from here :p
12:23:47 <matthew-> merijn: yup, I would really like an editor mode where it does all those lookups for me and draws in the parens - would aid code comprehension imo
12:24:10 × sam___ quits (~sam@5.197.204.77.rev.sfr.net) (Ping timeout: 256 seconds)
12:25:04 × acidjnk_new quits (~acidjnk@p200300d0c72260501db9c4f6165b2eaf.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
12:25:42 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
12:25:44 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
12:26:01 sam___ joins (~sam@48.16.23.93.rev.sfr.net)
12:27:01 × khaladrogo_lite quits (~khaladrog@2405:204:5204:7e58:f1ab:1e40:6c9b:8f55) (Quit: Leaving)
12:29:00 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
12:29:06 brisbin joins (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
12:30:04 khaladrogo joins (~khaladrog@2405:204:5204:7e58:f1ab:1e40:6c9b:8f55)
12:30:45 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
12:33:14 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
12:35:04 × Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection)
12:36:04 × brisbin quits (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net) (Ping timeout: 240 seconds)
12:36:55 <matthew-> when implementing a language - a mini-haskell if you like - is there any downside to treating every let as if it's a let-rec ?
12:37:10 Ariakenom joins (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se)
12:37:45 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 258 seconds)
12:37:52 <matthew-> (from a DHM type-inference pov)
12:37:58 <ski> let x = foo 42 in let x = bar 3 x in let x = baz (frob x) in ..x..
12:38:19 <merijn> matthew-: Have you heard of our Lord and Saviour TaPL? ;)
12:38:22 <merijn> @where tapl
12:38:22 <lambdabot> "Types and Programming Languages" by Benjamin C. Pierce in 2002-02-01 at <https://www.cis.upenn.edu/~bcpierce/tapl/>
12:38:35 <matthew-> yeah, I have it in front of me, along with Advanced...
12:38:48 urodna joins (~urodna@unaffiliated/urodna)
12:39:21 <merijn> matthew-: I recall there being a discussion of the difficulty with recursive bindings at some point in TaPL, but I don't quite recall where, tbh
12:40:49 <matthew-> I have working DHM based on constraint generation as in Advanced Topics in .... Inference for recursive functions is just fine, it's just the recursive call must be the same monotype. Only the let-binding gets generalised to the principle type
12:41:33 <matthew-> if you treat let rec x = foo as let x = fix (\x -> foo) then it seems to me like you don't need let on its own
12:42:13 <jophish> 'cabal.project.local file already exists. Now overwriting it'
12:42:27 <jophish> Wtf cabal, I spent ages writing that...
12:42:27 <merijn> You never *need* let, you can always achieve it via lambda binding
12:42:43 <merijn> jophish: It makes a backup
12:42:55 <merijn> Should be in cabal.project.local~
12:43:08 <jophish> Ah I see
12:43:12 <matthew-> aye, true. So then my puzzlement is why does eg ML have both let and let rec?
12:43:16 <merijn> jophish: Also, it only does that if you run configure, whose explicit only purpose is to create cabal.project.local?
12:43:21 lucasb joins (uid333435@gateway/web/irccloud.com/x-pojwugqdpwttxqdq)
12:43:30 <jophish> Oh
12:43:53 <jophish> Configure generates an empty project.local, even though I'm setting a flag
12:43:56 <merijn> jophish: Also, if you cared about persisting whatever you wrote in .local it should probably be in cabal.project? :)
12:44:24 × Kaivo quits (~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9)
12:44:26 <jophish> merijn: I don't want it in version control
12:44:27 <merijn> jophish: Is that flag already set in cabal.project maybe?
12:44:37 <jophish> Nope
12:44:47 <jophish> I'm setting it to not the default too
12:44:47 <ski> matthew- : convenience. ability to do the example i had above, with that ordering of subexpressions
12:44:48 <merijn> hmm, what's the command?
12:44:55 <jophish> Sorry for my terseness, I'm on mobile
12:45:23 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
12:45:31 FreeBirdLjj joins (~freebirdl@101.228.42.108)
12:45:39 <jophish> Cabal configure -fgeneric-instances
12:46:16 <jophish> https://github.com/expipiplus1/vulkan/blob/68638aceeb5526b3bf53674f06dc24243d7fda32/.github/workflows/ci.yml#L89
12:46:19 <merijn> jophish: That is not a cabal flag?
12:46:57 <matthew-> ski: gotcha - that makes sense - it's about allowing control of the scope of the binder then.
12:47:01 <jophish> It's a flag for a package in this project
12:47:06 <jophish> Hahah, did I get it wrong!
12:47:27 <ski> matthew- : you can also imagine things like `let (m,n) = (n,m+n) in ..m..n..' .. or having a `case' or conditional as the body of the defining equation, in a more complicated case
12:48:00 <merijn> jophish: So you wanna set that flag for CI?
12:48:07 ubert joins (~Thunderbi@p200300ecdf1e53d1e6b318fffe838f33.dip0.t-ipconnect.de)
12:48:34 <ski> matthew- : if you combine two declarations into one, you can combine them sequentially, collaterally, or recursively
12:48:35 <merijn> jophish: Alternate simpler idea: Why not have a dedicated separate project file for the CI config and setting the flag in there?
12:50:12 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
12:50:25 Kaivo joins (~Kaivo@104-200-86-99.mc.derytele.com)
12:50:26 × FreeBirdLjj quits (~freebirdl@101.228.42.108) (Ping timeout: 268 seconds)
12:51:10 jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de)
12:51:42 geekosaur joins (ac3a8c5f@172.58.140.95)
12:52:50 bqv joins (~bqv@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
12:52:57 <bqv> d.nnr
12:53:08 <bqv> *hello
12:53:14 <ski> hello
12:53:17 <bqv> oh, ski
12:53:21 <bqv> fancy seeing you here
12:53:44 <bqv> have you ever used Foreign.Marshal.Alloc? bizarrely, malloc causes ghc to error with undefined, but mallocBytes doesn't
12:54:15 <merijn> Malloc with what argument?
12:54:26 <bqv> malloc doesn't require an argument
12:54:36 notmyname joins (~notmyname@84.39.116.180)
12:54:36 <bqv> Storable a => IO (Ptr a)
12:54:41 <bqv> :t malloc
12:54:42 <ski> perhaps the `Storable' instance is incorrect ?
12:54:43 <lambdabot> error: Variable not in scope: malloc
12:54:45 <merijn> Well, what result type, I mean
12:54:46 <bqv> ack.
12:54:51 <ski> @type Foreign.Marshal.Alloc.malloc
12:54:52 <lambdabot> Foreign.Storable.Storable a => IO (GHC.Ptr.Ptr a)
12:55:04 <bqv> it's a custom storable
12:55:16 <bqv> i would be hardpressed to see how the instance is wrong
12:55:49 texasmynsted joins (~texasmyns@212.102.45.115)
12:55:52 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
12:55:54 <bqv> and like i said, if i just use mallocBytes (sizeof <type>) instead, it works fine
12:56:00 sord937 joins (~sord937@gateway/tor-sasl/sord937)
12:56:10 <ski> not your instance then, i take it
12:56:33 <bqv> ah, it is my instance. I have it setup using hsc2hs
12:56:42 <bqv> i checked the value of sizeOf and alignment using trace, they're fine
12:56:46 <bqv> (best i can tell)
12:56:52 <jophish> Merijn, and then mv project.ci project.local during the build instead of configure?
12:57:11 <matthew-> ski: thank you, that all makes sense
12:57:22 <merijn> jophish: eh, or just use --project-file to point it at the right one? ;)
12:57:36 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
12:57:38 <jophish> Ah, even better
12:57:48 <merijn> jophish: Almost as if this was an anticipated usecae ;)
12:58:18 <ski> bqv : "error with undefined", as when forcing `undefined' ?
12:58:19 × Eason0210 quits (~user@101.85.10.81) (Quit: ERC (IRC client for Emacs 28.0.50))
12:58:38 <bqv> yes
12:58:48 <bqv> specifically shows me an undefined coming from Alloc.hs
12:58:57 <bqv> (in Foreign.Marshal)
12:59:42 <merijn> bqv: Can you pastebin your Storable instance somewhere?
13:00:39 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
13:00:42 × texasmynsted quits (~texasmyns@212.102.45.115) (Ping timeout: 272 seconds)
13:01:15 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Client Quit)
13:01:28 <bqv> https://termbin.com/7z9jm
13:01:33 <bqv> merijn: happy to oblige
13:01:50 <merijn> bqv: You fucked up sizeof :)
13:01:55 <merijn> You pattern match
13:01:56 <bqv> oh no
13:01:59 <bqv> why
13:02:13 <merijn> sizeOf shouldn't evaluate it's argument, it's only for type inference
13:02:26 <merijn> sizeOf is usually called with undefined as argument (which is what malloc does)
13:02:36 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
13:02:38 <bqv> oh balls. hence i end up forcing that undefined
13:02:45 <bqv> gotcha. thanks
13:02:47 <merijn> bqv: So malloc calls "sizeOf undefined" and then crashed on the pattern match ;)
13:02:51 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
13:03:11 <merijn> Nowadays people would use "Proxy" to control the type inference, but that didn't exist when Storable was defined
13:03:33 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Read error: Connection reset by peer)
13:03:33 <bqv> i remember delving into that once
13:03:52 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
13:04:01 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Client Quit)
13:04:06 domj joins (~domj@77.139.218.14)
13:06:19 × domjancik quits (~domj@77.139.218.14) (Ping timeout: 256 seconds)
13:06:57 <kuribas> :t asTypeOf
13:06:57 __monty__ joins (~toonn@unaffiliated/toonn)
13:06:58 <lambdabot> a -> a -> a
13:09:03 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Remote host closed the connection)
13:09:49 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
13:10:05 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
13:10:33 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Read error: Connection reset by peer)
13:11:06 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 258 seconds)
13:11:29 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
13:11:59 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Max SendQ exceeded)
13:12:05 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
13:12:36 florian_ joins (~florian@85-170-214-92.rev.numericable.fr)
13:13:33 × florian_ quits (~florian@85-170-214-92.rev.numericable.fr) (Remote host closed the connection)
13:14:05 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
13:15:10 texasmynsted joins (~texasmyns@212.102.45.115)
13:15:17 × khaladrogo quits (~khaladrog@2405:204:5204:7e58:f1ab:1e40:6c9b:8f55) (Remote host closed the connection)
13:19:32 akad_ joins (~akad@109107030050.radomsko.vectranet.pl)
13:20:35 × texasmynsted quits (~texasmyns@212.102.45.115) (Ping timeout: 260 seconds)
13:21:12 × jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Quit: WeeChat 2.9)
13:23:44 × alp quits (~alp@2a01:e0a:58b:4920:34a0:e5bb:3231:c2c3) (Ping timeout: 240 seconds)
13:26:16 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
13:26:19 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection)
13:27:14 cfricke joins (~cfricke@unaffiliated/cfricke)
13:28:52 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
13:30:20 britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch)
13:31:37 × akad_ quits (~akad@109107030050.radomsko.vectranet.pl) (Ping timeout: 260 seconds)
13:31:51 ggole joins (~ggole@2001:8003:8119:7200:c42a:651c:d46:c888)
13:33:36 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 268 seconds)
13:37:09 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
13:41:03 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
13:41:12 machinedgod joins (~machinedg@207.253.244.210)
13:43:27 × Sanchayan quits (~Sanchayan@106.200.218.30) (Quit: leaving)
13:44:18 khaladrogo joins (~khaladrog@2405:204:5217:6256:258b:d489:f19c:6ea7)
13:44:51 × xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 260 seconds)
13:45:37 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
13:46:12 × drbean quits (~drbean@TC210-63-209-202.static.apol.com.tw) (Ping timeout: 260 seconds)
13:47:36 Chi1thangoo joins (~Chi1thang@87.112.60.168)
13:49:30 hackage http-rfc7807 0.1.0.0 - RFC7807 style response messages https://hackage.haskell.org/package/http-rfc7807-0.1.0.0 (PeterTrsko)
13:50:00 texasmynsted joins (~texasmyns@212.102.45.115)
13:51:40 <dminuoso> merijn: Interestingly, sizeOf *should* not be fed with undefined.
13:51:46 <dminuoso> In most cases there are proper values around
13:52:43 <dminuoso> Storable is quite unusable for flexible length things, even if you implement sizeOf to use it, `with` will feed you an undefined rather than the argument.
13:53:02 <dminuoso> alloca = allocaBytesAligned (sizeOf (undefined :: a)) (alignment (undefined :: a))
13:54:22 × texasmynsted quits (~texasmyns@212.102.45.115) (Ping timeout: 260 seconds)
13:57:06 × Ariakenom quits (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se) (Ping timeout: 256 seconds)
13:57:43 alp joins (~alp@2a01:e0a:58b:4920:34a0:e5bb:3231:c2c3)
13:58:57 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
13:59:17 <bqv> lucky for me, i'm just interfacing a pretty basic C library
13:59:26 <bqv> either way, thanks friends, it works!
13:59:30 × todda7 quits (~torstein@2a02:587:d28:2900:bd30:f5ea:90f2:33aa) (Ping timeout: 268 seconds)
14:00:52 × britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
14:01:44 Ariakenom joins (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se)
14:02:43 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:04:39 nbloomf joins (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1)
14:07:56 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
14:08:30 zx__ joins (~oracle@unaffiliated/oracle)
14:09:13 × kish` quits (~oracle@unaffiliated/oracle) (Disconnected by services)
14:09:19 zx__ is now known as kish`
14:09:49 × sam___ quits (~sam@48.16.23.93.rev.sfr.net) (Ping timeout: 264 seconds)
14:10:08 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 256 seconds)
14:11:18 sam___ joins (~sam@187.164.185.81.rev.sfr.net)
14:11:26 <idnar> merijn: nowadays I use TypeApplications instead of Proxy :P
14:11:40 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
14:11:48 britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch)
14:12:33 × machinedgod quits (~machinedg@207.253.244.210) (Quit: leaving)
14:12:50 DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
14:12:54 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
14:13:09 × eedgit quits (~eedgit@95.179.237.21) (Quit: Ping timeout (120 seconds))
14:13:18 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:419f:7551:94a4:41c1) (Quit: My MacBook has gone to sleep. ZZZzzz…)
14:13:29 eedgit joins (~eedgit@95.179.237.21)
14:14:49 machinedgod joins (~machinedg@207.253.244.210)
14:18:42 × Tario quits (~Tario@200.119.184.48) (Ping timeout: 256 seconds)
14:18:48 <dminuoso> idnar: Congratulations, you now rely on an unstable API
14:19:17 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
14:19:26 <dminuoso> Do you have polykinds? Then you better also explicitly quantify those, or you dont have compatibility with 8.8
14:19:30 <dminuoso> (Or was it 8.10?)
14:19:45 <dminuoso> And you must constantly live with the fact that GHC can just change the order of type variables,
14:20:03 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
14:21:49 Ariakenom_ joins (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se)
14:22:40 <davean> dminuoso: Yah the type variable order thing with TypeApplication is insane :(
14:23:04 <davean> I only use type application with explicite forall
14:23:04 × andi- quits (~andi-@NixOS/user/andi-) (Remote host closed the connection)
14:23:20 <dminuoso> davean: Indeed. I tend to only use it for Proxy
14:23:22 <idnar> dminuoso: that certainly sounds like me! I think it won't reorder if you have explicit `forall`, and not working on a library means I care less about compat
14:23:45 Tario joins (~Tario@200.119.184.48)
14:23:48 × Ariakenom quits (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
14:24:09 <davean> idnar: it won't reorder the type variables listed in the forall, correct.
14:24:10 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
14:24:51 <idnar> but I basically have every extension on at this point :P
14:24:52 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
14:24:58 <dminuoso> idnar: Next up, you can only apply visible type arguments
14:25:06 <dminuoso> In some situations that can be really annoying
14:25:10 × stree_ quits (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
14:25:27 stree joins (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net)
14:25:30 <merijn> idnar: Right, but almost no one has explicit forall in their code and most people don't consider "type variable order" part of their public API for PVP purposes
14:25:45 × Ariakenom_ quits (~Ariakenom@h-158-174-186-203.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
14:26:32 andi- joins (~andi-@NixOS/user/andi-)
14:26:59 <idnar> merijn: yeah, my comment was firmly tongue-in-cheek :)
14:27:00 <dminuoso> I mean if you use it for Proxy, then TypeApplications is completely benign and great. If its internal, well you have enough weapons to hurt yourself anyway, but for public API its best to just use Proxy
14:27:02 <dminuoso> oh
14:27:32 <dminuoso> idnar: Its interesting how Haskell seems to be split into two kinds of people
14:27:54 <dminuoso> Those who progressively end up with nearly all extensions enabled, and those who fight against any extension.
14:28:00 <dminuoso> I seem to belong to the former group
14:28:09 <dminuoso> Rarey do I have a module with less than 8 extensions...
14:28:45 <dminuoso> TypeFamilies, ScopedTypeVariables, RankNTypes are currently my favourite ones..
14:29:05 <davean> I'm kinda in the middle
14:29:15 <idnar> I ran into an awkward spot with GADTs and skolems where I had to use a proxy to make it work
14:30:01 <dminuoso> % let f = id in f @Int 1
14:30:01 <yahb> dminuoso: ; <interactive>:329:15: error:; * Cannot apply expression of type `a0 -> a0'; to a visible type argument `Int'; * In the expression: f @Int 1; In the expression: let f = id in f @Int 1; In an equation for `it': it = let f = id in f @Int 1
14:30:06 <dminuoso> It's easy to hit the limits of TA :)
14:30:58 <dminuoso> davean: Where do you draw the line?
14:31:26 <dminuoso> Are there particular extensions you dont like? Or is there a maximum number of extensions?
14:31:44 <merijn> I prefer non-infectious extensions
14:32:00 <merijn> i.e. where the consumer of the code doesn't need the extension
14:32:15 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
14:32:52 × yumh quits (~yumh@mail.xglobe.in) (Ping timeout: 256 seconds)
14:33:18 × wei2912 quits (~wei2912@unaffiliated/wei2912) (Remote host closed the connection)
14:33:26 <dminuoso> merijn: Question, do you ever use OverloadedStrings?
14:33:29 <dminuoso> say for text
14:33:41 <dminuoso> (I know you can use T.pack, but lets face it, who does it)
14:33:55 <geekosaur> OerloadedStrings is not something where use internally forces use externally
14:34:04 <dminuoso> Ah
14:34:06 <merijn> I don't really like it, but yes
14:34:07 <geekosaur> it's a convenience externally
14:35:30 hackage prolude 0.0.0.5 - ITProTV's custom prelude https://hackage.haskell.org/package/prolude-0.0.0.5 (saramuse)
14:35:43 × bliminse quits (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 265 seconds)
14:36:27 bliminse joins (~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
14:36:59 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
14:39:11 Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net)
14:39:30 hackage primitive-unlifted 1.0.0.0 - Primitive GHC types with unlifted types inside https://hackage.haskell.org/package/primitive-unlifted-1.0.0.0 (andrewthad)
14:39:33 × sam___ quits (~sam@187.164.185.81.rev.sfr.net) (Quit: Lost terminal)
14:41:30 hackage persistent 2.10.5.3 - Type-safe, multi-backend data serialization. https://hackage.haskell.org/package/persistent-2.10.5.3 (parsonsmatt)
14:43:14 LKoen_ joins (~LKoen@79.160.9.109.rev.sfr.net)
14:44:31 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
14:45:32 × LKoen quits (~LKoen@79.160.9.109.rev.sfr.net) (Ping timeout: 260 seconds)
14:47:04 <bqv> dminuoso: I used to
14:47:14 <bqv> I used to avoid every and all extensions
14:47:24 <bqv> That meant a lot of pack
14:47:30 × geekosaur quits (ac3a8c5f@172.58.140.95) (Remote host closed the connection)
14:47:31 <bqv> And a lot of unpack
14:48:02 × borne quits (~fritjof@200116b864ec3c00c8b76624f4b75a13.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
14:48:05 <bqv> Sometimes in that order...
14:48:41 <dminuoso> bqv: What about packages that impose FlexibleContexts/FlexibleInstances on you?
14:48:53 <dminuoso> Especially since 8.10 it's getting increasingly harder to avoid extensions
14:49:07 <dminuoso> (The change itself is welcome, but the impact could be undesirable)
14:49:11 <bqv> Never had the pleasure of one back then
14:49:15 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
14:49:54 <bqv> Nowadays of course, my haskell files come with lists of extensions like I'm ordering á la carte
14:50:11 <bqv> If I can't have none, not much point being skiddish
14:50:24 × chaosmasttter quits (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
14:50:41 × alx741 quits (~alx741@186.178.110.178) (Ping timeout: 268 seconds)
14:51:05 <bqv> I would care about portable haskell, but ghc has a pretty unholy monopoly thats really not going anywhere anyway
14:52:24 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
14:56:44 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
14:56:54 × idhugo quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 258 seconds)
14:58:48 Gurkenglas__ joins (~Gurkengla@unaffiliated/gurkenglas)
14:59:30 hackage wai-log 0.3.0.0 - A logging middleware for WAI applications https://hackage.haskell.org/package/wai-log-0.3.0.0 (jonathanjouty_scrive)
15:00:01 × notmyname quits (~notmyname@84.39.116.180) ()
15:00:34 × nkly quits (~nkly@ip5b40d080.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
15:01:27 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
15:01:49 × toorevitimirp quits (~tooreviti@117.182.183.132) (Remote host closed the connection)
15:02:28 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Read error: Connection reset by peer)
15:04:11 PacoV joins (2d535a95@gateway/web/cgi-irc/kiwiirc.com/ip.45.83.90.149)
15:04:46 <PacoV> Hi there.
15:04:57 alx741 joins (~alx741@186.178.110.193)
15:05:20 <yushyin> Hi PacoV
15:05:42 <PacoV> I've multiple functions of type "a -> mb" and a list of "[a]".
15:06:06 <PacoV> At the moment I do "mapM_ function list" for each function.
15:06:34 <PacoV> Is there a way to call every function with the list as arguments (and discard the result)?
15:07:42 <dminuoso> PacoV: That's still traverse_/mapM_
15:08:01 <dminuoso> traverse ($ xs) [f, g, h]
15:08:04 <dminuoso> traverse_ ($ xs) [f, g, h]
15:08:43 <dminuoso> % traverse_ ($ "foo") [putStr, putStr, putStr]
15:08:43 <yahb> dminuoso: foofoofoo
15:08:45 × sveit quits (~sveit@2001:19f0:ac01:247:5400:ff:fe5c:689f) (Quit: Bye)
15:08:49 <PacoV> Ok, I'll have a look at traverse.
15:08:56 <merijn> dminuoso: That's just a single item, though, not a list of items
15:09:00 <dminuoso> PacoV: traverse/traverse_ are just mapM/mapM_
15:09:13 <PacoV> Ho, so, not enough.
15:09:16 Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net)
15:09:17 <merijn> :t \fs as -> mapM_ (sequence fs) as
15:09:18 <lambdabot> (Monad m, Traversable m, Foldable t) => m (a -> b) -> t a -> m ()
15:09:22 <dminuoso> merijn: huh?
15:09:22 <merijn> boom
15:09:29 texasmynsted joins (~texasmyns@212.102.45.115)
15:09:33 <merijn> dminuoso: He wants to apply a list of functions to a list of values
15:09:52 <dminuoso> Guess there's two ways to read this..
15:10:21 <merijn> % mapM_ (sequence [print, print]) [1..5]
15:10:22 <yahb> merijn: ; <interactive>:331:1: error:; * Could not deduce: Item (m (a0 -> b0)) ~ (a1 -> IO ()); from the context: (Monad m, Traversable m, Show a, IsList (m (a2 -> b)), IsList (t a2), Num (Item (t a2)), Enum (Item (t a2)), Foldable t, Item (m (a2 -> b)) ~ (a -> IO ())); bound by the inferred type for `it':; forall (m :: * -> *) a a2 b (t :: * -> *). (Monad m, Traversable m,
15:10:58 <merijn> ugh, how do I reset yahb?
15:11:10 <dminuoso> It's ghci
15:11:11 sveit joins (~sveit@45.77.0.246)
15:11:12 <dminuoso> So :q
15:11:16 <merijn> % :q
15:11:16 <yahb> merijn:
15:11:18 <merijn> % mapM_ (sequence [print, print]) [1..5]
15:11:20 <yahb> merijn: [(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
15:11:37 <merijn> that's not right..
15:12:00 <dminuoso> well..
15:12:05 <merijn> :t sequence [print, print]
15:12:07 <lambdabot> Show a => a -> [IO ()]
15:12:13 borne joins (~fritjof@200116b864ec3c00c8b76624f4b75a13.dip.versatel-1u1.de)
15:12:14 <merijn> ah
15:12:15 <dminuoso> this is just ap..
15:12:35 <merijn> % mapM_ (sequence_ [print, print]) [1..5]
15:12:35 <yahb> merijn: ; <interactive>:2:8: error:; * Couldn't match type `()' with `m b0'; Expected type: a0 -> m b0; Actual type: a0 -> (); * In the first argument of `mapM_', namely `(sequence_ [print, print])'; In the expression: mapM_ (sequence_ [print, print]) [1 .. 5]; In an equation for `it': it = mapM_ (sequence_ [print, print]) [1 .. 5]; * Relevant bindings include it :: m () (bou
15:12:49 <dminuoso> % sequence ([print, print] <$> [1...5])
15:12:49 <yahb> dminuoso: ; <interactive>:3:11: error:; * Couldn't match expected type `Over p0 f0 s0 t0 a1 b0 -> m a' with actual type `[a0 -> IO ()]'; * In the first argument of `(<$>)', namely `[print, print]'; In the first argument of `sequence', namely `([print, print] <$> [1 ... 5])'; In the expression: sequence ([print, print] <$> [1 ... 5]); * Relevant bindings include it :: m [a] (bound at <inter
15:12:50 <PacoV> It looks just about what I need.
15:12:50 <merijn> ok, I give up on making it work :p
15:13:06 <dminuoso> % sequence ([print, print] <*> [1...5])
15:13:06 <yahb> dminuoso: ; <interactive>:4:12: error:; * No instance for (Show (Over p0 f0 s0 t0 a0 b0)) arising from a use of `print'; (maybe you haven't applied a function to enough arguments?); * In the expression: print; In the first argument of `(<*>)', namely `[print, print]'; In the first argument of `sequence', namely `([print, print] <*> [1 ... 5])'; <interactive>:4:31: error:; * No insta
15:13:13 <PacoV> Thanks!
15:13:15 <dminuoso> huh
15:13:21 <dminuoso> % sequence ([print, print] <*> [1...5] :: [Int])
15:13:21 <yahb> dminuoso: ; <interactive>:5:11: error:; * Couldn't match type `IO ()' with `Int'; Expected type: [Int]; Actual type: [IO ()]; * In the first argument of `sequence', namely `([print, print] <*> [1 ... 5] :: [Int])'; In the expression: sequence ([print, print] <*> [1 ... 5] :: [Int]); In an equation for `it': it = sequence ([print, print] <*> [1 ... 5] :: [Int]); <interactive>:5:11:
15:13:26 <dminuoso> *shrugs*
15:13:37 × TheScoop quits (~TheScoop@unaffiliated/tryte) (Quit: _)
15:13:39 <dminuoso> merijn: makes you wonder how we get anything done, if we cant even solve beginner problems
15:13:49 <merijn> I'd just use bindings :p
15:14:02 <dminuoso> and probably not structure your code to end up in that place
15:14:14 × texasmynsted quits (~texasmyns@212.102.45.115) (Ping timeout: 256 seconds)
15:14:16 <dminuoso> I've never written sequence anywhere
15:14:44 × alp quits (~alp@2a01:e0a:58b:4920:34a0:e5bb:3231:c2c3) (Ping timeout: 268 seconds)
15:14:45 <dminuoso> Indeed, none of my haskell projects have a single occurence of i
15:16:21 <dminuoso> % :t sequence_ $ [putStr, putStr] <*> ["foo","bar"] -- merijn
15:16:22 <yahb> dminuoso: IO ()
15:16:23 <dminuoso> Did you mean that?
15:16:36 <merijn> no
15:16:50 <merijn> The problem is that I meant a double sequence or something weird
15:16:54 <dminuoso> Then I really dont understand what you're trying to write
15:17:02 <merijn> :t sequence_ . sequence [print, print]
15:17:04 <lambdabot> Show a => a -> IO ()
15:17:08 <merijn> That
15:17:09 <dminuoso> huh
15:17:11 <dminuoso> % :t sequence_ [print, print]
15:17:11 <yahb> dminuoso: Show a => a -> ()
15:17:19 <dminuoso> % :t sequence_
15:17:19 <yahb> dminuoso: (Foldable t, Monad m) => t (m a) -> m ()
15:17:30 <dminuoso> oh
15:17:36 × hpc quits (~juzz@ip98-169-35-13.dc.dc.cox.net) (Ping timeout: 258 seconds)
15:17:50 <merijn> First one for the "a ->", second for the internal IO
15:17:51 <dminuoso> % :t sequence [print, print]
15:17:52 <yahb> dminuoso: Show a => a -> [IO ()]
15:17:53 <dminuoso> Right
15:18:33 <dminuoso> but how exactly is that different from
15:18:36 <dminuoso> % :t sequence_ $ [putStr, putStr] <*> ["foo","bar"]
15:18:37 <yahb> dminuoso: IO ()
15:18:52 <dminuoso> In both cases you generate the cartesian product
15:19:00 <dminuoso> apply, and then sequence
15:19:15 <dminuoso> yours is just a bit more hidden
15:19:54 daydaynatation joins (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
15:20:29 × jokester quits (~mono@unaffiliated/jokester) (Quit: WeeChat 2.8)
15:21:11 × twk- quits (~thewormki@unaffiliated/twk-) (Ping timeout: 272 seconds)
15:21:49 × Tario quits (~Tario@200.119.184.48) (Ping timeout: 246 seconds)
15:23:27 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
15:24:23 Varis joins (~Tadas@unaffiliated/varis)
15:24:38 khaladrogo_786 joins (~khaladrog@2405:204:5217:6256:258b:d489:f19c:6ea7)
15:24:42 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
15:25:00 <daydaynatation> Are there any sort function on Data.Array?
15:25:10 <bqv> But its pointfree
15:25:39 <PacoV> Okay, I'll use dminuoso's version as the "m ()" has the right type in the end.
15:27:43 × DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
15:27:59 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
15:28:06 × PacoV quits (2d535a95@gateway/web/cgi-irc/kiwiirc.com/ip.45.83.90.149) (Quit: thanks!)
15:28:25 <daydaynatation> Just found out that there is no sort function for Vector neither...
15:28:32 christo joins (~chris@81.96.113.213)
15:28:50 <merijn> daydaynatation: You want vector-algorithms :)
15:28:56 <merijn> @hackage vector-algorithms
15:28:57 <lambdabot> https://hackage.haskell.org/package/vector-algorithms
15:29:04 <daydaynatation> ah ha
15:29:09 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
15:29:23 <daydaynatation> merijn: how about array-algorithms? does it exist?
15:29:29 <merijn> No clue
15:29:58 <merijn> Unless you need generalised indexing via Ix vector is generally better
15:30:20 × jespada quits (~jespada@90.254.245.49) (Ping timeout: 265 seconds)
15:30:33 <daydaynatation> I'm just doing some comparison between Haskell and C++, for learning's sake
15:31:01 <daydaynatation> I guess Haskell's array is way too different from C++ array
15:31:06 <merijn> daydaynatation: right, if you just want 1D arrays/vector like C/C++ then you probably want vector
15:31:28 cohn parts (~noone@unaffiliated/cohn) ()
15:31:46 LeanderK joins (~textual@46.183.103.17)
15:32:04 × LeanderK quits (~textual@46.183.103.17) (Client Quit)
15:32:34 jespada joins (~jespada@90.254.245.49)
15:33:36 <daydaynatation> btw, does cabal hell still exits? I use ghcup to install ghc and cabal and then cabal install everything in the global scope. Is this the usual way of installing packagings with cabal? or do people cabal install some kind of sandbox
15:34:07 × khaladrogo_786 quits (~khaladrog@2405:204:5217:6256:258b:d489:f19c:6ea7) (Quit: Leaving)
15:34:17 twk- joins (~thewormki@unaffiliated/twk-)
15:35:00 Amras joins (~Amras@unaffiliated/amras0000)
15:35:01 <merijn> daydaynatation: Actual cabal hell has been gone for close to a decade. What people *now* call cabal hell is simply "I'm depending on ancient unmaintained packages and the dependency solver can't find a solution", which doesn't really have a solution
15:35:23 <bqv> With nix, you can jailbreak...
15:35:24 × xff0x quits (~fox@2001:1a81:537c:3e00:725d:2adb:f456:fdfe) (Ping timeout: 240 seconds)
15:35:38 <merijn> daydaynatation: As for sandboxing individual projects, as of cabal-install 3.0 that is unncecessary
15:35:40 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
15:35:48 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
15:36:21 <maerwald> you can use stack2cabal too
15:36:23 <merijn> daydaynatation: Basically, every installed package is tagged with a hash of its source, exact version and compile flags, and the hashes of it's transitive dependencies
15:36:23 <daydaynatation> Wow, great to know! So I just cabal install globally and it just works? Nix is too complicated
15:36:30 xff0x joins (~fox@2001:1a81:537c:3e00:d3d4:b70f:c4f2:86e2)
15:36:32 <maerwald> @hackage stack2cabal
15:36:32 <lambdabot> https://hackage.haskell.org/package/stack2cabal
15:36:44 <merijn> daydaynatation: So you can have infinitely many different configurations/versions of the same package installed
15:36:47 <maerwald> in case you can't build with cabal
15:37:43 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds)
15:37:56 andreas31 joins (~andreas@gateway/tor-sasl/andreas303)
15:40:05 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
15:40:10 <merijn> daydaynatation: cabal-install will select the right/matching versions from the global store when building a project. So you end up with builds happening "as if" they're in a sandbox, except you don't need to manage sandboxes/virtualenvs, as they all share a single global store
15:40:46 <merijn> daydaynatation: See also https://cabal.readthedocs.io/en/latest/nix-local-build-overview.html (despite the nix url, doesn't actually have anything to with nix other than "the general idea")
15:41:16 <merijn> (note that the v2- prefix is optional in cabal 3.0 and later, as all the commands default to v2-)
15:41:29 <yushyin> yes, it's misleading
15:41:33 <daydaynatation> Thanks!
15:41:42 × borne quits (~fritjof@200116b864ec3c00c8b76624f4b75a13.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
15:42:04 <merijn> yushyin: Patches welcome ;)
15:42:12 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
15:42:12 <dolio> What's misleading?
15:42:15 alp joins (~alp@2a01:e0a:58b:4920:60be:9d51:3099:266d)
15:42:16 <yushyin> the name
15:42:39 <merijn> dolio: "nix local builds" tends to mislead people into thinking it's about Nix
15:42:48 × khaladrogo quits (~khaladrog@2405:204:5217:6256:258b:d489:f19c:6ea7) (Remote host closed the connection)
15:42:50 <dolio> It says "nix-style local builds".
15:42:58 <merijn> dolio: Not in the url
15:43:14 <dolio> Maybe read the actual page instead of just the url.
15:43:35 <merijn> dolio: And even nix-style has repeatedly led to confusion here
15:45:36 TheScoop joins (~TheScoop@unaffiliated/tryte)
15:45:39 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-jbpkroausxoplpus)
15:45:40 MaoZeDong_ joins (~yuri@2a00:1370:8135:4003:bd58:898c:9e9d:d049)
15:46:12 <yushyin> but is there a better and more descriptive name? I have no idea.
15:46:32 <bqv> Nix is popular in haskell anyway, no?
15:46:58 <merijn> bqv: eh...
15:47:11 <merijn> bqv: There's certainly a very vocal group of fans :)
15:47:24 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
15:47:29 <merijn> I wouldn't say they're remotely close to a majority, though
15:47:40 × sdrodge quits (~sdrodge@unaffiliated/sdrodge) (Ping timeout: 256 seconds)
15:47:50 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
15:47:53 <dolio> I think a lot of people like the vague idea, and the implementation in cabal is likely to be preferable for most people.
15:47:55 <bqv> The nix folk make it seem like haskell's rife with nixerse..
15:48:26 <merijn> dolio: I like the *idea* of Nix, they're making it very hard to like the *execution* of Nix, though ;)
15:48:46 <dolio> Right, that's what I was getting at. :)
15:49:10 <merijn> I wish someone would make Nix, but like, not sucking :p
15:49:12 <bqv> Believe me I agree...
15:49:58 <yushyin> cabal v2-* works well for me, I am quite happy with it
15:50:02 <bqv> But the way I normally phrase it, I like nix, I just hate nixpkgs and nixos
15:50:11 son0p joins (~son0p@181.136.122.143)
15:50:11 <dolio> Of course, the cabal one only really does anything for Haskell things.
15:50:18 <bqv> But sadly nothing compares and I have stockholm syndrome
15:52:29 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 258 seconds)
15:52:55 ddellacosta joins (~dd@86.106.121.168)
15:52:56 <chreekat[m]> It's the other way around maybe - lots of Haskellers active in Nix community as well
15:53:15 <dolio> bqv: I've heard some of the Haskell power users complaining about the language as well.
15:53:29 <dolio> Although I couldn't give specifics myself.
15:54:02 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
15:54:06 <tdammers> I think the most common complaint about nix-the-language is that it's thoroughly untyped
15:54:19 christo joins (~chris@81.96.113.213)
15:54:29 <chreekat[m]> E.g. The nixpkgs support for Haskell has had a lot of work put into it, and it's not even the only implementation available
15:54:53 <tdammers> and that that makes it really hard to make things discoverable
15:55:03 <monochrom> In an alternate universe, the nix language is thoroughly typed. In ##scheme, they complain that it's thoroughly typed. :)
15:55:15 cohn joins (~noone@unaffiliated/cohn)
15:55:22 pixel_ joins (~pixel_@84.39.116.180)
15:55:27 idhugo joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net)
15:55:51 <tdammers> IME, lispers tend to have marginally higher tolerance for typed languages than haskellers have for untyped languages
15:56:09 <dolio> I don't think it was about types. It was about some inconsistencies with how things worked or something. Special cases that would confuse people.
15:56:34 <tdammers> some of that is linked to the unitypedness though
15:56:38 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
15:56:40 <dsal> It's a weird language, for sure.
15:56:54 <chreekat[m]> My complaint is the thoroughgoing reliance on fix points for enabling extension. I mean, i don't really have a better idea, but i grokked monads well before i grokked fixpoints, and they still bend my head some. Error messages suffer, too
15:56:57 <tdammers> personally, I think making an entirely new language for this was a mistake
15:57:46 <chreekat[m]> I guess if it still bends my head, i don't actually grok them :)
15:58:03 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Client Quit)
15:58:05 × Unhammer quits (~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection)
15:58:23 <tdammers> packaging things for, well, any platform really, is not something most developers love to do, it's something we want to get over with ASAP. having to learn an entire programming language, and a badly documented one at that, creates a harsh barrier
15:58:50 × MaoZeDong_ quits (~yuri@2a00:1370:8135:4003:bd58:898c:9e9d:d049) (Quit: Leaving)
15:58:58 <dolio> Well, I can tell you that not inventing a new language doesn't avoid that part. :)
15:59:06 Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer)
15:59:23 <monochrom> I haven't studied nix. But if enabling extensions is equivalent to OOP subclassing and virtual methods and late binding, then semantically a fix point (over open recursion, even) is necessary. What you can argue over is whether the syntax should expose or hide this fact.
15:59:37 khaladrogo joins (~khaladrog@2409:4071:228e:e077:f1ab:1e40:6c9b:8f55)
15:59:50 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
15:59:55 <tdammers> an entirely new language *can* be the right choice, but it has to pull its weight and be completely non-frightening
16:00:26 Rudd0 joins (~Rudd0@185.189.115.103)
16:00:59 aarvar joins (~foewfoiew@50.35.43.33)
16:01:36 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
16:01:49 motherfsck joins (~motherfsc@unaffiliated/motherfsck)
16:04:06 <maerwald> tdammers: packaging requires more discipline than the average programming imo. Having followed NixOS from its early beginnings, my opinion is that it never reached a critical mass of quality dedicated packagers
16:04:22 <maerwald> much more drive by contributions
16:04:49 <dolio> I'm mainly thinking of SBT in Scala, which was an embedded language in Scala, but it was pretty hard to figure out how to do anything that didn't happen automatically.
16:04:52 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
16:06:18 <dolio> Because the documentation didn't really tell you how.
16:07:31 hackage hakyll-typescript 0.0.2.0 - Typescript and javascript hakyll compilers. https://hackage.haskell.org/package/hakyll-typescript-0.0.2.0 (jhmcstanton)
16:07:50 × khaladrogo quits (~khaladrog@2409:4071:228e:e077:f1ab:1e40:6c9b:8f55) (Ping timeout: 264 seconds)
16:09:36 knupfer joins (~Thunderbi@200116b82c45b300601996fffe927128.dip.versatel-1u1.de)
16:09:43 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
16:10:01 × knupfer quits (~Thunderbi@200116b82c45b300601996fffe927128.dip.versatel-1u1.de) (Remote host closed the connection)
16:10:15 knupfer joins (~Thunderbi@200116b82c45b300ad86251a82d2e82c.dip.versatel-1u1.de)
16:10:35 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
16:10:40 bscarlet joins (~benjamin@forest.greynode.net)
16:11:03 × _xor quits (~xor@74.215.46.133) (Read error: Connection reset by peer)
16:11:49 mastarija joins (~mastarija@93-136-211-205.adsl.net.t-com.hr)
16:12:09 _xor joins (~xor@74.215.46.133)
16:13:37 × _xor quits (~xor@74.215.46.133) (Read error: Connection reset by peer)
16:13:56 × Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Ping timeout: 268 seconds)
16:14:22 _xor joins (~xor@74.215.46.133)
16:21:07 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
16:21:44 × jonathanx quits (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
16:22:11 tauli joins (~textual@185.213.155.161)
16:22:26 u0_a298 joins (~user@47.206.148.226)
16:23:51 × mastarija quits (~mastarija@93-136-211-205.adsl.net.t-com.hr) (Quit: Leaving)
16:24:00 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:24:00 <tauli> Does anyone know where cabal get's the authors name and email from when initialising a new package? doesn't seem to be in .cabal/config
16:24:28 <monochrom> .gitconfig
16:25:12 bitmagie joins (~Thunderbi@200116b806d43f002c1b74646a240ada.dip.versatel-1u1.de)
16:25:18 whatisRT joins (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f)
16:27:00 <tauli> do i have to refresh some cache? changed ~/.gitconfig but cabal still writes the old email adress
16:27:29 <tauli> am on macOS with cabal 3.2.0.0
16:27:44 × alp quits (~alp@2a01:e0a:58b:4920:60be:9d51:3099:266d) (Ping timeout: 240 seconds)
16:27:54 <monochrom> works for me
16:28:36 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
16:28:38 × enikar quits (~enikar@chezlefab.net) (Quit: WeeChat 2.3)
16:28:38 munsel joins (~munsel@v22018094214772867.hotsrv.de)
16:28:41 × coot quits (~coot@37.30.60.135.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
16:28:54 enikar joins (~enikar@2001:41d0:2:8673::42)
16:29:04 × bitmagie quits (~Thunderbi@200116b806d43f002c1b74646a240ada.dip.versatel-1u1.de) (Client Quit)
16:29:31 sord937 joins (~sord937@gateway/tor-sasl/sord937)
16:29:31 <c_wraith> tauli: does `git config user.name` show the changed version?
16:30:11 <tauli> it's `git config user.email` but yes, that's changed
16:30:42 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
16:31:38 <tauli> ok, changing user works, but not with the email address
16:31:38 sord937 joins (~sord937@gateway/tor-sasl/sord937)
16:31:53 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
16:32:02 <tauli> maintainer in the .cabal is set to some old mail address
16:32:39 <monochrom> OK I didn't test maintainer. I tested cabal init.
16:33:10 × dbmikus quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 265 seconds)
16:33:10 <monochrom> Oh, that's maintainer.
16:33:32 <tauli> yep, when i do `cabal init` the maintainer field of the generated .cabal file is set some old mail address i don't know where cabal get's that from
16:35:34 × u0_a298 quits (~user@47.206.148.226) (Remote host closed the connection)
16:35:57 u0_a298 joins (~user@47.206.148.226)
16:36:05 × chkno quits (~chkno@75-7-2-127.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
16:38:29 christo joins (~chris@81.96.113.213)
16:38:56 raichoo joins (~raichoo@dslb-092-073-210-010.092.073.pools.vodafone-ip.de)
16:39:08 xerox_ joins (~xerox@unaffiliated/xerox)
16:40:11 <tomsmeding> tauli: also `git config --global user.email`?
16:40:21 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:40:26 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
16:41:21 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
16:41:42 christo joins (~chris@81.96.113.213)
16:41:53 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
16:42:06 <tomsmeding> you can also run `strace -f -o log.txt cabal init` and search the produced log.txt for "gitconfig" to see which file it's using
16:42:19 <tomsmeding> (assuming linux; dtruss on mac, no idea on windows)
16:42:42 × mrchampion quits (~mrchampio@216-211-57-41.dynamic.tbaytel.net) (Ping timeout: 258 seconds)
16:42:47 <tomsmeding> (oh you said macOS; something something dtruss :p )
16:44:01 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:44:26 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
16:45:46 mrchampion joins (~mrchampio@216-211-57-41.dynamic.tbaytel.net)
16:45:55 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
16:47:00 hackage hakaru 0.7.0 - A probabilistic programming language https://hackage.haskell.org/package/hakaru-0.7.0 (z)
16:47:08 sfvm joins (~sfvm@37.228.215.148)
16:47:46 christo joins (~chris@81.96.113.213)
16:47:48 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
16:47:51 akad_ joins (~akad@109107030050.radomsko.vectranet.pl)
16:48:31 × LKoen_ quits (~LKoen@79.160.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
16:49:45 borne joins (~fritjof@200116b864ec3c00c8b76624f4b75a13.dip.versatel-1u1.de)
16:49:51 × Neo-- quits (~neo@188-230-154-134.dynamic.t-2.net) (Remote host closed the connection)
16:50:10 <tauli> the culprint was ~/.darcs/author
16:50:18 <tauli> thanks for all the pointers
16:50:19 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:50:39 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
16:51:07 × whatisRT quits (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f) (Ping timeout: 260 seconds)
16:51:13 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
16:51:21 <Uniaika> /7
16:53:32 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
16:54:42 christo joins (~chris@81.96.113.213)
16:55:25 nkly joins (~nkly@ip5b40d080.dynamic.kabel-deutschland.de)
16:55:27 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
16:56:04 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
16:57:02 flatmap joins (~flatmap@p200300dd370a47007ce3847efe0685c7.dip0.t-ipconnect.de)
16:57:44 × Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 240 seconds)
16:57:45 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
16:59:01 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
16:59:05 khaladrogo joins (~khaladrog@2405:204:5217:6256:f1ab:1e40:6c9b:8f55)
16:59:05 geekosaur joins (ac3a8c2c@172.58.140.44)
16:59:23 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
16:59:46 psygate joins (~psygate@unaffiliated/psygate)
17:02:37 × u0_a298 quits (~user@47.206.148.226) (Read error: Connection reset by peer)
17:03:05 u0_a298 joins (~user@47.206.148.226)
17:04:31 khaladrogo_lite joins (~khaladrog@2405:204:5217:6256:f1ab:1e40:6c9b:8f55)
17:05:39 christo joins (~chris@81.96.113.213)
17:06:05 × andreas31 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
17:06:19 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
17:07:51 × nekomune quits (~nekomune@comfy.moe) (Quit: ZNC 1.7.2 - https://znc.in)
17:08:47 kritzefitz joins (~kritzefit@212.86.56.80)
17:09:14 andreas31 joins (~andreas@gateway/tor-sasl/andreas303)
17:09:19 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
17:10:11 <tdammers> maerwald: exactly. packaging is hard and thankless work - it needs to be made as painless as possible
17:10:57 lucas joins (49440e68@c-73-68-14-104.hsd1.ma.comcast.net)
17:11:12 christo joins (~chris@81.96.113.213)
17:11:14 <maerwald> yes, thats why most distros strictly separate configuration from packaging. In nix, its all the same
17:12:00 × lucas quits (49440e68@c-73-68-14-104.hsd1.ma.comcast.net) (Remote host closed the connection)
17:12:01 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
17:12:11 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
17:12:39 christo joins (~chris@81.96.113.213)
17:15:35 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
17:16:39 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
17:17:12 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
17:19:40 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
17:20:24 christo joins (~chris@81.96.113.213)
17:21:47 todda7 joins (~torstein@ppp-2-84-30-242.home.otenet.gr)
17:21:53 alp joins (~alp@2a01:e0a:58b:4920:ad5c:a549:2a77:a525)
17:22:01 coot joins (~coot@37.30.60.135.nat.umts.dynamic.t-mobile.pl)
17:22:17 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:22:37 × darjeeling_ quits (~darjeelin@115.215.40.228) (Ping timeout: 260 seconds)
17:23:01 darjeeling_ joins (~darjeelin@115.215.40.228)
17:24:29 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 258 seconds)
17:24:52 × christo quits (~chris@81.96.113.213) (Ping timeout: 258 seconds)
17:27:38 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
17:28:13 conal joins (~conal@198.8.81.68)
17:28:42 <dsal> It's just that all other systems are so much worse.
17:29:01 hackage hnix 0.11.0 - Haskell implementation of the Nix language https://hackage.haskell.org/package/hnix-0.11.0 (AntonLatukha)
17:30:49 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
17:31:44 × geekosaur quits (ac3a8c2c@172.58.140.44) (Ping timeout: 245 seconds)
17:31:59 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
17:33:54 christo joins (~chris@81.96.113.213)
17:34:57 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
17:35:30 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
17:36:02 <maerwald> dsal: did you use another system?
17:36:19 <maerwald> (most of them are proprietary)
17:36:39 LKoen joins (~LKoen@79.160.9.109.rev.sfr.net)
17:36:47 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
17:37:21 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
17:37:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
17:37:57 bennofs1 joins (~benno@dslb-188-106-234-230.188.106.pools.vodafone-ip.de)
17:38:44 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:39:02 × britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
17:41:19 <dsal> I've used tons of different unix systems since the 90s.
17:41:37 ubert1 joins (~Thunderbi@p200300ecdf1e530be6b318fffe838f33.dip0.t-ipconnect.de)
17:42:07 <dsal> nix is weird from a unix perspective, but it's super nice from a packaging perspective. docker is popular these days, but gross in many ways, including just not being great software.
17:42:29 <monochrom> I no longer ask for great software.
17:42:44 × ubert quits (~Thunderbi@p200300ecdf1e53d1e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
17:42:44 ubert1 is now known as ubert
17:42:50 <yushyin> monochrom: you just write it yourself? ;)
17:42:53 <dsal> I end up just writing all my own software these days because everything is just so depressingly bad.
17:43:01 <monochrom> Nah, I don't write great software either.
17:44:02 nbloomf joins (~nbloomf@2600:1700:ad14:3020:c4b9:178f:4076:90ef)
17:44:02 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
17:44:19 <dsal> There are a few bits of software I use that actually seem pretty good. Even then, a little questionable. Given its complexity, Ableton Live does a pretty good job. I don't think I could write something similar. But there are so many of these javascript things like zigbee2mqtt that just barely work well enough that I can not think about them most of the time.
17:46:32 × u0_a298 quits (~user@47.206.148.226) (Remote host closed the connection)
17:46:44 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
17:46:59 u0_a298 joins (~user@47.206.148.226)
17:48:49 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
17:50:05 ransom joins (~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
17:50:53 × meowphius quits (~meowphius@pool-96-237-166-172.bstnma.fios.verizon.net) (Ping timeout: 260 seconds)
17:51:39 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
17:51:44 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:52:40 × todda7 quits (~torstein@ppp-2-84-30-242.home.otenet.gr) (Ping timeout: 272 seconds)
17:54:47 × u0_a298 quits (~user@47.206.148.226) (Read error: Connection reset by peer)
17:55:39 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
17:56:02 u0_a298 joins (~user@47.206.148.226)
17:56:16 × atk quits (~Arch-TK@erebus.the-tk.com) (Changing host)
17:56:16 atk joins (~Arch-TK@ircpuzzles/staff/Arch-TK)
17:56:19 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
17:56:52 jneira joins (501e64fa@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.100.250)
17:57:22 × bennofs1 quits (~benno@dslb-188-106-234-230.188.106.pools.vodafone-ip.de) (Quit: WeeChat 2.9)
17:57:32 × lxsameer quits (lxsameer@gateway/vpn/protonvpn/lxsameer) (Ping timeout: 268 seconds)
17:58:50 × xff0x quits (~fox@2001:1a81:537c:3e00:d3d4:b70f:c4f2:86e2) (Ping timeout: 264 seconds)
17:59:22 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Quit: WeeChat 2.9)
17:59:42 xff0x joins (~fox@2001:1a81:537c:3e00:9b11:58b1:f4d:830a)
18:00:02 × pixel_ quits (~pixel_@84.39.116.180) ()
18:01:03 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
18:01:29 × rotty quits (rotty@ghost.xx.vu) (Quit: WeeChat 3.0-dev)
18:02:06 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
18:04:20 × dyeplexer quits (~lol@unaffiliated/terpin) (Remote host closed the connection)
18:04:20 × u0_a298 quits (~user@47.206.148.226) (Read error: Connection reset by peer)
18:04:51 u0_a298 joins (~user@47.206.148.226)
18:08:35 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
18:08:35 × u0_a298 quits (~user@47.206.148.226) (Read error: Connection reset by peer)
18:08:53 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
18:09:06 u0_a298 joins (~user@47.206.148.226)
18:09:39 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
18:11:37 × knupfer quits (~Thunderbi@200116b82c45b300ad86251a82d2e82c.dip.versatel-1u1.de) (Remote host closed the connection)
18:11:43 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
18:11:45 knupfer joins (~Thunderbi@200116b82c45b300e8f677624452dee1.dip.versatel-1u1.de)
18:12:09 lxsameer joins (~lxsameer@unaffiliated/lxsameer)
18:12:27 invaser parts (~Thunderbi@31.148.23.125) ()
18:12:32 invaser joins (~Thunderbi@31.148.23.125)
18:12:43 chaosmasttter joins (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de)
18:12:45 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
18:12:57 <invaser> Hi, can someone take a look at the problem I have in #haskell-beginners?
18:13:09 <invaser> Or I can copy it here
18:13:14 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (Quit: The Lounge - https://thelounge.chat)
18:14:10 hpc joins (~juzz@ip98-169-35-13.dc.dc.cox.net)
18:14:29 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
18:14:48 Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net)
18:15:16 <gobbleguy> invaser: you can bring it here
18:15:42 <gobbleguy> This channel is fine for "beginner" questions, too.
18:16:45 <invaser> Ok, so I'm trying to make parser to do this: parse (string "z1" <|> pure "") "" "zet" should be Right "", and not Left ...
18:17:35 <invaser> I get why this code doesn't what I want it to, because it's already read "z" and exception arises only on second char
18:17:50 <dminuoso> invaser: parsec does not backtrack by default
18:18:01 <dminuoso> Wrap the left part in `try (...)`
18:18:33 <invaser> a-ha, it's `try`, tyty
18:20:04 <dminuoso> invaser: So while `l <|> r` encodes a choice for parser combinators, it itself does not guarantee `l` would backtrack on failure (that is "unconsume" already consumed tokens)
18:20:40 britva joins (~britva@2a02:aa13:7240:2980:292a:d07d:3ab9:26ba)
18:20:41 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
18:20:46 × andreas31 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
18:21:04 <dminuoso> Some libraries always backtrack by default, others backtrack only certain primitives, and parsec *never* backtracks by default
18:21:35 <invaser> dminuoso: So, in layman's terms, it works only when it determines that left parser can't parse the string on the first char?
18:22:43 <dminuoso> invaser: Unless you denote the left side can backtrack, say `try l <|> r`
18:23:02 <davean> dminuoso: Mostly my stance is I'm entirely willing to turn on extensions but I look for ways not to and have a highish standard for if they improve things. So I'm not in the "limit them like crazy" camp and I'm not "just enable them", I've used almost all the extensions when I had a good reason, but I'm just careful about it and give it a lot of consideration if I'm missing a better way to
18:23:04 <davean> approach the problem and if the extension is acting as a crutch to a poor conceptualization of the problem and actually just enabling a more complicated system than is needed (which is often the case)
18:23:23 cosimone joins (~cosimone@2001:b07:ae5:db26:9217:95c7:973d:d0ad)
18:23:55 <dminuoso> invaser: The fundamental problem is that parser combinators cant do automatic lookahead
18:24:10 andreas31 joins (~andreas@gateway/tor-sasl/andreas303)
18:24:21 davean stares at that statement for a bit.
18:24:33 <dminuoso> *monadic!
18:24:34 <davean> They certainly don't. I'm not convinced they can't.
18:24:35 <dminuoso> ;)
18:24:47 <dminuoso> davean: They cant if they are monadic.
18:24:49 <monochrom> Oh, monadic, yeah.
18:24:57 <dminuoso> With selective or applicative parser combinators you can.
18:25:05 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
18:25:15 <davean> dminuoso: You can't *in general* but many of the combinators are selective or applicative.
18:25:18 <davean> dminuoso: so sometimes you can.
18:25:18 <monochrom> BUT! I have realized that given anyChar, you can stay Applicative for CFG.
18:25:37 × alp quits (~alp@2a01:e0a:58b:4920:ad5c:a549:2a77:a525) (Ping timeout: 260 seconds)
18:25:50 <monochrom> And academically we have found that anyChar needs Selective only, not full monadic.
18:26:06 <monochrom> Err sorry! s/anyChar/satisfy/
18:26:14 <davean> dminuoso: so saying they can't isn't quite true
18:26:27 <davean> dminuoso: Saying there are grammers they can't for is true, but thats kinda always true in a way.
18:26:41 <davean> Also not really relivent to most parsers
18:26:51 <daydaynatation> in a type class method, if i write aMethod:: (Random a, V.Unbox a) => ... does it mean a needs to by both Random and V.Unbox ? Or a needs to be one Or the other
18:27:07 <davean> Both
18:27:10 <monochrom> Oh sorry again, haha, full CFG still needs unlimited lookahead. LL(k) are the restricted ones that can be done in fixed lookahead.
18:27:19 <davean> For all a such that a is in Random and in Unbox ...
18:27:29 minus[m] joins (minusblobc@gateway/shell/matrix.org/x-hhdwstlyzyfgkvud)
18:27:41 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
18:27:47 <daydaynatation> ok
18:27:48 <monochrom> But yeah we really design our grammars to be LL(k), even LL(1), don't we.
18:28:01 <davean> monochrom: VERY much so, and on purpose conciously.
18:28:07 × dbmikus quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
18:28:29 <monochrom> So yeah most parsers don't even need full-on Applicative. Also, I mean s/Applicative/Alternative/
18:29:12 <monochrom> Gosh does IRC allow me to edit past messages? :)
18:29:29 <davean> monochrom: No, IRC makes you life with your decisions.
18:29:39 × ransom quits (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:29:47 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
18:29:53 <davean> IRC promotes honesty and transparency
18:29:57 <davean> not lies and deception.
18:30:54 <dminuoso> davean: fair enough
18:32:04 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 268 seconds)
18:32:05 conal joins (~conal@198.8.81.68)
18:32:13 geekosaur joins (82659a09@host154-009.vpn.uakron.edu)
18:32:20 <davean> dminuoso: we have Applicative => Monad and Applicative Do
18:32:23 <davean> dminuoso: etc
18:32:25 <dminuoso> davean: I mean in principle you could do automatic lookahead inside combinators as far as possible, not quite sure what the runtime penalty is
18:32:44 × rzmt quits (~rzmt@87-92-180-112.rev.dnainternet.fi) (Ping timeout: 240 seconds)
18:33:00 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
18:33:02 <davean> Honestly no one tries to write high performance parsers in Haskell because the basics are usually fast enough - look at aeson, its dog slow and no one seems to care.
18:33:30 <dminuoso> The package description says its "high performance"!
18:33:34 <davean> The only person maintaining a faster version just abandoned theirs
18:33:38 <davean> dminuoso: Many people lie.
18:33:43 <dminuoso> davean: Also, https://github.com/J-mie6/ParsleyHaskell
18:34:01 <davean> We have Haskell JSON parsers far faster than aeson.
18:34:02 <dminuoso> So someone is trying to write optimizing high performance parser combinators.
18:34:04 <dminuoso> :)
18:34:34 brisbin joins (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
18:34:36 × mnrmnaugh quits (~mnrmnaugh@unaffiliated/mnrmnaugh) (Quit: Leaving)
18:35:02 rzmt joins (~rzmt@87-92-180-112.rev.dnainternet.fi)
18:35:39 mnrmnaugh joins (~mnrmnaugh@unaffiliated/mnrmnaugh)
18:36:10 <dminuoso> davean: But yeah, the example of aeson is pretty good, I notice this in my day job time after time
18:36:16 <dminuoso> How performance if often not important.
18:36:32 <tomsmeding> the question is, do we have a json parser library that 1. parses more quickly, and 2. compiles more quickly?
18:36:41 × cosimone quits (~cosimone@2001:b07:ae5:db26:9217:95c7:973d:d0ad) (Quit: cosimone)
18:36:46 <dminuoso> We have one project where latency is key, but generally we couldn't care less if aeson takes 5ms to parse some incoming request or not.
18:37:02 × idhugo quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 256 seconds)
18:37:03 <dminuoso> tomsmeding: haha, aeson is not good on either metric
18:37:13 <davean> Right. I know people who DID do high performance JSON stuff in Haskell, etc
18:37:13 <tomsmeding> my point :p
18:37:20 <davean> and like they have a ring buffer between cores, etc
18:37:25 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
18:37:27 <davean> and you can do all this in Haskell.
18:37:37 christo joins (~chris@81.96.113.213)
18:37:39 <davean> No one even switches which JSON parsing package they use to get a reasonable one ususally though.
18:38:10 <dminuoso> Plus, if performance was so critical, I wouldn't touch JSON with a 3.048m pole to begin with
18:38:13 <davean> tomsmeding: Hum, I think we have ones that are faster in both actually, I'd have to double check, I don't pay attention to compile times because they're so not important but I THINK it does.
18:38:19 <dminuoso> CBOR would be a far better candidate
18:38:51 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 268 seconds)
18:39:04 <dminuoso> My only annoyance with aeson is that its interface is bad and typeclass heavy
18:39:14 hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net)
18:39:15 <davean> Honestly I do mind the performance.
18:39:32 <daydaynatation> is IO action lazy by default? If so how can i force it to be strict?
18:39:38 <dminuoso> daydaynatation: yes and no
18:39:43 <tomsmeding> davean: compile times are in nigh-all cases less important than runtime performance, but damn they are annoying :p
18:39:47 <davean> But thats because the more requests per core per second I can handle the less scaling overhead I get
18:39:55 <dminuoso> daydaynatation: So Haskell is non-strict in *values*, that is the computatoin of `IO ()` itself can be lazy
18:40:02 <dminuoso> But the action itself is (in general) strict
18:40:08 <dminuoso> There are things like lazy IO, which are terrible
18:40:56 <davean> What the IO action *does* is generally not lazy, how the IO action *gets defined* is non-strict.
18:41:01 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
18:41:09 <daydaynatation> i'm time an action with time :: IO a -> IO a which wraps an anction between CPUTimes
18:41:31 <daydaynatation> the reuslts doesn't look right, so i'm guessing it could be related to laziness
18:41:56 <dminuoso> daydaynatation: can you share the code and results?
18:42:06 <dminuoso> That might be easier than to work with some vague description
18:42:29 <davean> daydaynatation: Though thats most likely not related to laziness
18:42:41 <davean> daydaynatation: Why doesn't it look right?
18:42:45 <daydaynatation> dminuoso: which paste site should I use?
18:42:48 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Quit: My Laptop has gone to sleep. ZZZzzz…)
18:43:11 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
18:43:21 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
18:43:22 <geekosaur> @where paste
18:43:22 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
18:43:34 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Client Quit)
18:43:58 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
18:44:18 conal joins (~conal@198.8.81.68)
18:44:21 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Client Quit)
18:44:30 × conal quits (~conal@198.8.81.68) (Client Quit)
18:44:44 <daydaynatation>
18:44:44 <daydaynatation> https://paste.tomsmeding.com/qgA1JMgU
18:44:50 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
18:45:07 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
18:45:08 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Client Quit)
18:45:22 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
18:45:28 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
18:45:30 jakob_ joins (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de)
18:45:39 <daydaynatation> result is here: https://paste.tomsmeding.com/hyrFyOzz
18:45:51 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
18:45:55 × jakob_ quits (~textual@p200300f49f162200f40f209088e2d2f9.dip0.t-ipconnect.de) (Client Quit)
18:46:01 <daydaynatation> list operations are so much faster than vector
18:46:23 <koz_> Not something we hear often.
18:46:58 × UpstreamSalmon quits (uid12077@gateway/web/irccloud.com/x-crbxrpluwxladazf) (Quit: Connection closed for inactivity)
18:47:39 × khaladrogo_lite quits (~khaladrog@2405:204:5217:6256:f1ab:1e40:6c9b:8f55) (Quit: Leaving)
18:47:51 × khaladrogo quits (~khaladrog@2405:204:5217:6256:f1ab:1e40:6c9b:8f55) (Remote host closed the connection)
18:48:12 <daydaynatation> I'm a beginner in Haskell, the code is very awkard
18:48:46 <davean> Oh, well
18:48:56 <davean> Thats not an IO action really that you're doign there?
18:49:19 <davean> What you were *trying* to time was a pure computation.
18:49:49 <daydaynatation> I did generate a random number in the action
18:49:59 <davean> Yah, and that part gets computed, but thats not where the time is taken
18:50:16 <tomsmeding> @hackage criterion-measurement
18:50:17 <lambdabot> https://hackage.haskell.org/package/criterion-measurement
18:50:18 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
18:50:22 <davean> The IO part *does* get executed here, but the sorting is optional depending on if oyu use it or not because its not IO
18:50:25 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
18:50:37 <tomsmeding> (which depends on aeson.......)
18:50:48 Saukk joins (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4)
18:51:04 <davean> I should see how long it would take me to convert the parts of hackage I sit on top of off of aeson.
18:51:24 <davean> I bet I could do that in ... 30 hours? Thats a lot of code and a fairly significant change really, but it seems quite doable.
18:51:25 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
18:51:25 <daydaynatation> ok..let me digest. but do you understand why the list operations is quicker?
18:51:36 <davean> daydaynatation: yes, I do, because you never check that its sorted.
18:51:49 <davean> so *all* you're really testing is that it generates a random list
18:51:53 <davean> Which is the IO part
18:52:58 <davean> I have to go, or I'd comment on the code and ways to improve it :/
18:53:16 <daydaynatation> thanks!
18:53:27 <tomsmeding> it's not accurate, but for this you can kind of see IO as being defined as 'data IO a = IO a'
18:53:35 stef204 joins (~stef204@unaffiliated/stef-204/x-384198)
18:53:39 × knupfer quits (~Thunderbi@200116b82c45b300e8f677624452dee1.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
18:53:51 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
18:53:55 <tomsmeding> that 'r <- action' evaluates 'r' to WHNF (do you know that term?), which is the IO constructor, but not the 'a' inside
18:54:17 <tomsmeding> so if you force 'fmap f (some IO action)', then that f is never evaluated yet
18:54:38 <tomsmeding> since the head (as in WHNF) of the result is already evaluated to IO
18:54:40 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
18:54:51 <dminuoso> Im not convinced that IO model is helpful in any way.
18:54:57 <dminuoso> It's very suggestive in the wrong ways
18:55:05 Axma45768 joins (~Axman6@pdpc/supporter/student/Axman6)
18:55:08 <tomsmeding> okay maybe it is
18:55:18 <davean> Also, I want to point out that the action tested here *does not use a reason to be IO*
18:55:26 mmalecki joins (~mmalecki@154.13.1.56)
18:55:34 <davean> Random number generation does not require IO
18:55:40 <daydaynatation> If i leave IO out of it, how do people time pure code?
18:55:49 <davean> daydaynatation: the timing needs to be in IO
18:55:50 <dminuoso> My referred analogy of `IO T` is `list of assembly instruction that, if executed, would produce a result of type T`
18:55:56 <tomsmeding> (fixing it is easy, by the way: either force 'r' using Control.DeepSeq.force, or use a primitive from criterion-measurement)
18:56:14 <dminuoso> Which seems to work rather well, and helps accept IO as being something opaque
18:56:25 <davean> tomsmeding: those will make the list variant look worse performance wise than they REALLY are.
18:56:30 <davean> erg, have to go.
18:56:40 <geekosaur> we generally use the criterion package, which knows how to work around laziness doing things like deferring all computation you thought had already taken place into the timed part
18:56:48 <tomsmeding> davean: not if you only force the final result :p
18:57:15 <tomsmeding> geekosaur: or if you want to only use the timing primitives and not the whole benchmarking+reporting suite around it, use the criterion-measurement package :p
18:57:27 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
18:57:46 × Axman6 quits (~Axman6@pdpc/supporter/student/Axman6) (Ping timeout: 246 seconds)
18:58:22 × mupf quits (~micha@v22017094964653601.ultrasrv.de) (Quit: WeeChat 2.9)
18:59:13 mupf joins (~micha@v22017094964653601.ultrasrv.de)
19:00:33 <sm[m]> Aha.. SPJ "The Launch of the Haskell Foundation", streaming on youtube in 40h - https://www.reddit.com/r/haskell/comments/jml10v/haskell_exchange_2020_opening_keynote_the_launch/
19:00:35 <tomsmeding> daydaynatation: fix 1: https://paste.tomsmeding.com/165QyyNN
19:01:42 <daydaynatation> cool! thx let me check
19:01:58 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
19:03:24 × berberman_ quits (~berberman@unaffiliated/berberman) (Ping timeout: 240 seconds)
19:03:33 berberman joins (~berberman@unaffiliated/berberman)
19:03:36 knupfer joins (~Thunderbi@200116b82c45b300e014d1b214daaf45.dip.versatel-1u1.de)
19:05:23 × kuribas quits (~user@ptr-25vy0i9b0d7gsf4mjtv.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
19:05:49 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Quit: Textual IRC Client: www.textualapp.com)
19:05:51 juuandyy joins (~juuandyy@90.166.144.65)
19:06:30 <daydaynatation> it does look better! but the two tests take similar time
19:06:48 <daydaynatation> tomsmeding: let me dig deeper. thx!
19:07:02 × wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Quit: leaving)
19:07:50 <tomsmeding> daydaynatation: or using criterion-measurement: https://paste.tomsmeding.com/uSMMDfGo
19:08:55 <tomsmeding> in the end it does basically the same thing in this case, but the advantage is that 1. you get more info than just the time (see the rest of the Measured data type), 2. the '1' can be increased to repeat the measurement, and 3. you're forced to choose how strictly you want to evaluate the result, here using nfIO
19:08:56 × mmohammadi9812 quits (~mmohammad@188.210.118.100) (Quit: Quit)
19:08:58 conal joins (~conal@198.8.81.68)
19:09:07 acidjnk_new joins (~acidjnk@p200300d0c72260501db9c4f6165b2eaf.dip0.t-ipconnect.de)
19:09:29 <tomsmeding> and if you want nice reports and fancy stuff, use the full criterion library :p
19:09:34 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
19:10:34 <daydaynatation> Thanks tomsmeding
19:10:35 <tomsmeding> if you'd have a normal pure value, not an IO action, you could use 'nf' instead of 'nfIO'
19:10:58 <tomsmeding> good luck :)
19:11:47 <daydaynatation> tomsmeding: I don't see criterion code in your last paste
19:12:05 <daydaynatation> tomsmeding: Perhaps wrong diff?
19:12:08 <tomsmeding> oh crap yes :')
19:12:52 <tomsmeding> https://paste.tomsmeding.com/z3fyxybh
19:12:58 <tomsmeding> (ignore the Lib/Main test/main replacements)
19:13:19 <tomsmeding> (using 'measure' doesn't return the actual function value, hence I removed that)
19:13:44 <daydaynatation> tomsmeding: Always a pleasure to learn a new Lib!
19:14:26 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
19:15:21 × berberman quits (~berberman@unaffiliated/berberman) (Read error: Connection reset by peer)
19:15:34 berberman_ joins (~berberman@unaffiliated/berberman)
19:16:44 × geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
19:17:01 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 264 seconds)
19:17:42 Tario joins (~Tario@201.192.165.173)
19:18:24 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
19:21:44 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
19:22:56 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 256 seconds)
19:23:25 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
19:25:15 × tauli quits (~textual@185.213.155.161) (Quit: Textual IRC Client: www.textualapp.com)
19:26:33 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
19:27:59 Amras joins (~Amras@unaffiliated/amras0000)
19:28:45 christo joins (~chris@81.96.113.213)
19:30:53 × u0_a298 quits (~user@47.206.148.226) (Read error: Connection reset by peer)
19:31:09 u0_a298 joins (~user@47.206.148.226)
19:32:25 Deide joins (~Deide@217.155.19.23)
19:33:05 × dcoutts_ quits (~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 240 seconds)
19:33:15 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
19:33:21 × bliminse quits (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Ping timeout: 256 seconds)
19:33:55 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
19:33:58 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Client Quit)
19:34:04 bliminse joins (~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
19:34:27 geekosaur joins (82659a09@host154-009.vpn.uakron.edu)
19:35:02 dcoutts_ joins (~duncan@33.14.75.194.dyn.plus.net)
19:36:32 <bqv> Friends how would you debug ffi-heavy haskell?
19:37:04 <maerwald> debug what
19:37:35 <bqv> Well see I have an issue. My program exits
19:37:45 <bqv> But not in failure, just exits
19:37:56 <bqv> No clue why, need to get interactive
19:38:01 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Read error: Connection reset by peer)
19:38:05 <bqv> But I reckon its in the C code
19:38:30 <sm[m]> reckon yer right, pardner
19:38:31 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
19:38:37 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
19:38:41 <geekosaur> since FFI is typically in IO, I do a lot of logging around the FFI calls. that said, if something in C is calling exit(), you can't typically intervene and it won't return control to Haskell
19:39:10 <geekosaur> the best you might do is an atexit handler that prints something while it's on the way out
19:39:15 × Saukk quits (~Saukk@2001:998:f9:2914:1c59:9bb5:b94c:4) (Remote host closed the connection)
19:39:16 <bqv> I've narrowed it down to the call, but now I wanna peek into that call
19:39:31 <bqv> But... gdb? Haskell?
19:39:42 <bqv> Is that even realistic?
19:39:43 AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl)
19:39:49 <monochrom> Can you add fprint(stderr's to the C code?
19:39:55 <geekosaur> you'd be able to trace back to the start of the call, at least
19:39:58 <bqv> The c code isn't mine :D
19:40:04 <bqv> Its a library
19:40:22 <bqv> Eh, I suppose I could recompile it
19:40:28 <sm[m]> yes, people successfully use gdb for this kind of thing I believe
19:40:36 <bqv> Thats a nuclear option though
19:40:59 <bqv> sm[m]: is there a trick to it or will it work ootb?
19:41:34 <pjb> nowadays we have the sources almost all the time, so you can just edit and recompile the library to help debug.
19:41:35 <sm[m]> I don't know gdb unfortunately.. someone here will know, otherwise try #ghc
19:41:57 <pjb> Sometimes there are already various DEBUG defines you can set to add traces.
19:42:08 <sm[m]> sometimes it's easier to read code and think about what could be going wrong
19:42:15 × ubert quits (~Thunderbi@p200300ecdf1e530be6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection)
19:42:35 <pjb> Depends on the kind of bug.
19:42:45 × knupfer quits (~Thunderbi@200116b82c45b300e014d1b214daaf45.dip.versatel-1u1.de) (Quit: knupfer)
19:42:57 knupfer joins (~Thunderbi@200116b82c45b3000805a93423d8669d.dip.versatel-1u1.de)
19:42:57 × raichoo quits (~raichoo@dslb-092-073-210-010.092.073.pools.vodafone-ip.de) (Quit: Lost terminal)
19:42:59 × invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds)
19:43:10 solonarv joins (~solonarv@astrasbourg-653-1-117-122.w90-33.abo.wanadoo.fr)
19:43:14 <bqv> Ack, there's another complication
19:43:19 <pjb> But one problem with reading the code (when it's you who wrote it), is that if there's a bug, it's because you have bad expectation about what it does, so reading again only makes you think about the bad interpretation, not the actual real one.
19:43:32 <pjb> Hence running it with prints. Here the problems usually jump to the eyes.
19:43:50 <bqv> The program has to be executed by another certain launcher...
19:44:01 <bqv> That makes gdb a pain
19:44:35 <pjb> You can wrap your program in a shell script, to log the arguments and environment set up by the launcher. Then you can replicate them in gdb.
19:45:03 <bqv> Its IPC
19:45:06 kritzefitz joins (~kritzefit@212.86.56.80)
19:45:09 <bqv> And setuid
19:45:12 <bqv> Not environment
19:45:26 <pjb> gdb can also attach to a process that's already run, eg. if your launcher sets up pipes and communicate with your program.
19:45:34 <pjb> gdb attach command is great!
19:46:00 <bqv> yeah, that would be the plan, so it would just be a matter of getting it to break immediately on launch so I can catch it
19:46:09 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
19:46:37 <tomsmeding> can't you just put 'threadDelay 1000000' at the start of your haskell program
19:46:45 <tomsmeding> or well, perhaps add a zero
19:46:47 mbomba joins (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca)
19:46:57 <bqv> Ahah, true
19:48:39 <tomsmeding> also if you want to postpone gdb for some reason (perhaps the library doesn't have debug symbols?), you can also run your program under 'strace -f -o log.txt'
19:48:49 <tomsmeding> and then grep the produced log.txt for the process ID if your program
19:49:11 <tomsmeding> (also -ff may be useful instead of -f, see the strace man page)
19:49:19 × mokulus_ quits (~mat@176.111.230.96) (Quit: WeeChat 2.9)
19:49:33 <tomsmeding> also maybe ltrace? though that's a bit hit and miss sometimes
19:49:37 mokulus joins (~mat@176.111.230.96)
19:49:49 <bqv> Oh that's a good point, yeah ltrace sounds an extremely easy win if it works
19:51:02 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
19:53:31 × aarvar quits (~foewfoiew@50.35.43.33) (Quit: Leaving.)
19:53:34 × juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
19:54:24 <bqv> You're kidding. Adding ltrace made the bug vanish
19:54:52 <maerwald> lolo
19:55:07 <maerwald> the beauty of debugging
19:55:36 <bqv> Extraordinary and inconvenient
19:55:46 <tomsmeding> does the library you call spawn new processes/threads?
19:55:56 <maerwald> space leak gone as soon as you enable heap profiling :p
19:56:10 <sm[m]> how about strace
19:56:17 <bqv> No processes, but threads yes
19:56:29 <tomsmeding> I bet something in your system receives a signal, and thus quits, and there is a wrapper around that that swallows the non-zero exit code
19:56:45 <tomsmeding> where "system" is collection of processes that your launcher starts
19:57:18 <bqv> ha! Strace works too...
19:58:01 <tomsmeding> "works" as in prevents the exit?
19:58:05 <bqv> Yes
19:58:10 <tomsmeding> fascinating
19:58:13 <tomsmeding> try gdb and valgrind
19:58:22 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
19:58:38 <bqv> those are far more complicated, i don't think i can try them right now
19:58:54 <tomsmeding> "can" as in want to, or understand how to?
19:59:10 <sm[m]> presumably it's not being killed by the OOM killer
19:59:14 <bqv> it's just problematic because this is a display compositor, so it being STOPped means my pc is unusable
19:59:21 <bqv> i need a second machine to gdb it
19:59:25 <bqv> as i discovered a few minutes ago
19:59:25 <tomsmeding> oof
19:59:34 <tomsmeding> well, you can switch to a different tty :p
19:59:42 <bqv> you'd think...
19:59:44 <bqv> but no :p
19:59:49 <tomsmeding> assuming the ctrl-alt-FN thing still goes through
20:00:01 <bqv> had to ssh in via phone to kill gdb
20:00:38 justsomeguy joins (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b)
20:00:38 × justsomeguy quits (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) (Changing host)
20:00:38 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
20:01:08 <bqv> is the class of bugs that vanish under strace/ltrace known?
20:01:13 vacm joins (~vacwm@70.23.92.191)
20:01:23 <bqv> or will i just have to wait to see what gdb does
20:01:30 × alx741 quits (~alx741@186.178.110.193) (Quit: alx741)
20:01:44 bqv !
20:01:48 <bqv> i can qemu this
20:01:51 <sm[m]> space leaks often vanish when you add haskell tracing. Not sure about your situation there
20:02:27 Gurkenglas__ is now known as Gurkenglas
20:02:38 <sm[m]> but that's why I asked about memory usage
20:02:38 <bqv> sm[m]: i've compiled with and without executable profiling enabled
20:02:43 <bqv> i don't think it affected anything
20:02:44 meowphius joins (~meowphius@pool-173-76-247-88.bstnma.fios.verizon.net)
20:02:46 × britva quits (~britva@2a02:aa13:7240:2980:292a:d07d:3ab9:26ba) (Quit: This computer has gone to sleep)
20:02:55 <bqv> is that what you had in mind, or a specific kind?
20:03:09 <tomsmeding> FWIW, you can simulate ctrl-alt-FN over ssh by running 'sudo chvt N'
20:03:18 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
20:03:22 <bqv> ah, yes
20:03:22 <sm[m]> bqv: no I haven't suggested haskell profiling (since it sounded like a FFI/c-related issue)
20:03:40 <tomsmeding> run gdb in a tmux, start the thing, observe screen freeze, chvt over ssh, tmux a, and continue?
20:04:16 <bqv> hmm
20:04:24 <bqv> maybe worth a try
20:04:33 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
20:04:43 <tomsmeding> (I was honestly surprised that chvt over ssh works)
20:05:21 <sm[m]> bqv: I don't think this is your issue but I was hinting to watch it in top once to make sure it's not being killed for using all memory - since this is pretty common with haskell apps
20:06:00 <bqv> i imagine that would be logged in dmesg too, anyway, right?
20:06:09 <tomsmeding> (and because I use an external display with the laptop lid shut, switching to a different tty over ssh made the systemd-inhibit process I have running nonfunctional, thus immediately sending my laptop to sleep...)
20:06:26 <sm[m]> perhaps, probably so
20:07:34 nullheroes joins (~danielvu@168.235.66.22)
20:08:40 <bqv> tomsmeding: nice! it worked
20:08:45 <tomsmeding> :D
20:08:45 × miklcct quits (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (Remote host closed the connection)
20:08:48 <tomsmeding> and?
20:09:01 <bqv> not helpful, because it works in gdb too :D
20:09:01 <tomsmeding> convoluted hacks are best hacks
20:09:09 <tomsmeding> 🎉
20:09:15 <tomsmeding> #fixed
20:09:30 <bqv> this is bizarre. am i just consigned to always run this with a debugger attached
20:09:32 <tomsmeding> is it reproducible outside tracing tools?
20:09:37 <bqv> to collapse the bug's wavefunction or something
20:09:38 geekosaur67 joins (82659a09@host154-009.vpn.uakron.edu)
20:09:44 <tomsmeding> does it happen always or just sometimes
20:09:48 <bqv> it is, yes, it's perfectly reproducible
20:09:53 × coot quits (~coot@37.30.60.135.nat.umts.dynamic.t-mobile.pl) (Remote host closed the connection)
20:09:57 miklcct joins (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7)
20:10:03 <bqv> without strace/ltrace/gdb, the program always exits within a second
20:10:21 <bqv> exitcode 0, no relevant error logged
20:10:35 <tomsmeding> exitcode 0 also of your haskell process, or only of the launcher around it?
20:10:37 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
20:10:47 <bqv> oh, that's a good point! i hadn't checked.
20:11:01 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) ()
20:11:09 <tomsmeding> c.f. my remark above that I bet something is getting a signal and the exit code is getting swallowed :p
20:11:13 elliott_ joins (~elliott_@pool-108-51-141-12.washdc.fios.verizon.net)
20:11:16 <tomsmeding> I've seen this before
20:11:27 mmohammadi9812 joins (~mmohammad@188.210.118.100)
20:11:29 <tomsmeding> (I think)
20:11:47 <geekosaur67> +RTS -v0 ?
20:12:03 <geekosaur67> (C call interrupted by RTS itimer)
20:12:09 × geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds)
20:12:17 <bqv> ha
20:12:19 <bqv> you were right
20:12:23 <bqv> it's getting USR1
20:12:27 <bqv> but it is exiting with 0
20:12:54 aarvar joins (~foewfoiew@50.35.43.33)
20:12:56 <bqv> does haskell die on SIGUSR1?
20:13:37 <geekosaur67> anything that doesn't specifically handle it will die
20:13:56 <tomsmeding> $ man 7 signal
20:14:01 <tomsmeding> SIGUSR1 has 'Term' as the default action
20:14:13 <bqv> that seems extreme
20:14:17 <tomsmeding> USR1 is a really weird one to get though
20:14:25 <tomsmeding> most signals have Term as default, only a few don't
20:14:57 <bqv> i feel like it's the launcher sending it
20:15:02 <tomsmeding> SIGHUP, or SIGBUS/SIGSEGV, SIGPIPE, I would've expected
20:15:17 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
20:15:50 <bqv> i'll try adding a System.Posix.Signals handler
20:16:49 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
20:17:53 <tomsmeding> if the process doesn't actively catch USR1 somehow, it shouldn't exit with code 0 due to it, but rather code 138
20:17:53 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
20:18:00 <tomsmeding> (128 + (10 == SIGUSR1))
20:18:21 <bqv> i checked by using bash -c "prog; echo $?"
20:18:30 <bqv> it echoed 0, but maybe that's a bash quirk
20:18:37 Tario joins (~Tario@201.192.165.173)
20:19:06 <bqv> hang on, maybe it wasn't recieving it, maybe it was sending it
20:19:13 rprije joins (~rprije@194-193-168-77.tpgi.com.au)
20:19:15 <monochrom> I don't know whether it's relevant. It may be safer to use the threaded runtime system (give -threaded to GHC at link time). This eliminates a SIGVTALRM that may interfere with some syscalls.
20:19:36 <bqv> i'm already using -threaded by necessity
20:19:45 <merijn> oh, oh, oh
20:19:52 <tomsmeding> bqv: is your program starting X? maybe https://www.x.org/archive/X11R6.8.1/doc/Xserver.1.html#sect11 ?
20:19:52 <monochrom> Ah OK.
20:19:56 <merijn> People are talking posix signals! My time to shine!
20:19:59 × flatmap quits (~flatmap@p200300dd370a47007ce3847efe0685c7.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
20:19:59 <merijn> You're all wrong
20:20:06 <bqv> tomsmeding: wayland, unfortunately
20:20:10 coot joins (~coot@37.30.52.148.nat.umts.dynamic.t-mobile.pl)
20:20:17 <monochrom> That sounds like s/shine/roast/, merijn. :)
20:20:20 <merijn> No clue what was being discussed, but per my usual heuristic it's a safe bet
20:20:26 <bqv> lmao
20:20:37 × tms_ quits (thomaav@cassarossa.samfundet.no) (Ping timeout: 264 seconds)
20:20:45 <merijn> 'cause no one ever gets signals right
20:20:53 tomsmeding dies from apprehension
20:20:57 <monochrom> To be fair, on certain other topics, I'm the one to say "as usual, all of you were wrong"
20:21:00 hackage foldl 1.4.10 - Composable, streaming, and efficient left folds https://hackage.haskell.org/package/foldl-1.4.10 (GabrielGonzalez)
20:21:12 <merijn> as for the safety of -threaded and signals the answer is pretty simple.
20:21:50 <merijn> While I haven't actually audited the signal handling code in GHC's RTS yet, I've concluded from discussions in #ghc that it's impossible to predictably and correctly handle posix signals in any runtime
20:22:24 <monochrom> Is that just the worst case? Or is that also the average case.
20:22:45 <tomsmeding> for that statement to be correct you'll have to define "any runtime" more precisely
20:22:49 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
20:22:51 <merijn> monochrom: The average case it "it'll probably approximate what you intended"
20:22:52 <bqv> oh
20:22:55 <bqv> tomsmeding: wait, yes it is
20:22:56 <tomsmeding> not saying that posix signals are a great design, but they _can_ work
20:23:00 <bqv> because xwayland
20:23:01 <merijn> tomsmeding: Either of the existing threaded/unthreaded runtimes
20:23:13 <monochrom> I have accepted approximations.
20:23:16 <tomsmeding> bqv: yes xwayland seems to inherit the same sigusr1 shenanigans from a quick web search
20:23:24 <bqv> (also i checked source, as i suspected, my program is sending USR1, not recieving it
20:23:27 <monochrom> (E.g., when I said "I no longer ask for great software")
20:23:43 × ggole quits (~ggole@2001:8003:8119:7200:c42a:651c:d46:c888) (Quit: Leaving)
20:23:45 <merijn> Basically, the threaded RTS *and* the "unthreaded" (confusingly) use multiple threads
20:24:10 <monochrom> But there is also the angle that I am not using POSIX per se, I am using specifically Linux.
20:24:13 <merijn> But do absolutely nothing to control which threads get signals, which means you have zero predictability of what gets interrupted when and what you can safely do in your handler
20:25:05 <merijn> monochrom: linux has never made anything from posix *more* robust :p
20:25:12 <bqv> ooh you bastard
20:25:13 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
20:25:15 <tomsmeding> so the runtime needs to handle the signal internally, then raise an asynchronous haskell exception or something at the earliest opportunity _outside_ the actual signal handler, at which point the haskell-level signal handler can run
20:25:19 <bqv> installing the USR1 handler fixed it
20:25:22 <tomsmeding> I assume the ghc runtimes do that?
20:25:27 <tomsmeding> bqv: yay!
20:25:36 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
20:25:46 <bqv> that's kinda frustrating because now i'm not entirely sure what's even happening here
20:25:50 <bqv> but oh well, it's solved at least
20:25:56 <merijn> tomsmeding: Essentially, what I've concluded from work a few years ago on signal handling in a multi-threaded runtime is that there's only one possible way you can get any kind of predictable behaviour
20:26:46 <merijn> You mask all signals in every thread, then have a single dedicated thread blocking on sigwait() (or it's pthread equivalent) and then have that thread set up the relevant flags/whatever to run user code
20:26:51 <merijn> Anything else is insanity
20:27:02 tms_ joins (thomaav@cassarossa.samfundet.no)
20:27:10 <bqv> but wait, even in haskell?
20:27:22 <merijn> bqv: In all languages
20:27:31 <geekosaur67> signals happen at a level below haskell
20:27:33 <bqv> won't the runtime behave vaguely predictably due to lightweight threads
20:27:34 <tomsmeding> bqv: some process in your tree, say P, assigns a SIG_IGN handler for SIGUSR1, and has another child process that still has the terminating SIG_DFL on SIGUSR1; then P starts xwayland, which detects SIG_IGN, sends SIGUSR1 to its parent which flows down to the other child, which terminates, which wreaks havoc
20:27:37 <tomsmeding> hypothesis
20:27:43 <tomsmeding> completely unproven :D
20:27:50 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
20:27:57 <merijn> bqv: Yes, but those haskell threads are stilling running on pthreads at some point
20:28:06 <merijn> s/stilling/still
20:28:08 <christo> in haskell you can have 2 threads running simmultaneously right?
20:28:09 <bqv> hmm
20:28:16 <christo> or n threads
20:28:16 <merijn> christo: Sure
20:28:29 <christo> i might be make a version of tetris in haskell
20:28:34 <bqv> i mean moot point because i am using forkOS
20:28:37 <merijn> christo: GHC does N:M multi-threading, so your multiplex N haskell threads on top of M OS threads
20:28:38 <bqv> and -threaded
20:28:39 <christo> and do all the music running at the same time with euterpea
20:28:43 <tomsmeding> so merijn while you have a point about unpredictability of signals, it was _not_ actually the problem here ;)
20:28:44 <monochrom> merijn: I think every expert agrees on that strategy, yes.
20:28:46 <merijn> bqv: forkOS doesn't spawn OS threads
20:29:04 <merijn> bqv: forkOS just prevents your Haskell thread from migrating between OS threads
20:29:13 <bqv> right, bound thread
20:29:36 <bqv> but then given i have the bound thread running exclusively ffi code, i have at least 2 threads
20:29:38 <christo> in js i use canvas to draw, in haskell is there an equivalant? thx merijn
20:29:38 <bqv> right?
20:29:49 <merijn> christo: gloss, maybe?
20:30:17 <christo> and in terms of networking, are there api's for that in haskell?
20:30:18 <monochrom> No, forkOS has to spawn a fresh OS thread. What you want to not-guarantee is that this doesn't mean Haskell code will run on that OS thread.
20:30:21 <christo> gloss? i'll look into it
20:30:22 <merijn> bqv: That depends, for example are the safe foreign imports or unsafe foreign imports
20:30:34 <merijn> christo: the "network" package? :p
20:30:42 <bqv> er, hard to say
20:30:44 <merijn> christo: It's basically a thin wrapper over posix sockets
20:30:46 <bqv> i'm using inline-c
20:30:46 <monochrom> Still, in practice, Haskell code will run on that OS thread, even though this fact is not future-proof.
20:31:02 <christo> so in theory i can make an online tetris in haskell ?
20:31:09 <merijn> monochrom: No, forkOS explicitly does not spawn a fresh OS thread
20:31:16 <christo> or tetris client
20:31:22 <monochrom> Therefore, I find "forkOS doesn't spawn an OS thread" is at best academic scaremongering, at worst a downright lie.
20:31:58 <merijn> monochrom: forkOS spawns a bound thread, it doesn't affect the number of OS threads in existence
20:32:56 <monochrom> Then you wouldn't have enough number of OS threads for sufficiently many independent C calls.
20:33:32 × Katarushisu quits (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net) (Ping timeout: 272 seconds)
20:33:47 <merijn> monochrom: What? How are those two things remotely related to each other?
20:34:22 dbmikus_ joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
20:35:00 <monochrom> Do you mind taking a look at my answer already written up at http://www.vex.net/~trebla/haskell/ghc-conc-ffi.xhtml ? You can scroll down to the section "thread-local FFI calls"
20:35:03 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
20:35:31 <geekosaur67> those are I/O manager threads, and it'll block waiting for one to become available if needed
20:36:02 × dbmikus quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 264 seconds)
20:36:07 <geekosaur67> separate pool from forkIO / forkOS threads
20:36:39 <bqv> strange. the signal handler definitely solves the issue, but when i change the handler to do "something", it doesn't do that thing (but still solves the issue)
20:36:46 ^[_ is now known as ^[
20:37:09 <c_wraith> as I understand it, the only guarantee forkOS makes is that all safe FFI calls it makes will be on the same OS thread. Nothing about having exclusive access to that OS thread.
20:37:12 × ^[ quits (sid43445@gateway/web/irccloud.com/x-iztepeaguyumtzta) (Changing host)
20:37:12 ^[ joins (sid43445@ircpuzzles/2015/april-fools/sixth/zgrep)
20:37:26 <merijn> c_wraith: That's what the GHC docs say, yes
20:37:59 <c_wraith> does the RTS actually give a stronger guarantee at this time?
20:38:17 <merijn> Possibly, according to monochrom
20:39:33 <bqv> surely forkOS twice then has to spawn at least one thread (or reuse one), because the resultant bound threads can't be the same or you'd run into concurrency problems
20:40:00 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
20:40:01 <tomsmeding> unless there's already one laying around
20:40:03 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
20:40:32 <bqv> exactly, yeah
20:40:38 × domj quits (~domj@77.139.218.14) (Ping timeout: 260 seconds)
20:40:45 <merijn> bqv: Why would you run into concurrency problems?
20:41:11 <merijn> bqv: I don't see any conflict in having two bound threads on the same OS thread
20:41:12 <geekosaur67> I don't think anything guarantees there won't be a block waiting for an available thread to run your FFI call on
20:41:14 <bqv> merijn: envision a situation where both FFI threads block indefinitely
20:41:19 <tomsmeding> bqv: the only reason I can think of that that happens (handler solves issue but doesn't run itself), is that some process between you and the SIGUSR1-sender detects that the SIGUSR1 handler is not SIG_DFL and therefore installs its own handler
20:41:25 <merijn> bqv: Well, "don't do that, then" :)
20:41:28 <bqv> lmao
20:41:29 <tomsmeding> but that would be obscure
20:41:30 hackage HDBC-postgresql 2.4.0.0 - PostgreSQL driver for HDBC https://hackage.haskell.org/package/HDBC-postgresql-2.4.0.0 (ErikHesselink)
20:41:35 × AlterEgo- quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
20:42:03 <merijn> bqv: Actually, that's already a problem if only one of them blocks indefinitely
20:42:06 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
20:42:13 <bqv> tomsmeding: that sounds bizarre
20:42:17 <monochrom> Huh? I thought the whole point of "safe FFI call" is it can block all it wants and no one else is held waiting.
20:42:21 <merijn> bqv: If monochrom is right (which at casual glance of the code is probably true)
20:42:24 <tomsmeding> bqv: I'm kind of hoping it's not true
20:42:29 <merijn> bqv: Then that can't happen
20:42:53 <merijn> monochrom: It looks like you are probably correct per the code, but that's not what GHC guarantees per the docs
20:43:05 <monochrom> The docs are outdated.
20:43:16 <merijn> Now, maybe the docs are wrong and don't provide strong enough guarantees
20:43:44 <monochrom> There is even an old version of the doc that positive guaranteed you would have only one capability, ever.
20:43:52 <monochrom> Now look at -N100.
20:44:02 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
20:44:10 <merijn> monochrom: once you do a safe foreign call the capability is unlocked
20:44:11 <bqv> signal() is a syscall, i can strace this...
20:44:22 <merijn> So if you have another thread then safe foreign calls can never block Haskell code, sure
20:44:25 <tomsmeding> bqv: watch for sigaction() instead I think
20:44:47 <merijn> But I'm pretty sure that you can run out of safe call threads if you keep spamming enough blocking safe calls
20:44:47 <tomsmeding> though things might detect being ptrace'd >:D
20:45:21 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
20:45:29 <merijn> bqv: I hope to god that signal() isn't called
20:45:52 <merijn> signal is broken and deprecated for two decades, it should be sigaction() as tomsmeding points out
20:46:29 u0_a298` joins (~user@47.206.148.226)
20:46:43 Katarushisu joins (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net)
20:46:51 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
20:47:03 <bqv> i see a lot of rt_sigaction
20:47:11 <bqv> none refer to usr1
20:47:12 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
20:47:28 <tomsmeding> welcome to the world of strace, where you suddenly see the loads of crap that everything executes
20:47:38 <bqv> in fact there's no reference to usr1 at all
20:47:43 <bqv> unless it's numeric
20:47:47 <monochrom> I like signal() when I'm just tell it to SIG_IGN or SIG_DFL. It's dreadful to have to fill out a form for just those. And I always have trouble deciding whether the other fields really matter or not for those cases.
20:47:53 <bqv> 128?
20:48:16 <tomsmeding> bqv: 10
20:48:42 <tomsmeding> monochrom: glibc's surface signal(3) probably calls sigaction(2) under the hood
20:48:42 <bqv> nothing for that either
20:48:46 <bqv> bizarre
20:48:53 <merijn> monochrom: Those two are defensible, but as soon as you install an actual handler it's unusably broken
20:49:11 <monochrom> Right, I know that.
20:49:43 <monochrom> I'm a good kid, I use sigaction and make careful decisions about the options, when it's my handler.
20:50:01 × u0_a298 quits (~user@47.206.148.226) (Ping timeout: 264 seconds)
20:50:06 alp joins (~alp@2a01:e0a:58b:4920:ecfe:1146:fdb5:4e48)
20:50:13 <bqv> ah wait
20:50:24 <monochrom> And those fields are actually useful for handlers.
20:50:49 <bqv> no, even with strace i should at least see the handler installed, right?
20:50:58 <bqv> what is going on...
20:51:04 <tomsmeding> with 'strace -f' yes
20:51:09 <bqv> why -f?
20:51:13 <bqv> i don't fork
20:51:15 <geekosaur67> follow forks
20:51:20 <tomsmeding> your children do
20:51:24 <geekosaur67> but the parent does, you said?
20:51:30 <tomsmeding> that
20:51:33 <tomsmeding> sorry
20:51:41 <bqv> i'm running `launcher -- strace program`
20:51:50 <bqv> so strace's immediate child should be traced
20:51:50 <tomsmeding> use -f anyway to be sure :p
20:52:00 <bqv> but then i end up tracing x11 ;_;
20:52:02 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
20:52:06 <bqv> that's ..not pretty
20:52:10 <tomsmeding> which might very well be the culprit
20:52:16 <tomsmeding> use -ff perhaps
20:52:26 <bqv> see you in a minute or two...
20:52:28 <tomsmeding> splits out the log for separate processes
20:52:49 <monochrom> -fff and -ppp...
20:53:49 <bqv> oh good god that's too many processes
20:54:05 <bqv> but at least now i have some hits for USR1
20:54:31 <bqv> 149, to be exact
20:54:32 <monochrom> P.S. I am a robot and I always tried to train myself to have 10 levels of consistent strength for the range from ppp to fff.
20:54:43 <tomsmeding> you may also like --trace for strace, or just rely on good-old grepping (better)
20:55:06 <bqv> yeah, it's ok, i'm in emacs, so i can just smartly grep through this
20:55:34 <tomsmeding> monochrom: I have the fortune of not being classically trained so I just take those dynamics markings as a general guideline :D
20:55:37 <bqv> but i have truly no idea how to interpret any of it
20:55:46 <monochrom> Yeah data scientists recommend saving all data and worrying about mining later.
20:56:09 <tomsmeding> how many lines is 'grep USR1 *'
20:56:17 <tomsmeding> $ grep USR1 * | wc -l
20:56:22 <bqv> 149
20:56:23 <monochrom> Oh, I think classical music people also take liberty. They too are against my robotic way.
20:56:34 <tomsmeding> bqv: pastebin plz
20:56:53 <monochrom> Or at least, fff for one piece don't have to be the same as fff for another piece.
20:57:03 <tomsmeding> makes sense
20:57:14 × Aquazi quits (uid312403@gateway/web/irccloud.com/x-onbapdmfluqaidcp) (Quit: Connection closed for inactivity)
20:57:24 <tomsmeding> some composers are less liberal with their fff's I'd think, rather calling that f or ff
20:57:34 <monochrom> This is why I'm better off as a computer scientist or programmer or the like.
20:57:50 <tomsmeding> apparently unicode has symbols for them 𝆑 𝆏
20:58:10 <monochrom> If the code says "x = 1" then it is 1, what do you mean musicality allows you to change it to 2.
20:58:37 <tomsmeding> something with physicists and pi?
20:58:46 <bqv> termbin.com doesn't like recieving this many lines...
20:58:51 <tomsmeding> 149?
20:58:58 <bqv> oh no i was gonna send the full thing
20:58:59 <tomsmeding> sounds like a crappy pastebin, try mine
20:59:05 <dsal> bqv: I think you're just supposed to dump them into irc if you have too many lines.
20:59:05 <tomsmeding> oh lol
20:59:13 <bqv> it's only 1.9mb
20:59:27 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
20:59:40 <tomsmeding> tar cz * | curl --data-binary @/dev/stdin https://tomsmeding.com/gooi/things.tar.gz
21:00:02 × mmalecki quits (~mmalecki@154.13.1.56) ()
21:00:21 geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
21:00:28 <bqv> i can't tell if that succeeded or not
21:00:33 <tomsmeding> did it print a URL
21:00:44 <bqv> oh, yes
21:00:52 <bqv> https://tomsmeding.com/vang/IZn8dA/things.tar.gz
21:00:58 <bqv> also https://tomsmeding.com/vang/9OW8PN/things.tar.gz
21:01:59 <tomsmeding> identical?
21:02:06 <bqv> yeah lol
21:02:11 <bqv> i did it twice by mistake
21:02:35 <tomsmeding> (link is valid for 24 hours btw)
21:02:54 <tomsmeding> cabal > stack I approve
21:03:01 <bqv> :D
21:04:25 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
21:04:29 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
21:04:36 × ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
21:05:37 <tomsmeding> why does process 1691973 write out "wl_display_create() = 0x00007f4770000c80" c h a r a c t e r b y c h a r a c t e r
21:05:49 <bqv> that's coming from haskell, tbf
21:06:12 <bqv> i think it might be because i build that string using a monoid
21:06:14 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Ping timeout: 268 seconds)
21:06:21 <bqv> (execWriter)
21:06:30 <tomsmeding> ah no it's just String being String I think
21:06:36 <bqv> heh
21:06:43 <tomsmeding> but that's your haskell, apparently?
21:07:02 <bqv> yes
21:07:13 <bqv> (that's a hilarious sideeffect, btw)
21:07:31 <tomsmeding> (line 1427 in your log)
21:07:40 <bqv> yeah i found it
21:09:02 × Kaivo quits (~Kaivo@104-200-86-99.mc.derytele.com) (Ping timeout: 264 seconds)
21:09:14 × bitmapper quits (uid464869@gateway/web/irccloud.com/x-kktozexnvkkmtbir) (Quit: Connection closed for inactivity)
21:09:25 britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch)
21:11:22 Kaivo joins (~Kaivo@ec2-15-222-231-32.ca-central-1.compute.amazonaws.com)
21:11:36 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
21:11:56 <bqv> so the launcher sets handlers using sigaction on USR1
21:11:57 <tomsmeding> merijn: apparently the haskell runtime uses signalfd4(2) and immediately after masks the signal
21:12:03 <bqv> it's using that x11 mechanism
21:12:06 <tomsmeding> (TIL sigalfd4)
21:12:18 <bqv> perhaps the haskell runtime is clearing something it shouldn't?
21:13:01 <tomsmeding> what process are you starting directly after you attach a handler to SIGUSR1 in haskell code?
21:13:14 × chaosmasttter quits (~chaosmast@p200300c4a72dee01a86cafb086ba766e.dip0.t-ipconnect.de) (Quit: WeeChat 2.9)
21:13:14 <tomsmeding> (process 1692017)
21:13:57 <bqv> i don't see anything fork-like happening around there
21:14:15 <bqv> the immediate next line is basically a call to wl_display_create()
21:14:24 <bqv> then a load of c marshalling
21:14:53 <bqv> (actually, none of my code specifically creates any processes, but the launcher does, and the library might)
21:15:11 <tomsmeding> ah
21:15:35 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
21:15:54 <bqv> oh
21:16:05 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
21:16:15 <bqv> would it matter if the handler was within a forkOS bound thread that's blocked indefinitely?
21:16:23 <bqv> i thought because it's haskell code, it wouldn't be bound
21:16:29 <bqv> but maybe it's blocked for that reason?
21:16:42 <tomsmeding> ¯\_(ツ)_/¯
21:17:07 <tomsmeding> I'm actually not all that familiar with the intricacies of forkOS, defer to the other people that contributed earlier :p
21:17:22 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
21:17:45 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
21:17:49 <tomsmeding> AH
21:18:17 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
21:18:30 <tomsmeding> okay I was wrong, that signalfd4 is not the haskell rts, that's whatever library you're using
21:18:41 <bqv> oh, that's interesting
21:18:52 loprakoa[m] joins (loprakoama@gateway/shell/matrix.org/x-xavaolgsmkbljkqt)
21:19:01 <tomsmeding> early on there is an rt_sigaction that binds a handler to USR1; that'll be your code, because quickly after there is that c h a r a c t e r call to wl_display_create()
21:19:49 <tomsmeding> later, though, at :13587-13588, your own haskell process (but I think the library, really) makes a signal FD and then SIG_BLOCK's USR1 in your process
21:20:00 <tomsmeding> hence your handler doesn't fire
21:20:28 <bqv> what on earth
21:20:37 <geekosaur67> that's documented
21:20:44 <geekosaur67> go read the signalfd4 manpage
21:21:10 <tomsmeding> geekosaur67: I think bqv is not reacting to the syscalls' behaviour, but the behaviour of the library he's using
21:21:18 <bqv> yeah
21:21:38 <bqv> oh interesting, i think i know what call's doing that
21:21:41 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
21:21:46 <bqv> maybe if i put the handler after that then
21:21:49 × tms_ quits (thomaav@cassarossa.samfundet.no) (Ping timeout: 264 seconds)
21:22:01 <geekosaur67> I expect it just lists out all the non-SIG_DFL signals and does the signalfd4() thing on them
21:22:08 <geekosaur67> so it's just not expecting your handler
21:22:25 <bqv> well actually, to be honest that's perfectly reasonable behaviour, i was just confused as to how it was occuring
21:22:37 <bqv> but as long as nothing's broken, i can live with just setting an ignore handler
21:22:38 <tomsmeding> geekosaur67: it specifically only does it for CHLD and USR1
21:23:08 × u0_a298` quits (~user@47.206.148.226) (Ping timeout: 256 seconds)
21:23:15 <tomsmeding> probably that's the best approach bqv
21:23:53 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
21:24:05 <tomsmeding> note that process 1691972 also puts a SIG_BLOCK on USR1 at line 3922, but that's for a different process (not sure which)
21:24:26 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
21:24:29 <bqv> yes, by my guess, one is for my process, one is for Xwayland
21:25:39 <tomsmeding> ah at some point your haskell process (but really the library probably) forks to 1692017, puts a SIG_IGN handler on USR1, and then exec's Xwayland
21:25:56 <tomsmeding> so it's not the block that's the culprit, it's that overwrite
21:25:59 <tomsmeding> I think
21:26:08 <tomsmeding> (line 13615)
21:26:28 × Franciman quits (~francesco@host-79-36-167-172.retail.telecomitalia.it) (Quit: Leaving)
21:26:37 <bqv> I actually estimate i might be able to still hook into the signal, because it looks like it's fed into the wayland event loop
21:27:02 <bqv> it'll just look bizarre that i set the signal to ignore on one line and then hook into it using a completely different mechanism a few lines below
21:27:10 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
21:27:13 <bqv> thanks, wayland
21:27:20 × bliminse quits (~bliminse@host109-156-197-211.range109-156.btcentralplus.com) (Remote host closed the connection)
21:27:35 <tomsmeding> that's what a code comment is for :)
21:27:39 bliminse joins (~bliminse@host109-156-197-211.range109-156.btcentralplus.com)
21:28:02 <tomsmeding> nice search, thanks for the evening entertainment bqv
21:28:10 <bqv> bah, nah, didn't work
21:28:15 <bqv> hehe, no problem
21:28:27 tms_ joins (thomaav@cassarossa.samfundet.no)
21:28:38 z0 joins (~z0@188.250.0.59)
21:28:43 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
21:29:13 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
21:29:50 <tomsmeding> so in hindsight, strace/ltrace/gdb probably "fixed" the problem by handling signals or something?
21:32:47 acidjnk_new2 joins (~acidjnk@p200300d0c718f623ecaa4caf6803be45.dip0.t-ipconnect.de)
21:32:55 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
21:32:58 <bqv> yeah, exactly
21:34:24 × acidjnk_new quits (~acidjnk@p200300d0c72260501db9c4f6165b2eaf.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
21:36:02 × solonarv quits (~solonarv@astrasbourg-653-1-117-122.w90-33.abo.wanadoo.fr) (Ping timeout: 264 seconds)
21:36:06 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
21:37:41 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
21:37:44 × geekosaur67 quits (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection)
21:38:35 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
21:39:15 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
21:39:47 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
21:41:18 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 272 seconds)
21:41:36 xwvvvvwx- joins (~xwvvvvwx@45.129.56.198)
21:44:28 × xwvvvvwx quits (~xwvvvvwx@185.213.155.160) (Ping timeout: 272 seconds)
21:44:28 xwvvvvwx- is now known as xwvvvvwx
21:47:53 zebrag joins (~inkbottle@aaubervilliers-654-1-104-94.w86-212.abo.wanadoo.fr)
21:48:15 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
21:49:12 × inkbottle quits (~inkbottle@aaubervilliers-654-1-1-110.w83-200.abo.wanadoo.fr) (Ping timeout: 260 seconds)
21:49:37 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
21:52:58 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 260 seconds)
21:54:49 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
21:57:25 × p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Ping timeout: 268 seconds)
21:59:22 obihann joins (~jhann@156.34.160.69)
21:59:54 p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515)
22:00:22 Rudd0 joins (~Rudd0@185.189.115.98)
22:00:28 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
22:00:30 × knupfer quits (~Thunderbi@200116b82c45b3000805a93423d8669d.dip.versatel-1u1.de) (Ping timeout: 268 seconds)
22:01:23 × vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:02:46 × mmohammadi9812 quits (~mmohammad@188.210.118.100) (Quit: Quit)
22:03:11 mmohammadi9812 joins (~mmohammad@188.210.118.100)
22:04:24 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 240 seconds)
22:05:26 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 264 seconds)
22:07:05 prozion joins (b29b04cd@gateway/web/cgi-irc/kiwiirc.com/ip.178.155.4.205)
22:07:15 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
22:09:10 invaser joins (~Thunderbi@31.148.23.125)
22:10:03 vacm joins (~vacwm@70.23.92.191)
22:11:33 kupi joins (uid212005@gateway/web/irccloud.com/x-izotevyprbcyotcz)
22:12:07 <Cheery> Is there any libraries written for text layouting/typesetting in haskell?
22:12:10 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
22:13:11 <Uniaika> hmm, not that I know of
22:13:41 <dsal> HaTeX
22:13:51 <Cheery> I am curious because I wnoder what structure of something like XML/HTML is necessary.
22:14:02 whatisRT joins (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f)
22:14:06 <dsal> If it doesn't exist... that's probably fine.
22:14:23 <Cheery> HaX
22:14:34 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
22:14:48 <Cheery> there's luispedro's hex
22:15:03 × hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 258 seconds)
22:15:13 <Cheery> it says not complete
22:15:50 × daydaynatation quits (~user@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
22:18:05 flatmap joins (~flatmap@p200300dd370a4700ac5fe25fa28a3bcb.dip0.t-ipconnect.de)
22:18:21 × gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
22:18:24 × flatmap quits (~flatmap@p200300dd370a4700ac5fe25fa28a3bcb.dip0.t-ipconnect.de) (Client Quit)
22:19:42 coot_ joins (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl)
22:20:06 <Cheery> Hm. I could port my reimplementation
22:21:02 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
22:21:27 × coot quits (~coot@37.30.52.148.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 260 seconds)
22:21:28 coot_ is now known as coot
22:22:23 <Cheery> hatred, haskell typesetting
22:22:56 <jackdk> is there a canonical two-type-arg version of `Proxy`?
22:23:32 × prozion quits (b29b04cd@gateway/web/cgi-irc/kiwiirc.com/ip.178.155.4.205) (Quit: Connection closed)
22:23:33 × obihann quits (~jhann@156.34.160.69) (Quit: Lost terminal)
22:23:34 <gobbleguy> Proxy (x,y)? :)
22:23:56 Sheilong joins (uid293653@gateway/web/irccloud.com/x-faekvzqkhmohaswr)
22:25:10 <kupi> hi
22:25:23 obihann joins (~jhann@156.34.160.69)
22:25:24 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 240 seconds)
22:25:29 <jackdk> gobbleguy: ha. I'm considering a type like `data P p q f g a b = P (p a (f b)) (q b (g a))`, with the idea that generally you have `p ~ q ~ (->)` but if you need to give up roundtripping, you can kill one side or the other by putting a `data Proxy2 a b = Proxy2` in for `p` or `q`
22:25:33 <kupi> here https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Data.Foldable.html#foldlM how foldr is called with 4 parameters? when I click the definition it only shows 3
22:26:21 <jackdk> kupi: note the function `return` is passed in, so the result of the fold is itself a function
22:26:30 N3RGY joins (~N3RGY@65.141.87.122)
22:26:41 <jackdk> Cheery: consider looking at pretty-printer libraries and/or pandoc?
22:26:54 × invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 272 seconds)
22:27:37 × vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:27:50 ffej joins (~ffej@195.206.169.184)
22:28:02 <kupi> so f a b is the same as (f a) b?
22:28:10 × obihann quits (~jhann@156.34.160.69) (Client Quit)
22:28:29 PerseusPlease joins (~{mikey}@212.86.35.157)
22:28:35 <PerseusPlease> hi.
22:29:15 <jackdk> kupi: if you're talking about function application, yes. It associates to the left
22:29:58 <PerseusPlease> Super basic question. For a given module (in this case Data.Binary.Get) how do I know what name needs to go in build-depends? I haven't been able to assign rhyme or reason to it so far
22:30:07 <PerseusPlease> ?
22:30:19 × coot quits (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
22:30:43 × thc202 quits (~thc202@unaffiliated/thc202) (Ping timeout: 268 seconds)
22:31:06 <jackdk> PerseusPlease: this one? https://hackage.haskell.org/package/binary-0.10.0.0/docs/Data-Binary-Get.html
22:31:58 <PerseusPlease> yep. but could just as well apply as a question to any of the modules I've included so far, I've been able to guess on the others but they often don't make sense
22:34:27 <jackdk> The package name is `binary`. If you click "Contents" in the top-right, it takes you to the top-level page for that package. The name also appears in the top-left of a module's documentation (`binary-0.10.0.0: Binary serialization for Haskell values using lazy ByteStrings`) and in the URL on hackage haddocks
22:34:59 <PerseusPlease> thank you!
22:35:10 <PerseusPlease> that will make life much easier.
22:35:52 <jackdk> welcome
22:37:06 dustypacer joins (~pi@137-025-112-171.res.spectrum.com)
22:38:20 <monochrom> The URL already contains the package name.
22:38:48 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
22:39:10 vacm joins (~vacwm@70.23.92.191)
22:39:25 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
22:40:47 hekkaidekapus{ joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
22:42:02 ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net)
22:42:59 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
22:43:03 × hekkaidekapus_ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
22:43:48 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:44:38 × son0p quits (~son0p@181.136.122.143) (Quit: leaving)
22:45:59 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
22:47:00 × ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Ping timeout: 256 seconds)
22:47:27 alx741 joins (~alx741@186.178.110.193)
22:47:59 ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
22:48:34 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
22:49:08 <dibblego> foldr takes 1 parameter
22:50:20 <PerseusPlease> monochrom, ah yes so it does, now that I know what I'm looking for.
22:50:27 × mokulus quits (~mat@176.111.230.96) (Ping timeout: 268 seconds)
22:52:07 berberman joins (~berberman@unaffiliated/berberman)
22:52:13 <koz_> Is there a way to get all transitive deps of a Hackage package?
22:52:57 <N3RGY> koz_: maybe cabal-dependency-licenses ?
22:53:02 × N3RGY quits (~N3RGY@65.141.87.122) ()
22:53:12 <monochrom> Yikes haha
22:53:53 <monochrom> But I use "cabal freeze" (but I have to first write a foo.cabal that has a build-depends line for the starting point)
22:54:43 <monochrom> So yeah, basically hacks and hammers that solve a much bigger problem and get you the transitive closure as a side effect.
22:54:54 <koz_> OK, a different question: I have a .prof that says a particular function is eating a lot of time. However, I assume it's being called _by_ something. Is there an easy way to tell what's calling said function? I can't quite make sense of the .prof layout.
22:56:00 × berberman_ quits (~berberman@unaffiliated/berberman) (Ping timeout: 268 seconds)
22:57:59 Varis joins (~Tadas@unaffiliated/varis)
22:58:12 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
23:00:18 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
23:01:32 × britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep)
23:01:39 × jedws quits (~jedws@101.184.150.81) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:03:05 jedws joins (~jedws@101.184.150.81)
23:04:59 hekkaidekapus{ is now known as hekkaidekapus
23:05:26 × alp quits (~alp@2a01:e0a:58b:4920:ecfe:1146:fdb5:4e48) (Ping timeout: 264 seconds)
23:05:37 × dbmikus_ quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 264 seconds)
23:06:50 <hekkaidekapus> koz_: 1) Transitive deps as a graph: `cabal-plan dot`.
23:07:08 <koz_> hekkaidekapus: Just as a list is fine.
23:07:14 <hekkaidekapus> 2) .prof visualisation: <https://github.com/jaspervdj/profiteur>
23:07:48 heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
23:07:58 <hekkaidekapus> 3) Nowadays, GHC has so-called ‘events’, read more at <file:///home/tchouri/Downloads/eventful%20GHC-Alp%20Mestanogullari_2019-09-24.html>
23:08:12 macrover joins (~macrover@ip70-189-231-35.lv.lv.cox.net)
23:08:18 <hekkaidekapus> oops!
23:08:22 <hekkaidekapus> <https://www.well-typed.com/blog/2019/09/eventful-ghc/>
23:09:18 <monochrom> Oh, cabal-plan is a much better tool for this.
23:09:30 <monochrom> I keep forgetting that it exists.
23:09:30 <koz_> profiteur looks great!
23:09:41 <koz_> (I am disappoint it wasn't named 'profiterole')
23:09:43 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
23:09:46 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
23:10:17 × whatisRT quits (~whatisRT@2002:5b41:6a33:0:dea6:32ff:fe5b:d45f) (Ping timeout: 260 seconds)
23:10:34 × chele quits (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection)
23:10:52 <koz_> Let me try profiteur.
23:11:26 × dhouthoo quits (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
23:12:14 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
23:12:43 wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
23:12:53 × heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
23:13:38 <koz_> hekkaidekapus: Is cabal-plan a separate thing?
23:13:44 <koz_> Like, where do I get it?
23:14:00 <hekkaidekapus> It’s part of phadej-verse :)
23:14:20 <koz_> Lol, the Phadej Extended Universe.
23:14:28 <hekkaidekapus> Rather haskellari-verse :P
23:14:57 × m0rphism quits (~m0rphism@HSI-KBW-046-005-177-122.hsi8.kabel-badenwuerttemberg.de) (Ping timeout: 260 seconds)
23:15:28 <Cheery> Is there a function to clear out ()s from a type?
23:15:44 <Axma45768> ()'s are a type...
23:15:50 <Axma45768> you can't just remove them
23:15:57 <Cheery> eg. ((), a) -> a
23:16:10 <Axma45768> @djinn ((), a) -> a
23:16:10 <lambdabot> f (_, a) = a
23:16:36 <Cheery> ok, then (((), a), ()) -> a
23:16:42 × pacak quits (~pacak@bb116-14-220-91.singnet.com.sg) (Read error: Connection reset by peer)
23:16:58 <hekkaidekapus> koz_: <https://github.com/haskell-hvr/cabal-plan> (Another oops! It’s hvr-verse actually.)
23:17:00 <Cheery> I mean I'd want a routine that does this, so I don't need to.
23:17:04 pacak joins (~pacak@bb116-14-220-91.singnet.com.sg)
23:17:14 <koz_> hekkaidekapus: Thank you so much!
23:17:19 <hekkaidekapus> np
23:18:57 <hekkaidekapus> (Both profiteur and cabal-plan are also on Hackage.)
23:20:01 hackage hackage-security-HTTP 0.1.1.1 - Hackage security bindings against the HTTP library https://hackage.haskell.org/package/hackage-security-HTTP-0.1.1.1 (HerbertValerioRiedel)
23:20:11 <Axma45768> Cheery: what would the type of the function you want be?
23:21:32 <Cheery> well it could be (a -> Canon a), or Canon a b => a -> b
23:21:36 christo joins (~chris@81.96.113.213)
23:21:46 × refried_ quits (~textual@pool-108-20-26-90.bstnma.fios.verizon.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
23:22:34 <Axma45768> I think the answer to your question is "no", it doesn't currently exist, but it looks like you might have a way to get there (though what should happen in the ((),()) case)
23:22:53 <Cheery> it should become ()
23:24:05 refried_ joins (~textual@pool-108-20-26-90.bstnma.fios.verizon.net)
23:26:15 <Axma45768> should like it may be doable with a type family, but I'm unsure what the base case would be; since both () -> () and !() -> !() both need to be there
23:26:23 <Axma45768> give it a go and see if you can make it work
23:28:57 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
23:30:01 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
23:31:09 × pta2002 quits (~quassel@104.248.23.110) (Ping timeout: 268 seconds)
23:33:06 × christo quits (~chris@81.96.113.213) (Remote host closed the connection)
23:33:59 pta2002 joins (~quassel@104.248.23.110)
23:34:20 thir joins (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de)
23:35:15 conal joins (~conal@198.8.81.68)
23:37:10 × vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:38:24 × thir quits (~thir@p200300f27f0b7e00f4e9381c2bf90854.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:39:08 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-49-142-114-9-241.dsl.bell.ca) (Ping timeout: 260 seconds)
23:39:31 × Chi1thangoo quits (~Chi1thang@87.112.60.168) (Ping timeout: 246 seconds)
23:39:53 <bradparker> Hi all, can anyone direct me to some resources that explain why http://hackage.haskell.org/package/servant-server-0.18/docs/Servant-Server.html#v:serve needs both the `Proxy api` argument and the `Server api` argument to "get hold of" `api`?
23:39:57 × perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 2.9)
23:40:04 <bradparker> I remember reading some discussion about why the `Server api` argument wasn't enough (something about it being a type-family iirc) but I can't find my way back to it, can't remember the gist ...
23:41:06 dbmikus_ joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
23:41:20 christo joins (~chris@81.96.113.213)
23:42:15 × conal quits (~conal@198.8.81.68) (Quit: Computer has gone to sleep.)
23:42:21 perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
23:45:55 × dbmikus_ quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Ping timeout: 260 seconds)
23:46:47 <gobbleguy> bradparker: Server is type Server api = ServerT api Handler
23:47:02 <gobbleguy> ServerT is an associated type family of the HasServer class
23:47:09 <gobbleguy> type families are not injective
23:47:21 s00pcan joins (~chris@075-133-056-178.res.spectrum.com)
23:47:38 <gobbleguy> so that means just knowing what they evaluated to you can't definitively determine their arguments
23:49:05 <gobbleguy> If I told you 'not x == False' you could work out what x was, but if I told you 'null xs == False' you wouldn't be able to tell me what xs was. not is injective, null is not
23:50:29 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
23:52:09 conal joins (~conal@64.71.133.70)
23:52:36 × berberman quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in)
23:52:57 berberman joins (~berberman@unaffiliated/berberman)
23:54:07 × nbloomf quits (~nbloomf@2600:1700:ad14:3020:c4b9:178f:4076:90ef) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:54:18 × LKoen quits (~LKoen@79.160.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
23:54:45 <bradparker> Great, thanks for that :). `ServerT SomeApi => SomeArg -> Handler SomeResult` has lost a lot of information about `SomeApi`
23:55:36 renzhi joins (~renzhi@2607:fa49:655f:e600::28da)
23:56:05 <bradparker> Many possible arguments, with things like `"namespace" :> ...` and `Get '[JSON] ...` can get the same result
23:57:54 <bqv> man i sure have missed haskell
23:58:09 <bqv> haven't quite missed the analysis paralysis
23:58:15 <bqv> but i've missed these beautiful types
23:59:01 × pera quits (~pera@unaffiliated/pera) (Ping timeout: 264 seconds)

All times are in UTC on 2020-11-02.