Home liberachat/#haskell: Logs Calendar

Logs on 2025-10-20 (liberachat/#haskell)

00:03:54 × craunts795335385 quits (~craunts@136.158.7.194) (Read error: Connection reset by peer)
00:04:10 craunts795335385 joins (~craunts@136.158.7.194)
00:05:36 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:10:47 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:13:51 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 256 seconds)
00:21:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:24:05 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
00:26:02 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
00:29:53 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
00:32:09 weary-traveler joins (~user@user/user363627)
00:37:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:41:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
00:42:17 × otto_s quits (~user@p4ff274f9.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
00:44:18 otto_s joins (~user@p5b044609.dip0.t-ipconnect.de)
00:48:30 werneta joins (~werneta@71.83.160.242)
00:50:28 qqe joins (~qqq@185.54.23.200)
00:50:56 × trickard quits (~trickard@cpe-57-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
00:51:08 trickard_ joins (~trickard@cpe-57-98-47-163.wireline.com.au)
00:51:22 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 246 seconds)
00:52:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:53:50 gustrb joins (~gustrb@191.243.134.87)
00:55:15 × flipflops quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 252 seconds)
00:56:24 flipflops joins (~cmo@2604:3d09:207f:8000::d1dc)
00:56:25 × trickard_ quits (~trickard@cpe-57-98-47-163.wireline.com.au) (Ping timeout: 264 seconds)
00:59:06 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:01:23 trickard_ joins (~trickard@cpe-57-98-47-163.wireline.com.au)
01:03:52 × flipflops quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 260 seconds)
01:09:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:10:50 × xff0x quits (~xff0x@2405:6580:b080:900:d8fa:98a4:1ba0:2054) (Ping timeout: 248 seconds)
01:15:31 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
01:23:25 × inline quits (~inline@ip-178-202-059-161.um47.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
01:27:22 × acidjnk quits (~acidjnk@p200300d6e71719659d28c4899d9c5d95.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
01:27:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:32:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
01:41:54 trickard_ is now known as trickard
01:43:19 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:48:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
01:49:58 × ttybitnik quits (~ttybitnik@user/wolper) (Quit: Fading out...)
01:56:45 × weary-traveler quits (~user@user/user363627) (Quit: Konversation terminated!)
01:57:01 weary-traveler joins (~user@user/user363627)
01:59:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:03:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
02:04:48 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
02:08:09 × werneta quits (~werneta@71.83.160.242) (Quit: Lost terminal)
02:10:32 ephilalethes joins (~noumenon@113.51-175-156.customer.lyse.net)
02:14:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:18:38 jxv joins (~simulacru@2600:1700:5040:a200:846b:56ef:4da8:a13)
02:21:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
02:23:05 × trickard quits (~trickard@cpe-57-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
02:23:18 trickard_ joins (~trickard@cpe-57-98-47-163.wireline.com.au)
02:26:37 × jxv quits (~simulacru@2600:1700:5040:a200:846b:56ef:4da8:a13) (Quit: Textual IRC Client: www.textualapp.com)
02:29:40 peterbecich joins (~Thunderbi@172.222.148.214)
02:31:22 × td_ quits (~td@i5387091E.versanet.de) (Ping timeout: 248 seconds)
02:33:00 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:33:23 td_ joins (~td@i53870936.versanet.de)
02:33:35 trickard_ is now known as trickard
02:36:01 × anpad quits (~pandeyan@user/anpad) (Ping timeout: 264 seconds)
02:36:37 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 264 seconds)
02:38:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
02:48:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:51:41 khumba joins (~khumba@user/khumba)
02:53:31 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:54:47 × annamalai quits (~annamalai@157.49.239.48) (Ping timeout: 256 seconds)
03:04:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:07:54 anpad joins (~pandeyan@user/anpad)
03:09:08 × khumba quits (~khumba@user/khumba) ()
03:09:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
03:10:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:15:38 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
03:16:13 × anpad quits (~pandeyan@user/anpad) (Ping timeout: 264 seconds)
03:17:33 × qqe quits (~qqq@185.54.23.200) (Quit: Lost terminal)
03:24:34 khumba joins (~khumba@user/khumba)
03:25:43 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
03:26:12 poscat0x04 joins (~poscat@user/poscat)
03:26:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:27:00 img joins (~img@user/img)
03:27:09 werneta joins (~werneta@71.83.160.242)
03:27:54 × poscat quits (~poscat@user/poscat) (Ping timeout: 248 seconds)
03:31:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
03:40:05 peterbecich joins (~Thunderbi@172.222.148.214)
03:42:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:47:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:48:50 anpad joins (~pandeyan@user/anpad)
03:52:20 aforemny joins (~aforemny@2001:9e8:6cc7:6800:bfb8:1818:7f09:9156)
03:52:40 × aforemny_ quits (~aforemny@2001:9e8:6cea:8700:cf12:fc7b:8ca1:78b9) (Ping timeout: 246 seconds)
03:58:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:59:13 × tomboy64 quits (~tomboy64@user/tomboy64) (Read error: Connection reset by peer)
03:59:28 tomboy64 joins (~tomboy64@user/tomboy64)
04:05:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:06:56 × werneta quits (~werneta@71.83.160.242) (Quit: Lost terminal)
04:09:43 wickedjargon joins (~user@120.29.79.98)
04:12:00 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:16:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
04:22:35 × synchromesh quits (~john@2406:5a00:2412:2c00:3da8:1103:8261:15b5) (Read error: Connection reset by peer)
04:23:20 synchromesh joins (~john@2406:5a00:2412:2c00:75ff:6dec:5332:48f7)
04:27:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:28:53 annamalai joins (~annamalai@2409:4072:601a:bdd2::2602:e0ac)
04:32:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
04:43:14 michalz joins (~michalz@185.246.207.221)
04:43:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:48:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:59:23 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:01:05 rvalue- joins (~rvalue@about/hackers/rvalue)
05:01:07 jreicher joins (~user@user/jreicher)
05:01:39 × rvalue quits (~rvalue@about/hackers/rvalue) (Ping timeout: 244 seconds)
05:04:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
05:05:21 halloy9957 joins (~halloy995@ip72-208-127-103.ph.ph.cox.net)
05:10:56 rvalue joins (~rvalue@about/hackers/rvalue)
05:11:55 × rvalue- quits (~rvalue@about/hackers/rvalue) (Ping timeout: 256 seconds)
05:13:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:13:52 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 246 seconds)
05:14:01 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
05:14:17 Googulator joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
05:15:51 Googulator31 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
05:15:55 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Client Quit)
05:15:58 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
05:17:46 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
05:19:48 × EvanR quits (~EvanR@user/evanr) (Ping timeout: 252 seconds)
05:21:04 × khumba quits (~khumba@user/khumba) ()
05:27:22 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 248 seconds)
05:28:05 notzmv joins (~umar@user/notzmv)
05:28:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:34:36 infinity0 joins (~infinity0@pwned.gg)
05:36:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
05:42:24 × jreicher quits (~user@user/jreicher) (Read error: Connection reset by peer)
05:45:25 jreicher joins (~user@user/jreicher)
05:45:43 × Googulator31 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
05:45:49 Googulator22 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
05:46:18 × ephilalethes quits (~noumenon@113.51-175-156.customer.lyse.net) (Quit: Leaving)
05:46:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:52:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
06:02:02 Square joins (~Square4@user/square)
06:02:38 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:05:27 × Square2 quits (~Square@user/square) (Ping timeout: 260 seconds)
06:05:37 Googulator96 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
06:05:40 × Googulator22 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
06:07:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
06:14:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:18:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
06:22:16 × craunts795335385 quits (~craunts@136.158.7.194) (Quit: The Lounge - https://thelounge.chat)
06:29:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:31:36 × halloy9957 quits (~halloy995@ip72-208-127-103.ph.ph.cox.net) (Quit: halloy9957)
06:35:12 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
06:42:24 × Googulator96 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
06:42:42 Googulator96 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
06:44:13 × JimL quits (~quassel@89.162.16.26) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
06:45:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:47:21 JimL joins (~quassel@89.162.16.26)
06:48:37 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 264 seconds)
06:51:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
06:53:00 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:56:29 gmg joins (~user@user/gehmehgeh)
07:00:03 × caconym7478798 quits (~caconym@user/caconym) (Quit: bye)
07:00:47 caconym7478798 joins (~caconym@user/caconym)
07:01:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:06:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
07:13:50 Guest57 joins (~Guest57@95.214.217.190)
07:13:52 gustrb joins (~gustrb@191.243.134.87)
07:14:45 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 252 seconds)
07:15:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:15:13 tromp joins (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5)
07:18:59 kukimik joins (~kukimik@nat1.mga.com.pl)
07:20:24 × kukimik quits (~kukimik@nat1.mga.com.pl) (Remote host closed the connection)
07:21:37 chele joins (~chele@user/chele)
07:21:46 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:28:53 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:33:08 EvanR joins (~EvanR@user/evanr)
07:34:46 <dminuoso> Are liftXXX primitives perhaps misnamed? It just occured to me that `liftIO :: IO a -> SomeT IO a` doesnt really pull anything out, it rather stuffs something in!
07:34:49 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
07:34:53 <dminuoso> stuffIO seems more appropriate.
07:38:40 <davean> It lifts an IO
07:38:45 <davean> Its what it lifts
07:39:37 <dminuoso> To me lifting suggests rather pulling something out.
07:41:42 <davean> SomeT is build on IO, and it is a higher universe of semantics
07:41:52 <davean> You are lifting it into the greater semantic world
07:42:14 <davean> SomeT contains IO.
07:42:43 × tabemann quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
07:42:47 <dminuoso> Well you're embedding a plain IO action into something richer, you're stuffing it into a richer description of a computation.
07:43:08 <davean> No you aren't embedding it, it is *already embeded* SomeT has all of IO
07:43:12 tabemann joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
07:43:22 <davean> IO is a subsection of SomeT IO
07:43:33 <davean> It specificly isn't embedding
07:44:05 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection)
07:44:37 <davean> you can lower SomeT IO into just IO
07:46:07 srazkvt joins (~sarah@user/srazkvt)
07:46:14 <davean> IO is the foundation of SomeT
07:46:23 <davean> SomeT is what is built on top
07:49:13 Guest31 joins (~Guest57@95.214.217.190)
07:49:36 × Guest57 quits (~Guest57@95.214.217.190) (Quit: Client closed)
07:49:44 × Guest31 quits (~Guest57@95.214.217.190) (Client Quit)
07:50:34 <dminuoso> davean: But at the same time, when we talk about transformers, we say we layer monads *ontop* of a base. In `SomeT IO` you generally call IO a base monad.
07:51:05 <davean> Yes, exactly, hence lifting
07:52:49 × trickard quits (~trickard@cpe-57-98-47-163.wireline.com.au) (Ping timeout: 264 seconds)
07:53:08 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
07:55:05 <davean> IO is the base, SomeT is on top, thus we *lift IO into SomeT*
07:55:21 <davean> Because it is semanticly beneith SomeT IO
07:59:22 acidjnk joins (~acidjnk@p200300d6e7171945c42b348415052731.dip0.t-ipconnect.de)
08:05:00 merijn joins (~merijn@77.242.116.146)
08:05:53 × jreicher quits (~user@user/jreicher) (Ping timeout: 256 seconds)
08:06:12 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 244 seconds)
08:07:18 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
08:08:25 <monochrom> The best thing about meaningful names is that there are so many meanings to choose from!
08:08:35 img joins (~img@user/img)
08:10:37 Googulator64 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
08:10:38 × Googulator96 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
08:17:46 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
08:18:43 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Client Quit)
08:19:49 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
08:19:53 fp joins (~Thunderbi@2001:708:20:1406::10c5)
08:20:41 gustrb joins (~gustrb@191.243.134.87)
08:22:19 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
08:29:26 kubrat joins (~kubrat@149.62.205.212)
08:30:16 × mzg_ quits (mzg@abusers.hu) (Remote host closed the connection)
08:30:40 × synchromesh quits (~john@2406:5a00:2412:2c00:75ff:6dec:5332:48f7) (Read error: Connection reset by peer)
08:31:59 synchromesh joins (~john@2406:5a00:2412:2c00:75ff:6dec:5332:48f7)
08:32:26 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 248 seconds)
08:34:08 merijn joins (~merijn@77.242.116.146)
08:34:55 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
08:37:37 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 265 seconds)
08:39:09 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
08:39:44 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
08:40:58 <dminuoso> davean: I guess if we just think of monad transformers or just constructions that eventually embed as some kinds of pyramid, it seems rather arbitrary whether we imagine the pyramid to have its tip pointed downwards or upwards.
08:43:05 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
08:45:37 merijn joins (~merijn@77.242.116.146)
08:45:38 × Googulator64 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
08:45:49 Googulator64 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
08:46:56 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 240 seconds)
08:47:07 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
08:48:20 <davean> dminuoso: don't think of it as a peramid, think of its a sphere with subspheres nested inside it
08:48:27 <davean> expanding out from zero
08:48:46 <dminuoso> davean: Sure, and in that model wouldnt we think of IO as the inner core?
08:49:07 <davean> It *is* the inner core, its not that we choose to think about it, it is litterly enclosed by
08:49:18 <dminuoso> If we take a given IO action, say `putStrLn "Hello world"`, then its the action of putting that core inside layers and layers until we have a matching sphere.
08:49:26 <dminuoso> Rather than pulling it out.
08:50:05 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
08:51:23 <dminuoso> This may just be the difference between operational and semantic thinking.
08:51:41 <davean> No, putStrLn is already an object in IO, it has no other existance
08:52:01 <dminuoso> Well I meant `liftIO (putStrLn "foo")` of course.
08:52:48 <davean> Write, that projects from the IO space to the IO subspace of SomeT IO
08:52:51 <tomsmeding> dminuoso: I think of liftIO as lifting "into SomeT", not "out of IO"
08:53:00 <davean> Yah, it NEVER LEAVES IO
08:53:04 <davean> It can't leave IO
08:53:07 <tomsmeding> the sky above is larger than you, so lifting moves it into the larger thing
08:53:44 <davean> it maps the IO subspace into the SomeT space, and specicily the IO subspace of said
08:54:04 <tomsmeding> indeed, SomeT IO may well have more logic than IO itself, so also in that sense, it's "lifting" into a more exalted space of SomeT IO computations
08:54:17 <tomsmeding> it's exactly what monochrom said
08:55:22 <davean> what did monochrom say?
08:55:33 <tomsmeding> 47 minutes ago
08:55:40 <dminuoso> Dont all monad transformers put the base monad on the outside, in the sense that if we have some tranformer stack over IO, ultimately we have something like `IO ((M1 :.: M2 :.: ...) a)` (and possibly a lambda outside for Reader)?
08:55:43 <tomsmeding> <monochrom> The best thing about meaningful names is that there are so many meanings to choose from!
08:56:16 <davean> dminuoso: no, no, that is very much NOT what they do
08:56:23 <tomsmeding> https://hackage.haskell.org/package/transformers-0.6.1.0/docs/Control-Monad-Trans-State-Strict.html#t:StateT
08:56:33 <tomsmeding> StateT s m a ~= s -> m (a, s)
08:56:34 <dminuoso> Ah I guess not.
08:56:46 <davean> dminuoso: which I think is where your confusion is
08:56:47 <tomsmeding> when you run them, you get a computation inside m, yes
08:56:59 <dminuoso> davean: No, this is actually just a tangent I was starting to explore.
08:57:19 <tomsmeding> and contrary to what davean is saying, I do not think your perspective is wrong, it's just a perspective that mismatches with what I think is the intended intuition behind "lift"
08:57:26 <dminuoso> davean: Until now I was just focused more on thinking of transformers as a syntactical construct where IO resided in since thats how I think of how the effects compose.
08:58:11 <davean> It isn't how the effects compose though, which gets really improtant with state and such
08:58:19 <dminuoso> tomsmeding: Perhaps. liftIO is just one of the few things that never really clicked on the naming to me.
08:58:58 <dminuoso> davean: Apart from ReaderT, I've never really used transformers much for a bunch of reasons.
08:59:21 <dminuoso> Except for some local computation tricks.
08:59:44 <dminuoso> Say something like runMaybeT $ do ...
09:00:11 __monty__ joins (~toonn@user/toonn)
09:00:54 <dminuoso> Despite transformers being labeled with terms like "composition of effects", they are the antithesis of compositionality of library code.
09:02:19 <davean> How so?
09:04:01 <srazkvt> ig because instead of being able to call both functions for the wrapped monad, you need to lift the computations ?
09:04:26 <dminuoso> If you use hard-wired transformers its really hard to compose different transformer code together. If you use mtl code you lack effect order specification. As a result you have a large variety of effect libraries that try to address these issues.
09:04:47 <dminuoso> As a consequence hackage now is filled with code that ends up using any combination.
09:05:37 <dminuoso> The only effect that is universally compatible with most libraries is pure IO.
09:06:56 <davean> mtl you have a specific monad and then properties about it that you can use
09:07:13 merijn joins (~merijn@77.242.116.146)
09:08:30 × fp quits (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 256 seconds)
09:12:26 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
09:21:26 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:23:16 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
09:23:35 <endokqr> I am profiling (+RTS -p) a Haskell program that runs for quite some time and I am interested in data from the full run. Unfortunately, this makes the time huge! I thought I'd be able to adjust the resolution of the time profile with -i and/or -V, but this seems to have no effect. What am I misunderstanding?
09:23:40 merijn joins (~merijn@77.242.116.146)
09:24:43 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
09:32:27 fp joins (~Thunderbi@130.233.70.140)
09:33:01 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds)
09:40:15 merijn joins (~merijn@77.242.116.146)
09:43:39 × trickard_ quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:43:52 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
09:47:59 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
09:50:27 <dminuoso> endokqr: -i is just the sampling rate, think of it how accurate/finely grained the data is.
09:50:45 <dminuoso> In practice this controls the data size of the profiling data
09:51:02 <endokqr> dminuoso, Yeah, and I would imagine by setting -i to e.g. "10 Hz" would give me fewer stack frames in the time profile. But whatever number I pass there I get the same 9.1 GB .prof file.
09:51:35 <dminuoso> endokqr: No, the cost centers are collected regardless. The interval is just how often the RTS stops and writes a record.
09:51:47 mreh joins (~matthew@host86-146-25-125.range86-146.btcentralplus.com)
09:52:21 <dminuoso> The "stack frames" what you describe is just the cost centers.
09:52:31 <endokqr> Ooooh, okay. So the only solution for me is to either post-process the .prof file and try to recognise "unimportant" branches of the tree and prune them, or go in and try to assign cost centres more intelligently?
09:52:38 <dminuoso> Yes.
09:53:10 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
09:53:34 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Write error: Connection reset by peer)
09:53:46 <dminuoso> endokqr: You might find https://github.com/fpco/ghc-prof-flamegraph of interest (haven't used it in a few years, but I think it should still work fine)
09:54:34 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
09:54:49 <endokqr> That's what I'm aiming for, but on the full 9.1 GB file it eats all my 48 GB of RAM and then my system starts thrashing.
09:55:22 <endokqr> But I could steal code from it to flatten the .prof file and then sample from it – that way I'm likely to get a subset of more interesting cost centres without difficult heuristics.
09:55:43 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Write error: Broken pipe)
09:56:32 <dminuoso> endokqr: Btw, it coulkd be sufficient to explicitly declare cost centers on branches you *dont* want to profile, as -fprof-auto (which I presume you are using) does not poke deeper if you attached a cost center.
09:56:52 <dminuoso> In the profiling data it would just collapse it into a single cost center.
09:57:16 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
09:58:57 <dminuoso> Or you control it per-module with {-# OPTIONS_GHC -fno-prof-auto #-}
09:59:26 <dminuoso> This might give you enough routes to explore
09:59:43 <endokqr> That would be a rather useful trick. I'm not yet entirely sure where I'd put those annotations because I don't know where the interesting stuff and where it's not, but maybe I could figure that out either by first downsampling or spending a few minutes to think about it.
10:02:28 × SlackCoder quits (~SlackCode@208.26.91.234) (Remote host closed the connection)
10:04:25 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
10:05:06 jreicher joins (~user@user/jreicher)
10:05:30 merijn joins (~merijn@77.242.116.146)
10:08:05 mzg joins (mzg@abusers.hu)
10:10:02 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
10:11:04 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
10:15:52 trickard_ is now known as trickard
10:22:18 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
10:32:22 × Googulator64 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
10:32:37 Googulator64 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
10:34:40 merijn joins (~merijn@77.242.116.146)
10:35:38 × trickard quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
10:35:52 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
10:56:06 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out)
10:56:31 Googulator64 is now known as Googulator
11:00:17 chromoblob joins (~chromoblo@user/chromob1ot1c)
11:05:57 qqe joins (~qqq@185.54.23.200)
11:09:17 weary-traveler joins (~user@user/user363627)
11:13:18 xff0x joins (~xff0x@2405:6580:b080:900:6316:ba02:9166:40eb)
11:13:58 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
11:15:43 Googulator87 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
11:15:43 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
11:21:54 × tromp quits (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:22:00 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 245 seconds)
11:22:19 inline joins (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e)
11:22:38 chromoblob joins (~chromoblo@user/chromob1ot1c)
11:24:55 Googulator87 is now known as Googulator
11:25:59 Googulator7 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
11:26:12 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
11:26:14 Googulator7 is now known as Googulator
11:27:21 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
11:30:44 Lycurgus joins (~juan@user/Lycurgus)
11:36:54 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 244 seconds)
11:37:06 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
11:37:31 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
11:37:53 chromoblob joins (~chromoblo@user/chromob1ot1c)
11:37:59 × kubrat quits (~kubrat@149.62.205.212) (Ping timeout: 250 seconds)
11:38:25 Lord_of_Life_ is now known as Lord_of_Life
11:41:08 srazkvt joins (~sarah@user/srazkvt)
11:52:55 inline_ joins (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e)
11:54:10 inline__ joins (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e)
11:55:19 trickard_ is now known as trickard
11:56:01 × inline quits (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e) (Ping timeout: 244 seconds)
11:56:20 × Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
11:57:56 × inline_ quits (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e) (Ping timeout: 256 seconds)
12:00:55 kubrat joins (~kubrat@149.62.205.137)
12:15:34 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
12:15:37 Googulator54 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
12:15:40 SlackCoder joins (~SlackCode@208.26.91.234)
12:17:02 L29Ah joins (~L29Ah@wikipedia/L29Ah)
12:20:45 Googulator74 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
12:21:01 × Googulator54 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
12:30:13 × Natch quits (~natch@c-92-34-15-120.bbcust.telenor.se) (Ping timeout: 244 seconds)
12:35:42 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
12:37:38 tromp joins (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5)
12:40:10 × synchromesh quits (~john@2406:5a00:2412:2c00:75ff:6dec:5332:48f7) (Read error: Connection reset by peer)
12:41:40 synchromesh joins (~john@2406:5a00:2412:2c00:75ff:6dec:5332:48f7)
12:48:52 <endokqr> Appears non-trivial to post-process the profile data so I'm going to go with reducing the number of cost centres for now. Realised many of them are in third-party packages, which is useful information, but if it's preventing me from looking at the profile at all in a sensible way it's gonna have to go. Rebuilding dependencies without cost centres. (This also prevents the clever explicit cost
12:48:55 <endokqr> centre hack from being very helpful!)
12:51:40 × trickard quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
12:51:54 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
12:55:28 × hsw_ quits (~hsw@112-104-9-97.adsl.dynamic.seed.net.tw) (Remote host closed the connection)
12:55:52 hsw_ joins (~hsw@112-104-9-97.adsl.dynamic.seed.net.tw)
12:56:42 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 260 seconds)
12:56:57 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
12:57:43 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
12:58:04 divlamir joins (~divlamir@user/divlamir)
13:01:36 ttybitnik joins (~ttybitnik@user/wolper)
13:12:40 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
13:12:58 chexum joins (~quassel@gateway/tor-sasl/chexum)
13:16:22 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 272 seconds)
13:16:28 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
13:16:49 × Square quits (~Square4@user/square) (Ping timeout: 264 seconds)
13:20:38 Googulator50 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
13:20:42 × Googulator74 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
13:21:17 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
13:23:34 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
13:24:20 FirefoxDeHuk59 joins (~FirefoxDe@109.108.69.106)
13:24:37 × FirefoxDeHuk59 quits (~FirefoxDe@109.108.69.106) (Client Quit)
13:25:58 FirefoxDeHuk5 joins (~FirefoxDe@109.108.69.106)
13:26:15 × FirefoxDeHuk5 quits (~FirefoxDe@109.108.69.106) (Client Quit)
13:27:37 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 260 seconds)
13:28:34 FirefoxDeHuk joins (~FirefoxDe@109.108.69.106)
13:28:52 × FirefoxDeHuk quits (~FirefoxDe@109.108.69.106) (Write error: Broken pipe)
13:28:54 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
13:31:04 FirefoxDeHuk65 joins (~FirefoxDe@109.108.69.106)
13:31:34 Zemy joins (~Zemy@2600:100c:b0a4:2b52:2c62:6eff:fe24:bb14)
13:31:34 × Zemy_ quits (~Zemy@72.178.108.235) (Read error: Connection reset by peer)
13:32:05 Zemy_ joins (~Zemy@72.178.108.235)
13:36:22 × Zemy quits (~Zemy@2600:100c:b0a4:2b52:2c62:6eff:fe24:bb14) (Ping timeout: 260 seconds)
13:37:32 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 260 seconds)
13:37:36 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
13:39:57 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
13:40:33 × Pozyomka quits (~pyon@user/pyon) (Ping timeout: 250 seconds)
13:42:38 Pozyomka joins (~pyon@user/pyon)
13:43:54 × tt12310978324354 quits (~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Ping timeout: 248 seconds)
13:44:25 Zemy joins (~Zemy@2600:100c:b0a4:2b52:30cd:7ff:fe22:3d41)
13:44:26 × Zemy_ quits (~Zemy@72.178.108.235) (Read error: Connection reset by peer)
13:44:49 Zemy_ joins (~Zemy@72.178.108.235)
13:48:43 × Zemy quits (~Zemy@2600:100c:b0a4:2b52:30cd:7ff:fe22:3d41) (Ping timeout: 246 seconds)
13:52:16 × SlackCoder quits (~SlackCode@208.26.91.234) (Ping timeout: 244 seconds)
13:52:52 myxos joins (~myxos@65.25.110.175)
14:02:34 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
14:04:36 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
14:07:31 × FirefoxDeHuk65 quits (~FirefoxDe@109.108.69.106) (Quit: Client closed)
14:22:09 × fp quits (~Thunderbi@130.233.70.140) (Ping timeout: 256 seconds)
14:26:13 fp joins (~Thunderbi@130.233.55.40)
14:27:32 × fp quits (~Thunderbi@130.233.55.40) (Remote host closed the connection)
14:28:32 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
14:30:47 fp joins (~Thunderbi@wireless-86-50-140-208.open.aalto.fi)
14:31:41 inline__ is now known as Inline
14:33:10 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 246 seconds)
14:35:02 × tromp quits (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:35:47 Googulator52 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
14:35:48 × Googulator50 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
14:35:53 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
14:37:49 × fp quits (~Thunderbi@wireless-86-50-140-208.open.aalto.fi) (Ping timeout: 264 seconds)
14:40:35 L29Ah joins (~L29Ah@wikipedia/L29Ah)
14:45:37 trickard_ is now known as trickard
15:00:37 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 264 seconds)
15:01:40 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
15:07:00 tromp joins (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5)
15:09:24 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 252 seconds)
15:10:17 × wickedjargon quits (~user@120.29.79.98) (Ping timeout: 260 seconds)
15:13:01 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
15:16:03 × ttybitnik quits (~ttybitnik@user/wolper) (Quit: Fading out...)
15:19:43 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 240 seconds)
15:22:02 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
15:25:42 × qqe quits (~qqq@185.54.23.200) (Quit: Lost terminal)
15:28:40 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
15:28:59 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 244 seconds)
15:29:18 flipflops joins (~cmo@2604:3d09:207f:8000::d1dc)
15:30:09 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
15:31:19 × trickard quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
15:31:33 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
15:33:10 Googulator52 is now known as Googulator
15:33:39 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 250 seconds)
15:34:03 chromoblob joins (~chromoblo@user/chromob1ot1c)
15:34:44 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
15:37:48 inline_ joins (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e)
15:37:56 kuribas joins (~user@2a02-1810-2825-6000-f3eb-4fa2-cbb5-436b.ip6.access.telenet.be)
15:41:12 × Inline quits (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e) (Ping timeout: 256 seconds)
15:47:35 ladyfriday is now known as mrmonday
15:55:44 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:01:26 × inline_ quits (~inline@2a02:8071:57a1:1260:38c6:b31e:f98a:452e) (Ping timeout: 244 seconds)
16:05:34 × flipflops quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 246 seconds)
16:07:16 AeIo joins (~AeIo@109.108.69.106)
16:08:04 × AeIo quits (~AeIo@109.108.69.106) (Write error: Broken pipe)
16:13:11 <EvanR> geekosaur, I heard matrix had an outage recently. Maybe the bridge hasn't been properly restored
16:13:18 <EvanR> haven't seen anyone talk through it in a while
16:13:41 <geekosaur> sm did yesterday
16:13:49 <EvanR> oh
16:14:24 <geekosaur> and there've been several conversations the past few days involving multiple Matrix users in #xmonad and #ghc
16:15:46 <geekosaur> and I've seen a few more in other bridged channels I'm not normally in (e.g. #haskell-wasm); Matrix-side they're in my "low priority" list which I scan at least once a day to make sure things are okay
16:20:43 Googulator33 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
16:20:45 × Googulator quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
16:21:37 × td_ quits (~td@i53870936.versanet.de) (Ping timeout: 264 seconds)
16:21:48 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
16:22:17 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
16:23:41 <haskellbridge> <sm> I haven't noticed an outage EvanR
16:24:14 <EvanR> it was sep 2
16:24:40 <geekosaur> yeh, I figured you meant that one
16:25:05 × kuribas quits (~user@2a02-1810-2825-6000-f3eb-4fa2-cbb5-436b.ip6.access.telenet.be) (Remote host closed the connection)
16:25:08 <haskellbridge> <sm> I have noticed chats seem quieter of late
16:25:13 <geekosaur> same
16:25:26 <geekosaur> and not only haskell chats
16:26:52 <geekosaur> FP Discord also has seemed a bit quieter than usual of late, and not only about Haskell (there was a lot of OCaml and Racket chat that went away)
16:27:25 <haskellbridge> <sm> maybe libera has some stats
16:28:03 td_ joins (~td@2001:9e8:19d3:4b00:581b:6633:814:8863)
16:28:55 <EvanR> as the universe expands anyone separated by enough space recedes into the distance and decrease in frequency
16:30:21 <geekosaur> dunno if libera does, but tomsmeding's log bot does
16:30:50 jmcantrell joins (~weechat@user/jmcantrell)
16:32:32 <geekosaur> hm, maybe it doesn't any more
16:32:41 <geekosaur> used to have a stats page for each channel
16:33:24 <geekosaur> including things like a nick word cloud by message frequency. I guess he pruned it
16:40:14 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
16:43:10 <haskellbridge> <Morj> You won't believe how quiet erlang chats are
16:43:27 <EvanR> it's all about elixir discord
16:43:32 <haskellbridge> <Morj> Very sad, I had to ask an llm to give me advice
16:43:59 <haskellbridge> <Morj> Yea and an llm would also give elixir answers instead of erlang
16:44:05 <EvanR> lol
16:44:29 <EvanR> sounds like a blind spot
16:45:16 turlando joins (~turlando@user/turlando)
16:45:26 chromoblob joins (~chromoblo@user/chromob1ot1c)
16:45:33 <haskellbridge> <Morj> «too far off the data distribution» is what they say
16:45:45 Googulator30 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
16:45:45 × Googulator33 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
16:47:45 <haskellbridge> <Morj> Actually I have no idea how far off the data distribution is haskell, because most questions I have are not even answered by humans
16:48:34 <EvanR> they're answered by the type signature? xD
16:48:52 <haskellbridge> <Morj> :D
16:49:08 <haskellbridge> <Morj> No yeah but hoogle is so great. I miss it every day I write in rust
16:49:30 × kimiamania99 quits (~92460e22@user/kimiamania) (Quit: PegeLinux)
16:50:41 flipflops joins (~cmo@2604:3d09:207f:8000::d1dc)
16:59:11 × tromp quits (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:04:41 <haskellbridge> <doc> is there a way to auto derive instances like Num a => Num (Foo a) where { (+) = liftA2 (+); (-) = liftA2 (-); (_) = liftA2 (_); abs = fmap abs; fromInteger = pure . fromInteger; etc etc} where Foo is an applicative and all the methods just plumb fmap/liftA, liftA2, and pure… I read a thread on r/haskell abt this and it was recommended to write this out for each type you need this for, which is perfectly fine, but am curious if there's any...
17:04:47 <haskellbridge> ... deriving magic that can do this
17:06:04 × kubrat quits (~kubrat@149.62.205.137) (Quit: Client closed)
17:07:06 × flipflops quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 252 seconds)
17:08:31 <geekosaur> no auto derive, but you can in fact write an instance that works for any Applicative
17:09:16 <geekosaur> the main argument against is that it leads to unexpected behavior, mostly due to ((->) e) being Applicative
17:10:37 × Googulator30 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
17:10:42 Googulator67 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
17:13:03 <geekosaur> instance (Applicative f, Num a) => Num (f a) where (+) = liftA2 (+); (-) = liftA2 (-); (*) = liftA2 (*); negate = fmap negate; abs = fmap abs; signum = fmap signum; fromInteger = pure . fromInteger
17:13:22 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:14:06 <geekosaur> this and Num polymorphism means using that instance is a good way to induce insanity
17:14:30 <haskellbridge> <doc> yep this was also mentioned on that discussion i read, to avoid having this general instance in scope
17:14:54 <geekosaur> it shouldn't be difficult to write some TH to auto-derive it
17:17:58 kubrat joins (~kubrat@149.62.205.137)
17:18:12 qqe joins (~qqq@185.54.23.200)
17:20:23 × kubrat quits (~kubrat@149.62.205.137) (Client Quit)
17:31:05 mastarija joins (~mastarija@89-164-108-176.dsl.iskon.hr)
17:31:22 tromp joins (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5)
17:32:12 <mastarija> Is there a way to recover the actual type from generics? The type names are written out as a type level string, but I'd like to somehow recover the original type.
17:32:31 <mastarija> I'd like to construct a type level list of all the field types of a product type.
17:33:59 <mastarija> I'm thinking it might be possible to hack a HasField + type family to get the fields since there's a functional dependency between the parent type, type level field name and the type of the field.
17:34:37 <mastarija> But that will only work on product types that have field names (if it's even possible to use HasField like that).
17:35:27 <geekosaur> I think the actual type is available, but not that way. Generics are built on Data.Data iirc, which should allow getting the actual type I think?
17:36:09 <mastarija> Hm... interesting. I did not know that.
17:37:47 <geekosaur> my recollection is Generics <- Data.Data <- Typeable, but while Typeable has the type available in some sense it's not powerful enough to make it directly available; the best you can do is its `cast` which produces a `Maybe targetType`
17:38:17 <geekosaur> that said, it's entirely possible I remember wrong and Data.Data is the basis for a different generics implementation (SYB seems most likely in that case)
17:38:32 <mastarija> Yeah. They mention something about that.
17:38:33 <tomsmeding> I'm fairly sure Data.Data is not involved here
17:38:41 <tomsmeding> Data.Data is untyped, and GHC.Generics is quite typed
17:38:42 <mastarija> I think Typeable is not what I want.
17:39:00 <geekosaur> it's not; like I said, it's not strong enough
17:39:07 <tomsmeding> mastarija: which type exactly are you looking for? The type of a field?
17:39:35 <mastarija> Like, my ultimate goal is to be able to make a `toTuple` / `fromTuple` instances where I could generically convert any product type into a tuple.
17:39:51 <mastarija> But yes. Type of a field is what I'm looking for.
17:39:58 <tomsmeding> the field types are simply there inside the Rec0 constructors
17:40:16 <mastarija> When using `Rep` I unfortunatelly do not get that.
17:40:21 <mastarija> Wait, really?
17:40:26 <tomsmeding> % :seti -XDeriveGeneric
17:40:26 <yahb2> <no output>
17:40:32 <tomsmeding> % data A = A Int Bool deriving (Generic)
17:40:32 <yahb2> <interactive>:63:31: error: [GHC-76037] ; Not in scope: type constructor or class ‘Generic’
17:40:37 <tomsmeding> % import GHC.Generics
17:40:37 <yahb2> <no output>
17:40:39 ljdarj joins (~Thunderbi@user/ljdarj)
17:40:40 <tomsmeding> % data A = A Int Bool deriving (Generic)
17:40:40 <yahb2> <no output>
17:40:43 <geekosaur> yes
17:40:43 <tomsmeding> %% :k! Rep A
17:40:43 <yahb2> https://paste.tomsmeding.com/UQWaOWBa
17:40:53 <tomsmeding> note the Int and Bool in there
17:41:05 <tomsmeding> I don't even see any string forms anywhere
17:41:39 <mastarija> But will that work for a field that's another product? I just want to go one level deep.
17:42:28 <tomsmeding> what do you mean? Do you have a simple example type?
17:42:32 <mastarija> Huh. It does.
17:42:35 <dcpagan> Did "join" used to be a class method that one could optionally define for a Monad instance? I could have sworn that I read somewhere that you could define a Monad instance by defining join instead of defining bind, since m >>= k = join $ fmap k m
17:42:39 <mastarija> I don't know what I was thinking.
17:42:50 <monochrom> I don't think join was ever a method.
17:42:53 <tomsmeding> dcpagan: well you can always define (>>=) in terms of join yourself
17:43:03 <mastarija> Yeah. I guess on Rec0 we are supposed to manually call Rep if we want to go deeper, right?
17:43:11 <mastarija> Now it's coming back to me...
17:43:15 <tomsmeding> if you want to recurse into a field, then yes
17:43:55 <mastarija> Yeah. Thanks. I somehow misremembered stuff and got stuck thinking my thinking is correct xD
17:43:57 <monochrom> Not sure what you read, but generally "could" could (pun!) be highly hypothetical as in "in another parallel universe" and/or "if I were World Dictator".
17:44:30 <dolio> Is that a pun?
17:47:20 <monochrom> Could be!
17:47:25 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 264 seconds)
17:47:33 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
17:53:17 ephilalethes joins (~noumenon@113.51-175-156.customer.lyse.net)
17:53:26 × ephilalethes quits (~noumenon@113.51-175-156.customer.lyse.net) (Remote host closed the connection)
17:55:04 flipflops joins (~cmo@2604:3d09:207f:8000::d1dc)
18:05:43 × Googulator67 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
18:05:44 Googulator7 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
18:09:35 Natch joins (~natch@c-92-34-15-120.bbcust.telenor.se)
18:10:54 × flipflops quits (~cmo@2604:3d09:207f:8000::d1dc) (Ping timeout: 252 seconds)
18:11:44 yabobay joins (~pizza@2a02:85f:fcd5:1601:439e:d9b3:6a5d:d567)
18:12:13 <yabobay> is there a generic version of splitWith somewhere in the standard library? or at least one that works on String's?
18:13:00 <EvanR> what do you mean by generic, maybe write the desired type signature
18:14:44 <yabobay> (a -> Bool) -> [a] -> http://en.wikipedia.org/wiki/Special:Search?go=Go&search=a
18:14:51 <yabobay> uh
18:15:02 <EvanR> :t breakOn
18:15:03 <lambdabot> error:
18:15:04 <lambdabot> • Variable not in scope: breakOn
18:15:04 <lambdabot> • Perhaps you meant one of these:
18:15:17 <EvanR> :t break
18:15:18 <lambdabot> (a -> Bool) -> [a] -> ([a], [a])
18:15:40 <yabobay> well what if i want it to break at every delimiter instead of just the first one
18:15:50 <yabobay> and so return a list
18:15:56 <EvanR> that is a pretty simple combination of break and scanl
18:16:10 <EvanR> which I reimplemented a few times
18:16:20 <EvanR> there is a package with a bunch of splitting utilities
18:16:23 <yabobay> you can probably write it easily but gimme a moment to figure it out for fun
18:16:32 <EvanR> it's called `split'
18:16:52 <yabobay> you mean the package?
18:16:55 <EvanR> yeah
18:17:26 <EvanR> splitWhen :: (a -> Bool) -> [a] -> [[a]] is in there
18:18:07 × tabaqui quits (~tabaqui@167.71.80.236) (Ping timeout: 260 seconds)
18:19:06 × wbrawner quits (~wbrawner@static.56.224.132.142.clients.your-server.de) (Ping timeout: 248 seconds)
18:21:11 wbrawner joins (~wbrawner@static.56.224.132.142.clients.your-server.de)
18:22:04 <tomsmeding> EvanR: are you sure it's scanl that you need?
18:22:58 <tomsmeding> and no, such a function is not in the standard library
18:23:14 <tomsmeding> which is very convenient for teachers, because then they can ask students to implement it :)
18:23:43 <EvanR> well scanl will do it, but I found it easier to write a direct recursion
18:23:47 <monochrom> Yeah if something is in the standard library, then I can only put it on exams.
18:26:00 Frostillicus joins (~Frostilli@pool-71-174-119-69.bstnma.fios.verizon.net)
18:26:04 <tomsmeding> EvanR: what I'm confused about is how you sensibly combine scanl and break in this case; I could do it with either, but not sure how to usefully use both together
18:26:22 <tomsmeding> you could do it with break and unfoldl
18:26:59 <EvanR> @src unfoldl
18:26:59 <lambdabot> Source not found. Sorry about this, I know it's a bit silly.
18:27:30 <EvanR> yeah unfoldl would work
18:27:55 Lycurgus joins (~juan@user/Lycurgus)
18:28:09 <EvanR> you just have to munge a Maybe as opposed to just analyzing the pair coming out of break
18:29:58 target_i joins (~target_i@user/target-i/x-6023099)
18:30:24 <tomsmeding> scanl forces you to iterate over a particular list, and I'm not clear on what that list would be
18:30:30 × Googulator7 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
18:30:40 Googulator7 joins (~Googulato@92-249-221-245.pool.digikabel.hu)
18:33:02 <EvanR> you're right, it would be a scanl to implement the entire shebang
18:33:05 tabaqui joins (~tabaqui@167.71.80.236)
18:34:35 rvalue- joins (~rvalue@about/hackers/rvalue)
18:35:01 × rvalue quits (~rvalue@about/hackers/rvalue) (Ping timeout: 246 seconds)
18:36:52 <yabobay> okkk i got it
18:37:26 <EvanR> :t unfoldl
18:37:27 <lambdabot> error:
18:37:27 <lambdabot> • Variable not in scope: unfoldl
18:37:27 <lambdabot> • Perhaps you meant one of these:
18:37:34 <EvanR> :t unfoldr
18:37:35 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
18:37:43 <EvanR> @src unfoldr
18:37:43 <lambdabot> unfoldr f b = case f b of
18:37:43 <lambdabot> Just (a, b') -> a : unfoldr f b'
18:37:43 <lambdabot> Nothing -> []
18:37:45 <bwe> Having a data constructor that carries only `Maybe _` records. How can I generically identify and collect only those records that are missing? Example: https://paste.tomsmeding.com/QNAkizLd
18:39:01 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 264 seconds)
18:39:33 <bwe> (I don't want to implement a case monster for MyCollectorA and MyCollectorB; I feel it could be done easily with HashMaps yet I loose with them the strictness of storing values to only specific records.)
18:40:10 <bwe> (Maybe the closest bet would be some Validation package, so I'd appreciate it if someone with experience in that could point me to some that fits my use case.)
18:41:41 peterbecich joins (~Thunderbi@172.222.148.214)
18:41:53 <EvanR> well to just write the function you could hit each field with *> Just "a", *> Just "b", *> Just "c" respectively, then catMaybes
18:41:57 rvalue- is now known as rvalue
18:42:13 <EvanR> but something tells me the whole question could be improved looking at the bigger picture
18:43:11 <EvanR> ok, and there are a lot of fields
18:43:37 <EvanR> doing stuff field by field like that might benefit from extensible records
18:44:30 <EvanR> whose record type often comes with a functor f on every field that you can use in natural transformations
18:44:31 <bwe> EvanR: The bigger picture is scraping some data from different sources using ld+json and meta / item properties. Since the data quality varies with different sources, I need to know which data is missing from the machine readable provided one. For them I need to supplement it by writing manual parsers.
18:44:33 <EvanR> f = Maybe in this case
18:44:55 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 240 seconds)
18:45:16 yabobay parts (~pizza@2a02:85f:fcd5:1601:439e:d9b3:6a5d:d567) (Konversation terminated!)
18:46:00 × Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
18:46:41 <EvanR> if the data is not strictly structured maybe represent it using dynamic types, like the json Value type
18:46:52 <EvanR> the parser for such a type is the validation
18:48:14 <bwe> …which would go more into the direction of HashMaps, isn't it? Is there such thing like HashMap with only predefined keys (instead of free text)?
18:49:26 <EvanR> yes, dependent map
18:49:50 <bwe> Never heard about this.
18:50:06 <EvanR> it's extensible record adjacent
18:50:39 SlackCoder joins (~SlackCode@208.26.91.234)
18:51:10 × trickard_ quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
18:51:23 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
18:52:35 <bwe> So, which packages should I consider?
18:56:41 <EvanR> let me try to clarify, just using something like the json Value (which might be a hashmap of more values) would be pretty unstructured
18:57:22 <EvanR> dependent-map is more structured, and would let you do something with the original question in a well typed way, but might still be too rigid for whatever else you're trying to do
18:58:28 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 246 seconds)
19:00:01 × caconym7478798 quits (~caconym@user/caconym) (Quit: bye)
19:00:42 caconym7478798 joins (~caconym@user/caconym)
19:00:53 <bwe> EvanR: json Value: Yes, because I would pattern match by String values anyway instead of concrete record names.
19:02:15 gustrb joins (~gustrb@191.243.134.87)
19:02:22 <EvanR> yeah you could zip together the list of possible field names with the result of looking up that field
19:02:47 <EvanR> and output the field name if it's missing, or nothing, and collect at the end
19:03:18 <bwe> okay, I am thinking now I might roll a new, additional, minimal data constructor with non-Maybe, having all required fields, and if any isn't provided by the `Maybe a` upstream constructor, I let it emit a `These a b` type.
19:04:08 <EvanR> having your formal record types be reserved for cases where all the require fields exist probably would simplify things
19:04:20 <EvanR> up to that point use a more unstructured representation
19:04:34 <EvanR> the bridge between them is the parser/validator
19:04:58 <bwe> It's sort of the data transfer object vs. the non-Maybe variant. And the translator inbetween both should tell what's missing.
19:05:09 <bwe> yeah, that'd be the parser/validator.
19:05:33 <bwe> And I am searching for a way to do it differently than pattern matching over all fields or creating a case monster.
19:06:10 <EvanR> have you seen how json value -> application type parsers are done?
19:06:12 <EvanR> using applicative
19:07:00 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 252 seconds)
19:09:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:10:04 <EvanR> e.g. going from Object v = {x: 9, y: 3.14} to data Coord = Coord {x :: Double, y :: Double}, write Coord <$> v.:"y" <*> v.:"z"
19:10:23 <EvanR> or a more involved parser if there are non trivial requirements on the json
19:12:07 <EvanR> the above parser only yields a Coord if the x and y fields exist and parse into Doubles
19:13:20 × trickard_ quits (~trickard@cpe-53-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
19:14:23 <probie> bwe: cobbled together, but if all the fields are `Maybe`, you can do this with generics https://play.haskell.org/saved/T08yEkzo
19:16:00 <mastarija> Does anyone know if there are any utilities in the `base` package for working with type level lists? e.g. Concat type family?
19:16:07 trickard_ joins (~trickard@cpe-53-98-47-163.wireline.com.au)
19:16:08 <mastarija> I feel like there was something.
19:16:16 × qqe quits (~qqq@185.54.23.200) (Quit: Lost terminal)
19:16:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
19:16:24 <tomsmeding> there's some basic stuff for Nats, but I don't recall anything for lists
19:16:34 <haskellbridge> <loonycyborg> Only DataKinds
19:16:36 <haskellbridge> <loonycyborg> and some supporting modules
19:16:41 <haskellbridge> <loonycyborg> like Natural and Symbol
19:17:00 <mastarija> Hm... I guess I've mixed that up with Symbol
19:17:06 <haskellbridge> <loonycyborg> Even DataKinds on its own is pretty powerful though
19:19:10 tccq joins (~user@user/tccq)
19:21:44 <tccq> Are there decent solutions for jump-to-def and complete symbol names in emacs these days? haskell-mode is good and I like C-c C-c for compilation but the completion doesn't work for locals as far as I can tell. Also even with hls+eglot, jump to def doesn't work for anything outside the current project. I assume that's for lack of source files for system libs? But not even being able to fetch the type seems somewhat harsh. What are
19:21:44 <tccq> people's setups?
19:24:58 <bwe> EvanR: No, I haven't looked how json value -> application type parser are done yet. But will do.
19:24:58 <monochrom> I haven't needed jump-to-def for locals, so haskell-mode suffices for me.
19:25:18 <monochrom> err, I haven't needed completion for locals.
19:25:28 trickard_ is now known as trickard
19:25:35 <bwe> probie: wow, didn't think that this would be possible.
19:25:42 Googulator8 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
19:26:03 × Googulator7 quits (~Googulato@92-249-221-245.pool.digikabel.hu) (Quit: Client closed)
19:26:04 <monochrom> I can fetch types, global and local.
19:26:55 <tccq> do you get jump to def for prelude or standard packages?
19:27:02 <monochrom> No.
19:27:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:30:34 <tccq> hmm. Maybe I will drop the lsp part and just try to configure haskell-mode better. Probably with htags and dabbrev I should be set
19:32:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
19:34:45 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
19:34:54 gustrb joins (~gustrb@191.243.134.87)
19:39:28 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 244 seconds)
19:40:06 × mastarija quits (~mastarija@89-164-108-176.dsl.iskon.hr) (Quit: Client closed)
19:43:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:48:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
19:49:41 × AlexZenon quits (~alzenon@85.174.182.163) (Ping timeout: 256 seconds)
19:53:29 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
19:54:22 × Googulator8 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
19:54:37 Googulator8 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
19:59:29 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:04:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
20:08:28 gustrb joins (~gustrb@191.243.134.87)
20:10:02 ephilalethes joins (~noumenon@113.51-175-156.customer.lyse.net)
20:13:49 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 264 seconds)
20:15:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:15:27 jmcantrell joins (~weechat@user/jmcantrell)
20:15:37 × Googulator8 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
20:15:38 Googulator52 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
20:18:41 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection)
20:20:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
20:21:13 gustrb joins (~gustrb@191.243.134.87)
20:22:39 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
20:26:26 peterbecich joins (~Thunderbi@172.222.148.214)
20:26:56 AlexZenon joins (~alzenon@85.174.182.163)
20:27:01 × Frostillicus quits (~Frostilli@pool-71-174-119-69.bstnma.fios.verizon.net) (Ping timeout: 264 seconds)
20:28:32 <chromoblob> DeepSeek stole its name from Haskell's DeepSeq
20:28:47 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 256 seconds)
20:31:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:35:34 × Googulator52 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
20:35:37 Googulator47 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
20:35:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
20:37:37 Square joins (~Square4@user/square)
20:38:32 Square2 joins (~Square@user/square)
20:39:42 <bwe> EvanR: You are actually right. I am solving the wrong problem: Currently I parse ld+json (embedded machine readable data in html) to 'Maybe a' using Aeson. Only to then to re-use the 'Maybe a' records (dto) to extract the required fields and store them in a non-Maybe constructor. Why not parsing the values directly into a constructor where required fields have a non-Maybe type and optional one's a Maybe type? I get the errors of the missing bits for free w
20:39:42 <bwe> ithout needing to reinvent the wheel.
20:40:20 <EvanR> yes
20:40:33 <EvanR> parse "don't validate" (parse = validate)
20:42:09 × Square quits (~Square4@user/square) (Ping timeout: 252 seconds)
20:42:20 <bwe> I wanted to finish the partly done parsing job by validating.
20:47:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:47:37 <EvanR> partly done parsing *scream emoji*
20:48:06 <EvanR> if it's really invalid then it shouldn't parse
20:54:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
20:55:25 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
20:59:16 ttybitnik joins (~ttybitnik@user/wolper)
21:04:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:08:35 <yin> also, make illegal states unrepresentable
21:08:54 × lisq_ quits (~quassel@lis.moe) ()
21:08:56 <EvanR> that might be more trouble than its worth
21:09:04 lisq joins (~quassel@lis.moe)
21:09:39 <EvanR> like how the real projective plane is this weird space that needs 4 dimensions, or it's just a half a sphere, ignore the other half
21:09:46 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
21:10:09 × michalz quits (~michalz@185.246.207.221) (Remote host closed the connection)
21:10:41 <EvanR> actually 5
21:13:13 <monochrom> I only needed 3 back then.
21:13:18 <monochrom> Inflation!
21:14:12 gustrb joins (~gustrb@191.243.134.87)
21:14:37 <EvanR> it's a 2D space so you only need 2 really
21:14:45 <bwe> EvanR: I admit initially the dto data constructor just collected the data. Design criterion was to not fail even if some fields can't be populated (for debugging purposes). Hence I ended up with the "everything is Maybe" dto constructor. Second requirement was then to roll a domain data constructor that has only required fields. Now, the hassle turns out to be how to translate between them.
21:15:31 <bwe> EvanR: I wonder how I might be more aware next time when I am opening the pandoras box with validating instead of parsing.
21:16:23 <EvanR> if it's business apps, I might just veer on the side of "this has no structure, even if some boss said on some date that it did"
21:17:05 <EvanR> but if it really does, there's always versioning your data types and doing type checked migrations
21:17:15 <EvanR> and there is a different parser for each version
21:20:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:21:47 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
21:25:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
21:25:37 Googulator80 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
21:25:39 × Googulator47 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
21:27:57 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:33:49 <EvanR> monochrom, 2 dimensions to get in, 3 to visualize it with intersections, 4 without intersections, 5 to preserve distances and angles
21:36:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:37:02 emmanuelux joins (~emmanuelu@user/emmanuelux)
21:41:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
21:52:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:55:50 × tccq quits (~user@user/tccq) (Remote host closed the connection)
21:57:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
21:58:13 × gustrb quits (~gustrb@191.243.134.87) (Ping timeout: 264 seconds)
21:59:58 gustrb joins (~gustrb@191.243.134.87)
22:03:35 × tromp quits (~textual@2001:1c00:3487:1b00:242b:79a0:e1f9:7ea5) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:08:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:10:48 × Googulator80 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
22:11:05 Googulator80 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
22:13:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
22:14:22 × Tuplanolla quits (~Tuplanoll@91-159-187-167.elisa-laajakaista.fi) (Ping timeout: 260 seconds)
22:23:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:26:25 Sgeo joins (~Sgeo@user/sgeo)
22:30:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
22:38:45 × jreicher quits (~user@user/jreicher) (Ping timeout: 252 seconds)
22:42:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:44:55 pavonia joins (~user@user/siracusa)
22:46:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
22:57:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:02:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:06:21 weary-traveler joins (~user@user/user363627)
23:08:07 × mreh quits (~matthew@host86-146-25-125.range86-146.btcentralplus.com) (Ping timeout: 240 seconds)
23:09:13 jreicher joins (~user@user/jreicher)
23:13:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:15:38 Googulator98 joins (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu)
23:15:42 × Googulator80 quits (~Googulato@2a01-036d-0106-03fa-0485-6a66-0733-0e38.pool6.digikabel.hu) (Quit: Client closed)
23:18:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
23:28:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:30:37 <Leary> doc: `data Foo a = ... deriving Num via Ap Foo a`
23:34:05 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
23:37:17 × jreicher quits (~user@user/jreicher) (Quit: In transit)
23:39:17 <Leary> @tell mastarija You might want to use 'generics-sop' instead of plain `GHC.Generics`; it more-or-less already does what you want to do.
23:39:17 <lambdabot> Consider it noted.
23:44:45 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:45:45 <monochrom> EvanR: I haven't thought of that. Thanks.
23:46:00 straybits joins (~straybits@user/straybits)
23:46:52 <monochrom> But we get to say things like "we were only allowed 3, and it was uphill both ways" :)
23:49:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)

All times are in UTC on 2025-10-20.