Logs on 2020-12-30 (freenode/#haskell)
| 00:01:19 | → | polyrain joins (~polyrain@121.222.65.83) |
| 00:08:30 | → | gzj joins (~gzj@unaffiliated/gzj) |
| 00:09:03 | → | o1lo01ol1o joins (~o1lo01ol1@31.22.145.144) |
| 00:09:42 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 00:13:16 | × | o1lo01ol1o quits (~o1lo01ol1@31.22.145.144) (Ping timeout: 240 seconds) |
| 00:15:57 | × | aveltras quits (uid364989@gateway/web/irccloud.com/x-kccvjjqcpxkkewrw) (Quit: Connection closed for inactivity) |
| 00:17:13 | × | star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 246 seconds) |
| 00:18:10 | → | perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 00:18:22 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 00:19:37 | × | stef204 quits (~stef204@unaffiliated/stef-204/x-384198) (Ping timeout: 260 seconds) |
| 00:20:16 | <sshine> | hm, it defaults to Data.Text.Lazy; annoying. |
| 00:22:38 | × | AndreasK quits (uid320732@gateway/web/irccloud.com/x-hcwkkoekyeoydiqt) (Ping timeout: 265 seconds) |
| 00:22:40 | × | alanz quits (sid110616@gateway/web/irccloud.com/x-tooahcfpyawpixxr) (Read error: Connection reset by peer) |
| 00:22:41 | × | ebutleriv quits (sid217783@gateway/web/irccloud.com/x-vuvhvprvfualywxv) (Ping timeout: 272 seconds) |
| 00:22:50 | → | alanz joins (sid110616@gateway/web/irccloud.com/x-prwdeyzwdytgtxkp) |
| 00:22:52 | × | wpcarro_ quits (sid397589@gateway/web/irccloud.com/x-azkchtsfvqsclphx) (Ping timeout: 260 seconds) |
| 00:23:19 | × | gOOgler quits (uid125351@gateway/web/irccloud.com/x-wkvpcwzuhpoudvgh) (Ping timeout: 272 seconds) |
| 00:23:41 | → | gOOgler joins (uid125351@gateway/web/irccloud.com/x-jdvndeteehxffire) |
| 00:23:52 | → | ebutleriv joins (sid217783@gateway/web/irccloud.com/x-snsrtsqpsqwwbfgf) |
| 00:24:02 | × | jyri-matti quits (uid479350@gateway/web/irccloud.com/x-sahqhoxyiermzqtr) (Ping timeout: 260 seconds) |
| 00:24:02 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) |
| 00:24:18 | × | eruditass quits (uid248673@gateway/web/irccloud.com/x-glwlnislsolfajwk) (Ping timeout: 260 seconds) |
| 00:24:51 | → | AndreasK joins (uid320732@gateway/web/irccloud.com/x-vdseamlbfcbchsil) |
| 00:24:59 | → | jyri-matti joins (uid479350@gateway/web/irccloud.com/x-sdpspavvezzlrhxl) |
| 00:25:34 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 00:25:42 | → | wpcarro_ joins (sid397589@gateway/web/irccloud.com/x-cihesreymldlqpdf) |
| 00:26:05 | → | eruditass joins (uid248673@gateway/web/irccloud.com/x-qhjyzbcwmhhifert) |
| 00:28:37 | → | usr25 joins (~usr25@unaffiliated/usr25) |
| 00:28:41 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Remote host closed the connection) |
| 00:28:47 | → | Vulfe_ joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 00:28:52 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 00:30:55 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:f14e:750f:83e8:c56e:b09f) |
| 00:38:58 | → | Kronic joins (~Kronic___@84.203.96.46) |
| 00:39:49 | × | geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 264 seconds) |
| 00:44:16 | × | madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 256 seconds) |
| 00:45:01 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:50:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 00:52:08 | × | Vulfe_ quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Remote host closed the connection) |
| 01:00:55 | × | polyrain quits (~polyrain@121.222.65.83) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 01:01:16 | × | mp___ quits (~mp@hell.cx) (Ping timeout: 240 seconds) |
| 01:04:08 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 01:05:09 | → | madjestic joins (~Android@86-88-72-244.fixed.kpn.net) |
| 01:05:44 | × | dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
| 01:06:45 | → | Rudd0 joins (~Rudd0@185.189.115.108) |
| 01:07:43 | × | eacameron quits (uid256985@gateway/web/irccloud.com/x-wupypehaymlqhtxd) (Quit: Connection closed for inactivity) |
| 01:10:30 | × | cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 256 seconds) |
| 01:12:05 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) () |
| 01:16:32 | × | madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 260 seconds) |
| 01:18:03 | × | Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
| 01:21:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 01:21:04 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 272 seconds) |
| 01:23:46 | <pie_> | so, I need to figure out how to pass arguments to the c++ compiler thats somehow called through the c compiler, thats called through ghc... |
| 01:24:14 | <pie_> | the c++ compiler is somehow called through -xc++ |
| 01:24:50 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 01:25:28 | → | stef204 joins (~stef204@unaffiliated/stef-204/x-384198) |
| 01:25:49 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 01:25:51 | → | mnrmnaugh joins (~mnrmnaugh@unaffiliated/mnrmnaugh) |
| 01:29:12 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 256 seconds) |
| 01:29:59 | <pie_> | f*** it, if nothing else works, strace |
| 01:30:06 | × | gzj quits (~gzj@unaffiliated/gzj) (Remote host closed the connection) |
| 01:30:27 | → | gzj joins (~gzj@unaffiliated/gzj) |
| 01:30:35 | → | verement joins (~anonymous@cpe-76-167-229-223.san.res.rr.com) |
| 01:31:06 | → | Fischmie1 joins (~Fischmiep@149.224.197.30) |
| 01:31:17 | × | carthia quits (~carthia@gateway/tor-sasl/carthia) (Remote host closed the connection) |
| 01:31:57 | → | carthia joins (~carthia@gateway/tor-sasl/carthia) |
| 01:34:18 | × | Fischmiep quits (~Fischmiep@46.59.219.2) (Ping timeout: 256 seconds) |
| 01:37:29 | × | Feuermagier quits (~Feuermagi@213.178.26.41) (Remote host closed the connection) |
| 01:38:15 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Remote host closed the connection) |
| 01:38:32 | × | mnrmnaugh quits (~mnrmnaugh@unaffiliated/mnrmnaugh) (Quit: Leaving) |
| 01:39:33 | → | mnrmnaugh joins (~mnrmnaugh@unaffiliated/mnrmnaugh) |
| 01:39:36 | × | columbarius quits (~columbari@i5E86B356.versanet.de) (Ping timeout: 240 seconds) |
| 01:40:52 | ← | mnrmnaugh parts (~mnrmnaugh@unaffiliated/mnrmnaugh) () |
| 01:41:15 | <pie_> | ok looks like i may need to upgrade to at least ghc 8.10 to get something reasonable |
| 01:42:05 | → | columbarius joins (~columbari@i5E86B34F.versanet.de) |
| 01:46:22 | → | wei2912 joins (~wei2912@unaffiliated/wei2912) |
| 01:52:50 | × | Entertainment quits (~entertain@104.246.132.210) (Ping timeout: 264 seconds) |
| 01:54:05 | <koz_> | Is there anything already out there equivalent to 'data Foo a b = Foo b (a -> b)'? |
| 01:55:09 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 01:55:14 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
| 01:57:19 | → | mp___ joins (~mp@hell.cx) |
| 01:58:49 | → | Vulfe joins (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) |
| 02:00:22 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 256 seconds) |
| 02:00:54 | → | star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) |
| 02:02:04 | × | mp___ quits (~mp@hell.cx) (Ping timeout: 256 seconds) |
| 02:03:49 | × | Vulfe quits (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Ping timeout: 264 seconds) |
| 02:05:38 | <sshine> | koz_, what's it for? |
| 02:06:05 | <koz_> | sshine: I figured out that I need something equivalent to that, and was curious if it has any clever instances. |
| 02:07:34 | × | usr25 quits (~usr25@unaffiliated/usr25) (Ping timeout: 260 seconds) |
| 02:08:04 | → | olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
| 02:08:28 | × | carthia quits (~carthia@gateway/tor-sasl/carthia) (Remote host closed the connection) |
| 02:14:30 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 02:18:45 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 240 seconds) |
| 02:20:16 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 02:20:52 | × | perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.0) |
| 02:23:09 | → | Inboxkiller joins (~Inboxkill@177.25.173.143) |
| 02:23:16 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:24:03 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
| 02:25:07 | ← | Inboxkiller parts (~Inboxkill@177.25.173.143) () |
| 02:25:14 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 264 seconds) |
| 02:28:42 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 02:34:59 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 02:35:22 | → | dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) |
| 02:38:03 | × | philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds) |
| 02:38:41 | × | cheater quits (~user@unaffiliated/cheater) (Ping timeout: 256 seconds) |
| 02:38:51 | → | cheater joins (~user@unaffiliated/cheater) |
| 02:39:08 | × | smitop quits (uid328768@gateway/web/irccloud.com/x-tanlhsstfzbvbzcf) (Quit: Connection closed for inactivity) |
| 02:39:16 | × | Anthaas quits (~Anthaas@unaffiliated/anthaas) (Ping timeout: 240 seconds) |
| 02:40:01 | × | alx741 quits (~alx741@181.196.68.142) (Ping timeout: 246 seconds) |
| 02:40:08 | → | Anthaas joins (~Anthaas@unaffiliated/anthaas) |
| 02:40:49 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 02:41:32 | <pie_> | bitonic: I appear to have no linker error after upgrading to ghc 8.10 but im not sure if everything works , also I needed to add clang to LD_LIBARY_PATH while loading cabal repl for some reason |
| 02:43:15 | <pie_> | and now that seems to have been intermittent...idk needs more research i guess |
| 02:44:07 | <pie_> | nevermind, stepping on my own toes |
| 02:45:12 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 02:51:24 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) |
| 02:51:45 | × | xff0x_ quits (~fox@2001:1a81:532a:2200:ffb2:f24f:b99c:824f) (Ping timeout: 268 seconds) |
| 02:51:48 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) (Client Quit) |
| 02:53:00 | → | xff0x_ joins (~fox@2001:1a81:5361:7200:f380:27a:9a5d:7c68) |
| 02:54:01 | <pie_> | i need to get some sleep, but _if_ im looking at the right file, it looks like the output still has U typeinfo for clang::ast_matchers::MatchFinder::MatchCallback , just ghci isnt choking on it. not sure tho |
| 02:55:09 | × | Matt_P quits (~Matt_P@217.146.82.202) (Remote host closed the connection) |
| 02:55:12 | <pie_> | this was for the minimal repro, which doesnt actually have any interesting code in it, so if something just got better at being lazy, it might still break later |
| 02:57:38 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:58:14 | → | Stanley00 joins (~stanley00@unaffiliated/stanley00) |
| 02:58:30 | <pie_> | either im very confused or actually my ghc is now 8.8.4 and not 8.10 |
| 02:59:05 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) |
| 03:03:57 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-134-148.cust.tzulo.com) (Quit: Leaving) |
| 03:04:34 | × | Tops2 quits (~Tobias@dyndsl-095-033-094-200.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
| 03:05:37 | × | theDon quits (~td@muedsl-82-207-238-118.citykom.de) (Ping timeout: 264 seconds) |
| 03:05:41 | → | chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
| 03:07:24 | → | theDon joins (~td@94.134.91.72) |
| 03:11:29 | × | m0rphism quits (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 268 seconds) |
| 03:11:52 | → | perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 03:12:24 | → | b5er joins (~b5er_@91.193.4.202) |
| 03:12:42 | → | xirhtogal joins (~lagothrix@unaffiliated/lagothrix) |
| 03:12:42 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (rothfuss.freenode.net (Nickname regained by services))) |
| 03:12:42 | xirhtogal | is now known as lagothrix |
| 03:14:46 | <danso> | reading this chart, i notice a pattern: |
| 03:14:54 | <danso> | https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages |
| 03:15:21 | <danso> | haskell, reason, ML, clojure, and friends don't have `%` as a modulo operator |
| 03:15:31 | <danso> | instead they go with the function named `mod` |
| 03:15:33 | <koz_> | danso: Because that's a C-ism. |
| 03:15:40 | → | V3ct0r joins (~V3ct0r@185.204.1.185) |
| 03:15:51 | <koz_> | We don't consider C syntax so great that we should mindlessly ape it. |
| 03:16:05 | <danso> | yeah, C looks like one of the earliest ones on that chart that use it |
| 03:16:33 | <danso> | but was this just a historical coincidence? |
| 03:16:49 | <danso> | i'm wondering whether any rationale for choosing or not choosing it is known |
| 03:16:58 | <koz_> | That everyone copied C apart from the listed languages? Or that the listed languages chose _not_ to copy C? |
| 03:17:28 | × | cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving) |
| 03:17:46 | <danso> | i'm asking about haskell in particular, and why it chose to omit `%` |
| 03:17:58 | <danso> | and i realize the answer is probably "because ML chose to" |
| 03:18:03 | <koz_> | Haskell is technically part of the ML family. |
| 03:18:10 | <danso> | but maybe somebody knows why they did? :^) |
| 03:18:26 | <koz_> | So I'm pretty sure it's 'because ML did it'. |
| 03:18:58 | <ephemient> | I'm not sure I'd call Haskell a ML language, but it's definitely at least half inspired |
| 03:19:23 | × | stef204 quits (~stef204@unaffiliated/stef-204/x-384198) (Ping timeout: 272 seconds) |
| 03:19:38 | → | vicfred joins (vicfred@gateway/vpn/mullvad/vicfred) |
| 03:19:44 | <danso> | some languages predating C do have modulo operators: APL used `|` and algol68 used `÷×` |
| 03:20:16 | <monochrom> | % contains a / stroke, perhaps that's why K&R chose it. |
| 03:20:16 | <yahb> | monochrom: ; <interactive>:122:20: error: parse error on input `,' |
| 03:20:55 | <danso> | i guess this is not what #haskell is for. where would be the place to ask or research this kind of thing? |
| 03:21:01 | <monochrom> | But it's a stupid reason, so independent thinkers don't follow it. |
| 03:22:02 | <ephemient> | https://hackage.haskell.org/package/base-unicode-symbols defines (∣) and (∤) :D |
| 03:22:11 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Remote host closed the connection) |
| 03:22:31 | <monochrom> | Haskell actually outdoes all other languages by acknowledging that there are two kinds of remainders, and there are three kinds of exponentiation. |
| 03:22:34 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 03:22:38 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 03:23:30 | → | alx741 joins (~alx741@181.196.68.142) |
| 03:23:31 | <monochrom> | But Haskell follows the sane convention of Pascal (probably Algol actually?) in using names like div, mod, quot, rem, instead of shoehorning funny punctuations. |
| 03:24:15 | <danso> | even fortran uses `mod`, apparently |
| 03:24:24 | <danso> | ephemient, that is terrifying yet satisfying |
| 03:24:56 | <monochrom> | and follows the inspiration of ML in providing a route for making them infix, so the syntax doesn't have to suck just because they are alphabetical "function" "names". |
| 03:25:30 | <monochrom> | "function" in quotes because there was a time people made a stupid big fuss about "function vs operator" |
| 03:26:56 | <monochrom> | Since ML, modernized people recognize that all are semantically functions and all are semantically operators, the punny difference between "oh, this one is alphabetical" and "oh, that one is punctuational" is merely syntax sugar. |
| 03:27:02 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 264 seconds) |
| 03:30:07 | × | gzj quits (~gzj@unaffiliated/gzj) (Remote host closed the connection) |
| 03:30:27 | → | gzj joins (~gzj@unaffiliated/gzj) |
| 03:31:11 | × | chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:31:11 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 03:31:23 | → | Tario joins (~Tario@201.192.165.173) |
| 03:32:09 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 03:32:57 | <dibblego> | you've clearly not used scala yet |
| 03:34:08 | <maerwald> | and why would anyone |
| 03:38:37 | <koz_> | maerwald: 'ghcup compile ghc -v 8.10.3 -b whatever' is still spewing a DigestError. |
| 03:38:56 | <dsal> | If you don't like `mod`, you can use `rem` |
| 03:41:09 | <maerwald> | koz_: that's because the hash is wrong :D |
| 03:42:41 | <Widget> | dsal: they are not the same |
| 03:43:15 | <koz_> | maerwald: I would never have guessed. |
| 03:43:30 | <dsal> | Widget: No, but I don't know how to do `rem` in C. |
| 03:43:44 | <dsal> | Maybe C uses ‰ |
| 03:43:49 | <maerwald> | koz_: someone copy pasted it, it's the hash from 8.10.2, lol |
| 03:44:06 | <maerwald> | I guess we don't test this in CI, only the bindists |
| 03:44:39 | → | jacks2 joins (~bc815220@217.29.117.252) |
| 03:45:47 | <maerwald> | koz_: but you know you can just build ghc manually, create a bindist via `make binary-dist` (I think) and then feed it into ghcup? |
| 03:45:56 | × | Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 240 seconds) |
| 03:46:06 | × | dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 256 seconds) |
| 03:46:21 | <koz_> | maerwald: Sure. I could also bypass ghcup entirely. I'm reporting this as a bug because I like bugs to be fixed, or at least the maintainers to be aware. |
| 03:46:42 | <koz_> | This isn't a 'I dunno wat do maerwald, instruct me sensei'. It's 'this isn't working as it should maerwald, maybe you might wanna know'. |
| 03:47:15 | <maerwald> | you get my attention quicker with a PR, but I'm already fixing it |
| 03:47:30 | <koz_> | Thanks! |
| 03:48:15 | → | sand_dull joins (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) |
| 03:49:20 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 03:50:00 | → | christo joins (~chris@81.96.113.213) |
| 03:53:31 | × | ransom quits (~c4264035@8.47.12.52) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:53:56 | × | christo quits (~chris@81.96.113.213) (Ping timeout: 240 seconds) |
| 04:01:12 | → | nbloomf_ joins (~nbloomf@2600:1700:ad14:3020:7dec:2218:241d:6f03) |
| 04:02:40 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 268 seconds) |
| 04:02:46 | × | theDon quits (~td@94.134.91.72) (Ping timeout: 256 seconds) |
| 04:03:38 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:3cf1:586e:d728:faa3) (Ping timeout: 264 seconds) |
| 04:03:53 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:04:29 | → | theDon joins (~td@94.134.91.51) |
| 04:06:09 | → | plutoniix joins (~q@184.82.204.116) |
| 04:06:38 | → | teardown joins (~user@gateway/tor-sasl/mrush) |
| 04:09:19 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 04:09:23 | × | teardown_ quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds) |
| 04:10:24 | × | urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna) |
| 04:11:50 | → | polyrain joins (~polyrain@121.222.65.83) |
| 04:13:16 | × | dibblego quits (~dibblego@haskell/developer/dibblego) (Ping timeout: 240 seconds) |
| 04:13:51 | × | Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa) |
| 04:13:52 | → | ransom joins (~c4264035@2a09:bac0:72::82f:c34) |
| 04:16:24 | → | dibblego joins (~dibblego@122-199-1-30.ip4.superloop.com) |
| 04:16:24 | × | dibblego quits (~dibblego@122-199-1-30.ip4.superloop.com) (Changing host) |
| 04:16:24 | → | dibblego joins (~dibblego@haskell/developer/dibblego) |
| 04:16:28 | → | geowiesnot joins (~user@87-89-181-157.abo.bbox.fr) |
| 04:16:42 | × | Sheilong quits (uid293653@gateway/web/irccloud.com/x-unmksdzihnsijttq) () |
| 04:18:24 | × | xelxebar quits (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 240 seconds) |
| 04:18:43 | × | srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds) |
| 04:18:48 | × | SeMas quits (uid32977@gateway/web/irccloud.com/x-ewxsbmmdfjckxyvi) (Quit: Connection closed for inactivity) |
| 04:19:19 | → | hacxman joins (~hexo@gateway/tor-sasl/hexo) |
| 04:19:23 | × | jb55 quits (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
| 04:19:23 | × | hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds) |
| 04:19:28 | → | srk joins (~sorki@gateway/tor-sasl/sorki) |
| 04:19:37 | hacxman | is now known as hexo |
| 04:19:43 | × | ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds) |
| 04:19:44 | × | cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds) |
| 04:19:46 | → | xelxebar joins (~xelxebar@gateway/tor-sasl/xelxebar) |
| 04:19:48 | → | denisse_ joins (~spaceCat@gateway/tor-sasl/alephzer0) |
| 04:20:01 | × | ransom quits (~c4264035@2a09:bac0:72::82f:c34) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 04:20:03 | × | denisse quits (~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 240 seconds) |
| 04:21:56 | → | ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex) |
| 04:22:57 | → | jb55 joins (~jb55@gateway/tor-sasl/jb55) |
| 04:24:35 | → | cantstanya joins (~chatting@gateway/tor-sasl/cantstanya) |
| 04:33:10 | → | boxscape joins (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
| 04:37:24 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:42:09 | → | MOSCOS joins (~MOSCOS@152.32.70.55) |
| 04:44:31 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 04:45:22 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Ping timeout: 260 seconds) |
| 04:45:50 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 04:47:05 | × | MOSCOS quits (~MOSCOS@152.32.70.55) (Ping timeout: 240 seconds) |
| 04:48:52 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 04:54:12 | × | pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!) |
| 04:55:56 | × | solonarv quits (~solonarv@astrasbourg-653-1-157-135.w90-6.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
| 04:57:35 | × | unlink2 quits (~unlink2@p5dc0acf8.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 04:58:29 | × | geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 260 seconds) |
| 05:00:05 | × | wei2912 quits (~wei2912@unaffiliated/wei2912) (Remote host closed the connection) |
| 05:03:36 | → | unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) |
| 05:06:57 | × | Tario quits (~Tario@201.192.165.173) (Ping timeout: 260 seconds) |
| 05:09:43 | × | rowbee quits (~augh@theguntretort.com) (Quit: ZNC - https://znc.in) |
| 05:09:56 | → | rowbee joins (~augh@theguntretort.com) |
| 05:11:34 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
| 05:13:05 | → | Guest_46 joins (bb7a7d6d@187.122.125.109) |
| 05:14:14 | ← | Guest_46 parts (bb7a7d6d@187.122.125.109) () |
| 05:17:27 | × | V3ct0r quits (~V3ct0r@185.204.1.185) (Remote host closed the connection) |
| 05:19:12 | × | polyrain quits (~polyrain@121.222.65.83) (Read error: Connection reset by peer) |
| 05:19:36 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 05:21:38 | × | sand_dull quits (~theuser@c-73-149-95-105.hsd1.ct.comcast.net) (Quit: Lost terminal) |
| 05:21:43 | × | tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds) |
| 05:22:09 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 05:22:25 | × | ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 246 seconds) |
| 05:22:43 | × | rowbee quits (~augh@theguntretort.com) (Quit: ZNC - https://znc.in) |
| 05:23:29 | → | tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64) |
| 05:25:18 | → | |Kin| joins (~|Kin|@217.151.98.163) |
| 05:26:23 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 05:27:11 | → | rowbee joins (~augh@theguntretort.com) |
| 05:30:52 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 05:38:14 | → | teardown_ joins (~user@gateway/tor-sasl/mrush) |
| 05:41:03 | × | teardown quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds) |
| 05:41:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:41:38 | → | rayyyy joins (~nanoz@gateway/tor-sasl/nanoz) |
| 05:46:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 05:48:30 | × | Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
| 05:51:11 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving) |
| 05:52:50 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 05:55:37 | → | MOSCOS joins (~MOSCOS@152.32.70.55) |
| 05:57:16 | × | MOSCOS quits (~MOSCOS@152.32.70.55) (Read error: Connection reset by peer) |
| 05:58:01 | → | MOSCOS joins (~MOSCOS@152.32.70.55) |
| 05:58:45 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Ping timeout: 240 seconds) |
| 05:58:53 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 05:59:38 | × | boxscape quits (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
| 06:02:25 | × | MOSCOS quits (~MOSCOS@152.32.70.55) (Ping timeout: 240 seconds) |
| 06:04:27 | × | |Kin| quits (~|Kin|@217.151.98.163) (Remote host closed the connection) |
| 06:07:12 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 06:08:07 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 06:11:50 | → | o1lo01ol1o joins (~o1lo01ol1@31.22.145.144) |
| 06:12:52 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 06:14:12 | → | rdivyanshu joins (uid322626@gateway/web/irccloud.com/x-azqolmgutgadssur) |
| 06:15:36 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 06:16:50 | × | o1lo01ol1o quits (~o1lo01ol1@31.22.145.144) (Ping timeout: 272 seconds) |
| 06:17:01 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 06:18:12 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 06:21:36 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 240 seconds) |
| 06:31:13 | → | teardown joins (~user@gateway/tor-sasl/mrush) |
| 06:31:41 | → | newz2000 joins (~newz2000@185.103.96.147) |
| 06:32:25 | × | b5er quits (~b5er_@91.193.4.202) (Ping timeout: 246 seconds) |
| 06:34:03 | × | teardown_ quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds) |
| 06:37:04 | → | b4er joins (~b5er_@91.193.4.138) |
| 06:40:05 | → | christo joins (~chris@81.96.113.213) |
| 06:49:36 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 06:51:02 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 264 seconds) |
| 06:56:06 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 07:00:23 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds) |
| 07:00:54 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 07:07:38 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 07:12:36 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 268 seconds) |
| 07:16:23 | × | hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds) |
| 07:16:40 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:16:43 | × | srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds) |
| 07:17:12 | → | qwerty joins (~tema@217.118.92.215) |
| 07:18:00 | × | Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer) |
| 07:19:02 | → | srk joins (~sorki@gateway/tor-sasl/sorki) |
| 07:19:02 | → | hexo joins (~hexo@gateway/tor-sasl/hexo) |
| 07:20:00 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:8058:a74d:29ea:8456) (Remote host closed the connection) |
| 07:20:55 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 07:21:40 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 07:21:44 | × | jacks2 quits (~bc815220@217.29.117.252) (Quit: http://www.okay.uz/ (Ping timeout)) |
| 07:23:56 | × | phasespace_ quits (~sar@89-162-33-21.fiber.signal.no) (Ping timeout: 256 seconds) |
| 07:24:13 | × | tsrt^ quits (tsrt@ip98-184-89-2.mc.at.cox.net) (Ping timeout: 264 seconds) |
| 07:24:52 | → | tsrt^ joins (~hph@ip98-184-89-2.mc.at.cox.net) |
| 07:30:53 | → | teardown_ joins (~user@gateway/tor-sasl/mrush) |
| 07:33:35 | × | teardown_ quits (~user@gateway/tor-sasl/mrush) (Remote host closed the connection) |
| 07:33:43 | × | teardown quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds) |
| 07:36:03 | → | teardown joins (~user@gateway/tor-sasl/mrush) |
| 07:37:54 | → | phasespace joins (~sar@80-89-47-117.inet.signal.no) |
| 07:38:44 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 07:40:49 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 07:42:22 | → | mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
| 07:45:56 | → | bitmagie joins (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) |
| 07:46:19 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 07:49:03 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 07:49:38 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 07:50:06 | × | al3x27 quits (~plovs@85.254.74.40) (Quit: WeeChat 3.0) |
| 07:51:28 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:52:30 | → | pjb joins (~t@2a01cb04063ec5007877dab9a3fb2e14.ipv6.abo.wanadoo.fr) |
| 07:53:47 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 07:57:31 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 07:58:03 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 08:04:39 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:f14e:750f:83e8:c56e:b09f) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 08:15:07 | × | bisickcor quits (~username@117.200.6.145) (Remote host closed the connection) |
| 08:17:08 | → | madjestic joins (~Android@86-88-72-244.fixed.kpn.net) |
| 08:19:12 | → | LKoen joins (~LKoen@126.170.9.109.rev.sfr.net) |
| 08:19:18 | × | olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection) |
| 08:19:43 | × | rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds) |
| 08:21:37 | × | bitmagie quits (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) (Quit: bitmagie) |
| 08:21:44 | × | darjeeling_ quits (~darjeelin@122.245.217.190) (Ping timeout: 256 seconds) |
| 08:24:54 | × | nbloomf_ quits (~nbloomf@2600:1700:ad14:3020:7dec:2218:241d:6f03) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 08:30:49 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 08:34:17 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 08:34:42 | → | christo joins (~chris@81.96.113.213) |
| 08:35:26 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 264 seconds) |
| 08:36:31 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 08:37:26 | × | shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection) |
| 08:37:46 | → | shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com) |
| 08:37:59 | → | kritzefitz joins (~kritzefit@fw-front.credativ.com) |
| 08:38:15 | × | shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection) |
| 08:38:31 | → | shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com) |
| 08:39:03 | × | shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection) |
| 08:39:20 | → | shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com) |
| 08:39:49 | × | shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection) |
| 08:39:58 | → | darjeeling_ joins (~darjeelin@122.245.217.190) |
| 08:40:06 | → | shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com) |
| 08:40:32 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Client Quit) |
| 08:40:44 | × | shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection) |
| 08:42:27 | × | newz2000 quits (~newz2000@185.103.96.147) (Remote host closed the connection) |
| 08:52:05 | × | aljce quits (617326cd@97-115-38-205.ptld.qwest.net) (Remote host closed the connection) |
| 08:52:47 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
| 08:53:09 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 08:55:27 | → | rayyyy joins (~nanoz@gateway/tor-sasl/nanoz) |
| 08:57:22 | × | wz1000 quits (~wz1000@static.11.113.47.78.clients.your-server.de) (Ping timeout: 260 seconds) |
| 09:00:07 | × | themsay[m] quits (themsaymat@gateway/shell/matrix.org/x-lszdfmzzigovolaq) (Quit: Idle for 30+ days) |
| 09:02:37 | → | p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
| 09:03:40 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 09:05:44 | → | thunderrd joins (~thunderrd@183.182.111.131) |
| 09:07:12 | × | gioyik quits (~gioyik@179.32.228.107) (Quit: WeeChat 3.0) |
| 09:12:43 | → | Franciman joins (~francesco@host-95-250-152-231.retail.telecomitalia.it) |
| 09:13:11 | → | LaserShark joins (~LaserShar@185.163.110.125) |
| 09:14:36 | × | tsrt^ quits (~hph@ip98-184-89-2.mc.at.cox.net) (Ping timeout: 240 seconds) |
| 09:15:21 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 09:15:23 | → | tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net) |
| 09:18:11 | × | qwerty quits (~tema@217.118.92.215) (Excess Flood) |
| 09:18:14 | → | benjamingr__ joins (uid23465@gateway/web/irccloud.com/x-hcdctxhyzchiutea) |
| 09:18:53 | → | qwerty joins (~tema@217.118.92.215) |
| 09:19:53 | → | michalz joins (~user@185.246.204.91) |
| 09:20:12 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Client Quit) |
| 09:21:10 | × | danso quits (~dan@69-165-210-185.cable.teksavvy.com) (Quit: WeeChat 3.0) |
| 09:22:08 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 09:24:04 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 09:24:48 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 09:27:01 | × | wonko7 quits (~wonko7@lns-bzn-55-82-255-183-4.adsl.proxad.net) (Quit: See You Space Cowboy..) |
| 09:28:35 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Client Quit) |
| 09:31:08 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 09:32:00 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 09:32:32 | → | Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
| 09:32:45 | → | wz1000 joins (~wz1000@static.11.113.47.78.clients.your-server.de) |
| 09:34:57 | → | polyrain joins (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) |
| 09:36:01 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 09:37:32 | → | fendor joins (~fendor@178.165.130.45.wireless.dyn.drei.com) |
| 09:38:02 | → | pera joins (~pera@unaffiliated/pera) |
| 09:39:49 | × | plutoniix quits (~q@184.82.204.116) (Ping timeout: 264 seconds) |
| 09:48:17 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@2403:6200:8876:f14e:750f:83e8:c56e:b09f) |
| 09:49:05 | × | polyrain quits (~polyrain@2001:8003:e501:6901:ec47:17f7:9d76:1795) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:50:48 | × | LKoen quits (~LKoen@126.170.9.109.rev.sfr.net) (Remote host closed the connection) |
| 09:50:54 | <[exa]> | Is there any decent format/library/tool for user-specifiable tokenization? |
| 09:51:52 | <[exa]> | My program is processing text input that is tokenized based on user decision, currently using a bunch-of-regexes kind of "specification" |
| 09:52:36 | × | hiroaki_ quits (~hiroaki@ip4d16fa3b.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
| 09:52:42 | <[exa]> | usage is roughly like `program --format bunch-of-regexes-that-specify-how-to-tokenize-input.txt < input.txt ` |
| 09:52:56 | <Uniaika> | well there is the boring way of having a fixed set of possible tokenisation options and an associated tokeniser |
| 09:53:13 | <[exa]> | yeah that's boring and practical. :] |
| 09:53:46 | <Uniaika> | [exa]: and it frees your mind from thinking about it whilst having your feature delivered, so you can take more time to appropriately think of a solution! |
| 09:53:53 | <[exa]> | I'm probably going that way unless some kind of lex-style token specification format surfaces |
| 09:54:07 | <Uniaika> | Like accepting user-supplied Lua programs that do the tokenisation for you! :'D |
| 09:54:17 | <Uniaika> | (this is dangerous don't do that) |
| 09:54:28 | <[exa]> | eyebrow raised. |
| 09:54:51 | <Uniaika> | I was shitposting, don't implement that for the love of god |
| 09:55:04 | <[exa]> | anyway yes, the possible complexity of the "specified parser" is a concern |
| 09:55:28 | × | hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-rbphamfimqkpbxje) (Quit: Connection closed for inactivity) |
| 09:56:06 | <[exa]> | Uniaika: I won't, but you can't deny that just running anyther program is The Unixest Way to get the thing done |
| 09:56:52 | <[exa]> | oh my, this shouldn't have happened |
| 09:57:00 | <[exa]> | :] |
| 09:57:36 | <[exa]> | hm, what if I gut out the lexer spec from Alex? |
| 09:58:55 | × | mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 246 seconds) |
| 09:59:44 | <Uniaika> | [exa]: or, you do it like a functional programmer |
| 10:00:01 | <Uniaika> | you design an Algebra faithfully representing the scope and depth of your problem |
| 10:00:20 | <[exa]> | I actually have that already |
| 10:00:24 | <Uniaika> | then you make a DSL that can be used to solve this problem |
| 10:00:32 | <Uniaika> | make sure it's safe-by-construction |
| 10:00:42 | <Uniaika> | and finally you've written a safer Lua :D |
| 10:00:49 | <Uniaika> | ah, wonderful |
| 10:00:57 | <Uniaika> | then leave the implementation detail to the reader! |
| 10:01:01 | <Uniaika> | :^) |
| 10:01:49 | <[exa]> | the whole thing is a DFA that sometimes outputs "hey there's a new {whitespace|content} token here" |
| 10:02:03 | <kritzefitz> | And since GHC is available as a library, having a DSL for your algebra is suddenly so “easy”. |
| 10:02:18 | <[exa]> | kritzefitz: teasing. |
| 10:02:58 | <kritzefitz> | Sorry |
| 10:03:47 | <Uniaika> | haha |
| 10:03:50 | <[exa]> | oh don't worry, you are right technically |
| 10:03:51 | <Uniaika> | heya kritzefitz |
| 10:05:44 | <[exa]> | background: I had a student who did a bachelor thesis on diff/diff3/patch that can patch e.g. single words in a paragraph and merging survives whitespace mismatches; all of that configurable with custom tokenizer |
| 10:05:45 | → | hiroaki_ joins (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) |
| 10:06:57 | <[exa]> | catch: it seems that he kindof failed by his own choice, but I want the tool to be able to reasonably merge latex docs with git etc |
| 10:07:26 | <[exa]> | and it actually works but the current method of specifying the custom tokenizers is a mess |
| 10:08:24 | <Uniaika> | My sad, practical advice from earlier still stands |
| 10:08:52 | Uniaika | is an industrial Haskeller 😎 |
| 10:09:20 | <[exa]> | so I rewrote the whole thing to ~300 lines of haskell and now I don't really want to spend more than another 300 lines of code on the input specification :D |
| 10:09:56 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 10:10:47 | → | o1lo01ol1o joins (~o1lo01ol1@31.22.145.144) |
| 10:10:48 | <Uniaika> | [exa]: any chance this would become open-source? |
| 10:10:50 | <kritzefitz> | I haven't thought about it too deeply, but from your description the custom tokenization sounds like the most complex part of your description. |
| 10:11:00 | <[exa]> | Uniaika: yeah working on that now :] |
| 10:11:38 | <[exa]> | in fact I guess I can just push the intermediate state to github now |
| 10:12:18 | <Uniaika> | [exa]: lovely :) |
| 10:12:57 | <[exa]> | like, you ever tried to merge 2 tex docs with git, right? |
| 10:13:33 | <[exa]> | similar fun for markdown with paragraphs broken at 80cols, etc |
| 10:13:55 | <kritzefitz> | I actually have done the latter several time, but I think now I'm gonna have nightmares about the former. |
| 10:14:52 | <Uniaika> | [exa]: I actually never did have to git + tex |
| 10:14:55 | <Uniaika> | but I feel your pain |
| 10:15:29 | × | o1lo01ol1o quits (~o1lo01ol1@31.22.145.144) (Ping timeout: 256 seconds) |
| 10:15:43 | <[exa]> | the best part is of the workflow is: fix a word in a middle of the paragraph -> reflow to 80cols -> the rest of the paragraph gets marked as a difference&collides |
| 10:16:41 | <[exa]> | ok let's give a bit of credit to the student first, so that there's no problem if he ever decides to push himself to finish the thesis |
| 10:22:33 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 10:22:50 | × | xff0x_ quits (~fox@2001:1a81:5361:7200:f380:27a:9a5d:7c68) (Ping timeout: 264 seconds) |
| 10:23:28 | → | xff0x_ joins (~fox@2001:1a81:5361:7200:385b:388d:c84e:fce8) |
| 10:24:13 | × | jassob quits (~jassob@korrob.vth.sgsnet.se) (Ping timeout: 264 seconds) |
| 10:25:21 | × | cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 265 seconds) |
| 10:26:06 | × | gzj quits (~gzj@unaffiliated/gzj) (Remote host closed the connection) |
| 10:26:26 | → | gzj joins (~gzj@unaffiliated/gzj) |
| 10:26:59 | → | Ariakenom joins (~Ariakenom@2001:9b1:efb:fc00:6963:1023:8668:d646) |
| 10:27:02 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 264 seconds) |
| 10:27:59 | → | jassob joins (~jassob@korrob.vth.sgsnet.se) |
| 10:30:13 | × | Kronic quits (~Kronic___@84.203.96.46) (Ping timeout: 264 seconds) |
| 10:31:16 | × | dolio quits (~dolio@haskell/developer/dolio) (Ping timeout: 240 seconds) |
| 10:31:18 | → | bitmagie joins (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) |
| 10:31:22 | → | zangi joins (~azure@103.154.230.250) |
| 10:31:39 | → | dolio joins (~dolio@haskell/developer/dolio) |
| 10:32:36 | × | jassob quits (~jassob@korrob.vth.sgsnet.se) (Ping timeout: 265 seconds) |
| 10:34:03 | → | jassob joins (~jassob@korrob.vth.sgsnet.se) |
| 10:35:04 | × | ADG1089__ quits (~aditya@223.235.213.117) (Remote host closed the connection) |
| 10:35:45 | × | eldritch quits (~eldritch@unaffiliated/eldritch) (Ping timeout: 272 seconds) |
| 10:35:56 | × | drewolson quits (~drewolson@64.227.24.16) (Ping timeout: 240 seconds) |
| 10:36:01 | → | eldritch joins (~eldritch@unaffiliated/eldritch) |
| 10:36:17 | → | drewolson joins (~drewolson@64.227.24.16) |
| 10:36:57 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 10:37:15 | × | vicfred quits (vicfred@gateway/vpn/mullvad/vicfred) (Quit: Leaving) |
| 10:37:53 | → | m0rphism joins (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) |
| 10:37:57 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@2403:6200:8876:f14e:750f:83e8:c56e:b09f) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 10:39:16 | × | jvanbure quits (~jvanbure@159.65.233.183) (Ping timeout: 240 seconds) |
| 10:39:34 | → | jvanbure joins (~jvanbure@159.65.233.183) |
| 10:39:36 | × | luigy quits (~luigy@104.236.106.229) (Ping timeout: 240 seconds) |
| 10:39:44 | → | luigy joins (~luigy@104.236.106.229) |
| 10:40:16 | → | plutoniix joins (~q@ppp-27-55-68-230.revip3.asianet.co.th) |
| 10:40:56 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:43:19 | × | ADG1089__ quits (~aditya@223.235.213.117) (Remote host closed the connection) |
| 10:44:16 | × | brettgilio quits (~brettgili@brettgilio.com) (Ping timeout: 240 seconds) |
| 10:45:45 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 10:45:50 | → | brettgilio joins (~brettgili@brettgilio.com) |
| 10:50:22 | × | p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core) |
| 10:50:39 | → | p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
| 10:50:45 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 10:50:48 | <gentauro> | so I'm generating code based on data source. As I'm generating `sum types`, it's mandatory for the case-constructos to be `uppercase`. Is there a `good` symbol for this? |
| 10:51:23 | → | christo joins (~chris@81.96.113.213) |
| 10:51:44 | <gentauro> | I'm thinking about capital lambda `Λ` or capital delta `Δ` but I guess it would be to `meh` if people want to type the sum type … |
| 10:51:59 | gentauro | (unless they are greek ofc) |
| 10:52:37 | <lortabac> | I would add a 'Con_' prefix |
| 10:52:40 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 10:52:56 | <lortabac> | or 'C_' |
| 10:53:01 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 10:53:36 | <kritzefitz> | Can you just uppercase the first character of the name you were already using? |
| 10:53:42 | <gentauro> | lortabac: yea, it something like that I'm looking for |
| 10:54:07 | <gentauro> | kritzefitz: in some cases yes, but others, the data is like "1. …" |
| 10:54:14 | <gentauro> | so that's the problematic part |
| 10:54:36 | × | sdrodge quits (~sdrodge@unaffiliated/sdrodge) (Quit: WeeChat 3.0) |
| 10:55:37 | × | christo quits (~chris@81.96.113.213) (Ping timeout: 246 seconds) |
| 10:56:13 | <[exa]> | Uniaika: (potentially kritzefitz) -- I uploaded it here: https://gitea.blesmrt.net/exa/adiff |
| 10:56:20 | <Uniaika> | awesome |
| 10:56:24 | → | bor0 joins (~boro@unaffiliated/boro/x-000000001) |
| 10:56:47 | → | sdrodge joins (~sdrodge@unaffiliated/sdrodge) |
| 10:56:52 | <Uniaika> | brilliant |
| 10:56:57 | <Uniaika> | thanks [exa] :) |
| 10:57:07 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 258 seconds) |
| 10:58:00 | <[exa]> | like, I'd welcome any ideas on e.g. how to tackle unicode on input |
| 10:58:57 | <[exa]> | some parts suck, esp. escaping/un-escaping the regexes and everything (regex-tdfa does not support \n \t etc) |
| 11:01:07 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 265 seconds) |
| 11:01:17 | <kritzefitz> | [exa], thank! It looks really interesting, but I'm afraid I'm not gonna have time (and energy) to properly look into it. |
| 11:03:16 | <[exa]> | it's a slow off-time project anyway, I don't expect much activity :D |
| 11:08:30 | <Uniaika> | did you folks see quad-ci? the CI server/runner in haskell? |
| 11:08:35 | <Uniaika> | it looks really neat |
| 11:08:55 | <Uniaika> | https://github.com/alpacaaa/quad-ci/ |
| 11:09:40 | → | coot joins (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) |
| 11:09:44 | <[exa]> | (one fun thing I learned: if you run Levenshtein algorithm from both sides and sum the matrix weights, you will get a nice map where the optimal diff paths are all on the same "minimum" value.) |
| 11:10:24 | <Uniaika> | [exa]: oh! |
| 11:10:27 | <Uniaika> | that's interesting :) |
| 11:10:49 | <[exa]> | Uniaika: quad-ci looks pretty minimal, that's good |
| 11:10:54 | <Uniaika> | yeah |
| 11:11:00 | <Uniaika> | might use it for my own stuff |
| 11:14:27 | <[exa]> | hm, Simple Haskell |
| 11:14:40 | → | LKoen joins (~LKoen@126.170.9.109.rev.sfr.net) |
| 11:15:05 | <[exa]> | we should have a better name for this principle, "keep the stuff tiny so that it can be fixed" |
| 11:15:08 | → | rmk236 joins (~lcampos@2a02:908:3616:b100:849c:a12b:ff95:e193) |
| 11:15:36 | <Uniaika> | [exa]: it doesn't fit on a README badge :P |
| 11:16:41 | <[exa]> | lol |
| 11:17:02 | × | notzmv quits (~user@unaffiliated/zmv) (Remote host closed the connection) |
| 11:17:54 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:24:05 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 11:28:27 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 260 seconds) |
| 11:29:10 | → | toorevitimirp joins (~tooreviti@117.182.181.108) |
| 11:29:23 | × | bor0 quits (~boro@unaffiliated/boro/x-000000001) (Quit: This computer has gone to sleep) |
| 11:29:48 | <arahael> | Occam's Razor? |
| 11:34:16 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 11:36:02 | × | zangi quits (~azure@103.154.230.250) (Ping timeout: 272 seconds) |
| 11:36:19 | → | zangi joins (~azure@103.154.230.250) |
| 11:37:21 | <ADG1089__> | spawnPipe :: MonadIO m => String -> m Handle (Launch an external application through the system shell and return a Handle to its standard input.); How can i spawn and get handle to stdout instead? |
| 11:37:33 | <[exa]> | arahael: "less entropy is more probable"...not sure it applies to programs seamlessly |
| 11:38:03 | → | ericsagn1 joins (~ericsagne@2405:6580:0:5100:fcdb:75f:452b:6812) |
| 11:38:57 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 11:39:13 | <[exa]> | ADG1089__: it should be doable by just copying the spawnPipe definition and creating/dup2ing one additional pipe |
| 11:39:16 | × | cheater quits (~user@unaffiliated/cheater) (Ping timeout: 240 seconds) |
| 11:39:24 | <arahael> | [exa]: Possibly not. |
| 11:39:42 | <[exa]> | ADG1089__: (copy from here: https://hackage.haskell.org/package/xmonad-contrib-0.16/docs/src/XMonad.Util.Run.html#spawnPipe ) |
| 11:40:32 | <[exa]> | arahael: if a program is taken as an explanation of the external effect perhaps, kindof in a curryhowardish way |
| 11:40:49 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:7c82:3285:3449:9fb4) (Ping timeout: 258 seconds) |
| 11:40:50 | <[exa]> | but that doesn't imply that the effects themselves should be kept simple |
| 11:40:55 | <arahael> | [exa]: It's 10:40 pm here, this is getting *way* too academic now. :D |
| 11:41:17 | <[exa]> | ok worry not, I likely had too much coffee |
| 11:41:43 | <arahael> | [exa]: I've also not had enough coffee! But I'm not about to catch up at this hour! :D |
| 11:42:44 | × | gentauro quits (~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer) |
| 11:43:07 | → | o1lo01ol1o joins (~o1lo01ol1@31.22.145.144) |
| 11:43:23 | <dminuoso> | Are all ANSI control sequences encodable in ASCII? |
| 11:43:25 | → | gentauro joins (~gentauro@unaffiliated/gentauro) |
| 11:44:06 | × | o1lo01ol1o quits (~o1lo01ol1@31.22.145.144) (Remote host closed the connection) |
| 11:44:09 | <dminuoso> | The wikipedia article suggests that only most use ASCII escape \033 |
| 11:45:46 | → | pavonia joins (~user@unaffiliated/siracusa) |
| 11:46:19 | → | o1lo01ol1o joins (~o1lo01ol1@31.22.145.144) |
| 11:49:24 | <ADG1089__> | [exa]: thanks! |
| 11:49:55 | → | kuribas joins (~user@ptr-25vy0i8109xerw15t0a.18120a2.ip6.access.telenet.be) |
| 11:50:49 | × | o1lo01ol1o quits (~o1lo01ol1@31.22.145.144) (Remote host closed the connection) |
| 11:52:20 | <[exa]> | dminuoso: afaik these in iso2022 all have a 7bit ascii representation where the only "non-printable" character is the actual escape |
| 11:52:23 | → | madjest11 joins (~Android@31-161-157-155.mobile.kpn.net) |
| 11:52:30 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 11:53:34 | × | xff0x_ quits (~fox@2001:1a81:5361:7200:385b:388d:c84e:fce8) (Remote host closed the connection) |
| 11:53:52 | → | xff0x_ joins (~fox@2001:1a81:5361:7200:f921:dfdc:3d2e:f65) |
| 11:54:14 | × | b4er quits (~b5er_@91.193.4.138) (Ping timeout: 256 seconds) |
| 11:54:39 | × | madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 256 seconds) |
| 11:54:48 | → | ph88 joins (~ph88@2a02:8109:9e00:7e5c:cce3:aa71:9586:6387) |
| 11:57:03 | × | madjest11 quits (~Android@31-161-157-155.mobile.kpn.net) (Read error: Connection reset by peer) |
| 11:57:19 | <dminuoso> | [exa]: Mmm alright. |
| 11:58:25 | → | madjestic joins (~Android@31-161-157-155.mobile.kpn.net) |
| 11:58:31 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 11:58:35 | <dminuoso> | I guess this is sufficient. If there are C1 sequences that do not have an escape sequence representation, then that's not my problem anymore. |
| 11:58:43 | × | rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection) |
| 11:59:07 | → | rayyyy joins (~nanoz@gateway/tor-sasl/nanoz) |
| 12:00:31 | <kuribas> | hmm, I was thinking how often static types can be more general than dynamic types, due to type inference and dispatching on the types. |
| 12:01:14 | <kuribas> | It's possible to do type inference in a dynamic language, but that would end up with more code, not less. |
| 12:01:40 | <dminuoso> | kuribas: Doing type inference in a dynamic language certainly is possible. |
| 12:01:42 | <kuribas> | well, I guess the advantage is being more concise, not more general. |
| 12:02:05 | <kuribas> | dminuoso: possible yes, but it ends up being a heavier solution, not lighter. |
| 12:02:06 | → | mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
| 12:02:32 | <dminuoso> | It depends a bit on the semantics of the language, you get into the turing undecidability fairly quickly. |
| 12:02:35 | <kuribas> | While dynamic proponents often claim dynamic language are lighter |
| 12:03:52 | × | Anthaas quits (~Anthaas@unaffiliated/anthaas) (Ping timeout: 246 seconds) |
| 12:04:07 | <kuribas> | I've found that a dynamic language solution is only lighter (more concise, requiring less modelling, etc...), when you are willing to give up on certain features, like validation, precise error handling, etc... |
| 12:04:54 | <kuribas> | my haskell code usually ends up being less lines than the lisp/clojure/scheme equivalent. |
| 12:06:01 | <kuribas> | dminuoso: so you end up using something like clojure spec, which is heavier, not lighter than ADTs + type classes IMO. |
| 12:06:33 | → | Anthaas joins (~Anthaas@unaffiliated/anthaas) |
| 12:06:36 | <kuribas> | I also find that heavy type machinery leads to less flexible code, not more flexible code. |
| 12:07:52 | <kuribas> | and Functor/Applicative/Monad/Monoid, are a more flexible way to create libraries than type level stuff. |
| 12:09:52 | × | ericsagn1 quits (~ericsagne@2405:6580:0:5100:fcdb:75f:452b:6812) (Ping timeout: 260 seconds) |
| 12:09:54 | × | pera quits (~pera@unaffiliated/pera) (Quit: leaving) |
| 12:11:44 | → | olligobber joins (~olligobbe@unaffiliated/olligobber) |
| 12:14:34 | → | _noblegas joins (uid91066@gateway/web/irccloud.com/x-hltwtxmffoclzdwc) |
| 12:14:48 | <kuribas> | "heavier" is of course subjective, some people may find modelling types to be hard. But I just don't see much difference between modelling a type using an ADT or using clojure spec. |
| 12:15:59 | × | mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 12:16:02 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 12:16:12 | → | Kronic joins (~Kronic___@84.203.96.46) |
| 12:17:21 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:1a8:463f:5e1d:212e) |
| 12:17:26 | <Kronic> | Is there a nice way to do varargs in Haskell? I seen the examples online but I found them to be pretty complex for something that I would have imagined to be so easy, is there some extension I can use to get this? |
| 12:18:00 | <kuribas> | Kronic: the only way is using type classes. |
| 12:18:07 | <kuribas> | and overloading (->) |
| 12:18:25 | <kuribas> | varargs are often a code small IMO |
| 12:18:28 | <kuribas> | haskell isn't lisp |
| 12:18:38 | → | LKoen_ joins (~LKoen@126.170.9.109.rev.sfr.net) |
| 12:18:38 | <kuribas> | code smell |
| 12:19:20 | <kuribas> | For example formatting vs printf. formatting is more idiomatic haskell. |
| 12:19:48 | <Kronic> | Okay, well I'll give you my scenario and you can tell me if you think that VarArgs are appropriate in that case. I'm working on a chatbot, and I'm currently building a representation for commands. In doing so, I have a Command Record which defines an execute function, which pending on the command would be polyvariadic |
| 12:20:25 | <dminuoso> | Kronic: Probably not. :) |
| 12:20:32 | <Kronic> | Okay, I thought so :) |
| 12:20:37 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Ping timeout: 260 seconds) |
| 12:20:45 | <dminuoso> | Kronic: You're generally better off writing a data type and an evaluator for that data type. |
| 12:21:03 | <dminuoso> | Then the variability can be encoded into, say, a list. |
| 12:21:21 | × | LKoen quits (~LKoen@126.170.9.109.rev.sfr.net) (Ping timeout: 265 seconds) |
| 12:21:25 | <lortabac> | commands are a common use case for GADTs |
| 12:21:25 | <Kronic> | That sounds interesting but I don't know how to do that, do you have an example I can read ? |
| 12:21:49 | × | shailangsa quits (~shailangs@host86-186-196-229.range86-186.btcentralplus.com) (Ping timeout: 260 seconds) |
| 12:22:25 | <Kronic> | I've heard about GADTs but never used them. The project I'm working on is purely educational so if there is a route to go here to learn something very useful I'm open to that |
| 12:22:38 | <dminuoso> | You might not even need full blown GADTs. |
| 12:22:42 | <maerwald> | why would you need GADTs for that? |
| 12:23:00 | <kuribas> | Kronic: you can uncurry your tuples, then put the input type in the Command type. |
| 12:23:39 | → | Entertainment joins (~entertain@104.246.132.210) |
| 12:23:47 | <dminuoso> | Kronic: It's hard to give you a good example without knowing a bit more about what you want to be polyvariadic exactly. |
| 12:24:00 | <kuribas> | like data Command input output = Command { commandName :: Text, commandFun :: input -> output } |
| 12:24:31 | <Kronic> | I like that solution kuribas |
| 12:24:33 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:24:35 | <Kronic> | Thank you |
| 12:24:41 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 12:24:54 | <kuribas> | Kronic: even easier might be to just make a big sum type for your commands. |
| 12:25:05 | <dminuoso> | I'd opt for the big sum type. :) |
| 12:25:13 | <maerwald> | +1 |
| 12:25:27 | × | LaserShark quits (~LaserShar@185.163.110.125) (Remote host closed the connection) |
| 12:25:39 | <Kronic> | I have a sum type already, I suppose I could pack this information into that |
| 12:25:49 | <dminuoso> | Kronic: So say, you have `data Command = Say Message | Join ChannelRef | Connect URI`, and then some `execteCommand :: Command -> IO ()` |
| 12:25:56 | <dminuoso> | As a very simplistic example |
| 12:26:24 | <Kronic> | That's really nice, glad I asked this question |
| 12:27:10 | <lortabac> | maerwald: you only need GADTs in the most complex case, that is if you have constraints in some commands or if the result type is not uniform |
| 12:27:38 | <maerwald> | lortabac: yeah, so unless you have that complex case I'd avoid GADTs at all cost :) |
| 12:27:44 | <lortabac> | of course |
| 12:28:01 | <kuribas> | Kronic: alternatively you could just compose commands. For example Command :: InputString -> Maybe (IO ErrorMsg) |
| 12:28:02 | <Uniaika> | yeah no need for GADTs here |
| 12:28:08 | <lortabac> | maerwald: but in real life every time I have something called Command I have that complex case :) |
| 12:28:09 | <kuribas> | Kronic: then compose with (<|>) |
| 12:28:59 | <maerwald> | lortabac: I've only encountered one case of GADTs in real life and it wasn't necessary there either :p |
| 12:29:03 | <lortabac> | :) |
| 12:29:05 | <ADG1089__> | @hoogle X a -> IO a |
| 12:29:06 | <lambdabot> | Basement.Monad unsafePrimToIO :: PrimMonad prim => prim a -> IO a |
| 12:29:07 | <lambdabot> | Generic.Data.Internal.Utils coerce' :: Coercible (f x) (g x) => f x -> g x |
| 12:29:07 | <lambdabot> | Control.Effect.Lift sendM :: (Has (Lift n) sig m, Functor n) => n a -> m a |
| 12:29:36 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 12:29:42 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 260 seconds) |
| 12:30:05 | → | Mrbuck joins (~Mrbuck@gateway/tor-sasl/mrbuck) |
| 12:30:26 | → | argento joins (~argent0@168.227.96.26) |
| 12:30:47 | <Mrbuck> | Hi how recursion works in haskell? |
| 12:31:08 | <Kronic> | spiffingly |
| 12:31:13 | <maerwald> | on assembly level? |
| 12:31:29 | <ADG1089__> | Is there a X transformer for the above? |
| 12:31:37 | <Mrbuck> | output is stored some where untill next next next functions run? |
| 12:31:47 | → | mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
| 12:32:20 | <Mrbuck> | maerwald: tell me howit works on assembly level |
| 12:32:24 | <kuribas> | Mrbuck: like in any language? except lazy |
| 12:32:35 | × | Stanley00 quits (~stanley00@unaffiliated/stanley00) () |
| 12:32:37 | <kuribas> | Mrbuck: assembly level is complicated in haskell |
| 12:32:45 | <kuribas> | and actually unspecified |
| 12:32:47 | → | binwiederhier1 joins (~binwieder@217.146.82.202) |
| 12:32:58 | <kuribas> | you cannot speak about assembly level in haskell, only in a specific compiler, like ghc |
| 12:33:06 | <Mrbuck> | kuribas: ok,and recurion on haskell is fast is it because of az feature? |
| 12:33:07 | <maerwald> | Mrbuck: you could easily examine that by spitting out a foldr and a foldl into assembly |
| 12:33:08 | <Mrbuck> | lazy* |
| 12:33:21 | → | Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com) |
| 12:33:30 | <kuribas> | Mrbuck: recursion can be fast or slow. It depends. |
| 12:33:47 | <hpc> | i suggest starting with how a thunk is implemented |
| 12:33:56 | <hpc> | (in ghc) |
| 12:34:27 | <Mrbuck> | ok |
| 12:34:57 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
| 12:35:12 | <maerwald> | Mrbuck: https://haskell.godbolt.org/ |
| 12:35:19 | <maerwald> | here you can easily examine assembly |
| 12:35:34 | <hpc> | iirc there's a good explanation somewhere in https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/#the-ghc-commentary |
| 12:35:51 | <Mrbuck> | one doubt if I were to implement a Breadth first or depth first algoroithms I would usewhile loop with help of stack or queue in other langauges how it is done in Haskell....since they are done recursively if I simply use recursion performance can be affectedright? |
| 12:36:19 | <Mrbuck> | maerwald: Ok I will explore it thank you |
| 12:36:31 | <maerwald> | Mrbuck: the interesting thing you should spot is that there is no `call` |
| 12:36:39 | → | geekosaur joins (ac3a8b4c@172.58.139.76) |
| 12:36:39 | × | guest122` quits (~user@49.5.6.87) (Read error: Connection reset by peer) |
| 12:37:10 | <dminuoso> | Mrbuck: I tend to think of a function call in Haskell as a sort of "jump/control transfer". |
| 12:37:25 | <maerwald> | yeah, there are no functions in haskell :p |
| 12:37:28 | → | guest122` joins (~user@49.5.6.87) |
| 12:37:34 | <dminuoso> | Similar to that of a goto from other langauges. |
| 12:37:57 | <dminuoso> | Now, consider, how loops are usually implemented in imperative languages. They are usually (conditional) jumps/gotos. |
| 12:38:21 | → | aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 12:38:45 | <Mrbuck> | Ok I think I understand a little now, I will play and come back again |
| 12:39:03 | → | usr25 joins (~usr25@unaffiliated/usr25) |
| 12:39:12 | <Mrbuck> | Thank you all |
| 12:41:20 | <kuribas> | Mrbuck: don't worry about performance, get something working first. |
| 12:41:27 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
| 12:41:33 | → | shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com) |
| 12:42:27 | <Mrbuck> | kuribas: Yes, actally I am not working directly with haskell bow but implementing some algorithm recursively in another language and then thought if it can be fast in haskell and want to know how it is done here |
| 12:42:36 | <Mrbuck> | s/bow/now* |
| 12:42:43 | <dminuoso> | Mrbuck: So this is generally a difficult thing for several reasons. |
| 12:43:00 | <Mrbuck> | dminuoso: ok |
| 12:43:13 | <dminuoso> | For one, we tend to often represent/structure data and algorithms very differently, in ways that are not just "mimicry of the same ideas" |
| 12:43:15 | → | __monty__ joins (~toonn@unaffiliated/toonn) |
| 12:43:56 | × | Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds) |
| 12:44:57 | <dminuoso> | We tend to prefer pure functional data structures (for futher reading consult Okasaki) and algorithms that operate on these instead. |
| 12:45:56 | <Mrbuck> | dminuoso: ok I will check them I forget I have come across that fucntional datastructures talk long back but forgot it |
| 12:46:46 | <ij> | [exa], you meant this one? https://www.microsoft.com/en-us/research/wp-content/uploads/2002/07/inline.pdf |
| 12:46:54 | <Mrbuck> | I think this http://www.cs.cmu.edu/~rwh/theses/okasaki.pdf bookmarked it |
| 12:50:17 | <dminuoso> | Mrbuck: And even then, getting high performance is (generally in any language) a complicated business. There's topics like sharing, strictness, memory allocations, using mutable operations, ensuring fusion happens, etc.. all of this in the presence of a compiler that transforms your program representation. |
| 12:50:41 | <[exa]> | ij: yes |
| 12:50:53 | <dminuoso> | So when you find your implementation is slower in Haskell, the first question should be "why is it that way" |
| 12:51:26 | → | solarliner joins (~solarline@243.81.10.109.rev.sfr.net) |
| 12:51:35 | → | aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 12:51:40 | <Mrbuck> | dminuoso: ok got it |
| 12:52:06 | × | gzj quits (~gzj@unaffiliated/gzj) (Remote host closed the connection) |
| 12:52:27 | → | gzj joins (~gzj@unaffiliated/gzj) |
| 12:54:29 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
| 12:54:38 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@171.5.28.247) |
| 12:54:50 | <solarliner> | Hi, it's maybe a noob question here, but I have a bunch of `Context -> IO a`, and I'd like to use them without wrapping them, in a monadic context that provides both a Context reader and IO |
| 12:55:24 | × | lazyshrk quits (~lazyshrk@128.199.58.13) (Quit: ZNC 1.8.2 - https://znc.in) |
| 12:55:33 | <ij> | I read the data types a la carte paper – it seems really unintuitive to program something that way. Is anyone using it for actual code |
| 12:55:35 | <dminuoso> | solarliner: Put it inside `Reader` :) |
| 12:55:36 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:55:52 | <dminuoso> | solarliner: Oh wait, do you mean you just have `MonadReader Context` and `MonadIO`? |
| 12:56:08 | → | lazyshrk joins (~lazyshrk@128.199.58.13) |
| 12:57:01 | <dminuoso> | Either way, you cant use them directly. Either you have to `liftIO (f =<< ask)`, or you need to hoist/wrap them into your monad. |
| 12:57:33 | <kritzefitz> | dminuoso, I think you mean `liftIO . f =<< ask`. |
| 12:57:47 | <solarliner> | Well, my use case is a library which provides the monadic context and the functions, and the users use the functions within the monadic context, if possible without having to lift or wrap anything explicitely (for ergonomics), and without having me wrap each function individually (because I'm lazy lol) |
| 12:57:52 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 12:57:59 | → | shailangsa joins (~shailangs@host86-185-58-185.range86-185.btcentralplus.com) |
| 12:58:00 | <dminuoso> | kritzefitz: Ah yeah. |
| 12:58:23 | <solarliner> | I don't have too much in the way of a concrete implementation yet, I'm just thinking about the design of the library |
| 12:58:52 | → | knupfer joins (~Thunderbi@mue-88-130-61-254.dsl.tropolys.de) |
| 12:59:05 | <kritzefitz> | solarliner, If your `Context -> IO a`s are actually monomorphic, I think there is no way to use them without wrapping or listing explicitly. |
| 12:59:09 | <dminuoso> | solarliner: You could write your functions polymorphic: `f :: (MonadReader Context m, MonadIO m) => m T`, and they can use it appropriately |
| 12:59:47 | × | bitmagie quits (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) (Quit: bitmagie) |
| 13:00:28 | <solarliner> | Right, okay; I imagine that wouldn't work well with FFI though, so I'd have to still do some wrapping |
| 13:00:37 | <dminuoso> | Why wouldn't it? |
| 13:00:43 | <dminuoso> | With MonadIO you can do full FFI |
| 13:00:51 | <dminuoso> | You just need IO :) |
| 13:00:54 | × | Vulfe quits (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) (Remote host closed the connection) |
| 13:01:00 | → | Vulfe joins (~vulfe@2600:1702:31b0:34e0:3dea:7cc:1ee9:85fe) |
| 13:01:57 | <solarliner> | Alright, thanks for the quick answers, I'll dig more into that |
| 13:01:59 | <dminuoso> | The two problems I just see with this, is that this can deter in-experienced users, and if this is to be used in hot code paths, mtl-style polymorphic code tends to prevent inlining. |
| 13:02:30 | <dminuoso> | (at least without additional work) |
| 13:02:59 | <solarliner> | Inexperienced users are the primary target of the library, yeah, I don't want to have users deal with too much monadic plumbing if possible, to make reasoning about the code easier conceptually |
| 13:03:18 | <dminuoso> | Then just go with `Context -> IO T` |
| 13:03:25 | × | plutoniix quits (~q@ppp-27-55-68-230.revip3.asianet.co.th) (Quit: Leaving) |
| 13:03:31 | <dminuoso> | If the user is inside another monad, it's their responsibility. |
| 13:03:41 | <dminuoso> | I might consider writing it polymorphic over MonadIO, possibly. |
| 13:04:12 | <zangi> | I'm still learning monad, but is it possible to have a state without monad? |
| 13:04:19 | <dminuoso> | Yes. |
| 13:04:23 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 260 seconds) |
| 13:04:53 | <ski> | just thread the versions of your state through parameters, and possibly results |
| 13:05:20 | <ski> | (this is what `State' and `StateT' does, behind the covers, anyway) |
| 13:05:22 | <dminuoso> | zangi: Monad is not something magical, it just presents a unified interface for common operations. You can use the same operations without the interface just fine. |
| 13:06:37 | <zangi> | any code example? |
| 13:06:39 | <ski> | > takeWhile (< 1000) (iterate (2 *) 1) -- a simple version of iterating on a state |
| 13:06:41 | <lambdabot> | [1,2,4,8,16,32,64,128,256,512] |
| 13:07:01 | <dminuoso> | zangi: The manual method is by setting up a function and encoding the state as a parameter. |
| 13:07:10 | <ski> | zangi : do you know accumulator-passing style ? |
| 13:07:27 | <zangi> | f x acc? sure |
| 13:07:33 | <dminuoso> | So say `f :: Int -> (Int, Char)` depends on some "input state", produces a result of type Char, along with a (possibly modified) state of type Int. |
| 13:07:36 | <dminuoso> | zangi: ^- |
| 13:07:50 | <ski> | `acc' is a state, that is passed downwards (assuming you have linear recursion) |
| 13:07:51 | × | madjestic quits (~Android@31-161-157-155.mobile.kpn.net) (Read error: Connection reset by peer) |
| 13:08:33 | → | Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com) |
| 13:08:36 | <ski> | if you also want to pass it "upwards", that is "threading it" in and out of (some) function calls, you'll also have to return it as the result of functions (possibly together with another, "main", result) |
| 13:08:44 | <dminuoso> | zangi: the State monad is *exactly* this, except it hides the tedious passing of this Int to the user. :) |
| 13:08:56 | → | Nucleo joins (~textual@mskresolve-a.mskcc.org) |
| 13:09:07 | <dminuoso> | (when I say exactly I dont just mean semantically, but what it internally does) |
| 13:09:08 | Nucleo | is now known as Guest37372 |
| 13:09:41 | × | Guest37372 quits (~textual@mskresolve-a.mskcc.org) (Client Quit) |
| 13:10:04 | <ski> | zangi : exercise, given `data Tree a = Tip | Node (Tree a) a (Tree a)', write a function `labelTree :: Tree a -> Tree (Integer,a)' that labels the elements with natural numbers (from `0' upwards), using in-order traversal |
| 13:10:08 | → | Alleria joins (~textual@zrcout.mskcc.org) |
| 13:10:19 | × | lazyshrk quits (~lazyshrk@128.199.58.13) (Quit: ZNC 1.8.2 - https://znc.in) |
| 13:10:32 | Alleria | is now known as Guest67343 |
| 13:11:03 | → | lazyshrk joins (~lazyshrk@128.199.58.13) |
| 13:11:08 | → | madjestic joins (~Android@86-88-72-244.fixed.kpn.net) |
| 13:12:26 | <ski> | (then, you could compare with a monadic, and an idiomatic, solution, using operations from `Monad' resp. `Applicative' on `State Integer') |
| 13:14:57 | × | usr25 quits (~usr25@unaffiliated/usr25) (Quit: Leaving) |
| 13:16:37 | → | aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 13:18:53 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
| 13:19:17 | × | unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 13:19:20 | → | aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 13:19:36 | → | unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) |
| 13:22:58 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Remote host closed the connection) |
| 13:23:22 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 13:24:49 | × | knupfer quits (~Thunderbi@mue-88-130-61-254.dsl.tropolys.de) (Ping timeout: 260 seconds) |
| 13:27:32 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@171.5.28.247) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 13:29:01 | × | toorevitimirp quits (~tooreviti@117.182.181.108) (Ping timeout: 264 seconds) |
| 13:29:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
| 13:30:05 | → | urodna joins (~urodna@unaffiliated/urodna) |
| 13:30:27 | × | binwiederhier1 quits (~binwieder@217.146.82.202) (Remote host closed the connection) |
| 13:35:06 | × | gzj quits (~gzj@unaffiliated/gzj) (Remote host closed the connection) |
| 13:38:10 | → | sunetoft joins (~sunetoft@178.239.168.171) |
| 13:41:38 | → | ward_ joins (~ward@ptr-1u4szschif2qqvply2m.18120a2.ip6.access.telenet.be) |
| 13:43:50 | × | coot quits (~coot@37.30.55.131.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 13:46:03 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@171.5.28.247) |
| 13:47:09 | → | berberman_ joins (~berberman@unaffiliated/berberman) |
| 13:47:53 | × | berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 268 seconds) |
| 13:49:05 | → | p-core1 joins (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz) |
| 13:49:14 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:1a8:463f:5e1d:212e) (Ping timeout: 258 seconds) |
| 13:49:24 | <ward_> | Hi, I have a third-party haskell app that needs to run on a server with 16 cpu cores. I'm suspecting it runs slows because it uses too many threads so I'm looking for a way to limit it to 1-2 threads. In the cabal file the following options are set: `ghc-options: -threaded -rtsopts -with-rtsopts=-N`. I tried setting `GHCRTS="-maxN2"` as an environment variable but it seems to be ignored. Is there a way to achieve this |
| 13:49:24 | <ward_> | without recompiling? |
| 13:50:10 | <kuribas> | ward_: green threads or OS threads? |
| 13:50:15 | <kuribas> | green threads are very cheap |
| 13:50:23 | × | p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Ping timeout: 258 seconds) |
| 13:50:23 | p-core1 | is now known as p-core |
| 13:50:37 | <ward_> | I can see them in htop, so OS threads? |
| 13:51:55 | <kuribas> | pass -RTS -N=1 to the program? |
| 13:52:33 | <kuribas> | erm +RTS -N1 -RTS |
| 13:52:46 | <geekosaur> | +RTS -N1 -qg -RTS |
| 13:52:48 | <ward_> | as a runtime argument? |
| 13:52:54 | <geekosaur> | yes |
| 13:53:19 | <geekosaur> | replace 1 with the number of OS threads you want |
| 13:54:21 | <siraben> | ski: I love that exercise, I first saw it in http://okmij.org/ftp/Scheme/monad-in-Scheme.html |
| 13:54:52 | × | darjeeling_ quits (~darjeelin@122.245.217.190) (Ping timeout: 260 seconds) |
| 13:57:30 | → | elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
| 13:57:53 | <ski> | i don't recall where i saw it |
| 13:57:59 | × | rdivyanshu quits (uid322626@gateway/web/irccloud.com/x-azqolmgutgadssur) (Quit: Connection closed for inactivity) |
| 13:59:43 | × | pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 246 seconds) |
| 13:59:49 | → | geowiesnot joins (~user@87-89-181-157.abo.bbox.fr) |
| 14:00:22 | <kuribas> | siraben: you can implement monadic bind using scheme continuations. That gives you monad-notation for free :) |
| 14:01:14 | <siraben> | kuribas: define-syntax FTW https://github.com/siraben/monadic-parsing |
| 14:01:43 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:9344:4d83:8d7c:8a3f) |
| 14:01:50 | <kuribas> | siraben: that's not what I mean. I mean using the continuation. |
| 14:01:59 | → | pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net) |
| 14:02:06 | <siraben> | kuribas: oh yes |
| 14:02:11 | <siraben> | but don't you end up with callback hell? |
| 14:02:23 | ski | . o O ( "Representing Monads" by Andrzej Filinski in 1994-01 at <http://hjemmesider.diku.dk/~andrzej/papers/> ) |
| 14:02:51 | <kuribas> | siraben: that's what bind is for... |
| 14:03:02 | <siraben> | oh lol of course |
| 14:04:25 | <ski> | you can define `reify' and `reflect', in terms of `list-return' and `list-bind', and (composable) continuations, so that `(reify (* (reflect (list 2 3)) (reflect (list 10 100))))' computes the list `(20 200 30 300)' |
| 14:04:59 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:05:00 | × | tsrt^ quits (tsrt@ip98-184-89-2.mc.at.cox.net) () |
| 14:06:02 | <ski> | (or you could use `(reify (let* ((a (reflect (list 2 3))) (b (reflect (list 10 100)))) (* a b)))', if you want it to look more like `do') |
| 14:06:16 | × | ph88 quits (~ph88@2a02:8109:9e00:7e5c:cce3:aa71:9586:6387) (Remote host closed the connection) |
| 14:06:44 | → | ph88 joins (~ph88@2a02:8109:9e00:7e5c:cce3:aa71:9586:6387) |
| 14:08:39 | <kuribas> | sadly you cannot define applicatives this way... |
| 14:08:50 | <kuribas> | but then, neither can monad do... |
| 14:09:49 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds) |
| 14:09:56 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 14:10:00 | <ski> | (fwiw, you `(define (reflect lis) (shift (lambda (c) (list-bind lis c))))' and `(define (reify* thunk) (reset (lambda () (list-return (thunk)))))', defining `(reify ?expr)' as a macro, expanding to `(reify* (lambda () ?expr))') |
| 14:11:29 | <ski> | (and you can use the `return' and `bind' for any monad that you can define in the language, not just for the list monad. so you can e.g. introduce parser side-effects, if you have a monadic parsing combinator library) |
| 14:11:48 | <ski> | kuribas : hm, elaborate ? |
| 14:11:50 | × | geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 272 seconds) |
| 14:12:10 | <kuribas> | I don't think it's a coincidence that both continations and monads are proposed as a building block for exceptions, control flow, etc... |
| 14:12:18 | <kuribas> | ski: I mean like doing stuff in paralel. |
| 14:12:28 | <kuribas> | for example applicative do |
| 14:12:35 | → | darjeeling_ joins (~darjeelin@122.245.217.190) |
| 14:12:38 | → | madjest16 joins (~Android@31-161-158-37.mobile.kpn.net) |
| 14:13:10 | → | Sheilong joins (uid293653@gateway/web/irccloud.com/x-htiyqqtzxccutmly) |
| 14:13:38 | <ski> | hm, okay |
| 14:13:51 | <kuribas> | continuations imply a sequence, like monads do |
| 14:14:15 | → | rekahsoft joins (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
| 14:14:43 | <ski> | (fwiw, i think the above monadic reflection thing is related to codensity, which is a continuation monad) |
| 14:14:55 | × | LKoen_ quits (~LKoen@126.170.9.109.rev.sfr.net) (Remote host closed the connection) |
| 14:15:02 | × | madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 264 seconds) |
| 14:15:13 | <ski> | well, idioms also express a kind of sequencing, but not in quite the same sense |
| 14:23:13 | → | stef204 joins (~stef204@unaffiliated/stef-204/x-384198) |
| 14:23:13 | × | madjest16 quits (~Android@31-161-158-37.mobile.kpn.net) (Read error: Connection reset by peer) |
| 14:25:51 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 14:26:59 | → | Tario joins (~Tario@201.192.165.173) |
| 14:27:18 | → | madjestic joins (~Android@86-88-72-244.fixed.kpn.net) |
| 14:27:30 | × | Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 265 seconds) |
| 14:29:05 | → | nehsou^ joins (nehsou@ip98-184-89-2.mc.at.cox.net) |
| 14:31:02 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 260 seconds) |
| 14:35:25 | → | madjest51 joins (~Android@31-161-158-37.mobile.kpn.net) |
| 14:37:39 | × | madjestic quits (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 265 seconds) |
| 14:38:18 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 14:39:12 | × | ph88 quits (~ph88@2a02:8109:9e00:7e5c:cce3:aa71:9586:6387) (Ping timeout: 260 seconds) |
| 14:39:13 | × | tabemann_ quits (~tabemann@2600:1700:7990:24e0:bd20:50d4:5aa8:e550) (Remote host closed the connection) |
| 14:39:18 | → | notzmv joins (~user@unaffiliated/zmv) |
| 14:39:27 | → | tabemann_ joins (~tabemann@2600:1700:7990:24e0:3ba2:fef5:1410:7dbb) |
| 14:40:06 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@171.5.28.247) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 14:40:34 | × | nshepperd quits (~nshepperd@li364-218.members.linode.com) (Quit: WeeChat 2.9) |
| 14:40:43 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:40:45 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:7dec:2218:241d:6f03) |
| 14:42:17 | × | geekosaur quits (ac3a8b4c@172.58.139.76) (Remote host closed the connection) |
| 14:42:26 | → | geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
| 14:42:26 | × | madjest51 quits (~Android@31-161-158-37.mobile.kpn.net) (Read error: Connection reset by peer) |
| 14:42:45 | → | madjestic joins (~Android@86-88-72-244.fixed.kpn.net) |
| 14:44:39 | → | ddellacosta joins (dd@gateway/vpn/mullvad/ddellacosta) |
| 14:45:59 | <siraben> | ski: shift and reset confuse me |
| 14:46:06 | × | ADG1089__ quits (~aditya@223.235.213.117) (Remote host closed the connection) |
| 14:46:25 | <siraben> | oh using that you can interleave effects as in mtl? |
| 14:46:27 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 14:46:43 | <kuribas> | using that you can do anything you do with monads. |
| 14:47:22 | <kuribas> | probably using generic methods instead of type classes |
| 14:47:31 | <ski> | siraben : see the Filinski paper i referenced |
| 14:48:40 | <ski> | (and the follow up "Representing Layered Monads", from 1999-01 |
| 14:48:53 | <siraben> | i see, saved |
| 14:49:00 | <ski> | ) |
| 14:49:15 | → | Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net) |
| 14:49:20 | <siraben> | is the way i use reflect/reify similar? https://github.com/siraben/r5rs-denot/blob/74fbb82e5b4969a2d90678112fd455b243bec9da/src/SchemeEval.hs#L52 |
| 14:49:59 | → | ADG1089_ joins (~aditya@223.235.213.117) |
| 14:50:33 | × | ADG1089__ quits (~aditya@223.235.213.117) (Read error: Connection reset by peer) |
| 14:50:44 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:7dec:2218:241d:6f03) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 14:53:31 | <ski> | only very vaguely |
| 14:54:23 | × | Mrbuck quits (~Mrbuck@gateway/tor-sasl/mrbuck) (Ping timeout: 240 seconds) |
| 14:56:04 | <kuribas> | siraben: you can also implement reify/reflect, then implement shift reset on top of that... |
| 14:56:05 | × | unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 14:56:26 | <kuribas> | IMO a scheme with applicative continuations would be neat. |
| 14:57:04 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 14:57:08 | <siraben> | ski: Yeah, i wasn't basing it on the paper but just as convenient names to go back/from the denotational and monadic semantics |
| 14:57:26 | → | unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) |
| 14:57:49 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@mx-ll-171.5.28-247.dynamic.3bb.co.th) |
| 14:57:56 | <siraben> | related: call/cc's woes http://okmij.org/ftp/continuations/against-callcc.html |
| 14:58:27 | → | chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
| 14:58:35 | × | geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 272 seconds) |
| 14:59:06 | <kuribas> | shift/reset is better than call/cc |
| 15:01:08 | → | nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 15:01:41 | × | nshepperd2 quits (~nshepperd@li364-218.members.linode.com) (Quit: The Lounge - https://thelounge.chat) |
| 15:01:41 | × | nshepperd quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (Client Quit) |
| 15:02:44 | × | olligobber quits (~olligobbe@unaffiliated/olligobber) (Remote host closed the connection) |
| 15:03:02 | → | nshepperd2 joins (~nshepperd@li364-218.members.linode.com) |
| 15:03:02 | → | nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 15:03:06 | <siraben> | kuribas: applicative continations? |
| 15:03:28 | <siraben> | is that paper a good way to learn about shift/reset? |
| 15:03:50 | → | Tops2 joins (~Tobias@dyndsl-095-033-027-207.ewe-ip-backbone.de) |
| 15:03:56 | × | mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
| 15:07:21 | <exarkun> | I read https://nliu.net/posts/2020-11-06-bytestring.html yesterday and started to wonder if I should just use `ByteString` as my streaming data abstraction instead of `Int -> IO ByteString` |
| 15:07:48 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:2994:ee4e:2fd6:b5cb) |
| 15:09:01 | <exarkun> | Or more specifically, if I should use `Data.ByteString.Lazy.ByteString` instead of `Int -> IO Data.ByteString.ByteString` |
| 15:10:20 | <exarkun> | There is some distinct appeal in being able to operate on parts of the data outside of IO |
| 15:10:31 | <exarkun> | But is that a trap? Because, of course, I/O is still happening ... |
| 15:14:07 | × | phasespace quits (~sar@80-89-47-117.inet.signal.no) (Ping timeout: 256 seconds) |
| 15:14:48 | × | ward_ quits (~ward@ptr-1u4szschif2qqvply2m.18120a2.ip6.access.telenet.be) (Quit: Leaving) |
| 15:16:19 | × | _noblegas quits (uid91066@gateway/web/irccloud.com/x-hltwtxmffoclzdwc) (Quit: Connection closed for inactivity) |
| 15:16:29 | <[exa]> | exarkun: likely depends on how much control you need over the possible IO interleaving |
| 15:16:39 | → | pera joins (~pera@unaffiliated/pera) |
| 15:16:46 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 15:17:23 | × | p-core quits (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz) (Remote host closed the connection) |
| 15:17:48 | <[exa]> | if it's just reading a yuge bytestring from location 1 and writing the result to location 2, I wouldn't care at all |
| 15:18:09 | <exarkun> | I guess that's approximately what I'm doing |
| 15:18:43 | <[exa]> | the Int parameter in your case is an offset? |
| 15:19:32 | <exarkun> | a length |
| 15:19:58 | <exarkun> | to be read from the point after the last read |
| 15:20:24 | <merijn> | exarkun: It's a trap, yes |
| 15:20:36 | × | sunetoft quits (~sunetoft@178.239.168.171) (Remote host closed the connection) |
| 15:20:52 | <merijn> | exarkun: For example, you lose the ability to control when files get closed (or even if they are closed) and file descriptors are a finite resource |
| 15:21:16 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Ping timeout: 240 seconds) |
| 15:21:53 | <merijn> | exarkun: Usually you'd want something like a streaming library like conduit or pipes |
| 15:21:57 | × | ADG1089_ quits (~aditya@223.235.213.117) (Remote host closed the connection) |
| 15:22:20 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 15:22:22 | <merijn> | exarkun: Although it depends a bit on the exact details of what you wanna do |
| 15:23:11 | → | fendor_ joins (~fendor@77.119.128.173.wireless.dyn.drei.com) |
| 15:23:22 | <exarkun> | I see there are a lot of options for streaming |
| 15:24:12 | <exarkun> | I played with Conduit a little bit. It's kind of neat but it didn't fit well with the branching (or something) I have in my processing. |
| 15:24:19 | <exarkun> | streamly looks like it might but I haven't tried to work with it much yet. |
| 15:25:09 | <merijn> | It depends a bit on what you're doing |
| 15:25:14 | <exarkun> | When _do_ descriptors get closed if you use lazy ByteString? Does it have to do with what other IO actions get processed? Or GC? Or ... ? |
| 15:25:34 | → | worc3131 joins (~quassel@cpc88896-oxfd27-2-0-cust200.4-3.cable.virginm.net) |
| 15:25:54 | <merijn> | exarkun: When you force the final part of the bytestring, then it gets closed and GCed |
| 15:26:01 | × | fendor quits (~fendor@178.165.130.45.wireless.dyn.drei.com) (Ping timeout: 256 seconds) |
| 15:26:15 | <merijn> | exarkun: Well, what does the ByteString contain? i.e. how are you parsing it? |
| 15:27:07 | <exarkun> | It's arbitrary bytes, I'm encrypting and erasure encoding it, then writing the erasure encoded pieces somewhere (to a file right now, to the network somehow later). |
| 15:27:16 | × | chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 15:27:17 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 15:27:28 | <exarkun> | Also hashing it in a couple ways as I process it |
| 15:27:35 | → | chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
| 15:27:42 | <exarkun> | and collecting the hashes alongside for separate handling at the end |
| 15:28:20 | <merijn> | Where are those bytes coming from, though? :p |
| 15:28:49 | <merijn> | exarkun: Normally you'd wanna combine conduit with something like |
| 15:28:51 | <exarkun> | Oh, usually a file |
| 15:28:52 | <merijn> | @hackage binary-conduit |
| 15:28:52 | <lambdabot> | https://hackage.haskell.org/package/binary-conduit |
| 15:29:27 | <exarkun> | I have trouble fitting the erasure encoding part of it into the conduit model |
| 15:29:37 | <exarkun> | one binary stream becomes N binary streams with different destinations |
| 15:30:05 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 15:30:16 | <merijn> | exarkun: Which lets you write normal parsers/serialisers for bytes using the binary package and then either "incrementally feed ByteStrings into a parser to get results" or "feed values into a conduit and get serialised bytes out" |
| 15:30:46 | <exarkun> | I figured out a thing with TQueues but it basically involved escaping the Conduit abstraction entirely |
| 15:31:04 | <merijn> | exarkun: Yeah, if you wanna split a ByteString into multiple paths it's not as useful |
| 15:31:10 | <exarkun> | ("I figured out" -> "I got lots of good help here") |
| 15:31:42 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 260 seconds) |
| 15:31:47 | <merijn> | exarkun: But then I'd probably still just use strict ByteString to read (parts of) the file into memory, it's just so much more predictable |
| 15:32:32 | → | noumenon joins (~daemon@113.51-175-156.customer.lyse.net) |
| 15:32:40 | <exarkun> | I do like predictable |
| 15:34:10 | <merijn> | exarkun: reading strict ByteString behaves much more like programming in any other language. By the time you have access to the bytes you are *sure* all bytes have been read successfully and if you do "foo <- readBytes 1024 hnd; hClose hnd; doStuffWith foo" you know things work |
| 15:35:45 | <merijn> | exarkun: Since the guaranteed ordering of IO guarantees those all happen in order. With lazy IO (which is how you'd generally use lazy ByteString) the actual reading is interleaved with processing of the ByteString which means the reads in that example may happen after the close (whoopsie...) alternatively, if you hit a disk error while reading, that gets triggered somewhere in the middle of doStuffWith, |
| 15:35:51 | <merijn> | making sane error handling trickier |
| 15:36:03 | → | dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) |
| 15:36:37 | <merijn> | If you're hacking together a one-off script to do something and don't are about handling errors its fine. For a server less so, values not getting forced fully can leak descriptors, DOSing your program |
| 15:37:11 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@mx-ll-171.5.28-247.dynamic.3bb.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 15:37:34 | <exarkun> | since I don't have a particularly strong motivation to switch from (Int -> IO ByteString) right now I guess I won't, and maybe I'll save that energy for learning more about streamly some other time |
| 15:38:12 | <exarkun> | that blog post made lazy ByteString sound awfully good :) |
| 15:38:36 | × | qwerty quits (~tema@217.118.92.215) (Ping timeout: 240 seconds) |
| 15:40:21 | → | phasespace joins (~sar@89-162-33-21.fiber.signal.no) |
| 15:41:20 | → | LKoen joins (~LKoen@126.170.9.109.rev.sfr.net) |
| 15:42:02 | <merijn> | exarkun: Well, lazy ByteString itself has a bunch of uses that don't involve lazy IO, so it's not useless :p |
| 15:42:20 | <exarkun> | Okay, sure, fair enough |
| 15:42:58 | <merijn> | exarkun: Most of my comments are more critiques of lazy IO than lazy ByteString. It's just that the file operations exported/exposed by lazy ByteString tend to be lazy IO |
| 15:44:13 | → | coot joins (~coot@37.30.60.60.nat.umts.dynamic.t-mobile.pl) |
| 15:44:43 | → | knupfer joins (~Thunderbi@200116b82c1638000cca96fffe3f40e7.dip.versatel-1u1.de) |
| 15:45:00 | → | jamm joins (~jamm@unaffiliated/jamm) |
| 15:45:54 | × | knupfer quits (~Thunderbi@200116b82c1638000cca96fffe3f40e7.dip.versatel-1u1.de) (Remote host closed the connection) |
| 15:46:07 | → | knupfer joins (~Thunderbi@200116b82c163800046eb3771e39b917.dip.versatel-1u1.de) |
| 15:46:09 | exarkun | nods |
| 15:47:23 | → | philopsos joins (~caecilius@gateway/tor-sasl/caecilius) |
| 15:48:00 | × | LKoen quits (~LKoen@126.170.9.109.rev.sfr.net) (Remote host closed the connection) |
| 15:48:00 | → | chipc joins (~chipc@217.146.82.202) |
| 15:48:17 | → | eacameron joins (uid256985@gateway/web/irccloud.com/x-galbhouawynbrsup) |
| 15:48:55 | × | chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 15:49:22 | × | ezzieyguywuf quits (~Unknown@unaffiliated/ezzieyguywuf) (Ping timeout: 272 seconds) |
| 15:50:04 | → | LKoen joins (~LKoen@126.170.9.109.rev.sfr.net) |
| 15:52:58 | × | acidjnk_new quits (~acidjnk@p200300d0c704e726458729e8ce1a3b25.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 15:52:58 | × | Lowl3v3l quits (~Lowl3v3l@dslb-084-062-101-233.084.062.pools.vodafone-ip.de) (Read error: Connection reset by peer) |
| 15:53:40 | → | Lowl3v3l joins (~Lowl3v3l@dslb-084-062-101-233.084.062.pools.vodafone-ip.de) |
| 15:54:11 | × | coot quits (~coot@37.30.60.60.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 15:54:28 | → | geowiesnot joins (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
| 15:55:04 | → | mp___ joins (~mp@hell.cx) |
| 15:58:25 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 16:00:39 | × | thunderrd quits (~thunderrd@183.182.111.131) (Remote host closed the connection) |
| 16:01:14 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 16:01:18 | × | geowiesnot quits (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds) |
| 16:01:31 | → | ezzieyguywuf joins (~Unknown@unaffiliated/ezzieyguywuf) |
| 16:04:23 | × | dolio quits (~dolio@haskell/developer/dolio) (Quit: ZNC 1.8.2 - https://znc.in) |
| 16:08:00 | → | Rudd0^ joins (~Rudd0@185.189.115.103) |
| 16:08:56 | × | Rudd0 quits (~Rudd0@185.189.115.108) (Read error: Connection reset by peer) |
| 16:09:04 | × | ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 256 seconds) |
| 16:09:30 | → | dolio joins (~dolio@haskell/developer/dolio) |
| 16:10:12 | fendor_ | is now known as fendor |
| 16:10:55 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 16:11:58 | → | Feuermagier joins (~Feuermagi@213.178.26.41) |
| 16:13:16 | × | shf quits (~sheaf@2a01:cb19:80cc:7e00:59dc:2e08:3bcf:ee74) (Quit: Leaving) |
| 16:19:56 | × | pera quits (~pera@unaffiliated/pera) (Quit: leaving) |
| 16:19:57 | <madnight> | In Nemesis, Riker and Troi got married, but was it Will or Thomas? |
| 16:20:00 | → | thunderrd joins (~thunderrd@183.182.111.131) |
| 16:20:08 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 16:20:25 | × | jmchael quits (~jmchael@81.174.205.210) (Ping timeout: 246 seconds) |
| 16:21:07 | → | christo_ joins (~chris@81.96.113.213) |
| 16:22:27 | × | kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection) |
| 16:24:13 | × | Anthaas quits (~Anthaas@unaffiliated/anthaas) (Ping timeout: 264 seconds) |
| 16:27:11 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 16:27:36 | → | Anthaas joins (~Anthaas@unaffiliated/anthaas) |
| 16:28:46 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 16:28:50 | × | argento quits (~argent0@168.227.96.26) (Ping timeout: 256 seconds) |
| 16:30:05 | → | cfricke joins (~cfricke@unaffiliated/cfricke) |
| 16:33:29 | × | Ariakenom quits (~Ariakenom@2001:9b1:efb:fc00:6963:1023:8668:d646) (Quit: Leaving) |
| 16:33:52 | × | noumenon quits (~daemon@113.51-175-156.customer.lyse.net) (Quit: Leaving) |
| 16:34:50 | × | ADG1089__ quits (~aditya@223.235.213.117) (Quit: Konversation terminated!) |
| 16:36:17 | × | solarliner quits (~solarline@243.81.10.109.rev.sfr.net) (Quit: solarliner) |
| 16:37:25 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 16:38:22 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 16:38:33 | → | Tops21 joins (~Tobias@dyndsl-095-033-027-207.ewe-ip-backbone.de) |
| 16:39:03 | → | Tops22 joins (~Tobias@dyndsl-095-033-027-207.ewe-ip-backbone.de) |
| 16:41:36 | × | Tops2 quits (~Tobias@dyndsl-095-033-027-207.ewe-ip-backbone.de) (Ping timeout: 240 seconds) |
| 16:41:57 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 16:42:31 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 16:43:00 | × | Tops21 quits (~Tobias@dyndsl-095-033-027-207.ewe-ip-backbone.de) (Ping timeout: 256 seconds) |
| 16:46:03 | → | plutoniix joins (~q@ppp-27-55-80-50.revip3.asianet.co.th) |
| 16:46:12 | → | hekkaidekapus] joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 16:46:44 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 16:47:56 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:48:23 | × | hekkaidekapus[ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
| 16:50:51 | × | hexo quits (~hexo@gateway/tor-sasl/hexo) (Quit: ZNC 1.8.2 - https://znc.in) |
| 16:50:56 | × | denisse_ quits (~spaceCat@gateway/tor-sasl/alephzer0) (Quit: ZNC 1.7.5 - https://znc.in) |
| 16:51:04 | → | hexo joins (~hexo@gateway/tor-sasl/hexo) |
| 16:51:11 | × | xelxebar quits (~xelxebar@gateway/tor-sasl/xelxebar) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
| 16:51:18 | → | denisse_ joins (~spaceCat@gateway/tor-sasl/alephzer0) |
| 16:51:20 | → | xelxebar_ joins (~xelxebar@gateway/tor-sasl/xelxebar) |
| 16:51:23 | × | hekkaidekapus] quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
| 16:51:24 | × | cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds) |
| 16:51:44 | × | teardown quits (~user@gateway/tor-sasl/mrush) (Ping timeout: 240 seconds) |
| 16:52:03 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds) |
| 16:52:04 | × | ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds) |
| 16:52:16 | → | geekosaur joins (42d52137@66.213.33.55) |
| 16:52:23 | × | philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds) |
| 16:52:23 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds) |
| 16:52:23 | × | tomboy64 quits (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds) |
| 16:52:24 | × | jb55 quits (~jb55@gateway/tor-sasl/jb55) (Ping timeout: 240 seconds) |
| 16:52:27 | × | srk quits (~sorki@gateway/tor-sasl/sorki) (Quit: ZNC 1.8.2 - https://znc.in) |
| 16:52:39 | → | srk joins (~sorki@gateway/tor-sasl/sorki) |
| 16:52:47 | × | megaTherion quits (~therion@unix.io) (Quit: ZNC 1.7.5 - https://znc.in) |
| 16:52:50 | → | teardown joins (~user@gateway/tor-sasl/mrush) |
| 16:53:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 16:53:04 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 16:53:21 | → | Melanie joins (~Melanie@192-0-134-138.cpe.teksavvy.com) |
| 16:53:24 | → | ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex) |
| 16:53:26 | → | _noblegas joins (uid91066@gateway/web/irccloud.com/x-rwqmwswwleosbyhn) |
| 16:53:40 | → | philopsos joins (~caecilius@gateway/tor-sasl/caecilius) |
| 16:54:46 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 16:54:53 | → | cantstanya joins (~chatting@gateway/tor-sasl/cantstanya) |
| 16:58:23 | × | andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Ping timeout: 240 seconds) |
| 16:59:02 | × | mp___ quits (~mp@hell.cx) (Ping timeout: 272 seconds) |
| 16:59:14 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 17:00:36 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 17:00:40 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 17:04:50 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 17:05:38 | → | solonarv joins (~solonarv@astrasbourg-653-1-157-135.w90-6.abo.wanadoo.fr) |
| 17:08:44 | × | Rudd0^ quits (~Rudd0@185.189.115.103) (Ping timeout: 256 seconds) |
| 17:16:54 | × | bennofs|ALLES quits (~quassel@2a01:4f8:c17:5579::1) (Remote host closed the connection) |
| 17:18:41 | <kuribas> | exarkun: isn't the output of erasure encoding still a single stream though? |
| 17:19:01 | <kuribas> | exarkun: (looking at https://en.wikipedia.org/wiki/Erasure_code) |
| 17:19:09 | → | bennofs joins (~quassel@2a01:4f8:c17:5579::1) |
| 17:19:41 | <kuribas> | it looks like you simply add redundant error codes to the stream, which can be done easily with conduit (or streamly) |
| 17:21:43 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 17:21:50 | → | argento joins (~argent0@168.227.97.23) |
| 17:22:34 | → | danso joins (~dan@69-165-210-185.cable.teksavvy.com) |
| 17:22:37 | <kuribas> | then you write a stream which takes the input, calculates the error codes from the input, and writes a new stream where the input is augmented with error codes. |
| 17:23:04 | × | Melanie quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 246 seconds) |
| 17:23:25 | × | mlugg quits (522733ea@cpc95124-newt39-2-0-cust489.19-3.cable.virginm.net) (Remote host closed the connection) |
| 17:24:16 | × | juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 240 seconds) |
| 17:24:56 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 17:24:57 | × | xff0x_ quits (~fox@2001:1a81:5361:7200:f921:dfdc:3d2e:f65) (Ping timeout: 268 seconds) |
| 17:28:10 | <ph88^> | does anyone know a function like https://hackage.haskell.org/package/base-4.14.1.0/docs/Data-List.html#v:group that groups without sorting first ? the problem is that i can easily write a comparison function to see if two elements are the same, but writing a sorting function is hard |
| 17:28:25 | → | tomboy64 joins (~tomboy64@gateway/tor-sasl/tomboy64) |
| 17:28:40 | <Rembane> | ph88^: You can use a proper set from Data.Set instead. |
| 17:29:01 | <ph88^> | Rembane, how ? |
| 17:29:33 | <Rembane> | ph88^: Hm... or maybe use a HashSet instead: https://hackage.haskell.org/package/unordered-containers-0.2.13.0/docs/Data-HashSet.html |
| 17:29:49 | → | hekkaidekapus] joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 17:30:01 | <monochrom> | Data.List.sort does not require you to write your own sorting function. |
| 17:30:04 | <ph88^> | that requires me to make a hash .. which is as difficult as writing a function to put into sort .. |
| 17:30:16 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 17:30:42 | <ph88^> | monochrom, in the example in linked docs you see that not all letters are grouped together, which is what i need (though i have other elements than characters) |
| 17:30:59 | × | DavidEichmann quits (~david@62.110.198.146.dyn.plus.net) (Ping timeout: 260 seconds) |
| 17:31:04 | <monochrom> | Bah |
| 17:31:15 | <ph88^> | :( |
| 17:31:46 | <ph88^> | i can try to write this function myself .. just asking in case someone knows an already implemented "trueGroupBy" function |
| 17:32:05 | <ph88^> | rather use library functions than reinvent wheel |
| 17:32:15 | × | tochicool quits (~tochicool@188.166.170.246) (Quit: Konversation terminated!) |
| 17:32:37 | → | jb55 joins (~jb55@gateway/tor-sasl/jb55) |
| 17:34:18 | <exarkun> | kuribas: There are lots of variations, I guess. I'm not an expert on the taxonomy. The variation I'm using spreads the redundancy across different outputs instead of mixing it together in a single longer output. |
| 17:34:46 | <kuribas> | exarkun: a fixed number of outputs? |
| 17:34:48 | × | dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 256 seconds) |
| 17:35:09 | <exarkun> | kuribas: It's configurable, but for a particular degree of redundancy, yes, a fixed number of outputs |
| 17:35:41 | <exarkun> | kuribas: It's https://hackage.haskell.org/package/fec fwiw |
| 17:35:53 | → | DavidEichmann joins (~david@62.110.198.146.dyn.plus.net) |
| 17:36:11 | <exarkun> | enFEC :: Int -> Int -> ByteString -> [ByteString] |
| 17:36:49 | <exarkun> | enFEC requiredBlocks totalBlocks inputBlock == [outputBlocks] |
| 17:36:52 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-134-148.cust.tzulo.com) |
| 17:37:15 | <exarkun> | eh that second line almost looks like it's supposed to be haskell but it's not it's just meant to clarify the signature |
| 17:39:47 | × | Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving) |
| 17:40:09 | <tomsmeding> | ph88^: you _cannot_ write such a function trueGroupBy with better than n^2 complexity without a comparison function (like in Ord) or a hashing function |
| 17:40:38 | <tomsmeding> | an O(n^2) trueGroupBy is easily written, though, if that's what you're looking for |
| 17:41:02 | <ph88^> | tomsmeding, yes i'm looking for that |
| 17:42:34 | <monochrom> | Quadratic time requires mutable lists or arrays. With immutable lists or arrays, every update takes another linear time, so you're looking at cubic time. |
| 17:42:49 | <tomsmeding> | > let trueGroupBy f l = case l of [] -> [] ; x:xs -> let (yes, no) = partition (f x) xs in (x : yes) : trueGroupBy f no in trueGroupBy (==) "abcabcabc" |
| 17:42:52 | <lambdabot> | ["aaa","bbb","ccc"] |
| 17:42:55 | <tomsmeding> | ph88^: ^ |
| 17:43:03 | × | Kaivo quits (~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9) |
| 17:43:12 | <ph88^> | lovely thanks a lot tomsmeding ! |
| 17:43:48 | <monochrom> | Ah nevermind. |
| 17:43:59 | <tomsmeding> | this is quadratic, right? |
| 17:44:03 | <monochrom> | Yes. |
| 17:44:07 | <tomsmeding> | wouldn't be the first time I have a brain fart |
| 17:44:12 | <tomsmeding> | phew |
| 17:44:28 | <monochrom> | I forgot that you can search and delete in one pass, such as the partition there. |
| 17:44:49 | <tomsmeding> | even if you couldn't, and you had two filters, it would still be quadratic -- just with an extra constant factor 2 |
| 17:45:43 | <kuribas> | exarkun: you could make a stream of [ByteString], and multiplex it at the consumer |
| 17:46:05 | <exarkun> | kuribas: Tell me more about "multiplex it at the consumer" |
| 17:46:55 | → | xff0x_ joins (~fox@2001:1a81:5361:7200:f921:dfdc:3d2e:f65) |
| 17:47:07 | <kuribas> | exarkun: I mean, read a list from the producer, and send each element to wherever you want (file, socket) |
| 17:49:22 | × | DavidEichmann quits (~david@62.110.198.146.dyn.plus.net) (Ping timeout: 260 seconds) |
| 17:49:23 | → | usr25 joins (~usr25@unaffiliated/usr25) |
| 17:49:43 | → | andreas303 joins (~andreas@gateway/tor-sasl/andreas303) |
| 17:49:50 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:9344:4d83:8d7c:8a3f) (Ping timeout: 264 seconds) |
| 17:51:58 | <kuribas> | exarkun: hmm, zipSink looks like what you want: https://hackage.haskell.org/package/conduit-1.3.4/docs/Data-Conduit.html#g:18 |
| 17:53:06 | <exarkun> | I was just reading that and wondering |
| 17:55:01 | <exarkun> | (that's a link to ZipSink right, not some other `zipSink` that I can't find?) |
| 17:55:12 | → | Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) |
| 17:55:17 | → | DavidEichmann joins (~david@98.27.93.209.dyn.plus.net) |
| 17:56:07 | <exarkun> | sequenceSinks would pass the whole [ByteString] to each consumer and each consumer would be responsible for picking out the element it wants to work on, I think? which would work. but maybe some kind of `mapSink` (except it's the inside-out version of map that I think has a name but I can't remember it) would be a better fit |
| 17:56:45 | × | geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds) |
| 17:57:09 | <exarkun> | does this make sense? mapSinks :: (Traversable f, Monad m) => f (Sink i m r) -> Sink (f i) m (f r) |
| 17:57:16 | → | mp___ joins (~mp@hell.cx) |
| 17:57:27 | <kuribas> | exarkun: I think it sends each output to each sink, so the sink has to filter the element it wants. |
| 17:57:40 | → | Deide joins (~Deide@217.155.19.23) |
| 17:58:33 | <kuribas> | So you need to turn (Sink ByteString m r) info (Sink [ByteString] m r), by indexing in the list. |
| 17:59:06 | <kuribas> | not very efficient though... |
| 17:59:26 | → | PepegaSit joins (~ircpepega@ws59.zone150.zaural.ru) |
| 17:59:34 | <exarkun> | it's a bit academic for the time being, as none of the rest of the code I have is prepared to deal with conduits at the moment |
| 18:00:21 | <exarkun> | I'll probably try to make it work with (Int -> IO ByteString) and then try to figure out if it would be better with Conduit |
| 18:00:36 | × | PepegaSit quits (~ircpepega@ws59.zone150.zaural.ru) (Remote host closed the connection) |
| 18:01:08 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 18:01:33 | <exarkun> | I appreciate the nudge back towards conduit. Apart from not being able to figure out how to do what I wanted, I liked what I saw when investigating it previously :) |
| 18:01:34 | <kuribas> | yeah |
| 18:01:34 | × | mp___ quits (~mp@hell.cx) (Ping timeout: 246 seconds) |
| 18:01:43 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:2d54:ddf7:e8d2:c4c3) |
| 18:02:02 | <kuribas> | make it simple first, then make it robust is a good choice... |
| 18:02:46 | <kuribas> | lazy IO isn't always bad, you just have to be careful |
| 18:03:46 | × | crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 258 seconds) |
| 18:04:36 | × | DavidEichmann quits (~david@98.27.93.209.dyn.plus.net) (Ping timeout: 240 seconds) |
| 18:04:48 | → | crblmr joins (~carbolyme@matrix.dropacid.net) |
| 18:05:19 | → | DavidEichmann joins (~david@98.27.93.209.dyn.plus.net) |
| 18:08:22 | → | geekosaur joins (42d52137@66.213.33.55) |
| 18:08:34 | → | jmchael joins (~jmchael@81.174.205.210) |
| 18:13:22 | → | raothorn22 joins (6b4dc5da@mobile-107-77-197-218.mobile.att.net) |
| 18:15:22 | × | usr25 quits (~usr25@unaffiliated/usr25) (Quit: Leaving) |
| 18:16:39 | → | dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) |
| 18:16:43 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 18:16:45 | × | xff0x_ quits (~fox@2001:1a81:5361:7200:f921:dfdc:3d2e:f65) (Ping timeout: 268 seconds) |
| 18:20:26 | → | usr25 joins (~usr25@unaffiliated/usr25) |
| 18:20:36 | × | Kronic quits (~Kronic___@84.203.96.46) (Quit: Leaving) |
| 18:24:24 | <raothorn22> | First time here, could someone help me with a question about lenses? |
| 18:24:35 | <dsal> | raothorn22: can't know until you ask |
| 18:27:09 | → | megaTherion joins (~therion@unix.io) |
| 18:28:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 18:28:28 | × | knupfer quits (~Thunderbi@200116b82c163800046eb3771e39b917.dip.versatel-1u1.de) (Ping timeout: 268 seconds) |
| 18:31:42 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 18:32:41 | × | salumu quits (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca) (Quit: WeeChat 3.0) |
| 18:33:36 | <raothorn22> | Ok, so let me try to phrase this well. From what I understand, composition of lenses (I'm using Control.Lens by the way) goes "deeper" into a nested structure, which isn't really what I'm trying to do. I'm looking for a way to combine two setters to update two things on the same level. The relevant code is here, along with some more explanation of |
| 18:33:37 | <raothorn22> | what I'm trying to do. https://pastebin.com/EgzAjrwe |
| 18:35:39 | × | jamm quits (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
| 18:37:31 | → | xff0x_ joins (~fox@2001:1a81:5361:7200:b495:b5df:7e6c:e9db) |
| 18:39:00 | × | bitmapper quits (uid464869@gateway/web/irccloud.com/x-eafppdbbqgpahaet) (Quit: Connection closed for inactivity) |
| 18:39:03 | → | ddellacosta joins (dd@gateway/vpn/mullvad/ddellacosta) |
| 18:40:53 | × | nehsou^ quits (nehsou@ip98-184-89-2.mc.at.cox.net) () |
| 18:41:14 | × | Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Read error: Connection reset by peer) |
| 18:41:27 | → | mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
| 18:41:41 | → | Lord_of_Life joins (~Lord@unaffiliated/lord-of-life/x-0885362) |
| 18:42:13 | × | jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 264 seconds) |
| 18:42:52 | × | rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection) |
| 18:43:00 | → | rayyyy1 joins (~nanoz@gateway/tor-sasl/nanoz) |
| 18:44:34 | <dsal> | raothorn22: Your phase 2 is just `gamePhase & turnPhase .~ Phase1 & playerTurn +~ 1` isn't it? |
| 18:45:02 | <dsal> | > (1,2) & _1 .~ 11 & 2 +~ 100 |
| 18:45:06 | <lambdabot> | error: |
| 18:45:06 | <lambdabot> | • Could not deduce (Num b1) |
| 18:45:06 | <lambdabot> | from the context: (Num b, Num b2, Num a, |
| 18:45:09 | <dsal> | > (1,2) & _1 .~ 11 & _2 +~ 100 |
| 18:45:10 | → | o1lo01ol1o joins (~o1lo01ol1@dsl-51-169.bl26.telepac.pt) |
| 18:45:12 | <lambdabot> | (11,102) |
| 18:45:19 | <raothorn22> | oooh |
| 18:45:55 | → | jle` joins (~mstksg@cpe-23-240-75-236.socal.res.rr.com) |
| 18:45:55 | × | jle` quits (~mstksg@cpe-23-240-75-236.socal.res.rr.com) (Changing host) |
| 18:45:55 | → | jle` joins (~mstksg@unaffiliated/mstksg) |
| 18:45:59 | <dsal> | You could also make a `nextPlayer` function to swap the player. |
| 18:46:11 | <raothorn22> | it's literally just function application I guess? I think I might have misunderstood something about lenses |
| 18:46:36 | <dsal> | > (True,1) & _1 %~ not & _2 +~ 1 |
| 18:46:39 | <lambdabot> | (False,2) |
| 18:46:49 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 18:46:52 | <merijn> | raothorn22: Lenses are just "a nice way to conveniently apply a function to something nested deeply into some data structure" |
| 18:47:14 | <merijn> | There's no magic, updating through a lens is just a function that returns a new value |
| 18:47:55 | <raothorn22> | Right, yeah I'm getting that now. I think the complicated type stuff in the Lens library was confusing me more than it should |
| 18:47:55 | → | Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362) |
| 18:48:27 | <dsal> | You can do really complicated stuff and sometimes it's *hugely* helpful. Here, it's not doing a whole lot for you at the moment. |
| 18:49:47 | × | Franciman quits (~francesco@host-95-250-152-231.retail.telecomitalia.it) (Quit: Leaving) |
| 18:49:56 | × | Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 240 seconds) |
| 18:49:56 | Lord_of_Life_ | is now known as Lord_of_Life |
| 18:50:49 | × | LKoen quits (~LKoen@126.170.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”) |
| 18:50:52 | → | son0p joins (~son0p@181.136.122.143) |
| 18:50:52 | × | stef204 quits (~stef204@unaffiliated/stef-204/x-384198) (Quit: WeeChat 3.0) |
| 18:51:52 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 256 seconds) |
| 18:52:52 | <raothorn22> | dsal right of course, but my types are going to get a lot more complicated. I basically want to write my function so that it won't break if I added another field to GamePhase |
| 18:53:26 | <raothorn22> | I don't think I want to do anything more complicated than basic updating though. Thanks, you helped a lot |
| 18:53:36 | <dsal> | raothorn22: `g{turnPhase=Phase2}` is that. :) |
| 18:54:10 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 18:54:46 | <raothorn22> | oh right, I had learned about the record update syntax but I forgot! Thanks! |
| 18:58:40 | <dsal> | lens becomes really important when you have nested structures. |
| 18:59:04 | <merijn> | Well...it *might* become really important :p |
| 18:59:19 | <dsal> | Yeah, I meant to not be clear. |
| 18:59:24 | <dsal> | er, absolute/ |
| 19:01:38 | × | raothorn22 quits (6b4dc5da@mobile-107-77-197-218.mobile.att.net) (Remote host closed the connection) |
| 19:01:56 | → | fionnan joins (~fionnan@109.255.20.201) |
| 19:03:37 | → | berberman joins (~berberman@unaffiliated/berberman) |
| 19:04:51 | × | berberman_ quits (~berberman@unaffiliated/berberman) (Ping timeout: 268 seconds) |
| 19:05:21 | → | tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net) |
| 19:08:16 | → | cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
| 19:10:48 | <ph88^> | is it still possible to pattern match when using guards ? |
| 19:11:30 | <__monty__> | ph88^: Yes. |
| 19:12:07 | <ephemient> | > let isRightEven (Right x) | even x = True; isRightEven _ = False in isRightEven (Right 1) |
| 19:12:09 | <lambdabot> | False |
| 19:13:06 | <monochrom> | Look for "pattern guards" in either the Haskell 2020 Report or the GHC User's Guide. |
| 19:13:12 | <ph88^> | thanks |
| 19:14:03 | <__monty__> | Surely you mean 2010 report? |
| 19:14:26 | <monochrom> | Err yeah 2010 |
| 19:14:35 | <monochrom> | @quote monochrom flies |
| 19:14:35 | <lambdabot> | monochrom says: Time flies like an Arrow. Space leaks like a Monad. |
| 19:15:20 | <monochrom> | @quote monochrom flies.*syntax |
| 19:15:20 | <lambdabot> | monochrom says: Time flies like an arrow. Fruit flies like a banana. Syntax rules like a macro. |
| 19:18:43 | → | geowiesnot joins (~user@87-89-181-157.abo.bbox.fr) |
| 19:19:01 | → | knupfer joins (~Thunderbi@200116b82c163800e085017ed5c7df7b.dip.versatel-1u1.de) |
| 19:20:38 | → | b4er joins (~b5er_@91.193.4.138) |
| 19:22:52 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 19:23:55 | × | michalz quits (~user@185.246.204.91) (Remote host closed the connection) |
| 19:24:02 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) () |
| 19:25:21 | <exarkun> | if I want to ask for the digest size of SHA256 ... `hashDigestSize $ undefined :: SHA256` ? |
| 19:25:51 | × | juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 272 seconds) |
| 19:27:24 | × | ADG1089__ quits (~aditya@223.235.213.117) (Remote host closed the connection) |
| 19:29:41 | × | geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 256 seconds) |
| 19:30:13 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds) |
| 19:30:41 | <idnar> | exarkun: I think `hashDigestSize SHA256`` |
| 19:32:15 | → | ADG1089__ joins (~aditya@223.235.213.117) |
| 19:32:42 | <idnar> | @hoogle (a -> b -> a) -> Map k a -> Map k b -> Map k a |
| 19:32:43 | <lambdabot> | Data.Map.Internal intersectionWith :: Ord k => (a -> b -> c) -> Map k a -> Map k b -> Map k c |
| 19:32:43 | <lambdabot> | Data.Map.Lazy intersectionWith :: Ord k => (a -> b -> c) -> Map k a -> Map k b -> Map k c |
| 19:32:43 | <lambdabot> | Data.Map.Strict intersectionWith :: Ord k => (a -> b -> c) -> Map k a -> Map k b -> Map k c |
| 19:33:47 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 19:33:48 | <exarkun> | idnar: oooh |
| 19:34:03 | <exarkun> | because SHA256 is the type and the no-argument constructor |
| 19:34:14 | <exarkun> | I missed that 2nd fact |
| 19:34:17 | <idnar> | exarkun: yeah |
| 19:34:36 | <exarkun> | that's certainly nicer. |
| 19:34:38 | <exarkun> | thanks |
| 19:36:21 | × | dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 265 seconds) |
| 19:37:45 | → | bitmagie joins (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) |
| 19:40:16 | × | jle` quits (~mstksg@unaffiliated/mstksg) (Ping timeout: 240 seconds) |
| 19:41:20 | × | geekosaur quits (42d52137@66.213.33.55) (Ping timeout: 245 seconds) |
| 19:42:20 | → | jle` joins (~mstksg@unaffiliated/mstksg) |
| 19:42:53 | <idnar> | @pl \a b -> b |
| 19:42:53 | <lambdabot> | const id |
| 19:43:06 | <idnar> | @pl \a b -> a |
| 19:43:06 | <lambdabot> | const |
| 19:46:03 | <idnar> | @type \f x -> f x $> x |
| 19:46:05 | <lambdabot> | error: |
| 19:46:05 | <lambdabot> | • Variable not in scope: ($>) :: t1 -> t -> t2 |
| 19:46:05 | <lambdabot> | • Perhaps you meant one of these: |
| 19:46:44 | <idnar> | @type \f x -> x <$ f x |
| 19:46:45 | <lambdabot> | Functor f => (t -> f b) -> t -> f t |
| 19:48:11 | × | tstat quits (~tstat@165.227.66.131) (Quit: ZNC 1.6.5 - http://znc.in) |
| 19:48:19 | × | bitmagie quits (~Thunderbi@200116b80684bd0008a0a917606ec592.dip.versatel-1u1.de) (Quit: bitmagie) |
| 19:49:10 | <idnar> | @hoogle Functor f => (t -> f b) -> t -> f t |
| 19:49:11 | <lambdabot> | No results found |
| 19:49:23 | <tomsmeding> | idnar: anything in particular that you're looking for? |
| 19:49:24 | → | hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-iakwekdkzgcrclln) |
| 19:49:45 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 19:52:03 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 19:52:27 | × | jyri-matti quits (uid479350@gateway/web/irccloud.com/x-sdpspavvezzlrhxl) (Quit: Connection closed for inactivity) |
| 19:53:08 | <idnar> | tomsmeding: I just wrote `f x $> x` for the third time |
| 19:53:35 | × | knupfer quits (~Thunderbi@200116b82c163800e085017ed5c7df7b.dip.versatel-1u1.de) (Quit: knupfer) |
| 19:53:43 | → | acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
| 19:53:49 | → | knupfer joins (~Thunderbi@200116b82c1638008142ece12d3b6b6b.dip.versatel-1u1.de) |
| 19:54:15 | → | fmeyer joins (~fmeyer@p57ab40e7.dip0.t-ipconnect.de) |
| 19:54:28 | → | geekosaur joins (42d52137@66.213.33.55) |
| 19:54:49 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
| 19:55:26 | <idnar> | `writeTVar v x $> x` in this case |
| 19:56:15 | <tomsmeding> | ah, I see how that could be useful indeed |
| 19:57:04 | <exarkun> | Hm. Now I need a merkle tree... |
| 19:59:58 | × | Sheilong quits (uid293653@gateway/web/irccloud.com/x-htiyqqtzxccutmly) (Quit: Connection closed for inactivity) |
| 20:00:23 | → | acidjnk_new joins (~acidjnk@p200300d0c704e799613ed27d32309497.dip0.t-ipconnect.de) |
| 20:01:22 | → | materialfuture[m joins (materialfu@gateway/shell/matrix.org/x-cwhzlrxokybvzeoj) |
| 20:01:26 | × | pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 272 seconds) |
| 20:02:08 | → | justsomeguy joins (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) |
| 20:02:08 | × | justsomeguy quits (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) (Changing host) |
| 20:02:08 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 20:02:13 | → | tstat joins (~tstat@104.131.113.212) |
| 20:02:41 | ← | fmeyer parts (~fmeyer@p57ab40e7.dip0.t-ipconnect.de) ("Leaving") |
| 20:03:06 | → | Franciman joins (~francesco@host-95-250-152-231.retail.telecomitalia.it) |
| 20:03:13 | → | pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net) |
| 20:03:20 | → | morph_ joins (~morph@2a01:110f:bb3:7e00:38c9:9227:a2b5:d96d) |
| 20:04:14 | × | juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 256 seconds) |
| 20:04:27 | <dminuoso> | @type \f x -> x <$ f x |
| 20:04:27 | → | ohmysomuchuser joins (~nickednam@037008230172.dynamic-3-poz-k-1-2-0.vectranet.pl) |
| 20:04:28 | <lambdabot> | Functor f => (t -> f b) -> t -> f t |
| 20:04:34 | <dminuoso> | type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t |
| 20:04:37 | <dminuoso> | Mmm. This is a valid lens. :) |
| 20:06:23 | <c_wraith> | I'm not sure that's true |
| 20:06:33 | <c_wraith> | It type-checks, but lenses have laws |
| 20:06:33 | → | Shiranai joins (beed0d8f@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.13.143) |
| 20:07:45 | ← | morph_ parts (~morph@2a01:110f:bb3:7e00:38c9:9227:a2b5:d96d) ("Leaving") |
| 20:09:32 | × | christo_ quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 20:10:01 | → | ph88_ joins (~ph88@2a02:8109:9e00:7e5c:b472:19b8:2fa3:f30b) |
| 20:12:12 | <idnar> | > let l = \f x -> x <$ f x in view l (set l 10 20) |
| 20:12:14 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 20:12:15 | <lambdabot> | 20 |
| 20:12:49 | × | cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 264 seconds) |
| 20:13:08 | <idnar> | > let l = \f x -> x <$ f x in view l (set l "a" 20) |
| 20:13:10 | <lambdabot> | 20 |
| 20:13:55 | × | ph88^ quits (~ph88@2a02:8109:9e00:7e5c:41c2:9b01:cf42:baca) (Ping timeout: 268 seconds) |
| 20:15:11 | × | o1lo01ol1o quits (~o1lo01ol1@dsl-51-169.bl26.telepac.pt) (Remote host closed the connection) |
| 20:15:22 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 20:15:50 | <idnar> | > let l = \f x -> x <$ f x in set l (view l 20) 20 |
| 20:15:53 | <lambdabot> | 20 |
| 20:17:39 | <idnar> | not lawful |
| 20:17:49 | × | son0p quits (~son0p@181.136.122.143) (Ping timeout: 260 seconds) |
| 20:18:00 | → | coot joins (~coot@37.30.60.60.nat.umts.dynamic.t-mobile.pl) |
| 20:18:42 | × | Cale quits (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) (Remote host closed the connection) |
| 20:19:16 | → | son0p joins (~son0p@181.136.122.143) |
| 20:19:56 | × | crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 240 seconds) |
| 20:21:05 | <idnar> | `Lens s s s t` compiles but can't be lawful- |
| 20:21:44 | → | crblmr joins (~carbolyme@matrix.dropacid.net) |
| 20:23:17 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 20:23:20 | → | cheater joins (~user@unaffiliated/cheater) |
| 20:25:56 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 20:27:40 | → | Kaivo joins (~Kaivo@104-200-86-99.mc.derytele.com) |
| 20:27:42 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Ping timeout: 260 seconds) |
| 20:27:54 | <dminuoso> | Mmm fair point |
| 20:33:03 | × | rayyyy1 quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds) |
| 20:33:41 | → | Cale joins (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) |
| 20:33:42 | × | cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0) |
| 20:35:44 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 20:36:26 | → | o1lo01ol1o joins (~o1lo01ol1@dsl-51-169.bl26.telepac.pt) |
| 20:37:13 | × | juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!) |
| 20:40:08 | <Shiranai> | after reading learn you a haskell, what can I read/do to improve my haskell skillz? |
| 20:40:49 | <Shiranai> | I am an amateur but would also like to learn about the theorical category theory/type theory side of it |
| 20:40:49 | × | ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Quit: WeeChat 2.8) |
| 20:40:55 | <Uniaika> | Shiranai: https://twitter.com/TechnoEmpress/status/1164766723234340866 |
| 20:43:58 | → | ddellacosta joins (dd@gateway/vpn/mullvad/ddellacosta) |
| 20:44:01 | <Shiranai> | thanks, I'll check the joyofhaskell book, not that interested in webdev tho |
| 20:45:04 | → | o1lo01ol_ joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 20:45:35 | <monochrom> | Yeah that list looks suspicious like "I want to be profitable". |
| 20:47:28 | × | o1lo01ol1o quits (~o1lo01ol1@dsl-51-169.bl26.telepac.pt) (Ping timeout: 246 seconds) |
| 20:47:49 | <sm[m]> | Shiranai: Typeclassopedia |
| 20:49:02 | <Shiranai> | sm[m]: brilliant! Thanks, exactly the kind of stuff I was looking for |
| 20:50:44 | → | ransom joins (~c4264035@8.47.12.52) |
| 20:51:27 | <sm[m]> | and all the haddocks for related libs in base - I'm not sure what to call them - things like Data.Functor, Control.Applicative, Control.Monad.. |
| 20:51:43 | → | ces joins (~ces@fsf/member/ces) |
| 20:52:16 | × | crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 240 seconds) |
| 20:52:56 | → | crblmr joins (~carbolyme@matrix.dropacid.net) |
| 20:52:59 | <Shiranai> | alright, I'll give those a check too! thanks |
| 20:53:07 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:2d54:ddf7:e8d2:c4c3) (Ping timeout: 260 seconds) |
| 20:53:28 | → | frankdmartinez joins (~user@5.181.234.188) |
| 20:53:32 | <sm[m]> | and of course, real project code to see how these look in action |
| 20:54:40 | → | geowiesnot joins (~user@87-89-181-157.abo.bbox.fr) |
| 20:56:32 | <frankdmartinez> | Hello, is there a way to get GHCI to output the type-deduction/inference steps it goes thru when evaluating an expression? |
| 20:57:17 | → | carthia joins (~carthia@gateway/tor-sasl/carthia) |
| 20:58:10 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-134-148.cust.tzulo.com) (Quit: Leaving) |
| 20:58:25 | <__monty__> | That would be cool but I don't believe there is. |
| 21:00:01 | → | pragma- joins (~chaos@unaffiliated/pragmatic-chaos) |
| 21:00:05 | <pragma-> | hi there nf |
| 21:00:58 | <nf> | hi |
| 21:01:04 | × | ADG1089__ quits (~aditya@223.235.213.117) (Quit: Konversation terminated!) |
| 21:01:47 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:03:11 | → | usr256 joins (~usr25@unaffiliated/usr25) |
| 21:03:41 | <Cale> | There are some typechecker tracing flags, but it just emits a lot of incoherent debug print gibberish that can't be interpreted without carefully looking at the GHC source code. Nothing like a nice derivation. |
| 21:04:31 | <Cale> | (but if you're trying to fix a bug in GHC, it might be better than nothing) |
| 21:04:36 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:408c:5ab0:3607:c803) |
| 21:05:17 | × | usr25 quits (~usr25@unaffiliated/usr25) (Ping timeout: 265 seconds) |
| 21:06:43 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
| 21:06:52 | <monochrom> | If you don't mind doing basic type inference by hand, see my http://www.vex.net/~trebla/haskell/type-inference.html |
| 21:07:39 | → | dfeuer joins (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) |
| 21:08:14 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) () |
| 21:08:29 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 21:09:26 | → | zincy_ joins (~tom@2a00:23c8:970a:3501:38a6:4546:df42:c1cb) |
| 21:10:44 | <nh> | hi nf |
| 21:10:50 | <nf> | hi |
| 21:11:06 | <nh> | have you done much linear types stuff yet |
| 21:11:38 | <nf> | i have not |
| 21:12:00 | <nh> | you should watch this QualifiedDo talk if you haven't already https://www.youtube.com/watch?v=TH3cYp3349A |
| 21:12:08 | <nh> | pretty cool |
| 21:12:18 | <nf> | why thank you |
| 21:12:38 | <Uniaika> | (are you two siblings or something?) |
| 21:12:59 | <nh> | no he copied me |
| 21:13:08 | <nf> | no he copied me |
| 21:13:11 | <nh> | see |
| 21:13:42 | × | Guest67343 quits (~textual@zrcout.mskcc.org) (Quit: Textual IRC Client: www.textualapp.com) |
| 21:13:46 | <Uniaika> | sorry hendrix but I'm going to have to trust the Frenchman in this situation |
| 21:13:58 | <pragma-> | I can confirm that nh came first. |
| 21:14:36 | <nf> | (ok let's stop spamming maybe) |
| 21:14:52 | <nh> | Uniaika: that's not a wise long term strategy |
| 21:15:19 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 21:15:32 | <pragma-> | nh registered Aug 08 03:14:16 2015. nf registered Mar 24 02:20:41 2018. |
| 21:16:04 | <Uniaika> | nh: that is why all my plans are short-term, and gloriously end in a burst of sparkles and flaming jet fuel |
| 21:16:43 | <nh> | sounds exciting |
| 21:19:22 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:19:25 | × | Shiranai quits (beed0d8f@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.13.143) (Quit: Connection closed) |
| 21:26:54 | <ph88_> | can someone explains what is so great about linear types in ghc 9 _ |
| 21:28:09 | <monochrom> | It is not great. |
| 21:28:28 | <ph88_> | ?? |
| 21:28:35 | <monochrom> | .. |
| 21:28:44 | <ph88_> | why they put it in then ? |
| 21:29:14 | <monochrom> | Someone's fascination with linear types. |
| 21:29:14 | <Rembane> | For science! |
| 21:29:43 | <Rembane> | OTOH, they are cleaning up lots of the GHC code to make it easier to change, so there are many good side effects of that implementation. |
| 21:29:54 | <ephemient> | it may be practical to use, but not yet |
| 21:29:57 | <ephemient> | *some day |
| 21:30:12 | <Rembane> | This sounds a bit like the dependent types capabilities of GHC |
| 21:30:29 | <monochrom> | It is unbeneficial to use. It doesn't increase code optimizations or safety. |
| 21:30:46 | ohmysomuchuser | is now known as nickednamed |
| 21:31:33 | <ph88_> | so it's to clean up ghc code ?? |
| 21:32:16 | × | geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds) |
| 21:32:50 | × | rmk236 quits (~lcampos@2a02:908:3616:b100:849c:a12b:ff95:e193) (Quit: Leaving.) |
| 21:33:10 | <ph88_> | i thought it was a big deal as it was announced :( |
| 21:34:58 | × | petersen quits (~petersen@redhat/juhp) (Quit: petersen) |
| 21:35:39 | → | petersen joins (~petersen@redhat/juhp) |
| 21:36:28 | × | usr256 quits (~usr25@unaffiliated/usr25) (Quit: Leaving) |
| 21:38:49 | × | Franciman quits (~francesco@host-95-250-152-231.retail.telecomitalia.it) (Quit: Leaving) |
| 21:39:12 | <frankdmartinez> | Cale: Thanks. |
| 21:39:33 | <frankdmartinez> | monochrom: That might be a good-enough-for-now approach, thanks. |
| 21:40:57 | → | mastarija joins (~mastarija@93-136-141-206.adsl.net.t-com.hr) |
| 21:41:01 | → | usr25 joins (~usr25@unaffiliated/usr25) |
| 21:42:23 | × | heatsink quits (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) (Remote host closed the connection) |
| 21:43:48 | × | geekosaur quits (42d52137@66.213.33.55) (Remote host closed the connection) |
| 21:44:06 | → | Younder joins (~john@33.51-174-155.customer.lyse.net) |
| 21:44:12 | × | DavidEichmann quits (~david@98.27.93.209.dyn.plus.net) (Remote host closed the connection) |
| 21:49:49 | → | aveltras joins (uid364989@gateway/web/irccloud.com/x-twzhylkueocqmpyy) |
| 21:50:34 | → | chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
| 21:52:50 | × | _noblegas quits (uid91066@gateway/web/irccloud.com/x-rwqmwswwleosbyhn) (Quit: Connection closed for inactivity) |
| 21:55:20 | × | knupfer quits (~Thunderbi@200116b82c1638008142ece12d3b6b6b.dip.versatel-1u1.de) (Remote host closed the connection) |
| 21:55:28 | → | knupfer joins (~Thunderbi@200116b82c1638002156902e5c178367.dip.versatel-1u1.de) |
| 21:57:05 | → | mp___ joins (~mp@hell.cx) |
| 21:59:02 | → | christo joins (~chris@81.96.113.213) |
| 22:00:02 | × | knupfer quits (~Thunderbi@200116b82c1638002156902e5c178367.dip.versatel-1u1.de) (Ping timeout: 264 seconds) |
| 22:00:19 | × | petersen quits (~petersen@redhat/juhp) (Quit: petersen) |
| 22:00:34 | → | Rudd0 joins (~Rudd0@185.189.115.108) |
| 22:01:00 | → | petersen joins (~petersen@redhat/juhp) |
| 22:02:03 | × | mp___ quits (~mp@hell.cx) (Ping timeout: 256 seconds) |
| 22:03:49 | × | hiroaki_ quits (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
| 22:07:53 | × | Younder quits (~john@33.51-174-155.customer.lyse.net) (Quit: Leaving) |
| 22:09:57 | × | coot quits (~coot@37.30.60.60.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 22:12:19 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 22:14:39 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:2994:ee4e:2fd6:b5cb) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 22:16:41 | → | hiroaki_ joins (~hiroaki@ip4d16fa3b.dynamic.kabel-deutschland.de) |
| 22:17:11 | → | frankdma` joins (~user@c-69-249-137-255.hsd1.pa.comcast.net) |
| 22:17:29 | × | argento quits (~argent0@168.227.97.23) (Ping timeout: 272 seconds) |
| 22:18:08 | × | crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 256 seconds) |
| 22:20:07 | → | justsomeguy joins (~justsomeg@216.186.218.241) |
| 22:20:07 | × | justsomeguy quits (~justsomeg@216.186.218.241) (Changing host) |
| 22:20:07 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 22:20:19 | → | crblmr joins (~carbolyme@matrix.dropacid.net) |
| 22:20:37 | × | frankdmartinez quits (~user@5.181.234.188) (Ping timeout: 264 seconds) |
| 22:21:16 | <Athas> | Are the GHC 9 linear types documented in the user manual yet? |
| 22:28:31 | → | eruiucuiviucuiv joins (dd73e7a2@gateway/web/cgi-irc/kiwiirc.com/ip.221.115.231.162) |
| 22:28:40 | <yushyin> | Athas: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/linear_types.html |
| 22:33:29 | × | fendor quits (~fendor@77.119.128.173.wireless.dyn.drei.com) (Remote host closed the connection) |
| 22:33:50 | <Athas> | Lovely, thanks! |
| 22:34:24 | × | son0p quits (~son0p@181.136.122.143) (Quit: leaving) |
| 22:35:12 | <Athas> | The endless linear arrow syntax debate ended with... 'a %1 -> b'? |
| 22:35:33 | → | heatsink joins (~heatsink@2600:1700:bef1:5e10:c4d1:58bf:ee47:d219) |
| 22:35:40 | × | plutoniix quits (~q@ppp-27-55-80-50.revip3.asianet.co.th) (Ping timeout: 265 seconds) |
| 22:35:58 | → | Rudd0^ joins (~Rudd0@185.189.115.103) |
| 22:36:54 | <merijn> | Athas: Isn't it pretty? :p |
| 22:37:42 | <Athas> | I suppose there is a strong overlap between people who want to use linear types in Haskell and people who like UnicodeSyntax, where it's much prettier anyway. |
| 22:38:01 | <Athas> | I guess this is to possibly support other multiplicities in the future? |
| 22:38:48 | <merijn> | Athas: What's it in unicode syntax, then? |
| 22:38:53 | × | Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 256 seconds) |
| 22:39:15 | <Athas> | ⊸ |
| 22:39:17 | <__monty__> | Looks like not only other multiplicities but also multiplicity polymorphism. |
| 22:39:22 | <Athas> | The lollipop operator. |
| 22:39:31 | <b4er> | There's already quite a lot of multiplicities, not sure how many more you want |
| 22:39:51 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:2994:ee4e:2fd6:b5cb) |
| 22:41:12 | <Athas> | Can linear functions be point-free? This documentation is phrased in terms of constraints about how the parameter name is used syntactically. |
| 22:41:14 | <frankdma`> | Sorry, as a new intiate into the wonderful world of Haskell, what benefit is gained by linear types? And, since my first reaction to that syntax is "eww", why was that chosen? |
| 22:41:41 | × | chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 22:42:16 | <Athas> | frankdma`: there is a 100+ comment long GitHub thread about the syntax. I think the reason is that Haskell's lexical rules forbid most syntaxes that might be more "natural", and people can just use the Unicode version anyway. |
| 22:42:48 | <b4er> | It makes compiler optimizations (eg. in-place mutations) much, much easier to implement (correctly) |
| 22:43:01 | <Athas> | Really, if you want multiplicity-polymorphism, then a "good" syntax would be something like 'a -[1]> b', but that's a mixfix operator, which Haskell doesn't allow. |
| 22:43:28 | <dsal> | Athas: super obvious to the reader, though. |
| 22:43:41 | <b4er> | Or you can restructure APIs using linear types to force certain usage patterns (eg. closing handles and such) |
| 22:43:44 | <Athas> | b4er: really? I thought it was mostly about writing unsafe code and then securing it with types to prevent unsafe usage. |
| 22:44:20 | <Athas> | Yes, that latter one is what I've seen people talk about. Are there examples where linear types help optimisations? |
| 22:44:35 | <monochrom> | Actual extra code optimizations and actual extra safety are not coming any time soon. |
| 22:44:58 | → | Melanie_ joins (~Melanie@192-0-134-138.cpe.teksavvy.com) |
| 22:44:58 | <b4er> | Athas, why would it not? |
| 22:45:22 | <b4er> | You got a type with a promise that it gets used only once, so you can reuse that memory safely after that. |
| 22:45:27 | <Athas> | b4er: I just can't think of any offhand. |
| 22:45:33 | → | Sheilong joins (uid293653@gateway/web/irccloud.com/x-lomouarpoiwiahvm) |
| 22:45:50 | <dolio> | Writing things point free is just using various higher order functions, so there doesn't seem to be any reason why you couldn't write linear versions, so long as they are well typed. |
| 22:45:57 | <Athas> | Sure, but Haskell is lazy, so have no idea whether the memory that contains the argument has room for a closure or whatever else you need to put there for the result. |
| 22:46:09 | <Athas> | You'll certainly need to do strictness analysis too. |
| 22:46:25 | <frankdma`> | Athas: Where can I find that comment thread so I can follow the reasoning? |
| 22:46:33 | <monochrom> | Without linear types, today here and now, in fact since several years ago already, if you code up "f :: Int -> Int; f 0 = 4; f n = f (n-1)", n is already in-place mutated, in fact living in a register, no linear typing necessary. |
| 22:46:39 | <Athas> | frankdma`: have fun: https://github.com/ghc-proposals/ghc-proposals/pull/111 |
| 22:47:04 | <frankdma`> | Athas: thanks! |
| 22:47:05 | <Athas> | I haven't read all of it myself. |
| 22:47:09 | <monochrom> | And safety, if you throw IO exceptions, the safety promises of linear typing is broken. |
| 22:47:27 | <yushyin> | frankdma`: see also https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0111-linear-types.rst#lexical-tokens-of-the-multiplicity-parametric-arrow |
| 22:48:07 | <Athas> | I can see using linear types to provide a safe streaming/array API that internally uses unsafe in-place updates. I don't see GHC automatically optimising array code to be in-place, just because you declare your functions linear. |
| 22:48:08 | <b4er> | monochrom, but it gets easier to implement. With your `f` the compiler needs to figure it out by analysing at expressions |
| 22:48:31 | → | plutoniix joins (~q@node-uil.pool-125-24.dynamic.totinternet.net) |
| 22:49:01 | <Athas> | What does it mean that "all fields in algebraic data types are linear"? I can see how it matters for the constructor, but is there more to it? |
| 22:49:06 | <dsal> | I like it when the compiler thinks about my code in ways I don't have to. |
| 22:49:59 | <dsal> | A linear type might make it harder for me to do things I don't intend to do, but for optimizations, I'd rather not tell the compiler what the code is already telling it. |
| 22:51:10 | × | nickednamed quits (~nickednam@037008230172.dynamic-3-poz-k-1-2-0.vectranet.pl) (Quit: Lost terminal) |
| 22:51:40 | × | __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving) |
| 22:51:42 | <monochrom> | The real killer optimization promise for linear typing is that your code says it inputs an immutable array and outputs an immutable array of the same type and size, but linearly, for example you're sorting it, so the compiler can use a mutable array behind your back. |
| 22:52:07 | <monochrom> | But I wouldn't hold my breath to wait for GHC to actually do it. |
| 22:53:10 | × | elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving) |
| 22:53:25 | <Athas> | Any code that is sensitive enough to cares about avoiding that copy would want a guarantee that it doesn't happen, rather than relying on a black-box optimiser. |
| 22:53:57 | <Athas> | Especially since linear types make it so relatively easy to just write the imperative code, and then give it a nicer and safe linear interface. |
| 22:54:18 | <tdammers> | a language specification can mandate certain optimizations. like a scheme implementation MUST perform TCO, it's in the spec |
| 22:55:01 | <b4er> | Imagine optimizing/rewriting for linear types just to be like "I can put the cool arrow and it type-checks but it doesn't actually more efficient translations" |
| 22:56:48 | <justsomeguy> | Why are linear types something that Haskellers want in the language? |
| 22:57:20 | <b4er> | Rust. |
| 22:57:39 | <tdammers> | I've actually run into a practical use case |
| 22:57:57 | <Athas> | tdammers: the Scheme specification of TCO is already a bit clumsy I think. It's not clear to me how you'd describe any mandated linearity optimisations. |
| 22:58:02 | <monochrom> | I am one of the haskellers who don't actively want it. |
| 22:58:28 | <tdammers> | Athas: I'm just saying that in general, making some optimizations mandatory in a language spec isn't unheard of |
| 22:58:29 | <Athas> | justsomeguy: I don't want it, but there are people who write code where linear types are useful for describing resource-safe APIs. |
| 22:58:43 | <Athas> | I think Tweag.io put the most work into it. |
| 22:59:02 | <tdammers> | and, yeah, indeed, resource-safe APIs, especially when you need deterministic deallocations |
| 22:59:23 | <Athas> | tdammers: I would say that TCO isn't an optimisation; it's a cost model. It says that certain patterns of recursive functions must have O(1) space usage. |
| 22:59:29 | <justsomeguy> | I guess I should look into the problems that tweag.io want to solve with it. |
| 22:59:30 | <merijn> | That's one of the only reasons I kinda like the idea of linear types anyway |
| 23:01:13 | <tdammers> | justsomeguy: concrete use case: I have a wrapper around mlocked memory for storing crypto secrets (mlocking means the memory is locked into a fixed location in physical RAM and will not be swapped out or moved elsewhere, which is tremendously useful, because it means you can't accidentally leak those secrets to the swap disk or to unallocated memory) |
| 23:01:43 | <tdammers> | for that to work, though, I need to also make sure that before I munlock that RAM, it gets wiped, so that I don't leave secrets lingering around in unallocated RAM |
| 23:02:11 | <dsal> | merijn: Do you have an example of nested optparse-applicative subparsers? |
| 23:02:26 | <tdammers> | so I need to have a way of saying "hey look, I have this reference here, but I want it erased now", and from that point on, the memory is no longer usefully accessible |
| 23:02:40 | <Athas> | tdammers: you could also do that with an ST-style monad design, right? |
| 23:02:46 | <tdammers> | well yes, sort of |
| 23:02:54 | <Athas> | I'm not saying it wouldn't be more clumsy. |
| 23:03:04 | <merijn> | dsal: Eh, yes...but I wrote bunch of wrapper code to hide it away, so, eh, also no? :P |
| 23:03:11 | <tdammers> | there is a problem though |
| 23:03:29 | <dsal> | merijn: Heh. OK. I'll figure out what I'm doing here. |
| 23:03:32 | <merijn> | You can try and reverse engineer it from the wrapper code :p |
| 23:03:35 | <tdammers> | we can do the deterministic cleanup, and we can mark the reference as "useless"; but this information isn't tracked at the type level |
| 23:03:51 | <tdammers> | that is, to the type checker, a "live" reference looks the same as a "useless" reference |
| 23:04:00 | <merijn> | dsal: https://github.com/merijn/Belewitte/blob/master/benchmark-analysis/src/Commands.hs |
| 23:04:39 | <merijn> | dsal: Conveniently, there's a datatype that corresponds to commands with and without subcommands, so you just gotta follow the logic for implementing each in that file :p |
| 23:05:07 | <dsal> | Thanks. I think the thing I'm doing right now doesn't actually need that, but I kind of want to understand it better. |
| 23:05:22 | <tdammers> | we can approximate linear types with singletons and an effect system modelled with type-level sets, but it's incredibly baroque, still kind of awkward, and not even foolproof |
| 23:07:21 | <Athas> | I expect that the RHS of many linear functions start with unsafePerformIO. |
| 23:08:26 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:2994:ee4e:2fd6:b5cb) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 23:08:41 | × | mastarija quits (~mastarija@93-136-141-206.adsl.net.t-com.hr) (Quit: Leaving) |
| 23:08:55 | → | vicfred joins (vicfred@gateway/vpn/mullvad/vicfred) |
| 23:09:28 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
| 23:09:49 | <monochrom> | :) |
| 23:10:24 | <tdammers> | yup |
| 23:10:25 | × | crblmr quits (~carbolyme@matrix.dropacid.net) (Ping timeout: 264 seconds) |
| 23:12:28 | → | crblmr joins (~carbolyme@matrix.dropacid.net) |
| 23:18:41 | × | b4er quits (~b5er_@91.193.4.138) (Ping timeout: 265 seconds) |
| 23:20:22 | → | tromp joins (~tromp@dhcp-077-249-230-040.chello.nl) |
| 23:21:27 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds) |
| 23:23:35 | → | loller_ joins (uid358106@gateway/web/irccloud.com/x-etlpbnyndplofboo) |
| 23:24:00 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Remote host closed the connection) |
| 23:24:24 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 23:25:39 | × | ddellacosta quits (dd@gateway/vpn/mullvad/ddellacosta) (Ping timeout: 260 seconds) |
| 23:27:20 | → | chang joins (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
| 23:32:56 | × | worc3131 quits (~quassel@cpc88896-oxfd27-2-0-cust200.4-3.cable.virginm.net) (Ping timeout: 256 seconds) |
| 23:34:07 | frankdma` | is now known as frankdmartinez |
| 23:34:59 | → | hexfive joins (~hexfive@50-47-142-195.evrt.wa.frontiernet.net) |
| 23:35:03 | × | hexfive quits (~hexfive@50-47-142-195.evrt.wa.frontiernet.net) (Client Quit) |
| 23:37:44 | × | chang quits (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 23:38:26 | → | myname_ joins (~sevenk@64.85.149.202) |
| 23:38:34 | <myname_> | hello |
| 23:38:50 | × | ces quits (~ces@fsf/member/ces) (Quit: WeeChat 3.0) |
| 23:39:15 | × | myname_ quits (~sevenk@64.85.149.202) (Client Quit) |
| 23:39:46 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
| 23:40:18 | → | seventhousand joins (~sevenk@64.85.149.202) |
| 23:40:28 | × | Melanie_ quits (~Melanie@192-0-134-138.cpe.teksavvy.com) (Quit: leaving) |
| 23:40:59 | → | nbloomf joins (~nbloomf@76.217.43.73) |
| 23:41:02 | × | nbloomf quits (~nbloomf@76.217.43.73) (Client Quit) |
| 23:41:29 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 23:45:39 | × | t3xp4t quits (~texinwien@213162073014.public.t-mobile.at) (Remote host closed the connection) |
| 23:45:41 | → | MOSCOS joins (~MOSCOS@152.32.70.55) |
| 23:46:00 | → | tromp joins (~tromp@dhcp-077-249-230-040.chello.nl) |
| 23:46:07 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 23:46:22 | → | Tario joins (~Tario@201.192.165.173) |
| 23:46:48 | × | kuribas quits (~user@ptr-25vy0i8109xerw15t0a.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 23:46:58 | → | t3xp4t joins (~texinwien@213162073014.public.t-mobile.at) |
| 23:47:11 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer) |
| 23:47:14 | <Squarism> | i never tried the optics library. I heard it has less dependencies than lens which would fit my ghcjs app well. Do you recommend switching? |
| 23:47:25 | <frankdmartinez> | Is there a way to make an alias for `<*>`? I can do `let myMap = map` and `let myPure = pure`. What I try to do `let appliedTo = <*>`, I get a message: "parse error on input ‘<*>’". |
| 23:47:36 | → | tromp joins (~tromp@dhcp-077-249-230-040.chello.nl) |
| 23:49:26 | × | Mikagami quits (~MOSCOS@122.54.107.175) (Ping timeout: 272 seconds) |
| 23:49:53 | → | Mikagami joins (~MOSCOS@122.54.107.175) |
| 23:50:45 | × | MOSCOS quits (~MOSCOS@152.32.70.55) (Ping timeout: 240 seconds) |
| 23:51:16 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 23:51:19 | × | dfeuer quits (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
| 23:51:45 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 240 seconds) |
| 23:53:13 | <ephemient> | wrap infix operators in parentheses to make it an expression without applying it to args, e.g. `let appliedTo = (<*>)` |
| 23:53:48 | <dsal> | Squarism: there's also microlens. optics is a bit of a different style. |
| 23:54:15 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 23:54:28 | <frankdmartinez> | ephemient: Of course! How silly of me! Thank you! |
| 23:55:10 | <Squarism> | dsal, oh ok. |
| 23:55:10 | <monochrom> | Furthermore, "(!!!!!) = (<*>)" if you want a symbolic alias. |
| 23:55:36 | <frankdmartinez> | BTW, is it fair to say, since `<*>` is canonically pronounced "applied over", is it correct to say `<$>` is pronounced "mapped over"? |
| 23:55:59 | <dsal> | I've never heard either pronounced. heh |
| 23:56:04 | <frankdmartinez> | monochrom: Wait, what? |
| 23:56:05 | <monochrom> | I skip the "over" and the "ed". app, fmap. |
| 23:56:50 | <frankdmartinez> | dsal: I am taking https://wiki.haskell.org/Pronunciation as "canon" in this case. |
| 23:57:00 | <monochrom> | > let (!!!!!) = (<*>) in [sin, cos] !!!!! [0, pi/2] |
| 23:57:03 | <ephemient> | `ap = (<*>)` (for Monads) |
| 23:57:03 | <lambdabot> | [0.0,1.0,1.0,6.123233995736766e-17] |
| 23:57:52 | <dsal> | frankdmartinez: Oh weird. I've never seen that. I just type haskell into my editor. Never tried doing dictation. |
| 23:58:00 | <frankdmartinez> | monochrom: That hurts my head trying to parse that; what is happining? |
| 23:58:14 | <ephemient> | I never pronounce them either. just `<*>` etc. is fine |
| 23:58:46 | <frankdmartinez> | dsal: I'm the sort of person who reads his code to himself as he types to make sure it sounds right (I've been burnt too many times to not do that.) |
| 23:58:48 | <ephemient> | frankdmartinez: same as `let x !!!!! y = x <*> y` |
| 23:59:31 | <frankdmartinez> | ephemient: Ohhhhhhh, got it. Thanks. |
| 23:59:57 | <monochrom> | I minimally respect asking about wording code because given that "1+2" has a wording "one plus two" I guess it is fair to ask about a counterpart to "x <*> y". |
All times are in UTC on 2020-12-30.