2025/03/04

Newest at the top

2025-03-04 04:28:59 +0100LainExperiments9(~LainExper@user/LainExperiments) (Quit: Client closed)
2025-03-04 04:22:21 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-04 04:19:19 +0100smalltalkman(uid545680@id-545680.hampstead.irccloud.com) smalltalkman
2025-03-04 04:18:16 +0100stiell(~stiell@gateway/tor-sasl/stiell) stiell
2025-03-04 04:16:04 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-04 04:11:46 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-04 04:11:36 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 264 seconds)
2025-03-04 04:11:22 +0100 <yin> what's the difference between having objects as observers and updating parameters in a recursive function?
2025-03-04 04:07:48 +0100 <yin> immutable state is very much functional
2025-03-04 04:05:37 +0100 <yin> i don't think FP and statefullness are mutually exclusive
2025-03-04 03:56:23 +0100tavare(~tavare@user/tavare) tavare
2025-03-04 03:50:05 +0100 <haskellbridge> <Bowuigi> Without such patterns, rather
2025-03-04 03:49:49 +0100 <haskellbridge> <Bowuigi> I see, it's not very useful with that I guess
2025-03-04 03:44:47 +0100 <monochrom> I haven't thought about crucial. I was thinking about pushing the limit.
2025-03-04 03:42:23 +0100bilegeek(~bilegeek@2600:1008:b05f:254e:e3e7:4564:3017:d45) bilegeek
2025-03-04 03:41:31 +0100 <haskellbridge> <Bowuigi> I see. Is the observer pattern crucial to OOP itself though? It's odd to see patterns included in definitions of paradigms
2025-03-04 03:35:32 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-04 03:34:16 +0100fmira(~user@user/fmira) fmira
2025-03-04 03:33:54 +0100fmira(~user@user/fmira) (Remote host closed the connection)
2025-03-04 03:32:49 +0100notdabs(~Owner@2600:6c40:4300:950:390a:bb72:8527:cff0) (Read error: Connection reset by peer)
2025-03-04 03:29:58 +0100prasad(~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net)
2025-03-04 03:29:44 +0100prasad(~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net) (Quit: prasad)
2025-03-04 03:29:15 +0100bilegeek(~bilegeek@2600:1008:b05f:254e:e3e7:4564:3017:d45) (Quit: Leaving)
2025-03-04 03:29:02 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-04 03:26:22 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2025-03-04 03:25:01 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-04 03:21:31 +0100jmcantrell(~weechat@user/jmcantrell) jmcantrell
2025-03-04 02:57:30 +0100 <monochrom> So I think one answer is my first answer "OOP is stateful, FOOP is a self-contradiction", and another is my second answer "s/object/agent/ , now it's just FRP".
2025-03-04 02:55:51 +0100 <monochrom> Another way to say it: How do I do the Observer pattern in FP? Unless you have something that replaces and outsmarts Observer altogether, say, FRP? :)
2025-03-04 02:53:10 +0100 <monochrom> I have say 5 objects that refer to a linked list object. Now I insert an element into the linked list, and I want those 5 objects to see it. How do I do that in FP?
2025-03-04 02:51:32 +0100 <monochrom> I believe that OOP implies mutable state.
2025-03-04 02:51:31 +0100 <geekosaur> early OCaml, O'Haskell, the comonadic "object" pattern…
2025-03-04 02:51:02 +0100 <geekosaur> there've been a number of examples, but if they'd been good they wouldn't have withered away
2025-03-04 02:50:57 +0100mange(~user@user/mange) mange
2025-03-04 02:49:49 +0100DigitteknohippieDigit
2025-03-04 02:47:49 +0100 <haskellbridge> <Bowuigi> OOP is usually too entangled with imperative stuff. Any good examples of functional OOP?
2025-03-04 02:41:40 +0100LainExperiments(~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
2025-03-04 02:41:30 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 276 seconds)
2025-03-04 02:41:02 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-03-04 02:39:42 +0100 <lambdabot> Consider it noted.
2025-03-04 02:39:42 +0100 <Leary> @tell hseg Since you're using vim, try *.
2025-03-04 02:39:14 +0100LainExperiments9(~LainExper@user/LainExperiments) LainExperiments
2025-03-04 02:36:57 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-04 02:34:25 +0100bilegeek(~bilegeek@2600:1008:b05f:254e:e3e7:4564:3017:d45) bilegeek
2025-03-04 02:30:09 +0100 <monochrom> I believe too at first that maybe multiple dispatch is seldom needed. Then a moment later I recall Sapir-Whorf. Is it because we really seldom need it, or is it because we worked around too many times so we forgot that we often needed it? Empirically, Julia supports it and has sufficient adoption to demonstrate that it is very important for quite a number of people.
2025-03-04 02:24:56 +0100 <constxd> I think it comes up seldom enough that most programmers are content to find ways around it, but I can see why it would seem like a limitation to purists. It's not surprising that CL has an answer lol
2025-03-04 02:22:59 +0100 <constxd> Just adding the ability for bare functions (i.e. not methods) to be overloaded is a nice extra touch on its own, but I guess one thing you're missing from OOP is the ability for an object to later override that somehow. Like you have `fn combine(x: A, y: B) { ... }` and then later `class C < A` decides "I might be a subtype of A, but when you combine *me* with a B, you do it like this:"
2025-03-04 02:19:27 +0100 <constxd> You could eliminate the polymorphism entirely and have static dispatch only and I think you're still like 75% of the way to what people want from OOP.
2025-03-04 02:17:00 +0100 <constxd> I think what people really like is quite literally just records, the x.foo() method call syntax and the fact that every class gets its own namespace for methods
2025-03-04 02:15:45 +0100 <constxd> Yeah