Home liberachat/#haskell: Logs Calendar

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.