Home liberachat/#haskell: Logs Calendar

Logs on 2022-11-04 (liberachat/#haskell)

00:00:00 × Tuplanolla quits (~Tuplanoll@91-159-69-11.elisa-laajakaista.fi) (Quit: Leaving.)
00:00:03 × dcoutts quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (*.net *.split)
00:00:03 × gentauro quits (~gentauro@user/gentauro) (*.net *.split)
00:00:03 × redmp quits (~redmp@mobile-166-170-43-0.mycingular.net) (*.net *.split)
00:00:04 × jlgw_ quits (~jw@83-233-104-81.cust.bredband2.com) (*.net *.split)
00:00:04 × ystael quits (~ystael@user/ystael) (*.net *.split)
00:00:18 ystael joins (~ystael@user/ystael)
00:00:24 × dcoutts_ quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
00:00:27 jlgw_ joins (~jw@83-233-104-81.cust.bredband2.com)
00:00:27 dcoutts joins (~duncan@host81-156-211-164.range81-156.btcentralplus.com)
00:03:34 dcoutts_ joins (~duncan@host81-156-211-164.range81-156.btcentralplus.com)
00:05:15 gentauro joins (~gentauro@user/gentauro)
00:05:18 caryhartline joins (~caryhartl@107-140-218-181.lightspeed.rcsntx.sbcglobal.net)
00:05:18 redmp joins (~redmp@mobile-166-170-43-0.mycingular.net)
00:05:21 × dcoutts quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
00:07:58 aliosablack joins (~chomwitt@2a02:587:7a0a:6300:1ac0:4dff:fedb:a3f1)
00:09:21 × chomwitt quits (~chomwitt@2a02:587:dc18:4a00:1ac0:4dff:fedb:a3f1) (Ping timeout: 246 seconds)
00:12:03 king_gs1 joins (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
00:12:04 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
00:12:06 × king_gs quits (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
00:12:06 king_gs1 is now known as king_gs
00:13:13 × pavonia quits (~user@user/siracusa) (Read error: Connection reset by peer)
00:13:25 × redmp quits (~redmp@mobile-166-170-43-0.mycingular.net) (Quit: leaving)
00:13:35 × dcoutts_ quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Remote host closed the connection)
00:13:35 pavonia joins (~user@user/siracusa)
00:13:54 dcoutts_ joins (~duncan@host81-156-211-164.range81-156.btcentralplus.com)
00:18:32 × aliosablack quits (~chomwitt@2a02:587:7a0a:6300:1ac0:4dff:fedb:a3f1) (Ping timeout: 276 seconds)
00:21:30 SoF4 joins (~skius@user/skius)
00:22:01 × SoF quits (~skius@user/skius) (Read error: Connection reset by peer)
00:22:01 SoF4 is now known as SoF
00:24:26 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
00:28:57 × king_gs quits (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 246 seconds)
00:30:04 × dcoutts_ quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Remote host closed the connection)
00:30:24 dcoutts_ joins (~duncan@host81-156-211-164.range81-156.btcentralplus.com)
00:30:31 abhiroop joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
00:30:34 × ncf quits (~n@monade.li) (Quit: Fairfarren.)
00:30:47 ncf joins (~n@monade.li)
00:31:16 × abhiroop_ quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
00:39:08 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
00:39:18 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
00:40:29 absence joins (torgeihe@hildring.pvv.ntnu.no)
00:41:17 king_gs joins (~Thunderbi@187.201.83.115)
00:44:28 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
00:46:27 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
00:46:30 × SoF quits (~skius@user/skius) (Remote host closed the connection)
00:46:59 SoF joins (~skius@user/skius)
00:49:10 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
00:49:44 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
00:55:57 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
00:59:17 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
01:00:26 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
01:00:26 × king_gs quits (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
01:01:30 ub joins (~Thunderbi@77.119.197.59.wireless.dyn.drei.com)
01:02:54 × ubert quits (~Thunderbi@77.119.196.32.wireless.dyn.drei.com) (Ping timeout: 246 seconds)
01:02:54 ub is now known as ubert
01:03:37 king_gs joins (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
01:03:44 talismanick joins (~talismani@2601:200:c100:c9e0::1b0b)
01:04:55 × mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
01:06:08 mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001)
01:06:09 <talismanick> Say I have `f <$> foo <*> bar <|> g <$> foo <*> bar`, where `foo` and `bar` are quite long. How might I deduplicate with `liftM2 (<|>) f g`?
01:08:27 <dsal> Making them not quite long is always a good idea.
01:09:16 <c_wraith> I wouldn't use the function instance for liftM2 there. It just makes people work harder to see what's going on
01:10:36 × bgamari_ quits (~bgamari@64.223.168.223) (Ping timeout: 255 seconds)
01:10:36 <pyrex> fwiw i think i would probably write liftA2 f foo bar <|> liftA2 g foo bar
01:10:44 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
01:10:52 bgamari joins (~bgamari@68.238.49.149)
01:10:54 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:39 <c_wraith> if foo and bar are complex expressions, put them in a let or where
01:11:48 <pyrex> i might write `let go z = liftA2 z foo bar in go f <|> go g`
01:12:15 <talismanick> pyrex: yeah, a let binding could clear things up
01:13:23 <talismanick> Or, I could make it even more extensible by fmap'ing `<$>foo <*> bar` over a list of functions, then foldr1 (<|>)
01:13:26 <pyrex> fwiw i think `on (<|>) (\x -> liftA2 x foo bar) f g` maybe does what you want, but i haven't checked that
01:15:12 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
01:15:32 × Kaipei quits (~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
01:16:23 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
01:17:01 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:20:05 razetime joins (~quassel@117.254.35.246)
01:20:24 × caryhartline quits (~caryhartl@107-140-218-181.lightspeed.rcsntx.sbcglobal.net) (Quit: caryhartline)
01:21:32 <talismanick> It works. Muahahaha
01:23:02 abhiroop_ joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
01:23:11 × abhiroop quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 272 seconds)
01:24:41 motherfsck joins (~motherfsc@user/motherfsck)
01:24:49 <[Leary]> Or something like this: asum $ [f, g] <&> \h -> h <$> foo <*> bar
01:29:30 × xff0x quits (~xff0x@2405:6580:b080:900:aa5a:50b3:fed5:3fc2) (Ping timeout: 255 seconds)
01:30:25 nate3 joins (~nate@98.45.169.16)
01:34:01 <SrPx> HVM history and next steps: https://twitter.com/VictorTaelin/status/1588332432587005952
01:36:26 × nineonine quits (~nineonine@2604:3d08:7780:cd00:a9d4:e2db:2f89:8800) (Remote host closed the connection)
01:40:21 ub joins (~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
01:41:44 × ubert quits (~Thunderbi@77.119.197.59.wireless.dyn.drei.com) (Ping timeout: 276 seconds)
01:41:45 ub is now known as ubert
01:46:59 <talismanick> [Leary]: Oh, that is better than what I wrote
01:47:08 <talismanick> learn something new everyday!
01:48:47 × jargon_ quits (~jargon@174-22-194-21.phnx.qwest.net) (Remote host closed the connection)
01:57:25 <byorgey> SrPx: cool stuff
01:57:43 <SrPx> byorgey: ty (:
02:01:14 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
02:03:00 × inversed quits (~inversed@bcdcac82.skybroadband.com) (Ping timeout: 248 seconds)
02:10:15 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
02:13:32 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
02:13:32 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:13:32 finn_elija is now known as FinnElija
02:14:00 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
02:15:32 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
02:15:33 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
02:23:12 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
02:27:00 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
02:27:36 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
02:28:32 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
02:34:07 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 272 seconds)
02:38:19 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
02:38:54 olivermead joins (~olivermea@cpc72329-sotn15-2-0-cust205.15-1.cable.virginm.net)
02:39:12 <c209e6dc-4d76-47> ghci complains if I have a polymorphic lambda inside a let binding, do I have to enable FlexibleContext or RankNTypes?
02:39:29 <olivermead> what's the complaint?
02:39:53 jargon joins (~jargon@174-22-194-21.phnx.qwest.net)
02:41:41 <sm> some debug tracing/logging helpers I've been updating.. comments/testing welcome
02:41:42 <sm> https://threadreaderapp.com/thread/1588358412730916864.html
02:43:30 <c_wraith> c209e6dc-4d76-47: inside a let? do you have an extension enabled that implies MonoLocalBinds?
02:46:55 <c209e6dc-4d76-47> I'm using stack ghc 8.6.5 which is complaining but cabal ghc 8.10.7 is fine, so I'm trying to bump the stack resolver and see if it is a problem with ghc version
02:49:34 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
02:49:59 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
02:50:29 × ygsjg quits (~quassel@189.124.224.160) (Read error: Connection reset by peer)
02:51:39 abhiroop joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
02:51:51 × abhiroop_ quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 255 seconds)
03:06:18 × mvk quits (~mvk@2607:fea8:5ce3:8500::4b68) (Ping timeout: 255 seconds)
03:21:13 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 268 seconds)
03:24:06 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:24:06 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:24:06 finn_elija is now known as FinnElija
03:24:21 <ski> talismanick : would you like to do the `<|>' before or after the `<$>' and `<*>' ? (in your snippet, it's `<|>' before)
03:24:47 × td_ quits (~td@83.135.9.44) (Ping timeout: 272 seconds)
03:24:54 <ski> `<|>' before :
03:25:06 <ski> @type \f g foo bar -> (liftA2 . liftA2) (<|>) (liftA2 f) (liftA2 g) foo bar
03:25:08 <lambdabot> Alternative f => (a1 -> b -> a2) -> (a1 -> b -> a2) -> f a1 -> f b -> f a2
03:25:17 <ski> @let asumMap :: (Foldable t,Alternative i) => (a -> i b) -> (t a -> i b); asumMap = (getAlt .) . foldMap . (Alt .)
03:25:18 <lambdabot> Defined.
03:25:34 <ski> @type \f g foo bar -> asumMap (\h -> liftA2 h foo bar) [f,g]
03:25:35 <lambdabot> Alternative i => (a -> b1 -> b2) -> (a -> b1 -> b2) -> i a -> i b1 -> i b2
03:25:44 <ski> `mplus' after :
03:25:50 <ski> @let infixr 9 .:; (.:) :: (c0 -> c1) -> (a -> b -> c0) -> (a -> b -> c1); (.:) = (.) . (.)
03:25:51 <lambdabot> Defined.
03:25:55 td_ joins (~td@83.135.9.48)
03:25:58 <ski> @let infixl 4 <*>>; (<*>>) :: Monad m => m (a -> m b) -> (m a -> m b); mamb <*>> ma = join (mamb <*> ma)
03:25:59 <lambdabot> Defined.
03:26:08 <ski> @type \f g foo bar -> (liftA2 . liftA2) mplus (pure .: f) (pure .: g) <$> foo <*>> bar
03:26:09 <lambdabot> MonadPlus m => (a1 -> a2 -> b) -> (a1 -> a2 -> b) -> m a1 -> m a2 -> m b
03:26:19 <ski> @let oneOfM :: (Foldable t,MonadPlus m) => t a -> m a; oneOfM = foldr (mplus . return) mzero
03:26:20 <lambdabot> Defined.
03:26:24 <ski> @type \f g foo bar -> ((.: sequence) . (.: sequence)) oneOfM [f,g] <$> foo <*>> bar
03:26:25 <lambdabot> MonadPlus m => (b1 -> a -> b2) -> (b1 -> a -> b2) -> m b1 -> m a -> m b2
03:27:45 <ski> (and no, i'm not really suggesting you to use the more pointless forms .. that's mostly some gymnastics, while exploring the two alternatives)
03:28:57 <ski> with the "before", you're first introducing a choice, then, in each branch, you perform `foo' and `bar'
03:29:31 <ski> with the "after", you're first performing `foo' and `bar', then introduce branching (using `f' or `g')
03:30:00 <ski> `Alternative' suffices for "before", while `MonadPlus' is needed for "after"
03:30:50 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
03:33:37 <ski> (otoh, i think `<*>>' can often be a handy operator)
03:34:12 × abhiroop quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
03:35:56 <sm> phew, https://www.parsonsmatt.org/2022/10/29/spooky_masks_and_async_exceptions.html was a scary tale
03:36:09 <Axman6> sm: `args = unsafePerformIO getArgs` is horrific... but I understand why it's been done that way; definitely saves a lot of plumbing for something which is essentially pure within the app
03:36:34 <sm> just like an implicit Reader, right ?
03:36:43 <Axman6> yeah
03:37:29 ski . o O ( distribution, mobile code marshalling )
03:37:53 <Axman6> possibly consider making args = unsafePerformIO getArgs a top level definition (unexported) so it doesn't get rerun in each of the functions that call debugLevel
03:38:09 <sm> good idea
03:38:23 <Axman6> then I think you can get rid of all the NOINLINEs elsewhere
03:38:56 <sm> I wasn't sure if those were needed, but I notice HLS warns me about them being missing now (sometimes)
03:39:54 <sm> I don't know if OPTIONS_GHC -fno-cse is useful at all
03:41:55 Kaipei joins (~Kaiepi@108.175.84.104)
03:42:50 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
03:47:50 zaquest joins (~notzaques@5.130.79.72)
03:49:34 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
03:50:54 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
03:53:55 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
03:58:27 × razetime quits (~quassel@117.254.35.246) (Ping timeout: 255 seconds)
04:02:49 abhiroop joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
04:02:54 sm removes all pragmas HLS doesn't complain about
04:03:44 <sm> hlint, actually
04:04:24 <ski> .. keeping only those it complains about ?
04:05:07 <sm> heh.. keeping the ones it wants me to keep
04:06:35 <ski> which does it have an opinion about, here ?
04:07:21 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
04:09:23 <sm> I just updated https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs and https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs showing the two it warns about (modifiedProgName and progArgs)
04:09:43 <sm> s/Print/Debug/
04:12:04 × abhiroop quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
04:12:08 <ski> `NOINLINE', ok
04:14:55 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:15:31 <sm> I'm not sure why hlint doesn't complain about this unsafePerformIO user though:
04:15:31 <sm> https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Debug.hs#L249
04:15:58 <sm> or this one: https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Utils/Print.hs#L123
04:17:26 <sm> ie, it doesn't require NOINLINE for those
04:19:11 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:21:39 × king_gs quits (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Ping timeout: 268 seconds)
04:25:56 × simpleauthority quits (~simpleaut@user/simpleauthority) (Quit: ZNC 1.8.2 - https://znc.in)
04:26:58 simpleauthority joins (~simpleaut@user/simpleauthority)
04:33:56 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
04:34:03 mbuf joins (~Shakthi@49.205.86.6)
04:38:52 inversed joins (~inversed@bcdcac82.skybroadband.com)
04:46:01 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
04:50:17 × Vajb quits (~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57) (Read error: Connection reset by peer)
04:50:39 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
04:52:55 × raym quits (~ray@user/raym) (Quit: coming back with FreeBSD 13.1-p3)
05:07:32 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
05:13:17 × tomku quits (~tomku@user/tomku) (Ping timeout: 240 seconds)
05:17:07 × rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
05:19:18 rembo10 joins (~rembo10@main.remulis.com)
05:19:37 raym joins (~ray@user/raym)
05:20:20 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
05:21:51 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
05:22:28 × tolt quits (~weechat-h@li219-154.members.linode.com) (Ping timeout: 248 seconds)
05:28:25 dcoutts__ joins (~duncan@host81-156-211-164.range81-156.btcentralplus.com)
05:29:27 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
05:31:27 × dcoutts_ quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
05:33:33 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
05:33:47 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds)
05:33:53 Vajb joins (~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57)
05:36:13 elevenkb joins (~elevenkb@105.184.125.168)
05:40:26 × off^ quits (~off@76.145.185.103) (Remote host closed the connection)
05:41:14 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
05:44:35 dcoutts joins (~duncan@host86-144-78-132.range86-144.btcentralplus.com)
05:46:39 × dcoutts__ quits (~duncan@host81-156-211-164.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
05:46:55 dcoutts_ joins (~duncan@host86-144-78-132.range86-144.btcentralplus.com)
05:49:36 × dcoutts quits (~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 255 seconds)
05:55:25 dcoutts__ joins (~duncan@host86-144-78-132.range86-144.btcentralplus.com)
05:58:09 × dcoutts_ quits (~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 255 seconds)
05:58:25 dcoutts joins (~duncan@host81-156-211-157.range81-156.btcentralplus.com)
05:59:33 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Read error: Connection reset by peer)
06:00:35 × dcoutts__ quits (~duncan@host86-144-78-132.range86-144.btcentralplus.com) (Ping timeout: 272 seconds)
06:02:29 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
06:02:56 × _xor quits (~xor@74.215.182.83) (Read error: Connection reset by peer)
06:03:07 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:05:35 intelligent_boat joins (~intellibo@user/intelligent-boat/x-3514795)
06:05:40 × arahael quits (~arahael@124.168.94.52) (Ping timeout: 248 seconds)
06:06:20 _xor joins (~xor@74.215.182.83)
06:16:33 arahael joins (~arahael@124.168.94.52)
06:23:30 chomwitt joins (~chomwitt@ppp-94-69-177-170.home.otenet.gr)
06:24:56 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
06:26:13 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
06:31:01 nate3 joins (~nate@98.45.169.16)
06:31:48 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 248 seconds)
06:35:57 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 255 seconds)
06:59:00 kenran joins (~user@user/kenran)
06:59:44 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
07:04:05 lucerne joins (~lucerne@5.113.247.76)
07:14:41 × tgi quits (~thegeekin@189.180.115.115) (Ping timeout: 272 seconds)
07:14:43 bgs joins (~bgs@212-85-160-171.dynamic.telemach.net)
07:15:30 jtomas joins (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
07:16:47 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
07:22:39 × manwithl- quits (~manwithlu@194.177.28.176) (Read error: Connection reset by peer)
07:22:39 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
07:26:09 manwithluck joins (~manwithlu@194.177.28.176)
07:26:14 <Axman6> @hoogle stripPrefix
07:26:15 <lambdabot> Data.List stripPrefix :: Eq a => [a] -> [a] -> Maybe [a]
07:26:15 <lambdabot> GHC.OldList stripPrefix :: Eq a => [a] -> [a] -> Maybe [a]
07:26:15 <lambdabot> Data.ByteString stripPrefix :: ByteString -> ByteString -> Maybe ByteString
07:26:42 <Axman6> sm: this looks useful for the command line option parsing you're doing
07:27:05 <Axman6> > Data.List.stripPrefix "--output=" "--output=hello"
07:27:06 <lambdabot> Just "hello"
07:27:32 × lucerne quits (~lucerne@5.113.247.76) (Remote host closed the connection)
07:27:46 ski would like to be able to use that in a pattern synonym .. alas
07:28:07 <sm> thanks!
07:28:20 × jonathanx_ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 248 seconds)
07:28:20 acidjnk joins (~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de)
07:28:29 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:29:04 kuribas joins (~user@2a02:1810:2825:6000:f0b5:eba4:a391:e0d0)
07:30:23 <tomsmeding> ski: why not?
07:30:53 × shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit)
07:32:05 <ski> something like
07:32:10 <ski> pattern (++) :: Eq a => [a] -> ([a] -> [a])
07:32:18 <ski> pattern xs ++ ys <- (stripPrefix xs -> Just ys)
07:32:20 <ski> or even
07:32:26 <ski> pattern [ ] ++ ys <- ys
07:32:27 <ski> pattern (x:xs) ++ ys <- x : xs ++ ys
07:32:35 <ski> (recursively defined pattern synonym)
07:32:49 <ski> (rename `++' to something else, if you prefer)
07:34:49 <tomsmeding> ski: https://paste.tomsmeding.com/ln3QSYG5
07:34:58 <tomsmeding> use as (Prefix @"prefix" s)
07:35:10 <ski> tomsmeding : because pattern synonyms (as currently done .. unlike how functions in Mercury work, say), can only be applied to parameter patterns, not to parameter expressions. above, we define the pattern `xs ++ ys' for *expressions* `xs' and patterns `ys', in terms of pattern definentia (right-hand sides) (like `(stripPrefix xs -> Just ys)', or `ys', `x : xs ++ ys')
07:35:28 <tomsmeding> yes, see paste :p
07:35:50 <ski> hah, that's a cute trick :b
07:36:10 <tomsmeding> don't use in code that other people need to understand lol
07:36:20 <ski> in Mercury, one can declare
07:36:32 <ski> :- func list(T) ++ list(T) = list(T).
07:36:42 <ski> :- mode in ++ in = out is det.
07:36:50 <ski> :- mode in ++ out = in is semidet.
07:37:02 <tomsmeding> yeah prolog-likes cheat here
07:37:10 <ski> [ ] ++ Ys = Ys .
07:37:17 × acidjnk quits (~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
07:37:34 <ski> [X|Xs] ++ Ys = [X|XsYs] :- XsYs = Xs ++ Ys.
07:37:42 <ski> (or you can say just
07:37:50 <ski> [X|Xs] ++ Ys = [X|Xs ++ Ys].
07:37:53 <ski> if you prefer)
07:38:12 <ski> (read `:-' roughly like `where')
07:38:23 <ski> (it specifically means "if")
07:39:43 <tomsmeding> I've done minor messing around in prolog a while ago, I think I can read this
07:40:01 <tomsmeding> semidet is "doesn't match in multiple ways but might not match at all"?
07:40:01 <ski> (well, actually, the second case of `++' above should be something like
07:40:14 <ski> pattern (x0:xs) ++ ys <- x1 : xs ++ ys | x0 == x1
07:40:15 <ski> )
07:40:22 lucerne joins (~lucerne@5.113.247.76)
07:41:14 jonathanx joins (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
07:41:42 <ski> "semidet" means "at most one solution". or, if you prefer, `forall [Xs,XsYs] unique [Ys] Xs ++ Ys = XsYs' (where `unique' means "exists at most one")
07:41:50 <ski> (that
07:42:16 <tomsmeding> right that's what I was trying to say :p
07:43:13 <ski> 's the declarative interpretation of that mode (taking the `in's and `out's into account). the operational interpretation is that prior to the call, the `in' parameters are known/instantiated/uninitialized, while the `out' parameters are unknown/uninstantiated/uninitialized (and after the call, in case of success, both are instantiated/known))
07:44:49 <ski> ("det" means "exactly one solution", so `forall [Xs,Ys] exists_unique [XsYs] Xs ++ Ys = XsYs', which is the same as `forall [Xs,Ys] exists [XsYs0] forall [XsYs1] ( XsYs0 = XsYs1 <=> Xs ++ Ys = XsYs1 )')
07:44:53 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
07:44:53 × califax quits (~califax@user/califx) (Ping timeout: 255 seconds)
07:44:59 califax_ joins (~califax@user/califx)
07:45:15 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 255 seconds)
07:45:17 × lucerne quits (~lucerne@5.113.247.76) (Read error: Connection reset by peer)
07:45:46 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
07:46:15 califax_ is now known as califax
07:47:18 <ski> (while `forall [Xs,XsYs] unique [Ys] Xs ++ Ys = XsYs' means `forall [Xs,Ys0,Ys1,XsYs] ( Xs ++ Ys0 = XsYs,Xs ++ Ys1 = XsYs => Ys0 = Ys1)' .. which in this case can be rewritten as `forall [Xs,Ys0,Ys1] ( ( exists [XsYs] Xs ++ Ys0 = XsYs,Xs ++ Ys1 = XsYs ) => Ys0 = Ys1)', iow `forall [Xs,Ys0,Ys1] ( Xs ++ Ys0 = Xs ++ Ys1 => Ys0 = Ys1)', which we recognize as injectivity in the right parameter)
07:47:37 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 272 seconds)
07:48:16 <ski> (functional dependencies for type classes (being predicates/relations over types) can be interpreted declaratively in a similar way .. although they're less powerful than the Mercury mode declarations)
07:48:42 lortabac joins (~lortabac@2a01:e0a:541:b8f0:7800:8d62:667f:9e70)
07:49:57 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
07:50:20 mncheck joins (~mncheck@193.224.205.254)
07:51:11 <ski> Prolog is pretty neat .. and Mercury is quite cool, too
07:51:43 lucerne joins (~lucerne@5.113.247.76)
07:57:09 × ft quits (~ft@80.141.189.89) (Quit: leaving)
07:58:03 razetime joins (~quassel@117.254.35.246)
08:02:20 × m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 252 seconds)
08:03:18 × mbuf quits (~Shakthi@49.205.86.6) (Quit: Leaving)
08:06:48 m5zs7k joins (aquares@web10.mydevil.net)
08:09:16 odnes joins (~odnes@2a02:587:e907:c410::273)
08:09:23 × odnes quits (~odnes@2a02:587:e907:c410::273) (Remote host closed the connection)
08:10:28 × jargon quits (~jargon@174-22-194-21.phnx.qwest.net) (Ping timeout: 248 seconds)
08:11:52 chele joins (~chele@user/chele)
08:14:02 MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net)
08:14:11 CiaoSen joins (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
08:14:39 ubert1 joins (~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
08:19:55 Major_Biscuit joins (~MajorBisc@c-001-021-035.client.tudelft.eduvpn.nl)
08:19:58 jonathanx_ joins (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
08:21:04 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
08:21:06 cfricke joins (~cfricke@user/cfricke)
08:21:35 cyphase joins (~cyphase@user/cyphase)
08:22:12 × jonathanx quits (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Ping timeout: 248 seconds)
08:22:13 × MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 255 seconds)
08:24:42 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir)
08:25:40 cstml joins (~cstml@user/cstml)
08:26:34 × AlexZenon quits (~alzenon@178.34.163.109) (Read error: Connection reset by peer)
08:26:50 AlexZenon joins (~alzenon@178.34.163.109)
08:27:56 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:28:08 <cstml> Hi everyone, gentle reminder about the 2022 State of Haskell Survey.
08:29:14 <dminuoso> Mmm, Im quite annoyed by the prevalence of `Int` across so many functions, when most of the time `Word` would be more suitable.
08:29:37 <dminuoso> Every way I look at it, the numerics are for the most part extremely horribly done in Haskell.
08:30:30 <dminuoso> On the one hand Haskell is frequently advertised as being "reliable" with a "strong and expressive type system", but at the same time we use `Int` in most places where a negative Integer will lead to crashes, corruption, be silently truncated, or do unexpected things..
08:30:37 <dminuoso> And when we do fromIntegral, we get silent truncation everywhere.
08:30:54 michalz joins (~michalz@185.246.207.218)
08:30:57 <dminuoso> IEEE 754 calculations have no traps either, so that's another big issue.
08:31:46 <dminuoso> It's almost as if the widespread use of `Int` is admitting that people would be fromIntegral'ing their way between numbers anyway, and that the truncating behavior might as well be moved into call sites instead.
08:32:06 AlexNoo__ is now known as AlexNoo
08:34:12 <dminuoso> I would argue that dealing with numeric values is more fun in C than it is in Haskell. :(
08:34:43 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
08:35:07 × jludwig quits (~justin@li657-110.members.linode.com) (Ping timeout: 272 seconds)
08:35:38 <ski> dminuoso : would you expect `Word' rather than `Int' for `length' ?
08:35:59 <ski> (i assume you'd want it for `take',`drop',`splitAt', at least)
08:36:22 <dminuoso> Sure, or `timeout`, `replicateM`
08:36:25 <ski> yea, the downcoercions with `fromIntegral' aren't nice
08:36:38 ski nods
08:37:42 <ski> what about `Word' subtraction ?
08:38:43 <ski> (should one even perhaps have different types for modulo-`2^n' versions of `Word', and ones that signal on underflow & overflow ?)
08:38:46 <dminuoso> So Im fine with the overflow semantics in principle, though one could conceive a `withTraps :: a -> a` kind of primitives that will turn overflows into bottom.
08:39:01 <dminuoso> (Or via separate types, yes)
08:39:48 <dminuoso> Though on second thought, withTraps will be hard to impossible to implement nicely in a call-by-name setting
08:39:55 × paddymahoney quits (~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
08:40:14 × cstml quits (~cstml@user/cstml) (Quit: WeeChat 3.5)
08:40:21 <dminuoso> But one could still conceive either separate methods from a different module (such that you could use `x Trap.- y`), or like you said with a different type
08:40:25 <tomsmeding> yeah a separate type for with-traps computations would have clearer semantics
08:40:28 <tomsmeding> or that
08:40:36 ski . o O ( should we have a `Word'-torsor ? )
08:40:43 <tomsmeding> I feel like we should have an int-cast -like API instead of fromIntegral
08:40:50 <dminuoso> tomsmeding: Absolutely agreed.
08:40:58 <dminuoso> int-cast should be in base! :)
08:41:10 <tomsmeding> I'm using it frighteningly rarely
08:41:25 <ski> how would one do the coercions ?
08:41:29 <ski> MPTCs ?
08:41:44 cstml joins (~cstml@user/cstml)
08:41:44 vpan joins (~0@212.117.1.172)
08:41:50 <ski> (presumably one'd want to distinguish between upcoercions and downcoercions)
08:41:56 <tomsmeding> ski: https://hackage.haskell.org/package/int-cast-0.2.0.0/docs/Data-IntCast.html
08:43:59 × jonathanx_ quits (~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection)
08:45:44 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
08:49:14 <ski> why are some properties using ⌜≡⌝ while others use `==' ?
08:50:18 <tomsmeding> ¯\_(ツ)_/¯
08:50:22 <ski> also, for `toInteger (intCastIso a) == toInteger b' (provided `toInteger a == toInteger b'), shouldn't `intCastIso a' here be required to have the same type as `b' ?
08:50:42 <ski> (also, is `toInteger' not presumed to be injective ?)
08:50:57 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
08:51:14 <tomsmeding> ski: why would that be required?
08:51:51 <ski> (which ?)
08:52:06 <tomsmeding> that intCastIso a should have the same type as b
08:52:22 <tomsmeding> also toInteger doesn't exist lol
08:52:43 <ski> @type toInteger
08:52:44 <lambdabot> Integral a => a -> Integer
08:52:50 <tomsmeding> o
08:53:18 <tomsmeding> ah it's a type class method of course, hence 's' on hackage doesn't show it directly
08:53:20 <tomsmeding> I was fooled
08:58:05 <ski> well, say `a' has type `Int64', while `b' has type `Int' (on a `64'-bit platform, as they say the table assumes). then if we take `toInteger (intCastIso a :: Word64)', it would seem this will probably not compare equal to `toInteger b' (given `toInteger a' and `toInteger b' compare equal)
08:58:59 <ski> (e.g. `a = (-1) :: Int64' and `b = (-1) :: Int'. then `intCastIso a :: Word64' is presumably `maxBound :: Word64', which would still be positive after `toInteger')
09:00:03 × BB[m] quits (~cashmagem@2001:470:69fc:105::f6dc) (Quit: You have been kicked for being idle)
09:00:03 × bb010g quits (~bb010g@2001:470:69fc:105::9a5) (Quit: You have been kicked for being idle)
09:00:49 merijn joins (~merijn@86.86.29.250)
09:02:37 <tomsmeding> heh
09:03:19 <tomsmeding> yeah that's a documentation bug
09:03:54 <ski> (i would also expect `intCastIso' to be able to coerce from an integral type to itself ..)
09:04:11 <tomsmeding> it can
09:04:29 <tomsmeding> IsIntBaseTypeIso a a = 'True
09:04:58 <ski> hm, ok. haven't gotten that far down yet
09:05:07 <ski> (the table doesn't mention this)
09:05:10 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:7800:8d62:667f:9e70) (Quit: WeeChat 2.8)
09:05:33 <tomsmeding> but yeah that property is invalid
09:05:49 <tomsmeding> the first one, that intCastIso is its own inverse, is valid though, I guess
09:06:43 <tomsmeding> in fact that second listed property of intCastIso should be a property of intCastEq, it only holds if they really are the same representation with the same meaning
09:06:52 <tomsmeding> (modulo newtype/data wrappers)
09:07:19 <tomsmeding> well, no not same representation, but actually isomorphic in the sense of preserving all arithmetic operations
09:07:50 <ski> presumably the latter property is meant to express that if you have two types which you can convert between, using `intCastIso', then given an element in the "overlap" (as measured by `toInteger' applied to both of them), then `intCastIso' maps one to the other (at least up to applying `toInteger' to both sides)
09:08:36 <tomsmeding> hm, I guess that does hold, but it's not what the property says
09:08:46 <tomsmeding> and it's hard to describe concisely
09:08:53 <ski> it would say that, if it used a type ascription as i indicated
09:09:53 fserucas_ joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
09:09:53 <tomsmeding> where exactly? 'toInteger (intCastIso a :: alpha) == toInteger (b :: alpha) if toInteger a == toInteger b'?
09:10:51 <tomsmeding> hm, right, that plus the first property would give it
09:10:54 <tomsmeding> cool
09:10:59 fserucas joins (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
09:11:35 <tomsmeding> also int-cast needs a metadata update to build with ghc-9
09:11:50 <tomsmeding> which also shows it's underused
09:12:06 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
09:12:38 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
09:14:19 <ski> ∀ α β (a ∷ α) (b ∷ β) . toInteger (intCastIso (a ∷ α) ∷ β) == (toInteger b ∷ β) = True ⇐ toInteger a == toInteger b = True ∧ Integral α ∧ Integral β ∧ IsIntTypeIso α β = 'True
09:14:52 <tomsmeding> ski: toInteger (b ∷ β), not toInteger b ∷ β
09:14:56 <tomsmeding> but yeah
09:15:14 <ski> yea, sorry (meant to fix that, but forgot)
09:15:20 <tomsmeding> or just toInteger b, given the ascription in the forall :p
09:16:08 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
09:16:25 <ski> toInteger (intCastIso a ∷ β) == toInteger (b ∷ β) = True ⇐ toInteger a == toInteger b = True -- if you leave the quantification implicit, as well as the presuppositions
09:17:30 <tomsmeding> likely the most readable form
09:17:56 arjun joins (~arjun@user/arjun)
09:17:57 <ski> (if they had used ⌜≡⌝ here, i'd've skipped the `= True' parts)
09:19:32 × talismanick quits (~talismani@2601:200:c100:c9e0::1b0b) (Ping timeout: 246 seconds)
09:20:05 × Feuermagier quits (~Feuermagi@user/feuermagier) (Remote host closed the connection)
09:21:10 ski . o O ( "Torsors Made Easy" by John Baez in 2009-12-27 at <https://math.ucr.edu/home/baez/torsors.html> )
09:27:03 × Luj3 quits (~Luj@2a01:e0a:5f9:9681:1047:e6e7:4c5c:c3aa) (Quit: The Lounge - https://thelounge.chat)
09:27:45 Luj3 joins (~Luj@2a01:e0a:5f9:9681:82ee:b48:2fc3:8107)
09:28:32 <ski> (if you have (absolute) points, then the corresponding torsors are (relative) differences/vectors between them. you can add differences/vectors/torsors to each other, but you can't add absolute points to each other. you can add relative vectors to absolute points, though. e.g. adding `NominalDiffTime' to `UTCTime')
09:29:07 <tomsmeding> or simply points in 2D space
09:29:26 <tomsmeding> (works in nD, but most intuitive for n >= 2)
09:29:35 <ski> yes. affine space vs. linear/vector space
09:30:58 <tomsmeding> ah this is actually an example on the page
09:31:38 <ski> affine space has affine combination of points (weighted average, where weights add up to `1')
09:31:44 <tomsmeding> ski: so what was your point, consider Int to be a torsor of Word?
09:32:00 <ski> something like that, yea
09:32:08 <tomsmeding> not sure that's super helpful
09:32:32 <ski> (or maybe `Int65' for `Word64' ?)
09:32:38 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
09:33:14 ski 'sn't sure, either
09:34:33 <ski> hm, i guess you get boundscrossing anyway, in one direction, or the other, or both, with finite range
09:36:58 <ski> i think one reason i've heard people (e.g. in C) suggest to use signed rather than unsigned, even if negative doesn't make sense for some quantity in the problem domain, is it allow intermittent intermediate negative results in computations .. and also avoiding problems with `x >= 0', when decrementing `x' in a loop
09:38:18 <ski> s/is it/is to/
09:38:33 <dminuoso> ski: otoh signed overflow is undefined in most languages.
09:38:46 <dminuoso> That easily offsets any perceived advantages
09:38:51 <ski> yes
09:39:25 <merijn> The problem with unsigned is that even in Haskell underflow is hard to detect properly
09:39:57 <dminuoso> Well introducing additional primops for these operations that will bottom out is not difficult
09:40:16 <dminuoso> (Yes, we still get into imprecise exception semantics, but its better than nothing)
09:40:45 <dminuoso> The underlying CMM machinery is already in place
09:41:14 <dminuoso> plusWord2# :: Word# -> Word# -> (# Word#, Word# #)
09:41:37 <dminuoso> addWordC# :: Word# -> Word# -> (# Word#, Int# #)
09:42:08 <dminuoso> So we have the necessary machinery
09:43:24 <merijn> We have the technology!
09:44:16 × arjun quits (~arjun@user/arjun) (Quit: Leaving)
09:44:51 <ski> (one could do `i = count; do { i--; ..i.. } while (i > 0);' (or `i != 0') (possibly unsigned `i') rather than `i = count-1; while (i >= 0) { ..i.. i--; }' (signed `i'), though, assuming `count > 0')
09:45:42 <dminuoso> At the very least we should have IEE754 traps.
09:45:51 <ski> yes please
09:46:49 <ski> (reminds me that `real' is (no longer) an `eqtype', in SML)
09:47:47 <dminuoso> ski: However, its quite surprising how far people get with unlawful equality on IEEE754 numbers in JavaScript. I sometimes do wonder about the tradeoff of language elegancy and ergonomics.
09:47:56 <ski> dminuoso : a whole word, instead of just a carry ?
09:48:09 thyriaen joins (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1)
09:48:20 <dminuoso> ski: It's just an artifact of old design. There's ongoing work to turn these primops into sized word types.
09:48:56 <dminuoso> Until <=9.0 even the sized primtypes (e.g. Word8#/Int8#) were just mapped to Word#/Int#
09:49:27 <dminuoso> which is why it didnt make a difference - but this is currently changing. not sure whether these particular primops are on the scope of the folks reworking them
09:49:48 <ski> multiplication and division as well ?
09:50:12 <dminuoso> Yes
09:50:25 <dminuoso> I mean we already have: timesWord16# :: Word16# -> Word16# -> Word16# and the likes
09:50:38 × olivermead quits (~olivermea@cpc72329-sotn15-2-0-cust205.15-1.cable.virginm.net) (Remote host closed the connection)
09:50:50 <ski> so not `Word32#' result
09:51:19 <dminuoso> Right, and unlike older GHC versions, this will in CMM actually be mapped to such short registers
09:51:45 <ski> (also (tangentially) i'd like to see `mod n 0 = n' and `rem n 0 = n')
09:51:58 <ski> (well, at least for `mod')
09:52:05 elevenkb joins (~elevenkb@105.184.125.168)
09:52:19 <dminuoso> Can you elaborate your reason for that?
09:52:40 <dminuoso> Is mod 0 commonly defined in some fields of mathematics?
09:54:18 <ski> `mod n d' and `rem n d' chooses a representative of an equivalence class (coset) in ⌜ℤ ∕ (d⋅ℤ)⌝ (given ⌜n,d : ℤ⌝)
09:54:38 jludwig joins (~justin@li657-110.members.linode.com)
09:55:24 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:55:24 acidjnk joins (~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de)
09:55:26 <dminuoso> But isnt ℤ/0 ~= ℤ?
09:55:56 <dminuoso> Picking `rem n 0 = n` seems quite arbitrary here, it could according to this also be `minBound` or `maxBound` easily
09:55:59 <dminuoso> Or 0.
09:56:49 <ski> if ⌜d = 0⌝, then ⌜ℤ ∕ (0⋅ℤ)⌝ is just ⌜ℤ⌝. ⌜a ≡ b (mod 0)⌝ simply means ⌜a = b⌝ (generally ⌜a ≡ b (mod d)⌝ means ⌜d ∣ a − b⌝, iow ⌜∃ k : ℤ . a = b + k⋅d⌝)
09:57:08 <ski> dminuoso : it's the only sensible choice (apart from leaving it undefined)
09:59:30 <ski> also, if you have ⌜0 ⋅ _ = 0⌝ (non-strict), then you even get ⌜d ⋅ div n d + mod n d = n⌝, also when ⌜d = 0⌝
10:01:24 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds)
10:02:01 <ski> if you have an element ⌜g⌝ (always invertible) in a group, and you look at the sequence ⌜⋯,g⁻²,g⁻¹,1,g,g²,g³,⋯⌝, then if this sequence is periodic, with period ⌜p⌝, we say that ⌜p⌝ is the order of the element ⌜g⌝ (how many times one have to multiply it by itself to get back to ⌜1⌝)
10:02:50 teo_ joins (~teo@user/teo)
10:02:55 <ski> if the sequence never loops, then the correct period ⌜p⌝ to assign is ⌜0⌝ ! (people traditionally often say ⌜∞⌝, but i don't like this too much)
10:02:57 teo_ is now known as teo
10:04:31 <ski> the reason is that the correct ordering of periods to consider is the divisibility ordering ⌜∣⌝ (the multiplicative/geometric ordering), where ⌜0⌝ is the *greatest* element; rather than the usual (additive/arithmetic) ordering ⌜≤⌝
10:05:23 __monty__ joins (~toonn@user/toonn)
10:08:58 <ski> (the reason is that if ⌜m ∣ n⌝, then ⌜gᵐ = 1 ⇒ gⁿ = 1⌝ .. but that doesn't follow from ⌜m ≤ n⌝, in general. note that the claim that ⌜m⌝ is the order of ⌜g⌝ can be defined as ⌜∀ n. m ∣ n ⇔ gⁿ = 1⌝ .. which we read out aloud as "⌜m⌝ is the least ⌜n⌝ (in the divisibility order) such that ⌜gⁿ = 1⌝)
10:10:23 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Remote host closed the connection)
10:12:28 <tomsmeding> completely unrelated question: if you give cabal a too-new ghc with -w, it gives a "warning" and runs away. Can I convince cabal to just go on and try?
10:13:12 <dminuoso> Whats the warning you get?
10:13:23 <ski> (("universal") properties of the shape ⌜∀ y. x ≤ y ⇔ P y⌝ only make sense when ⌜P⌝ is a monotonic/increawsing/upper property, iow if ⌜x ≤ y⌝ and ⌜P x⌝, then ⌜P y⌝. so if ⌜P⌝ holds at a point, it also holds at all greater points. the property ⌜gⁿ = 1⌝ is monotonic/increasing in ⌜n⌝, only when the ordering we use is the divisibility ordering)
10:13:38 <tomsmeding> dminuoso: "Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.6.2.0 supports 'ghc' version < 9.4): /path/to/ghc is version 9.5.20221103"
10:14:01 <dminuoso> tomsmeding: its just a warning, no?
10:14:09 <tomsmeding> that's what I thought
10:14:13 <dminuoso> But?
10:14:22 <tomsmeding> that's all it says, no more actions/output
10:14:31 <merijn> It's not
10:14:37 <merijn> cabal is not forward compatible
10:14:44 <dminuoso> merijn: judging from the code, its just a warning.
10:15:02 <dminuoso> So it may be that cabal silently crashes in a different place, but that particular diagnostic is not a fatal error.
10:15:14 <merijn> I'm not saying the diagnostic is fatal
10:15:18 × jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
10:15:28 <merijn> I'm saying "cabal is not forward compatible, so you have zero guarantees of success"
10:15:34 <merijn> hence, the warning
10:15:55 <dminuoso> tomsmeding: What happens if you run with -v3?
10:16:01 <dminuoso> Can you observe it proceeding with anything?
10:16:22 <tomsmeding> secretly it's not me that's getting this, it's a friend of mine; I'll ask him :)
10:18:23 Guest75 joins (~Guest75@178.141.177.81)
10:18:43 <tomsmeding> ah there _was_ more output: cabal subsequently complained about ghc-pkg which wasn't up to date with the custom too-new ghc
10:19:01 <tomsmeding> telling him to fix the ghc install so that all tools get correctly installed before retrying :)
10:22:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
10:26:16 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
10:27:15 <dminuoso> Okay so you're secretly playing proxy support while you yourself are being lied to!
10:27:34 <dminuoso> That's a nice friend of yours.
10:27:38 <tomsmeding> yes!
10:27:38 <dminuoso> :p
10:27:59 <tomsmeding> I mean, they did offer to ask the question here themselves, but I was faster
10:29:25 × kuribas quits (~user@2a02:1810:2825:6000:f0b5:eba4:a391:e0d0) (Quit: ERC (IRC client for Emacs 27.1))
10:30:37 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
10:31:03 × acidjnk quits (~acidjnk@p200300d6e7137a51b984c8c27a82076c.dip0.t-ipconnect.de) (Remote host closed the connection)
10:31:21 acidjnk joins (~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de)
10:31:48 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
10:32:58 jludwig joins (~justin@li657-110.members.linode.com)
10:33:06 nate3 joins (~nate@98.45.169.16)
10:35:32 × Kaipei quits (~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
10:36:18 × acidjnk quits (~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
10:37:49 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
10:39:51 × __monty__ quits (~toonn@user/toonn) (Ping timeout: 255 seconds)
10:45:49 hugo1 joins (~hugo@145.136.129.212)
10:46:32 __monty__ joins (~toonn@user/toonn)
10:51:48 lortabac joins (~lortabac@2a01:e0a:541:b8f0:f5b1:39e2:deb2:275)
10:58:31 king_gs joins (~Thunderbi@187.201.83.115)
10:59:00 × chomwitt quits (~chomwitt@ppp-94-69-177-170.home.otenet.gr) (Ping timeout: 248 seconds)
11:09:03 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
11:10:52 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
11:11:54 jinsun joins (~jinsun@user/jinsun)
11:14:03 × ubert1 quits (~Thunderbi@178.115.71.138.wireless.dyn.drei.com) (Ping timeout: 255 seconds)
11:15:41 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Ping timeout: 276 seconds)
11:16:05 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
11:17:30 elevenkb joins (~elevenkb@105.184.125.168)
11:21:38 Guest|51 joins (~Guest|51@95.10.63.122)
11:22:11 × Guest|51 quits (~Guest|51@95.10.63.122) (Client Quit)
11:24:22 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
11:24:51 beteigeuze joins (~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
11:29:30 <merijn> Once again the Haskell Survey question on extensions is a mess that forces kinda misleading answers
11:30:15 × king_gs quits (~Thunderbi@187.201.83.115) (Read error: Connection reset by peer)
11:31:48 king_gs joins (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6)
11:33:20 <[exa]> and prolog is again missing
11:34:22 LarchOye1 joins (nonmoose@2604:2d80:6789:9100:b1fe:b223:d6bb:6b68)
11:34:36 LarchOye1 parts (nonmoose@2604:2d80:6789:9100:b1fe:b223:d6bb:6b68) ()
11:36:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
11:38:04 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
11:38:08 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
11:39:35 <AndreasK> merijn: In what way?
11:42:02 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
11:42:02 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
11:43:00 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:43:34 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
11:44:13 ec joins (~ec@gateway/tor-sasl/ec)
11:44:32 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
11:44:58 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
11:45:30 pitiK3U joins (~Piti@user/pitiK3U)
11:45:51 elevenkb joins (~elevenkb@105.184.125.168)
11:48:00 × tureba quits (~tureba@tureba.org) (Ping timeout: 268 seconds)
11:51:06 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
11:52:18 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 255 seconds)
11:52:46 kuribas joins (~user@2a02:1810:2825:6000:75a5:ce7d:3131:4615)
11:54:28 × hueso quits (~root@user/hueso) (Ping timeout: 248 seconds)
11:55:58 acidjnk joins (~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de)
11:58:01 hueso joins (~root@user/hueso)
12:00:28 × fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 255 seconds)
12:00:28 × fserucas_ quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 255 seconds)
12:07:01 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
12:08:39 <dminuoso> Regarding setSocketCloseOnExec: https://github.com/mzero/plush/blob/master/src/Plush/Server/Warp.hs
12:09:00 <dminuoso> Why exactly would it be necessary to set close on exec on the socket?
12:09:33 <dminuoso> Ive went through the manual pages of open(2) and socket(2) a few times, but the wording is way too abstract for me to come up with concrete examples why not doing this could be problematic
12:10:22 × CiaoSen quits (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
12:11:32 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
12:12:38 <dminuoso> It seems to cause problems, the haskell server code would have to `fork` first (which already seems notoriously unsafe with GHC RTS), in which case the forked process would have a valid file descriptor to my socket in the haskell server
12:14:01 <dminuoso> The thing that confuses me most, is the wording in the haddock documentation "into processes fork/exec'ed by the shell". Surely running `my-haskell-server&` in a shell will not leak the file descriptor to the outside shell
12:16:09 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 272 seconds)
12:17:05 <tomsmeding> dminuoso: isn't the idea of close-on-exec that child processes you start don't inherit the socket?
12:17:53 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
12:18:26 <dminuoso> Right, but the only way this would ever be a problem in haskell if you used forkProcesses, in which case you're already insane.
12:19:02 <tomsmeding> dminuoso: doesn't the same happen through other ways of spawning processes?
12:19:11 <tomsmeding> e.g. System.Process stuff
12:19:57 <tomsmeding> I've been using withCreateProcess and fd's were inherited
12:20:31 Kaipei joins (~Kaiepi@108.175.84.104)
12:21:06 <dminuoso> I find forking to be a really strange concept that wont make sense.
12:21:25 <dminuoso> But anyway, I suppose withCreateProcess will end up calling execve or some such, uh?
12:21:32 <tomsmeding> one need not fork to get this
12:21:36 <tomsmeding> it will use posix_spawn
12:21:49 <tomsmeding> (if available, otherwise vfork/exec iirc)
12:21:54 <dminuoso> Okay, but close-on-exec wouldnt affect that.
12:21:59 <dminuoso> Only if exec was used.
12:22:07 <dminuoso> close-on-exec is documented to only affect fork/exec calls.
12:22:14 <tomsmeding> really?
12:22:33 <dminuoso> Hold on
12:22:42 <tomsmeding> dminuoso: from the posix_spawn manpage: "3. File descriptors with the FD_CLOEXEC flag set are closed."
12:22:55 <tomsmeding> otherwise CLOEXEC would be utterly useless
12:23:00 <tomsmeding> well not utterly, but very
12:23:31 fserucas joins (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
12:23:33 <dminuoso> No this is a glibc documentation bug then possibly
12:23:35 <dminuoso> https://www.gnu.org/software/libc/manual/html_node/Descriptor-Flags.html
12:23:41 <dminuoso> This flag specifies that the file descriptor should be closed when an exec function is invoked; see Executing a File.
12:23:43 fserucas_ joins (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2)
12:23:53 <dminuoso> https://www.gnu.org/software/libc/manual/html_node/Executing-a-File.html
12:24:08 <tomsmeding> you know what's another glibc documentation bug? can write(2) return 0 on a non-O_NONBLOCK fd
12:24:08 <dminuoso> Sorry, I had this documentation in mind
12:24:40 jakalx joins (~jakalx@base.jakalx.net)
12:24:57 dminuoso does not want to depend on `unix` just to set close on exec... :(
12:25:00 × Patternmaster quits (~georg@user/Patternmaster) (Ping timeout: 268 seconds)
12:25:02 <tomsmeding> right, that could take clarification
12:25:20 <tomsmeding> though posix_spawn is documented as simulating a specific usecase of fork/exec
12:25:45 <tomsmeding> I've also gotten error codes from posix_spawn that are not documented as possible codes
12:25:54 <dminuoso> "In fact, they provide only a subset of the functionality that can be achieved by using the system calls."
12:26:04 <tomsmeding> I think taking statements like this to exclude all other possibilities is fraught in unix documentation
12:26:05 <dminuoso> Which really reads as "please read both manuals side-by-side and figure out the differences"
12:26:26 <tomsmeding> no, it means "the relation is only on a high level, the implementation is completely separate, read this manual page in full"
12:26:35 <dminuoso> fair enough
12:26:38 × Guest75 quits (~Guest75@178.141.177.81) (Ping timeout: 260 seconds)
12:26:39 <tomsmeding> this documentation is not maths, unfortunately
12:26:48 <tomsmeding> but getting it watertight would blow up size by 10x probably
12:26:51 <tomsmeding> also not ideal
12:27:13 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
12:27:29 <dminuoso> But actually... mmm. I want signal handling anyway. So `unix` it is.
12:31:53 <tomsmeding> dminuoso: it's a boot lib, it's not that bad
12:32:11 × hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
12:32:12 paddymahoney joins (~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com)
12:32:12 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
12:32:18 × pitiK3U quits (~Piti@user/pitiK3U) (Read error: Connection reset by peer)
12:32:42 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
12:32:48 xff0x joins (~xff0x@2405:6580:b080:900:dde7:2b6c:97ae:a5eb)
12:33:09 <tomsmeding> most of the things in the manpage for a function will actually happen
12:33:21 <tomsmeding> but if it's not in the manpage, it might still happen! :D
12:33:39 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:34:46 jonathanx_ joins (~jonathan@c-5eea602c-74736162.cust.telenor.se)
12:35:16 <merijn> dminuoso: Time to buy the book I keep telling everyone about
12:35:18 <merijn> dminuoso: No
12:35:25 <merijn> dminuoso: You don't want signal handling >.<
12:35:53 <merijn> you just think you do, because it seems like something that, you know, sane semantics
12:36:00 <merijn> Instead of being an eldritch nightmare
12:37:22 × [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
12:37:25 <dminuoso> No I do want it.
12:37:41 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds)
12:37:42 <dminuoso> I kind of like a controlled graceful shutdown on SIGINT/SIGTERM.
12:37:44 [Leary] joins (~Leary]@user/Leary/x-0910699)
12:37:59 <merijn> Well, you can't have that in Haskell, atm :p
12:38:04 <dminuoso> Sure I can,.
12:38:16 <dminuoso> It may not behave well in exotic edge cases, but in practice it does work.
12:38:41 × acidjnk quits (~acidjnk@p200300d6e7137a51b1aa0752e3eaff2e.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
12:40:33 <merijn> dminuoso: Anyway, time to invest in a copy of APUE ;)
12:40:39 <dminuoso> Mmm, its actually on my shelf
12:41:16 <merijn> That coulda answered all your CLOEXEC like questions :p
12:42:55 abhiroop joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
12:43:50 × [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
12:44:09 [Leary] joins (~Leary]@user/Leary/x-0910699)
12:45:20 hughjfchen joins (~hughjfche@vmi556545.contaboserver.net)
12:47:41 × hugo1 quits (~hugo@145.136.129.212) (Quit: WeeChat 3.5)
12:47:59 × Neuromancer quits (~Neuromanc@user/neuromancer) (Quit: Going offline, see ya! (www.adiirc.com))
12:59:00 × razetime quits (~quassel@117.254.35.246) (Ping timeout: 248 seconds)
12:59:57 simendsjo joins (~user@84.211.91.241)
13:00:47 jonathanx__ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
13:01:36 × causal quits (~user@50.35.83.177) (Quit: WeeChat 3.7.1)
13:03:16 × jonathanx_ quits (~jonathan@c-5eea602c-74736162.cust.telenor.se) (Ping timeout: 248 seconds)
13:06:26 × simendsjo quits (~user@84.211.91.241) (Remote host closed the connection)
13:13:00 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
13:16:32 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
13:17:21 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb) (Ping timeout: 255 seconds)
13:22:48 <merijn> Someone at the Haskell Survey also needs to update where they're getting their country list from...
13:22:55 <merijn> "Netherland Antilles"??
13:23:13 <merijn> Those haven't existed for well over a decade now
13:26:01 nschoe joins (~q@141.101.51.197)
13:26:54 <vpan> hi, is it possible to skip records when parsing using cassava? https://hackage.haskell.org/package/cassava-0.5.3.0/docs/Data-Csv.html#t:FromRecord mentions `empty`, `mzero`, `fail`, but I can't find a way to indicate skipping instead of failure. I could filter after loading all records, but that feels like a workaround.
13:29:31 <kuribas> vpan: no, you'll need to filter after parsing.
13:29:45 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds)
13:31:56 <tomsmeding> merijn: I recently made an account somewhere that had a country list with the antilles included, but something like "(formerly)" appended
13:32:49 × Sauvin quits (~sauvin@user/Sauvin) (Quit: Leaving)
13:33:24 <__monty__> vpan: Though through things like fusion "filtering after parsing" may actually happen during parsing.
13:34:16 × marienz quits (~marienz@libera/staff/marienz) (Ping timeout: 615 seconds)
13:35:26 tomku joins (~tomku@user/tomku)
13:35:39 Sauvin joins (~sauvin@user/Sauvin)
13:36:00 <vpan> __monty__: sounds interesting, but I'm implementing my first application in Haskell, so I think I should maybe leave fusion alone for a while :)
13:36:13 <merijn> tomsmeding: I see the Netherlands Antilles in many places, which makes me kinda curious were people are getting these wildly outdated country lists (and what else is wrong on them)
13:39:01 <kuribas> vpan: you don't have a choice :)
13:40:43 <vpan> well then, as long as it's not cold fusion...
13:41:13 marienz joins (~marienz@libera/staff/marienz)
13:41:43 <__monty__> vpan: It's just something that can happen in the background and is a good thing when it does. Makes certain things that look inefficient efficient.
13:44:12 <vpan> __monty__: ok, then that sounds like a kind of optimization. I don't think I've heard fusion in Haskell context, so I assumed "if you don't know fusion, you don't need it". :)
13:45:49 <geekosaur> sometimes you do need to rearrange code to encourage it to happen, but 90+% of the time the compiler does it for you
13:46:05 <geekosaur> and the times it doesn't are usually worth bug reports somewhere
13:46:28 × motherfsck quits (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
13:46:41 × paddymahoney quits (~paddymaho@cpe9050ca207f83-cm9050ca207f80.cpe.net.cable.rogers.com) (Remote host closed the connection)
13:47:19 shriekingnoise joins (~shrieking@186.137.167.202)
13:48:57 Sgeo joins (~Sgeo@user/sgeo)
13:49:03 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
13:50:35 × kuribas quits (~user@2a02:1810:2825:6000:75a5:ce7d:3131:4615) (Quit: ERC (IRC client for Emacs 27.1))
13:51:24 × king_gs quits (~Thunderbi@2806:103e:29:47b9:f34b:ffff:4cfc:90a6) (Quit: king_gs)
13:51:30 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
13:52:11 × thyriaen quits (~thyriaen@2a01:aea0:dd4:470d:6245:cbff:fe9f:48b1) (Remote host closed the connection)
13:52:55 acidjnk joins (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
13:53:01 chomwitt joins (~chomwitt@athedsl-351939.home.otenet.gr)
13:54:56 wand joins (~user@gateway/tor-sasl/wand)
13:56:04 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
13:58:49 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
13:59:12 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 246 seconds)
13:59:51 Xeroine joins (~Xeroine@user/xeroine)
14:00:10 motherfsck joins (~motherfsc@user/motherfsck)
14:03:22 × megaTherion quits (~therion@unix.io) (Quit: ZNC 1.8.2 - https://znc.in)
14:05:01 Heyting joins (~Heyting@193.198.16.217)
14:05:07 megaTherion joins (~therion@unix.io)
14:05:30 × Heyting quits (~Heyting@193.198.16.217) (Client Quit)
14:09:55 dcoutts_ joins (~duncan@host81-156-211-157.range81-156.btcentralplus.com)
14:10:36 Heyting joins (~Heyting@193.198.16.217)
14:10:59 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
14:11:46 ec joins (~ec@gateway/tor-sasl/ec)
14:12:36 × dcoutts quits (~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 248 seconds)
14:18:56 dcoutts__ joins (~duncan@host81-156-211-157.range81-156.btcentralplus.com)
14:21:42 × dcoutts_ quits (~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
14:22:14 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
14:22:22 thegeekinside joins (~thegeekin@189.180.115.115)
14:24:24 ec joins (~ec@gateway/tor-sasl/ec)
14:25:24 dcoutts_ joins (~duncan@host81-156-211-157.range81-156.btcentralplus.com)
14:28:00 × dcoutts__ quits (~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 255 seconds)
14:29:52 × juri_ quits (~juri@84-19-175-179.pool.ovpn.com) (Ping timeout: 250 seconds)
14:30:45 razetime joins (~quassel@117.254.35.246)
14:33:56 × shachaf quits (~shachaf@user/shachaf) (Ping timeout: 276 seconds)
14:34:12 nate3 joins (~nate@98.45.169.16)
14:36:02 juri_ joins (~juri@84.19.175.179)
14:36:24 irrgit_ joins (~irrgit@146.70.27.250)
14:39:17 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 272 seconds)
14:40:55 dcoutts__ joins (~duncan@host109-149-38-108.range109-149.btcentralplus.com)
14:43:16 × kenran quits (~user@user/kenran) (Remote host closed the connection)
14:43:43 × dcoutts_ quits (~duncan@host81-156-211-157.range81-156.btcentralplus.com) (Ping timeout: 272 seconds)
14:45:59 tureba joins (~tureba@tureba.org)
14:46:17 elevenkb joins (~elevenkb@105.184.125.168)
14:48:21 nisstyre joins (wes@user/nisstyre)
14:48:41 × epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
14:51:14 dcoutts joins (~duncan@host109-149-38-108.range109-149.btcentralplus.com)
14:53:39 × dcoutts__ quits (~duncan@host109-149-38-108.range109-149.btcentralplus.com) (Ping timeout: 255 seconds)
14:54:54 dcoutts_ joins (~duncan@host109-149-38-108.range109-149.btcentralplus.com)
14:54:58 shachaf joins (~shachaf@user/shachaf)
14:55:05 tolt joins (~weechat-h@li219-154.members.linode.com)
14:56:53 × abhiroop quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Remote host closed the connection)
14:57:16 abhiroop joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
14:57:42 × dcoutts quits (~duncan@host109-149-38-108.range109-149.btcentralplus.com) (Ping timeout: 255 seconds)
15:01:08 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
15:02:51 × Heyting quits (~Heyting@193.198.16.217) (Quit: Connection closed)
15:06:44 SridharRatnakuma joins (~sridmatri@2001:470:69fc:105::1c2)
15:08:42 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
15:09:51 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
15:14:58 <lortabac> I have a memory leak that is (for various reasons) impossible to reproduce locally. Is it a bad idea to run the profiler in production?
15:15:58 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
15:16:09 <merijn> Depends, are performance regression in production a problem?
15:16:14 × wand quits (~user@gateway/tor-sasl/wand) (Ping timeout: 255 seconds)
15:16:21 <merijn> i.e. "define production"
15:17:17 <lortabac> production is what the customers are actually using
15:17:37 <lortabac> a little performance regression is not a problem
15:17:52 <merijn> I would not assume "little"
15:17:53 <lortabac> it's a low-traffic service
15:18:01 <merijn> You can easily have 10x slowdown
15:18:38 <lortabac> erm... I think 10x would not be acceptable
15:19:04 <lortabac> up to 2x-3x I would say it's ok
15:19:15 <merijn> Then it's probably not a great idea in production unless you test how big the impact is first :p
15:19:44 <lortabac> I imagined the profiler to have a smaller impact
15:19:56 <jlgw_> lortabac: Maybe you can set up a staging environment?
15:20:22 <lortabac> we already have various environments, but the leak is only visible in production
15:20:35 Franciman joins (~Franciman@mx1.fracta.dev)
15:21:55 × vpan quits (~0@212.117.1.172) (Quit: Leaving.)
15:21:55 × jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in)
15:22:18 CiaoSen joins (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
15:22:54 jludwig joins (~justin@li657-110.members.linode.com)
15:24:04 <merijn> lortabac: the profiler needs cost centers which inhibits certain optimisations
15:24:29 <merijn> So depending on how crucial those are for your performance you might have MASSIVE regression or "hardly any"
15:27:29 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
15:27:52 <lortabac> merijn: thanks, I will try to avoid profiling in production for the moment
15:28:07 econo joins (uid147250@user/econo)
15:28:25 <lortabac> if I really need it, I will get some performance data first
15:28:43 wootehfoot joins (~wootehfoo@user/wootehfoot)
15:28:44 <merijn> lortabac: There's some work on other ways to profile nowadays too, e.g., DWARF symbols
15:28:49 <merijn> which should have less/no overhead
15:29:00 <merijn> but you have to consult the GHC user guide for details
15:32:14 abhiroop_ joins (~abhiroop@c-5eea67ce-74736162.cust.telenor.se)
15:32:29 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
15:33:08 × abhiroop quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 248 seconds)
15:33:39 <lortabac> I don't think I can get a heap profile with DWARF, can I?
15:34:28 <merijn> ah, yeah, I guess not
15:34:36 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:b8c3:aabe:4f47:1efb)
15:38:03 <simple> tfw you come to programming channel, and fear asking a bad question so much that you google it a bit more to be able to refer to it with better words, and you end up solving it yourself
15:38:34 <geekosaur> we don't bite 🙂 the only bad question is the one that isn't asked
15:41:21 <simple> I do wonder if i did it the best way though. I'm building a server that can accept multiple connections, and needs to track state. Before you comment on that, I'm just trying to capture the time of startup in a (gasp) global variable in module Main, so i can hPutStr something like 'this server was started at 2022-11-04 08:41:24'
15:42:05 <simple> since time is an IO monady thingy, it made it a bit difficult..
15:42:38 <c_wraith> does it need to be global, or just available to your connection handlers?
15:43:09 <simple> well, there are a few different functions that would need it, but not many
15:43:19 <merijn> MVar/IORef?
15:43:40 <simple> i come from a Perl background, so that probably helps you with my thought process
15:45:25 × jtomas quits (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 246 seconds)
15:45:26 <simple> serverStartTime :: () -> Int \n serverStartTime () = do \n now <- getCurrentTime \n show now
15:45:47 <simple> it compiles, at least..
15:45:51 <lortabac> simple: can't you just pass 'now' to all the functions that need it?
15:45:59 <c_wraith> While it's possible to create global variables, it's.. dangerous. Haskell really isn't intended to work that way, so there are a lot of pitfalls; places the compiler might do something weird because it's designed with the assumption that top-level values are pure and immutable.
15:46:27 <merijn> simple: eh, it is *highly* suspicious that compiles :p
15:46:34 <merijn> Can you pastebin the entire main?
15:46:35 <simple> yeah.. it doesn't, sorry
15:47:01 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
15:47:03 <simple> i guess i didn't finish it last night when my eyes were falling shut
15:47:21 <c_wraith> It's much more common to be explicit about these things and pass values around as needed. Maybe a bunch of them packaged up together into an Environment type that could hold a bunch of these concerns
15:47:35 <simple> i can pastebin the whole thing, it's an attempt at building a whole IRCD in Haskell
15:48:27 <merijn> simple: I mean, I'd just do "getCurrentTime" in main and pass the result to any further code, as lortabac suggests
15:48:43 <simple> https://paste.tomsmeding.com/SCbGYyLi
15:49:30 <simple> i'm pretty sure there's a lot of naive code in that pastebin right now
15:50:08 <merijn> simple: I mean, why can't the current time be an argument to "premotd" (via an extra argument to processConnect)?
15:50:26 <simple> i don't want the current time, i want the time that the server started
15:50:31 <merijn> simple: Yes
15:51:16 <merijn> simple: You just do "now <- getCurrentTime" after the ' putStrLn "Listening on 6667..."' and pass 'now' as extra argument to processConnect?
15:52:10 <simple> then i would have to pass it around to everything else too in a dependency chain?
15:52:36 <merijn> Sure
15:52:46 seriley joins (~seriley@97-120-69-62.ptld.qwest.net)
15:52:59 <merijn> But how many places do you need to pass it too, seems like just one
15:53:33 <geekosaur> do you not have other top level state? I'd think you would have server configuration options
15:53:38 <simple> i understand that would work. it does feel awful weird to me though, having always used globally available variables
15:54:03 <merijn> simple: Global variables aren't really thing and global variables based on IO are even less of a thing
15:54:07 <simple> geekosaur: yeah, the plan is to create a settings file eventually, i was trying to hardcode it at the top
15:54:09 <merijn> Especially if you value sanity
15:54:31 <merijn> simple: Normally you'd define a Config datatype and use something like ReaderT to propagate the entire config type through your application
15:54:32 <geekosaur> we prefer to be explicit about it, so you always know what's available when. and these days globals are somewhat frowned upon even in languages that have them, just because they complicate reasoning about code
15:54:59 <merijn> And then everything just has a explicit Config argument
15:56:03 simple nods
15:56:20 <simple> that makes more sense, thank you merijn, geekosaur
15:56:46 <simple> c_wraith: documention somewhere about Environment type?
15:57:24 <merijn> simple: He just means what I said some custom ADT holding the config :p
15:57:25 <geekosaur> also if you plumb your config now it means you don't have to rewrite everything later when you want to add server config
15:57:39 <simple> merijn: this Config? https://hackage.haskell.org/package/config-value-0.8.3/docs/Config.html
15:58:41 <simple> probably not that link, ugh
15:58:44 <geekosaur> no, you'd define something specific to your application
15:59:07 <merijn> No, just a datatype you define for yourself, like "data Config = Config { serverUrl :: String, serverPort :: Int, serverStart :: Time, ... }"
15:59:55 <simple> that even makes it easier to hardcode it short-term. but i'll have to pass around that whole config instance too, right?
16:00:03 × Orbstheorem quits (~orbstheor@2001:470:69fc:105::a56) (Quit: You have been kicked for being idle)
16:00:18 <merijn> simple: You'd pass around the whole config thing yes
16:00:23 × teo quits (~teo@user/teo) (Ping timeout: 276 seconds)
16:00:34 <geekosaur> so, I'm one of the maintainers of xmonad, a window manager written in Haskell. we have an XConf holding te user config, a connection to the X server, and various other read-only configuration values. there's also an XState holding the read-write state such as the current workspace setup including which windows are on which workspaces
16:00:39 <merijn> And yes, it makes it trivial to hardcode things and then later replace the hardcoded thing with "loadConfig :: FilePath -> IO Config"
16:01:18 <geekosaur> newtype X a = StateT XState (ReaderT XConf IO) a
16:01:59 <geekosaur> and then everything that needs it is … -> X a for some relevant a
16:02:22 × razetime quits (~quassel@117.254.35.246) (Read error: Connection reset by peer)
16:02:24 <geekosaur> and Haskell takes care of making sure everything gets an XState and XConf
16:02:36 razetime joins (~quassel@117.254.35.246)
16:03:02 <simple> that's still a little over my head. but i'm learning fast. it'd probably make sense to me in a week.
16:04:52 <merijn> simple: Pretend "(ReaderT XConf IO) a" in that is just "XConf -> IO a" :)
16:05:38 <geekosaur> @unmtl StateT XState (ReaderT XConf IO) a
16:05:38 <lambdabot> XState -> XConf -> IO (a, XState)
16:06:01 <seriley> in ghci, how can I determine what warnings are enabled?
16:06:56 jtomas joins (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net)
16:08:09 segfaultfizzbuzz joins (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
16:08:41 <merijn> simple: The other advantage is that it's fairly easy to add/remove fields to the config and immediately get errors when you're (trying to) use removed fields
16:09:25 <merijn> "ReaderT Config" has to be one of the pattern with the best "power/convenience-to-cost" ratios in Haskell
16:09:25 × abhiroop_ quits (~abhiroop@c-5eea67ce-74736162.cust.telenor.se) (Read error: Connection reset by peer)
16:09:47 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
16:09:56 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 248 seconds)
16:10:49 <seriley> oops! Found it...use :seti
16:12:39 abhiroop_ joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
16:12:56 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
16:12:56 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
16:13:03 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
16:13:06 coot joins (~coot@213.134.171.3)
16:13:08 <c_wraith> seriley: oh hey. Neat. I hadn't realized -fimplicit-import-qualified was an extension, but it's obvious what it does from how ghci works
16:13:09 × califax quits (~califax@user/califx) (Quit: ZNC 1.8.2 - https://znc.in)
16:13:24 califax joins (~califax@user/califx)
16:13:25 <c_wraith> well. a flag, not an extension
16:14:12 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 248 seconds)
16:14:28 <seriley> Why isn't an incomplete patterns warning given for factorial :: Integer -> Integer;factorial 0 = 1;factorial n = n * factorial (n - 1)?
16:14:56 ec joins (~ec@gateway/tor-sasl/ec)
16:15:02 <c_wraith> it's not incomplete
16:15:08 <c_wraith> the second case catches everything
16:15:19 <seriley> factorial (-1)...
16:15:26 <c_wraith> it catches it
16:15:34 <c_wraith> and loops forever, but there's a pattern that handles it
16:15:53 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
16:15:59 ft joins (~ft@p508dbd59.dip0.t-ipconnect.de)
16:16:04 <seriley> ok. I see now
16:16:22 <geekosaur> haskell isn't magic, it doesn't know your code will loop forever on a negative number
16:16:31 <c_wraith> Hmm. I suppose that only loops until you run out of memory, not "forever". :P
16:16:42 <seriley> i get a stack overflow
16:16:46 <c_wraith> yeah
16:16:58 <c_wraith> If it was an incomplete pattern match, you'd get an exception
16:17:18 <c_wraith> > let Just x = Nothing in x
16:17:20 <lambdabot> *Exception: <interactive>:3:5-20: Non-exhaustive patterns in Just x
16:17:37 × merijn quits (~merijn@86.86.29.250) (Ping timeout: 246 seconds)
16:17:50 <seriley> thanks
16:27:15 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
16:33:22 × abhiroop_ quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 246 seconds)
16:33:46 jonathanx_ joins (~jonathan@c-5eea6015-74736162.cust.telenor.se)
16:33:55 × nschoe quits (~q@141.101.51.197) (Ping timeout: 272 seconds)
16:35:29 jakalx joins (~jakalx@base.jakalx.net)
16:36:27 × jonathanx__ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds)
16:38:34 jtza8 joins (~user@165.255.137.137)
16:39:57 tremon joins (~tremon@83-84-18-241.cable.dynamic.v4.ziggo.nl)
16:42:35 <simple> I've done a 'cabal install network', and i use Network.Socket in my code, and 'cabal run' doesn't complain.. but i canot import Network.Socket in ghci.. any clues?
16:43:45 <geekosaur> if you're using cabal, you probably want cabal repl instead of ghci
16:44:37 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
16:46:23 <simple> geekosaur++
16:47:01 <simple> bah, now i need to find where it keeps its .cabal file
16:48:23 <c_wraith> if you didn't create one, it's in /tmp and liable to be deleted at any time
16:48:43 machinedgod joins (~machinedg@83-131-151-179.adsl.net.t-com.hr)
16:48:48 <simple> on windows, looks like AppData/Local/Tmp/ stuff
16:49:31 <c_wraith> oh. windows, good point. But either way, my recommendation is to create your own package to work with
16:50:12 <c_wraith> global installs really aren't a good pattern, and really aren't supported anymore
16:50:34 <c_wraith> You can force them to work, but it's really fragile and liable to break
16:50:36 <[exa]> spoiler: everyone loves global installs for random hacking
16:50:56 <simple> I have (I think). I'm using IntelliJ Idea with a haskell plugin, in a project directory. if i run the ghci/repl from that dir, will it pick up the .cabal file?
16:51:01 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
16:51:01 × OpenSource quits (~kernel@user/OpenSource) (Quit: ZNC - https://znc.in)
16:51:11 <c_wraith> if you've created one there, yes
16:51:14 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:f5b1:39e2:deb2:275) (Quit: WeeChat 2.8)
16:51:17 OpenSource joins (~kernel@user/OpenSource)
16:51:30 <c_wraith> [exa]: but you can random hacking with cabal repl -b
16:52:15 <[exa]> yeah but that sounds like thinking about dependencies in advance :D
16:52:22 <simple> hm, the repl started by running my code, which is not what i wanted
16:52:30 <[exa]> anyway I didn't know about -b, thanks
16:52:47 <c_wraith> Yeah, I use it all the time.
16:52:55 <[exa]> simple: compiling or running?
16:53:04 <c_wraith> well. probably loading
16:54:18 <[exa]> is there some good syntax pattern to combine a few `do` blocks in a `choice [...]` ?
16:54:49 sympt joins (~sympt@user/sympt)
16:55:05 <[exa]> (or, more like, do something similar without the 2 sets of parentheses)
16:55:25 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
16:55:59 × OpenSource quits (~kernel@user/OpenSource) (Client Quit)
16:56:26 <simple> yeah, loading
16:59:06 <c_wraith> Unfortunately, I don't know how to make it stop doing that. Sometimes it's not what I want, either
16:59:16 × acidjnk quits (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
16:59:30 <[exa]> oh wait the inner do's don't need parentheses, good, world is saved.
16:59:46 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:00:38 Patternmaster joins (~georg@li1192-118.members.linode.com)
17:00:38 × Patternmaster quits (~georg@li1192-118.members.linode.com) (Changing host)
17:00:38 Patternmaster joins (~georg@user/Patternmaster)
17:01:30 × ubert quits (~Thunderbi@178.115.71.138.wireless.dyn.drei.com) (Quit: ubert)
17:01:49 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
17:02:34 ubert joins (~Thunderbi@178.115.71.138.wireless.dyn.drei.com)
17:06:04 elevenkb joins (~elevenkb@105.184.125.168)
17:06:12 × dtman34 quits (~dtman34@c-75-73-141-79.hsd1.mn.comcast.net) (Ping timeout: 268 seconds)
17:06:51 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
17:06:51 × machinedgod quits (~machinedg@83-131-151-179.adsl.net.t-com.hr) (Ping timeout: 272 seconds)
17:08:24 sadmax joins (~user@209.205.174.253)
17:09:22 abhiroop_ joins (~abhiroop@217-209-157-8-no2000.tbcn.telia.com)
17:12:27 × razetime quits (~quassel@117.254.35.246) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
17:12:52 Guest75 joins (~Guest75@178.141.177.81)
17:17:51 Tuplanolla joins (~Tuplanoll@91-159-69-11.elisa-laajakaista.fi)
17:18:12 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:18:15 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds)
17:18:37 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
17:18:53 sadmax joins (~user@209.205.174.253)
17:20:10 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
17:20:28 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:21:05 sadmax joins (~user@209.205.174.253)
17:21:24 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:21:59 sadmax joins (~user@209.205.174.253)
17:25:01 × sadmax quits (~user@209.205.174.253) (Client Quit)
17:26:41 sadmax joins (~user@209.205.174.253)
17:28:24 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:28:32 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
17:29:09 sadmax joins (~user@209.205.174.253)
17:29:26 × Chai-T-Rex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds)
17:29:50 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:30:24 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
17:30:40 ec joins (~ec@gateway/tor-sasl/ec)
17:30:40 sadmax joins (~user@209.205.174.253)
17:30:47 jonathanx__ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
17:31:18 × Kaipei quits (~Kaiepi@108.175.84.104) (Ping timeout: 246 seconds)
17:31:43 Chai-T-Rex joins (~ChaiTRex@user/chaitrex)
17:33:02 × jonathanx_ quits (~jonathan@c-5eea6015-74736162.cust.telenor.se) (Ping timeout: 246 seconds)
17:33:50 L29Ah joins (~L29Ah@wikipedia/L29Ah)
17:35:31 <EvanR> if (| |) is banana brackets what is [| |]
17:35:52 <EvanR> hamburger bun brackets or
17:36:17 <geekosaur[m]> Coconut brackets?
17:36:23 <dolio> Those were envelopes, I think.
17:37:19 <geekosaur[m]> (SpongeBob brackets but can anyone over age 6 say that?)
17:37:41 [exa] writes that down
17:39:16 <dolio> I suppose it depends on how you ascii-fy the symbol in their paper.
17:39:39 <dolio> Could be [| or [[
17:39:41 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
17:41:11 <c_wraith> I think I'd call what they used [[ and ]]
17:41:56 <c_wraith> has anyone successfully used a private library in a cabal file with no public library? When I try, it keeps telling me that it can't find the private library
17:42:19 × elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Remote host closed the connection)
17:42:47 elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru)
17:42:55 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
17:43:35 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
17:44:14 slack1256 joins (~slack1256@191.126.227.201)
17:45:23 <slack1256> On postgresql-simple, is anyone using ConnectInfo with unix sockets?
17:45:24 × fserucas quits (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Quit: Leaving)
17:45:51 <slack1256> The libpq docs say that I should percent encode it, but maybe there is a better way using ConnectInfo.
17:47:32 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 248 seconds)
17:47:33 <slack1256> Nevermind! I did not have to percent encode at all!
17:48:25 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
17:50:52 <monochrom> I have read that [| |] is called Oxford brackets.
17:51:21 <monochrom> Oh, probably I read that from the GHC user's guide.
17:52:45 × jpds1 quits (~jpds@gateway/tor-sasl/jpds) (Write error: Connection reset by peer)
17:53:14 jpds1 joins (~jpds@gateway/tor-sasl/jpds)
17:57:56 elevenkb joins (~elevenkb@105.184.125.168)
18:00:11 × nurupo quits (~nurupo.ga@user/nurupo) (Quit: nurupo.ga)
18:00:15 <EvanR> an old post about why there is no gui library built into haskell https://mail.haskell.org/pipermail/haskell-cafe/2007-August/030191.html
18:00:27 nurupo joins (~nurupo.ga@user/nurupo)
18:01:16 <EvanR> they close suggesting maybe instead you want a way to come up with a custom gui for a given application, which makes me realize the "standard" libraries are really doing two separate (?) things, giving you a "standard" window with standard decorations and on the other hand trying to be a gui library
18:01:47 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
18:01:49 <EvanR> often you use the standard toolkit, get a standard decorated window, then make this huge custom thing because the library can't handle it
18:02:54 <monochrom> I remember Motif, heh.
18:03:13 <EvanR> I remember apps, never tried to make anything in it
18:03:43 acidjnk joins (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
18:04:03 <EvanR> someone recently was saying athena widgets was the most amazing toolkit, still
18:04:31 × jpds1 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
18:04:53 jpds1 joins (~jpds@gateway/tor-sasl/jpds)
18:05:14 <monochrom> Guile is the idea of "DSL for describing UI object tree" standardized.
18:05:41 emmanuelux joins (~emmanuelu@user/emmanuelux)
18:05:56 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
18:06:19 <monochrom> To be sure, Guile came way after, and most likely independently thought up.
18:06:29 <EvanR> Guile is a what
18:06:38 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 246 seconds)
18:06:42 <c_wraith> EvanR: I wouldn't say the things are separate, but they are totally different levels of abstraction
18:06:49 <monochrom> Guile is a DSL for decribing a tree of UI objects. :)
18:06:54 stackdroid18 joins (14094@user/stackdroid)
18:07:01 <EvanR> as a haskell library? lisp library?
18:07:17 elevenkb joins (~elevenkb@105.184.125.168)
18:07:21 <monochrom> No, I think Guile is for GTK.
18:07:36 <EvanR> shudder
18:07:40 <monochrom> Yeah GTK.
18:07:46 <c_wraith> not TK, GTK. :P
18:08:04 <geekosaur> guile predates gtk…
18:08:15 <geekosaur> that said, who remembers autolisp?
18:08:20 <monochrom> Well, this means that even the imperative people eventually discovered that "DSL for UI object tree" is a central idea.
18:08:32 <c_wraith> well, there are multiple things called guile
18:08:44 <monochrom> OK heh
18:08:48 <c_wraith> Like... the guy from Street Fighter
18:08:51 <darkling> geekosaur: Yes, I wrote a Bezier module for Autocad in Autolisp on a MicroVAX II. :)
18:09:05 <monochrom> Ah OK thanks geekosaur.
18:09:43 <monochrom> I guess this is why Guile uses s-expression syntax.
18:11:00 <monochrom> When I was in university and in microprocessor courses, Autocad was always mentioned as a performance benchmarking platform.
18:11:21 <monochrom> Things like "287 can render the cathedral in 10 seconds" :)
18:12:02 <monochrom> and "now, this other company's clone of 287 can do it in 9"
18:12:10 <dolio> I thought guile was just another scheme, for some reason.
18:12:24 <EvanR> that can't be the same guile
18:12:36 <lagash> GNU Guile? It's a Scheme.
18:12:39 <darkling> dolio: That too.
18:13:20 <monochrom> X_X
18:13:27 <EvanR> all this disproves Refl :: Guile = Guile
18:13:39 <monochrom> haha yeah
18:14:52 × CiaoSen quits (~Jura@p200300c9571247002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
18:15:32 geekosaur was under the impression that GNU had been reworking guile from its original "it's just another Scheme" to "it's the glue that holds stuff together" (with plans for it to replace elisp, etc.)
18:16:48 <monochrom> That probably will take another 100 years. Speaking of cathedrals. >:)
18:17:06 × cstml quits (~cstml@user/cstml) (Ping timeout: 255 seconds)
18:19:04 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Quit: Konversation terminated!)
18:21:47 <lagash> No no, use Common Lisp! :P
18:22:07 ski bites geekosaur tentatively
18:23:29 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:23:54 <geekosaur> moo?
18:24:00 ski . o O ( <https://www.emacswiki.org/emacs/GuileEmacs>,<https://www.emacswiki.org/emacs/Edwin>,<https://www.emacswiki.org/emacs/Zmacs>,<https://www.emacswiki.org/emacs/Climacs>,<https://www.emacswiki.org/emacs/XEmacs> ; <https://www.emacswiki.org/emacs/Emacsen>,<https://www.emacswiki.org/emacs/EmacsImplementations> )
18:24:07 <ski> <geekosaur> we don't bite 🙂 the only bad question is the one that isn't asked
18:24:30 narendraj9 joins (~user@2a02:8109:b63f:c344::ff2a)
18:24:31 <ski> (er, rather <https://www.emacswiki.org/emacs/EdWin>)
18:25:56 AlexNoo_ joins (~AlexNoo@178.34.150.205)
18:26:14 × hiredman quits (~hiredman@frontier1.downey.family) (Ping timeout: 246 seconds)
18:26:56 <geekosaur> wasn't some dialect of lisp or scheme what the original emacs was rewritten into? (the very first version being in TECO)
18:27:32 × Alex_test quits (~al_test@178.34.163.109) (Ping timeout: 248 seconds)
18:27:51 jtza8 parts (~user@165.255.137.137) (ERC 5.4 (IRC client for GNU Emacs 28.2))
18:28:04 × beteigeuze quits (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 248 seconds)
18:28:19 <ski> the current one (speaking of GNU Emacs, and i guess XEmacs) is written in Emacs Lisp (and C)
18:28:24 beteigeuze joins (~Thunderbi@89.187.168.55)
18:28:50 × AlexZenon quits (~alzenon@178.34.163.109) (Ping timeout: 268 seconds)
18:28:51 <ski> (Scheme is a Lisp, btw)
18:29:23 × AlexNoo quits (~AlexNoo@178.34.163.109) (Ping timeout: 246 seconds)
18:30:45 <geekosaur> yes, I know, but I distinguish them because of my history (MacLisp Scheme isn't 😛 )
18:32:28 <ski> "Weinreb's EINE was the first Emacs written in Lisp.", apparently
18:32:52 × beteigeuze quits (~Thunderbi@89.187.168.55) (Ping timeout: 248 seconds)
18:32:52 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 248 seconds)
18:33:12 <monochrom> A few days ago on Oct 31 I would bite. >:)
18:33:32 <ski> "Many versions of Emacs, including GNU Emacs, would later adopt Lisp as an extension language."
18:34:15 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 272 seconds)
18:34:53 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 272 seconds)
18:35:06 AlexZenon joins (~alzenon@178.34.150.205)
18:35:14 elevenkb joins (~elevenkb@105.184.125.168)
18:35:43 nate3 joins (~nate@98.45.169.16)
18:36:12 × elevenkb quits (~elevenkb@105.184.125.168) (Read error: Connection reset by peer)
18:36:42 <ski> seems like Stallman was inspired by an editor named E, making EMACS (TECO macros)
18:37:12 elevenkb joins (~elevenkb@105.184.125.168)
18:37:22 Xeroine joins (~Xeroine@user/xeroine)
18:38:16 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
18:38:18 Alex_test joins (~al_test@178.34.150.205)
18:39:23 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
18:40:36 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds)
18:41:35 × abhiroop_ quits (~abhiroop@217-209-157-8-no2000.tbcn.telia.com) (Ping timeout: 276 seconds)
18:44:26 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
18:45:00 intelligent_boat is now known as intellig1nt_boat
18:45:17 intellig1nt_boat is now known as intelligent_boat
18:45:55 <cheater> hey everyone
18:46:04 <cheater> what are your favourite quick check alikes nowadays?
18:50:19 jakalx joins (~jakalx@base.jakalx.net)
18:51:01 <sm> how do you build a hoogle database for just the local package(s) in the current project ?
18:52:23 ff76 joins (~ff@ip183138.eafit.edu.co)
18:52:26 <sm> `hoogle generate --local` dies with "Packages missing documentation: array base binary ..."
18:52:42 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:53:10 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
18:53:22 <sm> `stack hoogle` builds a db for all transitive deps
18:53:38 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
18:53:46 × jlgw_ quits (~jw@83-233-104-81.cust.bredband2.com) (Quit: Konversation terminated!)
18:54:05 jlgw_ joins (~jw@83-233-104-81.cust.bredband2.com)
18:56:46 azimut joins (~azimut@gateway/tor-sasl/azimut)
18:57:38 × acidjnk quits (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Remote host closed the connection)
18:58:02 acidjnk joins (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
19:00:33 × ff76 quits (~ff@ip183138.eafit.edu.co) (Quit: Connection closed)
19:02:25 Kaipei joins (~Kaiepi@108.175.84.104)
19:06:04 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
19:07:28 × narendraj9 quits (~user@2a02:8109:b63f:c344::ff2a) (Remote host closed the connection)
19:07:32 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds)
19:08:26 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
19:08:27 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds)
19:09:34 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
19:09:47 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
19:10:42 × fserucas_ quits (~fserucas@2001:8a0:6d00:2500:4717:7619:c4e9:3aa2) (Ping timeout: 246 seconds)
19:11:01 <sm> most relevant doc: https://github.com/ndmitchell/hoogle/blob/master/docs/Install.md#generate-a-hoogle-database
19:12:22 dtman34 joins (~dtman34@c-75-73-141-79.hsd1.mn.comcast.net)
19:13:03 nschoe joins (~q@2a01:e0a:8e:a190:2e2e:14c5:dca3:7fc5)
19:13:03 × nschoe quits (~q@2a01:e0a:8e:a190:2e2e:14c5:dca3:7fc5) (Client Quit)
19:13:56 jlgw_ is now known as jlgw
19:14:41 <c_wraith> actually, scratch my last question. has anyone used cabal's private libraries feature at all? I cannot figure out how to make it work
19:15:58 <sm> hoogle is both famously useful online, and a perfect example of why haskell tooling makes grown humans weep bitter tears
19:18:29 <sm> c_wraith: maybe searching for the syntax will find some packages using it ?
19:18:55 azimut joins (~azimut@gateway/tor-sasl/azimut)
19:18:55 <sclv> c_wraith: there's an example here, does it not work? https://cabal.readthedocs.io/en/stable/cabal-package.html?highlight=internal#sublibs
19:19:16 <c_wraith> my attempts at something like that do not work.
19:19:46 <c_wraith> that example itself is not complete, so it's not testable
19:20:16 <sclv> one important thing to do is to make sure you don't have overlapping srcdirs for your different sublibraries
19:20:22 <sclv> otherwise ghc gets very confused
19:20:37 <sclv> iirc
19:20:57 <c_wraith> did that. the problem is that cabal says it can't find the named internal library
19:22:41 <sclv> perhaps you need pkg:lib-name ?
19:23:01 <sclv> https://github.com/haskell/cabal/issues/7565
19:24:24 <c_wraith> ah, that looks like the issue. I am using newer cabal specifications
19:25:09 <sclv> i'm not sure the exact status of how we sort that out, sigh. i think one of the underlying issues complained about is fixed in HEAD but idk how we'll iterate to final syntax or what that means for updating docs :-/
19:25:19 <c_wraith> it'd sure be nice if the docs said something
19:25:42 <sclv> yeah, feel free to make a pr and if someone understands whats going on and objects we can solve it then :-)
19:26:19 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
19:26:39 <c_wraith> I'm really feeling like cabal repl is a third-class citizen. the amount I have to mangle my cabal file and project layout in order for it to work hurts.
19:27:16 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
19:27:33 <sm> "how can we keep docs updated" seems to be the root of many computing woes
19:28:47 <sclv> there's some discussion of improving mutihome support now that ghc has it https://github.com/haskell/cabal/issues/8491
19:29:38 <sclv> note that ghci's multihome support is still a wip itself https://gitlab.haskell.org/ghc/ghc/-/issues/20889
19:31:53 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
19:31:57 Guest19 joins (~Guest19@c83-248-102-237.bredband.tele2.se)
19:32:01 <c_wraith> while you're on this topic, is there any way to tell cabal repl to not load all the modules at startup? that can be very slow and unnecessary
19:33:36 × seriley quits (~seriley@97-120-69-62.ptld.qwest.net) (Remote host closed the connection)
19:35:19 <sclv> --repl-no-load https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-repl
19:35:27 <c_wraith> thanks
19:40:24 <[exa]> is there any good `choice` specialized to Eithers that would give either the first Right or the last Left from the list?
19:42:14 <EvanR> that condition is hurting my brain right now
19:42:29 <EvanR> Left Left Left Right Left would be what
19:42:54 <sm> headMay . rights / lastMay . lefts
19:43:25 Guest98 joins (~Guest98@92.40.70.67.threembb.co.uk)
19:43:28 <[exa]> EvanR: the first right
19:43:37 × Guest98 quits (~Guest98@92.40.70.67.threembb.co.uk) (Client Quit)
19:44:00 <EvanR> is this a case of swapping the role of right and left and using the usual applicative
19:45:17 × acidjnk quits (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
19:45:24 <EvanR> in which case it seems retroactively smart to call them Left Right instead of the other languages which committed to Ok Error
19:46:00 <[exa]> perhaps well, this is my actual problem: if I use `choice` from Control.Applicative.Combinators, `choice [Left "asd"]` gets me `Left ""` because there's Error String instance
19:47:02 <[exa]> the normal choice from Control.Applicative (aka asum) reasonably refuses to do anything without importing the stuff from combinators
19:47:10 <[exa]> and I'm failing to find the piece of code that did this
19:48:36 × elevenkb quits (~elevenkb@105.184.125.168) (Ping timeout: 248 seconds)
19:48:56 Guest47 joins (~Guest47@171.79.46.173)
19:50:12 × shriekingnoise quits (~shrieking@186.137.167.202) (Ping timeout: 255 seconds)
19:50:14 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 246 seconds)
19:50:36 Heyting joins (~Heyting@193.198.16.217)
19:50:37 Xeroine joins (~Xeroine@user/xeroine)
19:50:43 <[exa]> in short, making some kind of `choice` work without the ugly errorish instances on Either :D
19:51:20 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
19:51:22 shriekingnoise joins (~shrieking@186.137.167.202)
19:51:47 × Major_Biscuit quits (~MajorBisc@c-001-021-035.client.tudelft.eduvpn.nl) (Ping timeout: 276 seconds)
19:52:24 Guest|63 joins (~Guest|63@90.203.229.51)
19:52:28 biberu joins (~biberu@user/biberu)
19:52:58 <Heyting> Good evening everyone, is there a list of "must read" Haskell papers, e.g. "Why functional programming matters?" and "Making ad-hoc polymorphism less ad-hoc"? I am looking to deepen my understanding of the Haskell and FP ecosystem
19:53:36 <Guest|63> hey, beginner question here, whenever i try to run the ghcup command in powershell, powershell closes. I just tried it on my desktop and it worked first try so i dont know what's going on. I just reset the laptop too so im out of ideas
19:54:09 <[exa]> Heyting: I'd answer "must read" with "for what purpose"
19:55:08 <[exa]> Heyting: there's a lot of nice stuff about ghc implementation and type system (mostly by SPJ), various nice papers about types and high-order stuff by the lambdaman, and ICFP has great functional pearls each year that are generally worth it
19:55:12 <EvanR> there's kind of a lot of papers
19:55:58 <[exa]> the SYB/Generics papers are great
19:56:54 <[exa]> Guest|63: whew, is there any logs or error report or so?
19:57:14 <[exa]> Heyting: also I recall the last "pop" FP paper I read was about selectives and it was great
19:58:48 <EvanR> anything on conal.net
19:59:07 <[exa]> +1 ^
19:59:46 <c_wraith> Heyting: Being Lazy With Class (Simon Peyton Jones). The Essence of the Iterator Pattern (Jeremy Gibbons)
20:00:52 <sclv> [exa]: maybe you want the validation applicative?
20:00:57 <c_wraith> oh, and Lazy Functional State Threads (Jones and several others)
20:01:22 <Heyting> Thank you all. Take into consideration I am fresh in Haskell and FP (about a year on and off) and am a CS student, thinking about a PhD in this topic
20:01:38 × Guest47 quits (~Guest47@171.79.46.173) (Ping timeout: 260 seconds)
20:01:46 <c_wraith> anything from SPJ is easy to read and understand.
20:01:59 <sclv> Heyting: there's an old list on the haskell wiki, but since you're interested in classic papers, the "old" is probably not too much a drawback https://wiki.haskell.org/Research_papers
20:02:16 <[exa]> sclv: validation collects all Lefts, and I dont really want the error semantics :(
20:02:50 <[exa]> ah wait I can smuggle in a Last there
20:03:05 <sclv> yeah, just use the Last monoid, :-)
20:03:20 acidjnk joins (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de)
20:03:33 <Heyting> exa: what do you mean by "the lambdaman"
20:03:54 <[exa]> well at least this is going to force me to rewrite all the manual Rights and Lefts into proper wrappers :D
20:04:06 <sclv> i assume wadler, who is known for wearing a superman-like shirt in some of his undergrad lectures
20:04:44 <[exa]> yep ^
20:05:17 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds)
20:06:03 <[exa]> OOPSLA'06 now counts as an undergrad lecture? :D
20:06:36 <[exa]> Heyting: anyway, scroll down here a bit https://dev.to/adamretter/haskell-io-and-xpath-1fcj
20:06:43 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
20:06:57 <cheater> what of smallcheck/smartcheck/etc do you guys like most?
20:09:09 <Heyting> yea now I remember him at the end of the propositions-as-types lecture turning into lambdaman
20:11:52 <EvanR> what is lambdaman's arch nemesis
20:12:39 × Guest|63 quits (~Guest|63@90.203.229.51) (Quit: Connection closed)
20:12:41 <Heyting> I guess it would be BoilerPlateMan
20:13:23 <Heyting> tearing down lambda expression one AbstractIncrementFunctionFactory at a time
20:13:50 <ski> @where Oleg
20:13:51 <lambdabot> http://okmij.org/ftp/
20:14:04 <ski> Heyting : ^ has quite a lot interesting stuff
20:14:17 gmg joins (~user@user/gehmehgeh)
20:14:57 <EvanR> evocative
20:15:18 <[exa]> EvanR: The Imperator, ofc
20:15:56 <[exa]> Heyting: this view of java is healthy.
20:16:26 <EvanR> java has lambdas now right, boilerplate solved?
20:17:24 talismanick joins (~talismani@2601:200:c100:c9e0::1b0b)
20:18:26 <Heyting> ski: this is just what I was looking for, ty
20:19:01 <ski> Heyting : the "Lambda the Ultimate: ..." papers (using Scheme) are classics, too
20:19:25 <ski> and Henry Baker's paper collection
20:19:42 pavonia joins (~user@user/siracusa)
20:21:29 <ski> for Haskell, Graham Hutton has some nice papers on folds and such things, i think
20:21:43 <ski> did someone mention "how to make ad hoc polymorphism less ad hoc" ?
20:22:00 × shailangsa quits (~shailangs@host86-182-139-4.range86-182.btcentralplus.com) (Remote host closed the connection)
20:22:08 <ski> oh, and Phil Wadlers papers are usually quite ejoyable
20:22:27 <ski> Erik Meijer
20:23:38 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 276 seconds)
20:24:43 × bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
20:24:48 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
20:29:03 <[exa]> kinda reminds me, the linear logic&types paper series from Girard and then Wadler was pretty enjoyable
20:29:21 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 255 seconds)
20:39:12 <ski> Girard can be quite fun to read
20:43:08 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
20:44:04 × Kaipei quits (~Kaiepi@108.175.84.104) (Ping timeout: 248 seconds)
20:47:59 jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
20:50:32 <sm> set up and run hoogle in a stack project: https://github.com/simonmichael/hledger/blob/7c8e241383575214e0d0c6b0c56100c89ce02902/Makefile#L807:L813
20:55:26 × td_ quits (~td@83.135.9.48) (Read error: error:1408F10B:SSL routines:ssl3_get_record:wrong version number)
21:00:43 td_ joins (~td@83.135.9.48)
21:03:28 × Guest75 quits (~Guest75@178.141.177.81) (Ping timeout: 260 seconds)
21:07:37 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
21:11:19 × td_ quits (~td@83.135.9.48) (Ping timeout: 272 seconds)
21:11:22 × irrgit_ quits (~irrgit@146.70.27.250) (Quit: Leaving)
21:13:01 td_ joins (~td@83.135.9.48)
21:21:57 Lycurgus joins (~juan@user/Lycurgus)
21:27:06 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
21:27:24 × Heyting quits (~Heyting@193.198.16.217) (Remote host closed the connection)
21:27:47 jmdaemon joins (~jmdaemon@user/jmdaemon)
21:28:13 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
21:31:04 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
21:31:32 × Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 248 seconds)
21:34:17 Xeroine joins (~Xeroine@user/xeroine)
21:35:04 × michalz quits (~michalz@185.246.207.218) (Remote host closed the connection)
21:35:57 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
21:37:45 × mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 255 seconds)
21:39:44 Kaipei joins (~Kaiepi@108.175.84.104)
21:39:50 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt https://eg.meansofproduction.biz/eg/index.php/Catalog_of_Internet_Identities)
21:41:05 × absence quits (torgeihe@hildring.pvv.ntnu.no) (Ping timeout: 272 seconds)
21:42:07 AlexNoo_ is now known as AlexNoo
21:43:51 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
21:44:57 × talismanick quits (~talismani@2601:200:c100:c9e0::1b0b) (Ping timeout: 255 seconds)
21:45:24 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 246 seconds)
21:49:15 × cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds)
21:49:40 cheater joins (~Username@user/cheater)
21:52:57 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
21:55:33 son0p joins (~ff@181.136.122.143)
21:56:35 <c_wraith> sclv: I submitted a documentation PR. Let's see what happens! https://github.com/haskell/cabal/pull/8573
22:02:01 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
22:03:33 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
22:06:33 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 255 seconds)
22:07:39 × coot quits (~coot@213.134.171.3) (Quit: coot)
22:09:09 <JonathanWatson[m> does anybody know anything about using the GHC API for dynamic linking?
22:09:33 <JonathanWatson[m> I've written this small test https://github.com/jonathanjameswatson/dynlink/blob/main/dynlink/app/Main.hs but I end up getting "mismatched interface file ways (wanted "", got "dyn")"
22:14:46 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
22:14:57 zeenk2 joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
22:15:42 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Read error: Connection reset by peer)
22:15:54 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
22:16:04 × jespada quits (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) (Quit: Textual IRC Client: www.textualapp.com)
22:18:59 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
22:19:05 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:19:44 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
22:20:00 × Guest19 quits (~Guest19@c83-248-102-237.bredband.tele2.se) (Quit: Client closed)
22:20:23 × zeenk2 quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Ping timeout: 246 seconds)
22:20:44 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
22:22:26 absence joins (torgeihe@hildring.pvv.ntnu.no)
22:25:27 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
22:28:27 jakalx joins (~jakalx@base.jakalx.net)
22:29:51 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:32:43 × zeenk quits (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494) (Ping timeout: 255 seconds)
22:35:10 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
22:37:20 nate3 joins (~nate@98.45.169.16)
22:37:30 zeenk joins (~zeenk@5.12.219.147)
22:37:35 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:39:26 beteigeuze joins (~Thunderbi@bl14-81-220.dsl.telepac.pt)
22:39:59 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 272 seconds)
22:41:05 × thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in)
22:42:31 × nate3 quits (~nate@98.45.169.16) (Ping timeout: 272 seconds)
22:43:36 × stackdroid18 quits (14094@user/stackdroid) (Quit: hasta la vista... tchau!)
22:43:59 thaumavorio joins (~thaumavor@thaumavor.io)
22:44:22 sadmax joins (~user@209.205.174.253)
22:47:48 × zeenk quits (~zeenk@5.12.219.147) (Ping timeout: 248 seconds)
22:47:51 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
22:48:37 sadmax joins (~user@209.205.174.253)
22:48:56 mmhat joins (~mmh@p200300f1c730762fee086bfffe095315.dip0.t-ipconnect.de)
22:51:14 zeenk joins (~zeenk@5.12.219.147)
22:51:22 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
22:51:32 × acidjnk quits (~acidjnk@p200300d6e7137a94f44efb835a8e951f.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
22:51:42 freeside joins (~mengwong@bb115-66-48-84.singnet.com.sg)
22:52:46 × zeenk quits (~zeenk@5.12.219.147) (Client Quit)
22:53:03 sadmax joins (~user@209.205.174.253)
22:53:31 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
22:54:09 sadmax joins (~user@209.205.174.253)
22:54:20 zeenk joins (~zeenk@2a02:2f04:a105:5d00:c862:f190:2ea:d494)
22:55:17 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
22:56:42 sadmax joins (~user@209.205.174.253)
22:57:53 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
22:58:42 sadmax joins (~user@209.205.174.253)
23:01:25 merijn joins (~merijn@86-86-29-250.fixed.kpn.net)
23:01:48 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
23:01:56 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
23:03:59 sadmax22 joins (~user@209.205.174.253)
23:04:23 × sadmax quits (~user@209.205.174.253) (Remote host closed the connection)
23:04:25 × sadmax22 quits (~user@209.205.174.253) (Remote host closed the connection)
23:04:27 dsrt^ joins (~dsrt@76.145.185.103)
23:05:53 × jtomas quits (~jtomas@191.red-88-17-199.dynamicip.rima-tde.net) (Ping timeout: 246 seconds)
23:16:43 × chomwitt quits (~chomwitt@athedsl-351939.home.otenet.gr) (Ping timeout: 272 seconds)
23:19:02 <cheater> seriously, no one got any comments on property test libs?
23:19:14 jinsun is now known as Guest6364
23:19:14 jinsun__ joins (~jinsun@user/jinsun)
23:19:14 × Guest6364 quits (~jinsun@user/jinsun) (Killed (osmium.libera.chat (Nickname regained by services)))
23:19:14 jinsun__ is now known as jinsun
23:19:47 × Tuplanolla quits (~Tuplanoll@91-159-69-11.elisa-laajakaista.fi) (Quit: Leaving.)
23:25:29 <monochrom> Perhaps just Friday inactivity.
23:27:23 <hpc> perhaps they are distracted by the fact that "thief" would be an excellent name for a property testing library
23:28:02 <monochrom> theft? thest? test? >:)
23:28:12 <hpc> thespian
23:28:15 <hpc> shakespeare
23:28:18 <hpc> there we go, that's the name
23:28:22 <hpc> probably not taken yet :D
23:30:51 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
23:34:45 × merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds)
23:37:05 causal joins (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0d)
23:38:38 caryhartline joins (~caryhartl@2600:1700:2d0:8d30:b4a8:f86e:ce7e:7321)
23:39:12 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
23:41:35 × causal quits (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0d) (Ping timeout: 246 seconds)
23:54:17 <sm> cheater: since you've been looking at them recently, you could prime the pump educating us.. what are the ones you've found and how many reverse deps do they have
23:54:35 <sm> https://packdeps.haskellers.com/reverse
23:54:55 <sm> I suspect a quite small proportion of us actually work with property tests
23:55:00 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 255 seconds)
23:55:40 causal joins (~user@50.35.83.177)
23:56:34 <geekosaur> I've heard a few people in here recommending hedgehog over QuickCheck. haven't done anything with either myself although I think there's some QuickCheck tests for xmonad's StackSet written by sjanssen and/or dons
23:58:09 × slack1256 quits (~slack1256@191.126.227.201) (Ping timeout: 255 seconds)
23:58:14 <sm> hedgehog was has been my choice, from the armchair... but they keep releasing more

All times are in UTC on 2022-11-04.