Home liberachat/#haskell: Logs Calendar

Logs on 2023-02-02 (liberachat/#haskell)

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

All times are in UTC on 2023-02-02.