Home freenode/#haskell: Logs Calendar

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.