Logs on 2024-08-12 (liberachat/#haskell)
| 00:00:57 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 258 seconds) |
| 00:10:38 | → | pavonia joins (~user@user/siracusa) |
| 00:13:45 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:18:10 | → | machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net) |
| 00:28:33 | <remexre> | I've been relatively away from Haskell for a few years, but I heard that delimited control got added to allow implementing effects more efficiently; is this in a (nearly) "prod-ready" state nowadays? |
| 00:32:36 | <geekosaur> | I don't know if anyone is using it yet, but it's been around for a few ghc versions and I don't recall any changes being made to it so it's likely ready for use |
| 00:34:13 | <geekosaur> | https://downloads.haskell.org/ghc/9.6.1/docs/users_guide/9.6.1-notes.html#runtime-system |
| 00:36:48 | × | misterfish quits (~misterfis@22.1-12-147.kabelnoord.net) (Ping timeout: 252 seconds) |
| 00:37:25 | <remexre> | Sorry, I meant, is there an effect system that uses them that's prod-ready (or nearly prod-ready) |
| 00:42:46 | → | ticat joins (~ticat@156.251.248.134) |
| 00:45:19 | × | ticat quits (~ticat@156.251.248.134) (Client Quit) |
| 00:45:24 | <jackdk> | remexre: effectful is probably my default choice if I want to go to effect-land. cleff seems really similar but I don't remember the differences, and bluefin is a newer entry that requires you to pass explicit handles to effect-using functions (which has benefits and drawbacks) |
| 00:45:35 | → | fp joins (~fp@156.251.248.134) |
| 00:46:18 | <geekosaur> | effectful doesn't use delimited continuations, though. eff does but apparently this causes problems (see https://github.com/hasura/eff/issues/13 for example) |
| 00:49:46 | <geekosaur> | (well, not delimited continuations per se but how they interact with other facilities) |
| 00:51:24 | <Axman6> | Do/can linear types help at all there? |
| 00:51:55 | <geekosaur> | you're asking the wrong person 🙂 |
| 00:52:33 | × | neuroevolutus quits (~neuroevol@37.19.200.158) (Ping timeout: 256 seconds) |
| 00:54:04 | <geekosaur> | as I read it, though, it's a problem of scope, not of multiplicity |
| 01:01:45 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 01:23:09 | → | starburst joins (~starburst@2601:602:480:9390:d6d2:52ff:fed8:1599) |
| 01:26:13 | × | Square quits (~Square@user/square) (Ping timeout: 248 seconds) |
| 01:27:39 | × | starburst quits (~starburst@2601:602:480:9390:d6d2:52ff:fed8:1599) (Client Quit) |
| 01:34:36 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 02:10:18 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 02:10:32 | → | euleritian joins (~euleritia@dynamic-176-007-159-197.176.7.pool.telefonica.de) |
| 02:19:07 | × | ZharMeny quits (~user@user/ZharMeny) (Quit: () |
| 02:26:03 | × | td_ quits (~td@i5387091D.versanet.de) (Ping timeout: 252 seconds) |
| 02:28:00 | → | td_ joins (~td@i5387090C.versanet.de) |
| 02:35:42 | × | euleritian quits (~euleritia@dynamic-176-007-159-197.176.7.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 02:37:48 | → | euleritian joins (~euleritia@dynamic-176-007-159-197.176.7.pool.telefonica.de) |
| 02:42:08 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
| 02:47:11 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 02:47:22 | → | spew joins (~spew@201.141.102.132) |
| 02:55:49 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 248 seconds) |
| 02:56:02 | → | tomku joins (~tomku@user/tomku) |
| 03:11:44 | × | euleritian quits (~euleritia@dynamic-176-007-159-197.176.7.pool.telefonica.de) (Ping timeout: 272 seconds) |
| 03:12:26 | → | euleritian joins (~euleritia@dynamic-176-000-157-209.176.0.pool.telefonica.de) |
| 03:13:00 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds) |
| 03:13:03 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 03:14:24 | Lord_of_Life_ | is now known as Lord_of_Life |
| 03:18:13 | × | dysthesis quits (~dysthesis@user/dysthesis) (Quit: WeeChat 4.3.5) |
| 03:25:25 | → | ddellacosta joins (~ddellacos@ool-44c73b99.dyn.optonline.net) |
| 03:26:39 | ← | fp parts (~fp@156.251.248.134) () |
| 03:31:12 | → | smalltalkman joins (uid545680@id-545680.hampstead.irccloud.com) |
| 03:38:40 | × | euleritian quits (~euleritia@dynamic-176-000-157-209.176.0.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 03:39:22 | → | euleritian joins (~euleritia@dynamic-176-004-137-229.176.4.pool.telefonica.de) |
| 03:39:44 | × | spew quits (~spew@201.141.102.132) (Quit: spew) |
| 03:50:23 | × | euleritian quits (~euleritia@dynamic-176-004-137-229.176.4.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 03:51:27 | → | euleritian joins (~euleritia@dynamic-176-000-009-143.176.0.pool.telefonica.de) |
| 03:53:25 | × | machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 248 seconds) |
| 03:57:05 | → | aforemny_ joins (~aforemny@2001:9e8:6cef:5a00:2895:51b4:d10f:29a8) |
| 03:58:05 | × | aforemny quits (~aforemny@2001:9e8:6ccb:c300:522d:c042:a9ff:c506) (Ping timeout: 252 seconds) |
| 03:58:52 | → | machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net) |
| 04:07:49 | × | ethantwardy quits (user@user/ethantwardy) (Ping timeout: 248 seconds) |
| 04:08:13 | → | ethantwardy joins (user@user/ethantwardy) |
| 04:12:02 | × | ddellacosta quits (~ddellacos@ool-44c73b99.dyn.optonline.net) (Ping timeout: 258 seconds) |
| 04:13:11 | → | ddellacosta joins (~ddellacos@ool-44c73b99.dyn.optonline.net) |
| 04:15:26 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 04:19:21 | × | ddellacosta quits (~ddellacos@ool-44c73b99.dyn.optonline.net) (Ping timeout: 252 seconds) |
| 04:19:44 | → | ddellacosta joins (~ddellacos@ool-44c73b99.dyn.optonline.net) |
| 04:20:40 | → | dysthesi1 joins (~dysthesis@user/dysthesis) |
| 04:20:47 | × | dysthesis quits (~dysthesis@user/dysthesis) (Quit: WeeChat 4.3.5) |
| 04:20:49 | × | dysthesi1 quits (~dysthesis@user/dysthesis) (Client Quit) |
| 04:21:02 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 04:21:32 | × | dysthesis quits (~dysthesis@user/dysthesis) (Client Quit) |
| 04:22:10 | → | neuroevolutus joins (~neuroevol@206.217.206.90) |
| 04:26:46 | → | zmt00 joins (~zmt00@user/zmt00) |
| 04:29:37 | × | swamp_ quits (~zmt00@user/zmt00) (Ping timeout: 248 seconds) |
| 04:49:03 | × | dolio quits (~dolio@130.44.140.168) (Quit: ZNC 1.8.2 - https://znc.in) |
| 04:52:55 | × | machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 264 seconds) |
| 04:54:34 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 260 seconds) |
| 04:54:48 | → | tomku joins (~tomku@user/tomku) |
| 04:56:41 | → | dolio joins (~dolio@130.44.140.168) |
| 04:59:23 | × | Inst quits (~Inst@user/Inst) (Ping timeout: 255 seconds) |
| 05:02:45 | × | tabemann_ quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection) |
| 05:03:23 | → | tabemann_ joins (~tabemann@2600:1700:7990:24e0:c5ab:f023:302e:c870) |
| 05:07:01 | × | euleritian quits (~euleritia@dynamic-176-000-009-143.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
| 05:07:16 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 05:08:30 | → | Inst joins (~Inst@user/Inst) |
| 05:10:04 | → | michalz joins (~michalz@185.246.207.197) |
| 05:14:38 | → | oo_miguel joins (~Thunderbi@78.10.207.46) |
| 05:16:28 | <jackdk> | I completely blanked on the delimited continuations part of the question, sorry |
| 05:17:08 | × | dsrt^ quits (dsrt@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 272 seconds) |
| 05:20:04 | × | ddellacosta quits (~ddellacos@ool-44c73b99.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 05:20:25 | → | ddellacosta joins (~ddellacos@ool-44c73b99.dyn.optonline.net) |
| 05:28:34 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 05:30:04 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 05:32:28 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds) |
| 05:33:32 | → | euleritian joins (~euleritia@dynamic-176-000-009-143.176.0.pool.telefonica.de) |
| 05:33:41 | × | xdminsy quits (~xdminsy@117.147.71.180) (Ping timeout: 248 seconds) |
| 05:34:03 | → | xdminsy joins (~xdminsy@117.147.71.180) |
| 05:36:11 | × | xdminsy quits (~xdminsy@117.147.71.180) (Client Quit) |
| 05:41:12 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 05:43:17 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 248 seconds) |
| 05:43:31 | → | tomku joins (~tomku@user/tomku) |
| 05:46:16 | → | rvalue- joins (~rvalue@user/rvalue) |
| 05:46:49 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 265 seconds) |
| 05:50:01 | → | CiaoSen joins (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) |
| 05:50:22 | rvalue- | is now known as rvalue |
| 06:04:01 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 06:04:28 | <Axman6> | I was trying to implement something the other day and failing for I'm sure stupid reasons. I wanted to represent vectors up to a certain length: data DVec (n :: Nat) a where DNil :: DVec n a; DCons :: a -> DVec n a -> DVec (n+1) a |
| 06:05:16 | <Axman6> | I wanted to be able to go from Vec n a to DVec n a (or DVec (n+m) a) but couldn't make it work. |
| 06:05:26 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 06:08:37 | → | euphores joins (~SASL_euph@user/euphores) |
| 06:09:41 | <Axman6> | (making an example on play.haskell.org, one sec...) |
| 06:12:13 | <Axman6> | https://play.haskell.org/saved/D1z1yTs6 |
| 06:13:02 | × | neuroevolutus quits (~neuroevol@206.217.206.90) (Quit: Client closed) |
| 06:20:42 | <Axman6> | https://play.haskell.org/saved/Rbhufctg is what I tried to make it clear what n and m should be when recursing, and I would have thought that the pattern matching on Cons would show that n ~ (n1 + 1), which it shows in the error, but I don't have access to n1 (or do I?) |
| 06:27:51 | <Leary> | Axman6: IIRC literal type nats don't have any real cleverness on the GHC-side, so you have to either use a plugin (there's a library for this) or use the usual inductive data kind `data Nat = Z | S Nat` so it can infer things from structure. |
| 06:29:29 | <Axman6> | Can you link to the plugin? I've been trying to find it for a while because I've seen it in the past, but haven't been able to |
| 06:29:44 | <Leary> | I don't recall its name, sorry. |
| 06:30:57 | <Axman6> | Ah, i think it's https://hackage.haskell.org/package/ghc-typelits-natnormalise (which of course is from the developers of Clash, since that's where I originally saw it!) |
| 06:38:14 | <Axman6> | ok, well apparently I did actually already find it, and still couldn't get things to work :( |
| 06:41:54 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 260 seconds) |
| 06:45:40 | <Axman6> | I'm also not sure if this is even the right representation for a vector of up to sixe n |
| 06:45:42 | <Axman6> | size* |
| 06:52:12 | <Leary> | There are a couple of other options, but this one should work. If you really want nice inter-operation between Vec and DVec, I would consider using `data DVec l a where DVec :: Vec m a -> SNat n -> DVec (m + n) a` instead. |
| 06:55:21 | → | lol_ joins (~lol@2603:3016:1e01:b980:2886:e337:fa1b:385a) |
| 06:55:29 | → | zmt01 joins (~zmt00@user/zmt00) |
| 06:56:22 | <Axman6> | Hmm, interesting. I'm not sure if that would work for my specific use case, I'm working in Clash and need an instance of its BitPack class, which means I need to be able to go from a BitVector (BitSize (DVec n a)) to DVec n a, and the SNat is not something i'm sure I can represent in a BitVector |
| 06:56:47 | <Axman6> | the recursive GADT is pretty easy to map to and from bitvectors |
| 06:56:54 | × | h2t quits (~h2t@user/h2t) (Ping timeout: 260 seconds) |
| 06:57:29 | × | delyan_ quits (sid523379@id-523379.hampstead.irccloud.com) (Ping timeout: 260 seconds) |
| 06:57:29 | × | sa1 quits (sid7690@id-7690.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
| 06:57:29 | × | jonrh quits (sid5185@id-5185.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
| 06:57:40 | <Axman6> | (You end up with BitSize (DVec n a = n * (1 + BitSize a), where the +1 is a Cons/Nil tag) |
| 06:57:49 | → | h2t joins (~h2t@user/h2t) |
| 06:57:54 | → | Hobbyboy|BNC joins (Hobbyboy@hobbyboy.co.uk) |
| 06:58:04 | × | Hobbyboy quits (Hobbyboy@hobbyboy.co.uk) (Ping timeout: 260 seconds) |
| 06:58:04 | × | bjs quits (sid190364@user/bjs) (Ping timeout: 260 seconds) |
| 06:58:04 | × | gmc quits (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 260 seconds) |
| 06:58:05 | → | bsima- joins (~bsima@2604:a880:400:d0::19f1:7001) |
| 06:58:39 | × | CiaoSen quits (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) (Ping timeout: 260 seconds) |
| 06:58:39 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 260 seconds) |
| 06:58:39 | × | jcarpenter2 quits (~lol@2603:3016:1e01:b980:dd5c:a977:63e6:618d) (Ping timeout: 260 seconds) |
| 06:58:39 | × | nisstyre quits (wes@user/nisstyre) (Ping timeout: 260 seconds) |
| 06:58:39 | × | hadronized quits (~phaazon@2001:41d0:a:fe76::1) (Ping timeout: 260 seconds) |
| 06:58:39 | × | landonf quits (landonf@mac68k.info) (Ping timeout: 260 seconds) |
| 06:58:39 | × | NemesisD quits (sid24071@id-24071.lymington.irccloud.com) (Ping timeout: 260 seconds) |
| 06:58:39 | × | integral quits (sid296274@user/integral) (Ping timeout: 260 seconds) |
| 06:58:39 | × | bsima quits (~bsima@2604:a880:400:d0::19f1:7001) (Ping timeout: 260 seconds) |
| 06:58:39 | × | nshepperd quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Ping timeout: 260 seconds) |
| 06:59:13 | → | beaky_ joins (~beaky@2a03:b0c0:0:1010::1e:a001) |
| 06:59:14 | × | [_________] quits (~oos95GWG@user/oos95GWG) (Ping timeout: 260 seconds) |
| 06:59:14 | × | liskin quits (~liskin@xmonad/liskin) (Ping timeout: 260 seconds) |
| 06:59:14 | × | mal1 quits (~mal@ns2.wyrd.be) (Ping timeout: 260 seconds) |
| 06:59:14 | × | beaky quits (~beaky@2a03:b0c0:0:1010::1e:a001) (Ping timeout: 260 seconds) |
| 06:59:14 | × | welterde quits (welterde@thinkbase.srv.welterde.de) (Ping timeout: 260 seconds) |
| 07:00:13 | → | delyan_ joins (sid523379@id-523379.hampstead.irccloud.com) |
| 07:00:18 | → | bjs joins (sid190364@user/bjs) |
| 07:00:19 | → | integral joins (sid296274@user/integral) |
| 07:00:19 | → | jonrh joins (sid5185@id-5185.ilkley.irccloud.com) |
| 07:00:30 | → | NemesisD joins (sid24071@id-24071.lymington.irccloud.com) |
| 07:00:32 | → | nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 07:00:35 | → | phaazon joins (~phaazon@2001:41d0:a:fe76::1) |
| 07:00:37 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 07:00:43 | → | liskin joins (~liskin@xmonad/liskin) |
| 07:00:48 | → | [_________] joins (~oos95GWG@user/oos95GWG) |
| 07:00:49 | → | mal1 joins (~mal@ns2.wyrd.be) |
| 07:00:53 | → | gmc joins (sid58314@id-58314.ilkley.irccloud.com) |
| 07:02:14 | Hobbyboy|BNC | is now known as Hobbyboy |
| 07:03:45 | → | landonf joins (landonf@mac68k.info) |
| 07:06:56 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) |
| 07:07:58 | → | CiaoSen joins (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) |
| 07:11:36 | → | nisstyre joins (wes@user/nisstyre) |
| 07:12:28 | → | sa1 joins (sid7690@id-7690.ilkley.irccloud.com) |
| 07:12:42 | → | welterde joins (welterde@thinkbase.srv.welterde.de) |
| 07:17:58 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 07:21:05 | × | euleritian quits (~euleritia@dynamic-176-000-009-143.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
| 07:21:22 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 07:25:27 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 07:39:12 | → | misterfish joins (~misterfis@22.1-12-147.kabelnoord.net) |
| 07:41:26 | ← | bailsman parts (~Mm1@revspace/participant/bailsman) (WeeChat 1.9.1) |
| 07:44:30 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 07:50:11 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Quit: on the move) |
| 07:51:29 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:54:08 | × | dysthesis quits (~dysthesis@user/dysthesis) (Remote host closed the connection) |
| 07:54:42 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 07:55:57 | → | machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net) |
| 08:02:34 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 08:10:01 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 08:10:18 | → | acidjnk_new3 joins (~acidjnk@p200300d6e72cfb650c5b23d5a7eb2b97.dip0.t-ipconnect.de) |
| 08:14:11 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 08:15:11 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 08:17:38 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:30:14 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 260 seconds) |
| 08:31:58 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:32:31 | × | dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds) |
| 08:34:23 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 08:34:42 | gehmehgeh | is now known as gmg |
| 08:39:30 | → | chele joins (~chele@user/chele) |
| 08:43:04 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) (Remote host closed the connection) |
| 08:43:24 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) |
| 08:45:06 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Ping timeout: 248 seconds) |
| 08:52:37 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 09:01:47 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 09:05:32 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 255 seconds) |
| 09:10:59 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 09:25:28 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 09:28:43 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) (Remote host closed the connection) |
| 09:29:02 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) |
| 09:29:26 | → | ZharMeny joins (~user@user/ZharMeny) |
| 09:29:50 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Ping timeout: 255 seconds) |
| 09:31:41 | → | hseg joins (~gesh@46.120.21.97) |
| 09:41:24 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 252 seconds) |
| 09:42:44 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 09:56:16 | × | CiaoSen quits (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) (Ping timeout: 258 seconds) |
| 10:02:30 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 10:07:04 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
| 10:09:07 | × | euphores quits (~SASL_euph@user/euphores) (Ping timeout: 264 seconds) |
| 10:15:09 | → | euphores joins (~SASL_euph@user/euphores) |
| 10:16:11 | → | hayk joins (~hayk@37.252.90.243) |
| 10:19:57 | <fr33domlover> | [exa]: Writing an actor system where a Chan needs to be able to hold one of the possible message types an actor can receive :) |
| 10:20:37 | <fr33domlover> | Leary: Thanks!! The gift is very helpful & package seems like what I need ^_^ |
| 10:20:41 | <fr33domlover> | *gist |
| 10:25:22 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 10:26:24 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 10:26:25 | <Leary> | fr33domlover: NP. However, with this context in mind, I suspect you don't actually want `match`. Instead, you probably want something like `handle :: Sum f xs -> Prod (Handler r f) xs -> r`, where `newtype Handler r f x = Handler (f x -> r)` and `data Prod f xs where { Nil :: Prod f '[]; (:~) :: f x -> Prod f xs -> Prod f (x:xs) }`. |
| 10:27:07 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 10:27:55 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 10:29:33 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2) |
| 10:43:24 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) (Remote host closed the connection) |
| 10:43:44 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) |
| 10:45:31 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 10:45:41 | <haskellbridge> | <sm> @where stack-guide |
| 10:45:58 | <sm> | @where stack-guide |
| 10:45:58 | <lambdabot> | https://docs.haskellstack.org/en/stable/GUIDE Stack User Guide |
| 10:46:05 | <sm> | @where+ stack-guide https://docs.haskellstack.org |
| 10:46:05 | <lambdabot> | Done. |
| 10:46:21 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 10:46:44 | <sm> | @where+ stack-script https://docs.haskellstack.org/en/stable/topics/scripts |
| 10:46:44 | <lambdabot> | Done. |
| 10:46:52 | × | acidjnk_new3 quits (~acidjnk@p200300d6e72cfb650c5b23d5a7eb2b97.dip0.t-ipconnect.de) (Ping timeout: 258 seconds) |
| 10:47:01 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 10:47:46 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 10:48:25 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 10:49:45 | → | cfricke joins (~cfricke@user/cfricke) |
| 10:52:47 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 10:55:20 | → | acidjnk_new3 joins (~acidjnk@p200300d6e72cfb65b49b2612b9f25dee.dip0.t-ipconnect.de) |
| 10:57:56 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 11:00:05 | × | acidjnk_new3 quits (~acidjnk@p200300d6e72cfb65b49b2612b9f25dee.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 11:00:55 | × | m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 244 seconds) |
| 11:01:33 | → | Din joins (~Din@201.20.110.242) |
| 11:01:38 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Client Quit) |
| 11:01:56 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 11:02:26 | × | Din quits (~Din@201.20.110.242) (Client Quit) |
| 11:02:51 | → | m5zs7k joins (aquares@web10.mydevil.net) |
| 11:10:24 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 252 seconds) |
| 11:13:00 | → | lortabac joins (~lortabac@88-125-6-227.subs.proxad.net) |
| 11:17:41 | → | CiaoSen joins (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) |
| 11:21:06 | × | dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds) |
| 11:22:55 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 11:23:40 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded) |
| 11:24:09 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
| 11:30:55 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving) |
| 11:31:12 | → | noumenon joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 11:31:32 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) (Remote host closed the connection) |
| 11:31:52 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) |
| 11:32:14 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
| 11:33:34 | × | noumenon quits (~noumenon@113.51-175-156.customer.lyse.net) (Client Quit) |
| 11:33:50 | → | ephilalethes joins (~noumenon@113.51-175-156.customer.lyse.net) |
| 11:34:23 | × | ephilalethes quits (~noumenon@113.51-175-156.customer.lyse.net) (Client Quit) |
| 11:38:43 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 11:41:16 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 11:47:48 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 12:00:44 | → | rvalue joins (~rvalue@user/rvalue) |
| 12:01:31 | phaazon | is now known as hadronized |
| 12:03:26 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 12:04:40 | × | tomku quits (~tomku@user/tomku) (Ping timeout: 252 seconds) |
| 12:04:54 | → | tomku joins (~tomku@user/tomku) |
| 12:08:10 | × | ddellacosta quits (~ddellacos@ool-44c73b99.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 12:08:42 | → | pkal joins (~pkal@2a01:4f8:1c1b:a321::1) |
| 12:09:49 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 12:14:54 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Quit: lunch) |
| 12:16:21 | × | misterfish quits (~misterfis@22.1-12-147.kabelnoord.net) (Ping timeout: 244 seconds) |
| 12:23:44 | → | kuribas joins (~user@ptr-17d51em4eigy5w8x89o.18120a2.ip6.access.telenet.be) |
| 12:31:38 | → | Square3 joins (~Square4@user/square) |
| 12:50:26 | → | misterfish joins (~misterfis@22.1-12-147.kabelnoord.net) |
| 12:55:47 | → | Digitteknohippie joins (~user@user/digit) |
| 12:56:26 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 12:56:31 | × | Digit quits (~user@user/digit) (Ping timeout: 264 seconds) |
| 13:10:37 | × | CiaoSen quits (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) (Ping timeout: 258 seconds) |
| 13:11:47 | Digitteknohippie | is now known as Digit |
| 13:12:43 | × | caubert quits (~caubert@user/caubert) (Ping timeout: 264 seconds) |
| 13:12:46 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Quit: power) |
| 13:14:06 | → | caubert joins (~caubert@user/caubert) |
| 13:17:21 | × | CrunchyFlakes quits (~CrunchyFl@ip92348280.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 13:19:45 | → | CrunchyFlakes joins (~CrunchyFl@146.52.130.128) |
| 13:22:18 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 13:24:14 | → | xelxebar_ joins (~xelxebar@wilsonb.com) |
| 13:24:33 | × | xelxebar quits (~xelxebar@wilsonb.com) (Ping timeout: 244 seconds) |
| 13:27:55 | × | jrm quits (~jrm@user/jrm) (Read error: Connection reset by peer) |
| 13:28:13 | → | jrm joins (~jrm@user/jrm) |
| 13:29:22 | × | pointlessslippe1 quits (~pointless@212.82.82.3) (Ping timeout: 265 seconds) |
| 13:31:39 | → | pointlessslippe1 joins (~pointless@212.82.82.3) |
| 13:39:32 | × | hayk quits (~hayk@37.252.90.243) (Quit: hayk) |
| 13:44:36 | → | Guest25 joins (~Guest25@user-5-173-144-2.play-internet.pl) |
| 13:44:41 | × | Guest25 quits (~Guest25@user-5-173-144-2.play-internet.pl) (Client Quit) |
| 13:44:55 | → | Guest25 joins (~Guest25@user-5-173-144-2.play-internet.pl) |
| 13:46:08 | <Guest25> | Hi, do you know if there are any haskellers groups in Poland? I tried to find somebody on #haskell-pl, but nobody is there |
| 13:50:34 | × | Guest25 quits (~Guest25@user-5-173-144-2.play-internet.pl) (Quit: Client closed) |
| 13:52:11 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
| 13:58:29 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out) |
| 13:59:37 | × | ZharMeny quits (~user@user/ZharMeny) (Read error: Connection reset by peer) |
| 14:00:43 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
| 14:02:03 | × | lortabac quits (~lortabac@88-125-6-227.subs.proxad.net) (Quit: WeeChat 4.2.2) |
| 14:02:29 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 248 seconds) |
| 14:05:19 | → | euleritian joins (~euleritia@dynamic-176-006-145-119.176.6.pool.telefonica.de) |
| 14:05:36 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 14:08:33 | <haskellbridge> | <sm> maybe they hang out somewhere else ? try to find some local user groups or haskell employers and see where they chat |
| 14:09:17 | <haskellbridge> | <sm> you could also try searching matrix, discord, telegram, etc |
| 14:10:53 | → | ZharMeny joins (~user@user/ZharMeny) |
| 14:18:05 | → | raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) |
| 14:27:00 | → | danse-221 joins (~danse-nr3@user/danse-nr3) |
| 14:29:05 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) (Ping timeout: 248 seconds) |
| 14:39:29 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 14:39:58 | → | Square joins (~Square@user/square) |
| 14:41:51 | × | euleritian quits (~euleritia@dynamic-176-006-145-119.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 14:42:08 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 14:43:20 | × | Square3 quits (~Square4@user/square) (Ping timeout: 272 seconds) |
| 14:49:55 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 14:50:31 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 14:53:16 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 14:57:25 | × | ZharMeny quits (~user@user/ZharMeny) (Ping timeout: 248 seconds) |
| 15:01:04 | × | waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
| 15:02:15 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 15:06:13 | → | ZharMeny joins (~user@user/ZharMeny) |
| 15:08:31 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 15:14:29 | × | misterfish quits (~misterfis@22.1-12-147.kabelnoord.net) (Ping timeout: 260 seconds) |
| 15:31:29 | danse-221 | is developing with `undefined` today |
| 15:35:41 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 15:36:18 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 15:49:15 | <Hecate> | danse-221: hello https://github.com/ekmett/placeholder/ |
| 15:50:07 | <danse-221> | @hackage placeholder |
| 15:50:07 | <lambdabot> | https://hackage.haskell.org/package/placeholder |
| 15:52:15 | <danse-221> | well, i don't mind using `undefined`, want to understand its semantics better. Have some very very blurry memories about some post i've read showcasing meaningful usage of it. Thanks anyway |
| 15:52:34 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 15:53:31 | <mauke> | @src undefined |
| 15:53:31 | <lambdabot> | undefined = error "Prelude.undefined" |
| 15:53:46 | <mauke> | @src error |
| 15:53:46 | <lambdabot> | error s = throw (ErrorCall s) |
| 15:54:21 | <danse-221> | hmm way less mysterious than i thought... maybe i recall wrong |
| 15:54:42 | <mauke> | @src throw |
| 15:54:42 | <lambdabot> | throw exception = raise# exception |
| 15:54:50 | <mauke> | @src raise# |
| 15:54:51 | <lambdabot> | Source not found. I am sorry. |
| 15:55:01 | <danse-221> | i want to play with these more |
| 15:55:09 | <danse-221> | @src listToMaybe |
| 15:55:09 | <lambdabot> | listToMaybe [] = Nothing |
| 15:55:09 | <lambdabot> | listToMaybe (a:_) = Just a |
| 15:55:13 | <danse-221> | :P |
| 15:57:41 | <danse-221> | i think that in the post, `undefined` was used to placehold bottom or something similar |
| 15:58:21 | <danse-221> | maybe it was the common usage of it as a didactical tool to explain on-demand evaluation |
| 16:05:49 | × | machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 16:13:33 | × | raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds) |
| 16:19:53 | × | kuribas quits (~user@ptr-17d51em4eigy5w8x89o.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 16:20:59 | × | hseg quits (~gesh@46.120.21.97) (Ping timeout: 260 seconds) |
| 16:29:31 | → | Square3 joins (~Square4@user/square) |
| 16:32:42 | × | Square quits (~Square@user/square) (Ping timeout: 252 seconds) |
| 16:35:12 | <haskellbridge> | <mauke> O great lambdabot, |
| 16:35:12 | <haskellbridge> | :t traverse_ |
| 16:35:13 | <lambdabot> | (Foldable t, Applicative f) => (a -> f b) -> t a -> f () |
| 16:35:39 | <stefan-__> | how can I enable the hls semanticTokens plugin when using https://github.com/rockofox/intellij-haskell-lsp ? |
| 16:41:10 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-203f-04a9-9365-acfd.rev.sfr.net) (Remote host closed the connection) |
| 16:43:26 | × | danse-221 quits (~danse-nr3@user/danse-nr3) (Quit: nice evening) |
| 16:43:53 | <EvanR> | undefined can be used correctly in a place that is provably never going to be evaluated |
| 16:44:35 | <EvanR> | when unfortunately the type system can't do that proof for you, in which case it's probably not necessary to use the undefined case |
| 16:45:20 | <EvanR> | when the types say it can never be evaluated you can probably get away without an undefined |
| 16:52:11 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 17:02:44 | → | tremon joins (~tremon@83.80.159.219) |
| 17:05:32 | → | danse-nr3 joins (~danse-nr3@user/danse-nr3) |
| 17:14:46 | → | waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
| 17:16:55 | → | Guest54 joins (~Guest54@ip-046-005-000-201.um12.pools.vodafone-ip.de) |
| 17:17:01 | × | Guest54 quits (~Guest54@ip-046-005-000-201.um12.pools.vodafone-ip.de) (Client Quit) |
| 17:17:26 | → | Guest54 joins (~Guest54@ip-046-005-000-201.um12.pools.vodafone-ip.de) |
| 17:17:27 | ← | Guest54 parts (~Guest54@ip-046-005-000-201.um12.pools.vodafone-ip.de) () |
| 17:28:01 | → | ss4 joins (~wootehfoo@user/wootehfoot) |
| 17:29:13 | → | Guest25 joins (~Guest25@user-5-173-208-28.play-internet.pl) |
| 17:31:56 | <Inst> | i wonder what the relationship between listToMaybe and safeHead is? |
| 17:32:11 | <Inst> | since head usage is being strongly discouraged, and iirc safeHead isn't in base |
| 17:32:30 | <Inst> | do people actually use listToMaybe as a surrogate for safeHead? |
| 17:33:02 | × | Fijxu_ quits (~Fijxu@user/fijxu) (Quit: XD!!) |
| 17:33:17 | <danse-nr3> | i got pointed at it here after complaining about head's partiality |
| 17:33:43 | <dolio> | When would you use safeHead? |
| 17:33:57 | <danse-nr3> | me? |
| 17:34:12 | <dolio> | Anyone. |
| 17:34:31 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 17:34:36 | × | Guest25 quits (~Guest25@user-5-173-208-28.play-internet.pl) (Quit: Client closed) |
| 17:34:41 | <danse-nr3> | i'd just alias that to `head` and use it everywhere |
| 17:34:59 | <danse-nr3> | (same for tail, last, and the rest) |
| 17:35:00 | <dolio> | Would you, though? |
| 17:35:05 | <danse-nr3> | sure |
| 17:35:22 | <dolio> | Why not just match on the list insteada of getting a maybe head and matching on a maybe? |
| 17:35:33 | <Leary> | Usually there's no point in it, relative to just pattern matching. I /would/ use it in a context that already expects a `Maybe` value. |
| 17:35:46 | <danse-nr3> | for composition dolio |
| 17:36:48 | <danse-nr3> | also, i don't really see a point for partial functions in my haskell |
| 17:39:18 | <dolio> | If you have a function already written with a Maybe, then it makes sense. Hence listToMaybe. But you don't need to convert to Maybe in situ. |
| 17:42:44 | <dolio> | E.G. maybe n f . safeHead = foldr (const . f) n |
| 17:43:29 | → | cfricke joins (~cfricke@user/cfricke) |
| 17:46:53 | <EvanR> | safeHead is the same thing as listToMaybe right |
| 17:47:04 | <dolio> | That's my assumption. |
| 17:47:12 | <Franciman> | maybe you can prove it using free theorems by wadler? |
| 17:47:17 | <EvanR> | in which case I point out safeHead is potentially not really safe |
| 17:47:18 | <Franciman> | since its a natural transformation from list to maybe |
| 17:47:20 | <Franciman> | etc? |
| 17:47:35 | <EvanR> | in situations where Nothing is supposed to be impossible |
| 17:47:52 | <EvanR> | or already known to be impossible |
| 17:48:18 | <dolio> | Franciman: Nah. Either one could be picking any element. |
| 17:48:27 | <danse-nr3> | that would at most be wasteful, not unsafe EvanR |
| 17:48:31 | <Franciman> | dolio: how? |
| 17:48:35 | <Franciman> | it must be a natural transformation |
| 17:48:39 | <Franciman> | it can't depend on the type |
| 17:48:52 | <EvanR> | after you verified one way or another than Nothing or empty list is impossible, what would you do, crash? |
| 17:48:53 | <Franciman> | err i mean, assume that its type is: f :: List a -> Maybe a |
| 17:49:00 | <Franciman> | how do you lick a value of Maybe a, independent of a |
| 17:49:03 | <Franciman> | ah fuck undefined! |
| 17:49:05 | <dolio> | Every safe'nth'value is a natural transformation. |
| 17:49:11 | <c_wraith> | Ugh. I really don't like Data.List.NonEmpty. I understand maximizing shared representation with [] for fast conversion, but it's really an annoying representation to work with |
| 17:49:22 | <danse-nr3> | just handle the Maybe EvanR |
| 17:49:31 | <Franciman> | yes but i mean [] con only be mapped to nithing |
| 17:49:31 | <danse-nr3> | with a branch that's a waste |
| 17:49:35 | <danse-nr3> | nothing unsafe |
| 17:49:46 | <EvanR> | you handled it already or proved it's impossible |
| 17:50:00 | <danse-nr3> | if you handled there is no maybe |
| 17:50:03 | <EvanR> | after a certain point handling it the original way makes no sense |
| 17:50:06 | <danse-nr3> | if you proved it, here's the waste |
| 17:50:33 | <EvanR> | you're too late |
| 17:50:55 | <EvanR> | c_wraith, mentioned NonEmpty as being a way to use types to tag the check as having been made or whatever |
| 17:51:07 | <danse-nr3> | yeah NonEmpty is cool |
| 17:51:08 | <EvanR> | but you may just want to use list anyway |
| 17:51:13 | <Franciman> | dolio: ah i see what you mean sorry xd |
| 17:51:16 | <EvanR> | then the Nothing would be impossible later |
| 17:51:25 | <dolio> | :) |
| 17:51:35 | <danse-nr3> | so what? Where's the unsafety? |
| 17:51:54 | <EvanR> | because there is not always a sensible way to "handle" the impossible thing |
| 17:52:12 | <EvanR> | usually, I struggle to figure out what to do, and put crash |
| 17:52:25 | <danse-nr3> | use NonEmpty then |
| 17:52:37 | <EvanR> | as an example, the output of the group gives a list of non empty things |
| 17:52:47 | <EvanR> | there's no "handling" the empty group |
| 17:53:04 | <danse-nr3> | % :t group |
| 17:53:04 | <yahb2> | <interactive>:1:1: error: Variable not in scope: group |
| 17:53:09 | <EvanR> | or you could put crash, then what's the difference between "unsafe" functions |
| 17:53:15 | <danse-nr3> | % :t Data.List.group |
| 17:53:15 | <yahb2> | Data.List.group :: Eq a => [a] -> [[a]] |
| 17:53:39 | <danse-nr3> | yeah why would i put crash? Answer: i wouldn't |
| 17:53:47 | <mauke> | % :t Data.List.NonEmpty.group |
| 17:53:47 | <yahb2> | Data.List.NonEmpty.group ; :: (Foldable f, Eq a) => f a -> [GHC.Base.NonEmpty a] |
| 17:53:57 | <EvanR> | you could use NonEmpty for this case |
| 17:54:17 | <danse-nr3> | mauke reading your mind =D |
| 17:54:19 | <EvanR> | but in some cases there may not be a NonEmpty blessed function for it |
| 17:54:29 | <EvanR> | and it's up to you to implement it |
| 17:54:48 | <EvanR> | making the type system 100% satisfied may not be feasible |
| 17:55:01 | <EvanR> | also NonEmpty is a pain sometimes |
| 17:55:43 | danse-nr3 | shrugs |
| 17:56:17 | <EvanR> | so the safe can be misleading and listToMaybe is more like "does what it says on the tin" |
| 17:56:42 | <danse-nr3> | i disagree |
| 17:57:20 | <EvanR> | if you try to write java using a type system that wraps literally everything in Maybe, that doesn't make it more safe |
| 17:57:32 | <EvanR> | when you handle each nothing by throwing an exception |
| 17:58:03 | <danse-nr3> | that due to how you handle, not what you handle |
| 17:58:38 | <EvanR> | it's easier to let the exception be thrown in that case and not write all the extra code |
| 17:58:48 | <EvanR> | and not less safe |
| 17:58:52 | <danse-nr3> | pfff |
| 18:00:06 | → | acidjnk_new3 joins (~acidjnk@p200300d6e72cfb65b0b5f270b6019fe0.dip0.t-ipconnect.de) |
| 18:00:47 | → | misterfish joins (~misterfis@22.1-12-147.kabelnoord.net) |
| 18:05:24 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 258 seconds) |
| 18:07:19 | → | lxsameer joins (lxsameer@Serene/lxsameer) |
| 18:15:25 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 18:17:33 | × | danse-nr3 quits (~danse-nr3@user/danse-nr3) () |
| 18:22:19 | × | driib3 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 18:27:34 | → | neuroevolutus joins (~neuroevol@146.70.211.135) |
| 18:31:23 | → | driib3 joins (~driib@vmi931078.contaboserver.net) |
| 18:33:40 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.2.2) |
| 18:35:03 | × | neuroevolutus quits (~neuroevol@146.70.211.135) (Ping timeout: 256 seconds) |
| 18:40:36 | × | vgtw quits (~vgtw@user/vgtw) (Quit: ZNC - https://znc.in) |
| 18:41:57 | <Inst> | so it's actually more idiomatic to use nonempty these days? |
| 18:42:02 | <Inst> | and just skip lists? |
| 18:42:17 | → | CiaoSen joins (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) |
| 18:45:53 | × | driib3 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 18:46:19 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (Remote host closed the connection) |
| 18:47:14 | → | Fischmiep joins (~Fischmiep@user/Fischmiep) |
| 18:48:16 | → | driib3 joins (~driib@vmi931078.contaboserver.net) |
| 18:51:38 | → | segfaultfizzbuzz joins (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) |
| 18:55:19 | × | ZharMeny quits (~user@user/ZharMeny) (Ping timeout: 264 seconds) |
| 18:57:37 | → | hseg joins (~gesh@46.120.21.97) |
| 19:00:00 | → | vgtw joins (~vgtw@user/vgtw) |
| 19:00:24 | → | neuroevolutus joins (~neuroevol@37.19.200.148) |
| 19:04:42 | <EvanR> | yes lists are out. Maybe (NonEmpty a) is in |
| 19:05:09 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:05:10 | → | ZharMeny joins (~user@user/ZharMeny) |
| 19:06:24 | <mauke> | I don't think I've ever used skiplists |
| 19:06:51 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 19:07:41 | <Inst> | sarcasm noted |
| 19:07:45 | <c_wraith> | skiplists are kinda like "what if a binary tree fell over?" |
| 19:07:58 | <Inst> | wtf |
| 19:07:59 | <Inst> | https://en.wikipedia.org/wiki/Skip_list |
| 19:09:23 | <Inst> | yeah i saw the nonempty interface, it has to use lists |
| 19:09:29 | <Inst> | since if you filter it returns a list |
| 19:09:53 | <Inst> | wait, you're being sarcastic, right, EvanR? |
| 19:10:09 | <EvanR> | lol |
| 19:12:49 | × | segfaultfizzbuzz quits (~segfaultf@23-93-79-84.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
| 19:13:40 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 19:18:07 | × | neuroevolutus quits (~neuroevol@37.19.200.148) (Ping timeout: 256 seconds) |
| 19:22:19 | × | hseg quits (~gesh@46.120.21.97) (Quit: WeeChat 4.3.5) |
| 19:23:54 | → | neuroevolutus joins (~neuroevol@37.19.200.148) |
| 19:24:05 | <Inst> | https://www.imn.htwk-leipzig.de/~waldmann/etc/untutorial/list-or-not-list/ |
| 19:34:45 | × | CiaoSen quits (~Jura@2a05:5800:241:5b00:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds) |
| 19:39:16 | → | machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net) |
| 19:40:00 | → | zrubi joins (~halloy540@147.235.212.157) |
| 19:41:07 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 19:46:56 | <zrubi> | i want to implement function `removeAt` which get an Int and a String and give back a tuple with the Char and the String without this Char. |
| 19:47:00 | <zrubi> | so for example removeAt 2 "asdf" will give back ('s',"adf"). i implemented it using give and take (you can see it here: t.ly/uqlei). but i always frustrated that i don't know how to implement things without built in function. i want to try to implement it without drop and take or any other non trivial haskell function, but i don't have a clue how to do it. can you please guide me on how can i achieve this only using "simple" haskell code? |
| 19:47:32 | <geekosaur> | recursion and pattern matching |
| 19:48:18 | <zrubi> | geekosaur: yes this is the thing that i know. i don't know hot to get this done with recursion. |
| 19:50:19 | <geekosaur> | then you need to learn about recursion in Haskell. https://en.wikibooks.org/wiki/Haskell/Recursion |
| 19:50:43 | <haskellbridge> | <bdub> https://books.goalkicker.com/HaskellBook/ |
| 19:51:41 | <zrubi> | i know about recursion on haskell :-). but there are functions that are not so "easy" to implement. this function is one of them. |
| 19:52:03 | <haskellbridge> | <bdub> Sounds like you about to learn something new ;) |
| 19:52:31 | <haskellbridge> | <thirdofmay18081814goya> "sum [1, 2, 3]" produces "couldn't match expected type List Int with [Int]", how come? |
| 19:52:39 | <geekosaur> | I know how I would do it. One hint: use a helper function with a different tuple type |
| 19:52:47 | <haskellbridge> | <thirdofmay18081814goya> * [a0]", |
| 19:53:02 | <monochrom> | For this one you may better first aim at something like splitAt, e.g., splitAt 2 "asdf" = ("a", "sdf"). splitAt is in the library, but is also a straightforward DIY recursion. |
| 19:53:03 | <Inst> | thirdofmay18081814goya: what's the type signature on your function? |
| 19:53:27 | <haskellbridge> | <thirdofmay18081814goya> Inst: "List Int -> Int" |
| 19:53:31 | <monochrom> | (and the library splitAt is pretty much the same DIY recursion anyone would try) |
| 19:53:41 | → | ezzieygu1wuf joins (~Unknown@user/ezzieyguywuf) |
| 19:54:00 | <Inst> | i can guess what List is, but how do you define the binding List in your module? |
| 19:54:06 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 252 seconds) |
| 19:54:26 | <haskellbridge> | <thirdofmay18081814goya> ah |
| 19:54:36 | <haskellbridge> | <thirdofmay18081814goya> a module was shadowing normal usage |
| 19:54:44 | <monochrom> | This is no harder than loops. Whether recursion or loops, the hard part is identifying the right helper problem to aim at, which is usually not the original problem. |
| 19:54:48 | <haskellbridge> | <thirdofmay18081814goya> thanks for the help! |
| 19:54:49 | <geekosaur> | guessing what it is isn't the issue. the issue is that Haskell won't treat a user-defined `List` type the same as the built-in list type |
| 19:55:25 | <zrubi> | monochrom: exactly! |
| 19:55:39 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 260 seconds) |
| 19:55:52 | <zrubi> | i mean you said what i felt :) |
| 19:56:22 | <monochrom> | This is also why computing suffers the halting problem and math/logic suffers the incompleteness theorem. |
| 19:57:46 | <monochrom> | One way to rephrase them is that in the most general case you never know what is the helper function/lemma you need. |
| 19:57:53 | <zzz> | geekosaur: it wont? |
| 19:58:02 | × | lbseale_ quits (~quassel@user/ep1ctetus) (Ping timeout: 255 seconds) |
| 19:58:21 | <geekosaur> | no? they're ddifferent types as far as the typechecker is concerned |
| 19:58:31 | <geekosaur> | a `Foldable` instance would paper over it |
| 19:58:40 | → | lbseale joins (~quassel@user/ep1ctetus) |
| 19:59:06 | <geekosaur> | :t sum |
| 19:59:07 | <lambdabot> | (Foldable t, Num a) => t a -> a |
| 20:00:56 | <zzz> | ah sry i see what you mean. |
| 20:02:35 | → | alexherbo2 joins (~alexherbo@2a02-8440-320d-0f2a-505d-a57d-46e4-6611.rev.sfr.net) |
| 20:12:17 | <Inst> | also zrubi: tbh, what's the type of your function? |
| 20:14:22 | <zrubi> | Inst: removeAt :: Int -> [a] -> (a,[a]) |
| 20:16:55 | × | lxsameer quits (lxsameer@Serene/lxsameer) (Ping timeout: 264 seconds) |
| 20:18:53 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 20:25:16 | → | sawilagar_ joins (~sawilagar@user/sawilagar) |
| 20:27:44 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 260 seconds) |
| 20:54:39 | → | Batzy joins (~quassel@user/batzy) |
| 20:55:24 | → | rdcdr joins (~rdcdr@user/rdcdr) |
| 20:55:36 | × | rdcdr_ quits (~rdcdr@75-172-30-214.tukw.qwest.net) (Ping timeout: 244 seconds) |
| 20:57:28 | × | neuroevolutus quits (~neuroevol@37.19.200.148) (Quit: Client closed) |
| 20:59:19 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 20:59:44 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:04:38 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 21:04:57 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:10:41 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:11:31 | → | cheater joins (~Username@user/cheater) |
| 21:12:58 | <zrubi> | i think i nailed it: https://paste.tomsmeding.com/ro6VWeE3/raw/1 ("simple" haskell only using helper function that collect a list of elements i by pass till i found the right one. i don't know what to do when someone enter 0 or lower but this is a minor issue for me. i'm gald anyway) |
| 21:17:47 | <zrubi> | im very happy with the `baba` name LOL |
| 21:17:59 | <Rembane> | BABA IS YOU? |
| 21:19:07 | <zrubi> | no, i dont know where is it from. maybe forrest gump got in my head? (i see it is written differently) |
| 21:19:16 | <monochrom> | Ugh please use 0-based indexing. |
| 21:19:49 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 21:19:58 | <Inst> | zrubi: do you have spare time or are you up for a challenge? |
| 21:21:56 | <zrubi> | Inst: well i have spare time but i don't know if i'm up for a challenge but i'll try (and maybe i'm failed today, i'll try another day) |
| 21:22:36 | <Inst> | ++ is O(n), with the recursion, you're effectively O(n^2) |
| 21:22:37 | <zrubi> | monochrom: what do tou mean by that? |
| 21:24:56 | × | dyniec quits (~dyniec@dybiec.info) (Quit: WeeChat 4.2.2) |
| 21:25:10 | <zrubi> | Inst: i saw those creatures before but i didn't studied computer science so i don't know the difference. i understand (i think) that the one is more time consuming than the other. os what is the question? |
| 21:25:25 | <zrubi> | os = so |
| 21:25:32 | <zrubi> | if i can make it faster? |
| 21:25:38 | <zrubi> | efficient? |
| 21:25:49 | <Inst> | ya, try to use a bit more pattern matching |
| 21:26:10 | <haskellbridge> | <thirdofmay18081814goya> what the usecase for "Dynamic"? |
| 21:26:13 | <Inst> | without ++ or reverse |
| 21:28:52 | <Inst> | but tbh this particular pattern of recursion is, at least for me, hard, might be for you as well, so you might not want to spend too much time on trying to do it without (++) or reverse |
| 21:29:36 | <monochrom> | In "asdf", 'a' is at index 0, 's' is at index 1. |
| 21:29:53 | <monochrom> | One of the few things that Python got right. |
| 21:30:56 | × | michalz quits (~michalz@185.246.207.197) (Remote host closed the connection) |
| 21:31:53 | <Inst> | matlab usually defaults to 1-based indexing (the first term is indexed 1), fortran does 1 based indexing, julia does 1 based indexing |
| 21:32:22 | <Inst> | Haskell and most other languages default to 0 |
| 21:32:34 | <monochrom> | Notice how they aim at traditional mathematicians not enlightened computer scientists. :) |
| 21:32:38 | <Franciman> | cringe |
| 21:33:37 | <Rembane> | Dyalog APL does both |
| 21:34:12 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
| 21:34:12 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 21:34:44 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 21:34:45 | <darkling> | Visual Basic had an option to do either. So, I think, did perl. And lua doesn't care, because everything's a map. :) |
| 21:35:14 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 21:35:39 | × | ZharMeny quits (~user@user/ZharMeny) (Remote host closed the connection) |
| 21:35:52 | → | ZharMeny joins (~user@user/ZharMeny) |
| 21:35:54 | <Inst> | but when you're designing a function, people in Haskell will assume 0-based indexing, and if you don't stick to that convention, you'll create annoying bugs for your users who assume the norm |
| 21:37:15 | <Inst> | hence why many people can be very opinionated about it |
| 21:37:25 | <c_wraith> | did someone expect consistency in indexing? https://xkcd.com/163/ |
| 21:37:37 | <geekosaur> | perl used to, yes ($[) |
| 21:38:22 | <geekosaur> | meanwhile mathematicians can't even decide whether 0 is a valid number for this kind of thing 🙂 |
| 21:38:30 | <c_wraith> | also, the array library allows basically any indexing. |
| 21:38:38 | <darkling> | Remind me, what's a number? :) |
| 21:39:13 | <c_wraith> | oh, I asked a bunch of mathematicians about that once. they finally agreed: a number is a thing that looks and acts like a number |
| 21:39:22 | <monochrom> | :) |
| 21:39:33 | × | acidjnk_new3 quits (~acidjnk@p200300d6e72cfb65b0b5f270b6019fe0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 21:39:48 | <darkling> | :) |
| 21:40:12 | <Inst> | so a number is a bottom? |
| 21:40:24 | <monochrom> | I agree with that. They are saying the equivalent of the Num class. >:D |
| 21:42:58 | ← | Ellenor parts (ellenor@callbox.trd.is) (Now, I'm the vixen with a knife, and I want blood.) |
| 21:43:48 | <monochrom> | When I taught monads, I began with "I won't answer 'what is a monad?', unless you know how to answer 'what is a number?'". I explained that we are looking at axioms and APIs, asking for examples and more examples is fair, asking "what is" is not. |
| 21:45:34 | <dolio> | A number is a decategorification of a set. |
| 21:45:46 | <monochrom> | :( |
| 21:45:53 | <monochrom> | :) |
| 21:52:11 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 22:06:17 | × | tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in) |
| 22:11:18 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 22:13:08 | <EvanR> | darkling, the dual of a geometric diagram |
| 22:15:01 | <EvanR> | I support 0 based or 1 based. But 2 based is beyond the pale |
| 22:16:11 | <darkling> | I did once create a -3 based array for something. |
| 22:16:36 | <Inst> | e-based indexing is better, and each subsequent index is a power of e |
| 22:17:14 | <EvanR> | ok but what is the first elements index |
| 22:18:10 | <Inst> | if it's 0, then it's 1, if it's 1, then it's e, which apparently offends both indexing crowds |
| 22:18:32 | <Inst> | beyond being intentionally designed to be comedic by beig non-integer indexing |
| 22:18:51 | <EvanR> | that brings nothing new to the table. Allow any real number index |
| 22:19:15 | <EvanR> | continuous memory |
| 22:21:16 | <Inst> | imply such that the return of a particular continuous index provides the average of the two adjacent cells |
| 22:21:16 | <zrubi> | Inst: can you give me a *little* clue? |
| 22:22:39 | <Inst> | yeah, i probably sohuldn't have brought it up, but do you how to use let, where, or case of? any of the three is fine |
| 22:24:38 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:27:18 | <EvanR> | when you say average of two values I hear monoid (or semigroup or something) |
| 22:27:51 | <EvanR> | but no, the "array" would be some smooth function |
| 22:32:44 | <zrubi> | Inst: thanks. it's late in here so maybe in another time. have a good day/night and thanks again :-) |
| 22:33:06 | × | califax quits (~califax@user/califx) (Ping timeout: 260 seconds) |
| 22:33:41 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 22:33:48 | × | zrubi quits (~halloy540@147.235.212.157) (Remote host closed the connection) |
| 22:34:06 | → | califax joins (~califax@user/califx) |
| 22:34:16 | × | dysthesis quits (~dysthesis@user/dysthesis) (Ping timeout: 260 seconds) |
| 22:34:59 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 22:35:20 | <EvanR> | oof, average is not assoc |
| 22:35:35 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 22:38:43 | × | AlexZenon quits (~alzenon@94.233.240.239) (Ping timeout: 258 seconds) |
| 22:40:19 | × | AlexNoo quits (~AlexNoo@94.233.240.239) (Ping timeout: 260 seconds) |
| 22:41:47 | <monochrom> | uncountable memory sounds like fantastic :) |
| 22:41:57 | → | AlexNoo joins (~AlexNoo@178.34.160.210) |
| 22:44:49 | <EvanR> | this interface would work [Bit] -> [Bit] |
| 22:45:19 | <haskellbridge> | <thirdofmay18081814goya> can I make this pointfree without "pure"? "(<$>) f (State g) = State (Data.Bifunctor.first f . g)" |
| 22:45:25 | <EvanR> | don't try to add offsets to the index though |
| 22:45:29 | <haskellbridge> | <thirdofmay18081814goya> can I make this pointfree without "pure"? |
| 22:45:29 | <haskellbridge> | "(<$>) f (State g) = State (Data.Bifunctor.first f . g)" |
| 22:47:57 | <haskellbridge> | <thirdofmay18081814goya> how would you make "(<$>) f (State g) = State (Data.Bifunctor.first f . g)" pointfree? |
| 22:49:09 | <monochrom> | I wouldn't. |
| 22:49:57 | <monochrom> | But try rewriting to: fmap f s = State (first f . runState s) |
| 22:52:39 | → | AlexZenon joins (~alzenon@178.34.160.210) |
| 22:58:34 | <monochrom> | EvanR: Yeah, average is super annoying. I ended up defining the helper type "data S a = S{total :: a, count :: Int}" then it's assoc. Then I put it on the exam. :) |
| 22:59:22 | <monochrom> | "Write the Semigroup and Monoid instances of it" |
| 22:59:37 | <EvanR> | coooooool |
| 23:01:21 | <monochrom> | Then the next exam I went overboard with "data S a = S{count :: Int, total :: a, sumOfSquares :: a}" so it covers all of statistics: count, average, sample deviation. |
| 23:02:46 | <EvanR> | delay the division as long as possible, very lazy |
| 23:05:48 | × | sawilagar_ quits (~sawilagar@user/sawilagar) (Ping timeout: 244 seconds) |
| 23:05:59 | <haskellbridge> | <thirdofmay18081814goya> consider "f :: a -> b -> c" and "g :: a -> b". is "\f g x -> f x (g x)" an instance of anything general |
| 23:06:35 | <monochrom> | It's (<*>) of the (->)e Applicative. |
| 23:06:50 | <haskellbridge> | <thirdofmay18081814goya> monochrom: ty! |
| 23:08:30 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 23:10:45 | <EvanR> | you just discovered the S combinator |
| 23:11:11 | <EvanR> | not to be confused with data S a = S { count :: Int, total :: a } |
| 23:14:21 | <haskellbridge> | <thirdofmay18081814goya> neato! |
| 23:14:52 | × | dysthesis quits (~dysthesis@user/dysthesis) (Remote host closed the connection) |
| 23:15:19 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 23:19:04 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 23:21:44 | → | sawilagar_ joins (~sawilagar@user/sawilagar) |
| 23:23:11 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 258 seconds) |
| 23:34:00 | <dostoyevsky2> | Is the idea of structured recursion common in functional languages? Or where did that originate? |
| 23:35:14 | <dostoyevsky2> | Oh, this is a math concept actually? Noetherian induction |
| 23:37:33 | × | alexherbo2 quits (~alexherbo@2a02-8440-320d-0f2a-505d-a57d-46e4-6611.rev.sfr.net) (Remote host closed the connection) |
| 23:37:50 | <jackdk> | I never found the "`S` = `(<*>)` for `((->) e)`" framing especially helpful. I think about the purpose of `S` as "plumb the third argument through to the first two", that is `S f g x = (f x) (g x)`. (Similarly, `B f g x = f (g x)` happens to be `(.)` and `C f g x = (f x) g` happens to be `flip`, but I consider their "purpose" to be plumbing `x` to one side or the other. It is helpful to take those intuitions back the other way, if you like point-free) |
| 23:38:46 | → | pavonia joins (~user@user/siracusa) |
| 23:44:16 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds) |
| 23:47:30 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 23:47:59 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:48:41 | × | misterfish quits (~misterfis@22.1-12-147.kabelnoord.net) (Ping timeout: 244 seconds) |
| 23:59:11 | <dolio> | S is contraction+exchange. K is weakening. |
All times are in UTC on 2024-08-12.