2023/02/15

2023-02-15 00:02:43 +0100CiaoSen(~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-02-15 00:04:30 +0100myyo(~myyo@71-211-142-215.hlrn.qwest.net) ()
2023-02-15 00:07:15 +0100anderson_(~ande@user/anderson)
2023-02-15 00:07:29 +0100thongpv87(~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877)
2023-02-15 00:07:33 +0100mechap(~mechap@user/mechap) (Quit: WeeChat 3.8)
2023-02-15 00:08:16 +0100anderson(~ande@user/anderson) (Quit: bye)
2023-02-15 00:09:51 +0100anderson_anderson
2023-02-15 00:10:25 +0100eldritch(~eldritch@user/eldritch) (Quit: bye)
2023-02-15 00:12:32 +0100patrl(~patrl@user/patrl) (Ping timeout: 265 seconds)
2023-02-15 00:15:22 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2023-02-15 00:21:17 +0100Guest23(~Guest23@c-24-56-246-176.customer.broadstripe.net)
2023-02-15 00:21:33 +0100thongpv87(~thongpv87@2402:9d80:3bb:7b3a:c56c:8a07:1b68:1877) (Remote host closed the connection)
2023-02-15 00:22:09 +0100Guest23(~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit)
2023-02-15 00:22:20 +0100Guest23(~Guest23@c-24-56-246-176.customer.broadstripe.net)
2023-02-15 00:22:35 +0100falafel(~falafel@2607:fb91:143f:e47f:834a:55d5:1880:33be) (Ping timeout: 255 seconds)
2023-02-15 00:22:49 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:42c5:d1db:9622:c029)
2023-02-15 00:23:46 +0100Guest23(~Guest23@c-24-56-246-176.customer.broadstripe.net) (Client Quit)
2023-02-15 00:27:53 +0100utis(~utis@178.255.149.137)
2023-02-15 00:29:12 +0100 <utis> if on voidlinux i try to install ghc and stack and run stack setup i get
2023-02-15 00:29:14 +0100 <utis> Error: [S-9443]
2023-02-15 00:29:14 +0100 <utis> No setup information found for ghc-9.2.5 on your platform.
2023-02-15 00:29:14 +0100 <utis> This probably means a GHC bindist has not yet been added for OS key 'linux64-ncurses6'.
2023-02-15 00:29:17 +0100 <utis> Supported versions: ghc-7.10.3, ghc-8.0.1, ghc-8.0.2, ghc-8.2.1, ghc-8.2.2
2023-02-15 00:29:52 +0100 <utis> doas that mean i have to download an older version of ghc?
2023-02-15 00:30:58 +0100 <c_wraith> that is a very old list of ghc versions
2023-02-15 00:31:22 +0100 <geekosaur> where did you get ghc and stack from?
2023-02-15 00:31:29 +0100 <c_wraith> I don't use stack though, so I have no idea why it thinks that is appropriate
2023-02-15 00:32:03 +0100gpncarl_(~gpncarl@210.12.195.6)
2023-02-15 00:32:55 +0100 <utis> voidlinux repo
2023-02-15 00:33:10 +0100 <utis> but i ran stack upgrade too
2023-02-15 00:33:54 +0100 <geekosaur> add ~/.local/bin to your PATH or you'll still be running the voidlinux one, which may be old enough to be looking at the ancient stack configuration repo
2023-02-15 00:35:01 +0100 <utis> yeah, i did that
2023-02-15 00:35:28 +0100 <geekosaur> beginning or end of PATH?
2023-02-15 00:35:56 +0100 <utis> `type stack` confirms $HOME/bin/stack
2023-02-15 00:36:14 +0100 <utis> (which i symlinked to ~/.local/bin)
2023-02-15 00:36:39 +0100gpncarl_(~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
2023-02-15 00:37:30 +0100 <geekosaur> weird
2023-02-15 00:37:57 +0100 <utis> version is 2.9.3
2023-02-15 00:40:38 +0100 <geekosaur> https://docs.haskellstack.org/en/stable/faq/#how-do-i-install-ghc-in-stack-when-it-fails-with-the-… might work, if it's the libtinfo issue
2023-02-15 00:41:30 +0100gurkenglas(~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
2023-02-15 00:43:41 +0100 <geekosaur> although that faq looks ancient
2023-02-15 00:44:24 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2023-02-15 00:45:33 +0100jargon(~jargon@184.101.95.90)
2023-02-15 00:48:01 +0100 <utis> geekosaur: that worked! thanks!
2023-02-15 00:49:19 +0100Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2023-02-15 00:51:48 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds)
2023-02-15 00:53:41 +0100jargon(~jargon@184.101.95.90) (Remote host closed the connection)
2023-02-15 00:53:49 +0100bitmapper(uid464869@2a03:5180:f:2::7:17e5) (Quit: Connection closed for inactivity)
2023-02-15 00:55:54 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-15 00:57:27 +0100utis(~utis@178.255.149.137) (Quit: leaving)
2023-02-15 00:57:42 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
2023-02-15 01:08:56 +0100jargon(~jargon@184.101.95.90)
2023-02-15 01:09:38 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-02-15 01:15:05 +0100merijn(~merijn@86.86.29.250)
2023-02-15 01:17:24 +0100AWizzArd_(~code@gehrels.uberspace.de) (Changing host)
2023-02-15 01:17:24 +0100AWizzArd_(~code@user/awizzard)
2023-02-15 01:17:31 +0100AWizzArd_AWizzArd
2023-02-15 01:20:09 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.)
2023-02-15 01:21:09 +0100merijn(~merijn@86.86.29.250) (Ping timeout: 252 seconds)
2023-02-15 01:22:13 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2023-02-15 01:22:46 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 01:23:07 +0100mauke[i]_(~mauke@user/mauke)
2023-02-15 01:24:31 +0100mauke[i](~mauke@user/mauke) (Ping timeout: 248 seconds)
2023-02-15 01:24:32 +0100mauke[i]_mauke[i]
2023-02-15 01:25:58 +0100 <Clint> is there something that applies a function recursively until the output equals the input?
2023-02-15 01:28:34 +0100werneta(~werneta@137.79.195.231) (Remote host closed the connection)
2023-02-15 01:28:56 +0100 <hpc> do you want fix, or (==) specifically?
2023-02-15 01:29:04 +0100 <int-e> :t fst . head . dropWhile (uncurry (/=)) . ap zip tail . iterate ?f
2023-02-15 01:29:05 +0100 <lambdabot> (Eq a, ?f::a -> a) => a -> a
2023-02-15 01:29:28 +0100 <int-e> (I wouldn't use that; explicit recursion will be far more readable)
2023-02-15 01:30:49 +0100 <int-e> anyway, it's not a `base` function
2023-02-15 01:30:54 +0100 <Clint> hpc: (==) specifically
2023-02-15 01:30:59 +0100 <Clint> okay, fair enough
2023-02-15 01:31:26 +0100 <int-e> Though I'd bet that there are half a dozen hackage packages defining this.
2023-02-15 01:31:42 +0100 <int-e> (But no particular one comes to mind.)
2023-02-15 01:32:08 +0100 <Clint> clearly i have no idea how to search for this
2023-02-15 01:32:17 +0100 <hpc> maybe for numerical functions specifically, to do stuff like newton's method?
2023-02-15 01:32:27 +0100 <int-e> @hoogle Eq a => (a -> a) -> a -> a
2023-02-15 01:32:28 +0100 <lambdabot> Data.Generics.SYB mkT :: (a -> a) -> (a -> a)
2023-02-15 01:32:28 +0100 <lambdabot> Prelude ($) :: forall r a (b :: TYPE r) . (a -> b) -> a -> b
2023-02-15 01:32:28 +0100 <lambdabot> Prelude ($!) :: forall r a (b :: TYPE r) . (a -> b) -> a -> b
2023-02-15 01:32:56 +0100 <int-e> Right, that's not a very decriptive type
2023-02-15 01:33:34 +0100master_(~master@user/masterbuilder)
2023-02-15 01:35:11 +0100nehsou^(~nehsou@c-24-30-76-89.hsd1.ga.comcast.net)
2023-02-15 01:36:49 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2023-02-15 01:37:51 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-02-15 01:39:26 +0100zaquest(~notzaques@5.130.79.72)
2023-02-15 01:42:10 +0100zeenk(~zeenk@2a02:2f04:a214:1e00::7fe) (Quit: Konversation terminated!)
2023-02-15 01:43:58 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-02-15 01:49:00 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
2023-02-15 01:49:15 +0100acidjnk(~acidjnk@p200300d6e715c408e15a683b71611690.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2023-02-15 01:51:41 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 01:59:07 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-02-15 01:59:07 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-02-15 01:59:07 +0100wroathe(~wroathe@user/wroathe)
2023-02-15 02:01:18 +0100gpncarl_(~gpncarl@210.12.195.6)
2023-02-15 02:10:01 +0100zmt01(~zmt00@user/zmt00) (Read error: Connection reset by peer)
2023-02-15 02:10:27 +0100zmt01(~zmt00@user/zmt00)
2023-02-15 02:10:36 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Remote host closed the connection)
2023-02-15 02:10:52 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-02-15 02:11:10 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-02-15 02:12:18 +0100mei(~mei@user/mei) (Remote host closed the connection)
2023-02-15 02:13:04 +0100Angelz(Angelz@angelz.oddprotocol.org) (Ping timeout: 252 seconds)
2023-02-15 02:13:40 +0100manwithluck(~manwithlu@194.177.28.192) (Ping timeout: 260 seconds)
2023-02-15 02:15:16 +0100manwithluck(~manwithlu@194.177.28.192)
2023-02-15 02:16:15 +0100[exa](~exa@user/exa/x-3587197) (Ping timeout: 248 seconds)
2023-02-15 02:16:59 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-02-15 02:18:07 +0100[exa](~exa@srv3n.blesmrt.net)
2023-02-15 02:18:22 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 02:18:42 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-02-15 02:20:07 +0100mei(~mei@user/mei)
2023-02-15 02:21:18 +0100 <master_> hello, what's the status of dependent haskell exactly?
2023-02-15 02:21:38 +0100master_themasterbuilder
2023-02-15 02:22:17 +0100 <geekosaur> stuck
2023-02-15 02:23:23 +0100themasterbuildermasterbuilder
2023-02-15 02:23:42 +0100 <masterbuilder> ah :/ so don't hold your breath?
2023-02-15 02:24:13 +0100 <geekosaur> the very first phase of it (`forall x ->`) has run into issues https://github.com/ghc-proposals/ghc-proposals/issues/558
2023-02-15 02:24:17 +0100 <geekosaur> correct
2023-02-15 02:24:47 +0100 <masterbuilder> thanks I'll have a read
2023-02-15 02:29:14 +0100ddellacosta(~ddellacos@146.70.166.203) (Quit: WeeChat 3.8)
2023-02-15 02:30:44 +0100xbarnett(~xbarnett@89.44.10.165)
2023-02-15 02:32:50 +0100ddellacosta(~ddellacos@146.70.166.203)
2023-02-15 02:34:19 +0100larrythecow(~Rahul_San@user/oldfashionedcow)
2023-02-15 02:34:27 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Ping timeout: 255 seconds)
2023-02-15 02:38:52 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-02-15 02:42:32 +0100telser(~quassel@user/telser)
2023-02-15 02:42:50 +0100npmania(~Thunderbi@45.8.223.203) (Ping timeout: 260 seconds)
2023-02-15 02:43:20 +0100fmlatghor(~lcoogan@c-73-177-167-149.hsd1.va.comcast.net)
2023-02-15 02:43:51 +0100johnw(~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in)
2023-02-15 02:43:52 +0100telser_(~quassel@user/telser) (Ping timeout: 248 seconds)
2023-02-15 02:43:52 +0100Angelz(Angelz@2605:6400:30:fc15:9bd1:2217:41cd:bb15)
2023-02-15 02:44:01 +0100xff0x(~xff0x@2405:6580:b080:900:a328:3e4d:f447:d561) (Ping timeout: 252 seconds)
2023-02-15 02:45:01 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-02-15 02:46:22 +0100larrythecowoldfashionedcow
2023-02-15 02:49:51 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 255 seconds)
2023-02-15 02:55:24 +0100 <sclv> is Niklas Hambüchen ever on irc?
2023-02-15 02:55:58 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 246 seconds)
2023-02-15 02:58:02 +0100shailangsa_(~shailangs@host165-120-169-78.range165-120.btcentralplus.com) (Remote host closed the connection)
2023-02-15 03:01:05 +0100xbarnett(~xbarnett@89.44.10.165) (Quit: Leaving)
2023-02-15 03:10:32 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 03:12:50 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 03:17:24 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
2023-02-15 03:19:33 +0100zaquest(~notzaques@5.130.79.72) (Ping timeout: 255 seconds)
2023-02-15 03:21:50 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-02-15 03:22:22 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2023-02-15 03:28:00 +0100rnat(uid73555@2a03:5180:f:2::1:1f53)
2023-02-15 03:28:09 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:42c5:d1db:9622:c029) (Remote host closed the connection)
2023-02-15 03:29:59 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2023-02-15 03:32:36 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds)
2023-02-15 03:32:45 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-02-15 03:34:11 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:fd19:6778:f8a1:cf50)
2023-02-15 03:34:59 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 252 seconds)
2023-02-15 03:37:06 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2023-02-15 03:37:33 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds)
2023-02-15 03:39:52 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:fd19:6778:f8a1:cf50) (Remote host closed the connection)
2023-02-15 03:40:00 +0100shailangsa(~shailangs@host165-120-169-78.range165-120.btcentralplus.com)
2023-02-15 03:42:24 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:54e2:c98:72f3:f791)
2023-02-15 03:42:33 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-02-15 03:51:37 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
2023-02-15 03:55:29 +0100gmg(~user@user/gehmehgeh)
2023-02-15 03:56:11 +0100thongpv(~thongpv87@2402:9d80:3bb:7b3a:54e2:c98:72f3:f791) (Remote host closed the connection)
2023-02-15 03:58:14 +0100gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 255 seconds)
2023-02-15 04:01:17 +0100flo[m](~flosansps@2001:470:69fc:105::1:c22d)
2023-02-15 04:08:32 +0100razetime(~Thunderbi@117.193.1.74)
2023-02-15 04:09:10 +0100dtman34(~dtman34@2601:447:d000:93c9:4f13:e7d1:81fd:2aa6) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
2023-02-15 04:09:30 +0100dtman34(~dtman34@2601:447:d000:93c9:45e0:f7b0:cefa:26ff)
2023-02-15 04:16:24 +0100jmorris(uid537181@2a03:5180:f:5::8:325d)
2023-02-15 04:22:00 +0100gpncarl(~gpncarl@210.12.195.6)
2023-02-15 04:23:34 +0100gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2023-02-15 04:23:49 +0100thegeekinside(~thegeekin@189.180.97.223) (Ping timeout: 246 seconds)
2023-02-15 04:24:21 +0100gpncarl_(~gpncarl@210.12.195.6) (Ping timeout: 255 seconds)
2023-02-15 04:24:47 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 248 seconds)
2023-02-15 04:28:52 +0100gentauro(~gentauro@user/gentauro)
2023-02-15 04:36:28 +0100ravamrt(~ravamrt@112.134.192.214)
2023-02-15 04:42:53 +0100ravamrt(~ravamrt@112.134.192.214) (Quit: Leaving.)
2023-02-15 04:44:19 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 04:44:42 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat)
2023-02-15 04:46:05 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:4e8c::)
2023-02-15 04:46:19 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-02-15 04:47:32 +0100ravamrt(~ravamrt@112.134.192.214)
2023-02-15 04:53:53 +0100razetime(~Thunderbi@117.193.1.74) (Remote host closed the connection)
2023-02-15 04:54:05 +0100td_(~td@i5387090E.versanet.de) (Ping timeout: 260 seconds)
2023-02-15 04:55:31 +0100Guest95(~Guest95@202.67.40.15)
2023-02-15 04:55:51 +0100td_(~td@i53870935.versanet.de)
2023-02-15 04:56:42 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2023-02-15 04:58:38 +0100falafel(~falafel@2607:fb91:143f:e47f:f08f:f6f1:9d72:e3df)
2023-02-15 05:01:41 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2023-02-15 05:01:46 +0100 <sm> I seem to remember a nh2
2023-02-15 05:04:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-15 05:12:57 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 05:26:24 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 05:27:12 +0100use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Ping timeout: 248 seconds)
2023-02-15 05:31:32 +0100notzmv(~zmv@user/notzmv)
2023-02-15 05:33:49 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2023-02-15 05:34:29 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
2023-02-15 05:36:25 +0100jinsun(~jinsun@user/jinsun)
2023-02-15 05:37:31 +0100rnat(uid73555@2a03:5180:f:2::1:1f53) (Quit: Connection closed for inactivity)
2023-02-15 05:37:36 +0100falafel(~falafel@2607:fb91:143f:e47f:f08f:f6f1:9d72:e3df) (Ping timeout: 255 seconds)
2023-02-15 05:38:11 +0100razetime(~Thunderbi@117.193.1.74)
2023-02-15 05:44:28 +0100mbuf(~Shakthi@49.204.133.116)
2023-02-15 05:47:56 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
2023-02-15 05:48:17 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2023-02-15 05:49:11 +0100gmg(~user@user/gehmehgeh)
2023-02-15 05:49:52 +0100andrewboltachev(~andrey@178.141.125.176)
2023-02-15 05:50:53 +0100Togooroo(~lalune@216.73.163.231)
2023-02-15 05:51:08 +0100Guest95(~Guest95@202.67.40.15) (Ping timeout: 260 seconds)
2023-02-15 05:53:46 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
2023-02-15 05:55:16 +0100Vajb(~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686) (Read error: Connection reset by peer)
2023-02-15 05:56:14 +0100Vajb(~Vajb@88.195.165.27)
2023-02-15 05:57:52 +0100andrewboltachev(~andrey@178.141.125.176) ()
2023-02-15 06:09:50 +0100hounded(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection)
2023-02-15 06:09:50 +0100hounded_woodstoc(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection)
2023-02-15 06:09:50 +0100hounded_1969(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Read error: Connection reset by peer)
2023-02-15 06:12:15 +0100aweinstock(~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 268 seconds)
2023-02-15 06:13:47 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-02-15 06:15:57 +0100ddellacosta(~ddellacos@146.70.166.203) (Ping timeout: 252 seconds)
2023-02-15 06:19:05 +0100aweinstock(~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com)
2023-02-15 06:26:12 +0100jmorris(uid537181@2a03:5180:f:5::8:325d) (Quit: Connection closed for inactivity)
2023-02-15 06:31:21 +0100Vajb(~Vajb@88.195.165.27) (Ping timeout: 252 seconds)
2023-02-15 06:32:15 +0100Vajb(~Vajb@2001:999:404:9516:d621:6cbe:c71e:5686)
2023-02-15 06:32:22 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-02-15 06:32:22 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-02-15 06:32:22 +0100wroathe(~wroathe@user/wroathe)
2023-02-15 06:35:40 +0100falafel(~falafel@2607:fb91:143f:e47f:92a:83c4:99b:657e)
2023-02-15 06:35:49 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2023-02-15 06:36:46 +0100gmg(~user@user/gehmehgeh)
2023-02-15 06:39:48 +0100jargon(~jargon@184.101.95.90) (Ping timeout: 255 seconds)
2023-02-15 06:45:22 +0100trev(~trev@user/trev)
2023-02-15 06:55:33 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 07:02:17 +0100jakalx(~jakalx@base.jakalx.net)
2023-02-15 07:03:31 +0100thegeekinside(~thegeekin@189.180.97.223)
2023-02-15 07:08:36 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 255 seconds)
2023-02-15 07:09:50 +0100srk(~sorki@user/srk)
2023-02-15 07:11:39 +0100jinsun(~jinsun@user/jinsun) (Ping timeout: 255 seconds)
2023-02-15 07:13:16 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2023-02-15 07:13:42 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2023-02-15 07:14:16 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-02-15 07:33:08 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2023-02-15 07:45:01 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2023-02-15 07:49:59 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
2023-02-15 07:59:41 +0100analoq(~yashi@user/dies) (Ping timeout: 246 seconds)
2023-02-15 08:01:38 +0100analoq(~yashi@user/dies)
2023-02-15 08:04:32 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 08:04:53 +0100 <chreekat> There's one of those on Matrix
2023-02-15 08:11:59 +0100Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-02-15 08:20:44 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:1d05:832d:e3e6:a39e)
2023-02-15 08:21:04 +0100Togooroo(~lalune@216.73.163.231) (Quit: Togooroo)
2023-02-15 08:22:29 +0100kenran(~user@user/kenran)
2023-02-15 08:23:25 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2023-02-15 08:24:15 +0100jakalx(~jakalx@base.jakalx.net) ()
2023-02-15 08:24:16 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds)
2023-02-15 08:27:15 +0100falafel(~falafel@2607:fb91:143f:e47f:92a:83c4:99b:657e) (Ping timeout: 255 seconds)
2023-02-15 08:27:17 +0100michalz(~michalz@185.246.204.107)
2023-02-15 08:31:05 +0100nattiestnate(~nate@202.138.250.37) (Quit: WeeChat 3.8)
2023-02-15 08:32:03 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de)
2023-02-15 08:34:10 +0100nehsou^(~nehsou@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection)
2023-02-15 08:35:12 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 08:36:29 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 08:37:30 +0100Flow(~none@gentoo/developer/flow) (Ping timeout: 260 seconds)
2023-02-15 08:43:06 +0100opticblast(~Thunderbi@172.58.82.191) (Ping timeout: 255 seconds)
2023-02-15 08:43:07 +0100kritzefitz(~kritzefit@debian/kritzefitz) (Ping timeout: 256 seconds)
2023-02-15 08:44:10 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-15 08:50:00 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
2023-02-15 08:53:31 +0100jakalx(~jakalx@base.jakalx.net)
2023-02-15 08:54:18 +0100freeside(~mengwong@129.126.62.10)
2023-02-15 08:56:33 +0100MajorBiscuit(~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a)
2023-02-15 08:57:10 +0100thegeekinside(~thegeekin@189.180.97.223) (Ping timeout: 246 seconds)
2023-02-15 08:59:00 +0100thegeekinside(~thegeekin@189.180.97.223)
2023-02-15 09:04:42 +0100razetime(~Thunderbi@117.193.1.74) (Ping timeout: 255 seconds)
2023-02-15 09:07:54 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com)
2023-02-15 09:16:33 +0100razetime(~Thunderbi@117.193.1.74)
2023-02-15 09:20:00 +0100mc47(~mc47@xmonad/TheMC47)
2023-02-15 09:23:26 +0100gurkenglas(~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de)
2023-02-15 09:24:00 +0100nschoe(~q@141.101.51.197)
2023-02-15 09:25:24 +0100freeside(~mengwong@129.126.62.10) (Ping timeout: 255 seconds)
2023-02-15 09:26:42 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl)
2023-02-15 09:27:52 +0100johnw(~johnw@2600:1700:cf00:db0:c50c:6975:4579:9276)
2023-02-15 09:28:23 +0100jwiegley(~jwiegley@2600:1700:cf00:db0:c50c:6975:4579:9276)
2023-02-15 09:29:22 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-02-15 09:31:15 +0100merijn(~merijn@c-001-001-010.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
2023-02-15 09:31:55 +0100ft(~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving)
2023-02-15 09:33:33 +0100chele(~chele@user/chele)
2023-02-15 09:36:42 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection)
2023-02-15 09:41:04 +0100patrl(~patrl@user/patrl)
2023-02-15 09:43:10 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de)
2023-02-15 09:45:37 +0100shapr(~user@net-5-88-239-92.cust.vodafonedsl.it)
2023-02-15 09:49:33 +0100razetime(~Thunderbi@117.193.1.74) (Remote host closed the connection)
2023-02-15 09:55:35 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-02-15 09:57:41 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
2023-02-15 09:59:29 +0100ezzieygu1wuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 255 seconds)
2023-02-15 10:00:14 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2023-02-15 10:04:21 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com)
2023-02-15 10:09:08 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-02-15 10:11:38 +0100gurkenglas(~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
2023-02-15 10:20:45 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 255 seconds)
2023-02-15 10:21:14 +0100CiaoSen(~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5)
2023-02-15 10:22:19 +0100pavonia(~user@user/siracusa) (Ping timeout: 248 seconds)
2023-02-15 10:24:32 +0100pavonia(~user@user/siracusa)
2023-02-15 10:24:46 +0100Square(~Square4@user/square)
2023-02-15 10:25:53 +0100 <Square> Wouldn it be possible to deprecate String or extend String with Text functionality?
2023-02-15 10:26:01 +0100kritzefitz(~kritzefit@debian/kritzefitz)
2023-02-15 10:26:26 +0100 <merijn> Square: Define "extend" and "Text functionality"?
2023-02-15 10:26:46 +0100 <Square> merijn, idk. I'm thinking from my hip here.
2023-02-15 10:26:54 +0100 <dminuoso_> Square: Not really.
2023-02-15 10:27:14 +0100 <merijn> Also, I see zero value in deprecating String. There's (arguably) some value to deprecating a bunch of stuff that is *using* String, but I don't see why (or even how) you would deprecate String independently of lists
2023-02-15 10:27:35 +0100 <Rembane> Square: What's leading to the question?
2023-02-15 10:27:36 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2023-02-15 10:28:16 +0100 <Square> i got the impression String is just a subset of Text and an unlucky choice. Maybe not?
2023-02-15 10:28:43 +0100 <Rembane> String is a list of Char. I don't know what Text is. :)
2023-02-15 10:29:20 +0100 <merijn> Square: I don't see in what way it is a subset?
2023-02-15 10:29:22 +0100 <Square> ok, I guess I lack enough knowledge to talk about this. nvm =D
2023-02-15 10:29:30 +0100 <merijn> String and Text are *very* different datastructures
2023-02-15 10:29:53 +0100 <hammond__> new to haskell here
2023-02-15 10:30:00 +0100 <hammond__> how are they different.
2023-02-15 10:30:01 +0100 <merijn> Square: Essentially, String is just "a linked list of Char", with all the inherent advantages and/or disadvantages linked lists bring (including lots of overhead from all the list parts)
2023-02-15 10:30:19 +0100 <merijn> Text on the other hand is a "densely packed binary representation of unicode"
2023-02-15 10:30:29 +0100 <merijn> hammond__: See above ;)
2023-02-15 10:31:18 +0100 <merijn> iow, Text consumes about 2 bytes (1, I suppose with the recent UTF-8 based Text) + say, 12ish bytes overhead every KB or so
2023-02-15 10:31:22 +0100 <hammond__> ok :)
2023-02-15 10:31:34 +0100 <merijn> Compare to String which may consume as much as 32 bytes per character
2023-02-15 10:32:00 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
2023-02-15 10:32:15 +0100 <merijn> On the flip side, modifying 1 character in a giant Text block effectively requires you to copy the entire block + 1 change (since immutable)
2023-02-15 10:32:23 +0100gensyst(gensyst@user/gensyst)
2023-02-15 10:33:20 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com)
2023-02-15 10:34:16 +0100 <merijn> As base heuristic use Text anytime you deal with either 1) large blobs of text (like paragraphs/pages worth) or 2) if you're gonna have hundreds of values around (if you have a million 100 character keys, the memory difference adds up)
2023-02-15 10:35:28 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2023-02-15 10:36:08 +0100 <gensyst> How can I match "settings" with separate "corresponding data"? This is what I mean: https://dpaste.com/54Z6R2KFU
2023-02-15 10:36:14 +0100 <gensyst> The problem is that there's a burden on me, the programmer, to keep the two in sync and "error" when I do something unexpected. This is ugly. Can I somehow match the two at compile-time - without burdening the client in any way?
2023-02-15 10:36:18 +0100 <gensyst> (The other problem of the client having to worry about matching the settings with initial state is not a big problem here - I could solve it by providing an "initialState" function)
2023-02-15 10:36:46 +0100 <dminuoso_> gensyst: distribute around in this way
2023-02-15 10:36:53 +0100 <dminuoso_> `data Mode = ModeA | ModeB`
2023-02-15 10:36:55 +0100gmg(~user@user/gehmehgeh)
2023-02-15 10:37:01 +0100 <dminuoso_> Oh hold on that wont work
2023-02-15 10:37:10 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-02-15 10:37:27 +0100 <dminuoso_> Mmm this is an interesting example
2023-02-15 10:37:28 +0100 <merijn> gensyst: Could make Settings a GADT tagged with a phantom
2023-02-15 10:39:52 +0100 <gensyst> merijn, not sure how that would look...
2023-02-15 10:40:50 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2023-02-15 10:40:56 +0100 <merijn> gensyst: https://dpaste.com/HDH7H3L6D
2023-02-15 10:41:02 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 10:41:06 +0100 <merijn> Obligatory: It compiles, but I haven't tested it ;)
2023-02-15 10:41:22 +0100gmg(~user@user/gehmehgeh)
2023-02-15 10:41:32 +0100 <dminuoso_> That looks good
2023-02-15 10:41:42 +0100 <merijn> GHC even correctly warns if you add the wrong branch to the case!
2023-02-15 10:42:09 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 10:42:11 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 264 seconds)
2023-02-15 10:42:27 +0100freeside(~mengwong@122.11.214.229)
2023-02-15 10:42:37 +0100 <merijn> Of course, how well this works depends on if you ever want to "change" the type of the state
2023-02-15 10:43:17 +0100zmt00(~zmt00@user/zmt00)
2023-02-15 10:43:23 +0100 <gensyst> merijn, why would that be a problem
2023-02-15 10:44:27 +0100 <merijn> gensyst: in this example the 'm' encodes the mode, but if you'd want a function where the result is "either 'State A' or 'State B', decided dynamically at runtime", then that type won't work
2023-02-15 10:44:57 +0100zmt01(~zmt00@user/zmt00) (Ping timeout: 255 seconds)
2023-02-15 10:45:09 +0100 <merijn> gensyst: Because then you're in the realm of needing dependent types to figure out the result type of the function makeItHappen
2023-02-15 10:45:28 +0100 <gensyst> i see
2023-02-15 10:45:36 +0100 <gensyst> cool in my use case i won't need that
2023-02-15 10:45:38 +0100 <gensyst> this is mind-blowing
2023-02-15 10:45:39 +0100 <gensyst> thank you
2023-02-15 10:45:52 +0100 <merijn> gensyst: GADTs are pretty neat :)
2023-02-15 10:47:50 +0100 <int-e> "no one knows why" turns out to be "we have quite a few ideas but aren't sure how exactly they produce the data that we're seeing and whether there are other factors"
2023-02-15 10:48:44 +0100 <int-e> So a clickbait headline. What a surprise.
2023-02-15 10:48:55 +0100 <merijn> int-e: Wrong channel ;)
2023-02-15 10:49:13 +0100 <int-e> damn
2023-02-15 10:49:20 +0100 <merijn> gensyst: Can actually clean up further to this: https://dpaste.com/3NAHKS36D
2023-02-15 10:49:49 +0100 <int-e> (also, sorry)
2023-02-15 10:49:58 +0100 <merijn> ah, modern GHC whining about unticked promoted constructors, but no incomplete patterns :)
2023-02-15 10:50:44 +0100 <merijn> gensyst: Might have to use 'A and 'B in the types, but other than that it compiles warning free on 9.2 :)
2023-02-15 10:51:38 +0100patrl(~patrl@user/patrl) (Quit: WeeChat 3.8)
2023-02-15 10:52:12 +0100patrl(~patrl@user/patrl)
2023-02-15 10:52:15 +0100patrl(~patrl@user/patrl) (Client Quit)
2023-02-15 10:55:02 +0100zmt01(~zmt00@user/zmt00)
2023-02-15 10:56:39 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 255 seconds)
2023-02-15 10:57:06 +0100 <gensyst> merijn, excellent!
2023-02-15 10:57:12 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 11:00:21 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 11:03:01 +0100vpan(~0@212.117.1.172)
2023-02-15 11:05:18 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds)
2023-02-15 11:10:49 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2023-02-15 11:19:11 +0100 <gensyst> merijn, is it possible to have record constructors (would be nice for describing each field in the state, esp. if there are many fields)
2023-02-15 11:21:38 +0100 <merijn> gensyst: Yes, but the syntax is a bit wonky, should be described in the GHC user guide
2023-02-15 11:23:23 +0100 <merijn> I don't think I have any examples using it lying around, though
2023-02-15 11:24:19 +0100 <gensyst> thanks, i'll try to find it
2023-02-15 11:24:43 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2023-02-15 11:26:49 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2023-02-15 11:28:38 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com)
2023-02-15 11:29:13 +0100Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds)
2023-02-15 11:29:42 +0100Maxdamantus(~Maxdamant@user/maxdamantus)
2023-02-15 11:31:40 +0100delYsid(~user@user/delYsid)
2023-02-15 11:37:35 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-02-15 11:37:41 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 11:44:20 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
2023-02-15 11:44:34 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt)
2023-02-15 11:52:52 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
2023-02-15 11:55:15 +0100mmhat(~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de)
2023-02-15 11:57:17 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2023-02-15 11:58:16 +0100mmhat(~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
2023-02-15 11:58:39 +0100Miao[m]hellwolf[m]
2023-02-15 11:59:28 +0100ravamrt(~ravamrt@112.134.192.214) (Quit: Leaving.)
2023-02-15 12:01:49 +0100freeside(~mengwong@122.11.214.229) (Read error: Connection reset by peer)
2023-02-15 12:03:57 +0100quintasan_(~quassel@quintasan.pl) ()
2023-02-15 12:04:09 +0100quintasan(~quassel@quintasan.pl)
2023-02-15 12:05:31 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-15 12:10:10 +0100xff0x(~xff0x@2405:6580:b080:900:1159:8d59:b148:53e)
2023-02-15 12:12:10 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2023-02-15 12:15:39 +0100CiaoSen(~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) (Ping timeout: 252 seconds)
2023-02-15 12:25:58 +0100 <tomsmeding> gensyst: you've probably found it, but in case you haven't, or for lurkers, https://tomsmeding.com/ss/get/tomsmeding/NgiVcn (from https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/gadt.html#extension-GADTs )
2023-02-15 12:29:05 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:1d05:832d:e3e6:a39e) (Ping timeout: 260 seconds)
2023-02-15 12:37:41 +0100 <gensyst> tomsmeding, thanks!
2023-02-15 12:39:05 +0100gurkenglas(~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de)
2023-02-15 12:39:47 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-02-15 12:42:57 +0100andrewboltachev(~andrey@178.141.125.176)
2023-02-15 12:44:53 +0100mastarija(~mastarija@2a05:4f46:e03:6000:f467:8e26:a3e4:9c98)
2023-02-15 12:46:05 +0100 <mastarija> So, I've defined my lens type like this:
2023-02-15 12:46:08 +0100 <mastarija> type Lens s t a b = forall f. Functor f => ( a -> f b ) -> s -> f t
2023-02-15 12:46:26 +0100 <mastarija> And my view function like this:
2023-02-15 12:46:28 +0100 <mastarija> view :: Lens s t a b -> s -> a
2023-02-15 12:46:33 +0100 <mastarija> view len = getConst . len Const
2023-02-15 12:47:07 +0100 <mastarija> Now I'm trying to do this:
2023-02-15 12:47:11 +0100 <mastarija> view traverse ["Hello", "World"]
2023-02-15 12:47:46 +0100 <mastarija> But I get an error saying it couldn't deduce `Applicative f`.
2023-02-15 12:48:28 +0100 <mastarija> Not sure what I'm doing wrong here. I'd expect "HelloWorld" as a result.
2023-02-15 12:48:46 +0100 <jackdk> This is why `lens` defines `view :: MonadReader s m -> Getting a s a -> m a`
2023-02-15 12:49:14 +0100 <mastarija> I'm following this tutorial: https://blog.jakuba.net/2014-08-06-lens-tutorial-stab-traversal-part-2/
2023-02-15 12:49:21 +0100 <jackdk> (You can read that `m a` as `s -> a`; the `MonadReader` version also lets it play nice with MTL
2023-02-15 12:49:22 +0100 <mastarija> Where it supposedly works
2023-02-15 12:50:14 +0100 <jackdk> Lens then says `type Getting r s a = (a -> Const r a) -> s -> Const r s`)
2023-02-15 12:51:21 +0100npmania(~Thunderbi@45.8.223.203)
2023-02-15 12:51:22 +0100 <jackdk> I wouldn't be surprised if that author wrote `view` after testing with `lens` or something
2023-02-15 12:51:45 +0100ubert(~Thunderbi@2a02:8109:abc0:6434:4e5:1e44:42ea:9a2b)
2023-02-15 12:51:47 +0100 <jackdk> It's an easy mistake to make and it tripped me up when I was writing minimal lens stuff for a package
2023-02-15 12:51:50 +0100 <mastarija> So, `view` from e.g. relude wouldn't work with traverse? https://hackage.haskell.org/package/relude-1.1.0.0/docs/Relude-Extra-Lens.html#v:view
2023-02-15 12:52:43 +0100 <lyxia> indeed
2023-02-15 12:52:50 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 255 seconds)
2023-02-15 12:52:52 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2023-02-15 12:53:26 +0100 <lyxia> traverse is not a Lens
2023-02-15 12:53:31 +0100 <mastarija> Hm... that's disappointing. I'm trying to construct simple lens library from the grounds up to understand underlying mechanisms and then I get tripped up like this.
2023-02-15 12:53:44 +0100 <mastarija> This seems like another large gap I need to fill in.
2023-02-15 12:53:53 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2023-02-15 12:54:24 +0100 <jackdk> Think of the `=>` as a function argument that GHC will solve and pass in. That `Lens s t a b` constraint in your example says "pass in a function that accepts a `Functor` dictionary". You try and pass `traverse` in there, and it fails because it requires an `Applicative` dictionary.
2023-02-15 12:55:10 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-02-15 12:55:27 +0100 <jackdk> This is why lens specialises `view` to a form written in terms of `Const` — it then becomes usable with `Lens`, `Traversal`, `Fold`, `Iso` etc.
2023-02-15 12:55:31 +0100 <mastarija> Yes, I get that. I'm just disappointed a bit that extra infrastructure is required around the basic lenses to make things work.
2023-02-15 12:57:07 +0100 <mastarija> I wasn't paying atention when I was just using them. I thought those class constraints and weird types were needed for some advanced stuff I'm not using.
2023-02-15 12:57:14 +0100 <mastarija> Not basic things like traversal.
2023-02-15 12:57:19 +0100 <jackdk> *shrug* microlens does it this way too. However, the use of `view` to get a monoidal summary is pretty niche, and you could get a lot of get/set practice on records or lenses only without worrying about it.
2023-02-15 12:58:03 +0100MajorBiscuit(~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 248 seconds)
2023-02-15 12:58:14 +0100srk(~sorki@user/srk) (Quit: ZNC 1.8.1 - https://znc.in)
2023-02-15 12:58:37 +0100srk(~sorki@user/srk)
2023-02-15 12:59:39 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
2023-02-15 13:02:52 +0100Flow(~none@gentoo/developer/flow)
2023-02-15 13:06:01 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-02-15 13:06:38 +0100CiaoSen(~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2023-02-15 13:11:37 +0100npmania1(~Thunderbi@45.8.223.248)
2023-02-15 13:12:15 +0100npmania(~Thunderbi@45.8.223.203) (Ping timeout: 260 seconds)
2023-02-15 13:12:15 +0100npmania1npmania
2023-02-15 13:14:25 +0100xff0x(~xff0x@2405:6580:b080:900:1159:8d59:b148:53e) (Ping timeout: 246 seconds)
2023-02-15 13:14:49 +0100xff0x(~xff0x@178.255.149.135)
2023-02-15 13:16:14 +0100lortabac(~lortabac@88.125.6.227)
2023-02-15 13:25:24 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de)
2023-02-15 13:27:03 +0100gurkenglas(~gurkengla@dynamic-046-114-001-228.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
2023-02-15 13:29:34 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds)
2023-02-15 13:30:11 +0100haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
2023-02-15 13:32:29 +0100notzmv(~zmv@user/notzmv)
2023-02-15 13:35:08 +0100MajorBiscuit(~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a)
2023-02-15 13:43:09 +0100gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-02-15 13:44:11 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-15 13:44:59 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2023-02-15 13:50:06 +0100mncheck(~mncheck@193.224.205.254)
2023-02-15 13:51:10 +0100xff0x(~xff0x@178.255.149.135) (Ping timeout: 246 seconds)
2023-02-15 13:51:30 +0100vpan(~0@212.117.1.172) (Quit: Leaving.)
2023-02-15 13:52:42 +0100accord(uid568320@2a03:5180:f:4::8:ac00)
2023-02-15 13:53:02 +0100xff0x(~xff0x@2405:6580:b080:900:1159:8d59:b148:53e)
2023-02-15 13:53:11 +0100lyle(~lyle@104.246.145.237)
2023-02-15 13:57:36 +0100mncheck(~mncheck@193.224.205.254) (Quit: Leaving)
2023-02-15 13:59:23 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2023-02-15 14:00:14 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2023-02-15 14:01:45 +0100kenran(~user@user/kenran)
2023-02-15 14:07:17 +0100mncheck(~mncheck@193.224.205.254)
2023-02-15 14:07:26 +0100 <kenran> I've stumbled upon this piece of code in our code base (with no colleague here to help): https://bpa.st/T754U. This builds with GHC 8.10.7. Now I'm trying to update to GHC 9.2.4 and I get the following error: https://bpa.st/LRQBC
2023-02-15 14:08:06 +0100 <tomsmeding> kenran: put a space between the ~ and the a
2023-02-15 14:08:19 +0100 <tomsmeding> interesting backwards-incompatibility
2023-02-15 14:08:24 +0100infinity0(~infinity0@pwned.gg) (Remote host closed the connection)
2023-02-15 14:08:29 +0100 <kenran> Can you tell me what I should be looking/googling for w.r.t. this ~a notation in the original code?
2023-02-15 14:08:35 +0100 <kenran> tomsmeding: oh, you were fast, let me check that :)
2023-02-15 14:08:50 +0100 <Axman6> is that accelerate code?
2023-02-15 14:08:57 +0100 <tomsmeding> looks like it
2023-02-15 14:09:09 +0100 <tomsmeding> though the ~ is just ghc haskell syntax
2023-02-15 14:09:10 +0100 <geekosaur> kenran, type equivalence
2023-02-15 14:09:17 +0100 <kenran> Axman6: yeah, it uses accelerate
2023-02-15 14:09:23 +0100azure_vermilion(~azure_ver@164.39.138.83)
2023-02-15 14:09:24 +0100 <geekosaur> it's actually a ~ b, but see the note above it about ormolu
2023-02-15 14:09:29 +0100 <kenran> this piece of code is notorious, as it also breaks ormolu/fourmolu
2023-02-15 14:09:41 +0100 <Axman6> a ~ b is a constraint that says a is equal to b
2023-02-15 14:09:45 +0100 <tomsmeding> I hate code formatters
2023-02-15 14:10:31 +0100infinity0(~infinity0@pwned.gg)
2023-02-15 14:10:37 +0100 <azure_vermilion> does anyone know how to use boomerang, the parser/pretty printer library? alpha parsers a letter and digit parses 0-9, how would you combine them to parse eg. a0?
2023-02-15 14:10:57 +0100 <Axman6> (a ~ b) => a -> a -> b is (roughly) equivalent to a -> a -> a, if that helps at all
2023-02-15 14:11:30 +0100 <kenran> I am undecided. We have some people here where it's impossible to decide on a "common style" (which is not necessary ofc), so we'd have people change between different do-notation alignments all the time
2023-02-15 14:11:36 +0100 <kenran> cool, thanks everyone!
2023-02-15 14:11:49 +0100 <tomsmeding> Axman6: makes a difference given that this is an instance though
2023-02-15 14:12:04 +0100 <tomsmeding> difference in inference / instance selection
2023-02-15 14:12:10 +0100thegeekinside(~thegeekin@189.180.97.223) (Ping timeout: 246 seconds)
2023-02-15 14:12:19 +0100 <geekosaur> azure_vermilion, I would be surprised if it's not alpha <> digit
2023-02-15 14:12:36 +0100 <kenran> ok, I'll postpone the GHC upgrade it seems: the 'impossible' happened :)
2023-02-15 14:13:00 +0100 <tomsmeding> azure_vermilion: yeah seems that Boomerang is a Monoid
2023-02-15 14:13:54 +0100pernzs(~pernzs@101.175.168.100)
2023-02-15 14:14:22 +0100 <Axman6> hmm, boomerang looks kinda difficult to use
2023-02-15 14:14:23 +0100 <azure_vermilion> I tried alpha <> digit and it seems to mean a single character that satisfies both, i.e. impossible
2023-02-15 14:14:55 +0100 <Axman6> I would guess you need alpha . digit
2023-02-15 14:15:10 +0100 <Axman6> where (.) is from Control.Category, not Prelude
2023-02-15 14:15:24 +0100 <Axman6> I can't tell what type that would have
2023-02-15 14:15:48 +0100 <kuribas> :t (<<<)
2023-02-15 14:15:48 +0100gensyst(gensyst@user/gensyst) (Quit: Leaving)
2023-02-15 14:15:49 +0100 <lambdabot> forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c
2023-02-15 14:16:06 +0100 <tomsmeding> :t (>>>)
2023-02-15 14:16:07 +0100 <lambdabot> forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c
2023-02-15 14:16:29 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de)
2023-02-15 14:16:58 +0100 <tomsmeding> ah yeah the haddocks of Text.Boomerang (at the top of the page) say that you should use (.) from Control.Category, which is (<<<)
2023-02-15 14:16:59 +0100 <Axman6> ". is used to compose parsers together. <> is used for choice."
2023-02-15 14:18:54 +0100 <Axman6> not particularly impressed with the docs, just half a tutorial and then links to some modules, with no clear next step
2023-02-15 14:20:06 +0100 <Axman6> oh my, looking at Text.Boomerang.Combinators, it looks like they've managed to encode a fair amount of forth in its combinators...
2023-02-15 14:22:57 +0100 <Axman6> I remember years ago some post on how amazing Forth and concatenative languages were, and how they could do things nothing else could, and somehow this ended up on r/haskell, and someone imp-lemented everything shown, with nearly identical syntax, in Haskell, with full static types. fun times
2023-02-15 14:25:07 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 246 seconds)
2023-02-15 14:26:56 +0100 <tomsmeding> that's fun for sure
2023-02-15 14:27:08 +0100 <tomsmeding> concatenative? as in, you really write `3 4 add`?
2023-02-15 14:27:38 +0100 <tomsmeding> I can imagine that if you wrangle the type classes hard enough, you might be able to make that work, but it would be ugly for sure
2023-02-15 14:28:12 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection)
2023-02-15 14:30:24 +0100 <geekosaur> someone managed to encode basic in haskell, forth wouldn't surprise me
2023-02-15 14:30:28 +0100hgolden(~hgolden@cpe-172-251-233-141.socal.res.rr.com)
2023-02-15 14:30:31 +0100 <geekosaur> two someones, even
2023-02-15 14:33:04 +0100haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220)
2023-02-15 14:33:04 +0100haritz(~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host)
2023-02-15 14:33:04 +0100haritz(~hrtz@user/haritz)
2023-02-15 14:34:23 +0100xeph(~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net)
2023-02-15 14:34:27 +0100xeph(~xeph@2a02-8428-8326-2501-4a51-c5ff-fe27-99a8.rev.sfr.net) (Client Quit)
2023-02-15 14:35:45 +0100 <jean-paul[m]> is there a name for a variation of mod where the only difference is that x mod' x == x?
2023-02-15 14:39:14 +0100 <azure_vermilion> thanks for your help Axman6
2023-02-15 14:40:29 +0100mauke[i].oO( mod' x d = mod (x - 1) d + 1 )
2023-02-15 14:40:42 +0100mauke[i](~mauke@user/mauke) (Quit: gone)
2023-02-15 14:42:03 +0100 <jean-paul[m]> mauke[i]: Yea, the implementation is not very hard (though I don't want the `0 mod' x` behavior that implementation gives). Naming is the harder part. :)
2023-02-15 14:42:22 +0100jinsun(~jinsun@user/jinsun)
2023-02-15 14:45:09 +0100 <tomsmeding> jean-paul[m]: americanClockMod?
2023-02-15 14:45:56 +0100 <jean-paul[m]> cute
2023-02-15 14:46:59 +0100CiaoSen(~Jura@p200300c9570460002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2023-02-15 14:47:11 +0100 <jean-paul[m]> I'm using it, thanks
2023-02-15 14:47:15 +0100 <tomsmeding> :')
2023-02-15 14:47:33 +0100CiaoSen(~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5)
2023-02-15 14:47:54 +0100 <tomsmeding> ceilMod is another option, alluding to the `mod' x d = x - ceil (x / d)` version, as contrasted to `mod x d = x - floor (x / d)`
2023-02-15 14:48:09 +0100 <tomsmeding> eliding float-int casts
2023-02-15 14:48:53 +0100 <jean-paul[m]> Hmm that's also good ... and I have a ceilDiv already
2023-02-15 14:52:14 +0100 <tomsmeding> Uh
2023-02-15 14:53:01 +0100 <jean-paul[m]> ceil gets hard to look at after you type it too many times though
2023-02-15 14:53:42 +0100 <tomsmeding> `mod' x d = x - (ceil (x / d) - 1) * d` but I'm probably doing it wrong again lol
2023-02-15 14:54:11 +0100 <jean-paul[m]> my implementation just has an if ... == 0 in it :)
2023-02-15 14:55:05 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 14:56:04 +0100 <segfaultfizzbuzz> so (as an example, this is not a commentary on the company) apparently haskell is used at tesla, and i forget how but i heard that what they do is use haskell to generate C code but that haskell itself isn't used at runtime
2023-02-15 14:56:18 +0100 <segfaultfizzbuzz> what is this style of programming called and are there some introductory materials for it somewhere?
2023-02-15 14:57:23 +0100c0c0(~coco@212-51-146-137.fiber7.init7.net)
2023-02-15 14:59:33 +0100thegeekinside(~thegeekin@189.180.97.223)
2023-02-15 14:59:47 +0100c0c0(~coco@212-51-146-137.fiber7.init7.net) (Client Quit)
2023-02-15 15:00:33 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-02-15 15:01:03 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
2023-02-15 15:01:24 +0100 <lyxia> it's called writing a compiler
2023-02-15 15:01:31 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-02-15 15:01:53 +0100 <segfaultfizzbuzz> so then they are building a new language?
2023-02-15 15:02:23 +0100 <lyxia> not necessarily
2023-02-15 15:02:46 +0100 <segfaultfizzbuzz> i could (maybe) understand adding new language features/macros but building a language is such a monumental undertaking that it's hard to imagine anything other than rather large entities (e.g. microsoft) doing such a thing
2023-02-15 15:02:51 +0100__monty__(~toonn@user/toonn)
2023-02-15 15:03:11 +0100mc47(~mc47@xmonad/TheMC47)
2023-02-15 15:03:12 +0100 <segfaultfizzbuzz> so they are customizing how haskell is compiled to machine code...? or...?
2023-02-15 15:03:29 +0100 <lyxia> you'll have to ask someone employed at tesla
2023-02-15 15:03:49 +0100 <geekosaur> not difficult at all. building an ecosystem for it is the hard part, but for an embedded use you mostly don't care
2023-02-15 15:03:50 +0100 <chreekat> could also be called writing an EDSL, though I agree it's another way of saying 'writing a compiler'.
2023-02-15 15:04:05 +0100 <geekosaur> https://hackage.haskell.org/package/clash
2023-02-15 15:04:34 +0100 <geekosaur> not saying that';s what they use, but e.g. nasa uses it to write the firmware for drones
2023-02-15 15:04:37 +0100 <dminuoso_> C is a common target language for a compiler, as its relatively simple to generate code for and t facilitates easy interop with other libraries.
2023-02-15 15:04:50 +0100 <dminuoso_> Didnt even GHC use the C backend as default for a long time?
2023-02-15 15:05:25 +0100 <geekosaur> until 7.0ish, yes
2023-02-15 15:06:00 +0100 <geekosaur> with a big ugly chunk of perl to rewrite the generated assembly to fit the STG for the target platform
2023-02-15 15:06:09 +0100 <segfaultfizzbuzz> haha perl
2023-02-15 15:06:21 +0100npmania(~Thunderbi@45.8.223.248) (Quit: npmania)
2023-02-15 15:07:56 +0100 <dminuoso_> I mean according to reddit, they take the generated C code and compile it into vehicle firmware
2023-02-15 15:07:57 +0100 <geekosaur> ob https://xkcd.com/224/
2023-02-15 15:08:01 +0100 <dminuoso_> which might suggest that its also a tooling questoin
2023-02-15 15:08:33 +0100 <dminuoso_> that is if you have a toolchain that ingests C and pumps out some firmware, then the easiest way to make haskell suitable for that, is to generate C code from that.
2023-02-15 15:13:15 +0100thegeekinside(~thegeekin@189.180.97.223) (Ping timeout: 255 seconds)
2023-02-15 15:13:32 +0100thegeekinside(~thegeekin@189.180.97.223)
2023-02-15 15:13:41 +0100Niclelscore(~Niclelsco@94.25.228.252)
2023-02-15 15:14:38 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-15 15:17:06 +0100lortabac(~lortabac@88.125.6.227) (Quit: WeeChat 2.8)
2023-02-15 15:19:05 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-15 15:20:13 +0100 <Axman6> geekosaur: you mean copilot, not clash
2023-02-15 15:20:23 +0100 <Axman6> @package copilot
2023-02-15 15:20:23 +0100 <lambdabot> https://hackage.haskell.org/package/copilot
2023-02-15 15:20:53 +0100 <segfaultfizzbuzz> hmm
2023-02-15 15:21:07 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 15:21:15 +0100 <Axman6> there's also ivory
2023-02-15 15:21:28 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-02-15 15:21:40 +0100 <Axman6> (And I think tower for coordinating programs written in ivory?)
2023-02-15 15:24:09 +0100 <azure_vermilion> does Control.Category.(.) work in the normal way on functions?
2023-02-15 15:24:11 +0100 <Axman6> copilot is probably the coolest C-generating DSL though, it produces guaranteed hard real-time programs with constant memory usage, all of which are essential in high assurance systems
2023-02-15 15:24:28 +0100 <Axman6> azure_vermilion: yes, (->) has an instance for the Category class
2023-02-15 15:24:36 +0100 <azure_vermilion> thanks
2023-02-15 15:24:56 +0100 <Axman6> which is identical to prelude's (.), as you'd expect
2023-02-15 15:26:16 +0100 <Axman6> tomsmeding: IIRC you needed to write START 3 4 add END but that was about it. it even had HOFs. the stack was just a tulpe list with () in the base (which START or END injected to ge things running)
2023-02-15 15:27:23 +0100Cale(~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 248 seconds)
2023-02-15 15:28:02 +0100 <Axman6> so add :: Num a => (a,(a,b)) -> (a,b), 3 :: Num a => b -> (a,b) (roughly - obviously it needed something slightly more complex to get the right syntax, but it ended up with quite readable types IIRC
2023-02-15 15:28:49 +0100Cale(~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com)
2023-02-15 15:32:28 +0100delYsid(~user@user/delYsid) (ERC 5.4.1 (IRC client for GNU Emacs 30.0.50))
2023-02-15 15:32:46 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-02-15 15:33:30 +0100 <tomsmeding> Axman6: ah right
2023-02-15 15:34:21 +0100Midjak(~Midjak@82.66.147.146)
2023-02-15 15:35:25 +0100 <Axman6> @quote stack-calculator
2023-02-15 15:35:26 +0100 <lambdabot> stack-calculator says: let start f = f (); push s a f = f (a,s); add (a,(b,s)) f = f (a+b,s); end (a,_) = a in start push 2 push 3 add end
2023-02-15 15:35:32 +0100 <Axman6> hey, there it is
2023-02-15 15:36:31 +0100 <Axman6> found via https://www.reddit.com/r/haskell/comments/ptji8/concatenative_rowpolymorphic_programming_in/ (including a dumb comment by me from a third of my life ago)
2023-02-15 15:37:37 +0100 <Axman6> :t let start f = f (); push s a f = f (a,s); add (a,(b,s)) f = f (a+b,s); end (a,_) = a in (start, push, add, end)
2023-02-15 15:37:38 +0100 <lambdabot> Num a1 => ((() -> t1) -> t1, b1 -> a2 -> ((a2, b1) -> t2) -> t2, (a1, (a1, b2)) -> ((a1, b2) -> t3) -> t3, (a3, b3) -> a3)
2023-02-15 15:37:43 +0100mauke[i](~mauke@user/mauke)
2023-02-15 15:38:49 +0100 <Axman6> concatenative languages are just three CPS transforms in a trenchcoat!
2023-02-15 15:41:32 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 15:43:13 +0100 <zebrag[m]> Do you know what it is about that polymorphic functions are supposed to preserve relations? (Reynolds through Atkey 2009)
2023-02-15 15:43:35 +0100 <zebrag[m]> I mean every polymorphic functions I can think of obviously preserve relations
2023-02-15 15:43:50 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-15 15:43:57 +0100 <zebrag[m]> And usually there aren't any relations to preserve in the first place
2023-02-15 15:44:36 +0100pernzs(~pernzs@101.175.168.100) (Quit: Client closed)
2023-02-15 15:44:42 +0100 <byorgey> zebrag[m]: this property is called "parametricity", it comes from the fact that polymorphic functions must work in exactly the same way for any type
2023-02-15 15:44:54 +0100 <byorgey> hence they "commute with fmap" in some sense appropriate to the type
2023-02-15 15:45:31 +0100 <zebrag[m]> So how did he come out with such characterisations, and how can it be useful (reading you just now...)
2023-02-15 15:46:15 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Ping timeout: 260 seconds)
2023-02-15 15:46:31 +0100 <zebrag[m]> okay, looking into the commute thing, tx
2023-02-15 15:46:46 +0100 <byorgey> how did Reynolds come up with this idea, I don't know. But it is very useful indeed, just look up "theorems for free"
2023-02-15 15:48:15 +0100Feuermagier(~Feuermagi@user/feuermagier)
2023-02-15 15:48:20 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 15:48:23 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 246 seconds)
2023-02-15 15:50:34 +0100Niclelscore(~Niclelsco@94.25.228.252) (Remote host closed the connection)
2023-02-15 15:50:42 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-02-15 15:50:42 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-02-15 15:50:42 +0100wroathe(~wroathe@user/wroathe)
2023-02-15 15:55:34 +0100cyphase(~cyphase@user/cyphase)
2023-02-15 15:56:47 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 255 seconds)
2023-02-15 15:57:44 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de)
2023-02-15 15:59:55 +0100 <Axman6> zebrag[m]: having some understanding about paramatricity means you can tell a hell of a lot about a function from it's type in many cases. Obviously there's only one functiuon with type a -> a; how many have type a -> a -> a? Do we know how many have type a -> [a]?
2023-02-15 16:01:16 +0100 <zebrag[m]> If the function is parametric then it is a natural transform, and there must be a conversely (yes, reading you just now...)
2023-02-15 16:01:25 +0100tomboy64(~tomboy64@user/tomboy64) (Ping timeout: 260 seconds)
2023-02-15 16:02:00 +0100 <zebrag[m]> yes, interesting question, don't answer yet
2023-02-15 16:03:12 +0100Cale(~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 255 seconds)
2023-02-15 16:03:29 +0100 <zebrag[m]> 1, 2, countably many
2023-02-15 16:03:42 +0100 <Axman6> what do we know about the [a] in the last one?
2023-02-15 16:04:37 +0100 <zebrag[m]> it is the repetition n times of the input
2023-02-15 16:04:56 +0100 <Axman6> yeah, if there are any a's, they must be the one we passed in
2023-02-15 16:05:21 +0100 <Axman6> so it's also isomorphic to a -> (Nat, a)
2023-02-15 16:06:03 +0100 <zebrag[m]> yes
2023-02-15 16:08:32 +0100 <Axman6> (I'm by no means an expert on the topic, but we used to talk about this a lot in the NICTA course, and can serve as a good introduction to why the type system is so helpful in Haskell compared to languages like Java)
2023-02-15 16:10:25 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 268 seconds)
2023-02-15 16:13:01 +0100akegalj(~akegalj@225-212.dsl.iskon.hr)
2023-02-15 16:15:28 +0100razetime(~Thunderbi@117.193.1.74)
2023-02-15 16:16:13 +0100Cale(~cale@2605:8d80:6a2:d49b:a139:9a62:b1d5:76a4)
2023-02-15 16:17:51 +0100mc47(~mc47@xmonad/TheMC47) (Ping timeout: 248 seconds)
2023-02-15 16:20:27 +0100mmhat(~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de)
2023-02-15 16:23:26 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-15 16:24:12 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 16:25:46 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 16:28:16 +0100 <kuribas> hiding information can be a good design tool. Having all information about the whole program available, like in a dynamic program, can make code less flexible.
2023-02-15 16:31:55 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 16:32:10 +0100acidjnk(~acidjnk@p200300d6e715c408b11a53503b2c1121.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2023-02-15 16:34:12 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 16:34:22 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 252 seconds)
2023-02-15 16:36:30 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 16:43:04 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 16:44:53 +0100Sgeo(~Sgeo@user/sgeo)
2023-02-15 16:45:22 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2023-02-15 16:45:49 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 246 seconds)
2023-02-15 16:46:45 +0100 <lyxia> zebrag[m]: the introduction of Reynolds' paper gives the motivation and insight. Imagine two libraries of complex numbers, one with a cartesian representation, one with polar coordinates, but they expose the same interface. Intuitively they should be interchangeable.
2023-02-15 16:47:18 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 16:48:41 +0100mmhat(~mmh@p200300f1c72b42c1ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 3.8)
2023-02-15 16:48:42 +0100 <lyxia> a program which could be used with either library is a polymorphic function, and the relation it preserves relates equivalent representations
2023-02-15 16:56:36 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 16:58:42 +0100vgtw_vgtw
2023-02-15 17:00:41 +0100 <zebrag[m]> Yes, I remember the example, but now that you speak of it, wouldn't it look more like ad hoc polymorphism, or some existential type? It doesn't look like plain parametric function
2023-02-15 17:01:28 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2023-02-15 17:02:01 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 17:02:22 +0100mastarija(~mastarija@2a05:4f46:e03:6000:f467:8e26:a3e4:9c98) (Quit: WeeChat 3.7.1)
2023-02-15 17:03:19 +0100kurbus(~kurbus@user/kurbus)
2023-02-15 17:04:54 +0100hounded(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
2023-02-15 17:05:14 +0100hounded_woodstoc(~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com)
2023-02-15 17:07:21 +0100 <zebrag[m]> lyxia It seems the types are isomorphic, but I can't see the parametricity there, and the rest of the article I didn't understand a thing, at least the pages right after that introductory example
2023-02-15 17:07:24 +0100 <lyxia> you can imagine a library in this context as a type C and a record of functions Library C = { (+) :: C -> C -> C ; ... }, then a function using the library would be forall c . Library c -> result
2023-02-15 17:08:00 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2023-02-15 17:09:11 +0100 <zebrag[m]> that is existential type isn't it?
2023-02-15 17:09:16 +0100 <zebrag[m]> and yes you can encode it in System F
2023-02-15 17:09:25 +0100 <zebrag[m]> So I see the point
2023-02-15 17:10:01 +0100 <lyxia> the library has an existential type but we're focusing on a program that uses it, which has a universal type
2023-02-15 17:10:25 +0100 <zebrag[m]> I've read somewhere that the whole point of Reynolds was abstract types (aka existential)
2023-02-15 17:11:38 +0100 <zebrag[m]> lyxia: yes, right
2023-02-15 17:12:54 +0100 <lyxia> abstraction has two sides, it looks existential on one side, universal on the other
2023-02-15 17:15:55 +0100azure_vermilion(~azure_ver@164.39.138.83) (Ping timeout: 246 seconds)
2023-02-15 17:16:50 +0100azure_vermilion(~azure_ver@164.39.138.83)
2023-02-15 17:17:58 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-15 17:18:14 +0100cjay-cjay
2023-02-15 17:18:14 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 255 seconds)
2023-02-15 17:18:58 +0100kurbus(~kurbus@user/kurbus) (Quit: Client closed)
2023-02-15 17:21:47 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 17:21:53 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 17:22:09 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 17:23:13 +0100maukemauke[m]
2023-02-15 17:23:22 +0100mauke[i]mauke
2023-02-15 17:23:33 +0100mbuf(~Shakthi@49.204.133.116) (Quit: Leaving)
2023-02-15 17:26:04 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 246 seconds)
2023-02-15 17:29:08 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection)
2023-02-15 17:33:32 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.8)
2023-02-15 17:34:26 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-15 17:34:27 +0100nschoe(~q@141.101.51.197) (Ping timeout: 255 seconds)
2023-02-15 17:34:33 +0100akegalj(~akegalj@225-212.dsl.iskon.hr) (Ping timeout: 255 seconds)
2023-02-15 17:34:39 +0100jade[m](~jadecatgi@2001:470:69fc:105::3:194e)
2023-02-15 17:34:47 +0100 <segfaultfizzbuzz> let's say that i create a variable in haskell with some type and a cosmic ray (or more likely a bad bit of code) corrupts the associated memory
2023-02-15 17:35:10 +0100 <segfaultfizzbuzz> can i do something to verify at runtime that the variable actually "is" the type that i think it is
2023-02-15 17:37:31 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2023-02-15 17:37:59 +0100 <mauke> not if you assume cosmic rays, because your verification code might also become corrupted
2023-02-15 17:38:08 +0100 <segfaultfizzbuzz> heh ok
2023-02-15 17:38:19 +0100 <segfaultfizzbuzz> but if the code itself is still ok?
2023-02-15 17:38:31 +0100 <mauke> I don't think the runtime representation records more than GC info
2023-02-15 17:38:44 +0100 <mauke> so e.g. you couldn't distinguish newtypes
2023-02-15 17:38:58 +0100 <segfaultfizzbuzz> for example let's say that i have a UTF8 string, but then maybe something is done to that string which breaks UTF8 (such as perhaps someone concats it to a UTF16 string)
2023-02-15 17:39:24 +0100 <segfaultfizzbuzz> then can i say UTF8String.doublecheck mystr or something
2023-02-15 17:42:08 +0100 <jade[m]> the static types should make sure the concatenation cannot happen at compile time
2023-02-15 17:42:31 +0100Square(~Square4@user/square) (Ping timeout: 246 seconds)
2023-02-15 17:43:25 +0100 <lyxia> segfaultfizzbuzz: decodeUtf8' . encodeUtf8
2023-02-15 17:43:26 +0100merijn(~merijn@86.86.29.250)
2023-02-15 17:44:34 +0100 <lyxia> there's already error correction in hardware. if you're worried about that you can buy better hardware.
2023-02-15 17:44:58 +0100 <segfaultfizzbuzz> ha
2023-02-15 17:47:51 +0100CiaoSen(~Jura@2003:c9:5704:6000:2a3a:4dff:fe84:dbd5) (Ping timeout: 252 seconds)
2023-02-15 17:50:47 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 17:52:15 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 17:54:20 +0100tomcatfish(~tomcatfis@mobile-166-170-28-207.mycingular.net)
2023-02-15 17:56:36 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 17:57:50 +0100jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2023-02-15 17:58:31 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 17:58:57 +0100tomcatfish(~tomcatfis@mobile-166-170-28-207.mycingular.net) (Remote host closed the connection)
2023-02-15 17:59:13 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 17:59:49 +0100tomcatfish(~tomcatfis@mobile-166-170-28-207.mycingular.net)
2023-02-15 17:59:58 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2023-02-15 18:00:17 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 18:00:43 +0100 <segfaultfizzbuzz> i am a bad programmer so the rust "utf8 everywhere" philosophy brings me ease, how do i square this away with whatever happens in haskell?
2023-02-15 18:01:08 +0100 <mauke> Unicode everywhere > UTF-8 everywhere
2023-02-15 18:01:10 +0100 <segfaultfizzbuzz> i have run into many situations where my users submit god-knows-what string format
2023-02-15 18:01:26 +0100 <segfaultfizzbuzz> mauke: care to elaborate?
2023-02-15 18:01:32 +0100 <[exa]> segfaultfizzbuzz: pipe it through iconv
2023-02-15 18:01:52 +0100 <mauke> unicode strings contain text. utf-8 strings contain bytes
2023-02-15 18:02:01 +0100 <merijn> segfaultfizzbuzz: If your user submits "god-knows-what" string formats, you're fucked already
2023-02-15 18:02:07 +0100 <[exa]> +1 ^
2023-02-15 18:02:17 +0100 <merijn> I also don't even know what "utf-8 string" would mean
2023-02-15 18:02:33 +0100 <mauke> generally speaking, a text abstraction is nicer if you don't have to deal with single bytes
2023-02-15 18:02:40 +0100 <merijn> as mauke suggests, utf-8 is "just bytes"
2023-02-15 18:02:44 +0100acidjnk(~acidjnk@p54ad56b7.dip0.t-ipconnect.de)
2023-02-15 18:03:44 +0100 <mauke> as the old perl mantra goes, you decode your inputs into unicode, process as needed, then encode your outputs to bytes
2023-02-15 18:03:44 +0100 <segfaultfizzbuzz> does the haskell type system protect me from the string format hellscape?
2023-02-15 18:03:48 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 18:04:09 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2023-02-15 18:04:10 +0100 <segfaultfizzbuzz> unicode is utf8, but it also is other things...?
2023-02-15 18:04:15 +0100 <segfaultfizzbuzz> so why not just utf8 then?
2023-02-15 18:04:16 +0100 <merijn> segfaultfizzbuzz: That's wrong
2023-02-15 18:04:20 +0100 <mauke> utf-8 is one of the possible encodings of unicode
2023-02-15 18:04:27 +0100 <merijn> segfaultfizzbuzz: UTF-8 is a lossless encode of the unicode
2023-02-15 18:04:40 +0100 <merijn> i.e. unicode specifies what characters are, etc. and how to operate them
2023-02-15 18:04:57 +0100 <mauke> > length "€"
2023-02-15 18:04:58 +0100 <merijn> utf-8 is merely one of a whole bunch of different representations of unicode
2023-02-15 18:04:59 +0100 <lambdabot> 1
2023-02-15 18:05:16 +0100 <mauke> that's one unicode codepoint, but 3 bytes in UTF-8
2023-02-15 18:05:31 +0100 <merijn> utf-7, utf-16, utf-32, etc. different encodings for unicode
2023-02-15 18:05:34 +0100 <mauke> (and 2 bytes in UTF-16)
2023-02-15 18:06:15 +0100 <segfaultfizzbuzz> understood, but what is lost by mandating utf8 then
2023-02-15 18:06:16 +0100 <merijn> segfaultfizzbuzz: String and Text operate on unicode directly, how GHC represents that unicode in memory is an implementation detail
2023-02-15 18:06:18 +0100ubert(~Thunderbi@2a02:8109:abc0:6434:4e5:1e44:42ea:9a2b) (Quit: ubert)
2023-02-15 18:06:23 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 18:06:31 +0100 <segfaultfizzbuzz> so you can't think about bytes...?
2023-02-15 18:07:00 +0100 <mauke> you can if you want
2023-02-15 18:07:05 +0100 <merijn> segfaultfizzbuzz: Going from "abstract" unicode to specific sequences of bytes is something you do at the edge of your program
2023-02-15 18:07:11 +0100 <mauke> it's just usually more convenient not to
2023-02-15 18:07:23 +0100 <merijn> segfaultfizzbuzz: "mandating utf8" doesn't actually solve any problems
2023-02-15 18:07:56 +0100 <merijn> segfaultfizzbuzz: if your user submits text data to your server as utf-16 then "I mandated utf-8" doesn't really solve anything
2023-02-15 18:08:17 +0100thegeekinside(~thegeekin@189.180.97.223) (Remote host closed the connection)
2023-02-15 18:08:48 +0100 <merijn> segfaultfizzbuzz: By distinguishing bytes (i.e. ByteString) from Text (i.e. unicode) and requiring you to explicitly convert from ByteString to Text using an explicit decoder forces you to detect these errors
2023-02-15 18:09:11 +0100 <segfaultfizzbuzz> well if i make use of different libraries, my head will explode if http requests are in utf8, but then talking to some database is utf16, and then in another situation,...
2023-02-15 18:09:19 +0100 <merijn> segfaultfizzbuzz: If you just have "bytes" and "bytes, that we swear/assume only contain utf8 data" you're a problem
2023-02-15 18:09:39 +0100 <segfaultfizzbuzz> the utf8 mandate is nice from an ecosystem/program boundary perspective,... i can (kinda) handle checking inputs at least
2023-02-15 18:09:58 +0100 <merijn> segfaultfizzbuzz: What exactly does that mandate solve?
2023-02-15 18:10:41 +0100 <merijn> Nothing can guarantee external data will be in the encoding you want
2023-02-15 18:10:52 +0100 <segfaultfizzbuzz> well as i mentioned, perhaps i use an http request library, and that wants one kind of string
2023-02-15 18:10:55 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
2023-02-15 18:11:04 +0100 <segfaultfizzbuzz> and then a database library thinks another type is better
2023-02-15 18:11:28 +0100 <segfaultfizzbuzz> and it isn't clear to me how well the string format information would be represented in the type system,...
2023-02-15 18:11:41 +0100 <merijn> segfaultfizzbuzz: How is that relevant when you have, say, Text? The database library and http library both take Text and then convert into the appropriate encoded bytes when needed
2023-02-15 18:11:42 +0100 <mauke> does Haskell even have a "UTF-16 type"?
2023-02-15 18:11:47 +0100 <merijn> mauke: no
2023-02-15 18:11:53 +0100gmg(~user@user/gehmehgeh) (Ping timeout: 255 seconds)
2023-02-15 18:11:55 +0100gehmehgeh(~user@user/gehmehgeh)
2023-02-15 18:11:58 +0100 <merijn> segfaultfizzbuzz: You can't even tell what encoding is used by Text internally
2023-02-15 18:12:11 +0100 <segfaultfizzbuzz> for example: https://stackoverflow.com/questions/23765903/why-is-text-utf-16-as-opposed-to-utf-8
2023-02-15 18:12:17 +0100 <mauke> is it utf-8 now?
2023-02-15 18:12:21 +0100 <lyxia> Text is utf8 now
2023-02-15 18:12:22 +0100 <merijn> mauke: yes
2023-02-15 18:12:43 +0100 <merijn> segfaultfizzbuzz: Why do you think it matters what Text uses internally?
2023-02-15 18:12:45 +0100 <mauke> I know the internals changed, but that's not really visible to users
2023-02-15 18:13:01 +0100 <Hecate> merijn: space & performance? :'')
2023-02-15 18:13:32 +0100 <segfaultfizzbuzz> merijn: well at some point let's say i use Text to create a web request html document to return
2023-02-15 18:13:33 +0100 <merijn> Hecate: The intial UTF-8 conversion attempt performed worse and iirc the main reason to use utf-16 was that ICU used that
2023-02-15 18:13:59 +0100 <merijn> segfaultfizzbuzz: but HTTP requests aren't unicode, they are bytes, so Text has to be encoded explicitly *anyway*
2023-02-15 18:14:08 +0100 <Hecate> merijn: what about the second attempt? :3
2023-02-15 18:14:16 +0100 <merijn> Hecate: I dunno, I haven't kept up
2023-02-15 18:14:25 +0100 <segfaultfizzbuzz> encoded explicitly? what does that mean?
2023-02-15 18:14:49 +0100 <merijn> segfaultfizzbuzz: encodeUtf8 :: Text -> ByteString
2023-02-15 18:14:58 +0100 <merijn> encodeUtf16 :: Text -> ByteString
2023-02-15 18:15:31 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 18:15:44 +0100 <Hecate> merijn: you probably should https://github.com/haskell/text/pull/365#issue-976262730
2023-02-15 18:15:49 +0100 <merijn> segfaultfizzbuzz: That you need to convert the abstract unicode data to a specific encoding in terms of bytes
2023-02-15 18:15:58 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-02-15 18:16:39 +0100 <Hecate> merijn: and https://www.youtube.com/watch?v=1qlGe2qnGZQ of course
2023-02-15 18:17:25 +0100 <mauke> Eq 10x faster?! what happened there?
2023-02-15 18:17:29 +0100 <segfaultfizzbuzz> i mean potentially every interaction with every library will need encoding (and decoding) ... ?
2023-02-15 18:17:38 +0100 <mauke> segfaultfizzbuzz: ... no?
2023-02-15 18:17:40 +0100 <segfaultfizzbuzz> depending on what the library authors thought was a good implementation...?
2023-02-15 18:18:00 +0100 <Hecate> mauke: Ukrainian Excellence™
2023-02-15 18:18:04 +0100 <merijn> segfaultfizzbuzz: no, you only need to encode when you try and serialise unicode to the external world
2023-02-15 18:18:08 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 18:18:08 +0100 <merijn> segfaultfizzbuzz: ???
2023-02-15 18:18:32 +0100 <merijn> I think you're confused and conflating several things
2023-02-15 18:18:42 +0100 <segfaultfizzbuzz> merijn: yes probably as mentioned i am a bad programmer
2023-02-15 18:18:56 +0100 <merijn> segfaultfizzbuzz: Start here: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely…
2023-02-15 18:19:46 +0100 <mauke> Hecate: yeah, but ... equality on utf-16 and utf-8 should both be equivalent to memcmp()
2023-02-15 18:20:02 +0100 <mauke> switching representations doesn't explain the speed-up here
2023-02-15 18:20:15 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 260 seconds)
2023-02-15 18:20:24 +0100 <merijn> mauke: Well, if you have biased input data you're gonna have half the size of bytes
2023-02-15 18:20:29 +0100 <Hecate> mauke: look at the cbits
2023-02-15 18:20:30 +0100 <merijn> Anyway, gotta run
2023-02-15 18:21:09 +0100 <Hecate> merijn: see ya
2023-02-15 18:21:19 +0100 <mauke> ok, yeah. if it's mostly ascii, you're probably going to win on cache alone
2023-02-15 18:24:15 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Remote host closed the connection)
2023-02-15 18:24:25 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2023-02-15 18:24:46 +0100 <segfaultfizzbuzz> "It does not make sense to have a string without knowing what encoding it uses."
2023-02-15 18:24:53 +0100merijn(~merijn@86.86.29.250) (Ping timeout: 252 seconds)
2023-02-15 18:25:04 +0100razetime(~Thunderbi@117.193.1.74) (Remote host closed the connection)
2023-02-15 18:25:11 +0100accord(uid568320@2a03:5180:f:4::8:ac00) (Quit: Connection closed for inactivity)
2023-02-15 18:25:12 +0100 <segfaultfizzbuzz> ^ i agree with this completely, so then my question is
2023-02-15 18:25:47 +0100 <segfaultfizzbuzz> am i guaranteed throughout the haskell ecosystem that all strings have a completely defined encoding?
2023-02-15 18:25:49 +0100 <mauke> that statement assumes "string" means byte string
2023-02-15 18:25:55 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds)
2023-02-15 18:26:07 +0100 <mauke> if you have a character string, there is no encoding
2023-02-15 18:26:21 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-02-15 18:27:24 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com)
2023-02-15 18:27:44 +0100Joao003(~Joao003@2804:840:830b:2100:ad60:28cd:6e23:d3c3)
2023-02-15 18:27:52 +0100 <Joao003> hi
2023-02-15 18:27:54 +0100 <segfaultfizzbuzz> by character string, you mean a sequence of unicode code points?
2023-02-15 18:28:13 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection)
2023-02-15 18:28:21 +0100 <mauke> yes (or better)
2023-02-15 18:28:40 +0100 <segfaultfizzbuzz> what is "better" than that?
2023-02-15 18:28:46 +0100 <Joao003> Doesn't String already exist?
2023-02-15 18:28:46 +0100 <mauke> grapheme clusters
2023-02-15 18:29:01 +0100 <segfaultfizzbuzz> mauke: this sounds like semantic meaning?
2023-02-15 18:29:16 +0100 <mauke> well, it's closer to real-world "characters"
2023-02-15 18:29:21 +0100 <segfaultfizzbuzz> and also this somewhat sidesteps my question
2023-02-15 18:29:39 +0100 <segfaultfizzbuzz> if i pull in a bunch of commonly used haskell packages and do things with strings,
2023-02-15 18:29:55 +0100 <segfaultfizzbuzz> do i need to constantly be vigilant about the encodings across those packages?
2023-02-15 18:30:00 +0100 <mauke> LATIN CAPITAL LETTER A + COMBINING DIAERESIS is two codepoints, but a single "character"
2023-02-15 18:30:25 +0100 <mauke> segfaultfizzbuzz: in my experience, that's never been an issue
2023-02-15 18:30:34 +0100 <segfaultfizzbuzz> lol what in the hell is that lol
2023-02-15 18:30:56 +0100 <segfaultfizzbuzz> mauke: ok but the typesystem itself doesn't track the encodings?
2023-02-15 18:31:00 +0100 <lyxia> everyone uses String or Text so there is no possible confusion
2023-02-15 18:31:06 +0100 <mauke>
2023-02-15 18:31:41 +0100 <mauke> segfaultfizzbuzz: people generally don't write interfaces that use bytestrings if they're trying to represent text
2023-02-15 18:32:09 +0100 <davean> Yah you only see non-decoded Unicode in extremely low level APIs
2023-02-15 18:32:13 +0100 <mauke> I mean, you could create separate types for those
2023-02-15 18:32:24 +0100 <davean> And if you wanted that, it would be trivial to make
2023-02-15 18:32:36 +0100 <mauke> with some sort of phantom parameter for the encoding
2023-02-15 18:33:28 +0100 <mauke> it just doesn't come up very often in practice
2023-02-15 18:33:32 +0100 <davean> newtype NonDecodedUnicode encoding = NDC ByteString
2023-02-15 18:33:49 +0100 <segfaultfizzbuzz> a very practical example is some zurihac talk from 2022 says Text just switched from utf16 to utf8 so it seems rather likely that there will be a lot of packages (possibly abandoned) which might be relying on the assumption that Text is utf16 (possibly for unsafe computations and the like)
2023-02-15 18:33:52 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 18:34:00 +0100 <davean> Yah, only in really low level APIs which are generally extremely local and don't actually care about the encoding!
2023-02-15 18:34:39 +0100 <davean> segfaultfizzbuzz: Not a problem though, thats internal and they'd have to use internals *and* violate the PVP to get an issue there
2023-02-15 18:34:39 +0100 <Joao003> what are you talking about
2023-02-15 18:34:41 +0100 <mauke> segfaultfizzbuzz: ... so?
2023-02-15 18:34:56 +0100 <segfaultfizzbuzz> PVP?
2023-02-15 18:35:00 +0100 <davean> Package Version Policy
2023-02-15 18:35:08 +0100 <lyxia> segfaultfizzbuzz: turns out there is not a log of package that relied on that assumption
2023-02-15 18:35:12 +0100 <mauke> I don't know if those packages exist, but if they relied on Text internals, they are now broken
2023-02-15 18:35:23 +0100 <davean> and there can't be any reasonable packages that break when they do
2023-02-15 18:35:30 +0100 <mauke> the same thing would happen if you had bytestrings tagged with encodings
2023-02-15 18:35:58 +0100 <segfaultfizzbuzz> i'm trying to wrap my head around the idea of working with strings without strictness and a concept of bytes
2023-02-15 18:36:10 +0100ddellacosta(~ddellacos@146.70.165.10)
2023-02-15 18:36:19 +0100 <mauke> not sure what you mean by "without strictness"
2023-02-15 18:36:22 +0100 <glguy> it's like working with ints and not knowing if the machine uses bit or little endian ordering internally
2023-02-15 18:36:24 +0100 <davean> segfaultfizzbuzz: You mean without the problems?\
2023-02-15 18:36:29 +0100 <segfaultfizzbuzz> a lazy string
2023-02-15 18:36:40 +0100 <lyxia> glguy++
2023-02-15 18:36:44 +0100 <mauke> laziness is orthogonal
2023-02-15 18:36:55 +0100 <mauke> (we have lazy bytestrings, too)
2023-02-15 18:36:57 +0100 <davean> segfaultfizzbuzz: You realize looking at the bytes is a core source of errors?
2023-02-15 18:37:12 +0100gurkenglas(~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de)
2023-02-15 18:37:27 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 18:37:45 +0100 <segfaultfizzbuzz> davean: trying to have a vague idea of what the alternative is, somehow the string type can accumulate a variety of operations on the string but provide some kind of collection of functions still which can index into the string and soforth
2023-02-15 18:38:08 +0100econo(uid147250@user/econo)
2023-02-15 18:38:23 +0100 <mauke> the obvious alternative is an array or list of Chars
2023-02-15 18:38:30 +0100 <mauke> (can be strict or lazy)
2023-02-15 18:38:40 +0100 <segfaultfizzbuzz> mauke: yeah i learned to code in C originally so it's a hard habit of mind to break
2023-02-15 18:38:50 +0100 <darkling> In erlang, for example, strings are literally lists of unicode code points.
2023-02-15 18:39:01 +0100 <mauke> just imagine that every element of a string is a uint21_t
2023-02-15 18:39:09 +0100 <Joao003> guys is there a way i can map multiple functions over a list without using concatMap
2023-02-15 18:39:22 +0100 <darkling> ^^ what mauke said.
2023-02-15 18:39:30 +0100 <segfaultfizzbuzz> ok so the shift is from moving from array to list, basically?
2023-02-15 18:39:35 +0100 <mauke> no
2023-02-15 18:39:38 +0100 <mauke> from 8 to 21 bits
2023-02-15 18:40:06 +0100 <segfaultfizzbuzz> moving from 8 to 21 bits doesn't hurt my head at all, it's the layout and possibility of laziness which gives me a headache
2023-02-15 18:40:21 +0100 <mauke> again, that has nothing to do with unicode or encodings
2023-02-15 18:40:28 +0100 <mauke> we have lazy bytestrings
2023-02-15 18:40:53 +0100 <davean> segfaultfizzbuzz: strings are made of code points, not bytes, if you look at bytes you aren't looking at a string, you need to decode it to get any sense of a string.
2023-02-15 18:40:58 +0100 <glguy> segfaultfizzbuzz: you might just have to get used to headaches. tylenol?
2023-02-15 18:41:10 +0100 <lyxia> Joao003: show us your code and we'll simplify it, maybe
2023-02-15 18:41:10 +0100 <davean> segfaultfizzbuzz: even in C you can't look at bytes and do string operations correctly!
2023-02-15 18:41:51 +0100 <Joao003> no basically is there a function in prelude which is concatMap but it doesn't string everything together into a flattened list
2023-02-15 18:42:15 +0100 <glguy> Joao003: map (\x -> (f x, g x, h x))
2023-02-15 18:42:23 +0100 <Joao003> oh my god
2023-02-15 18:42:30 +0100m1dnight(~christoph@78-22-0-121.access.telenet.be) (Quit: WeeChat 3.8)
2023-02-15 18:42:32 +0100 <Joao003> BUT I DON'T WANT TUPLES
2023-02-15 18:42:32 +0100 <mauke> yeah: map
2023-02-15 18:42:39 +0100 <davean> Joao003: what DO you want?
2023-02-15 18:42:53 +0100 <davean> map (f . g . h)?
2023-02-15 18:43:00 +0100 <mauke> concatMap without flatting is called map
2023-02-15 18:43:07 +0100 <mauke> *flattening
2023-02-15 18:43:13 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-15 18:43:31 +0100 <Joao003> map is not [a -> b] -> [a] -> [b]
2023-02-15 18:43:54 +0100 <mauke> what are you talking about, Jesse
2023-02-15 18:44:02 +0100 <davean> map (foldl1 (.) fs)
2023-02-15 18:44:10 +0100 <davean> er
2023-02-15 18:44:13 +0100 <davean> no, thats the wrong code
2023-02-15 18:44:16 +0100 <segfaultfizzbuzz> this dude says that many haskell libraries rely on Text internals: https://youtu.be/1qlGe2qnGZQ?t=2952
2023-02-15 18:44:26 +0100 <Joao003> i don't want functions composed together
2023-02-15 18:44:30 +0100 <davean> concatMap (`map` fs)
2023-02-15 18:44:48 +0100m1dnight(~christoph@78.22.0.121)
2023-02-15 18:45:00 +0100 <mauke> Joao003: again, what DO you want?
2023-02-15 18:45:17 +0100 <Joao003> `f [(+1), (+2)] [1, 2, 3]` should give me `[[2, 3, 4], [3, 4, 5]]`. i want the `f`
2023-02-15 18:45:26 +0100akegalj(~akegalj@225-212.dsl.iskon.hr)
2023-02-15 18:45:57 +0100 <ddellacosta> are you looking for https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#v:-60--42--62- ?
2023-02-15 18:46:01 +0100 <glguy> > let f fs x = [f x | f <- fs] in f [(+1), (+2)] [1, 2, 3]
2023-02-15 18:46:03 +0100 <lambdabot> error:
2023-02-15 18:46:03 +0100 <lambdabot> • No instance for (Num [Integer]) arising from a use of ‘e_112123’
2023-02-15 18:46:03 +0100 <lambdabot> • In the expression: e_112123
2023-02-15 18:46:10 +0100 <glguy> hmm, kinda used too many fs
2023-02-15 18:46:13 +0100 <jade[m]> zipWith ($) fs xs
2023-02-15 18:46:24 +0100 <jade[m]> wait no
2023-02-15 18:46:31 +0100 <jade[m]> that'd be for single pair
2023-02-15 18:46:32 +0100 <davean> segfaultfizzbuzz: where does he claim that?
2023-02-15 18:46:33 +0100 <jade[m]> s/pair/pairs/
2023-02-15 18:46:41 +0100 <davean> segfaultfizzbuzz: I expect you're just wrong here
2023-02-15 18:46:46 +0100 <glguy> > let thing fs x = [map f x | f <- fs] in thing [(+1), (+2)] [1, 2, 3]
2023-02-15 18:46:48 +0100 <lambdabot> [[2,3,4],[3,4,5]]
2023-02-15 18:46:52 +0100 <segfaultfizzbuzz> davean: at the time linked to there
2023-02-15 18:47:02 +0100 <segfaultfizzbuzz> at t=2952
2023-02-15 18:47:21 +0100 <Joao003> > let f fs xs = map (\ f -> map f xs) fs in f [(+1), (+2)] [1, 2, 3]
2023-02-15 18:47:21 +0100 <jade[m]> you want `<*>` without the concatenation
2023-02-15 18:47:23 +0100 <lambdabot> [[2,3,4],[3,4,5]]
2023-02-15 18:47:23 +0100 <Joao003> found it
2023-02-15 18:47:45 +0100 <mauke> @pl \fs xs -> map (\ f -> map f xs) fs
2023-02-15 18:47:45 +0100 <lambdabot> flip (map . flip map)
2023-02-15 18:48:06 +0100 <Joao003> wow that's a flip for every map
2023-02-15 18:48:08 +0100 <glguy> you can make it harder to read replacing fmap with <$> and flip fmap with <&>
2023-02-15 18:48:23 +0100 <Joao003> aaaaaaaaaaaaaaaa
2023-02-15 18:48:31 +0100 <mauke> also, . can be replaced by `fmap`
2023-02-15 18:48:57 +0100 <Joao003> > (flip (<$> <$> <&>)) [(+1), (+2)] [1, 2, 3]
2023-02-15 18:48:59 +0100 <lambdabot> <hint>:1:12: error: parse error on input ‘<$>’
2023-02-15 18:49:16 +0100 <Joao003> > (flip ((<$>) <$> (<&>))) [(+1), (+2)] [1, 2, 3]
2023-02-15 18:49:17 +0100 <lambdabot> [[2,3,4],[3,4,5]]
2023-02-15 18:49:22 +0100 <davean> segfaultfizzbuzz: half of those are encoding libraries that specificly deal with the encoding
2023-02-15 18:49:29 +0100 <jade[m]> map . flip map is what you want I think
2023-02-15 18:49:36 +0100 <davean> and none would break with the upgrade I believe
2023-02-15 18:49:50 +0100 <segfaultfizzbuzz> ok...
2023-02-15 18:50:01 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2023-02-15 18:50:11 +0100 <jade[m]> ghci> (map . flip map) [1, 2, 3] [(+1), (+2)]
2023-02-15 18:50:11 +0100 <jade[m]> [[2,3,4],[3,4,5]]
2023-02-15 18:50:32 +0100 <Joao003> + extra flip for aligning with concatMap
2023-02-15 18:51:32 +0100 <davean> segfaultfizzbuzz: thats a lot in the sense of "I personally had to do extra work to update things that were directly connected" not "a lot" in the sense of "wide spread"
2023-02-15 18:51:50 +0100 <davean> segfaultfizzbuzz: as in "there was as much work to do outside the package as inside it"
2023-02-15 18:52:02 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-02-15 18:52:18 +0100 <davean> It was a significant portion of the project time to update everyone else's code while doing text, not that it was wide spread in the ecosystem
2023-02-15 18:52:50 +0100 <davean> (I was adjacent to that project)
2023-02-15 18:52:53 +0100 <segfaultfizzbuzz> ok
2023-02-15 18:53:04 +0100kurbus(~kurbus@user/kurbus)
2023-02-15 18:53:05 +0100 <mauke> it's also kind of irrelevant because if we had used a tagged bytestring+encoding format, we would've had the same breakage
2023-02-15 18:53:09 +0100 <ddellacosta> > foldMap (\f -> [f <$> [1,2,3]]) [(+1),(+2)]
2023-02-15 18:53:11 +0100 <lambdabot> [[2,3,4],[3,4,5]]
2023-02-15 18:54:02 +0100 <ddellacosta> I think it can be made more general
2023-02-15 18:54:23 +0100 <davean> segfaultfizzbuzz: imagine if libc updated something and it was less than twice the work to update everything that depended on libc as compared to the work of updating libc its self
2023-02-15 18:56:48 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
2023-02-15 18:58:42 +0100 <davean> segfaultfizzbuzz: and in C you should use functions like wcslen(_s)
2023-02-15 19:00:46 +0100 <davean> segfaultfizzbuzz: note wchar_t is *implimentation defined* so portable code has to be abstract over it anyway.
2023-02-15 19:01:01 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 19:01:12 +0100 <davean> (Its still not good enough of course, can't reliably hold unicode ...)
2023-02-15 19:01:41 +0100notzmv(~zmv@user/notzmv)
2023-02-15 19:02:53 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-02-15 19:05:27 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 19:06:23 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1))
2023-02-15 19:09:20 +0100enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2023-02-15 19:11:19 +0100 <mauke> #if WCHAR_MAX < 0x10ffff / #error "get a compiler that supports unicode" / #endif
2023-02-15 19:12:15 +0100lechner(~lechner@debian/lechner) (Ping timeout: 248 seconds)
2023-02-15 19:12:58 +0100Joao003(~Joao003@2804:840:830b:2100:ad60:28cd:6e23:d3c3) (Read error: Connection reset by peer)
2023-02-15 19:16:19 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2023-02-15 19:16:32 +0100mastarija(~mastarija@2a05:4f46:e03:6000:6c22:2fad:848c:c9d4)
2023-02-15 19:16:55 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection)
2023-02-15 19:17:13 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 19:23:05 +0100nattiestnate(~nate@202.138.250.31)
2023-02-15 19:24:39 +0100bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-02-15 19:25:46 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2023-02-15 19:26:19 +0100 <zero> @type fix error
2023-02-15 19:26:20 +0100 <lambdabot> [Char]
2023-02-15 19:26:26 +0100 <zero> ^ why?
2023-02-15 19:26:56 +0100 <lyxia> look at the type of fix, look at the type of error
2023-02-15 19:27:26 +0100 <mauke> :t fix
2023-02-15 19:27:27 +0100 <lambdabot> (a -> a) -> a
2023-02-15 19:27:32 +0100 <mauke> :t error
2023-02-15 19:27:33 +0100 <lambdabot> [Char] -> a
2023-02-15 19:27:55 +0100 <mauke> fix takes a function whose argument and result types are the same
2023-02-15 19:28:16 +0100 <zero> i understand the substitution, but something doesn't make sense. how do we get a string from error?
2023-02-15 19:28:22 +0100 <mauke> since error takes [Char] as argument, it follows that a = [Char] within fix's type signature
2023-02-15 19:28:31 +0100 <geekosaur> a unifies with anything including [Char]
2023-02-15 19:28:46 +0100 <mauke> the a in error's type signature is completely free
2023-02-15 19:28:50 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-02-15 19:28:52 +0100 <mauke> in particular, it can be set to [Char]
2023-02-15 19:29:28 +0100 <mauke> so: fix error is well typed with fix :: ([Char] -> [Char]) -> [Char] and error :: [Char] -> [Char]
2023-02-15 19:29:31 +0100jade[m]uploaded an image: (924KiB) < https://libera.ems.host/_matrix/media/v3/download/catgirl.cloud/5b300071dcd72c885b45663174489212af… >
2023-02-15 19:29:34 +0100 <jade[m]> fun
2023-02-15 19:30:12 +0100 <mauke> zero: you get a string from error the same way you get any result from error, really
2023-02-15 19:30:33 +0100 <mauke> it always returns a (lazy) exception, so it can pretend to be any type it wants
2023-02-15 19:31:53 +0100 <mauke> in C++ terms, template<typename T> T error() { throw "lol, whatever"; } // sort of
2023-02-15 19:32:15 +0100 <zero> > terror :: Char -> a ; terror _ = let a = a in a ; fix terror
2023-02-15 19:32:17 +0100 <lambdabot> <hint>:1:21: error: parse error on input ‘;’
2023-02-15 19:32:36 +0100 <geekosaur> use yahb2
2023-02-15 19:32:46 +0100 <geekosaur> lambdabot is not ghci and won't accept definitions
2023-02-15 19:33:00 +0100 <mauke> > let terror :: Char -> a; terror _ = let a = a in a in fix terror
2023-02-15 19:33:03 +0100 <lambdabot> *Exception: <<loop>>
2023-02-15 19:33:11 +0100falafel(~falafel@2607:fb91:143f:e47f:f515:cb26:b674:140e)
2023-02-15 19:33:26 +0100 <zero> how does `fix error` *actually* return a string?
2023-02-15 19:33:36 +0100 <mauke> it doesn't
2023-02-15 19:33:41 +0100 <mauke> it throws an exception
2023-02-15 19:33:48 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
2023-02-15 19:33:52 +0100 <jade[m]> jade[m]: .
2023-02-15 19:34:06 +0100 <zero> ok
2023-02-15 19:34:08 +0100 <zero> i see
2023-02-15 19:34:12 +0100 <zero> > head $ fix error
2023-02-15 19:34:14 +0100 <geekosaur> it doesn't. it returns a lazy exception that is thrown when lambdabot tries to display te string, then throws another exception when trying to display the string exception message, etc.
2023-02-15 19:34:14 +0100 <lambdabot> *Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Exc...
2023-02-15 19:34:22 +0100 <zero> ok i get it now. thanks
2023-02-15 19:34:26 +0100 <mauke> ;-)
2023-02-15 19:34:27 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-02-15 19:34:41 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-15 19:35:19 +0100 <mauke> it's like an infinitely nested exception. when you look at the exception message, it throws another exception, whose message throws another exception, whose ...
2023-02-15 19:35:19 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 19:37:06 +0100 <zero> fun...
2023-02-15 19:37:45 +0100chele(~chele@user/chele) (Remote host closed the connection)
2023-02-15 19:41:49 +0100MajorBiscuit(~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Quit: WeeChat 3.6)
2023-02-15 19:45:05 +0100 <witcher> i'm unsure how to continue my haskell journey from here besides "just programming": i've had a uni course in haskell, and read the book "Programming in Haskell" by Graham Hutton. what's the next logical step, if any?
2023-02-15 19:46:10 +0100 <Hecate> witcher: solve your problems
2023-02-15 19:46:15 +0100 <Hecate> but with Haskell this time
2023-02-15 19:46:25 +0100shapr(~user@net-5-88-239-92.cust.vodafonedsl.it) (Ping timeout: 246 seconds)
2023-02-15 19:47:57 +0100 <witcher> Hecate: that's a given, but i'm wondering if there are any other materials to learn more about haskell while i do that
2023-02-15 19:48:19 +0100 <Hecate> witcher: oh yeah sure :D but can *you* handle it? :p
2023-02-15 19:48:23 +0100 <zero> yes solve your problems but don't fix your errors. unless you want and infinite exception
2023-02-15 19:48:42 +0100 <zero> *an
2023-02-15 19:48:49 +0100 <Hecate> witcher: I'd advise you to really program before going to the next step
2023-02-15 19:49:05 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2023-02-15 19:49:07 +0100 <Hecate> witcher: this book is a good road companion https://leanpub.com/finding-success-in-haskell
2023-02-15 19:49:25 +0100chaitlatte0(ea29c0bb16@user/chaitlatte0) (Remote host closed the connection)
2023-02-15 19:49:32 +0100chaitlatte0(ea29c0bb16@2604:bf00:561:2000::1124)
2023-02-15 19:49:39 +0100chaitlatte0(ea29c0bb16@2604:bf00:561:2000::1124) (Remote host closed the connection)
2023-02-15 19:49:46 +0100chaitlatte0(ea29c0bb16@2604:bf00:561:2000::1124)
2023-02-15 19:50:25 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 19:50:39 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-15 19:50:48 +0100 <witcher> Hecate: that sounds like what i'm looking for, thank you!
2023-02-15 19:52:21 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2023-02-15 19:52:42 +0100smwonders what sort of a journey are you on that doesn't involve programming ?
2023-02-15 19:53:21 +0100 <sm> will there be programming later ? Or are you studying the concepts ? Just curious
2023-02-15 19:54:05 +0100chaitlatte0(ea29c0bb16@2604:bf00:561:2000::1124) (Remote host closed the connection)
2023-02-15 19:54:12 +0100 <trev> lol
2023-02-15 19:54:15 +0100chaitlatte0(ea29c0bb16@user/chaitlatte0)
2023-02-15 19:54:36 +0100 <trev> sm seems like a good time to shamelessly plug tiny-games-hs
2023-02-15 19:54:48 +0100enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2023-02-15 19:54:55 +0100kurbus(~kurbus@user/kurbus) (Quit: Client closed)
2023-02-15 19:55:55 +0100enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2023-02-15 19:56:00 +0100ardell(~ardell@user/ardell)
2023-02-15 19:56:45 +0100 <sm> haha please do trev, but that doesn't seem what's wanted here
2023-02-15 19:57:39 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 20:00:13 +0100 <trev> my two cents would be to involve yourself with an open source haskell project, start your own project, or find a haskell job while continuing reading
2023-02-15 20:00:23 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-02-15 20:03:57 +0100abiss27(~abiss27@190.213.236.106)
2023-02-15 20:06:45 +0100 <trev> now that i'm thinking about it, there's nothing better than jumping into an open source project and forcing people to mentor you with PR feedbac :]
2023-02-15 20:07:21 +0100 <geekosaur> we're always open to new contribs 🙂
2023-02-15 20:07:32 +0100 <geekosaur> (see #xmonad)
2023-02-15 20:08:14 +0100 <geekosaur> https://hackage.haskell.org/package/xmonad-contrib-0.17.1/docs/XMonad-Doc-Developing.html
2023-02-15 20:08:23 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2023-02-15 20:09:36 +0100 <witcher> sm: looks like this came across wrong. i *am* programming, that's the whole point of learning a language
2023-02-15 20:12:26 +0100 <sm> well, I didn't want to assume that.. some might prefer to explore theory
2023-02-15 20:12:54 +0100 <sm> cool
2023-02-15 20:13:31 +0100 <sm> well, there's an internet ton of other materials
2023-02-15 20:14:02 +0100Guest9(~Guest@2409:4073:28d:cb52:888b:1aab:b70f:4d3e)
2023-02-15 20:14:08 +0100 <sm> a recent book I like is
2023-02-15 20:14:08 +0100 <sm> @where PH
2023-02-15 20:14:09 +0100 <lambdabot> https://leanpub.com/production-haskell 2023 book
2023-02-15 20:14:17 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2023-02-15 20:14:46 +0100falafel(~falafel@2607:fb91:143f:e47f:f515:cb26:b674:140e) (Remote host closed the connection)
2023-02-15 20:14:50 +0100 <sm> but it's too early for that perhaps. Another that includes several example projects is
2023-02-15 20:14:50 +0100 <sm> @where HTAC
2023-02-15 20:14:51 +0100 <lambdabot> "Haskell Tutorial and Cookbook" by Mark Watson in 2017-09-04 at <https://leanpub.com/haskell-cookbook>
2023-02-15 20:15:39 +0100smchecks out Hecate's
2023-02-15 20:15:46 +0100 <witcher> i find it hard to filter through all the "haskell 101", "what is a monad", etc. there's a ton of it, which is good, but looking beyond it for topics that are ""a bit more advanced"" becomes harder and tedious
2023-02-15 20:16:04 +0100 <sm> ha one that looks perfect for almost-valentine's day
2023-02-15 20:16:15 +0100 <witcher> this is not a haskell problem, i'm just having a hard time finding these materials
2023-02-15 20:16:46 +0100 <witcher> sm: thanks for the recommendations!
2023-02-15 20:17:12 +0100 <ddellacosta> witcher: this is a great book too https://www.goodreads.com/book/show/17802513-parallel-and-concurrent-programming-in-haskell
2023-02-15 20:17:29 +0100 <sm> witcher: yes.. there are a few standout resources but not knowing exactly where you are, recommending books seems the safest. And this is the best place for selecting books:
2023-02-15 20:17:29 +0100 <sm> @where books
2023-02-15 20:17:29 +0100 <lambdabot> https://www.extrema.is/articles/haskell-books is the best list of Haskell books. See also: LYAH, HTAC, RWH, PH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, FSAF, HftVB, TwT, FoP, PFAD, WYAH,
2023-02-15 20:17:29 +0100 <lambdabot> non-haskell-books
2023-02-15 20:17:31 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2023-02-15 20:18:12 +0100 <witcher> ddellacosta, sm: thanks!
2023-02-15 20:19:14 +0100ft(~ft@p3e9bc443.dip0.t-ipconnect.de)
2023-02-15 20:21:07 +0100 <sm> to describe the FSAF book, would it be fair to say it has a narrow focus on a few practical haskell programming topics likely to be helpful to a post-beginner haskeller ?
2023-02-15 20:22:29 +0100 <trev> geekosaur can you convince me to switch from bspwm to xmonad in one sentence?
2023-02-15 20:24:17 +0100 <geekosaur> probably not. the ecosystem doesn't really work that way. we do have our own BSP layout that can be combined with others (https://github.com/geekosaur/xmonad.hs/blob/skkukuk/xmonad.hs#L139-L153 for example)
2023-02-15 20:24:32 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Ping timeout: 255 seconds)
2023-02-15 20:26:24 +0100 <trev> interesting
2023-02-15 20:26:30 +0100 <trev> bspwm seems way more primitive
2023-02-15 20:26:36 +0100falafel(~falafel@2607:fb91:143f:e47f:3048:c7fd:edeb:3cc7)
2023-02-15 20:26:48 +0100 <witcher> geekosaur: maybe i should give xmonad a try sometime - i've always been wondering what it's really about. i don't know anything about it besides it being a tiling window manager and written in Haskell
2023-02-15 20:27:22 +0100Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 246 seconds)
2023-02-15 20:28:19 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-02-15 20:28:20 +0100Cale(~cale@2605:8d80:6a2:d49b:a139:9a62:b1d5:76a4) (Read error: Connection reset by peer)
2023-02-15 20:28:58 +0100 <sm> trev: it'd be a shame if something were to happen to that bspwm config.. accidents are so common
2023-02-15 20:29:32 +0100 <trev> :D
2023-02-15 20:30:31 +0100 <sm> the static typer's pitch to dynamic typers :)
2023-02-15 20:30:48 +0100Guest9(~Guest@2409:4073:28d:cb52:888b:1aab:b70f:4d3e) (Ping timeout: 260 seconds)
2023-02-15 20:33:02 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 20:33:50 +0100opticblast(~Thunderbi@172.58.85.230)
2023-02-15 20:34:19 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 20:35:45 +0100thegeekinside(~thegeekin@189.180.97.223)
2023-02-15 20:39:41 +0100Joao003(~Joao003@2804:840:830b:2100:6d10:13ec:f5fc:ff63)
2023-02-15 20:39:49 +0100 <Joao003> hi
2023-02-15 20:40:43 +0100waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-02-15 20:43:33 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 255 seconds)
2023-02-15 20:44:14 +0100 <Hecate> * sm checks out Hecate's // I don't have a tutorial!
2023-02-15 20:44:35 +0100 <sm> I meant your book recommendation
2023-02-15 20:45:16 +0100 <Hecate> ah
2023-02-15 20:45:21 +0100 <Hecate> yes, very good book
2023-02-15 20:45:32 +0100 <Hecate> the next one about sockets and pipes is on the way
2023-02-15 20:45:37 +0100 <Hecate> (no spoiler though)
2023-02-15 20:45:44 +0100Cale(~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com)
2023-02-15 20:47:36 +0100gurkenglas(~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de) (Ping timeout: 255 seconds)
2023-02-15 20:51:14 +0100jargon(~jargon@184.101.95.90)
2023-02-15 20:51:18 +0100nattiestnate(~nate@202.138.250.31) (Quit: WeeChat 3.8)
2023-02-15 21:00:16 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 21:04:42 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 21:10:43 +0100lagash_lagash
2023-02-15 21:11:29 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 21:14:14 +0100mechap(~mechap@user/mechap)
2023-02-15 21:15:39 +0100lagash(lagash@lagash.shelltalk.net) (Quit: ZNC - https://znc.in)
2023-02-15 21:18:33 +0100akegalj(~akegalj@225-212.dsl.iskon.hr) (Quit: leaving)
2023-02-15 21:20:18 +0100lagash_(~lagash@lagash.shelltalk.net)
2023-02-15 21:20:38 +0100pavonia(~user@user/siracusa)
2023-02-15 21:24:39 +0100mechap(~mechap@user/mechap) (Quit: WeeChat 3.8)
2023-02-15 21:24:53 +0100gensyst(gensyst@user/gensyst)
2023-02-15 21:25:09 +0100 <gensyst> Is there really no way to do better? https://dpaste.com/5H42RC2BT manually typing those strings is error-prone.
2023-02-15 21:25:19 +0100 <gensyst> (Topic: GADTs deriving Show)
2023-02-15 21:25:55 +0100ardell(~ardell@user/ardell) (Quit: Konversation terminated!)
2023-02-15 21:29:38 +0100kurbus(~kurbus@user/kurbus)
2023-02-15 21:31:09 +0100cheater(~Username@user/cheater) (Ping timeout: 255 seconds)
2023-02-15 21:31:43 +0100 <geekosaur> doesn't `deriving instance Show Settings` work?
2023-02-15 21:32:07 +0100 <geekosaur> (StandaloneDeriving extension)
2023-02-15 21:33:23 +0100 <gensyst> geekosaur, it does! nice...
2023-02-15 21:34:25 +0100 <Hecate> gensyst: I was about to suggest the same thing indeed: https://play-haskell.tomsmeding.com/saved/a8pbO1dS
2023-02-15 21:39:17 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 21:39:53 +0100kurbus(~kurbus@user/kurbus) (Quit: Client closed)
2023-02-15 21:40:55 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 260 seconds)
2023-02-15 21:43:19 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 246 seconds)
2023-02-15 21:43:47 +0100phaazon2(~phaazon@2001:41d0:a:fe76::1)
2023-02-15 21:43:48 +0100 <gensyst> thanks mates
2023-02-15 21:44:02 +0100phaazon2phaazon
2023-02-15 21:44:25 +0100trev(~trev@user/trev) (Remote host closed the connection)
2023-02-15 21:44:56 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 21:45:10 +0100 <phaazon> hi :)
2023-02-15 21:46:12 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com)
2023-02-15 21:47:28 +0100 <sm> I can't help but share tristanC's demo of terrorjack's work: you can easily run (or compile to a native binary) the 1.5Mb https://tristancacqueray.github.io/tiny-game-haskell-wasm/tiny-brot.wasm with a wasm runtime like https://wasmtime.dev
2023-02-15 21:47:58 +0100 <sm> no haskell toolchain needed
2023-02-15 21:50:34 +0100tdammers(~tdammers@77.109.72.175.res.static.edpnet.net) (Ping timeout: 252 seconds)
2023-02-15 21:50:52 +0100tdammers(~tdammers@77.109.72.175.res.static.edpnet.net)
2023-02-15 21:55:40 +0100vulpine(xfnw@tilde.team) (Quit: Connection reset by purr)
2023-02-15 21:57:16 +0100vulpine(xfnw@tilde.team)
2023-02-15 21:58:55 +0100nschoe(~q@2a01:e0a:8e:a190:f84c:9cc5:2613:142)
2023-02-15 21:59:05 +0100 <phaazon> question about linear types: isn’t there a « 0 » multiplicity? I know it might not be super useful, but I was wondering whether it existed
2023-02-15 21:59:08 +0100 <phaazon> i.e. for typing const
2023-02-15 21:59:18 +0100 <phaazon> const :: a %0 -> b %1 -> b
2023-02-15 22:01:55 +0100 <geekosaur> not currently
2023-02-15 22:02:01 +0100 <geekosaur> only ONE or MANY
2023-02-15 22:03:09 +0100 <phaazon> hm, so -> ≃ %m ->?
2023-02-15 22:03:26 +0100 <geekosaur> yes, afaik
2023-02-15 22:03:58 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
2023-02-15 22:03:59 +0100 <phaazon> thanks geekosaur
2023-02-15 22:04:13 +0100 <phaazon> I’m having fun with them, and I initially tried to implement my lconst (linear const) with id
2023-02-15 22:04:19 +0100 <phaazon> but… id has a %m multiplicity :)
2023-02-15 22:04:26 +0100 <phaazon> funny to start thinking in terms of that now
2023-02-15 22:05:11 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 22:07:27 +0100mechap(~mechap@user/mechap)
2023-02-15 22:13:38 +0100 <jackdk> phaazon: type a -> b = a %Many -> b (explicitly "many", not multiplicity-polymorphic); see https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/linear_types.html#extension-LinearT…
2023-02-15 22:14:03 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 252 seconds)
2023-02-15 22:14:03 +0100 <phaazon> oh, so %m is polymorphic in m
2023-02-15 22:14:05 +0100 <phaazon> that’s interesting
2023-02-15 22:14:14 +0100 <phaazon> so I guess that’s useful for higher order?
2023-02-15 22:14:20 +0100 <geekosaur> oh, sorry. that sounds confusing
2023-02-15 22:15:09 +0100 <phaazon> so if I want to write a function taking an argument that might be used 0, 1 or many times (I don’t know)
2023-02-15 22:15:11 +0100 <phaazon> I should be using %m ->
2023-02-15 22:16:21 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-02-15 22:16:40 +0100 <phaazon> lately, I’ve been thinking a lot about my times in Haskell a couple of years ago
2023-02-15 22:16:45 +0100 <phaazon> and daaaaaaaamn I miss those times so much :)
2023-02-15 22:17:42 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 22:17:42 +0100petrus_(0bb1bd6a3f@2604:bf00:561:2000::10d7)
2023-02-15 22:19:49 +0100 <Joao003> any uses for the S combinator in Haskell?
2023-02-15 22:20:15 +0100 <geekosaur> it's Monad's `ap` or Applicative's <*>
2023-02-15 22:20:35 +0100 <geekosaur> which, yes, gets plenty of use
2023-02-15 22:22:06 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 22:22:31 +0100nschoe(~q@2a01:e0a:8e:a190:f84c:9cc5:2613:142) (Ping timeout: 252 seconds)
2023-02-15 22:24:08 +0100 <phaazon> S combinator?
2023-02-15 22:24:35 +0100gensyst(gensyst@user/gensyst) (Quit: Leaving)
2023-02-15 22:25:22 +0100 <geekosaur> look up the SKI calculus
2023-02-15 22:25:42 +0100 <phaazon> do people still use ap today?
2023-02-15 22:25:51 +0100 <phaazon> I think the question is probably the same as « do people still use return today? »
2023-02-15 22:25:51 +0100 <geekosaur> in Haskell, S = <*>, K = const, I = id
2023-02-15 22:26:03 +0100 <phaazon> interesting, I’ll have a look, thanks
2023-02-15 22:26:06 +0100 <geekosaur> ap has mostly fallen out of use
2023-02-15 22:26:14 +0100 <phaazon> let me guess
2023-02-15 22:26:23 +0100 <phaazon> it used to be a thing before Applicative was a superclass of Monad
2023-02-15 22:26:39 +0100 <geekosaur> it used to be a thing before Applicative existed 🙂
2023-02-15 22:27:27 +0100 <phaazon> :)
2023-02-15 22:27:28 +0100 <lyxia> phaazon: In Agda, there is a "zero multiplicity" and it's useful to erase proofs when extracting code to Haskell.
2023-02-15 22:28:46 +0100 <phaazon> yeah, I was thinking of something like the never type from Rust
2023-02-15 22:28:58 +0100 <phaazon> (so you can prove you’re not going to emit en error, for instance)
2023-02-15 22:29:07 +0100 <phaazon> (and then you can statically remove the Either)
2023-02-15 22:29:09 +0100 <phaazon> (Result in Rust)
2023-02-15 22:29:36 +0100 <lyxia> That's Void
2023-02-15 22:29:46 +0100 <phaazon> yep
2023-02-15 22:30:01 +0100 <lyxia> https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Void.html
2023-02-15 22:32:06 +0100lyle(~lyle@104.246.145.237) (Quit: WeeChat 3.8)
2023-02-15 22:37:18 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-02-15 22:38:05 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f) (Remote host closed the connection)
2023-02-15 22:39:02 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-15 22:39:19 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
2023-02-15 22:41:07 +0100abiss27(~abiss27@190.213.236.106) (Quit: I'm off, Goodbye!)
2023-02-15 22:44:22 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2023-02-15 22:45:36 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2023-02-15 22:46:34 +0100Joao003(~Joao003@2804:840:830b:2100:6d10:13ec:f5fc:ff63) (Read error: Connection reset by peer)
2023-02-15 22:48:03 +0100nschoe(~q@2a01:e0a:8e:a190:e5e1:d084:9247:2697)
2023-02-15 22:48:28 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com) (Remote host closed the connection)
2023-02-15 22:48:43 +0100nschoe(~q@2a01:e0a:8e:a190:e5e1:d084:9247:2697) (Client Quit)
2023-02-15 22:48:52 +0100dcoutts_(~duncan@host86-167-90-212.range86-167.btcentralplus.com)
2023-02-15 22:54:33 +0100gurkenglas(~gurkengla@dynamic-046-114-177-034.46.114.pool.telefonica.de)
2023-02-15 22:56:33 +0100cheater(~Username@user/cheater)
2023-02-15 23:01:41 +0100npmania(~Thunderbi@45.8.223.248)
2023-02-15 23:01:51 +0100mastarija(~mastarija@2a05:4f46:e03:6000:6c22:2fad:848c:c9d4) (Quit: WeeChat 3.7.1)
2023-02-15 23:03:07 +0100michalz(~michalz@185.246.204.107) (Remote host closed the connection)
2023-02-15 23:03:54 +0100Arcade_Dan(~dan@173.31.197.117)
2023-02-15 23:05:38 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 255 seconds)
2023-02-15 23:05:57 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-02-15 23:10:03 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:7d:f047:35eb:a33f)
2023-02-15 23:11:22 +0100petrus_(0bb1bd6a3f@2604:bf00:561:2000::10d7) ()
2023-02-15 23:12:43 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 23:15:59 +0100falafel(~falafel@2607:fb91:143f:e47f:3048:c7fd:edeb:3cc7) (Ping timeout: 255 seconds)
2023-02-15 23:18:33 +0100Arcade_Dan(~dan@173.31.197.117) (Quit: leaving)
2023-02-15 23:20:47 +0100myme1(~myme@40.51-175-185.customer.lyse.net) (Ping timeout: 248 seconds)
2023-02-15 23:23:07 +0100sidy(~sidy@user/sidy) (Ping timeout: 248 seconds)
2023-02-15 23:23:49 +0100freeside(~mengwong@103.252.202.170)
2023-02-15 23:26:34 +0100azure_vermilion(~azure_ver@164.39.138.83) (Ping timeout: 246 seconds)
2023-02-15 23:26:44 +0100azure_vermilion(~azure_ver@164.39.138.83)
2023-02-15 23:26:45 +0100beteigeuze1(~Thunderbi@85.247.81.220)
2023-02-15 23:27:21 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 255 seconds)
2023-02-15 23:27:21 +0100beteigeuze1beteigeuze
2023-02-15 23:27:47 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
2023-02-15 23:28:09 +0100harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-02-15 23:29:09 +0100freeside(~mengwong@103.252.202.170) (Ping timeout: 255 seconds)
2023-02-15 23:29:54 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-02-15 23:30:56 +0100ystael(~ystael@user/ystael) (Ping timeout: 248 seconds)
2023-02-15 23:32:53 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow) (Ping timeout: 252 seconds)
2023-02-15 23:33:18 +0100elevenkb(~elevenkb@105.225.107.107)
2023-02-15 23:37:44 +0100npmania1(~Thunderbi@45.8.223.218)
2023-02-15 23:38:07 +0100npmania(~Thunderbi@45.8.223.248) (Ping timeout: 246 seconds)
2023-02-15 23:38:07 +0100npmania1npmania
2023-02-15 23:38:28 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53) (Ping timeout: 246 seconds)
2023-02-15 23:40:47 +0100manwithluck(~manwithlu@194.177.28.192) (Remote host closed the connection)
2023-02-15 23:42:13 +0100manwithluck(~manwithlu@194.177.28.192)
2023-02-15 23:50:19 +0100tomcatfish(~tomcatfis@mobile-166-170-28-207.mycingular.net) (Read error: Connection reset by peer)
2023-02-15 23:50:43 +0100kurbus(~kurbus@user/kurbus)
2023-02-15 23:51:42 +0100jespada_(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-02-15 23:52:38 +0100segfaultfizzbuzz(~segfaultf@108.211.201.53)
2023-02-15 23:53:25 +0100oldfashionedcow(~Rahul_San@user/oldfashionedcow)
2023-02-15 23:55:02 +0100jespada(~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net)
2023-02-15 23:58:13 +0100myme(~myme@40.51-175-185.customer.lyse.net)