2026/05/31

2026-05-31 00:06:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-31 00:12:56 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in)
2026-05-31 00:17:24 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-31 00:21:59 +0000Icy-Thought(~user@user/icy-thought) (Ping timeout: 245 seconds)
2026-05-31 00:22:09 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-31 00:33:10 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-31 00:37:33 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-31 00:48:35 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 00:51:13 +0000Pozyomka_(~pyon@user/pyon) pyon
2026-05-31 00:51:18 +0000Pozyomka(~pyon@user/pyon) (Remote host closed the connection)
2026-05-31 00:53:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2026-05-31 00:56:40 +0000pavonia(~user@user/siracusa) siracusa
2026-05-31 00:57:21 +0000Vizious(~bes@user/Vizious) (Ping timeout: 246 seconds)
2026-05-31 00:59:34 +0000Vizious(~bes@user/Vizious) Vizious
2026-05-31 01:04:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 01:09:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-31 01:10:26 +0000puke(~puke@user/puke) (Quit: puke)
2026-05-31 01:15:53 +0000puke(~puke@user/puke) puke
2026-05-31 01:20:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 01:21:40 +0000acidjnk(~acidjnk@p200300d6e700e5548c17d531dbcfc9e6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2026-05-31 01:21:40 +0000acidjnk_new(~acidjnk@p200300d6e700e5548c17d531dbcfc9e6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2026-05-31 01:25:03 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 261 seconds)
2026-05-31 01:26:08 +0000Pozyomka_(~pyon@user/pyon) (Remote host closed the connection)
2026-05-31 01:26:27 +0000Pozyomka(~pyon@user/pyon) pyon
2026-05-31 01:35:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 01:42:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-05-31 01:42:53 +0000Pozyomka(~pyon@user/pyon) (Remote host closed the connection)
2026-05-31 01:42:53 +0000Pozyomka_(~pyon@user/pyon) pyon
2026-05-31 01:53:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 01:59:02 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-31 02:05:02 +0000op_4(~tslil@user/op-4/x-9116473) (Remote host closed the connection)
2026-05-31 02:05:40 +0000op_4(~tslil@user/op-4/x-9116473) op_4
2026-05-31 02:09:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 02:14:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2026-05-31 02:16:06 +0000td_(~td@i53870907.versanet.de) (Ping timeout: 243 seconds)
2026-05-31 02:17:59 +0000td_(~td@i53870937.versanet.de)
2026-05-31 02:19:25 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds)
2026-05-31 02:25:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 02:29:35 +0000 <jreicher> lisbeths: there are (at least) two different domains of lambda calculus evaluation performance. One is the calculus itself, i.e. some evaluation orders are shorter than others. In the K-calculus, some evaluations don't terminate at all. The term "lazy" evaluation is sometimes used (incorrectly, in my opinion) to refer to evaluation order. You should make sure you're doing normal order evaluation. That's kind of the bare minimum for a
2026-05-31 02:29:35 +0000 <jreicher> machine. Next is the implementation itself...
2026-05-31 02:30:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-31 02:30:13 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2026-05-31 02:30:21 +0000 <jreicher> For that there are (at least) three kinds of optimisation. One is tail call optimisation. Another is fast currying. And then another is lazy evaluation, which is the memoisation of results.
2026-05-31 02:31:05 +0000 <jreicher> And that's not even covering how you might represent the result of a beta reduction. The expensive way to do it is to generate a new lambda expression, but if performance is not a consideration there's actually nothing wrong with that. The use of environments, etc. is really just an optimisation.
2026-05-31 02:32:16 +0000 <jreicher> Memoisation of results depends a bit on whether you are reducing under abstractions. I've never seen an implementation of that, but it's sometimes called "full laziness". Would be cool if someone did it.
2026-05-31 02:33:24 +0000 <jreicher> But for a really efficient implementation you need to figure out fast currying. In some ways it's the most difficult of the three.
2026-05-31 02:34:37 +0000 <lisbeths> you can write lazy algorithms in lc by suspending the application of something and storing all the arguments in a list. it doesnt have to be built into the interpreter
2026-05-31 02:35:08 +0000 <lisbeths> im more talking about how to get fast arrays in lc
2026-05-31 02:36:26 +0000Fijxu(~Fijxu@user/fijxu) (Quit: XD!!)
2026-05-31 02:37:10 +0000Fijxu(~Fijxu@user/fijxu) fijxu
2026-05-31 02:37:51 +0000 <jreicher> lisbeths: you don't store the arguments in a list. The lambda calculus expression IS the lsit.
2026-05-31 02:41:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 02:45:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 02:56:41 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 02:59:04 +0000spew(~spew@user/spew) (Quit: nyaa~)
2026-05-31 02:59:22 +0000spew(~spew@user/spew) spew
2026-05-31 03:01:52 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-31 03:03:42 +0000 <jreicher> lisbeths: thought about what you want to do a little more and I've had an idea. Have you tried using arrays efficiently in Haskell, without re-implementing lambda calculus evaluation?
2026-05-31 03:12:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 03:17:48 +0000Pozyomka_(~pyon@user/pyon) (Remote host closed the connection)
2026-05-31 03:17:48 +0000Pozyomka(~pyon@user/pyon) pyon
2026-05-31 03:18:56 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-31 03:30:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 03:33:44 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-05-31 03:35:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 254 seconds)
2026-05-31 03:38:20 +0000humasect(~humasect@192.249.132.90) humasect
2026-05-31 04:05:26 +0000haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2026-05-31 04:08:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 04:13:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 266 seconds)
2026-05-31 04:23:29 +0000Pozyomka_(~pyon@user/pyon) pyon
2026-05-31 04:23:31 +0000Pozyomka(~pyon@user/pyon) (Remote host closed the connection)
2026-05-31 04:24:19 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-31 04:25:19 +0000Pozyomka(~pyon@user/pyon) pyon
2026-05-31 04:26:14 +0000Pozyomka_(~pyon@user/pyon) (Read error: Connection reset by peer)
2026-05-31 04:29:07 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 264 seconds)
2026-05-31 04:39:59 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 04:43:34 +0000Pozyomka(~pyon@user/pyon) (Quit: fuck claro)
2026-05-31 04:45:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-31 04:47:46 +0000humasect(~humasect@192.249.132.90) (Quit: Leaving...)
2026-05-31 04:53:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 04:58:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-31 04:59:30 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
2026-05-31 05:05:35 +0000takuan(~takuan@d8D86B9E9.access.telenet.be)
2026-05-31 05:09:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 05:16:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2026-05-31 05:27:15 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 05:32:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 05:32:56 +0000bedbedbde(~bedbedbde@user/bedbedbde) bedbedbde
2026-05-31 05:37:23 +0000bedbedbde(~bedbedbde@user/bedbedbde) (Read error: Connection reset by peer)
2026-05-31 05:43:03 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 05:48:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 266 seconds)
2026-05-31 05:56:37 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2026-05-31 05:58:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 06:02:36 +0000phos(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4) (Ping timeout: 252 seconds)
2026-05-31 06:03:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-31 06:12:04 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 252 seconds)
2026-05-31 06:14:11 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2026-05-31 06:16:54 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) lisbeths
2026-05-31 06:24:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 06:29:40 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-31 06:30:06 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) (Ping timeout: 244 seconds)
2026-05-31 06:30:38 +0000phos(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4)
2026-05-31 06:35:42 +0000zzshork(~zzshork@67.189.145.231)
2026-05-31 06:40:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 06:43:23 +0000Square2(~Square@user/square) (Ping timeout: 265 seconds)
2026-05-31 06:44:29 +0000zzshork(~zzshork@67.189.145.231) (Ping timeout: 245 seconds)
2026-05-31 06:44:50 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-31 06:48:20 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-31 06:50:07 +0000zzshork(~zzshork@67.189.145.231)
2026-05-31 06:53:42 +0000euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2026-05-31 06:55:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 06:56:09 +0000phos(~az-181@2a04:4a43:94bf:f166:33c0:fe4e:a468:67a4) (Ping timeout: 245 seconds)
2026-05-31 06:57:52 +0000tcard(~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
2026-05-31 07:01:02 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Quit: The Lounge - https://thelounge.chat)
2026-05-31 07:02:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-31 07:02:59 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) myxokephale
2026-05-31 07:03:11 +0000tt1231607019780(~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) tt1231
2026-05-31 07:03:45 +0000euphores(~SASL_euph@user/euphores) euphores
2026-05-31 07:04:11 +0000zzshork(~zzshork@67.189.145.231) (Changing host)
2026-05-31 07:04:11 +0000zzshork(~zzshork@user/zzshork) zzshork
2026-05-31 07:05:00 +0000zzshork(~zzshork@user/zzshork) ()
2026-05-31 07:10:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 07:15:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 07:18:34 +0000xff0x(~xff0x@2405:6580:b080:900:43a1:dfae:d3d:489e) (Ping timeout: 276 seconds)
2026-05-31 07:19:00 +0000xff0x(~xff0x@2405:6580:b080:900:e607:1510:9460:dc5c)
2026-05-31 07:26:07 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 07:29:19 +0000m(~travltux@user/travltux) (Quit: WeeChat 4.7.2)
2026-05-31 07:31:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-31 07:31:19 +0000m(~travltux@user/travltux) travltux
2026-05-31 07:31:42 +0000emilym(~Thunderbi@user/emilym) emilym
2026-05-31 07:32:07 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-31 07:40:40 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 276 seconds)
2026-05-31 07:41:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 07:44:44 +0000castan(~castan@188.26.39.158)
2026-05-31 07:44:45 +0000xff0x(~xff0x@2405:6580:b080:900:e607:1510:9460:dc5c) (Ping timeout: 245 seconds)
2026-05-31 07:45:08 +0000 <castan> what's the point of the Foldable instance of pairs
2026-05-31 07:45:13 +0000xff0x(~xff0x@2405:6580:b080:900:1e8e:69be:97e9:df50)
2026-05-31 07:45:38 +0000 <castan> and why isn't there an instance for ((,,) a b)
2026-05-31 07:46:58 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 266 seconds)
2026-05-31 07:47:21 +0000 <Rembane> castan: It's quite good if you know about it. One concrete example is that you want to sort on the first element and then do things on the second element and throw away the first element.
2026-05-31 07:53:39 +0000 <castan> I guess it makes sense if passing pairs to a function expecting any foldable
2026-05-31 07:54:32 +0000 <castan> otherwise the instance itself is trivial
2026-05-31 07:56:45 +0000 <Rembane> Yeah, the more boring answer is: what would it otherwise look like?
2026-05-31 07:57:40 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 07:59:10 +0000 <castan> fair, but then I would have expected Foldable instances for higher arity tuples as well
2026-05-31 07:59:48 +0000 <Rembane> Which element would you write Foldable instances for in higher arity tuples?
2026-05-31 08:00:00 +0000 <mauke> there is only one option
2026-05-31 08:00:05 +0000 <castan> that would be the last
2026-05-31 08:02:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 08:03:02 +0000 <Rembane> mauke: Highlander tuple?
2026-05-31 08:03:08 +0000 <castan> I mean Functor has instances for tuples up to 7 elements
2026-05-31 08:03:55 +0000 <mauke> :t foldMap
2026-05-31 08:03:57 +0000 <lambdabot> (Foldable t, Monoid m) => (a -> m) -> t a -> m
2026-05-31 08:04:08 +0000 <mauke> foldMap f (_, _, x) = f x
2026-05-31 08:10:01 +0000 <Leary> castan: You have to stop somewhere, and it's pretty arbitrary wherever you do. We generally pretend "big" tuples don't exist, but the standard for "big" varies from person to person, so cut-off arity isn't consistent from class to class.
2026-05-31 08:11:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 08:11:54 +0000acidjnk_new(~acidjnk@p200300d6e700e554a1582e2fc899958d.dip0.t-ipconnect.de)
2026-05-31 08:11:56 +0000acidjnk(~acidjnk@p200300d6e700e554a1582e2fc899958d.dip0.t-ipconnect.de) acidjnk
2026-05-31 08:15:34 +0000 <castan> Leary: that's understandable, but it's a bit comical too
2026-05-31 08:15:49 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-31 08:16:15 +0000 <castan> Eq cuts off at 15, Functor at 7, Applicative at 4, Foldable at 2
2026-05-31 08:16:38 +0000 <castan> at least on ghc 9.6.7
2026-05-31 08:17:35 +0000 <mauke> > (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) == (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
2026-05-31 08:17:36 +0000 <lambdabot> No instance for ‘Eq
2026-05-31 08:17:37 +0000 <lambdabot> (Integer, Integer, Integer, Integer, Integer, Integer, In...
2026-05-31 08:17:37 +0000 <lambdabot> Integer, Integer, Integer, Integer, Integer, Integer, In...
2026-05-31 08:17:49 +0000 <mauke> > (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) == (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
2026-05-31 08:17:51 +0000 <lambdabot> True
2026-05-31 08:17:57 +0000 <mauke> > (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) > (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
2026-05-31 08:17:59 +0000 <lambdabot> False
2026-05-31 08:22:55 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 276 seconds)
2026-05-31 08:26:45 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-31 08:28:13 +0000 <mesaoptimizer> > 1 ++ 1
2026-05-31 08:28:15 +0000 <lambdabot> No instance for ‘Num [()]’ arising from a use of ‘e_111’
2026-05-31 08:28:15 +0000 <lambdabot> In the expression: e_111
2026-05-31 08:28:15 +0000 <lambdabot> In the first argument of ‘show_M58322371133546511351’, namely
2026-05-31 08:28:48 +0000 <mesaoptimizer> > length (1, 2)
2026-05-31 08:28:49 +0000 <lambdabot> 1
2026-05-31 08:29:00 +0000 <mesaoptimizer> yes, this is my favorite behavior of Haskell
2026-05-31 08:29:10 +0000 <mesaoptimizer> > length (1, 2, 3)
2026-05-31 08:29:12 +0000 <lambdabot> No instance for ‘Foldable ((,,) Integer Integer)’
2026-05-31 08:29:12 +0000 <lambdabot> arising from a use of ‘length’
2026-05-31 08:29:12 +0000 <lambdabot> In the expression: length (1, 2, 3)
2026-05-31 08:29:24 +0000 <mesaoptimizer> perfect
2026-05-31 08:29:59 +0000 <mauke> @let a === b = cast a == Just b
2026-05-31 08:30:01 +0000 <lambdabot> Defined.
2026-05-31 08:33:51 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-31 08:44:36 +0000__monty__(~toonn@user/toonn) toonn
2026-05-31 08:44:41 +0000divlamir(~divlamir@user/divlamir) (Read error: Connection reset by peer)
2026-05-31 08:44:49 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 08:45:00 +0000divlamir(~divlamir@user/divlamir) divlamir
2026-05-31 08:48:26 +0000acidjnk_new3(~acidjnk@p200300d6e700e50749931930275f1dba.dip0.t-ipconnect.de)
2026-05-31 08:49:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-05-31 08:51:57 +0000acidjnk(~acidjnk@p200300d6e700e554a1582e2fc899958d.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2026-05-31 08:51:57 +0000acidjnk_new(~acidjnk@p200300d6e700e554a1582e2fc899958d.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2026-05-31 08:52:59 +0000acidjnk(~acidjnk@p200300d6e700e50749931930275f1dba.dip0.t-ipconnect.de) acidjnk
2026-05-31 08:58:41 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2026-05-31 08:59:44 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2026-05-31 09:00:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 09:05:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-31 09:12:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 09:17:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 09:21:21 +0000castan(~castan@188.26.39.158) (Quit: castan)
2026-05-31 09:28:14 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 09:29:02 +0000CiaoSen(~Jura@2a02:3037:6e6:d82f:4e50:ddff:fe9b:8922) CiaoSen
2026-05-31 09:33:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-05-31 09:38:28 +0000tremon(~tremon@83-80-159-219.cable.dynamic.v4.ziggo.nl) tremon
2026-05-31 09:39:00 +0000AlexNoo_(~AlexNoo@178.34.160.200)
2026-05-31 09:40:52 +0000AlexZenon(~alzenon@85.174.182.98) (Ping timeout: 256 seconds)
2026-05-31 09:40:52 +0000Alex_delenda_est(~al_test@85.174.182.98) (Ping timeout: 256 seconds)
2026-05-31 09:42:37 +0000AlexNoo(~AlexNoo@85.174.182.98) (Ping timeout: 272 seconds)
2026-05-31 09:43:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 09:44:37 +0000AlexZenon(~alzenon@178.34.160.200)
2026-05-31 09:47:40 +0000AlexZenon_2(~alzenon@178.34.160.200)
2026-05-31 09:48:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-31 09:49:00 +0000AlexZenon(~alzenon@178.34.160.200) (Ping timeout: 246 seconds)
2026-05-31 09:49:38 +0000AlexZenon(~alzenon@178.34.160.200)
2026-05-31 09:51:48 +0000AlexZenon_2(~alzenon@178.34.160.200) (Ping timeout: 246 seconds)
2026-05-31 09:55:55 +0000__monty__(~toonn@user/toonn) (Quit: leaving)
2026-05-31 09:59:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 10:04:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-31 10:13:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 10:20:09 +0000 <tomsmeding> oh "length (1, 2, 3)" is the perfect retort to people complaining about "length (1, 2) == 2"
2026-05-31 10:20:15 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-31 10:21:50 +0000 <int-e> > length (1,2) -- ???
2026-05-31 10:21:51 +0000 <lambdabot> 1
2026-05-31 10:23:33 +0000 <tomsmeding> uh, yes, that's what I meant
2026-05-31 10:24:02 +0000 <tomsmeding> I guess I "meant" that that '==' denoted what the complainant wants, rather than what Haskell does
2026-05-31 10:31:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 10:33:45 +0000CiaoSen(~Jura@2a02:3037:6e6:d82f:4e50:ddff:fe9b:8922) (Ping timeout: 252 seconds)
2026-05-31 10:36:06 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-31 10:38:49 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 255 seconds)
2026-05-31 10:44:39 +0000synchromesh(~john@2406:5a00:247e:1500:9a0:33e6:ebb2:ef41) (Read error: Connection reset by peer)
2026-05-31 10:45:41 +0000synchromesh(~john@2406:5a00:247e:1500:9a0:33e6:ebb2:ef41) synchromesh
2026-05-31 10:46:37 +0000lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2026-05-31 10:46:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 10:49:10 +0000dtman34(~dtman34@c-73-242-68-179.hsd1.mn.comcast.net) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2026-05-31 10:50:02 +0000rabbull72(~rabbull@xdsl-31-164-93-219.adslplus.ch)
2026-05-31 10:51:21 +0000rabbull7(~rabbull@xdsl-31-164-93-219.adslplus.ch) (Read error: Connection reset by peer)
2026-05-31 10:51:21 +0000rabbull72rabbull7
2026-05-31 10:52:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 274 seconds)
2026-05-31 10:52:04 +0000dtman34(~dtman34@c-73-242-68-179.hsd1.mn.comcast.net) dtman34
2026-05-31 10:52:43 +0000 <yin> i wish haskell didn't have all this sugar around lists and tuples
2026-05-31 10:53:10 +0000 <tomsmeding> go program Agda if you don't want the list sugar
2026-05-31 10:56:06 +0000 <int-e> > let f x | x <- x + 1; x <- x * 2 = x in f 2 -- wonder what yin thinks about this
2026-05-31 10:56:08 +0000 <lambdabot> <hint>:1:21: error: parse error on input `;'
2026-05-31 10:56:33 +0000 <int-e> > let f x | x <- x + 1, x <- x * 2 = x in f 2
2026-05-31 10:56:34 +0000 <lambdabot> 6
2026-05-31 10:56:39 +0000vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2026-05-31 10:56:41 +0000 <int-e> oops.
2026-05-31 10:58:42 +0000 <yin> int-e: pattern guards is actually something i abuse
2026-05-31 10:59:59 +0000 <yin> to the point where i prefer to write `f b | True <- b = x; | False <- b = y`
2026-05-31 11:01:57 +0000 <yin> but anyways even agda has way too much sugar. i'm happy with scheme
2026-05-31 11:02:56 +0000 <mangoiv> pattern guards are actually not sugary at all.
2026-05-31 11:03:21 +0000 <mangoiv> they're conceptually the "fundamental" part of pattern matching.
2026-05-31 11:03:58 +0000 <yin> mangoiv: that's how i see them. altough if we're being correct, that would be case expressions
2026-05-31 11:04:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 11:04:19 +0000 <mangoiv> not really
2026-05-31 11:04:22 +0000 <mangoiv> I am correct
2026-05-31 11:04:41 +0000 <mangoiv> the Pmc works based on pattern guards
2026-05-31 11:05:07 +0000 <mangoiv> https://dl.acm.org/doi/10.1145/3408989
2026-05-31 11:05:13 +0000 <mangoiv> this is the original paper.
2026-05-31 11:05:16 +0000 <mangoiv> it's a good read
2026-05-31 11:05:47 +0000 <mangoiv> there's conceptually orthogonal approaches
2026-05-31 11:05:59 +0000 <mangoiv> like https://arxiv.org/abs/2504.18920
2026-05-31 11:07:27 +0000 <int-e> so you're not correct, you're just not wrong :-P
2026-05-31 11:08:09 +0000 <mangoiv> the conceptually orthogonal approaches are not what GHC is doing.
2026-05-31 11:08:12 +0000 <mangoiv> GHC is doing pattern guards.
2026-05-31 11:08:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
2026-05-31 11:08:35 +0000 <int-e> but STG is doing cases
2026-05-31 11:08:46 +0000 <mangoiv> we're not writing STG are we?
2026-05-31 11:09:01 +0000 <int-e> GHC is using STG too
2026-05-31 11:09:12 +0000 <int-e> so you have a merry mix of both worlds
2026-05-31 11:09:19 +0000 <int-e> everyone should be happy
2026-05-31 11:10:05 +0000 <int-e> There's also the Haskell report story, which is to desugar to cases
2026-05-31 11:10:15 +0000 <mangoiv> we were talking about what is "sugar"
2026-05-31 11:10:24 +0000 <yin> this was what i meant. core does cases and PatternGuards were added as a language extension
2026-05-31 11:10:41 +0000 <yin> but i learned something
2026-05-31 11:10:49 +0000 <yin> ty mangoiv
2026-05-31 11:11:31 +0000 <mangoiv> int-e: if you consider the surface language a sugar over assembly then the discussion is kinda moot
2026-05-31 11:12:24 +0000 <mangoiv> > this was what i meant. core does cases and PatternGuards were added as a language extension
2026-05-31 11:12:24 +0000 <mangoiv> yup, it's a bit confusing imo because the chronological order is different, in the beginning there was only case, but now the "fundamental" construct, at least in the surface language, are pattern guards.
2026-05-31 11:12:29 +0000 <int-e> mangoiv: I take issue with the idea that considering the guards to be sugar is *wrong*. It isn't; there's a choice.
2026-05-31 11:12:48 +0000 <lambdabot> Variable not in scope: this :: t9 -> t10 -> Expr -> t11 -> b0 -> cVariable n...
2026-05-31 11:12:48 +0000 <lambdabot> core
2026-05-31 11:12:48 +0000 <lambdabot> :: t0
2026-05-31 11:12:58 +0000 <int-e> And GHC's reality appears to be a mix of the two choices.
2026-05-31 11:13:38 +0000JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3) (Ping timeout: 250 seconds)
2026-05-31 11:13:38 +0000rselim(ce261f06ff@user/milesrout) (Ping timeout: 250 seconds)
2026-05-31 11:13:38 +0000bsima1(9d7e39c8ad@2a03:6000:1812:100::dd) (Ping timeout: 250 seconds)
2026-05-31 11:13:38 +0000evanrelf(3addc196af@2a03:6000:1812:100::f0) (Ping timeout: 250 seconds)
2026-05-31 11:14:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 11:14:30 +0000b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf) (Ping timeout: 250 seconds)
2026-05-31 11:14:30 +0000cephei8(b8652603d7@user/cephei8) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000shreyasminocha(51fdc93eda@user/shreyasminocha) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000filwisher(2e6936c793@2a03:6000:1812:100::170) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000caz(866183745f@2a03:6000:1812:100::15d4) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000sus(1b7af6299f@user/zeromomentum) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000uint64_t(ec7b9bb9f3@2a03:6000:1812:100::139b) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000arcadewise(52968ed80d@2a03:6000:1812:100::3df) (Ping timeout: 250 seconds)
2026-05-31 11:14:56 +0000whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4) (Ping timeout: 250 seconds)
2026-05-31 11:15:22 +0000samhh(7569f027cf@2a03:6000:1812:100::e4) (Ping timeout: 250 seconds)
2026-05-31 11:15:22 +0000ggb(a62ffbaf4f@2a03:6000:1812:100::3ac) (Ping timeout: 250 seconds)
2026-05-31 11:15:22 +0000fvr(ef3e56ca8b@2a03:6000:1812:100::3c4) (Ping timeout: 250 seconds)
2026-05-31 11:15:22 +0000bheesham(3aa22d8375@2a03:6000:1812:100::e40) (Ping timeout: 250 seconds)
2026-05-31 11:15:22 +0000jakzale(6291399afa@user/jakzale) (Ping timeout: 250 seconds)
2026-05-31 11:15:28 +0000ggb(a62ffbaf4f@2a03:6000:1812:100::3ac) ggb
2026-05-31 11:16:50 +0000bheesham(3aa22d8375@2a03:6000:1812:100::e40) bheesham
2026-05-31 11:18:00 +0000jakzale(6291399afa@user/jakzale) jakzale
2026-05-31 11:18:02 +0000fvr(ef3e56ca8b@2a03:6000:1812:100::3c4) fvr
2026-05-31 11:18:02 +0000samhh(7569f027cf@2a03:6000:1812:100::e4) samhh
2026-05-31 11:19:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 259 seconds)
2026-05-31 11:23:36 +0000 <yin> i'm happy that it validates my often frowned upon style of avoiding anything but pattern guards
2026-05-31 11:25:32 +0000Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 250 seconds)
2026-05-31 11:25:43 +0000Icy-Thought(~user@user/icy-thought) icy-thought
2026-05-31 11:25:45 +0000Lord_of_Life_(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2026-05-31 11:25:55 +0000Icy-Thought(~user@user/icy-thought) (Remote host closed the connection)
2026-05-31 11:28:24 +0000bsima1(9d7e39c8ad@2a03:6000:1812:100::dd)
2026-05-31 11:28:25 +0000evanrelf(3addc196af@2a03:6000:1812:100::f0) evanrelf
2026-05-31 11:28:26 +0000rselim(ce261f06ff@user/milesrout) milesrout
2026-05-31 11:28:26 +0000JoelMcCracken(5ea8252fbb@2a03:6000:1812:100::10e3) JoelMcCracken
2026-05-31 11:28:37 +0000Lord_of_Life_Lord_of_Life
2026-05-31 11:29:15 +0000cephei8(b8652603d7@user/cephei8) cephei8
2026-05-31 11:29:16 +0000b0o(0e4a0bf4c9@2a03:6000:1812:100::1bf) b0o
2026-05-31 11:29:41 +0000caz(866183745f@2a03:6000:1812:100::15d4) caz
2026-05-31 11:29:42 +0000filwisher(2e6936c793@2a03:6000:1812:100::170)
2026-05-31 11:29:43 +0000whereiseveryone(206ba86c98@2a03:6000:1812:100::2e4) jgart
2026-05-31 11:29:43 +0000sus(1b7af6299f@user/zeromomentum) zeromomentum
2026-05-31 11:29:43 +0000arcadewise(52968ed80d@2a03:6000:1812:100::3df) l3gacyb3ta
2026-05-31 11:29:44 +0000shreyasminocha(51fdc93eda@user/shreyasminocha) shreyasminocha
2026-05-31 11:29:45 +0000uint64_t(ec7b9bb9f3@2a03:6000:1812:100::139b) k_hachig
2026-05-31 11:30:12 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-31 11:35:21 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 252 seconds)
2026-05-31 11:45:59 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 11:50:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-31 11:51:49 +0000haritz(~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8)
2026-05-31 11:51:49 +0000haritz(~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host)
2026-05-31 11:51:49 +0000haritz(~hrtz@user/haritz) haritz
2026-05-31 11:52:20 +0000 <mangoiv> My personal opinion is that first match semantics while very common is quite error prone.
2026-05-31 11:52:28 +0000 <mangoiv> and it's good style to not have e.g. `otherwise` branches.
2026-05-31 11:53:08 +0000 <mangoiv> so I would actually prefer if we had something that was closer to the algebra of patterns approach
2026-05-31 11:53:12 +0000 <mangoiv> but it's very different to what GHC does.
2026-05-31 11:54:43 +0000vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
2026-05-31 11:57:08 +0000 <tomsmeding> mangoiv: the source language being sugar over assembly is not a useful definition, but it being sugar over the _specified_ language (i.e. the Haskell report) instead of the implementation is quite defensible
2026-05-31 12:00:16 +0000 <yin> call it spice
2026-05-31 12:01:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 12:02:06 +0000 <tomsmeding> if, if it makes you dislike the specification, you can call it salt
2026-05-31 12:02:10 +0000 <tomsmeding> *or,
2026-05-31 12:02:23 +0000Pozyomka(~pyon@user/pyon) pyon
2026-05-31 12:08:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
2026-05-31 12:11:15 +0000 <int-e> tomsmeding: of course if you call it salt you'll always find somebody who wants to add more to the wound
2026-05-31 12:13:33 +0000rainbyte(~rainbyte@181.47.219.31) (Read error: Connection reset by peer)
2026-05-31 12:14:53 +0000rainbyte(~rainbyte@181.47.219.31) rainbyte
2026-05-31 12:15:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-31 12:17:44 +0000 <yin> haskell salt: if..then..else
2026-05-31 12:18:24 +0000hsw_(~hsw@106.104.102.114) (Quit: Leaving)
2026-05-31 12:18:42 +0000 <int-e> yin: now you're just trolling
2026-05-31 12:18:46 +0000hsw(~hsw@106.104.102.114) hsw
2026-05-31 12:18:57 +0000 <yin> int-e: i am so not
2026-05-31 12:19:28 +0000 <yin> i'll use `bool` before if..then..else
2026-05-31 12:20:15 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-31 12:21:19 +0000 <jreicher> Same thing
2026-05-31 12:21:35 +0000 <mangoiv> tomsmeding: yeah that's fair. I guess my definition was closer to "what part of the frontend as it is implemented in GHC is the sugar" and there the answer is "everything but pattern guards", but seeing the language report as the base is fair, too!
2026-05-31 12:21:53 +0000 <tomsmeding> right :)
2026-05-31 12:22:51 +0000 <mangoiv> yin: if | True <- sheriff -> robber
2026-05-31 12:22:51 +0000 <mangoiv> | False <- sheriff -> hehe
2026-05-31 12:23:03 +0000 <yin> also guards are salt over `True <- x`
2026-05-31 12:23:07 +0000tjbc(~tjbc@user/fliife) (Ping timeout: 264 seconds)
2026-05-31 12:23:43 +0000tabaqui(~tabaqui@167.71.80.236) (Ping timeout: 264 seconds)
2026-05-31 12:23:52 +0000 <mangoiv> there's also a paper about somebody saying that really it should all be if then else.
2026-05-31 12:23:58 +0000 <mangoiv> that's fairly recent
2026-05-31 12:25:09 +0000 <mangoiv> can't find it right now though
2026-05-31 12:25:31 +0000 <mangoiv> don't remember the clever name the author came up with to make their paper be absolutely unsearchable in the modern day internet
2026-05-31 12:30:17 +0000 <yin> nand (a,b) = if x then if y then False else True else True