Home liberachat/#haskell: Logs Calendar

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.