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.