Logs on 2024-11-12 (liberachat/#haskell)
| 00:04:14 | × | fp quits (~Thunderbi@87-92-78-48.bb.dnainternet.fi) (Remote host closed the connection) |
| 00:04:26 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine) |
| 00:04:46 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:08:53 | <haskellbridge> | <thirdofmay18081814goya> do the fmap definitions in prelude have some for of uniqueness property? |
| 00:09:00 | <haskellbridge> | <thirdofmay18081814goya> some form* |
| 00:10:35 | <haskellbridge> | <thirdofmay18081814goya> cough rewording |
| 00:10:45 | <haskellbridge> | <thirdofmay18081814goya> do the fmap definitions in prelude satisfy some sort of uniqueness property? |
| 00:13:03 | × | falafel quits (~falafel@2600:1700:99f4:2050:c99f:7c1:9343:9cff) (Remote host closed the connection) |
| 00:13:22 | → | falafel joins (~falafel@2600:1700:99f4:2050:653b:1b0b:44f2:30f1) |
| 00:19:00 | × | falafel quits (~falafel@2600:1700:99f4:2050:653b:1b0b:44f2:30f1) (Ping timeout: 276 seconds) |
| 00:24:39 | <Leary> | @free fmap :: (a -> b) -> F a -> F b |
| 00:24:39 | <lambdabot> | g . h = k . f => $map_F g . fmap h = fmap k . $map_F f |
| 00:25:07 | <Leary> | thirdofmay: Parametricity and the first functor law give you uniqueness (and the second functor law). |
| 00:25:56 | <haskellbridge> | <thirdofmay18081814goya> hm I'll read up on that, ty!! |
| 00:32:11 | <haskellbridge> | <thirdofmay18081814goya> Leary: is there a specific sense in which you're using "parametricity" here? getting overwhelmed by the search results |
| 00:33:44 | <Leary> | https://en.wikipedia.org/wiki/Parametricity |
| 00:34:36 | × | xff0x quits (~xff0x@2405:6580:b080:900:d852:39eb:7a5e:9b9f) (Ping timeout: 276 seconds) |
| 00:34:37 | <haskellbridge> | <thirdofmay18081814goya> fantastic ty |
| 00:52:30 | × | housemate quits (~housemate@146.70.66.228) (Quit: "I saw it in a tiktok video and thought that it was the most smartest answer ever." ~ AnonOps Radio [some time some place] | I AM THE DERIVATIVE I AM GOING TANGENT TO THE CURVE!) |
| 01:00:54 | × | td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 260 seconds) |
| 01:02:17 | → | td_ joins (~td@i53870914.versanet.de) |
| 01:02:30 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 246 seconds) |
| 01:23:42 | → | biberu joins (~biberu@user/biberu) |
| 01:28:00 | → | AlexNoo_ joins (~AlexNoo@5.139.233.174) |
| 01:29:14 | → | agent314 joins (~quassel@static-198-44-129-53.cust.tzulo.com) |
| 01:31:39 | × | AlexNoo quits (~AlexNoo@5.139.233.174) (Ping timeout: 260 seconds) |
| 01:31:54 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 01:43:25 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 01:54:04 | → | Axma72712 joins (~Axman6@user/axman6) |
| 01:56:28 | × | Axman6 quits (~Axman6@user/axman6) (Ping timeout: 248 seconds) |
| 01:56:39 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@79.127.217.37) |
| 02:08:36 | × | notzmv quits (~daniel@user/notzmv) (Remote host closed the connection) |
| 02:09:51 | → | GuerrillaMonkey joins (~Jeanne-Ka@static-198-54-134-103.cust.tzulo.com) |
| 02:12:52 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@79.127.217.37) (Ping timeout: 272 seconds) |
| 02:13:34 | × | GuerrillaMonkey quits (~Jeanne-Ka@static-198-54-134-103.cust.tzulo.com) (Client Quit) |
| 02:13:51 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-134-103.cust.tzulo.com) |
| 02:14:36 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich) |
| 02:14:56 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 02:35:22 | → | pavonia joins (~user@user/siracusa) |
| 02:38:07 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 02:41:33 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 246 seconds) |
| 02:43:29 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
| 03:05:50 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 03:06:57 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 03:07:10 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 03:07:11 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 03:07:35 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 03:08:26 | × | horm quits (~horm@user/horm) (Quit: WeeChat 4.2.2) |
| 03:11:16 | × | longlongdouble quits (~longlongd@49.36.234.128) (Read error: Connection reset by peer) |
| 03:17:36 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:17:41 | × | Patternmaster quits (~georg@user/Patternmaster) (Ping timeout: 248 seconds) |
| 03:18:49 | Axma72712 | is now known as Axman6 |
| 03:27:07 | → | housemate joins (~housemate@146.70.66.228) |
| 03:27:53 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:28:35 | → | housemate joins (~housemate@146.70.66.228) |
| 03:30:48 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:31:57 | × | td_ quits (~td@i53870914.versanet.de) (Ping timeout: 252 seconds) |
| 03:32:01 | → | housemate joins (~housemate@146.70.66.228) |
| 03:33:54 | → | td_ joins (~td@i5387092B.versanet.de) |
| 03:34:14 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:35:01 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 03:35:13 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 03:35:32 | → | housemate joins (~housemate@146.70.66.228) |
| 03:35:45 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 03:37:27 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:39:01 | → | housemate joins (~housemate@146.70.66.228) |
| 03:41:17 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:41:45 | → | housemate joins (~housemate@146.70.66.228) |
| 03:42:18 | × | terrorjack4 quits (~terrorjac@2a01:4f8:c17:dc9f::) (Quit: The Lounge - https://thelounge.chat) |
| 03:42:37 | × | housemate quits (~housemate@146.70.66.228) (Remote host closed the connection) |
| 03:43:01 | → | housemate joins (~housemate@146.70.66.228) |
| 03:44:00 | → | terrorjack4 joins (~terrorjac@2a01:4f8:c17:dc9f::) |
| 03:45:20 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:45:48 | → | housemate joins (~housemate@146.70.66.228) |
| 03:48:05 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:48:33 | → | housemate joins (~housemate@146.70.66.228) |
| 03:51:04 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:51:32 | → | housemate joins (~housemate@146.70.66.228) |
| 03:53:51 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:54:19 | → | housemate joins (~housemate@146.70.66.228) |
| 03:56:46 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 03:57:14 | → | housemate joins (~housemate@146.70.66.228) |
| 03:58:07 | × | housemate quits (~housemate@146.70.66.228) (Remote host closed the connection) |
| 03:58:31 | → | housemate joins (~housemate@146.70.66.228) |
| 04:01:02 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 04:01:30 | → | housemate joins (~housemate@146.70.66.228) |
| 04:03:56 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 04:04:24 | → | housemate joins (~housemate@146.70.66.228) |
| 04:06:43 | × | housemate quits (~housemate@146.70.66.228) (Max SendQ exceeded) |
| 04:07:12 | → | housemate joins (~housemate@146.70.66.228) |
| 04:22:02 | × | longlongdouble quits (~longlongd@49.36.234.128) (Read error: Connection reset by peer) |
| 04:27:39 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:40:10 | → | aforemny joins (~aforemny@2001:9e8:6cde:dd00:e907:b368:5aa5:db2) |
| 04:40:31 | → | piele joins (~piele@tbonesteak.creativeserver.net) |
| 04:41:04 | × | aforemny_ quits (~aforemny@2001:9e8:6cfe:4400:bc92:ace3:acbf:4fb3) (Ping timeout: 272 seconds) |
| 04:49:50 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-134-103.cust.tzulo.com) (Quit: Leaving) |
| 04:59:49 | × | delyan_ quits (sid523379@id-523379.hampstead.irccloud.com) (Ping timeout: 244 seconds) |
| 05:03:07 | → | delyan_ joins (sid523379@id-523379.hampstead.irccloud.com) |
| 05:25:20 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 05:32:51 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 05:33:02 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 05:34:16 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 05:44:26 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 05:44:37 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 05:44:52 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 05:50:45 | → | jinsun joins (~jinsun@user/jinsun) |
| 05:54:04 | → | Patternmaster joins (~georg@user/Patternmaster) |
| 06:00:00 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 06:11:01 | → | misterfish joins (~misterfis@84.53.85.146) |
| 06:15:12 | × | jinsun quits (~jinsun@user/jinsun) (Ping timeout: 276 seconds) |
| 06:21:13 | × | alioguzhan quits (~Thunderbi@78.173.69.189) (Remote host closed the connection) |
| 06:22:02 | → | briandaed joins (~root@185.234.210.211.r.toneticgroup.pl) |
| 06:22:29 | → | alioguzhan joins (~Thunderbi@78.173.69.189) |
| 06:29:45 | → | michalz joins (~michalz@185.246.207.197) |
| 06:30:30 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 06:32:06 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:37:52 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f3379b605d06685ed78.dip0.t-ipconnect.de) |
| 06:46:12 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 06:47:03 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 276 seconds) |
| 06:49:09 | → | tomboy64 joins (~tomboy64@user/tomboy64) |
| 06:54:26 | × | youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 252 seconds) |
| 06:56:11 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Read error: Connection reset by peer) |
| 06:59:28 | → | tomboy64 joins (~tomboy64@user/tomboy64) |
| 07:11:40 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds) |
| 07:11:43 | → | youthlic joins (~Thunderbi@user/youthlic) |
| 07:15:13 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 07:34:55 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f3379b605d06685ed78.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 07:42:40 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:47:41 | → | Square joins (~Square4@user/square) |
| 07:51:07 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 07:52:03 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds) |
| 07:54:04 | Lord_of_Life_ | is now known as Lord_of_Life |
| 08:00:00 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:37 | → | caconym joins (~caconym@user/caconym) |
| 08:07:50 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 08:13:43 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:15:07 | × | haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Ping timeout: 264 seconds) |
| 08:15:42 | → | haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com) |
| 08:15:42 | ChanServ | sets mode +v haskellbridge |
| 08:19:42 | → | misterfish joins (~misterfis@h239071.upc-h.chello.nl) |
| 08:27:35 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:27:45 | → | alp joins (~alp@2001:861:e3d6:8f80:a99a:73f2:3cc3:6a6c) |
| 08:29:50 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 08:37:45 | × | Square quits (~Square4@user/square) (Ping timeout: 252 seconds) |
| 08:41:02 | × | housemate quits (~housemate@146.70.66.228) (Quit: "I saw it in a tiktok video and thought that it was the most smartest answer ever." ~ AnonOps Radio [some time some place] | I AM THE DERIVATIVE I AM GOING TANGENT TO THE CURVE!) |
| 08:43:18 | → | housemate joins (~housemate@146.70.66.228) |
| 08:43:54 | × | poscat0x04 quits (~poscat@user/poscat) (Ping timeout: 260 seconds) |
| 08:45:10 | → | poscat joins (~poscat@user/poscat) |
| 08:47:57 | × | housemate quits (~housemate@146.70.66.228) (Client Quit) |
| 08:54:39 | → | housemate joins (~housemate@146.70.66.228) |
| 08:57:47 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 09:02:04 | → | hellwolf joins (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) |
| 09:02:41 | <hellwolf> | testing: back to irc. |
| 09:03:49 | × | ft quits (~ft@p4fc2a216.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:04:04 | × | gorignak quits (~gorignak@user/gorignak) (Read error: Connection reset by peer) |
| 09:05:48 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) |
| 09:07:14 | × | agent314 quits (~quassel@static-198-44-129-53.cust.tzulo.com) (Ping timeout: 260 seconds) |
| 09:11:51 | <haskellbridge> | <hellwolf> How much appeal would there be to make curry function n-ary friendly? Adding to that, having some sort of N-ary friendly type class that one can extend over? |
| 09:11:53 | <haskellbridge> | I am asking because I built something for my project lately, and I have find the lack of better tuple (lest NP) friendly curry leads to my rebuilding wheels. |
| 09:13:24 | × | misterfish quits (~misterfis@h239071.upc-h.chello.nl) (Ping timeout: 252 seconds) |
| 09:16:20 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 09:16:35 | × | hellwolf quits (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) (Quit: rcirc on GNU Emacs 29.4) |
| 09:16:49 | → | misterfish joins (~misterfis@31-161-39-137.biz.kpn.net) |
| 09:16:57 | → | hellwolf joins (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) |
| 09:17:13 | <Leary> | hellwolf: Large tuples are unidiomatic; I don't know who's going to be using enough of them to want such a thing. |
| 09:18:22 | <hellwolf> | Fair enough. It is probably very specific to the use cases, which I happen to be in those. |
| 09:19:55 | → | gorignak joins (~gorignak@user/gorignak) |
| 09:29:47 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 09:30:27 | → | ubert joins (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) |
| 09:31:33 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:36:14 | → | kuribas joins (~user@2a02:1808:8c:1878:f2e0:c7f8:cbdc:6f5d) |
| 10:00:26 | × | hgolden_ quits (~hgolden@syn-172-251-233-141.res.spectrum.com) (Ping timeout: 255 seconds) |
| 10:05:10 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6c70:1ac0:d127:74dd) |
| 10:07:54 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 260 seconds) |
| 10:15:14 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 10:18:48 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 10:21:37 | × | longlongdouble quits (~longlongd@49.36.234.128) (Remote host closed the connection) |
| 10:21:50 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 10:22:09 | → | chele joins (~chele@user/chele) |
| 10:23:06 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 10:24:42 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 10:25:13 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 10:25:37 | → | longlongdouble joins (~longlongd@49.36.234.128) |
| 10:31:51 | × | longlongdouble quits (~longlongd@49.36.234.128) (Read error: Connection reset by peer) |
| 10:42:02 | → | petrichor joins (~znc-user@user/petrichor) |
| 10:42:53 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 10:43:11 | × | youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 255 seconds) |
| 10:44:01 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:44:36 | → | youthlic joins (~Thunderbi@user/youthlic) |
| 10:53:16 | × | longlongdouble quits (~longlongd@117.234.59.239) (Remote host closed the connection) |
| 10:53:34 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 10:59:21 | × | longlongdouble quits (~longlongd@117.234.59.239) (Read error: Connection reset by peer) |
| 10:59:59 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:06:23 | → | divya joins (~user@139.5.11.223) |
| 11:09:31 | → | xff0x joins (~xff0x@2405:6580:b080:900:50c5:d80f:bb7d:df5c) |
| 11:10:11 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 11:26:14 | → | Alecs joins (~textual@nat16.software.imdea.org) |
| 11:27:16 | <bwe> | code organisation in modules: Since I've exported only exposed functions via `module XYZ (f1, f2) where`. That means no helper functions used by f1 and f2 defined in same module. Now I've created unit tests in test file, including for helpers. Now I need to export helper functions, too, from the module (to make the tests work). What's the right approach to organise my code? As a principle, any helpers in |
| 11:27:22 | <bwe> | dedicated helpers module => existing module does not expose no unnecessary functions, while tests can import helpers? Or should I leave helpers in the module but put the tests in the module itself? What's your personal experience? |
| 11:27:23 | × | longlongdouble quits (~longlongd@117.234.59.239) (Remote host closed the connection) |
| 11:27:32 | <Alecs> | Hi, quick question, do you know if there is already a proposal to add a zero quantity to -XLinearTypes? I've tried looking in the repo for proposal but the search feature on github sucks |
| 11:27:39 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:28:04 | <tomsmeding> | bwe: rename your module to XYZ.Internal and just expose everything from there; then have `module XYZ (f1, f2) where import XYZ.Internal` |
| 11:28:16 | <tomsmeding> | this has become convention |
| 11:28:18 | × | longlongdouble quits (~longlongd@117.234.59.239) (Read error: Connection reset by peer) |
| 11:28:48 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:29:02 | × | cyphase quits (~cyphase@user/cyphase) (Read error: Connection reset by peer) |
| 11:29:40 | <bwe> | tomsmeding: so the real module is just reexporting the exports only, correct? |
| 11:30:04 | <bwe> | tomsmeding: …and where are more of such conventions documented I since missed? |
| 11:30:40 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:33:09 | <tomsmeding> | yep |
| 11:34:04 | <tomsmeding> | bwe: for bonus points, put {-# OPTIONS_HADDOCK not-home #-} on the .Internal module so that the f1 and f2 documentation are actually shown in the haddocks for XYZ, not through a `module` subpage into XYZ.Internal |
| 11:34:06 | <tomsmeding> | ( https://haskell-haddock.readthedocs.io/latest/markup.html ) |
| 11:34:22 | <tomsmeding> | I don't think conventions like these are explicitly documented anywhere |
| 11:35:48 | × | longlongdouble quits (~longlongd@117.234.59.239) (Remote host closed the connection) |
| 11:36:30 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:40:10 | → | Square2 joins (~Square@user/square) |
| 11:40:51 | × | kuribas quits (~user@2a02:1808:8c:1878:f2e0:c7f8:cbdc:6f5d) (Ping timeout: 265 seconds) |
| 11:43:06 | todi_away | is now known as todi |
| 11:43:35 | × | longlongdouble quits (~longlongd@117.234.59.239) (Read error: Connection reset by peer) |
| 11:44:20 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:50:23 | × | longlongdouble quits (~longlongd@117.234.59.239) (Remote host closed the connection) |
| 11:50:45 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 11:53:15 | <bwe> | tomsmeding: how do I go about Internals of different files when they are in the same directory? new sub directory and keep them separate or may I lump them together? |
| 11:55:42 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 11:58:30 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 12:00:05 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 12:02:11 | → | caconym joins (~caconym@user/caconym) |
| 12:02:43 | × | longlongdouble quits (~longlongd@117.234.59.239) (Read error: Connection reset by peer) |
| 12:03:32 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 12:05:44 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 12:06:07 | <bwe> | tomsmeding: okay, I've solved it with MyModule/Internal.hs and MyModule.hs as siblings in a folder. |
| 12:06:33 | <tomsmeding> | bwe: yeah, the idea is that if you have a module A.B.C that you want to do this trick with, you split it in A.B.C and A.B.C.Internal |
| 12:13:11 | Square2 | is now known as Square |
| 12:23:56 | → | youthlic1 joins (~Thunderbi@user/youthlic) |
| 12:27:19 | × | youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 260 seconds) |
| 12:27:19 | youthlic1 | is now known as youthlic |
| 12:35:39 | × | longlongdouble quits (~longlongd@117.234.59.239) (Remote host closed the connection) |
| 12:36:17 | → | longlongdouble joins (~longlongd@117.234.59.239) |
| 12:42:36 | → | weary-traveler joins (~user@user/user363627) |
| 12:45:12 | × | longlongdouble quits (~longlongd@117.234.59.239) (Read error: Connection reset by peer) |
| 12:47:58 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 12:49:05 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 12:51:30 | → | longlongdouble joins (~longlongd@117.234.203.0) |
| 12:53:08 | → | youthlic1 joins (~Thunderbi@user/youthlic) |
| 12:53:52 | AlexNoo_ | is now known as AlexNoo |
| 12:56:38 | × | youthlic quits (~Thunderbi@user/youthlic) (Ping timeout: 245 seconds) |
| 12:56:39 | youthlic1 | is now known as youthlic |
| 12:57:23 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 12:57:58 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:58:31 | × | youthlic quits (~Thunderbi@user/youthlic) (Remote host closed the connection) |
| 13:00:07 | → | youthlic joins (~Thunderbi@user/youthlic) |
| 13:00:14 | × | longlongdouble quits (~longlongd@117.234.203.0) (Read error: Connection reset by peer) |
| 13:01:19 | → | longlongdouble joins (~longlongd@117.234.203.0) |
| 13:06:59 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 13:07:05 | <divya> | Building an application requires rust-1.82.0 but guix only has rust 1.77, any way to deal with this? |
| 13:07:18 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) |
| 13:08:28 | × | mari-estel quits (~mari-este@user/mari-estel) () |
| 13:11:51 | × | longlongdouble quits (~longlongd@117.234.203.0) (Remote host closed the connection) |
| 13:11:55 | <briandaed> | divya build rust from sources and set paths to new version |
| 13:12:07 | → | longlongdouble joins (~longlongd@117.234.203.0) |
| 13:12:21 | <briandaed> | divya probably more easier paths, I don't know your setup |
| 13:18:45 | × | longlongdouble quits (~longlongd@117.234.203.0) (Ping timeout: 248 seconds) |
| 13:19:28 | → | longlongdouble joins (~longlongd@117.234.149.157) |
| 13:24:04 | × | longlongdouble quits (~longlongd@117.234.149.157) (Ping timeout: 260 seconds) |
| 13:24:43 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 13:26:31 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 13:26:55 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 13:27:10 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 13:35:18 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 13:37:01 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 13:37:25 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 13:38:13 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 13:40:37 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
| 13:40:37 | ljdarj1 | is now known as ljdarj |
| 13:50:03 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 13:50:16 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 13:51:13 | → | weary-traveler joins (~user@user/user363627) |
| 13:52:39 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 13:52:54 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 13:53:20 | <bwe> | tomsmeding: so, I document the function where it is defined not where re-exported? |
| 13:58:57 | <divya> | briandaed: Elsewhere I was linked to a channel that had latest rust, might use that. |
| 13:59:52 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 14:01:05 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 14:01:19 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 14:08:20 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 14:09:09 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 14:11:46 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 14:18:00 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 14:18:12 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 14:23:44 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 14:23:58 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 14:26:47 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 14:27:00 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 14:33:27 | × | alp quits (~alp@2001:861:e3d6:8f80:a99a:73f2:3cc3:6a6c) (Ping timeout: 246 seconds) |
| 14:37:14 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 14:38:53 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 14:39:42 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 14:49:04 | × | hellwolf quits (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) (Quit: rcirc on GNU Emacs 29.4) |
| 14:49:21 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 14:49:25 | → | hellwolf joins (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) |
| 14:50:44 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 14:50:58 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 14:54:04 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 14:54:53 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 14:55:24 | × | misterfish quits (~misterfis@31-161-39-137.biz.kpn.net) (Ping timeout: 272 seconds) |
| 14:57:15 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 14:57:50 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 15:01:55 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 15:01:55 | ljdarj1 | is now known as ljdarj |
| 15:03:18 | × | Fijxu quits (~Fijxu@user/fijxu) (Ping timeout: 252 seconds) |
| 15:05:40 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 15:05:53 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 15:09:07 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 15:10:33 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 15:11:40 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 15:13:10 | <yin> | i want to alter every value of an IntMap according to some calculations based on a state record type. the IntMap is one of the fields in the state. so i have a function that looks like `step :: MyState -> MyState ; step st = st { myIntMap = IntMap.mapWithKey (f st) (myIntMap st) }` |
| 15:13:23 | <yin> | f does some duplicate calculations like `calculation (myIntMap st) x = ...`. does Haskell optimize this (avoiding duplicate operations by performing some kind of memoization)? |
| 15:14:33 | <divya> | I'm thinking of presenting a talk, any particular areas of haskell that you guys might like getting covered? |
| 15:16:25 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 15:17:22 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 15:17:22 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 15:17:35 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 15:19:56 | × | mari-estel quits (~mari-este@user/mari-estel) (Ping timeout: 255 seconds) |
| 15:19:56 | × | Square quits (~Square@user/square) (Ping timeout: 255 seconds) |
| 15:20:15 | <yin> | would using foldrWithKey any differente for this? i'm guessing mapWithKey doesn not create an intermediate data structure at each step. would there be any benefit in fold vs map? |
| 15:22:09 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 15:23:06 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 15:23:12 | <briandaed> | yin: I'm not aware any implicit memoization in Haskell, there are some techniques / libraries for it, as for foldrWithKey vs mapWithKey - make a benchmark and compare what is better for you |
| 15:23:34 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 15:23:47 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 15:24:38 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 15:25:27 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 15:30:13 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 15:30:25 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 15:30:25 | × | Fijxu quits (~Fijxu@user/fijxu) (Ping timeout: 248 seconds) |
| 15:31:20 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 15:31:35 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 15:35:43 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 15:35:45 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 15:44:01 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 15:50:27 | <EvanR> | yin, is that the MyState isn't being updated except for the intmap itself, so it's basically being treated like a reader |
| 15:50:53 | <EvanR> | unless f does something weird |
| 15:52:53 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 16:07:57 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:13:03 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 16:13:23 | <yin> | what's weird to me is that this still runs (m 0) twice: https://paste.jrvieira.com/1731427978188 |
| 16:14:08 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 16:16:18 | × | mari-estel quits (~mari-este@user/mari-estel) () |
| 16:17:40 | <yin> | or maybe my profiling skills are very bad |
| 16:18:29 | × | ljdarj1 quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 16:18:29 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 16:18:51 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 16:19:44 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 16:27:00 | <yin> | ok so it turns out that in simples cases like this it does optimize |
| 16:28:17 | <yin> | but if i make the key an argument, it doesn't: https://paste.jrvieira.com/1731428892637 |
| 16:29:53 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 16:30:41 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 16:31:47 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:32:10 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 16:36:12 | → | Leonard26 joins (~Leonard26@49.236.26.53) |
| 16:41:01 | <yin> | this is a better example: https://paste.jrvieira.com/1731429650053 |
| 16:41:36 | <yin> | if i substitute `(mod k 2)` for `1` in the last line, it memoized |
| 16:42:08 | <yin> | unfortunately, it doesn't otherwise |
| 16:46:34 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 16:50:02 | → | gorignak joins (~gorignak@user/gorignak) |
| 16:51:31 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 16:54:59 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 16:55:11 | × | Leonard26 quits (~Leonard26@49.236.26.53) (Ping timeout: 256 seconds) |
| 16:55:59 | → | Leonard26 joins (~Leonard26@49.236.26.53) |
| 17:00:11 | <Leonard26> | I involuntarily disconnected for a second, I just sent a question on the chat above this, can you see it? |
| 17:03:22 | <geekosaur> | I don't see anything in the past 2 hours |
| 17:05:16 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 17:06:05 | <Leonard26> | Hello! =D How are you? |
| 17:06:05 | <Leonard26> | I am trying to define a global variable in Haskell with `IORef` called `decodeElement` , it all seems to work but I am stumbling upon an error. |
| 17:06:06 | <Leonard26> | I have the `elementLink` and `onElementPadAdded` function (https://hackage.haskell.org/package/gi-gst-1.0.29/docs/GI-Gst-Objects-Element.html#v:elementLink https://hackage.haskell.org/package/gi-gst-1.0.29/docs/GI-Gst-Objects-Element.html#v:onElementPadAdded) both of which take an argument of type `Element` but the type of `decodeElement` is `:: |
| 17:06:06 | <Leonard26> | (MonadIO m) => IORef(m (Maybe Gst.Element))` . |
| 17:06:07 | <Leonard26> | The error complains about the type not having any known parent types, what does this mean? |
| 17:06:07 | <Leonard26> | https://paste.tomsmeding.com/xUF04K10 |
| 17:06:08 | <Leonard26> | https://paste.tomsmeding.com/PLQWn6hZ |
| 17:06:08 | <Leonard26> | P.S. I can usually make `Gst.elementFactoryMake "decodebin" (Just "decoder")` work if I declare it in the `main` function by doing this `Just decode <- Gst.elementFactoryMake "decodebin" (Just "decoder")` so applying a `Just` to it. However I really need it to be a global variable and I can't really add a `Just` at the beginning of a type signature |
| 17:06:09 | <Leonard26> | (I've tried'=D ). How could this be solved? Thank you in advance :) |
| 17:06:09 | × | hellwolf quits (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) (Read error: Connection reset by peer) |
| 17:06:43 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 17:07:16 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
| 17:07:30 | <EvanR> | "parent type" ? |
| 17:07:36 | → | hellwolf joins (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) |
| 17:09:03 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 17:10:39 | <Leonard26> | It's in the error message |
| 17:10:40 | <glguy> | That sounds like a custom type error message |
| 17:11:21 | <Leonard26> | Ok, how do I fix that? |
| 17:11:44 | <glguy> | Dunno, but it'll be specific to that library; it's not an error message many people will have seen |
| 17:13:19 | <Leonard26> | This wasn't super helpful. Anyone else know a solution to this? |
| 17:13:52 | <glguy> | The error is specific to how gi-gst works. you'll need to read more into the details of how that API works and what it was expecting |
| 17:14:12 | <EvanR> | it's not clear what you mean by global variable, because haskell doesn't do global variables, so you might be talking about that libraries internal logic, or some other weird inadvised hack to make a global variable |
| 17:14:57 | <EvanR> | "make a global variable" sounds like the Y in the XY, so may or may not depend on the library |
| 17:15:12 | <glguy> | the error comes from https://github.com/haskell-gi/haskell-gi/blob/ad1ded11a35e62be5fb7c0363bd3151378257a54/base/Data/GI/Base/Overloading.hs#L72-L75 |
| 17:16:19 | <Leonard26> | It's not library dependent. I was implementing the answer to this post https://stackoverflow.com/questions/16811376/simulate-global-variable |
| 17:17:56 | <Leonard26> | I pretty much remember the whole library in my head at this point, that's why I came here thinking I might get some other ideas |
| 17:18:23 | <glguy> | The error message in your paste was library-dependent specifically |
| 17:19:38 | <Leonard26> | Not really, the `IORef` shouldn't be there, it's not typical functionality |
| 17:22:04 | <Leonard26> | I need to implement some sort of global variables because I'm trying to rewrite this C code in Haskell https://gstreamer.freedesktop.org/documentation/application-development/advanced/pipeline-manipulation.html?gi-language=c#changing-elements-in-a-pipeline |
| 17:22:04 | <Leonard26> | You can see that there are these variables/pointers whatever they are (I'm not good in C) that I need to reproduce in Haskell somehow |
| 17:22:05 | <Leonard26> | static GstPad *blockpad; |
| 17:22:05 | <Leonard26> | static GstElement *conv_before; |
| 17:22:06 | <Leonard26> | static GstElement *conv_after; |
| 17:22:06 | <Leonard26> | static GstElement *cur_effect; |
| 17:22:07 | <Leonard26> | static GstElement *pipeline; |
| 17:22:36 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 17:22:48 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 17:26:34 | × | Fijxu quits (~Fijxu@user/fijxu) (Ping timeout: 252 seconds) |
| 17:27:09 | <briandaed> | glguy is right, error message has it's origin in this library, global variables sounds like trouble, you can achieve it by combining readert with mvars or whatever suits you |
| 17:27:27 | × | turlando quits (~turlando@user/turlando) () |
| 17:28:01 | → | turlando joins (~turlando@user/turlando) |
| 17:28:12 | <Leonard26> | Do you have an example of how that would work? |
| 17:28:45 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 17:29:05 | <briandaed> | https://tech.fpcomplete.com/blog/2017/06/readert-design-pattern/ |
| 17:29:18 | <EvanR> | Reader, ReaderT |
| 17:29:25 | <EvanR> | the url capitalization is painful |
| 17:30:20 | <Leonard26> | Alright, I'll look into that, thank you :) |
| 17:30:49 | <briandaed> | np, have fun |
| 17:32:08 | <Leonard26> | I will! =D |
| 17:33:44 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 17:34:07 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 17:36:33 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 17:37:14 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 17:37:14 | ljdarj1 | is now known as ljdarj |
| 17:37:28 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 17:43:05 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 17:43:19 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 17:44:21 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 17:47:17 | × | Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!) |
| 17:47:55 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 17:51:12 | → | alp joins (~alp@2001:861:e3d6:8f80:46dd:be45:db8:fbc7) |
| 17:54:21 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 17:54:39 | × | Leonard26 quits (~Leonard26@49.236.26.53) (Quit: Client closed) |
| 17:54:58 | × | turlando quits (~turlando@user/turlando) () |
| 17:56:14 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) |
| 17:59:22 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 18:01:38 | → | jinsun joins (~jinsun@user/jinsun) |
| 18:01:46 | × | abrar quits (~abrar@pool-72-78-199-167.phlapa.fios.verizon.net) (Ping timeout: 252 seconds) |
| 18:03:46 | → | abrar joins (~abrar@pool-72-78-199-167.phlapa.fios.verizon.net) |
| 18:04:19 | <bailsman> | Is there such a thing as 'readonly view to mutable data' in Haskell? can I pass a reference created with `unsafeFreeze` to a function, and once it returns (and thus will no longer use the reference), continue to mutate the array? The documentation seems to suggest you "can no longer mutate" but I'm not sure if that's while the immutable reference exists or... ever again. |
| 18:05:16 | <Rembane> | bailsman: There's the ST monad which can help you with this. Vector has quite good support for working with mutable vectors in the ST monad. |
| 18:05:49 | <bailsman> | Rembane: sure. I'm happy for the function I call to be in the ST monad. I'd like to have the compiler ensure that my callee does not modify the data. |
| 18:06:07 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
| 18:07:13 | <Rembane> | bailsman: Do I understand you correctly, that you want to hand out a reference to mutable data that is then not modified? |
| 18:07:20 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 18:07:49 | <bailsman> | I want to give a read-only view to the data to a function, that does whatever it wants with it so long as it modified, but then after that function returns, continue mutating the data. |
| 18:08:00 | <bailsman> | so long as it is *not* modified |
| 18:09:02 | <Rembane> | Got it. Stupid question: why? |
| 18:09:49 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 18:10:45 | <bailsman> | so the code with the immutable reference can pretend it is pure |
| 18:10:53 | <Rembane> | Because you can go from mutable to immutable and then back again. No worries at all. It's just quite expensive: https://hackage.haskell.org/package/vector-0.13.2.0/docs/Data-Vector.html#v:freeze |
| 18:11:14 | <Rembane> | Depending a bit on what your budget is of course. |
| 18:11:43 | <c_wraith> | there are also the unsafe versions of freeze and thaw that *can* be O(1), but are liable to crash your program if you don't understand laziness very well |
| 18:11:50 | <bailsman> | Yes, I'd like to keep the data in place and avoid O(n) operations to copy the data. I'll do that if that's the best I can do, but I'd like to be able just to create a readonly reference |
| 18:12:34 | × | tired quits (~tired@user/tired) (Quit: /) |
| 18:13:14 | → | tired joins (~tired@user/tired) |
| 18:13:23 | <bailsman> | Hold on, so it is possible to use unsafeFreeze safely if you can somehow ensure the function using the immutable reference has been fully evalauted and is not just a thunk? |
| 18:13:37 | <c_wraith> | yes |
| 18:14:49 | <c_wraith> | Though really, if you're going to keep mutating it afterwards, you should unsafeThaw the frozen version instead of re-using the previous mutable version |
| 18:15:00 | <bailsman> | Well, unfortunately, I do not understand laziness very well. What are some ways I can ensure this? I know `seq` will not work, because it's perfectly possible for that to be in WHNF while the there's still a thunk inside with the immutable reference. |
| 18:15:13 | <c_wraith> | It's still O(1), but it makes the data dependency more clear |
| 18:15:32 | <bailsman> | OK, that's fine. I'll unsafeThaw it after the function using the immutable reference returns. |
| 18:15:39 | <c_wraith> | the brute force is evaluate + force, if you're in IO |
| 18:16:01 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:16:43 | <c_wraith> | evaluate is from Control.Exception, force is from Control.DeepSeq |
| 18:17:26 | <c_wraith> | https://hackage.haskell.org/package/deepseq-1.5.1.0/docs/Control-DeepSeq.html#v:force mentions using it with evaluate |
| 18:17:43 | <bailsman> | Documentation says: All in all, attempts to modify a vector produced by unsafeThaw fall out of domain of software engineering and into realm of black magic, dark rituals, and unspeakable horrors. The only advice that could be given is: "Don't attempt to mutate a vector produced by unsafeThaw unless you know how to prevent GHC from aliasing buffers accidentally. We don't." |
| 18:19:54 | <bailsman> | I'm getting the feeling I should not be trying this, and should just either eat the O(n) copy and/or pass around mutable copies instead. |
| 18:23:25 | <c_wraith> | It's certainly much less fragile to let GHC's assumptions about immutability be correct |
| 18:23:30 | → | ph88 joins (~ph88@2a02:8109:9e26:c800:b27:4ecf:926d:786) |
| 18:25:16 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 18:26:06 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 18:27:00 | → | KicksonButt joins (~quassel@187.21.174.221) |
| 18:27:26 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 18:28:59 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 18:29:02 | <bailsman> | I tracked down the github issue that introduced that comment: https://github.com/haskell/vector/issues/139 -- but that seems to demonstrate the problem you were talking about. if I deepseq the function that uses the immutable reference, and only then thaw it again, am I fine? |
| 18:29:14 | <bailsman> | I like O(1) better than O(n) |
| 18:30:12 | <c_wraith> | I think you *should* be, but it is fundamentally placing yourself in the position of fighting against how GHC works |
| 18:30:36 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 18:30:50 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 18:31:34 | <bailsman> | Hm. And I cannot just keep using the mutable reference? |
| 18:31:44 | <bailsman> | rather than thawing |
| 18:32:02 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:32:05 | <bailsman> | That's because what I'm calling a reference, isn't, really, internally it's setting flags on the pointer? |
| 18:35:56 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 18:36:30 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 18:37:29 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 18:43:38 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 18:44:30 | → | euphores joins (~SASL_euph@user/euphores) |
| 18:44:31 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 18:48:54 | <EvanR> | another thing you can do is use an immutable structure like IntMap or Sequence instead of a mutable array |
| 18:49:07 | <EvanR> | then you can much more easily pretend it is "pure" |
| 18:49:10 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 18:49:17 | <EvanR> | and GHC won't hate you |
| 18:49:35 | <EvanR> | the GC works better with immutable data |
| 18:50:23 | <EvanR> | another question would be how large your mutable array will typically be |
| 18:51:04 | <EvanR> | if it is like "exactly 4" might as well just use immutable Vector for this or something like linear V4 |
| 18:59:06 | → | longlongdouble joins (~longlongd@49.36.232.34) |
| 19:00:16 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 19:01:08 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 272 seconds) |
| 19:02:33 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 19:02:34 | ljdarj1 | is now known as ljdarj |
| 19:04:29 | × | longlongdouble quits (~longlongd@49.36.232.34) (Remote host closed the connection) |
| 19:04:43 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 19:05:42 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 19:06:18 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:06:34 | <bailsman> | EvanR: what I want to do is something like: MVector Element, for each element updateSingleElement :: AllElements -> Element -> Element. So the update function can read the others, but update only its own thing. So updateSingleElement (and whatever it calls from there) can pretend it is in a pure world and be written simply and intuitively, but I was hoping GHC's optimizer would notice that |
| 19:06:36 | <bailsman> | eventually it just gets assigned and not do any memory allocations in the hot loop. |
| 19:07:34 | <bailsman> | Since this is O(n) anyway, doing a copy wouldn't change the fundamental complexity of the algorithm and likely is not going to be the slowest thing, so I can probably do an O(n) copy if I need to. |
| 19:07:50 | <EvanR> | mutating objects which pure code has a reference to as if it was immutable just breaks the core logic of haskell |
| 19:07:51 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 19:08:00 | <EvanR> | it might make more sense in another language |
| 19:08:04 | <EvanR> | like C++ |
| 19:08:13 | <bailsman> | Hm? But nothing gets mutated while updateSingleElement runs. Only once it is done, does it get assigned. |
| 19:08:24 | <EvanR> | so you say |
| 19:08:39 | <EvanR> | it's assuming a lot |
| 19:08:46 | <EvanR> | that we don't normally have to assume or care about |
| 19:09:09 | <EvanR> | how large is this vector anyway |
| 19:09:24 | <bailsman> | Maybe 100K objects. |
| 19:09:37 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 19:09:57 | <EvanR> | ok that's pretty big, so if you wanted max performance you need to worry about memory locality |
| 19:10:38 | <bailsman> | I'm mostly just trying to discover how I should think about things in Haskell. |
| 19:11:07 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 19:11:21 | → | zetef joins (~quassel@86.124.126.227) |
| 19:11:21 | × | zetef quits (~quassel@86.124.126.227) (Client Quit) |
| 19:11:23 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 19:11:24 | <EvanR> | values are values, which don't change. If you mutate some object backing a value, then you have to make sure no one can ever see the old value anymore |
| 19:11:31 | <EvanR> | which is tricky |
| 19:11:39 | <bailsman> | Wait, I WANT the old value |
| 19:11:49 | <EvanR> | the old value will be completely broken if you keep it around |
| 19:11:55 | <bailsman> | there's no sequential updates, all updates are independent and should do update work based on the old value of AllElements |
| 19:12:43 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 19:12:48 | <EvanR> | if you're treating it like a mutable array, it's not a value anymore. But anyone who still sees the value version will be screwed |
| 19:13:09 | <EvanR> | I assume you think that's not happening, because you carefully cleared that part of the code |
| 19:13:53 | <EvanR> | this is the purely theoretical part. The practical difficulty is that mutable and immutable objects are treated totally different in the runtime system |
| 19:14:47 | <EvanR> | so when you thaw something it makes a copy unless there was a rewrite rule to avoid it because of reasons |
| 19:15:10 | <bailsman> | I want to write most of the logic in "normal intuitive code" but then also have the optimizer notice that it's being updated in place and not do any allocations (because I've read somewhere allocations are bad - I've not actually done any profiling) |
| 19:15:28 | <bailsman> | I think what I might want to do is just do an O(n) copy of the entire mutable vector using regular freeze (not unsafeFreeze) and then do something like modify (updateSingleElement frozenCopy) index? That's one allocation, but it's kind of outside the core loop, and the whole thing is already O(n) anyway and copying some memory over is fast. |
| 19:16:39 | <EvanR> | the normal intuitive way sounds like you just want a mutable array. There is a thing where you can export a mutable array that you made as a "pure" immutable array from an ST action |
| 19:16:47 | <EvanR> | "for free" |
| 19:16:50 | <EvanR> | but not the other way around |
| 19:17:08 | <bailsman> | Every iteration of the loop, every element is going to get updated again. I want to keep modifying them over and over (in place) |
| 19:17:18 | <EvanR> | mutable array it is |
| 19:17:28 | <bailsman> | No, because the "pure part" of the code should not write anywhere |
| 19:17:33 | <EvanR> | what pure part |
| 19:17:41 | <bailsman> | updateSingleElement and everything it calls |
| 19:18:20 | <EvanR> | well, the frozenCopy is going to be expensive, and there's no real way around it |
| 19:18:59 | <geekosaur> | am I understanding correctly that updateSingleElement only reads, and ultimately produces a value that the impure code will actually use to mutate? |
| 19:19:05 | <EvanR> | accessing a mutable array involves more book keeping than an immutable array, in the gd |
| 19:19:06 | <EvanR> | gc |
| 19:19:07 | <bailsman> | Is it? I wonder if it's going to be the fastest part, so fast that I'll be embarrased to have enough wondered about the issue. |
| 19:19:18 | <bailsman> | geekosaur: yes |
| 19:19:21 | <EvanR> | copying 100k elements? |
| 19:19:28 | <EvanR> | not cheap |
| 19:19:45 | <EvanR> | especially if you do it once per loop and discard it all |
| 19:19:47 | <bailsman> | it's just memcopy can't you do that at terrabytes per second or something |
| 19:19:58 | <EvanR> | fine then |
| 19:20:20 | <bailsman> | I mean that was pretty much my worry, and why I was looking for whether "immutable references to mutable data" are a thing |
| 19:20:29 | <EvanR> | see if it fits into the gc first generation |
| 19:20:52 | <EvanR> | since it's temporary maybe it won't be so bad |
| 19:21:14 | <EvanR> | but I expect the total cost to defeat the purpose of all this optimization talk |
| 19:21:20 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 19:21:50 | <bailsman> | So what I should do instead is design it to pass mutable references around and just not write to them where I'm not supposed to? |
| 19:22:16 | <EvanR> | the whole thing being an ST action sounds like what ST is meant for |
| 19:22:28 | <EvanR> | you can access the array however you want, and the whole operation will be considered pure in the end |
| 19:22:48 | <bailsman> | I'm totally happy to annotate all the rest of the code however the type system needs me |
| 19:23:07 | <bailsman> | but I would like the compiler to ensure that I'm not writing to the data where I don't want to be writing to it. |
| 19:23:38 | <EvanR> | you can wrap your ST array in a newtype which won't allow you to write through it |
| 19:24:08 | <bailsman> | Interesting. Can you make an example? |
| 19:24:37 | × | sawilagar quits (~sawilagar@user/sawilagar) (Quit: Leaving) |
| 19:24:48 | <bailsman> | If that's easy to do, why isn't it how freeze/thaw already works? |
| 19:25:33 | <EvanR> | what I just suggested as in response to "compiler stops me from writing to it when I don't want to, because... I might accidentally write code to write to it for some reason" |
| 19:25:54 | <EvanR> | which is a different subject from increasing the performance of working with an array |
| 19:25:57 | <bailsman> | I wonder if that still causes the compiler to think the data is "actually mutable" and disables a ton of optimizations |
| 19:26:17 | <bailsman> | I would like most of the code to be regular normal pure code |
| 19:27:06 | <EvanR> | it certainly would still be treated like a mutable array |
| 19:27:09 | <EvanR> | since it is |
| 19:28:04 | <EvanR> | but someone noted the existence of unsafeThaw which is your trap door into "I know what I'm doing" |
| 19:28:27 | <bailsman> | I don't though. |
| 19:28:42 | <EvanR> | exactly |
| 19:29:04 | <EvanR> | I've never really had any success violating haskell's semantics |
| 19:29:13 | <EvanR> | it's just not that kind of language |
| 19:29:32 | <int-e> | avoid success at all cost? |
| 19:30:31 | <Rembane> | int-e: ...while studying the dark arts? |
| 19:31:23 | <int-e> | . o O ( unsuccessfullyPerformIO :: IO a -> a; unsuccessfullyPerformIO = error "I'm afraid I cannot do that, Dave" ) |
| 19:32:56 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:33:20 | <EvanR> | instead of breaking the system, maybe study ways of constructing a new system which is safe and does the optimizations |
| 19:33:58 | <EvanR> | but this mindset requires respecting abstractions in play, once the game starts |
| 19:34:27 | <EvanR> | and then proving what you did worked |
| 19:35:02 | <EvanR> | and be willing to find the counterexamples which prove yourself wrong |
| 19:36:42 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:37:25 | × | arthurvl quits (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net) (Ping timeout: 265 seconds) |
| 19:39:22 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 19:39:26 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 19:39:45 | → | misterfish joins (~misterfis@84.53.85.146) |
| 19:42:26 | <int-e> | oh, one more: unsuccessfullyDupablePerformIO :: IO a -> a; unsuccessfullyDupablePerformIO = error (error "I'm afraid I cannot do that, Dave") |
| 19:46:45 | <bailsman> | Does code like this `for_ [0 .. MV.length v - 1)] (MV.modify v f)` have any performance gotchas? I somehow got it into my head that I want to mutate data in place for performance reasons, but I'm slowly starting to have more and more doubts. |
| 19:46:51 | <bailsman> | This kind of thing should start and end with profiling probably |
| 19:51:37 | → | sprotte24 joins (~sprotte24@p200300d16f2cc30041d9df5443f92151.dip0.t-ipconnect.de) |
| 19:52:30 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
| 19:54:59 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 19:55:05 | <tomsmeding> | bwe: indeed, you put the haddocks on the function where it's defined, and with the not-home haddock option you ensure that the documentation gets generated in the right place |
| 19:55:30 | → | gorignak joins (~gorignak@user/gorignak) |
| 19:55:54 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 19:56:11 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 19:56:26 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds) |
| 19:58:15 | → | gmg joins (~user@user/gehmehgeh) |
| 20:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:38 | → | caconym joins (~caconym@user/caconym) |
| 20:01:45 | × | hellwolf quits (~user@2001:1530:70:545:ac66:99b5:ab1c:ca1) (Ping timeout: 246 seconds) |
| 20:04:45 | <EvanR> | bailsman, it seems like a fold over an IntMap might be more idiomatic and worth benchmarking (again) |
| 20:05:10 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 20:05:40 | → | gorignak joins (~gorignak@user/gorignak) |
| 20:06:27 | <EvanR> | mutable stuff can be faster but ghc puts a tax on all mutable refs for gc purposes |
| 20:07:29 | → | ft joins (~ft@p4fc2a216.dip0.t-ipconnect.de) |
| 20:08:53 | × | jrm quits (~jrm@user/jrm) (Quit: ciao) |
| 20:10:24 | → | jrm joins (~jrm@user/jrm) |
| 20:14:08 | → | zenmov joins (zenmov@user/dymenshen) |
| 20:15:21 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 20:15:52 | → | gorignak joins (~gorignak@user/gorignak) |
| 20:17:10 | → | pera joins (~pera@user/pera) |
| 20:21:07 | × | pera quits (~pera@user/pera) (Client Quit) |
| 20:21:46 | × | briandaed quits (~root@185.234.210.211.r.toneticgroup.pl) (Remote host closed the connection) |
| 20:22:10 | → | pera joins (~pera@user/pera) |
| 20:25:32 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 20:26:02 | → | gorignak joins (~gorignak@user/gorignak) |
| 20:29:20 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 20:35:43 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 20:36:14 | → | gorignak joins (~gorignak@user/gorignak) |
| 20:37:24 | × | jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
| 20:39:36 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 260 seconds) |
| 20:52:57 | → | emfrom joins (~emfrom@37.168.21.200) |
| 20:58:08 | × | KicksonButt quits (~quassel@187.21.174.221) (Ping timeout: 252 seconds) |
| 21:04:37 | × | SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Remote host closed the connection) |
| 21:04:59 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 21:12:25 | × | divya quits (~user@139.5.11.223) (Remote host closed the connection) |
| 21:14:16 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Ping timeout: 252 seconds) |
| 21:15:33 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 21:29:32 | <yin> | back to my previous exercise (which is not too far from this topic): https://paste.jrvieira.com/1731429650053 |
| 21:29:56 | <yin> | if i substitute `(mod k 2)` for `1` in the last line, it only runs m once |
| 21:30:45 | <yin> | is there any way to tell GHC to only run it once for each input? |
| 21:31:00 | × | ubert quits (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
| 21:34:38 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:34:44 | → | Everything joins (~Everythin@94.153.19.2) |
| 21:43:21 | <geekosaur> | not without adding explicit memoization |
| 21:43:46 | <probie> | yin: If I understand what you want, I think you can do something silly like https://play.haskell.org/saved/IVYdjkap |
| 21:46:54 | <probie> | You need to somehow make the argument to `m` depend on an input to the function, otherwise GHC will float `m 1` out, since it doesn't change between calls |
| 21:51:50 | → | ubert joins (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) |
| 21:52:08 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:58:52 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 21:59:43 | × | Everything quits (~Everythin@94.153.19.2) (Ping timeout: 244 seconds) |
| 21:59:56 | × | petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in) |
| 22:02:12 | → | mantraofpie joins (~mantraofp@user/mantraofpie) |
| 22:03:11 | → | falafel joins (~falafel@2600:1700:99f4:2050:7dd6:87c8:aed5:b9e5) |
| 22:03:49 | → | CoolMa7 joins (~CoolMa7@ip5f5b8957.dynamic.kabel-deutschland.de) |
| 22:04:16 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 22:09:26 | × | CoolMa7 quits (~CoolMa7@ip5f5b8957.dynamic.kabel-deutschland.de) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 22:14:42 | → | biberu joins (~biberu@user/biberu) |
| 22:16:38 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f33dd403172660d4408.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 22:18:15 | liamzy__ | is now known as Inst |
| 22:19:55 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 22:20:56 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f33a143196b11e5c3bb.dip0.t-ipconnect.de) |
| 22:29:13 | × | pera quits (~pera@user/pera) (Quit: Lost terminal) |
| 22:33:56 | × | michalz quits (~michalz@185.246.207.197) (Remote host closed the connection) |
| 22:36:25 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 22:43:12 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 276 seconds) |
| 22:48:45 | <haskellbridge> | <zwro> ghc doesn't optimize that aggressively because that "memoization" is a tradeof of space for speed |
| 22:48:53 | × | pounce quits (~pounce@user/cute/pounce) (Read error: Connection reset by peer) |
| 22:49:08 | → | pounce joins (~pounce@user/cute/pounce) |
| 22:49:33 | <haskellbridge> | <zwro> i think it's good that you need to be explicit about your intentions in this case |
| 22:50:27 | <haskellbridge> | <zwro> although i would love for that feature in the language |
| 22:51:01 | × | Hafydd quits (~Hafydd@user/hafydd) (Ping timeout: 248 seconds) |
| 22:52:02 | × | jess quits (meow@libera/staff/cat/jess) (Remote host closed the connection) |
| 22:53:37 | → | jess joins (meow@libera/staff/cat/jess) |
| 22:55:14 | × | emfrom quits (~emfrom@37.168.21.200) (Remote host closed the connection) |
| 23:03:13 | → | Hafydd joins (~Hafydd@user/hafydd) |
| 23:06:12 | × | falafel quits (~falafel@2600:1700:99f4:2050:7dd6:87c8:aed5:b9e5) (Ping timeout: 252 seconds) |
| 23:06:21 | × | gabriel_sevecek quits (~gabriel@188-167-229-200.dynamic.chello.sk) (Quit: WeeChat 4.4.2) |
| 23:08:29 | → | gabriel_sevecek joins (~gabriel@188-167-229-200.dynamic.chello.sk) |
| 23:10:53 | → | Everything joins (~Everythin@178-133-145-205.mobile.vf-ua.net) |
| 23:19:33 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f33a143196b11e5c3bb.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 23:20:54 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
| 23:29:14 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 23:31:29 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 23:31:31 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 23:35:37 | × | CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Quit: ZNC 1.8.2 - https://znc.in) |
| 23:42:13 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 23:47:36 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:51:15 | → | KicksonButt joins (~quassel@187.21.174.221) |
| 23:54:40 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 23:57:00 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 244 seconds) |
| 23:57:22 | → | Inst_ joins (~Inst@user/Inst) |
| 23:59:59 | × | Inst quits (~Inst@user/Inst) (Ping timeout: 252 seconds) |
All times are in UTC on 2024-11-12.