Home liberachat/#haskell: Logs Calendar

Logs on 2024-12-06 (liberachat/#haskell)

00:00:00 <iqubic> Is there a guide to using algebraic-graphs that I can look at? I don't know how that API works.
00:00:21 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
00:07:16 tdammers joins (~tdammers@82-150-212-87.ftth.glasoperator.nl)
00:07:46 xff0x joins (~xff0x@2405:6580:b080:900:585d:f11d:d292:5d16)
00:08:04 × sprotte24 quits (~sprotte24@p200300d16f0cca009d8994f8fb036ac7.dip0.t-ipconnect.de) (Quit: Leaving)
00:09:00 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 265 seconds)
00:11:03 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:13:42 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
00:16:02 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
00:18:19 × tdammers quits (~tdammers@82-150-212-87.ftth.glasoperator.nl) (Ping timeout: 260 seconds)
00:19:07 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:b105:e5ae:be6:818e)
00:20:08 × haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection)
00:20:52 haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com)
00:20:52 ChanServ sets mode +v haskellbridge
00:21:08 × acidjnk_new3 quits (~acidjnk@p200300d6e7283f313597cdba6c3bdfe2.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
00:22:20 tomboy64 joins (~tomboy64@user/tomboy64)
00:26:52 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:28:37 troojg joins (~troojg@user/troojg)
00:31:05 ChanServ sets topic to "https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org | https://play.haskell.org/ | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell | AoC: 43100-84040706"
00:31:35 <glguy> If anyone's doing AoC in Haskell this year you're welcome to join the leaderboard in the topic
00:31:45 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
00:31:54 <hammond> AoC?
00:31:59 <glguy> adventofcode.co
00:32:00 <glguy> m
00:32:46 <hammond> oh cool
00:34:06 <glguy> about 45 people are have finished the 5 days so far; a pretty good start
00:34:23 <glguy> (specifically on the leaderboard I advertise in here each year)
00:42:40 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:45:40 <geekosaur> comment from elsewhere: "watching welltyped folks doing advent of code live is like a live sports occasion for Haskellers"
00:46:52 <monochrom> heh
00:48:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
00:48:40 × sindu quits (~sindu@176.75.224.1) (Ping timeout: 252 seconds)
00:50:28 <jackdk> An equivalent to the excel championship streams could be fun
00:53:23 <probie> I'm doing them in Haskell this year, but only after I initially do them in BQN
00:53:24 ftzm0 joins (~ftzm@085081054140.dynamic.telenor.dk)
00:54:39 <glguy> admire-only-programming :)
00:55:02 × ftzm quits (~ftzm@085080252164.dynamic.telenor.dk) (Ping timeout: 255 seconds)
00:55:02 ftzm0 is now known as ftzm
00:58:10 <probie> Why write readable Haskell when you can vomit out things like {+´(𝕩⊸=¨"MAS")⊸{m‿a‿s←𝕏¨𝕨⋄+´⥊s∧««s∧»˘»˘m∧»»m∧«˘«a}¨⟨⊢⋄⌽˘⋄⍉⋄⌽˘∘⍉⟩}
00:58:27 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
00:58:47 <glguy> I give up; why?
00:59:20 × Buliarous quits (~gypsydang@46.232.210.139) (Quit: leaving)
00:59:39 Buliarous joins (~gypsydang@46.232.210.139)
01:02:47 tdammers joins (~tdammers@82-150-212-87.ftth.glasoperator.nl)
01:03:19 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
01:03:21 <monochrom> because it's 2-in-1 usable code and xmas decoration? :)
01:03:48 <iqubic> jackdk: Does algebraic-graphs have a way to do a topographical sort?
01:03:58 <monochrom> hot take: I can see "xmas" spelt in it, so it's readable >:)
01:05:31 <glguy> iqubic: when you're looking at the haddocks press 's' and you can live-search
01:05:46 <iqubic> Oh, that's handy to know.
01:09:08 × AlexNoo quits (~AlexNoo@5.139.233.9) (Read error: Connection reset by peer)
01:09:31 AlexNoo joins (~AlexNoo@5.139.233.9)
01:10:22 × _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Quit: Ping timeout (120 seconds))
01:10:30 × Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!)
01:11:01 _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net)
01:11:19 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
01:11:36 img joins (~img@user/img)
01:12:19 Fijxu joins (~Fijxu@user/fijxu)
01:12:33 <Axman6> probie: I had no idea BQN shilled x.com
01:14:08 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:14:28 Brett90 joins (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net)
01:15:38 <Brett90> does anyone use nvim and haskell-tools? i can't get hardly anything to work
01:16:15 <probie> glguy: If I'm serious for a moment; because it's a different way of looking at things. Some people doing AoC in Haskell have never written much Haskell and are going to write janky solutions to the problems, and will then look at how "simply" other people solved them and will learn something
01:16:51 <Brett90> alexandria ocasio-cortez?
01:17:44 <glguy> Brett90: no
01:18:33 <glguy> probie: I do try my best to write my Haskell "simply", but we can't tell ourselves that Haskell solutions will be simple by default. It's quite easy to write unreadable Haskell
01:19:40 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
01:21:06 <probie> glguy: Perhaps "simply" was the wrong word. How about "and will then learn something new from comparing their solutions to more "idiomatic" solutions"?
01:23:13 <geekosaur> evolution of a haskell programmer, aoc edition
01:23:56 youthlic joins (~Thunderbi@user/youthlic)
01:24:07 <glguy> probie: yeah, I think it can be valuable to solve the problems and see how other people did it. That's my favorite part of the who exercise :)
01:24:49 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
01:24:58 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:25:50 <glguy> whole*
01:31:09 <glguy> (and it's why I have a repo of solutions from 2015-today https://github.com/glguy/advent/tree/main/solutions/src/2024 )
01:32:15 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:b105:e5ae:be6:818e) (Read error: Connection reset by peer)
01:33:13 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
01:33:33 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal)
01:35:34 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
01:36:29 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:37:16 JeremyB99 joins (~JeremyB99@dhcp-248-40.resnet.purdue.edu)
01:41:46 × JeremyB99 quits (~JeremyB99@dhcp-248-40.resnet.purdue.edu) (Ping timeout: 252 seconds)
01:41:46 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:47:26 JeremyB99 joins (~JeremyB99@2607:ac80:401:7:f09:c735:97c0:a2aa)
01:47:40 × JeremyB99 quits (~JeremyB99@2607:ac80:401:7:f09:c735:97c0:a2aa) (Read error: Connection reset by peer)
01:52:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
01:57:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
02:00:16 KicksonButt joins (~quassel@187.21.174.221)
02:01:27 fmira joins (~user@user/fmira)
02:02:07 × KicksonButt quits (~quassel@187.21.174.221) (Client Quit)
02:02:25 KicksonButt joins (~quassel@187.21.174.221)
02:06:13 × tdammers quits (~tdammers@82-150-212-87.ftth.glasoperator.nl) (Ping timeout: 248 seconds)
02:06:37 tdammers joins (~tdammers@82-150-212-87.ftth.glasoperator.nl)
02:08:04 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:08:37 <KicksonButt> Let's say I have a type f of kind * -> * for which I create an instance of Functor, defining how fmap operates on f. Which is more correct to say: "f é a functor" or "fmap is an functor"?
02:09:22 <KicksonButt> "f is a functor" or "fmap is a functor"?
02:09:34 <monochrom> f is a functor.
02:11:07 × Brett90 quits (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net) (Quit: Client closed)
02:12:49 <KicksonButt> monochrom: is fmap not at all a functor?
02:12:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
02:13:10 <geekosaur> it is a method of Functor
02:13:17 <probie> it's a function
02:13:36 <monochrom> m is part of monochrom, and that does not mean that m is monochrom.
02:13:52 <geekosaur> a functor is a type which supports particular operations, in this case fmap
02:13:53 <probie> m: are you sure about that?
02:15:24 <KicksonButt> Thanks for the clarifications
02:15:25 <monochrom> Indeed, M is the boss of Bond, but monochrom is not. >:)
02:18:49 <monochrom> When teaching, I don't even say "f is a functor", I say "f is an instance of Functor". "is-a" is over-abused and is becoming informationless and tautological.
02:18:52 Brett5 joins (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net)
02:22:53 <KicksonButt> monochrom: The classes I attended would have been much better with such approach. Our instructor ended up making a confusion around these terms
02:23:52 <geekosaur> is-a also implies to most programmers OOP, but typeclasses are not OOP despite the name
02:23:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:25:19 <geekosaur> (but I stand by it in the lowercase one because it's mathematical terminology in that case so I'm kinda stuck with it. should have used the uppercase one to indicate the Haskell typeclass though)
02:27:22 × OftenFaded quits (~OftenFade@user/tisktisk) (Quit: Client closed)
02:28:26 <monochrom> In the case of math, fmap becomes one bullet point among 2 or 3 bullet points of the data of functor. So one still doesn't say "fmap is a functor".
02:29:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
02:29:47 <monochrom> Fortunately, I don't teach a math course, I teach a programming course, so I never need to say the "f is a functor" math wording. >:)
02:30:09 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 276 seconds)
02:30:59 <probie> "f is a functor and an instance of Functor"
02:31:41 vanishingideal joins (~vanishing@user/vanishingideal)
02:32:04 × sonolin quits (~michael@user/sonolin) (Ping timeout: 265 seconds)
02:33:42 sonolin joins (~michael@174-26-31-216.phnx.qwest.net)
02:34:06 × sonolin quits (~michael@174-26-31-216.phnx.qwest.net) (Changing host)
02:34:07 sonolin joins (~michael@user/sonolin)
02:38:40 × tv quits (~tv@user/tv) (Read error: Connection reset by peer)
02:39:39 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
02:40:24 hgolden joins (~hgolden@2603:8000:9d00:3ed1:2d8:61ff:feaa:be45)
02:40:54 rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca)
02:41:14 × tdammers quits (~tdammers@82-150-212-87.ftth.glasoperator.nl) (Ping timeout: 245 seconds)
02:44:34 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
02:46:42 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
02:47:18 × fmira quits (~user@user/fmira) (Quit: fmira)
02:48:05 fmira joins (~user@user/fmira)
02:49:00 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
02:51:51 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
02:54:10 tdammers joins (~tdammers@82-150-212-87.ftth.glasoperator.nl)
02:54:29 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
02:54:57 ryanbooker joins (uid4340@id-4340.hampstead.irccloud.com)
02:55:25 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:00:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:02:03 ethantwardy joins (user@user/ethantwardy)
03:02:49 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
03:02:52 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
03:03:01 × Brett5 quits (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net) (Quit: Client closed)
03:07:34 × tdammers quits (~tdammers@82-150-212-87.ftth.glasoperator.nl) (Ping timeout: 252 seconds)
03:10:24 × yangby quits (~secret@218.72.98.138) (Ping timeout: 240 seconds)
03:10:56 × tomboy64 quits (~tomboy64@user/tomboy64) (*.net *.split)
03:10:56 × aforemny quits (~aforemny@i577BEE5E.versanet.de) (*.net *.split)
03:10:56 × mulk quits (~mulk@p5b11254a.dip0.t-ipconnect.de) (*.net *.split)
03:10:56 × rini quits (~rini@user/rini) (*.net *.split)
03:10:56 × masterbuilder quits (~quassel@user/masterbuilder) (*.net *.split)
03:10:56 × mesaoptimizer quits (~mesaoptim@user/PapuaHardyNet) (*.net *.split)
03:10:56 × rachelambda quits (~rachelamb@cust-95-80-25-71.csbnet.se) (*.net *.split)
03:10:56 × emergence quits (emergence@vm0.max-p.me) (*.net *.split)
03:10:56 × dostoyevsky2 quits (~sck@user/dostoyevsky2) (*.net *.split)
03:10:56 × rdcdr quits (~rdcdr@user/rdcdr) (*.net *.split)
03:10:56 × nschoe quits (~nschoe@82-65-202-30.subs.proxad.net) (*.net *.split)
03:10:56 × zfnmxt quits (~zfnmxt@user/zfnmxt) (*.net *.split)
03:10:56 × Clint quits (~Clint@user/clint) (*.net *.split)
03:10:56 × meejah quits (~meejah@rutas.meejah.ca) (*.net *.split)
03:10:56 × wz1000 quits (~zubin@static.11.113.47.78.clients.your-server.de) (*.net *.split)
03:10:56 × barthandelous01 quits (barth@triton.blinkenshell.org) (*.net *.split)
03:10:56 × Dykam quits (Dykam@dykam.nl) (*.net *.split)
03:10:56 × tmr quits (~tamer@user/tamer) (*.net *.split)
03:10:56 × aku quits (aku@65.108.245.241) (*.net *.split)
03:11:13 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:13:35 masterbuilder joins (~quassel@user/masterbuilder)
03:14:22 aforemny joins (~aforemny@2001:9e8:6ce6:8a00:ba1a:a166:2953:a01a)
03:15:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
03:17:41 yangby joins (~secret@218.72.98.138)
03:19:04 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
03:19:51 aku joins (aku@65.108.245.241)
03:19:52 Clint joins (~Clint@user/clint)
03:19:53 dostoyevsky2 joins (~sck@user/dostoyevsky2)
03:19:54 meejah joins (~meejah@rutas.meejah.ca)
03:19:57 rini joins (~rini@user/rini)
03:19:58 emergence joins (emergence@vm0.max-p.me)
03:20:00 wz1000 joins (~zubin@static.11.113.47.78.clients.your-server.de)
03:20:01 nschoe joins (~nschoe@2a01:e0a:8e:a190:70f8:56a2:d0db:fe4d)
03:20:02 zfnmxt joins (~zfnmxt@user/zfnmxt)
03:20:03 rdcdr joins (~rdcdr@user/rdcdr)
03:20:04 rachelambda joins (~rachelamb@cust-95-80-25-71.csbnet.se)
03:20:08 tmr joins (~tamer@5.2.74.82)
03:20:08 tomboy64 joins (~tomboy64@user/tomboy64)
03:20:08 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
03:20:35 mulk joins (~mulk@p5b11254a.dip0.t-ipconnect.de)
03:20:37 Dykam joins (Dykam@dykam.nl)
03:21:11 tdammers joins (~tdammers@82-150-212-87.ftth.glasoperator.nl)
03:21:31 barthandelous01 joins (barth@triton.blinkenshell.org)
03:26:54 × yangby quits (~secret@218.72.98.138) (Ping timeout: 240 seconds)
03:27:01 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:29:34 × KicksonButt quits (~quassel@187.21.174.221) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
03:31:38 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
03:34:24 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
03:34:39 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:36:54 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
03:37:49 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
03:37:53 Brett25 joins (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net)
03:39:40 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
03:42:47 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
03:48:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
03:48:18 gorignak joins (~gorignak@user/gorignak)
03:50:45 × troojg quits (~troojg@user/troojg) (Ping timeout: 276 seconds)
03:53:33 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
03:55:49 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
03:57:25 weary-traveler joins (~user@user/user363627)
03:57:29 × notzmv quits (~umar@user/notzmv) (Ping timeout: 245 seconds)
03:58:19 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
03:58:34 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:02:27 × td_ quits (~td@i5387092C.versanet.de) (Ping timeout: 276 seconds)
04:03:29 td_ joins (~td@i5387093D.versanet.de)
04:05:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
04:08:47 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:09:39 korrykatti joins (~korrykatt@user/korrykatti)
04:10:33 notzmv joins (~umar@user/notzmv)
04:13:35 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
04:15:54 aforemny_ joins (~aforemny@2001:9e8:6ccb:4000:5e66:f8ae:2e96:5c20)
04:16:48 × aforemny quits (~aforemny@2001:9e8:6ce6:8a00:ba1a:a166:2953:a01a) (Ping timeout: 246 seconds)
04:22:47 homo_ joins (~homo@82-128-196-26.bb.dnainternet.fi)
04:23:09 × homo_ quits (~homo@82-128-196-26.bb.dnainternet.fi) (Changing host)
04:23:09 homo_ joins (~homo@user/homo)
04:24:29 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:26:45 × homo quits (~homo@user/homo) (Ping timeout: 252 seconds)
04:26:46 homo_ is now known as homo
04:31:36 × CrunchyFlakes quits (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
04:33:14 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
04:33:43 CrunchyFlakes joins (~CrunchyFl@ip1f13e94e.dynamic.kabel-deutschland.de)
04:36:24 × Pozyomka quits (~pyon@user/pyon) (Ping timeout: 244 seconds)
04:38:22 Pozyomka joins (~pyon@user/pyon)
04:44:48 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:49:51 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:56:51 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
04:57:43 falafel joins (~falafel@2603:8000:b4f0:62a0:5eb1:a3f:a835:5033)
05:04:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
05:04:43 × ryanbooker quits (uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
05:13:31 <iqubic> So, I have some data of type `Map k (Maybe v)` What's the best way to convert this to a `[(k, v)]` containing only the data from the key value pairs where I have a Just value stored?
05:14:40 <iqubic> Oh, it turns out that list comprehensions can do pattern matching. Neat.
05:16:04 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:17:09 <iqubic> getData m = [(k, v) | (k, Just v) <- M.assocs m]
05:19:22 yangby joins (~secret@218.72.98.138)
05:19:49 × cheater quits (~Username@user/cheater) (Quit: Going offline, see ya! (www.adiirc.com))
05:21:29 × weary-traveler quits (~user@user/user363627) (Read error: Connection reset by peer)
05:23:52 weary-traveler joins (~user@user/user363627)
05:24:39 × vulpine quits (xfnw@user/meow/xfnw) (Quit: Connection reset by purr)
05:26:07 vulpine joins (xfnw@user/meow/xfnw)
05:26:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
05:34:29 <mauke> if this turns out to be traverse again ...
05:34:33 <mauke> ah, no
05:38:30 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:39:40 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
05:42:02 × Pixi` quits (~Pixi@user/pixi) (Quit: Leaving)
05:43:14 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
05:44:55 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
05:46:25 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
05:46:27 × falafel quits (~falafel@2603:8000:b4f0:62a0:5eb1:a3f:a835:5033) (Ping timeout: 276 seconds)
05:46:56 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
05:49:24 cheater joins (~Username@user/cheater)
05:49:35 <jackdk> % import qualified Data.Map as Map
05:49:35 <yahb2> <no output>
05:49:40 <jackdk> % import Control.Lens
05:49:40 <yahb2> <no location info>: error: [GHC-35235] ; Could not find module ‘Control.Lens’. ; It is not a module in the current program, or in any known package.
05:49:45 <jackdk> % :q
05:49:45 <yahb2> <bye>
05:50:03 <jackdk> anyway: `(Map.fromList [("hello", Just "world"), ("we wait for", Nothing), ("come on and", Just "slam")]) ^@.. itraversed <. folded`
05:54:02 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
05:54:26 <jackdk> Hm, you can use `_Just` instead of `folded` and it won't mess with the index, meaning you can use `.` instead of `<.`
05:55:18 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
05:58:31 <Leary> :t M.assocs . M.mapMaybe id
05:58:32 <lambdabot> M.Map k (Maybe a) -> [(k, a)]
05:58:45 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
05:58:54 <jackdk> Leary: nice.
05:58:56 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
06:00:29 michalz joins (~michalz@185.246.207.205)
06:04:55 Pixi joins (~Pixi@user/pixi)
06:05:34 Square joins (~Square@user/square)
06:07:27 × mange quits (~user@user/mange) (Quit: Quittin' time!)
06:08:52 × fmira quits (~user@user/fmira) (Quit: fmira)
06:09:03 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:09:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:10:50 cheater_ joins (~Username@user/cheater)
06:11:30 × cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds)
06:11:35 cheater_ is now known as cheater
06:12:59 × cheater quits (~Username@user/cheater) (Read error: Connection reset by peer)
06:13:44 cheater joins (~Username@user/cheater)
06:14:25 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
06:14:38 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:19:33 cyanteeth joins (~cyanteeth@user/cyanteeth)
06:20:09 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
06:20:48 × cyanteeth quits (~cyanteeth@user/cyanteeth) (Client Quit)
06:23:37 × Brett25 quits (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net) (Quit: Client closed)
06:25:32 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:30:40 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
06:34:14 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
06:35:26 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
06:39:00 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
06:41:21 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
06:43:49 Square2 joins (~Square4@user/square)
06:47:13 × Square quits (~Square@user/square) (Ping timeout: 248 seconds)
06:47:53 robobub joins (uid248673@id-248673.uxbridge.irccloud.com)
06:48:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:59:23 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:01:39 mesaoptimizer joins (~mesaoptim@user/PapuaHardyNet)
07:03:49 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:04:33 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:08:29 matsurago joins (~matsurago@240b:10:b3a1:1700:b208:b72c:53fc:819f)
07:09:09 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:10:47 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:13:26 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out)
07:15:30 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
07:16:40 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
07:20:59 × ft quits (~ft@p508db9c7.dip0.t-ipconnect.de) (Quit: leaving)
07:25:35 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
07:26:32 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:31:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:39:17 × arthurvl quits (~arthurvl@77-174-49-144.fixed.kpn.net) (Quit: stroomwerk)
07:42:20 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
07:46:30 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection)
07:46:44 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
07:47:32 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
07:49:04 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Remote host closed the connection)
07:49:12 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073)
07:52:24 JuanDaugherty joins (~juan@user/JuanDaugherty)
07:58:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
08:00:39 caconym joins (~caconym@user/caconym)
08:02:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
08:04:19 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
08:06:49 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:10:29 acidjnk_new3 joins (~acidjnk@p200300d6e7283f42e8f4273a1ef84d34.dip0.t-ipconnect.de)
08:11:44 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:16:53 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
08:27:32 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:32:38 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
08:35:00 korrykatti joins (~korrykatt@user/korrykatti)
08:37:11 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
08:37:28 CiaoSen joins (~Jura@2a05:5800:2ed:3200:ca4b:d6ff:fec1:99da)
08:42:11 housemate joins (~housemate@2405:6e00:242b:e64:7c12:4309:4b5a:92c0)
08:42:35 Brett70 joins (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net)
08:43:20 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
08:48:03 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
08:49:17 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:54:21 × sonolin quits (~michael@user/sonolin) (Ping timeout: 246 seconds)
08:58:41 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
08:59:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:03:49 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
09:07:53 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
09:14:01 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Quit: ZNC 1.8.2 - https://znc.in)
09:14:36 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
09:15:34 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
09:16:54 chele joins (~chele@user/chele)
09:19:53 × housemate quits (~housemate@2405:6e00:242b:e64:7c12:4309:4b5a:92c0) (Quit: Nothing to see here. I wasn't there. https://files.catbox.moe/4yru45.pdf)
09:32:15 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
09:32:55 korrykatti joins (~korrykatt@user/korrykatti)
09:42:10 × korrykatti quits (~korrykatt@user/korrykatti) (Ping timeout: 252 seconds)
09:42:53 korrykatti joins (~korrykatt@user/korrykatti)
09:45:34 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:51:22 lxsameer joins (~lxsameer@Serene/lxsameer)
09:59:49 × driib318 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
10:00:26 driib318 joins (~driib@vmi931078.contaboserver.net)
10:05:47 fp joins (~Thunderbi@2001:708:20:1406::1370)
10:09:26 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
10:16:36 × alp quits (~alp@2001:861:8ca0:4940:9e8e:b300:b6f0:b48e) (Ping timeout: 246 seconds)
10:17:30 × krjst quits (~krjst@2604:a880:800:c1::16b:8001) (Ping timeout: 246 seconds)
10:19:27 krjst joins (~krjst@2604:a880:800:c1::16b:8001)
10:19:29 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
10:21:33 <fp> So I keep running into issues where I want to use a function that I perceive to be simple and are are common in other languages' standard libraries, like "split string by delimiter". However, I find that often these functions either don't exist or require external dependencies. Is the culture with Haskell that you're often remaking simple functions, or am taking an un-idiomatic approach, or am I at an uncomfortable part of the learning curve and it
10:22:33 × malte quits (~malte@mal.tc) (Remote host closed the connection)
10:22:49 <fp> am I at an uncomfortable part of the learning curve and it's not actually that bad?
10:23:23 <jackdk> fp: there are a number of packages that are bundled with GHC and necessary for pretty much any nontrivial work (text, bytestring, containers all immediately spring to mind). You should not fear depending on packages like these
10:24:20 malte joins (~malte@mal.tc)
10:24:30 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
10:24:49 <jackdk> There is also an "uncomfortable part of a learning curve" thing where sometimes a function you might expect to exist is actually defined with a more general name and sometimes it's not obvious that it does what you want. `traverse` is the classic example, where it's the solution to a great many common things you want your program to do
10:25:44 <fp> So I started to use Text, but then it felt wrong that I had to litter everything with =pack "my string"=, especially since the examples in Text /don't/ do that. But the compiler insisted that I was missing the Text monad
10:26:20 <dminuoso> fp: You can use OverloadedStrings to avoid having `pack` everywhere.
10:26:41 <fp> aha, ok
10:26:54 alp joins (~alp@2001:861:8ca0:4940:d3d7:b90a:479f:639b)
10:27:21 <fp> Also, out of curiosity, what is Haskell used for these days? I'm aware that pandoc is written in Haskell
10:27:31 <jackdk> yep, pretty much everyone turns on overloaded strings. This is another one of those "part of the curve" things where most libraries will use Text but some insist on using String. Work in Text wherever possible
10:28:50 <jackdk> it's great for web services and "connect thing to other thing" type code. It's fantastic to bind someone else's REST API with an actual parser, and fail noisily when you get an unexpected result instead of your program silently doing unexpected things
10:29:12 <jackdk> I use it as my go-to general-purpose programming language, both in and out of work
10:29:46 <jackdk> shellcheck is another really handy tool written in Haskell
10:30:05 <leif> Case in point: postgrest (which supabase uses) is written in Haskell
10:31:00 <dminuoso> Now it's time for someone to write Haskcheck written in bash.
10:31:09 <fp> Forgive me, why would one want a parser for a REST API?
10:31:25 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
10:31:48 ChaiTRex joins (~ChaiTRex@user/chaitrex)
10:32:24 <kaol> For JSON?
10:33:36 <dminuoso> Sure, inside JSON.
10:34:41 <dminuoso> With JSON you should eventually parse those string literals into data types.
10:39:13 <fp> Ah ok so for deserializing JSON into the relevant Data
10:41:55 <fp> I guess I just didn't think of that because I'm used to having =my_struct.from_string(...)= provided by a library and not really even thinking of it as parsing
10:42:46 sprotte24 joins (~sprotte24@p200300d16f152100688be7f09d717f48.dip0.t-ipconnect.de)
10:47:14 <davean> fp: ah you aren't the person who has to make those libraries constantly :-p
10:51:12 × Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds)
10:57:09 × CiaoSen quits (~Jura@2a05:5800:2ed:3200:ca4b:d6ff:fec1:99da) (Ping timeout: 265 seconds)
10:57:51 __monty__ joins (~toonn@user/toonn)
11:06:18 <fp> davean: truly bless those people
11:07:09 <davean> The worst REST-like API I ever had to deal with was shopify. Other than that they're mostly easy
11:07:59 tv joins (~tv@user/tv)
11:23:43 nucleus joins (~grigory@77-174-131-220.fixed.kpn.net)
11:24:50 × leif quits (~leif@210.54.33.112) (Ping timeout: 252 seconds)
11:28:16 <haskellbridge> <maerwald> jackdk: OverloadedStrings is garbage (the way it's implemented)
11:29:23 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
11:30:43 L29Ah joins (~L29Ah@wikipedia/L29Ah)
11:34:18 × fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 246 seconds)
11:34:25 <int-e> :t S.dropWhileAntitone
11:34:26 <lambdabot> (a -> Bool) -> S.Set a -> S.Set a
11:40:23 fp joins (~Thunderbi@130.233.70.169)
11:41:24 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
11:54:34 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
11:56:28 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
12:08:02 × sprotte24 quits (~sprotte24@p200300d16f152100688be7f09d717f48.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
12:10:29 × kronicmage quits (~kronicmag@neotame.csclub.uwaterloo.ca) (Ping timeout: 248 seconds)
12:12:24 × yangby quits (~secret@218.72.98.138) (Ping timeout: 240 seconds)
12:13:42 CiaoSen joins (~Jura@2a05:5800:2ed:3200:ca4b:d6ff:fec1:99da)
12:14:47 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
12:19:31 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:ad4b:6165:bf6d:b915)
12:28:56 ystael joins (~ystael@user/ystael)
12:33:23 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
12:46:34 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:48:12 <hellwolf> maerwald, what alternatives you would propose?
12:51:29 korrykatti joins (~korrykatt@user/korrykatti)
12:51:56 × alp quits (~alp@2001:861:8ca0:4940:d3d7:b90a:479f:639b) (Remote host closed the connection)
12:52:19 alp joins (~alp@2001:861:8ca0:4940:d3d7:b90a:479f:639b)
12:53:13 JuanDaugherty joins (~juan@user/JuanDaugherty)
12:57:56 Square2 joins (~Square4@user/square)
13:02:03 × MyNetAz quits (~MyNetAz@user/MyNetAz) (Read error: Connection reset by peer)
13:02:37 kronicmage joins (~kronicmag@neotame.csclub.uwaterloo.ca)
13:09:04 MyNetAz joins (~MyNetAz@user/MyNetAz)
13:09:14 <haskellbridge> <sm> @fp, base and other libraries included with ghc are quite comprehensive, but you'll still find things missing. It's common to write your own helpers, but also you'll find some go to extra packages that provide some missing pieces on hackage. Sometimes it's worth using those.
13:09:37 <haskellbridge> <sm> Safe, split, and Extra are some that I'm using
13:09:52 <haskellbridge> <sm> * safe,
13:10:36 <haskellbridge> <sm> * extra
13:12:57 voonij joins (~voonij@163.123.195.138)
13:13:00 <haskellbridge> <sm> regex is one to consider if you need those
13:14:08 <haskellbridge> <sm> fp: , base and other libraries included with ghc are quite comprehensive, but you'll still find things missing. It's common to write your own helpers, but also you'll find some go to extra packages that provide some missing pieces on hackage. Sometimes it's worth using those.
13:14:37 <haskellbridge> <sm> fp: , base and other libraries included with ghc are quite comprehensive, but you'll still find things missing. It's common to write your own helpers, but also you'll find some go to extra packages that provide some missing pieces. Sometimes it's worth using those.
13:15:24 <fp> So what you're saying is there's a set of basic libraries that you want to include by default in most projects
13:15:41 <merijn> fp: There's definitely a set of basic libraries I use in almost everything, yes
13:16:20 <merijn> fp: The main argument for NOT including such things in base/ghc is "now your iteration cycle is limited by the GHC release schedule", since you cannot upgrade base without changing GHC versions
13:16:26 <haskellbridge> <sm> I try not to depend too eagerly, but at some point yes
13:17:16 <merijn> fp: So there's a decently sized group of people that actually want to shrink base *even* more (or rather, making it a separate library independent of GHC)
13:17:25 <haskellbridge> <sm> I think the Haskell library ecosystem is still evolving. It's not that polished in some ways
13:17:36 <fp> And with these ={- LANGUAGE OverloadedStrings -}= deals, is that like a compiler option?
13:17:41 <merijn> fp: Yes
13:18:07 <merijn> fp: GHC by default tries to (mostly) conform to the Haskell Report 2010 as a standard and any deviations/extensions to the report are opt-in
13:18:14 <int-e> {-# ... #-} is syntax for pragmas
13:18:32 <merijn> fp: As opposed to, say, gcc which deviates from the C standard by default unless you opt-out
13:18:33 <fp> Oh excuse me I forgot the ##
13:18:57 <int-e> {- ... -} would just be a comment
13:19:00 <merijn> fp: In practice since there's only like, 2 (well 1, and two halves) haskell compilers it doesn't really matter
13:19:19 <fp> Ah yeah if you give it like -x c++23 instead of -x gnu++23
13:19:48 × voonij quits (~voonij@163.123.195.138) (Remote host closed the connection)
13:19:54 <merijn> fp: Exactly, so GHC by default will use Haskell2010 and anything else is opt-in. With the pragmas allowing you to opt-in per file
13:20:09 <merijn> fp: Although even then GHC does not strictly implement Haskell2010, see https://ghc.gitlab.haskell.org/ghc/doc/users_guide/bugs.html
13:20:31 <merijn> Most of those deviations are like, ultra ultra nitpicky, though
13:20:59 <fp> > The main argument for NOT including such things in base/ghc is "now your iteration cycle is limited by the GHC release schedule"
13:20:59 <fp> Is "your" meaning the library author's?
13:21:00 <lambdabot> <hint>:1:49: error: parse error on input ‘in’
13:21:06 <merijn> fp: Yeah
13:21:20 <merijn> fp: Since base is wired into GHC it is not updatable
13:22:07 <merijn> So if you put stuff in base any changes/fixes/improvements require users to upgrade their compiler version which is...not ideal :)
13:23:01 <merijn> fp: Any real program almost always ends up depending on a bunch of stuff, like containers, text, bytestring, transformers
13:24:26 <dminuoso> 13:17:25 +haskellbridge │ <sm> I think the Haskell library ecosystem is still evolving. It's not that polished in some ways
13:24:37 <Leary> merijn: Only old GHC default to `Haskell2010`. Modern GHCs use `GHC202*` instead.
13:24:44 <dminuoso> The more I use python these days, one of the things that Haskell really lacks is a cohesive singular logging infrastructure.
13:25:07 <dminuoso> You take 3 components together, each uses their own logging library, you cant easily change their behavior, filter them, combine them.. it's a mess.
13:25:32 <merijn> Leary: Yeah, but most cabal invocations default to Haskell2010
13:25:43 <merijn> Since only very recent versions of cabal-spec default to anything else
13:26:01 <merijn> dminuoso: We lack slf4j ;)
13:26:38 <dminuoso> Never done Java, so I cant comment on that (joke?)
13:26:39 <merijn> There's not much I like about the Java ecosystem, but slf4j is actually really nice
13:27:08 <dminuoso> The `logging` library in Python is really nice and modular too.
13:27:22 <dminuoso> After a few years, I would say its perhaps the best part of it.
13:27:23 <merijn> dminuoso: No, I'm serious. It's essentially just a bunch of interfaces with no implementation, but they're incredibly lightweight, so 95% of libraries just use that
13:27:42 <merijn> dminuoso: And then as a user you can just "plug in" whatever slf4j supporting logging implementation you like at runtime
13:29:10 <dminuoso> Ah, yeah `logging` comes with some builtin handlers but you can easily add your own too.
13:29:11 <fp> I see, so out-of-the-box Haskell is fairly limited and you typically want to add a couple libraries and compiler options to get the full language experience
13:29:25 <dminuoso> And the best part, is that `logging` is a stdlib module which is why everybody uses it.
13:29:37 <dminuoso> So it does not require velocity and community consensus as much.
13:29:58 <dminuoso> In Haskell its completely fragmented, and every year a new framework comes out.
13:31:13 <haskellbridge> <sm> what do you mean by out-of-the-box Haskell ?
13:31:31 <haskellbridge> <sm> ghc and the libraries shipped with it ?
13:31:52 <merijn> sm: Yeah, the "batteries included" thing Python always brags about
13:32:01 <dminuoso> fp: The reality in haskell is that the ecosystem is structured differently. Even stuff you might consider as "stdlib" is split onto packages that you have to depend upon.
13:32:07 <haskellbridge> <sm> well, we need to define that
13:32:17 <dminuoso> But it's not as obvious, so it easily feels as if depending on `text` introduces external dependencies.
13:32:31 <merijn> fp: "batteries included" matters in python, because their package management is absolutely godawful, so if it's not shipped with the interpreter it's a nightmare to get working nicely together :p
13:33:07 <merijn> fp: I have some packages that are literally 1 or 2 modules in size, because that means I can maintain them in one place and easily use them across projects
13:33:18 <dminuoso> merijn: I would reserve "absolutely godawful" for other languages like JavaScript.
13:33:20 <merijn> since dependencies are so simple to add
13:33:41 <dminuoso> merijn: Python has a bunch of things for packaging that make it.. bad but not godawful.
13:34:07 <merijn> fp: The only downside of external dependencies are: 1) version compatibility if they're not super actively maintained, and 2) some packages have giant transitive dependency trees (which blows up your compile time and binary size)
13:34:49 <merijn> dminuoso: They don't even have version bounds in python, it's near impossible to maintain a consistent set of dependencies over a long time
13:35:18 <dminuoso> Maybe I just feel fine because I'm managing python packages as nix closures anyway..
13:35:34 <dminuoso> merijn: And you have version bounds in python.
13:35:35 <haskellbridge> <sm> for the "simple things" OP asked about first, sometimes it's worth writing or stealing them yourself. But yes real world haskell software almost always depends on a 10 or 20 or more direct dependencies
13:35:54 <fp> I guess I'm just comparing to like python or rust where most basic string or list manipulations are available in stdlib, but with haskell you need to bring in a library
13:35:54 <haskellbridge> <sm> -a
13:36:10 <dminuoso> merijn: you can just declare `foo=0.1.*` in your requirements.txt
13:36:18 <merijn> dminuoso: Yeah, but no one uses them and they're not solved transitively
13:36:23 <haskellbridge> <sm> @fp: yes. We are bad on ergonomic for some basic things
13:36:30 <dminuoso> merijn: No, they are used.
13:36:31 <haskellbridge> <sm> * ergonomics
13:36:50 <merijn> dminuoso: Not in the packages I encountered up until a year ago :p
13:36:50 <dminuoso> merijn: While some prefer pyproject.toml - both are in use and I regularly see boundaries.
13:36:59 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:37:10 <haskellbridge> <sm> fp: but, give us some examples ? Sometimes it's there but not obvious yet
13:37:31 <haskellbridge> <sm> fp: : yes. We are bad on ergonomics for some basic things
13:40:35 <SrPx> ok im confused about pseq
13:40:36 <merijn> fp: I mean, the stdlib has quite a lot of list stuff, the splitting functions are just a bit underwhelming
13:40:45 <fp> The two that I caught yesterday were =split ',' "thing1,thing2,thing3" --["thing1", "thing2", "thing3"]= and =mapAtIndex (\idx val -> ...)=. I was able to make them myself, but so many languages have that kind of =split=, and Mathematica has =MapIndexed=
13:40:50 <SrPx> `a` par `b` pseq `c` means `c` can only run after `a` and `b` are wnf?
13:40:57 <fp> =mapWithIndex= excuse me
13:41:39 <merijn> fp: mapWithIndex is just "map f . zip [0..]"
13:41:51 <fp> Right and I did that
13:41:52 <SrPx> I don't understand why "`a` par `b` pseq `c`" is used, to me it reads like "run a and b in parallel, then run c after b is wnf". why would we do that? like why run "c" after "b" is wnf specifically
13:41:52 <merijn> fp: So that's under the Fairbairn threshold ;)
13:42:22 <SrPx> oops, I mean "a `par` b `pseq` b". using backticks here is weird
13:42:57 <merijn> fp: (on the Haskell list there was a whole bunch of discussion about simple/small helper stuff, when the Fairbairn Threshold was proposed which is: A function is only worth adding if implementing it is harder/more work than remembering what name the implementation had)
13:43:39 <haskellbridge> <sm> splitting by element is probably the best example. You're right, it's not in Data.List (I think) which is a bit crazy. You have to add the "split" package.
13:44:10 <haskellbridge> <sm> merijn: that threshold is quite subjective isn't it
13:44:26 <merijn> fp: Actually you could even do "zipWith f [0..]", but if you're not used to laziness yet, you probably didn't think of zipping an infinite list as index
13:45:02 <merijn> fp: At any rate, the split package has every possible method of splitting you could ever want and it's only dependency is base (aka GHC), so it's really cheap to include as dependency
13:45:12 <haskellbridge> <sm> mapWithIndex doesn't seem so needed
13:45:41 <Leary> SrPx: "a `par` b `pseq` c" means "Spark off a and b before evaluating c locally."
13:45:46 <merijn> > zipWith (+) [0..] [5,4,3,2]
13:45:47 <lambdabot> [5,5,5,5]
13:46:17 <merijn> fp: added bonus of the zipWith approach is that you're not even limited to indices starting at 0/incrementing by 1 :p
13:46:29 <int-e> Leary: Nope. b will be evaluated locally, before c.
13:46:48 <int-e> (there's only one `par` so at most one spark)
13:46:51 <Leary> Ohhh. Right, yes. Been a while since I used this.
13:47:25 <int-e> There's no point in writing a `par` b `pseq` b; the pattern is for more complex expressions involving a and b.
13:48:40 <SrPx> Leary: oh *that* makes more sense
13:48:43 <int-e> (but there's also no real harm in writing b `pseq` b for b)
13:49:08 hiecaq joins (~hiecaq@user/hiecaq)
13:49:15 <Leary> SrPx: Please note int-e's correction if you missed it; I wasn't quite right.
13:49:43 <haskellbridge> <sm> so how about merging split in base, eh
13:49:56 <SrPx> yes just read it, mb
13:51:28 <SrPx> ok so my question is: if I want to make 4 "lines" of sparks (i.e., one per core), as in, a0 a1 a2 a3 b0 b1 b2 b3 c0 c1 c2 c3 ... such that a0 finishes before b0, and b0 finished before c0, and so on
13:51:52 <merijn> sm: That just brings us back to: Now it cannot change without a GHC release
13:51:57 <SrPx> what I could do is spark everything with `par`, and then do `a0 pseq a1 pseq a2 ...`, and `b0 pseq b1 pseq b2 ...`, etc.?
13:52:11 <merijn> sm: tbh, I get what you want, but the best way to achieve it would be the ancient quest of split-base
13:52:22 <haskellbridge> <sm> but it's split. I think it has probably been stable for years.
13:52:37 <haskellbridge> <sm> I think it would make sense
13:52:58 <merijn> sm: It's not split in the sense of having no GHC internals and being upgradable
13:53:29 <nucleus> \c
13:53:29 <merijn> Until base is upgradeable/separately installable from GHC moving more things into it is a fool's errand
13:54:34 <haskellbridge> <sm> I didn't quite understand your reply there. IMHO this is a module that could be merged under Data.List and noone would regret it
13:55:07 <merijn> sm: Yeah, but then if you come up with a new method of splitting or some other tweaks/additions, you couldn't release those without upgrade GHC
13:55:31 weary-traveler joins (~user@user/user363627)
13:55:53 <haskellbridge> <sm> for unstable stuff you need to release quickly, you can still have the separate split package
13:57:32 <int-e> SrPx: Well you'd need 3 `par` (one thread of evaluation can be left to the original thread) and then arrange for such `pseq`s. Hardcoding the number of threads doesn't sound great though.
13:59:31 <SrPx> int-e: yeah I know, the fundamental issue is that the underlying C-side evaluator() I'm calling inside the sparks only supports up to 16 parallel calls (due to resource constraints). so I'm here trying to understand how to balance haskell's spark model (which is perfectly fit for the actual problem being solved), with this underlying limitation
14:00:00 <int-e> SrPx: This doesn't do the kind of round-robin scheduling you ask for but I wonder whether it's good enough for what you actually need: https://hackage.haskell.org/package/parallel-3.2.2.0/docs/Control-Parallel-Strategies.html#v:parListChunk
14:00:22 <int-e> Oh, eww.
14:02:03 <int-e> Just don't go beyond +RTS -N16 -RTS then?
14:03:01 <int-e> What could possibly go wrong? (I /think/ that restricts things to 16 simultaneous FFI calls but I'm not 100% sure; it's not exactly a thing you'd usually need to control.)
14:08:22 × fp quits (~Thunderbi@130.233.70.169) (Ping timeout: 252 seconds)
14:10:15 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
14:11:55 <SrPx> int-e: but even with -N16, Haskell might call the `reduce()` function more than 16 times in parallel, right? like I need to pass a "thread id" to reduce(), and I can't call reduce(1,...) reduce(1,...) at the same time because it will be using the same stack. i need to make sure one finishes before the other
14:11:58 <SrPx> i'll check it ty
14:12:28 <int-e> SrPx: Well, no, unless your FFI calls back into Haskell.
14:12:43 <int-e> Well, FF (foreign function)
14:12:59 <SrPx> hmm
14:14:14 <int-e> The -N16 restricts the RTS to 16 capabilities, and while the mapping of capabilities to OS threads is flaky, there's at most one active FFI call per capability.
14:14:40 <SrPx> ah interesting
14:14:42 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
14:15:06 korrykatti joins (~korrykatt@user/korrykatti)
14:17:17 <int-e> (In this model, if you call back into Haskell from a foreign function, that function is suspended until the Haskell evaluation returns... suspended calls are not active.)
14:18:57 × CiaoSen quits (~Jura@2a05:5800:2ed:3200:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds)
14:27:24 AlexNoo_ joins (~AlexNoo@178.34.161.102)
14:29:24 × AlexZenon quits (~alzenon@5.139.233.9) (Ping timeout: 260 seconds)
14:30:25 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
14:30:44 × AlexNoo quits (~AlexNoo@5.139.233.9) (Ping timeout: 252 seconds)
14:33:52 AlexZenon joins (~alzenon@178.34.161.102)
14:37:27 × rekahsoft quits (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) (Remote host closed the connection)
14:39:09 Sgeo joins (~Sgeo@user/sgeo)
14:43:23 rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca)
14:54:14 <SrPx> makes sense, I won't do that though
14:59:56 × rekahsoft quits (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) (Remote host closed the connection)
15:00:25 × matsurago quits (~matsurago@240b:10:b3a1:1700:b208:b72c:53fc:819f) (Quit: Leaving)
15:05:13 <merijn> int-e: That's not true
15:05:28 <merijn> foreign calls run in their own threads separate from capabilities
15:05:41 <merijn> Only unsafe foreign calls run directly on a capability
15:05:54 <merijn> Which is one of the reasons they're unsafe :p
15:06:51 <merijn> Also, I did some benchmarks (admittedly a decade ago) and beyond 20 capabilities you get some heavy diminishing returns on how fast things run in GHC even if you have more cores
15:07:10 <merijn> because coordination of GCs becomes quite slot
15:08:40 × notzmv quits (~umar@user/notzmv) (Ping timeout: 260 seconds)
15:19:46 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
15:21:30 rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca)
15:21:35 <int-e> merijn: Hrm, you're right. I was hoping those capabilities would only be available for GC, not for Haskell evaluation.
15:21:59 <int-e> Now I'm sad :P
15:28:48 × Brett70 quits (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net) (Quit: Client closed)
15:32:59 × zfnmxt quits (~zfnmxt@user/zfnmxt) (Remote host closed the connection)
15:33:09 <SrPx> merijn: wait so haskell wouldn't run efficiently in a 256-core CPU? even if you didn't hit the GC?
15:33:30 <merijn> There's a bunch of assumptions in that question
15:33:37 <SrPx> i mean using sparks
15:33:44 <SrPx> or forkIO presumably
15:34:07 <merijn> The current threaded runtime system is not optimised for something like that, so no it wouldn't really perform super well
15:34:41 <merijn> That said, nothing is (theoretically) stopping you from implementing a new runtime system that handles it better
15:35:00 <merijn> It's just that there's not many people running >16 cores, so why optimise things for that
15:35:01 <int-e> SrPx: Experiment supporting merijn's correction: https://paste.tomsmeding.com/b15BJnc5 -- uses 800% CPU with -N1. Sigh :-/
15:35:08 <SrPx> merijn: makes sense
15:35:33 <int-e> . o O ( Give it another 6 months. )
15:35:40 <SrPx> int-e: oh well
15:35:59 <int-e> (forkIO vs forkOS makes no difference)
15:36:00 <merijn> Haskell, being a language doesn't inherently have a speed/performance. The implementation does, but you can swap out/improve implementations :p
15:36:08 <merijn> int-e: forkOS is just forkIO, but pinned
15:36:31 <SrPx> I mean it has exponential lambdas so it is inherently slower thank linear languages :p but that's fine and fair
15:36:35 <int-e> merijn: I didn't expect a difference, but it felt worth mentioning :P
15:37:06 <SrPx> merijn: do you have any idea how I could solve my problem? of making sure that my sparks don't call reduce() more than 16 times at the same time
15:37:10 mari-estel joins (~mari-este@user/mari-estel)
15:37:12 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
15:37:14 <SrPx> I guess the way to go is to use `pseq` ?
15:37:19 <merijn> Actually, I know the perfect library for that
15:37:37 korrykatti joins (~korrykatt@user/korrykatti)
15:37:39 <merijn> It just doesn't work on recent GHC, because I don't have a personal dev machine atm :p
15:38:06 <merijn> so I haven't updated in...a while
15:38:16 <SrPx> hmmm i can still have a look no worries
15:38:36 × Pozyomka quits (~pyon@user/pyon) (Quit: brb)
15:39:12 <merijn> It does need IO, though
15:39:29 <int-e> I guess the reason for continuing Haskell evaluation while a safe FFI call is in progress is that we don't want to stop Haskell evaluation for blocking calls (that wait for IO).
15:39:32 <merijn> I kept having to reinvent "run this function N times in parallel", so I just stuffed it in a package: https://hackage.haskell.org/package/broadcast-chan-0.2.1.2/docs/BroadcastChan.html#g:4
15:39:38 <merijn> int-e: yeah
15:40:17 <int-e> merijn: Anyway thanks for the correction :)
15:42:23 Pozyomka joins (~pyon@user/pyon)
15:42:29 <Leary> SrPx, merijn: N.B. https://hackage.haskell.org/package/unliftio-0.2.25.0/docs/UnliftIO-Async.html#g:9
15:44:01 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2)
15:52:34 × hiecaq quits (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92))
15:56:13 ft joins (~ft@p508db9c7.dip0.t-ipconnect.de)
15:59:01 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:07:55 AlexNoo_ is now known as AlexNoo
16:10:54 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
16:12:00 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
16:16:33 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:20:40 × weary-traveler quits (~user@user/user363627) (Quit: Konversation terminated!)
16:21:09 weary-traveler joins (~user@user/user363627)
16:23:33 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:24:25 zfnmxt joins (~zfnmxt@user/zfnmxt)
16:25:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:27:41 sonolin joins (~michael@174-26-31-216.phnx.qwest.net)
16:27:50 × sonolin quits (~michael@174-26-31-216.phnx.qwest.net) (Client Quit)
16:28:54 sonolin joins (~michael@user/sonolin)
16:28:55 × nucleus quits (~grigory@77-174-131-220.fixed.kpn.net) (Ping timeout: 264 seconds)
16:29:07 × sonolin quits (~michael@user/sonolin) (Client Quit)
16:29:33 sonolin joins (~michael@174-26-31-216.phnx.qwest.net)
16:29:35 × sonolin quits (~michael@174-26-31-216.phnx.qwest.net) (Client Quit)
16:30:11 notzmv joins (~umar@user/notzmv)
16:30:44 sonolin joins (~michael@user/sonolin)
16:32:23 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:32:45 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
16:33:49 × zfnmxt quits (~zfnmxt@user/zfnmxt) (Remote host closed the connection)
16:43:49 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
16:48:21 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
16:51:41 Square joins (~Square@user/square)
16:54:50 × Square2 quits (~Square4@user/square) (Ping timeout: 252 seconds)
16:56:16 tremon joins (~tremon@83.80.159.219)
16:58:14 euphores joins (~SASL_euph@user/euphores)
16:59:11 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:01:05 zfnmxt joins (~zfnmxt@user/zfnmxt)
17:03:48 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
17:06:26 sindu joins (~sindu@176.75.224.1)
17:07:02 × TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Remote host closed the connection)
17:08:31 TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker)
17:09:27 × Square quits (~Square@user/square) (Remote host closed the connection)
17:14:33 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:18:47 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
17:18:58 × gorignak quits (~gorignak@user/gorignak) (Quit: quit)
17:19:16 gorignak joins (~gorignak@user/gorignak)
17:23:36 × alp quits (~alp@2001:861:8ca0:4940:d3d7:b90a:479f:639b) (Ping timeout: 246 seconds)
17:28:03 × mari-estel quits (~mari-este@user/mari-estel) ()
17:29:56 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:32:39 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:c53d:8130:21bb:6073) (Read error: Connection reset by peer)
17:34:22 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
17:35:49 × notzmv quits (~umar@user/notzmv) (Ping timeout: 248 seconds)
17:36:12 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:38:40 × picnoir quits (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.4.2)
17:39:52 JeremyB99 joins (~JeremyB99@128.211.254.217)
17:40:22 × JeremyB99 quits (~JeremyB99@128.211.254.217) (Read error: Connection reset by peer)
17:40:37 picnoir joins (~picnoir@about/aquilenet/vodoo/NinjaTrappeur)
17:41:28 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:45:19 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
17:45:39 JeremyB99 joins (~JeremyB99@128.211.254.217)
17:45:43 × JeremyB99 quits (~JeremyB99@128.211.254.217) (Read error: Connection reset by peer)
17:48:05 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
17:48:48 korrykatti joins (~korrykatt@user/korrykatti)
17:49:50 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
17:55:38 JeremyB99 joins (~JeremyB99@2607:fb90:d9e2:c2c7:2868:24a3:ddc7:6fab)
17:57:50 × JeremyB99 quits (~JeremyB99@2607:fb90:d9e2:c2c7:2868:24a3:ddc7:6fab) (Read error: Connection reset by peer)
17:59:51 fmira joins (~user@user/fmira)
18:00:41 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:01:02 <haskellbridge> <maralorn> Can I have an associated type be "forall a. a"?
18:02:56 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:03:00 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
18:03:13 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:05:17 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
18:07:54 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:07:57 KicksonButt joins (~quassel@187.21.174.221)
18:08:59 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
18:09:22 nucleus joins (~grigory@77-174-131-220.fixed.kpn.net)
18:09:38 ljdarj joins (~Thunderbi@user/ljdarj)
18:10:13 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
18:11:56 Lord_of_Life_ is now known as Lord_of_Life
18:12:31 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
18:14:30 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
18:14:44 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:20:28 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
18:23:13 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:27:43 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
18:28:01 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
18:28:42 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:31:26 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
18:32:02 × philopsos quits (~caecilius@user/philopsos) (Quit: Lost terminal)
18:32:08 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
18:32:18 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
18:32:47 rvalue joins (~rvalue@user/rvalue)
18:33:57 × nucleus quits (~grigory@77-174-131-220.fixed.kpn.net) (Ping timeout: 248 seconds)
18:36:46 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:38:05 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
18:38:28 philopsos joins (~caecilius@user/philopsos)
18:38:30 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:38:46 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:41:47 Brett78 joins (~Brett@cpc91312-watf11-2-0-cust1213.15-2.cable.virginm.net)
18:41:48 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
18:42:07 A_Dragon is now known as Festive
18:43:07 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:44:10 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:49:32 homo_ joins (~homo@82-128-196-26.bb.dnainternet.fi)
18:49:37 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
18:49:55 × homo_ quits (~homo@82-128-196-26.bb.dnainternet.fi) (Changing host)
18:49:55 homo_ joins (~homo@user/homo)
18:50:24 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
18:51:36 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
18:53:38 × homo quits (~homo@user/homo) (Ping timeout: 252 seconds)
18:53:38 homo_ is now known as homo
18:54:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
18:55:07 briandaed joins (~root@185.234.210.211)
18:55:20 rvalue- joins (~rvalue@user/rvalue)
18:55:55 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 244 seconds)
18:55:56 <tomsmeding> maralorn: what would that even mean? Isn't that equivalent to writing `Void`?
18:56:27 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
18:58:46 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
19:00:53 × glguy quits (glguy@libera/staff/glguy) (Remote host closed the connection)
19:01:41 rvalue- is now known as rvalue
19:01:49 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
19:01:50 glguy joins (glguy@libera/staff/glguy)
19:05:25 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
19:08:51 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:13:29 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
19:15:11 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:22:31 <SrPx> is there any easy way to merge an arbitrary monad with IO?
19:22:44 <glguy> no
19:22:46 <SrPx> specifically trying to make this one work in an IO context:
19:22:48 <SrPx> https://gist.github.com/VictorTaelin/60d3bc72fb4edefecd42095e44138b41
19:23:00 <SrPx> currently resorting to unsafePerformIO
19:24:13 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:26:26 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
19:30:57 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
19:35:46 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 265 seconds)
19:36:15 Square2 joins (~Square4@user/square)
19:38:29 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
19:39:06 × thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
19:39:11 sprotte24 joins (~sprotte24@p200300d16f1521002020c35b0109401f.dip0.t-ipconnect.de)
19:39:51 thaumavorio joins (~thaumavor@thaumavor.io)
19:42:00 <tomsmeding> SrPx: could you define `data CollapseT m a = Sup Int (CollapseT m a) (CollapseT m a) | Val (m a)`?
19:42:17 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
19:42:18 × korrykatti quits (~korrykatt@user/korrykatti) (Remote host closed the connection)
19:42:46 <tomsmeding> I didn't look carefully at what the monad is actually doing, but just from the type, it seems okay
19:43:17 <SrPx> oh is it so simple
19:43:24 <SrPx> interesting
19:44:12 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
19:44:31 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
19:44:55 <tomsmeding> SrPx: do you know monad transformers? :p
19:45:09 <SrPx> almost nothing, never had to use them other than recently
19:45:16 <tomsmeding> not every monad can be made into a monad transformers, but some very useful ones can
19:45:25 <tomsmeding> *a monad transformer
19:45:25 <SrPx> had a pretty fine experience recently though, but not in deep
19:46:02 <tomsmeding> so do note that this trick does _not_ work with any arbitrary monad
19:46:53 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
19:49:10 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
19:51:55 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
19:52:45 × briandaed quits (~root@185.234.210.211) (Remote host closed the connection)
19:53:13 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
19:56:01 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
19:56:14 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
19:57:38 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:00:04 × caconym quits (~caconym@user/caconym) (Quit: bye)
20:00:08 × haetsal quits (~quassel@221.138.168.192) (Remote host closed the connection)
20:00:42 caconym joins (~caconym@user/caconym)
20:01:02 haetsal joins (~quassel@221.138.168.192)
20:02:03 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
20:09:50 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:14:13 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:16:12 weary-traveler joins (~user@user/user363627)
20:16:22 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
20:22:29 alp joins (~alp@2001:861:8ca0:4940:b0c1:7414:d62f:3e1f)
20:23:14 × KicksonButt quits (~quassel@187.21.174.221) (Ping timeout: 244 seconds)
20:24:19 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
20:24:32 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
20:25:14 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:26:59 Square joins (~Square@user/square)
20:29:48 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
20:37:24 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
20:38:46 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
20:39:46 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
20:39:49 <SrPx> I see
20:40:36 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
20:41:28 Everything joins (~Everythin@94.153.5.84)
20:42:13 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
20:45:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
20:45:33 Guest81 joins (~Guest81@2601:283:4a00:7ab0:72:a12f:2eef:8bc6)
20:51:48 × Guest81 quits (~Guest81@2601:283:4a00:7ab0:72:a12f:2eef:8bc6) (Quit: Client closed)
20:53:31 tabemann_ joins (~tabemann@2600:1700:7990:24e0:39a4:2ebe:705f:fb9f)
20:53:50 pavonia joins (~user@user/siracusa)
20:55:45 × tabemann quits (~tabemann@2600:1700:7990:24e0:b476:3399:7ccb:c1f7) (Ping timeout: 260 seconds)
20:55:58 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:00:25 notzmv joins (~umar@user/notzmv)
21:00:33 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
21:01:46 × kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux)
21:02:01 kimiamania joins (~65804703@user/kimiamania)
21:02:27 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:03:05 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
21:08:37 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
21:09:00 OftenFaded joins (~OftenFade@user/tisktisk)
21:11:22 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
21:18:06 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
21:22:15 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:24:34 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
21:25:13 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:27:39 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
21:28:49 JeremyB99 joins (~JeremyB99@2607:fb90:d362:60:94c9:3ce9:328b:546d)
21:36:20 <sprotte24> https://paste.tomsmeding.com/7FMcgqwq
21:36:35 × JeremyB99 quits (~JeremyB99@2607:fb90:d362:60:94c9:3ce9:328b:546d) (Ping timeout: 260 seconds)
21:36:42 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:36:57 <sprotte24> I want to make 2 little changes to the code presented in paste
21:37:00 × Everything quits (~Everythin@94.153.5.84) (Quit: Lost terminal)
21:37:19 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Remote host closed the connection)
21:37:24 <sprotte24> can you help me?
21:37:33 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:38:09 × Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds)
21:39:06 <glguy> sprotte24: your play definition needs a parameter with all the past guesses
21:40:10 <sprotte24> yes, but only the secret word should be taken from command line parameter.
21:40:30 Feuermagier joins (~Feuermagi@user/feuermagier)
21:40:40 <glguy> That's fine
21:41:17 <glguy> To read command line parameters use System.Environment.getArgs
21:41:34 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
21:44:02 <sprotte24> can I use something like lambda?
21:45:44 <glguy> I'm not sure what you mean
21:46:23 <sprotte24> i fear, signature hangman :: char -> ... will not help for IO?
21:47:10 JeremyB99 joins (~JeremyB99@pal-210-106-52.itap.purdue.edu)
21:47:48 × JeremyB99 quits (~JeremyB99@pal-210-106-52.itap.purdue.edu) (Read error: Connection reset by peer)
21:48:01 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:48:08 ljdarj1 joins (~Thunderbi@user/ljdarj)
21:48:08 × michalz quits (~michalz@185.246.207.205) (Remote host closed the connection)
21:48:41 <glguy> Eventually you'll write a main::IO()
21:48:50 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
21:48:50 ljdarj1 is now known as ljdarj
21:48:57 <glguy> That can call hangman with extra arguments
21:49:47 <monochrom> You have seen "play :: String -> IO ()" and it's just fine so clearly you already know you have that option.
21:50:40 <sprotte24> perhaps main can be named as hangman, and the old hangman can use another name?
21:51:07 <monochrom> I trust that you know you can extrapolate that to "Char -> IO ()" or even "Char -> String -> IO ()" etc etc. If you cannot, you have trouble with much more basic concepts.
21:51:23 <sprotte24> I am ordered to start with hangman secretword
21:51:35 <sprotte24> It is an exercise
21:51:55 <geekosaur> that's the name of the program, not the function
21:52:08 arthurvl joins (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net)
21:54:39 <sprotte24> The solution will be tested automatically, and only starting with hangman is allowed without main
21:55:08 <geekosaur> no
21:55:32 <geekosaur> I cannot believe they want you to start with advanced topics (specifically, using something not called maon as the entry point)
21:56:49 <geekosaur> either you are being asked to produce a function which will be hooked into a test framework, or you are being required to produce a program in which the entry point will be called main
21:57:04 <geekosaur> how about you show us the actual problem?
21:57:28 JeremyB99 joins (~JeremyB99@2607:fb91:1062:461e:102a:ca46:8fa0:97ac)
21:57:32 ljdarj1 joins (~Thunderbi@user/ljdarj)
21:57:33 <monochrom> I don't think of that as advanced. It's just String -> IO (). Instead, it is getArgs that, maybe not "advanced" but certainly a little topic that can be skipped.
21:58:31 × JeremyB99 quits (~JeremyB99@2607:fb91:1062:461e:102a:ca46:8fa0:97ac) (Read error: Connection reset by peer)
21:59:06 <monochrom> I bet it's going to be a tester that expects hangman :: String -> IO (). I do that all the time when I'm teaching.
21:59:08 <sprotte24> this is a given smple, it should work from hgci>
21:59:12 <sprotte24> ghci
21:59:14 <sprotte24> ghci>
21:59:14 <sprotte24> hangman
21:59:15 <sprotte24> "hallo"
21:59:15 <sprotte24> Secret: *****Enter a character: HSecret: h****Enter a character: lSecret: h*ll*Enter a character: oSecret: h*lloEnter a character: eSecret: h*lloEnter a character: aSolved in 5 tries.
21:59:49 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
21:59:49 ljdarj1 is now known as ljdarj
21:59:53 <sprotte24> bad formatted
22:01:44 <sprotte24> should work as a function from command line ghci> hangman "hallo"
22:03:18 KicksonButt joins (~quassel@187.21.174.221)
22:08:50 <sprotte24> could the following help: module main where ...?
22:09:28 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:11:38 <geekosaur> okay, that is not "command line", command line is what you start ghci from
22:11:45 <geekosaur> ghc prompt is something different
22:11:49 <geekosaur> *ghci
22:12:42 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab)
22:13:48 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
22:13:48 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab) (Read error: Connection reset by peer)
22:13:59 <sprotte24> excuse me, I am a beginner :-)
22:14:55 <sprotte24> ghci> hangman "hallo"
22:15:23 <geekosaur> right, so you want a function, you don't need to mess with the command line (which involves `main` and `getArgs` etc.)
22:15:29 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab)
22:16:03 <monochrom> This is why you must always provide authentic examples and authentic original unabridge questions / assignments handouts / problem statements. You must never "explain in your own words" to show that you are making it all up.
22:16:24 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 264 seconds)
22:16:36 <sprotte24> "hallo" is may secret word, it should not be entered while hangman asks for solution chard
22:17:07 gmg joins (~user@user/gehmehgeh)
22:17:20 <sprotte24> -d
22:17:27 <geekosaur> right, so that's a parameter to your function
22:18:10 <geekosaur> and from that we know that the type is at least `hangman :: String -> IO ()` but may involve more because you still haven't told us what the assignment actually is
22:19:56 <sprotte24> the assignment is: hangman "secretword"
22:22:13 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
22:22:43 <geekosaur> does the function have a result, or is everything simply printed?
22:25:14 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab) (Remote host closed the connection)
22:25:22 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab)
22:25:28 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:26:08 <sprotte24> it prints the answer on the screen, at the end writuing "solved in x tries."
22:27:27 <sprotte24> ald the 2. point is: The correct chars should be accumulated for the next step
22:32:00 × Square quits (~Square@user/square) (Ping timeout: 276 seconds)
22:32:01 <sprotte24> hallo h h**** l h*ll* ...
22:32:45 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:39:34 SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky)
22:41:09 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab) (Remote host closed the connection)
22:41:16 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab)
22:47:09 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
22:51:30 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:43ac:8410:148a:7aab) (Ping timeout: 276 seconds)
22:51:44 JeremyB99 joins (~JeremyB99@2607:fb90:2ce0:c5f3:a191:442e:a62a:6f1c)
22:52:19 × JeremyB99 quits (~JeremyB99@2607:fb90:2ce0:c5f3:a191:442e:a62a:6f1c) (Remote host closed the connection)
22:52:28 JeremyB99 joins (~JeremyB99@2607:fb90:2ce0:c5f3:a191:442e:a62a:6f1c)
22:55:55 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
22:59:57 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 246 seconds)
23:00:18 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
23:01:20 supercode joins (~supercode@user/supercode)
23:08:00 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 264 seconds)
23:08:45 × JeremyB99 quits (~JeremyB99@2607:fb90:2ce0:c5f3:a191:442e:a62a:6f1c) (Ping timeout: 260 seconds)
23:09:07 JeremyB99 joins (~JeremyB99@2607:ac80:407:7:ed12:9dd2:dd5b:4b2c)
23:11:28 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:17:08 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
23:20:43 stiell joins (~stiell@gateway/tor-sasl/stiell)
23:26:39 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 244 seconds)
23:27:45 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:30:24 × JeremyB99 quits (~JeremyB99@2607:ac80:407:7:ed12:9dd2:dd5b:4b2c) (Ping timeout: 246 seconds)
23:31:38 × supercode quits (~supercode@user/supercode) (Quit: Client closed)
23:32:27 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
23:32:50 JeremyB99 joins (~JeremyB99@128.211.252.96)
23:33:02 × JeremyB99 quits (~JeremyB99@128.211.252.96) (Read error: Connection reset by peer)
23:35:54 JeremyB99 joins (~JeremyB99@2607:ac80:406:4:6afb:20af:26a0:ecad)
23:38:57 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 276 seconds)
23:43:07 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:43:45 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Ping timeout: 248 seconds)
23:45:06 × SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving)
23:47:07 × JeremyB99 quits (~JeremyB99@2607:ac80:406:4:6afb:20af:26a0:ecad) (Read error: Connection reset by peer)
23:48:04 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
23:52:17 JeremyB99 joins (~JeremyB99@2607:ac80:406:4:6afb:20af:26a0:ecad)
23:53:18 × JeremyB99 quits (~JeremyB99@2607:ac80:406:4:6afb:20af:26a0:ecad) (Read error: Connection reset by peer)
23:53:56 × sonolin quits (~michael@user/sonolin) (Ping timeout: 252 seconds)
23:55:16 merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl)
23:55:18 × notzmv quits (~umar@user/notzmv) (Ping timeout: 265 seconds)
23:59:43 × merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)

All times are in UTC on 2024-12-06.