Home liberachat/#haskell: Logs Calendar

Logs on 2022-12-16 (liberachat/#haskell)

00:12:12 × acidjnk quits (~acidjnk@p200300d6e7137a0005c6f28ba6b2016c.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
00:13:06 raster joins (~raster@183.82.204.115)
00:14:15 × raster quits (~raster@183.82.204.115) (Client Quit)
00:15:38 beefbambi joins (~beefbambi@183.82.204.115)
00:19:12 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
00:21:29 × ksqsf quits (~user@134.209.106.31) (Quit: ERC 5.4.1 (IRC client for GNU Emacs 29.0.60))
00:24:04 xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
00:33:18 jmdaemon joins (~jmdaemon@user/jmdaemon)
00:37:12 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 3.7.1)
00:38:42 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
00:40:39 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
00:41:41 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 268 seconds)
00:45:42 × JordiGH quits (~jordi@user/jordigh) (Remote host closed the connection)
00:46:15 JordiGH joins (~jordi@user/jordigh)
00:46:19 × JordiGH quits (~jordi@user/jordigh) (Remote host closed the connection)
00:46:38 JordiGH joins (~jordi@user/jordigh)
00:46:38 × JordiGH quits (~jordi@user/jordigh) (Remote host closed the connection)
00:54:47 j4cc3b joins (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net)
00:59:14 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 260 seconds)
01:01:07 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:01:07 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:01:07 wroathe joins (~wroathe@user/wroathe)
01:05:26 fizbin joins (~fizbin@user/fizbin)
01:09:24 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
01:10:35 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:14:22 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds)
01:16:43 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:17:05 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
01:35:05 zeenk joins (~zeenk@2a02:2f04:a30d:4300::7fe)
01:40:06 mvk joins (~mvk@2607:fea8:5ce3:8500::6126)
01:40:08 × mvk quits (~mvk@2607:fea8:5ce3:8500::6126) (Client Quit)
01:41:47 razetime joins (~quassel@49.207.203.213)
01:42:04 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
01:42:23 Xeroine joins (~Xeroine@user/xeroine)
01:42:44 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
01:46:59 × zeenk quits (~zeenk@2a02:2f04:a30d:4300::7fe) (Quit: Konversation terminated!)
01:54:23 × rodental quits (~rodental@38.146.5.222) (Remote host closed the connection)
02:00:22 × j4cc3b quits (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net) (Ping timeout: 272 seconds)
02:05:24 money_ joins (~money@216-131-83-77.nyc.as62651.net)
02:08:38 × beefbambi quits (~beefbambi@183.82.204.115) (Ping timeout: 268 seconds)
02:09:18 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
02:10:20 rodental joins (~rodental@38.146.5.222)
02:13:39 × simp|e quits (~skralg@user/simple) (Remote host closed the connection)
02:13:56 × dgb8 quits (~dgb@astra4961.startdedicated.net) (Quit: The Lounge - https://thelounge.github.io)
02:14:26 dgb8 joins (~dgb@astra4961.startdedicated.net)
02:14:26 × dgb8 quits (~dgb@astra4961.startdedicated.net) (Client Quit)
02:14:49 simple joins (skralg@user/simple)
02:14:55 dgb8 joins (~dgb@astra4961.startdedicated.net)
02:16:00 × dgb8 quits (~dgb@astra4961.startdedicated.net) (Client Quit)
02:18:52 gwern parts (~gwern@user/gwern) ()
02:19:51 dgb8 joins (~dgb@astra4961.startdedicated.net)
02:27:08 × razetime quits (~quassel@49.207.203.213) (Ping timeout: 252 seconds)
02:32:20 oats is now known as tomas
02:36:26 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
02:36:45 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
02:37:59 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
02:39:27 beefbambi joins (~beefbambi@183.82.176.168)
02:46:23 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
02:46:23 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
02:46:23 wroathe joins (~wroathe@user/wroathe)
02:55:07 × money_ quits (~money@216-131-83-77.nyc.as62651.net) (Ping timeout: 256 seconds)
02:59:45 money_ joins (~money@216-131-83-77.nyc.as62651.net)
03:00:50 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
03:02:34 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
03:09:33 money__ joins (~money@50.239.93.29)
03:11:54 × money__ quits (~money@50.239.93.29) (Read error: Connection reset by peer)
03:12:41 × money_ quits (~money@216-131-83-77.nyc.as62651.net) (Ping timeout: 256 seconds)
03:12:42 money__ joins (~money@50.239.93.29)
03:16:09 × johnw quits (~johnw@2600:1700:cf00:db0:b0f5:26ad:fa0:865f) (Quit: ZNC - http://znc.in)
03:19:24 burakcan- is now known as burakcank
03:25:37 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:25:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:25:37 finn_elija is now known as FinnElija
03:33:10 × money__ quits (~money@50.239.93.29) (Read error: Connection reset by peer)
03:34:10 money_ joins (~money@50.239.93.29)
03:35:14 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
03:35:35 × td_ quits (~td@83.135.9.20) (Ping timeout: 268 seconds)
03:37:13 td_ joins (~td@83.135.9.25)
03:37:37 × lyxia quits (~lyxia@poisson.chat) (Ping timeout: 256 seconds)
03:37:53 lyxia joins (~lyxia@poisson.chat)
03:41:27 × money_ quits (~money@50.239.93.29) (Read error: Connection reset by peer)
03:42:46 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
03:43:01 money__ joins (~money@50.239.93.29)
03:45:31 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
03:45:36 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
03:46:36 ChaiTRex joins (~ChaiTRex@user/chaitrex)
03:48:02 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
03:48:36 masterbuilder joins (~master@user/masterbuilder)
03:49:46 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 268 seconds)
04:03:29 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
04:04:18 azimut joins (~azimut@gateway/tor-sasl/azimut)
04:04:23 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
04:05:42 ChaiTRex joins (~ChaiTRex@user/chaitrex)
04:06:31 × money__ quits (~money@50.239.93.29) (Ping timeout: 256 seconds)
04:07:48 money_ joins (~money@172.58.203.79)
04:08:55 money__ joins (~money@50.239.93.29)
04:09:03 × money_ quits (~money@172.58.203.79) (Read error: Connection reset by peer)
04:09:50 money_ joins (~money@2607:fb91:bd34:c1b1:60ff:ce4f:5cae:2e80)
04:13:19 × money__ quits (~money@50.239.93.29) (Ping timeout: 256 seconds)
04:14:38 dsrt^ joins (~dsrt@76.145.185.103)
04:21:06 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
04:22:53 money__ joins (~money@50.239.93.29)
04:26:21 × money_ quits (~money@2607:fb91:bd34:c1b1:60ff:ce4f:5cae:2e80) (Ping timeout: 256 seconds)
04:26:28 Kaiepi joins (~Kaiepi@108.175.84.104)
04:29:32 slack1256 joins (~slack1256@181.42.45.84)
04:30:57 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:32:56 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 268 seconds)
04:35:28 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
04:42:44 razetime joins (~quassel@49.207.203.213)
04:45:13 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
04:45:40 azimut joins (~azimut@gateway/tor-sasl/azimut)
04:58:32 mbuf joins (~Shakthi@49.204.113.218)
05:00:52 × slack1256 quits (~slack1256@181.42.45.84) (Ping timeout: 272 seconds)
05:01:26 Lycurgus joins (~juan@user/Lycurgus)
05:11:13 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
05:19:55 jargon joins (~jargon@174-22-192-24.phnx.qwest.net)
05:27:00 slack1256 joins (~slack1256@181.42.45.84)
05:28:22 mcfilib joins (uid302703@user/mcfilib)
05:28:54 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
05:32:14 money_ joins (~money@2607:fb91:bd24:772:1444:8545:2c03:8bb9)
05:32:32 × slack1256 quits (~slack1256@181.42.45.84) (Ping timeout: 272 seconds)
05:35:07 <iqubic> I'm looking for a version of a lens function that might not exist.
05:35:29 × money__ quits (~money@50.239.93.29) (Ping timeout: 256 seconds)
05:35:54 <iqubic> I want something like "at :: Index m -> Lens' m (Maybe (IxValue m))" but gives me a "Lens' m (IxValue m)" that just errors if it's a Nothing.
05:36:27 <c_wraith> you can use ix with singular
05:37:54 <iqubic> How does that work?
05:38:04 <c_wraith> :t ix
05:38:05 <lambdabot> (Ixed m, Applicative f) => Index m -> (IxValue m -> f (IxValue m)) -> m -> f m
05:38:20 <c_wraith> ix is like at, but it gives back a traversal
05:38:24 <c_wraith> :t singular
05:38:26 <lambdabot> (Conjoined p, Functor f) => Traversing p f s t a a -> Over p f s t a a
05:38:49 <c_wraith> singular transforms a traversal into a lens that will crash if it doesn't have exactly one target
05:38:58 <iqubic> I see. Makes sense.
05:39:10 <iqubic> I'm using this to index into a "Map String a"
05:42:14 <c_wraith> > M.fromList [("hello", 1),("world", 2)] ^. singular (ix "hello")
05:42:15 <lambdabot> 1
05:42:20 <c_wraith> > M.fromList [("hello", 1),("world", 2)] ^. singular (ix "help")
05:42:22 <lambdabot> *Exception: singular: empty traversal
05:46:21 <c_wraith> Whoops, I was a bit off on my description of singular. If the traversal has multiple targets, it will just get the first one, not error.
05:49:45 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
05:50:48 money__ joins (~money@50.239.93.29)
05:54:45 × money_ quits (~money@2607:fb91:bd24:772:1444:8545:2c03:8bb9) (Ping timeout: 256 seconds)
05:56:31 slack1256 joins (~slack1256@181.42.45.84)
06:01:44 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 255 seconds)
06:11:32 trev joins (~trev@user/trev)
06:16:22 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:16:43 × iqubic quits (~avi@2601:601:1100:edd0:9ce:db2c:6ec0:6fd1) (Remote host closed the connection)
06:18:12 iqubic joins (~avi@2601:601:1100:edd0:8902:307c:9a5f:dd30)
06:20:29 × money__ quits (~money@50.239.93.29) (Quit: late)
06:25:53 motherfsck joins (~motherfsc@user/motherfsck)
06:25:53 × dtman34 quits (~dtman34@2601:447:d000:93c9:f2ce:ff11:8e35:42b2) (Ping timeout: 246 seconds)
06:29:23 money_ joins (~money@50.239.93.29)
06:34:45 fizbin_ joins (~fizbin@user/fizbin)
06:36:27 Ybombinator joins (~Ybombinat@85.254.75.176)
06:36:50 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 252 seconds)
06:37:13 fizbin_ is now known as fizbin
06:37:20 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
06:44:49 dtman34 joins (~dtman34@2601:447:d000:93c9:5a3c:a3a1:a91d:2efa)
06:46:23 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
06:46:55 bitdex_ joins (~bitdex@gateway/tor-sasl/bitdex)
06:55:00 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.7.1)
06:55:46 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
06:56:08 <Ybombinator> Why can desort accept arguments in this example https://bpa.st/P43E4 ? Shouldn't desort have a parameter like x that it accepts in it's definition like this "desort x" and then somehow pass it to function composition?
06:58:38 johnw joins (~johnw@2600:1700:cf00:db0:fc6e:5acb:13f7:b72d)
06:59:27 <jackdk> @src (.)
06:59:27 <lambdabot> (f . g) x = f (g x)
06:59:53 <c_wraith> in Haskell a function is a function. (.) returns a function.
07:00:07 <jackdk> `desort = (reverse . sort)` is `\x -> reverse (sort x)`, which is a function
07:00:40 <c_wraith> you don't need to bind parameters for a definition to be a function.
07:01:22 <opqdonut> consider a simpler example like: mysort = sort
07:01:37 <opqdonut> you can still call mysort [1,2,3], because it's just sort [1,2,3]
07:02:14 <Ybombinator> oh right
07:02:23 <Ybombinator> thanks
07:09:32 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
07:11:19 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
07:14:19 × Ybombinator quits (~Ybombinat@85.254.75.176) (Quit: Quit)
07:19:53 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
07:20:17 <int-e> "in Haskell a function is a function" -- a value, maybe?
07:21:44 <Jade[m]> I think they meant A function can take a function as it's input?
07:22:04 <Jade[m]> And likewise return one
07:22:34 <int-e> Yeah, that's the sense of "value" that I meant.
07:22:38 <c_wraith> no, I meant exactly what I said. a function simply *is* a function
07:22:45 <c_wraith> no special syntax required
07:23:27 Inst joins (~Inst@2601:6c4:4081:54f0:8d82:4e66:2137:ab94)
07:23:34 <Inst> wait, isn't GHCJS sort of pointless?
07:23:45 <Inst> because you can't get integration in or out of existing JS code
07:23:46 <int-e> Jade[m]: (so none of the more theoretical stuff with weak head normal forms and the like)
07:23:54 <Inst> elm developers told me that GHCJS outputs terrible JS
07:23:56 <c_wraith> Inst: it has an ffi
07:24:10 <Inst> I took a look at a site that seems to be using GHCJS
07:24:32 <Inst> and I was like, what, it's a Haskell RTS implemented in JS
07:24:39 <c_wraith> but GHCJS is also mostly obsolete
07:24:43 <int-e> "outputs terrible JS" is fine as long as you never look at it and it's not *too* hard on browsers
07:25:21 <davean> Inst: Of course you can get integration in and out of existing JS
07:25:21 <int-e> (I'm actually not a fan, but pragmatically there's no issue.)
07:26:03 <Inst> I mean this is relative to recent integration of a GHCJS variant into GHC in 9.6
07:26:24 <Inst> there's a potential convenience feature in that you can make Haskell code readable in a JS form
07:26:36 <davean> Inst: I have no idea why you think you couldn't. Yes it has a good bit of the GHC RTS compiled in, but that has nothing to do with integrating with other JS
07:27:11 <int-e> It's fair to say that it would be useless without a working FFI to connect to (other) JS.
07:27:26 <davean> Right, its very obvious it can do it
07:27:44 <davean> I suppose making it callable from JS isn't as obvious, but that works fine too
07:27:46 × shane quits (~shane@ana.rch.ist) (Remote host closed the connection)
07:27:56 <Inst> i mean, from my use case, it's more, I want to make my Haskell code readable to non-haskellers
07:28:07 <Inst> an easy way to do this is via GHCJS
07:28:27 <Inst> or, I misunderstood, because it looks like it's not intended to be human readable
07:28:30 <davean> GHCJS isn't code translation, its compilation
07:28:43 <davean> Its a compiler
07:28:50 <int-e> Inst: yeah it doesn't work for that purpose
07:28:51 <Inst> in which case, why not asterius / new wasm backend?
07:29:43 <int-e> And it's hard to imagine anything that really works for that purpose... you express algorithms differently in Haskell. So it's more of a machine translation task, but in an unforgiving environment with little redundancy.
07:29:52 <Inst> with WASM at least, it's not intended to be readable
07:29:57 <davean> Inst: You might want to review the difference between a compiler and a transpiler
07:30:08 <Inst> I understand
07:30:24 <int-e> Most JS in the wild isn't readable either, even when it's written in JS or TS... because of minification.
07:30:34 <davean> There has been a Haskell-JS transpiler or two
07:30:40 <davean> I don't think anyone ever cares about them though
07:30:44 <davean> why would you want that?
07:30:56 <davean> Right, you want web pages to work well
07:31:01 <davean> No one reads the code on the page
07:31:08 <davean> well, other than security researchers
07:31:27 <davean> The code that you serve is for execution, you want the best form for execution
07:31:28 <c_wraith> haste and sunroof? those two were basically transpilers, right?
07:31:43 <Inst> haste iirc had RTS code, no?
07:31:52 <int-e> Even as a human who understands the code... if your Haskell code actually depends on laziness, translation will not be straightforward.
07:31:52 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
07:31:54 <c_wraith> ah, ok. it was bigger than I recalled
07:32:10 L29Ah joins (~L29Ah@wikipedia/L29Ah)
07:32:10 beefbambi joins (~beefbambi@183.82.176.168)
07:32:42 <davean> c_wraith: There were a few others ...
07:33:00 <c_wraith> but yeah, I agree with int-e. idiomatic Haskell code looks like a nightmare in most other languages if you preserve the semantics of individual portions of the code.
07:33:27 <davean> And if you don't, its not that code
07:34:05 <Inst> you know what I mean when I say Hascalator, right?
07:34:22 × manwithluck quits (~manwithlu@194.177.28.176) (Remote host closed the connection)
07:34:32 <davean> Oh hey, Fay got a release in the last decade
07:34:49 <Inst> sarcasm?
07:35:11 <davean> No, it got a 2021 release. Apparently thats still alive
07:36:12 manwithluck joins (~manwithlu@194.177.28.176)
07:36:45 gmg joins (~user@user/gehmehgeh)
07:37:57 × mcfilib quits (uid302703@user/mcfilib) (Quit: Connection closed for inactivity)
07:39:00 <Inst> by Hascalator, it's a joke between Haskell and Scala communities
07:39:22 <Inst> quite a few Scala developers eventually end up becoming Haskell developers because they're interested in the typed FP side, and Scala is a way for them to build experience in typed FP
07:39:48 <Inst> It appears that JS is also becoming sort of a Hascalator; iirc, wasn't Alexis King formerly a JS dev?
07:40:45 <davean> Inst: you may not be horrified by the Fay output, though like, its a subset, and subset isn't stressed enough in that sentance. Its missing some of the best parts of Haskell
07:41:12 <Inst> I'm just a bit disappointed
07:41:24 <Inst> since GHCJS being officially supported by GHC means that there's more support to GHCJS
07:41:45 <Inst> I guess Fay is more interesting; i.e, the idea is, a production team can experiment with Haskell, with their former language being a functional dialect of JS
07:41:59 <Inst> the idea is, if the project fails, transpile to JS, keep the transpiled code
07:42:12 <Inst> reducing the costs of an experimental project in Haskell
07:42:22 <Inst> it also encourages JSers to move into Haskell
07:43:03 <Inst> since they could transpile their Haskell into JS and have some safety features, and if there's FFI, as with the apparently abandoned inline-JS, transition to Haskell is gentler
07:44:18 <davean> What does inline-js have to do with there being an FFI?
07:44:56 <Inst> erm, let's backtrack, you are familiar with the joke "Hascalator", right?
07:45:18 <davean> I've come across it, but we're not joking here
07:45:57 <Inst> If you're talking about FFI, the idea is that being able to FFI into JS libs provides a level of comfort and adjustment to JS devs moving into Haskell, and inline-JS does the same thing
07:46:52 <davean> same thing, but we have FFIs
07:47:00 <davean> inline-js would use the FFI
07:47:02 <davean> not provide it
07:47:48 <Inst> I'm not sure what's going on with that project
07:47:55 <Inst> I assumed they'd develop a FFI for JS
07:48:22 <davean> No, we HAVE FFIs
07:48:33 <davean> Thats how like GHCJS can exist as a functional thing
07:48:58 <davean> You have to have them in both directions for that to even start working
07:49:17 <davean> FFIs are an entire different level and thing from inline- packages
07:49:46 <Inst> I'm searching for it, but I don't see Haskell FFIs to JS other than Foreign.JavaScript in ThreePennyGUI
07:50:14 <davean> Because they're a BASE COMPONENT PROVIDED AS PART OF A COMPILER - they have to be
07:50:23 <davean> you can't "build" one, you have to have one
07:50:36 <Inst> well, i'll walk off if i'm being frustrating
07:50:38 <Inst> thanks for your time
07:50:46 <jackdk> I have literally in the past provided functions written in Haskell to be called by JS
07:51:12 <jackdk> Unfortunately it was for an internal project but yeah
07:51:38 <davean> Inst: you're just clearly ignorant of the very idea of what an FFI is
07:52:14 <davean> while theoretically you can write them inside some languages, certainly Haskell isn't one, it directly involves the calling conventions of the host system
07:52:15 <Inst> a foreign function interface, a provision for one language to call another or be called by another
07:52:48 <Inst> afaik Haskell has C FFIs
07:53:04 <Inst> there's attempts at building FFIs between Haskell and Python, but the project seems old and bitrotted
07:53:04 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:53:42 <davean> Yes, but you can NOT write those *inside* the language of anything remotely high level. The compiler of a language that doesn't let you directly mess with the host architecture MUST be a COMPILER PRIMATIVE
07:53:55 <davean> And we keep telling you, the JS one is right there
07:53:57 <Inst> and yeah, I'm aware of that
07:54:17 <davean> you seem not to be, because you point to things like inline-js
07:54:21 <Inst> the way I understand it is that the JS FFI is implemented as part of GHCJS
07:54:31 <davean> For the GHCJS compiler
07:54:45 <davean> being a compiler primative, it must be in the compiler that it is related to, yes
07:55:26 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:55:38 <Inst> I'm curious, afaik GHCJS was extremely hard to use, i.e, the support had dropped. The interest right now is building a JS backend for GHC in 9.6
07:56:32 <Inst> but if it's a backend, does that apply to FFI with the normal LLVM backend?
07:56:37 <davean> A lot of the "hard to use" is it required an appropriate enviroment, and since it wasn't integrated into GHC it always trailed, and stuff wasn't tested for it specificly.
07:57:05 <Inst> NixOS, I assume
07:57:08 <davean> no
07:57:11 <davean> though it was easy there
07:57:35 <davean> but ... A) the LLVM backend isn't "normal" B) what do you mean "to FFI with the normal LLVM backend"?
07:58:22 <davean> I wouldn't be surprised if you'd never used the LLVM backend
07:58:31 <Inst> the implication of GHCJS is that it's localized to the backend, like, if I use inline-C right now, GHC will compile C object code (if I'm correct here), then call into it when I FFI
07:58:41 <jackdk> There was support in stack for a time, but it bitrotted. Most people I know who use ghcjs do so with Nix but not necessarily NixOS
07:58:50 <Inst> how have I offended you, davean?
07:58:57 <davean> no
07:59:31 <Inst> So, I'm guessing, GHC is still using the gcc backend by default, no?
07:59:38 <davean> No
07:59:47 <Inst> or rather, clang
07:59:49 <davean> No
07:59:55 <davean> It generated native machine code
08:00:02 <davean> *generates
08:00:24 <davean> You can ask it to generate C code, which can be compiled with GCC or clang, but thats SUPER rare and mostly unsupported
08:00:32 <davean> mostly exists for bootstrapping on new architectures
08:00:52 <davean> and it has an LLVM one, if you ask it nicely to use it, though its usually worse except for tight numeric code
08:01:49 <Inst> so regarding the JS FFI, say, post 9.6, if I just use the default backend, I won't have access to the JS FFI?
08:02:14 <davean> You can't just call another language, there has to be a host architecture relationship to that language.
08:02:24 <davean> so if you compile with a JS targetting backend, you can just use the FFI
08:02:33 <davean> also probably the wasm one.
08:02:47 <davean> but certainly not the x86 or ARM one, that would be nonsensicle
08:03:33 <davean> You could have an API to a JS execution engine - thats what the Python one you cite sorta is
08:03:38 × thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
08:03:58 <davean> If you link to a JS execution engine, you can use the native FFI to call the symbols it exports.
08:04:22 <Inst> I assume with custom build, you could link into Node and call JS code
08:04:46 <davean> Nothing custom needed, but yes
08:06:19 <davean> You could use the compilers FFI to bridge into the JS execution enviroment
08:06:24 thaumavorio joins (~thaumavor@thaumavor.io)
08:07:06 <davean> We already have some of those hanging around
08:07:26 <davean> we have to for things like running Template Haskell
08:10:08 manwithl- joins (~manwithlu@2a09:bac1:5bc0:20::49:125)
08:10:52 × manwithluck quits (~manwithlu@194.177.28.176) (Ping timeout: 272 seconds)
08:15:24 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
08:15:46 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
08:17:06 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
08:17:10 × ubert quits (~Thunderbi@p200300ecdf264e7202f1c0a81cd86a27.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
08:17:24 beefbambi joins (~beefbambi@183.82.176.168)
08:18:45 × money_ quits (~money@50.239.93.29) (Quit: late)
08:20:21 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
08:21:59 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
08:22:25 beefbambi joins (~beefbambi@183.82.176.168)
08:23:15 lortabac joins (~lortabac@2a01:e0a:541:b8f0:70c3:bbfa:bcc:5827)
08:25:15 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Ping timeout: 260 seconds)
08:26:01 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
08:27:43 beefbambi joins (~beefbambi@183.82.176.168)
08:30:11 zeenk joins (~zeenk@2a02:2f04:a30d:4300::7fe)
08:32:31 × slack1256 quits (~slack1256@181.42.45.84) (Remote host closed the connection)
08:34:13 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
08:35:52 × thegeekinside quits (~thegeekin@189.217.82.244) (Read error: Connection reset by peer)
08:40:41 vpan joins (~0@212.117.1.172)
08:41:08 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 252 seconds)
08:42:51 nschoe joins (~q@141.101.51.197)
08:43:52 × ft quits (~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving)
08:45:48 Xeroine joins (~Xeroine@user/xeroine)
08:46:43 <Inst> are there any leaks about what's planned for 9.8?
08:46:53 <Inst> I knew 9.6 was the GHCJS / Asterius release
08:49:12 <int-e> https://gitlab.haskell.org/ghc/ghc/-/milestones/379#tab-issues doesn't seem to have anything dramatic yet
08:51:25 <Inst> this is more interesting
08:51:26 <Inst> https://gitlab.haskell.org/ghc/ghc/-/issues/22326
08:51:59 <dminuoso> Im looking for a minimalistic mustache-style template library with a lot dependency footprint. Any ideas?
08:52:09 <dminuoso> *small dependency footprint, heh
08:52:22 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
08:52:49 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
08:53:11 Sciencentistguy joins (~sciencent@hacksoc/ordinary-member)
08:53:40 avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32)
08:53:42 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
08:53:59 <jonathanx__> I'm looking for a datatype that is a bit like Data.These, but instead of "This a | That b | These a b", I want "Foo a | Bar b | Baz"
08:54:24 <jonathanx__> I can make it myself ofc, but does anyone know a lib that has somehting like it?
08:54:25 <dminuoso> jonathanx__: And what is that data type supposed to do?
08:54:34 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Ping timeout: 252 seconds)
08:54:38 <dminuoso> You could just use `Maybe (Either S T)`
08:56:58 <jonathanx__> yes I could, I'd be interested in something akin to a performant partition, with the type "partition' :: Foldable f => (a -> PotentialType b c) -> f a -> (f b, f c))
08:57:06 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 272 seconds)
08:57:21 <jonathanx__> and yes, I could make this through combining partitionEithers and catMaybes
08:57:43 fserucas joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
08:57:53 <jonathanx__> I'm just wondering it there's prior art, since I'm working with something that's a bit performance sensitive
08:57:58 <dminuoso> Foldable is not powerful enough to do this.
08:58:25 <jonathanx__> true
08:58:33 <jonathanx__> excahnge it for a list
08:59:03 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:59:20 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 268 seconds)
09:00:16 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 272 seconds)
09:00:53 <dminuoso> I've been thinking about ways to generalize partitioning for a while
09:01:34 <dminuoso> The best thing I can ever come up with, is essentially optics, lens.
09:01:48 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
09:01:58 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
09:02:08 <jonathanx__> Right!
09:02:37 <jonathanx__> I could kind of remembers seeing some mention of a datatype like this in an announcement for Data.These
09:02:53 <dminuoso> So by using hlists, you could do something along the lines of
09:03:32 <jonathanx__> There is a symmetry where you can get 4 different data types by removing one constructor from "Foo | Bar a | Baz b | Bazz ab"
09:03:38 <jonathanx__> *Bazz a b
09:03:40 <dminuoso> `partition :: HList ... -> [a] -> HList ...`
09:04:00 <dminuoso> Doing this in a general pattern is awkwardly difficult
09:04:05 <dminuoso> But it is easy enough to just say
09:04:20 <dminuoso> Conjure up a typeclass
09:05:05 <dminuoso> Such that you could say `gpartition (_Left, _Right) [Left 1, Left 2, Left 3, Right 4]`
09:05:12 <dminuoso> And you could have
09:05:55 <dminuoso> oh just strike that I havent quite worked it out yet
09:06:12 <dminuoso> but the main issue is that I dont know how to do this efficiently
09:06:35 <dminuoso> What we would need is some general:
09:06:40 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 252 seconds)
09:06:47 thyriaen joins (~thyriaen@2a01:aea0:dd4:4bae:6245:cbff:fe9f:48b1)
09:06:51 <dminuoso> `fuse :: Fold s t -> Fold s u -> Fold s (t, u)`
09:07:09 <dminuoso> That will correctly fuse it together at their common merge point
09:07:26 <dminuoso> or their split point, rather
09:08:16 <dminuoso> (I guess this would be a kind of cross join in algebraic terms)
09:08:36 use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:484b:db47:7265:c55f)
09:09:16 <dminuoso> jonathanx__: For what its worth, I think this *can* be built using the same dark black magic that drives this
09:09:19 <dminuoso> :t upon
09:09:20 <lambdabot> (Indexable [Int] p, Data s, Data a, Applicative f) => (s -> a) -> p a (f a) -> s -> f s
09:09:49 × xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds)
09:10:01 <dminuoso> Or you could even use `upon` directly probably
09:10:17 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 255 seconds)
09:10:29 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
09:11:02 <dminuoso> > [1,2,3,4] & upon head .~ 0
09:11:04 <lambdabot> [0,2,3,4]
09:11:31 <iqubic> What does upon do?
09:11:55 <dminuoso> Just provide it a regular function, and by pure black magic, it transforms it into a traversal.
09:12:06 <iqubic> I see.
09:12:35 <iqubic> > (1,2) & upon fst +~ 7
09:12:36 <lambdabot> (8,2)
09:12:49 <iqubic> That is pure black magic.
09:12:56 <dminuoso> :>
09:13:00 × son0p quits (~ff@2604:3d08:5b7f:5540::d832) (Ping timeout: 255 seconds)
09:13:06 <dminuoso> The type of upon tells you how this works.
09:13:32 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
09:13:57 <iqubic> > Just 1 & upon (\x -> case x of Nothing -> 0; Just y -> y) .~ 2
09:13:59 <lambdabot> Just 2
09:14:13 <iqubic> > Nothing & upon (\x -> case x of Nothing -> 0; Just y -> y) .~ 2
09:14:15 <lambdabot> Nothing
09:14:20 <dminuoso> It involves sorcery including unsafePerformIO, using Data to just try out every field in the ADT representation, provoking runtime exceptions, catching them..
09:14:30 <iqubic> Okay, that is pure black magic.
09:14:41 <dminuoso> https://hackage.haskell.org/package/lens-5.2/docs/src/Data.Data.Lens.html#lookupon
09:14:54 <iqubic> > Nothing & upon (\x -> case x of Nothing -> undefined; Just y -> y) .~ 2
09:14:55 <dminuoso> And it then counts the indices as it goes through..
09:14:56 <lambdabot> Nothing
09:15:14 <iqubic> Wait... what!?!?
09:15:29 <iqubic> Nothing & upon undefined .~ 2
09:15:35 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
09:15:39 <iqubic> > Nothing & upon undefined .~ 2
09:15:41 <lambdabot> Nothing
09:15:42 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
09:15:49 <iqubic> That really is black magic.
09:15:50 <dminuoso> you're invalidating a precondition
09:15:58 <dminuoso> `First, the user supplied function must access only one field of the specified type.`
09:16:08 <dminuoso> your function does not actually access a field.
09:16:16 <iqubic> Didn't know there was a precondition.
09:16:23 <dminuoso> It says so on the haddock.
09:16:26 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
09:16:46 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
09:17:07 <iqubic> How enlightened is edwardk?
09:17:23 <dminuoso> First, the user supplied function must access only one field of the specified type. T
09:17:26 <dminuoso> Oops
09:17:28 <dminuoso> https://hackage.haskell.org/package/lens-5.2/docs/src/Data.Data.Lens.html#template
09:17:35 <dminuoso> iqubic: well honestly this primitive isnt as complicated to build
09:17:37 <dminuoso> its just very evil.
09:18:00 <dminuoso> It shows that you can do ruby-style metaprogramming with runtime reflection *just* *fine* in haskell
09:18:46 <iqubic> The craziest thing I've ever done with Lens is write my own Plated instance and run a paramorphism on some custom data type.
09:19:22 money_ joins (~money@50.239.93.29)
09:19:31 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
09:19:54 × money_ quits (~money@50.239.93.29) (Client Quit)
09:20:30 Xeroine joins (~Xeroine@user/xeroine)
09:20:44 money_ joins (~money@50.239.93.29)
09:21:41 <dminuoso> If I read the code right, the way this works is that by using the data instance and template, it swaps out *every* value in the ADT with an exception
09:22:04 <dminuoso> And it then uses the function zooming into each field while counting a kind of field index
09:22:09 <dminuoso> and if the exception is tripped
09:22:24 <iqubic> Why!?!?! That's all kinds of messed up
09:22:31 <dminuoso> then you know what the accessor was looking at
09:22:50 <dminuoso> https://hackage.haskell.org/package/lens-5.2/docs/src/Data.Data.Lens.html#lookupon
09:23:03 <dminuoso> case unsafePerformIO $ E.try $ evaluate $ field $ s & indexing l %@~ \i (a::a) -> E.throw (FieldException i a) of ....
09:23:42 <dminuoso> Yup its doubly crazy because its not entirely reliable due to imprecise exceptions
09:24:03 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 260 seconds)
09:24:39 <dminuoso> iqubic: ah hold on, let me rephrase.
09:24:42 <dminuoso> no its even better!
09:24:48 <dminuoso> each field is replaced by an exception that contains the index
09:24:56 <dminuoso> (the index in template)
09:25:08 <dminuoso> then you just use the accessor, provoke the pure exception, catch it, extract the index
09:25:16 <dminuoso> and then using the index you can recover a traversal
09:25:27 <dminuoso> oh this is lovely
09:25:36 <dminuoso> somebody went to prison for this one
09:25:54 <money_> ?
09:26:37 <dminuoso> So yeah. Using this technique we can definitely conjure up some kind of
09:26:48 <iqubic> edward is to blame for this, I think.
09:26:48 <dminuoso> fuse :: Data s => Data t => Fold s t -> Fold s u -> Fold s (t, u)
09:27:51 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
09:28:13 <dminuoso> with some precondition that the folds dont overlap
09:28:22 <dminuoso> and probably better both be affine
09:28:49 × money_ quits (~money@50.239.93.29) (Quit: late)
09:29:44 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
09:30:23 × razetime quits (~quassel@49.207.203.213) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
09:31:38 money_ joins (~money@50.239.93.29)
09:33:18 × money_ quits (~money@50.239.93.29) (Client Quit)
09:34:50 akegalj joins (~akegalj@93-137-174-44.adsl.net.t-com.hr)
09:36:42 money_ joins (~money@50.239.93.29)
09:36:48 × money_ quits (~money@50.239.93.29) (Client Quit)
09:38:43 money_ joins (~money@50.239.93.29)
09:40:41 × money_ quits (~money@50.239.93.29) (Read error: Connection reset by peer)
09:43:47 Kaiepi joins (~Kaiepi@108.175.84.104)
09:44:45 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
09:51:12 CiaoSen joins (~Jura@p200300c95730b6002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
09:52:43 × zeenk quits (~zeenk@2a02:2f04:a30d:4300::7fe) (Quit: Konversation terminated!)
10:03:11 ksqsf joins (~user@134.209.106.31)
10:09:47 chele joins (~chele@user/chele)
10:09:59 xff0x_ joins (~xff0x@2405:6580:b080:900:5047:9af2:d4a8:44bb)
10:15:40 zaquest joins (~notzaques@5.130.79.72)
10:17:09 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
10:17:24 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
10:17:43 beefbambi joins (~beefbambi@183.82.176.168)
10:19:59 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:70c3:bbfa:bcc:5827) (Ping timeout: 265 seconds)
10:21:55 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
10:22:36 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 272 seconds)
10:22:43 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:22:48 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
10:23:17 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
10:24:56 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:25:11 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
10:25:57 beefbambi joins (~beefbambi@183.82.176.168)
10:26:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:c184:76cc:3bad:bcb1)
10:29:03 × maerwald quits (~maerwald@user/maerwald) (Quit: gone)
10:29:09 ksqsf` joins (~user@134.209.106.31)
10:29:35 maerwald joins (~maerwald@mail.hasufell.de)
10:30:23 × maerwald quits (~maerwald@mail.hasufell.de) (Changing host)
10:30:23 maerwald joins (~maerwald@user/maerwald)
10:32:44 × ksqsf quits (~user@134.209.106.31) (Ping timeout: 272 seconds)
10:34:00 × ksqsf` quits (~user@134.209.106.31) (Ping timeout: 272 seconds)
10:35:12 tvandinther joins (~tvandinth@101.98.118.246)
10:35:17 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:35:32 <tvandinther> I'm building a command line app and I want to incorporate logging of different types (switchable using options) as output as well as the data itself. Which approach would be recommended? Should I just use a writer monad or something more?
10:35:43 × tvandinther quits (~tvandinth@101.98.118.246) (Quit: Quit)
10:35:58 tvandinther joins (~tvandinth@101.98.118.246)
10:36:00 <dminuoso> I too tend to ask questions and leave 11 seconds afterwads.
10:36:02 <dminuoso> :p
10:36:16 <tvandinther> Haha sorry. Wrong button on this new irc app
10:36:24 <dminuoso> tvandinther: I would probably use monad-logger (or use the same style)
10:36:37 <dminuoso> Because it docouples the place of logging from a concrete implementation
10:37:01 <dminuoso> As for different outputs, make it a runtime flag that alters how the log string is pushed into the logger
10:37:11 <dminuoso> or maybe just the latter
10:37:24 <iqubic> Yeah, use monad-logger or similar and then you can mock different implementations
10:37:30 <dminuoso> that is, monad-logger is useful if you want to quickly switch out where logs go to (and how they are filtered)
10:37:40 <dminuoso> but if output ever only goes to stdout, might as well just use fast-logger
10:38:04 <tvandinther> Yeah it'll be nice to write all logs and then filter them based on the switch when I want to write them to the console
10:38:18 <dminuoso> tvandinther: for that you can still do it with fast-logger.
10:38:46 <dminuoso> the main advantage of monad-logger is decoupling the implementation (especially useful if you ship it as a library), or if you wantt o switch out the implementation (log to stdout, to a file, to a tchan, etc...)
10:39:04 <dminuoso> THough personally I would probably favour `hsyslog`
10:39:06 <dminuoso> over fast-logger.
10:39:40 <tvandinther> It's a small app so I would favour simplicity over decoupling
10:39:50 × Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
10:39:51 <tvandinther> I'll take a look at fast-logger and hsyslog
10:39:55 <dminuoso> hsyslog is simple, and yet strong in decoupling
10:40:03 <dminuoso> the decoupling mechanism is completely there
10:40:15 <dminuoso> given that in most systemd installations, syslog goes directly into journald
10:40:26 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:40:26 <dminuoso> so you have filtering built-in in journald
10:40:28 <dminuoso> and facilities
10:41:13 Xeroine joins (~Xeroine@user/xeroine)
10:41:31 <dminuoso> you can also use monad-logger and syslog in tandem
10:41:45 × xff0x_ quits (~xff0x@2405:6580:b080:900:5047:9af2:d4a8:44bb) (Ping timeout: 260 seconds)
10:41:51 × xacktm quits (~xacktm@user/xacktm) (Ping timeout: 260 seconds)
10:41:57 <tvandinther> Although my purpose isn't *really* considered logging, right? It's more just about aggregating a classifiable output and processing it to stdout
10:41:58 <dminuoso> this way you can reduce the journal storage requirements outside of debugging scenarios, enable debugging, but *still* be able to quickly and comfortably filter output
10:42:02 <dminuoso> okay
10:42:15 <dminuoso> tvandinther: then, perhaps you rather just want ReaderT or a global IORef.
10:42:19 × andreas303 quits (andreas303@ip227.orange.bnc4free.com) (Ping timeout: 260 seconds)
10:42:35 <dminuoso> Which just keeps the sort of "format/precision" as ambient state or an environment
10:42:41 <dminuoso> and you then have functions like
10:42:57 <dminuoso> `pprThing :: PprMode -> Thing -> Doc ann`
10:43:14 <dminuoso> with say `data PppMode = PprJSON | PprSimple | PprDetailed`
10:43:15 xff0x_ joins (~xff0x@ai071162.d.east.v6connect.net)
10:43:32 michalz joins (~michalz@185.246.204.72)
10:45:24 <tvandinther> With WriterT I read that there are performance issues with it but would it be a problem for let's say 10000 appends considering the process will exit afterwards?
10:46:58 × tvandinther quits (~tvandinth@101.98.118.246) (Quit: Quit)
10:47:11 tvandinther joins (~tvandinth@101.98.118.246)
10:51:11 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
10:52:25 ec joins (~ec@gateway/tor-sasl/ec)
11:03:18 jespada_ is now known as jespada
11:05:02 × akegalj quits (~akegalj@93-137-174-44.adsl.net.t-com.hr) (Ping timeout: 272 seconds)
11:05:30 × CiaoSen quits (~Jura@p200300c95730b6002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
11:05:42 xacktm joins (~xacktm@user/xacktm)
11:05:52 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
11:07:10 ChaiTRex joins (~ChaiTRex@user/chaitrex)
11:09:28 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 272 seconds)
11:10:37 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
11:13:57 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
11:19:22 andreas303 joins (andreas303@ip227.orange.bnc4free.com)
11:20:23 tvandinther joins (~tvandinth@101.98.118.246)
11:22:11 son0p joins (~ff@2604:3d08:5b7f:5540::417e)
11:22:30 mmhat joins (~mmh@p5081a34e.dip0.t-ipconnect.de)
11:23:26 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
11:23:45 ksqsf` joins (~user@134.209.106.31)
11:23:52 <jackdk> Run it and see? But we have Control.Monad.Trans.Writer.CPS now which lacks this problem. (It is isomorphic to StateT but does not provide MonadState-esque operations)
11:24:01 ksqsf` is now known as ksqsf
11:24:40 <jackdk> the concrete transformer is in transformers-0.6 and the MTL support is since mtl-2.3
11:25:09 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 260 seconds)
11:25:39 <jackdk> @tell tvandinther https://hackage.haskell.org/package/transformers-0.6.0.4/docs/Control-Monad-Trans-Writer-CPS.html If you're appending on the right, you may want a snoc list, Data.Sequence, or difference list (dlist)
11:25:39 <lambdabot> Consider it noted.
11:26:18 × fizbin quits (~fizbin@user/fizbin) (Remote host closed the connection)
11:26:19 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
11:26:37 fizbin joins (~fizbin@user/fizbin)
11:27:06 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
11:27:50 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Ping timeout: 260 seconds)
11:31:45 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 252 seconds)
11:37:00 ec_ joins (~ec@gateway/tor-sasl/ec)
11:37:32 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
11:38:23 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
11:38:40 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
11:38:55 beefbambi joins (~beefbambi@183.82.176.168)
11:39:48 × ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
11:40:28 ec_ joins (~ec@gateway/tor-sasl/ec)
11:42:55 × dextaa quits (~DV@user/dextaa) (Quit: Ping timeout (120 seconds))
11:43:15 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 256 seconds)
11:43:19 dextaa joins (~DV@user/dextaa)
11:46:17 CiaoSen joins (~Jura@p200300c95730b6002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
11:47:28 rnat joins (uid73555@id-73555.lymington.irccloud.com)
11:47:38 jakalx parts (~jakalx@base.jakalx.net) ()
11:52:18 jakalx joins (~jakalx@base.jakalx.net)
12:01:27 × phma quits (phma@2001:5b0:211f:2488:eec1:974f:5902:6cf5) (Read error: Connection reset by peer)
12:02:30 phma joins (~phma@host-67-44-208-106.hnremote.net)
12:03:30 Lycurgus joins (~juan@user/Lycurgus)
12:03:38 doyougnu joins (~doyougnu@cpe-74-69-132-225.stny.res.rr.com)
12:20:04 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
12:21:00 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer)
12:24:39 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 260 seconds)
12:25:36 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
12:25:41 __monty__ joins (~toonn@user/toonn)
12:25:59 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:29:06 __xor joins (~xor@74.215.182.83)
12:29:54 × _xor quits (~xor@74.215.182.83) (Ping timeout: 272 seconds)
12:33:36 × __xor quits (~xor@74.215.182.83) (Ping timeout: 252 seconds)
12:34:21 hsw_ joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
12:34:53 __xor joins (~xor@74.215.182.83)
12:35:29 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
12:37:13 elevenkb joins (~elevenkb@105.224.37.128)
12:37:51 × hgolden quits (~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
12:39:20 hgolden joins (~hgolden@cpe-172-251-233-141.socal.res.rr.com)
12:44:05 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
12:46:38 <dminuoso> monochrom: You were using emacs with ghci for integrating errors, right?
12:48:01 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
12:50:33 × hsw_ quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Quit: Leaving)
12:55:01 shriekingnoise joins (~shrieking@186.137.167.202)
12:55:13 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
12:56:51 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
13:00:29 azimut joins (~azimut@gateway/tor-sasl/azimut)
13:01:44 × kaskal quits (~kaskal@2001:4bb8:2d1:32ed:7894:4e7:1e3f:f8dd) (Ping timeout: 246 seconds)
13:06:12 kaskal joins (~kaskal@213-147-167-253.nat.highway.webapn.at)
13:15:07 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
13:18:26 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
13:22:05 zaquest joins (~notzaques@5.130.79.72)
13:22:45 × mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection)
13:23:50 zeenk joins (~zeenk@2a02:2f04:a30d:4300::7fe)
13:24:42 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
13:27:32 × paulpaul1076 quits (~textual@95-29-5-111.broadband.corbina.ru) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:29:03 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Ping timeout: 252 seconds)
13:30:03 <dminuoso> % type Nummy = forall a. Num a => Maybe a
13:30:03 <yahb2> <no output>
13:30:15 <dminuoso> % a :: () -> Nummy; a _ = Just 5
13:30:15 <yahb2> <no output>
13:30:25 <dminuoso> % b :: () -> Maybe Int; b = a
13:30:25 <yahb2> <interactive>:42:27: error: ; • Couldn't match type: forall a. Num a => Maybe a ; with: Maybe Int ; Expected: () -> Maybe Int ; Actual: () -> Nummy ; • In...
13:30:46 <dminuoso> % :set -XDeepSubsumption
13:30:47 <yahb2> <no output>
13:30:49 <dminuoso> % b :: () -> Maybe Int; b = a
13:30:49 <yahb2> <no output>
13:30:57 <dminuoso> Why is simple subsumption breaking this?
13:31:18 <dminuoso> Isnt `a :: () -> Nummy` perfectly equivalent to `a :: Num a => () -> Maybe a`?
13:32:33 × elevenkb quits (~elevenkb@105.224.37.128) (Ping timeout: 260 seconds)
13:32:37 freeside joins (~mengwong@eduroam-134-96-204-5.uni-saarland.de)
13:34:20 × CiaoSen quits (~Jura@p200300c95730b6002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
13:39:29 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
13:42:18 mncheck joins (~mncheck@193.224.205.254)
13:49:44 Lycurgus joins (~juan@user/Lycurgus)
13:50:56 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
14:04:13 thegeekinside joins (~thegeekin@189.217.82.244)
14:04:24 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
14:08:54 × freeside quits (~mengwong@eduroam-134-96-204-5.uni-saarland.de) (Ping timeout: 268 seconds)
14:11:40 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
14:13:42 × ksqsf quits (~user@134.209.106.31) (Remote host closed the connection)
14:14:52 ksqsf joins (~user@2001:da8:d800:336:943b:89e6:6fda:8564)
14:17:34 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 272 seconds)
14:20:02 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
14:24:05 × waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Quit: WeeChat 3.7.1)
14:26:32 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
14:37:06 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
14:40:50 × pavonia quits (~user@user/siracusa) (Ping timeout: 252 seconds)
14:44:30 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:46:37 × gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.7.1)
14:56:01 califax joins (~califax@user/califx)
14:59:19 × hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 256 seconds)
15:01:01 hpc joins (~juzz@ip98-169-35-163.dc.dc.cox.net)
15:02:35 × gdd quits (~gdd@2001:470:1f13:187:e8a5:fbff:fe29:42f5) (Ping timeout: 264 seconds)
15:03:58 akegalj joins (~akegalj@141-136-165-175.dsl.iskon.hr)
15:05:39 × hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 260 seconds)
15:08:01 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:c184:76cc:3bad:bcb1) (Ping timeout: 252 seconds)
15:11:14 × thyriaen quits (~thyriaen@2a01:aea0:dd4:4bae:6245:cbff:fe9f:48b1) (Remote host closed the connection)
15:11:35 hpc joins (~juzz@ip98-169-35-163.dc.dc.cox.net)
15:11:52 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 252 seconds)
15:12:51 unit73e joins (~emanuel@2001:818:e8dd:7c00:656:e5ff:fe72:9d36)
15:13:01 × dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection)
15:16:13 Azel_ joins (~Azel@2a01:e0a:1f1:98e0:fa28:19ff:fea0:c205)
15:20:07 tomas is now known as oats
15:25:29 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
15:26:11 mestre joins (~mestre@191.177.185.178)
15:27:01 × rnat quits (uid73555@id-73555.lymington.irccloud.com) (Quit: Connection closed for inactivity)
15:27:22 <mestre> Hello, does anybody knows if there is a mastodon instance for functional programming?
15:29:21 <Jade[m]> @pl a . a
15:29:21 <lambdabot> a . a
15:29:36 <leah2> mestre: types.pl maybe
15:30:26 <Jade[m]> theres fix of course which is the infinite version of this
15:30:27 <Jade[m]> is there an idiom for f . f or f . f . f?
15:30:46 <mestre> leah2: uh, this looks interesting, ty!
15:31:56 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
15:32:33 <geekosaur> Jade[m], it's too short for there to be one, we just write it
15:32:55 <geekosaur> for many of them there's a use of iterate, but for 2 or 3 it's not worth it
15:40:26 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 255 seconds)
15:42:31 CiaoSen joins (~Jura@p200300c95718c3002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:45:22 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
15:48:19 <Jade[m]> fair
15:50:46 <EvanR> :t groupBy
15:50:47 <lambdabot> (a -> a -> Bool) -> [a] -> [[a]]
15:51:24 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
15:51:57 <EvanR> how do you group by a field, such as fst or snd
15:52:06 <unit73e> :t exterminatus
15:52:07 <lambdabot> error: Variable not in scope: exterminatus
15:52:10 <unit73e> :(
15:52:20 <EvanR> this signature seems wonderfully obtuse right now
15:52:32 ozkutuk53 joins (~ozkutuk@176.240.173.153)
15:52:38 freeside joins (~mengwong@nat-veranstaltungen.uni-saarland.de)
15:52:53 <unit73e> :t groupOn
15:52:54 <lambdabot> error:
15:52:54 <lambdabot> • Variable not in scope: groupOn
15:52:54 <lambdabot> • Perhaps you meant one of these:
15:53:01 <geekosaur> `groupBy (comparing snd)`
15:53:02 <unit73e> I was hoping that existed lol
15:53:07 × ksqsf quits (~user@2001:da8:d800:336:943b:89e6:6fda:8564) (Ping timeout: 252 seconds)
15:53:21 <unit73e> well there you go
15:53:30 <unit73e> groupBy (comparing ...)
15:53:36 <EvanR> :t comparing
15:53:37 <lambdabot> Ord a => (b -> a) -> b -> b -> Ordering
15:53:59 <EvanR> Ordering... Bool... the neutrons aren't forming right now
15:55:03 <geekosaur> given a transformer from a value to another value inside of it (a primitive lens, if you will) and a pair of values, apply the transformer to each value and pass both to `compare`
15:55:12 Guest|65 joins (~Guest|65@84.22.220.152)
15:55:19 <EvanR> > groupBy (\(x,_) (y,_) -> x==y) [(1,2),(1,3),(2,5)]
15:55:21 <lambdabot> [[(1,2),(1,3)],[(2,5)]]
15:55:56 <geekosaur> and comparing is the same as (compare `on`)
15:56:08 <EvanR> yeah but groupBy wants a Bool
15:56:17 <EvanR> for some reason
15:56:33 <geekosaur> well, yes, it looks for some notion of equality
15:56:33 <EvanR> comparing works great for sortBy
15:56:45 <geekosaur> so there is equatingt,m or equivalently ((==) `on`)
15:56:53 <geekosaur> *equating,
15:57:01 <EvanR> there is equating?
15:57:03 <EvanR> :t equating
15:57:04 <lambdabot> error: Variable not in scope: equating
15:57:08 <geekosaur> @index equating
15:57:08 <lambdabot> Distribution.Simple.Utils
15:57:13 <geekosaur> wrong one
15:57:32 <geekosaur> think it's in there somewhere, but ((==) `on`) is the same thing and I think preferred
15:57:45 <geekosaur> only reason there's a separate `comparing` is it came first
15:58:02 <geekosaur> :t on
15:58:03 <lambdabot> (b -> b -> c) -> (a -> b) -> a -> a -> c
15:58:05 <EvanR> on (==) is what I was forgetting
15:58:05 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
15:58:35 <Jade[m]> ((==) `on`) isn't that the same as (on (==))
15:58:43 <EvanR> > groupBy (on (==) id) [(1,2),(1,3),(2,5)]
15:58:44 <lambdabot> [[(1,2)],[(1,3)],[(2,5)]]
15:58:51 <Jade[m]> * `((==) \`on`)` isn't that the same as `(on (==))`
15:58:55 <EvanR> uhg
15:58:56 j4cc3b joins (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net)
15:58:59 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
15:59:04 <Jade[m]> * `((==) \`on`)` isn't that the same as `(on (==))`
15:59:05 <EvanR> > groupBy (on (==) fst) [(1,2),(1,3),(2,5)]
15:59:07 <lambdabot> [[(1,2),(1,3)],[(2,5)]]
15:59:09 <EvanR> \o/
15:59:10 × unit73e quits (~emanuel@2001:818:e8dd:7c00:656:e5ff:fe72:9d36) (Ping timeout: 252 seconds)
15:59:14 <geekosaur> yes
15:59:35 <Jade[m]> * `((==) \\`on\`)` isn't that the same as `(on (==))`
15:59:36 <Jade[m]> * `((==) `on`)` isn't that the same as `(on (==))`
15:59:37 <geekosaur> but `(==) \`on\` snd` reads better
15:59:40 × jinsun quits (~jinsun@user/jinsun) (Ping timeout: 252 seconds)
16:00:05 <geekosaur> fsvo "reads better"
16:00:22 <EvanR> do you guys know there are randomly backslashes in your messages
16:00:50 <EvanR> is that a matrix thing or
16:00:53 <geekosaur> that's to keep matrix from exploding (Jade[m] is on Matrix)
16:01:02 <EvanR> lol
16:01:07 <EvanR> it will explode?
16:01:08 <Jade[m]> I often use it instead of flip because (flip f) x reads a lot worse than (`f` x)
16:01:14 <geekosaur> since `x` is fixed width / code, but we have `` used in its Haskell sense within
16:01:23 <EvanR> and now I'm seeing unicode character 0011
16:01:24 <geekosaur> welll, it'll misrender
16:01:34 <geekosaur> that's another matrix thingt
16:01:40 <EvanR> :(
16:01:51 <Jade[m]> yeah im on matrix
16:02:02 <geekosaur> I tried to configure hexchat to translate it but that stopped tabs from updating (longstanding hexchat bug)
16:02:09 <Jade[m]> what does my username look like?
16:02:20 califax joins (~califax@user/califx)
16:02:20 <EvanR> <Jade[m]>
16:02:26 <geekosaur> "Jade[m]" but that probably gfets translated by the gateway
16:03:11 <Jade[m]> geekosaur: ah ok, was wondering if it'd transfer the flag as well haha
16:03:43 <geekosaur> the default is to convert your matrix username to something valid as an IRC nick and then append "[m]"
16:03:53 <EvanR> you have a flag? cool
16:04:02 <Jade[m]> ok I see
16:04:25 <Jade[m]> EvanR: trans flag 🏳️‍⚧️
16:04:28 <geekosaur[m]> I'm over here too but it's a separate account
16:04:49 <Jade[m]> geekosaur[m]: very nice
16:04:51 <geekosaur> not a valid nick char
16:05:07 <Jade[m]> yep
16:05:26 <geekosaur> nicks are limited to one of the ISO charsets (not iso8859-1, it's the scandinavian charset for historical reasons)
16:06:21 <geekosaur> letters and digits only, but within that charset so we get extra chars that represent things like ø
16:06:30 Guest75 joins (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18)
16:06:48 <Jade[m]> lets goo
16:06:51 <Jade[m]> äöü?
16:07:16 <EvanR> that flag appears correctly, impressive
16:08:15 jinsun joins (~jinsun@user/jinsun)
16:09:27 azimut joins (~azimut@gateway/tor-sasl/azimut)
16:09:37 <EvanR> whenever sortBy and groupBy are needed, it means comparing and on are needed, and so three imports are needed
16:09:48 <EvanR> Data.List, Data.Ord, Data.Function
16:09:57 <EvanR> three imports for 2 functions xD
16:10:34 <Jade[m]> make a module that re-exports these
16:10:49 × Guest|65 quits (~Guest|65@84.22.220.152) (Quit: Connection closed)
16:11:23 <EvanR> custom prelude? xD
16:12:32 <geekosaur> there is sortOn that combines sortBy with on. sadly the same is not true of groupBy
16:12:57 <geekosaur> then again it's arguable that if it matters that much, you probably shouldn't be using a list
16:14:31 × nschoe quits (~q@141.101.51.197) (Quit: Switching off)
16:15:09 Guest|65 joins (~Guest|65@84.22.220.152)
16:16:12 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
16:16:46 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
16:18:31 jmdaemon joins (~jmdaemon@user/jmdaemon)
16:19:04 nschoe joins (~q@141.101.51.197)
16:22:04 <EvanR> when life gives you a list, you use all this stuff to make a Map
16:23:11 × Guest|65 quits (~Guest|65@84.22.220.152) (Quit: Connection closed)
16:24:52 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
16:25:10 <Jade[m]> hahaha
16:29:23 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
16:30:08 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
16:32:19 Jade[m] uploaded an image: (32KiB) < https://libera.ems.host/_matrix/media/v3/download/matrix.org/ptUmacIdEbgEpCUEDyaGQXul/2022-12-16_17-33.png >
16:33:03 × manwithl- quits (~manwithlu@2a09:bac1:5bc0:20::49:125) (Remote host closed the connection)
16:33:25 manwithluck joins (~manwithlu@2a09:bac1:5bc0:20::49:125)
16:33:40 × mbuf quits (~Shakthi@49.204.113.218) (Quit: Leaving)
16:35:19 <geekosaur> someone needs to upgrade @girl19, clearly 🙂
16:38:44 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
16:45:46 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 272 seconds)
16:54:53 razetime joins (~quassel@49.207.203.213)
16:54:53 ft joins (~ft@p4fc2a257.dip0.t-ipconnect.de)
16:56:41 random-jellyfish joins (~random-je@user/random-jellyfish)
16:58:29 × freeside quits (~mengwong@nat-veranstaltungen.uni-saarland.de) (Ping timeout: 268 seconds)
16:58:50 motherfsck joins (~motherfsc@user/motherfsck)
17:02:01 <monochrom> dminuoso: Yes emacs haskell-mode has error integration. P.S. I think simple subsumption's purpose includes treating "forall a. X -> F a" and "X -> forall a. F a" differently (to make something else easier).
17:03:19 Sgeo joins (~Sgeo@user/sgeo)
17:05:04 <monochrom> EvanR: When life gives you C, you write Hugs. :)
17:09:23 × nschoe quits (~q@141.101.51.197) (Remote host closed the connection)
17:11:46 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Remote host closed the connection)
17:12:04 gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
17:12:57 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:16:48 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
17:17:39 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
17:18:07 beefbambi joins (~beefbambi@183.82.176.168)
17:18:54 × razetime quits (~quassel@49.207.203.213) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:19:37 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
17:20:54 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
17:23:53 × michalz quits (~michalz@185.246.204.72) (Remote host closed the connection)
17:24:39 × use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:484b:db47:7265:c55f) (Quit: use-value)
17:25:33 × jespada quits (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
17:25:34 × Vajb quits (~Vajb@2001:999:250:c9:8588:6e93:7809:7816) (Read error: Connection reset by peer)
17:26:42 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
17:30:40 mvk joins (~mvk@2607:fea8:5ce3:8500::6126)
17:32:34 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
17:34:51 Vajb joins (~Vajb@2001:999:250:c9:8588:6e93:7809:7816)
17:37:03 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:47:12 × juri_ quits (~juri@84-19-175-179.pool.ovpn.com) (Ping timeout: 268 seconds)
17:49:40 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
17:50:13 × zeenk quits (~zeenk@2a02:2f04:a30d:4300::7fe) (Quit: Konversation terminated!)
17:57:41 michalz joins (~michalz@185.246.204.94)
17:57:56 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
17:58:28 × mvk quits (~mvk@2607:fea8:5ce3:8500::6126) (Quit: Going elsewhere)
17:58:55 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 268 seconds)
17:59:52 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
18:02:15 unit73e joins (~emanuel@2001:818:e8dd:7c00:656:e5ff:fe72:9d36)
18:03:22 Hercules1 joins (~Hercules@ti0018a400-7782.bb.online.no)
18:04:59 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
18:05:27 × Hercules1 quits (~Hercules@ti0018a400-7782.bb.online.no) (Client Quit)
18:06:17 × michalz quits (~michalz@185.246.204.94) (Ping timeout: 246 seconds)
18:06:26 califax joins (~califax@user/califx)
18:07:22 michalz joins (~michalz@185.246.204.94)
18:08:47 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
18:10:41 × CiaoSen quits (~Jura@p200300c95718c3002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
18:11:54 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
18:12:47 juri_ joins (~juri@84-19-175-179.pool.ovpn.com)
18:17:00 econo joins (uid147250@user/econo)
18:17:08 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
18:18:23 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
18:19:40 <voidzero> hey so thanks for the reinforcement yesterday
18:20:56 <monochrom> :)
18:22:37 <voidzero> today my studies went great, and when I got to the assignment "write a caesar cipher function and add a decipher function" I wrote this. Please rate it. https://paste.tomsmeding.com/KvwMuHdh
18:23:45 <voidzero> nixos-install -v --show-trace --no-root-passwd --root /mnt
18:23:48 <voidzero> oops
18:24:17 <voidzero> wrong clipboard
18:24:51 <monochrom> I think it's OK.
18:26:48 × random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed)
18:26:58 <voidzero> :)
18:28:04 <voidzero> originally I thought I'd use the range > 48 and < 123, but ' ' is ord 32 so I took that as the bottom limit
18:28:46 <voidzero> lower limit
18:29:20 <VOID[m]> Fellas, I was here recently trying to make lenses for my tree
18:29:21 <VOID[m]> I did a thing after getting some suggestions from nice people here
18:29:21 <VOID[m]> Could someone please take a look and tell me how much I overcomplicated it?
18:29:21 <VOID[m]> https://paste.tomsmeding.com/2x1wnlBN
18:29:59 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1)
18:30:14 <dsal> VOID[m]: can you not derive Functor, Foldable, and Traversable?
18:30:45 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
18:31:18 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
18:31:47 <VOID[m]> I am not sure, I didn't trust derive for complex type :P
18:31:47 <VOID[m]> How do I know if it derived correctly? Is it as simple as "if it compiles its good"?
18:33:33 <dsal> You can test laws with checkers, but it's probably more likely to be correct if it can derive than if you wrote it by hand.
18:34:12 <geekosaur> in the case of Functor, there is only one correct derivation and if the compiler can't do it then it almost certainly can't be done
18:34:29 × tomjagua1paw quits (~tom@li367-225.members.linode.com) (Ping timeout: 260 seconds)
18:34:55 <VOID[m]> Then from now on I shall derive
18:35:03 tomjaguarpaw joins (~tom@li367-225.members.linode.com)
18:35:44 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:36:43 <geekosaur> (there are cases involving GADTs where you have to use standalone deriving, but the same rule applies)
18:37:17 <dsal> Yeah, last time I built something fancy and tree-like, I apparently did a ton of checkers.
18:37:27 jakalx joins (~jakalx@base.jakalx.net)
18:37:42 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Remote host closed the connection)
18:38:33 <monochrom> I am the opposite. I don't trust myself for complex types.
18:39:27 <VOID[m]> monochrom: Honestly, that's probably smarter. I just didn't expect it to be able to derive...
18:39:57 <dsal> That's how I ended up with my last somewhat complex type. I wrote all the things and the tests and then I realized I could derive them so pulled out all that extra code.
18:40:05 <monochrom> More honestly I'm just lazy.
18:41:17 <geekosaur> if it can derive it then by construction it is correct. it's only in the case where it can't derive Foldable or Traversable that it's possible you can write it. (for Functor, as I said, if it can't derive it then it can't be done)
18:42:01 <monochrom> I need to test that against my favourite example... >:D
18:42:31 <VOID[m]> I was right, deriving doesn't work well for Foldable for my type. It derives but order is terrible
18:43:04 <geekosaur> hm, that is a possibility, yes.
18:43:05 <VOID[m]> (so traversable maybe too? I don't remember if order matters there)
18:43:07 <monochrom> Ugh I'm impressed. DeriveFunctor works for C r a = ((a -> r) -> r) too.
18:43:27 <geekosaur> order doesn't matter for Traversable
18:43:46 <monochrom> How is order terrible?
18:44:18 <monochrom> Ah there is choice of preorder postorder inorder.
18:44:28 <monochrom> But "terrible" is the wrong word.
18:44:49 tvandinther joins (~tvandinth@101.98.118.246)
18:45:08 <VOID[m]> Implementing by hand: λ> foldr (:) [] sampleTree -- [1,2,3,4,5,6,7,8,9]
18:45:12 <VOID[m]> Deriving: [4,5,6,7,8,9,1,2,3]
18:45:32 <VOID[m]> For a tree:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/4efca93f25b953e5c3d04383b1a2519b2f0f5219>)
18:49:16 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 272 seconds)
18:52:32 slack1256 joins (~slack1256@191.125.227.69)
18:52:43 <monochrom> Alternatively you could have declared _values before _branches.
18:53:08 tvandinther joins (~tvandinth@101.98.118.246)
18:53:17 <slack1256> Does stack's package.yaml have a section to specify data-files as in cabal?
18:57:30 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 252 seconds)
18:59:24 <sm1> I'm guessing data-files:
19:00:12 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
19:00:39 <dsal> VOID[m]: https://play-haskell.tomsmeding.com/saved/K2DGICtL
19:00:59 cheater joins (~Username@user/cheater)
19:01:28 paulpaul1076 joins (~textual@95-29-5-111.broadband.corbina.ru)
19:02:22 × nek0 quits (~nek0@2a01:4f8:222:2b41::12) (Quit: The Lounge - https://thelounge.chat)
19:02:38 × AlexZenon quits (~alzenon@178.34.161.14) (Ping timeout: 252 seconds)
19:03:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
19:03:22 × Alex_test quits (~al_test@178.34.161.14) (Ping timeout: 252 seconds)
19:04:12 <VOID[m]> I'll refactor my pattern matching to actually use records and I'll be able to use that, thanks
19:05:28 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:05:38 <VOID[m]> And that foldr in getTree? It feels ugly, have I missed an obvious way to write it prettier?
19:05:38 <VOID[m]> Or is it ok...
19:10:53 Alex_test joins (~al_test@178.34.161.14)
19:11:14 <dsal> You might be able to get further with uniplate, but I don't know that it's holding you back in any way.
19:12:04 × doyougnu quits (~doyougnu@cpe-74-69-132-225.stny.res.rr.com) (Ping timeout: 272 seconds)
19:12:31 AlexZenon joins (~alzenon@178.34.161.14)
19:14:41 <voidzero> if not pretty, embellish with comments
19:16:03 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
19:17:15 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
19:18:26 takuan joins (~takuan@178-116-218-225.access.telenet.be)
19:20:52 × Guest75 quits (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18) (Quit: Client closed)
19:24:18 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:27:57 tvandinther joins (~tvandinth@101.98.118.246)
19:34:18 <iqubic> I hate that there's no HasTrie instance for Sets
19:35:38 <iqubic> https://hackage.haskell.org/package/MemoTrie-0.6.10/docs/Data-MemoTrie.html
19:36:33 <VOID[m]> maybe `o & branches %~ (\b -> set ps b t)` is better than map inside fmap
19:37:32 <iqubic> Ideally I'd want `Instance (HasTrie a) => HasTrie (Set a)`
19:37:39 gmg joins (~user@user/gehmehgeh)
19:37:59 × mestre quits (~mestre@191.177.185.178) (Quit: Lost terminal)
19:38:22 <VOID[m]> Except I think I made a mistake...
19:41:50 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 272 seconds)
19:47:25 × avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 252 seconds)
19:47:28 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Remote host closed the connection)
19:47:41 <VOID[m]> Ok, do you guys have any tips on navigating lens docs
19:47:52 <VOID[m]> Finding anything there seems near impossible for me...
19:48:12 <VOID[m]> They have some weirdly specific operators
19:48:34 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds)
19:49:38 <VOID[m]> I want to iterate over a list applying a function until it returns a Just
19:51:48 <VOID[m]> Also, is it possible to check if a function has infix version in lens?
19:53:08 × paulpaul1076 quits (~textual@95-29-5-111.broadband.corbina.ru) (Quit: Textual IRC Client: www.textualapp.com)
19:53:25 asthasr joins (~asthasr@208.80.78.154)
19:54:29 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
19:54:57 Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
19:56:51 <unit73e> kind of needed actual cross platform paths but it's still in experimental :\
19:57:41 <unit73e> it will be filepath 2.x
19:58:56 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
20:03:37 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
20:03:59 tvandinther joins (~tvandinth@101.98.118.246)
20:04:03 beefbambi joins (~beefbambi@183.82.176.168)
20:05:20 takuan joins (~takuan@178-116-218-225.access.telenet.be)
20:08:14 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
20:08:45 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 260 seconds)
20:09:29 takuan joins (~takuan@178-116-218-225.access.telenet.be)
20:10:27 tvandinther joins (~tvandinth@101.98.118.246)
20:15:24 × tvandinther quits (~tvandinth@101.98.118.246) (Ping timeout: 272 seconds)
20:15:55 tvandinther joins (~tvandinth@101.98.118.246)
20:17:17 × slack1256 quits (~slack1256@191.125.227.69) (Remote host closed the connection)
20:18:57 × tvandinther quits (~tvandinth@101.98.118.246) (Client Quit)
20:20:53 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
20:23:17 × mmhat quits (~mmh@p5081a34e.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
20:34:23 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
20:35:34 lortabac joins (~lortabac@2a01:e0a:541:b8f0:8ce1:49ba:5282:c918)
20:36:03 ChaiTRex joins (~ChaiTRex@user/chaitrex)
20:38:28 monochrom turns on both LambdaCase and BlockArguments to write "catchError xyz \case E1 -> ... E2 -> ..." \∩/
20:38:36 pavonia joins (~user@user/siracusa)
20:39:05 <monochrom> {-# language JavaCatchSyntax #-}
20:39:10 <Rembane> How to win at life
20:39:40 <Rembane> I've activated RecordDotSyntax and that makes my Haskell code look very unHaskelly
20:39:55 <monochrom> Oh I could also use infix `catchError`!
20:40:15 wootehfoot joins (~wootehfoo@user/wootehfoot)
20:40:58 <dsal> iqubic: can't you just write that?
20:41:17 <dsal> VOID[m]: I liked "optics by example" for understanding the concepts. The docs are just… you've got to know things.
20:41:47 <unit73e> Rembane, I do have some Javaskell in my code, like having each record in its own file, but that's about it
20:42:07 <unit73e> It just feels more organized to me that way
20:42:14 <unit73e> private files, obviously
20:42:28 <unit73e> so say Entry is it's own file
20:42:32 <VOID[m]> I've read many optics tutorials now ;_;
20:42:32 <VOID[m]> I just want a way to find specific stuff...
20:42:32 <VOID[m]> Like having array of Maybe, get first Just
20:42:36 <Rembane> unit73e: Private files are the best, or wait... what does that mean?
20:42:46 <unit73e> Rembane, it means they're not exposed in cabal
20:42:56 <VOID[m]> How do I even look for that...
20:43:18 <unit73e> they're in other-modules, basically
20:43:19 <Rembane> VOID[m]: I have no idea... fold using <|> as operator instead?
20:43:38 <Rembane> unit73e: Cool. Sounds like a way to encapsulate things.
20:43:43 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:8ce1:49ba:5282:c918) (Quit: WeeChat 2.8)
20:44:02 <unit73e> yeah then I can just use Entry.whatever and it's a good deal
20:44:05 <dsal> > foldr (<|>) Nothing [Nothing, Nothing, Just 3, Just 5, Nothing]
20:44:06 <lambdabot> Just 3
20:44:18 <dsal> > listToMaybe . catMaybes $ [Nothing, Nothing, Just 3, Just 5, Nothing]
20:44:19 <lambdabot> Just 3
20:44:48 <VOID[m]> That's what I am doing right now, but lens has so much weirdly specific stuff, that it feels like there might be a thing for that...
20:44:48 <VOID[m]> It has a specific thing for list of booleans for example
20:44:53 <unit73e> like we say here, each monkey in his own branch
20:45:09 <dsal> > [Nothing, Nothing, Just 3, Just 5, Nothing] ^? folded . _Just
20:45:10 <lambdabot> Just 3
20:46:38 <Rembane> :t (^?)
20:46:39 <lambdabot> s -> Getting (First a) s a -> Maybe a
20:46:48 <dsal> :t preview
20:46:49 <lambdabot> MonadReader s m => Getting (First a) s a -> m (Maybe a)
20:47:41 <dsal> > preview (folded . _Just) [Nothing, Nothing, Just 3, Just 5, Nothing]
20:47:43 <lambdabot> Just 3
20:47:52 <monochrom> I have lots of inner classes in a Java file.
20:48:11 <monochrom> I guess my Java code is fairly Haskelly.
20:48:23 <monochrom> or fairly Cish.
20:48:43 <dsal> I was writing a lot of scheme last time I had a java job. I had a ~70 line method that started with `return` and just nested a bunch of junk.
20:48:44 <VOID[m]> dsal: <3 thx, that seems obvious now
20:48:45 <monochrom> actually I know, Algolly.
20:49:01 <monochrom> haha
20:49:38 <monochrom> Yeah in C I write like fib(n) { return n<=2 ? 1 : fib(n-1) + fib(n-2) ; }
20:49:55 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
20:50:07 <Rembane> dsal: Is that MonadReader in preview a red herring or... why does it work?
20:51:53 <dsal> Yeah, I didn't expect that.
20:52:18 <dsal> preview l = asks (getFirst #. foldMapOf l (First #. Just))
20:52:52 <monochrom> I think the lens library is a large vocabulary. Like all large vocabulary in all languages (especially natural languages), even a dictionary that explains each word is of limited use. You immerse yourself in that language and absorb by osmosis and practice.
20:54:10 <monochrom> Yes IOW I'm saying that this is like 0.1 times "where is a better doc for English?"
20:54:36 <Rembane> monochrom: I would love to have a better doc for English
20:55:18 <Rembane> dsal: That's an interesting definition that makes me slightly worried. Oh well. If it work it works.
20:55:46 <monochrom> My personal example: Although "precarity" is clearly in dictionaries, I didn't even know it existed until my labour union used it in newsletters.
20:56:13 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Remote host closed the connection)
20:56:47 <monochrom> There is not going to be a tutorial or library doc that would tell me about "precarity" in advance. One has to wait until someone else actually uses it in a real sentence.
20:57:51 <monochrom> Natural language teachers recommend that the only way to help is to read more books.
20:58:04 <monochrom> So, read more other people's code.
20:59:18 <dsal> Rembane: My brain's not good at understanding what asks is doing there.
20:59:21 <VOID[m]> monochrom: but it'd be great to at least be able to look for an infix version of function quickly, and I think there was a naming patter explained in one of the tutorials, idk if it's described in docks somewhere, couldn't find it
20:59:43 <dsal> VOID[m]: hoogle?
20:59:58 <VOID[m]> For which problem...
21:00:16 <dsal> hoogle's good for finding the name of a thing you want done.
21:00:57 <dsal> :t getFirst #. foldMapOf l (First #. Just)
21:00:58 <lambdabot> error:
21:00:58 <lambdabot> • Variable not in scope:
21:00:58 <lambdabot> (#.) :: (First a0 -> Maybe a0) -> (s0 -> r0) -> t
21:01:04 <dsal> :t getFirst . foldMapOf l (First . Just)
21:01:05 <lambdabot> error:
21:01:05 <lambdabot> • Couldn't match type ‘Expr’
21:01:05 <lambdabot> with ‘(a -> Const (First a) a) -> s -> Const (First a) s’
21:01:11 <dsal> :t \l -> getFirst . foldMapOf l (First . Just)
21:01:12 <lambdabot> Getting (First a) s a -> s -> Maybe a
21:01:16 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
21:01:48 <VOID[m]> The types in lenses are long and hard to get
21:01:48 <VOID[m]> And stuff like "is there an infix for view?" (an obvious example, I know) is hard to find
21:01:48 <VOID[m]> With view/set it's easyish thanks to readme, but other functions?
21:01:52 <dsal> OK. I figured it was something like that. I don't think I would've thought to construct it that way.
21:02:07 <dsal> :t view
21:02:08 <lambdabot> MonadReader s m => Getting a s a -> m a
21:02:17 <dsal> @hoogle MonadReader s m => Getting a s a -> m a
21:02:17 <lambdabot> Control.Lens.Combinators view :: MonadReader s m => Getting a s a -> m a
21:02:17 <lambdabot> Control.Lens.Getter view :: MonadReader s m => Getting a s a -> m a
21:02:17 <lambdabot> Network.AWS.Lens view :: MonadReader s m => Getting a s a -> m a
21:02:56 <dsal> Yeah, preview and ^? are slightly different because of that weird monadreader thing.
21:03:49 <dsal> You have to rearrange it some.
21:03:53 <dsal> :t preview
21:03:54 <lambdabot> MonadReader s m => Getting (First a) s a -> m (Maybe a)
21:04:14 <dsal> @hoogle Getting (First a) s a -> s -> Maybe a
21:04:15 <lambdabot> Lens.Micro.Extras preview :: Getting (First a) s a -> s -> Maybe a
21:04:15 <lambdabot> Control.Lens.Fold (^?) :: s -> Getting (First a) s a -> Maybe a
21:04:15 <lambdabot> Control.Lens.Operators (^?) :: s -> Getting (First a) s a -> Maybe a
21:04:59 <unit73e> monochrom, interestingly java tried to copy haskell with its own modules, aka project jigsaw, but it's so crappy that nobody uses
21:05:44 <unit73e> and javascript, off all languages, actually copied kind of right
21:06:32 <Rembane> dsal: Same here. The Reader monad is IIRC function application but in a monad, can that intuition help here?
21:07:35 <VOID[m]> I'll have to figure out the rearranging
21:07:42 <dsal> > asks (+) 2 3
21:07:44 <lambdabot> 5
21:07:45 × trev quits (~trev@user/trev) (Remote host closed the connection)
21:08:30 <unit73e> I also find it interesting that React is a cheap knockoff of haskell in the monad idea
21:08:39 <unit73e> but only somewhat
21:08:50 crazazy joins (~user@130.89.171.62)
21:09:28 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
21:09:48 <[exa]> react has anything like monads?
21:10:20 beefbambi joins (~beefbambi@183.82.176.168)
21:11:12 <geekosaur> callbacks?
21:11:26 <Rembane> Hooks?
21:11:47 <[exa]> that's a bit more like an effect system but no monads
21:11:47 <dsal> blackjack?
21:12:28 <unit73e> [exa], they have this components idea, where you have to lift and whatnot, but it's only somewhat copied
21:12:38 <unit73e> and they even copied Effect
21:12:47 <unit73e> but only superficially
21:12:53 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
21:13:21 <unit73e> it's obvious they copied the name and are going somewhat with the same idea, but it's javascript
21:13:50 <unit73e> so it leaves a lot to be desired
21:13:55 beefbambi joins (~beefbambi@183.82.176.168)
21:13:55 <unit73e> Purescript is the way to go imo
21:14:20 × Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 255 seconds)
21:14:31 <[exa]> lifting in react usually means making state more global, still no monads :(
21:14:34 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
21:14:44 beefbambi joins (~beefbambi@183.82.176.168)
21:15:46 <[exa]> (you could say the nice musculous people in gyms copied lifting from haskell)
21:15:56 <unit73e> the first time I used React it felt like they tried to shoehorn functional into javascript and came up with that thingy
21:16:06 <unit73e> it's not great but they have something
21:17:04 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
21:17:18 <unit73e> they even tried to sell the idea of high order components
21:17:32 <unit73e> which is kind off.. wtf.. but whatever
21:18:05 <crazazy> ngl i like class components in react over hooks
21:18:40 Kaiepi joins (~Kaiepi@108.175.84.104)
21:18:54 <crazazy> was also a nice distinction: class components hold local state, function components do not
21:19:12 <unit73e> I honestly don't care how react or anything JS ends up, because in the end of the day, there's always some weirdness you can't get rid off in JS
21:19:22 <unit73e> but that's just me
21:19:26 <unit73e> who gave up on JS
21:19:45 <unit73e> still have to program in JS but I just don't care if it's pretty or not
21:19:46 <unit73e> rant over
21:20:30 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 252 seconds)
21:20:32 <[exa]> well it would be great to have more of the sensible js frontends like purescript
21:20:42 <[exa]> s/sensible/sensibler/
21:20:48 beefbambi joins (~beefbambi@183.82.176.168)
21:21:32 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
21:24:10 <dolio> Or to not require compiling to JS to begin with.
21:25:05 Rembane waves the webassembly flag for completion
21:30:38 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
21:31:56 jinsun__ joins (~jinsun@user/jinsun)
21:31:56 × jinsun quits (~jinsun@user/jinsun) (Killed (mercury.libera.chat (Nickname regained by services)))
21:31:56 jinsun__ is now known as jinsun
21:32:27 <iqubic> So, is there no way good way to memoize a function that takes a `(HasTrie a) => Set a` as one of its input!
21:32:29 <iqubic> ??
21:32:54 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 268 seconds)
21:33:10 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
21:33:20 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
21:33:28 jinsun__ joins (~jinsun@user/jinsun)
21:33:28 jinsun is now known as Guest8699
21:33:28 jinsun__ is now known as jinsun
21:33:58 gehmehgeh joins (~user@user/gehmehgeh)
21:34:41 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds)
21:35:00 ChaiTRex joins (~ChaiTRex@user/chaitrex)
21:36:38 × Guest8699 quits (~jinsun@user/jinsun) (Ping timeout: 252 seconds)
21:36:53 <juri_> is there a way to intentionally create an orphan deriving instance? my test suite wants Eq everywhere, but i want to remove it from my program.
21:37:02 <juri_> s/program/library/
21:37:43 <geekosaur> standalone deriving in the test suite?
21:37:50 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
21:38:08 beefbambi joins (~beefbambi@183.82.176.168)
21:41:33 <juri_> i suppose. i didn't want to write it myself, but seems pretty boilerplate.
21:43:39 <geekosaur> erm, I meant adding `{-# LANGUAGE StandaloneDeriving #-}` and writing `deriving instance …` (https://downloads.haskell.org/ghc/9.4.1/docs/users_guide/exts/standalone_deriving.html)
21:44:59 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
21:46:44 RedSwan joins (~jared@174-23-134-43.slkc.qwest.net)
21:48:07 <juri_> oh, neat. thanks!
21:50:49 azimut joins (~azimut@gateway/tor-sasl/azimut)
21:50:57 jakalx joins (~jakalx@base.jakalx.net)
21:51:10 mmhat joins (~mmh@p200300f1c72368bbee086bfffe095315.dip0.t-ipconnect.de)
21:56:43 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100)
22:01:12 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b575:bbf6:df74:2100) (Ping timeout: 252 seconds)
22:04:03 <jackdk> Could use reflection? There's code to synthesise temporary monoid instances, I'm sure you could do the same for eq
22:04:58 × beefbambi quits (~beefbambi@183.82.176.168) (Ping timeout: 268 seconds)
22:05:11 beefbambi joins (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377)
22:10:36 × texasmynsted quits (~texasmyns@99.96.221.112) (Ping timeout: 255 seconds)
22:12:47 doyougnu joins (~doyougnu@cpe-74-69-132-225.stny.res.rr.com)
22:14:39 × beefbambi quits (~beefbambi@2401:4900:230d:f57c:538c:d7cc:50c0:e377) (Read error: Connection reset by peer)
22:15:38 beefbambi joins (~beefbambi@183.82.176.168)
22:22:03 × euandreh quits (~Thunderbi@179.214.113.107) (Remote host closed the connection)
22:24:21 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
22:24:34 beefbambi joins (~beefbambi@183.82.176.168)
22:26:40 euandreh joins (~Thunderbi@179.214.113.107)
22:28:42 × doyougnu quits (~doyougnu@cpe-74-69-132-225.stny.res.rr.com) (Ping timeout: 252 seconds)
22:29:39 <dsal> iqubic: can't you just make that instance?
22:31:43 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
22:32:09 × euandreh quits (~Thunderbi@179.214.113.107) (Quit: euandreh)
22:34:16 × Azel_ quits (~Azel@2a01:e0a:1f1:98e0:fa28:19ff:fea0:c205) (Quit: Konversation terminated!)
22:38:32 × fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds)
22:39:43 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:45:44 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
22:52:05 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
22:54:06 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
22:54:48 beefbambi joins (~beefbambi@183.82.176.168)
23:00:20 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
23:00:20 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
23:00:20 wroathe joins (~wroathe@user/wroathe)
23:01:31 × fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 260 seconds)
23:01:54 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
23:02:26 × chele quits (~chele@user/chele) (Remote host closed the connection)
23:07:56 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
23:08:12 beefbambi joins (~beefbambi@183.82.176.168)
23:08:19 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
23:10:12 × Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Ping timeout: 272 seconds)
23:12:53 × beefbambi quits (~beefbambi@183.82.176.168) (Read error: Connection reset by peer)
23:13:37 beefbambi joins (~beefbambi@183.82.176.168)
23:14:26 × akegalj quits (~akegalj@141-136-165-175.dsl.iskon.hr) (Quit: leaving)
23:19:22 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:19:41 × wroathe quits (~wroathe@user/wroathe) (Quit: leaving)
23:20:02 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
23:44:45 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:46:04 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 252 seconds)
23:47:25 × zer0bitz quits (~zer0bitz@196.244.192.57) (Read error: Connection reset by peer)
23:57:39 × mmhat quits (~mmh@p200300f1c72368bbee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.7.1)
23:58:47 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Ping timeout: 256 seconds)

All times are in UTC on 2022-12-16.