Home liberachat/#haskell: Logs Calendar

Logs on 2026-02-05 (liberachat/#haskell)

00:07:26 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:10:09 trickard_ is now known as trickard
00:12:29 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:13:12 weary-traveler joins (~user@user/user363627)
00:13:29 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
00:15:02 EvanR joins (~EvanR@user/evanr)
00:16:19 Sgeo joins (~Sgeo@user/sgeo)
00:21:30 vidak joins (~vidak@2407:e400:7800:2c01:d0be:76f8:cc84:bd4a)
00:23:10 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:27:42 × haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
00:27:50 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
00:34:58 × Googulator quits (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu) (Quit: Client closed)
00:35:08 cyphase joins (~cyphase@user/cyphase)
00:35:12 Googulator joins (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu)
00:38:19 × w00ter quits (~w00ter@user/w00ter) (Quit: Leaving...)
00:38:56 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:43:53 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
00:50:14 Square2 joins (~Square@user/square)
00:54:43 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:55:18 × Tuplanolla quits (~Tuplanoll@85-156-32-207.elisa-laajakaista.fi) (Quit: Leaving.)
00:58:52 × m_a_r_k quits (~m_a_r_k@archlinux/support/mark) (Ping timeout: 256 seconds)
00:59:43 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:01:42 × xff0x quits (~xff0x@2405:6580:b080:900:d171:1c19:51a5:d6b5) (Ping timeout: 256 seconds)
01:03:03 × tremon quits (~tremon@83.80.159.219) (Remote host closed the connection)
01:08:07 × otto_s quits (~user@p5de2f01c.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
01:09:30 otto_s joins (~user@p4ff27c83.dip0.t-ipconnect.de)
01:10:19 × acidjnk quits (~acidjnk@p200300d6e700e57835d41376842fa308.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
01:10:31 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:10:33 m_a_r_k joins (~m_a_r_k@archlinux/support/mark)
01:14:56 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:25:52 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:26:51 × hakutaku quits (~textual@user/hakutaku) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:28:44 omidmash0 joins (~omidmash@user/omidmash)
01:29:34 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 246 seconds)
01:29:55 w00ter joins (~w00ter@user/w00ter)
01:31:13 × omidmash quits (~omidmash@user/omidmash) (Ping timeout: 260 seconds)
01:31:13 omidmash0 is now known as omidmash
01:32:43 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
01:43:54 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:48:37 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
01:59:15 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:03:51 hakutaku joins (~textual@user/hakutaku)
02:04:07 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
02:05:10 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
02:15:05 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:15:18 × hakutaku quits (~textual@user/hakutaku) (Quit: My MacBook has gone to sleep. ZZZzzz…)
02:20:25 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
02:30:50 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:34:23 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 265 seconds)
02:35:44 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:40:23 pavonia_ joins (~user@user/siracusa)
02:40:35 × pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer)
02:40:56 pavonia_ is now known as pavonia
02:46:38 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:51:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:59:27 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
02:59:49 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
03:00:01 × attlin quits (~user@user/attlin) (Quit: Leaving)
03:02:00 attlin joins (~user@user/attlin)
03:02:26 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:09:37 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
03:20:29 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:25:08 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
03:35:51 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:40:31 × Googulator quits (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu) (Quit: Client closed)
03:40:45 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
03:40:47 Googulator joins (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu)
03:48:50 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:54:08 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
04:00:19 × jreicher quits (~joelr@user/jreicher) (Ping timeout: 264 seconds)
04:00:56 jreicher joins (~joelr@user/jreicher)
04:01:43 peterbecich joins (~Thunderbi@71.84.33.135)
04:02:31 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
04:02:42 chexum joins (~quassel@gateway/tor-sasl/chexum)
04:04:37 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:07:02 × omidmash quits (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat)
04:09:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
04:11:53 omidmash joins (~omidmash@user/omidmash)
04:14:02 jmcantrell_ joins (~weechat@user/jmcantrell)
04:18:16 × Pozyomka quits (~pyon@user/pyon) (Ping timeout: 246 seconds)
04:20:14 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
04:20:16 Pozyomka joins (~pyon@user/pyon)
04:20:24 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:20:37 ChaiTRex joins (~ChaiTRex@user/chaitrex)
04:25:16 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
04:27:59 wickedjargon joins (~user@2605:8d80:5431:3c2c:999d:e956:3913:d370)
04:36:09 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:40:48 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 260 seconds)
04:42:58 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
04:44:40 jle` joins (~jle`@2603:8001:3b00:11:aa96:1bfc:d44b:9e)
04:47:14 × emaczen quits (~user@user/emaczen) (Ping timeout: 256 seconds)
04:54:11 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:58:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
05:05:12 xff0x_ joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
05:06:22 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 255 seconds)
05:09:59 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:15:14 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
05:25:46 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:30:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
05:40:48 × mange quits (~mange@user/mange) (Quit: Quittin' time!)
05:40:54 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 260 seconds)
05:41:33 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:46:28 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
05:49:16 × jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 246 seconds)
05:49:54 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:51:01 × divya quits (~divya@140.238.251.170) (Ping timeout: 264 seconds)
05:53:22 michalz joins (~michalz@185.246.207.200)
05:54:32 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
06:01:55 hakutaku joins (~textual@user/hakutaku)
06:02:51 × hakutaku quits (~textual@user/hakutaku) (Client Quit)
06:05:31 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:08:51 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
06:10:36 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
06:21:19 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:24:31 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
06:24:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
06:28:13 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:39:21 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:41:20 × constxd quits (~constxd@user/constxd) (Quit: kiwi irc - hadmade client)
06:43:47 constxd joins (~constxd@user/constxd)
06:44:25 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
06:50:51 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:54:50 emmanuelux joins (~em@user/emmanuelux)
06:55:11 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:04:52 × ags quits (~ags@p200300dcb736f1003d348acd0f4709f1.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
07:05:39 × ystael quits (~ystael@user/ystael) (Ping timeout: 250 seconds)
07:06:13 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:06:19 × dolio quits (~dolio@130.44.140.168) (Ping timeout: 264 seconds)
07:11:18 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
07:14:07 dolio joins (~dolio@130.44.140.168)
07:17:31 ystael joins (~ystael@user/ystael)
07:22:01 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:25:21 divya joins (divya@140.238.251.170)
07:25:21 × marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli)
07:25:39 × ft quits (~ft@p508db4c0.dip0.t-ipconnect.de) (Quit: leaving)
07:26:33 × emmanuelux quits (~em@user/emmanuelux) (Read error: Connection reset by peer)
07:27:01 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
07:37:47 emmanuelux joins (~em@user/emmanuelux)
07:37:49 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:42:58 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
07:46:41 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:49:18 tromp joins (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37)
07:49:52 × trickard quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
07:50:05 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
07:50:37 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:51:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
07:51:52 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:56:49 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
08:07:18 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
08:12:24 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
08:12:34 ChaiTRex joins (~ChaiTRex@user/chaitrex)
08:13:49 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
08:23:41 × emmanuelux quits (~em@user/emmanuelux) (Quit: bye)
08:25:20 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
08:25:21 × lbseale quits (~quassel@user/ep1ctetus) (Ping timeout: 252 seconds)
08:27:07 emmanuelux joins (~em@user/emmanuelux)
08:30:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
08:41:25 × ouilemur quits (~jgmerritt@user/ouilemur) (Ping timeout: 250 seconds)
08:42:29 × emmanuelux quits (~em@user/emmanuelux) (Quit: bye)
08:43:09 ouilemur joins (~jgmerritt@user/ouilemur)
09:00:18 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:07:47 merijn joins (~merijn@77.242.116.146)
09:12:02 sord937 joins (~sord937@gateway/tor-sasl/sord937)
09:13:38 trickard_ is now known as trickard
09:19:49 chele joins (~chele@user/chele)
09:25:18 gentauro Hmmm, I just realized that in SML (and derivates such as OCaml, …) the "not equal operator" (a <> b) states that `a > b` or `a < b`: https://smlhelp.github.io/book/docs/start/syntax/#boolean-operation
09:26:43 gentauro which somehow makes sense. In HaskeLLM `/=` (division equals) is not that intuitive. That said, it took me like "ages" to realize `<>` xD
09:29:32 <Googulator> Makes sense... if you're only thinking of real number and other intuitively sortable types. "Less than or greater than" is a downright lie e.g. for complex numbers.
09:34:42 <gentauro> Googulator: I don't think we have complex numbers in SML (or derivates)
09:34:45 <gentauro> I might be wrong
09:40:32 × xff0x_ quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Quit: xff0x_)
09:42:10 × trickard quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:42:23 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
09:42:50 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
09:43:03 <tomsmeding> gentauro: you probably already know this, but for completeness, /= is ≠
09:44:07 × trickard_ quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:45:06 <probie> Just pick an ordering on complex numbers and call it a day
09:45:15 tremon joins (~tremon@83.80.159.219)
09:45:27 <probie> We're already going to hell for misusing `Ord`
09:47:40 <probie> > let { nan = 0/(0 :: Double); m = M.fromList [(nan, 3), (nan, 4)] } in (m, nan `M.member` m)
09:47:41 <lambdabot> (fromList [(NaN,3),(NaN,4)],False)
09:50:16 <Leary> Yeah, `Ord` is (or has become) a class for types that support /some/ decidable total order, however arbitrary. `Complex` poses no issue whatsoever, but e.g `IORef` might---it supports equality testing but not ordering.
09:51:36 <probie> Personally, I suggest `instance (Ord a) => Ord (Complex a) where compare (a :+ b) (c :+ d) = compare (a,b) (c,d)`
09:52:17 <Leary> Yes, that's what would be derived, and what we should have.
09:53:11 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
09:53:39 <int-e> Eh half of the time I feel like using it I end up copying Complex anyway, so I can have instance Num a => Num (Complex a)
09:53:41 <tomsmeding> I think there's a good argument to be made for _not_ having that instance. I know floats are a mess anyway, but at least it's considered basic programming knowledge that ordering on floats is a mess
09:55:03 tomsmeding was wondering why Complex doesn't have that instance, but it's magnitude computation in abs and signum
09:55:11 <int-e> (if anybody ever makes a new Haskell derivative, `abs` and `signum` should be in their own class)
09:55:22 <tomsmeding> yes, yet another reason for Num to be nonsense
09:55:43 <tomsmeding> fromInteger also
09:55:58 <int-e> tomsmeding: In that context I wouldn't care about abs and signum so I'd use abs = id and signum 0 = 0, signum _ = 1
09:56:06 <tomsmeding> I imagined yes
10:00:08 × mjrosenb quits (~mjrosenb@pool-71-190-143-170.nycmny.fios.verizon.net) (Remote host closed the connection)
10:01:47 <probie> tomsmeding: Who needs a sane instance when you can have a useful instance. I don't really think that it's any worse than `instance Traversable ((,) a)`.
10:01:58 <int-e> tomsmeding: all my rings are unital ;)
10:02:33 <int-e> (I don't usually mind fromInteger)
10:02:36 <probie> It's not basic programming knowledge that `product (3,4) = 4` (alright, technically that's `Foldable` not `Traversable`, but close enough
10:02:37 <merijn> Leary: The reason IORef doesn't support ordering is that it's equality is based on memory address, which you can't use for ordering, since it might change
10:04:19 akegalj joins (~akegalj@173-245.dsl.iskon.hr)
10:04:33 <haskellbridge> <Liamzee> just out of curiosity, if Haskell had a program paying UGs to do FOSS work, would you be donating?
10:04:34 <int-e> (it's a heap object; GC can move it)
10:04:56 <tomsmeding> int-e: I don't mind having to define abs and signum for matrices, but fromInteger is a pain in the behind :)
10:05:08 <tomsmeding> probie: fair point, I guess
10:05:45 <haskellbridge> <Liamzee> i wonder if we'll ever split num into ring subclasses
10:06:03 <merijn> It's not happening
10:06:08 <probie> tomsmeding: Just only allow square matrices, and then have `fromInteger` set the diagonal
10:06:33 <merijn> Most proposed abstractions that are "more mathematically correct" tend to have really shit ergonomics for actual programming
10:07:02 <int-e> tomsmeding: well you should only have square matrices of fixed size if you want a Num instance ;-)
10:07:59 <haskellbridge> <Liamzee> merijin: I don't mean replace num, I mean, turn num into a superclass a la the FAM change
10:08:56 <int-e> (Smiley because I'm not sure that I'd heed that advice myself. Convenience is worth a lot of compromises...)
10:09:08 <tomsmeding> int-e: you shouldn't tag me there, you should tag probie, I've thought about this plenty :p
10:09:30 <tomsmeding> oh you mean for (+)
10:09:33 <tomsmeding> I do not care one whit
10:09:51 <tomsmeding> if you want a num instance for arrays, you can have the matlab experience
10:14:12 <int-e> tomsmeding: Sorry but I don't mind telling you things that you already know. :-P
10:15:05 <tomsmeding> fair. :P
10:17:01 haritz joins (~hrtz@140.228.70.141)
10:17:01 × haritz quits (~hrtz@140.228.70.141) (Changing host)
10:17:01 haritz joins (~hrtz@user/haritz)
10:17:01 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds)
10:19:08 acidjnk joins (~acidjnk@p200300d6e700e57835d41376842fa308.dip0.t-ipconnect.de)
10:27:31 × trickard_ quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
10:27:38 bggd_ joins (~bgg@2a01:e0a:fd5:f510:45eb:593:20bc:aaf7)
10:27:44 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
10:31:28 <dutchie> hmm, how could I encode a cloze deletion thing (i.e. fill-in-the-blanks "a [ring] is structure with [compatible addition and multiplication]") as a Haskell data type. first thought would be [Either String String] where Left is deleted text and Right is plain but that doesn't encode "at least one left and one right in some order"
10:32:27 <dutchie> so my example would be [Right "A", Left "ring", Right "is a structure with", Left "compatible addition and multiplication"]
10:36:58 × __monty__ quits (~toonn@user/toonn) (Quit: Lost terminal)
10:41:33 <tomsmeding> dutchie: do you really need the restrictoin that there's at least one Right and at least one Left?
10:41:46 <dutchie> morally yes, probably practically no
10:41:49 <tomsmeding> no Right just sounds like a stupid cloze to me, not an invalid one
10:41:56 <tomsmeding> and no Left the same
10:42:16 × trickard_ quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
10:42:19 <tomsmeding> data structures typically work better if they represent a "neat" space of the possibilities without edge-case restrictions
10:42:26 <tomsmeding> if you want the edge-case restrictions, impose them from outside
10:42:28 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
10:42:29 <dutchie> I guess NonEmpty might be better at the very least
10:42:39 <tomsmeding> possibly
10:43:24 <tomsmeding> you can also consider a custom data type instead of Either, just to give the constructors more sensible names
10:43:43 <dutchie> yeah I was definitely going to use something custom instead of Either
10:44:16 <dutchie> I think I am mostly asking out of interest about how you'd do type construction to enforce something like that
10:44:40 <dutchie> (especially since Strings can be empty anyway, which immediately works around the whole point)
10:46:22 tomsmeding . o O ( NonEmpty Char )
10:46:32 <tomsmeding> which is unergonomic as f*
10:46:39 <dutchie> well I'm really using Text anyway
10:46:44 <dutchie> and that
10:47:05 <tomsmeding> really, having two Rights in a row is useless too, is it?
10:47:58 <dutchie> true
10:48:45 <tomsmeding> if you could require the whole thing to start and end with a Right, you could do an alternation thing
10:48:48 <dutchie> I started trying to define some recursive list-like type
10:48:56 <dutchie> yeah with alternation like that
10:49:06 <tomsmeding> but if you want to allow '[gap] text [gap]' then it becomes really awkward
10:51:53 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
10:52:48 <gentauro> tomsmeding: «completeness, /= is ≠» my bad. Yeah, I knew this -> `\neq in LaTeX` :(
10:53:32 oskarw joins (~oskarw@user/oskarw)
10:54:27 × trickard_ quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
10:54:41 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
10:54:58 <tomsmeding> or /not=
10:55:02 <tomsmeding> \not=
11:03:29 Enrico63 joins (~Enrico63@host-79-27-153-69.retail.telecomitalia.it)
11:13:46 <haskellbridge> <loonycyborg> I'm honestly more used to != than to /=
11:14:21 __monty__ joins (~toonn@user/toonn)
11:15:44 <mesaoptimizer> MSR dropped support for GHC? Lol
11:16:56 xff0x joins (~xff0x@2405:6580:b080:900:e31d:86a4:6d4e:db85)
11:17:24 <mesaoptimizer> edwardk: why is ARIA doing category theory work in rust? I was under the impression that rust has too much friction to be anywhere useful for anything related to applied category theory
11:18:45 <mesaoptimizer> jreicher: thanks, I'm already using haskell-mode and eglot, but haskell-mode seems finicky. I'll try haskell-ts-mode too I guess
11:19:45 × wickedjargon quits (~user@2605:8d80:5431:3c2c:999d:e956:3913:d370) (Remote host closed the connection)
11:30:08 × oskarw quits (~oskarw@user/oskarw) (Ping timeout: 256 seconds)
11:30:19 × Enrico63 quits (~Enrico63@host-79-27-153-69.retail.telecomitalia.it) (Quit: Client closed)
11:39:28 fp joins (~Thunderbi@89-27-10-140.bb.dnainternet.fi)
11:41:35 × hellwolf quits (~user@eddf-7eb4-816a-bf6b-0f00-4d40-07d0-2001.sta.estpak.ee) (Remote host closed the connection)
11:55:17 trickard_ is now known as trickard
12:19:46 comerijn joins (~merijn@77.242.116.146)
12:21:53 oskarw joins (~user@user/oskarw)
12:22:14 Square3 joins (~Square4@user/square)
12:22:49 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds)
12:25:07 × Square2 quits (~Square@user/square) (Ping timeout: 246 seconds)
12:26:33 × bggd_ quits (~bgg@2a01:e0a:fd5:f510:45eb:593:20bc:aaf7) (Quit: std::move)
12:30:14 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
12:31:06 × xff0x quits (~xff0x@2405:6580:b080:900:e31d:86a4:6d4e:db85) (Quit: xff0x)
12:33:37 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds)
12:34:03 chromoblob joins (~chromoblo@user/chromob1ot1c)
12:35:11 <oskarw> mesaoptimizer: I have some problems with using haskell-ts-mode inside cabal project, do you have additional commands inside haskell-ts-mode? [13:32]
12:37:43 xff0x joins (~xff0x@2405:6580:b080:900:24e9:bd9c:7b25:9d4f)
12:48:13 × oskarw quits (~user@user/oskarw) (Remote host closed the connection)
12:49:26 oskarw joins (~user@user/oskarw)
13:01:56 karenw joins (~karenw@user/karenw)
13:06:45 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
13:06:55 <mesaoptimizer> oskarw: i haven't yet tried haskell-ts-mode
13:07:05 chromoblob joins (~chromoblo@user/chromob1ot1c)
13:10:31 × fp quits (~Thunderbi@89-27-10-140.bb.dnainternet.fi) (Ping timeout: 264 seconds)
13:13:58 × comerijn quits (~merijn@77.242.116.146) (Quit: leaving)
13:15:07 merijn joins (~merijn@77.242.116.146)
13:43:25 × trickard quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Ping timeout: 255 seconds)
13:43:51 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
13:47:21 × ouilemur quits (~jgmerritt@user/ouilemur) (Quit: WeeChat 4.8.1)
13:49:02 kuribas joins (~user@2a02-1810-2825-6000-6394-e629-adac-ea24.ip6.access.telenet.be)
13:49:10 fp joins (~Thunderbi@wireless-86-50-141-35.open.aalto.fi)
13:50:21 × karenw quits (~karenw@user/karenw) (Quit: Deep into that darkness peering...)
13:53:35 × fp quits (~Thunderbi@wireless-86-50-141-35.open.aalto.fi) (Ping timeout: 244 seconds)
13:55:08 × housemate quits (~housemate@202.7.248.67) (Quit: https://ineedsomeacidtocalmmedown.space/)
13:58:48 emaczen joins (~user@user/emaczen)
13:59:55 fp joins (~Thunderbi@wireless-86-50-141-35.open.aalto.fi)
14:01:20 ouilemur joins (~jgmerritt@user/ouilemur)
14:05:16 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
14:11:40 housemate joins (~housemate@202.7.248.67)
14:16:29 <gentauro> what is `haskell-ts-mode`? Like TypeScript?
14:19:09 ljdarj joins (~Thunderbi@user/ljdarj)
14:23:09 <dutchie> for a mode foo-mode, foo-ts-mode is the same mode but based on tree-sitter
14:23:45 <RMSBach> mesaoptimizer: Are you using projectile? I haven't used haskell-ts-mode, but regular haskell-mode works with cabal projects when projectile is aware of the project root for me.
14:43:30 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
14:44:08 <gentauro> ahhh, got it
14:53:42 × trickard_ quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
14:53:55 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
14:58:43 AlexZenon_2 is now known as AlexZenon
14:59:18 × fp quits (~Thunderbi@wireless-86-50-141-35.open.aalto.fi) (Ping timeout: 244 seconds)
15:07:39 <mesaoptimizer> RMSBach: I'm using vanilla emacs, so no projectile. I might consider trying projectile if that's necessary.
15:07:48 <mesaoptimizer> thanks for the heads up
15:09:45 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
15:11:57 euphores joins (~SASL_euph@user/euphores)
15:14:13 trickard_ is now known as trickard
15:16:03 <RMSBach> mesaoptimizer: I strongly recommend projectile. Also consul-projectile. The QoL is amazing.
15:16:22 <RMSBach> Also, lsp mode makes working with Haskell projects much nicer.
15:21:12 Sgeo joins (~Sgeo@user/sgeo)
15:31:54 <mesaoptimizer> RMSBach: how does lsp mode compare to the use of eglot? Because I see someone else recommended the use of eglot to me in response to my question
15:32:09 <mesaoptimizer> if you don't have an idea, that's fine, I'll try lsp myself eventually then
15:33:15 <RMSBach> I've not tried eglot.
15:33:21 × tromp quits (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:39:16 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
15:46:02 rekahsoft joins (~rekahsoft@70.51.99.245)
15:55:16 × RMSBach quits (~RMSBach@24.210.9.182) (Ping timeout: 265 seconds)
15:55:16 RSBach joins (~RMSBach@24.210.9.182)
15:55:40 RSBach is now known as RMSBach
15:55:58 tromp joins (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37)
16:06:37 <machinedgod> Good morning everyone. Question re: linear types, again - is it possible to somehow convert between numeric types linearly? I realized 'fromIntegral' is non-linear, while fromInteger is - but even if I wanted to implement manually my specific case (Int -> Float wrapped with a newtype), I cannot seem to find any function that'd let me do the raw conversion linearly.
16:07:35 <machinedgod> (also curiously, trying to pattern match on a specific value and copying it "conv (MyWrap 1) = AnotherWrap 1" also gets compiler to complain.
16:08:12 <tomsmeding> wouldn't that be because you're not copying the 1, you're dropping it and then creating a new one?
16:08:34 <tomsmeding> it seems this is simply an omission in linear-base
16:09:10 <machinedgod> Oh it might be, I wouldn't know in all honesty. I checked the code in linear-base and it seems like fromIntegral is just copied over from 'base'
16:09:27 tomsmeding doesn't see any fromIntegral in linear-base at all
16:11:04 <tomsmeding> if you want to be thorough, you could define your own linear Integral class with a linear toInteger method, define fromIntegral as fromInteger . toInteger as a linear function, and then write RULEs like in base
16:11:17 <tomsmeding> or you can skip all that and unsafeCoerce the specific conversion that you need
16:11:34 <tomsmeding> even if you go the thorough route, you'll have to do that for the specific conversions anyway
16:12:37 <tomsmeding> machinedgod: eventually, these conversions boil down to calls to functions from GHC.Exts, like int2Float#
16:12:58 <machinedgod> tomsmeding: Aye, that's where I looked at, and hoped to find something like int2Float that's linear, but no luck.
16:13:08 <tomsmeding> yeah, and those primops are simply not linear
16:13:28 <tomsmeding> morally, of course, they are, so it seems it's up to you to declare that (by using unsafeCoerce)
16:13:40 <machinedgod> I considered massaging the value forcefully with Ur, but - I wanted to verify that I am not just blind or missing something (like, toInteger cannot be logically linear)
16:14:21 <machinedgod> Would this be considered, how should I call it - acceptable quality production code for current iteration of linear-base and linear types?
16:14:22 <tomsmeding> not every type that admits a nonlinear toInteger necessarily admits a linear toInteger
16:14:31 <tomsmeding> most will, however
16:14:48 <tomsmeding> I think so
16:15:09 <machinedgod> tomsmeding: That's a wise observation! I was only focused on my newtype which holds and int anyway, so I think I'll be good. Thank you for your help, I appreciate it!
16:15:18 <tomsmeding> it's probably a good idea to define `unsafeToLinear :: (a -> b) -> (a %1-> b); unsafeToLinear = unsafeCoerce` so that you don't end up accidentally unsafeCoercing too much
16:15:19 <machinedgod> (*an int)
16:16:09 <machinedgod> tomsmeding: Aye, that's the plan, when coercions are involved, I prefer to be as specific as I can, too
16:16:09 <tomsmeding> (that observation is not a reason to not go through with this though; the same can be said for fromInteger, and linear-base has a linear fromInteger just fine)
16:16:14 <tomsmeding> nice
16:19:46 <haskellbridge> <Morj> Those of you who have mastodon (or another activitypub profile): can you search for this profile and tell me if you see the message in it? https://random.test.morj.men/u/morj
16:19:49 <haskellbridge> <Morj> Testing my impl
16:21:44 <haskellbridge> <Morj> I see a lot of people trying to open it in the browser. Not yet implemented, sorry
16:26:15 wickedjargon joins (~user@24.83.46.194)
16:27:04 srazkvt joins (~sarah@user/srazkvt)
16:31:54 peterbecich joins (~Thunderbi@71.84.33.135)
16:38:19 <darkling> Morj: Yes, I see it.
16:38:46 <haskellbridge> <Morj> Thanks!
16:38:54 <haskellbridge> <Morj> Aand git commt
16:46:20 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
17:09:20 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
17:15:45 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:32:41 jmcantrell_ joins (~weechat@user/jmcantrell)
17:34:55 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds)
17:40:38 jmcantrell_ is now known as jmcantrell
17:53:42 Jackneill_ joins (~Jackneill@188-143-82-106.pool.digikabel.hu)
17:54:36 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 252 seconds)
17:56:16 × trickard quits (~trickard@cpe-61-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
17:56:29 trickard_ joins (~trickard@cpe-61-98-47-163.wireline.com.au)
17:56:43 × jackneill__ quits (~Jackneill@94-21-15-213.pool.digikabel.hu) (Ping timeout: 264 seconds)
18:03:31 tremon joins (~tremon@83.80.159.219)
18:08:10 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
18:13:46 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
18:14:02 divlamir joins (~divlamir@user/divlamir)
18:16:16 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
18:21:04 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
18:26:23 catties is now known as Catty
18:26:40 peterbecich joins (~Thunderbi@71.84.33.135)
18:27:11 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
18:32:03 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
18:33:55 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds)
18:36:31 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
18:40:02 × Googulator quits (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu) (Quit: Client closed)
18:40:18 Googulator joins (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu)
18:47:21 <EvanR> we love types for reasons... but type signatures are sometimes optional... and it's possible to get away with various dilutions of type safety in haskell. I.e. using strings in tuples instead of constructors, and the literal Dynamic type
18:47:34 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
18:47:35 <EvanR> I wonder if it would make code smaller, or "even worse" trying to use this style xD
18:47:55 <EvanR> (more code)
18:50:24 <[exa]> EvanR: you mean like, ("Just", "five") and ("Nothing", "")
18:51:00 <EvanR> I guess ("Nothing", undefined) xD
18:51:05 <EvanR> ok it's not a great start
18:52:15 Tuplanolla joins (~Tuplanoll@85-156-32-207.elisa-laajakaista.fi)
18:52:18 <EvanR> ["Just", "five"] vs ["Nothing"]
18:52:44 <[exa]> ah yes the List Technology
18:54:01 <[exa]> well anyway you can go `data Scheme = Cons Scheme Scheme | Num Int | Symbol String | Nil | ...` and get wild
18:54:07 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
18:55:37 <EvanR> would seem to expand the code vs idiomatic haskell.... maybe
18:55:43 <tomsmeding> EvanR: we have our own brand of that, try church encodings
18:55:57 <EvanR> oh?
18:56:01 <tomsmeding> may need to embed in `newtype X = X (X -> X)` for proper typelessness
18:56:30 <tomsmeding> it's all a function! Why throw an error if you pass 5 to a function expecting a Maybe String? It will just... do something!
18:56:36 <[exa]> EvanR: not really; you add instance Monad and overloaded lists and strings and labels, and you're generating this for free
18:56:55 <EvanR> tomsmeding, now you're talking
18:57:21 lisbeths joins (uid135845@id-135845.lymington.irccloud.com)
18:57:40 <[exa]> tomsmeding: I love that
18:57:54 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 244 seconds)
18:58:06 <tomsmeding> I like how I get the most agreement here when I post the stupidest suggestions
18:58:11 <Clint> speaking of getting wild, is there any type magic which would let me do something like data Thingy = ConstructorV1 a | ConstructorV2 a b and be able to pattern-match a ConstructorV2 value with (ConstructorV1 a)?
18:58:35 <EvanR> o_O
18:58:45 <tomsmeding> pattern synonyms?
18:59:04 <tomsmeding> have ConstructorV{1,2} actually be pattern synonyms that do whatever you want with the underlying Thingy definition
18:59:50 Clint reads.
19:00:24 <[exa]> yeah, view patterns or pattern synonyms
19:01:32 <Clint> i'll give it a shot, thanks
19:05:27 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
19:05:37 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
19:06:06 × akegalj quits (~akegalj@173-245.dsl.iskon.hr) (Quit: leaving)
19:06:55 hellwolf joins (~user@13cd-fe1e-a030-6e4e-0f00-4d40-07d0-2001.sta.estpak.ee)
19:08:37 <[exa]> can one do such a multi-target pattern synonym without going through a view pattern?
19:09:05 <tomsmeding> essentially all interesting usecases of a pattern synonym require a view pattern to define the synonym
19:09:11 <tomsmeding> perhaps not all, but many
19:11:47 <[exa]> Clint: btw if you didn't google it yet, this probably does it https://stackoverflow.com/a/43839121
19:11:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
19:12:38 <haskellbridge> <Morj> Should I suggest to instead encode the thingy as data Thingy = Thingy a (Maybe b)?
19:12:52 <[exa]> ( s/google/find/ )
19:13:16 <[exa]> Morj: I assume the main issue is that the types would get more complex
19:13:45 <[exa]> e.g. add a few constructors that don't actually have the `a`
19:14:02 <int-e> [exa]: it's fine, you can google (most) things with DuckDuckGo :P
19:14:06 <Clint> Morj: the whole point is that i want to add a field to the type without breaking the API
19:14:30 <tomsmeding> "I want to modify constructors of a data type without modifying the API" is one of the design usecases of pattern synonyms
19:14:39 <[exa]> int-e: nah the original sentence I wrote sounded a bit too much like "oh lemme google that for you" which I didn't intend
19:15:02 <Clint> i was just reading https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/pattern_synonyms.html
19:15:49 <int-e> [exa]: Ah. FWIW to me it sounded like you did google it out of curiosity and shared the result and method, without judgement. I could see it being read differently of course.
19:16:07 <[exa]> yap. :]
19:16:59 <Clint> i did not read it differently, ftr
19:21:18 × tromp quits (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:22:45 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
19:27:33 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
19:38:25 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
19:42:15 × wickedjargon quits (~user@24.83.46.194) (Remote host closed the connection)
19:43:24 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
19:43:42 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
19:43:42 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
19:44:41 × kuribas quits (~user@2a02-1810-2825-6000-6394-e629-adac-ea24.ip6.access.telenet.be) (Remote host closed the connection)
19:44:45 Lord_of_Life_ is now known as Lord_of_Life
19:45:32 Square2 joins (~Square@user/square)
19:49:09 × Square3 quits (~Square4@user/square) (Ping timeout: 244 seconds)
19:52:33 Umeaboy joins (~Umeaboy@h77-53-243-72.cust.bredband2.com)
19:54:13 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
19:59:25 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
20:02:29 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 260 seconds)
20:06:06 L29Ah joins (~L29Ah@wikipedia/L29Ah)
20:07:44 × xal quits (~xal@mx1.xal.systems) (Quit: bye)
20:08:22 xal joins (~xal@mx1.xal.systems)
20:08:24 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
20:08:50 × yin quits (~zero@user/zero) (Remote host closed the connection)
20:10:02 target_i joins (~target_i@user/target-i/x-6023099)
20:13:31 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
20:17:45 × redshuffle quits (~quassel@45.43.70.75) (Remote host closed the connection)
20:17:52 redshuffle joins (~quassel@45.43.70.75)
20:20:06 <EvanR> after adding postgresql-simple to my cabal file, and doing cabal build, this weird behavior where the build ends at a random dependency, says "completed" and just hangs
20:20:21 <EvanR> control C and doing the command again seems to start from another place and hang somewhere else each time
20:20:57 <EvanR> if it "hangs" on "building" I wouldn't be as suspicious
20:21:24 Square3 joins (~Square4@user/square)
20:22:32 <EvanR> looks like it eventually completed... the long running build might have been vector
20:23:15 × Square2 quits (~Square@user/square) (Ping timeout: 245 seconds)
20:23:39 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 252 seconds)
20:23:50 <EvanR> I'm wrong still going
20:24:11 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
20:24:19 <EvanR> I see, the reports are asynchronous
20:25:58 <haskellbridge> <Morj> If you build with -j1, I think this would tell you which exact package is freezing
20:26:05 <haskellbridge> <Morj> If cabal-install has -j
20:31:13 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
20:31:51 peterbecich joins (~Thunderbi@71.84.33.135)
20:31:55 <tomsmeding> yes, `cabal build -j1` is a thing
20:35:14 <EvanR> stupid question, when you are cabal building something, is there are most 1 version of each dependency "in use" for that build. And so if the same package comes up multiple ways, there needs to be an overlapping version bound
20:35:46 <haskellbridge> <Morj> Yes, there can only be one version of each package in the whole build tree
20:36:10 <EvanR> that explains a lot xD
20:38:50 Carlodiociottene joins (~Carlodioc@host51.141-13-31.as49605.net)
20:39:27 × Carlodiociottene quits (~Carlodioc@host51.141-13-31.as49605.net) (Client Quit)
20:40:16 <tomsmeding> EvanR: yes, but with caveats: in a single dependency tree, every package can indeed occur with only one version. However, cabal has the concept of a "build dependency", which is not linked in but used as an executable; typical examples are alex, happy, c2hs. Those have their _own_ dependency tree, and those trees can contain different versions
20:40:52 <EvanR> that's convenient
20:40:55 <tomsmeding> this is relevant knowledge if you're trying to constrain the version of a dependency used to build a build tool; this is what the "any." in a cabal.project.freeze is for :p
20:41:05 <tomsmeding> (I learned this the hard way)
20:41:39 <EvanR> I'll have to read up on this freeze file you speak of
20:41:51 <tomsmeding> ah, then that was not a helpful reference
20:41:54 <tomsmeding> (`cabal freeze`)
20:42:06 <tomsmeding> it's part of the syntax of a `constraints:` block in a cabal.project file
20:42:19 merijn joins (~merijn@62.45.136.136)
20:42:29 <tomsmeding> writing `constraints: foo >= 2` constrains the main dependency tree only; writing `constraints: any.foo >= 2` also constrains build tool dependencies
20:42:53 <tomsmeding> `cabal freeze` emits a "freeze file" with such constraints for everything (to make the build deterministic), and it emits any. constraints
20:46:56 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 240 seconds)
20:47:44 yin joins (~zero@user/zero)
20:54:26 <EvanR> I see, because without a freeze file cabal might come up with a different solution set in a different circumstances?
20:54:43 <EvanR> it checks the phase of the moon
20:54:53 <tomsmeding> well, if one does `cabal update`, cabal may select newer versions
20:54:55 <tomsmeding> :)
20:55:19 <tomsmeding> or because system libraries changed and some pkg-config dependencies are now available or not available, different flags/packages are selected
20:55:21 <EvanR> wait that needs to be an acme package
20:56:11 <EvanR> get the phase of the moon as a bespoke sum type, or a float
20:56:34 <tomsmeding> and do that in Setup.hs, and change dependencies based on it?
20:56:39 <EvanR> yeah
20:56:57 <EvanR> you keep coming up with the best ideas!
20:57:06 <tomsmeding> well this was your idea :p
20:57:44 wickedjargon joins (~user@2605:8d80:5430:4910:f62b:7e78:f176:a13)
20:58:01 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:00:00 <tomsmeding> (this idea of a "freeze file" is also called a "lock file" in different ecosystems; see also: package-lock.json, Cargo.lock, perhaps go.sum but I'm not sure I recall correctly there)
21:00:49 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 260 seconds)
21:02:36 jmcantrell_ joins (~weechat@user/jmcantrell)
21:02:46 <mauke> (or a snapshot file in carton)
21:03:02 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
21:06:16 jmcantrell_ is now known as jmcantrell
21:09:55 <EvanR> apparently go has a minimal version selection algorithm instead of a freeze file, and I'm not sure this is enough to deal with some of your use cases
21:10:14 <tomsmeding> my use cases?
21:10:15 <EvanR> pkg-config giving different results for stuff not written in go
21:10:22 <EvanR> influencing the result
21:10:24 <tomsmeding> ah
21:10:30 <tomsmeding> luckily I don't write go :)
21:10:34 <EvanR> \o/
21:11:59 <EvanR> though this random article about the theory seems interesting for its own sake https://research.swtch.com/vgo-mvs
21:12:23 <EvanR> "The problem minimal version selection solves is NL-complete
21:12:24 <EvanR> "
21:13:38 <tomsmeding> if he's talking about version resolution, yes, that's constraint solving on a language expressive enough to easily encode SAT
21:13:46 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:15:05 vanishingideal joins (~vanishing@user/vanishingideal)
21:16:33 <tomsmeding> which is why cabal sometimes takes a while doing it :p
21:19:06 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
21:20:04 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 265 seconds)
21:22:03 × ringo_ quits (~ringo@157.230.117.128) (Ping timeout: 244 seconds)
21:23:55 pavonia joins (~user@user/siracusa)
21:25:14 peterbecich joins (~Thunderbi@71.84.33.135)
21:29:02 ringo_ joins (~ringo@157.230.117.128)
21:29:33 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:34:36 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:39:47 divlamir_ joins (~divlamir@user/divlamir)
21:40:18 × peterbecich quits (~Thunderbi@71.84.33.135) (Quit: peterbecich)
21:40:36 peterbecich joins (~Thunderbi@71.84.33.135)
21:42:15 _JusSx_ joins (~jussx@78.210.223.162)
21:42:40 × divlamir quits (~divlamir@user/divlamir) (Ping timeout: 246 seconds)
21:45:03 × divlamir_ quits (~divlamir@user/divlamir) (Ping timeout: 252 seconds)
21:45:19 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds)
21:45:21 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
21:49:40 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
21:50:14 divlamir joins (~divlamir@user/divlamir)
21:51:08 <jreicher> mesaoptimizer: The main difference between lsp-mode and eglot is that eglot tries to integrate with existing frontends in Emacs and does not have any of its own. That makes it look and feel like "standard Emacs". Consequently it has also become part of core, but it is worth upgrading both it and flymake to more recent versions.
21:56:23 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:56:55 × Googulator quits (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu) (Quit: Client closed)
21:57:06 Googulator joins (~Googulato@2a01-036d-0106-216f-0081-f2ad-9e0f-9d89.pool6.digikabel.hu)
21:57:56 × michalz quits (~michalz@185.246.207.200) (Remote host closed the connection)
22:00:51 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:03:14 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 260 seconds)
22:04:08 × qqq quits (~qqq@185.54.21.178) (Quit: Lost terminal)
22:07:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
22:17:05 emmanuelux joins (~em@user/emmanuelux)
22:18:53 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:23:37 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
22:30:46 vgtw joins (~vgtw@user/vgtw)
22:31:16 DetourNetworkUK joins (~DetourNet@user/DetourNetworkUK)
22:34:40 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:39:29 tromp joins (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37)
22:39:39 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
22:43:25 × oskarw quits (~user@user/oskarw) (Remote host closed the connection)
22:44:29 × yin quits (~zero@user/zero) (Remote host closed the connection)
22:47:01 yin joins (~zero@user/zero)
22:50:25 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
22:52:25 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
22:52:38 mange joins (~mange@user/mange)
22:54:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:05:50 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:07:01 × remedan quits (~remedan@78-80-95-79.customers.tmcz.cz) (Ping timeout: 246 seconds)
23:10:10 remedan joins (~remedan@78-80-95-79.customers.tmcz.cz)
23:10:31 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
23:14:45 × hsw quits (~hsw@106.104.102.45) (Read error: Connection reset by peer)
23:15:04 hsw joins (~hsw@106.104.102.45)
23:16:56 × tromp quits (~textual@2001:1c00:3487:1b00:4842:24c6:bd5c:fe37) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:21:36 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:26:37 × lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
23:26:48 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:29:33 × Square3 quits (~Square4@user/square) (Ping timeout: 252 seconds)
23:32:08 × _JusSx_ quits (~jussx@78.210.223.162) (Ping timeout: 240 seconds)
23:32:11 <mesaoptimizer> right, yeah
23:32:20 <mesaoptimizer> I try to minimize the complexity of my emacs config
23:32:57 <mesaoptimizer> I started out with doom emacs half a decade ago, and I'm quite enthusiastic about never ever having to deal with churn due to the actions of people who aren't me
23:34:07 _JusSx_ joins (~jussx@37.161.114.124)
23:38:49 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:44:45 <EvanR> this is code from postgresql-simple https://paste.tomsmeding.com/oNSVwCD5
23:45:03 <EvanR> hey this code looks great to me but, could it have been implement using bracket?
23:45:05 <jreicher> mesaoptimizer: are you on #emacs? Some of the things you're touching on are discussed semi-regularly there
23:45:20 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:45:21 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
23:46:00 <EvanR> or no because of the selectivity of the kind of exception it is looking for at the end
23:53:00 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
23:56:52 × housemate quits (~housemate@202.7.248.67) (Quit: https://ineedsomeacidtocalmmedown.space/)
23:57:44 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:59:26 housemate joins (~housemate@202.7.248.67)

All times are in UTC on 2026-02-05.