2023/05/17

2023-05-17 00:01:26 +0200trev(~trev@user/trev) (Quit: trev)
2023-05-17 00:02:47 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 00:03:16 +0200elain4(~textual@static-71-251-226-194.rcmdva.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-05-17 00:05:49 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2023-05-17 00:07:26 +0200evincar(~evincar@user/evincar)
2023-05-17 00:10:54 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 00:13:23 +0200cheater(~Username@user/cheater) (Ping timeout: 264 seconds)
2023-05-17 00:14:20 +0200acidjnk(~acidjnk@p200300d6e7072f26a02f55797abeb791.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-05-17 00:15:00 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 00:15:01 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 00:27:35 +0200gurkenglas(~user@dynamic-046-114-178-145.46.114.pool.telefonica.de) (Ping timeout: 240 seconds)
2023-05-17 00:37:59 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-05-17 00:42:13 +0200 <jackdk> edwardk: skimmed your recent stream about hkd/distributive stuff. Super excited to see it get some attention again, I'd love to have a good hkd-flavoured version of representable
2023-05-17 00:48:05 +0200finsternis(~X@23.226.237.192)
2023-05-17 00:48:23 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 00:49:33 +0200bilegeek(~bilegeek@2600:1008:b05f:85d9:37ae:29a:60b8:7b43) (Quit: Leaving)
2023-05-17 00:53:15 +0200AWizzArd_AWizzArd
2023-05-17 00:53:48 +0200AWizzArd(~code@gehrels.uberspace.de) (Changing host)
2023-05-17 00:53:48 +0200AWizzArd(~code@user/awizzard)
2023-05-17 00:55:31 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds)
2023-05-17 00:57:06 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 00:57:33 +0200foul_owl(~kerry@71.212.137.212) (Ping timeout: 256 seconds)
2023-05-17 00:58:51 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection)
2023-05-17 00:59:10 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf)
2023-05-17 01:04:01 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
2023-05-17 01:07:57 +0200titibandit(~titibandi@user/titibandit) (Remote host closed the connection)
2023-05-17 01:12:47 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-05-17 01:12:47 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-05-17 01:12:47 +0200wroathe(~wroathe@user/wroathe)
2023-05-17 01:14:19 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2023-05-17 01:15:08 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 01:19:13 +0200mauke_(~mauke@user/mauke)
2023-05-17 01:20:28 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
2023-05-17 01:21:07 +0200mauke(~mauke@user/mauke) (Ping timeout: 265 seconds)
2023-05-17 01:21:08 +0200mauke_mauke
2023-05-17 01:21:22 +0200rf(~rf@2605:59c8:179c:f610:9cce:9bd8:c6af:4e85)
2023-05-17 01:24:23 +0200mncheck(~mncheck@193.224.205.254) (Ping timeout: 240 seconds)
2023-05-17 01:28:44 +0200monix(~quassel@a85-138-255-115.cpe.netcabo.pt) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2023-05-17 01:29:37 +0200abrantesasf(~abrantesa@177.137.232.92)
2023-05-17 01:30:35 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-05-17 01:31:20 +0200vandita(~vandit@213-197-76-88.pool.digikabel.hu) (Ping timeout: 246 seconds)
2023-05-17 01:33:06 +0200vandita(~vandit@84-236-122-196.pool.digikabel.hu)
2023-05-17 01:34:23 +0200captnemo(~captnemo@193.32.127.232) (Ping timeout: 240 seconds)
2023-05-17 01:34:53 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2023-05-17 01:35:29 +0200son0p(~ff@181.136.122.143)
2023-05-17 01:35:35 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex)
2023-05-17 01:36:22 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 01:38:34 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 01:40:31 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 01:49:43 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 01:52:31 +0200Sciencentistguy(~sciencent@hacksoc/ordinary-member) (Ping timeout: 256 seconds)
2023-05-17 01:52:58 +0200nate2(~nate@98.45.169.16)
2023-05-17 01:54:30 +0200caubert(~caubert@user/caubert) (Quit: WeeChat 3.7)
2023-05-17 01:56:36 +0200caubert(~caubert@user/caubert)
2023-05-17 01:57:40 +0200zinguane2(~zinguane@pd9e856a3.dip0.t-ipconnect.de) (Quit: Leaving)
2023-05-17 01:57:51 +0200nate2(~nate@98.45.169.16) (Ping timeout: 265 seconds)
2023-05-17 01:59:31 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 01:59:39 +0200Sciencentistguy(~sciencent@hacksoc/ordinary-member)
2023-05-17 02:00:28 +0200nehsou^(~nehsou@73.237.206.60)
2023-05-17 02:00:32 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2023-05-17 02:01:31 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds)
2023-05-17 02:03:09 +0200cheater(~Username@user/cheater)
2023-05-17 02:03:19 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex)
2023-05-17 02:03:22 +0200freeside_(~mengwong@103.252.202.151)
2023-05-17 02:13:19 +0200freeside_(~mengwong@103.252.202.151) (Ping timeout: 265 seconds)
2023-05-17 02:19:07 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 265 seconds)
2023-05-17 02:20:28 +0200mestre(~mestre@191.177.186.33)
2023-05-17 02:20:30 +0200mestre(~mestre@191.177.186.33) (Client Quit)
2023-05-17 02:20:50 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2023-05-17 02:22:12 +0200cheater_(~Username@user/cheater)
2023-05-17 02:23:01 +0200 <aaronv> jackdk: do you have a use case for it?
2023-05-17 02:23:03 +0200 <aaronv> Also, hi
2023-05-17 02:23:55 +0200hammond(proscan@user/hammond2) (Ping timeout: 265 seconds)
2023-05-17 02:24:23 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-05-17 02:24:28 +0200cheater_cheater
2023-05-17 02:25:32 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 02:28:43 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 02:32:38 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 02:34:31 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds)
2023-05-17 02:35:37 +0200hammond(proscan@gateway02.insomnia247.nl)
2023-05-17 02:36:28 +0200 <jackdk> aaronv: Hi mate. Not urgently, but I was once playing with using a GADT to index the keys of a higher-kinded record, and had a neat function that turned a `DMap` from `dependent-map` into a record in a generic way using `tabluate`. Something like `fromDMap :: FRepresentable rep => DMap k f -> Maybe (rep f)`
2023-05-17 02:36:47 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 246 seconds)
2023-05-17 02:37:27 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Quit: au revoir)
2023-05-17 02:39:24 +0200 <aaronv> ah, FRepresentable. Wasn't sure if you meant that or the "better distributive functor" stuff which happens to use FFunctor
2023-05-17 02:41:47 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:b97c:3991:b4ea:4289)
2023-05-17 02:43:15 +0200 <aaronv> maybe `fromDMap :: (FRepresentable rep, FTraversable rep) => DMap (FLog rep) f -> Maybe (rep f)`
2023-05-17 02:43:43 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 02:44:08 +0200 <aaronv> where it traverses through the keys looking them up in the map
2023-05-17 02:44:13 +0200 <jackdk> Yeah that's right, you need FTraversable to go from `rep (Compose Maybe f)` to `Maybe (rep f)`
2023-05-17 02:45:09 +0200evincar(~evincar@user/evincar) (Ping timeout: 268 seconds)
2023-05-17 02:46:14 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:b97c:3991:b4ea:4289) (Ping timeout: 246 seconds)
2023-05-17 02:48:08 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 02:55:25 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 02:56:06 +0200evincar(~evincar@user/evincar)
2023-05-17 02:56:46 +0200terrorjack(~terrorjac@2a01:4f8:c17:87f8::) (Quit: The Lounge - https://thelounge.chat)
2023-05-17 02:58:31 +0200terrorjack(~terrorjac@2a01:4f8:c17:87f8::)
2023-05-17 03:01:10 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 265 seconds)
2023-05-17 03:01:37 +0200terrorjack(~terrorjac@2a01:4f8:c17:87f8::) (Client Quit)
2023-05-17 03:03:30 +0200terrorjack(~terrorjac@2a01:4f8:c17:87f8::)
2023-05-17 03:03:39 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2023-05-17 03:03:52 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 03:07:39 +0200phma(phma@2001:5b0:215a:8268:c7a7:f34c:bb4f:1f1d) (Read error: Connection reset by peer)
2023-05-17 03:10:54 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-05-17 03:16:29 +0200phma(~phma@2001:5b0:210f:7648:8296:8922:28df:c299)
2023-05-17 03:17:03 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-05-17 03:20:23 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2023-05-17 03:20:31 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 03:25:27 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 256 seconds)
2023-05-17 03:36:30 +0200 <hammond> I have f::IO [String]->ReaderT IO
2023-05-17 03:36:47 +0200vandita(~vandit@84-236-122-196.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 03:37:01 +0200 <hammond> I'm trying to send multiple strings, one by one to a network (IRC)
2023-05-17 03:37:36 +0200 <hammond> but i can only send one because readerT IO is not an array.
2023-05-17 03:37:50 +0200 <hammond> or an array action, how would I solve this.
2023-05-17 03:38:38 +0200vandita(~vandit@80-95-82-22.pool.digikabel.hu)
2023-05-17 03:40:44 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 03:43:39 +0200abrantesasf(~abrantesa@177.137.232.92) (Remote host closed the connection)
2023-05-17 03:44:37 +0200 <Inst> cabal should be able to force install stuff into an executable directory, right?
2023-05-17 03:45:46 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 03:46:05 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 03:48:21 +0200 <mauke> hammond: f :: [String] -> IO ()
2023-05-17 03:48:22 +0200 <mauke> ?
2023-05-17 03:50:09 +0200 <jackdk> hammond: your type signature is not well-kinded. But do you want `for_` or `traverse_` from `Data.Foldable`?
2023-05-17 04:00:33 +0200 <hammond> mauke f:: IO [String] -> ReaderT Bot IO () I would need to liftIO the [string]
2023-05-17 04:00:36 +0200 <hammond> idk
2023-05-17 04:00:40 +0200 <hammond> total mess.
2023-05-17 04:00:54 +0200 <hammond> jackdk: i'll look at those.
2023-05-17 04:01:28 +0200 <mauke> why does your function take an IO [String]?
2023-05-17 04:02:39 +0200 <hammond> because the fuction that generated the [String] read from the web.
2023-05-17 04:03:26 +0200 <jackdk> That doesn't mean your function must accept an IO [String]; make it take [String] or even String and use >>= or do-notation
2023-05-17 04:04:10 +0200 <mauke> an IO [String] is not a list of strings
2023-05-17 04:05:04 +0200 <mauke> it's a thing that can generate a list of strings
2023-05-17 04:05:28 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 04:06:45 +0200 <mauke> so unless you're trying to pass the function itself (not the result of the function!) that reads from the web as an argument, you don't want to do that
2023-05-17 04:07:10 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 268 seconds)
2023-05-17 04:07:30 +0200 <hammond> I'm already passing the IO String, and lifting it and it works fine.
2023-05-17 04:07:44 +0200 <hammond> now I want to up the ante.
2023-05-17 04:08:02 +0200 <hammond> total mess though.
2023-05-17 04:08:04 +0200 <hammond> :P
2023-05-17 04:08:31 +0200 <hammond> do you want to look at the code?
2023-05-17 04:08:31 +0200xff0x(~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 256 seconds)
2023-05-17 04:08:44 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:b97c:3991:b4ea:4289)
2023-05-17 04:08:55 +0200 <mauke> I dread to
2023-05-17 04:08:59 +0200 <hammond> hahahaha
2023-05-17 04:10:41 +0200 <hammond> https://github.com/sqljunkey/IRCBOT/blob/master/Test.hs
2023-05-17 04:10:47 +0200 <hammond> eval
2023-05-17 04:11:04 +0200 <hammond> is the one i want to convert to take [String]
2023-05-17 04:11:29 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 04:12:20 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 04:13:03 +0200 <mauke> yeah, that runs 'a' only once up front
2023-05-17 04:13:14 +0200 <mauke> so there's no point in making eval take an IO String
2023-05-17 04:13:25 +0200td_(~td@i5387090E.versanet.de) (Ping timeout: 240 seconds)
2023-05-17 04:14:20 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 04:14:54 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-05-17 04:15:25 +0200nate2(~nate@98.45.169.16)
2023-05-17 04:15:28 +0200 <mauke> instead of 'eval (command ...)', you'd write 'command ... >>= eval'
2023-05-17 04:15:36 +0200td_(~td@83.135.9.0)
2023-05-17 04:15:48 +0200 <mauke> or 'do s <- command ...; eval s'
2023-05-17 04:16:33 +0200 <hammond> what do you mean you're referring to the IO String?
2023-05-17 04:17:11 +0200 <mauke> eval :: String -> Net (); eval s = ...
2023-05-17 04:17:21 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-05-17 04:17:21 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Excess Flood)
2023-05-17 04:17:52 +0200 <mauke> essentially, let the user of eval do the 's <- liftIO a' part
2023-05-17 04:18:01 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 04:18:02 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-05-17 04:18:53 +0200 <mauke> then, if you want to eval a list of strings, one after the other, you can do: evalList :: [String] -> Net (); evalList xs = forM_ xs eval
2023-05-17 04:18:59 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 265 seconds)
2023-05-17 04:19:13 +0200 <EvanR> if you only used the action once immediately and definitely use it, you might as well just accept a value instead. Then no one will have to jump through hoops if they happen to want to use it on a value they already have, and it's trivial to run an IO action first
2023-05-17 04:19:30 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-05-17 04:19:30 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-05-17 04:19:30 +0200wroathe(~wroathe@user/wroathe)
2023-05-17 04:19:31 +0200 <mauke> :t traverse_
2023-05-17 04:19:32 +0200 <lambdabot> (Foldable t, Applicative f) => (a -> f b) -> t a -> f ()
2023-05-17 04:19:37 +0200 <mauke> :t forM_
2023-05-17 04:19:38 +0200 <lambdabot> (Foldable t, Monad m) => t a -> (a -> m b) -> m ()
2023-05-17 04:20:29 +0200 <mauke> OK, so traverse_ is a slightly more general (vague) version of that helper function
2023-05-17 04:20:46 +0200 <mauke> could do: evalList xs = traverse_ eval xs
2023-05-17 04:22:23 +0200 <hammond> and it wouldn't return a [Net()] ?
2023-05-17 04:22:32 +0200 <mauke> instead of just lists, traverse_ accepts any "foldable" container type, and instead of just IO or Net or some other monad, it accepts any Applicative type
2023-05-17 04:23:03 +0200 <mauke> no, the trailing underscore in the name indicates (by convention) that it throws the result away instead of collecting it
2023-05-17 04:23:19 +0200 <hammond> i see
2023-05-17 04:23:26 +0200 <mauke> the result will have type f () where f = Net in your case
2023-05-17 04:27:00 +0200 <mauke> if we didn't have it in a library, we could implement (a simplified version of) it ourselves pretty easily: forM_ :: (Monad m) => [a] -> (a -> m b) -> m (); forM_ [] _ = return (); forM_ (x : xs) f = do f x; forM_ xs f
2023-05-17 04:27:31 +0200 <mauke> oh, 'forever' is also a library function
2023-05-17 04:27:33 +0200 <mauke> :t forever
2023-05-17 04:27:34 +0200 <lambdabot> Applicative f => f a -> f b
2023-05-17 04:28:03 +0200 <mauke> f = Net, a = (), b = (), and you have your case
2023-05-17 04:28:32 +0200 <hammond> i see. thanx
2023-05-17 04:29:07 +0200 <mauke> @index forever
2023-05-17 04:29:07 +0200 <lambdabot> Control.Monad
2023-05-17 04:30:48 +0200phma(~phma@2001:5b0:210f:7648:8296:8922:28df:c299) (Read error: Connection reset by peer)
2023-05-17 04:31:13 +0200phma(~phma@host-67-44-208-197.hnremote.net)
2023-05-17 04:31:16 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 04:32:02 +0200captnemo(~captnemo@193.32.127.232) (Ping timeout: 265 seconds)
2023-05-17 04:35:31 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 04:36:48 +0200cheater_(~Username@user/cheater)
2023-05-17 04:39:31 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-05-17 04:39:35 +0200cheater_cheater
2023-05-17 04:40:01 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2023-05-17 04:46:31 +0200evincar(~evincar@user/evincar) (Ping timeout: 240 seconds)
2023-05-17 04:48:04 +0200byte`byte
2023-05-17 04:53:12 +0200fun-safe-math(~fun-safe-@c-24-22-79-16.hsd1.wa.comcast.net)
2023-05-17 04:54:40 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-05-17 04:54:45 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-05-17 04:55:20 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2023-05-17 05:00:48 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
2023-05-17 05:01:58 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 05:02:04 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 05:02:42 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 05:06:18 +0200evincar(~evincar@user/evincar)
2023-05-17 05:07:01 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 05:11:03 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 05:11:42 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 05:13:57 +0200captnemo(~captnemo@193.32.127.232) (Client Quit)
2023-05-17 05:15:03 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 05:15:47 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 264 seconds)
2023-05-17 05:17:00 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 05:18:29 +0200 <Inst> are any 9.6.1 users having issues with semigroupoids?
2023-05-17 05:18:55 +0200nate2(~nate@98.45.169.16) (Ping timeout: 265 seconds)
2023-05-17 05:19:25 +0200rf(~rf@2605:59c8:179c:f610:9cce:9bd8:c6af:4e85) (Quit: Leaving)
2023-05-17 05:22:42 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 250 seconds)
2023-05-17 05:24:20 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 05:29:52 +0200nehsou^(~nehsou@73.237.206.60) (Remote host closed the connection)
2023-05-17 05:30:18 +0200drdo(~drdo@bl8-153-185.dsl.telepac.pt) (Quit: Ping timeout (120 seconds))
2023-05-17 05:30:37 +0200drdo(~drdo@bl8-153-185.dsl.telepac.pt)
2023-05-17 05:34:39 +0200cheater(~Username@user/cheater) (Ping timeout: 256 seconds)
2023-05-17 05:35:35 +0200rlj(~rlj@194-218-34-180.customer.telia.com)
2023-05-17 05:36:07 +0200 <Inst> hmmm, looks like it's lib related instead
2023-05-17 05:38:25 +0200evincar(~evincar@user/evincar) (Ping timeout: 240 seconds)
2023-05-17 05:42:05 +0200vandita(~vandit@80-95-82-22.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 05:44:14 +0200vandita(~vandit@77-234-92-199.pool.digikabel.hu)
2023-05-17 05:45:39 +0200motherfsck(~motherfsc@user/motherfsck)
2023-05-17 05:48:37 +0200justsomeguy(~justsomeg@user/justsomeguy)
2023-05-17 05:49:11 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 05:53:01 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 240 seconds)
2023-05-17 05:55:38 +0200rlj(~rlj@194-218-34-180.customer.telia.com) (Ping timeout: 245 seconds)
2023-05-17 05:59:32 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-05-17 06:04:18 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-05-17 06:06:02 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net)
2023-05-17 06:11:40 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2023-05-17 06:12:17 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2023-05-17 06:13:11 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2023-05-17 06:18:40 +0200hugo-(znc@verdigris.lysator.liu.se) (Ping timeout: 248 seconds)
2023-05-17 06:19:19 +0200Kamuela_(sid111576@id-111576.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2023-05-17 06:20:00 +0200nick4(~nick@2600:8807:9103:b700:304f:94eb:f397:5ed)
2023-05-17 06:23:16 +0200mizlan(~mizlan@2607:f010:2a7:1005:f102:419e:a5cb:54b4)
2023-05-17 06:27:55 +0200nick4(~nick@2600:8807:9103:b700:304f:94eb:f397:5ed) (Ping timeout: 256 seconds)
2023-05-17 06:29:11 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 240 seconds)
2023-05-17 06:30:37 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-05-17 06:31:33 +0200hugo(znc@verdigris.lysator.liu.se)
2023-05-17 06:36:37 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 06:39:29 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 268 seconds)
2023-05-17 06:45:53 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 06:54:47 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 240 seconds)
2023-05-17 06:56:52 +0200pyook(~puke@user/puke)
2023-05-17 06:58:23 +0200mbuf(~Shakthi@49.207.178.186)
2023-05-17 07:05:22 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 07:11:11 +0200freeside(~mengwong@103.252.202.151) (Ping timeout: 246 seconds)
2023-05-17 07:18:48 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2023-05-17 07:19:16 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
2023-05-17 07:23:01 +0200ddellacosta(~ddellacos@143.244.47.84) (Ping timeout: 240 seconds)
2023-05-17 07:23:44 +0200mncheck(~mncheck@193.224.205.254)
2023-05-17 07:25:34 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 07:27:07 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 07:28:05 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
2023-05-17 07:28:33 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 256 seconds)
2023-05-17 07:32:24 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 07:33:42 +0200mizlan(~mizlan@2607:f010:2a7:1005:f102:419e:a5cb:54b4) (Quit: mizlan)
2023-05-17 07:36:13 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-05-17 07:37:13 +0200freeside(~mengwong@103.252.202.151)
2023-05-17 07:37:31 +0200hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 240 seconds)
2023-05-17 07:40:23 +0200fun-safe-math(~fun-safe-@c-24-22-79-16.hsd1.wa.comcast.net) (Ping timeout: 264 seconds)
2023-05-17 07:40:36 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-05-17 07:41:30 +0200coot_(~coot@89-69-206-216.dynamic.chello.pl)
2023-05-17 07:42:48 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Ping timeout: 240 seconds)
2023-05-17 07:42:49 +0200coot_coot
2023-05-17 07:43:28 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
2023-05-17 07:43:44 +0200bliminse(~bliminse@user/bliminse) (Quit: leaving)
2023-05-17 07:45:02 +0200evincar(~evincar@user/evincar)
2023-05-17 07:46:04 +0200bliminse(~bliminse@user/bliminse)
2023-05-17 07:48:52 +0200chomwitt(~chomwitt@2a02:587:7a0a:e700:1ac0:4dff:fedb:a3f1)
2023-05-17 07:49:24 +0200trev(~trev@user/trev)
2023-05-17 07:50:25 +0200hugo(znc@verdigris.lysator.liu.se)
2023-05-17 07:58:08 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-05-17 08:05:48 +0200chomwitt(~chomwitt@2a02:587:7a0a:e700:1ac0:4dff:fedb:a3f1) (Remote host closed the connection)
2023-05-17 08:11:51 +0200fun-safe-math(~fun-safe-@c-24-22-79-16.hsd1.or.comcast.net)
2023-05-17 08:13:39 +0200dsrt^(~dsrt@73.237.206.60)
2023-05-17 08:14:58 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-05-17 08:16:21 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 08:23:00 +0200yaroot_(~yaroot@2400:4052:ac0:d900:1cf4:2aff:fe51:c04c)
2023-05-17 08:24:16 +0200yaroot(~yaroot@p3099038-ipngn6001souka.saitama.ocn.ne.jp) (Ping timeout: 250 seconds)
2023-05-17 08:24:16 +0200yaroot_yaroot
2023-05-17 08:24:17 +0200 <dminuoso> geekosaur: With the sheer amount of fromIntegral and realToFrac you generally sprinkle all over numeric code, it makes you wonder why we bother having all these different types anyway.
2023-05-17 08:24:33 +0200 <dminuoso> We should just have a generic IEEE 754 `Number` type and use it for everything!
2023-05-17 08:26:57 +0200 <jade[m]> that'd be terrible if you had no way to represent exact number types
2023-05-17 08:27:35 +0200vandita(~vandit@77-234-92-199.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 08:27:44 +0200 <jade[m]> I agree that the structure we currently have is not very good, but using IEEE754 everywhere would.be much worse
2023-05-17 08:27:59 +0200 <jade[m]> s//*/, s//*/, s/./ /
2023-05-17 08:29:29 +0200vandita(~vandit@84-236-1-64.pool.digikabel.hu)
2023-05-17 08:30:38 +0200vglfr(~vglfr@209.198.137.226) (Read error: Connection reset by peer)
2023-05-17 08:32:18 +0200byte(~byte@user/byte) (Read error: Connection reset by peer)
2023-05-17 08:33:53 +0200byte(~byte@user/byte)
2023-05-17 08:35:02 +0200vglfr(~vglfr@209.198.137.226)
2023-05-17 08:35:12 +0200jinsun(~jinsun@user/jinsun) (Read error: Connection reset by peer)
2023-05-17 08:46:26 +0200 <probie> Would using doubles be that much worse? How often are your integers bigger than 2^54 and used in the same context as "real" numbers?
2023-05-17 08:49:31 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 08:50:49 +0200CiaoSen(~Jura@dynamic-046-114-218-079.46.114.pool.telefonica.de)
2023-05-17 08:51:19 +0200 <dminuoso> jade[m]: Yeah it would be terrible. One cannot conceive such a language achieving worlds dominance
2023-05-17 08:51:33 +0200 <dminuoso> Such a language would die in its infancy.
2023-05-17 08:51:35 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 240 seconds)
2023-05-17 08:53:59 +0200 <dminuoso> Just on the off chance my sarcasm wasnt obvious, JavaScript does exactly that.
2023-05-17 08:56:07 +0200phma(~phma@host-67-44-208-197.hnremote.net) (Read error: Connection reset by peer)
2023-05-17 08:56:10 +0200 <dminuoso> probie: Yes, because it introduces all kinds of issues. Say you have a wallet of money, and want to divide it amongst 3 users. You can easily be tempted to just divide `wallet / num_users`. Nothing guards you against it.
2023-05-17 08:56:31 +0200phma(phma@2001:5b0:210f:7648:8296:8922:28df:c299)
2023-05-17 08:57:02 +0200 <jade[m]> dminuoso: ah yeah, I know, I thought you were being serious and that made me really confused😅
2023-05-17 08:57:22 +0200acidjnk(~acidjnk@p200300d6e7072f36108c5a383809f7d0.dip0.t-ipconnect.de)
2023-05-17 08:58:22 +0200 <dminuoso> Which is why monetary computation in JavaScript usually goes the crazy route and uses string-based numeric libraries.
2023-05-17 08:58:48 +0200 <dminuoso> Performance be damned.
2023-05-17 09:03:06 +0200 <probie> dminuoso: and if I use an `Integer`, Nothing guards against me going ``wallet `div` num_users`` and having some of the money just disappear
2023-05-17 09:04:03 +0200oo_miguel(~Thunderbi@77.252.47.78)
2023-05-17 09:04:44 +0200 <dminuoso> probie: Sure, but then you made a concious choice to use `div`
2023-05-17 09:05:01 +0200 <probie> dminuoso: didn't I make a conscious choice before to use `/`?
2023-05-17 09:05:08 +0200 <dminuoso> Whereas with `/` it's *not* even close to obvious what this will do if you hold something in the hand that *looks* like an integer.
2023-05-17 09:05:42 +0200 <dminuoso> Say I pose the question: What does `10 / 3` equal if you have an intrinsic assumption that 10 and 3 are integers.
2023-05-17 09:06:15 +0200 <dminuoso> In Haskell you would get this:
2023-05-17 09:06:20 +0200 <dminuoso> % 10 / 3 :: Integer
2023-05-17 09:06:20 +0200 <yahb2> <interactive>:133:4: error: ; • No instance for (Fractional Integer) arising from a use of ‘/’ ; • In the expression: 10 / 3 :: Integer ; In an equation for ‘it’: it = 10 / 3 :: Integer
2023-05-17 09:10:00 +0200 <dminuoso> probie: You get into evil traps with IEEE 754 so quickly.
2023-05-17 09:10:04 +0200 <dminuoso> Consider this trivial example:
2023-05-17 09:10:17 +0200 <dminuoso> % 1980 * 0.1 / 1.1 :: Float
2023-05-17 09:10:17 +0200 <yahb2> 180.0
2023-05-17 09:11:09 +0200 <dminuoso> % 1980 * 0.1 / 1.1 :: Double
2023-05-17 09:11:09 +0200 <yahb2> 179.99999999999997
2023-05-17 09:11:38 +0200 <dminuoso> probie: The thing is, you stare at something that has a comma and you *usually* tend to assume this be a Rational.
2023-05-17 09:11:54 +0200 <dminuoso> And if there was some automatic Rational promotion, that probably wouldnt be too horrible unless you cared about performance much
2023-05-17 09:12:15 +0200 <dminuoso> But you start doing the simplest of things, you get behavior that is close, but not quite like rational behavior.
2023-05-17 09:12:16 +0200 <probie> Perhaps you should get a compiler warning if you write (0.1 :: Double), the same way you do if you write (300 :: Word8)?
2023-05-17 09:12:42 +0200 <dminuoso> probie: We were talking about a context where the only type you ever had was say IEEE Double like in javascript
2023-05-17 09:12:42 +0200 <c_wraith> Rational can be shockingly bad for performance if you use it in a numerical algorithm
2023-05-17 09:13:05 +0200 <dminuoso> probie: Try typing `(1980 * 0.1) / 1.1` in your browsers JavaScript console.
2023-05-17 09:13:16 +0200 <jade[m]> dminuoso: Am I too blind to see the issue?
2023-05-17 09:14:22 +0200 <dminuoso> c_wraith: And unconsciou IEEE 754 can be shocking bad for program integrity.
2023-05-17 09:14:23 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Ping timeout: 240 seconds)
2023-05-17 09:14:30 +0200 <dminuoso> s/shocking/shockingly/
2023-05-17 09:14:56 +0200 <c_wraith> especially if you're a C programmer and think -ffast-math sounds like a cool and obvious thing that you certainly want
2023-05-17 09:15:31 +0200 <dminuoso> That compiler flag has such a treacherous name, to be honest.
2023-05-17 09:15:44 +0200 <dminuoso> `fast-but-incorrect-math` might have been better, but then it wouldn't have sold as much.
2023-05-17 09:16:15 +0200 <c_wraith> it's incorrect in really sneaky ways, too. Not just a little occasional rounding error.
2023-05-17 09:16:26 +0200mc47(~mc47@xmonad/TheMC47)
2023-05-17 09:17:06 +0200 <dminuoso> `Sets the options -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-only, -fno-rounding-math, -fno-signaling-nans, -fcx-limited-range and -fexcess-precision=fast. `
2023-05-17 09:17:14 +0200 <probie> meanwhile with `Int` we get gems like
2023-05-17 09:17:20 +0200 <probie> > abs (minBound :: Int)
2023-05-17 09:17:22 +0200 <lambdabot> -9223372036854775808
2023-05-17 09:17:42 +0200 <dminuoso> Oh that's a nice one
2023-05-17 09:17:55 +0200 <c_wraith> probie: to be fair, that still better than what C does when you do that...
2023-05-17 09:18:00 +0200evincar(~evincar@user/evincar) (Ping timeout: 250 seconds)
2023-05-17 09:18:10 +0200 <c_wraith> *that's
2023-05-17 09:18:49 +0200 <dminuoso> Im not sure what the best behavior would be here.
2023-05-17 09:19:42 +0200 <dminuoso> `error` would be disgusting to deal with, moving abs into a separate typeclass with unsigned numeric types only would be very inconvenient
2023-05-17 09:19:45 +0200 <c_wraith> C just declares INT_MIN * -1 to be UB
2023-05-17 09:20:13 +0200 <c_wraith> accidentally multiply signed integers without checking for that first? Your program is invalid.
2023-05-17 09:20:24 +0200 <dminuoso> % abs (minBound :: Int) * signum (minBound :: Int)
2023-05-17 09:20:24 +0200 <yahb2> -9223372036854775808
2023-05-17 09:20:31 +0200 <dminuoso> At least that law is preserved.
2023-05-17 09:20:33 +0200 <dminuoso> So there's that.
2023-05-17 09:20:55 +0200 <c_wraith> ok, that's actually really funny.
2023-05-17 09:21:14 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net)
2023-05-17 09:21:24 +0200 <dminuoso> (I really want someone to explain that to me)
2023-05-17 09:21:57 +0200 <dminuoso> Im sure I can construct a violation of distributivity with that
2023-05-17 09:22:59 +0200 <c_wraith> explain which part? Why it preserves the law? because negate minBound === minBound * (-1)
2023-05-17 09:23:00 +0200 <dminuoso> But perhaps thats the reality of numeric types that are carried out in fixed-width registers in ALUs. You have to give up some of the nice mathematical properties.
2023-05-17 09:23:43 +0200 <dminuoso> c_wraith: Ohh hold on, this works out because its modular arithmatic right?
2023-05-17 09:24:05 +0200 <c_wraith> dminuoso: no, it's because it's the exact same issue that results in abs minBound being negative in the first place.
2023-05-17 09:24:16 +0200 <c_wraith> You multiply it by -1 again, and it remains negative
2023-05-17 09:24:40 +0200 <dminuoso> Sure, but that too is sort of modular arithmatic.
2023-05-17 09:24:40 +0200vglfr(~vglfr@209.198.137.226) (Read error: Connection reset by peer)
2023-05-17 09:25:03 +0200 <c_wraith> You could probably find a consistent way to cast it that way, but... I wouldn't bother :)
2023-05-17 09:25:09 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977)
2023-05-17 09:25:54 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
2023-05-17 09:26:14 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 09:26:36 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 09:27:22 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977) (Read error: Connection reset by peer)
2023-05-17 09:27:33 +0200bgs(~bgs@212-85-160-171.dynamic.telemach.net)
2023-05-17 09:27:57 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977)
2023-05-17 09:27:59 +0200 <dminuoso> c_wraith: Well you could define it in terms of some equivalence to `my_abs x = go x 0 where go 0 c = c; go x c = go (-1) (c+1)`
2023-05-17 09:28:04 +0200 <dminuoso> (well and some signum check)
2023-05-17 09:28:15 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com)
2023-05-17 09:28:15 +0200 <dminuoso> Then all would be good.
2023-05-17 09:28:28 +0200 <dminuoso> But I guess you cant quite do that, because nobody quite knows what Num is for.
2023-05-17 09:28:34 +0200 <dminuoso> It's more than just integral types
2023-05-17 09:29:12 +0200 <c_wraith> have you looked at signum for Complex? Now that's just silly
2023-05-17 09:29:38 +0200chomwitt(~chomwitt@2a02:587:7a0a:e700:1ac0:4dff:fedb:a3f1)
2023-05-17 09:30:15 +0200 <dminuoso> What is that o.o
2023-05-17 09:30:32 +0200 <dminuoso> signum z@(x:+y) = x/r :+ y/r where r = magnitude z
2023-05-17 09:31:04 +0200 <dminuoso> c_wraith: I suppose that is one solution to satisfy `abs x * signum x == x`?
2023-05-17 09:31:06 +0200 <probie> What's wrong with that?
2023-05-17 09:31:25 +0200 <c_wraith> probie: signum is usually expected to return a result in the set {-1, 0, 1}
2023-05-17 09:31:31 +0200 <c_wraith> dminuoso: yes
2023-05-17 09:31:41 +0200 <dminuoso> quite.. arbitrary.
2023-05-17 09:31:48 +0200 <dminuoso> Perhaps `abs` really does not belong into Num.
2023-05-17 09:31:55 +0200 <probie> c_wraith: Sure, but that's because most numbers are on a line, not a plane
2023-05-17 09:32:06 +0200 <probie> It's giving you a point on the unit circle
2023-05-17 09:32:08 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977) (Ping timeout: 240 seconds)
2023-05-17 09:32:27 +0200 <dminuoso> "on a line"?
2023-05-17 09:33:00 +0200 <c_wraith> probie: I'm well aware of what it's doing. It's just that operation is not signum
2023-05-17 09:33:31 +0200 <[Leary]> The angle / point on the unit circle is the complex number equivalent of sign ... seems like the obvious implementation to me.
2023-05-17 09:34:40 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-05-17 09:34:43 +0200 <probie> dminuoso: as in there's only 1 dimension of movement
2023-05-17 09:35:20 +0200 <dminuoso> probie: So? Very very roughly Num is the typeclass of rings.
2023-05-17 09:35:36 +0200 <dminuoso> It has nothing to do with how you conceptualize numbers, and whether you think of them as 1-dimensional or 2-dimensional
2023-05-17 09:36:18 +0200 <dminuoso> Though Num has extra baggage, that makes what it captures somewhat unclear
2023-05-17 09:36:50 +0200 <jade[m]> dminuoso: it doesn't enforce any laws though
2023-05-17 09:37:21 +0200 <dminuoso> laws are not enforced either way, even if the haskell report demands them.
2023-05-17 09:37:32 +0200 <jade[m]> yes, that's what I mean though
2023-05-17 09:37:40 +0200 <dminuoso> For Num the usual ring laws are expected to hold though.
2023-05-17 09:37:52 +0200 <dminuoso> The haddock on Num even describes that
2023-05-17 09:38:01 +0200tessier(~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 240 seconds)
2023-05-17 09:38:25 +0200 <jade[m]> customarily expected yeah
2023-05-17 09:38:56 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2023-05-17 09:41:37 +0200 <probie> How can it be customarily expected when one of the most used `Num` instances (`Double`) breaks the laws? :p
2023-05-17 09:42:32 +0200 <probie> On a serious note, I wish it wasn't too late to cut `Num` up into several parts, so that the Ring parts were separate from noise like `fromInteger` or `abs`.
2023-05-17 09:42:45 +0200 <jade[m]> numeric-prelude
2023-05-17 09:43:11 +0200 <merijn> probie: The thing is, people say this all the time, but so far I've not seen any more principled approach that doesn't actually suck to use
2023-05-17 09:43:12 +0200fun-safe-math(~fun-safe-@c-24-22-79-16.hsd1.or.comcast.net) (Quit: Leaving)
2023-05-17 09:43:29 +0200 <merijn> I will take unprincipled, but usable Num over "principled, but everything sucks"
2023-05-17 09:44:39 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-05-17 09:44:40 +0200zeenk(~zeenk@2a02:2f04:a105:f00::7fe)
2023-05-17 09:45:16 +0200 <dminuoso> I for one would like to see int-cast being integrated into base, and become the default/norm for average day use.
2023-05-17 09:45:35 +0200 <merijn> Facts
2023-05-17 09:45:40 +0200nschoe(~q@2a01:e0a:8e:a190:3fe8:a9d6:8da8:beb7)
2023-05-17 09:46:05 +0200 <merijn> In general death to lossy conversions :p
2023-05-17 09:46:24 +0200 <dminuoso> Well lossy conversions can be fine, but they should be *manual* end *explicit*
2023-05-17 09:46:45 +0200 <probie> merijn: Do you include the (0.1 :: Double) style of lossy conversions in things that should die?
2023-05-17 09:47:11 +0200 <dminuoso> probie: That's not a lossy *conversion*
2023-05-17 09:47:45 +0200vglfr(~vglfr@209.198.137.226)
2023-05-17 09:47:47 +0200 <merijn> probie: No*
2023-05-17 09:47:57 +0200 <dminuoso> It's very much defined behavior.
2023-05-17 09:48:04 +0200 <merijn> * - I do want compile time checks that literals are "in range"
2023-05-17 09:48:55 +0200 <merijn> i.e. "1024 :: Word8" should be a compile error
2023-05-17 09:49:23 +0200pyook(~puke@user/puke) (Ping timeout: 246 seconds)
2023-05-17 09:49:36 +0200 <dminuoso> So should: "Mötley Crüe" :: ByteString
2023-05-17 09:49:54 +0200 <merijn> i.e. "fromInteger :: Num a => Integer -> a" should be "fromInteger :: Num a => Integer -> Maybe a" (or Either Error a)
2023-05-17 09:50:50 +0200 <merijn> dminuoso: ByteString has a Lift instance now, so you can trivially implement Validate for it ;)
2023-05-17 09:51:43 +0200vglfr(~vglfr@209.198.137.226) (Read error: Connection reset by peer)
2023-05-17 09:52:36 +0200 <dminuoso> merijn: I dont want to use TH for this.
2023-05-17 09:52:40 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977)
2023-05-17 09:52:48 +0200 <merijn> dminuoso: Sure, neither do I. I argued it should be in GHC
2023-05-17 09:53:40 +0200 <dminuoso> Not quite sure what that would entail
2023-05-17 09:54:04 +0200 <dminuoso> I suppose IsString could (perhaps optionally) allow for QQ or TH
2023-05-17 09:54:18 +0200 <dminuoso> With GHC automatically doing the splicing behind the scenes.
2023-05-17 09:54:21 +0200 <dminuoso> Cross compilation be damned.
2023-05-17 09:54:50 +0200akegalj(~akegalj@78-1-10-173.adsl.net.t-com.hr)
2023-05-17 09:55:02 +0200 <dminuoso> merijn: Or we would need some new infrastructure to do compile time validation of such literals that doesnt allow unlimited TH, because I think cross-compilation breakage is the biggest problem
2023-05-17 09:55:52 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-05-17 09:57:54 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-05-17 09:59:20 +0200 <merijn> dminuoso: It needs some new infrastructure yes, but that got shot down
2023-05-17 10:00:03 +0200 <merijn> dminuoso: Apparently I even wrote out a proposal :O
2023-05-17 10:00:05 +0200 <merijn> dminuoso: https://mail.haskell.org/pipermail/ghc-devs/2015-February/008239.html
2023-05-17 10:00:43 +0200mmhat(~mmh@p200300f1c7066882ee086bfffe095315.dip0.t-ipconnect.de)
2023-05-17 10:03:11 +0200captnemo(~captnemo@193.32.127.232) (Quit: WeeChat 3.8)
2023-05-17 10:03:50 +0200ft(~ft@p4fc2a88b.dip0.t-ipconnect.de) (Quit: leaving)
2023-05-17 10:04:23 +0200 <dminuoso> merijn: Mmm, is it possible that information from trac got lost?
2023-05-17 10:04:34 +0200 <dminuoso> On gitlab there's only the initial proposal, but nothing to suggest it got shot down
2023-05-17 10:04:46 +0200 <dminuoso> Skimming the mailing list, there seemed to have mostly just positive opinions
2023-05-17 10:08:03 +0200 <merijn> dminuoso: The mailing list in the end was just "implement it as a library first and we'll see" and then it was forgotten forever :p
2023-05-17 10:08:10 +0200titibandit(~titibandi@user/titibandit)
2023-05-17 10:17:59 +0200vandita(~vandit@84-236-1-64.pool.digikabel.hu) (Ping timeout: 256 seconds)
2023-05-17 10:19:23 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:5170:30b5:f532:c977) (Ping timeout: 264 seconds)
2023-05-17 10:19:47 +0200vandita(~vandit@84-236-3-77.pool.digikabel.hu)
2023-05-17 10:20:03 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:cd0d:e437:4fb2:dbb)
2023-05-17 10:20:37 +0200michalz(~michalz@185.246.204.75)
2023-05-17 10:21:59 +0200 <chiselfuse> hello i'm a newb. in lambda calculus, is there any significance of \z.\j.(\x.\y.y) z j vs \x.\y.y
2023-05-17 10:24:12 +0200 <merijn> define significance
2023-05-17 10:24:30 +0200 <merijn> after beta reducing the first one you get something equivalent to the second (modula alpha renaming)
2023-05-17 10:24:51 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2023-05-17 10:25:37 +0200titibandit(~titibandi@user/titibandit) (Remote host closed the connection)
2023-05-17 10:29:03 +0200Everything(~Everythin@46.185.124.65) (Quit: leaving)
2023-05-17 10:29:36 +0200 <merijn> dminuoso: I'm still not really happy with the way Validate works for polymorphic literals, but I can't really think of a way to improve it :\
2023-05-17 10:30:04 +0200Everything(~Everythin@static.208.206.21.65.clients.your-server.de)
2023-05-17 10:31:36 +0200MajorBiscuit(~MajorBisc@145.94.40.195)
2023-05-17 10:32:18 +0200titibandit(~titibandi@user/titibandit)
2023-05-17 10:32:53 +0200user____3(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 10:33:16 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Killed (tantalum.libera.chat (Nickname regained by services)))
2023-05-17 10:33:16 +0200user____3gurkenglas
2023-05-17 10:33:19 +0200 <chiselfuse> idk i'm not sure, still trying to figure out what i don't understand
2023-05-17 10:34:46 +0200 <merijn> chiselfuse: I mean, the simplest method in this example would be to just write out the beta reduction of the left one and ask someone to check if you got it right :)
2023-05-17 10:36:08 +0200 <chiselfuse> well you gave me terms like 'beta reduction' and 'modula alpha renaming' that i'm looking into now, good enough :)
2023-05-17 10:37:18 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:b97c:3991:b4ea:4289) (Remote host closed the connection)
2023-05-17 10:37:28 +0200 <merijn> chiselfuse: beta reduction is roughly just "evaluating the expression by one or more steps" and alpha renaming means that "renaming a variable (without accidentally colliding with an existing name in scope)
2023-05-17 10:37:47 +0200 <merijn> chiselfuse: i.e \x.x and \y.y are "the same" in the sense that they compute the same thing
2023-05-17 10:38:23 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 240 seconds)
2023-05-17 10:38:24 +0200 <merijn> chiselfuse: So "equivalent modulo alpha renaming" = computes the same thing in the same way, but some of the variables may be named differently
2023-05-17 10:38:26 +0200 <chiselfuse> right, i heard 'alpha-equivalence' before
2023-05-17 10:38:59 +0200 <merijn> chiselfuse: yeah, alpha-equivalence is also a common nam,e
2023-05-17 10:40:05 +0200MajorBiscuit(~MajorBisc@145.94.40.195) (Ping timeout: 256 seconds)
2023-05-17 10:40:15 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2023-05-17 10:40:34 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-05-17 10:43:10 +0200remexre_(~remexre@mail.sift.net)
2023-05-17 10:44:23 +0200remexre(~remexre@user/remexre) (Ping timeout: 240 seconds)
2023-05-17 10:44:25 +0200shriekingnoise(~shrieking@186.137.175.87) (Ping timeout: 240 seconds)
2023-05-17 10:44:26 +0200remexre_remexre
2023-05-17 10:47:22 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2023-05-17 10:48:00 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
2023-05-17 10:48:12 +0200codaraxis(~codaraxis@user/codaraxis)
2023-05-17 10:48:27 +0200MajorBiscuit(~MajorBisc@145.94.153.200)
2023-05-17 10:49:43 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Ping timeout: 256 seconds)
2023-05-17 10:50:14 +0200Lord_of_Life_Lord_of_Life
2023-05-17 11:00:31 +0200mon_aaraj(~montchncs@2001:470:69fc:105::8e6b) (Remote host closed the connection)
2023-05-17 11:06:19 +0200ubert(~Thunderbi@2001:871:263:e49d:f69b:2e8c:6b6:bbcf)
2023-05-17 11:09:14 +0200 <merijn> ah, upgrading to GHC 9.0.2 segfaults my code...that's not worrying at all...
2023-05-17 11:09:20 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2023-05-17 11:11:19 +0200 <ocharles[m]> merijn: well the good news is you have at least two upgrades that might fix it 😄
2023-05-17 11:14:04 +0200jitrs[m](~jitrsmatr@2001:470:69fc:105::3:400c) (Remote host closed the connection)
2023-05-17 11:14:30 +0200 <merijn> Time to break out gdb >.>
2023-05-17 11:19:46 +0200 <merijn> let's see if ghc's -g produces none useless output in gdb nowadays
2023-05-17 11:22:50 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net)
2023-05-17 11:24:39 +0200 <merijn> "internal error: Evaluated a CAF (0xcd9e28) that was GC'd!"
2023-05-17 11:24:43 +0200 <merijn> Well...that's not right
2023-05-17 11:26:47 +0200mauke(~mauke@user/mauke) (Ping timeout: 240 seconds)
2023-05-17 11:27:07 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2023-05-17 11:29:20 +0200 <merijn> Welp, looks like I don't even have to bother supporting ghc 9.0 and 9.2 on account of them being completely broken on this code :p
2023-05-17 11:32:10 +0200__monty__(~toonn@user/toonn)
2023-05-17 11:32:54 +0200 <probie> merijn: is your code doing anything particularly weird that would trip them up?
2023-05-17 11:33:03 +0200 <merijn> No
2023-05-17 11:33:17 +0200 <merijn> Seems to be this bug: https://gitlab.haskell.org/ghc/ghc/-/issues/20959
2023-05-17 11:33:22 +0200mauke(~mauke@user/mauke)
2023-05-17 11:37:42 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 11:39:51 +0200 <merijn> but that seems pretty solidly in "GHC fucking up" territory and not really anything I can work around
2023-05-17 11:42:18 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3) (Ping timeout: 250 seconds)
2023-05-17 11:43:35 +0200MajorBiscuit(~MajorBisc@145.94.153.200) (Ping timeout: 240 seconds)
2023-05-17 11:47:11 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 240 seconds)
2023-05-17 11:47:26 +0200cfricke(~cfricke@user/cfricke)
2023-05-17 11:48:15 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-05-17 11:50:23 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Excess Flood)
2023-05-17 11:50:35 +0200jero98772(~jero98772@2800:484:1d84:9000::2) (Ping timeout: 264 seconds)
2023-05-17 11:50:54 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-05-17 11:51:06 +0200MajorBiscuit(~MajorBisc@145.94.153.200)
2023-05-17 11:57:04 +0200titibandit(~titibandi@user/titibandit) (Ping timeout: 268 seconds)
2023-05-17 11:57:17 +0200Pickchea(~private@user/pickchea)
2023-05-17 11:59:08 +0200razetime(~quassel@117.193.3.16)
2023-05-17 11:59:35 +0200 <merijn> ah, looks like 9.2 might actually work *fingers crossed*
2023-05-17 12:02:20 +0200jero98772(~jero98772@2800:484:1d84:9000::2)
2023-05-17 12:07:23 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 264 seconds)
2023-05-17 12:10:27 +0200wagle(~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2023-05-17 12:10:38 +0200wagle(~wagle@quassel.wagle.io)
2023-05-17 12:13:23 +0200wagle(~wagle@quassel.wagle.io) (Client Quit)
2023-05-17 12:13:35 +0200mauke(~mauke@user/mauke) (Ping timeout: 240 seconds)
2023-05-17 12:14:10 +0200wagle(~wagle@quassel.wagle.io)
2023-05-17 12:15:13 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2023-05-17 12:16:06 +0200titibandit(~titibandi@user/titibandit)
2023-05-17 12:18:09 +0200mauke(~mauke@user/mauke)
2023-05-17 12:20:49 +0200cheater(~Username@user/cheater)
2023-05-17 12:25:05 +0200MajorBiscuit(~MajorBisc@145.94.153.200) (Ping timeout: 240 seconds)
2023-05-17 12:25:42 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:cd0d:e437:4fb2:dbb) (Ping timeout: 265 seconds)
2023-05-17 12:30:28 +0200vandita(~vandit@84-236-3-77.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 12:31:59 +0200mc47(~mc47@xmonad/TheMC47) (Ping timeout: 240 seconds)
2023-05-17 12:32:26 +0200vandita(~vandit@85-238-77-47.pool.digikabel.hu)
2023-05-17 12:34:11 +0200raym(~ray@user/raym) (Quit: Server Maintenance)
2023-05-17 12:36:26 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:11d0:74b0:153c:eb2e)
2023-05-17 12:37:35 +0200CiaoSen(~Jura@dynamic-046-114-218-079.46.114.pool.telefonica.de) (Ping timeout: 240 seconds)
2023-05-17 12:48:00 +0200razetime(~quassel@117.193.3.16) (Remote host closed the connection)
2023-05-17 12:48:00 +0200barcisz(~barcisz@79.191.229.20.ipv4.supernova.orange.pl)
2023-05-17 12:50:28 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:11d0:74b0:153c:eb2e) (Ping timeout: 240 seconds)
2023-05-17 12:54:33 +0200vglfr(~vglfr@209.198.137.226)
2023-05-17 12:56:39 +0200vglfr(~vglfr@209.198.137.226) (Read error: Connection reset by peer)
2023-05-17 12:57:22 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:11d0:74b0:153c:eb2e)
2023-05-17 12:58:20 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-05-17 13:00:03 +0200jero98772(~jero98772@2800:484:1d84:9000::2) (Ping timeout: 256 seconds)
2023-05-17 13:02:49 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2023-05-17 13:06:33 +0200xff0x(~xff0x@ai098135.d.east.v6connect.net)
2023-05-17 13:08:14 +0200mei(~mei@user/mei) (Ping timeout: 265 seconds)
2023-05-17 13:11:16 +0200jero98772(~jero98772@2800:484:1d84:9000::2)
2023-05-17 13:17:56 +0200MajorBiscuit(~MajorBisc@145.94.40.195)
2023-05-17 13:19:09 +0200ubert(~Thunderbi@2001:871:263:e49d:f69b:2e8c:6b6:bbcf) (Quit: ubert)
2023-05-17 13:19:21 +0200ub(~Thunderbi@188-23-67-228.adsl.highway.telekom.at)
2023-05-17 13:22:47 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Ping timeout: 268 seconds)
2023-05-17 13:23:25 +0200ub(~Thunderbi@188-23-67-228.adsl.highway.telekom.at) (Ping timeout: 240 seconds)
2023-05-17 13:24:39 +0200Tewuzij[m](~tewuzijtc@2001:470:69fc:105::2:eddc)
2023-05-17 13:25:06 +0200ubert(~Thunderbi@2001:871:263:e49d:a042:6bf0:8ad9:6525)
2023-05-17 13:35:37 +0200ubert(~Thunderbi@2001:871:263:e49d:a042:6bf0:8ad9:6525) (Quit: ubert)
2023-05-17 13:37:57 +0200titibandit(~titibandi@user/titibandit) (Remote host closed the connection)
2023-05-17 13:46:15 +0200akegalj(~akegalj@78-1-10-173.adsl.net.t-com.hr) (Quit: leaving)
2023-05-17 13:49:29 +0200byte(~byte@user/byte) (Ping timeout: 246 seconds)
2023-05-17 13:50:29 +0200acidjnk(~acidjnk@p200300d6e7072f36108c5a383809f7d0.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2023-05-17 13:53:04 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.8)
2023-05-17 13:55:04 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2023-05-17 13:57:13 +0200titibandit(~titibandi@user/titibandit)
2023-05-17 13:57:37 +0200chele(~chele@user/chele)
2023-05-17 14:09:25 +0200vandita(~vandit@85-238-77-47.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 14:11:32 +0200vandita(~vandit@94-21-55-76.pool.digikabel.hu)
2023-05-17 14:12:20 +0200cfricke(~cfricke@user/cfricke)
2023-05-17 14:13:29 +0200mc47(~mc47@xmonad/TheMC47)
2023-05-17 14:16:35 +0200codaraxis__(~codaraxis@user/codaraxis)
2023-05-17 14:17:25 +0200codaraxis___(~codaraxis@user/codaraxis)
2023-05-17 14:18:23 +0200codaraxis___(~codaraxis@user/codaraxis) (Max SendQ exceeded)
2023-05-17 14:18:27 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-05-17 14:20:08 +0200codaraxis(~codaraxis@user/codaraxis) (Ping timeout: 240 seconds)
2023-05-17 14:21:01 +0200codaraxis__(~codaraxis@user/codaraxis) (Ping timeout: 240 seconds)
2023-05-17 14:21:39 +0200nek0(~nek0@2a01:4f8:222:2b41::12) (Ping timeout: 256 seconds)
2023-05-17 14:25:01 +0200elain4(~textual@2601:5c1:4402:cd30:7198:8fd2:4f69:971)
2023-05-17 14:36:25 +0200codaraxis___(~codaraxis@user/codaraxis)
2023-05-17 14:38:27 +0200elain4(~textual@2601:5c1:4402:cd30:7198:8fd2:4f69:971) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-05-17 14:40:07 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-05-17 14:41:21 +0200nek0(~nek0@2a01:4f8:222:2b41::12)
2023-05-17 14:42:10 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-05-17 14:42:10 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-05-17 14:42:10 +0200wroathe(~wroathe@user/wroathe)
2023-05-17 15:03:32 +0200 <texasmynsted> How do you _find_ useful functions and type classes? I just learned about interact a few days ago and it is in Prelude.
2023-05-17 15:03:44 +0200 <texasmynsted> Is there cool-function-opedia or something?
2023-05-17 15:03:59 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2023-05-17 15:05:43 +0200 <sm> texasmynsted: there is typeclassopaedia, certainly
2023-05-17 15:06:00 +0200 <sm> reading through all of base is a great idea also
2023-05-17 15:06:48 +0200 <mmynsted[m]> yes typeclassopedia is nice but what about beyond that?
2023-05-17 15:07:23 +0200 <sm> are there are type classes that matter beyond that ?
2023-05-17 15:08:40 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 15:11:22 +0200Pickchea(~private@user/pickchea)
2023-05-17 15:15:02 +0200 <byorgey> The cool-function-opedia is hosted at https://hackage.haskell.org/package/base =)
2023-05-17 15:16:37 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2023-05-17 15:17:30 +0200codaraxis__(~codaraxis@user/codaraxis)
2023-05-17 15:21:43 +0200codaraxis___(~codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2023-05-17 15:21:56 +0200 <mmynsted[m]> Heheh. Okay fair enough byorgey
2023-05-17 15:23:06 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net)
2023-05-17 15:23:34 +0200 <mmynsted[m]> sm: what about an invariant functor like https://hackage.haskell.org/package/invariant-0.6.1/docs/Data-Functor-Invariant.html ? Unless you knew what to look for you wound not find it.
2023-05-17 15:23:35 +0200Feuermagier(~Feuermagi@user/feuermagier) (Ping timeout: 240 seconds)
2023-05-17 15:24:08 +0200bontaq(~user@ool-45779b84.dyn.optonline.net)
2023-05-17 15:25:43 +0200Feuermagier(~Feuermagi@user/feuermagier)
2023-05-17 15:27:12 +0200 <sm> yes, Haskell library/concept space is so large you'll never know everything to look for
2023-05-17 15:27:23 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2023-05-17 15:28:43 +0200 <sm> (who is looking for invariant functors ? not many)
2023-05-17 15:34:35 +0200elain4(~textual@static-71-251-226-194.rcmdva.fios.verizon.net)
2023-05-17 15:38:31 +0200cheater_(~Username@user/cheater)
2023-05-17 15:39:27 +0200 <kuribas> We have some code in Python which is calculating different timeseries, where some series depend on others.
2023-05-17 15:39:28 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-05-17 15:39:41 +0200cheater__(~Username@user/cheater)
2023-05-17 15:39:41 +0200cheater__cheater
2023-05-17 15:39:44 +0200 <merijn> texasmynsted: Hanging out here, asking for advice, the haskell reddit, lurking on haskell-cafe...
2023-05-17 15:39:58 +0200 <kuribas> I wonder how you would do this in haskell, making it easy to test.
2023-05-17 15:40:15 +0200 <merijn> texasmynsted: Here, let me contribute my own useful library :p
2023-05-17 15:40:22 +0200 <merijn> @hackage validated-literals
2023-05-17 15:40:22 +0200 <lambdabot> https://hackage.haskell.org/package/validated-literals
2023-05-17 15:40:39 +0200 <kuribas> In Python you have vcr, which is basically saving timeseries so they can be tested later without having to fetch the data every time.
2023-05-17 15:41:12 +0200 <kuribas> Maybe describing the timeseries graph with an applicative effect, where the effect can be changed for testing?
2023-05-17 15:41:22 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 15:42:47 +0200cheater_(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-05-17 15:43:04 +0200 <kuribas> And actually computing the whole graph would be the identity functor then?
2023-05-17 15:43:32 +0200ddellacosta(~ddellacos@143.244.47.100)
2023-05-17 15:43:48 +0200 <kuribas> Or a free monad...
2023-05-17 15:43:50 +0200 <merijn> byorgey: I thought the cool-function-opedia was ghc-prim? :p
2023-05-17 15:44:19 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.8)
2023-05-17 15:45:47 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Ping timeout: 264 seconds)
2023-05-17 15:45:50 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3) (Ping timeout: 250 seconds)
2023-05-17 15:46:39 +0200chomwitt(~chomwitt@2a02:587:7a0a:e700:1ac0:4dff:fedb:a3f1) (Ping timeout: 256 seconds)
2023-05-17 15:47:44 +0200 <ncf> that's the cursed-functionomicon
2023-05-17 15:48:58 +0200 <byorgey> haha
2023-05-17 15:49:42 +0200 <merijn> ghc-prim has all the functions *I* think are cool :p
2023-05-17 15:49:59 +0200 <byorgey> hmm, you're right, why didn't anyone ever tell me about panicError :: Addr# -> a before?
2023-05-17 15:50:11 +0200 <byorgey> I've wanted that function so many times
2023-05-17 15:50:28 +0200 <merijn> byorgey: I've always had a soft spot for reallyUnsafePtrEquality#
2023-05-17 15:50:52 +0200 <merijn> I like how they felt it necessary to add the "really" to emphasise this is next level unsafe ;)
2023-05-17 15:51:41 +0200 <byorgey> Yes, that one is nice. I especially like the implementation https://hackage.haskell.org/package/ghc-prim-0.10.0/docs/src/GHC.Prim.html#reallyUnsafePtrEquality… :
2023-05-17 15:51:44 +0200 <byorgey> reallyUnsafePtrEquality# = reallyUnsafePtrEquality#
2023-05-17 15:51:59 +0200 <merijn> byorgey: That's the implementation of everything in ghc-prim, though
2023-05-17 15:52:06 +0200 <byorgey> I know ;-)
2023-05-17 15:52:51 +0200 <byorgey> I assume they are magically replaced by magical calls to runtime functions or something
2023-05-17 15:53:09 +0200 <merijn> that or compiler intrinsics
2023-05-17 16:03:41 +0200 <geekosaur> they're not even replaced; the file is only used for documentation, the compiler generates them directly instead of calling into GHC.Prim
2023-05-17 16:03:58 +0200 <geekosaur> many of them compile to machine instructions, the rest to Cmm
2023-05-17 16:04:10 +0200 <merijn> geekosaur: iirc that's incorrect, the file exists for type checking too
2023-05-17 16:04:32 +0200 <geekosaur> mm, probably
2023-05-17 16:04:45 +0200 <geekosaur> but it certainly doesn't exist for code
2023-05-17 16:06:00 +0200bitdex_(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2023-05-17 16:11:03 +0200 <mmynsted[m]> <merijn> "texasmynsted: Here, let me..." <- okay, I am game. Which libraries?
2023-05-17 16:11:55 +0200justsomeguy(~justsomeg@user/justsomeguy)
2023-05-17 16:12:41 +0200 <merijn> mmynsted[m]: It was linked the next message :p
2023-05-17 16:14:15 +0200 <texasmynsted> oooh. That did not come through the Matrix bridge.
2023-05-17 16:15:49 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:a849:db6d:3c76:bf9d)
2023-05-17 16:16:29 +0200 <texasmynsted> nice!
2023-05-17 16:16:47 +0200 <texasmynsted> looks useful
2023-05-17 16:17:05 +0200vandita(~vandit@94-21-55-76.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 16:17:17 +0200 <merijn> I like it/am proud of it because it manages to do one super useful and powerful thing easily with, like, 0 dependencies :p
2023-05-17 16:19:38 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:11d0:74b0:153c:eb2e) (Ping timeout: 265 seconds)
2023-05-17 16:20:36 +0200 <hamzam3> Hey, nice work on your library !
2023-05-17 16:20:45 +0200 <hamzam3> But what is the $$ operator ?
2023-05-17 16:21:24 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-05-17 16:22:03 +0200mmynsted[m](~mmynstedm@2001:470:69fc:105::3:474b) ()
2023-05-17 16:23:01 +0200 <[exa]> hamzam3: template haskell splice (think macro)
2023-05-17 16:24:01 +0200 <[exa]> oh actually the double $ is a _typed_ expression splice, cool
2023-05-17 16:24:06 +0200 <[exa]> see below here https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/template_haskell.html
2023-05-17 16:24:30 +0200vandita(~vandit@89-186-118-204.pool.digikabel.hu)
2023-05-17 16:24:45 +0200 <merijn> hamzam3: typed TH splice
2023-05-17 16:25:28 +0200 <merijn> Typed TH runs after type checking so you can smuggle the type information from the expression into the TH splice, so it can infer what you're trying to convert to
2023-05-17 16:25:41 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
2023-05-17 16:26:11 +0200vglfr(~vglfr@209.198.137.226)
2023-05-17 16:27:06 +0200 <merijn> I'm always too lazy to remember/lookup how to write relevant TH code, whereas writing "a -> Maybe b" is easy and for most things you can use the default Lift instance, so you don't have to know any TH :)
2023-05-17 16:28:59 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:a849:db6d:3c76:bf9d) (Ping timeout: 264 seconds)
2023-05-17 16:30:45 +0200acidjnk(~acidjnk@p200300d6e7072f360c76d857e5b4f035.dip0.t-ipconnect.de)
2023-05-17 16:32:17 +0200byte(~byte@user/byte)
2023-05-17 16:32:18 +0200shriekingnoise(~shrieking@186.137.175.87)
2023-05-17 16:33:34 +0200 <texasmynsted> yes. very nice
2023-05-17 16:37:02 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 265 seconds)
2023-05-17 16:38:55 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:a421:e2fa:f46b:39b8)
2023-05-17 16:41:19 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8)
2023-05-17 16:43:24 +0200mikoto-chan(~mikoto-ch@ip-213-49-58-19.dsl.scarlet.be)
2023-05-17 16:44:05 +0200Sgeo(~Sgeo@user/sgeo)
2023-05-17 16:49:06 +0200 <hamzam3> Oh okay, I don't know about this
2023-05-17 16:49:16 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:35aa:1a22:57ad:710)
2023-05-17 16:50:51 +0200 <merijn> hamzam3: TemplateHaskell is basically just "Haskell code that is run at compile time and produces as output Haskell code (well, an AST) that the compiler then splices into the source" (so, as [exa] mentioned basically, macros if the language you wrote macros in was Haskell ;))
2023-05-17 16:51:29 +0200use-value1(~Thunderbi@2a00:23c6:8a03:2f01:78df:d984:be91:da33)
2023-05-17 16:53:05 +0200 <hamzam3> Okay, I'm reading something on it. Can you explain to me something I don't understand ?
2023-05-17 16:53:26 +0200 <hamzam3> What is happening here ?
2023-05-17 16:53:29 +0200 <hamzam3> tupleReplicate :: Int -> Q Exp
2023-05-17 16:53:29 +0200 <hamzam3> tupleReplicate n = do id <- newName "x"
2023-05-17 16:53:29 +0200 <hamzam3> return $ LamE (VarP id)
2023-05-17 16:53:29 +0200 <hamzam3> (TupE $ replicate n $ VarE id)
2023-05-17 16:53:35 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:35aa:1a22:57ad:710) (Ping timeout: 246 seconds)
2023-05-17 16:53:35 +0200use-value1use-value
2023-05-17 16:53:42 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-05-17 16:54:08 +0200 <merijn> hamzam3: Q is the monad for Quasiquotation, which runs at compile time and it's returning an Exp (haskell expression)
2023-05-17 16:54:28 +0200Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2023-05-17 16:54:37 +0200 <merijn> hamzam3: newName "x" creates a new variable name that doesn't exist (to prevent accidentally refering to some variable in the surrounding code)
2023-05-17 16:54:47 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2023-05-17 16:55:19 +0200 <merijn> hamzam3: And it retuns LamE (lambda expression) who's variable is a VarP (variable pattern) with name 'id' (the newly generated name we created)
2023-05-17 16:55:21 +0200 <c_wraith> Oh. I see why that can't just use a quote. n-ary tuple!
2023-05-17 16:56:03 +0200 <merijn> hamzam3: And the return value of that lambda is a TupE (tuple expression) consisting of "replicate n" VarE id
2023-05-17 16:56:33 +0200 <merijn> hamzam3: So basically, that produces the code: "\x -> (x, x, ..., x)" where the number of 'x' in the tuple is 'n' (the input)
2023-05-17 16:56:57 +0200 <merijn> so 'tupleReplicate 3' produces an AST mapping to "\x -> (x, x, x)"
2023-05-17 16:57:07 +0200 <c_wraith> what does TupE do if its argument has 0 or 1 elements?
2023-05-17 16:57:51 +0200 <merijn> No clue? :p
2023-05-17 16:58:42 +0200 <c_wraith> I mean, I know what it'll do if the list is too long.. same compile error you get if you try to do a tuple literal that's too long.
2023-05-17 16:58:58 +0200 <hamzam3> Ah I was searching for that
2023-05-17 16:59:13 +0200 <hamzam3> Okay nice thank you very much
2023-05-17 16:59:44 +0200 <hamzam3> And so the $$ makes the AST generated dependent on the type of output
2023-05-17 16:59:51 +0200 <merijn> hamzam3: But you can have it generate, pretty much arbitrary Haskell even based on, say, input files read at compile time
2023-05-17 17:00:06 +0200 <merijn> hamzam3: Well, regular TemplateHaskell can produce ASTs/code that doesn't typecheck
2023-05-17 17:00:48 +0200titibandit(~titibandi@user/titibandit) (Remote host closed the connection)
2023-05-17 17:01:04 +0200 <merijn> "Q Exp" <- no indication of the type of the expression and thus you end up with functions like "Exp -> Exp -> Q Exp" that may or may not produce valid Haskell (if not, that's just a compile error after the TH runs)
2023-05-17 17:01:33 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2023-05-17 17:01:59 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2023-05-17 17:02:16 +0200 <merijn> hamzam3: The idea behind Typed TH is that all the TH expressions are typed and checked that the result AST/code actually typechecks, so you get "Q (TExp Bool)" <- this produces a TH expression of type Bool and "TExp Bool -> TExp Int -> Q (TExp Bool)" (for example, so that everything always typechecks
2023-05-17 17:03:04 +0200 <merijn> hamzam3: So a splice with $$() has typing information what type the expression is *supposed* to have and then uses Validate to handle the conversion to that type, at compile time
2023-05-17 17:03:37 +0200 <ski> MetaML/MetaOCaml does typed splices in typed quasiquotations
2023-05-17 17:04:52 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
2023-05-17 17:05:51 +0200 <hamzam3> And so the secret of your lib is the liftResult function ?
2023-05-17 17:06:05 +0200 <hamzam3> What does it do ?
2023-05-17 17:06:34 +0200 <merijn> hamzam3: Lift turns a value into "an AST corresponding to that"
2023-05-17 17:07:14 +0200 <merijn> hamzam3: You have to keep in mind there's two levels here there's "values running in the TH code at compile time" and "values (i.e. Haskell ASTs) that will be compiled into the final code when TH is done"
2023-05-17 17:07:24 +0200 <merijn> hamzam3: Lift turns the former into the latter
2023-05-17 17:08:01 +0200MajorBiscuit(~MajorBisc@145.94.40.195) (Ping timeout: 240 seconds)
2023-05-17 17:08:13 +0200 <merijn> i.e. it turns a "compile runtime 'Even 4' value into an AST that gets compiled into the surrounding source"
2023-05-17 17:08:14 +0200 <ski> (in MetaML, you can also have quasiquotation pattern, even matching a (meta-) variable against the body of e.g. a lambda. it's looke like e.g. `fun getBody <fn x => ~(f <x>)> = SOME f | getBody _ = NONE', which would define a function of signature val getBody : <'a -> 'b> -> (<'a> -> <'b>) option that tries to extract the body (as a meta-function, depending on the input variable, substituting given code in
2023-05-17 17:08:20 +0200 <ski> its place), if it's given (code for) a lambda expression)
2023-05-17 17:13:41 +0200 <hamzam3> Basically TH is about running code at compile time ?
2023-05-17 17:14:01 +0200 <hamzam3> And you have used that feature to create subtyping ?
2023-05-17 17:14:37 +0200 <merijn> hamzam3: Not really subtyping
2023-05-17 17:14:48 +0200 <hamzam3> At least subtyping
2023-05-17 17:14:52 +0200 <merijn> hamzam3: TH is indeed all about "running code at compile time to produce other code"
2023-05-17 17:15:08 +0200 <merijn> hamzam3: More like, that library runs partial conversions at compile time
2023-05-17 17:16:01 +0200 <c_wraith> merijn: GHC 9 made a mess of the types of typed TH. I guess it's still Q (TExp Foo) under the hood, but that's no longer the surface type
2023-05-17 17:16:54 +0200 <hamzam3> So the only part of the type is included in the new Validate types. That's subtyping, I wanted to do that for dive into that for a long time.
2023-05-17 17:17:17 +0200 <merijn> hamzam3: I think the even example is a nice one. Imagine you want a type-safe "Even" newtype, the easiest way is to write a function like "mkEven :: Integer -> Maybe Even". But what if I want to write an "Even" literal? Sure, you can just write "fromJust (mkEven 4)" or something or even just "Even 3" if the constructor is exposed, but that has two problems: 1) conversion happens at runtime (which can be
2023-05-17 17:17:23 +0200 <merijn> undesirable if it's an expensive one), and 2) if it fails, it will fail *at runtime*, but since it's a literal that means it will enver work
2023-05-17 17:17:46 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 17:17:56 +0200 <merijn> hamzam3: I mean, you can do any pure function you want, tbh
2023-05-17 17:18:18 +0200 <merijn> Is converting a String into an Integer subtyping?
2023-05-17 17:18:31 +0200 <merijn> I wouldn't say so, but you certainly can with that
2023-05-17 17:18:36 +0200 <hamzam3> Ah no
2023-05-17 17:18:51 +0200 <ski> TH is a form of meta-programming
2023-05-17 17:18:58 +0200 <merijn> hamzam3: Another useful example might be something like the URI datatype from network-uri and wanting to write a URI in your source code
2023-05-17 17:19:25 +0200 <merijn> hamzam3: with Validate you could use network-uri's code to parse a string into a URI at compile time and throw an error (at compile time!) if it fails
2023-05-17 17:19:57 +0200 <hamzam3> I see the interest of this
2023-05-17 17:20:03 +0200 <merijn> hamzam3: Basically, anytime you wanna do "Foo -> Maybe Bar" where Foo is a compile time constant and you want the failure to happen *at compile time* you can use this
2023-05-17 17:20:27 +0200 <merijn> because handling "Nothing" for a compile time constant is nonsensical
2023-05-17 17:22:17 +0200 <hamzam3> Wow that seems like a fundamental feature. Maybe it can be added in Haskell directly by default.
2023-05-17 17:22:43 +0200 <EvanR> nah verifying the general validity of a url constant in the code should happen after the entire server stack is redeployed to production
2023-05-17 17:23:02 +0200 <EvanR> and someone, end user tries to access it
2023-05-17 17:23:22 +0200 <hamzam3> For subtyping, I was thinking only about a -> a particularly.
2023-05-17 17:23:32 +0200 <hamzam3> But it is more general indeed.
2023-05-17 17:24:07 +0200 <hamzam3> EvanR: Why ?
2023-05-17 17:24:11 +0200 <ski> hm, how does `liftResult' differ from the usual `lift' ?
2023-05-17 17:24:34 +0200 <hamzam3> (It's sarcasm ?)
2023-05-17 17:24:36 +0200 <EvanR> yes
2023-05-17 17:24:38 +0200 <merijn> ski: the default implementation is just Lift
2023-05-17 17:25:01 +0200 <merijn> ski: But some types aren't liftable and then you can fake it by redoing the conversion with a fromJust at runtime
2023-05-17 17:25:08 +0200 <ski> hamzam3 : i still see no subtyping around here
2023-05-17 17:25:22 +0200 <hamzam3> Even is a subtype of Integer no ?
2023-05-17 17:25:24 +0200 <merijn> ski: Look at the ByteString example in the repo (which is outdated now, because BS has Lift now)
2023-05-17 17:25:28 +0200 <ski> (unless you mean in an informal sense, i guess)
2023-05-17 17:25:48 +0200 <hamzam3> ski: You do a from literal that only does a test
2023-05-17 17:25:52 +0200 <merijn> ski: https://github.com/merijn/validated-literals/blob/master/examples/ByteString.hs
2023-05-17 17:26:01 +0200 <EvanR> the set of even integers is a subset of the set of integers, but is it a subtype. In the sense that an even number works in any code where an integer works
2023-05-17 17:26:18 +0200 <EvanR> where an integer is required
2023-05-17 17:26:21 +0200 <ski> hamzam3 : yes .. but's not really similar to how subtyping type systems work
2023-05-17 17:26:44 +0200 <hamzam3> ski: how do they usually work ?
2023-05-17 17:27:14 +0200 <ski> subtyping would be allowing the use of `Even' where an `Integer' is expected
2023-05-17 17:27:15 +0200 <hamzam3> EvanR: Ah like it will not fit into an Integer -> Integer function ?
2023-05-17 17:27:23 +0200 <hamzam3> Oh okay I see
2023-05-17 17:27:31 +0200 <EvanR> that's a good example probably
2023-05-17 17:27:31 +0200 <hamzam3> How can we get it to there ?
2023-05-17 17:27:42 +0200 <ski> here you're going in the other direction, and, moreover, you're not passing in a `Integer', you're passing in a compiler-time `Integer' *literal*
2023-05-17 17:28:47 +0200 <EvanR> you might be served nicely by just putting a trivial conversion from Even to Integer where there is a mismatch
2023-05-17 17:28:50 +0200 <hamzam3> Yes but it's nearly there.
2023-05-17 17:29:38 +0200 <hamzam3> Yeah. But for instance for the url example.
2023-05-17 17:29:54 +0200 <hamzam3> There are function that use url that expect it to be a string.
2023-05-17 17:30:07 +0200 <EvanR> any url can be converted to a string
2023-05-17 17:30:09 +0200 <hamzam3> so once the url is checked how can we use it ?
2023-05-17 17:30:19 +0200 <hamzam3> But the compiler will not accept it
2023-05-17 17:31:26 +0200 <EvanR> are you talking about the reverse direction, going from string to URL (which might fail)
2023-05-17 17:31:26 +0200 <hamzam3> if we have Url as a type for x. x has to enter String functions. How can we get there ?
2023-05-17 17:31:58 +0200 <hamzam3> Else we'll have to do conversions everywhere we use it no ?
2023-05-17 17:32:10 +0200 <EvanR> if you just want to use string functions, you can prepend a Url -> String
2023-05-17 17:32:13 +0200 <c_wraith> yes, you will. and that's good. It keeps the types straight.
2023-05-17 17:32:29 +0200 <c_wraith> A string might contain anything. A URL will contain a url.
2023-05-17 17:32:42 +0200 <hamzam3> But we know Url is a String
2023-05-17 17:32:46 +0200 <c_wraith> no, it's not
2023-05-17 17:32:48 +0200 <hamzam3> Is there a feature ?
2023-05-17 17:32:55 +0200 <ski> merijn : i'm wondering if it would be better to have `liftResult' in a superclass of `Validate', avoiding the `Proxy' argument (btw, couldn't that be `proxy a' ?)
2023-05-17 17:33:02 +0200 <EvanR> all urls can be converted to a string
2023-05-17 17:33:03 +0200 <hamzam3> It should be viewed as one in the majority of contexts
2023-05-17 17:33:06 +0200 <c_wraith> a url can be serialized as a string, but it's actually a structured data type
2023-05-17 17:33:17 +0200 <hamzam3> There is no Haskell feature for that ?
2023-05-17 17:33:33 +0200 <c_wraith> No. Different things are different. That's really important for Haskell.
2023-05-17 17:33:51 +0200 <c_wraith> like, that's the single most important thing in Haskell.
2023-05-17 17:33:58 +0200 <hamzam3> okok. other than that it's pretty cool and interesting
2023-05-17 17:34:02 +0200 <EvanR> when anything can be anythinged, you get javascript
2023-05-17 17:34:16 +0200 <EvanR> in which case the compiler can't tell you anything is wrong
2023-05-17 17:34:19 +0200 <hamzam3> Oh okay. But if we control anythingations
2023-05-17 17:34:31 +0200 <c_wraith> even javascript prevents some things. you get perl. :P
2023-05-17 17:34:31 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 17:34:37 +0200 <ski> "It should be viewed as one in the majority of contexts" -- i'm certainly not convinced that would be appropriate. and even if it was viewed as that, i don't know if that really buys that much
2023-05-17 17:35:00 +0200 <EvanR> stringly typed data
2023-05-17 17:35:08 +0200 <ski> @quote stark
2023-05-17 17:35:08 +0200 <lambdabot> AlanPerlis says: The string is a stark data structure and everywhere it is passed there is much duplication of process. It is a perfect vehicle for hiding information.
2023-05-17 17:35:37 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)
2023-05-17 17:36:01 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2023-05-17 17:36:03 +0200 <hamzam3> What should be viewed as one ?
2023-05-17 17:36:16 +0200 <ski> URL viewed as a string
2023-05-17 17:36:48 +0200nick4(~nick@2600:8807:9103:b700:9410:acda:ffad:e096)
2023-05-17 17:37:00 +0200 <EvanR> I hear in TCL everything can be viewed as a string
2023-05-17 17:37:07 +0200 <hamzam3> Ah. Well it would prevent a lot conversion bloating.
2023-05-17 17:37:18 +0200 <EvanR> conversions don't necessarily need to cost anything at runtime
2023-05-17 17:37:22 +0200 <hamzam3> And who is Alan Perlis ?
2023-05-17 17:37:27 +0200 <EvanR> like newtype unwrapped, is free
2023-05-17 17:37:33 +0200 <EvanR> unwrapping
2023-05-17 17:38:01 +0200 <EvanR> which would be a good way to implement the Even integer
2023-05-17 17:38:11 +0200 <hamzam3> But the maintenance. A lot of people complain about maintenance.
2023-05-17 17:38:19 +0200 <ski> "Alan Jay Perlis (April 1, 1922 – February 7, 1990) was an American computer scientist and professor at Purdue University, Carnegie Mellon University and Yale University. He is best known for his pioneering work in programming languages and was the first recipient of the Turing Award." -- <https://en.wikipedia.org/wiki/Alan_Perlis>
2023-05-17 17:38:24 +0200 <EvanR> in haskell a lot of people praise the maintenance
2023-05-17 17:38:29 +0200mei(~mei@user/mei)
2023-05-17 17:38:36 +0200 <EvanR> (and perhaps curse the initial writing of the code at first)
2023-05-17 17:38:45 +0200 <hamzam3> I thought it was a person here
2023-05-17 17:38:56 +0200 <EvanR> refactoring later is helped greatly by the type system
2023-05-17 17:39:20 +0200 <hamzam3> Ah ? I thought it was the opposite.
2023-05-17 17:39:31 +0200 <hamzam3> Like a defect of Haskell is maintenance
2023-05-17 17:39:33 +0200 <ski> "In 1982, he wrote an article, "Epigrams on Programming", for the Association for Computing Machinery's (ACM) SIGPLAN journal, describing in one-sentence distillations many of the things he had learned about programming over his career. The epigrams have been widely quoted.",<https://cpsc.yale.edu/epigrams-programming>
2023-05-17 17:39:37 +0200 <EvanR> compared to refactoring a large mass of untyped unknown code, it's a dream
2023-05-17 17:40:10 +0200 <EvanR> if it type checks, ship it! (ok not really)
2023-05-17 17:40:37 +0200 <hamzam3> I would view that theoretically. i would need to deal with a huge app in Haskell to verify that
2023-05-17 17:40:42 +0200 <ski> you thought what was a person, hamzam3 ?
2023-05-17 17:40:59 +0200 <EvanR> of course
2023-05-17 17:41:03 +0200 <hamzam3> ski: like this it's an IRC guy
2023-05-17 17:41:16 +0200 <ski> well. maybe you are. i don't know
2023-05-17 17:41:20 +0200 <ski> you might be a bot
2023-05-17 17:41:25 +0200 <ski> (we might all be ?!)
2023-05-17 17:41:31 +0200 <hamzam3> Lol why not
2023-05-17 17:41:51 +0200 <hamzam3> Maybe this is a post human world and we all pretend to be.
2023-05-17 17:42:40 +0200 <hamzam3> But Evan did you actually refactor stuff in mass in Haskell ?
2023-05-17 17:42:46 +0200 <ski> anyway, the second link above has more epigrams by Alan Perlis
2023-05-17 17:43:09 +0200 <EvanR> yes
2023-05-17 17:43:32 +0200 <hamzam3> How hard was it ?
2023-05-17 17:43:38 +0200 <EvanR> real useful programs in haskell tend to become large
2023-05-17 17:43:52 +0200 <EvanR> which is fine because we have the tools to manage it
2023-05-17 17:43:58 +0200 <hamzam3> EvanR: And did you do it with another language and how does it compare ?
2023-05-17 17:44:18 +0200 <hamzam3> EvanR: What tools ?
2023-05-17 17:44:34 +0200 <EvanR> it compares favorably
2023-05-17 17:45:02 +0200econo(uid147250@user/econo)
2023-05-17 17:46:03 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 17:46:10 +0200 <hamzam3> Okay then
2023-05-17 17:46:23 +0200 <hamzam3> Anyways, incredible conversation, didn't expect to gain so much
2023-05-17 17:46:30 +0200 <hamzam3> See you later everyone !
2023-05-17 17:47:36 +0200 <ski> have fun
2023-05-17 17:51:48 +0200abrar(~abrar@pool-98-115-98-253.phlapa.fios.verizon.net) (Ping timeout: 240 seconds)
2023-05-17 17:52:11 +0200evincar(~evincar@user/evincar)
2023-05-17 18:00:02 +0200general_j[m](~generaljm@2001:470:69fc:105::3:463b) (Remote host closed the connection)
2023-05-17 18:01:02 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 18:01:33 +0200naine[m](~naine-env@2001:470:69fc:105::3:2e57) (Remote host closed the connection)
2023-05-17 18:02:57 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3) (Remote host closed the connection)
2023-05-17 18:05:00 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:a421:e2fa:f46b:39b8) (Ping timeout: 265 seconds)
2023-05-17 18:11:50 +0200shapr(~user@76.29.230.19)
2023-05-17 18:18:26 +0200 <kuribas> funny, I hear many people claim the programming language doesn't matter.
2023-05-17 18:18:52 +0200 <kuribas> Then people say that a good programmer can write in any language, but both claims are not the same claim.
2023-05-17 18:20:47 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 240 seconds)
2023-05-17 18:21:55 +0200mbuf(~Shakthi@49.207.178.186) (Quit: Leaving)
2023-05-17 18:22:17 +0200 <int-e> . o O ( The programming language doesn't matter as long as it's Java )
2023-05-17 18:23:09 +0200chomwitt(~chomwitt@ppp-94-67-217-123.home.otenet.gr)
2023-05-17 18:23:40 +0200ski. o O ( "Real Programmers can write FORTRAN programs in any language." )
2023-05-17 18:24:14 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 246 seconds)
2023-05-17 18:24:45 +0200oo_miguel(~Thunderbi@77.252.47.78) (Quit: oo_miguel)
2023-05-17 18:25:16 +0200chele_(~chele@user/chele)
2023-05-17 18:25:27 +0200oo_miguel(~Thunderbi@77.252.47.78)
2023-05-17 18:25:34 +0200chele(~chele@user/chele) (Ping timeout: 268 seconds)
2023-05-17 18:26:15 +0200skithrows a major John towards int-e, if it's all equal to them
2023-05-17 18:26:23 +0200 <EvanR> I can delete a program in any language and rewrite it in haskell
2023-05-17 18:26:25 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:c1e6:5627:a434:622f)
2023-05-17 18:26:37 +0200 <EvanR> so language doesn't matter
2023-05-17 18:27:35 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 240 seconds)
2023-05-17 18:28:20 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-05-17 18:28:22 +0200int-edeletes EvanR's GPU driver
2023-05-17 18:28:56 +0200 <EvanR> that's not fair
2023-05-17 18:29:43 +0200chele_(~chele@user/chele) (Read error: Connection reset by peer)
2023-05-17 18:29:47 +0200 <int-e> I actually had to think a bit to come up with an inconvenient example.
2023-05-17 18:29:51 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Ping timeout: 256 seconds)
2023-05-17 18:30:13 +0200ski. o O ( "Is Haskell fast?" by augustss in 2009-02-06 at <http://augustss.blogspot.com/2009/02/is-haskell-fast-lets-do-simple.html>,follow-up in 2009-02-07 at <http://augustss.blogspot.com/2009/02/more-basic-not-that-anybody-should-care.html> )
2023-05-17 18:30:31 +0200Fischmiep(~Fischmiep@user/Fischmiep) (Ping timeout: 240 seconds)
2023-05-17 18:31:03 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-05-17 18:31:57 +0200 <EvanR> that blog post is blowing me away
2023-05-17 18:32:10 +0200 <EvanR> the BASIC front end gets compiled away entirely?
2023-05-17 18:32:37 +0200zeenk(~zeenk@2a02:2f04:a105:f00::7fe) (Quit: Konversation terminated!)
2023-05-17 18:32:58 +0200evincar(~evincar@user/evincar) (Ping timeout: 268 seconds)
2023-05-17 18:34:05 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 18:34:18 +0200 <c_wraith> EvanR: What do you mean by front end?
2023-05-17 18:34:37 +0200 <EvanR> DSL
2023-05-17 18:34:56 +0200 <int-e> it's an EDSL, so if you implement that well ghc can inline and simplify everything so that it becomes the tail-recursive loop that you want.
2023-05-17 18:35:03 +0200 <c_wraith> EvanR: the majority of what's going on there is a clever choice of data type and providing an instance of Num for functions returning that type
2023-05-17 18:36:14 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net)
2023-05-17 18:36:30 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2023-05-17 18:40:25 +0200wiosna(~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2023-05-17 18:43:37 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 18:47:14 +0200ft(~ft@p4fc2a88b.dip0.t-ipconnect.de)
2023-05-17 18:52:16 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2023-05-17 18:56:01 +0200 <c_wraith> Ok. I've finally spent enough time in the pipes docs to figure out what's bugging me about them. All the categories the docs talk about are on the Kleisli category of Proxy, not on Proxy itself.
2023-05-17 19:03:26 +0200eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2023-05-17 19:04:15 +0200 <c_wraith> As a side effect of this, connecting Proxies together often seems to involve (\_ -> ..) to make things fit together.
2023-05-17 19:04:34 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-05-17 19:08:45 +0200eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2023-05-17 19:14:53 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 19:19:03 +0200oac(~oac@50.80.159.170)
2023-05-17 19:19:11 +0200oac(~oac@50.80.159.170) (Remote host closed the connection)
2023-05-17 19:22:47 +0200slack1256(~slack1256@186.11.24.106)
2023-05-17 19:24:44 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2023-05-17 19:24:46 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de) (Ping timeout: 268 seconds)
2023-05-17 19:26:11 +0200acidjnk(~acidjnk@p200300d6e7072f360c76d857e5b4f035.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-05-17 19:31:09 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net)
2023-05-17 19:35:57 +0200slack1256(~slack1256@186.11.24.106) (Remote host closed the connection)
2023-05-17 19:35:59 +0200merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds)
2023-05-17 19:38:25 +0200SoF(~skius@user/skius) (Ping timeout: 240 seconds)
2023-05-17 19:42:26 +0200SoF(~skius@user/skius)
2023-05-17 19:47:34 +0200L29Ah(~L29Ah@wikipedia/L29Ah)
2023-05-17 19:52:32 +0200acidjnk(~acidjnk@p200300d6e7072f3698d7d69d6b2b3686.dip0.t-ipconnect.de)
2023-05-17 19:53:04 +0200MajorBiscuit(~MajorBisc@2001:1c00:2492:e200:489e:cf85:c4bc:d8d3)
2023-05-17 19:57:32 +0200evincar(~evincar@user/evincar)
2023-05-17 19:59:01 +0200nick4(~nick@2600:8807:9103:b700:9410:acda:ffad:e096) (Ping timeout: 240 seconds)
2023-05-17 20:01:29 +0200gurkenglas(~user@dynamic-046-114-182-067.46.114.pool.telefonica.de)
2023-05-17 20:02:00 +0200Pickchea(~private@user/pickchea)
2023-05-17 20:02:34 +0200nschoe(~q@2a01:e0a:8e:a190:3fe8:a9d6:8da8:beb7) (Quit: Switching off)
2023-05-17 20:06:28 +0200 <texasmynsted> programming skill and programming language skill are not the same
2023-05-17 20:07:01 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3) (Remote host closed the connection)
2023-05-17 20:07:49 +0200stef204(~stef204@user/stef204)
2023-05-17 20:09:59 +0200Pickchea(~private@user/pickchea) (Ping timeout: 240 seconds)
2023-05-17 20:21:59 +0200vandita(~vandit@89-186-118-204.pool.digikabel.hu) (Ping timeout: 240 seconds)
2023-05-17 20:23:55 +0200vandita(~vandit@84-236-97-17.pool.digikabel.hu)
2023-05-17 20:24:22 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 20:24:24 +0200MajorBiscuit(~MajorBisc@2001:1c00:2492:e200:489e:cf85:c4bc:d8d3) (Quit: WeeChat 3.6)
2023-05-17 20:25:41 +0200 <joyfulmantis[m]> I asked on the matrix group, but am asking here too, as it seems a bit quieter. Does anyone know the new way to define a constructor for a list of maybe types in yesod's persistent (Template Haskell)? "answer [Maybe(Tone)]", where answer is the field, and the Type is "[Maybe(Tone)]" used to work, but does no longer.
2023-05-17 20:27:17 +0200cheater_(~Username@user/cheater)
2023-05-17 20:27:59 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2023-05-17 20:28:01 +0200cheater_cheater
2023-05-17 20:31:38 +0200rf(~rf@142.99.241.246)
2023-05-17 20:32:43 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 20:38:32 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2023-05-17 20:41:01 +0200vglfr(~vglfr@209.198.137.226) (Read error: Connection reset by peer)
2023-05-17 20:41:08 +0200mei(~mei@user/mei) (Remote host closed the connection)
2023-05-17 20:41:39 +0200vglfr(~vglfr@2a0d:3344:1b4f:9e10:9416:6da7:c1c7:480b)
2023-05-17 20:43:33 +0200mei(~mei@user/mei)
2023-05-17 20:46:45 +0200evincar(~evincar@user/evincar) (Ping timeout: 240 seconds)
2023-05-17 20:48:18 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:c1e6:5627:a434:622f) (Ping timeout: 250 seconds)
2023-05-17 21:02:40 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:43b0:e076:b9fe:f46)
2023-05-17 21:05:59 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 21:06:27 +0200codaraxis__(~codaraxis@user/codaraxis) (Remote host closed the connection)
2023-05-17 21:06:51 +0200codaraxis__(~codaraxis@user/codaraxis)
2023-05-17 21:08:06 +0200codaraxis__(~codaraxis@user/codaraxis) (Max SendQ exceeded)
2023-05-17 21:09:06 +0200codaraxis__(~codaraxis@user/codaraxis)
2023-05-17 21:09:57 +0200codaraxis__(~codaraxis@user/codaraxis) (Remote host closed the connection)
2023-05-17 21:09:59 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2023-05-17 21:14:56 +0200gmg(~user@user/gehmehgeh)
2023-05-17 21:15:35 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-05-17 21:19:23 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 21:23:49 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2023-05-17 21:26:10 +0200simendsjo(~user@84.211.91.241)
2023-05-17 21:26:38 +0200freeside_(~mengwong@103.252.202.151)
2023-05-17 21:26:58 +0200hamzam3(~hamzam3@2a01:e0a:1ee:8c60:43b0:e076:b9fe:f46) (Quit: Leaving)
2023-05-17 21:31:01 +0200freeside_(~mengwong@103.252.202.151) (Ping timeout: 240 seconds)
2023-05-17 21:33:35 +0200mncheck(~mncheck@193.224.205.254) (Ping timeout: 240 seconds)
2023-05-17 21:34:42 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 21:37:20 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2023-05-17 21:37:24 +0200evincar(~evincar@user/evincar)
2023-05-17 21:39:35 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 21:42:04 +0200mei(~mei@user/mei) (Read error: Connection reset by peer)
2023-05-17 21:43:28 +0200pavonia(~user@user/siracusa)
2023-05-17 21:43:43 +0200chomwitt(~chomwitt@ppp-94-67-217-123.home.otenet.gr) (Remote host closed the connection)
2023-05-17 21:44:31 +0200mei(~mei@user/mei)
2023-05-17 21:45:02 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-05-17 21:53:40 +0200Lycurgus(~juan@user/Lycurgus)
2023-05-17 21:53:56 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-05-17 21:57:27 +0200CalculusCats(NyaaTheKit@user/calculuscat) (Quit: Meow Meow Meow Meow Meow Meow Meow Meow)
2023-05-17 22:00:09 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-05-17 22:00:11 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 246 seconds)
2023-05-17 22:01:00 +0200mei(~mei@user/mei) (Remote host closed the connection)
2023-05-17 22:03:17 +0200CalculusCats(NyaaTheKit@user/calculuscat)
2023-05-17 22:03:25 +0200mei(~mei@user/mei)
2023-05-17 22:06:44 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3) (Remote host closed the connection)
2023-05-17 22:09:14 +0200Pickchea(~private@user/pickchea)
2023-05-17 22:09:35 +0200Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-05-17 22:14:13 +0200danrh(~danrh@199.7.157.70)
2023-05-17 22:20:31 +0200simendsjo(~user@84.211.91.241) (Ping timeout: 240 seconds)
2023-05-17 22:21:39 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
2023-05-17 22:24:13 +0200danrh(~danrh@199.7.157.70) (Read error: Connection reset by peer)
2023-05-17 22:35:31 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl)
2023-05-17 22:37:47 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-05-17 22:38:23 +0200manwithluck(manwithluc@hoeven.dossingday.ml) (Ping timeout: 240 seconds)
2023-05-17 22:38:25 +0200coot(~coot@89-69-206-216.dynamic.chello.pl)
2023-05-17 22:42:53 +0200manwithluck(manwithluc@hoeven.dossingday.ml)
2023-05-17 22:43:57 +0200captnemo(~captnemo@193.32.127.232)
2023-05-17 22:48:13 +0200manwithl-(manwithluc@2406:da14:b37:1300:8c42:7d16:8950:6c74)
2023-05-17 22:49:35 +0200manwithluck(manwithluc@hoeven.dossingday.ml) (Ping timeout: 240 seconds)
2023-05-17 22:50:07 +0200vandita(~vandit@84-236-97-17.pool.digikabel.hu) (Ping timeout: 268 seconds)
2023-05-17 22:51:47 +0200vandita(~vandit@84-236-122-0.pool.digikabel.hu)
2023-05-17 22:59:25 +0200manwithluck(manwithluc@hoeven.dossingday.ml)
2023-05-17 23:00:14 +0200bgs(~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection)
2023-05-17 23:00:31 +0200manwithl-(manwithluc@2406:da14:b37:1300:8c42:7d16:8950:6c74) (Ping timeout: 240 seconds)
2023-05-17 23:00:47 +0200coot(~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
2023-05-17 23:05:34 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:4c1f:3b38:25a9:d6c3)
2023-05-17 23:07:59 +0200byte(~byte@user/byte) (Quit: Quitting...)
2023-05-17 23:08:32 +0200byte(~byte@user/byte)
2023-05-17 23:09:11 +0200merijn(~merijn@c-001-001-015.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2023-05-17 23:10:39 +0200byte(~byte@user/byte) (Client Quit)
2023-05-17 23:11:17 +0200byte(~byte@user/byte)
2023-05-17 23:15:15 +0200waleee(~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
2023-05-17 23:15:58 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2023-05-17 23:17:56 +0200trev(~trev@user/trev) (Quit: bedtime tahehehe)
2023-05-17 23:18:43 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2023-05-17 23:19:35 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-05-17 23:26:48 +0200jjb(~jjb@user/jjb) (Ping timeout: 240 seconds)
2023-05-17 23:28:49 +0200jjb(~jjb@user/jjb)
2023-05-17 23:29:08 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 240 seconds)
2023-05-17 23:30:14 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2023-05-17 23:34:12 +0200ec_(~ec@gateway/tor-sasl/ec)
2023-05-17 23:34:43 +0200rf(~rf@142.99.241.246) (Ping timeout: 256 seconds)
2023-05-17 23:35:04 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2023-05-17 23:43:13 +0200mmhat(~mmh@p200300f1c7066882ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2023-05-17 23:43:35 +0200mmhat(~mmh@p200300f1c7066882ee086bfffe095315.dip0.t-ipconnect.de)
2023-05-17 23:48:50 +0200elain4(~textual@static-71-251-226-194.rcmdva.fios.verizon.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2023-05-17 23:51:35 +0200mikoto-chan(~mikoto-ch@ip-213-49-58-19.dsl.scarlet.be) (Ping timeout: 240 seconds)
2023-05-17 23:52:58 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:78df:d984:be91:da33) (Remote host closed the connection)
2023-05-17 23:53:16 +0200use-value(~Thunderbi@2a00:23c6:8a03:2f01:78df:d984:be91:da33)
2023-05-17 23:53:46 +0200mikoto-chan(~mikoto-ch@85-76-145-81-nat.elisa-mobile.fi)