Logs on 2023-03-14 (liberachat/#haskell)
| 00:04:13 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 276 seconds) |
| 00:07:08 | → | Umeaboy joins (~Umeaboy@94-255-145-133.cust.bredband2.com) |
| 00:07:24 | <Umeaboy> | Hi again! I'm home now so the connection is more stable. |
| 00:08:17 | <Umeaboy> | As a matter of fact there is a libncurses5 built for aarch64, but it's lib64. I understand why, but how do I solve that in the spec file? |
| 00:08:41 | <Umeaboy> | ifarch aarch64 |
| 00:09:12 | <hpc> | probably that, yeah |
| 00:09:21 | × | Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:09:23 | <Umeaboy> | BuildRequires: lib64ncurses5-6.3 ? |
| 00:09:30 | × | forell quits (~forell@user/forell) (Ping timeout: 255 seconds) |
| 00:09:32 | <hpc> | maybe it's %ifarch? i haven't ever had to use it |
| 00:09:44 | <Umeaboy> | Yeah....... |
| 00:09:46 | <Umeaboy> | I know· |
| 00:09:52 | <Umeaboy> | I'll test it. |
| 00:11:12 | <Umeaboy> | Do I use Requires or BuildRequires in this case? |
| 00:11:19 | <hpc> | BuildRequires |
| 00:11:22 | <Umeaboy> | OK. |
| 00:11:43 | <hpc> | and then... i think it static links so you should be good? |
| 00:11:58 | <hpc> | oh, and that needs to be the dev package |
| 00:12:06 | <hpc> | i think |
| 00:12:38 | <hpc> | maybe not, hmm |
| 00:13:59 | <hpc> | ugh, it 500s when i try to look at the source |
| 00:14:04 | <Umeaboy> | I don't mean to seem stupid, but aren't there to many occurances of libncurses in the spec fi,le? |
| 00:14:07 | <Umeaboy> | file' |
| 00:14:38 | <Umeaboy> | Say whut? |
| 00:15:09 | <hpc> | trying to see how it's all linked |
| 00:15:26 | <Umeaboy> | I can open it just fine. |
| 00:15:30 | <geekosaur> | actually I misspoke earlier, it's not ghc it's haskeline — which is unmaintained |
| 00:15:33 | <hpc> | i am used to packaging dynamic linked stuff, where you buildrequire headers and require the .so |
| 00:15:54 | <Umeaboy> | If you're by source refer to https://download.copr.fedorainfracloud.org/results/umeaman/ghc-bootstrap/mageia-8-i586/05633414-ghc-bootstrap/ghc-bootstrap-8.6.5-1.mga8.src.rpm |
| 00:16:11 | <geekosaur> | at some point I suppose I'll have to put in a takeover req for it because nobody else will, even though I can't make many promises about keeping up (but I can do better than a decade of not keeping up…) |
| 00:17:08 | <hpc> | oh, that's a better idea - i was clicking the git repo link |
| 00:20:00 | <Umeaboy> | And why does it have both binutils on BuildRequires and Requires? That doesn't feel right, but then again..... I'm no expert. |
| 00:20:25 | <hpc> | probably something like this: https://paste.tomsmeding.com/Bnp4dW6P |
| 00:20:31 | <geekosaur> | required both for building and for running, since it's a compiler |
| 00:20:36 | <hpc> | ^ |
| 00:21:33 | <Umeaboy> | Ok. |
| 00:21:37 | <Umeaboy> | Good to know. |
| 00:21:40 | → | forell joins (~forell@user/forell) |
| 00:22:11 | <hpc> | so like, imagine you had a bash script |
| 00:22:24 | <hpc> | perhaps you would buildrequire shellcheck and require bash |
| 00:22:42 | <hpc> | bash at runtime to run it, shellcheck at build time to make sure it's correct |
| 00:22:56 | <Umeaboy> | Can I safely delete/remove the %{arm} from the ifarch aarch64 line as arm is no longer supported by that version? |
| 00:22:59 | <hpc> | in python you'd both require and buildrequire python |
| 00:23:50 | <hpc> | for binutils, it's needed at build time in order to copy files around |
| 00:23:54 | <Umeaboy> | shellcheck isn't officially packaged for Mageia to my knowledge. |
| 00:24:00 | <hpc> | and at runtime... probably for similar reasons? |
| 00:24:14 | <geekosaur> | because it does linking via binutils |
| 00:24:31 | <hpc> | doh, i was thinking coreutils |
| 00:24:39 | <geekosaur> | and a build time it does linking of the new ghc using the old ghc |
| 00:24:46 | <geekosaur> | *at |
| 00:25:18 | <hpc> | Umeaboy: (that was just an example) |
| 00:25:47 | <geekosaur> | so it needs binutils in both cases to get a linker |
| 00:26:39 | <Umeaboy> | Right. |
| 00:26:58 | × | mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 276 seconds) |
| 00:35:23 | × | acidjnk_new quits (~acidjnk@p200300d6e715c44645c006c030d63e3c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 00:35:42 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 00:38:08 | → | mei joins (~mei@user/mei) |
| 00:38:48 | × | zeenk quits (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!) |
| 00:54:20 | <lyxia> | Does this Windows error in CI using GH actions look familiar to somebody? https://github.com/Lysxia/generic-random/actions/runs/4410749511/jobs/7728952259 |
| 00:56:47 | → | mauke_ joins (~mauke@user/mauke) |
| 00:58:59 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 264 seconds) |
| 00:59:00 | mauke_ | is now known as mauke |
| 01:01:43 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:03:11 | → | califax joins (~califax@user/califx) |
| 01:03:45 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 256 seconds) |
| 01:03:51 | × | zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 01:05:17 | <Umeaboy> | lyxia: Check line 19. |
| 01:06:33 | × | thegeekinside quits (~thegeekin@189.217.80.156) (Read error: Connection reset by peer) |
| 01:07:56 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 01:07:57 | <lyxia> | Umeaboy: that's a warning. The error is line 31 |
| 01:08:29 | × | okiltb^ quits (~okiltb@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection) |
| 01:08:45 | <Umeaboy> | Check manually if it does exist. |
| 01:09:42 | → | xff0x joins (~xff0x@om126167107057.29.openmobile.ne.jp) |
| 01:10:15 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:10:16 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) |
| 01:14:25 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 246 seconds) |
| 01:15:27 | <Umeaboy> | hpc and geekosaur: Does this edited spec file look correct? |
| 01:15:28 | <Umeaboy> | https://ghostbin.me/640fca90c83c5 |
| 01:15:44 | <lyxia> | Umeaboy: It's an error on a remote machine I do not own so I cannot "check manually" |
| 01:16:20 | → | telser_ joins (~quassel@user/telser) |
| 01:16:22 | × | telser quits (~quassel@user/telser) (Ping timeout: 276 seconds) |
| 01:16:23 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:18:40 | → | thegeekinside joins (~thegeekin@189.217.80.156) |
| 01:19:22 | <Umeaboy> | Fix it, nevermind! |
| 01:19:24 | <Umeaboy> | Fixed |
| 01:19:40 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 01:24:12 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
| 01:26:05 | × | cods quits (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 250 seconds) |
| 01:28:45 | → | dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) |
| 01:33:25 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 01:35:51 | → | mei joins (~mei@user/mei) |
| 01:39:04 | <Umeaboy> | There is one small problem left. |
| 01:40:12 | <Umeaboy> | The %build macro says to do tar Jxf ghc-%{version}-%{longarch}-%{sysname}-linux.tar.xz which is OK for the vaste majority of the sources, but there is one source tarball that's named differently. |
| 01:41:11 | <Umeaboy> | Source #3 is named ghc-8.8.1-x86_64-apple-darwin.tar.xz, but that leads to tar not being able to unpack it. |
| 01:41:29 | <Umeaboy> | Can I use %if else for this section to? |
| 01:42:20 | <Umeaboy> | I'll test it and see how it goes. |
| 01:52:07 | × | forell quits (~forell@user/forell) (Ping timeout: 276 seconds) |
| 01:53:43 | → | cods joins (~fred@82-65-232-44.subs.proxad.net) |
| 01:59:52 | byorgey_ | is now known as byorgey |
| 02:04:43 | → | forell joins (~forell@user/forell) |
| 02:11:02 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 02:19:10 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection) |
| 02:19:30 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 02:19:31 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 02:23:46 | × | xff0x quits (~xff0x@om126167107057.29.openmobile.ne.jp) (Read error: Connection reset by peer) |
| 02:25:01 | × | opticblast quits (~Thunderbi@172.58.82.223) (Ping timeout: 250 seconds) |
| 02:27:37 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 02:27:52 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 276 seconds) |
| 02:28:31 | × | forell quits (~forell@user/forell) (Ping timeout: 276 seconds) |
| 02:28:56 | Lord_of_Life_ | is now known as Lord_of_Life |
| 02:36:37 | → | slack1256 joins (~slack1256@186.11.43.166) |
| 02:39:41 | → | xff0x joins (~xff0x@om126167107057.29.openmobile.ne.jp) |
| 02:40:29 | → | roboguy_ joins (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) |
| 02:41:50 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:48:41 | × | xff0x quits (~xff0x@om126167107057.29.openmobile.ne.jp) (Read error: Connection reset by peer) |
| 02:53:59 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 02:54:33 | → | razetime joins (~Thunderbi@43.254.111.18) |
| 02:56:34 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 02:56:53 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 255 seconds) |
| 02:59:46 | × | jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection) |
| 03:02:50 | → | Goodbye_Vincent6 joins (cyvahl@freakshells.net) |
| 03:03:29 | × | dfg quits (~dfg@user/dfg) (Remote host closed the connection) |
| 03:03:45 | → | dfg joins (~dfg@dfg.rocks) |
| 03:03:46 | × | dfg quits (~dfg@dfg.rocks) (Changing host) |
| 03:03:46 | → | dfg joins (~dfg@user/dfg) |
| 03:04:32 | → | forell joins (~forell@user/forell) |
| 03:04:55 | × | Goodbye_Vincent quits (cyvahl@freakshells.net) (Ping timeout: 276 seconds) |
| 03:04:55 | Goodbye_Vincent6 | is now known as Goodbye_Vincent |
| 03:11:18 | × | jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 255 seconds) |
| 03:11:41 | → | gastus joins (~gastus@185.6.123.231) |
| 03:13:25 | → | jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
| 03:15:19 | × | gastus_ quits (~gastus@185.6.123.215) (Ping timeout: 276 seconds) |
| 03:18:30 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 255 seconds) |
| 03:20:12 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 03:22:28 | × | forell quits (~forell@user/forell) (Ping timeout: 276 seconds) |
| 03:23:07 | × | vglfr quits (~vglfr@91.102.183.234) (Ping timeout: 276 seconds) |
| 03:23:08 | × | td_ quits (~td@i53870912.versanet.de) (Ping timeout: 246 seconds) |
| 03:23:34 | → | Inst joins (~Inst@2601:6c4:4081:54f0:a477:258d:a836:e1e4) |
| 03:24:36 | → | vglfr joins (~vglfr@91.102.183.234) |
| 03:24:57 | → | td_ joins (~td@i53870906.versanet.de) |
| 03:25:20 | → | sagax joins (~sagax_nb@213.138.71.146) |
| 03:25:20 | × | sagax quits (~sagax_nb@213.138.71.146) (Changing host) |
| 03:25:20 | → | sagax joins (~sagax_nb@user/sagax) |
| 03:33:48 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 03:36:53 | × | slack1256 quits (~slack1256@186.11.43.166) (Ping timeout: 268 seconds) |
| 03:41:37 | → | ub joins (~Thunderbi@p548c84ba.dip0.t-ipconnect.de) |
| 03:41:58 | × | ubert quits (~Thunderbi@p548c84ba.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 03:41:58 | ub | is now known as ubert |
| 03:42:58 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:4e8c::) (Quit: The Lounge - https://thelounge.chat) |
| 03:43:36 | × | dsrt^ quits (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) (Remote host closed the connection) |
| 03:44:22 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:4e8c::) |
| 03:51:48 | × | rekahsoft quits (~rekahsoft@bras-base-orllon1122w-grc-07-174-95-68-142.dsl.bell.ca) (Ping timeout: 255 seconds) |
| 03:54:17 | × | roboguy_ quits (~roboguy_@cpe-69-76-235-109.kc.res.rr.com) (Quit: Leaving...) |
| 03:54:46 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 252 seconds) |
| 03:58:00 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 03:58:00 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:58:00 | finn_elija | is now known as FinnElija |
| 03:59:16 | × | wroathe quits (~wroathe@user/wroathe) (Quit: leaving) |
| 03:59:29 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 04:22:16 | × | tessier quits (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 276 seconds) |
| 04:23:51 | → | tessier joins (~treed@ip72-197-145-89.sd.sd.cox.net) |
| 04:26:27 | × | freeside_ quits (~mengwong@103.252.202.85) (Ping timeout: 255 seconds) |
| 04:27:11 | × | tusko quits (~yeurt@user/tusko) (Remote host closed the connection) |
| 04:27:38 | → | tusko joins (~yeurt@user/tusko) |
| 04:33:11 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 04:34:08 | → | xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) |
| 04:35:50 | × | tusko quits (~yeurt@user/tusko) (Remote host closed the connection) |
| 04:35:50 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 04:35:50 | × | chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 04:36:02 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 04:36:21 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 04:36:23 | → | tusko joins (~yeurt@user/tusko) |
| 04:39:24 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 04:43:23 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
| 04:46:32 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 04:47:11 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 04:51:55 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
| 04:52:43 | × | markasoftware quits (~quassel@107.161.26.124) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) |
| 04:53:21 | → | markasoftware joins (~quassel@107.161.26.124) |
| 04:59:48 | → | rettahcay joins (~kaushikv@223.178.85.99) |
| 05:03:13 | → | trev joins (~trev@user/trev) |
| 05:09:15 | <rettahcay> | hello folks, I'm trying to learn Zippers. So far, I've been using the section in "Learn you a haskell". Could you please recommend alternate sources for learning zippers, with some examples? Thanks |
| 05:13:01 | × | vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection) |
| 05:14:16 | → | vglfr joins (~vglfr@91.102.183.234) |
| 05:22:34 | → | smallville7123 joins (~Android@2001:8004:4441:8fd2:47d8:ec3c:8ede:6ae5) |
| 05:22:58 | → | mbuf joins (~Shakthi@49.207.178.186) |
| 05:33:05 | × | tessier quits (~treed@ip72-197-145-89.sd.sd.cox.net) (Ping timeout: 250 seconds) |
| 05:33:49 | × | vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection) |
| 05:34:47 | → | vglfr joins (~vglfr@91.102.183.234) |
| 05:34:53 | → | tessier joins (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) |
| 05:35:59 | <davean> | rettahcay: the wiki |
| 05:35:59 | × | vglfr quits (~vglfr@91.102.183.234) (Read error: Connection reset by peer) |
| 05:36:52 | → | vglfr joins (~vglfr@91.102.183.234) |
| 05:38:51 | × | vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection) |
| 05:39:06 | → | vglfr joins (~vglfr@91.102.183.234) |
| 05:44:23 | × | vglfr quits (~vglfr@91.102.183.234) (Read error: Connection reset by peer) |
| 05:45:17 | → | vglfr joins (~vglfr@91.102.183.234) |
| 05:51:11 | × | xff0x quits (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) (Ping timeout: 246 seconds) |
| 05:51:34 | → | xff0x joins (~xff0x@178.255.149.135) |
| 05:52:24 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 05:56:30 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 05:57:57 | → | codaraxis__ joins (~codaraxis@user/codaraxis) |
| 05:58:28 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 276 seconds) |
| 05:58:39 | <Umeaboy> | rettahcay: https://www.tutorialspoint.com/haskell/haskell_zippers.htm |
| 05:58:40 | <Umeaboy> | ? |
| 05:59:47 | → | xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) |
| 06:00:49 | × | codaraxis quits (~codaraxis@user/codaraxis) (Ping timeout: 250 seconds) |
| 06:06:28 | → | Maeda joins (~Maeda@91-161-10-149.subs.proxad.net) |
| 06:08:59 | → | monoidal joins (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) |
| 06:12:55 | → | cheater_ joins (~Username@user/cheater) |
| 06:13:06 | → | michalz joins (~michalz@185.246.207.215) |
| 06:14:59 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 06:15:00 | cheater_ | is now known as cheater |
| 06:15:22 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:18:14 | → | chomwitt joins (~chomwitt@2a02:587:7a18:6d00:1ac0:4dff:fedb:a3f1) |
| 06:26:02 | → | mncheck joins (~mncheck@193.224.205.254) |
| 06:30:43 | × | cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds) |
| 06:32:55 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 276 seconds) |
| 06:33:45 | ← | rettahcay parts (~kaushikv@223.178.85.99) () |
| 06:39:39 | × | razetime quits (~Thunderbi@43.254.111.18) (Ping timeout: 255 seconds) |
| 06:43:26 | → | robobub joins (uid248673@id-248673.uxbridge.irccloud.com) |
| 06:48:13 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 07:02:40 | × | bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
| 07:05:20 | → | forell joins (~forell@user/forell) |
| 07:12:23 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:14:03 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:21:01 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 276 seconds) |
| 07:21:36 | × | forell quits (~forell@user/forell) (Quit: ZNC - https://znc.in) |
| 07:24:24 | <opqdonut> | I'd like to pattern match on a constructor that has different numbers of arguments in different GHCs |
| 07:24:38 | <opqdonut> | unfortunately the constructor isn't declared using record syntax |
| 07:24:52 | <jackdk> | is it TH-related? |
| 07:24:54 | <opqdonut> | yes |
| 07:25:00 | <opqdonut> | I'd like to avoid using CPP |
| 07:25:01 | → | forell joins (~forell@user/forell) |
| 07:25:27 | <opqdonut> | bndrName (KindedTV n _ _) = nameBase n -- this is what I want to do |
| 07:25:33 | <jackdk> | Does `th-abstraction` or `th-compat` help you? |
| 07:27:02 | <davean> | ailing that, view patterns? |
| 07:27:08 | <opqdonut> | oh, th-compat looks like exactly the thing I want |
| 07:29:12 | <jackdk> | or put your function-that-needs-cpp somewhere else, so your main modules don't have the cpp in the bulk of your code |
| 07:29:35 | <jackdk> | write the function you wish you had, and then use CPP to fill out its body, then program against that |
| 07:30:27 | <opqdonut> | yeah well if I'm going to need CPP I'll just put it in this file |
| 07:30:38 | <opqdonut> | but I think th-compat might save me, I'll try it out |
| 07:30:54 | <jackdk> | it may also be the sort of function worth PRing into one of these libraries |
| 07:31:02 | <opqdonut> | this is a good reminder to use record syntax in public APIs even if it feels a bit unnecessary |
| 07:31:02 | <jackdk> | anyway, good luck |
| 07:33:44 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:34:41 | → | mastarija joins (~mastarija@188.252.199.82) |
| 07:37:00 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 07:37:03 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 07:37:21 | → | minol joins (~minol@58.247.98.202) |
| 07:37:39 | <opqdonut> | tvName from th-abstraction is the thing I wanted |
| 07:39:35 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:50:05 | × | lottaquestions quits (~nick@2607:fa49:503e:7100:df4b:8386:5d62:a084) (Ping timeout: 260 seconds) |
| 07:53:23 | → | lottaquestions_ joins (~nick@2607:fa49:503e:7100:f10c:7d33:a2c4:22f3) |
| 07:53:25 | × | jinsl quits (~jinsl@2408:8207:2557:5df0:211:32ff:fec8:6aea) (Quit: ZNC - https://znc.in) |
| 07:54:15 | → | jinsl joins (~jinsl@2408:8207:2557:5df0:211:32ff:fec8:6aea) |
| 07:56:43 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 08:00:37 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 08:02:27 | <mastarija> | Can't find anything on rank-N lenses, is there any research on that front? |
| 08:05:05 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:f353:905c:faa4:880f) |
| 08:08:32 | → | razetime joins (~Thunderbi@117.254.34.249) |
| 08:13:19 | → | acidjnk_new joins (~acidjnk@p200300d6e715c44624b074cb2aeeb01b.dip0.t-ipconnect.de) |
| 08:17:22 | → | cheater joins (~Username@user/cheater) |
| 08:18:47 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:18:59 | → | nschoe joins (~q@141.101.51.197) |
| 08:21:20 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 252 seconds) |
| 08:22:11 | → | MajorBiscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) |
| 08:25:06 | × | AmyMalik quits (ellenor@callbox.trd.is) (Quit: Bye Open Projects!) |
| 08:27:42 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 265 seconds) |
| 08:27:56 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 08:27:58 | × | gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 08:34:50 | × | harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
| 08:37:13 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 08:38:09 | × | shryke quits (~shryke@2a00:4b00:13c:cc:b27b:25ff:fe18:efd) (Read error: Connection reset by peer) |
| 08:41:14 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 08:41:18 | → | zeenk joins (~zeenk@2a02:2f04:a307:2300::7fe) |
| 08:43:36 | → | opticblast joins (~Thunderbi@172.58.84.141) |
| 08:46:55 | <[Leary]> | mastarija: I don't know, and this is only an off-hand thought, but if you used `type HOLens s t a b = forall f. Functor f => (forall x. a x -> f (b x)) -> (forall x. s x -> f (t x))` and similar `HOTraversal`, etc, then most of lens could probably be written on top of that with the ~same implementations (and some eta expansion). You could then write `type Lens s t a b = HOLens (Const a) (Const b) (Const s) (Const t)` or similar and support less polym |
| 08:46:55 | <[Leary]> | orphic lenses. |
| 08:48:00 | → | Ellenor joins (ellenor@callbox.trd.is) |
| 08:48:01 | <mastarija> | [Leary]: But this won't work with existing utilities, right? |
| 08:50:28 | <mastarija> | Aha, it's not `a -> f b` but `a x -> f (b x)`... |
| 08:50:43 | × | opticblast quits (~Thunderbi@172.58.84.141) (Ping timeout: 276 seconds) |
| 08:50:47 | <mastarija> | Hm... looks interesting. |
| 08:51:50 | → | fnurglewitz joins (uid263868@id-263868.lymington.irccloud.com) |
| 08:53:41 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 08:54:17 | × | cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 08:57:11 | × | xff0x quits (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) (Ping timeout: 250 seconds) |
| 08:57:35 | → | xff0x joins (~xff0x@ai098135.d.east.v6connect.net) |
| 08:58:42 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 08:59:31 | → | aliosablack joins (~chomwitt@ppp-94-69-24-160.home.otenet.gr) |
| 09:00:08 | × | KabeloMsobomvuMo quits (~elevenkb@2001:470:69fc:105::2:cb89) (Quit: You have been kicked for being idle) |
| 09:00:10 | × | steve[m] quits (~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle) |
| 09:01:08 | <mastarija> | Any recommended polymorphic list library? |
| 09:01:25 | → | KabeloMsobomvuMo joins (~elevenkb@2001:470:69fc:105::2:cb89) |
| 09:01:27 | ← | KabeloMsobomvuMo parts (~elevenkb@2001:470:69fc:105::2:cb89) () |
| 09:01:32 | × | MajorBiscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Ping timeout: 265 seconds) |
| 09:01:40 | → | steve[m] joins (~stevetrou@2001:470:69fc:105::e0b) |
| 09:02:01 | × | chomwitt quits (~chomwitt@2a02:587:7a18:6d00:1ac0:4dff:fedb:a3f1) (Ping timeout: 265 seconds) |
| 09:04:30 | → | MajorBiscuit joins (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) |
| 09:06:44 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 09:08:18 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:09:19 | <lyxia> | base |
| 09:09:35 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 09:10:22 | × | razetime quits (~Thunderbi@117.254.34.249) (Quit: See You Space Cowboy) |
| 09:17:51 | <tomsmeding> | data HList l where HNil :: HList '[] ; HCons :: a -> HList l -> HList (a ': l) |
| 09:18:35 | <tomsmeding> | potentially s/HNil/End/; s/HCons/(:>)/ |
| 09:20:15 | × | aliosablack quits (~chomwitt@ppp-94-69-24-160.home.otenet.gr) (Quit: Leaving) |
| 09:20:23 | × | Umeaboy quits (~Umeaboy@94-255-145-133.cust.bredband2.com) (Quit: Leaving) |
| 09:22:12 | × | gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 09:22:19 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 09:26:51 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 09:27:06 | → | freeside joins (~mengwong@122.11.248.245) |
| 09:27:41 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:29:37 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:30:46 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 09:32:21 | → | cheater joins (~Username@user/cheater) |
| 09:37:41 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:38:50 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 09:39:01 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Remote host closed the connection) |
| 09:40:10 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 09:44:17 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 09:45:31 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:47:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:48:53 | → | NiceBird joins (~NiceBird@185.133.111.196) |
| 09:49:18 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 09:51:00 | → | jonathanx joins (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se) |
| 09:51:41 | × | Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Read error: Connection reset by peer) |
| 09:52:10 | → | Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius) |
| 09:52:46 | × | whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 09:53:31 | <jonathanx> | I've run into an issue with the arbitrary instance for UUID (from quickcheck-instances). I have a rose tree with records, where one of the fields is a UUID. I do a business logic check that none of them are identical (untrusted input). This is messing up my tests, since the arbitrary-generated Tree contains duplicate UUIDs |
| 09:54:22 | <jonathanx> | The Arbitrary instance for UUID gets four Word32 and combines them into a UUID, which should avoid collisions in theory |
| 09:55:05 | <jonathanx> | The problem might be quickcheck being clever and trying out some edge-cases such as 0 |
| 09:55:08 | × | ft quits (~ft@p3e9bc443.dip0.t-ipconnect.de) (Quit: leaving) |
| 09:55:47 | <jonathanx> | Is that a plausible source of the issue, and how do I make quickcheck stupider if that is the case? |
| 09:56:25 | <opqdonut> | yeah that sounds plausible |
| 09:56:35 | × | acidjnk_new quits (~acidjnk@p200300d6e715c44624b074cb2aeeb01b.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 09:56:38 | <opqdonut> | quickCheck uses a slowly-increasing "size" parameter for generating the cases |
| 09:57:02 | <opqdonut> | also, it can shrink the values on an error |
| 09:57:12 | <opqdonut> | either of those might cause duplicates |
| 09:59:11 | → | cheater_ joins (~Username@user/cheater) |
| 09:59:18 | <opqdonut> | you can use `resize` and `noShrinking` to override those |
| 10:00:07 | <opqdonut> | looks like the Arbitrary UUID has a shrink implementation, which might be causing the problem |
| 10:00:07 | <jonathanx> | resizing solved it :) |
| 10:00:11 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 10:00:15 | cheater_ | is now known as cheater |
| 10:01:03 | × | minol quits (~minol@58.247.98.202) (Quit: Ping timeout (120 seconds)) |
| 10:01:40 | <jonathanx> | Many thanks |
| 10:06:20 | <dminuoso> | jonathanx: You might want a more elaborate Arbitrary instance on the outer types that has some `suchThat` guaranteesing they be different. |
| 10:06:31 | <dminuoso> | Otherwise you introduce such spurious errors |
| 10:07:12 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) |
| 10:09:59 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 250 seconds) |
| 10:10:40 | × | gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 10:11:52 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 10:12:00 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 10:12:35 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 250 seconds) |
| 10:15:52 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 268 seconds) |
| 10:16:37 | → | ubert1 joins (~Thunderbi@2a02:8109:abc0:6434:e47:2f53:4085:22b0) |
| 10:17:14 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 10:18:56 | × | jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 10:19:07 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 10:19:37 | × | phma quits (~phma@host-67-44-208-67.hnremote.net) (Read error: Connection reset by peer) |
| 10:20:02 | → | phma joins (phma@2001:5b0:2172:d248:f993:5086:a103:30f8) |
| 10:20:44 | → | acidjnk joins (~acidjnk@p200300d6e715c4465904287e9255905d.dip0.t-ipconnect.de) |
| 10:21:55 | × | freeside quits (~mengwong@122.11.248.245) (Ping timeout: 256 seconds) |
| 10:25:03 | → | Major_Biscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) |
| 10:26:38 | → | crazazy joins (~user@130.89.171.62) |
| 10:28:28 | × | gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 10:28:37 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 250 seconds) |
| 10:28:44 | × | MajorBiscuit quits (~MajorBisc@2001:1c00:2408:a400:67e:5371:52a7:9b9a) (Ping timeout: 246 seconds) |
| 10:30:21 | → | gurkenglas joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 10:30:34 | → | cheater_ joins (~Username@user/cheater) |
| 10:30:41 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 10:30:58 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 10:32:00 | → | cheater__ joins (~Username@user/cheater) |
| 10:33:25 | × | cheater quits (~Username@user/cheater) (Ping timeout: 276 seconds) |
| 10:34:11 | → | freeside joins (~mengwong@122.11.248.245) |
| 10:35:10 | → | cheater___ joins (~Username@user/cheater) |
| 10:35:10 | cheater___ | is now known as cheater |
| 10:35:36 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 10:36:05 | × | cheater__ quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 10:36:34 | → | cheater_ joins (~Username@user/cheater) |
| 10:39:16 | × | freeside quits (~mengwong@122.11.248.245) (Ping timeout: 276 seconds) |
| 10:39:38 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 10:39:48 | cheater_ | is now known as cheater |
| 10:40:54 | → | bhall joins (~brunohall@195.147.207.136) |
| 10:41:38 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 10:44:48 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 10:48:04 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 10:51:37 | Ellenor | is now known as AmyMalik |
| 10:56:23 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 10:58:23 | gurkenglas | is now known as Guest3950 |
| 10:58:23 | × | Guest3950 quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Killed (sodium.libera.chat (Nickname regained by services))) |
| 10:58:23 | gurkengl1s | is now known as gurkenglas |
| 10:58:42 | → | gurkengl1s joins (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) |
| 10:59:50 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 11:02:26 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 11:03:00 | → | slack1256 joins (~slack1256@186.11.43.166) |
| 11:03:12 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 11:03:18 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
| 11:04:00 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 11:04:25 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 11:05:10 | → | cheater joins (~Username@user/cheater) |
| 11:05:40 | → | freeside joins (~mengwong@122.11.248.245) |
| 11:09:08 | × | slack1256 quits (~slack1256@186.11.43.166) (Ping timeout: 265 seconds) |
| 11:09:48 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 11:10:06 | × | freeside quits (~mengwong@122.11.248.245) (Ping timeout: 265 seconds) |
| 11:16:42 | → | cheater joins (~Username@user/cheater) |
| 11:18:28 | → | cheater_ joins (~Username@user/cheater) |
| 11:21:44 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 11:21:54 | cheater_ | is now known as cheater |
| 11:31:07 | → | cheater_ joins (~Username@user/cheater) |
| 11:33:34 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 11:33:42 | cheater_ | is now known as cheater |
| 11:41:12 | → | ph88^ joins (~ph88@ip5b426553.dynamic.kabel-deutschland.de) |
| 11:47:54 | × | gurkengl1s quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 255 seconds) |
| 11:48:00 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 11:48:10 | × | gurkenglas quits (~gurkengla@dynamic-046-114-179-023.46.114.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 11:49:24 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds) |
| 11:49:29 | → | gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 11:49:33 | <mastarija> | Is there a way to get around conflicting family instance declarations when using type classes? |
| 11:49:45 | → | gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 11:49:52 | <mastarija> | I'd like to "overlapp" two type calss instances, problem is, they define a type family |
| 11:50:07 | <mastarija> | So there's a conflict with type families in case of overlapp |
| 11:50:28 | <L29Ah> | -XFlexibleInstances -XIncoherentInstances? |
| 11:50:52 | <tomsmeding> | mastarija: are you sure you need open type families? |
| 11:51:03 | <mastarija> | I don't know :) |
| 11:51:06 | <tomsmeding> | closed type families make this much easier, if they suffice for your purpose |
| 11:51:10 | <tomsmeding> | type family F a where ... |
| 11:51:18 | <lyxia> | generally overlap and type families don't mix well |
| 11:51:29 | <tomsmeding> | there the clauses need to all be in that one block, but they will be tried in-order from top to bottom |
| 11:51:49 | <tomsmeding> | so you don't have a coherence requirement |
| 11:52:44 | <mastarija> | I have a class e.g. `class X s where type family T s; doSomething :: T s -> s;` |
| 11:52:55 | <tomsmeding> | (presumably without the "family" there) |
| 11:52:56 | <mastarija> | Can't really modify it though. |
| 11:53:00 | <tomsmeding> | ah |
| 11:53:02 | <lyxia> | you often end up with stuck types when defining the corresponding instance though, so you end up having to repeat the relevant equation as a constraint |
| 11:53:40 | <tomsmeding> | if you can't modify the class then disregard my suggestion :) |
| 11:53:52 | <mastarija> | So I'm stuck with this, right? |
| 11:53:55 | × | crazazy quits (~user@130.89.171.62) (Ping timeout: 268 seconds) |
| 11:54:18 | <lyxia> | what are the overlapping instances you want to write |
| 11:54:18 | <mastarija> | I can only define a newtype wrapper or something. Or is there another way? |
| 11:54:18 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 11:55:16 | <mastarija> | I have one general instance for variants that makes the `T (x:xs) = x` |
| 11:55:34 | <mastarija> | So basically T is the type at the top level of a type level list. |
| 11:55:36 | <geekosaur> | if your desired setup requires a type family that returns different types for the same parameter type then you can't do it except by making one of them a newtype |
| 11:55:54 | <mastarija> | But I want to have one instance for a specific type level list. |
| 11:56:42 | <mastarija> | e.g. existing instance would convert `[Int, Bool, Char]` to Int |
| 11:57:17 | <mastarija> | But I want to have a specific instance for e.g. `[Char, Bool, Int]` that results in a `Maybe Float` |
| 11:58:48 | <geekosaur> | I think that's doable but you can't do it with an associated type? you would have to split it out into a standalone type family |
| 11:59:44 | <mastarija> | And put my case at the top, right? |
| 11:59:50 | <geekosaur> | yes |
| 12:02:01 | <mastarija> | geekosaur: But that would be a closed type family? I think I need open type family after all... |
| 12:02:28 | <geekosaur> | no, it should be doable as an open type family, I think |
| 12:03:03 | <geekosaur> | it just can't be done as an associated type family because too much of the type family machinery is "hidden" by the typeclass machinery |
| 12:03:47 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 12:03:52 | <geekosaur> | although if it's a type level list I'm not sure it needs to be open; you're missing only one case as described ('[]) |
| 12:04:23 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection) |
| 12:04:38 | <mastarija> | Ok. Maybe I've misunderstood what open and closed means. Closed means : all instances defined at the same place, Open means : I can define instance elsewhere in other modules? |
| 12:04:55 | <geekosaur> | yes |
| 12:05:27 | <geekosaur> | but it also depends on what you are defining. if it's type level lists then it only needs to be open if you have multiple such special cases defined in different places |
| 12:05:43 | → | jespada joins (~jespada@148.252.132.45) |
| 12:05:49 | <geekosaur> | and you will be sad in that case |
| 12:05:59 | <mastarija> | Ok. I'm sad then. |
| 12:06:03 | <mastarija> | :) |
| 12:06:25 | <mastarija> | For now, i only have one special case. But I might have a few more as I go. |
| 12:06:43 | <geekosaur> | (because they all need to be defined before the general case and you can't do that if they're spread over multiple modules) |
| 12:07:08 | <mastarija> | yeah. |
| 12:07:23 | <mastarija> | Welp, time to rethink everything. |
| 12:08:07 | <geekosaur> | also they all need to be visible before the general case or the general case will be used when you don't want it |
| 12:10:17 | <geekosaur> | (I think there's still an incoherence bug open about that in ghc because you could have a definition with a different type somewhere that can't be checked) |
| 12:10:31 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 12:12:35 | → | notzmv joins (~zmv@user/notzmv) |
| 12:19:07 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 12:29:02 | × | bitdex_ quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:31:53 | <dminuoso> | Is there a sleek way to get a timeout on resource acquisition with resource-pool? |
| 12:34:31 | <dminuoso> | The resource-pool is filled with mvars and uninterruptible masks, that its really not obvious whether there is a safe interface for this. |
| 12:40:11 | → | cheater_ joins (~Username@user/cheater) |
| 12:41:49 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 12:41:56 | cheater_ | is now known as cheater |
| 12:44:31 | <merijn> | dminuoso: recent version has a "try" based API, maybe that lets you distinguish what you want? |
| 12:45:31 | <dminuoso> | merijn: Not quite, I would like a kind of tryWithResourceTimeout :: Pool a -> Int -> (a -> IO r) -> IO (Maybe r) |
| 12:45:43 | × | Cale quits (~cale@cpe80d04ade0a03-cm80d04ade0a01.cpe.net.cable.rogers.com) (Ping timeout: 268 seconds) |
| 12:45:59 | <dminuoso> | I mean I could do a kind of spinning tryWithResource, but that feels like a waste |
| 12:46:42 | <dminuoso> | An alternative I've pondered about was starting a canceallable timer that is aborted on the callback |
| 12:53:05 | × | jespada quits (~jespada@148.252.132.45) (Read error: Connection reset by peer) |
| 12:53:32 | → | jespada joins (~jespada@148.252.132.45) |
| 12:59:51 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 13:03:36 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 13:03:46 | → | cheater joins (~Username@user/cheater) |
| 13:08:19 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 13:09:21 | → | freeside joins (~mengwong@103.252.202.85) |
| 13:10:21 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) |
| 13:14:51 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 248 seconds) |
| 13:15:11 | × | gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 264 seconds) |
| 13:15:46 | → | coot joins (~coot@213.134.171.3) |
| 13:15:53 | × | bhall quits (~brunohall@195.147.207.136) (Ping timeout: 250 seconds) |
| 13:15:55 | × | gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 13:16:33 | → | bhall joins (~brunohall@195.147.207.136) |
| 13:19:57 | → | cheater_ joins (~Username@user/cheater) |
| 13:20:51 | → | thyriaen joins (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1) |
| 13:21:22 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 13:21:22 | cheater_ | is now known as cheater |
| 13:22:30 | × | thegeekinside quits (~thegeekin@189.217.80.156) (Read error: Connection reset by peer) |
| 13:28:40 | → | bgs joins (~bgs@212-85-160-171.dynamic.telemach.net) |
| 13:31:46 | → | cheater_ joins (~Username@user/cheater) |
| 13:35:35 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 13:35:45 | cheater_ | is now known as cheater |
| 13:38:08 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 246 seconds) |
| 13:38:25 | × | jespada quits (~jespada@148.252.132.45) (Ping timeout: 250 seconds) |
| 13:41:45 | → | lomilomi joins (~Thunderbi@155.133.70.5) |
| 13:42:29 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 13:43:46 | × | smallville7123 quits (~Android@2001:8004:4441:8fd2:47d8:ec3c:8ede:6ae5) (Read error: Connection reset by peer) |
| 13:45:29 | → | jespada joins (~jespada@148.252.132.45) |
| 13:46:16 | → | jero98772 joins (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) |
| 13:49:46 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 13:49:59 | × | monoidal quits (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 13:50:34 | → | monoidal joins (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) |
| 13:51:00 | → | cheater_ joins (~Username@user/cheater) |
| 13:51:19 | <merijn> | So...is there a Verse paper yet anywhere? I couldn't quickly find anything using google and SPJ's Haskell Exchange was a bit light on details |
| 13:51:47 | × | ph88^ quits (~ph88@ip5b426553.dynamic.kabel-deutschland.de) (Quit: Leaving) |
| 13:52:40 | <monoidal> | https://simon.peytonjones.org/verse-calculus/ |
| 13:52:55 | <monoidal> | I'm only aware of this draft |
| 13:54:27 | × | cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 13:54:30 | → | smallville7123 joins (~Android@2001:8004:4440:2268:bfb9:bd3c:9c29:da7d) |
| 13:54:35 | cheater_ | is now known as cheater |
| 13:55:10 | <monoidal> | It's dated March23 so probably that's the newest thing there is |
| 13:57:05 | → | cheater_ joins (~Username@user/cheater) |
| 13:57:59 | × | ddellacosta quits (~ddellacos@146.70.165.157) (Quit: WeeChat 3.8) |
| 13:58:59 | → | ddellacosta joins (~ddellacos@146.70.165.157) |
| 13:59:33 | × | monoidal quits (~monoidal@2a01cb0801ce4b00d527b7fc1dd66747.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 14:00:23 | <merijn> | That is...some list of authors |
| 14:00:39 | × | cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds) |
| 14:00:40 | cheater_ | is now known as cheater |
| 14:01:40 | <merijn> | Well, let's see if I can fry my brain with this during the coming week :p |
| 14:01:53 | → | monoidal joins (~monoidal@2a01cb0801ce4b0038ab7da82b18adcb.ipv6.abo.wanadoo.fr) |
| 14:06:41 | → | cheater_ joins (~Username@user/cheater) |
| 14:07:04 | → | sidy joins (~sidy@user/sidy) |
| 14:08:34 | × | smallville7123 quits (~Android@2001:8004:4440:2268:bfb9:bd3c:9c29:da7d) (Read error: Connection reset by peer) |
| 14:08:58 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 14:09:06 | cheater_ | is now known as cheater |
| 14:10:41 | × | acidjnk quits (~acidjnk@p200300d6e715c4465904287e9255905d.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 14:17:57 | → | thegeekinside joins (~thegeekin@189.217.80.156) |
| 14:20:20 | × | vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection) |
| 14:20:58 | → | vglfr joins (~vglfr@91.102.183.234) |
| 14:21:40 | → | MacSlow joins (~MacSlow@p57bb2fc5.dip0.t-ipconnect.de) |
| 14:21:47 | <MacSlow> | Greetings everybody! |
| 14:22:42 | <MacSlow> | ups :) |
| 14:24:14 | → | use-value1 joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) |
| 14:24:55 | × | vglfr quits (~vglfr@91.102.183.234) (Remote host closed the connection) |
| 14:25:23 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:e8b8:bba:4009:f9b7) (Ping timeout: 264 seconds) |
| 14:25:24 | use-value1 | is now known as use-value |
| 14:25:40 | → | vglfr joins (~vglfr@91.102.183.234) |
| 14:25:47 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:26:11 | × | jespada quits (~jespada@148.252.132.45) (Read error: Connection reset by peer) |
| 14:33:05 | <tomsmeding> | merijn: not only some list of authors, also some number of pages, phew |
| 14:33:34 | <merijn> | tomsmeding: This is gonna be like that time I (tried to) read pigworker's thesis all over again... |
| 14:33:36 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 14:34:07 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 14:36:24 | → | cheater_ joins (~Username@user/cheater) |
| 14:36:35 | <merijn> | tomsmeding: tbf the paper ends at page 25 |
| 14:36:39 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 14:36:40 | cheater_ | is now known as cheater |
| 14:36:41 | <tomsmeding> | true |
| 14:37:34 | <merijn> | But I'm intrigued. I understand what the ambitious goal is, I just don't understand quite yet how verse contributes to that goal :p |
| 14:43:00 | × | phma quits (phma@2001:5b0:2172:d248:f993:5086:a103:30f8) (Read error: Connection reset by peer) |
| 14:43:48 | → | phma joins (~phma@host-67-44-208-67.hnremote.net) |
| 14:51:36 | → | cheater_ joins (~Username@user/cheater) |
| 14:53:08 | × | kimjetwav quits (~user@2607:fea8:235e:b600:86cc:d332:aa2a:c88a) (Remote host closed the connection) |
| 14:53:23 | → | kimjetwav joins (~user@2607:fea8:235e:b600:904e:e9db:46f6:ca3a) |
| 14:53:49 | × | cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 14:53:51 | cheater_ | is now known as cheater |
| 14:58:15 | <kuribas> | to me verse looks like a very interesting project on it's own, but not very fitting for the target audience, which is game developers. |
| 14:59:24 | → | gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 15:01:17 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 15:01:54 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 15:04:25 | → | gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 15:10:30 | <merijn> | kuribas: they're not targetting *current* game developers |
| 15:11:29 | <EvanR> | unfortunately no one can be told what the Verse is. It must be experienced for yourself |
| 15:11:33 | <merijn> | If you listen to their vision it's very clear what the goal is and games development in their current form is largely unrelated |
| 15:12:04 | <merijn> | kuribas: So, I very distinctly recall being very into MUDs 20 years ago and playing with a bunch of them that allowed users to "create" their own objects/spells/whatever |
| 15:12:24 | <EvanR> | lambdaMOO |
| 15:12:30 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:f353:905c:faa4:880f) (Quit: WeeChat 2.8) |
| 15:12:44 | <merijn> | The problem is that generally you're limited to a handful of builtin operations (think DSL) OR "essentially evaling completely unsafe code in an unknown environment" |
| 15:13:30 | <merijn> | kuribas: to me it is very clear that the "open metaverse" Sweeney imagines is very much "let any 3rd party extend and add their own kinda logic/things to a persistent world" |
| 15:13:39 | <merijn> | kuribas: Which gives rise to several fundamental problems |
| 15:14:06 | <merijn> | 1) how do you update/fix code in some persistent world where it might already be running somewhere outside your control? |
| 15:14:53 | <mauke> | that's a solved problem! just look at how smart contracts work |
| 15:14:58 | <mauke> | *crashes and burns* |
| 15:15:01 | <EvanR> | you're limited to a "handful" of built-in operations when you use the normal OS. LambdaMOO's OS was just limited to what was relevant in a MUD context. With safeguards and security measures you'd expect |
| 15:15:02 | <[exa]> | lol |
| 15:15:05 | <merijn> | 2) how do you write code/logic to operate things on a world that may contain in any arbitrary object that you can't/don't know ahead of time and get sensible semantics beyond simply crashing (i.e. an open world assumption ala Haskell's typeclasses, but for everything) |
| 15:15:21 | <[exa]> | merijn: you can run a small z80 in that world |
| 15:15:27 | <[exa]> | I already saw it somewhere |
| 15:15:28 | <merijn> | Now, I don't quite understand how Verse addresses these things |
| 15:15:48 | <merijn> | but I understand the goal and the problems, so I'm intrigued how they think Verse will address these |
| 15:16:34 | <EvanR> | the issue wouldn't be with needing security and safety measures and ownership regimes, but making that distributed instead of centralized |
| 15:18:00 | <kuribas> | merijn: I don't see how pervasive logic variables come into that. |
| 15:18:04 | <EvanR> | simply crashing got us this far, i.e. HTTP's 404 |
| 15:18:49 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 15:19:08 | <merijn> | EvanR: I mean, there's a million other problems with the whole vision of an open "metaverse", sure |
| 15:19:30 | <merijn> | EvanR: But we can (hopefully?) agree that classical languages/game design are definitely *not suited* |
| 15:19:41 | <kuribas> | merijn: like pervasive lazyness, it's nice conceptually, but a big headach for something practice. |
| 15:19:56 | <merijn> | I don't have any strong opinions on whether Verse *is* suited, I'm just excited that someone is thinking about this *seriously* |
| 15:20:05 | <kuribas> | merijn: and I don't see how logic variables give you these garantees. |
| 15:20:35 | <merijn> | Like, look at that author list, that's some serious thinking about "how and what" Epic is paying for |
| 15:21:01 | <EvanR> | if you consider classical game programming is be a highly flexible and barely scientific endeavour, it's hard to see how anything could be ill suited if it worked xD |
| 15:21:10 | <merijn> | kuribas: I don't either, because I haven't read that paper yet. But I'm just assuming that the authors *do* see something in them that helps :p |
| 15:21:29 | <[exa]> | hey guys do you know how many lines of scripting code is behind some past titles, say that Horizon thing |
| 15:22:05 | <[exa]> | I mean the _scripting_ code, which is created and copypasted around by content developers (not necessarily programmers) |
| 15:22:07 | <merijn> | I mean, something like Second Life, roblox, or Gary's Mod is probably a more relevant example |
| 15:23:02 | <EvanR> | minecraft redstone circuitry is clearly a good compromise to base the future on imo |
| 15:23:40 | <merijn> | actually something like "minecraft, but extensible in game with extensions by authors who don't know each other" seems like a good starting viewpoint |
| 15:24:05 | <EvanR> | the MOO model did that |
| 15:24:15 | <EvanR> | thanks xerox |
| 15:24:23 | <merijn> | EvanR: Most MOOs were fairly limited still |
| 15:24:31 | <kuribas> | skyrim is one of the most buggy environments, still everyone is modding it. |
| 15:24:57 | <merijn> | kuribas: That does not seem directly relevant? |
| 15:25:10 | <xerox> | EvanR: you're welcome |
| 15:25:25 | <jean-paul[m]> | amateurs have an extremely high tolerance for bad technology |
| 15:25:26 | <jean-paul[m]> | (is the relevance, maybe) |
| 15:25:41 | <EvanR> | merijn, specifically lambdaMOO which is still running. What specifically is limited here? |
| 15:25:42 | <[exa]> | kuribas: did you play cyberpunk? :D |
| 15:26:37 | <EvanR> | someone built an entire MUD within it for some reason |
| 15:26:52 | <EvanR> | seemed a bit out of place but why not |
| 15:29:17 | <merijn> | EvanR: You're limited by the MOO language. At least, when I first looked into MOOs a lot them were rather limited |
| 15:29:29 | <EvanR> | the lambdaMOO languages was basically C |
| 15:29:32 | <EvanR> | language |
| 15:30:02 | <EvanR> | not a functional language by any means, but through objects you could get the same benefits ish |
| 15:30:11 | <kuribas> | [exa]: no, but I played the witcher. |
| 15:30:29 | <witcher> | :) |
| 15:30:42 | <EvanR> | it's turing complete, so I'm still not clear on the limitation you are getting at |
| 15:31:06 | <EvanR> | inconvenient to use like a turing tarpit? |
| 15:31:14 | <EvanR> | (it wasn't really) |
| 15:32:18 | <EvanR> | I guess it would be possible implement a compiler within the system if you wanted to use a different language |
| 15:32:39 | × | MacSlow quits (~MacSlow@p57bb2fc5.dip0.t-ipconnect.de) (Quit: leaving) |
| 15:33:01 | <kuribas> | merijn: I just wonder how much more stable skyrim would be with a static functional scripting language. |
| 15:33:20 | <kuribas> | merijn: But then it could be the 3D engine which is buggy as well. |
| 15:33:21 | <merijn> | EvanR: I don't remember which MOO I looked at and also this was years ago, so :p |
| 15:33:45 | <merijn> | kuribas: I mean, given that bethesda appears to just be kinda bad at software probably not much :p |
| 15:34:12 | <EvanR> | then you should check out the lambdaMOO system so we can all better judge modern attempts to recreate it xD |
| 15:34:21 | × | Major_Biscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Ping timeout: 246 seconds) |
| 15:34:38 | <EvanR> | it's possible for random people from the internet to log in right now and start programming stuff |
| 15:34:39 | <dminuoso> | Is there something like TQueue that have something like `takeTSomething :: TSomething a -> Int -> STM [a]`? |
| 15:35:55 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 15:36:10 | <dminuoso> | Or should I just maintain two TQueues, with a worker that continuously flushTQueues one, and pushes chunks onto a second TQueue? |
| 15:36:12 | <EvanR> | isn't that just replicateM take from queue |
| 15:37:08 | <dminuoso> | What do you mean by `queue`? |
| 15:37:11 | <dminuoso> | And `take`? |
| 15:38:51 | → | Major_Biscuit joins (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) |
| 15:39:01 | <mauke> | :t \n -> replicateM n . readTQueue |
| 15:39:02 | <lambdabot> | error: |
| 15:39:02 | <lambdabot> | Variable not in scope: readTQueue :: a -> m a1 |
| 15:39:07 | <[exa]> | kuribas: witchr is relatively bugfree. :] |
| 15:41:24 | <EvanR> | SPJ works at epic games? wtf |
| 15:41:36 | <merijn> | EvanR: Yes, since 2021 |
| 15:41:40 | <merijn> | Lennart too |
| 15:41:42 | <[exa]> | anyway yeah the problem now is that the in-game scripty codebase is millions of lines, and whoever is able to ship out more bugfree contents wins |
| 15:42:09 | × | anpad quits (~pandeyan@user/anpad) (Read error: Connection reset by peer) |
| 15:42:29 | <merijn> | EvanR: Right, so if I make a wand that access a property/function of an object that doesn't have that implemented, what happens? If I release a version 2.0 of my wand with new/updated code, how is that dealt with? |
| 15:42:47 | <kuribas> | [exa]: I heared it was bug ridden when first released. |
| 15:43:01 | <EvanR> | the wand accesses a property on another object? |
| 15:43:15 | <EvanR> | a property that doesn't exist yet? |
| 15:43:16 | <merijn> | EvanR: Well, I want it to interact with the world, yes? |
| 15:43:39 | <merijn> | but not the entire world might conform to what I expect |
| 15:43:40 | <EvanR> | one convenient is to not access the property directly but use a verb on the target object |
| 15:43:46 | <EvanR> | convention |
| 15:43:51 | <kuribas> | I read about ECS (Entity Component System), which is used for performance, I wonder if you could make a nice safe combinator library on top of it. |
| 15:43:56 | <merijn> | EvanR: And what happens if the verb doesn't work/exist? |
| 15:44:10 | <merijn> | kuribas: There's already at least 1 ECS system in haskell |
| 15:44:18 | <merijn> | with some amount of type safety |
| 15:44:29 | <kuribas> | merijn: is it performant? |
| 15:44:34 | <merijn> | dunno |
| 15:44:43 | <kuribas> | and does it avoid type level hackery? |
| 15:44:49 | <merijn> | kuribas: https://hackage.haskell.org/package/apecs |
| 15:44:52 | <EvanR> | if you own that object or object's progenitor you could add it. If you don't you could talk to the person about it, if they say no you could create your own version of that object |
| 15:45:02 | <EvanR> | which is compatible with the wand |
| 15:45:44 | <EvanR> | like a "subclass" (they don't actually have classes as such in lambdaMOO though) |
| 15:45:55 | <EvanR> | more like prototypal inheritance |
| 15:45:57 | <merijn> | EvanR: well, that brings us back to the "how do you evolve code overtime when old versions may exist in a persistent system" issue |
| 15:46:26 | <c_wraith> | merijn: aka, the reason smalltalk terrifies me |
| 15:46:34 | <EvanR> | if the maintainer disappears you have no choice but to go the embrace extend and extinguish route |
| 15:46:44 | <EvanR> | just like IRL |
| 15:46:59 | <merijn> | EvanR: So the goal of Verse is to design a system with sensible semantics for versioning in a persistent setting and sensible "failure" (i.e. not crash) when interacting with components not conforming to your expectations |
| 15:47:33 | <EvanR> | if it solves this specific problem that would revolutionize everything not just skyrim xD |
| 15:47:54 | <merijn> | EvanR: And the fact that they're willing to pay, like, SPJ, Lennart, and a bunch of other people to think about it hard is itself intriguing |
| 15:48:33 | <EvanR> | but I'm not surprised about the supposed context because skyrim probably gets a lot more funding than a lot of academic stuff xD |
| 15:49:28 | <merijn> | EvanR: Well yes, clearly Sweeney has read a bunch cyberpunk novels where all kinds of 3rd party code interacts with eachother magically producing sane semantics in a single persistent metaverse-y thing. And I find willingness to invest how such an open thing could/would work infinitely more interesting than facebook's walled garden metaversa >.> |
| 15:49:58 | → | acidjnk joins (~acidjnk@p200300d6e715c49529b622cef8024c18.dip0.t-ipconnect.de) |
| 15:50:48 | <EvanR> | to be clear replacing objects with one maintained by a new group would also be practical given lambdaMOOs model. After your new object is ready you can go through and clean up the instances of the old objects, since it's likely anyone can "move" them |
| 15:51:00 | <EvanR> | if not, they was just bad design |
| 15:51:03 | <EvanR> | that* |
| 15:51:53 | × | NiceBird quits (~NiceBird@185.133.111.196) (Ping timeout: 250 seconds) |
| 15:51:57 | <EvanR> | if it's less like a physical object and more like a library that exists in the ether, and everything depends on it, that's another story and I'm curious how you would fix THAT |
| 15:52:16 | <merijn> | I'm skeptical whether they will pull it off with any amount of success. And I don't quite understand yet how exactly Verse is supposed to solve them. But at least it's more interesting than that 37th JS sugar language :p |
| 15:52:59 | <EvanR> | *but my new concrete syntax for `function(){' in js can't be denied* |
| 15:55:01 | <EvanR> | does all this play into a larger narrative about how programming languages (haskell notwithstancing) are mainly designed by 1 person for use by 1 person at a time, but in reality large programs are really written by a huge team who can't really coordinate |
| 15:55:48 | <merijn> | EvanR: I mean, Scheme was also a committee effort :p |
| 15:56:51 | <EvanR> | scheme is also pretty cool. Three cheers for committees!!!? |
| 15:58:22 | <merijn> | The conclusion is "sitting down and thinking hard before doing something can pay off" :p |
| 15:58:36 | → | cheater_ joins (~Username@user/cheater) |
| 15:58:59 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 15:59:00 | cheater_ | is now known as cheater |
| 15:59:20 | → | jespada joins (~jespada@148.252.132.45) |
| 16:00:01 | <EvanR> | "ECS is used for performance" (i.e. ECS stands for "just use arrays for everything") is kind of like saying linear types are for performance |
| 16:01:07 | <kuribas> | EvanR: I was thinking more about data oriented design. |
| 16:01:19 | <kuribas> | Which isn't the same as ECS, but works well with it. |
| 16:01:23 | <EvanR> | ECS the organization principle regardless of implementation would have benefits for a huge team who can't really coordinate |
| 16:02:34 | <kuribas> | But yeah, the relational model for ECS can be used outside game programming. |
| 16:03:01 | → | y04nn joins (~username@2a03:1b20:5:f011::aaae) |
| 16:03:03 | × | lomilomi quits (~Thunderbi@155.133.70.5) (Quit: lomilomi) |
| 16:03:07 | <kuribas> | Instead of having all attirbutes for an object in one place, to have a relational model, makes a lot of sense. |
| 16:03:30 | → | cheater_ joins (~Username@user/cheater) |
| 16:04:34 | <kuribas> | And I am convinced such relational modelling leads to more flexible programs. |
| 16:04:52 | <EvanR> | I'm convinced such relational modelling could benefit from an actual type system |
| 16:04:59 | <kuribas> | While OO leads to rigid, hard to maintain programming. |
| 16:05:13 | <kuribas> | EvanR: certainly |
| 16:05:24 | <EvanR> | the default is "anything can have any attribute, or be missing that attribute, good luck" |
| 16:05:39 | <kuribas> | yeah, that is error prone. |
| 16:05:47 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 16:06:36 | → | cheater__ joins (~Username@user/cheater) |
| 16:06:36 | cheater__ | is now known as cheater |
| 16:06:38 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 16:08:54 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 16:09:22 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 16:09:42 | → | cheater__ joins (~Username@user/cheater) |
| 16:11:02 | → | cheater_ joins (~Username@user/cheater) |
| 16:11:23 | × | cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds) |
| 16:11:26 | cheater_ | is now known as cheater |
| 16:12:42 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 16:12:52 | → | Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
| 16:14:20 | × | cheater__ quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 16:17:34 | × | jespada quits (~jespada@148.252.132.45) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:20:07 | × | coot quits (~coot@213.134.171.3) (Quit: coot) |
| 16:22:20 | → | cheater_ joins (~Username@user/cheater) |
| 16:22:51 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 255 seconds) |
| 16:23:22 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 16:24:31 | → | cheater__ joins (~Username@user/cheater) |
| 16:24:32 | cheater__ | is now known as cheater |
| 16:26:14 | → | cheater__ joins (~Username@user/cheater) |
| 16:27:13 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds) |
| 16:27:47 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 16:28:59 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 16:29:00 | cheater__ | is now known as cheater |
| 16:29:33 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) |
| 16:32:55 | → | econo joins (uid147250@user/econo) |
| 16:33:28 | → | stackdroid18 joins (14094@de1.hashbang.sh) |
| 16:44:04 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:46:07 | <dminuoso> | I have a Haskell binary that consumes 100% cpu time. Trying to debug with gdb right now yields not much information: https://gist.github.com/dminuoso/8f72ce7c27b6585cb9488fb7ccc603bc |
| 16:46:13 | <dminuoso> | Why am I not seeing any useful stack traces here? |
| 16:46:59 | × | cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 16:47:18 | <dminuoso> | Or here is the output in a better form: https://gist.github.com/dminuoso/9785a1799216d8d376cf6f4d7d56795e |
| 16:47:19 | → | cheater joins (~Username@user/cheater) |
| 16:48:06 | <mauke> | because that's the C stack |
| 16:48:16 | <mauke> | which apparently only contains bits of the runtime system |
| 16:48:36 | <sm> | you need a dwarf but have not uttered the right incantation ? |
| 16:48:43 | <dminuoso> | I guess so |
| 16:49:04 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 16:49:43 | <dminuoso> | Im passing -g3 to the executable |
| 16:49:46 | <mauke> | I'm not sure how to instrument haskell code so it can provide usable traces of what it's doing |
| 16:49:47 | <dminuoso> | I thought this would be enough |
| 16:51:50 | <mauke> | it might be a better idea to build the code with profiling support |
| 16:52:05 | <mauke> | the part that consumes 99% of the runtime is the one with the busy loop |
| 16:52:34 | <dminuoso> | Mmm I guess that works too |
| 16:52:42 | <dminuoso> | Though I would really like to be able to gdb this thing. |
| 16:54:24 | <sm> | are you seeing similar results to what's shown in https://downloads.haskell.org/ghc/latest/docs/users_guide/debug-info.html ? |
| 16:54:36 | <dminuoso> | Not at all |
| 16:54:39 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:55:00 | → | coot joins (~coot@213.134.171.3) |
| 17:00:30 | → | enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
| 17:01:39 | × | coot quits (~coot@213.134.171.3) (Quit: coot) |
| 17:03:00 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 17:06:42 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 17:07:17 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 250 seconds) |
| 17:07:41 | <kuribas> | EvanR: does the haskell ECR system use a typed approach? |
| 17:07:56 | <kuribas> | EvanR: for attributes I mean? |
| 17:08:21 | <EvanR> | ECS? |
| 17:08:36 | <kuribas> | yeah |
| 17:09:45 | <EvanR> | I've never looked into those |
| 17:11:01 | <EvanR> | https://github.com/jonascarpay/apecs/blob/master/examples/Shmup.md |
| 17:11:51 | → | cheater_ joins (~Username@user/cheater) |
| 17:13:16 | <mastarija> | So, let's say I have a list like this one: [(a, b)] |
| 17:13:27 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 17:13:34 | <mastarija> | And a function `f :: a -> s (f b)` |
| 17:13:36 | cheater_ | is now known as cheater |
| 17:13:48 | <mastarija> | Where s and f are a monad / applicative |
| 17:14:17 | <mastarija> | is there an elegant way to get `s (f [(a, b)]`? |
| 17:14:46 | <mastarija> | I can do `S [( f a, b)]` with `mapMOf` |
| 17:14:56 | <mastarija> | From the lens package. |
| 17:15:02 | <mauke> | pure . pure |
| 17:15:15 | <mastarija> | But I'm not sure how to sequence `f` out of the first element of a list. |
| 17:16:07 | <kuribas> | mastarija: what happens to the 'b' in the first list? |
| 17:16:14 | <mastarija> | something like `mapMOf (traverse . _1) f myList` and then sequence again? |
| 17:16:33 | <mastarija> | kuribas: it's left untouched. |
| 17:16:50 | <mauke> | :t pure . pure :: (Monad s, Monad f) => [(a, b)] -> s (f [(a, b)]) |
| 17:16:51 | <lambdabot> | (Monad s, Monad f) => [(a, b)] -> s (f [(a, b)]) |
| 17:16:59 | <kuribas> | mastarija: then why do you generate a new 'b'? |
| 17:17:22 | <mastarija> | I don't. |
| 17:17:36 | <EvanR> | good one mauke |
| 17:17:43 | <mauke> | ? |
| 17:18:02 | <mastarija> | I just want to wrapp it in the `f` after I apply `f :: a -> `s (f a)`` |
| 17:18:08 | → | slack1256 joins (~slack1256@186.11.43.166) |
| 17:18:17 | <mauke> | where did you get that other f function? |
| 17:18:26 | <mastarija> | I've defined it. |
| 17:18:36 | <mauke> | you can't define two functions that are both called f |
| 17:18:46 | <kuribas> | mastarija: you had "a -> s (f b)" |
| 17:18:47 | <mastarija> | They are the same function. |
| 17:18:57 | <mauke> | they have different types; they can't be the same function |
| 17:19:07 | <mastarija> | yeah, wrong signature |
| 17:19:09 | <mastarija> | my bad |
| 17:19:09 | <kuribas> | :t first |
| 17:19:10 | <lambdabot> | Arrow a => a b c -> a (b, d) (c, d) |
| 17:19:13 | <mastarija> | it's `a` |
| 17:20:19 | <mastarija> | Maybe something like this? `theList & mapMOf (traverse . _1) f & fmap (sequenceAOf (traverse . _1))` |
| 17:21:05 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 17:21:36 | <mauke> | :t mapM (\(ma, b) -> flip (,) b <$> ma) |
| 17:21:37 | <lambdabot> | (Traversable t, Monad m) => t (m a, b) -> m (t (a, b)) |
| 17:22:01 | <mauke> | :t traverse (\(ma, b) -> flip (,) b <$> ma) |
| 17:22:02 | <lambdabot> | (Traversable t, Applicative f) => t (f a, b) -> f (t (a, b)) |
| 17:22:20 | <kuribas> | :t \f -> getCompose . ((traverse . _1) (Compose . f)) |
| 17:22:21 | <lambdabot> | error: |
| 17:22:21 | <lambdabot> | Variable not in scope: getCompose :: f0 (t b0) -> c |
| 17:22:22 | <lambdabot> | error: |
| 17:22:29 | <kuribas> | :t \f -> runCompose . ((traverse . _1) (Compose . f)) |
| 17:22:30 | <lambdabot> | error: |
| 17:22:30 | <lambdabot> | Variable not in scope: runCompose :: f0 (t b0) -> c |
| 17:22:30 | <lambdabot> | error: |
| 17:22:55 | <mastarija> | Can we import stuff from hackage with lambdabot? :) |
| 17:23:55 | × | gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 17:24:27 | × | gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 268 seconds) |
| 17:25:13 | × | mbuf quits (~Shakthi@49.207.178.186) (Quit: Leaving) |
| 17:25:35 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
| 17:26:39 | <kuribas> | f -> getCompose . ((traverse . _1) (Compose . f)) :: forall {k1} {t :: * -> *} {f :: k1 -> *} {g :: * -> k1} {a1} {b1} {a2} {b2}. (Traversable t, Applicative (Compose f g), Field1 a1 b1 a2 b2) => (a2 -> f (g b2)) -> t a1 -> f (g (t b1)) |
| 17:26:39 | <kuribas> | |
| 17:27:13 | <kuribas> | that should work :) |
| 17:27:16 | → | gurkenglas joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 17:27:17 | → | gurkengl1s joins (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) |
| 17:28:07 | <dminuoso> | mastarija: the type of f confuses me. |
| 17:28:18 | <mastarija> | It's some applicative. |
| 17:28:24 | <mastarija> | And `s` also. |
| 17:28:28 | <dminuoso> | Sure, lets pick upper letters for concrete types, perh aps. |
| 17:29:03 | <dminuoso> | So say `f :: forall a b. a -> S (F b)` with `instance Monad S` and `instance Monad F` right? |
| 17:29:07 | <mastarija> | ok, f :: a -> (State Int (Const a)) |
| 17:29:16 | <mastarija> | or what you've said :) |
| 17:29:25 | <dminuoso> | Well, Im a bit curious about quantification here. |
| 17:29:32 | × | codaraxis__ quits (~codaraxis@user/codaraxis) (Quit: Leaving) |
| 17:29:37 | <mastarija> | There's only 'a' |
| 17:29:44 | <mastarija> | It was a mistake in my first example |
| 17:30:01 | <mastarija> | `b` is just in the second element in the list. |
| 17:30:03 | <dminuoso> | Okay, that resolves the mystery then. |
| 17:30:11 | <dminuoso> | So `f :: forall a. a -> S (F a)`? |
| 17:30:12 | × | nschoe quits (~q@141.101.51.197) (Ping timeout: 264 seconds) |
| 17:30:17 | <mastarija> | I yes |
| 17:30:38 | × | monoidal quits (~monoidal@2a01cb0801ce4b0038ab7da82b18adcb.ipv6.abo.wanadoo.fr) (Quit: Client closed) |
| 17:30:58 | <mastarija> | Sorry for the confusion :) |
| 17:31:05 | <dminuoso> | kuribas last answer is indeed spot on then. |
| 17:31:53 | <mastarija> | hm... |
| 17:32:21 | <dminuoso> | The relevant observation here is that unlike Monads, the composition of two applicatives gives another applicative. |
| 17:32:27 | <mastarija> | That's a bit too advanced for me xD |
| 17:32:40 | <dminuoso> | mastarija: Okay lets make it a bit simpler |
| 17:33:19 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 276 seconds) |
| 17:33:41 | <dminuoso> | instance (Alternative f, Applicative g) => Alternative (f :.: g) |
| 17:33:55 | <dminuoso> | This says: the composition of two applicatives gives rise to another applicative. |
| 17:34:00 | <mastarija> | Aha, so `Compose` composes two nested Applicatives into 1? |
| 17:34:04 | <dminuoso> | Yes |
| 17:34:10 | <dminuoso> | its just a newtype wrapper |
| 17:34:21 | <dminuoso> | that gives you access to instances for the "type level composition" of two things. |
| 17:34:33 | <dminuoso> | 18:33:40 dminuoso | instance (Alternative f, Applicative g) => Alternative (f :.: g) |
| 17:34:41 | <dminuoso> | Think of Compose as just a synonym for :.: |
| 17:34:59 | <dminuoso> | I think the version from GHC.Generics reads *much* nicer and is more obvious, but in practice you only see Compose around. |
| 17:35:19 | <mastarija> | Would my previous solution work? |
| 17:35:29 | <mastarija> | `theList & mapMOf (traverse . _1) f & fmap (sequenceAOf (traverse . _1))` |
| 17:35:42 | <mastarija> | I'm assuming it would traverse twice |
| 17:36:05 | <dminuoso> | Ohh sorry I miscopied above |
| 17:36:09 | <dminuoso> | (Applicative f, Applicative g) => Applicative (f :.: g)\ |
| 17:36:10 | <mastarija> | while kuribas's solution only traverses once. |
| 17:36:19 | <dminuoso> | Well, not really |
| 17:36:51 | <dminuoso> | It just hides this behind the instance (Applicative f, Applicative g) => Applicative (Compose f g) |
| 17:37:10 | <mastarija> | But it still traverses twice? |
| 17:37:13 | <dminuoso> | Compose f <*> Compose x = Compose (liftA2 (<*>) f x) |
| 17:37:16 | <dminuoso> | Well sort of |
| 17:38:09 | <dminuoso> | mastarija: Oh let me change my answer. Yes, kuribas solution traverses only once. |
| 17:38:44 | <dminuoso> | The real trick in kuribas answer likes in how lens really works underneath |
| 17:38:54 | <dminuoso> | Compose is only the simpler part of it. |
| 17:39:00 | <dminuoso> | % :t _1 |
| 17:39:01 | <yahb2> | <interactive>:1:1: error: ; Found hole: _1 :: p ; Where: ‘p’ is a rigid type variable bound by ; the inferred type of it :: p ; at <interactive>:1:1 ; Or perha... |
| 17:39:09 | <dminuoso> | :t _1 |
| 17:39:10 | <lambdabot> | (Field1 s t a b, Functor f) => (a -> f b) -> s -> f t |
| 17:40:04 | <dminuoso> | This makes direct knowledge of how van Laarhoven lenses work internally (in one view you could think of them as "partial traversal" perhaps) |
| 17:40:27 | <dminuoso> | So you have a kind of nested traversal, but not a complete one |
| 17:40:31 | <dminuoso> | c.f.: |
| 17:41:10 | <dminuoso> | % import Data.Foldable |
| 17:41:10 | <yahb2> | <no output> |
| 17:41:14 | <dminuoso> | % (traverse_ . traverse_) putChar ["foo", "bar"] |
| 17:41:15 | <yahb2> | foobar |
| 17:41:24 | <dminuoso> | mastarija: See how you can do a kind of nested traverse this way? |
| 17:41:25 | <mastarija> | Aha, so `_1` already has some trickery for handling traversals over only that element |
| 17:41:56 | <dminuoso> | mastarija: as a very rough intuition think of `_1` as really something like `traverse` except it only goes over *some* part of the structure, while rebuilding the other part with the original values |
| 17:42:14 | <mastarija> | Yeah. I get it. I think :) |
| 17:42:14 | <dminuoso> | if the this thing targets only one element its called a lens |
| 17:42:21 | <dminuoso> | if it targets multiple things lens calls it a traversal |
| 17:43:07 | <dminuoso> | mastarija: Since we're at this point, you might find this interesting now: |
| 17:44:07 | <dminuoso> | view :: Lens' s a -> s -> a view l s = getConst (l Const s) |
| 17:44:35 | → | cheater_ joins (~Username@user/cheater) |
| 17:45:01 | <dminuoso> | mastarija: Note how `view` sort of "traverses (which ends up touching just one element) over s (the data) with the function `Const`" |
| 17:45:22 | <mastarija> | Yes. |
| 17:45:25 | <mastarija> | Noted :) |
| 17:45:38 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 17:45:45 | <dminuoso> | Thats how view extracts the thing, because if you then execute that effect, you get that single element that is stuffed into Const back. |
| 17:46:02 | <dminuoso> | Similarly |
| 17:46:17 | <dminuoso> | set l a s = runIdentity (l (const (Identity a)) s) |
| 17:46:17 | <mastarija> | Yeah. I've gone through that already, so I kind of get it. |
| 17:46:36 | <dminuoso> | Anyway, little fun excursion |
| 17:47:00 | <dminuoso> | mastarija: and thats why composing optics works with . just like that. |
| 17:47:05 | <mastarija> | Yeah. I was also surprised when I've noticed that `traverse` has lenslike signature |
| 17:47:10 | <dminuoso> | `traverse . traverse` traverses over a nested container |
| 17:47:32 | <dminuoso> | mastarija: thats why we dont have some general `traverseEach`, because thats `traverse` already precisely. |
| 17:47:43 | <dminuoso> | % (traverse_ . traverse_) putChar ["foo", "bar"] |
| 17:47:44 | <yahb2> | foobar |
| 17:47:54 | <dminuoso> | Similarly |
| 17:48:09 | <dminuoso> | > toListOf (traverse . traverse) ["foo", "bar"] |
| 17:48:11 | <lambdabot> | "foobar" |
| 17:48:30 | <dminuoso> | Hence: |
| 17:49:03 | <dminuoso> | (traverse . _1) gives you a "traversal like thing" that will map values to effects over each element, then inside each first field. |
| 17:49:10 | <dminuoso> | you can just readily execute that |
| 17:49:17 | <dminuoso> | next observation is: |
| 17:49:20 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 17:50:10 | <dminuoso> | % :t traverse |
| 17:50:10 | <yahb2> | traverse ; :: (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 17:50:15 | <dminuoso> | :t Lens |
| 17:50:16 | <lambdabot> | Lens s t a b -> ReifiedLens s t a b |
| 17:50:22 | <dminuoso> | type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t |
| 17:50:36 | <dminuoso> | mastarija: ^- note the only difference here is that a Lens is "just Functor", while a traverse has an applicative |
| 17:50:47 | <dminuoso> | :t traverse . _1 |
| 17:50:48 | <lambdabot> | (Traversable t, Applicative f, Field1 a1 b1 a2 b2) => (a2 -> f b2) -> t a1 -> f (t b1) |
| 17:50:52 | <mastarija> | Wait, how do I use this again?: `getCompose . ((traverse . _1) (Compose . f))`, I don't have to pass this to `mapMOf` or something? It's something I apply to the raw value, right? |
| 17:51:00 | → | cheater_ joins (~Username@user/cheater) |
| 17:51:01 | cheater_ | is now known as cheater |
| 17:51:05 | <dminuoso> | getting to that in a second |
| 17:51:09 | <mastarija> | What's a `ReifiedLens`? |
| 17:51:14 | <dminuoso> | Ignore that type |
| 17:51:16 | <mastarija> | k |
| 17:51:17 | <dminuoso> | type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t |
| 17:51:22 | <dminuoso> | thats the one I want you to think about |
| 17:51:44 | <dminuoso> | the only difference between `Lens` and `Traversal` is that a Traversal has an Applicative instead of Functor constraint |
| 17:52:14 | <dminuoso> | So if you compose a lens with a traversal, the common join point in the hierarchy here is still applicative, so the composition of `traverse . _1` is a traversable |
| 17:52:28 | <dminuoso> | which is able to map and collect applicative effects |
| 17:52:30 | <dminuoso> | Just like: |
| 17:52:33 | <dminuoso> | % (traverse_ . traverse_) putChar ["foo", "bar"] |
| 17:52:34 | <yahb2> | foobar |
| 17:52:36 | <dminuoso> | or |
| 17:52:38 | <dminuoso> | > toListOf (traverse . traverse) ["foo", "bar"] |
| 17:52:40 | <lambdabot> | "foobar" |
| 17:52:50 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 17:52:56 | <dminuoso> | % (traverse_ . _1) putChar [('a', 1), ('b', 2)] |
| 17:52:56 | <yahb2> | <interactive>:16:14: error: ; • Found hole: _1 :: (Char -> IO ()) -> (Char, Integer) -> f b0 ; Where: ‘b0’ is an ambiguous type variable ; ‘f’ is a rigid type variable bound ... |
| 17:53:03 | <dminuoso> | > (traverse_ . _1) putChar [('a', 1), ('b', 2)] |
| 17:53:05 | <lambdabot> | <IO ()> |
| 17:53:13 | <dminuoso> | Oh well that should print `ab` |
| 17:53:21 | <dminuoso> | > toListOf traverse_ . _1) [('a', 1), ('b', 2)] |
| 17:53:23 | <lambdabot> | <hint>:1:24: error: parse error on input ‘)’ |
| 17:53:27 | <dminuoso> | > toListOf (traverse_ . _1) [('a', 1), ('b', 2)] |
| 17:53:29 | <dminuoso> | mastarija: so far so good? |
| 17:53:30 | <lambdabot> | error: |
| 17:53:30 | <lambdabot> | • Couldn't match type ‘()’ with ‘t0 a0’ |
| 17:53:30 | <lambdabot> | Expected type: Getting (Endo [b]) () b |
| 17:53:35 | <dminuoso> | > toListOf (traverse . _1) [('a', 1), ('b', 2)] |
| 17:53:37 | <lambdabot> | "ab" |
| 17:53:49 | <mastarija> | Well, I'm reading. Not sure if I understand everyhing :) |
| 17:53:49 | <dminuoso> | mastarija: So here comes everything together |
| 17:54:03 | <dminuoso> | `(traverse . _1)` gives you something |
| 17:54:16 | <dminuoso> | like "traverse" that will map applicative effects to every first field of every element of some structure |
| 17:54:21 | <dminuoso> | you have a function |
| 17:54:38 | <dminuoso> | `f :: a -> S (F b)` for which both S and F have applicat ive |
| 17:55:26 | <dminuoso> | We have `instance (Applicative f, Applicative g) => Applicative (Compose f g)` which says if you have something like Q (R a) for which both Q and R have an applicative instance, then `Compose Q R` will give you an applicative instance too |
| 17:55:39 | <dminuoso> | So using the above "traverse" like thing we can do |
| 17:55:49 | <dminuoso> | (traverse . _1) (Compose . f) |
| 17:56:19 | <dminuoso> | The `Compose` will just select the "applicative instance of the composition of S and T" |
| 17:56:49 | <dminuoso> | And then at the end you must toss that "useless" compose wrapper away (whose only purpose was the instance selection) |
| 17:57:00 | <dminuoso> | getCompose . ((traverse . _1) (Compose . f)) |
| 17:58:35 | × | y04nn quits (~username@2a03:1b20:5:f011::aaae) (Ping timeout: 248 seconds) |
| 17:58:36 | × | ubert1 quits (~Thunderbi@2a02:8109:abc0:6434:e47:2f53:4085:22b0) (Remote host closed the connection) |
| 17:59:19 | <mastarija> | Well, that was interesting. Now I'll try to apply it :) |
| 18:02:03 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds) |
| 18:04:27 | × | Major_Biscuit quits (~MajorBisc@c-001-030-022.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.6) |
| 18:08:05 | → | zmt01 joins (~zmt00@user/zmt00) |
| 18:11:19 | → | levinlevinlevin joins (~levin@ip5f584d02.dynamic.kabel-deutschland.de) |
| 18:11:19 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 260 seconds) |
| 18:14:42 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 18:14:46 | → | cheater_ joins (~Username@user/cheater) |
| 18:14:58 | × | bhall quits (~brunohall@195.147.207.136) (Ping timeout: 252 seconds) |
| 18:17:23 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 18:18:53 | → | cheater joins (~Username@user/cheater) |
| 18:19:13 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 18:21:42 | → | cheater_ joins (~Username@user/cheater) |
| 18:23:44 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 18:24:01 | × | shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 276 seconds) |
| 18:26:01 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 18:27:12 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 18:29:37 | × | zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 250 seconds) |
| 18:41:10 | → | cheater_ joins (~Username@user/cheater) |
| 18:41:11 | cheater_ | is now known as cheater |
| 18:42:27 | → | TheMatten[m] joins (~thematten@2001:470:69fc:105::1:5ba1) |
| 18:53:52 | → | bhall joins (~brunohall@195.147.207.136) |
| 18:55:04 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 18:57:01 | × | MironZ quits (~MironZ@nat-infra.ehlab.uk) (Ping timeout: 256 seconds) |
| 19:00:37 | → | cheater_ joins (~Username@user/cheater) |
| 19:01:41 | × | cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 19:01:51 | cheater_ | is now known as cheater |
| 19:02:23 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 19:03:40 | × | vglfr quits (~vglfr@91.102.183.234) (Ping timeout: 276 seconds) |
| 19:06:43 | <sm> | is there any stackage resolver or huge list of extra-deps to let stack users try building with ghc 9.6 ? |
| 19:06:48 | → | crazazy joins (~user@130.89.171.62) |
| 19:08:06 | → | caryhartline joins (~caryhartl@2603-8080-6a0e-8d88-cde1-108a-3c91-10d3.res6.spectrum.com) |
| 19:08:45 | <tomsmeding> | most packages on hackage aren't even up to date yet |
| 19:09:05 | <tomsmeding> | s/up to date/having a loose enough upper bound on base/ |
| 19:09:23 | <sm> | I'm allowing it to ignore bounds |
| 19:09:39 | sm | thought things might be a bit further along this time what with all the prereleases |
| 19:10:06 | <tomsmeding> | stuff like https://hackage.haskell.org/package/these having base<4.18 blocks a _lot_ of stuff |
| 19:10:36 | <sm> | I'm ignoring bounds.. if I could even get to a compilation error that would be pretty good |
| 19:11:30 | <sm> | currently troubleshooting these "PKG dependency cycle" errors with my big extra-deps list |
| 19:11:59 | tomsmeding | . o O ( cabal build --allow-newer=base ) |
| 19:12:39 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 19:13:45 | <sm> | ah yes cabal would make this easier of course. Still, this is a useful exercise for me |
| 19:17:19 | → | talismanick joins (~talismani@c-73-66-168-202.hsd1.ca.comcast.net) |
| 19:18:12 | → | cheater_ joins (~Username@user/cheater) |
| 19:19:08 | → | thyriaen_ joins (~thyriaen@144.208.201.160) |
| 19:19:44 | → | cheater__ joins (~Username@user/cheater) |
| 19:21:10 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 19:21:12 | × | thyriaen quits (~thyriaen@2a01:aea0:dd4:5328:6245:cbff:fe9f:48b1) (Ping timeout: 264 seconds) |
| 19:21:19 | cheater__ | is now known as cheater |
| 19:21:37 | <sm> | ok, done. cabal time :) |
| 19:23:15 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 19:25:57 | <sm> | nice! cabal build -w ghc-9.6.1 --allow-newer gets as far as building my package |
| 19:29:01 | × | ph88 quits (~ph88@ip5b426553.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds) |
| 19:29:28 | × | levinlevinlevin quits (~levin@ip5f584d02.dynamic.kabel-deutschland.de) (Quit: leaving) |
| 19:32:57 | → | ft joins (~ft@p3e9bc443.dip0.t-ipconnect.de) |
| 19:34:19 | <mastarija> | 9.6 has the JavaScript backend, right? |
| 19:34:31 | <geekosaur> | yes |
| 19:35:16 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 19:37:16 | × | hugo- quits (znc@verdigris.lysator.liu.se) (Ping timeout: 246 seconds) |
| 19:38:29 | <sm> | if you make a custom build of it |
| 19:40:45 | → | cheater joins (~Username@user/cheater) |
| 19:42:03 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 19:45:45 | → | MironZ joins (~MironZ@nat-infra.ehlab.uk) |
| 19:47:34 | → | hugo- joins (znc@verdigris.lysator.liu.se) |
| 19:47:48 | → | cheater_ joins (~Username@user/cheater) |
| 19:49:45 | → | MironZ9 joins (~MironZ@nat-infra.ehlab.uk) |
| 19:50:10 | × | cheater quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 19:50:11 | → | cheater__ joins (~Username@user/cheater) |
| 19:50:18 | cheater__ | is now known as cheater |
| 19:51:22 | → | cheater__ joins (~Username@user/cheater) |
| 19:51:37 | × | MironZ quits (~MironZ@nat-infra.ehlab.uk) (Ping timeout: 265 seconds) |
| 19:51:38 | MironZ9 | is now known as MironZ |
| 19:53:33 | × | cheater_ quits (~Username@user/cheater) (Ping timeout: 265 seconds) |
| 19:54:55 | × | cheater quits (~Username@user/cheater) (Ping timeout: 260 seconds) |
| 19:54:58 | cheater__ | is now known as cheater |
| 19:57:23 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds) |
| 20:02:59 | <sm> | is there a way in ghci to see which module has reexported another module's symbol ? |
| 20:05:24 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Remote host closed the connection) |
| 20:06:31 | <sm> | in a module I have void in scope, from Data.Functor, and I can't see how Data.Functor is in scope |
| 20:07:35 | <int-e> | this is silly... what does :t vpid say? |
| 20:10:12 | → | cheater_ joins (~Username@user/cheater) |
| 20:10:19 | <sm> | (after entering the module like so:) |
| 20:10:20 | <sm> | ghci> :m +*Hledger.Data.Balancing |
| 20:10:20 | <sm> | ghci> :t void |
| 20:10:20 | <sm> | void :: Functor f => f a -> f () |
| 20:10:26 | <int-e> | sm: http://paste.debian.net/1274030/ |
| 20:10:31 | <int-e> | (no, you have to make a typo) |
| 20:12:39 | <sm> | int-e: oh, clever! "Perhaps use ‘void’ (imported from Control.Monad.Reader)" |
| 20:12:39 | <sm> | That import fooled me because it's "as R".. but not qualified |
| 20:12:40 | <sm> | thanks! |
| 20:13:23 | × | cheater quits (~Username@user/cheater) (Ping timeout: 264 seconds) |
| 20:13:27 | cheater_ | is now known as cheater |
| 20:14:39 | ← | kimjetwav parts (~user@2607:fea8:235e:b600:904e:e9db:46f6:ca3a) (ERC 5.4.1 (IRC client for GNU Emacs 29.0.60)) |
| 20:16:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 20:20:01 | → | dsrt^ joins (~dsrt@c-24-30-76-89.hsd1.ga.comcast.net) |
| 20:20:01 | → | opticblast joins (~Thunderbi@172.58.84.141) |
| 20:22:19 | → | nschoe joins (~q@2a01:e0a:8e:a190:c215:d296:d03:1e62) |
| 20:22:22 | × | nschoe quits (~q@2a01:e0a:8e:a190:c215:d296:d03:1e62) (Client Quit) |
| 20:24:56 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 20:30:04 | × | bhall quits (~brunohall@195.147.207.136) (Ping timeout: 268 seconds) |
| 20:31:38 | → | a_coll joins (~acoll@45.92.120.189) |
| 20:32:41 | → | kenran joins (~user@user/kenran) |
| 20:33:29 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 20:34:31 | → | pavonia joins (~user@user/siracusa) |
| 20:36:40 | → | coot_ joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 20:39:57 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Ping timeout: 265 seconds) |
| 20:39:57 | coot_ | is now known as coot |
| 20:51:28 | × | opticblast quits (~Thunderbi@172.58.84.141) (Ping timeout: 246 seconds) |
| 20:52:02 | → | opticblast joins (~Thunderbi@172.58.84.141) |
| 20:53:12 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6) |
| 20:55:04 | <mastarija> | Is there perhaps an extension that allows us to define type synonym in the `where` block? |
| 20:55:27 | <geekosaur> | nope |
| 20:55:35 | <mastarija> | I ges we can get by with (x ~ Something), but that's annoying. |
| 20:55:38 | <Jade[m]1> | why would you want that? |
| 20:55:39 | <mastarija> | *guess |
| 20:55:42 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection) |
| 20:56:00 | <mastarija> | Jade[m]1: sometimes I have to write some long types in the where block definitions |
| 20:56:00 | → | use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) |
| 20:56:21 | <mastarija> | And I'd like to not write them multiple times |
| 20:57:22 | <Jade[m]1> | mh |
| 20:59:20 | <EvanR> | local type definitions would be cool |
| 20:59:50 | <EvanR> | though poor man can get by just using another module |
| 21:00:35 | <Jade[m]1> | Would there be a use-case for local ADTs? |
| 21:00:56 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 21:00:56 | <EvanR> | totally |
| 21:01:04 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 21:01:07 | <ddellacosta> | I just end up defining type aliases above functions when I want a kind of localized type alias, an even more poor approach lol |
| 21:01:41 | <EvanR> | local "data" type would be even cooler |
| 21:02:01 | <Jade[m]1> | that's what I meant with a local ADT |
| 21:02:06 | <EvanR> | yeah |
| 21:02:15 | <Jade[m]1> | I never know what to call "data" haha |
| 21:02:19 | <ddellacosta> | I guess it'd have to be consumed completely inside of the local scope, which is interesting |
| 21:02:32 | <EvanR> | when your algorithm wants to use data for its own purposes without having to tell everyone about it and they don't care |
| 21:02:41 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 21:03:00 | <EvanR> | of course, you can use another module and not export it. But it still kind of feels like you have to worry about not stepping on anyone's feet |
| 21:03:16 | <EvanR> | and if this is 1 function, that's a whole module for 1 function |
| 21:03:27 | <EvanR> | which is probably typical in haskell generally |
| 21:03:37 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
| 21:03:55 | <Jade[m]1> | EvanR: do you have an example in mind? |
| 21:05:54 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) |
| 21:06:22 | <mastarija> | Agda has local type definitions |
| 21:06:29 | <mastarija> | IIRC |
| 21:08:46 | × | stackdroid18 quits (14094@de1.hashbang.sh) (Quit: hasta la vista... tchau!) |
| 21:09:19 | × | mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 246 seconds) |
| 21:10:14 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:19aa:397c:29a:40e4) (Ping timeout: 252 seconds) |
| 21:10:15 | → | kimjetwav joins (~user@2607:fea8:235e:b600:4cf2:6784:6712:f6ef) |
| 21:13:43 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:16:44 | <EvanR> | Jade[m]1, if you've ever tried to write an algorithm and said damn I need to define a sum type to keep these steps straight (at the expense of possibly using more time and memory) |
| 21:18:26 | <EvanR> | (the reverse of scott encoding or church encoding a data type as higher order functions) |
| 21:18:50 | × | caryhartline quits (~caryhartl@2603-8080-6a0e-8d88-cde1-108a-3c91-10d3.res6.spectrum.com) (Quit: caryhartline) |
| 21:20:11 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 21:29:11 | × | crazazy quits (~user@130.89.171.62) (Ping timeout: 246 seconds) |
| 21:30:02 | <Nosrep> | any idea why basicunsafeindexm from vector is eating 10% of my programs runtime and allocations? |
| 21:30:22 | <Nosrep> | for context im allocating a couple big vectors (200k elements) and indexing them a lot but not actually modifying the vector |
| 21:34:59 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 21:36:14 | × | talismanick quits (~talismani@c-73-66-168-202.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 21:41:04 | × | trev quits (~trev@user/trev) (Remote host closed the connection) |
| 21:41:56 | → | zmt00 joins (~zmt00@user/zmt00) |
| 21:44:09 | × | michalz quits (~michalz@185.246.207.215) (Remote host closed the connection) |
| 21:46:10 | × | jonathanx quits (~jonathan@h-176-10-144-60.NA.cust.bahnhof.se) (Remote host closed the connection) |
| 21:56:46 | → | ph88 joins (~ph88@91.66.101.83) |
| 21:57:37 | → | vglfr joins (~vglfr@37.73.89.236) |
| 21:59:06 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 22:00:27 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 22:00:28 | × | bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
| 22:01:28 | × | kenran quits (~user@user/kenran) (Remote host closed the connection) |
| 22:10:07 | → | biberu joins (~biberu@user/biberu) |
| 22:13:05 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 22:16:23 | × | vglfr quits (~vglfr@37.73.89.236) (Remote host closed the connection) |
| 22:17:08 | → | vglfr joins (~vglfr@37.73.89.236) |
| 22:19:32 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 22:21:39 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 22:24:46 | × | enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
| 22:28:52 | <hammond> | I'm confused about functors and category theory when it comes to random functions, can you map a function to a number that was randomly created? and back again? |
| 22:30:22 | <Jade[m]1> | A functor is simply a structure that allows a mapping `(a -> b) -> f a -> f b` |
| 22:30:33 | <Jade[m]1> | not sure what you mean with your question |
| 22:30:35 | <int-e> | Nosrep: Note that naively, basicUnsafeIndexM *does* allocate (namely, a box for its result)... though I'd hope that this disappears through inlining, but maybe that's not working in your case? That, or profiling misattributes allocations. |
| 22:33:33 | × | ph88 quits (~ph88@91.66.101.83) (Quit: Leaving) |
| 22:34:09 | <mauke> | hammond: are you asking about RNGs? what does it mean to map a function to a number? |
| 22:34:42 | → | Kuttenbrunzer joins (~Kuttenbru@2a02:8108:8b80:1d48::f907) |
| 22:35:55 | <geekosaur> | hammond, note that category theory operates at the level of Haskell types, not of values. So no, you are not expected to be able to apply it to a number, because that's a value |
| 22:36:14 | <Jade[m]1> | mhm |
| 22:36:15 | <hammond> | ok |
| 22:36:23 | <int-e> | Arbitrary/Coarbitrary comes to mind but is unlikely to be the right picture. |
| 22:36:41 | × | mei quits (~mei@user/mei) (Remote host closed the connection) |
| 22:37:37 | <int-e> | There's also some work on probability monads. |
| 22:39:08 | → | mei joins (~mei@user/mei) |
| 22:39:51 | <int-e> | Where the functor takes a random variable X with values in A, and a function f: A -> B, and produces f(X) which is another random variable with values in B. |
| 22:45:33 | → | emmanuelux_ joins (~emmanuelu@user/emmanuelux) |
| 22:47:54 | × | motherfsck quits (~motherfsc@user/motherfsck) (Remote host closed the connection) |
| 22:48:02 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds) |
| 22:49:13 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 276 seconds) |
| 22:51:04 | → | caryhartline joins (~caryhartl@107.128.194.73) |
| 22:58:19 | × | caryhartline quits (~caryhartl@107.128.194.73) (Ping timeout: 276 seconds) |
| 23:02:14 | → | talismanick joins (~talismani@2601:200:c000:f7a0::5321) |
| 23:06:27 | × | talismanick quits (~talismani@2601:200:c000:f7a0::5321) (Remote host closed the connection) |
| 23:07:05 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 23:15:14 | × | acidjnk quits (~acidjnk@p200300d6e715c49529b622cef8024c18.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 23:16:43 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 246 seconds) |
| 23:18:54 | → | xff0x joins (~xff0x@178.255.149.135) |
| 23:19:57 | <EvanR> | Functor as "post processing" |
| 23:20:53 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds) |
| 23:20:54 | <EvanR> | the functor laws do operate on the value level |
| 23:23:32 | → | srz joins (~srz@181.228.49.93) |
| 23:24:32 | × | zeenk quits (~zeenk@2a02:2f04:a307:2300::7fe) (Quit: Konversation terminated!) |
| 23:24:47 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 264 seconds) |
| 23:26:05 | → | xff0x joins (~xff0x@2405:6580:b080:900:c2ab:3233:9b06:70ff) |
| 23:29:13 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:31:38 | × | fnurglewitz quits (uid263868@id-263868.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 23:32:11 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 23:34:23 | × | srz quits (~srz@181.228.49.93) (Ping timeout: 264 seconds) |
| 23:35:30 | × | mastarija quits (~mastarija@188.252.199.82) (Quit: WeeChat 3.7.1) |
| 23:41:12 | × | emmanuelux_ quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 23:45:26 | × | a_coll quits (~acoll@45.92.120.189) (Remote host closed the connection) |
| 23:47:04 | × | gurkengl1s quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 23:47:04 | × | gurkenglas quits (~gurkengla@dynamic-089-204-153-207.89.204.153.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 23:49:25 | × | vgtw quits (~vgtw@user/vgtw) (Ping timeout: 250 seconds) |
| 23:50:29 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 23:50:30 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 23:50:30 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:50:31 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:57:29 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
All times are in UTC on 2023-03-14.