2025-01-12 00:00:21 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 00:04:34 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
2025-01-12 00:11:02 +0100 | troydm | (~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
2025-01-12 00:13:54 +0100 | mhatta | (~mhatta@www21123ui.sakura.ne.jp) (Quit: ZNC 1.9.1+deb2+b1 - https://znc.in) |
2025-01-12 00:15:42 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 00:16:41 +0100 | mhatta | (~mhatta@www21123ui.sakura.ne.jp) |
2025-01-12 00:17:06 +0100 | troydm | (~troydm@user/troydm) troydm |
2025-01-12 00:20:09 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
2025-01-12 00:28:33 +0100 | dtman34 | (~dtman34@c-174-53-203-90.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
2025-01-12 00:29:52 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2025-01-12 00:31:05 +0100 | hiredman | (~hiredman@frontier1.downey.family) (Quit: Lost terminal) |
2025-01-12 00:31:06 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 00:35:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2025-01-12 00:37:59 +0100 | machinedgod | (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds) |
2025-01-12 00:46:28 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 00:49:44 +0100 | hiredman | (~hiredman@frontier1.downey.family) hiredman |
2025-01-12 00:51:03 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2025-01-12 00:54:36 +0100 | dtman34 | (~dtman34@c-174-53-203-90.hsd1.mn.comcast.net) dtman34 |
2025-01-12 00:56:30 +0100 | tomku | (~tomku@user/tomku) tomku |
2025-01-12 00:56:33 +0100 | mreh | (~matthew@host86-146-25-121.range86-146.btcentralplus.com) (Ping timeout: 246 seconds) |
2025-01-12 00:57:44 +0100 | Garbanzo | (~Garbanzo@2602:304:6eac:dc10::46) |
2025-01-12 01:01:32 +0100 | dtman34 | (~dtman34@c-174-53-203-90.hsd1.mn.comcast.net) (Ping timeout: 265 seconds) |
2025-01-12 01:01:52 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 01:03:23 +0100 | dtman34 | (~dtman34@2601:447:d080:1a3c:198e:8888:ba04:6650) dtman34 |
2025-01-12 01:07:00 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
2025-01-12 01:08:48 +0100 | dtman34 | (~dtman34@2601:447:d080:1a3c:198e:8888:ba04:6650) (Ping timeout: 246 seconds) |
2025-01-12 01:11:12 +0100 | notzmv | (~umar@user/notzmv) (Ping timeout: 265 seconds) |
2025-01-12 01:12:18 +0100 | notzmv | (~umar@user/notzmv) notzmv |
2025-01-12 01:17:14 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 01:21:45 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
2025-01-12 01:22:28 +0100 | <monochrom> | Clearly, design patterns and anti-patterns depend on the language. |
2025-01-12 01:23:14 +0100 | <monochrom> | I had a student who tried to write Haskell in Python. I gave them a very low mark. If you use Python, you play to the strength of Python. If you use Haskell, you play to the strength of Haskell. |
2025-01-12 01:24:55 +0100 | <monochrom> | In that student's case, the assignment was to first use algebraic data types in Haskell to define a type for boolean expressions and functions for evaluations. Then the next question is "how would you code this up in Python?" |
2025-01-12 01:26:02 +0100 | <monochrom> | Clearly, in Python you would not make an algebraic type, you would make a Not class, And class, Or class; and the evaluation function would be a common method. |
2025-01-12 01:26:07 +0100 | dtman34 | (~dtman34@2601:447:d080:1a3c:198e:8888:ba04:6650) dtman34 |
2025-01-12 01:26:23 +0100 | <c_wraith> | but then you've turned the expression problem sideways! |
2025-01-12 01:26:48 +0100 | <c_wraith> | the python should be using the visitor pattern. :P |
2025-01-12 01:27:01 +0100 | <monochrom> | But the student was too excited by Haskell, so they went overboard and translate Haskell pattern matching to Python. "if instanceof(e, Or) ... elif instanceof(e, And) .. elif ..." |
2025-01-12 01:27:23 +0100 | <c_wraith> | so... they should have used the visitor pattern. |
2025-01-12 01:27:55 +0100 | <monochrom> | I would be very impressed if they used the visitor pattern. |
2025-01-12 01:28:23 +0100 | <c_wraith> | Huh. I guess the visitor pattern is sort of a catamorphism that uses algebras encoded as an object. |
2025-01-12 01:28:35 +0100 | <monochrom> | For mere mortals, the composite pattern would be good enough and pretty easy to understand actually. |
2025-01-12 01:29:17 +0100 | <monochrom> | But the whole point of Python and Java is if you write "instanceof" you're commiting a crime. |
2025-01-12 01:30:42 +0100 | <c_wraith> | crimes against parametricity |
2025-01-12 01:30:52 +0100 | <monochrom> | haha |
2025-01-12 01:31:45 +0100 | <c_wraith> | Lots of python code commits crimes against parametricity |
2025-01-12 01:32:02 +0100 | <c_wraith> | It tries to be "friendly" instead of "type safe" |
2025-01-12 01:32:47 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 01:33:09 +0100 | <c_wraith> | that's less common in java, but not absent. (Same root cause...) |
2025-01-12 01:37:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
2025-01-12 01:46:23 +0100 | <haskellbridge> | <Bowuigi> c_wraith re:catamorphism https://www.haskellforall.com/2021/01/the-visitor-pattern-is-essentially-same.html this is relevant I guess |
2025-01-12 01:48:09 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |
2025-01-12 01:52:40 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
2025-01-12 02:03:32 +0100 | merijn | (~merijn@128-137-045-062.dynamic.caiway.nl) merijn |