2023/02/02

2023-02-02 00:04:25 +0100cheater_(~Username@user/cheater)
2023-02-02 00:07:52 +0100cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2023-02-02 00:07:52 +0100cheater_cheater
2023-02-02 00:16:15 +0100cheater_(~Username@user/cheater)
2023-02-02 00:16:45 +0100titibandit1(~titibandi@xdsl-85-197-0-96.nc.de) (Remote host closed the connection)
2023-02-02 00:18:42 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
2023-02-02 00:18:49 +0100 <jean-paul[m]> ddellacosta: Interesting. For me, lsp-ui-sideline-apply-code-actions finds no code actions - just like lsp-execute-code-action ... except just now, on my 20th attempt to use lsp-execute-code-action, it worked.
2023-02-02 00:18:57 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2023-02-02 00:19:02 +0100cheater_cheater
2023-02-02 00:25:05 +0100cheater(~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com))
2023-02-02 00:44:26 +0100tzh_(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: Leaving)
2023-02-02 00:45:53 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt) (Remote host closed the connection)
2023-02-02 00:46:25 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-02-02 00:46:45 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 00:47:04 +0100L29AhL29Ah[x]
2023-02-02 00:47:46 +0100cheater(~Username@user/cheater)
2023-02-02 00:48:20 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-02 00:49:02 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-02 00:51:38 +0100zeenk(~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!)
2023-02-02 00:52:32 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-02-02 01:08:53 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 252 seconds)
2023-02-02 01:12:56 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-02-02 01:15:01 +0100mechap1(~mechap@user/mechap)
2023-02-02 01:16:31 +0100cheater_(~Username@user/cheater)
2023-02-02 01:18:03 +0100mechap(~mechap@user/mechap) (Ping timeout: 252 seconds)
2023-02-02 01:19:35 +0100cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2023-02-02 01:19:36 +0100cheater_cheater
2023-02-02 01:24:13 +0100acidjnk_new3(~acidjnk@p200300d6e715c41534a27522b62d030b.dip0.t-ipconnect.de)
2023-02-02 01:24:39 +0100acidjnk_new(~acidjnk@p200300d6e715c483583a1c499a1e309c.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-02-02 01:29:47 +0100cheater_(~Username@user/cheater)
2023-02-02 01:31:03 +0100Lycurgus(~juan@user/Lycurgus)
2023-02-02 01:31:40 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-02 01:32:21 +0100telser(~quassel@user/telser) (Ping timeout: 252 seconds)
2023-02-02 01:32:45 +0100telser(~quassel@user/telser)
2023-02-02 01:33:05 +0100cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2023-02-02 01:33:13 +0100cheater_cheater
2023-02-02 01:36:41 +0100Joao003(~Joao003@2804:840:8302:200:2c92:7dbe:5cc4:8e08)
2023-02-02 01:38:12 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-02-02 01:38:12 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-02-02 01:38:12 +0100wroathe(~wroathe@user/wroathe)
2023-02-02 01:45:33 +0100gurkenglas(~gurkengla@dynamic-046-114-182-217.46.114.pool.telefonica.de) (Ping timeout: 252 seconds)
2023-02-02 01:48:28 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-02-02 01:50:41 +0100acidjnk_new3(~acidjnk@p200300d6e715c41534a27522b62d030b.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-02-02 01:51:05 +0100landonf(landonf@mac68k.info)
2023-02-02 01:53:04 +0100thongpv(~thongpv87@14.179.159.25)
2023-02-02 01:53:05 +0100Cale(~cale@cpebc4dfb3052b3-cmbc4dfb3052b0.cpe.net.cable.rogers.com)
2023-02-02 01:55:05 +0100ryanbooker(uid4340@id-4340.hampstead.irccloud.com)
2023-02-02 01:55:55 +0100falafel(~falafel@2607:fb91:1449:aea0:14d8:1ad5:a3d2:34a)
2023-02-02 01:56:58 +0100 <Joao003> nothing happens on this channel
2023-02-02 01:57:07 +0100 <Joao003> except a few long conversations
2023-02-02 01:57:20 +0100 <geekosaur> it was busy earlier
2023-02-02 01:57:43 +0100 <Joao003> irc is underrated and old but excellent
2023-02-02 01:58:14 +0100 <Joao003> probably almost everyone has moved to discord but i don't like discord
2023-02-02 01:58:21 +0100 <Joao003> discord has too many features
2023-02-02 01:59:07 +0100 <geekosaur> there's a separate matrix room but it's even quieter
2023-02-02 01:59:54 +0100 <geekosaur> then again some of the reason this channel is "except a few long conversations" is that we redirect most off topic stuff to #haskell-offtopic (then again that channel's been quiet today as well)
2023-02-02 02:00:04 +0100 <Joao003> lol
2023-02-02 02:00:53 +0100 <geekosaur> both channels are kinda variable in how busy they are
2023-02-02 02:01:05 +0100 <geekosaur> today's been relatively quiet. some days it's really busy
2023-02-02 02:01:13 +0100 <jackdk> It comes in waves, depending on which side of the earth faces the sun right now
2023-02-02 02:01:23 +0100 <Joao003> mine is facing the moon
2023-02-02 02:01:34 +0100 <Joao003> i mean not facing the sun
2023-02-02 02:01:47 +0100 <Joao003> lol it's pretty late in the night already for me'
2023-02-02 02:02:08 +0100 <Joao003> also anyone knows of a good apl room?
2023-02-02 02:03:35 +0100 <jackdk> No, but I imagine it's not typeable on a regular keyboard ;-)
2023-02-02 02:03:42 +0100 <jackdk> s/No/Not I/
2023-02-02 02:04:14 +0100 <Joao003> lol there's apl ime
2023-02-02 02:04:19 +0100 <geekosaur> agda input mode, anyone? 🙂
2023-02-02 02:05:34 +0100 <Joao003> also i found the apl channel its named #apl
2023-02-02 02:07:44 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 248 seconds)
2023-02-02 02:11:32 +0100danza(~francesco@151.35.37.215)
2023-02-02 02:14:57 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
2023-02-02 02:20:08 +0100cheater_(~Username@user/cheater)
2023-02-02 02:22:38 +0100slack1256(~slack1256@186.11.59.217)
2023-02-02 02:23:29 +0100cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2023-02-02 02:23:33 +0100cheater_cheater
2023-02-02 02:23:36 +0100Joao003(~Joao003@2804:840:8302:200:2c92:7dbe:5cc4:8e08) (Quit: Leaving)
2023-02-02 02:30:43 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 268 seconds)
2023-02-02 02:38:21 +0100xff0x(~xff0x@2405:6580:b080:900:eb1:bbe6:622a:f170) (Ping timeout: 252 seconds)
2023-02-02 02:40:24 +0100telser(~quassel@user/telser) (Ping timeout: 260 seconds)
2023-02-02 02:41:11 +0100telser(~quassel@user/telser)
2023-02-02 02:41:24 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-02-02 02:43:07 +0100bhall(~brunohall@195.147.207.136) (Ping timeout: 252 seconds)
2023-02-02 02:43:27 +0100 <sm> dangit, my google sheet csv getter has bitrotted. Depends on gogol which is unmaintained and requires aeson < 2, which is in stackage lts-18/ghc-8.10 which doesn't run easily on a modern mac (needs older llvm). Building it with cabal on the other hand requires me to solve a stiff cleverness test (dependency puzzle).
2023-02-02 02:43:40 +0100bhall(~brunohall@85.255.237.177)
2023-02-02 02:46:10 +0100 <sm> current cabal script header: build-depends: aeson<1.6, bytestring, cassava, gogol, gogol-core, gogol-sheets, lens, pretty-show, text
2023-02-02 02:46:10 +0100 <sm> result: https://termbin.com/phxi8
2023-02-02 02:46:10 +0100 <sm> getting too old for this sh*t :)
2023-02-02 02:47:26 +0100 <sm> I guess it's because.. cabal scripts use the user's package db, and I already have a wrong bytestring version installed there ?
2023-02-02 02:52:17 +0100bhall(~brunohall@85.255.237.177) (Ping timeout: 252 seconds)
2023-02-02 02:52:52 +0100codaraxis(~codaraxis@user/codaraxis) (Ping timeout: 252 seconds)
2023-02-02 02:52:54 +0100bhall(~brunohall@195.147.207.136)
2023-02-02 02:55:17 +0100 <ddellacosta> jean-paul[m]: I am at a loss...that is bizarre behavior
2023-02-02 02:57:40 +0100telser(~quassel@user/telser) (Ping timeout: 260 seconds)
2023-02-02 03:15:23 +0100 <sm> I came close, building most deps, with this horror:
2023-02-02 03:15:23 +0100 <sm> ghcup set ghc 9.0.2 && PATH=/opt/homebrew/opt/llvm@12/bin:$PATH CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX13.1.sdk/usr/include/ffi cabal build ./gsheet-csv.hs
2023-02-02 03:15:26 +0100 <sm> but failed due to "error: instruction requires: sha3", some bug with this required llvm version on arm
2023-02-02 03:15:52 +0100 <sm> and I chose Haskell for software longevity...
2023-02-02 03:16:08 +0100barzo(~hd@31.223.42.197)
2023-02-02 03:19:00 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds)
2023-02-02 03:20:42 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-02-02 03:25:37 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2023-02-02 03:32:29 +0100razetime(~Thunderbi@117.193.6.240)
2023-02-02 03:39:06 +0100Guest75(~Guest75@178.141.149.12)
2023-02-02 03:44:16 +0100bhall(~brunohall@195.147.207.136) (Ping timeout: 248 seconds)
2023-02-02 03:45:55 +0100 <sm> but anyway - any recommendations for an alternative to gogol for accessing google sheets ?
2023-02-02 03:45:56 +0100bhall(~brunohall@85.255.237.168)
2023-02-02 03:50:54 +0100bhall(~brunohall@85.255.237.168) (Ping timeout: 268 seconds)
2023-02-02 03:54:11 +0100jero98772(~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb) (Remote host closed the connection)
2023-02-02 03:55:21 +0100barzo(~hd@31.223.42.197) (Ping timeout: 252 seconds)
2023-02-02 03:56:18 +0100 <sm> found one: go install github.com/cristoper/gsheet/cmd/gsheet@latest
2023-02-02 03:58:08 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Ping timeout: 248 seconds)
2023-02-02 03:58:16 +0100bhall(~brunohall@195.147.207.136)
2023-02-02 04:01:19 +0100oldfashionedcow(Rahul_Sand@user/oldfashionedcow)
2023-02-02 04:02:24 +0100slack1256(~slack1256@186.11.59.217) (Ping timeout: 248 seconds)
2023-02-02 04:05:06 +0100 <EvanR> I feel your pain sm
2023-02-02 04:11:07 +0100td_(~td@i5387093B.versanet.de) (Ping timeout: 252 seconds)
2023-02-02 04:12:07 +0100hounded(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Quit: Leaving)
2023-02-02 04:12:07 +0100hounded_woodstoc(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Quit: Leaving)
2023-02-02 04:13:09 +0100td_(~td@i53870916.versanet.de)
2023-02-02 04:23:30 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2023-02-02 04:29:25 +0100opticblast(~Thunderbi@172.58.80.152)
2023-02-02 04:31:25 +0100codaraxis(~codaraxis@user/codaraxis)
2023-02-02 04:31:50 +0100cheater_(~Username@user/cheater)
2023-02-02 04:34:55 +0100cheater(~Username@user/cheater) (Ping timeout: 248 seconds)
2023-02-02 04:35:05 +0100cheater_cheater
2023-02-02 04:38:22 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-02-02 04:38:22 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 04:38:22 +0100finn_elijaFinnElija
2023-02-02 04:43:13 +0100 <sayola> how come i have never seen example code using FooT
2023-02-02 04:43:36 +0100 <dsal> You'll shoot your eye out.
2023-02-02 04:43:55 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat)
2023-02-02 04:44:07 +0100 <sayola> always
2023-02-02 04:45:19 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:4e8c::)
2023-02-02 05:05:18 +0100danza(~francesco@151.35.37.215) (Read error: Connection reset by peer)
2023-02-02 05:10:32 +0100smwonders if go will outlast the rest
2023-02-02 05:14:17 +0100 <dsal> sm: is gogol not working? I've barely used it before and it seemed OKish.
2023-02-02 05:14:54 +0100 <sm> it's unmaintained and requires aeson < 2, dsal
2023-02-02 05:15:05 +0100 <dsal> Ah, similar problems to amazonka, I guess.
2023-02-02 05:15:20 +0100 <sm> I didn't bother trying allow-newer
2023-02-02 05:15:26 +0100 <dsal> (not that amazonka is not maintained, but, you know)
2023-02-02 05:18:57 +0100varoo(~varoo@117.203.246.41) (Ping timeout: 252 seconds)
2023-02-02 05:19:26 +0100varoo(~varoo@117.203.246.41)
2023-02-02 05:19:50 +0100Sciencentistguy6(~sciencent@hacksoc/ordinary-member)
2023-02-02 05:20:32 +0100danza(~francesco@151.47.100.24)
2023-02-02 05:21:55 +0100Sciencentistguy(~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
2023-02-02 05:21:55 +0100Sciencentistguy6Sciencentistguy
2023-02-02 05:22:05 +0100 <jackdk> amazonka is very close to 2.0 RC 2, but I have to rethink some stuff about how hooks are gonna work
2023-02-02 05:23:01 +0100 <dsal> Is gogol actually getting any work done?
2023-02-02 05:23:21 +0100 <dsal> I can't even remember what I did with it once…
2023-02-02 05:23:27 +0100 <jackdk> not as far as I know. I don't do anything with GCP
2023-02-02 05:23:43 +0100varoo(~varoo@117.203.246.41) (Ping timeout: 252 seconds)
2023-02-02 05:26:08 +0100falafel(~falafel@2607:fb91:1449:aea0:14d8:1ad5:a3d2:34a) (Ping timeout: 248 seconds)
2023-02-02 05:29:04 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-02 05:30:49 +0100freeside(~mengwong@103.252.202.170)
2023-02-02 05:31:00 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-02-02 05:32:13 +0100smhad been using it for a few years to fetch google sheets
2023-02-02 05:34:51 +0100ryanbooker(uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2023-02-02 05:35:29 +0100 <jackdk> I read the question as "is gogol actually getting any work done [on it]?"
2023-02-02 05:36:02 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-02-02 05:36:02 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-02-02 05:36:02 +0100wroathe(~wroathe@user/wroathe)
2023-02-02 05:36:59 +0100 <sm> I wasn't sure
2023-02-02 05:37:16 +0100 <sm> but to that I can answer no based on github commit dates
2023-02-02 05:37:34 +0100 <sm> and issue tracker activity
2023-02-02 05:38:00 +0100 <dsal> Well, like, amazonka's got a bunch of behind the scenes stuff going on.
2023-02-02 05:38:35 +0100 <sm> oh.. gogol's public face might be very out of date ?
2023-02-02 05:38:45 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-02 05:38:59 +0100 <sm> it looked like the maintainer certainly wasn't getting 20% time to maintain it
2023-02-02 05:40:08 +0100freeside(~mengwong@103.252.202.170)
2023-02-02 05:40:42 +0100 <sm> well I correct myself.. github is only 10 months old. It's the hackage release that's old, 2019
2023-02-02 05:44:48 +0100 <sm> I guess my sad experience of software fragility with haskell, which felt related to ghc, could equally well be blamed on limited library support
2023-02-02 05:44:58 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 268 seconds)
2023-02-02 05:46:43 +0100 <sm> it seems a combination of both actually. If ghc versions were more reliable, running old libs would be more feasible. If up to date libs were always available, using latest ghc versions would be feasible.
2023-02-02 05:51:37 +0100razetime(~Thunderbi@117.193.6.240) (Ping timeout: 252 seconds)
2023-02-02 05:53:26 +0100freeside(~mengwong@103.252.202.170)
2023-02-02 05:55:59 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 248 seconds)
2023-02-02 05:58:40 +0100Vajb(~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
2023-02-02 05:59:21 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2023-02-02 06:00:47 +0100opticblast(~Thunderbi@172.58.80.152) (Ping timeout: 248 seconds)
2023-02-02 06:07:00 +0100Lycurgus(~juan@user/Lycurgus)
2023-02-02 06:10:00 +0100 <Inst_> does anyone like to use Writer.CPS here?
2023-02-02 06:10:51 +0100 <Inst_> as far as I understand, writer is more specialized than State, and I got a tolaly weird result wherein State combined with strict data types outperformed significantly a manual loop
2023-02-02 06:13:42 +0100bilegeek(~bilegeek@2600:1008:b092:167b:403a:f9f:bd0e:c295)
2023-02-02 06:18:21 +0100bhall(~brunohall@195.147.207.136) (Ping timeout: 252 seconds)
2023-02-02 06:18:55 +0100bhall(~brunohall@195.147.207.136)
2023-02-02 06:21:57 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
2023-02-02 06:23:30 +0100Vajb(~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
2023-02-02 06:33:27 +0100bilegeek(~bilegeek@2600:1008:b092:167b:403a:f9f:bd0e:c295) (Quit: Leaving)
2023-02-02 06:36:32 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-02-02 06:37:46 +0100razetime(~Thunderbi@117.193.6.240)
2023-02-02 06:38:47 +0100Inst_(~Inst@2601:6c4:4081:54f0:6ca9:ab81:4dc0:f885) (Ping timeout: 255 seconds)
2023-02-02 06:41:22 +0100hammond_(proscan@user/hammond2)
2023-02-02 06:53:13 +0100zmt01(~zmt00@user/zmt00) (Read error: Connection reset by peer)
2023-02-02 06:53:59 +0100zmt01(~zmt00@user/zmt00)
2023-02-02 06:54:58 +0100Inst_(~Inst@2601:6c4:4081:54f0:6ca9:ab81:4dc0:f885)
2023-02-02 06:55:49 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
2023-02-02 06:58:03 +0100trev(~trev@user/trev)
2023-02-02 07:07:16 +0100varoo(~varoo@2401:4900:5d37:b684:a86:fa31:6cc6:f11d)
2023-02-02 07:08:10 +0100Inst__(~Inst@2601:6c4:4081:54f0:6ca9:ab81:4dc0:f885)
2023-02-02 07:09:52 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2023-02-02 07:11:17 +0100Inst_(~Inst@2601:6c4:4081:54f0:6ca9:ab81:4dc0:f885) (Ping timeout: 246 seconds)
2023-02-02 07:11:39 +0100codaraxis(~codaraxis@user/codaraxis) (Ping timeout: 260 seconds)
2023-02-02 07:12:00 +0100varoo(~varoo@2401:4900:5d37:b684:a86:fa31:6cc6:f11d) (Ping timeout: 260 seconds)
2023-02-02 07:13:55 +0100varoo(~varoo@2401:4900:5d39:c4c7:192:23bd:ee78:ec0c)
2023-02-02 07:15:02 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-02-02 07:18:07 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Quit: WeeChat 3.8)
2023-02-02 07:18:45 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-02-02 07:24:00 +0100phma(~phma@host-67-44-208-195.hnremote.net) (Read error: Connection reset by peer)
2023-02-02 07:25:04 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2023-02-02 07:26:15 +0100 <danso> can i get any resources on the origin/motivation for -XNoPatternGuards? i am very interested in why somebody would want guards removed from haskell
2023-02-02 07:27:01 +0100 <int-e> Inst__: Hmm, so that CPS version of writer ensures that the monoid operation is used in a left-associative fashion. Use with care; don't use it with lists.
2023-02-02 07:27:18 +0100 <Inst__> thanks for the warning
2023-02-02 07:27:53 +0100 <Inst__> you could also define custom instances for your record types
2023-02-02 07:28:00 +0100 <Inst__> to overwrite the default <> implementation for lists
2023-02-02 07:31:12 +0100 <int-e> danso: Haskell98 didn't have pattern guards. So historically, PatternGuards is an extension, and GHC has a No* pragma for every extension.
2023-02-02 07:32:13 +0100 <int-e> I, too, would be surprised to see NoPatternGuards actually used anywhere.
2023-02-02 07:37:55 +0100 <Inst__> what is pattern guards again?
2023-02-02 07:38:02 +0100 <Inst__> is it the ability to interleave case with guards?
2023-02-02 07:38:16 +0100 <Inst__> or is it the ability to use let and <- bindings in guards?
2023-02-02 07:38:17 +0100 <jackdk> https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/table.html
2023-02-02 07:38:23 +0100 <danso> thanks, i just learned that pattern guards is not what i believed it was
2023-02-02 07:38:31 +0100 <int-e> > let foo x | (a,b) <- x = a + b in foo (1,2)
2023-02-02 07:38:33 +0100 <lambdabot> 3
2023-02-02 07:38:46 +0100 <int-e> (silly example)
2023-02-02 07:39:20 +0100 <Inst__> oh, so mix of pattern matching and guards is still supported by haskell 98
2023-02-02 07:39:26 +0100falafel(~falafel@2607:fb91:1449:aea0:14d8:1ad5:a3d2:34a)
2023-02-02 07:39:35 +0100 <int-e> it acts like a guard if the pattern match can actually fail.
2023-02-02 07:39:35 +0100 <Inst__> alternative to view patterns, basically
2023-02-02 07:40:31 +0100 <int-e> my favorite abuse of pattern guards is "assignments": foo x | x <- x+2, x <- x*2 = x
2023-02-02 07:41:27 +0100kassouni(~textual@2601:646:400:68b0:f5a4:b4c5:300f:d7b8)
2023-02-02 07:41:32 +0100 <Inst__> cute
2023-02-02 07:41:42 +0100Inst__Inst
2023-02-02 07:46:35 +0100 <danso> is that multiple bindings for x which shadow each other?
2023-02-02 07:46:55 +0100phma(~phma@host-67-44-208-225.hnremote.net)
2023-02-02 07:46:56 +0100 <int-e> yes
2023-02-02 07:47:35 +0100 <danso> if anybody actually does that, their compiler should go on strike
2023-02-02 07:47:55 +0100 <int-e> Well, that would make me very sad.
2023-02-02 07:48:37 +0100michalz(~michalz@185.246.207.201)
2023-02-02 07:49:40 +0100phma(~phma@host-67-44-208-225.hnremote.net) (Read error: Connection reset by peer)
2023-02-02 07:50:22 +0100phma(~phma@2001:5b0:2144:35b8:9ff2:a892:c3ba:7249)
2023-02-02 07:52:41 +0100 <int-e> (There's a tangible benefit to shadowing: you can't accidentally mix up the new (modified) and old values.)
2023-02-02 07:55:01 +0100 <int-e> Though Haskell doesn't make this fool-proof because of `where` clauses.
2023-02-02 07:57:52 +0100kassouni(~textual@2601:646:400:68b0:f5a4:b4c5:300f:d7b8) (Quit: Textual IRC Client: www.textualapp.com)
2023-02-02 07:58:16 +0100kassouni(~kassouni@2601:646:400:68b0:f5a4:b4c5:300f:d7b8)
2023-02-02 07:59:23 +0100kenran(~user@user/kenran)
2023-02-02 08:09:27 +0100danza(~francesco@151.47.100.24) (Ping timeout: 252 seconds)
2023-02-02 08:15:03 +0100ccapndave(~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch)
2023-02-02 08:16:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2023-02-02 08:16:05 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
2023-02-02 08:16:05 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
2023-02-02 08:16:52 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-02 08:17:25 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 08:17:32 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 08:20:01 +0100ccapndave(~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch) (Quit: Textual IRC Client: www.textualapp.com)
2023-02-02 08:23:17 +0100CiaoSen(~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2023-02-02 08:25:27 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-02-02 08:29:19 +0100CiaoSen(~Jura@p200300c9573284002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
2023-02-02 08:29:39 +0100 <jackdk> We have linearity now, not that I've used it for anything seriosu
2023-02-02 08:29:42 +0100 <jackdk> serious*
2023-02-02 08:32:47 +0100falafel(~falafel@2607:fb91:1449:aea0:14d8:1ad5:a3d2:34a) (Ping timeout: 248 seconds)
2023-02-02 08:33:02 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2023-02-02 08:39:38 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-02-02 08:44:30 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2023-02-02 08:48:47 +0100ec_(~ec@gateway/tor-sasl/ec)
2023-02-02 08:51:38 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2023-02-02 08:52:48 +0100chele(~chele@user/chele)
2023-02-02 08:54:34 +0100sidk(~sidk@102.70.0.138)
2023-02-02 08:57:01 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-02-02 08:59:55 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
2023-02-02 09:00:22 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-02-02 09:01:37 +0100 <sidk> Anyone has any experience concurrency testing a servant server? I found https://github.com/barrucadu/dejafu and https://github.com/input-output-hk/io-sim but not sure if they'd work well with Servant
2023-02-02 09:06:46 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 09:09:43 +0100ec(~ec@gateway/tor-sasl/ec)
2023-02-02 09:12:20 +0100ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2023-02-02 09:28:24 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2023-02-02 09:29:07 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 09:29:41 +0100ft(~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving)
2023-02-02 09:33:58 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 09:34:43 +0100epolanski(uid312403@2a03:5180:f:1::4:c453)
2023-02-02 09:36:19 +0100cfricke(~cfricke@user/cfricke)
2023-02-02 09:36:33 +0100sidk(~sidk@102.70.0.138) (Ping timeout: 260 seconds)
2023-02-02 09:36:33 +0100Lycurgus(~juan@user/Lycurgus)
2023-02-02 09:41:48 +0100zeenk(~zeenk@2a02:2f04:a214:1e00::7fe)
2023-02-02 09:50:52 +0100acidjnk_new3(~acidjnk@p200300d6e715c415c5e18632e1ef72b2.dip0.t-ipconnect.de)
2023-02-02 09:55:25 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-02-02 09:56:48 +0100varoo(~varoo@2401:4900:5d39:c4c7:192:23bd:ee78:ec0c) (Read error: Connection reset by peer)
2023-02-02 09:58:58 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-02-02 09:59:03 +0100varoo(~varoo@117.203.246.41)
2023-02-02 10:00:13 +0100shriekingnoise(~shrieking@186.137.175.87) (Ping timeout: 252 seconds)
2023-02-02 10:05:39 +0100sidk(~sidk@102.70.0.138)
2023-02-02 10:07:18 +0100akegalj(~akegalj@78-0-123-122.adsl.net.t-com.hr)
2023-02-02 10:08:03 +0100varoo(~varoo@117.203.246.41) (Ping timeout: 255 seconds)
2023-02-02 10:08:55 +0100varoo(~varoo@2401:4900:5d39:c4c7:192:23bd:ee78:ec0c)
2023-02-02 10:09:20 +0100varoo(~varoo@2401:4900:5d39:c4c7:192:23bd:ee78:ec0c) (Read error: Connection reset by peer)
2023-02-02 10:09:36 +0100merijn(~merijn@195.114.232.94)
2023-02-02 10:09:45 +0100varoo(~varoo@117.203.246.41)
2023-02-02 10:10:05 +0100varoo(~varoo@117.203.246.41) (Read error: Connection reset by peer)
2023-02-02 10:13:44 +0100merijn(~merijn@195.114.232.94) (Ping timeout: 252 seconds)
2023-02-02 10:13:53 +0100sidk(~sidk@102.70.0.138) (Ping timeout: 260 seconds)
2023-02-02 10:14:43 +0100avicenzi(~avicenzi@2a00:ca8:a1f:b004::c32)
2023-02-02 10:19:36 +0100merijn(~merijn@195.114.232.94)
2023-02-02 10:20:44 +0100coot(~coot@213.134.171.3)
2023-02-02 10:22:20 +0100kassouni(~kassouni@2601:646:400:68b0:f5a4:b4c5:300f:d7b8) (Quit: My Mac has gone to sleep. ZZZzzz…)
2023-02-02 10:24:14 +0100kassouni(~kassouni@2601:646:400:68b0:18dc:d2:c373:8213)
2023-02-02 10:26:27 +0100sidk(~sidk@102.70.0.138)
2023-02-02 10:29:24 +0100razetime(~Thunderbi@117.193.6.240) (Ping timeout: 260 seconds)
2023-02-02 10:30:10 +0100razetime(~Thunderbi@117.193.6.240)
2023-02-02 10:30:56 +0100razetime(~Thunderbi@117.193.6.240) (Remote host closed the connection)
2023-02-02 10:31:06 +0100bhall(~brunohall@195.147.207.136) (Ping timeout: 268 seconds)
2023-02-02 10:31:37 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982)
2023-02-02 10:35:45 +0100ubert(~Thunderbi@p200300ecdf13fe8bb79a89b306658b5f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-02-02 10:35:47 +0100ccapndave(~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch)
2023-02-02 10:36:14 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982) (Read error: Connection reset by peer)
2023-02-02 10:36:49 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982)
2023-02-02 10:37:35 +0100ubert(~Thunderbi@p200300ecdf130119a8229ffa4b2489e6.dip0.t-ipconnect.de)
2023-02-02 10:37:44 +0100ccapndave(~ccapndave@xcpe-62-167-164-99.cgn.res.adslplus.ch) (Client Quit)
2023-02-02 10:41:58 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-02-02 10:48:18 +0100sidk(~sidk@102.70.0.138) (Ping timeout: 260 seconds)
2023-02-02 10:50:39 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2023-02-02 10:51:52 +0100bhall(~brunohall@195.147.207.136)
2023-02-02 10:52:54 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2023-02-02 10:59:35 +0100teo(~teo@user/teo)
2023-02-02 11:01:56 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 268 seconds)
2023-02-02 11:03:02 +0100motherfsck(~motherfsc@user/motherfsck)
2023-02-02 11:06:24 +0100oldfashionedcow(Rahul_Sand@user/oldfashionedcow) (Quit: WeeChat 3.8)
2023-02-02 11:08:25 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
2023-02-02 11:09:35 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
2023-02-02 11:12:40 +0100ubert1(~Thunderbi@2a02:8109:abc0:6434:841e:e311:a268:c104)
2023-02-02 11:28:41 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
2023-02-02 11:31:43 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-02 11:38:51 +0100motherfsck(~motherfsc@user/motherfsck)
2023-02-02 11:41:51 +0100mastarija(~mastarija@2a05:4f46:e03:6000:c226:21cc:7cd8:a29e)
2023-02-02 11:44:53 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2023-02-02 11:45:10 +0100img(~img@user/img)
2023-02-02 11:48:11 +0100akegalj(~akegalj@78-0-123-122.adsl.net.t-com.hr) (Quit: leaving)
2023-02-02 11:51:12 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
2023-02-02 11:53:22 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-02-02 11:59:11 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2023-02-02 12:02:09 +0100 <albet70> why data T = a -> a is wrong?
2023-02-02 12:03:17 +0100 <tomsmeding> albet70: needs a data constructor name
2023-02-02 12:03:26 +0100 <tomsmeding> and also, 'a' is out of scope
2023-02-02 12:03:31 +0100 <tomsmeding> data T a = MakeT (a -> a)
2023-02-02 12:03:53 +0100 <tomsmeding> alternatively, if you wanted a type synonym: type T a = a -> a
2023-02-02 12:04:56 +0100 <albet70> data Task = F | E | T Task Task, I want T Task Task = Task -> Task
2023-02-02 12:05:20 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-02-02 12:05:39 +0100 <tomsmeding> data Task = F | E | T (Task -> Task)
2023-02-02 12:05:39 +0100 <tomsmeding> ?
2023-02-02 12:05:48 +0100 <albet70> yes
2023-02-02 12:08:47 +0100gurkenglas(~gurkengla@dynamic-046-114-176-054.46.114.pool.telefonica.de)
2023-02-02 12:08:51 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2023-02-02 12:10:03 +0100xff0x(~xff0x@2405:6580:b080:900:195f:ac6f:f6a2:3431)
2023-02-02 12:19:53 +0100mei(~mei@user/mei) (Quit: mei)
2023-02-02 12:21:47 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
2023-02-02 12:22:31 +0100mei(~mei@user/mei)
2023-02-02 12:22:59 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-02 12:27:14 +0100gurkenglas(~gurkengla@dynamic-046-114-176-054.46.114.pool.telefonica.de) (Ping timeout: 260 seconds)
2023-02-02 12:28:59 +0100emmanuelux(~emmanuelu@user/emmanuelux) (Ping timeout: 264 seconds)
2023-02-02 12:30:59 +0100motherfsck(~motherfsc@user/motherfsck)
2023-02-02 12:36:58 +0100coot(~coot@213.134.171.3) (Quit: coot)
2023-02-02 12:38:20 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 255 seconds)
2023-02-02 12:39:43 +0100mei(~mei@user/mei) (Quit: mei)
2023-02-02 12:41:13 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 268 seconds)
2023-02-02 12:42:06 +0100Xeroine(~Xeroine@user/xeroine)
2023-02-02 12:45:29 +0100mei(~mei@user/mei)
2023-02-02 12:46:03 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571)
2023-02-02 12:49:18 +0100underlap(~underlap@229.171.115.87.dyn.plus.net)
2023-02-02 12:51:32 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571) (Quit: Leaving)
2023-02-02 12:51:49 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571)
2023-02-02 12:53:00 +0100 <underlap> I'm trying to understand the output of the GHCi `:show bindings` command. If I define a function (e.g. `let f = head`), then its binding is printed as `f :: [a] -> a = _`. Clearly, the first part of this is the name of the binding and its type, but I'm wondering what `= _` means and in what circumstances it might be something else.
2023-02-02 12:54:18 +0100cheater_(~Username@user/cheater)
2023-02-02 12:56:13 +0100cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2023-02-02 12:56:14 +0100cheater_cheater
2023-02-02 12:56:51 +0100 <dminuoso> underlap: I suspect it uses `_` when no Show instance exists.
2023-02-02 12:59:16 +0100 <underlap> dminuoso: Yes, I think you're right. I tried `let z = 1 :: Int` and its binding showed as `z :: Int = 1`. Thanks!
2023-02-02 12:59:37 +0100 <int-e> It seems closer to :print, it only shows values that were already evaluated. So after `let f :: [Int]; f = [1..]` it prints `f :: [Int] = _`, but after `take 3 f` it says `f :: [Int] = 1 : 2 : 3 : _`
2023-02-02 13:00:03 +0100 <dminuoso> int-e: Maybe a mixture of both.
2023-02-02 13:00:28 +0100 <int-e> maybe.
2023-02-02 13:00:59 +0100mei(~mei@user/mei) (Quit: mei)
2023-02-02 13:01:21 +0100 <int-e> data F = F; f = F; f `seq` (); :show bindings --> f :: F = <F>
2023-02-02 13:01:31 +0100mei(~mei@user/mei)
2023-02-02 13:01:33 +0100 <int-e> fun.
2023-02-02 13:02:39 +0100 <underlap> Fun indeed! :-)
2023-02-02 13:06:40 +0100rendar(~Paxman@user/rendar)
2023-02-02 13:06:52 +0100 <rendar> haskell has libraries for useful combination mechanisms, for instance?
2023-02-02 13:12:46 +0100 <Joao003> hmmm
2023-02-02 13:12:49 +0100 <Joao003> a = 0
2023-02-02 13:12:54 +0100 <Joao003> :show bindings
2023-02-02 13:13:33 +0100 <Joao003> it output a :: Num a => a = _
2023-02-02 13:13:58 +0100 <merijn> Joao003: Because Num a isn't guaranteed to be an instance of Show
2023-02-02 13:14:10 +0100 <Joao003> yeah
2023-02-02 13:14:41 +0100 <Joao003> tried a = 0 :: Int
2023-02-02 13:14:49 +0100 <Joao003> and it output a :: Int = 0
2023-02-02 13:16:23 +0100 <Joao003> so it's like name :: type = (show name if type is instance of Show else _)
2023-02-02 13:18:21 +0100 <Joao003> i found a way to implement map with folds
2023-02-02 13:19:21 +0100 <Joao003> map f = foldl (\acc x -> [f x : acc]) []
2023-02-02 13:20:10 +0100 <Joao003> oh ok its flipped
2023-02-02 13:20:20 +0100 <Joao003> map f = foldl (\x acc -> [f x : acc]) []
2023-02-02 13:20:42 +0100 <Joao003> wait what no???
2023-02-02 13:20:46 +0100 <int-e> just f x : acc
2023-02-02 13:21:02 +0100 <Joao003> oh i forgor
2023-02-02 13:21:04 +0100 <int-e> (I happily forgot which language used those square brackets.)
2023-02-02 13:24:07 +0100 <Joao003> i did it but now my array is reversed
2023-02-02 13:24:31 +0100 <Joao003> i will use foldr then
2023-02-02 13:24:40 +0100 <jackdk> http://data.tmorris.net/talks/list-folds/b30aa0fdff296c731bc5b1c824adf1d02b3b69d9/list-folds.pdf
2023-02-02 13:25:18 +0100 <jackdk> very useful for building a working intuition of what the folds mean. selecting which fold to use to implement map becomes much easier when you have that
2023-02-02 13:25:50 +0100 <Joao003> my implementation of map:
2023-02-02 13:26:04 +0100 <Joao003> map f = foldr (\x -> (f x :)) []
2023-02-02 13:26:37 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
2023-02-02 13:26:38 +0100 <Joao003> and it actually makes a smiley
2023-02-02 13:26:50 +0100 <tomsmeding> :t \f -> foldr ((:) . f) []
2023-02-02 13:26:51 +0100 <lambdabot> Foldable t => (a1 -> a2) -> t a1 -> [a2]
2023-02-02 13:27:03 +0100 <tomsmeding> double smiley
2023-02-02 13:27:09 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-02 13:27:34 +0100 <jackdk> yes, and because foldr performs constructor replacement (see linked pdf), it is clear that replacing `:` with `(:) . f` (and `[]` with `[]`) will perform the mapping
2023-02-02 13:28:10 +0100motherfsck(~motherfsc@user/motherfsck)
2023-02-02 13:28:16 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-02 13:29:26 +0100 <underlap> I was told you can build anything out of folds. I wonder...
2023-02-02 13:30:34 +0100 <Joao003> it makes sense that foldl is (a -> [b] -> [b]) -> [b] -> [a] -> [b]
2023-02-02 13:30:50 +0100kassouni(~kassouni@2601:646:400:68b0:18dc:d2:c373:8213) (Quit: My Mac has gone to sleep. ZZZzzz…)
2023-02-02 13:30:55 +0100 <Joao003> im wrong lol
2023-02-02 13:31:18 +0100 <Joao003> i went too far into that map
2023-02-02 13:31:47 +0100 <Joao003> the function that foldr takes is flipped from foldl
2023-02-02 13:33:13 +0100 <merijn> underlap: https://www.cs.nott.ac.uk/~pszgmh/fold.pdf
2023-02-02 13:33:34 +0100underlap(~underlap@229.171.115.87.dyn.plus.net) (Quit: Client closed)
2023-02-02 13:37:18 +0100sympt(~sympt@user/sympt) (Ping timeout: 265 seconds)
2023-02-02 13:38:45 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 265 seconds)
2023-02-02 13:38:54 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-02-02 13:40:09 +0100underlap(~underlap@229.171.115.87.dyn.plus.net)
2023-02-02 13:41:23 +0100 <underlap> merijn: Yes, that's the one! Thanks.
2023-02-02 13:45:01 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
2023-02-02 13:50:21 +0100gensyst(gensyst@user/gensyst)
2023-02-02 13:50:50 +0100 <gensyst> Does NamedFieldPuns {foo} mean {foo = foo} ? I guess it does. Is there something similar for doing {foo = !foo} ?
2023-02-02 13:50:57 +0100 <gensyst> to get it strict
2023-02-02 13:53:07 +0100 <merijn> gensyst: Yes to the first one, I dunno to the second :p
2023-02-02 13:57:18 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2023-02-02 14:00:49 +0100motherfsck(~motherfsc@user/motherfsck)
2023-02-02 14:03:38 +0100david_(~david@37.171.241.82)
2023-02-02 14:03:45 +0100 <david_> Hello :wave:
2023-02-02 14:04:12 +0100 <david_> I have a basic question because I want to be able to share some code in a folder with other folder
2023-02-02 14:04:34 +0100 <eldritchcookie[4> hello i am considering making a library similar to HaTeX for ConTeXt instead of LaTeX and i would like for it to be impossible to generate invalid markup however in ConTeX it is common to use custom defined commands is there a way to force the usage of a custom command to be only possible after its definition?
2023-02-02 14:04:40 +0100 <eldritchcookie[4> hello david use modules
2023-02-02 14:04:42 +0100 <david_> let say I have a program in folderA/folderB/myProgram.hs
2023-02-02 14:05:00 +0100 <david_> And i I want to use code from folderX/folderY/lib.hs
2023-02-02 14:05:07 +0100 <david_> How can I do that exactly?
2023-02-02 14:05:36 +0100 <merijn> david_: How are you building your code atm?
2023-02-02 14:05:50 +0100 <david_> I'm just cd folderA/folderB/ and ghc myProgram.hs
2023-02-02 14:06:13 +0100 <eldritchcookie[4> use cabal or stack
2023-02-02 14:06:14 +0100 <eldritchcookie[4> https://cabal.readthedocs.io/en/stable/getting-started.html
2023-02-02 14:06:19 +0100 <merijn> ok, so first of all, you will probably wanna start using cabal to build stuff
2023-02-02 14:06:29 +0100 <david_> mmh I was hoping avoiding using a package manager at all.
2023-02-02 14:06:32 +0100 <david_> but ok
2023-02-02 14:06:45 +0100 <merijn> david_: Realistically, that's not possible
2023-02-02 14:07:03 +0100 <merijn> In theory you could, but it will suck and nobody's gonna be able to help you, because no one really works like that
2023-02-02 14:07:17 +0100 <merijn> david_: Why do you wanna avoid cabal?
2023-02-02 14:07:19 +0100 <david_> now next question: should I do a stack project at the root of my folder or should I do a stack project for the lib.hs or should I do a stack project for every folder ?
2023-02-02 14:07:47 +0100 <david_> Just want to keep it as simple as possible
2023-02-02 14:08:14 +0100 <Joao003> simple: have a copy of the program in both folders, and update it accordingly
2023-02-02 14:08:32 +0100 <eldritchcookie[4> that is a horrendously bad idea
2023-02-02 14:08:38 +0100 <david_> yeah :)
2023-02-02 14:08:40 +0100__monty__(~toonn@user/toonn)
2023-02-02 14:08:49 +0100 <david_> _horrendously_
2023-02-02 14:08:54 +0100Guest22(~Guest22@136.142.159.49)
2023-02-02 14:09:06 +0100Guest22(~Guest22@136.142.159.49) ()
2023-02-02 14:09:07 +0100 <merijn> david_: I don't know the best approach for stack. But for cabal, you can just run "cabal init" in your library and program folders to set things up. Cabal also has a notion of project files for depending on projects in other local directories
2023-02-02 14:10:00 +0100 <merijn> I'm pretty sure stack has a similar kinda dealio
2023-02-02 14:10:42 +0100 <eldritchcookie[4> depends on how you setup things but there are some different concepts to understand you have packages, which may contain libraries and executables those can contain modules
2023-02-02 14:11:00 +0100 <david_> yeah, the main quirk I have at this point is that I have many many executables that will reuse the same common code.
2023-02-02 14:11:02 +0100 <eldritchcookie[4> if you package depend on each other they should be in the same project
2023-02-02 14:11:28 +0100 <merijn> david_: Cabal packages can have multiple executables depending on a library defined in the same package, though :)
2023-02-02 14:11:31 +0100 <eldritchcookie[4> if you have many executable do one package with one library and many executable that will be the easiest
2023-02-02 14:11:50 +0100 <merijn> david_: So you coud just have a package with a library of common code and multiple executables using that same library
2023-02-02 14:13:04 +0100biberu(~biberu@user/biberu) (Ping timeout: 248 seconds)
2023-02-02 14:14:26 +0100underlap(~underlap@229.171.115.87.dyn.plus.net) (Quit: Client closed)
2023-02-02 14:14:28 +0100 <david_> yeah, wondering if I will need a cabal file for each one of the executables
2023-02-02 14:14:41 +0100 <eldritchcookie[4> no one cabal file per package
2023-02-02 14:15:07 +0100 <eldritchcookie[4> in that one you do executable x1 ...
2023-02-02 14:15:07 +0100 <eldritchcookie[4> executable x2 ... etc
2023-02-02 14:15:28 +0100 <eldritchcookie[4> the cabal guide explains everything clearly https://cabal.readthedocs.io/en/stable/concepts-and-development.html
2023-02-02 14:16:01 +0100 <eldritchcookie[4> trust me way better than one eldritch cookie helping you
2023-02-02 14:18:25 +0100 <david_> ok, thank you, it can be a bit arcane somehow, so help from experienced users is definitely something in this case :)
2023-02-02 14:19:01 +0100 <david_> I have a short question, can you eventually have a single entrypoint and load some code dynamically in haskell?
2023-02-02 14:19:53 +0100 <eldritchcookie[4> you mean single executable that executes one of the actions?
2023-02-02 14:21:18 +0100 <eldritchcookie[4> if so that is easy just use https://hackage.haskell.org/package/optparse-applicative
2023-02-02 14:22:16 +0100 <eldritchcookie[4> or do you mean like an interpreter? in that case use hint or the gch api
2023-02-02 14:22:26 +0100 <eldritchcookie[4> https://hackage.haskell.org/package/hint
2023-02-02 14:22:44 +0100 <david_> ok, thank you. It might be more adapted to have a single entry point and call a specific function according to this arguments
2023-02-02 14:23:56 +0100trev(~trev@user/trev) (Remote host closed the connection)
2023-02-02 14:24:25 +0100bhall(~brunohall@195.147.207.136) (Read error: Connection reset by peer)
2023-02-02 14:24:48 +0100bhall(~brunohall@138.199.22.101)
2023-02-02 14:28:03 +0100 <[Leary]> eldritchcookie[4: It sounds like the problem you're trying to solve is equivalent to that of representing binders (such as in the lambda calculus) in data types, without allowing free variables. The usual "nominal" representation won't work, at least not without singletons level type magic. A HOAS, or better, PHOAS approach might suffice. This article <https://www.schoolofhaskell.com/user/edwardk/phoas> is good reading, though you might need to brows
2023-02-02 14:28:03 +0100 <[Leary]> e related articles or papers for a bit of context.
2023-02-02 14:29:57 +0100 <eldritchcookie[4> thanks [Leary] i had no clue how to even begin solving my problem
2023-02-02 14:32:50 +0100mechap1(~mechap@user/mechap) (Ping timeout: 268 seconds)
2023-02-02 14:34:22 +0100mechap1(~mechap@user/mechap)
2023-02-02 14:35:15 +0100danza(~francesco@151.44.144.40)
2023-02-02 14:35:19 +0100 <eldritchcookie[4> are there some papers or sources which would help explain Higher Order Abstract Syntax? i really understood nothing of the article
2023-02-02 14:35:39 +0100 <[exa]> eldritchcookie[4: how big subset of tex are you targeting?
2023-02-02 14:38:20 +0100Feuermagier_(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2023-02-02 14:38:25 +0100 <[exa]> anyway the HOAS paper is this one https://www.cs.cmu.edu/~fp/papers/pldi88.pdf
2023-02-02 14:38:59 +0100Feuermagier_(~Feuermagi@user/feuermagier)
2023-02-02 14:40:11 +0100 <eldritchcookie[4> the most common things itemize, sections, descriptions and tables
2023-02-02 14:41:07 +0100 <[exa]> btw a pretty good material on representing languages is this one https://serokell.io/blog/introduction-tagless-final -- it gives the overview of taggedness vs finalness
2023-02-02 14:41:46 +0100 <eldritchcookie[4> thanks
2023-02-02 14:41:58 +0100mimi1vx[m](~osukupmat@2001:470:69fc:105::2:418d)
2023-02-02 14:42:00 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2023-02-02 14:43:10 +0100 <eldritchcookie[4> i really love haskell none of the other languages i used made me read a scientific paper
2023-02-02 14:43:38 +0100 <[exa]> you can technically parse out argument numbers and syntaxes out of \newcommand-style definitions, which should give you a quite reasonable coverage even for custom commands (at least pandoc-style)
2023-02-02 14:44:26 +0100 <[exa]> OTOH honestly, tex is wild and this probably won't work for many other "normal" packages, especially the ones that mess with the token processor functionality
2023-02-02 14:44:37 +0100 <[exa]> i.e., verbatim
2023-02-02 14:45:10 +0100tomku(~tomku@user/tomku) (Ping timeout: 268 seconds)
2023-02-02 14:46:12 +0100thongpv(~thongpv87@14.179.159.25) (Remote host closed the connection)
2023-02-02 14:46:16 +0100 <eldritchcookie[4> yeah tex is wild but context is really consistent, i bet i still will need to read about luatex internals but one can hope
2023-02-02 14:46:38 +0100thongpv(~thongpv87@14.179.159.25)
2023-02-02 14:46:48 +0100tomku(~tomku@user/tomku)
2023-02-02 14:47:05 +0100mmhat(~mmh@p200300f1c707be27ee086bfffe095315.dip0.t-ipconnect.de)
2023-02-02 14:50:55 +0100david_(~david@37.171.241.82) (Ping timeout: 248 seconds)
2023-02-02 14:51:38 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-02 14:51:50 +0100 <[exa]> luatex is wild as well... here you want the view of tex as a markup, which is common, but it's insufficient for many purposes as the only semantics of tex is the interpretation by expansion and shipout
2023-02-02 14:52:37 +0100Lycurgus(~juan@user/Lycurgus)
2023-02-02 14:52:47 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-02 14:55:01 +0100cheater_(~Username@user/cheater)
2023-02-02 14:57:47 +0100cheater(~Username@user/cheater) (Ping timeout: 264 seconds)
2023-02-02 14:57:47 +0100cheater_cheater
2023-02-02 14:57:53 +0100 <merijn> [exa]: Thank god LaTeX 3 is somewhat more sane
2023-02-02 14:58:31 +0100 <[exa]> merijn: is it though
2023-02-02 14:59:35 +0100 <merijn> [exa]: Yes, in that it has a single, consistent, well documented format for specifying how to parse arguments over newcommand and custom \makeatletter pain
2023-02-02 14:59:49 +0100 <geekosaur> "somewhat"… and relative to TeX
2023-02-02 15:00:57 +0100 <merijn> I can actually write non-trivial stuff using latex 3, that's more than I can say about latex 2e :p
2023-02-02 15:01:25 +0100mmhat(~mmh@p200300f1c707be27ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8)
2023-02-02 15:03:19 +0100 <[exa]> but wait latex3 is still build upon the tex base, right?
2023-02-02 15:04:34 +0100Henson(~kvirc@207.136.101.195)
2023-02-02 15:07:12 +0100 <merijn> [exa]: latex was always just a set of TeX macros, yes
2023-02-02 15:07:56 +0100 <merijn> latex3 just offers replacements for a lot of the newcommand/newenvironment stuff to be more consistent and easier to write more complicated things with
2023-02-02 15:08:30 +0100 <merijn> [exa]: Like the ability to sensibly deal with verbatim arguments, default arguments, etc.
2023-02-02 15:09:44 +0100 <[exa]> ah man, people didn't get it
2023-02-02 15:10:03 +0100 <[exa]> the mantra of latex is "if it's hard to do in latex, you shouldn't do it"
2023-02-02 15:10:18 +0100 <merijn> [exa]: Lots of sensible things are hard to do in latex >.>
2023-02-02 15:10:50 +0100 <Henson> my company's looking to hire a Haskell developer, and I was wondering if anybody has any advice on where to look or other considerations? I think I asked this a year or two ago and people said just post on Indeed and other regular job sites, offer decent pay, and don't expect to find somebody who is close to your office.
2023-02-02 15:11:09 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-02 15:11:24 +0100 <Henson> I often hear non-haskell people say, "it's hard to find Haskell developers", but is that true?
2023-02-02 15:11:56 +0100 <Henson> merijn: I'll second that!
2023-02-02 15:12:01 +0100 <[exa]> Henson: there has been some advice around on how (not) to post job ads on HN
2023-02-02 15:12:19 +0100 <merijn> Henson: "It Depends (TM)"
2023-02-02 15:12:28 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-02 15:12:31 +0100 <Henson> [exa]: what's HN?
2023-02-02 15:12:44 +0100 <merijn> Hacker News
2023-02-02 15:13:16 +0100 <Henson> merijn: I think in the past people told me that Haskell developers are often more experienced developers, so you won't find Haskell developers willing to work for minimum wage.
2023-02-02 15:13:35 +0100 <merijn> Henson: Some tips on "where" are: the Haskell Weekly Newsletter offers for pay job listings, the /r/haskell reddit and haskell-cafe mailing list, here, there's also haskellers.com
2023-02-02 15:15:01 +0100 <merijn> Henson: That is probably true. There's probably not a lot of medior/experienced juniors around (compared to python, java, c#). So your options are basically "super experienced (but those want high pay and may be unwilling to move)" or "inexperienced juniors"
2023-02-02 15:15:42 +0100 <Henson> merijn: are common job posting sites also likely to be fruitful for finding candidates?
2023-02-02 15:16:53 +0100biberu(~biberu@user/biberu)
2023-02-02 15:17:16 +0100 <merijn> "maybe"
2023-02-02 15:17:24 +0100 <__monty__> Henson: The whole "Haskell devs are more experienced," is usually the catch. If you're looking for "Haskell" devs as a cryptic way of saying experienced without implying high pay then you'll have a hard time finding anyone. If you're really just looking for people willing to write Haskell, no matter their experience, then it should be possible but it'll probably involve some training. Basically the
2023-02-02 15:17:30 +0100 <__monty__> same thing merijn's saying.
2023-02-02 15:18:37 +0100asthasr(~asthasr@208.80.78.154)
2023-02-02 15:18:41 +0100 <[exa]> Henson: also just smash it in #-offtopic, I recall there were people who were seeking jobs there. :D
2023-02-02 15:19:14 +0100 <merijn> tbh, Haskell job openings are solidly "on topic" materials if not being spammed
2023-02-02 15:20:19 +0100 <Henson> no, I'm just looking for somebody who knows Haskell. Even if they're not really experienced, just knowing the FP mindset, how to code in Haskell, how to use Monads and transformers, laziness, etc. without them taking a year to learn it would be great. They'd be working on an existing codebase that would give them structure to work with.
2023-02-02 15:20:42 +0100 <Henson> merijn: can you rephrase what you just said?
2023-02-02 15:21:07 +0100 <merijn> Henson: which part? :p
2023-02-02 15:21:51 +0100 <Henson> merijn: the "Haskell job openings are solidly "on topic" materials if not being spammed"
2023-02-02 15:22:45 +0100 <merijn> Henson: [exa]: Was implying job openings could be posted in #haskell-offtopic. I was just saying that announcing you have an opening would be "on topic" for Haskell, as long as it's nog being spammed every hour or something :)
2023-02-02 15:23:49 +0100 <Henson> merijn: ahhhhh, ok, now I understand.
2023-02-02 15:24:24 +0100 <Henson> merijn: it was the IRC chat context of the sentence I was missing.
2023-02-02 15:24:58 +0100 <geekosaur> I'd be fine with it repeated every 8 hours or so, given that not everyone lives in the same timezone
2023-02-02 15:26:00 +0100 <geekosaur> although at that point there might be better venues such as cafe or maybe the discourse
2023-02-02 15:26:37 +0100 <merijn> Maybe I should check out the discourse thingy at some point...so far it feels to newfangled and zoomer for me :p
2023-02-02 15:26:55 +0100Hensonchuckles
2023-02-02 15:27:02 +0100 <geekosaur> enh, it's close enough to the online forums of the 90s
2023-02-02 15:29:24 +0100 <darkling> Sounds horrible. :)
2023-02-02 15:31:06 +0100 <Henson> thanks for the advice everybody, I appreciate it!
2023-02-02 15:31:12 +0100jushur(~human@user/jushur) (Quit: ¯\_(ツ)_/¯)
2023-02-02 15:32:09 +0100GoldsteinQ(~goldstein@goldstein.rs) (Quit: ZNC 1.8.2 - https://znc.in)
2023-02-02 15:32:47 +0100GoldsteinQ(~goldstein@goldstein.rs)
2023-02-02 15:35:15 +0100 <merijn> geekosaur: I doubt there's enough inline HTML shenanigans for that
2023-02-02 15:35:42 +0100 <geekosaur> 🙂
2023-02-02 15:37:23 +0100slack1256(~slack1256@186.11.59.217)
2023-02-02 15:38:49 +0100ddellacosta(~ddellacos@146.70.166.234) (Ping timeout: 268 seconds)
2023-02-02 15:39:15 +0100 <geekosaur> or <marquee>
2023-02-02 15:44:38 +0100 <merijn> Flaming text!
2023-02-02 15:45:06 +0100 <darkling> You have to have an "under construction" animated GIF in there somewhere, too.
2023-02-02 15:45:59 +0100 <gensyst> We need a StrictNamedFieldPuns so we can do { !foo }, equivalent to {foo = !foo}
2023-02-02 15:47:16 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982) (Ping timeout: 252 seconds)
2023-02-02 15:47:56 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-02-02 15:52:34 +0100jero98772(~jero98772@2800:484:1d80:d8ce:9815:cfda:3661:17bb)
2023-02-02 15:55:54 +0100razetime(~Thunderbi@117.193.6.240)
2023-02-02 16:03:30 +0100malte(~malte@mal.tc) (Remote host closed the connection)
2023-02-02 16:03:44 +0100 <merijn> Man, the ease with which you can browse docs for old versions on Hackage is so nice...
2023-02-02 16:04:35 +0100malte(~malte@mal.tc)
2023-02-02 16:05:22 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571) (Quit: Leaving)
2023-02-02 16:07:39 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-02-02 16:09:25 +0100malte(~malte@mal.tc) (Remote host closed the connection)
2023-02-02 16:09:44 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2023-02-02 16:13:27 +0100 <gensyst> merijn, what do you mean?
2023-02-02 16:13:37 +0100 <gensyst> and compared to what?
2023-02-02 16:18:27 +0100oldfashionedcow(Rahul_Sand@user/oldfashionedcow)
2023-02-02 16:20:18 +0100ddellacosta(~ddellacos@146.70.166.170)
2023-02-02 16:21:36 +0100 <sm> versioned docs are good 👍🏻
2023-02-02 16:25:16 +0100curious-user(~user@user/curious-user)
2023-02-02 16:27:05 +0100 <cheater> Henson: are you there?
2023-02-02 16:28:02 +0100shriekingnoise(~shrieking@186.137.175.87)
2023-02-02 16:29:09 +0100 <merijn> gensyst: This thought triggered by me trying to browse documentation for old versions of a python library and being completely unable to find them
2023-02-02 16:30:56 +0100 <Henson> cheater: yes, I'm still here
2023-02-02 16:33:37 +0100 <gensyst> merijn, ok i see
2023-02-02 16:37:25 +0100Sgeo(~Sgeo@user/sgeo)
2023-02-02 16:38:42 +0100dsrt^(~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
2023-02-02 16:39:48 +0100 <mauke> merijn: I think it's still kind of clumsy compared to CPAN
2023-02-02 16:42:57 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-02 16:43:05 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-02 16:46:13 +0100malte(~malte@mal.tc)
2023-02-02 16:47:34 +0100shapr(~user@68.54.166.125)
2023-02-02 16:47:38 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 16:50:28 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982)
2023-02-02 16:52:41 +0100mechap1mechap
2023-02-02 16:52:51 +0100curious-user(~user@user/curious-user) (Quit: WeeChat 3.8)
2023-02-02 16:55:54 +0100AlexZenon(~alzenon@178.34.160.79) (Ping timeout: 268 seconds)
2023-02-02 16:57:08 +0100Alex_test(~al_test@178.34.160.79) (Ping timeout: 268 seconds)
2023-02-02 16:59:42 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2023-02-02 17:00:10 +0100Alex_test(~al_test@178.34.160.79)
2023-02-02 17:01:00 +0100AlexZenon(~alzenon@178.34.160.79)
2023-02-02 17:03:35 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-02-02 17:03:36 +0100danza(~francesco@151.44.144.40) (Read error: Connection reset by peer)
2023-02-02 17:03:39 +0100yrlnry(~yrlnry@pool-108-36-173-41.phlapa.fios.verizon.net) (Read error: Connection reset by peer)
2023-02-02 17:04:11 +0100bhall(~brunohall@138.199.22.101) (Ping timeout: 260 seconds)
2023-02-02 17:04:13 +0100yrlnry(~yrlnry@2600:4040:738e:5400:87d:f2d:382e:ac3d)
2023-02-02 17:05:28 +0100mechap(~mechap@user/mechap) (Quit: WeeChat 3.8)
2023-02-02 17:05:52 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2023-02-02 17:06:04 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 17:07:48 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-02 17:09:21 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2023-02-02 17:09:29 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 17:09:55 +0100malte(~malte@mal.tc) (Remote host closed the connection)
2023-02-02 17:10:53 +0100malte(~malte@mal.tc)
2023-02-02 17:10:55 +0100mechap(~mechap@user/mechap)
2023-02-02 17:10:55 +0100mechap(~mechap@user/mechap) (Client Quit)
2023-02-02 17:11:18 +0100mechap(~mechap@user/mechap)
2023-02-02 17:11:56 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2023-02-02 17:12:26 +0100hounded(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
2023-02-02 17:12:47 +0100hounded_woodstoc(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
2023-02-02 17:16:08 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-02-02 17:17:59 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-02 17:18:54 +0100codaraxis(~codaraxis@user/codaraxis)
2023-02-02 17:20:33 +0100danza(~francesco@151.47.240.93)
2023-02-02 17:22:13 +0100qhong(~qhong@rescomp-21-400677.stanford.edu)
2023-02-02 17:22:42 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 17:25:04 +0100qhong_(~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 248 seconds)
2023-02-02 17:25:12 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2023-02-02 17:25:46 +0100troydm(~troydm@user/troydm)
2023-02-02 17:25:53 +0100Lobel(~Lobel@193.198.16.217)
2023-02-02 17:26:03 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 17:27:30 +0100Lobel(~Lobel@193.198.16.217) (Remote host closed the connection)
2023-02-02 17:30:30 +0100Guest75(~Guest75@178.141.149.12) (Quit: Client closed)
2023-02-02 17:30:45 +0100Guest75(~Guest75@178.141.149.12)
2023-02-02 17:32:45 +0100 <Guest75> Hello. When using cata recustion scheme (catamorphism), may I make my F-algebra a different type, namely a monad, i.e. not just f a -> a, but, say, f a -> Maybe a? Is there any other rec. scheme for such case?
2023-02-02 17:33:58 +0100freeside(~mengwong@103.252.202.170)
2023-02-02 17:37:24 +0100merijn(~merijn@195.114.232.94) (Ping timeout: 252 seconds)
2023-02-02 17:42:35 +0100bhall(~brunohall@138.199.22.101)
2023-02-02 17:44:23 +0100 <ncf> Guest75: https://hackage.haskell.org/package/data-fix-0.3.2/docs/Data-Fix.html#v:foldFixM ?
2023-02-02 17:44:25 +0100 <[exa]> Guest75: IIRC there were specialized versions of the schemes for that
2023-02-02 17:44:29 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571)
2023-02-02 17:44:54 +0100gensystt(gensyst@user/gensyst)
2023-02-02 17:44:57 +0100 <Guest75> cool. thanks!
2023-02-02 17:45:25 +0100 <ncf> also https://github.com/recursion-schemes/recursion-schemes/issues/3#issuecomment-229367877
2023-02-02 17:47:43 +0100gensyst(gensyst@user/gensyst) (Ping timeout: 252 seconds)
2023-02-02 17:49:34 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2023-02-02 17:50:01 +0100 <Square> If you should attend one Haskell conference, which one should it be?
2023-02-02 17:52:07 +0100 <[exa]> ICFP-associated workshops are a kinda traditional venue, and some of the zurihac-style events are really cool too
2023-02-02 17:52:40 +0100 <[exa]> (there was something in München this year but I forgot the name)
2023-02-02 17:53:14 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-02 17:57:38 +0100 <cheater> go to icfp
2023-02-02 17:58:25 +0100 <monochrom> Haskell Love is a better fit the description "Haskell conference".
2023-02-02 17:58:35 +0100 <monochrom> s/fit/fit to/
2023-02-02 17:58:45 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733)
2023-02-02 18:03:14 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733) (Ping timeout: 255 seconds)
2023-02-02 18:09:00 +0100 <Joao003> what is this s/ thingy
2023-02-02 18:09:18 +0100 <Rembane> Joao003: sed syntax for replacing stuff
2023-02-02 18:09:26 +0100 <Rembane> Joao003: s/replace this/with this/
2023-02-02 18:09:41 +0100 <Joao003> what is sed
2023-02-02 18:10:12 +0100 <yushyin> sed - stream editor for filtering and transforming text (cli regex tool)
2023-02-02 18:10:15 +0100 <Rembane> An ancient UNIX tool, it's still very useful
2023-02-02 18:11:23 +0100danza(~francesco@151.47.240.93) (Ping timeout: 246 seconds)
2023-02-02 18:11:45 +0100 <darkling> The first time I got my hands on a Linux box, I couldn't find an editor, but I knew about "man" and "sed", and configured the entire machine (including writing an XF86config file) with just sed. :)
2023-02-02 18:11:56 +0100 <Rembane> Lovely!
2023-02-02 18:12:55 +0100 <darkling> The machine was, unfortunately, so cramped on RAM that X was unusable, even with twm. It took about 5 minutes of swapping just to draw the root menu... :)
2023-02-02 18:13:08 +0100 <yushyin> darkling: you seem to like to torture yourself
2023-02-02 18:13:54 +0100 <monochrom> Or s/tortue/challenge/
2023-02-02 18:14:19 +0100 <[exa]> I guess you guys saw this already but it's a good time to just put it here: https://aurelio.net/projects/sedarkanoid/arkanoid.sed.html
2023-02-02 18:14:21 +0100 <monochrom> Now build a PC emulator on top of one of those Lego Turing machines and repeat the experiment >:)
2023-02-02 18:14:27 +0100 <darkling> It was a 25 MHz ARM3 with 8 MiB of RAM and a 243 MiB hard disk.
2023-02-02 18:15:00 +0100 <Joao003> Wait those 3 slashes make me remember of that /// esolang
2023-02-02 18:17:28 +0100Guest75(~Guest75@178.141.149.12) (Ping timeout: 260 seconds)
2023-02-02 18:19:54 +0100chele(~chele@user/chele) (Remote host closed the connection)
2023-02-02 18:20:38 +0100 <tomsmeding> Joao003: "/// (pronounced "slashes"), or Slashalash, is a minimalist Turing-complete esoteric programming language, invented by Tanner Swett (User:Ihope127) in 2006 based on the "s/foo/bar/" notation that everybody seemed to be using in IRC. "
2023-02-02 18:20:48 +0100 <tomsmeding> you knew sed notation before you knew it was called sed notation
2023-02-02 18:20:53 +0100 <tomsmeding> https://esolangs.org/wiki////
2023-02-02 18:22:29 +0100 <monochrom> Ugh that comes full circle. :)
2023-02-02 18:23:17 +0100 <Joao003> Hello World in ///:
2023-02-02 18:23:20 +0100 <Joao003> Hello, World!
2023-02-02 18:23:27 +0100 <Joao003> Here's a cooler version:
2023-02-02 18:23:59 +0100 <Joao003> / Hello Hello/, World!/Hello Hello Hello
2023-02-02 18:24:29 +0100 <Joao003> ignore the space at the beginning, it's so that irc doesn't interpret it as a command
2023-02-02 18:25:11 +0100 <mauke> the substitute command s/// originated in ed, and from there made its way into sed, ex, and vi
2023-02-02 18:25:18 +0100 <Joao003> lol
2023-02-02 18:25:27 +0100 <Joao003> // was probably inspired by it
2023-02-02 18:25:33 +0100 <mauke> and thence vim and perl
2023-02-02 18:25:37 +0100 <Joao003> considering the only thing you can do is replace things
2023-02-02 18:25:38 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
2023-02-02 18:25:44 +0100razetime(~Thunderbi@117.193.6.240) (Remote host closed the connection)
2023-02-02 18:25:45 +0100 <darkling> Did ed have any ancestry in TECO?
2023-02-02 18:25:55 +0100 <Joao003> s/\/\//\/\/\//
2023-02-02 18:26:37 +0100 <mauke> (also, / has no special meaning in IRC-the-protocol. you'll have to take that one up with your IRC client)
2023-02-02 18:27:36 +0100 <Joao003> s/IRC-the-protocol/the IRC protocol/
2023-02-02 18:27:59 +0100 <Joao003> also if there are slashes do you need to escape them with \
2023-02-02 18:28:31 +0100 <geekosaur> yes
2023-02-02 18:28:52 +0100 <darkling> In sed, you can use any character, so s://:/: would work just as well as s/\/\//\// (and is more readable)
2023-02-02 18:28:54 +0100 <Joao003> for example if i want to convert * into / i use s/*/\//
2023-02-02 18:29:14 +0100 <mauke> well, you could also switch to another delimiter: s!/foo/!/bar/!
2023-02-02 18:29:18 +0100 <Joao003> but then you need to escape :
2023-02-02 18:29:29 +0100 <geekosaur> you can actually use any printable character as separator; / is just convention. s,\*,/,
2023-02-02 18:29:35 +0100ubert1(~Thunderbi@2a02:8109:abc0:6434:841e:e311:a268:c104) (Quit: ubert1)
2023-02-02 18:29:45 +0100 <Joao003> "any character"? what about \?
2023-02-02 18:30:12 +0100 <Joao003> what do you use to escape \ ?
2023-02-02 18:30:14 +0100 <geekosaur> depends on the program. at least one I've run into accepted it and turned off escaping
2023-02-02 18:30:46 +0100 <Joao003> \ is not used very often
2023-02-02 18:31:04 +0100 <Joao003> so thats why its used for escaping characters
2023-02-02 18:31:13 +0100 <geekosaur> (more correctly, escaped everything for the purposes of e.g. regex metacharacters, but you couldn't then escape \ for the delimiter)
2023-02-02 18:31:44 +0100 <Joao003> s/// probably inspired js' regex syntax
2023-02-02 18:32:29 +0100 <mauke> I'm 99.9% sure JS took that one from Perl
2023-02-02 18:33:06 +0100 <Joao003> the // and then the flags
2023-02-02 18:33:07 +0100mc47(~mc47@xmonad/TheMC47)
2023-02-02 18:33:26 +0100 <Joao003> if im correct sed also had the flags
2023-02-02 18:33:40 +0100 <geekosaur> a limited set of them, yes. as did ed
2023-02-02 18:33:48 +0100 <geekosaur> in particular, /i
2023-02-02 18:33:58 +0100 <Joao003> and only /i?
2023-02-02 18:33:59 +0100 <darkling> And /g
2023-02-02 18:34:01 +0100 <geekosaur> sed added /tlabelamong others
2023-02-02 18:34:12 +0100 <geekosaur> and /g, yes
2023-02-02 18:34:29 +0100 <Joao003> g for global
2023-02-02 18:34:29 +0100 <darkling> /g is about the only one I use in practice.
2023-02-02 18:34:33 +0100 <Joao003> like in javascript
2023-02-02 18:34:57 +0100ddellacosta(~ddellacos@146.70.166.170) (Quit: WeeChat 3.7.1)
2023-02-02 18:35:29 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2023-02-02 18:35:31 +0100 <Joao003> it goes and checks for every match, right?
2023-02-02 18:35:33 +0100 <darkling> sed also used // to delimit regexes in line selectors: 3,/^foo/s/bar/baz/ # "For every line between line 3 and the next line that starts with foo, replace bar with baz"
2023-02-02 18:36:11 +0100 <geekosaur> and, confusingly, allowed you to switch delimiter with \ iirc
2023-02-02 18:36:12 +0100yrlnry(~yrlnry@2600:4040:738e:5400:87d:f2d:382e:ac3d) (Remote host closed the connection)
2023-02-02 18:36:22 +0100ddellacosta(~ddellacos@143.244.47.87)
2023-02-02 18:36:53 +0100 <Joao003> s/foo/bar/g substitute every foo for a bar
2023-02-02 18:36:53 +0100 <geekosaur> 3,\,foo,s!!bar!g
2023-02-02 18:37:09 +0100 <darkling> Oh, nice. Didn't know about that.
2023-02-02 18:37:22 +0100yrlnry(~yrlnry@2600:4040:738e:5400:87d:f2d:382e:ac3d)
2023-02-02 18:38:11 +0100 <Joao003> 1,3s/Hello/World/g
2023-02-02 18:38:35 +0100 <Joao003> would probably substitute every Hello to a World in lines between 1 and 3
2023-02-02 18:38:46 +0100 <geekosaur> yes
2023-02-02 18:39:25 +0100 <Joao003> so sed is just a find & replace with regex
2023-02-02 18:39:54 +0100 <darkling> No, it's more than that.
2023-02-02 18:40:02 +0100 <darkling> We're just concentrating on the s command.
2023-02-02 18:40:06 +0100 <Joao003> oh
2023-02-02 18:40:39 +0100 <geekosaur> [exa] pointed to an example of what sed can do
2023-02-02 18:40:49 +0100 <geekosaur> if you value your sanity, though, don't 🙂
2023-02-02 18:40:57 +0100 <Joao003> s,s/a/b/,s/c/d/,
2023-02-02 18:40:59 +0100 <darkling> I've seen a ray-tracer written in sed. :)
2023-02-02 18:41:18 +0100 <Joao003> substitution substitution
2023-02-02 18:42:05 +0100 <Joao003> also substitution substitution sounds like that "police police police police police police police police" thingy
2023-02-02 18:42:35 +0100 <Joao003> also can sed multiply stringsd
2023-02-02 18:42:41 +0100 <Joao003> strings*
2023-02-02 18:43:21 +0100 <mauke> multiply in what sense?
2023-02-02 18:43:23 +0100econo(uid147250@user/econo)
2023-02-02 18:43:23 +0100mastarija(~mastarija@2a05:4f46:e03:6000:c226:21cc:7cd8:a29e) (Ping timeout: 256 seconds)
2023-02-02 18:43:28 +0100 <geekosaur> sed is turing complete, so yes
2023-02-02 18:43:38 +0100 <Joao003> make copies for example string -> stringstring
2023-02-02 18:43:44 +0100 <darkling> You can do back-references in your search/replace, so yes.
2023-02-02 18:43:50 +0100 <Joao003> how
2023-02-02 18:44:53 +0100 <geekosaur> use \( \) to capture part or all of the regex and \1, \2, etc. to reference them in either the pattern or the replacement
2023-02-02 18:45:12 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 18:45:40 +0100 <darkling> Take a look through the man page -- it's pretty short, but it lists all the commands with a short description.
2023-02-02 18:45:57 +0100 <Joao003> sorry i don't use linux
2023-02-02 18:46:02 +0100 <Joao003> ok i will use wsl
2023-02-02 18:46:05 +0100 <yushyin> is this #unixtools or #haskell? ;D
2023-02-02 18:46:12 +0100 <Joao003> lol
2023-02-02 18:46:23 +0100 <Joao003> yeah the topic diverged too far
2023-02-02 18:46:43 +0100 <darkling> Template Haskell? No need, I've got sed!
2023-02-02 18:47:32 +0100 <Joao003> s/\(string\)/\1\1/g would search for every "string" and replace it with "stringstring"
2023-02-02 18:48:05 +0100 <darkling> Yes, although fairly pointless in this case, since "string" is constant, so you could just write "stringstring" instead of "\1\1"
2023-02-02 18:51:18 +0100 <mauke> in Perl, that would be s/(string)/$1$1/g (here $1 is a real variable, usable outside)
2023-02-02 18:51:48 +0100 <mauke> that's what JavaScript copied for its str.replace(/(string)/g, '$1$1')
2023-02-02 18:52:12 +0100kurbus(~kurbus@user/kurbus)
2023-02-02 18:53:51 +0100 <geekosaur> sed also has a "memory" via the g, h, and x commands. it's remembered across lines
2023-02-02 18:54:01 +0100 <geekosaur> "hold space"
2023-02-02 18:55:01 +0100 <Joao003> but less bytes
2023-02-02 18:55:05 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-02 18:55:05 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
2023-02-02 18:56:11 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 18:56:29 +0100 <darkling> The one thing that sed is annoyingly bad at in text processing is dealing with line endings -- if you want to, say, concatenate two lines into one, it's always a struggle that's more easily dealt with in some other tool.
2023-02-02 18:57:44 +0100 <geekosaur> actually I think that's N;s/\n//
2023-02-02 18:58:41 +0100 <[exa]> darkling: you can always temporarily `tr` the endings to say \x01 and completely ignore the sed semantics
2023-02-02 18:58:58 +0100 <darkling> geekosaur: I don't think I ever had much luck with doing it that way, but I'll try to remember for next time.
2023-02-02 18:59:58 +0100 <Joao003> i'd use vscode's ctrl+h with the regex option
2023-02-02 19:00:21 +0100 <geekosaur> some old versions of sed didn't support matching \n, iirc, but gnu sed's fine with it
2023-02-02 19:00:33 +0100 <geekosaur> think it was v7 and old bsd sed that didn't
2023-02-02 19:01:16 +0100 <Joao003> geekosaur: also what's the deal with g h and x
2023-02-02 19:01:29 +0100 <Inst> can you help me debug a weird issue?
2023-02-02 19:01:50 +0100 <Inst> execWriterT outperforms foldl', foldM
2023-02-02 19:01:56 +0100 <geekosaur> Joao003, look up "sed hold space"
2023-02-02 19:02:29 +0100 <[exa]> Inst: is it a strict writer or a lazy writer?
2023-02-02 19:02:37 +0100 <Inst> CPS
2023-02-02 19:02:46 +0100 <Inst> StateT.Strict also gets the same performance
2023-02-02 19:03:14 +0100 <geekosaur> Joao003, g replaces the pattern space with the hold space; h replaces the hold space with the pattern space; x swaps them
2023-02-02 19:03:35 +0100 <geekosaur> g and h have uppercase versions and append instead of replacing
2023-02-02 19:03:41 +0100 <[exa]> Inst: might be the case that the foldl' is actually not forced along the computation?
2023-02-02 19:04:04 +0100 <[exa]> Inst: btw I guess if you can pastebin a small reproducer it would be much easier to judge
2023-02-02 19:04:47 +0100 <Inst> ugh, i just sprung a space leak
2023-02-02 19:04:51 +0100 <Inst> debugging that instead
2023-02-02 19:05:25 +0100 <geekosaur> s/and append/that append/
2023-02-02 19:06:33 +0100 <Inst> i can reproduce, but i think it has to do with list fusion failing or something
2023-02-02 19:06:51 +0100 <Inst> it's a dumb issue thta i can't really fix
2023-02-02 19:07:00 +0100 <Inst> the native idiom for what i'm trying to do should be foldM
2023-02-02 19:07:15 +0100 <Inst> resorting to WriterT or StateT is horrible
2023-02-02 19:07:49 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2023-02-02 19:08:31 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733)
2023-02-02 19:08:35 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-02 19:08:43 +0100 <Joao003> now i understand
2023-02-02 19:09:32 +0100 <Inst> the code roughly looks like this
2023-02-02 19:09:38 +0100 <Joao003> that line concatenation thingy can be solved with g and h can't it
2023-02-02 19:09:40 +0100 <Inst> the go is the helper for the foldM, or rather got modified from it
2023-02-02 19:10:02 +0100 <Joao003> also geekosaur let's move to #haskell-offtopic
2023-02-02 19:10:21 +0100 <geekosaur> yeh, I was thinking we're past that point already
2023-02-02 19:11:00 +0100 <Joao003> there's another conversation starting
2023-02-02 19:11:37 +0100 <Joao003> im moving now
2023-02-02 19:12:01 +0100 <Inst> this is the foldM version of go for
2023-02-02 19:12:06 +0100 <Inst> @[exa]
2023-02-02 19:12:06 +0100 <lambdabot> Unknown command, try @list
2023-02-02 19:12:07 +0100 <Inst> go !a _ = ($ a) . bool (second succ) (first succ) <$> (runReaderT montyHall' $! config)
2023-02-02 19:12:11 +0100 <Inst> https://paste.tomsmeding.com/bgy0dpeS
2023-02-02 19:16:47 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2023-02-02 19:18:50 +0100thongpv(~thongpv87@14.179.159.25) (Ping timeout: 255 seconds)
2023-02-02 19:20:04 +0100kassouni(~kassouni@2601:646:400:68b0:f5a4:b4c5:300f:d7b8)
2023-02-02 19:20:52 +0100kassouni(~kassouni@2601:646:400:68b0:f5a4:b4c5:300f:d7b8) (Client Quit)
2023-02-02 19:21:51 +0100avicenzi(~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 260 seconds)
2023-02-02 19:26:41 +0100 <glguy> Inst: are you basically trying to do this? https://paste.tomsmeding.com/GCtLgEp9
2023-02-02 19:27:24 +0100 <Inst> ya
2023-02-02 19:29:42 +0100andrew2(~andrew@130.159.237.115)
2023-02-02 19:31:47 +0100 <andrew2> Is there a way to implement a type family with kind `Bool -> *`?
2023-02-02 19:32:32 +0100 <glguy> yes
2023-02-02 19:33:21 +0100acidsys(~crameleon@openSUSE/member/crameleon) (Ping timeout: 252 seconds)
2023-02-02 19:34:01 +0100 <andrew2> the only thing I managed to implement is something like `data family Choose (b :: Bool) :: *` but then i can't use `Choose` unapplied
2023-02-02 19:34:16 +0100 <glguy> Right, you can't use type families unapplied
2023-02-02 19:34:57 +0100 <glguy> but you can use data families unapplied
2023-02-02 19:35:17 +0100 <andrew2> what's the difference?
2023-02-02 19:35:44 +0100oldfashionedcow(Rahul_Sand@user/oldfashionedcow) (Ping timeout: 248 seconds)
2023-02-02 19:36:44 +0100 <glguy> Do you know the difference between using normal 'type' and 'data'? (not families)
2023-02-02 19:37:45 +0100 <Joao003> why not make the 'data' have 2 constructors
2023-02-02 19:38:03 +0100 <andrew2> I guess? `type` is for synonyms and `data` defines inhabitants for the type
2023-02-02 19:38:13 +0100 <glguy> andrew2: ok, same idea
2023-02-02 19:38:37 +0100 <Inst> any clue why the foldM underperforms a writerT CPS?
2023-02-02 19:38:48 +0100 <andrew2> Joao003 I have another typeclass with associated family with kind `Bool -> *`
2023-02-02 19:38:54 +0100 <Joao003> oh
2023-02-02 19:39:04 +0100 <Inst> writerT CPS becomes a bit shakey if I use replicateM instead of replicateM_
2023-02-02 19:39:32 +0100 <glguy> Inst: that'd depend on your code. I didn't see any foldM in the paste
2023-02-02 19:40:25 +0100 <Inst> this is the foldM version
2023-02-02 19:40:25 +0100 <Inst> foldM go (MkMHWL 0 0) (runReaderT montyHall' $! config)
2023-02-02 19:40:33 +0100 <Inst> go !a _ = ($ a) . bool (second succ) (first succ) <$> (runReaderT montyHall' $! config)
2023-02-02 19:41:03 +0100 <andrew2> okay so now I'm getting error because my data family is not evaluated so `Imp 'False` is not equal to the type I've given it.
2023-02-02 19:41:49 +0100 <andrew2> which I guess is what you meant glguy `Impl 'False` is now it's own type rather than reducing to its right-hand-side
2023-02-02 19:42:01 +0100 <glguy> yeah, it's not a synonym, it's a new type
2023-02-02 19:42:03 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 19:42:33 +0100 <glguy> it's got its own value constructors distinct from any other value constructors
2023-02-02 19:43:29 +0100 <glguy> Inst: replicateM_ with writer doesn't generate the intermediate list
2023-02-02 19:43:45 +0100 <Inst> yeah, but the direct loop versions seem unperformant too
2023-02-02 19:43:59 +0100 <glguy> what's the direct loop version?
2023-02-02 19:44:00 +0100 <andrew2> So is there no way to have for example `f :: Impl 'False -> IO ()` be called with `f x` if `x :: Int` and `data instance Impl False = Int` ?
2023-02-02 19:45:02 +0100 <glguy> data instance Impl False = Int -- this probably doesn't mean what you thought it meant
2023-02-02 19:45:10 +0100 <glguy> This is introducing a new value constructor Int
2023-02-02 19:45:17 +0100 <glguy> nothing to do with the type Int
2023-02-02 19:45:18 +0100 <andrew2> (or vice-versa, I guess I'm doing the opposite and I have `f :: Int -> IO ()` and I have `x :: Impl 'False` and call `f x`)
2023-02-02 19:45:41 +0100 <glguy> Impl 'False has a single (non-bottom) value: Int
2023-02-02 19:46:34 +0100 <andrew2> so how do I implement `Bool -> *` so that it returns two different types depending on the bool?
2023-02-02 19:46:54 +0100 <glguy> Inst: your loop implementation is not the direct loop version, it's building up a massive thunk
2023-02-02 19:47:19 +0100 <glguy> andrew2: Youd need to use a type family for that
2023-02-02 19:47:20 +0100 <Inst> how?
2023-02-02 19:47:45 +0100 <andrew2> glguy but then we're back to square1: how do I use an unapplied type family?
2023-02-02 19:47:57 +0100 <glguy> you don't
2023-02-02 19:48:17 +0100 <glguy> What you're asking about isn't something you can do, so you'll need to take a step backward first
2023-02-02 19:48:18 +0100 <andrew2> so the answer is that we cannot implement a type-level function `Bool -> *`?
2023-02-02 19:48:31 +0100 <andrew2> okay
2023-02-02 19:48:37 +0100 <andrew2> I'll try something else then, tahnks!
2023-02-02 19:49:03 +0100 <glguy> Inst: simplified down, you have this: loop 0 acc = acc; loop n acc = loop (n-1) (f acc)
2023-02-02 19:49:28 +0100 <glguy> so loop 3 x becomes: f (f (f x))
2023-02-02 19:49:32 +0100 <Joao003> what about that f
2023-02-02 19:49:44 +0100 <Joao003> oh
2023-02-02 19:50:08 +0100 <Joao003> \f -> loop 3
2023-02-02 19:50:17 +0100 <Joao003> you're supposed to use it like that?
2023-02-02 19:50:29 +0100 <Inst> the version you have looks TCO
2023-02-02 19:50:37 +0100 <Inst> in reality, the problem is >> breaks TCO
2023-02-02 19:50:40 +0100 <Inst> guarded recursion
2023-02-02 19:51:13 +0100 <glguy> you can build up big thunks with TCO just fine
2023-02-02 19:51:28 +0100 <glguy> like we see here in loop
2023-02-02 19:51:56 +0100 <Inst> i mean in your version you could just, well, $1 and force the (f acc) chunk
2023-02-02 19:51:56 +0100 <Joao003> what is TCO
2023-02-02 19:51:58 +0100 <Inst> thunk
2023-02-02 19:51:59 +0100 <monochrom> The simplistic TC-vs-not-TC is grossly insufficient to understand the consequences of lazy evaluation.
2023-02-02 19:52:02 +0100 <Inst> tail call optimization
2023-02-02 19:52:49 +0100 <glguy> Inst: since you're building up a value with type (IO _), seq'ing that isn't going to help with building up the big thing
2023-02-02 19:53:15 +0100 <Inst> seq fmap seq...
2023-02-02 19:53:17 +0100 <glguy> or maybe you're not, it's hard to tell given the fragment of code we have
2023-02-02 19:53:28 +0100 <glguy> Inst: no, fmapping seq into an IO value doesn't do anything
2023-02-02 19:53:34 +0100 <Inst> is foldM generally useful instead of a stateful accumulator?
2023-02-02 19:53:36 +0100 <glguy> you still have an IO thing
2023-02-02 19:53:37 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 19:54:13 +0100 <Inst> like, i'm obviously at fault, but is it acceptable to blame Haskell for foldM's lack of optimization?
2023-02-02 19:54:36 +0100 <glguy> it's not foldM's fault if you're building up a list you didn't need to build up so that you can use foldM
2023-02-02 19:54:40 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 19:54:47 +0100bhall(~brunohall@138.199.22.101) (Ping timeout: 256 seconds)
2023-02-02 19:54:53 +0100 <monochrom> Perhaps don't blame anything at all?
2023-02-02 19:55:09 +0100 <Joao003> what is tail call optimization all about
2023-02-02 19:55:16 +0100 <monochrom> Investigate and rethink. Don't blame.
2023-02-02 19:55:51 +0100bhall(~brunohall@138.199.22.101)
2023-02-02 19:55:53 +0100 <Inst> foldM is generally useful when it comes to list fusion, though, so I don't get it
2023-02-02 19:56:18 +0100 <Inst> I just want a more succinct idiom than execWriter $ writerWrapper
2023-02-02 19:56:27 +0100 <glguy> If you're generating that list with replicateM, then there's no fusion. The whole list has to be constructed first before foldM comes into view
2023-02-02 19:56:39 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733) (Remote host closed the connection)
2023-02-02 19:56:42 +0100trev_(~trev@109.252.35.99)
2023-02-02 19:56:50 +0100 <Inst> erm, replicateM count writerWrapper
2023-02-02 19:56:51 +0100 <Joao003> why not make the idiom into a function
2023-02-02 19:57:14 +0100 <Inst> the list foldM is working on is [1..counter]
2023-02-02 19:57:16 +0100 <Inst> typical iterator
2023-02-02 20:00:53 +0100acidsys(~crameleon@openSUSE/member/crameleon)
2023-02-02 20:01:18 +0100andrew2(~andrew@130.159.237.115) (Ping timeout: 260 seconds)
2023-02-02 20:01:41 +0100king_gs(~Thunderbi@2806:103e:29:34e5:3d29:184b:bd04:c29c)
2023-02-02 20:04:14 +0100 <Joao003> chat dead?
2023-02-02 20:05:08 +0100king_gs(~Thunderbi@2806:103e:29:34e5:3d29:184b:bd04:c29c) (Client Quit)
2023-02-02 20:05:11 +0100 <monochrom> Yes.
2023-02-02 20:05:35 +0100gensystt(gensyst@user/gensyst) (Quit: Leaving)
2023-02-02 20:06:27 +0100 <Joao003> sad.
2023-02-02 20:14:23 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733)
2023-02-02 20:15:02 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
2023-02-02 20:20:49 +0100 <juri_> worth a shot: there doesn't happen to be someone here with more (read: any) experience in numerical analysis, who wants to help complete a 2D projective geometry engine? i'm running out of braincells to burn. ;)
2023-02-02 20:23:06 +0100kurbus(~kurbus@user/kurbus) (Quit: Client closed)
2023-02-02 20:24:58 +0100mikoto-chan(~mikoto-ch@2001:999:480:af94:3bb8:8e49:857d:dcf2)
2023-02-02 20:28:13 +0100trev_(~trev@109.252.35.99) (Remote host closed the connection)
2023-02-02 20:30:07 +0100teo(~teo@user/teo) (Ping timeout: 252 seconds)
2023-02-02 20:31:26 +0100 <Joao003> lol
2023-02-02 20:32:31 +0100 <monochrom> Would you accept a 3D projective geometry engine and then just kill one dimension? Because the former is just OpenGL etc. >:)
2023-02-02 20:34:09 +0100 <monochrom> Inspired by this joke: Q: How do you visualize 6 dimensions? A: Visualize n dimensions, then let n=6.
2023-02-02 20:35:10 +0100 <darkling> It's the easy way to do it. :)
2023-02-02 20:35:34 +0100 <darkling> (And with more than a little truth in it)
2023-02-02 20:43:46 +0100johnw(~johnw@2600:1700:cf00:db0:b1ce:dda8:9e3c:6a3c) (Quit: ZNC - http://znc.in)
2023-02-02 20:44:19 +0100johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net)
2023-02-02 20:51:53 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733) (Remote host closed the connection)
2023-02-02 20:54:22 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 20:54:52 +0100phma(~phma@2001:5b0:2144:35b8:9ff2:a892:c3ba:7249) (Read error: Connection reset by peer)
2023-02-02 20:55:50 +0100phma(~phma@host-67-44-208-156.hnremote.net)
2023-02-02 20:59:10 +0100ft(~ft@p4fc2a257.dip0.t-ipconnect.de)
2023-02-02 21:03:29 +0100Joao003(~Joao003@2804:840:8302:200:d31:1e61:32ad:8571) (Read error: Connection reset by peer)
2023-02-02 21:07:44 +0100 <juri_> monochrom: sadly, that's not a PGA system. :P
2023-02-02 21:09:02 +0100ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2023-02-02 21:09:03 +0100asthasr(~asthasr@208.80.78.154) (Quit: asthasr)
2023-02-02 21:10:32 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
2023-02-02 21:16:43 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 21:17:36 +0100kurbus(~kurbus@user/kurbus)
2023-02-02 21:20:41 +0100use-value1(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982)
2023-02-02 21:21:01 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2023-02-02 21:21:35 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 21:21:47 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982) (Ping timeout: 260 seconds)
2023-02-02 21:21:47 +0100use-value1use-value
2023-02-02 21:24:28 +0100Lycurgus(~juan@user/Lycurgus)
2023-02-02 21:25:03 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2023-02-02 21:31:29 +0100 <juri_> https://www.youtube.com/watch?v=tX4H_ctggYo , if you're interested in learning some new math stuffs.
2023-02-02 21:32:39 +0100 <tomsmeding> _projective_ geometry
2023-02-02 21:32:45 +0100 <tomsmeding> that takes me back to math class
2023-02-02 21:34:38 +0100inversed(~inversed@bcdcac82.skybroadband.com) (Ping timeout: 268 seconds)
2023-02-02 21:34:48 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-02-02 21:35:23 +0100 <juri_> i never had that type of math class, unfortunately. might have saved me a few years writing this PGA geometry engine.
2023-02-02 21:37:55 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2023-02-02 21:39:03 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
2023-02-02 21:41:55 +0100inversed(~inversed@bcdcac82.skybroadband.com)
2023-02-02 21:45:26 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-02-02 21:45:41 +0100 <tomsmeding> juri_: if you spent a few years getting familiar with this stuff you know much more about it than I vaguely remember from some class 5 years ago
2023-02-02 21:47:24 +0100 <juri_> tomsmeding: what i'm missing isn't covered in the classes.. i'm doing interval arithmatic, using floating point, and having 'fun' coming up with some of the nonexistant formulae. hense, needing a *bit* of help. ;)
2023-02-02 21:47:47 +0100 <tomsmeding> interesting
2023-02-02 21:48:03 +0100 <tomsmeding> certainly all my class covered was the algebraic stuff :p
2023-02-02 21:48:20 +0100 <juri_> yeah, i'm a bit over the edge. :)
2023-02-02 21:48:41 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2023-02-02 21:50:14 +0100 <juri_> I've started doing some things that are correct, from a numerical sense. my property tests can really ruin my day. :)
2023-02-02 21:52:05 +0100 <juri_> https://github.com/Haskell-Things/HSlice/blob/tip/Graphics/Slicer/Math/PGAPrimitives.hs , if you want to know what this looks like in haskell. ;)
2023-02-02 21:52:14 +0100mikoto-chan(~mikoto-ch@2001:999:480:af94:3bb8:8e49:857d:dcf2) (Ping timeout: 246 seconds)
2023-02-02 21:53:40 +0100opticblast(~Thunderbi@172.58.80.152)
2023-02-02 21:59:53 +0100tabemann(~tabemann@2600:1700:7990:24e0:72f6:649:24db:f080) (Remote host closed the connection)
2023-02-02 22:00:05 +0100tabemann(~travisb@2600:1700:7990:24e0:2fdf:3485:b82a:4a06)
2023-02-02 22:00:06 +0100 <EvanR> floating point interval arithmetic, sounds dicey
2023-02-02 22:01:41 +0100captnemo(~captnemo@193.32.127.226)
2023-02-02 22:01:47 +0100 <EvanR> if you add two intervals, the result may need to be adjusted due to round off error?
2023-02-02 22:03:04 +0100 <EvanR> because the natural rounding behavior goes the wrong way
2023-02-02 22:04:29 +0100 <tomsmeding> EvanR: I saw "Ulp" in that code so I think juri_ is aiming for that level of precision
2023-02-02 22:05:07 +0100 <EvanR> hardcore
2023-02-02 22:05:40 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds)
2023-02-02 22:06:09 +0100 <juri_> EvanR: you get to tell the FPU what direction to round things.
2023-02-02 22:06:50 +0100 <juri_> i'm using the Rounded library for that.
2023-02-02 22:06:57 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-02-02 22:07:53 +0100 <juri_> so i do all of the math twice: once "as close to right as possible", once again in "make sure you round UP", then i save the unit of last precision, so i know the error range of the calculation.
2023-02-02 22:09:25 +0100Kuttenbrunzer(~Kuttenbru@2a02:8108:8b80:1d48::315c)
2023-02-02 22:09:51 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-02 22:10:36 +0100ub(~Thunderbi@p548c8ef0.dip0.t-ipconnect.de)
2023-02-02 22:10:41 +0100 <juri_> its almost coming together, but i think i'll need someone with at least a PHD in the subject (or equivalent experience. ;) ) to look over my logic, because there are a few "magic numbers", and probably some bad logic still baked in.
2023-02-02 22:11:07 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 22:11:18 +0100ubert(~Thunderbi@p200300ecdf130119a8229ffa4b2489e6.dip0.t-ipconnect.de) (Remote host closed the connection)
2023-02-02 22:11:18 +0100ububert
2023-02-02 22:12:47 +0100captnemo(~captnemo@193.32.127.226) (Quit: WeeChat 3.8)
2023-02-02 22:17:22 +0100nschoe(~q@2a01:e0a:8e:a190:8b2d:eb7d:570e:3cd1)
2023-02-02 22:22:08 +0100danza(~francesco@151.54.8.155)
2023-02-02 22:24:01 +0100Joao003(~Joao003@2804:840:8312:3400:5928:bc6a:1cc0:4acb)
2023-02-02 22:24:26 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-02-02 22:24:56 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2023-02-02 22:25:41 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds)
2023-02-02 22:27:05 +0100danza(~francesco@151.54.8.155) (Ping timeout: 252 seconds)
2023-02-02 22:27:47 +0100 <EvanR> the error range of the error range xD
2023-02-02 22:28:20 +0100 <EvanR> error is too important to be left to unnecessarily large error
2023-02-02 22:28:23 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2023-02-02 22:28:52 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-02-02 22:30:34 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-02-02 22:32:39 +0100oldfashionedcowusername236
2023-02-02 22:33:41 +0100mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2023-02-02 22:34:09 +0100 <juri_> EvanR: these are really tiny values, in the end. its just that in some cases, you need tiny values within certain ranges derived from those values...
2023-02-02 22:35:15 +0100mcglk(~mcglk@131.191.49.120)
2023-02-02 22:35:47 +0100 <EvanR> and when the difference is like 1 ULP, how do you even name that value xD
2023-02-02 22:36:37 +0100 <EvanR> (switch to interval arithmetic with rationals or computable reals maybe)
2023-02-02 22:36:58 +0100kurbus(~kurbus@user/kurbus) (Quit: Client closed)
2023-02-02 22:38:19 +0100 <juri_> it depends. right now, i'm saving all of the error from all of the possible operations in a type, and using it to reason.
2023-02-02 22:38:57 +0100username236oldfashionedcow
2023-02-02 22:46:50 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 22:47:42 +0100danza(~francesco@151.54.28.251)
2023-02-02 22:48:03 +0100nschoe(~q@2a01:e0a:8e:a190:8b2d:eb7d:570e:3cd1) (Quit: Switching off)
2023-02-02 22:49:11 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733)
2023-02-02 22:52:04 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-02-02 22:53:29 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b571:9acb:283f:a733) (Ping timeout: 255 seconds)
2023-02-02 22:54:59 +0100danza(~francesco@151.54.28.251) (Ping timeout: 256 seconds)
2023-02-02 22:55:19 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-02 23:00:09 +0100Joao003(~Joao003@2804:840:8312:3400:5928:bc6a:1cc0:4acb) (Quit: Leaving)
2023-02-02 23:00:15 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 255 seconds)
2023-02-02 23:07:36 +0100m5zs7k(aquares@web10.mydevil.net) (Remote host closed the connection)
2023-02-02 23:08:45 +0100m5zs7k(aquares@web10.mydevil.net)
2023-02-02 23:11:24 +0100ystael(~ystael@user/ystael) (Quit: Lost terminal)
2023-02-02 23:13:55 +0100m5zs7k(aquares@web10.mydevil.net) (Ping timeout: 268 seconds)
2023-02-02 23:14:35 +0100m5zs7k(aquares@web10.mydevil.net)
2023-02-02 23:15:07 +0100danza(~francesco@151.53.13.66)
2023-02-02 23:15:26 +0100use-value1(~Thunderbi@2a00:23c6:8a03:2f01:e5a0:a2ae:d060:9326)
2023-02-02 23:16:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2023-02-02 23:16:23 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:5d67:73a5:df2e:6982) (Ping timeout: 264 seconds)
2023-02-02 23:16:23 +0100use-value1use-value
2023-02-02 23:18:31 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 23:19:13 +0100troydm(~troydm@user/troydm) (Ping timeout: 252 seconds)
2023-02-02 23:20:19 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-02-02 23:21:26 +0100michalz(~michalz@185.246.207.201) (Remote host closed the connection)
2023-02-02 23:28:31 +0100yrlnry(~yrlnry@2600:4040:738e:5400:87d:f2d:382e:ac3d) (Remote host closed the connection)
2023-02-02 23:29:03 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:e5a0:a2ae:d060:9326) (Ping timeout: 252 seconds)
2023-02-02 23:29:04 +0100use-value1(~Thunderbi@2a00:23c6:8a03:2f01:e5a0:a2ae:d060:9326)
2023-02-02 23:29:29 +0100yrlnry(~yrlnry@2600:4040:738e:5400:87d:f2d:382e:ac3d)
2023-02-02 23:31:21 +0100use-value1use-value
2023-02-02 23:47:45 +0100ddellacosta(~ddellacos@143.244.47.87) (Ping timeout: 260 seconds)
2023-02-02 23:48:23 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-02-02 23:48:39 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2023-02-02 23:48:52 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-02 23:49:13 +0100zero(~z@user/zero)
2023-02-02 23:50:45 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-02 23:51:06 +0100yin(~z@user/zero) (Ping timeout: 255 seconds)
2023-02-02 23:52:31 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-02 23:59:03 +0100gurkenglas(~gurkengla@dynamic-046-114-182-034.46.114.pool.telefonica.de)