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.