Home liberachat/#haskell: Logs Calendar

Logs on 2023-05-17 (liberachat/#haskell)

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

All times are in UTC on 2023-05-17.