Home liberachat/#haskell: Logs Calendar

Logs on 2024-02-16 (liberachat/#haskell)

00:00:29 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
00:03:49 sudden joins (~cat@user/sudden)
00:10:36 × Tuplanolla quits (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi) (Quit: Leaving.)
00:11:59 × bontaq quits (~user@ool-45779c03.dyn.optonline.net) (Ping timeout: 264 seconds)
00:26:06 × yoo quits (~yo0O0o@user/mobivme) (Ping timeout: 255 seconds)
00:49:05 × xff0x quits (~xff0x@ai082039.d.east.v6connect.net) (Ping timeout: 252 seconds)
00:56:33 yoo joins (~yo0O0o@104.28.226.106)
00:58:11 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 264 seconds)
00:59:24 × ski quits (~ski@ext-1-033.eduroam.chalmers.se) (Ping timeout: 255 seconds)
01:00:10 × yoo quits (~yo0O0o@104.28.226.106) (Changing host)
01:00:10 yoo joins (~yo0O0o@user/mobivme)
01:01:09 ski joins (~ski@ext-1-033.eduroam.chalmers.se)
01:04:54 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
01:07:12 Pozyomka joins (~pyon@user/pyon)
01:09:21 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
01:12:44 × yoo quits (~yo0O0o@user/mobivme) (Ping timeout: 252 seconds)
01:15:46 × fryguybob quits (~fryguybob@024-094-050-022.inf.spectrum.com) (Read error: Connection reset by peer)
01:16:37 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
01:19:35 × mei quits (~mei@user/mei) (Remote host closed the connection)
01:21:58 mei joins (~mei@user/mei)
01:32:03 × mud quits (~mud@user/kadoban) (Quit: quit)
01:34:57 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
01:47:01 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
01:47:10 × jargon quits (~jargon@13.sub-174-205-175.myvzw.com) (Read error: Connection reset by peer)
01:48:54 mmhat joins (~mmh@p200300f1c70685c4ee086bfffe095315.dip0.t-ipconnect.de)
01:48:55 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
01:48:58 × mmhat quits (~mmh@p200300f1c70685c4ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit)
01:49:35 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 252 seconds)
01:52:51 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
01:58:23 igemnace joins (~ian@user/igemnace)
02:02:51 existence_ joins (~existence@176.254.244.83)
02:03:31 × petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in)
02:04:20 petrichor joins (~znc-user@user/petrichor)
02:04:51 × johnw quits (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in)
02:05:59 × _3xistence quits (~existence@176.254.244.83) (Ping timeout: 268 seconds)
02:06:36 johnw joins (~johnw@69.62.242.138)
02:12:45 × otto_s quits (~user@p5b0449b5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
02:14:14 breakpoint joins (~pupkey@user/pupkey)
02:14:35 otto_s joins (~user@p5de2f7db.dip0.t-ipconnect.de)
02:15:58 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Quit: Client closed)
02:19:18 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
02:24:49 × son0p quits (~ff@191.104.6.115) (Ping timeout: 260 seconds)
02:31:52 Guest|94 joins (~Guest|94@114.5.16.104)
02:34:13 × dtman34 quits (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in)
02:34:57 dtman34 joins (~dtman34@2601:447:d000:93c9:cf8:f10e:31e1:643)
02:39:49 × Guest|94 quits (~Guest|94@114.5.16.104) (Quit: Connection closed)
02:43:14 thegeekinside joins (~thegeekin@189.217.83.221)
02:54:32 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
02:55:01 × livoreno quits (~zmv@user/notzmv) (Ping timeout: 256 seconds)
02:55:07 thegeekinside joins (~thegeekin@189.217.83.221)
02:56:34 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
02:58:17 thegeekinside joins (~thegeekin@189.217.83.221)
02:59:13 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 264 seconds)
03:00:40 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
03:00:52 thegeekinside joins (~thegeekin@189.217.83.221)
03:01:29 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
03:01:42 thegeekinside joins (~thegeekin@189.217.83.221)
03:02:14 × petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in)
03:02:38 petrichor joins (~znc-user@user/petrichor)
03:03:13 × TonyStone quits (~TonyStone@074-076-057-186.res.spectrum.com) (Quit: Leaving)
03:17:58 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
03:18:41 rembo10 joins (~rembo10@main.remulis.com)
03:19:13 jargon joins (~jargon@13.sub-174-205-175.myvzw.com)
03:27:34 × td_ quits (~td@i53870914.versanet.de) (Ping timeout: 264 seconds)
03:28:57 td_ joins (~td@i5387091D.versanet.de)
03:30:56 pyooque joins (~puke@user/puke)
03:30:56 puke is now known as Guest5559
03:30:56 × Guest5559 quits (~puke@user/puke) (Killed (mercury.libera.chat (Nickname regained by services)))
03:30:56 pyooque is now known as puke
03:45:05 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 252 seconds)
03:50:25 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds)
03:54:58 × jargon quits (~jargon@13.sub-174-205-175.myvzw.com) (Remote host closed the connection)
03:55:16 jargon joins (~jargon@13.sub-174-205-175.myvzw.com)
03:56:03 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
04:00:48 × jargon quits (~jargon@13.sub-174-205-175.myvzw.com) (Remote host closed the connection)
04:01:11 shapr` joins (~user@c-24-218-186-89.hsd1.ma.comcast.net)
04:01:21 thegeekinside joins (~thegeekin@189.217.83.221)
04:01:23 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
04:01:54 jargon joins (~jargon@13.sub-174-205-175.myvzw.com)
04:03:00 × shapr quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 255 seconds)
04:04:09 × tv quits (~tv@user/tv) (Ping timeout: 256 seconds)
04:09:18 thegeekinside joins (~thegeekin@189.217.83.221)
04:09:21 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
04:17:35 tv joins (~tv@user/tv)
04:24:45 × Me-me quits (~me-me@user/me-me) (Quit: Disconnecting on purpose.)
04:25:44 Me-me joins (~me-me@2602:ff16:3:0:1:dc:beef:d00d)
04:28:23 × shapr` quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
04:31:48 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Quit: Client closed)
04:34:23 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
04:43:11 aforemny joins (~aforemny@i59F516E9.versanet.de)
04:44:01 × aforemny_ quits (~aforemny@2001:9e8:6cf1:d400:fa96:61a3:2d1c:1b12) (Ping timeout: 246 seconds)
05:04:34 × phma quits (~phma@host-67-44-208-97.hnremote.net) (Read error: Connection reset by peer)
05:05:31 phma joins (~phma@2001:5b0:211f:7668:c06b:4bbf:a33c:c0f7)
05:07:03 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
05:08:57 michalz joins (~michalz@185.246.207.193)
05:12:17 rosco joins (~rosco@175.136.156.77)
05:28:58 Square joins (~Square@user/square)
05:30:35 × Square3 quits (~Square4@user/square) (Ping timeout: 264 seconds)
05:37:25 × sefidel quits (~sefidel@user/sefidel) (Read error: Connection reset by peer)
05:37:40 sefidel joins (~sefidel@user/sefidel)
05:39:58 × tcard_ quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
05:40:24 × minigrim0 quits (~minigrim0@2a01:4f9:6b:3416:68ba:8dff:fe58:a5ea) (Ping timeout: 256 seconds)
05:41:14 minigrim0 joins (~minigrim0@2a01:4f9:6b:3416:68ba:8dff:fe58:a5ea)
05:42:28 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
05:42:34 × jargon quits (~jargon@13.sub-174-205-175.myvzw.com) (Remote host closed the connection)
05:42:52 jargon joins (~jargon@13.sub-174-205-175.myvzw.com)
06:02:06 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
06:03:13 × mei quits (~mei@user/mei) (Ping timeout: 260 seconds)
06:05:10 sroso joins (~sroso@user/SrOso)
06:06:21 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
06:12:39 × Square quits (~Square@user/square) (Quit: Leaving)
06:12:53 Square joins (~Square@user/square)
06:30:15 <mjrosenb> Is it just me, or did the either package remove its transformer?
06:42:47 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
06:50:42 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
06:55:01 oo_miguel joins (~Thunderbi@78-11-181-16.static.ip.netia.com.pl)
06:56:23 × breakpoint quits (~pupkey@user/pupkey) (Quit: Lost terminal)
06:59:22 acidjnk joins (~acidjnk@p200300d6e737e768eca59ab302ca347d.dip0.t-ipconnect.de)
07:06:05 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:10:35 × Square quits (~Square@user/square) (Ping timeout: 256 seconds)
07:12:42 nunggu joins (~q@user/nunggu)
07:17:17 wootehfoot joins (~wootehfoo@user/wootehfoot)
07:18:05 × nunggu quits (~q@user/nunggu) (Remote host closed the connection)
07:19:40 nunggu joins (~q@user/nunggu)
07:20:55 × jargon quits (~jargon@13.sub-174-205-175.myvzw.com) (Remote host closed the connection)
07:30:25 danse-nr3 joins (~danse@151.44.199.109)
07:30:48 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:33:50 chiselfu1e is now known as chiselfuse
07:38:10 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:42:40 × califax quits (~califax@user/califx) (Remote host closed the connection)
07:43:55 califax joins (~califax@user/califx)
07:45:18 jtza8 joins (~user@user/jtza8)
07:49:55 × rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal)
07:50:57 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
07:52:16 euleritian joins (~euleritia@dynamic-176-006-185-052.176.6.pool.telefonica.de)
07:53:21 × euleritian quits (~euleritia@dynamic-176-006-185-052.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
07:53:38 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
07:55:37 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:56:58 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
07:57:33 × califax quits (~califax@user/califx) (Remote host closed the connection)
07:57:55 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
07:58:47 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
08:01:01 califax joins (~califax@user/califx)
08:03:48 CiaoSen joins (~Jura@2a05:5800:2c6:8e00:e6b9:7aff:fe80:3d03)
08:05:47 × jtza8 quits (~user@user/jtza8) (Ping timeout: 260 seconds)
08:05:58 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds)
08:06:24 × trev quits (~trev@user/trev) (Read error: Connection reset by peer)
08:08:41 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
08:08:47 euleritian joins (~euleritia@dynamic-176-006-185-052.176.6.pool.telefonica.de)
08:09:07 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:11:33 × c_wraith quits (~c_wraith@adjoint.us) (Ping timeout: 260 seconds)
08:11:44 c_wraith joins (~c_wraith@adjoint.us)
08:15:39 trev joins (~trev@user/trev)
08:32:25 fendor joins (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c)
08:33:50 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds)
08:36:43 × trev quits (~trev@user/trev) (Read error: Connection reset by peer)
08:36:54 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:37:31 trev joins (~trev@user/trev)
08:43:25 azimut joins (~azimut@gateway/tor-sasl/azimut)
08:45:07 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
08:46:18 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
08:46:23 chele joins (~chele@user/chele)
08:53:16 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 255 seconds)
08:58:43 × ft quits (~ft@p508db2e6.dip0.t-ipconnect.de) (Quit: leaving)
09:02:49 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:03:31 __monty__ joins (~toonn@user/toonn)
09:14:13 × tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
09:16:02 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
09:16:13 × p3n quits (~p3n@217.198.124.246) (Quit: ZNC 1.8.2 - https://znc.in)
09:16:35 azimut joins (~azimut@gateway/tor-sasl/azimut)
09:18:12 p3n joins (~p3n@217.198.124.246)
09:18:19 <tomsmeding> mjrosenb: https://hackage.haskell.org/package/either-5/changelog
09:18:37 <tomsmeding> Control.Monad.Trans.Except has been in transformers for ages
09:25:14 × califax quits (~califax@user/califx) (Remote host closed the connection)
09:25:51 gehmehgeh joins (~user@user/gehmehgeh)
09:26:57 califax joins (~califax@user/califx)
09:27:41 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:31:49 jmdaemon joins (~jmdaemon@user/jmdaemon)
09:32:49 × benjaminl quits (~benjaminl@user/benjaminl) (Ping timeout: 264 seconds)
09:35:57 × califax quits (~califax@user/califx) (Remote host closed the connection)
09:44:11 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
09:46:42 yoo joins (~yo0O0o@104.28.194.106)
09:46:42 × yoo quits (~yo0O0o@104.28.194.106) (Changing host)
09:46:42 yoo joins (~yo0O0o@user/mobivme)
09:48:25 califax joins (~califax@user/califx)
09:56:26 × nunggu quits (~q@user/nunggu) (Quit: nunggu)
09:57:07 yooo joins (~yo0O0o@104.28.226.104)
09:57:35 × yoo quits (~yo0O0o@user/mobivme) (Ping timeout: 264 seconds)
09:59:06 × califax quits (~califax@user/califx) (Remote host closed the connection)
09:59:28 califax joins (~califax@user/califx)
10:03:05 × euleritian quits (~euleritia@dynamic-176-006-185-052.176.6.pool.telefonica.de) (Ping timeout: 260 seconds)
10:03:32 euleritian joins (~euleritia@77.22.252.56)
10:11:55 rosco joins (~rosco@175.136.156.77)
10:13:35 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 272 seconds)
10:15:00 × waldo quits (~waldo@user/waldo) (Ping timeout: 268 seconds)
10:17:54 Maxdamantus joins (~Maxdamant@user/maxdamantus)
10:20:07 waldo joins (~waldo@user/waldo)
10:22:53 × danse-nr3 quits (~danse@151.44.199.109) (Read error: Connection reset by peer)
10:23:55 danse-nr3 joins (~danse@151.19.232.78)
10:28:01 × waldo quits (~waldo@user/waldo) (Ping timeout: 264 seconds)
10:29:11 × destituion quits (~destituio@2a02:2121:626:f551:8e35:41cf:e501:3ba1) (Ping timeout: 268 seconds)
10:29:12 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:29:26 destituion joins (~destituio@85.221.111.174)
10:33:40 × yooo quits (~yo0O0o@104.28.226.104) (Ping timeout: 246 seconds)
10:35:06 waldo joins (~waldo@user/waldo)
10:38:59 × danse-nr3 quits (~danse@151.19.232.78) (Ping timeout: 264 seconds)
10:39:30 evocatus joins (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66)
10:39:35 <evocatus> hi!
10:40:09 danse-nr3 joins (~danse@151.19.232.78)
10:40:13 <evocatus> I'm giving a talk at my company Go meetup about main ideas of functional programming
10:40:47 <evocatus> I'm a fan of LISPs (Clojure mainly) but I would like to know Haskell folks perspective on what would those main ideas be
10:41:41 <evocatus> thinking about how to distil it into something concise I came up with this:
10:42:06 <evocatus> in order to maintain readability and being easy to change your code must stay simple
10:42:26 <evocatus> it means as little coupling things as possible
10:42:52 <evocatus> which means using truly composable things to construct your programs from
10:43:15 <evocatus> only true values and pure functions are composable, objects are not
10:43:25 <evocatus> that's it
10:44:07 <evocatus> how would you answer this question?
10:44:19 <evocatus> could you recommend some talks/articles that answer it well?
10:45:18 yoo joins (~yo0O0o@104.28.226.106)
10:45:35 × igemnace quits (~ian@user/igemnace) (Ping timeout: 264 seconds)
10:49:53 benjaminl joins (~benjaminl@user/benjaminl)
10:50:11 rscastilho2024 joins (rscastilho@189.61.140.215)
10:50:16 × CiaoSen quits (~Jura@2a05:5800:2c6:8e00:e6b9:7aff:fe80:3d03) (Ping timeout: 255 seconds)
10:50:31 × rscastilho2024 quits (rscastilho@189.61.140.215) (Remote host closed the connection)
10:51:52 igemnace joins (~ian@user/igemnace)
10:53:58 connrs joins (~connrs@user/connrs)
10:58:08 × connrs quits (~connrs@user/connrs) (Client Quit)
10:58:59 connrs joins (~connrs@user/connrs)
11:04:00 <ski> evocatus : being able to reason about (including refactoring) code is important. that is quite a bit easier, with restricting side-effects (including, but not limited to, mutability of state (this point is hard to overstate)). DRY and separation of concerns, taken to its logical conclusion, leads to higher-order operations (and having lexicaly/statically scoped nested functions, and preferably lambdas),
11:04:07 <ski> which also encourages avoiding side-effects (because it may not be obvious when your callback(s) will be called, and how many times). parallelism and concurrency can also be easier with immutable data. immutable data can also be shared, rather than having expensive precautionary copying -- this is most useful for data consisting of many linked parts, rather than huge chunk
11:05:07 × yoo quits (~yo0O0o@104.28.226.106) (Ping timeout: 255 seconds)
11:05:20 <ski> another important thing, imo, is pattern-matching, replacing a maze of nested `if's with something more composable and declarative. (pattern-matching on sum types in FP is dual to message-dispatching on product types ("objects") in OO. both are important ways to structure code, there's a trade-off). generally, trying to build composable and modular APIs, often eDSLs, is important
11:07:06 <tomsmeding> sum types are such a super power
11:07:57 <tomsmeding> but clojure being untyped, the world looks slightly different there
11:08:24 × waldo quits (~waldo@user/waldo) (Quit: waldo)
11:08:43 <evocatus> it's dynamically typed, not untyped :)
11:08:48 <tomsmeding> good poin t
11:10:23 <danse-nr3> i am with ski, referential transparency would be the topic
11:10:35 <evocatus> we have dynamically and statically typed languages in both camps (Clojure+Haskell vs Python+Go). My question is more about what is the difference between the camps and what an average Go developer can learn from the functional world while still writing in Go
11:10:49 <danse-nr3> just wrote
11:11:10 <[Leary]> they can learn to hate go
11:11:16 <danse-nr3> XD
11:12:21 <ski> statically typed FP languages tend to have advanced and expressive type systems, with sum types (and some form of product types), with parametric polymorphism (usually with type inference) (often with parametricity, which helps restrict what polymorphic operations can do, so helps with reasoning about polymorphic library operations, and refactoring calls to them). some have type classes, or expressive module
11:12:27 <ski> systems (including parameterizing modules over other modules, so called "functors"), or higher-order types, or existentials, or higher-rank operations, or indexed sum types ("Generalized Algebraic Data Types"), or things like lightweight (structural typing, no need to predeclare) variant ior record types, e.g. built on row types, &c.
11:13:10 <danse-nr3> and they enforce referential transparency, which is portable everywhere
11:13:26 rscastilho2024 joins (rscastilho@189.61.140.215)
11:13:39 × rscastilho2024 quits (rscastilho@189.61.140.215) (Remote host closed the connection)
11:13:43 <evocatus> ski, would you consider Rust or Kotlin functional languages? They have rather advanced type systems (compared to the average level of course)
11:14:57 <ski> this (in combination with exhaustiveness checking on pattern-matching) can encourage "typeful programming", where you can write ior refactor iow modify code more freely, because you know the type system will catch many of your silly mistakes you make along the way, and often pointing you to other places in the code that needs to be updated, e.g. after updating a type definition, you may be pointed to all
11:15:03 <ski> pattern-matching that doesn't cover the new case, or hasn't been adapted to handle a modified case appropriately
11:15:17 <probie> [Leary]: Your average Go developer didn't need to learn anything from the functional world to hate Go
11:15:24 <ski> non-strictness (implemented as laziness, for efficiency) can help with modularity and separation of concerns, separating the producer of data from filtering, transforming, and consuming it. it can be harder to reason about space (and time) complexity, though
11:15:25 <evocatus> both Kotlin/Rust supports immutable values, in Rust it's even the default. And I see this as a step forward but is it enough? What is lacking there if any?
11:15:48 × euleritian quits (~euleritia@77.22.252.56) (Read error: Connection reset by peer)
11:15:57 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
11:16:21 <danse-nr3> higher order functions for instance
11:16:54 <danse-nr3> .oO( wait, they might have those... )
11:17:36 <evocatus> probie, you need to hate Go in the right way to not step into the same poop again. I remember how people were enthusiastic about Go in the beginning and if you watch Rob Pike's talk from 2009 where he bashes C++ and Java for their complexity... Go was such a failed promise, that's why people who hate it hate it more than other languages. They don't just dislike it they feel betrayed
11:17:37 <danse-nr3> i guess i was thinking about higher-order function from a typed haskeller's perspective ... better to read what ski writes :P
11:19:24 <evocatus> I remember what Bartosz Milewski said answering one of the questions (maybe it was even about Go) - you either have dynamic typing or generics and if you don't now you will have to do it in the future. Lo and behold, after 10 years Go introduced generics (they are half-baked but still)
11:20:01 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:20:05 <ski> even having a relatively comfortable way to do deferred, on-demand, possibly virtual, data structure, in a strict programming language, rather than taking non-strictness as the default, can go quite a way
11:20:50 <danse-nr3> yeah non-strictness is definitely something to study from haskell ... but advocating for it ain't easy
11:20:59 <ski> evocatus : in summary, some of the important concepts in FP tend to be : discourage side-effects, encourage immutability. encourage higher-order operations (including local functions with static/lexical scoping. first-class function values). sum types (as well as product types), with pattern-matching. statically typed FP tends to be more advanced and expressive (and comfortable, with type inference), than
11:21:05 <ski> statically typed imperative languages (although they're learning and adopting some things). non-strictness, or more generally, deferred/incremental/on-demand data structures (like streams, or search trees, &c.) can be helpful
11:21:37 califax joins (~califax@user/califx)
11:21:52 <evocatus> ski, could you elaborate on non-strictness? I'm not sure I completely understand what you mean here
11:24:25 <ski> evocatus : there tends to be an increased focus on "reasonability" ("predictive power"), which is how easy it is to read & reason about, refactor & modify, existing code, as opposed to "expressivity" ("cavalier power"), which is about how easy it is to express new features, in a *local* way (not requiring trickling/percolating changes into many parts of the code base). btw, side-effects tend to be used for
11:24:31 <ski> the increased expressivity (while they decrease reasonability)
11:24:32 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:25:29 <ski> evocatus : i wouldn't say Rust is functional, but it heavily borrows some themes from FP (e.g. pattern-matching and sum types)
11:25:47 <ski> (haven't really looked much at Kotlin .. nor Go that much, fwiw)
11:25:58 califax joins (~califax@user/califx)
11:26:21 <danse-nr3> i would qualify rust as multi-paradigm, as it is not opinionated /against/ functional and partially supports it
11:26:53 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 240 seconds)
11:27:01 <evocatus> Oh, I love this point - "side-effects tend to be used for the increased expressivity while they decrease reasonability"
11:27:09 willsewell joins (~willsewel@185.195.232.133)
11:28:00 <ski> evocatus : dynamically typed FP tends to often have great (procedural, not declarative) debugging facilities, and commonly support for hot code live-swapping (and save and restoration of process images). Lisps tend to often also have nice support for macros, and staged programming, meta-programming
11:28:17 <evocatus> danse-nr3, I can not articulate it right now but I have a feeling there is something wrong with "partially" supporting FP. It's like going low-carb the benefits appear after certain threshold and it's a quality not quantity change
11:28:22 <ski> evocatus : apart from the increased focus
11:30:11 <evocatus> if a language supports FP I can express my ideas well and stay simple but if I use other people's code I have to read it and study and learn what I'm dealing with. If a language ENFORCES FP on the other hand I can pick any library and know it passes immutable data without even looking
11:30:12 <ski> evocatus : the increased focus on reasonability (while usually also having nice expressivity stuff, like first-class functions), can be seen as a focus on *declarative* programming in general (in addition to the existing procedural interpretation, which is still valid and important, especially for efficiency)
11:32:03 × willsewell quits (~willsewel@185.195.232.133) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
11:32:12 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:32:32 califax joins (~califax@user/califx)
11:32:50 <ski> Scheme, SML/NJ, Mlton has first-class continuations (a very powerful kind of effect, bit also hard to reason about) as side-effects. Scheme also has hygienic macros, which is basically "lexical scoping for macros"
11:33:27 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
11:33:39 <evocatus> We lack expressability -> we write huge verbose and intertwined programss -> we lose reasonability -> let's add better types to C++
11:34:08 × rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal)
11:34:34 <evocatus> I value reasonability but I feel like modern mainstream obsession with types (Typescript,Rust,Go,...) is curing symptoms not the root cause. It's still down there.
11:34:40 <ski> Haskell can express various effects (including continuations), typically as monads or idioms (/ applicative functors). (or arrows ..) this can also be done, in other languages, but with less support from the language and from libraries
11:42:14 × sroso quits (~sroso@user/SrOso) (Quit: Leaving :))
11:44:11 tabaqui joins (~root@94.58.131.117)
11:45:53 <probie> evocatus: I have mixed feelings about Go. I hate the language, but on the other hand, the tooling "just works"
11:46:42 <ski> evocatus : Shriram Krishnamurthi (a Schemer, fwiw), has a nice talk about expressivity, "On the Expressive Power of Programming Languages" in 2019 at <https://www.youtube.com/watch?v=43XaZEn2aLc>, based on the (good) paper by Matthias Felleise of the same title in 1990 at <https://jgbm.github.io/eecs762f19/papers/felleisen.pdf>
11:47:46 <evocatus> probie, me too. It's my main language (unfortunately). And it works smooth for mundane plumbing problems. But the moment you need to do something on the harder side, interesting and valuable... you start to hate it.
11:48:13 <evocatus> ski, thanks, I will watch it
11:48:49 <ski> anyway, imho, people don't (explicitly) talk and think enough about reasonability
11:50:26 <ski> evocatus : the following paper talks about non-strictness for modularity (and other stuff)
11:50:29 <ski> @where whyfp
11:50:30 <lambdabot> "Why Functional Programming Matters" by John Hughes in 1984 at <http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html>
11:52:06 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:53:10 califax joins (~califax@user/califx)
11:53:31 <danse-nr3> oh nice i will add it to my list. Always needing reasons to justify non-strictness to people ...
11:53:33 alexherbo2 joins (~alexherbo@2a02-8440-3140-beaa-f9e3-2ee2-b871-8703.rev.sfr.net)
11:54:12 <ncf> ask them to justify strictness instead
11:55:01 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
11:57:35 <ski> you could also check out "Can Programming Be Liberated From the von Neumann Style?" (originally a Turing Award lecture) by John Backus in 1977 at <https://cs.wellesley.edu/~cs251/s19/notes/backus-turing-lecture.pdf>. perhaps also "The Next 700 Programming Languages" by Peter J. Landin in 1965-07 at <https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf>
11:57:57 <ski> er, sorry, that last link should be <https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf>
11:58:15 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:58:38 <danse-nr3> well strictness does not leak
11:59:05 <danse-nr3> "too hard for my brain" is quite a strong point nowadays
11:59:21 <danse-nr3> thanks for the other link by the way, sounds great
12:00:20 <danse-nr3> that is actually "too hard for how cheap i expect engineers to be", but nevermind
12:00:44 <ski> i was going to say that "The Next Mainstream Programming Languages : A Game Developers's Perspective" (slides) by Tim Sweeney (of Unreal Engine, Epic Games) in 2005 at <https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf>
12:01:22 <ski> can possibly also be interesting, as it talks quite a bit about some aspects of FP
12:01:59 <danse-nr3> title is not appealing though. At least to me, mainstream and quality have diverged long ago
12:02:04 <ski> evocatus : "could you elaborate on non-strictness? I'm not sure I completely understand what you mean here" -- about what is meant by non-strictness, or about how it can help with composability and modularity ?
12:03:59 <ski> oh, i perhaps also should've noted that STM (Software Transactional Memory) is greatly helped with absence of side-effects
12:05:36 <evocatus> ski, about what is meant by non-strictness
12:06:24 <haskellbridge> <i​rregularsphere> "too hard for my brain" - statements made up by the utterly deranged
12:06:26 <ski> .. i've heard people in here say that they prefer Haskell over (say) Python, because they're not smart enough to deal with the latter (all the pervasive side-effects, the often lax attitude to API design, consistency, error reporting, ..)
12:07:10 <danse-nr3> it's good irony, i should adopt that
12:08:19 <int-e> @quote variables
12:08:19 <lambdabot> astrolabe says: calling variables things like ll,kk,tt and dd is a bit cryptic
12:08:28 <int-e> @quote no.variables
12:08:29 <lambdabot> cjs says: I have to explain this shit to people. I mean, I start out right, "Hey, you know how you always have these bugs because what you thought was in the variable is not there?" And I get all of
12:08:29 <lambdabot> these nods of agreement. "Well, I've found a new language that solves that problem." Audience: "Ooooh! How?" Me: "There's no variables!" And then they all start moving away from me slowly....
12:08:36 <ski> evocatus : strictness means that in order to determine the answer/result of a function call, you need to determine the result of the actual parameters (the argument expressions). so, if a parameter has no answer (non-termination / infinite looping, or exception, say), then the function call also will have no answer. with non-strictness, you can have a call have an answer, even is an actual parameter in the
12:08:42 <ski> call doesn't
12:08:52 <haskellbridge> <i​rregularsphere> to be fair in favor of the c and rust folk i do think haskell makes it a bit hard to manage your memory
12:09:26 <danse-nr3> a think they do know what strictness is
12:09:28 <evocatus> ski, thanks, now I got it
12:09:36 <danse-nr3> ops maybe not
12:09:51 <danse-nr3> actually now they do XD
12:09:54 <haskellbridge> <i​rregularsphere> ...i wonder if a lambda calculus chip exists
12:10:07 <haskellbridge> <i​rregularsphere> (chip that does lambda calculus)
12:10:25 <danse-nr3> there is a person at #lambdacalculus that once in a while writes a lot about advancements in that area
12:10:52 <ski> evocatus : strictness and non-strictness are terms in denotational semantics, which talks about "what is the answer", not "how is the answer determined". when we get down to lower levels of implementation (operational/procedural semantics), we can say that call-by-value gives strictness, and call-by-name (passing the argument expression to the operation, letting it decide if, and when, to evaluate it) gives
12:10:58 <ski> non-strictness. call-by-need (aka laziness) is an optimization on call-by-name, to cache the computed result, so as to not recompute it
12:12:35 <danse-nr3> sometimes i get to wonder whether call-by-value could be modeled like pull-driven reactive programming
12:13:09 <ski> Haskell is a non-strict language, but doesn't specify how this to be achieved. it is allowed to e.g. speculatively evaluate other expressions in parallel, if there's available cores or threads, if the system thinks they might be needed later, as long as the behaviour (seen from within the language) (apart from efficiency concerns, per tradition) is indistinguishable from not doing that. typically,
12:13:15 <ski> non-strictness is implemented in terms of laziness / by-need, though
12:14:09 <danse-nr3> interesting, i can use call-by-name as a simpler synonym for non-strictness then
12:14:19 <ski> @quote refreshing.desert
12:14:19 <lambdabot> chromatic says: My productivity increased when Autrijus told me about Haskell's trace function. He called it a refreshing desert in the oasis of referential transparency.
12:14:36 <evocatus> I'm familiar with non-strictness in Clojure. It has lazy collections and transducers
12:14:48 <danse-nr3> meh tracing ... leads to bad code
12:15:28 mmhat joins (~mmh@p200300f1c70685c4ee086bfffe095315.dip0.t-ipconnect.de)
12:15:32 <ski> danse-nr3 : by-name is at the level of operational semantics (the "how", the steps of computation). non-strictness is at the level of denotational semantics (the "what", the end result/answer)
12:16:12 <danse-nr3> yeah but the two "levels" seem to meet on the same concept there
12:18:22 gaff joins (~gaff@49.207.213.246)
12:19:42 jtza8 joins (~user@165.255.63.11)
12:19:42 × jtza8 quits (~user@165.255.63.11) (Changing host)
12:19:42 jtza8 joins (~user@user/jtza8)
12:20:56 <ski> the former is the common way to achieve the latter, yea
12:21:11 × Lycurgus quits (~georg@user/Lycurgus) (Quit: leaving)
12:21:32 <ski> (although, iirc, Algol 68 (?) had by-name (as well as by-value, and by-reference) parameters, but no by-need)
12:21:42 <gaff> (map map) :: [a -> b] -> [[a] -> [b]]. Is there an example usage for this type?
12:22:24 <ski> `map . map' would be more common, i'd think
12:22:35 <ski> @type map . map
12:22:36 <lambdabot> (a -> b) -> [[a]] -> [[b]]
12:22:39 <jackdk> see also: `foldMap . foldMap`, `traverse . traverse`
12:22:58 × tabaqui quits (~root@94.58.131.117) (Ping timeout: 255 seconds)
12:23:03 <haskellbridge> <i​rregularsphere> ski: by the way, i once had ghci softlock for a while (calculating something) so i checked htop and apparently it maxes out on one core, though changing (probably linux's scheduler)
12:23:10 <haskellbridge> <i​rregularsphere> might check threads later
12:23:21 <gaff> ski: yes. map . map makes sense and poses no problems at all.
12:23:29 tabaqui joins (~root@94.58.131.117)
12:23:33 <danse-nr3> :t fmap fmap
12:23:34 <lambdabot> (Functor f1, Functor f2) => f1 (a -> b) -> f1 (f2 a -> f2 b)
12:23:43 <ski> @type foldl . foldl
12:23:44 <lambdabot> (Foldable t1, Foldable t2) => (b -> a -> b) -> b -> t1 (t2 a) -> b
12:23:46 <ski> @type flip . foldr . flip . foldr
12:23:47 <lambdabot> (Foldable t1, Foldable t2) => (a -> c -> c) -> t1 (t2 a) -> c -> c
12:24:41 <haskellbridge> <i​rregularsphere> danse-nr3: I haven't written any production (or, any project in) Haskell, but I guess `trace` is akin to printf debugging?
12:25:26 <haskellbridge> <i​rregularsphere> Not that it should be included in the final code :P
12:25:35 yoo joins (~yo0O0o@104.28.226.105)
12:26:03 <ski> (which is why OCaml `foldr' takes arguments in a different order)
12:26:26 <ski> yes, irregularsphere
12:26:37 <danse-nr3> tracing is quite a common practice in many languages. It works like `print` but does not need to be in IO. Even if you remove it, the code written by troubleshooting with traces stays troublesome
12:26:42 <gaff> I couldn't come up with a simple example of (map map) usage, though. map map [(+1), (*2), (^2)] :: Num b => [[b] -> [b]]
12:26:56 <ski> gaff : `[a -> b] -> a -> [b]' is probably more common that your `map map'
12:26:59 <int-e> > zipWith ($) (map map [(+1),(+2)]) [[1,2],[2,1]]
12:27:00 <lambdabot> [[2,3],[4,3]]
12:27:15 × petrichor quits (~znc-user@user/petrichor) (Quit: ZNC 1.8.2 - https://znc.in)
12:27:53 <int-e> :t \fs xs -> do f <- fs; map f xs
12:27:54 <lambdabot> [a -> b] -> [a] -> [b]
12:27:55 <haskellbridge> <i​rregularsphere> danse-nr3: huh, never knew that
12:28:04 <int-e> :t \fs xs -> do f <- map map fs; f xs
12:28:05 <lambdabot> [a -> b] -> [a] -> [b]
12:28:06 <haskellbridge> <i​rregularsphere> also yeah i knew it wasn't in io anyway, `unsafePerformIO :: IO a -> a`
12:28:14 <int-e> :t \fs xs -> do f <- map <$> fs; f xs
12:28:15 <lambdabot> [a -> b] -> [a] -> [b]
12:28:16 <gaff> int-e: thnaks. clever solution! that works indeed!
12:28:58 petrichor joins (~znc-user@user/petrichor)
12:29:06 <int-e> (map <$> fs in the list monad is something that might actually come up in refactoring. It won't be *common*. But it feels less artificial than that zipWith thing)
12:29:13 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
12:29:19 <haskellbridge> <i​rregularsphere> Isn't `[a -> b] -> [a] -> [b]` already `<*>`?
12:29:37 <haskellbridge> <i​rregularsphere> since `[]` is an `Applicative`
12:29:51 <gaff> int-e: I see.
12:30:58 <jtza8> If Haskell 98 arrays don't need to be defined for each index, is there a simple way to get something like a list of elements in a range of indexes?
12:31:21 <jtza8> (Just wondering how that works out practically.)
12:31:22 <haskellbridge> <i​rregularsphere> gaff: `fs <*> xs` :)
12:31:35 <ski> > range (-3,3)
12:31:37 <lambdabot> [-3,-2,-1,0,1,2,3]
12:31:44 <ski> > range ((0,0),(1,3))
12:31:45 <lambdabot> [(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3)]
12:31:58 <ski> @type inRange
12:31:59 <lambdabot> Ix a => (a, a) -> a -> Bool
12:32:05 <jtza8> Ah
12:32:07 <jtza8> Thanks
12:32:09 <haskellbridge> <i​rregularsphere> There's a class `Ix`.
12:33:07 <gaff> haskellbridge: sure.
12:33:23 <ski> @let tabulate :: Ix i => (i,i) -> (i -> e) -> Array i e; tabulate ix f = listArray ix [f i | i <- range ix]
12:33:24 <lambdabot> Defined.
12:33:56 <ski> > tabulate ((0,0),(1,3)) (uncurry (+))
12:33:58 <lambdabot> error:
12:33:58 <lambdabot> Ambiguous occurrence ‘tabulate’
12:33:58 <lambdabot> It could refer to
12:34:02 <ski> > L.tabulate ((0,0),(1,3)) (uncurry (+))
12:34:03 <lambdabot> array ((0,0),(1,3)) [((0,0),0),((0,1),1),((0,2),2),((0,3),3),((1,0),1),((1,1...
12:34:32 × gaff quits (~gaff@49.207.213.246) ()
12:35:22 gentauro joins (~gentauro@user/gentauro)
12:35:29 <ski> @let memoArr :: Ix i => (i,i) -> (i -> e) -> (i -> e); memoArr ix f = (L.tabulate ix f !)
12:35:30 <lambdabot> Defined.
12:36:07 <haskellbridge> <i​rregularsphere> You can enforce strictness without `let`?
12:36:28 <ski> > let (memoArr (0,12) -> fib12) = \case 0 -> 0; 1 -> 1; n -> fib12 (n-2) + fib12 (n-1) in fib12 12
12:36:30 <lambdabot> 144
12:36:39 <ski> @type seq
12:36:40 <lambdabot> a -> b -> b
12:36:43 <ski> @type ($!)
12:36:44 <lambdabot> (a -> b) -> a -> b
12:36:53 <ski> @src ($!)
12:36:53 <lambdabot> f $! x = x `seq` f x
12:37:05 <ski> @src foldl'
12:37:06 <lambdabot> foldl' f a [] = a
12:37:06 <lambdabot> foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
12:37:14 <ski> last equation can also be written as
12:37:23 <haskellbridge> <i​rregularsphere> Nevermind, `!`'s for array indexing.
12:37:44 <ski> foldl' f a (x:xs) = (foldl' f $! f a x) xs
12:38:17 <ski> or, using `BangPatterns', as
12:38:32 <ski> foldl' f !a (x:xs) = foldl' f (f a x) xs
12:40:34 <ski> (that's not *quite* the same, since this one will enforce `a', not `f a x'. but on the next recursive call, the actual parameter will be specified as demanded anyway)
12:41:19 <ski> irregularsphere : `BangPatterns' uses `!' notation, in patterns, for strictness. there's also already a `!' notation in `data' types
12:41:58 × califax quits (~califax@user/califx) (Remote host closed the connection)
12:42:56 <ski> (btw, the `fib12' example shows how you can memoize (iow do top-down dynamic programming), using an array (immutable, furthermore) as intermediate cache, while keeping the notation rather close to the original implementation that doesn't mention arrays)
12:43:06 califax joins (~califax@user/califx)
12:44:00 <jtza8> The demonstration was useful, thanks. I still have lots to learn. :)
12:44:29 <haskellbridge> <i​rregularsphere> I'm amazed. Thanks, ski.
12:44:39 × alexherbo2 quits (~alexherbo@2a02-8440-3140-beaa-f9e3-2ee2-b871-8703.rev.sfr.net) (Remote host closed the connection)
12:45:25 alexherbo2 joins (~alexherbo@63.150.22.93.rev.sfr.net)
12:46:37 <haskellbridge> <i​rregularsphere> Wait, isn't there already a memoization method that's high-level?
12:46:42 × tabaqui quits (~root@94.58.131.117) (Ping timeout: 268 seconds)
12:46:42 <haskellbridge> <i​rregularsphere> https://wiki.haskell.org/Memoization
12:46:44 <ski> (oh, and it's also using `ViewPatterns', in a way that's probably not intended, to avoid naming the intermediate array. you could alternatively e.g. use `memoFix :: Ix i => (i,i) -> ((i -> e) -> (i -> e)) -> (i -> e); memoFix ix ff = f where f = ff (tabulate ix f !)', together with `fib12 = memoFix (0,12) $ \fib -> \case 0 -> 0; 1 -> 1; n -> fib (n-2) + fib (n-1)')
12:47:19 <ski> (oh, and i'm using `LambdaCase', just for convenience. and with `BlockArguments', you could omit the `$ ')
12:49:12 tabaqui joins (~root@94.58.131.117)
12:49:45 <ski> irregularsphere : one can memoize using different internal data structures for the caching. i used arrays above. one can even use infinite data structures as a cache (although do keep an eye out for space leaks)
12:50:43 <haskellbridge> <i​rregularsphere> Ah, so your example is for controlling the data structure used for memoization.
12:51:25 <haskellbridge> <i​rregularsphere> I wonder if recursive monadic operations are a good fit for memoization.
12:51:31 <ski> it's for showcasing a simple example of using (immutable) arrays for memoizing, doing top-down dynamic programming, while keeping the notation relatively lightweight
12:51:43 <haskellbridge> <i​rregularsphere> I see.
12:52:16 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
12:53:45 euleritian joins (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de)
12:54:03 <ski> if you want to, you could try to do inexact matching of a "pattern" string into a (typically longer) text, where you add one to a cost if you match by removing a character of the pattern, or add one, or replace one, in order to make it match the text. you can solve this, using a two-dimensional immutable array (indexed by pairs of positions in the pattern and in the text), with the method sketched above
12:55:53 <ski> each element of the array, except at the left and top fringes, will be defined by looking at the element to the left, the element above, and the element above to the left, comparing their costs to select which one you use. you find matches by checking the edge that corresponds to the last position in the pattern
12:56:34 <ski> well, for monadic memoization, i suppose you do want an idempotent monad, at least
12:57:16 × danse-nr3 quits (~danse@151.19.232.78) (Read error: Connection reset by peer)
13:00:41 <haskellbridge> <i​rregularsphere> what's an idempotent monad, m(m(x)) isomorphic to m(x)?
13:00:50 wootehfoot joins (~wootehfoo@user/wootehfoot)
13:01:09 <sshine> what's an irregular sphere?
13:01:33 <haskellbridge> <i​rregularsphere> nonexistent conception
13:07:29 <ski> irregularsphere : here, i mean a monad, for which `liftM2 (,) act act = fmap (\x -> (x,x)) act' -- running `act' two times (together) has the same effect as running it once (and duplicating the result instead)
13:08:16 <ski> (btw, you could replace `liftM2' by `liftA2', making this applicable to all idioms (/ applicative functors))
13:10:38 <ncf> this should be equivalent to join being an isomorphism
13:10:41 <ski> i suppose you probably also want it to be commutative, `liftA2 (flip (,)) act0 act1 = liftA2 (,) act1 act1' (or `liftA2 . flip = flip . liftA2') ??
13:11:38 × earthy quits (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net) (Quit: WeeChat 3.0)
13:11:40 <ski> (since the action that is cached wouldn't otherwise necessarily just have been repeated multiple times in a row, with no other effects intervening)
13:12:09 <ski> elaborate, ncf ?
13:12:40 <ncf> https://ncatlab.org/nlab/show/idempotent+monad
13:13:13 <haskellbridge> <i​rregularsphere> ncf: ah, thanks
13:13:49 <ski> yea, i'm wondering whether that notion coincides with the above one, ncf
13:14:02 <haskellbridge> <i​rregularsphere> provable though
13:14:09 <ncf> (for strong monads, at least)
13:14:14 ski nods
13:14:26 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
13:14:42 <haskellbridge> <i​rregularsphere> isn't every haskell monad following monadic rules strong monads
13:14:49 <haskellbridge> <i​rregularsphere> or at least that's as far as i can think of
13:14:53 <ncf> hm, and idempotent strong monads are supposed to be automatically commutative (https://ncatlab.org/nlab/show/idempotent+monad#idempotent_strong_monads_are_commutative)
13:15:10 <ncf> irregularsphere: yes, all haskell monads are strong/monoidal monads
13:15:12 <ski> oh, interesting
13:15:21 <haskellbridge> <i​rregularsphere> oh my god what is that commutative diagram
13:15:28 <ncf> er not monoidal
13:15:59 <haskellbridge> <i​rregularsphere> *shakes in fear
13:16:43 xff0x joins (~xff0x@ai082039.d.east.v6connect.net)
13:16:58 × tabaqui quits (~root@94.58.131.117) (Ping timeout: 255 seconds)
13:17:17 arthurvl joins (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net)
13:17:20 <ski> (i guess you could more succinctly reformulate the first condition above, as `join . liftA2 = fmap . join', where `join' is the `W' combinator (`W f x = f x x'), being `join' in the environment monad `(rho ->)')
13:18:14 <haskellbridge> <i​rregularsphere> what
13:18:15 arthurvl is now known as earthy
13:19:03 tabaqui joins (~root@87.201.186.71)
13:19:27 <ski> hm ?
13:21:48 <ski> (it doesn't matter if you replace `(,)' above with an arbitrary function `f')
13:23:09 danse-nr3 joins (~danse@ge-19-115-6.service.infuturo.it)
13:23:14 rosco joins (~rosco@175.136.156.77)
13:25:39 fr33domlover3 joins (~fr33domlo@towards.vision)
13:25:44 × yoo quits (~yo0O0o@104.28.226.105) (Changing host)
13:25:45 yoo joins (~yo0O0o@user/mobivme)
13:26:15 × jbalint_ quits (~jbalint@2600-6c44-117f-e98a-816a-9488-0fb1-07b7.inf6.spectrum.com) (Remote host closed the connection)
13:26:25 jbalint joins (~jbalint@071-090-119-177.res.spectrum.com)
13:26:28 <haskellbridge> <i​rregularsphere> I'm... already fine with ncf's explanation being `join` is an isomorphism.
13:26:34 kaskal joins (~kaskal@213-147-167-18.nat.highway.webapn.at)
13:26:36 <haskellbridge> <i​rregularsphere> Thanks, though!
13:26:46 × Angelz quits (Angelz@2605:6400:30:fc15:9bd1:2217:41cd:bb15) (Ping timeout: 256 seconds)
13:27:17 × kaskal- quits (~kaskal@2001:4bb8:2c3:39c1:ff3f:d58:4fd9:e10c) (Ping timeout: 256 seconds)
13:27:20 × fr33domlover quits (~fr33domlo@towards.vision) (Ping timeout: 256 seconds)
13:27:20 fr33domlover3 is now known as fr33domlover
13:27:47 × pastly quits (~pastly@gateway/tor-sasl/pastly) (Ping timeout: 255 seconds)
13:28:05 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 252 seconds)
13:28:11 × danse-nr3 quits (~danse@ge-19-115-6.service.infuturo.it) (Ping timeout: 264 seconds)
13:28:11 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 264 seconds)
13:28:23 danse-nr3 joins (~danse@ge-19-115-6.service.infuturo.it)
13:28:39 Maxdamantus joins (~Maxdamant@user/maxdamantus)
13:29:01 pastly joins (~pastly@gateway/tor-sasl/pastly)
13:29:02 CiaoSen joins (~Jura@2a05:5800:2c6:8e00:e6b9:7aff:fe80:3d03)
13:29:05 <haskellbridge> <i​rregularsphere> ski: "what" as in "are these definitions necessarily equivalent"
13:29:12 <haskellbridge> <i​rregularsphere> equivalent at all*
13:29:25 × pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection)
13:29:52 <haskellbridge> <i​rregularsphere> goddamnit i'm bridged over irc, can't even edit my messages without annoying people
13:30:06 pastly joins (~pastly@gateway/tor-sasl/pastly)
13:30:45 shapr joins (~user@c-24-218-186-89.hsd1.ma.comcast.net)
13:30:47 <ski> irregularsphere : "<ski> yea, i'm wondering whether that notion coincides with the above one, ncf"
13:31:30 jtza8 parts (~user@user/jtza8) (ERC 5.4 (IRC client for GNU Emacs 28.2))
13:31:43 <haskellbridge> <i​rregularsphere> no i mean your `join . liftA2 = fmap . join`
13:32:16 <haskellbridge> <i​rregularsphere> also, `(->) a` is called an environment monad?
13:34:14 × dostoyevsky2 quits (~sck@user/dostoyevsky2) (Quit: leaving)
13:34:28 dostoyevsky2 joins (~sck@user/dostoyevsky2)
13:36:49 × YuutaW quits (~YuutaW@mail.yuuta.moe) (Quit: ZNC 1.8.2 - https://znc.in)
13:37:15 YuutaW joins (~YuutaW@mail.yuuta.moe)
13:37:37 <haskellbridge> <i​rregularsphere> ski: oh, yeah, that
13:38:02 <ski> irregularsphere : "environment", "input", or "reader" (i've also seen "function", but i don't really like that term). in math, it's often expressed as "pointwise" (e.g. making the linear transformations from a linear/vector space `V' to the scalars `K' (say real numbers) themselves form a vector space, by defining `(f + g) v = f v + g v' and `(k * f) v = k * f v')
13:40:42 <ski> similarly, "logging"/"summarizing", "output", and "writer" is the same thing. (in math, you can compare with say <https://en.wikipedia.org/wiki/Monoid_ring>, which is like a nondeterministic (due to rings having sums) version)
13:41:13 <ski> (other possible names for "environment" could be "context" or "configuration")
13:41:24 <haskellbridge> <i​rregularsphere> oh it's just another term
13:41:35 × destituion quits (~destituio@85.221.111.174) (Ping timeout: 268 seconds)
13:41:47 <haskellbridge> <i​rregularsphere> ski: i'd better call them by `(->) a` anyway
13:42:06 ski would probably say `(a ->)' there
13:42:12 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 268 seconds)
13:42:31 Maxdamantus joins (~Maxdamant@user/maxdamantus)
13:42:57 <haskellbridge> <i​rregularsphere> is this mud of synonyms just to make beginners feel better
13:43:42 <ski> irregularsphere : anyway, from `join . liftA2 = fmap . join' you get `join (liftA2 (,)) act = fmap (join (,)) act', which becomes `liftA2 (,) act act = fmap (\x -> (x,x)) act'
13:43:54 <haskellbridge> <i​rregularsphere> right
13:48:02 <ski> in the other direction, start from `liftA2 (,) act act = fmap (\x -> (x,x)) act', and (by mapping `uncurry f') get to `fmap (uncurry f) (liftA2 (,) act act) = fmap (uncurry f) (fmap (\x -> (x,x)) act', which is `liftA2 ((uncurry f .) . (,)) act act = fmap (uncurry f . \x -> (x,x)) act', which is `liftA2 f act act = fmap (\x -> f x x) act', which is `join (liftA2 f) act = fmap (join f) act'. this holds for
13:48:08 <ski> every `act', so by extensionality, `join (liftA2 f) = fmap (join f)' which is `(join . liftA2) f = (fmap . join) f', and extensionality (on `f') again gives `join . liftA2 = fmap . join'
13:49:35 <haskellbridge> <i​rregularsphere> is this equivalent to `join` being an isomorphism though
13:50:42 <ski> irregularsphere : i typically just use the terms "environment"/"input", resp. "summarizing"/"output". "context" and "configuration" would be to further suggest how to think about environment, that it's about propagating/distributing some information "down" a computation (possibly with local override, just like in a process tree, each process will inherit environment variables from its parent, but may
13:50:48 <ski> override when spawning child processes)
13:52:39 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
13:56:08 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
13:57:58 <ski> irregularsphere : i'm not sure if it's an equivalent notion, that's why i asked about that. the notion at that ncatlab page is about having `T . T = T', monads `T' such that composition is idempotent on them (iow `join (.) T = T'). while the notion i was talking about was that for an idiom (aka applicative functor) `I', whether `(<^>) : I A * I B >---> I (A * B)' (being `liftA2 (,)') is "idempotent" in the
13:58:04 <ski> sense that `(<^>) . dup = dup . (<^>)' (duplicating the output on the other side, not just the input on the first side), where `dup : A >---> A * A' (being `join (,)')
13:59:27 <ski> perhaps there's an equivalence here, but i don't really see it, as the two notions start by focusing on different things being "idempotent" ("doing something twice is the same as doing it once")
13:59:48 califax joins (~califax@user/califx)
14:00:14 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
14:03:17 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:03:40 califax joins (~califax@user/califx)
14:04:49 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 260 seconds)
14:07:34 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:07:52 × ell quits (~ellie@user/ellie) (Quit: Ping timeout (120 seconds))
14:08:12 ell joins (~ellie@user/ellie)
14:10:31 califax joins (~califax@user/califx)
14:12:24 a51 joins (a51@gateway/vpn/protonvpn/a51)
14:14:16 thegeekinside joins (~thegeekin@189.217.83.221)
14:20:20 × dsrt^ quits (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 252 seconds)
14:20:58 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
14:21:40 × danse-nr3 quits (~danse@ge-19-115-6.service.infuturo.it) (Ping timeout: 268 seconds)
14:22:29 × mmhat quits (~mmh@p200300f1c70685c4ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
14:22:51 mmhat joins (~mmh@p200300f1c7068586ee086bfffe095315.dip0.t-ipconnect.de)
14:23:04 ft joins (~ft@p508db2e6.dip0.t-ipconnect.de)
14:23:31 danse-nr3 joins (~danse@ge-19-115-6.service.infuturo.it)
14:24:02 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
14:24:37 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
14:24:39 Angelz joins (Angelz@Angelz.oddprotocol.org)
14:25:16 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
14:25:28 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
14:28:01 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 264 seconds)
14:31:19 × euleritian quits (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de) (Ping timeout: 256 seconds)
14:31:50 × evocatus quits (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66) (Ping timeout: 268 seconds)
14:46:04 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:47:58 destituion joins (~destituio@2a02:2121:626:f551:4ac:cbaa:8513:cc79)
14:48:35 califax joins (~califax@user/califx)
14:56:55 × califax quits (~califax@user/califx) (Remote host closed the connection)
14:58:24 califax joins (~califax@user/califx)
14:59:28 × alexherbo2 quits (~alexherbo@63.150.22.93.rev.sfr.net) (Remote host closed the connection)
14:59:48 alexherbo2 joins (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net)
15:04:14 dsrt^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net)
15:10:53 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
15:11:44 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:15:20 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
15:16:24 califax joins (~califax@user/califx)
15:23:09 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Quit: Client closed)
15:23:25 × alexherbo2 quits (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net) (Remote host closed the connection)
15:23:45 alexherbo2 joins (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net)
15:25:09 Sgeo joins (~Sgeo@user/sgeo)
15:31:40 Tuplanolla joins (~Tuplanoll@91-159-68-95.elisa-laajakaista.fi)
15:33:44 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
15:35:15 wootehfoot joins (~wootehfoo@user/wootehfoot)
15:42:39 bontaq joins (~user@ool-45779c03.dyn.optonline.net)
15:44:13 mehlon joins (~mehlon@user/mehlon)
15:45:23 × califax quits (~califax@user/califx) (Remote host closed the connection)
15:47:07 califax joins (~califax@user/califx)
15:50:25 × rosco quits (~rosco@175.136.156.77) (Remote host closed the connection)
15:50:44 evocatus joins (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66)
15:53:07 rosco joins (~rosco@175.136.156.77)
15:53:12 notzmv joins (~daniel@user/notzmv)
15:54:52 × tabaqui quits (~root@87.201.186.71) (Read error: Connection reset by peer)
15:56:48 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
16:04:43 wootehfoot joins (~wootehfoo@user/wootehfoot)
16:04:46 × evocatus quits (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66) (Ping timeout: 246 seconds)
16:09:37 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:10:14 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
16:11:06 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:11:47 × mehlon quits (~mehlon@user/mehlon) (Remote host closed the connection)
16:13:56 × danse-nr3 quits (~danse@ge-19-115-6.service.infuturo.it) (Ping timeout: 256 seconds)
16:16:02 califax joins (~califax@user/califx)
16:16:50 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
16:18:16 × notzmv quits (~daniel@user/notzmv) (Remote host closed the connection)
16:20:06 notzmv joins (~daniel@user/notzmv)
16:20:38 × alexherbo2 quits (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net) (Remote host closed the connection)
16:20:58 alexherbo2 joins (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net)
16:21:36 Erutuon joins (~Erutuon@user/erutuon)
16:28:14 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.1.1)
16:30:31 × myxos quits (~myxos@065-028-251-121.inf.spectrum.com) (Remote host closed the connection)
16:31:13 myxos joins (~myxos@065-028-251-121.inf.spectrum.com)
16:31:24 × athan quits (~athan@173-042-095-241.biz.spectrum.com) (Quit: Konversation terminated!)
16:31:47 × CiaoSen quits (~Jura@2a05:5800:2c6:8e00:e6b9:7aff:fe80:3d03) (Ping timeout: 268 seconds)
16:34:29 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
16:37:30 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:40:26 califax joins (~califax@user/califx)
16:40:36 × alexherbo2 quits (~alexherbo@2a02-8440-3140-beaa-19bb-1041-3da4-028d.rev.sfr.net) (Remote host closed the connection)
16:44:07 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:46:56 califax joins (~califax@user/califx)
16:51:46 × califax quits (~califax@user/califx) (Remote host closed the connection)
16:53:05 califax joins (~califax@user/califx)
16:57:29 × raym quits (~ray@user/raym) (Ping timeout: 260 seconds)
16:59:15 raym joins (~ray@user/raym)
16:59:44 × igemnace quits (~ian@user/igemnace) (Quit: WeeChat 4.2.1)
17:13:25 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:14:29 target_i joins (~target_i@217.175.14.39)
17:17:38 califax joins (~califax@user/califx)
17:21:28 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:24:10 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:27:19 azimut joins (~azimut@gateway/tor-sasl/azimut)
17:28:02 gambpang joins (~ishipman@12.14.16.242)
17:29:00 × califax quits (~califax@user/califx) (Remote host closed the connection)
17:29:01 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
17:29:44 azimut joins (~azimut@gateway/tor-sasl/azimut)
17:32:07 Square joins (~Square@user/square)
17:34:47 × machinedgod quits (~machinedg@d173-183-246-216.abhsia.telus.net) (Ping timeout: 264 seconds)
17:36:04 × Square quits (~Square@user/square) (Remote host closed the connection)
17:37:09 Square joins (~Square@user/square)
17:37:42 califax joins (~califax@user/califx)
17:37:46 × xff0x quits (~xff0x@ai082039.d.east.v6connect.net) (Ping timeout: 268 seconds)
17:38:24 xff0x joins (~xff0x@ai082039.d.east.v6connect.net)
17:45:39 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
17:50:51 × yoo quits (~yo0O0o@user/mobivme) (Ping timeout: 272 seconds)
17:55:27 × johnw quits (~johnw@69.62.242.138) (Ping timeout: 256 seconds)
17:57:24 tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net)
17:59:25 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 256 seconds)
18:04:32 billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe)
18:06:53 rvalue joins (~rvalue@user/rvalue)
18:16:15 zer0bitz- joins (~zer0bitz@user/zer0bitz)
18:17:44 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:17:53 × gambpang quits (~ishipman@12.14.16.242) (Remote host closed the connection)
18:20:19 × zer0bitz quits (~zer0bitz@user/zer0bitz) (Ping timeout: 268 seconds)
18:22:19 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:25:17 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
18:25:42 × target_i quits (~target_i@217.175.14.39) (Quit: leaving)
18:26:05 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:27:38 califax joins (~califax@user/califx)
18:33:18 × califax quits (~califax@user/califx) (Remote host closed the connection)
18:33:53 califax joins (~califax@user/califx)
18:34:39 × remmie quits (ianremsen@tilde.team) (Ping timeout: 255 seconds)
18:35:03 evocatus joins (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66)
18:40:39 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 256 seconds)
18:41:33 __monty__ joins (~toonn@user/toonn)
18:51:58 × billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Quit: Leaving)
18:53:07 × evocatus quits (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66) (Ping timeout: 256 seconds)
18:55:21 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
18:57:40 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
18:58:28 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
19:02:45 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
19:03:30 evocatus joins (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66)
19:03:34 euleritian joins (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de)
19:07:40 remmie joins (ianremsen@tilde.team)
19:09:52 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:13:21 × euleritian quits (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
19:13:39 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
19:16:32 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
19:22:44 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
19:27:45 × bontaq quits (~user@ool-45779c03.dyn.optonline.net) (Remote host closed the connection)
19:29:54 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:30:13 × rosco quits (~rosco@175.136.156.77) (Quit: Lost terminal)
19:30:55 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 255 seconds)
19:32:32 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
19:32:59 bontaq joins (~user@ool-45779c03.dyn.optonline.net)
19:33:17 euleritian joins (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de)
19:33:39 × euleritian quits (~euleritia@dynamic-046-114-090-105.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
19:33:55 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
19:34:53 wootehfoot joins (~wootehfoo@user/wootehfoot)
19:40:03 amjoseph joins (~amjoseph@static-198-44-128-146.cust.tzulo.com)
19:42:16 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
19:44:50 × shailangsa quits (~shailangs@host109-152-9-157.range109-152.btcentralplus.com) (Remote host closed the connection)
19:49:04 yoo joins (~yo0O0o@104.28.226.106)
19:49:24 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Quit: Client closed)
19:49:46 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 264 seconds)
19:54:04 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
19:54:26 mud joins (~mud@user/kadoban)
19:55:58 rscastilho2024 joins (rscastilho@189.61.140.215)
19:56:29 × rscastilho2024 quits (rscastilho@189.61.140.215) (Remote host closed the connection)
19:59:47 × evocatus quits (~evocatus@2a02:a210:20c6:1f00:d2c0:b982:94f0:fc66) (Ping timeout: 259 seconds)
20:04:28 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
20:05:10 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
20:09:37 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 255 seconds)
20:15:48 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
20:29:23 × yoo quits (~yo0O0o@104.28.226.106) (Changing host)
20:29:23 yoo joins (~yo0O0o@user/mobivme)
20:37:24 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:38:58 califax joins (~califax@user/califx)
20:40:24 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
20:41:22 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:41:49 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
20:42:00 califax joins (~califax@user/califx)
20:44:54 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
20:45:01 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 272 seconds)
20:49:17 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
20:49:47 × califax quits (~califax@user/califx) (Remote host closed the connection)
20:50:34 califax joins (~califax@user/califx)
20:53:52 × yoo quits (~yo0O0o@user/mobivme) (Remote host closed the connection)
20:53:59 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Ping timeout: 264 seconds)
20:54:39 yoo joins (~yo0O0o@104.28.226.106)
20:58:39 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:00:54 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
21:04:52 thegeekinside joins (~thegeekin@189.217.83.221)
21:04:55 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
21:05:32 thegeekinside joins (~thegeekin@189.217.83.221)
21:05:36 × thegeekinside quits (~thegeekin@189.217.83.221) (Read error: Connection reset by peer)
21:07:26 × califax quits (~califax@user/califx) (Remote host closed the connection)
21:09:21 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:09:50 califax joins (~califax@user/califx)
21:12:10 thegeekinside joins (~thegeekin@189.217.83.221)
21:12:56 × earthy quits (~arthurvl@2a02-a469-f5e2-1-83d2-ca43-57a2-dc81.fixed6.kpn.net) (Quit: reboot)
21:21:57 L29Ah joins (~L29Ah@wikipedia/L29Ah)
21:23:57 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
21:24:52 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
21:25:28 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
21:31:04 machinedgod joins (~machinedg@d173-183-246-216.abhsia.telus.net)
21:34:37 × yoo quits (~yo0O0o@104.28.226.106) (Ping timeout: 264 seconds)
21:37:50 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
21:38:31 natechan joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
21:38:36 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:41:18 dcoutts joins (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
21:45:23 × thegeekinside quits (~thegeekin@189.217.83.221) (Remote host closed the connection)
21:49:29 × notzmv quits (~daniel@user/notzmv) (Ping timeout: 256 seconds)
21:57:51 notzmv joins (~daniel@user/notzmv)
22:01:02 × mmhat quits (~mmh@p200300f1c7068586ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.2.1)
22:01:55 <ncf> ski, irregularsphere: it took me the entire day but here's a proof that "idempotent monad" implies ski's definition https://f.monade.li/o-fwm4.png
22:02:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
22:02:49 × notzmv quits (~daniel@user/notzmv) (Ping timeout: 264 seconds)
22:05:18 <ncf> commutativity of the outer diagram says that the map on the left (Tδ = fmap dup) is equal to the composite going around the diagram, which is the categorical translation of join (liftM2 (,)); the diagram uses monad laws, left and right strength laws, the η = Tη definition of idempotence, and naturality of various things
22:06:17 <ncf> i don't know if the converse implication holds yet
22:06:32 mizlan joins (~mizlan@2607:f010:2e9:b:5564:6974:cc47:1879)
22:08:20 × Me-me quits (~me-me@2602:ff16:3:0:1:dc:beef:d00d) (Quit: Disconnecting on purpose.)
22:10:04 Me-me joins (~me-me@user/me-me)
22:12:47 <haskellbridge> <i​rregularsphere> ncf: holy, that's dedication
22:13:53 <EvanR> you don't need to know category theory to use haskell, but it's a side effect
22:14:56 <haskellbridge> <i​rregularsphere> thanks so much! will be looking into it
22:16:05 <haskellbridge> <i​rregularsphere> EvanR: I usually get confused by multiple definitions to be honest, category theory and its commutative diagrams aid me in understanding Haskell
22:22:29 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
22:22:41 tri joins (~tri@ool-18bc2e74.dyn.optonline.net)
22:22:45 × michalz quits (~michalz@185.246.207.193) (Quit: ZNC 1.8.2 - https://znc.in)
22:24:59 CiaoSen joins (~Jura@2a05:5800:2c6:8e00:e6b9:7aff:fe80:3d03)
22:27:38 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
22:27:56 shapr` joins (~user@c-24-218-186-89.hsd1.ma.comcast.net)
22:28:45 hasktard joins (~ohomecham@nat-240.udc.es)
22:29:06 <hasktard> leave
22:29:10 hasktard parts (~ohomecham@nat-240.udc.es) ()
22:29:59 jinsun joins (~jinsun@user/jinsun)
22:30:09 × shapr quits (~user@c-24-218-186-89.hsd1.ma.comcast.net) (Ping timeout: 272 seconds)
22:33:12 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
22:36:59 julie_pilgrim joins (~julie_pil@user/julie-pilgrim/x-1240752)
22:43:06 azr4e1 joins (~azr4e1@137.220.68.193)
22:44:08 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
22:45:47 × fendor quits (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection)
22:50:34 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:55:49 random-jellyfish joins (~developer@2a02:2f04:11e:c600:f8fa:9c1c:904b:436a)
22:55:49 × random-jellyfish quits (~developer@2a02:2f04:11e:c600:f8fa:9c1c:904b:436a) (Changing host)
22:55:49 random-jellyfish joins (~developer@user/random-jellyfish)
23:02:25 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
23:03:27 yoo joins (~yo0O0o@130.105.162.42)
23:05:55 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
23:09:07 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:14:33 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 260 seconds)
23:15:34 × mizlan quits (~mizlan@2607:f010:2e9:b:5564:6974:cc47:1879) (Remote host closed the connection)
23:16:14 mizlan joins (~mizlan@wifi-131-179-20-68.host.ucla.edu)
23:16:15 × yoo quits (~yo0O0o@130.105.162.42) (Read error: Connection reset by peer)
23:20:25 × mizlan quits (~mizlan@wifi-131-179-20-68.host.ucla.edu) (Ping timeout: 255 seconds)
23:28:42 × dodoyada quits (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net) (Quit: Client closed)
23:30:14 L29Ah joins (~L29Ah@wikipedia/L29Ah)
23:30:20 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
23:32:24 × julie_pilgrim quits (~julie_pil@user/julie-pilgrim/x-1240752) (Remote host closed the connection)
23:34:08 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Read error: Connection reset by peer)
23:34:35 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
23:35:47 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded)
23:36:02 × tri quits (~tri@ool-18bc2e74.dyn.optonline.net) (Remote host closed the connection)
23:36:52 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
23:38:30 ph88 joins (~ph88@ip5b403f30.dynamic.kabel-deutschland.de)
23:40:04 dodoyada joins (~dodoyada@pool-71-178-11-160.washdc.fios.verizon.net)
23:41:38 son0p joins (~ff@167.0.172.211)
23:41:54 × hc quits (~hc@mail.hce.li) (Read error: Connection reset by peer)
23:42:07 hc joins (~hc@mail.hce.li)
23:42:29 × dminuoso quits (~dminuoso@user/dminuoso) (Quit: ZNC 1.8.2 - https://znc.in)
23:42:29 × fiddlerwoaroof quits (~fiddlerwo@user/fiddlerwoaroof) (Quit: Gone.)
23:42:49 fiddlerwoaroof joins (~fiddlerwo@user/fiddlerwoaroof)
23:42:49 dminuoso joins (~dminuoso@user/dminuoso)
23:43:23 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
23:45:18 ChaiTRex joins (~ChaiTRex@user/chaitrex)
23:51:14 × xerox quits (~edi@user/edi) (Ping timeout: 256 seconds)
23:52:47 xerox joins (~edi@user/edi)
23:58:57 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:59:01 × random-jellyfish quits (~developer@user/random-jellyfish) (Ping timeout: 246 seconds)

All times are in UTC on 2024-02-16.