2022/11/04

2022-11-04 00:00:01 +0100 <geekosaur> no parser combinator library that I know of… but perhaps this would be a good use case for alex+happy?
2022-11-04 00:00:52 +0100jlgw_(~jw@83-233-104-81.cust.bredband2.com)
2022-11-04 00:01:22 +0100jlgw(~jw@83-233-104-81.cust.bredband2.com) (Ping timeout: 252 seconds)
2022-11-04 00:02:09 +0100 <geekosaur> also, uh, which variety of regular expression?
2022-11-04 00:04:08 +0100gmg(~user@user/gehmehgeh) (Quit: Leaving)
2022-11-04 00:06:52 +0100ski. o O ( "Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, ...)" by Russ Cox in 2007-01 at <https://swtch.com/~rsc/regexp/regexp1.html> )
2022-11-04 00:07:03 +0100 <Axman6> not sure - i feel it shouldnt be too hard to write a small library that adds attoparsec combinators to parse a given expression 'here'. I'm reading https://keleshev.com/compiling-to-assembly-from-scratch/ and its combination of parser combinators and regular expressions is quite nice
2022-11-04 00:07:17 +0100nate3(~nate@98.45.169.16)
2022-11-04 00:07:25 +0100jtomas(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 252 seconds)
2022-11-04 00:08:00 +0100 <Axman6> one thing though would be that the regex would need to be resumable, if it hasn't succeeded or failed yet, but we run out of input
2022-11-04 00:08:40 +0100 <geekosaur> it has occurred to me that pretty much any use of regex can be "compiled" to any parser combinator. and if you compile it to attoparsec it should be resumable
2022-11-04 00:10:02 +0100 <Axman6> also, on a completely unrelated note, iGot this iPad Pro recently, and having the Blink app with mosh so I can rejoin IRC from anywhere, is fantastic
2022-11-04 00:11:06 +0100 <Axman6> yeah thats an interesting idea - would the performance be comparable though? I guess all the tricks to make regex parsing linear would also apply to how you'd compile it too
2022-11-04 00:12:20 +0100nate3(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-11-04 00:13:18 +0100 <geekosaur> I expect it'd be similar performance, but admit to optimizations that might well make it noticeably faster than most regexes can get
2022-11-04 00:13:31 +0100absence(torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 246 seconds)
2022-11-04 00:13:51 +0100teddyc(theodorc@cassarossa.samfundet.no) (Ping timeout: 260 seconds)
2022-11-04 00:19:27 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
2022-11-04 00:20:33 +0100dcoutts(~duncan@host86-171-59-120.range86-171.btcentralplus.com)
2022-11-04 00:22:16 +0100dcoutts_(~duncan@host86-163-164-210.range86-163.btcentralplus.com) (Ping timeout: 246 seconds)
2022-11-04 00:25:24 +0100dcoutts_(~duncan@86.150.41.170)
2022-11-04 00:27:27 +0100 <AndreasK> I remember hearing a talk about staging a regex compiler which then was a lot faster. But I don't remember where it was
2022-11-04 00:27:37 +0100AlexNoo__(~AlexNoo@178.34.163.109)
2022-11-04 00:27:46 +0100dcoutts(~duncan@host86-171-59-120.range86-171.btcentralplus.com) (Ping timeout: 252 seconds)
2022-11-04 00:27:53 +0100 <Axman6> I'd love to see that if you fi9nd it
2022-11-04 00:28:34 +0100 <AndreasK> https://icfp22.sigplan.org/home/haskellsymp-2022# it was at icfp
2022-11-04 00:28:49 +0100 <AndreasK> https://icfp22.sigplan.org/details/haskellsymp-2022/2/Staging-Regular-Expressions-with-Moore-Cayle…
2022-11-04 00:29:04 +0100 <Axman6> A few months ago I ported this to our Daml codebase, because we needed a better implementation of regexes, and it happened to be for validating regular expressions defined in XML Schema: https://wiki.haskell.org/Regular_expressions_for_XML_Schema
2022-11-04 00:29:11 +0100geekosaurcompletely fails to be surprised
2022-11-04 00:29:14 +0100 <AndreasK> https://www.youtube.com/watch?v=6oTJbtH0PeI
2022-11-04 00:29:24 +0100 <AndreasK> The talk is on youtube it seems
2022-11-04 00:30:23 +0100 <Axman6> You're a champ AndreasK
2022-11-04 00:30:31 +0100Alex_test(~al_test@178.34.163.109) (Ping timeout: 252 seconds)
2022-11-04 00:31:04 +0100AlexNoo_(~AlexNoo@178.34.163.109) (Ping timeout: 252 seconds)
2022-11-04 00:33:55 +0100redmp(~redmp@mobile-166-170-43-0.mycingular.net)
2022-11-04 00:36:01 +0100Alex_test(~al_test@178.34.163.109)
2022-11-04 00:36:07 +0100dyniec(~dyniec@mail.dybiec.info)
2022-11-04 00:37:16 +0100 <monochrom> No, translating regexes to most parser combinator libraries is an uphill battle, because most parser combinator libraries kill the very nondeterminism that regexes stand for. This is right at the API level.
2022-11-04 00:38:03 +0100ski. o O ( "IrRegex : IrRegular Expressions" at <http://synthcode.com/scheme/irregex/>,"irregex - Portable Efficient IrRegular Expressions" at <https://github.com/ashinn/irregex/>, by foof )
2022-11-04 00:38:04 +0100 <monochrom> For example, (00)* 0 (000)* is not going to be simply many "00" >> char "0" >> many "000".
2022-11-04 00:39:31 +0100 <monochrom> Unless you go way back to the very original papers that use String -> [(a, String)] so full nondeterminism is restored.
2022-11-04 00:39:52 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
2022-11-04 00:39:52 +0100 <monochrom> (which kills efficiency, which is why everyone ditched it)
2022-11-04 00:43:07 +0100pyrexcoolbat666
2022-11-04 00:43:30 +0100 <ski> <https://hackage.haskell.org/package/base-4.17.0.0/docs/Text-ParserCombinators-ReadP.html>
2022-11-04 00:43:37 +0100 <ski> @hackage parsek
2022-11-04 00:43:37 +0100 <lambdabot> https://hackage.haskell.org/package/parsek
2022-11-04 00:44:06 +0100 <monochrom> Yeah, or a few nondet parser libraries like ReadP.
2022-11-04 00:44:12 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Ping timeout: 255 seconds)
2022-11-04 00:44:25 +0100coolbat666pyrex
2022-11-04 00:49:33 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 00:51:41 +0100teddyc(theodorc@cassarossa.samfundet.no)
2022-11-04 00:51:58 +0100dcoutts_(~duncan@86.150.41.170) (Ping timeout: 252 seconds)
2022-11-04 00:51:58 +0100gentauro(~gentauro@user/gentauro) (Ping timeout: 252 seconds)
2022-11-04 00:52:05 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 00:52:55 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 00:53:37 +0100gentauro(~gentauro@user/gentauro)
2022-11-04 00:54:43 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 252 seconds)
2022-11-04 00:58:43 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 00:59:58 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-04 01:00:00 +0100Tuplanolla(~Tuplanoll@91-159-69-11.elisa-laajakaista.fi) (Quit: Leaving.)
2022-11-04 01:00:03 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (*.net *.split)
2022-11-04 01:00:03 +0100gentauro(~gentauro@user/gentauro) (*.net *.split)
2022-11-04 01:00:03 +0100redmp(~redmp@mobile-166-170-43-0.mycingular.net) (*.net *.split)
2022-11-04 01:00:04 +0100jlgw_(~jw@83-233-104-81.cust.bredband2.com) (*.net *.split)
2022-11-04 01:00:04 +0100ystael(~ystael@user/ystael) (*.net *.split)
2022-11-04 01:00:18 +0100ystael(~ystael@user/ystael)
2022-11-04 01:00:24 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 01:00:27 +0100jlgw_(~jw@83-233-104-81.cust.bredband2.com)
2022-11-04 01:00:27 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 01:03:34 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 01:05:15 +0100gentauro(~gentauro@user/gentauro)
2022-11-04 01:05:18 +0100caryhartline(~caryhartl@107-140-218-181.lightspeed.rcsntx.sbcglobal.net)
2022-11-04 01:05:18 +0100redmp(~redmp@mobile-166-170-43-0.mycingular.net)
2022-11-04 01:05:21 +0100dcoutts(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 01:07:58 +0100aliosablack(~chomwitt@2a02:587:7a0a:6300:1ac0:4dff:fedb:a3f1)
2022-11-04 01:09:21 +0100chomwitt(~chomwitt@2a02:587:dc18:4a00:1ac0:4dff:fedb:a3f1) (Ping timeout: 246 seconds)
2022-11-04 01:12:03 +0100king_gs1(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
2022-11-04 01:12:04 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 01:12:06 +0100king_gs(~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
2022-11-04 01:12:06 +0100king_gs1king_gs
2022-11-04 01:13:13 +0100pavonia(~user@user/siracusa) (Read error: Connection reset by peer)
2022-11-04 01:13:25 +0100redmp(~redmp@mobile-166-170-43-0.mycingular.net) (Quit: leaving)
2022-11-04 01:13:35 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Remote host closed the connection)
2022-11-04 01:13:35 +0100pavonia(~user@user/siracusa)
2022-11-04 01:13:54 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 01:18:32 +0100aliosablack(~chomwitt@2a02:587:7a0a:6300:1ac0:4dff:fedb:a3f1) (Ping timeout: 276 seconds)
2022-11-04 01:21:30 +0100SoF4(~skius@user/skius)
2022-11-04 01:22:01 +0100SoF(~skius@user/skius) (Read error: Connection reset by peer)
2022-11-04 01:22:01 +0100SoF4SoF
2022-11-04 01:24:26 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-04 01:28:57 +0100king_gs(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 246 seconds)
2022-11-04 01:30:04 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Remote host closed the connection)
2022-11-04 01:30:24 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 01:30:31 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 01:30:34 +0100ncf(~n@monade.li) (Quit: Fairfarren.)
2022-11-04 01:30:47 +0100ncf(~n@monade.li)
2022-11-04 01:31:16 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
2022-11-04 01:39:08 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-11-04 01:39:18 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 01:40:29 +0100absence(torgeihe@hildring.pvv.ntnu.no)
2022-11-04 01:41:17 +0100king_gs(~Thunderbi@187.201.83.115)
2022-11-04 01:44:28 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
2022-11-04 01:46:27 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 01:46:30 +0100SoF(~skius@user/skius) (Remote host closed the connection)
2022-11-04 01:46:59 +0100SoF(~skius@user/skius)
2022-11-04 01:49:10 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-04 01:49:44 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
2022-11-04 01:55:57 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
2022-11-04 01:59:17 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 02:00:26 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
2022-11-04 02:00:26 +0100king_gs(~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
2022-11-04 02:01:30 +0100ub(~Thunderbi@77.119.197.59.wireless.dyn.drei.com)
2022-11-04 02:02:54 +0100ubert(~Thunderbi@77.119.196.32.wireless.dyn.drei.com) (Ping timeout: 246 seconds)
2022-11-04 02:02:54 +0100ububert
2022-11-04 02:03:37 +0100king_gs(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
2022-11-04 02:03:44 +0100talismanick(~talismani@2601:200:c100:c9e0::1b0b)
2022-11-04 02:04:55 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
2022-11-04 02:06:08 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001)
2022-11-04 02:06:09 +0100 <talismanick> Say I have `f <$> foo <*> bar <|> g <$> foo <*> bar`, where `foo` and `bar` are quite long. How might I deduplicate with `liftM2 (<|>) f g`?
2022-11-04 02:08:27 +0100 <dsal> Making them not quite long is always a good idea.
2022-11-04 02:09:16 +0100 <c_wraith> I wouldn't use the function instance for liftM2 there. It just makes people work harder to see what's going on
2022-11-04 02:10:36 +0100bgamari_(~bgamari@64.223.168.223) (Ping timeout: 255 seconds)
2022-11-04 02:10:36 +0100 <pyrex> fwiw i think i would probably write liftA2 f foo bar <|> liftA2 g foo bar
2022-11-04 02:10:44 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
2022-11-04 02:10:52 +0100bgamari(~bgamari@68.238.49.149)
2022-11-04 02:10:54 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-11-04 02:11:39 +0100 <c_wraith> if foo and bar are complex expressions, put them in a let or where
2022-11-04 02:11:48 +0100 <pyrex> i might write `let go z = liftA2 z foo bar in go f <|> go g`
2022-11-04 02:12:15 +0100 <talismanick> pyrex: yeah, a let binding could clear things up
2022-11-04 02:13:23 +0100 <talismanick> Or, I could make it even more extensible by fmap'ing `<$>foo <*> bar` over a list of functions, then foldr1 (<|>)
2022-11-04 02:13:26 +0100 <pyrex> fwiw i think `on (<|>) (\x -> liftA2 x foo bar) f g` maybe does what you want, but i haven't checked that
2022-11-04 02:15:12 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
2022-11-04 02:15:32 +0100Kaipei(~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
2022-11-04 02:16:23 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-11-04 02:17:01 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-11-04 02:20:05 +0100razetime(~quassel@117.254.35.246)
2022-11-04 02:20:24 +0100caryhartline(~caryhartl@107-140-218-181.lightspeed.rcsntx.sbcglobal.net) (Quit: caryhartline)
2022-11-04 02:21:32 +0100 <talismanick> It works. Muahahaha
2022-11-04 02:23:02 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 02:23:11 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 272 seconds)
2022-11-04 02:24:41 +0100motherfsck(~motherfsc@user/motherfsck)
2022-11-04 02:24:49 +0100 <[Leary]> Or something like this: asum $ [f, g] <&> \h -> h <$> foo <*> bar
2022-11-04 02:29:30 +0100xff0x(~xff0x@2405:6580:b080:900:aa5a:50b3:fed5:3fc2) (Ping timeout: 255 seconds)
2022-11-04 02:30:25 +0100nate3(~nate@98.45.169.16)
2022-11-04 02:34:01 +0100 <SrPx> HVM history and next steps: https://twitter.com/VictorTaelin/status/1588332432587005952
2022-11-04 02:36:26 +0100nineonine(~nineonine@2604:3d08:7780:cd00:a9d4:e2db:2f89:8800) (Remote host closed the connection)
2022-11-04 02:40:21 +0100ub(~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
2022-11-04 02:41:44 +0100ubert(~Thunderbi@77.119.197.59.wireless.dyn.drei.com) (Ping timeout: 276 seconds)
2022-11-04 02:41:45 +0100ububert
2022-11-04 02:46:59 +0100 <talismanick> [Leary]: Oh, that is better than what I wrote
2022-11-04 02:47:08 +0100 <talismanick> learn something new everyday!
2022-11-04 02:48:47 +0100jargon_(~jargon@174-22-194-21.phnx.qwest.net) (Remote host closed the connection)
2022-11-04 02:57:25 +0100 <byorgey> SrPx: cool stuff
2022-11-04 02:57:43 +0100 <SrPx> byorgey: ty (:
2022-11-04 03:01:14 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
2022-11-04 03:03:00 +0100inversed(~inversed@bcdcac82.skybroadband.com) (Ping timeout: 248 seconds)
2022-11-04 03:10:15 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-11-04 03:13:32 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-11-04 03:13:32 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-11-04 03:13:32 +0100finn_elijaFinnElija
2022-11-04 03:14:00 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
2022-11-04 03:15:32 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-11-04 03:15:33 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 03:23:12 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 03:27:00 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
2022-11-04 03:27:36 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
2022-11-04 03:28:32 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
2022-11-04 03:34:07 +0100nate3(~nate@98.45.169.16) (Ping timeout: 272 seconds)
2022-11-04 03:38:19 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-11-04 03:38:54 +0100olivermead(~olivermea@cpc72329-sotn15-2-0-cust205.15-1.cable.virginm.net)
2022-11-04 03:39:12 +0100 <c209e6dc-4d76-47> ghci complains if I have a polymorphic lambda inside a let binding, do I have to enable FlexibleContext or RankNTypes?
2022-11-04 03:39:29 +0100 <olivermead> what's the complaint?
2022-11-04 03:39:53 +0100jargon(~jargon@174-22-194-21.phnx.qwest.net)
2022-11-04 03:41:41 +0100 <sm> some debug tracing/logging helpers I've been updating.. comments/testing welcome
2022-11-04 03:41:42 +0100 <sm> https://threadreaderapp.com/thread/1588358412730916864.html
2022-11-04 03:43:30 +0100 <c_wraith> c209e6dc-4d76-47: inside a let? do you have an extension enabled that implies MonoLocalBinds?
2022-11-04 03:46:55 +0100 <c209e6dc-4d76-47> I'm using stack ghc 8.6.5 which is complaining but cabal ghc 8.10.7 is fine, so I'm trying to bump the stack resolver and see if it is a problem with ghc version
2022-11-04 03:49:34 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 03:49:59 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2022-11-04 03:50:29 +0100ygsjg(~quassel@189.124.224.160) (Read error: Connection reset by peer)
2022-11-04 03:51:39 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 03:51:51 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 255 seconds)
2022-11-04 04:06:18 +0100mvk(~mvk@2607:fea8:5ce3:8500::4b68) (Ping timeout: 255 seconds)
2022-11-04 04:21:13 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 268 seconds)
2022-11-04 04:24:06 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-11-04 04:24:06 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-11-04 04:24:06 +0100finn_elijaFinnElija
2022-11-04 04:24:21 +0100 <ski> talismanick : would you like to do the `<|>' before or after the `<$>' and `<*>' ? (in your snippet, it's `<|>' before)
2022-11-04 04:24:47 +0100td_(~td@83.135.9.44) (Ping timeout: 272 seconds)
2022-11-04 04:24:54 +0100 <ski> `<|>' before :
2022-11-04 04:25:06 +0100 <ski> @type \f g foo bar -> (liftA2 . liftA2) (<|>) (liftA2 f) (liftA2 g) foo bar
2022-11-04 04:25:08 +0100 <lambdabot> Alternative f => (a1 -> b -> a2) -> (a1 -> b -> a2) -> f a1 -> f b -> f a2
2022-11-04 04:25:17 +0100 <ski> @let asumMap :: (Foldable t,Alternative i) => (a -> i b) -> (t a -> i b); asumMap = (getAlt .) . foldMap . (Alt .)
2022-11-04 04:25:18 +0100 <lambdabot> Defined.
2022-11-04 04:25:34 +0100 <ski> @type \f g foo bar -> asumMap (\h -> liftA2 h foo bar) [f,g]
2022-11-04 04:25:35 +0100 <lambdabot> Alternative i => (a -> b1 -> b2) -> (a -> b1 -> b2) -> i a -> i b1 -> i b2
2022-11-04 04:25:44 +0100 <ski> `mplus' after :
2022-11-04 04:25:50 +0100 <ski> @let infixr 9 .:; (.:) :: (c0 -> c1) -> (a -> b -> c0) -> (a -> b -> c1); (.:) = (.) . (.)
2022-11-04 04:25:51 +0100 <lambdabot> Defined.
2022-11-04 04:25:55 +0100td_(~td@83.135.9.48)
2022-11-04 04:25:58 +0100 <ski> @let infixl 4 <*>>; (<*>>) :: Monad m => m (a -> m b) -> (m a -> m b); mamb <*>> ma = join (mamb <*> ma)
2022-11-04 04:25:59 +0100 <lambdabot> Defined.
2022-11-04 04:26:08 +0100 <ski> @type \f g foo bar -> (liftA2 . liftA2) mplus (pure .: f) (pure .: g) <$> foo <*>> bar
2022-11-04 04:26:09 +0100 <lambdabot> MonadPlus m => (a1 -> a2 -> b) -> (a1 -> a2 -> b) -> m a1 -> m a2 -> m b
2022-11-04 04:26:19 +0100 <ski> @let oneOfM :: (Foldable t,MonadPlus m) => t a -> m a; oneOfM = foldr (mplus . return) mzero
2022-11-04 04:26:20 +0100 <lambdabot> Defined.
2022-11-04 04:26:24 +0100 <ski> @type \f g foo bar -> ((.: sequence) . (.: sequence)) oneOfM [f,g] <$> foo <*>> bar
2022-11-04 04:26:25 +0100 <lambdabot> MonadPlus m => (b1 -> a -> b2) -> (b1 -> a -> b2) -> m b1 -> m a -> m b2
2022-11-04 04:27:45 +0100 <ski> (and no, i'm not really suggesting you to use the more pointless forms .. that's mostly some gymnastics, while exploring the two alternatives)
2022-11-04 04:28:57 +0100 <ski> with the "before", you're first introducing a choice, then, in each branch, you perform `foo' and `bar'
2022-11-04 04:29:31 +0100 <ski> with the "after", you're first performing `foo' and `bar', then introduce branching (using `f' or `g')
2022-11-04 04:30:00 +0100 <ski> `Alternative' suffices for "before", while `MonadPlus' is needed for "after"
2022-11-04 04:30:50 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
2022-11-04 04:33:37 +0100 <ski> (otoh, i think `<*>>' can often be a handy operator)
2022-11-04 04:34:12 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
2022-11-04 04:35:56 +0100 <sm> phew, https://www.parsonsmatt.org/2022/10/29/spooky_masks_and_async_exceptions.html was a scary tale
2022-11-04 04:36:09 +0100 <Axman6> sm: `args = unsafePerformIO getArgs` is horrific... but I understand why it's been done that way; definitely saves a lot of plumbing for something which is essentially pure within the app
2022-11-04 04:36:34 +0100 <sm> just like an implicit Reader, right ?
2022-11-04 04:36:43 +0100 <Axman6> yeah
2022-11-04 04:37:29 +0100ski. o O ( distribution, mobile code marshalling )
2022-11-04 04:37:53 +0100 <Axman6> possibly consider making args = unsafePerformIO getArgs a top level definition (unexported) so it doesn't get rerun in each of the functions that call debugLevel
2022-11-04 04:38:09 +0100 <sm> good idea
2022-11-04 04:38:23 +0100 <Axman6> then I think you can get rid of all the NOINLINEs elsewhere
2022-11-04 04:38:56 +0100 <sm> I wasn't sure if those were needed, but I notice HLS warns me about them being missing now (sometimes)
2022-11-04 04:39:54 +0100 <sm> I don't know if OPTIONS_GHC -fno-cse is useful at all
2022-11-04 04:41:55 +0100Kaipei(~Kaiepi@108.175.84.104)
2022-11-04 04:42:50 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-11-04 04:47:50 +0100zaquest(~notzaques@5.130.79.72)
2022-11-04 04:49:34 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2022-11-04 04:50:54 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-11-04 04:53:55 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
2022-11-04 04:58:27 +0100razetime(~quassel@117.254.35.246) (Ping timeout: 255 seconds)
2022-11-04 05:02:49 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 05:02:54 +0100smremoves all pragmas HLS doesn't complain about
2022-11-04 05:03:44 +0100 <sm> hlint, actually
2022-11-04 05:04:24 +0100 <ski> .. keeping only those it complains about ?
2022-11-04 05:05:07 +0100 <sm> heh.. keeping the ones it wants me to keep
2022-11-04 05:06:35 +0100 <ski> which does it have an opinion about, here ?
2022-11-04 05:07:21 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 05:09:23 +0100 <sm> I just updated https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs and https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs showing the two it warns about (modifiedProgName and progArgs)
2022-11-04 05:09:43 +0100 <sm> s/Print/Debug/
2022-11-04 05:12:04 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
2022-11-04 05:12:08 +0100 <ski> `NOINLINE', ok
2022-11-04 05:14:55 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-11-04 05:15:31 +0100 <sm> I'm not sure why hlint doesn't complain about this unsafePerformIO user though:
2022-11-04 05:15:31 +0100 <sm> https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Debug.hs#L249
2022-11-04 05:15:58 +0100 <sm> or this one: https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs#L123
2022-11-04 05:17:26 +0100 <sm> ie, it doesn't require NOINLINE for those
2022-11-04 05:19:11 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-11-04 05:21:39 +0100king_gs(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 268 seconds)
2022-11-04 05:25:56 +0100simpleauthority(~simpleaut@user/simpleauthority) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-04 05:26:58 +0100simpleauthority(~simpleaut@user/simpleauthority)
2022-11-04 05:33:56 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-11-04 05:34:03 +0100mbuf(~Shakthi@49.205.86.6)
2022-11-04 05:38:52 +0100inversed(~inversed@bcdcac82.skybroadband.com)
2022-11-04 05:46:01 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 05:50:17 +0100Vajb(~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57) (Read error: Connection reset by peer)
2022-11-04 05:50:39 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2022-11-04 05:52:55 +0100raym(~ray@user/raym) (Quit: coming back with FreeBSD 13.1-p3)
2022-11-04 06:07:32 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 06:13:17 +0100tomku(~tomku@user/tomku) (Ping timeout: 240 seconds)
2022-11-04 06:17:07 +0100rembo10(~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-04 06:19:18 +0100rembo10(~rembo10@main.remulis.com)
2022-11-04 06:19:37 +0100raym(~ray@user/raym)
2022-11-04 06:20:20 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
2022-11-04 06:21:51 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-04 06:22:28 +0100tolt(~weechat-h@li219-154.members.linode.com) (Ping timeout: 248 seconds)
2022-11-04 06:28:25 +0100dcoutts__(~duncan@host81-156-211-164.range81-156.btcentralplus.com)
2022-11-04 06:29:27 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 06:31:27 +0100dcoutts_(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
2022-11-04 06:33:33 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-11-04 06:33:47 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds)
2022-11-04 06:33:53 +0100Vajb(~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57)
2022-11-04 06:36:13 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 06:40:26 +0100off^(~off@76.145.185.103) (Remote host closed the connection)
2022-11-04 06:41:14 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 06:44:35 +0100dcoutts(~duncan@host86-144-78-132.range86-144.btcentralplus.com)
2022-11-04 06:46:39 +0100dcoutts__(~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
2022-11-04 06:46:55 +0100dcoutts_(~duncan@host86-144-78-132.range86-144.btcentralplus.com)
2022-11-04 06:49:36 +0100dcoutts(~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 06:55:25 +0100dcoutts__(~duncan@host86-144-78-132.range86-144.btcentralplus.com)
2022-11-04 06:58:09 +0100dcoutts_(~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 06:58:25 +0100dcoutts(~duncan@host81-156-211-157.range81-156.btcentralplus.com)
2022-11-04 06:59:33 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Read error: Connection reset by peer)
2022-11-04 07:00:35 +0100dcoutts__(~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 272 seconds)
2022-11-04 07:02:29 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
2022-11-04 07:02:56 +0100_xor(~xor@74.215.182.83) (Read error: Connection reset by peer)
2022-11-04 07:03:07 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-11-04 07:05:35 +0100intelligent_boat(~intellibo@user/intelligent-boat/x-3514795)
2022-11-04 07:05:40 +0100arahael(~arahael@124.168.94.52) (Ping timeout: 248 seconds)
2022-11-04 07:06:20 +0100_xor(~xor@74.215.182.83)
2022-11-04 07:16:33 +0100arahael(~arahael@124.168.94.52)
2022-11-04 07:23:30 +0100chomwitt(~chomwitt@ppp-94-69-177-170.home.otenet.gr)
2022-11-04 07:24:56 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-04 07:26:13 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-04 07:31:01 +0100nate3(~nate@98.45.169.16)
2022-11-04 07:31:48 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 248 seconds)
2022-11-04 07:35:57 +0100nate3(~nate@98.45.169.16) (Ping timeout: 255 seconds)
2022-11-04 07:59:00 +0100kenran(~user@user/kenran)
2022-11-04 07:59:44 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-11-04 08:04:05 +0100lucerne(~lucerne@5.113.247.76)
2022-11-04 08:14:41 +0100tgi(~thegeekin@189.180.115.115) (Ping timeout: 272 seconds)
2022-11-04 08:14:43 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2022-11-04 08:15:30 +0100jtomas(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
2022-11-04 08:16:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 08:22:39 +0100manwithl-(~manwithlu@194.177.28.176) (Read error: Connection reset by peer)
2022-11-04 08:22:39 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-04 08:26:09 +0100manwithluck(~manwithlu@194.177.28.176)
2022-11-04 08:26:14 +0100 <Axman6> @hoogle stripPrefix
2022-11-04 08:26:15 +0100 <lambdabot> Data.List stripPrefix :: Eq a => [a] -> [a] -> Maybe [a]
2022-11-04 08:26:15 +0100 <lambdabot> GHC.OldList stripPrefix :: Eq a => [a] -> [a] -> Maybe [a]
2022-11-04 08:26:15 +0100 <lambdabot> Data.ByteString stripPrefix :: ByteString -> ByteString -> Maybe ByteString
2022-11-04 08:26:42 +0100 <Axman6> sm: this looks useful for the command line option parsing you're doing
2022-11-04 08:27:05 +0100 <Axman6> > Data.List.stripPrefix "--output=" "--output=hello"
2022-11-04 08:27:06 +0100 <lambdabot> Just "hello"
2022-11-04 08:27:32 +0100lucerne(~lucerne@5.113.247.76) (Remote host closed the connection)
2022-11-04 08:27:46 +0100skiwould like to be able to use that in a pattern synonym .. alas
2022-11-04 08:28:07 +0100 <sm> thanks!
2022-11-04 08:28:20 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 248 seconds)
2022-11-04 08:28:20 +0100acidjnk(~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de)
2022-11-04 08:28:29 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-11-04 08:29:04 +0100kuribas(~user@2a02:1810:2825:6000:f0b5:eba4:a391:e0d0)
2022-11-04 08:30:23 +0100 <tomsmeding> ski: why not?
2022-11-04 08:30:53 +0100shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-11-04 08:32:05 +0100 <ski> something like
2022-11-04 08:32:10 +0100 <ski> pattern (++) :: Eq a => [a] -> ([a] -> [a])
2022-11-04 08:32:18 +0100 <ski> pattern xs ++ ys <- (stripPrefix xs -> Just ys)
2022-11-04 08:32:20 +0100 <ski> or even
2022-11-04 08:32:26 +0100 <ski> pattern [ ] ++ ys <- ys
2022-11-04 08:32:27 +0100 <ski> pattern (x:xs) ++ ys <- x : xs ++ ys
2022-11-04 08:32:35 +0100 <ski> (recursively defined pattern synonym)
2022-11-04 08:32:49 +0100 <ski> (rename `++' to something else, if you prefer)
2022-11-04 08:34:49 +0100 <tomsmeding> ski: https://paste.tomsmeding.com/ln3QSYG5
2022-11-04 08:34:58 +0100 <tomsmeding> use as (Prefix @"prefix" s)
2022-11-04 08:35:10 +0100 <ski> tomsmeding : because pattern synonyms (as currently done .. unlike how functions in Mercury work, say), can only be applied to parameter patterns, not to parameter expressions. above, we define the pattern `xs ++ ys' for *expressions* `xs' and patterns `ys', in terms of pattern definentia (right-hand sides) (like `(stripPrefix xs -> Just ys)', or `ys', `x : xs ++ ys')
2022-11-04 08:35:28 +0100 <tomsmeding> yes, see paste :p
2022-11-04 08:35:50 +0100 <ski> hah, that's a cute trick :b
2022-11-04 08:36:10 +0100 <tomsmeding> don't use in code that other people need to understand lol
2022-11-04 08:36:20 +0100 <ski> in Mercury, one can declare
2022-11-04 08:36:32 +0100 <ski> :- func list(T) ++ list(T) = list(T).
2022-11-04 08:36:42 +0100 <ski> :- mode in ++ in = out is det.
2022-11-04 08:36:50 +0100 <ski> :- mode in ++ out = in is semidet.
2022-11-04 08:37:02 +0100 <tomsmeding> yeah prolog-likes cheat here
2022-11-04 08:37:10 +0100 <ski> [ ] ++ Ys = Ys .
2022-11-04 08:37:17 +0100acidjnk(~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
2022-11-04 08:37:34 +0100 <ski> [X|Xs] ++ Ys = [X|XsYs] :- XsYs = Xs ++ Ys.
2022-11-04 08:37:42 +0100 <ski> (or you can say just
2022-11-04 08:37:50 +0100 <ski> [X|Xs] ++ Ys = [X|Xs ++ Ys].
2022-11-04 08:37:53 +0100 <ski> if you prefer)
2022-11-04 08:38:12 +0100 <ski> (read `:-' roughly like `where')
2022-11-04 08:38:23 +0100 <ski> (it specifically means "if")
2022-11-04 08:39:43 +0100 <tomsmeding> I've done minor messing around in prolog a while ago, I think I can read this
2022-11-04 08:40:01 +0100 <tomsmeding> semidet is "doesn't match in multiple ways but might not match at all"?
2022-11-04 08:40:01 +0100 <ski> (well, actually, the second case of `++' above should be something like
2022-11-04 08:40:14 +0100 <ski> pattern (x0:xs) ++ ys <- x1 : xs ++ ys | x0 == x1
2022-11-04 08:40:15 +0100 <ski> )
2022-11-04 08:40:22 +0100lucerne(~lucerne@5.113.247.76)
2022-11-04 08:41:14 +0100jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-11-04 08:41:42 +0100 <ski> "semidet" means "at most one solution". or, if you prefer, `forall [Xs,XsYs] unique [Ys] Xs ++ Ys = XsYs' (where `unique' means "exists at most one")
2022-11-04 08:41:50 +0100 <ski> (that
2022-11-04 08:42:16 +0100 <tomsmeding> right that's what I was trying to say :p
2022-11-04 08:43:13 +0100 <ski> 's the declarative interpretation of that mode (taking the `in's and `out's into account). the operational interpretation is that prior to the call, the `in' parameters are known/instantiated/uninitialized, while the `out' parameters are unknown/uninstantiated/uninitialized (and after the call, in case of success, both are instantiated/known))
2022-11-04 08:44:49 +0100 <ski> ("det" means "exactly one solution", so `forall [Xs,Ys] exists_unique [XsYs] Xs ++ Ys = XsYs', which is the same as `forall [Xs,Ys] exists [XsYs0] forall [XsYs1] ( XsYs0 = XsYs1 <=> Xs ++ Ys = XsYs1 )')
2022-11-04 08:44:53 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2022-11-04 08:44:53 +0100califax(~califax@user/califx) (Ping timeout: 255 seconds)
2022-11-04 08:44:59 +0100califax_(~califax@user/califx)
2022-11-04 08:45:15 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 255 seconds)
2022-11-04 08:45:17 +0100lucerne(~lucerne@5.113.247.76) (Read error: Connection reset by peer)
2022-11-04 08:45:46 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-04 08:46:15 +0100califax_califax
2022-11-04 08:47:18 +0100 <ski> (while `forall [Xs,XsYs] unique [Ys] Xs ++ Ys = XsYs' means `forall [Xs,Ys0,Ys1,XsYs] ( Xs ++ Ys0 = XsYs,Xs ++ Ys1 = XsYs => Ys0 = Ys1)' .. which in this case can be rewritten as `forall [Xs,Ys0,Ys1] ( ( exists [XsYs] Xs ++ Ys0 = XsYs,Xs ++ Ys1 = XsYs ) => Ys0 = Ys1)', iow `forall [Xs,Ys0,Ys1] ( Xs ++ Ys0 = Xs ++ Ys1 => Ys0 = Ys1)', which we recognize as injectivity in the right parameter)
2022-11-04 08:47:37 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 272 seconds)
2022-11-04 08:48:16 +0100 <ski> (functional dependencies for type classes (being predicates/relations over types) can be interpreted declaratively in a similar way .. although they're less powerful than the Mercury mode declarations)
2022-11-04 08:48:42 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:7800:8d62:667f:9e70)
2022-11-04 08:49:57 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2022-11-04 08:50:20 +0100mncheck(~mncheck@193.224.205.254)
2022-11-04 08:51:11 +0100 <ski> Prolog is pretty neat .. and Mercury is quite cool, too
2022-11-04 08:51:43 +0100lucerne(~lucerne@5.113.247.76)
2022-11-04 08:57:09 +0100ft(~ft@80.141.189.89) (Quit: leaving)
2022-11-04 08:58:03 +0100razetime(~quassel@117.254.35.246)
2022-11-04 09:02:20 +0100m5zs7k(aquares@web10.mydevil.net) (Ping timeout: 252 seconds)
2022-11-04 09:03:18 +0100mbuf(~Shakthi@49.205.86.6) (Quit: Leaving)
2022-11-04 09:06:48 +0100m5zs7k(aquares@web10.mydevil.net)
2022-11-04 09:09:16 +0100odnes(~odnes@2a02:587:e907:c410::273)
2022-11-04 09:09:23 +0100odnes(~odnes@2a02:587:e907:c410::273) (Remote host closed the connection)
2022-11-04 09:10:28 +0100jargon(~jargon@174-22-194-21.phnx.qwest.net) (Ping timeout: 248 seconds)
2022-11-04 09:11:52 +0100chele(~chele@user/chele)
2022-11-04 09:14:02 +0100MajorBiscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
2022-11-04 09:14:11 +0100CiaoSen(~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-11-04 09:14:39 +0100ubert1(~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
2022-11-04 09:19:55 +0100Major_Biscuit(~MajorBisc@c-001-021-035.client.tudelft.eduvpn.nl)
2022-11-04 09:19:58 +0100jonathanx_(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-11-04 09:21:04 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-11-04 09:21:06 +0100cfricke(~cfricke@user/cfricke)
2022-11-04 09:21:35 +0100cyphase(~cyphase@user/cyphase)
2022-11-04 09:22:12 +0100jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 248 seconds)
2022-11-04 09:22:13 +0100MajorBiscuit(~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 255 seconds)
2022-11-04 09:24:42 +0100emmanuelux(~emmanuelu@user/emmanuelux) (Quit: au revoir)
2022-11-04 09:25:40 +0100cstml(~cstml@user/cstml)
2022-11-04 09:26:34 +0100AlexZenon(~alzenon@178.34.163.109) (Read error: Connection reset by peer)
2022-11-04 09:26:50 +0100AlexZenon(~alzenon@178.34.163.109)
2022-11-04 09:27:56 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-11-04 09:28:08 +0100 <cstml> Hi everyone, gentle reminder about the 2022 State of Haskell Survey.
2022-11-04 09:29:14 +0100 <dminuoso> Mmm, Im quite annoyed by the prevalence of `Int` across so many functions, when most of the time `Word` would be more suitable.
2022-11-04 09:29:37 +0100 <dminuoso> Every way I look at it, the numerics are for the most part extremely horribly done in Haskell.
2022-11-04 09:30:30 +0100 <dminuoso> On the one hand Haskell is frequently advertised as being "reliable" with a "strong and expressive type system", but at the same time we use `Int` in most places where a negative Integer will lead to crashes, corruption, be silently truncated, or do unexpected things..
2022-11-04 09:30:37 +0100 <dminuoso> And when we do fromIntegral, we get silent truncation everywhere.
2022-11-04 09:30:54 +0100michalz(~michalz@185.246.207.218)
2022-11-04 09:30:57 +0100 <dminuoso> IEEE 754 calculations have no traps either, so that's another big issue.
2022-11-04 09:31:46 +0100 <dminuoso> It's almost as if the widespread use of `Int` is admitting that people would be fromIntegral'ing their way between numbers anyway, and that the truncating behavior might as well be moved into call sites instead.
2022-11-04 09:32:06 +0100AlexNoo__AlexNoo
2022-11-04 09:34:12 +0100 <dminuoso> I would argue that dealing with numeric values is more fun in C than it is in Haskell. :(
2022-11-04 09:34:43 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 09:35:07 +0100jludwig(~justin@li657-110.members.linode.com) (Ping timeout: 272 seconds)
2022-11-04 09:35:38 +0100 <ski> dminuoso : would you expect `Word' rather than `Int' for `length' ?
2022-11-04 09:35:59 +0100 <ski> (i assume you'd want it for `take',`drop',`splitAt', at least)
2022-11-04 09:36:22 +0100 <dminuoso> Sure, or `timeout`, `replicateM`
2022-11-04 09:36:25 +0100 <ski> yea, the downcoercions with `fromIntegral' aren't nice
2022-11-04 09:36:38 +0100skinods
2022-11-04 09:37:42 +0100 <ski> what about `Word' subtraction ?
2022-11-04 09:38:43 +0100 <ski> (should one even perhaps have different types for modulo-`2^n' versions of `Word', and ones that signal on underflow & overflow ?)
2022-11-04 09:38:46 +0100 <dminuoso> So Im fine with the overflow semantics in principle, though one could conceive a `withTraps :: a -> a` kind of primitives that will turn overflows into bottom.
2022-11-04 09:39:01 +0100 <dminuoso> (Or via separate types, yes)
2022-11-04 09:39:48 +0100 <dminuoso> Though on second thought, withTraps will be hard to impossible to implement nicely in a call-by-name setting
2022-11-04 09:39:55 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
2022-11-04 09:40:14 +0100cstml(~cstml@user/cstml) (Quit: WeeChat 3.5)
2022-11-04 09:40:21 +0100 <dminuoso> But one could still conceive either separate methods from a different module (such that you could use `x Trap.- y`), or like you said with a different type
2022-11-04 09:40:25 +0100 <tomsmeding> yeah a separate type for with-traps computations would have clearer semantics
2022-11-04 09:40:28 +0100 <tomsmeding> or that
2022-11-04 09:40:36 +0100ski. o O ( should we have a `Word'-torsor ? )
2022-11-04 09:40:43 +0100 <tomsmeding> I feel like we should have an int-cast -like API instead of fromIntegral
2022-11-04 09:40:50 +0100 <dminuoso> tomsmeding: Absolutely agreed.
2022-11-04 09:40:58 +0100 <dminuoso> int-cast should be in base! :)
2022-11-04 09:41:10 +0100 <tomsmeding> I'm using it frighteningly rarely
2022-11-04 09:41:25 +0100 <ski> how would one do the coercions ?
2022-11-04 09:41:29 +0100 <ski> MPTCs ?
2022-11-04 09:41:44 +0100cstml(~cstml@user/cstml)
2022-11-04 09:41:44 +0100vpan(~0@212.117.1.172)
2022-11-04 09:41:50 +0100 <ski> (presumably one'd want to distinguish between upcoercions and downcoercions)
2022-11-04 09:41:56 +0100 <tomsmeding> ski: https://hackage.haskell.org/package/int-cast-0.2.0.0/docs/Data-IntCast.html
2022-11-04 09:43:59 +0100jonathanx_(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection)
2022-11-04 09:45:44 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 09:49:14 +0100 <ski> why are some properties using ⌜≡⌝ while others use `==' ?
2022-11-04 09:50:18 +0100 <tomsmeding> ¯\_(ツ)_/¯
2022-11-04 09:50:22 +0100 <ski> also, for `toInteger (intCastIso a) == toInteger b' (provided `toInteger a == toInteger b'), shouldn't `intCastIso a' here be required to have the same type as `b' ?
2022-11-04 09:50:42 +0100 <ski> (also, is `toInteger' not presumed to be injective ?)
2022-11-04 09:50:57 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
2022-11-04 09:51:14 +0100 <tomsmeding> ski: why would that be required?
2022-11-04 09:51:51 +0100 <ski> (which ?)
2022-11-04 09:52:06 +0100 <tomsmeding> that intCastIso a should have the same type as b
2022-11-04 09:52:22 +0100 <tomsmeding> also toInteger doesn't exist lol
2022-11-04 09:52:43 +0100 <ski> @type toInteger
2022-11-04 09:52:44 +0100 <lambdabot> Integral a => a -> Integer
2022-11-04 09:52:50 +0100 <tomsmeding> o
2022-11-04 09:53:18 +0100 <tomsmeding> ah it's a type class method of course, hence 's' on hackage doesn't show it directly
2022-11-04 09:53:20 +0100 <tomsmeding> I was fooled
2022-11-04 09:58:05 +0100 <ski> well, say `a' has type `Int64', while `b' has type `Int' (on a `64'-bit platform, as they say the table assumes). then if we take `toInteger (intCastIso a :: Word64)', it would seem this will probably not compare equal to `toInteger b' (given `toInteger a' and `toInteger b' compare equal)
2022-11-04 09:58:59 +0100 <ski> (e.g. `a = (-1) :: Int64' and `b = (-1) :: Int'. then `intCastIso a :: Word64' is presumably `maxBound :: Word64', which would still be positive after `toInteger')
2022-11-04 10:00:03 +0100BB[m](~cashmagem@2001:470:69fc:105::f6dc) (Quit: You have been kicked for being idle)
2022-11-04 10:00:03 +0100bb010g(~bb010g@2001:470:69fc:105::9a5) (Quit: You have been kicked for being idle)
2022-11-04 10:00:49 +0100merijn(~merijn@86.86.29.250)
2022-11-04 10:02:37 +0100 <tomsmeding> heh
2022-11-04 10:03:19 +0100 <tomsmeding> yeah that's a documentation bug
2022-11-04 10:03:54 +0100 <ski> (i would also expect `intCastIso' to be able to coerce from an integral type to itself ..)
2022-11-04 10:04:11 +0100 <tomsmeding> it can
2022-11-04 10:04:29 +0100 <tomsmeding> IsIntBaseTypeIso a a = 'True
2022-11-04 10:04:58 +0100 <ski> hm, ok. haven't gotten that far down yet
2022-11-04 10:05:07 +0100 <ski> (the table doesn't mention this)
2022-11-04 10:05:10 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:7800:8d62:667f:9e70) (Quit: WeeChat 2.8)
2022-11-04 10:05:33 +0100 <tomsmeding> but yeah that property is invalid
2022-11-04 10:05:49 +0100 <tomsmeding> the first one, that intCastIso is its own inverse, is valid though, I guess
2022-11-04 10:06:43 +0100 <tomsmeding> in fact that second listed property of intCastIso should be a property of intCastEq, it only holds if they really are the same representation with the same meaning
2022-11-04 10:06:52 +0100 <tomsmeding> (modulo newtype/data wrappers)
2022-11-04 10:07:19 +0100 <tomsmeding> well, no not same representation, but actually isomorphic in the sense of preserving all arithmetic operations
2022-11-04 10:07:50 +0100 <ski> presumably the latter property is meant to express that if you have two types which you can convert between, using `intCastIso', then given an element in the "overlap" (as measured by `toInteger' applied to both of them), then `intCastIso' maps one to the other (at least up to applying `toInteger' to both sides)
2022-11-04 10:08:36 +0100 <tomsmeding> hm, I guess that does hold, but it's not what the property says
2022-11-04 10:08:46 +0100 <tomsmeding> and it's hard to describe concisely
2022-11-04 10:08:53 +0100 <ski> it would say that, if it used a type ascription as i indicated
2022-11-04 10:09:53 +0100fserucas_(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-11-04 10:09:53 +0100 <tomsmeding> where exactly? 'toInteger (intCastIso a :: alpha) == toInteger (b :: alpha) if toInteger a == toInteger b'?
2022-11-04 10:10:51 +0100 <tomsmeding> hm, right, that plus the first property would give it
2022-11-04 10:10:54 +0100 <tomsmeding> cool
2022-11-04 10:10:59 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-11-04 10:11:35 +0100 <tomsmeding> also int-cast needs a metadata update to build with ghc-9
2022-11-04 10:11:50 +0100 <tomsmeding> which also shows it's underused
2022-11-04 10:12:06 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-11-04 10:12:38 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-04 10:14:19 +0100 <ski> ∀ α β (a ∷ α) (b ∷ β) . toInteger (intCastIso (a ∷ α) ∷ β) == (toInteger b ∷ β) = True ⇐ toInteger a == toInteger b = True ∧ Integral α ∧ Integral β ∧ IsIntTypeIso α β = 'True
2022-11-04 10:14:52 +0100 <tomsmeding> ski: toInteger (b ∷ β), not toInteger b ∷ β
2022-11-04 10:14:56 +0100 <tomsmeding> but yeah
2022-11-04 10:15:14 +0100 <ski> yea, sorry (meant to fix that, but forgot)
2022-11-04 10:15:20 +0100 <tomsmeding> or just toInteger b, given the ascription in the forall :p
2022-11-04 10:16:08 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
2022-11-04 10:16:25 +0100 <ski> toInteger (intCastIso a ∷ β) == toInteger (b ∷ β) = True ⇐ toInteger a == toInteger b = True -- if you leave the quantification implicit, as well as the presuppositions
2022-11-04 10:17:30 +0100 <tomsmeding> likely the most readable form
2022-11-04 10:17:56 +0100arjun(~arjun@user/arjun)
2022-11-04 10:17:57 +0100 <ski> (if they had used ⌜≡⌝ here, i'd've skipped the `= True' parts)
2022-11-04 10:19:32 +0100talismanick(~talismani@2601:200:c100:c9e0::1b0b) (Ping timeout: 246 seconds)
2022-11-04 10:20:05 +0100Feuermagier(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2022-11-04 10:21:10 +0100ski. o O ( "Torsors Made Easy" by John Baez in 2009-12-27 at <https://math.ucr.edu/home/baez/torsors.html> )
2022-11-04 10:27:03 +0100Luj3(~Luj@2a01:e0a:5f9:9681:1047:e6e7:4c5c:c3aa) (Quit: The Lounge - https://thelounge.chat)
2022-11-04 10:27:45 +0100Luj3(~Luj@2a01:e0a:5f9:9681:82ee:b48:2fc3:8107)
2022-11-04 10:28:32 +0100 <ski> (if you have (absolute) points, then the corresponding torsors are (relative) differences/vectors between them. you can add differences/vectors/torsors to each other, but you can't add absolute points to each other. you can add relative vectors to absolute points, though. e.g. adding `NominalDiffTime' to `UTCTime')
2022-11-04 10:29:07 +0100 <tomsmeding> or simply points in 2D space
2022-11-04 10:29:26 +0100 <tomsmeding> (works in nD, but most intuitive for n >= 2)
2022-11-04 10:29:35 +0100 <ski> yes. affine space vs. linear/vector space
2022-11-04 10:30:58 +0100 <tomsmeding> ah this is actually an example on the page
2022-11-04 10:31:38 +0100 <ski> affine space has affine combination of points (weighted average, where weights add up to `1')
2022-11-04 10:31:44 +0100 <tomsmeding> ski: so what was your point, consider Int to be a torsor of Word?
2022-11-04 10:32:00 +0100 <ski> something like that, yea
2022-11-04 10:32:08 +0100 <tomsmeding> not sure that's super helpful
2022-11-04 10:32:32 +0100 <ski> (or maybe `Int65' for `Word64' ?)
2022-11-04 10:32:38 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 10:33:14 +0100ski'sn't sure, either
2022-11-04 10:34:33 +0100 <ski> hm, i guess you get boundscrossing anyway, in one direction, or the other, or both, with finite range
2022-11-04 10:36:58 +0100 <ski> i think one reason i've heard people (e.g. in C) suggest to use signed rather than unsigned, even if negative doesn't make sense for some quantity in the problem domain, is it allow intermittent intermediate negative results in computations .. and also avoiding problems with `x >= 0', when decrementing `x' in a loop
2022-11-04 10:38:18 +0100 <ski> s/is it/is to/
2022-11-04 10:38:33 +0100 <dminuoso> ski: otoh signed overflow is undefined in most languages.
2022-11-04 10:38:46 +0100 <dminuoso> That easily offsets any perceived advantages
2022-11-04 10:38:51 +0100 <ski> yes
2022-11-04 10:39:25 +0100 <merijn> The problem with unsigned is that even in Haskell underflow is hard to detect properly
2022-11-04 10:39:57 +0100 <dminuoso> Well introducing additional primops for these operations that will bottom out is not difficult
2022-11-04 10:40:16 +0100 <dminuoso> (Yes, we still get into imprecise exception semantics, but its better than nothing)
2022-11-04 10:40:45 +0100 <dminuoso> The underlying CMM machinery is already in place
2022-11-04 10:41:14 +0100 <dminuoso> plusWord2# :: Word# -> Word# -> (# Word#, Word# #)
2022-11-04 10:41:37 +0100 <dminuoso> addWordC# :: Word# -> Word# -> (# Word#, Int# #)
2022-11-04 10:42:08 +0100 <dminuoso> So we have the necessary machinery
2022-11-04 10:43:24 +0100 <merijn> We have the technology!
2022-11-04 10:44:16 +0100arjun(~arjun@user/arjun) (Quit: Leaving)
2022-11-04 10:44:51 +0100 <ski> (one could do `i = count; do { i--; ..i.. } while (i > 0);' (or `i != 0') (possibly unsigned `i') rather than `i = count-1; while (i >= 0) { ..i.. i--; }' (signed `i'), though, assuming `count > 0')
2022-11-04 10:45:42 +0100 <dminuoso> At the very least we should have IEE754 traps.
2022-11-04 10:45:51 +0100 <ski> yes please
2022-11-04 10:46:49 +0100 <ski> (reminds me that `real' is (no longer) an `eqtype', in SML)
2022-11-04 10:47:47 +0100 <dminuoso> ski: However, its quite surprising how far people get with unlawful equality on IEEE754 numbers in JavaScript. I sometimes do wonder about the tradeoff of language elegancy and ergonomics.
2022-11-04 10:47:56 +0100 <ski> dminuoso : a whole word, instead of just a carry ?
2022-11-04 10:48:09 +0100thyriaen(~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1)
2022-11-04 10:48:20 +0100 <dminuoso> ski: It's just an artifact of old design. There's ongoing work to turn these primops into sized word types.
2022-11-04 10:48:56 +0100 <dminuoso> Until <=9.0 even the sized primtypes (e.g. Word8#/Int8#) were just mapped to Word#/Int#
2022-11-04 10:49:27 +0100 <dminuoso> which is why it didnt make a difference - but this is currently changing. not sure whether these particular primops are on the scope of the folks reworking them
2022-11-04 10:49:48 +0100 <ski> multiplication and division as well ?
2022-11-04 10:50:12 +0100 <dminuoso> Yes
2022-11-04 10:50:25 +0100 <dminuoso> I mean we already have: timesWord16# :: Word16# -> Word16# -> Word16# and the likes
2022-11-04 10:50:38 +0100olivermead(~olivermea@cpc72329-sotn15-2-0-cust205.15-1.cable.virginm.net) (Remote host closed the connection)
2022-11-04 10:50:50 +0100 <ski> so not `Word32#' result
2022-11-04 10:51:19 +0100 <dminuoso> Right, and unlike older GHC versions, this will in CMM actually be mapped to such short registers
2022-11-04 10:51:45 +0100 <ski> (also (tangentially) i'd like to see `mod n 0 = n' and `rem n 0 = n')
2022-11-04 10:51:58 +0100 <ski> (well, at least for `mod')
2022-11-04 10:52:05 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 10:52:19 +0100 <dminuoso> Can you elaborate your reason for that?
2022-11-04 10:52:40 +0100 <dminuoso> Is mod 0 commonly defined in some fields of mathematics?
2022-11-04 10:54:18 +0100 <ski> `mod n d' and `rem n d' chooses a representative of an equivalence class (coset) in ⌜ℤ ∕ (d⋅ℤ)⌝ (given ⌜n,d : ℤ⌝)
2022-11-04 10:54:38 +0100jludwig(~justin@li657-110.members.linode.com)
2022-11-04 10:55:24 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-11-04 10:55:24 +0100acidjnk(~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de)
2022-11-04 10:55:26 +0100 <dminuoso> But isnt ℤ/0 ~= ℤ?
2022-11-04 10:55:56 +0100 <dminuoso> Picking `rem n 0 = n` seems quite arbitrary here, it could according to this also be `minBound` or `maxBound` easily
2022-11-04 10:55:59 +0100 <dminuoso> Or 0.
2022-11-04 10:56:49 +0100 <ski> if ⌜d = 0⌝, then ⌜ℤ ∕ (0⋅ℤ)⌝ is just ⌜ℤ⌝. ⌜a ≡ b (mod 0)⌝ simply means ⌜a = b⌝ (generally ⌜a ≡ b (mod d)⌝ means ⌜d ∣ a − b⌝, iow ⌜∃ k : ℤ . a = b + k⋅d⌝)
2022-11-04 10:57:08 +0100 <ski> dminuoso : it's the only sensible choice (apart from leaving it undefined)
2022-11-04 10:59:30 +0100 <ski> also, if you have ⌜0 ⋅ _ = 0⌝ (non-strict), then you even get ⌜d ⋅ div n d + mod n d = n⌝, also when ⌜d = 0⌝
2022-11-04 11:01:24 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds)
2022-11-04 11:02:01 +0100 <ski> if you have an element ⌜g⌝ (always invertible) in a group, and you look at the sequence ⌜⋯,g⁻²,g⁻¹,1,g,g²,g³,⋯⌝, then if this sequence is periodic, with period ⌜p⌝, we say that ⌜p⌝ is the order of the element ⌜g⌝ (how many times one have to multiply it by itself to get back to ⌜1⌝)
2022-11-04 11:02:50 +0100teo_(~teo@user/teo)
2022-11-04 11:02:55 +0100 <ski> if the sequence never loops, then the correct period ⌜p⌝ to assign is ⌜0⌝ ! (people traditionally often say ⌜∞⌝, but i don't like this too much)
2022-11-04 11:02:57 +0100teo_teo
2022-11-04 11:04:31 +0100 <ski> the reason is that the correct ordering of periods to consider is the divisibility ordering ⌜∣⌝ (the multiplicative/geometric ordering), where ⌜0⌝ is the *greatest* element; rather than the usual (additive/arithmetic) ordering ⌜≤⌝
2022-11-04 11:05:23 +0100__monty__(~toonn@user/toonn)
2022-11-04 11:08:58 +0100 <ski> (the reason is that if ⌜m ∣ n⌝, then ⌜gᵐ = 1 ⇒ gⁿ = 1⌝ .. but that doesn't follow from ⌜m ≤ n⌝, in general. note that the claim that ⌜m⌝ is the order of ⌜g⌝ can be defined as ⌜∀ n. m ∣ n ⇔ gⁿ = 1⌝ .. which we read out aloud as "⌜m⌝ is the least ⌜n⌝ (in the divisibility order) such that ⌜gⁿ = 1⌝)
2022-11-04 11:10:23 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Remote host closed the connection)
2022-11-04 11:12:28 +0100 <tomsmeding> completely unrelated question: if you give cabal a too-new ghc with -w, it gives a "warning" and runs away. Can I convince cabal to just go on and try?
2022-11-04 11:13:12 +0100 <dminuoso> Whats the warning you get?
2022-11-04 11:13:23 +0100 <ski> (("universal") properties of the shape ⌜∀ y. x ≤ y ⇔ P y⌝ only make sense when ⌜P⌝ is a monotonic/increawsing/upper property, iow if ⌜x ≤ y⌝ and ⌜P x⌝, then ⌜P y⌝. so if ⌜P⌝ holds at a point, it also holds at all greater points. the property ⌜gⁿ = 1⌝ is monotonic/increasing in ⌜n⌝, only when the ordering we use is the divisibility ordering)
2022-11-04 11:13:38 +0100 <tomsmeding> dminuoso: "Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.6.2.0 supports 'ghc' version < 9.4): /path/to/ghc is version 9.5.20221103"
2022-11-04 11:14:01 +0100 <dminuoso> tomsmeding: its just a warning, no?
2022-11-04 11:14:09 +0100 <tomsmeding> that's what I thought
2022-11-04 11:14:13 +0100 <dminuoso> But?
2022-11-04 11:14:22 +0100 <tomsmeding> that's all it says, no more actions/output
2022-11-04 11:14:31 +0100 <merijn> It's not
2022-11-04 11:14:37 +0100 <merijn> cabal is not forward compatible
2022-11-04 11:14:44 +0100 <dminuoso> merijn: judging from the code, its just a warning.
2022-11-04 11:15:02 +0100 <dminuoso> So it may be that cabal silently crashes in a different place, but that particular diagnostic is not a fatal error.
2022-11-04 11:15:14 +0100 <merijn> I'm not saying the diagnostic is fatal
2022-11-04 11:15:18 +0100jludwig(~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
2022-11-04 11:15:28 +0100 <merijn> I'm saying "cabal is not forward compatible, so you have zero guarantees of success"
2022-11-04 11:15:34 +0100 <merijn> hence, the warning
2022-11-04 11:15:55 +0100 <dminuoso> tomsmeding: What happens if you run with -v3?
2022-11-04 11:16:01 +0100 <dminuoso> Can you observe it proceeding with anything?
2022-11-04 11:16:22 +0100 <tomsmeding> secretly it's not me that's getting this, it's a friend of mine; I'll ask him :)
2022-11-04 11:18:23 +0100Guest75(~Guest75@178.141.177.81)
2022-11-04 11:18:43 +0100 <tomsmeding> ah there _was_ more output: cabal subsequently complained about ghc-pkg which wasn't up to date with the custom too-new ghc
2022-11-04 11:19:01 +0100 <tomsmeding> telling him to fix the ghc install so that all tools get correctly installed before retrying :)
2022-11-04 11:22:32 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2022-11-04 11:26:16 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-11-04 11:27:15 +0100 <dminuoso> Okay so you're secretly playing proxy support while you yourself are being lied to!
2022-11-04 11:27:34 +0100 <dminuoso> That's a nice friend of yours.
2022-11-04 11:27:38 +0100 <tomsmeding> yes!
2022-11-04 11:27:38 +0100 <dminuoso> :p
2022-11-04 11:27:59 +0100 <tomsmeding> I mean, they did offer to ask the question here themselves, but I was faster
2022-11-04 11:29:25 +0100kuribas(~user@2a02:1810:2825:6000:f0b5:eba4:a391:e0d0) (Quit: ERC (IRC client for Emacs 27.1))
2022-11-04 11:30:37 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-11-04 11:31:03 +0100acidjnk(~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-11-04 11:31:21 +0100acidjnk(~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de)
2022-11-04 11:31:48 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-11-04 11:32:58 +0100jludwig(~justin@li657-110.members.linode.com)
2022-11-04 11:33:06 +0100nate3(~nate@98.45.169.16)
2022-11-04 11:35:32 +0100Kaipei(~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
2022-11-04 11:36:18 +0100acidjnk(~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2022-11-04 11:37:49 +0100nate3(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-11-04 11:39:51 +0100__monty__(~toonn@user/toonn) (Ping timeout: 255 seconds)
2022-11-04 11:45:49 +0100hugo1(~hugo@145.136.129.212)
2022-11-04 11:46:32 +0100__monty__(~toonn@user/toonn)
2022-11-04 11:51:48 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:f5b1:39e2:deb2:275)
2022-11-04 11:58:31 +0100king_gs(~Thunderbi@187.201.83.115)
2022-11-04 11:59:00 +0100chomwitt(~chomwitt@ppp-94-69-177-170.home.otenet.gr) (Ping timeout: 248 seconds)
2022-11-04 12:09:03 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com)
2022-11-04 12:10:52 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
2022-11-04 12:11:54 +0100jinsun(~jinsun@user/jinsun)
2022-11-04 12:14:03 +0100ubert1(~Thunderbi@178.115.71.138.wireless.dyn.drei.com) (Ping timeout: 255 seconds)
2022-11-04 12:15:41 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Ping timeout: 276 seconds)
2022-11-04 12:16:05 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
2022-11-04 12:17:30 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 12:21:38 +0100Guest|51(~Guest|51@95.10.63.122)
2022-11-04 12:22:11 +0100Guest|51(~Guest|51@95.10.63.122) (Client Quit)
2022-11-04 12:24:22 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-04 12:24:51 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-04 12:29:30 +0100 <merijn> Once again the Haskell Survey question on extensions is a mess that forces kinda misleading answers
2022-11-04 12:30:15 +0100king_gs(~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
2022-11-04 12:31:48 +0100king_gs(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
2022-11-04 12:33:20 +0100 <[exa]> and prolog is again missing
2022-11-04 12:34:22 +0100LarchOye1(nonmoose@2604:2d80:6789:9100:b1fe:b223:d6bb:6b68)
2022-11-04 12:34:36 +0100LarchOye1(nonmoose@2604:2d80:6789:9100:b1fe:b223:d6bb:6b68) ()
2022-11-04 12:36:44 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-04 12:38:04 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-04 12:38:08 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
2022-11-04 12:39:35 +0100 <AndreasK> merijn: In what way?
2022-11-04 12:42:02 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
2022-11-04 12:42:02 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-04 12:43:00 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-04 12:43:34 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-11-04 12:44:13 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-04 12:44:32 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-04 12:44:58 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
2022-11-04 12:45:30 +0100pitiK3U(~Piti@user/pitiK3U)
2022-11-04 12:45:51 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 12:48:00 +0100tureba(~tureba@tureba.org) (Ping timeout: 268 seconds)
2022-11-04 12:51:06 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
2022-11-04 12:52:18 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 255 seconds)
2022-11-04 12:52:46 +0100kuribas(~user@2a02:1810:2825:6000:75a5:ce7d:3131:4615)
2022-11-04 12:54:28 +0100hueso(~root@user/hueso) (Ping timeout: 248 seconds)
2022-11-04 12:55:58 +0100acidjnk(~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de)
2022-11-04 12:58:01 +0100hueso(~root@user/hueso)
2022-11-04 13:00:28 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 255 seconds)
2022-11-04 13:00:28 +0100fserucas_(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 255 seconds)
2022-11-04 13:07:01 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 13:08:39 +0100 <dminuoso> Regarding setSocketCloseOnExec: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
2022-11-04 13:09:00 +0100 <dminuoso> Why exactly would it be necessary to set close on exec on the socket?
2022-11-04 13:09:33 +0100 <dminuoso> Ive went through the manual pages of open(2) and socket(2) a few times, but the wording is way too abstract for me to come up with concrete examples why not doing this could be problematic
2022-11-04 13:10:22 +0100CiaoSen(~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2022-11-04 13:11:32 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 13:12:38 +0100 <dminuoso> It seems to cause problems, the haskell server code would have to `fork` first (which already seems notoriously unsafe with GHC RTS), in which case the forked process would have a valid file descriptor to my socket in the haskell server
2022-11-04 13:14:01 +0100 <dminuoso> The thing that confuses me most, is the wording in the haddock documentation "into processes fork/exec'ed by the shell". Surely running `my-haskell-server&` in a shell will not leak the file descriptor to the outside shell
2022-11-04 13:16:09 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
2022-11-04 13:17:05 +0100 <tomsmeding> dminuoso: isn't the idea of close-on-exec that child processes you start don't inherit the socket?
2022-11-04 13:17:53 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-11-04 13:18:26 +0100 <dminuoso> Right, but the only way this would ever be a problem in haskell if you used forkProcesses, in which case you're already insane.
2022-11-04 13:19:02 +0100 <tomsmeding> dminuoso: doesn't the same happen through other ways of spawning processes?
2022-11-04 13:19:11 +0100 <tomsmeding> e.g. System.Process stuff
2022-11-04 13:19:57 +0100 <tomsmeding> I've been using withCreateProcess and fd's were inherited
2022-11-04 13:20:31 +0100Kaipei(~Kaiepi@108.175.84.104)
2022-11-04 13:21:06 +0100 <dminuoso> I find forking to be a really strange concept that wont make sense.
2022-11-04 13:21:25 +0100 <dminuoso> But anyway, I suppose withCreateProcess will end up calling execve or some such, uh?
2022-11-04 13:21:32 +0100 <tomsmeding> one need not fork to get this
2022-11-04 13:21:36 +0100 <tomsmeding> it will use posix_spawn
2022-11-04 13:21:49 +0100 <tomsmeding> (if available, otherwise vfork/exec iirc)
2022-11-04 13:21:54 +0100 <dminuoso> Okay, but close-on-exec wouldnt affect that.
2022-11-04 13:21:59 +0100 <dminuoso> Only if exec was used.
2022-11-04 13:22:07 +0100 <dminuoso> close-on-exec is documented to only affect fork/exec calls.
2022-11-04 13:22:14 +0100 <tomsmeding> really?
2022-11-04 13:22:33 +0100 <dminuoso> Hold on
2022-11-04 13:22:42 +0100 <tomsmeding> dminuoso: from the posix_spawn manpage: "3. File descriptors with the FD_CLOEXEC flag set are closed."
2022-11-04 13:22:55 +0100 <tomsmeding> otherwise CLOEXEC would be utterly useless
2022-11-04 13:23:00 +0100 <tomsmeding> well not utterly, but very
2022-11-04 13:23:31 +0100fserucas(~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
2022-11-04 13:23:33 +0100 <dminuoso> No this is a glibc documentation bug then possibly
2022-11-04 13:23:35 +0100 <dminuoso> https://www.gnu.org/software/libc/manual/html_node/Descriptor-Flags.html
2022-11-04 13:23:41 +0100 <dminuoso> This flag specifies that the file descriptor should be closed when an exec function is invoked; see Executing a File.
2022-11-04 13:23:43 +0100fserucas_(~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
2022-11-04 13:23:53 +0100 <dminuoso> https://www.gnu.org/software/libc/manual/html_node/Executing-a-File.html
2022-11-04 13:24:08 +0100 <tomsmeding> you know what's another glibc documentation bug? can write(2) return 0 on a non-O_NONBLOCK fd
2022-11-04 13:24:08 +0100 <dminuoso> Sorry, I had this documentation in mind
2022-11-04 13:24:40 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-04 13:24:57 +0100dminuosodoes not want to depend on `unix` just to set close on exec... :(
2022-11-04 13:25:00 +0100Patternmaster(~georg@user/Patternmaster) (Ping timeout: 268 seconds)
2022-11-04 13:25:02 +0100 <tomsmeding> right, that could take clarification
2022-11-04 13:25:20 +0100 <tomsmeding> though posix_spawn is documented as simulating a specific usecase of fork/exec
2022-11-04 13:25:45 +0100 <tomsmeding> I've also gotten error codes from posix_spawn that are not documented as possible codes
2022-11-04 13:25:54 +0100 <dminuoso> "In fact, they provide only a subset of the functionality that can be achieved by using the system calls."
2022-11-04 13:26:04 +0100 <tomsmeding> I think taking statements like this to exclude all other possibilities is fraught in unix documentation
2022-11-04 13:26:05 +0100 <dminuoso> Which really reads as "please read both manuals side-by-side and figure out the differences"
2022-11-04 13:26:26 +0100 <tomsmeding> no, it means "the relation is only on a high level, the implementation is completely separate, read this manual page in full"
2022-11-04 13:26:35 +0100 <dminuoso> fair enough
2022-11-04 13:26:38 +0100Guest75(~Guest75@178.141.177.81) (Ping timeout: 260 seconds)
2022-11-04 13:26:39 +0100 <tomsmeding> this documentation is not maths, unfortunately
2022-11-04 13:26:48 +0100 <tomsmeding> but getting it watertight would blow up size by 10x probably
2022-11-04 13:26:51 +0100 <tomsmeding> also not ideal
2022-11-04 13:27:13 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 13:27:29 +0100 <dminuoso> But actually... mmm. I want signal handling anyway. So `unix` it is.
2022-11-04 13:31:53 +0100 <tomsmeding> dminuoso: it's a boot lib, it's not that bad
2022-11-04 13:32:11 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
2022-11-04 13:32:12 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
2022-11-04 13:32:12 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-11-04 13:32:18 +0100pitiK3U(~Piti@user/pitiK3U) (Read error: Connection reset by peer)
2022-11-04 13:32:42 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-11-04 13:32:48 +0100xff0x(~xff0x@2405:6580:b080:900:dde7:2b6c:97ae:a5eb)
2022-11-04 13:33:09 +0100 <tomsmeding> most of the things in the manpage for a function will actually happen
2022-11-04 13:33:21 +0100 <tomsmeding> but if it's not in the manpage, it might still happen! :D
2022-11-04 13:33:39 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-11-04 13:34:46 +0100jonathanx_(~jonathan@c-5eea602c-74736162.cust.telenor.se)
2022-11-04 13:35:16 +0100 <merijn> dminuoso: Time to buy the book I keep telling everyone about
2022-11-04 13:35:18 +0100 <merijn> dminuoso: No
2022-11-04 13:35:25 +0100 <merijn> dminuoso: You don't want signal handling >.<
2022-11-04 13:35:53 +0100 <merijn> you just think you do, because it seems like something that, you know, sane semantics
2022-11-04 13:36:00 +0100 <merijn> Instead of being an eldritch nightmare
2022-11-04 13:37:22 +0100[Leary](~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
2022-11-04 13:37:25 +0100 <dminuoso> No I do want it.
2022-11-04 13:37:41 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds)
2022-11-04 13:37:42 +0100 <dminuoso> I kind of like a controlled graceful shutdown on SIGINT/SIGTERM.
2022-11-04 13:37:44 +0100[Leary](~Leary]@user/Leary/x-0910699)
2022-11-04 13:37:59 +0100 <merijn> Well, you can't have that in Haskell, atm :p
2022-11-04 13:38:04 +0100 <dminuoso> Sure I can,.
2022-11-04 13:38:16 +0100 <dminuoso> It may not behave well in exotic edge cases, but in practice it does work.
2022-11-04 13:38:41 +0100acidjnk(~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2022-11-04 13:40:33 +0100 <merijn> dminuoso: Anyway, time to invest in a copy of APUE ;)
2022-11-04 13:40:39 +0100 <dminuoso> Mmm, its actually on my shelf
2022-11-04 13:41:16 +0100 <merijn> That coulda answered all your CLOEXEC like questions :p
2022-11-04 13:42:55 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 13:43:50 +0100[Leary](~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
2022-11-04 13:44:09 +0100[Leary](~Leary]@user/Leary/x-0910699)
2022-11-04 13:45:20 +0100hughjfchen(~hughjfche@vmi556545.contaboserver.net)
2022-11-04 13:47:41 +0100hugo1(~hugo@145.136.129.212) (Quit: WeeChat 3.5)
2022-11-04 13:47:59 +0100Neuromancer(~Neuromanc@user/neuromancer) (Quit: Going offline, see ya! (www.adiirc.com))
2022-11-04 13:59:00 +0100razetime(~quassel@117.254.35.246) (Ping timeout: 248 seconds)
2022-11-04 13:59:57 +0100simendsjo(~user@84.211.91.241)
2022-11-04 14:00:47 +0100jonathanx__(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-11-04 14:01:36 +0100causal(~user@50.35.83.177) (Quit: WeeChat 3.7.1)
2022-11-04 14:03:16 +0100jonathanx_(~jonathan@c-5eea602c-74736162.cust.telenor.se) (Ping timeout: 248 seconds)
2022-11-04 14:06:26 +0100simendsjo(~user@84.211.91.241) (Remote host closed the connection)
2022-11-04 14:13:00 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
2022-11-04 14:16:32 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-04 14:17:21 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Ping timeout: 255 seconds)
2022-11-04 14:22:48 +0100 <merijn> Someone at the Haskell Survey also needs to update where they're getting their country list from...
2022-11-04 14:22:55 +0100 <merijn> "Netherland Antilles"??
2022-11-04 14:23:13 +0100 <merijn> Those haven't existed for well over a decade now
2022-11-04 14:26:01 +0100nschoe(~q@141.101.51.197)
2022-11-04 14:26:54 +0100 <vpan> hi, is it possible to skip records when parsing using cassava? https://hackage.haskell.org/package/cassava-0.5.3.0/docs/Data-Csv.html#t:FromRecord mentions `empty`, `mzero`, `fail`, but I can't find a way to indicate skipping instead of failure. I could filter after loading all records, but that feels like a workaround.
2022-11-04 14:29:31 +0100 <kuribas> vpan: no, you'll need to filter after parsing.
2022-11-04 14:29:45 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
2022-11-04 14:31:56 +0100 <tomsmeding> merijn: I recently made an account somewhere that had a country list with the antilles included, but something like "(formerly)" appended
2022-11-04 14:32:49 +0100Sauvin(~sauvin@user/Sauvin) (Quit: Leaving)
2022-11-04 14:33:24 +0100 <__monty__> vpan: Though through things like fusion "filtering after parsing" may actually happen during parsing.
2022-11-04 14:34:16 +0100marienz(~marienz@libera/staff/marienz) (Ping timeout: 615 seconds)
2022-11-04 14:35:26 +0100tomku(~tomku@user/tomku)
2022-11-04 14:35:39 +0100Sauvin(~sauvin@user/Sauvin)
2022-11-04 14:36:00 +0100 <vpan> __monty__: sounds interesting, but I'm implementing my first application in Haskell, so I think I should maybe leave fusion alone for a while :)
2022-11-04 14:36:13 +0100 <merijn> tomsmeding: I see the Netherlands Antilles in many places, which makes me kinda curious were people are getting these wildly outdated country lists (and what else is wrong on them)
2022-11-04 14:39:01 +0100 <kuribas> vpan: you don't have a choice :)
2022-11-04 14:40:43 +0100 <vpan> well then, as long as it's not cold fusion...
2022-11-04 14:41:13 +0100marienz(~marienz@libera/staff/marienz)
2022-11-04 14:41:43 +0100 <__monty__> vpan: It's just something that can happen in the background and is a good thing when it does. Makes certain things that look inefficient efficient.
2022-11-04 14:44:12 +0100 <vpan> __monty__: ok, then that sounds like a kind of optimization. I don't think I've heard fusion in Haskell context, so I assumed "if you don't know fusion, you don't need it". :)
2022-11-04 14:45:49 +0100 <geekosaur> sometimes you do need to rearrange code to encourage it to happen, but 90+% of the time the compiler does it for you
2022-11-04 14:46:05 +0100 <geekosaur> and the times it doesn't are usually worth bug reports somewhere
2022-11-04 14:46:28 +0100motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
2022-11-04 14:46:41 +0100paddymahoney(~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
2022-11-04 14:47:19 +0100shriekingnoise(~shrieking@186.137.167.202)
2022-11-04 14:48:57 +0100Sgeo(~Sgeo@user/sgeo)
2022-11-04 14:49:03 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-11-04 14:50:35 +0100kuribas(~user@2a02:1810:2825:6000:75a5:ce7d:3131:4615) (Quit: ERC (IRC client for Emacs 27.1))
2022-11-04 14:51:24 +0100king_gs(~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Quit: king_gs)
2022-11-04 14:51:30 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 14:52:11 +0100thyriaen(~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) (Remote host closed the connection)
2022-11-04 14:52:55 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
2022-11-04 14:53:01 +0100chomwitt(~chomwitt@athedsl-351939.home.otenet.gr)
2022-11-04 14:54:56 +0100wand(~user@gateway/tor-sasl/wand)
2022-11-04 14:56:04 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 14:58:49 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 14:59:12 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 246 seconds)
2022-11-04 14:59:51 +0100Xeroine(~Xeroine@user/xeroine)
2022-11-04 15:00:10 +0100motherfsck(~motherfsc@user/motherfsck)
2022-11-04 15:03:22 +0100megaTherion(~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-04 15:05:01 +0100Heyting(~Heyting@193.198.16.217)
2022-11-04 15:05:07 +0100megaTherion(~therion@unix.io)
2022-11-04 15:05:30 +0100Heyting(~Heyting@193.198.16.217) (Client Quit)
2022-11-04 15:09:55 +0100dcoutts_(~duncan@host81-156-211-157.range81-156.btcentralplus.com)
2022-11-04 15:10:36 +0100Heyting(~Heyting@193.198.16.217)
2022-11-04 15:10:59 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-04 15:11:46 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-04 15:12:36 +0100dcoutts(~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 248 seconds)
2022-11-04 15:18:56 +0100dcoutts__(~duncan@host81-156-211-157.range81-156.btcentralplus.com)
2022-11-04 15:21:42 +0100dcoutts_(~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 15:22:14 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-04 15:22:22 +0100thegeekinside(~thegeekin@189.180.115.115)
2022-11-04 15:24:24 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-04 15:25:24 +0100dcoutts_(~duncan@host81-156-211-157.range81-156.btcentralplus.com)
2022-11-04 15:28:00 +0100dcoutts__(~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 15:29:52 +0100juri_(~juri@84-19-175-179.pool.ovpn.com) (Ping timeout: 250 seconds)
2022-11-04 15:30:45 +0100razetime(~quassel@117.254.35.246)
2022-11-04 15:33:56 +0100shachaf(~shachaf@user/shachaf) (Ping timeout: 276 seconds)
2022-11-04 15:34:12 +0100nate3(~nate@98.45.169.16)
2022-11-04 15:36:02 +0100juri_(~juri@84.19.175.179)
2022-11-04 15:36:24 +0100irrgit_(~irrgit@146.70.27.250)
2022-11-04 15:39:17 +0100nate3(~nate@98.45.169.16) (Ping timeout: 272 seconds)
2022-11-04 15:40:55 +0100dcoutts__(~duncan@host109-149-38-108.range109-149.btcentralplus.com)
2022-11-04 15:43:16 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2022-11-04 15:43:43 +0100dcoutts_(~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
2022-11-04 15:45:59 +0100tureba(~tureba@tureba.org)
2022-11-04 15:46:17 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 15:48:21 +0100nisstyre(wes@user/nisstyre)
2022-11-04 15:48:41 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-04 15:51:14 +0100dcoutts(~duncan@host109-149-38-108.range109-149.btcentralplus.com)
2022-11-04 15:53:39 +0100dcoutts__(~duncan@host109-149-38-108.range109-149.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 15:54:54 +0100dcoutts_(~duncan@host109-149-38-108.range109-149.btcentralplus.com)
2022-11-04 15:54:58 +0100shachaf(~shachaf@user/shachaf)
2022-11-04 15:55:05 +0100tolt(~weechat-h@li219-154.members.linode.com)
2022-11-04 15:56:53 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Remote host closed the connection)
2022-11-04 15:57:16 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 15:57:42 +0100dcoutts(~duncan@host109-149-38-108.range109-149.btcentralplus.com) (Ping timeout: 255 seconds)
2022-11-04 16:01:08 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 16:02:51 +0100Heyting(~Heyting@193.198.16.217) (Quit: Connection closed)
2022-11-04 16:06:44 +0100SridharRatnakuma(~sridmatri@2001:470:69fc:105::1c2)
2022-11-04 16:08:42 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-04 16:09:51 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
2022-11-04 16:14:58 +0100 <lortabac> I have a memory leak that is (for various reasons) impossible to reproduce locally. Is it a bad idea to run the profiler in production?
2022-11-04 16:15:58 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-11-04 16:16:09 +0100 <merijn> Depends, are performance regression in production a problem?
2022-11-04 16:16:14 +0100wand(~user@gateway/tor-sasl/wand) (Ping timeout: 255 seconds)
2022-11-04 16:16:21 +0100 <merijn> i.e. "define production"
2022-11-04 16:17:17 +0100 <lortabac> production is what the customers are actually using
2022-11-04 16:17:37 +0100 <lortabac> a little performance regression is not a problem
2022-11-04 16:17:52 +0100 <merijn> I would not assume "little"
2022-11-04 16:17:53 +0100 <lortabac> it's a low-traffic service
2022-11-04 16:18:01 +0100 <merijn> You can easily have 10x slowdown
2022-11-04 16:18:38 +0100 <lortabac> erm... I think 10x would not be acceptable
2022-11-04 16:19:04 +0100 <lortabac> up to 2x-3x I would say it's ok
2022-11-04 16:19:15 +0100 <merijn> Then it's probably not a great idea in production unless you test how big the impact is first :p
2022-11-04 16:19:44 +0100 <lortabac> I imagined the profiler to have a smaller impact
2022-11-04 16:19:56 +0100 <jlgw_> lortabac: Maybe you can set up a staging environment?
2022-11-04 16:20:22 +0100 <lortabac> we already have various environments, but the leak is only visible in production
2022-11-04 16:20:35 +0100Franciman(~Franciman@mx1.fracta.dev)
2022-11-04 16:21:55 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2022-11-04 16:21:55 +0100jludwig(~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
2022-11-04 16:22:18 +0100CiaoSen(~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-11-04 16:22:54 +0100jludwig(~justin@li657-110.members.linode.com)
2022-11-04 16:24:04 +0100 <merijn> lortabac: the profiler needs cost centers which inhibits certain optimisations
2022-11-04 16:24:29 +0100 <merijn> So depending on how crucial those are for your performance you might have MASSIVE regression or "hardly any"
2022-11-04 16:27:29 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 16:27:52 +0100 <lortabac> merijn: thanks, I will try to avoid profiling in production for the moment
2022-11-04 16:28:07 +0100econo(uid147250@user/econo)
2022-11-04 16:28:25 +0100 <lortabac> if I really need it, I will get some performance data first
2022-11-04 16:28:43 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2022-11-04 16:28:44 +0100 <merijn> lortabac: There's some work on other ways to profile nowadays too, e.g., DWARF symbols
2022-11-04 16:28:49 +0100 <merijn> which should have less/no overhead
2022-11-04 16:29:00 +0100 <merijn> but you have to consult the GHC user guide for details
2022-11-04 16:32:14 +0100abhiroop_(~abhiroop@c-5eea67ce-74736162.cust.telenor.se)
2022-11-04 16:32:29 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
2022-11-04 16:33:08 +0100abhiroop(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
2022-11-04 16:33:39 +0100 <lortabac> I don't think I can get a heap profile with DWARF, can I?
2022-11-04 16:34:28 +0100 <merijn> ah, yeah, I guess not
2022-11-04 16:34:36 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
2022-11-04 16:38:03 +0100 <simple> tfw you come to programming channel, and fear asking a bad question so much that you google it a bit more to be able to refer to it with better words, and you end up solving it yourself
2022-11-04 16:38:34 +0100 <geekosaur> we don't bite 🙂 the only bad question is the one that isn't asked
2022-11-04 16:41:21 +0100 <simple> I do wonder if i did it the best way though. I'm building a server that can accept multiple connections, and needs to track state. Before you comment on that, I'm just trying to capture the time of startup in a (gasp) global variable in module Main, so i can hPutStr something like 'this server was started at 2022-11-04 08:41:24'
2022-11-04 16:42:05 +0100 <simple> since time is an IO monady thingy, it made it a bit difficult..
2022-11-04 16:42:38 +0100 <c_wraith> does it need to be global, or just available to your connection handlers?
2022-11-04 16:43:09 +0100 <simple> well, there are a few different functions that would need it, but not many
2022-11-04 16:43:19 +0100 <merijn> MVar/IORef?
2022-11-04 16:43:40 +0100 <simple> i come from a Perl background, so that probably helps you with my thought process
2022-11-04 16:45:25 +0100jtomas(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 246 seconds)
2022-11-04 16:45:26 +0100 <simple> serverStartTime :: () -> Int \n serverStartTime () = do \n now <- getCurrentTime \n show now
2022-11-04 16:45:47 +0100 <simple> it compiles, at least..
2022-11-04 16:45:51 +0100 <lortabac> simple: can't you just pass 'now' to all the functions that need it?
2022-11-04 16:45:59 +0100 <c_wraith> While it's possible to create global variables, it's.. dangerous. Haskell really isn't intended to work that way, so there are a lot of pitfalls; places the compiler might do something weird because it's designed with the assumption that top-level values are pure and immutable.
2022-11-04 16:46:27 +0100 <merijn> simple: eh, it is *highly* suspicious that compiles :p
2022-11-04 16:46:34 +0100 <merijn> Can you pastebin the entire main?
2022-11-04 16:46:35 +0100 <simple> yeah.. it doesn't, sorry
2022-11-04 16:47:01 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 16:47:03 +0100 <simple> i guess i didn't finish it last night when my eyes were falling shut
2022-11-04 16:47:21 +0100 <c_wraith> It's much more common to be explicit about these things and pass values around as needed. Maybe a bunch of them packaged up together into an Environment type that could hold a bunch of these concerns
2022-11-04 16:47:35 +0100 <simple> i can pastebin the whole thing, it's an attempt at building a whole IRCD in Haskell
2022-11-04 16:48:27 +0100 <merijn> simple: I mean, I'd just do "getCurrentTime" in main and pass the result to any further code, as lortabac suggests
2022-11-04 16:48:43 +0100 <simple> https://paste.tomsmeding.com/SCbGYyLi
2022-11-04 16:49:30 +0100 <simple> i'm pretty sure there's a lot of naive code in that pastebin right now
2022-11-04 16:50:08 +0100 <merijn> simple: I mean, why can't the current time be an argument to "premotd" (via an extra argument to processConnect)?
2022-11-04 16:50:26 +0100 <simple> i don't want the current time, i want the time that the server started
2022-11-04 16:50:31 +0100 <merijn> simple: Yes
2022-11-04 16:51:16 +0100 <merijn> simple: You just do "now <- getCurrentTime" after the ' putStrLn "Listening on 6667..."' and pass 'now' as extra argument to processConnect?
2022-11-04 16:52:10 +0100 <simple> then i would have to pass it around to everything else too in a dependency chain?
2022-11-04 16:52:36 +0100 <merijn> Sure
2022-11-04 16:52:46 +0100seriley(~seriley@97-120-69-62.ptld.qwest.net)
2022-11-04 16:52:59 +0100 <merijn> But how many places do you need to pass it too, seems like just one
2022-11-04 16:53:33 +0100 <geekosaur> do you not have other top level state? I'd think you would have server configuration options
2022-11-04 16:53:38 +0100 <simple> i understand that would work. it does feel awful weird to me though, having always used globally available variables
2022-11-04 16:54:03 +0100 <merijn> simple: Global variables aren't really thing and global variables based on IO are even less of a thing
2022-11-04 16:54:07 +0100 <simple> geekosaur: yeah, the plan is to create a settings file eventually, i was trying to hardcode it at the top
2022-11-04 16:54:09 +0100 <merijn> Especially if you value sanity
2022-11-04 16:54:31 +0100 <merijn> simple: Normally you'd define a Config datatype and use something like ReaderT to propagate the entire config type through your application
2022-11-04 16:54:32 +0100 <geekosaur> we prefer to be explicit about it, so you always know what's available when. and these days globals are somewhat frowned upon even in languages that have them, just because they complicate reasoning about code
2022-11-04 16:54:59 +0100 <merijn> And then everything just has a explicit Config argument
2022-11-04 16:56:03 +0100simplenods
2022-11-04 16:56:20 +0100 <simple> that makes more sense, thank you merijn, geekosaur
2022-11-04 16:56:46 +0100 <simple> c_wraith: documention somewhere about Environment type?
2022-11-04 16:57:24 +0100 <merijn> simple: He just means what I said some custom ADT holding the config :p
2022-11-04 16:57:25 +0100 <geekosaur> also if you plumb your config now it means you don't have to rewrite everything later when you want to add server config
2022-11-04 16:57:39 +0100 <simple> merijn: this Config? https://hackage.haskell.org/package/config-value-0.8.3/docs/Config.html
2022-11-04 16:58:41 +0100 <simple> probably not that link, ugh
2022-11-04 16:58:44 +0100 <geekosaur> no, you'd define something specific to your application
2022-11-04 16:59:07 +0100 <merijn> No, just a datatype you define for yourself, like "data Config = Config { serverUrl :: String, serverPort :: Int, serverStart :: Time, ... }"
2022-11-04 16:59:55 +0100 <simple> that even makes it easier to hardcode it short-term. but i'll have to pass around that whole config instance too, right?
2022-11-04 17:00:03 +0100Orbstheorem(~orbstheor@2001:470:69fc:105::a56) (Quit: You have been kicked for being idle)
2022-11-04 17:00:18 +0100 <merijn> simple: You'd pass around the whole config thing yes
2022-11-04 17:00:23 +0100teo(~teo@user/teo) (Ping timeout: 276 seconds)
2022-11-04 17:00:34 +0100 <geekosaur> so, I'm one of the maintainers of xmonad, a window manager written in Haskell. we have an XConf holding te user config, a connection to the X server, and various other read-only configuration values. there's also an XState holding the read-write state such as the current workspace setup including which windows are on which workspaces
2022-11-04 17:00:39 +0100 <merijn> And yes, it makes it trivial to hardcode things and then later replace the hardcoded thing with "loadConfig :: FilePath -> IO Config"
2022-11-04 17:01:18 +0100 <geekosaur> newtype X a = StateT XState (ReaderT XConf IO) a
2022-11-04 17:01:59 +0100 <geekosaur> and then everything that needs it is … -> X a for some relevant a
2022-11-04 17:02:22 +0100razetime(~quassel@117.254.35.246) (Read error: Connection reset by peer)
2022-11-04 17:02:24 +0100 <geekosaur> and Haskell takes care of making sure everything gets an XState and XConf
2022-11-04 17:02:36 +0100razetime(~quassel@117.254.35.246)
2022-11-04 17:03:02 +0100 <simple> that's still a little over my head. but i'm learning fast. it'd probably make sense to me in a week.
2022-11-04 17:04:52 +0100 <merijn> simple: Pretend "(ReaderT XConf IO) a" in that is just "XConf -> IO a" :)
2022-11-04 17:05:38 +0100 <geekosaur> @unmtl StateT XState (ReaderT XConf IO) a
2022-11-04 17:05:38 +0100 <lambdabot> XState -> XConf -> IO (a, XState)
2022-11-04 17:06:01 +0100 <seriley> in ghci, how can I determine what warnings are enabled?
2022-11-04 17:06:56 +0100jtomas(~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
2022-11-04 17:08:09 +0100segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-11-04 17:08:41 +0100 <merijn> simple: The other advantage is that it's fairly easy to add/remove fields to the config and immediately get errors when you're (trying to) use removed fields
2022-11-04 17:09:25 +0100 <merijn> "ReaderT Config" has to be one of the pattern with the best "power/convenience-to-cost" ratios in Haskell
2022-11-04 17:09:25 +0100abhiroop_(~abhiroop@c-5eea67ce-74736162.cust.telenor.se) (Read error: Connection reset by peer)
2022-11-04 17:09:47 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2022-11-04 17:09:56 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 248 seconds)
2022-11-04 17:10:49 +0100 <seriley> oops! Found it...use :seti
2022-11-04 17:12:39 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 17:12:56 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-04 17:12:56 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
2022-11-04 17:13:03 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-04 17:13:06 +0100coot(~coot@213.134.171.3)
2022-11-04 17:13:08 +0100 <c_wraith> seriley: oh hey. Neat. I hadn't realized -fimplicit-import-qualified was an extension, but it's obvious what it does from how ghci works
2022-11-04 17:13:09 +0100califax(~califax@user/califx) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-04 17:13:24 +0100califax(~califax@user/califx)
2022-11-04 17:13:25 +0100 <c_wraith> well. a flag, not an extension
2022-11-04 17:14:12 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 248 seconds)
2022-11-04 17:14:28 +0100 <seriley> Why isn't an incomplete patterns warning given for factorial :: Integer -> Integer;factorial 0 = 1;factorial n = n * factorial (n - 1)?
2022-11-04 17:14:56 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-04 17:15:02 +0100 <c_wraith> it's not incomplete
2022-11-04 17:15:08 +0100 <c_wraith> the second case catches everything
2022-11-04 17:15:19 +0100 <seriley> factorial (-1)...
2022-11-04 17:15:26 +0100 <c_wraith> it catches it
2022-11-04 17:15:34 +0100 <c_wraith> and loops forever, but there's a pattern that handles it
2022-11-04 17:15:53 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-11-04 17:15:59 +0100ft(~ft@p508dbd59.dip0.t-ipconnect.de)
2022-11-04 17:16:04 +0100 <seriley> ok. I see now
2022-11-04 17:16:22 +0100 <geekosaur> haskell isn't magic, it doesn't know your code will loop forever on a negative number
2022-11-04 17:16:31 +0100 <c_wraith> Hmm. I suppose that only loops until you run out of memory, not "forever". :P
2022-11-04 17:16:42 +0100 <seriley> i get a stack overflow
2022-11-04 17:16:46 +0100 <c_wraith> yeah
2022-11-04 17:16:58 +0100 <c_wraith> If it was an incomplete pattern match, you'd get an exception
2022-11-04 17:17:18 +0100 <c_wraith> > let Just x = Nothing in x
2022-11-04 17:17:20 +0100 <lambdabot> *Exception: <interactive>:3:5-20: Non-exhaustive patterns in Just x
2022-11-04 17:17:37 +0100merijn(~merijn@86.86.29.250) (Ping timeout: 246 seconds)
2022-11-04 17:17:50 +0100 <seriley> thanks
2022-11-04 17:27:15 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-04 17:33:22 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 246 seconds)
2022-11-04 17:33:46 +0100jonathanx_(~jonathan@c-5eea6015-74736162.cust.telenor.se)
2022-11-04 17:33:55 +0100nschoe(~q@141.101.51.197) (Ping timeout: 272 seconds)
2022-11-04 17:35:29 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-04 17:36:27 +0100jonathanx__(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds)
2022-11-04 17:38:34 +0100jtza8(~user@165.255.137.137)
2022-11-04 17:39:57 +0100tremon(~tremon@83-84-18-241.cable.dynamic.v4.ziggo.nl)
2022-11-04 17:42:35 +0100 <simple> I've done a 'cabal install network', and i use Network.Socket in my code, and 'cabal run' doesn't complain.. but i canot import Network.Socket in ghci.. any clues?
2022-11-04 17:43:45 +0100 <geekosaur> if you're using cabal, you probably want cabal repl instead of ghci
2022-11-04 17:44:37 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 17:46:23 +0100 <simple> geekosaur++
2022-11-04 17:47:01 +0100 <simple> bah, now i need to find where it keeps its .cabal file
2022-11-04 17:48:23 +0100 <c_wraith> if you didn't create one, it's in /tmp and liable to be deleted at any time
2022-11-04 17:48:43 +0100machinedgod(~machinedg@83-131-151-179.adsl.net.t-com.hr)
2022-11-04 17:48:48 +0100 <simple> on windows, looks like AppData/Local/Tmp/ stuff
2022-11-04 17:49:31 +0100 <c_wraith> oh. windows, good point. But either way, my recommendation is to create your own package to work with
2022-11-04 17:50:12 +0100 <c_wraith> global installs really aren't a good pattern, and really aren't supported anymore
2022-11-04 17:50:34 +0100 <c_wraith> You can force them to work, but it's really fragile and liable to break
2022-11-04 17:50:36 +0100 <[exa]> spoiler: everyone loves global installs for random hacking
2022-11-04 17:50:56 +0100 <simple> I have (I think). I'm using IntelliJ Idea with a haskell plugin, in a project directory. if i run the ghci/repl from that dir, will it pick up the .cabal file?
2022-11-04 17:51:01 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
2022-11-04 17:51:01 +0100OpenSource(~kernel@user/OpenSource) (Quit: ZNC - https://znc.in)
2022-11-04 17:51:11 +0100 <c_wraith> if you've created one there, yes
2022-11-04 17:51:14 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:f5b1:39e2:deb2:275) (Quit: WeeChat 2.8)
2022-11-04 17:51:17 +0100OpenSource(~kernel@user/OpenSource)
2022-11-04 17:51:30 +0100 <c_wraith> [exa]: but you can random hacking with cabal repl -b
2022-11-04 17:52:15 +0100 <[exa]> yeah but that sounds like thinking about dependencies in advance :D
2022-11-04 17:52:22 +0100 <simple> hm, the repl started by running my code, which is not what i wanted
2022-11-04 17:52:30 +0100 <[exa]> anyway I didn't know about -b, thanks
2022-11-04 17:52:47 +0100 <c_wraith> Yeah, I use it all the time.
2022-11-04 17:52:55 +0100 <[exa]> simple: compiling or running?
2022-11-04 17:53:04 +0100 <c_wraith> well. probably loading
2022-11-04 17:54:18 +0100 <[exa]> is there some good syntax pattern to combine a few `do` blocks in a `choice [...]` ?
2022-11-04 17:54:49 +0100sympt(~sympt@user/sympt)
2022-11-04 17:55:05 +0100 <[exa]> (or, more like, do something similar without the 2 sets of parentheses)
2022-11-04 17:55:25 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-11-04 17:55:59 +0100OpenSource(~kernel@user/OpenSource) (Client Quit)
2022-11-04 17:56:26 +0100 <simple> yeah, loading
2022-11-04 17:59:06 +0100 <c_wraith> Unfortunately, I don't know how to make it stop doing that. Sometimes it's not what I want, either
2022-11-04 17:59:16 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2022-11-04 17:59:30 +0100 <[exa]> oh wait the inner do's don't need parentheses, good, world is saved.
2022-11-04 17:59:46 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-11-04 18:00:38 +0100Patternmaster(~georg@li1192-118.members.linode.com)
2022-11-04 18:00:38 +0100Patternmaster(~georg@li1192-118.members.linode.com) (Changing host)
2022-11-04 18:00:38 +0100Patternmaster(~georg@user/Patternmaster)
2022-11-04 18:01:30 +0100ubert(~Thunderbi@178.115.71.138.wireless.dyn.drei.com) (Quit: ubert)
2022-11-04 18:01:49 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 18:02:34 +0100ubert(~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
2022-11-04 18:06:04 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 18:06:12 +0100dtman34(~dtman34@c-75-73-141-79.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
2022-11-04 18:06:51 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
2022-11-04 18:06:51 +0100machinedgod(~machinedg@83-131-151-179.adsl.net.t-com.hr) (Ping timeout: 272 seconds)
2022-11-04 18:08:24 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:09:22 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
2022-11-04 18:12:27 +0100razetime(~quassel@117.254.35.246) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-11-04 18:12:52 +0100Guest75(~Guest75@178.141.177.81)
2022-11-04 18:17:51 +0100Tuplanolla(~Tuplanoll@91-159-69-11.elisa-laajakaista.fi)
2022-11-04 18:18:12 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:18:15 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
2022-11-04 18:18:37 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
2022-11-04 18:18:53 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:20:10 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 18:20:28 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:21:05 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:21:24 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:21:59 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:25:01 +0100sadmax(~user@209.205.174.253) (Client Quit)
2022-11-04 18:26:41 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:28:24 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:28:32 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-04 18:29:09 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:29:26 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
2022-11-04 18:29:50 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:30:24 +0100L29Ah(~L29Ah@wikipedia/L29Ah) ()
2022-11-04 18:30:40 +0100ec(~ec@gateway/tor-sasl/ec)
2022-11-04 18:30:40 +0100sadmax(~user@209.205.174.253)
2022-11-04 18:30:47 +0100jonathanx__(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-11-04 18:31:18 +0100Kaipei(~Kaiepi@108.175.84.104) (Ping timeout: 246 seconds)
2022-11-04 18:31:43 +0100Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-11-04 18:33:02 +0100jonathanx_(~jonathan@c-5eea6015-74736162.cust.telenor.se) (Ping timeout: 246 seconds)
2022-11-04 18:33:50 +0100L29Ah(~L29Ah@wikipedia/L29Ah)
2022-11-04 18:35:31 +0100 <EvanR> if (| |) is banana brackets what is [| |]
2022-11-04 18:35:52 +0100 <EvanR> hamburger bun brackets or
2022-11-04 18:36:17 +0100 <geekosaur[m]> Coconut brackets?
2022-11-04 18:36:23 +0100 <dolio> Those were envelopes, I think.
2022-11-04 18:37:19 +0100 <geekosaur[m]> (SpongeBob brackets but can anyone over age 6 say that?)
2022-11-04 18:37:41 +0100[exa]writes that down
2022-11-04 18:39:16 +0100 <dolio> I suppose it depends on how you ascii-fy the symbol in their paper.
2022-11-04 18:39:39 +0100 <dolio> Could be [| or [[
2022-11-04 18:39:41 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 18:41:11 +0100 <c_wraith> I think I'd call what they used [[ and ]]
2022-11-04 18:41:56 +0100 <c_wraith> has anyone successfully used a private library in a cabal file with no public library? When I try, it keeps telling me that it can't find the private library
2022-11-04 18:42:19 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Remote host closed the connection)
2022-11-04 18:42:47 +0100elkcl(~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
2022-11-04 18:42:55 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 18:43:35 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
2022-11-04 18:44:14 +0100slack1256(~slack1256@191.126.227.201)
2022-11-04 18:45:23 +0100 <slack1256> On postgresql-simple, is anyone using ConnectInfo with unix sockets?
2022-11-04 18:45:24 +0100fserucas(~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Quit: Leaving)
2022-11-04 18:45:51 +0100 <slack1256> The libpq docs say that I should percent encode it, but maybe there is a better way using ConnectInfo.
2022-11-04 18:47:32 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
2022-11-04 18:47:33 +0100 <slack1256> Nevermind! I did not have to percent encode at all!
2022-11-04 18:48:25 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2022-11-04 18:50:52 +0100 <monochrom> I have read that [| |] is called Oxford brackets.
2022-11-04 18:51:21 +0100 <monochrom> Oh, probably I read that from the GHC user's guide.
2022-11-04 18:52:45 +0100jpds1(~jpds@gateway/tor-sasl/jpds) (Write error: Connection reset by peer)
2022-11-04 18:53:14 +0100jpds1(~jpds@gateway/tor-sasl/jpds)
2022-11-04 18:57:56 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 19:00:11 +0100nurupo(~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
2022-11-04 19:00:15 +0100 <EvanR> an old post about why there is no gui library built into haskell https://mail.haskell.org/pipermail/haskell-cafe/2007-August/030191.html
2022-11-04 19:00:27 +0100nurupo(~nurupo.ga@user/nurupo)
2022-11-04 19:01:16 +0100 <EvanR> they close suggesting maybe instead you want a way to come up with a custom gui for a given application, which makes me realize the "standard" libraries are really doing two separate (?) things, giving you a "standard" window with standard decorations and on the other hand trying to be a gui library
2022-11-04 19:01:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 19:01:49 +0100 <EvanR> often you use the standard toolkit, get a standard decorated window, then make this huge custom thing because the library can't handle it
2022-11-04 19:02:54 +0100 <monochrom> I remember Motif, heh.
2022-11-04 19:03:13 +0100 <EvanR> I remember apps, never tried to make anything in it
2022-11-04 19:03:43 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
2022-11-04 19:04:03 +0100 <EvanR> someone recently was saying athena widgets was the most amazing toolkit, still
2022-11-04 19:04:31 +0100jpds1(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-11-04 19:04:53 +0100jpds1(~jpds@gateway/tor-sasl/jpds)
2022-11-04 19:05:14 +0100 <monochrom> Guile is the idea of "DSL for describing UI object tree" standardized.
2022-11-04 19:05:41 +0100emmanuelux(~emmanuelu@user/emmanuelux)
2022-11-04 19:05:56 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2022-11-04 19:06:19 +0100 <monochrom> To be sure, Guile came way after, and most likely independently thought up.
2022-11-04 19:06:29 +0100 <EvanR> Guile is a what
2022-11-04 19:06:38 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
2022-11-04 19:06:42 +0100 <c_wraith> EvanR: I wouldn't say the things are separate, but they are totally different levels of abstraction
2022-11-04 19:06:49 +0100 <monochrom> Guile is a DSL for decribing a tree of UI objects. :)
2022-11-04 19:06:54 +0100stackdroid18(14094@user/stackdroid)
2022-11-04 19:07:01 +0100 <EvanR> as a haskell library? lisp library?
2022-11-04 19:07:17 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 19:07:21 +0100 <monochrom> No, I think Guile is for GTK.
2022-11-04 19:07:36 +0100 <EvanR> shudder
2022-11-04 19:07:40 +0100 <monochrom> Yeah GTK.
2022-11-04 19:07:46 +0100 <c_wraith> not TK, GTK. :P
2022-11-04 19:08:04 +0100 <geekosaur> guile predates gtk…
2022-11-04 19:08:15 +0100 <geekosaur> that said, who remembers autolisp?
2022-11-04 19:08:20 +0100 <monochrom> Well, this means that even the imperative people eventually discovered that "DSL for UI object tree" is a central idea.
2022-11-04 19:08:32 +0100 <c_wraith> well, there are multiple things called guile
2022-11-04 19:08:44 +0100 <monochrom> OK heh
2022-11-04 19:08:48 +0100 <c_wraith> Like... the guy from Street Fighter
2022-11-04 19:08:51 +0100 <darkling> geekosaur: Yes, I wrote a Bezier module for Autocad in Autolisp on a MicroVAX II. :)
2022-11-04 19:09:05 +0100 <monochrom> Ah OK thanks geekosaur.
2022-11-04 19:09:43 +0100 <monochrom> I guess this is why Guile uses s-expression syntax.
2022-11-04 19:11:00 +0100 <monochrom> When I was in university and in microprocessor courses, Autocad was always mentioned as a performance benchmarking platform.
2022-11-04 19:11:21 +0100 <monochrom> Things like "287 can render the cathedral in 10 seconds" :)
2022-11-04 19:12:02 +0100 <monochrom> and "now, this other company's clone of 287 can do it in 9"
2022-11-04 19:12:10 +0100 <dolio> I thought guile was just another scheme, for some reason.
2022-11-04 19:12:24 +0100 <EvanR> that can't be the same guile
2022-11-04 19:12:36 +0100 <lagash> GNU Guile? It's a Scheme.
2022-11-04 19:12:39 +0100 <darkling> dolio: That too.
2022-11-04 19:13:20 +0100 <monochrom> X_X
2022-11-04 19:13:27 +0100 <EvanR> all this disproves Refl :: Guile = Guile
2022-11-04 19:13:39 +0100 <monochrom> haha yeah
2022-11-04 19:14:52 +0100CiaoSen(~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
2022-11-04 19:15:32 +0100geekosaurwas under the impression that GNU had been reworking guile from its original "it's just another Scheme" to "it's the glue that holds stuff together" (with plans for it to replace elisp, etc.)
2022-11-04 19:16:48 +0100 <monochrom> That probably will take another 100 years. Speaking of cathedrals. >:)
2022-11-04 19:17:06 +0100cstml(~cstml@user/cstml) (Ping timeout: 255 seconds)
2022-11-04 19:19:04 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
2022-11-04 19:21:47 +0100 <lagash> No no, use Common Lisp! :P
2022-11-04 19:22:07 +0100skibites geekosaur tentatively
2022-11-04 19:23:29 +0100wootehfoot(~wootehfoo@user/wootehfoot)
2022-11-04 19:23:54 +0100 <geekosaur> moo?
2022-11-04 19:24:00 +0100ski. o O ( <https://www.emacswiki.org/emacs/GuileEmacs>,<https://www.emacswiki.org/emacs/Edwin>,<https://www.emacswiki.org/emacs/Zmacs>,<https://www.emacswiki.org/emacs/Climacs>,<https://www.emacswiki.org/emacs/XEmacs> ; <https://www.emacswiki.org/emacs/Emacsen>,<https://www.emacswiki.org/emacs/EmacsImplementations> )
2022-11-04 19:24:07 +0100 <ski> <geekosaur> we don't bite 🙂 the only bad question is the one that isn't asked
2022-11-04 19:24:30 +0100narendraj9(~user@2a02:8109:b63f:c344::ff2a)
2022-11-04 19:24:31 +0100 <ski> (er, rather <https://www.emacswiki.org/emacs/EdWin>)
2022-11-04 19:25:56 +0100AlexNoo_(~AlexNoo@178.34.150.205)
2022-11-04 19:26:14 +0100hiredman(~hiredman@frontier1.downey.family) (Ping timeout: 246 seconds)
2022-11-04 19:26:56 +0100 <geekosaur> wasn't some dialect of lisp or scheme what the original emacs was rewritten into? (the very first version being in TECO)
2022-11-04 19:27:32 +0100Alex_test(~al_test@178.34.163.109) (Ping timeout: 248 seconds)
2022-11-04 19:27:51 +0100jtza8(~user@165.255.137.137) (ERC 5.4 (IRC client for GNU Emacs 28.2))
2022-11-04 19:28:04 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
2022-11-04 19:28:19 +0100 <ski> the current one (speaking of GNU Emacs, and i guess XEmacs) is written in Emacs Lisp (and C)
2022-11-04 19:28:24 +0100beteigeuze(~Thunderbi@89.187.168.55)
2022-11-04 19:28:50 +0100AlexZenon(~alzenon@178.34.163.109) (Ping timeout: 268 seconds)
2022-11-04 19:28:51 +0100 <ski> (Scheme is a Lisp, btw)
2022-11-04 19:29:23 +0100AlexNoo(~AlexNoo@178.34.163.109) (Ping timeout: 246 seconds)
2022-11-04 19:30:45 +0100 <geekosaur> yes, I know, but I distinguish them because of my history (MacLisp Scheme isn't 😛 )
2022-11-04 19:32:28 +0100 <ski> "Weinreb's EINE was the first Emacs written in Lisp.", apparently
2022-11-04 19:32:52 +0100beteigeuze(~Thunderbi@89.187.168.55) (Ping timeout: 248 seconds)
2022-11-04 19:32:52 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
2022-11-04 19:33:12 +0100 <monochrom> A few days ago on Oct 31 I would bite. >:)
2022-11-04 19:33:32 +0100 <ski> "Many versions of Emacs, including GNU Emacs, would later adopt Lisp as an extension language."
2022-11-04 19:34:15 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 272 seconds)
2022-11-04 19:34:53 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
2022-11-04 19:35:06 +0100AlexZenon(~alzenon@178.34.150.205)
2022-11-04 19:35:14 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 19:35:43 +0100nate3(~nate@98.45.169.16)
2022-11-04 19:36:12 +0100elevenkb(~elevenkb@105.184.125.168) (Read error: Connection reset by peer)
2022-11-04 19:36:42 +0100 <ski> seems like Stallman was inspired by an editor named E, making EMACS (TECO macros)
2022-11-04 19:37:12 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-04 19:37:22 +0100Xeroine(~Xeroine@user/xeroine)
2022-11-04 19:38:16 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-04 19:38:18 +0100Alex_test(~al_test@178.34.150.205)
2022-11-04 19:39:23 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-04 19:40:36 +0100nate3(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-11-04 19:41:35 +0100abhiroop_(~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 276 seconds)
2022-11-04 19:44:26 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-04 19:45:00 +0100intelligent_boatintellig1nt_boat
2022-11-04 19:45:17 +0100intellig1nt_boatintelligent_boat
2022-11-04 19:45:55 +0100 <cheater> hey everyone
2022-11-04 19:46:04 +0100 <cheater> what are your favourite quick check alikes nowadays?
2022-11-04 19:50:19 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-04 19:51:01 +0100 <sm> how do you build a hoogle database for just the local package(s) in the current project ?
2022-11-04 19:52:23 +0100ff76(~ff@ip183138.eafit.edu.co)
2022-11-04 19:52:26 +0100 <sm> `hoogle generate --local` dies with "Packages missing documentation: array base binary ..."
2022-11-04 19:52:42 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-11-04 19:53:10 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 19:53:22 +0100 <sm> `stack hoogle` builds a db for all transitive deps
2022-11-04 19:53:38 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-04 19:53:46 +0100jlgw_(~jw@83-233-104-81.cust.bredband2.com) (Quit: Konversation terminated!)
2022-11-04 19:54:05 +0100jlgw_(~jw@83-233-104-81.cust.bredband2.com)
2022-11-04 19:56:46 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-04 19:57:38 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-11-04 19:58:02 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
2022-11-04 20:00:33 +0100ff76(~ff@ip183138.eafit.edu.co) (Quit: Connection closed)
2022-11-04 20:02:25 +0100Kaipei(~Kaiepi@108.175.84.104)
2022-11-04 20:06:04 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-11-04 20:07:28 +0100narendraj9(~user@2a02:8109:b63f:c344::ff2a) (Remote host closed the connection)
2022-11-04 20:07:32 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2022-11-04 20:08:26 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-04 20:08:27 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds)
2022-11-04 20:09:34 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-04 20:09:47 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-04 20:10:42 +0100fserucas_(~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Ping timeout: 246 seconds)
2022-11-04 20:11:01 +0100 <sm> most relevant doc: https://github.com/ndmitchell/hoogle/blob/master/docs/Install.md#generate-a-hoogle-database
2022-11-04 20:12:22 +0100dtman34(~dtman34@c-75-73-141-79.hsd1.mn.comcast.net)
2022-11-04 20:13:03 +0100nschoe(~q@2a01:e0a:8e:a190:2e2e:14c5:dca3:7fc5)
2022-11-04 20:13:03 +0100nschoe(~q@2a01:e0a:8e:a190:2e2e:14c5:dca3:7fc5) (Client Quit)
2022-11-04 20:13:56 +0100jlgw_jlgw
2022-11-04 20:14:41 +0100 <c_wraith> actually, scratch my last question. has anyone used cabal's private libraries feature at all? I cannot figure out how to make it work
2022-11-04 20:15:58 +0100 <sm> hoogle is both famously useful online, and a perfect example of why haskell tooling makes grown humans weep bitter tears
2022-11-04 20:18:29 +0100 <sm> c_wraith: maybe searching for the syntax will find some packages using it ?
2022-11-04 20:18:55 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-04 20:18:55 +0100 <sclv> c_wraith: there's an example here, does it not work? https://cabal.readthedocs.io/en/stable/cabal-package.html?highlight=internal#sublibs
2022-11-04 20:19:16 +0100 <c_wraith> my attempts at something like that do not work.
2022-11-04 20:19:46 +0100 <c_wraith> that example itself is not complete, so it's not testable
2022-11-04 20:20:16 +0100 <sclv> one important thing to do is to make sure you don't have overlapping srcdirs for your different sublibraries
2022-11-04 20:20:22 +0100 <sclv> otherwise ghc gets very confused
2022-11-04 20:20:37 +0100 <sclv> iirc
2022-11-04 20:20:57 +0100 <c_wraith> did that. the problem is that cabal says it can't find the named internal library
2022-11-04 20:22:41 +0100 <sclv> perhaps you need pkg:lib-name ?
2022-11-04 20:23:01 +0100 <sclv> https://github.com/haskell/cabal/issues/7565
2022-11-04 20:24:24 +0100 <c_wraith> ah, that looks like the issue. I am using newer cabal specifications
2022-11-04 20:25:09 +0100 <sclv> i'm not sure the exact status of how we sort that out, sigh. i think one of the underlying issues complained about is fixed in HEAD but idk how we'll iterate to final syntax or what that means for updating docs :-/
2022-11-04 20:25:19 +0100 <c_wraith> it'd sure be nice if the docs said something
2022-11-04 20:25:42 +0100 <sclv> yeah, feel free to make a pr and if someone understands whats going on and objects we can solve it then :-)
2022-11-04 20:26:19 +0100biberu(~biberu@user/biberu) (Read error: Connection reset by peer)
2022-11-04 20:26:39 +0100 <c_wraith> I'm really feeling like cabal repl is a third-class citizen. the amount I have to mangle my cabal file and project layout in order for it to work hurts.
2022-11-04 20:27:16 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-04 20:27:33 +0100 <sm> "how can we keep docs updated" seems to be the root of many computing woes
2022-11-04 20:28:47 +0100 <sclv> there's some discussion of improving mutihome support now that ghc has it https://github.com/haskell/cabal/issues/8491
2022-11-04 20:29:38 +0100 <sclv> note that ghci's multihome support is still a wip itself https://gitlab.haskell.org/ghc/ghc/-/issues/20889
2022-11-04 20:31:53 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 20:31:57 +0100Guest19(~Guest19@c83-248-102-237.bredband.tele2.se)
2022-11-04 20:32:01 +0100 <c_wraith> while you're on this topic, is there any way to tell cabal repl to not load all the modules at startup? that can be very slow and unnecessary
2022-11-04 20:33:36 +0100seriley(~seriley@97-120-69-62.ptld.qwest.net) (Remote host closed the connection)
2022-11-04 20:35:19 +0100 <sclv> --repl-no-load https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-repl
2022-11-04 20:35:27 +0100 <c_wraith> thanks
2022-11-04 20:40:24 +0100 <[exa]> is there any good `choice` specialized to Eithers that would give either the first Right or the last Left from the list?
2022-11-04 20:42:14 +0100 <EvanR> that condition is hurting my brain right now
2022-11-04 20:42:29 +0100 <EvanR> Left Left Left Right Left would be what
2022-11-04 20:42:54 +0100 <sm> headMay . rights / lastMay . lefts
2022-11-04 20:43:25 +0100Guest98(~Guest98@92.40.70.67.threembb.co.uk)
2022-11-04 20:43:28 +0100 <[exa]> EvanR: the first right
2022-11-04 20:43:37 +0100Guest98(~Guest98@92.40.70.67.threembb.co.uk) (Client Quit)
2022-11-04 20:44:00 +0100 <EvanR> is this a case of swapping the role of right and left and using the usual applicative
2022-11-04 20:45:17 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
2022-11-04 20:45:24 +0100 <EvanR> in which case it seems retroactively smart to call them Left Right instead of the other languages which committed to Ok Error
2022-11-04 20:46:00 +0100 <[exa]> perhaps well, this is my actual problem: if I use `choice` from Control.Applicative.Combinators, `choice [Left "asd"]` gets me `Left ""` because there's Error String instance
2022-11-04 20:47:02 +0100 <[exa]> the normal choice from Control.Applicative (aka asum) reasonably refuses to do anything without importing the stuff from combinators
2022-11-04 20:47:10 +0100 <[exa]> and I'm failing to find the piece of code that did this
2022-11-04 20:48:36 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 248 seconds)
2022-11-04 20:48:56 +0100Guest47(~Guest47@171.79.46.173)
2022-11-04 20:50:12 +0100shriekingnoise(~shrieking@186.137.167.202) (Ping timeout: 255 seconds)
2022-11-04 20:50:14 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 246 seconds)
2022-11-04 20:50:36 +0100Heyting(~Heyting@193.198.16.217)
2022-11-04 20:50:37 +0100Xeroine(~Xeroine@user/xeroine)
2022-11-04 20:50:43 +0100 <[exa]> in short, making some kind of `choice` work without the ugly errorish instances on Either :D
2022-11-04 20:51:20 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-11-04 20:51:22 +0100shriekingnoise(~shrieking@186.137.167.202)
2022-11-04 20:51:47 +0100Major_Biscuit(~MajorBisc@c-001-021-035.client.tudelft.eduvpn.nl) (Ping timeout: 276 seconds)
2022-11-04 20:52:24 +0100Guest|63(~Guest|63@90.203.229.51)
2022-11-04 20:52:28 +0100biberu(~biberu@user/biberu)
2022-11-04 20:52:58 +0100 <Heyting> Good evening everyone, is there a list of "must read" Haskell papers, e.g. "Why functional programming matters?" and "Making ad-hoc polymorphism less ad-hoc"? I am looking to deepen my understanding of the Haskell and FP ecosystem
2022-11-04 20:53:36 +0100 <Guest|63> hey, beginner question here, whenever i try to run the ghcup command in powershell, powershell closes. I just tried it on my desktop and it worked first try so i dont know what's going on. I just reset the laptop too so im out of ideas
2022-11-04 20:54:09 +0100 <[exa]> Heyting: I'd answer "must read" with "for what purpose"
2022-11-04 20:55:08 +0100 <[exa]> Heyting: there's a lot of nice stuff about ghc implementation and type system (mostly by SPJ), various nice papers about types and high-order stuff by the lambdaman, and ICFP has great functional pearls each year that are generally worth it
2022-11-04 20:55:12 +0100 <EvanR> there's kind of a lot of papers
2022-11-04 20:55:58 +0100 <[exa]> the SYB/Generics papers are great
2022-11-04 20:56:54 +0100 <[exa]> Guest|63: whew, is there any logs or error report or so?
2022-11-04 20:57:14 +0100 <[exa]> Heyting: also I recall the last "pop" FP paper I read was about selectives and it was great
2022-11-04 20:58:48 +0100 <EvanR> anything on conal.net
2022-11-04 20:59:07 +0100 <[exa]> +1 ^
2022-11-04 20:59:46 +0100 <c_wraith> Heyting: Being Lazy With Class (Simon Peyton Jones). The Essence of the Iterator Pattern (Jeremy Gibbons)
2022-11-04 21:00:52 +0100 <sclv> [exa]: maybe you want the validation applicative?
2022-11-04 21:00:57 +0100 <c_wraith> oh, and Lazy Functional State Threads (Jones and several others)
2022-11-04 21:01:22 +0100 <Heyting> Thank you all. Take into consideration I am fresh in Haskell and FP (about a year on and off) and am a CS student, thinking about a PhD in this topic
2022-11-04 21:01:38 +0100Guest47(~Guest47@171.79.46.173) (Ping timeout: 260 seconds)
2022-11-04 21:01:46 +0100 <c_wraith> anything from SPJ is easy to read and understand.
2022-11-04 21:01:59 +0100 <sclv> Heyting: there's an old list on the haskell wiki, but since you're interested in classic papers, the "old" is probably not too much a drawback https://wiki.haskell.org/Research_papers
2022-11-04 21:02:16 +0100 <[exa]> sclv: validation collects all Lefts, and I dont really want the error semantics :(
2022-11-04 21:02:50 +0100 <[exa]> ah wait I can smuggle in a Last there
2022-11-04 21:03:05 +0100 <sclv> yeah, just use the Last monoid, :-)
2022-11-04 21:03:20 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
2022-11-04 21:03:33 +0100 <Heyting> exa: what do you mean by "the lambdaman"
2022-11-04 21:03:54 +0100 <[exa]> well at least this is going to force me to rewrite all the manual Rights and Lefts into proper wrappers :D
2022-11-04 21:04:06 +0100 <sclv> i assume wadler, who is known for wearing a superman-like shirt in some of his undergrad lectures
2022-11-04 21:04:44 +0100 <[exa]> yep ^
2022-11-04 21:05:17 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2022-11-04 21:06:03 +0100 <[exa]> OOPSLA'06 now counts as an undergrad lecture? :D
2022-11-04 21:06:36 +0100 <[exa]> Heyting: anyway, scroll down here a bit https://dev.to/adamretter/haskell-io-and-xpath-1fcj
2022-11-04 21:06:43 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
2022-11-04 21:06:57 +0100 <cheater> what of smallcheck/smartcheck/etc do you guys like most?
2022-11-04 21:09:09 +0100 <Heyting> yea now I remember him at the end of the propositions-as-types lecture turning into lambdaman
2022-11-04 21:11:52 +0100 <EvanR> what is lambdaman's arch nemesis
2022-11-04 21:12:39 +0100Guest|63(~Guest|63@90.203.229.51) (Quit: Connection closed)
2022-11-04 21:12:41 +0100 <Heyting> I guess it would be BoilerPlateMan
2022-11-04 21:13:23 +0100 <Heyting> tearing down lambda expression one AbstractIncrementFunctionFactory at a time
2022-11-04 21:13:50 +0100 <ski> @where Oleg
2022-11-04 21:13:51 +0100 <lambdabot> http://okmij.org/ftp/
2022-11-04 21:14:04 +0100 <ski> Heyting : ^ has quite a lot interesting stuff
2022-11-04 21:14:17 +0100gmg(~user@user/gehmehgeh)
2022-11-04 21:14:57 +0100 <EvanR> evocative
2022-11-04 21:15:18 +0100 <[exa]> EvanR: The Imperator, ofc
2022-11-04 21:15:56 +0100 <[exa]> Heyting: this view of java is healthy.
2022-11-04 21:16:26 +0100 <EvanR> java has lambdas now right, boilerplate solved?
2022-11-04 21:17:24 +0100talismanick(~talismani@2601:200:c100:c9e0::1b0b)
2022-11-04 21:18:26 +0100 <Heyting> ski: this is just what I was looking for, ty
2022-11-04 21:19:01 +0100 <ski> Heyting : the "Lambda the Ultimate: ..." papers (using Scheme) are classics, too
2022-11-04 21:19:25 +0100 <ski> and Henry Baker's paper collection
2022-11-04 21:19:42 +0100pavonia(~user@user/siracusa)
2022-11-04 21:21:29 +0100 <ski> for Haskell, Graham Hutton has some nice papers on folds and such things, i think
2022-11-04 21:21:43 +0100 <ski> did someone mention "how to make ad hoc polymorphism less ad hoc" ?
2022-11-04 21:22:00 +0100shailangsa(~shailangs@host86-182-139-4.range86-182.btcentralplus.com) (Remote host closed the connection)
2022-11-04 21:22:08 +0100 <ski> oh, and Phil Wadlers papers are usually quite ejoyable
2022-11-04 21:22:27 +0100 <ski> Erik Meijer
2022-11-04 21:23:38 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
2022-11-04 21:24:43 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2022-11-04 21:24:48 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 21:29:03 +0100 <[exa]> kinda reminds me, the linear logic&types paper series from Girard and then Wadler was pretty enjoyable
2022-11-04 21:29:21 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 255 seconds)
2022-11-04 21:39:12 +0100 <ski> Girard can be quite fun to read
2022-11-04 21:43:08 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 21:44:04 +0100Kaipei(~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
2022-11-04 21:47:59 +0100jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2022-11-04 21:50:32 +0100 <sm> set up and run hoogle in a stack project: https://github.com/simonmichael/hledger/blob/7c8e241383575214e0d0c6b0c56100c89ce02902/Makefile#L80…
2022-11-04 21:55:26 +0100td_(~td@83.135.9.48) (Read error: error:1408F10B:SSL routines:ssl3_get_record:wrong version number)
2022-11-04 22:00:43 +0100td_(~td@83.135.9.48)
2022-11-04 22:03:28 +0100Guest75(~Guest75@178.141.177.81) (Ping timeout: 260 seconds)
2022-11-04 22:07:37 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-11-04 22:11:19 +0100td_(~td@83.135.9.48) (Ping timeout: 272 seconds)
2022-11-04 22:11:22 +0100irrgit_(~irrgit@146.70.27.250) (Quit: Leaving)
2022-11-04 22:13:01 +0100td_(~td@83.135.9.48)
2022-11-04 22:21:57 +0100Lycurgus(~juan@user/Lycurgus)
2022-11-04 22:27:06 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-04 22:27:24 +0100Heyting(~Heyting@193.198.16.217) (Remote host closed the connection)
2022-11-04 22:27:47 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2022-11-04 22:28:13 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-04 22:31:04 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-04 22:31:32 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 248 seconds)
2022-11-04 22:34:17 +0100Xeroine(~Xeroine@user/xeroine)
2022-11-04 22:35:04 +0100michalz(~michalz@185.246.207.218) (Remote host closed the connection)
2022-11-04 22:35:57 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
2022-11-04 22:37:45 +0100mncheck(~mncheck@193.224.205.254) (Ping timeout: 255 seconds)
2022-11-04 22:39:44 +0100Kaipei(~Kaiepi@108.175.84.104)
2022-11-04 22:39:50 +0100Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt https://eg.meansofproduction.biz/eg/index.php/Catalog_of_Internet_Identities)
2022-11-04 22:41:05 +0100absence(torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 272 seconds)
2022-11-04 22:42:07 +0100AlexNoo_AlexNoo
2022-11-04 22:43:51 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2022-11-04 22:44:57 +0100talismanick(~talismani@2601:200:c100:c9e0::1b0b) (Ping timeout: 255 seconds)
2022-11-04 22:45:24 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds)
2022-11-04 22:49:15 +0100cheater(~Username@user/cheater) (Ping timeout: 246 seconds)
2022-11-04 22:49:40 +0100cheater(~Username@user/cheater)
2022-11-04 22:52:57 +0100son0p(~ff@181.136.122.143) (Remote host closed the connection)
2022-11-04 22:55:33 +0100son0p(~ff@181.136.122.143)
2022-11-04 22:56:35 +0100 <c_wraith> sclv: I submitted a documentation PR. Let's see what happens! https://github.com/haskell/cabal/pull/8573
2022-11-04 23:02:01 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 23:03:33 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 23:06:33 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 255 seconds)
2022-11-04 23:07:39 +0100coot(~coot@213.134.171.3) (Quit: coot)
2022-11-04 23:09:09 +0100 <JonathanWatson[m> does anybody know anything about using the GHC API for dynamic linking?
2022-11-04 23:09:33 +0100 <JonathanWatson[m> I've written this small test https://github.com/jonathanjameswatson/dynlink/blob/main/dynlink/app/Main.hs but I end up getting "mismatched interface file ways (wanted "", got "dyn")"
2022-11-04 23:14:46 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-04 23:14:57 +0100zeenk2(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 23:15:42 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Read error: Connection reset by peer)
2022-11-04 23:15:54 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-04 23:16:04 +0100jespada(~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
2022-11-04 23:18:59 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 23:19:05 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-04 23:19:44 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2022-11-04 23:20:00 +0100Guest19(~Guest19@c83-248-102-237.bredband.tele2.se) (Quit: Client closed)
2022-11-04 23:20:23 +0100zeenk2(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Ping timeout: 246 seconds)
2022-11-04 23:20:44 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-04 23:22:26 +0100absence(torgeihe@hildring.pvv.ntnu.no)
2022-11-04 23:25:27 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-04 23:28:27 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-04 23:29:51 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-11-04 23:32:43 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Ping timeout: 255 seconds)
2022-11-04 23:35:10 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 23:37:20 +0100nate3(~nate@98.45.169.16)
2022-11-04 23:37:30 +0100zeenk(~zeenk@5.12.219.147)
2022-11-04 23:37:35 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-11-04 23:39:26 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt)
2022-11-04 23:39:59 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
2022-11-04 23:41:05 +0100thaumavorio(~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
2022-11-04 23:42:31 +0100nate3(~nate@98.45.169.16) (Ping timeout: 272 seconds)
2022-11-04 23:43:36 +0100stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-11-04 23:43:59 +0100thaumavorio(~thaumavor@thaumavor.io)
2022-11-04 23:44:22 +0100sadmax(~user@209.205.174.253)
2022-11-04 23:47:48 +0100zeenk(~zeenk@5.12.219.147) (Ping timeout: 248 seconds)
2022-11-04 23:47:51 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 23:48:37 +0100sadmax(~user@209.205.174.253)
2022-11-04 23:48:56 +0100mmhat(~mmh@p200300f1c730762fee086bfffe095315.dip0.t-ipconnect.de)
2022-11-04 23:51:14 +0100zeenk(~zeenk@5.12.219.147)
2022-11-04 23:51:22 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 23:51:32 +0100acidjnk(~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2022-11-04 23:51:42 +0100freeside(~mengwong@bb115-66-48-84.singnet.com.sg)
2022-11-04 23:52:46 +0100zeenk(~zeenk@5.12.219.147) (Client Quit)
2022-11-04 23:53:03 +0100sadmax(~user@209.205.174.253)
2022-11-04 23:53:31 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 23:54:09 +0100sadmax(~user@209.205.174.253)
2022-11-04 23:54:20 +0100zeenk(~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
2022-11-04 23:55:17 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 23:56:42 +0100sadmax(~user@209.205.174.253)
2022-11-04 23:57:53 +0100sadmax(~user@209.205.174.253) (Remote host closed the connection)
2022-11-04 23:58:42 +0100sadmax(~user@209.205.174.253)