Logs on 2022-12-13 (liberachat/#haskell)
| 00:00:06 | × | jargon quits (~jargon@174-22-192-24.phnx.qwest.net) (*.net *.split) |
| 00:00:06 | × | gwern quits (~gwern@user/gwern) (*.net *.split) |
| 00:00:06 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (*.net *.split) |
| 00:00:06 | × | AlexZenon quits (~alzenon@178.34.161.14) (*.net *.split) |
| 00:00:06 | × | jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (*.net *.split) |
| 00:00:06 | × | Maeda quits (~Maeda@91-161-10-149.subs.proxad.net) (*.net *.split) |
| 00:00:06 | × | tomku|two quits (~tomku@user/tomku) (*.net *.split) |
| 00:00:06 | × | hrberg_ quits (~quassel@171.79-160-161.customer.lyse.net) (*.net *.split) |
| 00:00:06 | × | coderpat- quits (~coderpath@d66-183-126-83.bchsia.telus.net) (*.net *.split) |
| 00:00:06 | × | jrm quits (~jrm@user/jrm) (*.net *.split) |
| 00:00:06 | × | pflanze quits (~pflanze@159.100.249.232) (*.net *.split) |
| 00:00:06 | × | tessier quits (~treed@98.171.210.130) (*.net *.split) |
| 00:00:06 | × | brettgilio quits (~brettgili@x-irc.gq) (*.net *.split) |
| 00:00:06 | × | haasn quits (~nand@haasn.dev) (*.net *.split) |
| 00:00:06 | × | mniip quits (mniip@libera/staff/mniip) (*.net *.split) |
| 00:00:06 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (*.net *.split) |
| 00:00:06 | × | cjay quits (cjay@nerdbox.nerd2nerd.org) (*.net *.split) |
| 00:00:06 | × | ridcully quits (~ridcully@p508acd69.dip0.t-ipconnect.de) (*.net *.split) |
| 00:00:06 | × | cstml_ quits (cstml@tilde.club) (*.net *.split) |
| 00:00:06 | × | bollu quits (~bollu@159.65.151.13) (*.net *.split) |
| 00:00:06 | × | ystael quits (~ystael@user/ystael) (*.net *.split) |
| 00:00:06 | × | texasmynsted quits (~texasmyns@99.96.221.112) (*.net *.split) |
| 00:00:06 | × | crns quits (~netcrns@user/crns) (*.net *.split) |
| 00:00:06 | × | haskl quits (~haskl@user/haskl) (*.net *.split) |
| 00:00:07 | × | reda quits (~reda@user/reda) (*.net *.split) |
| 00:00:07 | × | Hecate quits (~mariposa@user/hecate) (*.net *.split) |
| 00:00:07 | × | koala_man quits (~vidar@157.146.251.23.bc.googleusercontent.com) (*.net *.split) |
| 00:00:07 | × | drlkf quits (~drlkf@chat.drlkf.net) (*.net *.split) |
| 00:00:07 | × | mht-wtf quits (~mht@mht.wtf) (*.net *.split) |
| 00:00:07 | × | sgarcia quits (sgarcia@swarm.znchost.com) (*.net *.split) |
| 00:00:07 | × | bcoppens quits (~bartcopp@vpn2.bartcoppens.be) (*.net *.split) |
| 00:00:07 | × | LambdaDuck quits (~anka@ksit.fixme.fi) (*.net *.split) |
| 00:00:07 | × | tolt quits (~weechat-h@li219-154.members.linode.com) (*.net *.split) |
| 00:00:07 | × | marienz quits (~marienz@libera/staff/marienz) (*.net *.split) |
| 00:00:08 | × | markasoftware quits (~quassel@107.161.26.124) (*.net *.split) |
| 00:00:08 | × | kora9 quits (~kora@user/Kora9) (*.net *.split) |
| 00:00:08 | × | orcus quits (~orcus@user/brprice) (*.net *.split) |
| 00:00:08 | × | int-e quits (~noone@int-e.eu) (*.net *.split) |
| 00:00:08 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (*.net *.split) |
| 00:00:08 | × | Profpatsch quits (~Profpatsc@static.88-198-193-255.clients.your-server.de) (*.net *.split) |
| 00:00:08 | × | mesaoptimizer2 quits (apotheosis@user/PapuaHardyNet) (*.net *.split) |
| 00:00:08 | × | dka quits (~code-is-a@ns3059207.ip-193-70-33.eu) (*.net *.split) |
| 00:00:08 | × | brprice quits (~brprice@user/brprice) (*.net *.split) |
| 00:00:08 | × | dunj3 quits (~dunj3@kingdread.de) (*.net *.split) |
| 00:00:08 | × | djanatyn quits (~djanatyn@vps-7f49a6b0.vps.ovh.ca) (*.net *.split) |
| 00:00:08 | × | hltk quits (~hltk@hltk.fi) (*.net *.split) |
| 00:00:12 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 00:00:12 | → | LambdaDuck joins (~anka@ksit.fixme.fi) |
| 00:00:14 | → | dka joins (~code-is-a@ns3059207.ip-193-70-33.eu) |
| 00:00:16 | → | hltk joins (~hltk@hltk.fi) |
| 00:00:16 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 00:00:17 | → | mniip joins (mniip@libera/staff/mniip) |
| 00:00:18 | → | bcoppens joins (~bartcopp@vpn2.bartcoppens.be) |
| 00:00:19 | → | tomku joins (~tomku@068-112-105-122.res.spectrum.com) |
| 00:00:20 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 00:00:21 | → | crns joins (~netcrns@p4ff5e521.dip0.t-ipconnect.de) |
| 00:00:21 | → | ridcully joins (~ridcully@p508acd69.dip0.t-ipconnect.de) |
| 00:00:21 | → | AlexZenon joins (~alzenon@178.34.161.14) |
| 00:00:21 | → | coderpath joins (~coderpath@d66-183-126-83.bchsia.telus.net) |
| 00:00:22 | → | int-e joins (~noone@int-e.eu) |
| 00:00:22 | → | Hecate joins (~mariposa@user/hecate) |
| 00:00:22 | → | marienz joins (~marienz@libera/staff/marienz) |
| 00:00:23 | → | tessier joins (~treed@98.171.210.130) |
| 00:00:25 | → | cstml_ joins (cstml@tilde.club) |
| 00:00:25 | × | tomku quits (~tomku@068-112-105-122.res.spectrum.com) (Changing host) |
| 00:00:25 | → | tomku joins (~tomku@user/tomku) |
| 00:00:26 | → | texasmynsted joins (~texasmyns@99.96.221.112) |
| 00:00:26 | → | jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 00:00:36 | × | mestre quits (~mestre@191.177.185.178) (Quit: Lost terminal) |
| 00:00:42 | → | Profpatsch joins (~Profpatsc@static.88-198-193-255.clients.your-server.de) |
| 00:00:43 | → | jrm joins (~jrm@user/jrm) |
| 00:00:45 | → | tolt joins (~weechat-h@li219-154.members.linode.com) |
| 00:00:52 | × | crns quits (~netcrns@p4ff5e521.dip0.t-ipconnect.de) (Changing host) |
| 00:00:52 | → | crns joins (~netcrns@user/crns) |
| 00:01:15 | → | sgarcia joins (sgarcia@swarm.znchost.com) |
| 00:01:16 | → | djanatyn joins (~djanatyn@vps-7f49a6b0.vps.ovh.ca) |
| 00:01:45 | → | dunj3 joins (~dunj3@kingdread.de) |
| 00:01:54 | → | pflanze joins (~pflanze@159.100.249.232) |
| 00:02:03 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 00:02:14 | → | jargon joins (~jargon@174-22-192-24.phnx.qwest.net) |
| 00:02:16 | → | markasoftware joins (~quassel@107.161.26.124) |
| 00:02:19 | → | haskl joins (~haskl@user/haskl) |
| 00:02:20 | → | mht-wtf joins (~mht@2a03:b0c0:3:e0::1e2:c001) |
| 00:02:23 | → | orcus joins (~orcus@user/brprice) |
| 00:02:40 | → | brprice joins (~brprice@user/brprice) |
| 00:02:40 | → | biberu\ joins (~biberu@user/biberu) |
| 00:02:47 | → | haasn joins (~nand@haasn.dev) |
| 00:02:53 | → | burnsidesLlama joins (~burnsides@210006168186.ctinets.com) |
| 00:03:05 | → | bollu joins (~bollu@159.65.151.13) |
| 00:03:17 | → | stef204 joins (~stef204@user/stef204) |
| 00:03:52 | → | drlkf joins (~drlkf@chat.drlkf.net) |
| 00:04:01 | → | kora9 joins (~kora@user/Kora9) |
| 00:05:15 | → | koala_man joins (~vidar@157.146.251.23.bc.googleusercontent.com) |
| 00:05:16 | → | cjay joins (cjay@nerdbox.nerd2nerd.org) |
| 00:05:24 | → | Maeda joins (~Maeda@91-161-10-149.subs.proxad.net) |
| 00:05:24 | → | reda joins (~reda@user/reda) |
| 00:05:29 | → | ystael joins (~ystael@user/ystael) |
| 00:05:33 | × | biberu quits (~biberu@user/biberu) (Ping timeout: 268 seconds) |
| 00:05:34 | → | gwern joins (~gwern@user/gwern) |
| 00:05:34 | biberu\ | is now known as biberu |
| 00:05:44 | × | burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection) |
| 00:06:21 | → | burnsidesLlama joins (~burnsides@210006168186.ctinets.com) |
| 00:10:20 | <intelligent_boat> | hm. still learning new things about how to think about performance in Haskell. let's say I have: let s = "5", let op = (* (read s)), map op [1, 2, 3, 4]. I was actually wondering whether it would try to parse the string multiple times, which would seem to me like unnecessary work |
| 00:10:56 | <intelligent_boat> | but, if I change that to let op = (* (trace "read it" $ read s)), "read it" was only printed once, so it suggests the read was only done once (I hope) |
| 00:11:43 | <intelligent_boat> | how do I know these things in advance so I don't have to wonder "is this thing going to be performed multiple times or just once" ? |
| 00:12:00 | <dsal> | On one level, thinking about performance in haskell is like thinking about performance in any other language. "Is my program fast enough? If yes, great. If not, measure it and see what part's slow." |
| 00:12:24 | <dsal> | It's not impossible for trace to mislead you. |
| 00:12:38 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 00:12:47 | <dsal> | But if you really want to know, compile to core and see what happens to your code after rules and optimizer passes. |
| 00:13:32 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
| 00:16:15 | × | jargon quits (~jargon@174-22-192-24.phnx.qwest.net) (Ping timeout: 260 seconds) |
| 00:17:56 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 00:19:42 | <dminuoso> | intelligent_boat: As a very rough guideline, if you put it onto a let binding, there's a fair chance it will be shared. |
| 00:20:20 | <dminuoso> | But if GHC determines it to be very cheap/small, it will inline it regardless |
| 00:20:34 | <dminuoso> | We do have pragmas like NOINLINE to prevent that, however. |
| 00:21:28 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
| 00:23:28 | <dsal> | I did something like the above and it spat out this: https://www.irccloud.com/pastebin/z95TStPM/coredump.txt |
| 00:24:06 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 00:24:52 | <dminuoso> | monomorphism restriction to the rescue. |
| 00:25:10 | <dsal> | That's happening inside the map, though… |
| 00:25:18 | <dminuoso> | oh hah |
| 00:25:26 | <dminuoso> | You're right |
| 00:26:00 | <dminuoso> | Im not entirely sure why it was floated inwards |
| 00:26:04 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 00:26:49 | <geekosaur> | what -O level? |
| 00:28:16 | × | acidjnk quits (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 00:28:20 | <dsal> | I guess it didn't pick that up in my ghci venture. Otherwise, with -O2 it blows it all over the place. |
| 00:28:40 | <dsal> | https://www.irccloud.com/pastebin/euO9O1VL/ohtwo.hs |
| 00:29:12 | × | Tuplanolla quits (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:30:03 | <dminuoso> | intelligent_boat: Also note that doing these attempts in ghci can be misleading due to MMR and optimization levels. |
| 00:30:40 | <dsal> | Man, this core thing is worse at naming stuff than I am. |
| 00:30:41 | <intelligent_boat> | dang. yup I did that exerpiment in GHC |
| 00:31:10 | <geekosaur> | ghci usually disables optimization |
| 00:31:39 | <geekosaur> | for a long time one of the non-disableable optimizations was unboxing tuples, which caused ghci to crash |
| 00:35:38 | × | fizbin quits (~fizbin@user/fizbin) (Ping timeout: 256 seconds) |
| 00:36:00 | <dminuoso> | Mmm, even for lists of unknown size this will float the read in. |
| 00:37:21 | <dminuoso> | Ah it may be just with optimizations turned off |
| 00:39:33 | <dsal> | Yeah, the large one is -O2. `ints5 :: Int` does the read. |
| 00:40:47 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
| 00:41:14 | <dsal> | But I stand by my first statement. Is it fast enough? If not, measure. |
| 00:41:20 | <dsal> | Real code wouldn't have a `read` in it anyway. :) |
| 00:41:35 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 00:42:39 | <dsal> | Haskell has all kinds of weird things that sounds like "how long is a string?" |
| 00:43:02 | <dsal> | How long does it take to compute the length of a list of 2^31 elements? Depends on whether you want to know the length or not. |
| 00:44:50 | <dsal> | > asum [Just 3, Just (length (replicate (2^31) 'a'))] |
| 00:44:52 | <lambdabot> | Just 3 |
| 00:46:03 | <dsal> | One of my AoC solutions from a year or two ago finished in nanoseconds. (compilation was a bit slower on that one) |
| 00:46:14 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds) |
| 00:49:45 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 00:49:48 | × | gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 00:53:43 | → | fizbin joins (~fizbin@user/fizbin) |
| 01:03:10 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 01:07:14 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 01:07:56 | × | sadmax quits (~user@209.205.174.253) (Ping timeout: 256 seconds) |
| 01:08:31 | → | mikoto-chan joins (~mikoto-ch@2001:999:700:6f41:84a3:b322:d26d:702e) |
| 01:13:04 | → | troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua) |
| 01:15:28 | → | mvk joins (~mvk@2607:fea8:5ce3:8500::efb) |
| 01:18:11 | × | xff0x_ quits (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 246 seconds) |
| 01:18:29 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 01:26:56 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
| 01:30:26 | → | ddellacosta joins (~ddellacos@143.244.47.89) |
| 01:35:44 | × | ddellacosta quits (~ddellacos@143.244.47.89) (Ping timeout: 246 seconds) |
| 01:37:34 | → | WarzoneCommand joins (~Frank@77-162-168-71.fixed.kpn.net) |
| 01:37:54 | → | son0p joins (~ff@2604:3d08:5b7f:5540::4026) |
| 01:40:30 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 01:40:30 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 01:40:30 | → | wroathe joins (~wroathe@user/wroathe) |
| 01:42:20 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 01:42:30 | × | Kaiepi quits (~Kaiepi@108.175.84.104) (Ping timeout: 256 seconds) |
| 01:44:01 | → | ddellacosta joins (~ddellacos@89.45.224.168) |
| 01:54:44 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 01:57:11 | → | brettgilio joins (~brettgili@x-irc.gq) |
| 01:58:44 | × | ddellacosta quits (~ddellacos@89.45.224.168) (Ping timeout: 265 seconds) |
| 01:59:07 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 248 seconds) |
| 02:01:40 | → | xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 02:05:48 | × | tvandinther quits (~tvandinth@111.69.34.210) (Ping timeout: 260 seconds) |
| 02:07:50 | × | motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit) |
| 02:11:58 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
| 02:14:38 | <EvanR> | dsal's flowchart: 10 is it fast enough? No -> optimize it >> goto 10; Yes -> no it isn't >> goto to |
| 02:14:50 | <EvanR> | 10 |
| 02:16:59 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 02:20:39 | → | ddellacosta joins (~ddellacos@89.45.224.51) |
| 02:22:38 | → | king_gs1 joins (~Thunderbi@187.201.150.200) |
| 02:24:55 | king_gs1 | is now known as king_gs |
| 02:27:35 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 02:28:40 | <jackdk> | optimises to 10: optimise it; 20: goto 10 |
| 02:28:54 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 260 seconds) |
| 02:29:30 | × | burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection) |
| 02:29:48 | <EvanR> | fix optimize |
| 02:30:38 | → | dsrt^ joins (~dsrt@76.145.185.103) |
| 02:30:40 | → | burnsidesLlama joins (~burnsides@210006168186.ctinets.com) |
| 02:32:18 | <jackdk> | `fix error` results in a program that never returns an incorrect value :-) |
| 02:35:59 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 02:39:20 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 02:40:14 | × | califax quits (~califax@user/califx) (Ping timeout: 255 seconds) |
| 02:40:19 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 02:40:50 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::efb) (Quit: Going elsewhere) |
| 02:48:26 | → | califax joins (~califax@user/califx) |
| 02:52:21 | <dsal> | If it's good enough, I try to do something more complicated. |
| 02:54:29 | × | incertia quits (~incertia@209.122.71.127) (Ping timeout: 246 seconds) |
| 02:54:52 | × | burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection) |
| 02:55:34 | → | incertia joins (~incertia@209.122.71.127) |
| 02:56:05 | × | foul_owl quits (~kerry@193.29.61.77) (Ping timeout: 260 seconds) |
| 02:56:21 | → | burnsidesLlama joins (~burnsides@210006168186.ctinets.com) |
| 02:57:42 | → | razetime joins (~quassel@49.207.203.213) |
| 03:01:00 | → | king_gs1 joins (~Thunderbi@2806:103e:29:cdd2:b2dd:cddc:5884:d05c) |
| 03:01:15 | × | king_gs quits (~Thunderbi@187.201.150.200) (Read error: Connection reset by peer) |
| 03:01:16 | king_gs1 | is now known as king_gs |
| 03:07:32 | × | ddellacosta quits (~ddellacos@89.45.224.51) (Ping timeout: 272 seconds) |
| 03:08:58 | → | ddellacosta joins (~ddellacos@143.244.47.75) |
| 03:09:14 | × | burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection) |
| 03:10:23 | → | ensyde joins (~ensyde@2600:1700:2050:1040:e518:6f99:8537:355c) |
| 03:10:34 | → | burnsidesLlama joins (~burnsides@210006168186.ctinets.com) |
| 03:10:45 | → | foul_owl joins (~kerry@193.29.61.234) |
| 03:12:53 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 03:14:18 | → | instantaphex joins (~jb@c-73-171-252-84.hsd1.fl.comcast.net) |
| 03:19:58 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 256 seconds) |
| 03:23:31 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 03:26:57 | × | king_gs quits (~Thunderbi@2806:103e:29:cdd2:b2dd:cddc:5884:d05c) (Quit: king_gs) |
| 03:35:05 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 03:39:16 | × | td_ quits (~td@83.135.9.32) (Ping timeout: 265 seconds) |
| 03:39:50 | × | ddellacosta quits (~ddellacos@143.244.47.75) (Ping timeout: 272 seconds) |
| 03:41:04 | → | td_ joins (~td@83.135.9.49) |
| 03:47:33 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 268 seconds) |
| 03:48:11 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 03:48:12 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 03:49:11 | × | burnsidesLlama quits (~burnsides@210006168186.ctinets.com) (Remote host closed the connection) |
| 04:00:46 | × | stef204 quits (~stef204@user/stef204) (Ping timeout: 256 seconds) |
| 04:03:36 | × | mncheckm quits (~mncheck@193.224.205.254) (Ping timeout: 256 seconds) |
| 04:06:38 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 04:08:09 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 04:08:25 | × | Erutuon_ quits (~Erutuon@user/erutuon) (Ping timeout: 260 seconds) |
| 04:12:25 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 04:17:02 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
| 04:18:52 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 04:19:09 | → | img joins (~img@user/img) |
| 04:19:54 | → | burnsidesLlama joins (~burnsides@119247164140.ctinets.com) |
| 04:20:49 | money | is now known as polo |
| 04:25:11 | polo | is now known as money |
| 04:29:14 | → | mbuf joins (~Shakthi@49.204.142.15) |
| 04:32:13 | × | mikoto-chan quits (~mikoto-ch@2001:999:700:6f41:84a3:b322:d26d:702e) (Quit: WeeChat 3.6) |
| 04:34:27 | → | Kaiepi joins (~Kaiepi@108.175.84.104) |
| 04:35:55 | <iqubic> | :t (>>=) (>>=) |
| 04:35:55 | <lambdabot> | Monad m => (((a -> m b1) -> m b1) -> m a -> b2) -> m a -> b2 |
| 04:36:02 | <iqubic> | What?!?!?! |
| 04:39:50 | <c_wraith> | > (+1) >>= (*) $ 4 |
| 04:39:52 | <lambdabot> | 20 |
| 04:40:02 | <int-e> | Yeah any (a ->) b is a monadic value. |
| 04:44:28 | <c_wraith> | :t (>>=) `asAppliedTo` (>>=) |
| 04:44:29 | <lambdabot> | Monad m => (m a -> (a -> m b1) -> m b1) -> (((a -> m b1) -> m b1) -> m a -> b2) -> m a -> b2 |
| 04:44:47 | <c_wraith> | that's pretty awful. |
| 04:45:46 | <int-e> | :t (>>=) |
| 04:45:47 | <lambdabot> | Monad m => m a -> (a -> m b) -> m b |
| 04:46:00 | <int-e> | (that's not a small type at all) |
| 04:46:24 | <xerox> | :t (=<<) (>>=) |
| 04:46:25 | <lambdabot> | Monad m => ((a -> m b) -> m a) -> (a -> m b) -> m b |
| 04:47:03 | <xerox> | :t (=<<) (=<<) (=<<) |
| 04:47:04 | <lambdabot> | (a -> a -> a) -> a -> a |
| 04:47:31 | <int-e> | > (=<<) (=<<) (=<<) (+) 3 |
| 04:47:32 | <lambdabot> | 9 |
| 04:47:42 | <int-e> | > (=<<) (=<<) (=<<) (-) 3 |
| 04:47:43 | <lambdabot> | -3 |
| 04:48:10 | <xerox> | (: |
| 04:49:21 | <int-e> | negate = (=<<) (=<<) (=<<) (-) -- don't use for floating point numbers |
| 04:49:38 | <xerox> | haha |
| 04:50:26 | <int-e> | This about as sane as the xor-swap trick is in C. |
| 04:51:30 | <EvanR> | in most dynamic languages you can do anything, but using a function on itself probably results in nonsense. |
| 04:51:52 | <EvanR> | in haskell the type system usually stops you from doing anything, but using a function on itself probably works |
| 04:52:30 | <EvanR> | *with different specializations |
| 04:52:58 | <int-e> | :t foldl foldl |
| 04:52:59 | <lambdabot> | error: |
| 04:53:00 | <lambdabot> | • Occurs check: cannot construct the infinite type: a ~ a -> a |
| 04:53:00 | <lambdabot> | Expected type: ((a -> a) -> a -> a) |
| 04:53:18 | <EvanR> | :t (+) (+) |
| 04:53:18 | <int-e> | (it often doesn't work, even for polymorphic functions) |
| 04:53:19 | <lambdabot> | (Num a, Num (a -> a -> a)) => (a -> a -> a) -> a -> a -> a |
| 04:53:36 | <int-e> | :t fmap fmap fmap fmap fmap fmap fmap fmap |
| 04:53:37 | <lambdabot> | (Functor f1, Functor f2, Functor f3) => (a -> b) -> f1 (f2 (f3 a)) -> f1 (f2 (f3 b)) |
| 04:54:04 | <int-e> | (this runs into a cycle if you keep adding more `fmap`s) |
| 04:54:18 | <int-e> | (don't ask me how I know, I was bored) |
| 04:54:54 | × | andreas303 quits (andreas303@ip227.orange.bnc4free.com) (Quit: fBNC - https://bnc4free.com) |
| 04:54:55 | × | xacktm quits (~xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com) |
| 04:55:56 | <EvanR> | wait... |
| 04:56:04 | <EvanR> | a cycle always with three functors? |
| 04:56:41 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 04:57:14 | <int-e> | > fmap fmap fmap (+) (*) 1 2 x |
| 04:57:15 | <lambdabot> | 1 * 2 + x |
| 04:58:03 | <int-e> | EvanR: I mean you have fmap^k = fmap^l for some natural k < l. I forgot the numbers. |
| 04:59:23 | <int-e> | (one thing that happens is that the functors get force-instantiated as (a ->) for various a) |
| 04:59:40 | <int-e> | (but that doesn't explain why the type remains small-ish... it could grow forever) |
| 05:01:43 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
| 05:02:27 | × | burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection) |
| 05:02:40 | → | burnsidesLlama joins (~burnsides@119247164140.ctinets.com) |
| 05:02:47 | × | burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Remote host closed the connection) |
| 05:02:48 | <EvanR> | right |
| 05:09:11 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 05:14:51 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 05:21:49 | × | shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit) |
| 05:23:29 | → | chomwitt joins (~chomwitt@2a02:587:7a0d:e800:1ac0:4dff:fedb:a3f1) |
| 05:24:18 | RemiYuko | is now known as AkechiShiro |
| 05:27:49 | → | xacktm joins (~xacktm@user/xacktm) |
| 05:30:50 | <iqubic> | Is there a good way to write a parser "tryOr :: Parser a -> a -> Parser a" with the semantics that if the first parser fails then the whole thing succeeds with the given default value? |
| 05:32:35 | <geekosaur> | `tryOr p def = try p <|> pure def` ? (`try` depends on which parser lib) |
| 05:33:24 | <iqubic> | Yeah... that should work. |
| 05:33:30 | <iqubic> | It's megaparsec |
| 05:33:35 | <int-e> | but this kind of alternative is a basic building block of any parsing library |
| 05:35:10 | × | sudden quits (~cat@user/sudden) (Ping timeout: 252 seconds) |
| 05:37:01 | <iqubic> | Is it? I can't seem to find a default thing for it in megaparsec |
| 05:39:33 | <int-e> | I mean <|>... `tryOr p def = try p <|> pure def` doesn't pass the https://wiki.haskell.org/Fairbairn_threshold to my mind |
| 05:39:37 | <geekosaur> | optional is from Control.Applicative, megaparsec reuses it |
| 05:39:59 | <int-e> | :t Control.Applicative.optional |
| 05:40:00 | <lambdabot> | Alternative f => f a -> f (Maybe a) |
| 05:40:14 | <geekosaur> | this is a downside of the refactoring, you have to look in 3 or 4 places for things now |
| 05:40:35 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) |
| 05:41:17 | <c_wraith> | also, all those things that were exported to parser-combinators... |
| 05:41:49 | <geekosaur> | right that was one of the other places I was referring to |
| 05:42:34 | → | andreas303 joins (andreas303@ip227.orange.bnc4free.com) |
| 05:45:12 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 05:46:07 | → | Vajb joins (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) |
| 05:47:18 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds) |
| 05:50:42 | × | Vajb quits (~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Ping timeout: 256 seconds) |
| 05:51:53 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Remote host closed the connection) |
| 05:52:11 | → | use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) |
| 05:53:53 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 06:01:59 | × | instantaphex quits (~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 268 seconds) |
| 06:03:47 | × | machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 264 seconds) |
| 06:08:40 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 06:14:45 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:15:21 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 06:18:06 | → | bahamas joins (~lucian@86.127.154.189) |
| 06:18:30 | bahamas | is now known as elbear |
| 06:20:49 | × | elbear quits (~lucian@86.127.154.189) (Client Quit) |
| 06:24:29 | → | elbear joins (~lucian@86.127.154.189) |
| 06:26:31 | → | burnsidesLlama joins (~burnsides@119247164140.ctinets.com) |
| 06:27:02 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 06:28:31 | × | thegeekinside quits (~thegeekin@189.217.82.244) (Read error: Connection reset by peer) |
| 06:29:33 | × | burnsidesLlama quits (~burnsides@119247164140.ctinets.com) (Client Quit) |
| 06:30:34 | → | burnsidesLlama joins (~burnsides@119247164140.ctinets.com) |
| 06:33:16 | → | kenran joins (~user@user/kenran) |
| 06:33:23 | × | kenran quits (~user@user/kenran) (Remote host closed the connection) |
| 06:33:37 | × | elbear quits (~lucian@86.127.154.189) (Quit: leaving) |
| 06:35:35 | × | Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 264 seconds) |
| 06:37:31 | <DigitalKiwi> | my paste client used to fit in one file and i could run it with nix-shell/cabal shebangs but then i refactored it into lots of files and that doesn't work anymore sad day |
| 06:38:09 | <DigitalKiwi> | https://gist.github.com/Kiwi/92415b46d58bfce34f7773944b6dcc67 |
| 06:38:44 | <DigitalKiwi> | https://github.com/Kiwi/absurd-paste-client |
| 06:39:02 | <DigitalKiwi> | it also got more features etc. lol but still |
| 06:39:28 | → | Xeroine joins (~Xeroine@user/xeroine) |
| 06:42:06 | → | freeside joins (~mengwong@217.7.210.115) |
| 06:44:18 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 06:44:58 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 06:49:07 | → | bgs joins (~bgs@212-85-160-171.dynamic.telemach.net) |
| 06:49:57 | × | burnsidesLlama quits (~burnsides@119247164140.ctinets.com) () |
| 06:57:00 | × | Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 256 seconds) |
| 06:59:55 | → | Xeroine joins (~Xeroine@user/xeroine) |
| 07:01:59 | → | nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 07:02:07 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 07:16:26 | × | freeside quits (~mengwong@217.7.210.115) (Ping timeout: 272 seconds) |
| 07:17:47 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds) |
| 07:21:30 | × | Xeroine quits (~Xeroine@user/xeroine) (Ping timeout: 272 seconds) |
| 07:23:01 | → | Xeroine joins (~Xeroine@user/xeroine) |
| 07:23:36 | × | bgs quits (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
| 07:31:31 | × | chomwitt quits (~chomwitt@2a02:587:7a0d:e800:1ac0:4dff:fedb:a3f1) (Ping timeout: 252 seconds) |
| 07:35:22 | → | goober joins (~goober@90-231-13-185-no3430.tbcn.telia.com) |
| 07:40:11 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 07:44:27 | <iqubic> | What sorting algorithm does Data.List.Sort use? |
| 07:44:50 | → | trev joins (~trev@user/trev) |
| 07:45:01 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 07:46:10 | × | Xeroine quits (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
| 07:46:54 | <iqubic> | Looks like it uses a mergesort. |
| 07:47:00 | → | Xeroine joins (~Xeroine@user/xeroine) |
| 07:48:56 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 07:49:26 | <DigitalKiwi> | surely it would use the 4 line quicksort |
| 07:49:57 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 07:55:58 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 07:56:27 | → | michalz joins (~michalz@185.246.204.65) |
| 08:05:05 | → | MajorBiscuit joins (~MajorBisc@217-63-245-103.cable.dynamic.v4.ziggo.nl) |
| 08:05:18 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 08:09:06 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 08:09:19 | → | mmhat joins (~mmh@p200300f1c7390125ee086bfffe095315.dip0.t-ipconnect.de) |
| 08:09:44 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 08:10:12 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 08:14:03 | <EvanR> | @src sort |
| 08:14:03 | <lambdabot> | sort = sortBy compare |
| 08:14:10 | <EvanR> | *nod* |
| 08:14:17 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 08:19:46 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds) |
| 08:20:22 | × | anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in) |
| 08:20:47 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:21:28 | <DigitalKiwi> | nice |
| 08:22:22 | → | anpad joins (~pandeyan@user/anpad) |
| 08:23:01 | × | ft quits (~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving) |
| 08:24:43 | → | gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 08:29:24 | × | kaol quits (~kaol@94-237-42-30.nl-ams1.upcloud.host) (Ping timeout: 260 seconds) |
| 08:29:58 | → | oldsk00l joins (~znc@ec2-3-10-59-201.eu-west-2.compute.amazonaws.com) |
| 08:33:22 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 08:35:59 | → | kaol joins (~kaol@94-237-42-30.nl-ams1.upcloud.host) |
| 08:36:13 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:47dd:78b3:3134:94a) |
| 08:36:37 | → | cfricke joins (~cfricke@user/cfricke) |
| 08:39:28 | → | acidjnk joins (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de) |
| 08:39:30 | → | nschoe joins (~q@2a01:e0a:8e:a190:befe:db92:c07:c717) |
| 08:42:27 | × | dolio quits (~dolio@130.44.134.54) (Ping timeout: 260 seconds) |
| 08:42:39 | × | hsw_ quits (~hsw@112-104-142-182.adsl.dynamic.seed.net.tw) (Quit: Leaving) |
| 08:42:52 | → | hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 08:44:40 | → | dolio joins (~dolio@130.44.134.54) |
| 08:46:03 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:46:11 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 08:47:28 | → | avicenzi joins (~avicenzi@2a00:ca8:a1f:b004::c32) |
| 08:52:38 | → | xsarnik joins (xsarnik@lounge.fi.muni.cz) |
| 08:54:13 | → | xstill_ joins (xstill@fimu/xstill) |
| 09:00:05 | × | adziahel[m] quits (~adziahelm@2001:470:69fc:105::b4d) (Quit: You have been kicked for being idle) |
| 09:03:22 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 09:06:41 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1) |
| 09:08:44 | → | cfricke joins (~cfricke@user/cfricke) |
| 09:10:46 | × | ensyde quits (~ensyde@2600:1700:2050:1040:e518:6f99:8537:355c) (Quit: Leaving) |
| 09:11:11 | → | Guest23 joins (~Guest23@27.57.46.219) |
| 09:15:05 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:15:26 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection) |
| 09:22:32 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 09:29:59 | × | iqubic quits (~avi@2601:602:9502:c70:6c06:b297:7404:329f) (Ping timeout: 246 seconds) |
| 09:39:44 | × | Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 252 seconds) |
| 09:49:04 | × | MajorBiscuit quits (~MajorBisc@217-63-245-103.cable.dynamic.v4.ziggo.nl) (Ping timeout: 272 seconds) |
| 09:50:19 | → | k joins (~k@fork.wtf) |
| 09:54:26 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:57:11 | → | ubert1 joins (~Thunderbi@p200300ecdf264e2f50477ceb302d227f.dip0.t-ipconnect.de) |
| 09:59:55 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 10:15:02 | → | zer0bitz_ joins (~zer0bitz@196.244.192.60) |
| 10:15:55 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 10:16:28 | × | zer0bitz quits (~zer0bitz@196.244.192.56) (Ping timeout: 256 seconds) |
| 10:17:15 | × | xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 248 seconds) |
| 10:19:18 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
| 10:20:20 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 246 seconds) |
| 10:21:15 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 10:21:25 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 10:32:19 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:33:12 | → | MajorBiscuit joins (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) |
| 10:34:21 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:75c2:a71f:beaa:29bf) (Quit: use-value) |
| 10:37:17 | → | __monty__ joins (~toonn@user/toonn) |
| 10:51:13 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 10:52:27 | × | gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 10:53:35 | → | Guest3840 joins (~Guest38@181.214.107.214) |
| 10:54:07 | × | Guest3840 quits (~Guest38@181.214.107.214) (Client Quit) |
| 10:54:59 | × | zer0bitz_ quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer) |
| 10:59:04 | → | zer0bitz joins (~zer0bitz@196.244.192.60) |
| 11:07:56 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:09:16 | → | xff0x_ joins (~xff0x@ai071162.d.east.v6connect.net) |
| 11:12:20 | → | Guest|66 joins (~Guest|66@77.209.198.178.dynamic.wline.res.cust.swisscom.ch) |
| 11:13:00 | × | Guest|66 quits (~Guest|66@77.209.198.178.dynamic.wline.res.cust.swisscom.ch) (Client Quit) |
| 11:38:26 | → | iqubic joins (~avi@2601:602:9502:c70:6988:8eb0:bd8c:3233) |
| 11:41:35 | → | teo joins (~teo@user/teo) |
| 11:42:02 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 11:43:54 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 11:55:29 | → | rburkholder joins (~blurb@96.45.2.121) |
| 12:00:11 | × | darkstardevx quits (~darkstard@50.53.3.186) (Remote host closed the connection) |
| 12:01:35 | → | darkstardevx joins (~darkstard@50.53.3.186) |
| 12:03:33 | → | mixfix41 joins (~sdenynine@user/mixfix41) |
| 12:04:41 | × | Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 246 seconds) |
| 12:08:51 | → | Maxdamantus joins (~Maxdamant@user/maxdamantus) |
| 12:09:32 | → | dextaa2 joins (~DV@user/dextaa) |
| 12:11:36 | × | mbuf quits (~Shakthi@49.204.142.15) (Ping timeout: 265 seconds) |
| 12:11:59 | × | dextaa quits (~DV@user/dextaa) (Ping timeout: 268 seconds) |
| 12:11:59 | dextaa2 | is now known as dextaa |
| 12:12:25 | → | mbuf joins (~Shakthi@49.204.117.211) |
| 12:17:53 | × | mbuf quits (~Shakthi@49.204.117.211) (Ping timeout: 265 seconds) |
| 12:18:43 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 12:18:44 | → | mbuf joins (~Shakthi@49.205.80.144) |
| 12:19:49 | × | mmhat quits (~mmh@p200300f1c7390125ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 12:20:11 | → | mmhat joins (~mmh@p200300f1c73901b0ee086bfffe095315.dip0.t-ipconnect.de) |
| 12:23:17 | → | kalj joins (~kalj@78-71-20-170-no193.tbcn.telia.com) |
| 12:26:41 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 12:28:07 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 12:28:48 | × | [Leary] quits (~Leary]@user/Leary/x-0910699) (Remote host closed the connection) |
| 12:29:01 | → | [Leary] joins (~Leary]@user/Leary/x-0910699) |
| 12:30:40 | × | razetime quits (~quassel@49.207.203.213) (Remote host closed the connection) |
| 12:33:54 | → | Guest23 joins (~Guest23@27.57.46.219) |
| 12:37:55 | <dminuoso> | `show <$> [1, "foo", 'a']` |
| 12:38:01 | <dminuoso> | I so want to be albe to write this. :( |
| 12:39:06 | <_________> | you just wrote this ;) |
| 12:39:08 | <dminuoso> | Heh. |
| 12:39:10 | <dminuoso> | Is this in principle even possible? |
| 12:39:21 | <dminuoso> | fmap show (1:"foo":a:[]) |
| 12:39:43 | <dminuoso> | This would at minimum require impredicativity |
| 12:40:24 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds) |
| 12:40:26 | <geekosaur> | not in Haskell. you could use an existential wrapper so the list items would all be the same type, but at that point it's just as easy to simply wrap all items in `show` and solve the problem |
| 12:40:54 | <dminuoso> | % :set -XExistentialQuantification |
| 12:40:54 | <yahb2> | <no output> |
| 12:40:57 | <dminuoso> | data AList = forall a. ACons a AList | ANil |
| 12:41:00 | <dminuoso> | % data AList = forall a. ACons a AList | ANil |
| 12:41:00 | <yahb2> | <no output> |
| 12:41:16 | <dminuoso> | geekosaur: The thing is, the show wont push the Show constraint into that existential list |
| 12:41:32 | <dminuoso> | fmap is not capable of doing that |
| 12:41:37 | <geekosaur> | nope, you would need the Show constraint on the existential |
| 12:42:02 | <geekosaur> | which is why it's easier to just wrap everything in show manually: it's more work to do the existential |
| 12:42:09 | <dminuoso> | Maybe with `constraints` and GADTs I could do this? |
| 12:42:50 | <dminuoso> | geekosaur: Sure, Im just trying to come up with a way that requires neither a constraint on an existential newtype, nor float the show into |
| 12:43:10 | geekosaur | is wondering about some clever quasiquoter or something |
| 12:43:13 | <dminuoso> | I *think* it could be done with an alteration of `fmap` |
| 12:43:20 | <dminuoso> | Something that communicates constraints |
| 12:43:27 | <geekosaur> | [fmap|1, "oo", 'a'] |
| 12:43:39 | <geekosaur> | s/oo/foo/ |
| 12:43:45 | <dminuoso> | TH feels like cheating here |
| 12:43:59 | × | mbuf quits (~Shakthi@49.205.80.144) (Ping timeout: 265 seconds) |
| 12:44:34 | → | mbuf joins (~Shakthi@49.204.114.77) |
| 12:45:32 | <dminuoso> | % :set -XImpredicativeTypes |
| 12:45:33 | <yahb2> | <no output> |
| 12:45:40 | <dminuoso> | % :t (1:"foo":a:[]) |
| 12:45:40 | <yahb2> | <interactive>:1:10: error: Variable not in scope: a :: String |
| 12:45:43 | <dminuoso> | % :t (1:"foo":'a':[]) |
| 12:45:43 | <yahb2> | <interactive>:1:10: error: ; • Couldn't match type ‘Char’ with ‘[Char]’ ; Expected: String ; Actual: Char ; • In the first argument of ‘(:)’, namely ‘'a'’ ; In the secon... |
| 12:45:56 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 12:46:13 | <dminuoso> | I guess we lack a typing rule to generalize here? |
| 12:47:15 | <Clint> | what would the type of that list be? |
| 12:47:31 | <dminuoso> | [exist a. a] |
| 12:47:59 | <geekosaur> | that can't exist in Haskell, it has to be wrapped in a newtype |
| 12:48:08 | <geekosaur> | ImpredicativeTypes doesn't help |
| 12:49:03 | <dminuoso> | Why cant it exist, though? |
| 12:49:16 | <geekosaur> | and even if it could, you wouldn't know the types of the items coming out, so the newtype wrapper also has to include a constrant that gives you some handle on the types coming out (here, Show) |
| 12:49:39 | <geekosaur> | but at that point you;re doing mroe work than manually writing [show 1, show "foo", show 'a'] |
| 12:49:53 | <mniip> | clearly, when I write 'x' I actually mean `'x' :: exists a. (all instances that Char satifies) *> a` |
| 12:51:12 | <geekosaur> | dminuoso, you could write a typing rule that let you create such a list. you can't write a typing rule that lets you deconstruct it |
| 12:51:36 | <dminuoso> | geekosaur: I think mniip captured my thought well enough mmm. |
| 12:51:55 | <mniip> | that makes a closed world assumption |
| 12:52:01 | <dminuoso> | My initial instinct that by using fmap, perhaps one could conjure a typing rule that would flow the constraint into the existential |
| 12:52:04 | <dminuoso> | Right |
| 12:52:20 | <_________> | are you rediscovering HList? |
| 12:52:21 | <dminuoso> | Or perhaps not necessarily, if we had some obscure magic `AnySatisfy Char` constraint resolvable later. |
| 12:53:03 | <mniip> | well if you didn't want [1, "foo", 'a'] to have the weird type on its own, you would have to give `fmap show` a weird type |
| 12:53:50 | <mniip> | rewriting `show :: forall a. Show a => a -> String` as `show :: (exists a. Show a *> a) -> String` |
| 12:54:02 | <lortabac> | dminuoso: you can create your own list type, something like this: https://paste.tomsmeding.com/FjPlR3jb |
| 12:55:30 | × | Reinhilde quits (ellenor@callbox.trd.is) (Quit: Bye Open Projects!) |
| 12:55:51 | <dminuoso> | lortabac: Mmm thats interesting. |
| 12:56:16 | <[Leary]> | That's the same as a list of existentials though. You can instead preserve the type information with an HList and write something like: |
| 12:56:22 | <[Leary]> | `monomap :: (forall x. c x => x -> a) -> HList c xs -> [a]` |
| 12:56:23 | <mniip> | % fmap (\x -> x show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r]) |
| 12:56:23 | <yahb2> | ["1","\"foo\"","'a'"] |
| 12:57:12 | <mniip> | unforunately $ is not magical enough for ($ show) or ($ 1) to work here |
| 12:58:45 | <dminuoso> | % :set -XDeepSubsumption |
| 12:58:45 | <yahb2> | <no output> |
| 12:58:49 | <lortabac> | [Leary]: that's the same minus the need to wrap every single item with an existential constructor |
| 12:59:00 | <dminuoso> | % fmap ($ show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r]) |
| 12:59:00 | <yahb2> | <interactive>:38:15: error: ; • Couldn't match type: forall r. (forall a. Show a => a -> r) -> r ; with: (a0 -> String) -> b ; Expected: [(a0 -> String) -> b] ; ... |
| 12:59:14 | <mniip> | nothing to do with deep subsumption |
| 13:00:25 | <_________> | % fmap (`$` show) ([\k -> k 1, \k -> k "foo", \k -> k 'a'] :: [forall r. (forall a. Show a => a -> r) -> r]) |
| 13:00:25 | <yahb2> | Oops, something went wrong |
| 13:00:29 | <dminuoso> | [Leary]: I may have to revisit HList, its not entirely clear how that would type check |
| 13:00:43 | × | acidjnk quits (~acidjnk@p200300d6e7137a279cde44451dfff9db.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 13:00:44 | <mniip> | oh actually |
| 13:00:48 | <mniip> | this may be a bug in QuickLook |
| 13:01:07 | <mniip> | that for some reason makes operator sections inequvalent to their expanded form |
| 13:02:05 | <mniip> | \k -> k `id` 1 typechecks, but (`id` 1) does not |
| 13:03:20 | <[Leary]> | dminuoso: Here, the definition would be like `data HList c xs where Nil :: HList c '[]; Cons :: c x => x -> HList c xs -> HList c (x:xs)`, then `monomap f Nil = Nil; monomap f (Cons x xs) = f x : monomap f xs`. |
| 13:07:02 | × | perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.7.1) |
| 13:11:20 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Quit: Reconnecting) |
| 13:11:26 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 13:13:50 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
| 13:15:09 | → | mesaoptimizer_ joins (apotheosis@tilde.institute) |
| 13:15:49 | × | mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit) |
| 13:17:00 | → | mesaoptimizer2 joins (apotheosis@tilde.institute) |
| 13:17:07 | × | mesaoptimizer2 quits (apotheosis@tilde.institute) (Client Quit) |
| 13:18:42 | → | PapuaHardyNet joins (apotheosis@user/PapuaHardyNet) |
| 13:19:43 | × | PapuaHardyNet quits (apotheosis@user/PapuaHardyNet) (Client Quit) |
| 13:20:18 | → | mesaoptimizer_ joins (apotheosis@tilde.institute) |
| 13:20:44 | × | mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit) |
| 13:21:05 | → | PapuaHardyNet joins (apotheosis@user/PapuaHardyNet) |
| 13:21:39 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 13:22:07 | × | PapuaHardyNet quits (apotheosis@user/PapuaHardyNet) (Client Quit) |
| 13:22:31 | → | mesaoptimizer_ joins (apotheosis@tilde.institute) |
| 13:22:42 | × | mesaoptimizer_ quits (apotheosis@tilde.institute) (Client Quit) |
| 13:23:03 | → | Ellenor joins (ellenor@callbox.trd.is) |
| 13:23:06 | → | PapuaHardyNet joins (apotheosis@user/PapuaHardyNet) |
| 13:23:45 | PapuaHardyNet | is now known as mesaoptimizer |
| 13:23:55 | × | mesaoptimizer quits (apotheosis@user/PapuaHardyNet) (Client Quit) |
| 13:24:16 | → | mesaoptimizer joins (apotheosis@user/PapuaHardyNet) |
| 13:24:27 | → | JordiGH joins (~jordi@user/jordigh) |
| 13:25:31 | <merijn> | Is there a quick and dirty way to get a DAG of imports within a component? |
| 13:25:54 | <merijn> | I'm trying to minimise a reproducer and wanna see which leaf modules I can trim |
| 13:28:59 | → | use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:40bc:fcc3:815f:f6e9) |
| 13:32:58 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 260 seconds) |
| 13:33:16 | × | Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 272 seconds) |
| 13:36:26 | × | son0p quits (~ff@2604:3d08:5b7f:5540::4026) (Read error: Connection reset by peer) |
| 13:36:41 | <_________> | not sure if it will help you, but ghc has -ddump-minimal-imports option which creates .imports files with minimal number of imports for each module |
| 13:37:10 | <merijn> | That doesn't really help, no |
| 13:37:24 | <merijn> | I need to know which modules in the package aren't imported by anything else |
| 13:37:38 | × | mmhat quits (~mmh@p200300f1c73901b0ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
| 13:37:39 | <merijn> | so I can start trimming stuff until only a (hopefully handful) of modules remain for the reproducer |
| 13:38:12 | <jean-paul[m]> | I remember a couple projects for doing visualizations - maybe https://hackage.haskell.org/package/haskell-import-graph was one, not sure. a module that isn't imported by anything will have no edges pointing in to it, or something |
| 13:38:44 | <dminuoso> | That looks stunningly simple, since it just works on the .hi files |
| 13:38:53 | <[Leary]> | merijn: My quick-and-dirty: the leaf modules should form a final run when compiled, so just kill them in the opposite order cabal builds them? |
| 13:38:59 | <merijn> | dminuoso: Well, that won't work, then xD |
| 13:39:22 | <merijn> | [Leary]: Well, the seems to assume the build actually, you know, finishes |
| 13:39:27 | <merijn> | s/the/that |
| 13:39:37 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 13:39:40 | <merijn> | My entire problem is that GHC is crashing :p |
| 13:39:45 | <dminuoso> | merijn: Mmm, why not? |
| 13:39:48 | <[Leary]> | True. Old build logs should suffice though. |
| 13:39:53 | × | rburkholder quits (~blurb@96.45.2.121) (Remote host closed the connection) |
| 13:40:06 | <merijn> | And I'm trying to get a reproducer for GHC HQ that is not "here's 200 modules, template haskell, and foreign code, good luck!" |
| 13:40:50 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds) |
| 13:40:57 | <[Leary]> | Maybe there's some sort of cabal --dry-run that would simulate it. |
| 13:42:05 | <dminuoso> | That would not produce the full import graph, though. |
| 13:42:12 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 13:46:14 | Ellenor | is now known as Reinhilde |
| 13:47:17 | → | JordiGH joins (~jordi@user/jordigh) |
| 13:47:26 | <dminuoso> | merijn: Using Cabal-syntax and just quick heuristic parsing (or using `ghc`) should be relatively easy though |
| 13:48:29 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:49:48 | <dminuoso> | Hah this is a cool use of BlockArguments and LambdaCase https://github.com/ocharles/weeder/blob/master/src/Weeder.hs#L367-L373 |
| 13:50:44 | × | SIben quits (~SIben@ns3106586.ip-5-135-191.eu) (Ping timeout: 246 seconds) |
| 13:51:05 | → | mmhat joins (~mmh@p200300f1c715781aee086bfffe095315.dip0.t-ipconnect.de) |
| 13:51:30 | <dminuoso> | mniip: I just thought deep subsumption because my brains pattern matching recalls equivalence to eta expanded forms in some situations is one of the things you give up with simple subsumption. |
| 13:51:43 | <dminuoso> | It looked like the same pattern :) |
| 13:51:53 | <merijn> | dminuoso: I mean, 90% of that is LambdaCase? |
| 13:52:11 | <merijn> | BlockArguments just eliminates the $ |
| 13:52:38 | <dminuoso> | merijn: Sure, but all-in-all this looks very elegant. |
| 13:52:55 | × | kalj quits (~kalj@78-71-20-170-no193.tbcn.telia.com) (Quit: Client closed) |
| 13:53:19 | <[Leary]> | $ would also break the composition |
| 13:53:32 | <merijn> | oh, right |
| 13:53:45 | <merijn> | Trivially solved by making it a list and using Endo :p |
| 13:53:58 | <merijn> | or something :p |
| 13:55:38 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 246 seconds) |
| 13:55:53 | <mauke> | I wish lambdabot had BlockArguments turned on |
| 13:56:09 | <maerwald> | it would win every argument... |
| 13:56:32 | <merijn> | I find BlockArguments kinda meh |
| 13:56:43 | <mauke> | > do negate do sqrt do 2 |
| 13:56:44 | <lambdabot> | error: |
| 13:56:44 | <lambdabot> | Unexpected do block in function application: |
| 13:56:44 | <lambdabot> | do sqrt do 2 |
| 13:56:51 | <mauke> | then that would work |
| 13:57:01 | <merijn> | I'm not sure the benefits outway the effort my brain has to invest to solve them |
| 13:57:24 | <mauke> | you're braining it wrong |
| 13:57:33 | <merijn> | I don't wanna brain at all |
| 13:57:56 | <mauke> | hard to achieve while staying alive |
| 13:58:00 | <maerwald> | let's promote do-blocks to type level... you can only pass a monadic block that was defined via a do |
| 13:59:43 | → | JordiGH joins (~jordi@user/jordigh) |
| 14:00:57 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 14:01:06 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:01:23 | → | califax joins (~califax@user/califx) |
| 14:09:28 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.) |
| 14:10:58 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 14:10:59 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds) |
| 14:12:07 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 14:16:16 | → | thegeekinside joins (~thegeekin@189.217.82.244) |
| 14:19:15 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 14:20:10 | × | fizbin quits (~fizbin@user/fizbin) (Ping timeout: 265 seconds) |
| 14:20:48 | × | hpc quits (~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 255 seconds) |
| 14:23:38 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 246 seconds) |
| 14:25:45 | → | gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 14:29:36 | → | Guest23 joins (~Guest23@27.57.46.219) |
| 14:31:15 | <mniip> | merijn, I'm actually writing a thing for that right now |
| 14:31:45 | <merijn> | mniip: Rendering imports? Or minimising reproducers? |
| 14:32:04 | <mniip> | well, a lot more general, but module import graph is one of the things it can do |
| 14:32:08 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
| 14:32:16 | <merijn> | mniip: Even on code that doesn't compile? ;) |
| 14:32:21 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 14:32:26 | <mniip> | that's harder |
| 14:33:10 | <mniip> | anyway there's a ModuleGraph in a HscEnv |
| 14:33:38 | <mniip> | via GHC plugins, earliest you can get your hands on one seems to be in a parsedResultAction |
| 14:35:03 | → | hpc joins (~juzz@ip98-169-35-163.dc.dc.cox.net) |
| 14:35:48 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:39:38 | × | tabemann_ quits (~tabemann@2600:1700:7990:24e0:61f0:ea0e:b3a2:c286) (Remote host closed the connection) |
| 14:39:55 | → | tabemann_ joins (~tabemann@2600:1700:7990:24e0:a525:f2f6:8a3c:81c2) |
| 14:42:08 | → | shriekingnoise joins (~shrieking@186.137.167.202) |
| 14:43:31 | × | festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed) |
| 14:43:46 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 14:45:41 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 14:47:26 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 14:48:18 | <mniip> | merijn, https://bpa.st/VCXA |
| 14:49:01 | <merijn> | I'm down to about 30 modules the hard way |
| 14:49:09 | <merijn> | So the end is in sight |
| 14:49:34 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 14:58:49 | × | Reinhilde quits (ellenor@callbox.trd.is) (Remote host closed the connection) |
| 15:02:26 | → | machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net) |
| 15:11:24 | → | Ellenor joins (ellenor@callbox.trd.is) |
| 15:19:24 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1) |
| 15:20:49 | → | notzmv joins (~zmv@user/notzmv) |
| 15:22:28 | → | acidjnk joins (~acidjnk@p200300d6e7137a81910d6d9ee28ee6f1.dip0.t-ipconnect.de) |
| 15:23:40 | → | j4cc3b joins (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net) |
| 15:23:43 | Ellenor | is now known as Reinhilde |
| 15:25:41 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:36:27 | × | Guest23 quits (~Guest23@27.57.46.219) (Ping timeout: 256 seconds) |
| 15:37:23 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 255 seconds) |
| 15:38:38 | → | Erutuon_ joins (~Erutuon@user/erutuon) |
| 15:39:28 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 15:45:45 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 15:47:03 | → | sudden joins (~cat@user/sudden) |
| 15:50:33 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 265 seconds) |
| 15:54:09 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:47dd:78b3:3134:94a) (Quit: WeeChat 2.8) |
| 15:54:22 | → | doyougnu joins (~doyougnu@cpe-74-69-132-225.stny.res.rr.com) |
| 16:00:49 | × | JordiGH quits (~jordi@user/jordigh) (Ping timeout: 256 seconds) |
| 16:05:51 | <merijn> | Anyone with GHC 8.10 willing to donate a few minutes to see if I can crash your GHC? :p |
| 16:06:32 | × | j4cc3b quits (~jeffreybe@pool-74-105-2-138.nwrknj.fios.verizon.net) (Ping timeout: 272 seconds) |
| 16:07:18 | × | dsrt^ quits (~dsrt@76.145.185.103) (Remote host closed the connection) |
| 16:07:29 | <mauke> | I only have 8.8.4 |
| 16:07:37 | geekosaur | has ghcup installed ghc back to 8.10; what's up? |
| 16:08:14 | <merijn> | geekosaur: If you clone this and run "cabal build", does GHC blow up? https://github.com/merijn/ghc-crash-reproducer |
| 16:08:48 | <merijn> | It's now sufficiently minimal that I wanna be sure it blows up on other machines too, before I spend effort making it even smaller :p |
| 16:10:17 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:10:44 | <geekosaur> | will take a while as I'd forgotten that I hadn't used 8.10.7 since moving to cabal HEAD so it's installing half the universe now |
| 16:11:22 | <VOID[m]> | Fellas I think I want to implement affine traversal optics, but I think I am missing a lot of theory to do that...... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/e51c52a118253656ec17b7c82cbca65a808494bd>) |
| 16:12:11 | <merijn> | geekosaur: Sure, no rush :) |
| 16:14:16 | × | nut quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 252 seconds) |
| 16:14:48 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 16:19:05 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:19:23 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 264 seconds) |
| 16:20:35 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 16:21:23 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 16:23:38 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds) |
| 16:24:39 | <geekosaur> | merijn, https://paste.tomsmeding.com/sGSzqp1R |
| 16:25:05 | <merijn> | ok, thanks! |
| 16:25:14 | <merijn> | Different symbol, but same basic blow up |
| 16:25:51 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 260 seconds) |
| 16:35:14 | × | mmhat quits (~mmh@p200300f1c715781aee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 16:40:43 | → | leeb joins (~leeb@tk2-243-31079.vs.sakura.ne.jp) |
| 16:48:48 | → | mmhat joins (~mmh@p200300f1c7179fc3ee086bfffe095315.dip0.t-ipconnect.de) |
| 16:52:55 | → | Guest75 joins (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18) |
| 17:00:39 | → | rburkholder joins (~blurb@96.45.2.121) |
| 17:05:20 | × | festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed) |
| 17:08:45 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 17:10:53 | × | mmhat quits (~mmh@p200300f1c7179fc3ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 17:16:30 | → | JordiGH joins (~jordi@user/jordigh) |
| 17:22:16 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 17:26:36 | → | mmhat joins (~mmh@p200300f1c718063cee086bfffe095315.dip0.t-ipconnect.de) |
| 17:26:55 | × | jpds2 quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 17:26:58 | → | Alex_test_ joins (~al_test@178.34.161.14) |
| 17:27:29 | → | jpds2 joins (~jpds@gateway/tor-sasl/jpds) |
| 17:29:35 | × | [exa] quits (~exa@user/exa/x-3587197) (Quit: leaving) |
| 17:30:13 | → | [exa] joins (~exa@user/exa/x-3587197) |
| 17:31:05 | → | gaff joins (~gaff@49.207.199.216) |
| 17:31:06 | × | Guest75 quits (Guest75@2a01:7e01::f03c:92ff:fe5d:7b18) (Quit: Client closed) |
| 17:31:14 | × | gaff quits (~gaff@49.207.199.216) (Client Quit) |
| 17:31:31 | × | festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed) |
| 17:31:39 | × | Alex_test_ quits (~al_test@178.34.161.14) (Client Quit) |
| 17:39:36 | → | nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 17:40:46 | → | son0p joins (~ff@2604:3d08:5b7f:5540::64ea) |
| 17:47:12 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 17:48:28 | → | incertia_ joins (~incertia@209.122.71.127) |
| 17:48:40 | → | pepeiborra_ joins (sid443799@id-443799.ilkley.irccloud.com) |
| 17:48:55 | → | jespada_ joins (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) |
| 17:49:39 | → | jmtd joins (jon@dow.land) |
| 17:49:44 | → | CodeKiwi joins (~kiwi@137.184.156.191) |
| 17:49:44 | → | aristid_ joins (sid1599@id-1599.uxbridge.irccloud.com) |
| 17:49:51 | × | festive_kurbus quits (~festive_k@user/kurbus) (Client Quit) |
| 17:49:59 | → | jbggs[m]1 joins (~jbggsmatr@2001:470:69fc:105::2:995f) |
| 17:50:13 | × | incertia quits (~incertia@209.122.71.127) (Ping timeout: 252 seconds) |
| 17:50:13 | incertia_ | is now known as incertia |
| 17:50:23 | × | pepeiborra quits (sid443799@id-443799.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
| 17:50:24 | pepeiborra_ | is now known as pepeiborra |
| 17:50:59 | → | jackhill_ joins (~jackhill@kalessin.dragonsnail.net) |
| 17:51:13 | → | elkcl_ joins (~elkcl@broadband-188-255-19-11.ip.moscow.rt.ru) |
| 17:51:41 | → | bonz060_ joins (~quassel@2001:bc8:47a4:a23::1) |
| 17:52:07 | → | sm1 joins (~sm@plaintextaccounting/sm) |
| 17:52:09 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 17:52:52 | → | kitzman_ joins (~kitzman@user/dekenevs) |
| 17:52:57 | → | sunarch_ joins (sid526836@user/sunarch) |
| 17:53:01 | → | tristanC_ joins (~tristanC@user/tristanc) |
| 17:53:08 | → | gmc_ joins (sid58314@id-58314.ilkley.irccloud.com) |
| 17:53:09 | → | urdh_ joins (~urdh@user/urdh) |
| 17:53:21 | → | kmein_ joins (~weechat@user/kmein) |
| 17:53:45 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:53:48 | → | melonai- joins (~mel@rnrd.eu) |
| 17:54:05 | → | Momentum_ joins (momentum@tilde.team) |
| 17:54:20 | × | sunarch quits (sid526836@user/sunarch) (Ping timeout: 252 seconds) |
| 17:54:21 | → | Cadey joins (~cadey@tailscale/xe) |
| 17:54:21 | sunarch_ | is now known as sunarch |
| 17:54:27 | → | ncf_ joins (~n@monade.li) |
| 17:54:34 | × | jbggs[m] quits (~jbggsmatr@2001:470:69fc:105::2:995f) (Ping timeout: 252 seconds) |
| 17:54:34 | × | jackhill quits (~jackhill@kalessin.dragonsnail.net) (Ping timeout: 252 seconds) |
| 17:55:26 | → | peutri_ joins (~peutri@bobo.desast.re) |
| 17:55:28 | × | elkcl quits (~elkcl@broadband-188-255-19-11.ip.moscow.rt.ru) (Ping timeout: 252 seconds) |
| 17:55:28 | × | aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 252 seconds) |
| 17:55:28 | × | DigitalKiwi quits (~kiwi@137.184.156.191) (Ping timeout: 252 seconds) |
| 17:55:28 | × | kitzman quits (~kitzman@user/dekenevs) (Ping timeout: 252 seconds) |
| 17:55:29 | × | Momentum quits (momentum@tilde.team) (Ping timeout: 252 seconds) |
| 17:55:29 | × | sus quits (zero@user/zeromomentum) (Ping timeout: 252 seconds) |
| 17:55:29 | × | sm quits (~sm@plaintextaccounting/sm) (Ping timeout: 252 seconds) |
| 17:55:29 | × | bonz060 quits (~quassel@2001:bc8:47a4:a23::1) (Ping timeout: 252 seconds) |
| 17:55:29 | × | gmc quits (sid58314@id-58314.ilkley.irccloud.com) (Ping timeout: 252 seconds) |
| 17:55:29 | × | Jon quits (jon@dow.land) (Ping timeout: 252 seconds) |
| 17:55:29 | × | geekosaur[m] quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 252 seconds) |
| 17:55:30 | × | dsal quits (sid13060@id-13060.lymington.irccloud.com) (Ping timeout: 252 seconds) |
| 17:55:30 | × | tristanC quits (~tristanC@user/tristanc) (Ping timeout: 252 seconds) |
| 17:55:30 | × | Xe quits (~cadey@tailscale/xe) (Ping timeout: 252 seconds) |
| 17:55:30 | × | jespada quits (~jespada@nmal-24-b2-v4wan-166357-cust1764.vm24.cable.virginm.net) (Ping timeout: 252 seconds) |
| 17:55:30 | × | urdh quits (~urdh@user/urdh) (Ping timeout: 252 seconds) |
| 17:55:30 | × | kmein quits (~weechat@user/kmein) (Ping timeout: 252 seconds) |
| 17:55:30 | × | ozkutuk[m] quits (~ozkutuk@2001:470:69fc:105::2:9af8) (Ping timeout: 252 seconds) |
| 17:55:30 | × | kadoban quits (~kadoban@user/kadoban) (Ping timeout: 252 seconds) |
| 17:55:30 | × | ncf quits (~n@monade.li) (Ping timeout: 252 seconds) |
| 17:55:30 | × | elevenkb[m] quits (~elevenkb@2001:470:69fc:105::2:cb89) (Ping timeout: 252 seconds) |
| 17:55:30 | × | liskin quits (~liskin@xmonad/liskin) (Ping timeout: 252 seconds) |
| 17:55:30 | × | melonai quits (~mel@rnrd.eu) (Ping timeout: 252 seconds) |
| 17:55:30 | × | peutri quits (~peutri@bobo.desast.re) (Ping timeout: 252 seconds) |
| 17:55:31 | elkcl_ | is now known as elkcl |
| 17:55:31 | aristid_ | is now known as aristid |
| 17:55:31 | jmtd | is now known as Jon |
| 17:55:31 | → | lisk1n joins (~liskin@xmonad/liskin) |
| 17:55:32 | urdh_ | is now known as urdh |
| 17:55:38 | → | dsal joins (sid13060@id-13060.lymington.irccloud.com) |
| 17:55:57 | → | sus joins (zero@user/zeromomentum) |
| 17:56:10 | → | Xeroine_ joins (~Xeroine@user/xeroine) |
| 17:56:13 | × | Xeroine quits (~Xeroine@user/xeroine) (Read error: Connection reset by peer) |
| 17:56:20 | → | geekosaur[m] joins (~geekosaur@xmonad/geekosaur) |
| 17:56:25 | → | ozkutuk[m] joins (~ozkutuk@2001:470:69fc:105::2:9af8) |
| 17:57:35 | ncf_ | is now known as ncf |
| 17:58:41 | × | califax quits (~califax@user/califx) (Ping timeout: 255 seconds) |
| 17:59:45 | → | califax joins (~califax@user/califx) |
| 18:01:54 | Momentum_ | is now known as Momentum |
| 18:02:17 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection) |
| 18:02:38 | → | notzmv joins (~zmv@user/notzmv) |
| 18:03:24 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 18:03:33 | Cadey | is now known as Xe |
| 18:04:40 | → | califax joins (~califax@user/califx) |
| 18:07:29 | → | kadoban joins (~kadoban@user/kadoban) |
| 18:08:01 | → | mestre joins (~mestre@191.177.185.178) |
| 18:08:30 | → | elevenkb[m] joins (~elevenkb@2001:470:69fc:105::2:cb89) |
| 18:10:12 | × | MajorBiscuit quits (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) (Ping timeout: 256 seconds) |
| 18:19:48 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 18:21:08 | → | thyriaen joins (~thyriaen@2a01:aea0:dd4:4bae:6245:cbff:fe9f:48b1) |
| 18:22:57 | → | econo joins (uid147250@user/econo) |
| 18:23:02 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 18:24:42 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 18:26:33 | × | mbuf quits (~Shakthi@49.204.114.77) (Quit: Leaving) |
| 18:34:06 | × | teo quits (~teo@user/teo) (Ping timeout: 272 seconds) |
| 18:39:36 | <dminuoso> | VOID[m]: Affine traversals arent really "needed" for anything. There's nothing that you can do with an affine traversal that you couldnt also do with a general traversal. |
| 18:40:04 | × | festive_kurbus quits (~festive_k@user/kurbus) (Quit: Client closed) |
| 18:40:13 | <dminuoso> | They are just useful in expressing some property (namely that the traversal or fold) could at most target only one element, denoting that something like `preview` couldnt possibly throw away information |
| 18:40:23 | <dminuoso> | But that's the extend of it |
| 18:41:03 | <VOID[m]> | dminuoso: I figured I am missing basic knowledge around composition (Functors, Applicatives and such). Am reading Learn You a Haskell for Great Good |
| 18:41:26 | <dminuoso> | Well there's is some easy ways to gain intutions about how lenses and traversals work. |
| 18:42:38 | <dminuoso> | The main problem in building affine traversals in `lens` is that you would need a class `Pointed`, which you could make. However, they wouldn't cleanly degrade to traversals unless we made it a superclass of Applicative, which is not something you are likely to make happen ever. |
| 18:43:06 | <dminuoso> | (Especially since the use of a typeclass `Pointed` would pretty much be limited to just that, affine traversals. There isnt any other conceivable use for them in the entire Haskell world) |
| 18:43:17 | <mauke> | is Pointed = Applicative - Functor? |
| 18:43:31 | <dminuoso> | Pointed is just `pure` |
| 18:43:33 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:43:46 | <dminuoso> | So its Applicative sans <*> |
| 18:43:53 | <mauke> | oh, so Applicative - Functor - (<*>) |
| 18:44:03 | <dminuoso> | Well, - Functor doesnt make sense |
| 18:44:10 | <dminuoso> | The ideal lattice you would ahve is: |
| 18:44:35 | <dminuoso> | class Apply f where (<*>) :: f (a -> b) -> f a -> f b |
| 18:44:37 | → | festive_kurbus joins (~festive_k@user/kurbus) |
| 18:44:46 | <dminuoso> | class Pointed f where pure :: a -> f a |
| 18:44:56 | <dminuoso> | class (Apply f, Pointed f) => Applicative f |
| 18:45:26 | <dminuoso> | This way you would get automatic degradations to `traversals` in all scenarios |
| 18:47:12 | <dminuoso> | However, this introduces a different set of problems |
| 18:48:10 | <VOID[m]> | <dminuoso> "The main problem in building..." <- Te thing is I don't understand this sentence, which leads me to believe that I am attempting something above my understanding of Haskell XD |
| 18:48:28 | <VOID[m]> | s/Te/The/ |
| 18:49:02 | <dminuoso> | VOID[m]: For what its worth, I did build what you're asking for myself recently |
| 18:49:45 | <dminuoso> | VOID[m]: However, you are absolutely correct that an affine traversal would concisely describe that accessor, so you seem to have a fairly good basic understanding of lens already. |
| 18:50:01 | <VOID[m]> | I just want an optic made from some path object that works for my tree, that lets me return Maybe when getting and either insert into tree or replace a node with setter (or ignore, if path makes no sence) |
| 18:50:09 | <dminuoso> | VOID[m]: But it wouldnt be needed, such an accessor could easily just be a Traversal with the implicit understanding it will only touch one element at most. |
| 18:50:46 | <dminuoso> | Or maybe a `Lense even |
| 18:50:54 | <dminuoso> | Which is less powerful, but would suffice |
| 18:50:55 | <VOID[m]> | dminuoso: I have okish basic understanding, but each tutorial I found has a place where it says "Now squit a bit - it's a Foldable with Applicative!" and suddenly code turns into hieroglyphs XD |
| 18:50:56 | <dminuoso> | Consider: |
| 18:50:58 | <dminuoso> | at :: Index m -> Lens' m (Maybe (IxValue m)) |
| 18:51:04 | <dminuoso> | ix :: Index m -> Traversal' m (IxValue m) |
| 18:51:14 | <dminuoso> | (The difference here is that `at` gets to delete an element, `ix` does not) |
| 18:51:29 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 18:51:57 | → | ft joins (~ft@p4fc2a257.dip0.t-ipconnect.de) |
| 18:52:06 | <VOID[m]> | dminuoso: god damn it |
| 18:52:06 | <VOID[m]> | I read somewhere, that Lens has to succeed |
| 18:52:06 | <VOID[m]> | I don't get how that works with `Maybe` ;_; |
| 18:52:31 | <dminuoso> | VOID[m]: Imagine something like: |
| 18:52:42 | <VOID[m]> | Also when I tried doing Lens with Maybe it told me that I have to accept Maybe as input to setter (probably because I was using simplified helpers somewhere?) |
| 18:52:45 | <dminuoso> | data User = User { _name :: Maybe Textt } |
| 18:52:49 | <VOID[m]> | dminuoso: Is it open source by any chance? |
| 18:52:56 | <dminuoso> | With a TH generated lens of `name :: Lens' User (Maybe Text)` |
| 18:53:12 | <dminuoso> | VOID[m]: And no, thats absolutely right. |
| 18:53:55 | VOID[m] | sent a hs code block: https://libera.ems.host/_matrix/media/v3/download/libera.chat/88715e5af4c7aef14cc2044c63c6da47ddb4381c |
| 18:54:07 | <dminuoso> | foo & someMaybeLens .~ Just 1 |
| 18:54:09 | <dminuoso> | foo & someMaybeLens .~ Nothing |
| 18:54:13 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:54:22 | <dminuoso> | However, yuou can use the ?~ shorthand (which will automaically introduce the Just) |
| 18:55:19 | mauke | is impressed by the Matrix->IRC bridge |
| 18:56:17 | <VOID[m]> | mauke: As a Matrix user - the bridge is GREAT. Persistent history, many devices, modern UI. I just hope you IRC fellas see all of my messages correctly :P |
| 18:56:30 | <dminuoso> | Looks perfectly fine |
| 18:56:47 | <dminuoso> | Even with you writing more than libera allows, which automatically gets send into a paste snippet |
| 18:57:23 | <mauke> | it seems to translate targeted replies and self corrections in a perfectly natural fashion |
| 18:57:40 | <monochrom> | Nice. |
| 18:57:48 | <VOID[m]> | Damn |
| 18:57:48 | <VOID[m]> | That's nice |
| 18:57:48 | <VOID[m]> | One day I'll have to check out what I am actually sending XD |
| 18:58:00 | <dminuoso> | VOID[m]: Ill let you know what I do for my tree |
| 18:58:22 | <dminuoso> | data Tree k a = Node { treeNode :: a, treeChildren :: M.HashMap k (Tree k a) } deriving (Eq, Ord, Show, Foldable, Functor) |
| 18:58:25 | <VOID[m]> | dminuoso: your maybe example *seems* simple, but I don't know how to do the thing for my `getTree` |
| 18:58:50 | <dminuoso> | https://gist.github.com/dminuoso/f14ddbbc95a5978bed8bcff594cbf1fe |
| 18:59:04 | <dminuoso> | VOID[m]: ^- and this is the alterF that allows you to edit the tree |
| 18:59:20 | <dminuoso> | With some extra hooks for diagnostics that I require |
| 18:59:29 | <mauke> | VOID[m]: here's what I see: https://paste.tomsmeding.com/7yiOoIXk |
| 18:59:55 | <dminuoso> | That being said |
| 19:00:07 | <dminuoso> | There's some cool expression you could do with lens |
| 19:00:42 | <dminuoso> | All you need is just an Ixed (or even At) instance |
| 19:00:55 | <dminuoso> | Then you can just fold some [Key] into a Traversal |
| 19:01:28 | <dminuoso> | VOID[m]: Take my Tree as an immediate example (simply because it already works for that) |
| 19:01:46 | <dminuoso> | We already have an `(Eq k, Hashable k) => Ixed (HashMap k a)` instance |
| 19:02:08 | <VOID[m]> | mauke: I have mixed feelings about that code block... |
| 19:02:22 | <dminuoso> | Modulo the newtype, we can already write `ix "key"` to get a traversal one level deep. |
| 19:02:40 | × | AlexZenon quits (~alzenon@178.34.161.14) (Ping timeout: 260 seconds) |
| 19:02:42 | <dminuoso> | Now with [Text] you can just fold, `at` each element, and compose them together |
| 19:02:44 | <dminuoso> | Done! |
| 19:03:08 | <dminuoso> | Does that make any sense to you? |
| 19:03:18 | × | Alex_test quits (~al_test@178.34.161.14) (Ping timeout: 268 seconds) |
| 19:03:40 | <VOID[m]> | dminuoso: "fold some [Key] into a Traversal" I like your funny words magic man XD I'll have to return to this conversation after I read about composition more, for now folding, at, ixed are quite hard to comprehend... I used them, I managed to implement them a few times, but I don't really "get" them |
| 19:03:52 | <VOID[m]> | And when they get composed with each other it becomes VERY hard to follow for me |
| 19:03:52 | <dminuoso> | Okay let me slow down for a moment |
| 19:04:02 | <dminuoso> | % import qualified Data.Map as M |
| 19:04:02 | <yahb2> | <no output> |
| 19:04:28 | <dminuoso> | % let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3)] |
| 19:04:28 | <yahb2> | <no output> |
| 19:04:32 | <dminuoso> | :t m |
| 19:04:33 | <lambdabot> | Expr |
| 19:04:34 | <dminuoso> | % :t m |
| 19:04:34 | <yahb2> | m :: Num a => M.Map String a |
| 19:04:38 | <dminuoso> | VOID[m]: So far so good? |
| 19:04:40 | × | nschoe quits (~q@2a01:e0a:8e:a190:befe:db92:c07:c717) (Remote host closed the connection) |
| 19:04:41 | <dminuoso> | % let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)] |
| 19:04:41 | <yahb2> | <no output> |
| 19:04:43 | <dminuoso> | % :t m |
| 19:04:43 | <yahb2> | m :: M.Map String Int |
| 19:04:48 | <dminuoso> | TO make it monomorphic, less confusion |
| 19:05:28 | <VOID[m]> | sure |
| 19:05:29 | <VOID[m]> | I get it so far |
| 19:05:41 | <dminuoso> | Now, because we have an `instance Ord k => Ixed (Map k a)` that means we can use `ix :: String -> Traversal' (M.Map String Int) Int` |
| 19:05:51 | <dminuoso> | Let's look at how that works |
| 19:05:52 | → | nschoe joins (~q@2a01:e0a:8e:a190:7d4a:1795:de80:8cc7) |
| 19:06:13 | <dminuoso> | % m ^.. ix "foo" |
| 19:06:13 | <yahb2> | <interactive>:16:3: error: ; Variable not in scope: (^..) :: M.Map String Int -> t0 -> t ; ; <interactive>:16:7: error: ; • Variable not in scope: ix :: String -> t0 ; • Perhaps you me... |
| 19:06:20 | <dminuoso> | % import Control.Lens.Fold |
| 19:06:20 | <yahb2> | <no location info>: error: ; Could not find module ‘Control.Lens.Fold’ ; It is not a module in the current program, or in any known package. |
| 19:06:22 | <dminuoso> | Uh |
| 19:06:30 | <dminuoso> | :t (^..) |
| 19:06:31 | <lambdabot> | s -> Getting (Endo [a]) s a -> [a] |
| 19:06:36 | <dminuoso> | Okay let me repeat it with lambdabot |
| 19:06:41 | <dminuoso> | @let import qualified Data.Map as M |
| 19:06:42 | <lambdabot> | Defined. |
| 19:06:47 | <dminuoso> | @let m = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)] |
| 19:06:48 | <lambdabot> | Defined. |
| 19:06:51 | <dminuoso> | @let myMap = M.fromList [("foo", 1), ("bar", 2), ("quux", 3 :: Int)] |
| 19:06:52 | <lambdabot> | Defined. |
| 19:06:58 | <dminuoso> | > myMap ^.. ix "foo" |
| 19:07:00 | <lambdabot> | [1] |
| 19:07:03 | <dminuoso> | VOID[m]: So far so good? |
| 19:07:29 | <VOID[m]> | list as output |
| 19:07:31 | <VOID[m]> | ? |
| 19:07:37 | <dminuoso> | That's fine, we'll talk about that later |
| 19:07:45 | <VOID[m]> | Then yes |
| 19:07:48 | <dminuoso> | This is because `ix` is a traversal, and (^..) is just toListOf |
| 19:07:54 | <dminuoso> | (or ix produces a traversal, rather) |
| 19:07:59 | <dsal> | ^? would also be fine here. |
| 19:08:24 | <VOID[m]> | Ok ok, makes sense |
| 19:08:34 | <dminuoso> | VOID[m]: Now what we'll do instead, is make a nested map |
| 19:09:21 | <dminuoso> | @let newtype Tree k a = Node { nodeValue :: a, children :: Map k (Tree k a) } |
| 19:09:21 | <lambdabot> | Parse failed: newtype declaration constructor must have exactly one parameter. |
| 19:09:26 | <dminuoso> | @let data Tree k a = Node { nodeValue :: a, children :: Map k (Tree k a) } |
| 19:09:27 | <lambdabot> | /sandbox/tmp/.L.hs:164:50: error: |
| 19:09:27 | <lambdabot> | Not in scope: type constructor or class ‘Map’ |
| 19:09:27 | <lambdabot> | Perhaps you meant ‘M.Map’ (imported from Data.Map) |
| 19:09:31 | <dminuoso> | @let data Tree k a = Node { nodeValue :: a, children :: M.Map k (Tree k a) } |
| 19:09:32 | <lambdabot> | /sandbox/tmp/.L.hs:165:43: error: |
| 19:09:32 | <lambdabot> | Ambiguous occurrence ‘Tree’ |
| 19:09:32 | <lambdabot> | It could refer to |
| 19:09:40 | <dminuoso> | @let data MyTree k a = Node { nodeValue :: a, children :: M.Map k (MyTree k a) } |
| 19:09:41 | <lambdabot> | Defined. |
| 19:09:46 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:09:51 | <dminuoso> | VOID[m]: So you see how this is a tree? |
| 19:10:06 | → | Alex_test joins (~al_test@178.34.161.14) |
| 19:10:19 | <VOID[m]> | Yes |
| 19:10:38 | <VOID[m]> | And keys in DB would be the same as crumbs in my tree, right? |
| 19:10:44 | <dminuoso> | Yes |
| 19:10:46 | <VOID[m]> | *keys in map |
| 19:10:50 | → | AlexZenon joins (~alzenon@178.34.161.14) |
| 19:10:53 | <VOID[m]> | great |
| 19:11:58 | <dminuoso> | @let type instance IxValue (MyTree k a) = a |
| 19:12:00 | <lambdabot> | Defined. |
| 19:12:23 | <dminuoso> | @let type instance Index (MyTree k a) = k |
| 19:12:24 | <lambdabot> | Defined. |
| 19:12:42 | <dminuoso> | These are just type family instances, think of them as just definitions for a type level function. This type family is used in Ixed. |
| 19:13:07 | <dminuoso> | Feel free to gloss over it (they just help Ixed understand what the Key and Value types of `MyTree k a` are |
| 19:13:38 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 19:13:39 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 19:14:00 | → | biberu joins (~biberu@user/biberu) |
| 19:14:08 | <VOID[m]> | I won't say that I could write something like this myself, but I get the idea |
| 19:16:50 | <dminuoso> | gah I need to redo the above type due to more conflicts |
| 19:17:03 | <dminuoso> | @let data MyTree k a = Node { myTreeValue :: a, myTreeChildren :: M.Map k (MyTree k a) } |
| 19:17:04 | <lambdabot> | /sandbox/tmp/.L.hs:171:1: error: |
| 19:17:04 | <lambdabot> | Multiple declarations of ‘MyTree’ |
| 19:17:04 | <lambdabot> | Declared at: /sandbox/tmp/.L.hs:164:1 |
| 19:17:07 | <dminuoso> | @undef |
| 19:17:07 | <lambdabot> | Undefined. |
| 19:17:09 | <dminuoso> | @let data MyTree k a = Node { myTreeValue :: a, myTreeChildren :: M.Map k (MyTree k a) } |
| 19:17:10 | <lambdabot> | Defined. |
| 19:17:12 | <dminuoso> | @let type instance IxValue (MyTree k a) = a |
| 19:17:13 | <lambdabot> | Defined. |
| 19:17:15 | <dsal> | Yeah, blow it all up. |
| 19:17:16 | <dminuoso> | @let type instance Index (MyTree k a) = k |
| 19:17:17 | <lambdabot> | Defined. |
| 19:17:25 | <dsal> | (we all share the same lambdabot) |
| 19:17:41 | <dminuoso> | @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v} |
| 19:17:41 | <lambdabot> | Parse failed: Parse error: EOF |
| 19:17:46 | <dminuoso> | @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v} |
| 19:17:46 | <lambdabot> | Parse failed: Parse error: EOF |
| 19:17:47 | × | zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer) |
| 19:17:49 | <dminuoso> | @let childrenLens = lens (\m -> myTreeChildren m) (\m v -> m{myTreeChildren = v}) |
| 19:17:50 | <lambdabot> | Defined. |
| 19:18:03 | <dminuoso> | VOID[m]: ^- here, can be TH generated, I just made it by hand. a lens for the children side. |
| 19:18:11 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 264 seconds) |
| 19:18:24 | <dsal> | lambdabot can't TH |
| 19:18:31 | → | zer0bitz joins (~zer0bitz@196.244.192.60) |
| 19:19:14 | <dminuoso> | @let instance Ord k => Ixed (MyTree k a) where ix i = childrenLens . at i |
| 19:19:15 | <lambdabot> | /sandbox/tmp/.L.hs:168:16: error: |
| 19:19:15 | <lambdabot> | • Occurs check: cannot construct the infinite type: |
| 19:19:15 | <lambdabot> | a ~ Maybe (MyTree k a) |
| 19:19:21 | <dminuoso> | Ah huh. |
| 19:19:36 | <dminuoso> | Maybe we do need to go through Plated here |
| 19:20:10 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 19:20:18 | <dminuoso> | Ah no, this is incompatible with the above type instance heh |
| 19:20:29 | <dminuoso> | @let type instance Index (MyTree k a) = MyTree k a |
| 19:20:30 | <lambdabot> | /sandbox/tmp/.L.hs:161:15: error: |
| 19:20:30 | <lambdabot> | Conflicting family instance declarations: |
| 19:20:30 | <lambdabot> | Index (MyTree k a) = k -- Defined at /sandbox/tmp/.L.hs:161:15 |
| 19:21:11 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 19:21:36 | <monochrom> | Yikes you may have to @undefine and define everything all over again :( :) |
| 19:21:52 | <dminuoso> | lambdabot is getting spammed in query :) |
| 19:22:36 | <dminuoso> | @let instance Ord k => Ixed (MyTree1 k a) where ix i = childrenLens1 . at i |
| 19:22:37 | <lambdabot> | /sandbox/tmp/.L.hs:175:16: error: |
| 19:22:37 | <lambdabot> | • Couldn't match type ‘MyTree k a0’ with ‘MyTree1 k a’ |
| 19:22:37 | <lambdabot> | Expected type: (IxValue (MyTree1 k a) -> f (IxValue (MyTree1 k a))) |
| 19:23:18 | <monochrom> | I wonder if you could merge into a looong single line @let { data MyTree = ... ; instance Foo ... ; type Bar = ... } |
| 19:23:18 | <VOID[m]> | I'll try to do it myself, I think I saw enough? |
| 19:23:18 | <VOID[m]> | I have some questions about the process though |
| 19:23:46 | <geekosaur> | just leave off the braces |
| 19:23:47 | <dsal> | Normal process is doing it in a file and :r -- but lambda bot doesn't support :r |
| 19:24:03 | <dminuoso> | @let instance Ord k => Ixed (MyTree1 k a) where ix i = __childrenLens1 . at i |
| 19:24:04 | <lambdabot> | /sandbox/tmp/.L.hs:177:16: error: |
| 19:24:04 | <lambdabot> | • Couldn't match type ‘MyTree1 k a’ with ‘Maybe (MyTree k a)’ |
| 19:24:04 | <lambdabot> | Expected type: (IxValue (MyTree1 k a) -> f (IxValue (MyTree1 k a))) |
| 19:24:16 | <dminuoso> | Oh hah. Not again. |
| 19:24:21 | <monochrom> | @where playground |
| 19:24:21 | <lambdabot> | I know nothing about playground. |
| 19:24:44 | <geekosaur> | https://play-haskell.tomsmeding.com/ |
| 19:24:52 | <VOID[m]> | I miss knowledge about composition |
| 19:24:52 | <VOID[m]> | I couldn't come up with using Ixed by myself |
| 19:25:01 | <VOID[m]> | I have to learn composition stuff |
| 19:25:06 | <dminuoso> | VOID[m]: Sorry Im messing up with slight typos. Im almost there. Hang tight |
| 19:25:09 | <dsal> | Oh wow. This is cool. I needed this yesterday. |
| 19:25:25 | <dminuoso> | @let data MyTree2 k a = Node { myTree2Value :: a, myTree1Children :: M.Map k (MyTree2 k a) |
| 19:25:25 | <lambdabot> | Parse failed: Parse error: EOF |
| 19:25:27 | <dminuoso> | @let data MyTree2 k a = Node { myTree2Value :: a, myTree1Children :: M.Map k (MyTree2 k a) } |
| 19:25:28 | <lambdabot> | /sandbox/tmp/.L.hs:176:20: error: |
| 19:25:28 | <lambdabot> | Multiple declarations of ‘Node’ |
| 19:25:28 | <lambdabot> | Declared at: /sandbox/tmp/.L.hs:156:19 |
| 19:25:30 | <monochrom> | Thanks. That. You may find it more usable when you need so many lines of definitions. |
| 19:25:34 | <dminuoso> | Heh |
| 19:25:39 | <dminuoso> | monochrom: does it have lens, though? |
| 19:25:56 | <dsal> | Could not find module ‘Control.Lens’ |
| 19:26:02 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 19:26:12 | <monochrom> | Hrm probably not. |
| 19:26:42 | <geekosaur> | figured. neither does yahb2 as far as I can tell |
| 19:27:18 | <monochrom> | I might just copy-paste the content of lens >:) |
| 19:27:38 | → | k8yun joins (~k8yun@user/k8yun) |
| 19:27:50 | <VOID[m]> | I don't get type instance Index (MyTree k a) = MyTree k a |
| 19:27:51 | <VOID[m]> | Isn't Index just the k? |
| 19:28:01 | <VOID[m]> | Or is this not what that means |
| 19:28:43 | <dminuoso> | VOID[m]: https://gist.github.com/dminuoso/45d3126e303ff90b111232320022b022 success, finally |
| 19:29:08 | <dminuoso> | So now we have a Tree, and we can build a traversal that looks one level using `at` |
| 19:29:11 | <geekosaur> | @where+ playground https://play-haskell.tomsmeding.com/ |
| 19:29:11 | <lambdabot> | Good to know. |
| 19:29:55 | <monochrom> | Yeah should be type instance Index (MyTree4 k a) = k |
| 19:30:02 | <dsal> | @playground+ lens |
| 19:30:02 | <lambdabot> | Unknown command, try @list |
| 19:30:34 | <monochrom> | Ugh MyTree4 haha. "This is the 4th attempt" |
| 19:30:35 | <geekosaur> | wrong bot anyway, it'd be yahb2 if it worked at all |
| 19:31:11 | → | ballast joins (~ballast@cpe-104-32-238-223.socal.res.rr.com) |
| 19:31:11 | <dminuoso> | @let ats = appEndo . foldMap (Endo . at) |
| 19:31:12 | <lambdabot> | Defined. |
| 19:31:15 | <dminuoso> | :t ats |
| 19:31:16 | <dsal> | That's an awesome site anyway. I like the core button. |
| 19:31:16 | <lambdabot> | (Foldable t1, Functor f) => t1 () -> (Maybe t2 -> f (Maybe t2)) -> Maybe t2 -> f (Maybe t2) |
| 19:31:23 | <[exa]> | actuellement, can we put the playground into the topic? |
| 19:31:41 | <dminuoso> | Uh, where did that () come from? |
| 19:32:02 | <[exa]> | dminuoso: looks like default () |
| 19:32:10 | <mauke> | :t foldMap |
| 19:32:11 | <lambdabot> | (Foldable t, Monoid m) => (a -> m) -> t a -> m |
| 19:33:10 | <mauke> | :t let ats x = (appEndo . foldMap (Endo . at)) x in ats |
| 19:33:11 | <monochrom> | I'm going to put it right after the downloads.haskell.org link. |
| 19:33:11 | <lambdabot> | (Foldable t1, Functor f) => t1 () -> (Maybe t2 -> f (Maybe t2)) -> Maybe t2 -> f (Maybe t2) |
| 19:33:14 | ChanServ | sets mode +o monochrom |
| 19:33:37 | <dminuoso> | Ah at is wrong anyway here |
| 19:33:39 | <dminuoso> | @let ixes''' = appEndo . foldMap (Endo . ix) :: At m => [Index m] -> Traversal' m (IxValue m) |
| 19:33:40 | <lambdabot> | /sandbox/tmp/.L.hs:202:31: error: |
| 19:33:40 | <lambdabot> | • Couldn't match type ‘m1’ with ‘IxValue m1’ |
| 19:33:40 | <lambdabot> | ‘m1’ is a rigid type variable bound by |
| 19:33:57 | monochrom | sets topic to "https://www.reddit.com/r/haskell | Admin: #haskell-ops | Offtopic: #haskell-offtopic | https://downloads.haskell.org https://play-haskell.tomsmeding.com/ | Paste code/errors: https://paste.tomsmeding.com | Logs: https://ircbrowse.tomsmeding.com/browse/lchaskell | AoC Leaderboard: 43100-84040706" |
| 19:34:07 | × | zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer) |
| 19:34:33 | monochrom | sets mode -o monochrom |
| 19:34:39 | <dminuoso> | I gotta run, though |
| 19:34:46 | <monochrom> | Feel free to optimize it though, heh. |
| 19:34:51 | <dminuoso> | VOID[m]: Anyway, you can do it along this way |
| 19:35:11 | <dminuoso> | And you can upgrade to `At`, which expresses modifying whatever the optic points at. |
| 19:35:45 | → | zer0bitz joins (~zer0bitz@196.244.192.60) |
| 19:36:00 | <VOID[m]> | Do the docs have a tree with short descriptions maybe? |
| 19:36:12 | <dminuoso> | (Or you can just use `unsafeSingular` with whatever this produces and be done with it) |
| 19:36:14 | <VOID[m]> | How does one gain knowledge about stuff like "Ixed", "At" etc |
| 19:36:21 | × | zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer) |
| 19:36:33 | <dminuoso> | No, you are expected to just magically understand from the type signatures and the short examples |
| 19:36:46 | <monochrom> | I think the lens front page has a huge UML class hierarchy. |
| 19:36:57 | → | zer0bitz joins (~zer0bitz@196.244.192.60) |
| 19:37:22 | <ballast> | I've reached a point in my application where I've put an auxiliary function into my state data type that isn't meaningfully a part of the state, i.e. it never changes. Is it time to use a ReaderT or is it OK to just let it kick around as part of the state? |
| 19:38:08 | × | califax quits (~califax@user/califx) (Ping timeout: 255 seconds) |
| 19:38:18 | <monochrom> | https://hackage.haskell.org/package/lens and scroll down |
| 19:38:51 | <monochrom> | Oh, https://hackage.haskell.org/package/lens#readme |
| 19:39:10 | × | malte quits (~malte@mal.tc) (Ping timeout: 256 seconds) |
| 19:39:44 | × | melonai- quits (~mel@rnrd.eu) (Ping timeout: 256 seconds) |
| 19:39:49 | → | melonai joins (~mel@rnrd.eu) |
| 19:39:52 | <VOID[m]> | And you se Ixed on that graph? |
| 19:39:59 | <monochrom> | No. |
| 19:39:59 | → | [exa]_ joins (~exa@srv3n.blesmrt.net) |
| 19:40:06 | × | [exa]_ quits (~exa@srv3n.blesmrt.net) (Changing host) |
| 19:40:06 | → | [exa]_ joins (~exa@user/exa/x-3587197) |
| 19:40:18 | × | [exa] quits (~exa@user/exa/x-3587197) (Ping timeout: 256 seconds) |
| 19:40:18 | × | crns quits (~netcrns@user/crns) (Ping timeout: 256 seconds) |
| 19:40:24 | [exa]_ | is now known as [exa] |
| 19:40:49 | <VOID[m]> | I am trying to get Ixed for my type, but how am I supposed to implement something that has "Minimal complete definition: Nothing" |
| 19:40:49 | <VOID[m]> | I know enough to copy and modify, not enough to actually implement |
| 19:40:49 | <VOID[m]> | Gotta get back to books... |
| 19:40:52 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Ping timeout: 256 seconds) |
| 19:40:52 | × | adium quits (adium@user/adium) (Ping timeout: 256 seconds) |
| 19:41:27 | → | califax joins (~califax@user/califx) |
| 19:41:27 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 19:41:56 | → | crns joins (~netcrns@p4ff5e521.dip0.t-ipconnect.de) |
| 19:41:56 | × | crns quits (~netcrns@p4ff5e521.dip0.t-ipconnect.de) (Changing host) |
| 19:41:56 | → | crns joins (~netcrns@user/crns) |
| 19:42:18 | → | malte joins (~malte@mal.tc) |
| 19:42:27 | <[exa]> | VOID[m]: sadly the common advanced lens tutorials simply let you reinvent the whole thing and then obviously you kinda get it |
| 19:43:17 | → | adium joins (adium@user/adium) |
| 19:43:59 | <monochrom> | Egomaniac opinion: The lens world suffers poor doc because I haven't become interested. >:) |
| 19:44:00 | × | zer0bitz quits (~zer0bitz@196.244.192.60) (Read error: Connection reset by peer) |
| 19:44:16 | <dminuoso> | VOID[m]: Well, Ixed is not a part of that hierarchy |
| 19:44:25 | <dminuoso> | Ixed is a class of traversals |
| 19:44:30 | → | merijn joins (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) |
| 19:44:43 | <dminuoso> | The hierarchy denotes relationships of types of optics and how they can degrade |
| 19:44:49 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 19:44:49 | <dminuoso> | And how they can be composed |
| 19:44:54 | <dminuoso> | optics is a lot stronger in that respect |
| 19:45:13 | → | califax joins (~califax@user/califx) |
| 19:45:29 | <[exa]> | VOID[m]: but the type of `ix` should be kinda guiding: `Index m -> Traversal' m (IxValue m)`... you just take the index and convert it to a traversal through the corresponding value (if it's there) |
| 19:45:52 | → | zer0bitz joins (~zer0bitz@196.244.192.60) |
| 19:47:34 | <EvanR> | ballast, there's nothing fundamentally wrong with having something in your state that never changes. If it's already like a big record of stuff |
| 19:48:16 | <[exa]> | VOID[m]: and the traversal you can make using the normal lens machinery, e.g. https://hackage.haskell.org/package/lens-5.2/docs/Control-Lens-Combinators.html#v:traversal which is just a slightly more generic version of the usual `lens` that makes a lens from a getter and a setter |
| 19:48:22 | <EvanR> | if there is something that really really will never change you could do ReaderT and access it easier though |
| 19:48:33 | <[exa]> | oh noes I used "is just a", apologies. |
| 19:48:49 | <EvanR> | [exa], what's the problem?!?! |
| 19:49:10 | → | gmg joins (~user@user/gehmehgeh) |
| 19:49:14 | <ballast> | EvanR: yeah it is a big record. |
| 19:49:18 | <[exa]> | I hate tutorials that say "you see, this is just a [insert a term from page 9478 of author's fav category theory book here]" |
| 19:49:47 | <[exa]> | the just is plain out condescending if you read it as a newbie |
| 19:50:37 | <ballast> | I realize though that since I have `MyState a` and my function is `a -> Foo` I could also make a typeclass `HasFoo` but not sure if that's better or worse than the other options. |
| 19:50:58 | × | festive_kurbus quits (~festive_k@user/kurbus) (Ping timeout: 260 seconds) |
| 19:51:14 | <VOID[m]> | I just want an Optic made from `(a -> Maybe b)` and `(b -> a)` ;_; |
| 19:51:23 | <ballast> | Then I'd write `statefulFn :: HasFoo a => MyState a -> MyState a` |
| 19:51:34 | <[exa]> | VOID[m]: that sounds like a prism |
| 19:51:52 | <VOID[m]> | Prism has to do the re-smth that creates a Tree, no? |
| 19:51:58 | <EvanR> | ballast, that just seems suspiciously like overengineering or "not gonna need it" territory. But who knows |
| 19:52:27 | <monochrom> | I am OK with "just a $FOO", when the audience is familar with $FOO. |
| 19:52:29 | <[exa]> | VOID[m]: prism is a lens for 1 element that might be missing (I'd say precisely your case) |
| 19:52:41 | <EvanR> | I try to keep things at a basic level of language features until a critical 13.7 eV necessity appears to require something more fancy |
| 19:52:51 | <[exa]> | VOID[m]: oh look, there's your function: https://hackage.haskell.org/package/lens-5.2/docs/Control-Lens-Combinators.html#v:prism-39- |
| 19:52:52 | <ballast> | EvanR: Yeah I mean I've already resisted using a state monad to KISS... |
| 19:53:19 | <VOID[m]> | > A Prism l is a Traversal that can also be turned around with re to obtain a Getter in the opposite direction |
| 19:53:21 | <lambdabot> | <hint>:1:84: error: parse error on input ‘in’ |
| 19:53:33 | <VOID[m]> | This sounds like traversal should be easier, and I don't want the re |
| 19:53:43 | <[exa]> | VOID[m]: (you may assume the `b` and `a` in the signature there ^ are the same) |
| 19:54:10 | <ballast> | EvanR: Not sure what "critical 13.7 eV necessity" means though |
| 19:54:25 | <EvanR> | ground state haskell vs excited state haskell |
| 19:54:30 | <[exa]> | VOID[m]: that's a fancy way of saying that the prism points to a single thing (to invert it, you need uniqueness) |
| 19:54:51 | <EvanR> | nevermind |
| 19:54:56 | <VOID[m]> | As I understand it, a Prism requires the re, no? |
| 19:55:04 | <monochrom> | Heh EvanR I get your joke, no worries! |
| 19:55:06 | <ballast> | Ah... I missed that joke |
| 19:55:41 | <EvanR> | ballast, HasFoo is apparently a popular way to make "real" apps with many monads coexisting but that share some features |
| 19:55:41 | <monochrom> | Although I think you want 13.7 MeV or even GeV. Right? 13.7 eV is very small. |
| 19:56:00 | <[exa]> | VOID[m]: not really, `re` is derived from the 2 functions (partial getter and setter) that you give to `prism` |
| 19:56:54 | <ballast> | Also looking at the linked comment about prisms, I must admit that I don't know how to feel about `isn't` being a function name |
| 19:57:09 | <[exa]> | VOID[m]: there's a lens tutorial that uses prisms as a kinda generalized first-class patternmatches. You get for example `left_` that you can use to check if the Either is `Left something`, and if you reverse it with `re`, you can actually construct the `Left something` from a value |
| 19:57:26 | <EvanR> | it's also wrong, 13.7 eV is how much it costs to totally break up hydrogen as opposed to go up 1 energy level |
| 19:57:42 | <VOID[m]> | Thank you all very much |
| 19:57:42 | <VOID[m]> | I got a lot of great advice |
| 19:57:42 | <VOID[m]> | I'll read more into Ixed stuff, and will try the prism' solution |
| 19:57:42 | <VOID[m]> | Y'all were great <3 |
| 19:58:10 | <EvanR> | ballast, acme-don't package is great |
| 19:58:18 | <EvanR> | it enables don't notation |
| 19:58:51 | <[exa]> | VOID[m]: btw for practical software engineering reasons, you might want to start with writing some trivial Ixed instance (like an ix for a list or Identity or so) |
| 19:59:03 | <ballast> | haha, I like that though |
| 19:59:16 | <[exa]> | VOID[m]: getting custom types into the mix right from the start tends to generate headache |
| 19:59:40 | <[exa]> | anyway yeah, good luck. :] |
| 20:00:00 | <VOID[m]> | So I should try implementing Ixed for something like a list, got it |
| 20:00:00 | <VOID[m]> | Thank you very much for tips <3 |
| 20:00:54 | <mauke> | use Acme::Don't; don't { print "hi\n"; } while (1 == 1); # I think it works better in perl |
| 20:02:29 | <EvanR> | I find the asymmetry a bit annoying though |
| 20:02:34 | <EvanR> | in the haskell version |
| 20:02:52 | <EvanR> | returns () instead of a |
| 20:06:59 | → | ub joins (~Thunderbi@p200300ecdf264e2fdb144bfb5fa7f064.dip0.t-ipconnect.de) |
| 20:07:04 | × | ubert quits (~Thunderbi@p548c9ce5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 20:07:04 | ub | is now known as ubert |
| 20:10:06 | <jackdk> | It's the best we can do, but at least it now supports `-XApplicativeDo` (`-XApplicativeDont`?) |
| 20:11:45 | × | johnw quits (~johnw@2600:1700:cf00:db0:d426:be2d:331:cdc5) (Quit: ZNC - http://znc.in) |
| 20:14:00 | <dsal> | At least there's no `-XApplicativeTry` |
| 20:14:52 | <mauke> | don't do something you'll regret -- potentially valid haskell code |
| 20:18:50 | × | merijn quits (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
| 20:24:56 | <mniip> | is there a way to enable a ghc plugin using only the --ghc-options interface of stack/cabal? |
| 20:25:13 | <mniip> | the problem is of course that the plugin resides in a package that is not in the dependencies list |
| 20:30:38 | × | doyougnu quits (~doyougnu@cpe-74-69-132-225.stny.res.rr.com) (Ping timeout: 272 seconds) |
| 20:30:43 | → | merijn joins (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) |
| 20:31:38 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 20:32:18 | <mniip> | apparently not |
| 20:33:17 | <geekosaur> | does -package not work? |
| 20:33:39 | <geekosaur> | hm, probably not because cabal/stack won't expose it |
| 20:34:21 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Remote host closed the connection) |
| 20:34:58 | × | merijn quits (~merijn@c-001-002-026.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
| 20:35:20 | → | Tuplanolla joins (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) |
| 20:35:59 | <mniip> | yup |
| 20:36:32 | <mniip> | https://downloads.haskell.org/~ghc/9.4.2/docs/users_guide/extending_ghc.html#:~:text=At%20the%20moment%2C%20the%20only%20way%20to%20specify%20a%20dependency%20on%20a%20plugin |
| 20:37:39 | <EvanR> | unsprisingly a dumbass recursive descent version of the day 13 parser is slightly bigger than a megaparsec parser. Surprisingly a dumbass tokenizer + parser on tokens is smaller than both xD |
| 20:39:46 | → | kenran joins (~user@user/kenran) |
| 20:41:04 | × | kenran quits (~user@user/kenran) (Remote host closed the connection) |
| 20:42:11 | <mniip> | with 50-odd packages manually editing cabal files does not seem fun |
| 20:46:14 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 20:48:29 | <EvanR> | https://paste.tomsmeding.com/HlaE2uLj 😎 |
| 20:51:28 | × | zer0bitz quits (~zer0bitz@196.244.192.60) (Ping timeout: 252 seconds) |
| 20:52:19 | <SrPx> | Hello! Is anyone here familiar with Cardano? I'm trying to compile and run a "Hello, world" offline using Plutus, but I can't find how. Is that possible? |
| 21:05:05 | × | fserucas quits (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Ping timeout: 246 seconds) |
| 21:06:22 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 21:09:42 | → | zer0bitz joins (~zer0bitz@196.244.192.57) |
| 21:09:52 | → | pavonia joins (~user@user/siracusa) |
| 21:15:16 | × | nut quits (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 268 seconds) |
| 21:15:55 | × | son0p quits (~ff@2604:3d08:5b7f:5540::64ea) (Ping timeout: 248 seconds) |
| 21:18:22 | <SrPx> | hmm in case anyone does: https://cardano.stackexchange.com/questions/9625/how-to-run-a-simple-fib-function-offline |
| 21:22:53 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 21:28:06 | → | jargon joins (~jargon@174-22-192-24.phnx.qwest.net) |
| 21:31:18 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 21:34:53 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) |
| 21:37:43 | <xerox> | is it possible to use OverloadedLists through read, or is it just for source contents |
| 21:37:49 | × | trev quits (~trev@user/trev) (Remote host closed the connection) |
| 21:38:05 | <mniip> | that's a weird question. What do you mean? |
| 21:38:39 | <geekosaur> | source contents. read can't know about extensions and its behavior is fixed when the base library os built |
| 21:38:40 | <xerox> | just had a strange idea to parse today's aoc input |
| 21:38:41 | <geekosaur> | *is |
| 21:39:32 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a84a:2d35:f948:fe07) (Ping timeout: 255 seconds) |
| 21:39:39 | <xerox> | data P = N Int | L [P] deriving (Read,Show); instance Num P where fromInteger = N . fromInteger; instance IsList P where type Item P = P; fromList = L |
| 21:39:44 | <geekosaur> | this does not preclude running the result through fromList |
| 21:40:16 | <geekosaur> | it just means the runtime won't do so automatically |
| 21:40:43 | <xerox> | geekosaur: how do you do it, I'm at a loss |
| 21:40:56 | <geekosaur> | eh? fromList . read |
| 21:41:43 | <geekosaur> | if it's more complex than that then IsList is probably the wrong answer anyway |
| 21:43:46 | <xerox> | geekosaur: https://pastebin.com/raw/1jmxEEwy |
| 21:44:08 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 21:44:37 | <geekosaur> | that wasn't going to work even with IsList, the list still has to have the same type |
| 21:45:12 | <xerox> | but it does work with IsList, it's the first example |
| 21:45:15 | <geekosaur> | hm, I guess you were hoping the inner lists would get promoted to Ps. no, read will never do that oribably |
| 21:45:24 | <geekosaur> | *probably |
| 21:45:36 | <geekosaur> | for the same reason we're unlikely to get a Unicode Show instance |
| 21:46:01 | <geekosaur> | changing the behavior of those at runtime would cause all sorts of problems |
| 21:46:46 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 21:48:40 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 21:48:57 | → | MajorBiscuit joins (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) |
| 21:49:27 | <mauke> | just run your input through perl -pe 's/\b(?=\d)/N /g; s/\[/L [/g' |
| 21:50:50 | <xerox> | yeah :) |
| 21:50:59 | <mauke> | alternatively, define a custom Read instance |
| 21:51:07 | × | nschoe quits (~q@2a01:e0a:8e:a190:7d4a:1795:de80:8cc7) (Ping timeout: 265 seconds) |
| 21:51:16 | <mauke> | but IsList won't help here |
| 21:52:09 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 21:53:02 | <EvanR> | "just use json lol" |
| 21:54:21 | → | hsw_ joins (~hsw@112-104-142-182.adsl.dynamic.seed.net.tw) |
| 21:54:32 | <mauke> | hmm. this happens to be PDN (perl data notation) |
| 21:54:43 | <mauke> | my $input = do "./input"; # literally run it as perl code, lol |
| 21:55:27 | <mauke> | that suggests you might be able to to shenanigans with CPP and #include |
| 21:55:35 | <mauke> | s/to to/to do/ |
| 21:55:49 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 21:55:52 | × | hsw quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Ping timeout: 252 seconds) |
| 21:56:52 | → | califax joins (~califax@user/califx) |
| 21:57:30 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:59:30 | <xerox> | interesting idea |
| 22:01:58 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 22:02:09 | <ballast> | getting this error when I try to use `lens` from microlens: https://paste.tomsmeding.com/3FKZuSbY . Am I missing an extension? I'm confused why it's asking for a specific `f` when the type of `Lens` is `forall f.`. |
| 22:02:37 | <ballast> | (error message has been edited to slim down the definitions/types) |
| 22:03:22 | <jackdk> | Can you paste a bit more context? |
| 22:04:05 | <mauke> | does myState have a type signature in your code? |
| 22:04:28 | <ballast> | mauke: no, I'll add ScopedTypeVariables and try adding one |
| 22:04:52 | <ballast> | jackdk: it's a bit messy with the context but I can do that if adding a signature doesn't work |
| 22:05:21 | <jackdk> | Yeah you'll need a type signature |
| 22:06:15 | <ballast> | I'm passing it to a function that expects a `Lens' s (CalendarState a)` , how come it won't unify? |
| 22:06:31 | <ballast> | Adding the signature though and checking |
| 22:07:03 | → | nut joins (~nut@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 22:07:33 | ← | Unhammer parts (~Unhammer@user/unhammer) (ERC (IRC client for Emacs) with WeeChat) |
| 22:07:38 | <ballast> | OK I've learned my lesson. I won't put my lens definitions in where clauses. Thanks mauke and jackdk |
| 22:07:57 | <[exa]> | ballast: the let-bindings can't unify "back" from the uses |
| 22:08:15 | <[exa]> | (there's the forall in the way that prevents it) |
| 22:08:57 | <ballast> | [exa]: bet it would make sense if I looked at the unification rules, I assume I'm asking for something undecidable |
| 22:09:01 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 22:09:24 | <ballast> | Also it's curious that GHC suggests to add RankNTypes instead of Rank2Types when I use the type `type Lens s t a b = forall f. -- etc.` |
| 22:09:40 | <ballast> | Ah. I see Rank2Types is obsolete, never mind. |
| 22:09:42 | <jackdk> | Rank2Types is obsolete |
| 22:09:43 | <jackdk> | yeah |
| 22:09:55 | <ballast> | So many of my questions are answered by just typing the name of the thing into google ha |
| 22:09:57 | <mauke> | would 'myState x = lens getMy setMy x' fix it? |
| 22:09:58 | <dsal> | Rank3Types ought to be enough for anybody. |
| 22:10:02 | <mauke> | or is the forall the issue? |
| 22:10:03 | <[exa]> | ballast: actually not undecidable, but the hindley-milner and all similar systems precisely aim to prevent the "use" types from leaking to let-definitions |
| 22:10:47 | <[exa]> | ballast: if you didn't read about that, consider someone happily defining `id x = x` and going `id "asd"` and `id 5` in 2 parts of the program. |
| 22:11:29 | <ballast> | [exa]: my intuition for type inference when it comes to polymorphism is lacking to say the least. I usually need to write the judgements out by hands to be sure I understand what's going on. |
| 22:11:52 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 22:12:39 | <ballast> | mauke: that works it seems |
| 22:12:40 | <[exa]> | btw what you got there looked a bit like monomorphism restriction to me, but hard to say without seeing the rest of the program |
| 22:13:02 | <[exa]> | ah yes, mauke confirmed. :] |
| 22:13:04 | <mauke> | ballast: if it works with an explicit parameter but not without, then you got bitten by the monomorphism restriction |
| 22:13:07 | <ballast> | mauke: Then HLS says to eta reduce and it fails to type check haha |
| 22:13:22 | <mauke> | which is turnoffable |
| 22:13:39 | <ballast> | is this a like "here be dragons" kind of disable-able feature? |
| 22:13:50 | <mauke> | not really dragons, no |
| 22:14:27 | <mauke> | it just might make some "constants" more polymorphic than you expect, so it might result in less efficient code |
| 22:15:25 | <[exa]> | ballast: in very specific cases it can do very specific ugly things with thunks, iirc something like that you'd expect the value `x=something` to be memoized but it can't be memoized because it's lacking the invisible typeclass argument |
| 22:15:56 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 22:16:04 | <monochrom> | I am still blissfully ignorant about how HLS gives hlint recommendations, and hlint recommendations are of questionable applicability. |
| 22:16:05 | × | MajorBiscuit quits (~MajorBisc@2001:1c00:2404:ed00:28e1:ad14:ec67:539e) (Ping timeout: 246 seconds) |
| 22:16:36 | <monochrom> | Or more pointedly, how most beginners don't know that legacy. |
| 22:16:42 | <ballast> | I think I'll stick to keeping it on then, especially since it's not too ugly to just inline my use of `lens` |
| 22:16:57 | <Lycurgus> | applicability or worth? |
| 22:17:06 | <monochrom> | perhaps both |
| 22:17:30 | <monochrom> | perhaps value too |
| 22:17:45 | <monochrom> | perhaps benefit too |
| 22:17:48 | <monochrom> | should I go on? |
| 22:18:23 | <Lycurgus> | prolly not |
| 22:18:26 | <mauke> | https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-930004.5.5 |
| 22:18:28 | <monochrom> | figured |
| 22:19:28 | → | fizbin joins (~fizbin@user/fizbin) |
| 22:21:32 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 22:24:39 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 22:24:40 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:26:08 | CodeKiwi | is now known as DigitalKiwi |
| 22:27:23 | × | michalz quits (~michalz@185.246.204.65) (Remote host closed the connection) |
| 22:28:00 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds) |
| 22:28:10 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 22:31:56 | → | biberu joins (~biberu@user/biberu) |
| 22:32:11 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:36:06 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 22:39:19 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 22:43:38 | × | fizbin quits (~fizbin@user/fizbin) (Ping timeout: 272 seconds) |
| 22:44:10 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 22:45:45 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 22:46:47 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:47:58 | × | k8yun quits (~k8yun@user/k8yun) (Quit: Leaving) |
| 22:48:48 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 22:50:42 | × | euandreh quits (~Thunderbi@179.214.113.107) (Ping timeout: 256 seconds) |
| 22:53:54 | × | ubert quits (~Thunderbi@p200300ecdf264e2fdb144bfb5fa7f064.dip0.t-ipconnect.de) (Quit: ubert) |
| 22:53:55 | ubert1 | is now known as ubert |
| 22:56:17 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:59:05 | → | euandreh joins (~Thunderbi@179.214.113.107) |
| 23:02:58 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 23:03:04 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 23:04:12 | × | freeside quits (~mengwong@pd907d273.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:08:55 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 23:10:44 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 246 seconds) |
| 23:13:58 | × | avicenzi quits (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 252 seconds) |
| 23:16:29 | → | freeside joins (~mengwong@pd907d273.dip0.t-ipconnect.de) |
| 23:17:37 | × | ubert quits (~Thunderbi@p200300ecdf264e2f50477ceb302d227f.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 23:23:00 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 23:25:22 | → | fizbin joins (~fizbin@user/fizbin) |
| 23:26:26 | → | son0p joins (~ff@2604:3d08:5b7f:5540::64ea) |
| 23:27:39 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:38:35 | × | forell quits (~forell@user/forell) (Ping timeout: 264 seconds) |
| 23:44:32 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 23:46:00 | × | fizbin quits (~fizbin@user/fizbin) (Ping timeout: 252 seconds) |
| 23:46:51 | × | acidjnk quits (~acidjnk@p200300d6e7137a81910d6d9ee28ee6f1.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 23:50:41 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 23:55:32 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
| 23:55:59 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
| 23:56:26 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds) |
| 23:56:26 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 255 seconds) |
| 23:57:07 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 23:57:20 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 23:58:21 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:59:01 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
All times are in UTC on 2022-12-13.