2021/01/11

2021-01-11 00:01:19 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d) (Remote host closed the connection)
2021-01-11 00:02:09 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2021-01-11 00:03:20 +0100coot(~coot@37.30.56.46.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-01-11 00:04:16 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com) (Ping timeout: 246 seconds)
2021-01-11 00:06:21 +0100hekkaidekapus](~tchouri@gateway/tor-sasl/hekkaidekapus)
2021-01-11 00:07:03 +0100hekkaidekapus[(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2021-01-11 00:07:10 +0100Tesseraction(~Tesseract@unaffiliated/tesseraction) (Read error: Connection reset by peer)
2021-01-11 00:08:48 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d)
2021-01-11 00:08:56 +0100DavidEichmann(~david@98.27.93.209.dyn.plus.net) (Ping timeout: 256 seconds)
2021-01-11 00:09:47 +0100pavonia(~user@unaffiliated/siracusa)
2021-01-11 00:10:10 +0100edrx(~Eduardo@2804:56c:d2ef:cf00:369c:6c3f:6681:423e)
2021-01-11 00:11:35 +0100 <dmj`> oh, ghc's Parser.y has 0 shift/reduce conflicts ...
2021-01-11 00:12:12 +0100 <c_wraith> ghc's parser doesn't try to parse everything correctly, though. It leaves a lot of things to be fixed by later passes
2021-01-11 00:12:52 +0100 <edrx> is it possible to put this "do" in a single line? how should I separate the "return" from the rest?
2021-01-11 00:12:56 +0100 <edrx> do a <- [0,1], b <- [a+1,a+2]; return (a+b)
2021-01-11 00:13:05 +0100 <c_wraith> semicolons
2021-01-11 00:13:31 +0100 <edrx> c_wraith: perfect! thanks! =)
2021-01-11 00:13:51 +0100 <c_wraith> you can write haskell as a {;} language. Most people don't. :)
2021-01-11 00:13:57 +0100 <c_wraith> But for one-liners, it's useful
2021-01-11 00:14:18 +0100 <edrx> next question... I am trying to understand list comprehensions by desugaring them - as Vladimir Zavialov does in this presentation here: https://youtu.be/fty9QL4aSRc ("Haskell to Core: Understanding Haskell Features Through Their Desugaring")...
2021-01-11 00:14:56 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2021-01-11 00:14:56 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d) (Remote host closed the connection)
2021-01-11 00:15:02 +0100 <edrx> I've been able to draw typing diagrams for some examples of the do notation - e.g.: http://angg.twu.net/e/haskell.e.html#typing-do-notation - but in the syntax for list comprehensions an omitted "<-" seems to do something different... for example, here
2021-01-11 00:15:11 +0100 <edrx> [(a,b) | a <- [0,1], b <- [a+1,a+2], a+b < 4]
2021-01-11 00:15:43 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Remote host closed the connection)
2021-01-11 00:15:57 +0100 <c_wraith> you can add filters to list comprehensions
2021-01-11 00:16:10 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599)
2021-01-11 00:16:23 +0100 <c_wraith> You can desugar those as calls to guard
2021-01-11 00:16:32 +0100 <edrx> translating "a+b < 4" to "_ <- a+b" doesn't work - it seems that the right translation generates a one-element list when the"a+b < 4" is true, and a [] when it is false... do you know where I can find the details?
2021-01-11 00:16:49 +0100flux488(2fe3e53b@047-227-229-059.res.spectrum.com) (Ping timeout: 248 seconds)
2021-01-11 00:16:49 +0100 <edrx> ah, let me try :t guard
2021-01-11 00:17:17 +0100 <edrx> "Variable not in scope"
2021-01-11 00:17:26 +0100 <c_wraith> @where guard
2021-01-11 00:17:26 +0100 <lambdabot> I know nothing about guard.
2021-01-11 00:17:30 +0100 <c_wraith> it's in Control.Monad
2021-01-11 00:17:35 +0100 <c_wraith> :tguard
2021-01-11 00:17:37 +0100 <c_wraith> :t guard
2021-01-11 00:17:39 +0100 <lambdabot> Alternative f => Bool -> f ()
2021-01-11 00:18:02 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Remote host closed the connection)
2021-01-11 00:18:04 +0100Deide(~Deide@217.155.19.23)
2021-01-11 00:18:09 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599)
2021-01-11 00:18:13 +0100 <edrx> beautiful! thanks! =)
2021-01-11 00:18:14 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:2560:f230:a66e:db8d)
2021-01-11 00:18:18 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Remote host closed the connection)
2021-01-11 00:18:51 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599)
2021-01-11 00:19:07 +0100joshualit140[m](joshualit1@gateway/shell/matrix.org/x-whhblwmaoulboefx)
2021-01-11 00:19:11 +0100 <joshualit140[m]> Hi. I'm paying 100€ for a Haskell developer to complete a project in 24 hours (Nothing too extreme, just a simple IO program). Please DM me if you are interested.
2021-01-11 00:19:11 +0100 <joshualit140[m]> Not sure if I can post that here, but I need the project done asap.
2021-01-11 00:20:43 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 00:21:11 +0100 <dmj`> c_wraith: I noticed ghc doesn't try to parse patterns, yea. It has a post-processing step for that, wonder if it stole that from jhc
2021-01-11 00:21:23 +0100ogamita(~t@2a01cb04063ec500d4be9ffe0c684211.ipv6.abo.wanadoo.fr) (Read error: Connection reset by peer)
2021-01-11 00:22:07 +0100 <dmj`> c_wraith: too bad patterns can't be represented in happy
2021-01-11 00:22:25 +0100 <c_wraith> dmj`: it also doesn't handle operator precedence, as that's context-sensitive
2021-01-11 00:22:35 +0100urek(~urek@2804:7f1:e10a:8920:8158:2ad1:b01b:bb41)
2021-01-11 00:23:10 +0100urek(~urek@2804:7f1:e10a:8920:8158:2ad1:b01b:bb41) ()
2021-01-11 00:23:26 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Ping timeout: 264 seconds)
2021-01-11 00:23:38 +0100 <dmj`> c_wraith: is that because custom operators specify their own precedence, so it'd have to know ahead of time what the precedence was before parsing
2021-01-11 00:24:14 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d)
2021-01-11 00:24:31 +0100 <c_wraith> yes
2021-01-11 00:25:04 +0100 <dmj`> rip
2021-01-11 00:25:26 +0100 <c_wraith> at least haskell syntax is decideable, even if it is context-sensitive!
2021-01-11 00:25:38 +0100c_wraithtaunts perl
2021-01-11 00:25:44 +0100 <dmj`> c_wraith: purescript avoids patterns altogether, I see why
2021-01-11 00:25:53 +0100pera(pera@gateway/vpn/mullvad/pera) (Quit: leaving)
2021-01-11 00:28:49 +0100 <dmj`> c_wraith: I just want a nice declarative parser for Haskell is that too much to ask for?
2021-01-11 00:29:19 +0100 <c_wraith> technically no. You could make a context-sensitive declarative tool.
2021-01-11 00:29:27 +0100 <c_wraith> But it would probably be slow.
2021-01-11 00:29:45 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-01-11 00:30:11 +0100Tesseraction(~Tesseract@unaffiliated/tesseraction)
2021-01-11 00:31:31 +0100son0p(~son0p@181.136.122.143) (Quit: Lost terminal)
2021-01-11 00:35:37 +0100 <c_wraith> also, I have *no idea* how to extend the formalisms you can prove handle context-sensitive grammars declaratively into a practical system.
2021-01-11 00:38:01 +0100 <dmj`> c_wraith: the time I'd lose in parse time I could make up by not implementing a bunch of extensions that aren't used anymore
2021-01-11 00:38:06 +0100ransom(~c4264035@c-67-176-3-106.hsd1.co.comcast.net)
2021-01-11 00:45:16 +0100darjeeling_(~darjeelin@115.215.40.96) (Ping timeout: 256 seconds)
2021-01-11 00:47:48 +0100jess(jess@freenode/staff/jess) (Quit: updates)
2021-01-11 00:48:10 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599)
2021-01-11 00:51:32 +0100vappend(~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
2021-01-11 00:53:25 +0100ransom(~c4264035@c-67-176-3-106.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 00:54:02 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Ping timeout: 260 seconds)
2021-01-11 00:55:28 +0100Kaiepi(~Kaiepi@47.54.252.148) (Remote host closed the connection)
2021-01-11 00:55:35 +0100ThaDon(~ThaDon@185.103.96.147) (Remote host closed the connection)
2021-01-11 00:55:43 +0100Kaiepi(~Kaiepi@47.54.252.148)
2021-01-11 00:58:45 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
2021-01-11 00:59:07 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
2021-01-11 01:00:21 +0100Guest19797(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 01:04:05 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
2021-01-11 01:04:57 +0100atk(~Arch-TK@ircpuzzles/staff/Arch-TK)
2021-01-11 01:05:19 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599)
2021-01-11 01:06:04 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 01:06:45 +0100 <edrx> ok, guard is here: libraries/base/Control/Monad.hs...
2021-01-11 01:07:14 +0100 <edrx> what do I need to do in the ghci prompt to put "guard" in the current scope? some kind of import?
2021-01-11 01:07:43 +0100 <monochrom> "import Control.Monad" or ":module +Control.Monad"
2021-01-11 01:08:28 +0100 <edrx> monochrom: perfect!!! thanks!!! =)
2021-01-11 01:10:14 +0100niekvandepas(~niekvande@2001:985:bebc:1:fca4:9ad3:62d5:2599) (Ping timeout: 264 seconds)
2021-01-11 01:11:08 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius)
2021-01-11 01:11:21 +0100dandart(~Thunderbi@home.dandart.co.uk) (Quit: dandart)
2021-01-11 01:11:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-01-11 01:12:07 +0100unknown(~unknown@185.204.1.185)
2021-01-11 01:18:36 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425)
2021-01-11 01:21:01 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-01-11 01:21:08 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 01:21:35 +0100matryoshka`(~matryoshk@184.75.223.227)
2021-01-11 01:21:35 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Read error: Connection reset by peer)
2021-01-11 01:22:46 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-01-11 01:23:06 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
2021-01-11 01:23:21 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 01:23:30 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 01:24:00 +0100usr25(~usr25@unaffiliated/usr25)
2021-01-11 01:24:09 +0100usr25(~usr25@unaffiliated/usr25) ()
2021-01-11 01:26:07 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425) (Ping timeout: 260 seconds)
2021-01-11 01:27:56 +0100matryoshka`(~matryoshk@184.75.223.227) (Quit: ZNC 1.8.2 - https://znc.in)
2021-01-11 01:28:13 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2021-01-11 01:28:56 +0100matryoshka(~matryoshk@2606:6080:1002:8:3285:30e:de43:8809)
2021-01-11 01:35:01 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 264 seconds)
2021-01-11 01:35:40 +0100remby(~remby@bras-base-london1483w-grc-11-76-69-70-199.dsl.bell.ca)
2021-01-11 01:35:46 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:255c:18d1:c1a9:13be:6f9e)
2021-01-11 01:35:49 +0100 <remby> does haskell have offline documentation?
2021-01-11 01:37:51 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425)
2021-01-11 01:38:33 +0100 <monochrom> Yes.
2021-01-11 01:39:24 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
2021-01-11 01:40:44 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
2021-01-11 01:41:29 +0100 <remby> ok, I guess that decides it then
2021-01-11 01:41:55 +0100 <shapr> hoogle is really handy
2021-01-11 01:42:17 +0100dandart(~Thunderbi@home.dandart.co.uk)
2021-01-11 01:42:28 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425) (Ping timeout: 260 seconds)
2021-01-11 01:42:32 +0100sagax(~sagax_nb@213.138.71.146) (Quit: Konversation terminated!)
2021-01-11 01:43:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 01:46:54 +0100kupi(uid212005@gateway/web/irccloud.com/x-dnfwwxqcgyemldny) (Quit: Connection closed for inactivity)
2021-01-11 01:47:48 +0100electricityZZZZ(~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Quit: Leaving)
2021-01-11 01:49:19 +0100 <edrx> how do I make cabal update its installed packages to the latest versions? here's what I tried... http://ix.io/2LBD
2021-01-11 01:52:05 +0100vappend(~ezrakilty@75-172-99-84.tukw.qwest.net)
2021-01-11 01:55:04 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425)
2021-01-11 01:59:58 +0100niekvandepas(~niekvande@2001:985:bebc:1:5947:e9b7:38e6:9425) (Ping timeout: 260 seconds)
2021-01-11 02:00:00 +0100Alleria(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com)
2021-01-11 02:00:24 +0100AlleriaGuest81850
2021-01-11 02:02:08 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 02:03:15 +0100 <monochrom> "cabal install ghc" reflects two misconceptions, not just one.
2021-01-11 02:03:37 +0100 <monochrom> cabal is not responsible for installing the compiler.
2021-01-11 02:04:18 +0100 <monochrom> the package name "ghc" does not refer to the compiler either. It refers to a library.
2021-01-11 02:04:50 +0100Guest81850(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-01-11 02:07:51 +0100 <edrx> monochrom: ooops
2021-01-11 02:08:41 +0100 <edrx> yeah, I was making some not-very-educated guesses and checking if they would work...
2021-01-11 02:08:45 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 02:10:41 +0100xff0x_(~fox@2001:1a81:53b9:9a00:e5cb:577b:4380:8a0f) (Ping timeout: 272 seconds)
2021-01-11 02:11:13 +0100zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2021-01-11 02:11:15 +0100xff0x(~fox@2001:1a81:53b9:9a00:e9ba:2994:380d:244a)
2021-01-11 02:16:29 +0100niekvandepas(~niekvande@2001:985:bebc:1:6523:6211:1be0:a1d0)
2021-01-11 02:16:42 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2021-01-11 02:16:55 +0100zaquest(~notzaques@5.128.210.178)
2021-01-11 02:18:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-01-11 02:20:58 +0100niekvandepas(~niekvande@2001:985:bebc:1:6523:6211:1be0:a1d0) (Ping timeout: 260 seconds)
2021-01-11 02:24:38 +0100xff0x(~fox@2001:1a81:53b9:9a00:e9ba:2994:380d:244a) (Ping timeout: 264 seconds)
2021-01-11 02:25:28 +0100xff0x(~fox@2001:1a81:53b9:9a00:3eee:771:334a:a242)
2021-01-11 02:25:40 +0100columbarius1(~columbari@i5E86B32C.versanet.de) (Ping timeout: 246 seconds)
2021-01-11 02:26:23 +0100natechan(~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9)
2021-01-11 02:27:59 +0100columbarius1(~columbari@87.123.198.160)
2021-01-11 02:31:39 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d) (Remote host closed the connection)
2021-01-11 02:32:07 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d)
2021-01-11 02:35:43 +0100natechan(~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net)
2021-01-11 02:36:00 +0100ArConan(~ArConan@202.74.1.147)
2021-01-11 02:36:26 +0100niekvandepas(~niekvande@2001:985:bebc:1:c0dd:aaee:98bd:df7)
2021-01-11 02:36:57 +0100ArConan(~ArConan@202.74.1.147) (Remote host closed the connection)
2021-01-11 02:37:18 +0100ericsagnes(~ericsagne@2405:6580:0:5100:32fa:5861:e6a3:7ef9) (Ping timeout: 260 seconds)
2021-01-11 02:37:19 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2021-01-11 02:37:52 +0100ArConan(~ArConan@pcd459180.netvigator.com)
2021-01-11 02:38:26 +0100noctux(~noctux@unaffiliated/noctux) (Ping timeout: 264 seconds)
2021-01-11 02:38:54 +0100 <ArConan> hm
2021-01-11 02:39:36 +0100AWizzArd(~code@unaffiliated/awizzard) (Ping timeout: 240 seconds)
2021-01-11 02:39:37 +0100cocreature(~cocreatur@eirene.uberspace.de) (Ping timeout: 265 seconds)
2021-01-11 02:40:08 +0100vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2021-01-11 02:40:19 +0100ArConan(~ArConan@pcd459180.netvigator.com) (Remote host closed the connection)
2021-01-11 02:41:23 +0100niekvandepas(~niekvande@2001:985:bebc:1:c0dd:aaee:98bd:df7) (Ping timeout: 260 seconds)
2021-01-11 02:41:36 +0100Gurkenglas_(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds)
2021-01-11 02:42:16 +0100vappend(~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection)
2021-01-11 02:44:54 +0100jmchael(~jmchael@87.112.235.234) (Ping timeout: 260 seconds)
2021-01-11 02:47:20 +0100ArConan(~ArConan@pcd459180.netvigator.com)
2021-01-11 02:48:03 +0100conal_(~conal@66.115.176.210) (Quit: Computer has gone to sleep.)
2021-01-11 02:48:18 +0100ArConan(~ArConan@pcd459180.netvigator.com) (Remote host closed the connection)
2021-01-11 02:49:26 +0100ericsagnes(~ericsagne@2405:6580:0:5100:5c80:7e91:5436:7bd4)
2021-01-11 02:50:57 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 02:52:34 +0100shinobi_(~shinobi@c-24-147-48-162.hsd1.ma.comcast.net)
2021-01-11 02:54:22 +0100niekvandepas(~niekvande@2001:985:bebc:1:c0dd:aaee:98bd:df7)
2021-01-11 02:56:24 +0100shinobi(~shinobi@c-24-147-48-162.hsd1.ma.comcast.net) (Ping timeout: 272 seconds)
2021-01-11 02:56:25 +0100niekvand_(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 02:56:34 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-01-11 02:58:52 +0100niekvandepas(~niekvande@2001:985:bebc:1:c0dd:aaee:98bd:df7) (Ping timeout: 260 seconds)
2021-01-11 02:59:29 +0100abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-01-11 02:59:32 +0100livvy(~livvy@gateway/tor-sasl/livvy)
2021-01-11 03:01:13 +0100niekvand_(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 260 seconds)
2021-01-11 03:03:20 +0100guest111(~user@49.5.6.87)
2021-01-11 03:10:13 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d) (Ping timeout: 272 seconds)
2021-01-11 03:12:17 +0100acidjnk_new(~acidjnk@p200300d0c704e77520873290fe3f7255.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-01-11 03:18:21 +0100heron(~owner@198.52.165.210)
2021-01-11 03:20:20 +0100conal(~conal@66.115.176.210)
2021-01-11 03:27:12 +0100AWizzArd(~code@gehrels.uberspace.de)
2021-01-11 03:27:13 +0100dwts(pid@gateway/shell/blinkenshell.org/x-yvyypwvhqlmptmog) (Ping timeout: 264 seconds)
2021-01-11 03:27:58 +0100niekvandepas(~niekvande@80-100-16-191.ip.xs4all.nl)
2021-01-11 03:28:00 +0100noctux(~noctux@unaffiliated/noctux)
2021-01-11 03:28:57 +0100dwts(pid@gateway/shell/blinkenshell.org/x-rpycedoficifxmhn)
2021-01-11 03:29:16 +0100cocreature(~cocreatur@eirene.uberspace.de)
2021-01-11 03:30:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 03:32:45 +0100noctux(~noctux@unaffiliated/noctux) (Ping timeout: 240 seconds)
2021-01-11 03:32:54 +0100noctux(~noctux@unaffiliated/noctux)
2021-01-11 03:33:05 +0100niekvandepas(~niekvande@80-100-16-191.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-01-11 03:33:08 +0100yahb(xsbot@haskell/bot/yahb) (Ping timeout: 272 seconds)
2021-01-11 03:37:27 +0100xff0x(~fox@2001:1a81:53b9:9a00:3eee:771:334a:a242) (Ping timeout: 272 seconds)
2021-01-11 03:37:37 +0100noctux(~noctux@unaffiliated/noctux) (Ping timeout: 265 seconds)
2021-01-11 03:38:41 +0100xff0x(~fox@2001:1a81:53ed:d500:65a5:563d:c1b5:1e59)
2021-01-11 03:38:43 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2021-01-11 03:38:49 +0100rajivr(uid269651@gateway/web/irccloud.com/x-xvvnrltyuwuuhove)
2021-01-11 03:39:03 +0100yahb(xsbot@haskell/bot/yahb)
2021-01-11 03:39:49 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 264 seconds)
2021-01-11 03:42:20 +0100dmiles(dmiles@c-98-232-203-68.hsd1.wa.comcast.net) ()
2021-01-11 03:43:25 +0100dwts(pid@gateway/shell/blinkenshell.org/x-rpycedoficifxmhn) (Ping timeout: 240 seconds)
2021-01-11 03:43:46 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-01-11 03:45:03 +0100srk(~sorki@gateway/tor-sasl/sorki) (Ping timeout: 240 seconds)
2021-01-11 03:45:23 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Quit: ZNC 1.8.2 - https://znc.in)
2021-01-11 03:46:10 +0100Entertainment(~entertain@104.246.132.210) (Ping timeout: 246 seconds)
2021-01-11 03:46:19 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2021-01-11 03:49:37 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Read error: Connection reset by peer)
2021-01-11 03:51:52 +0100Wuzzy(~Wuzzy@p5790e648.dip0.t-ipconnect.de) (Quit: Wuzzy)
2021-01-11 03:52:17 +0100pedrorubster[m]sent a long message: < https://matrix.org/_matrix/media/r0/download/matrix.org/GiyGDoHyIzMWlKVnaWBFSYak/message.txt >
2021-01-11 03:52:26 +0100dwts(pid@gateway/shell/blinkenshell.org/x-ctstbhsfeyhihnsa)
2021-01-11 03:54:20 +0100noctux(~noctux@unaffiliated/noctux)
2021-01-11 03:55:08 +0100conal(~conal@66.115.176.210) (Quit: Computer has gone to sleep.)
2021-01-11 03:55:35 +0100 <pedrorubster[m]> ephemient: Don't want to take advantage of you, but you helped me last time haha
2021-01-11 03:57:33 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net) (Quit: dcbdnl)
2021-01-11 04:00:03 +0100Stanley00(~stanley00@unaffiliated/stanley00)
2021-01-11 04:01:44 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net)
2021-01-11 04:04:48 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2021-01-11 04:05:04 +0100noctux(~noctux@unaffiliated/noctux) (Ping timeout: 246 seconds)
2021-01-11 04:05:12 +0100noctux(~noctux@unaffiliated/noctux)
2021-01-11 04:11:27 +0100drbean(~drbean@TC210-63-209-203.static.apol.com.tw)
2021-01-11 04:16:34 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2021-01-11 04:17:34 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 04:18:48 +0100darjeeling_(~darjeelin@115.215.40.96)
2021-01-11 04:21:15 +0100urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2021-01-11 04:21:52 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2021-01-11 04:23:00 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-01-11 04:23:10 +0100remby(~remby@bras-base-london1483w-grc-11-76-69-70-199.dsl.bell.ca) (Quit: remby)
2021-01-11 04:24:52 +0100 <glguy> pedrorubster[m], that message ended up being too long to come through directly to IRC
2021-01-11 04:25:18 +0100heron(~owner@198.52.165.210) (Quit: WeeChat 3.1-dev)
2021-01-11 04:28:09 +0100petersen(~petersen@redhat/juhp)
2021-01-11 04:32:35 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 04:33:17 +0100jedws(~jedws@121.209.139.157)
2021-01-11 04:37:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-01-11 04:37:44 +0100dyeplexer(~lol@unaffiliated/terpin)
2021-01-11 04:37:47 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 04:43:17 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 260 seconds)
2021-01-11 04:45:13 +0100xff0x(~fox@2001:1a81:53ed:d500:65a5:563d:c1b5:1e59) (Ping timeout: 272 seconds)
2021-01-11 04:45:54 +0100xff0x(~fox@2001:1a81:53ed:d500:ffc4:2540:c5b7:b45c)
2021-01-11 04:47:04 +0100theDon(~td@94.134.91.57) (Ping timeout: 246 seconds)
2021-01-11 04:49:02 +0100theDon(~td@94.134.91.199)
2021-01-11 04:50:36 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 04:50:56 +0100ransom(~c4264035@c-67-176-3-106.hsd1.co.comcast.net)
2021-01-11 04:51:50 +0100maxsu(~maxsu@ip-64-72-99-232.lasvegas.net)
2021-01-11 04:52:56 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl)
2021-01-11 04:56:05 +0100jedws(~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 04:56:36 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 240 seconds)
2021-01-11 04:57:05 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl) (Ping timeout: 240 seconds)
2021-01-11 04:57:07 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2021-01-11 04:58:38 +0100xirhtogal(~lagothrix@unaffiliated/lagothrix)
2021-01-11 04:58:38 +0100lagothrixGuest22145
2021-01-11 04:58:38 +0100Guest22145(~lagothrix@unaffiliated/lagothrix) (Killed (orwell.freenode.net (Nickname regained by services)))
2021-01-11 04:58:38 +0100xirhtogallagothrix
2021-01-11 04:58:44 +0100higherkinded(~dm223@ip68-225-238-234.oc.oc.cox.net)
2021-01-11 05:00:00 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Quit: I seem to have stopped.)
2021-01-11 05:01:30 +0100Taneb(~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0)
2021-01-11 05:03:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 05:03:43 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:2560:f230:a66e:db8d) (Max SendQ exceeded)
2021-01-11 05:04:07 +0100higherkinded(~dm223@ip68-225-238-234.oc.oc.cox.net) (Quit: Leaving)
2021-01-11 05:04:16 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:2560:f230:a66e:db8d)
2021-01-11 05:06:02 +0100Tops2(~Tobias@dyndsl-095-033-095-004.ewe-ip-backbone.de)
2021-01-11 05:06:28 +0100krofe(kevin@gateway/vpn/protonvpn/krofe)
2021-01-11 05:06:31 +0100iridescent(2fe3e53b@047-227-229-059.res.spectrum.com)
2021-01-11 05:06:42 +0100 <iridescent> could anyone explain how `(fmap . fmap) sum Just [1, 2, 3]`works
2021-01-11 05:06:50 +0100 <iridescent> `(fmap . fmap) sum Just [1, 2, 3]`
2021-01-11 05:09:00 +0100 <glguy> > (fmap . fmap) sum Just [1, 2, 3]
2021-01-11 05:09:03 +0100 <lambdabot> Just 6
2021-01-11 05:09:12 +0100 <glguy> Let's inline the use of (.)
2021-01-11 05:09:24 +0100 <glguy> fmap (fmap sum) Just [1,2,3]
2021-01-11 05:09:33 +0100 <iridescent> right
2021-01-11 05:09:38 +0100 <glguy> the (->) r instance of fmap is (.)
2021-01-11 05:09:41 +0100 <glguy> so now we have:
2021-01-11 05:09:47 +0100 <glguy> (fmap sum . Just) [1,2,3]
2021-01-11 05:09:52 +0100 <iridescent> how do we know we're dealing with a (->) r instance?
2021-01-11 05:10:05 +0100 <glguy> :t fmap
2021-01-11 05:10:07 +0100 <lambdabot> Functor f => (a -> b) -> f a -> f b
2021-01-11 05:10:23 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 05:10:24 +0100 <glguy> And the use of fmap is: fmap _ Just
2021-01-11 05:10:36 +0100tama2(~tama@unaffiliated/tama00)
2021-01-11 05:10:40 +0100 <glguy> so in that use, f is chosen to be: (Int -> Maybe Int)
2021-01-11 05:10:42 +0100 <iridescent> so "Just" is the "f a" here?
2021-01-11 05:10:44 +0100 <glguy> err
2021-01-11 05:10:52 +0100 <glguy> f is: (->) Int
2021-01-11 05:10:57 +0100tama2tama00
2021-01-11 05:10:59 +0100heronwr(~heronwr@198.52.165.210)
2021-01-11 05:11:19 +0100 <iridescent> shouldn't we have "f a" = Int -> Maybe Int
2021-01-11 05:11:28 +0100 <glguy> yeah, f applied to *a* is that
2021-01-11 05:11:37 +0100 <glguy> f is (->) Int; a is (Maybe Int)
2021-01-11 05:11:42 +0100 <iridescent> oh ok
2021-01-11 05:11:46 +0100 <glguy> so f a is: Int -> Maybe Int
2021-01-11 05:11:54 +0100 <glguy> Do you know the rest or should I keep going?
2021-01-11 05:12:35 +0100 <iridescent> i'm good
2021-01-11 05:12:36 +0100tama1(~tama@unaffiliated/tama00) (Ping timeout: 240 seconds)
2021-01-11 05:12:45 +0100 <iridescent> i guess that's what i didn't get
2021-01-11 05:13:56 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net) (Ping timeout: 240 seconds)
2021-01-11 05:15:58 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 260 seconds)
2021-01-11 05:20:10 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 05:21:24 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 05:21:43 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net) (Quit: dcbdnl)
2021-01-11 05:23:36 +0100heronwr(~heronwr@198.52.165.210) (Quit: WeeChat 3.1-dev)
2021-01-11 05:24:18 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-01-11 05:24:52 +0100Codaraxis_(~Codaraxis@ip68-5-90-227.oc.oc.cox.net) (Ping timeout: 246 seconds)
2021-01-11 05:25:25 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 264 seconds)
2021-01-11 05:26:49 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 05:30:10 +0100 <iridescent> could anyone give some example of how the sequence operator is useful?
2021-01-11 05:30:25 +0100 <iridescent> like I understand what it does but I can't imagine why i would want to do such an operation
2021-01-11 05:31:14 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 264 seconds)
2021-01-11 05:34:21 +0100jedws(~jedws@121.209.139.157)
2021-01-11 05:37:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-01-11 05:37:26 +0100ome(uid36537@gateway/web/irccloud.com/x-ccqrafxmodzzqrro)
2021-01-11 05:37:33 +0100Tario(~Tario@201.192.165.173)
2021-01-11 05:38:17 +0100 <ome> In Lambda Calculus, how do you read out a term like this: λx. λy. x y x
2021-01-11 05:40:59 +0100owner(~heronwr@198.52.165.210)
2021-01-11 05:41:28 +0100ownerheronwr
2021-01-11 05:42:19 +0100 <ski> the function that maps an input, call it ⌜x⌝, to the function that maps an input, call it ⌜y⌝, to the application of the application of ⌜x⌝ to ⌜y⌝, to ⌜x⌝
2021-01-11 05:42:50 +0100 <ome> Thanks.
2021-01-11 05:44:17 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net)
2021-01-11 05:44:20 +0100 <ome> So this would be acceptable: lambda x maps to lambda y that maps to x applied to y applied to x ?
2021-01-11 05:44:43 +0100 <ski> yes (if you associate the applications in the right way)
2021-01-11 05:45:59 +0100 <ski> i guess sometimes people read the ⌜.⌝ as dot (as least i do, at times), making it "lambda ex dot lambda why dot ex of why, of ex"
2021-01-11 05:46:01 +0100 <ome> cheers
2021-01-11 05:46:58 +0100 <ski> another ("mathy") way to spell it would be ⌜x ↦ (y ↦ x(y)(x))⌝ (⌜↦⌝ is read as "maps to")
2021-01-11 05:47:53 +0100 <ski> (i also used the usual math notation for application there, bracketting parameters, rather than simply using juxtaposition, as is the convention in the lambda calculus)
2021-01-11 05:52:29 +0100ryantrinkle(~ryan@cpe-24-168-87-184.si.res.rr.com) (Quit: Leaving.)
2021-01-11 05:56:54 +0100heronwr(~heronwr@198.52.165.210) (Quit: WeeChat 3.1-dev)
2021-01-11 05:58:34 +0100niekvandepas(~niekvande@80-100-16-191.ip.xs4all.nl)
2021-01-11 05:58:52 +0100albel727(~albel727@unaffiliated/albel727) (Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/)
2021-01-11 06:00:20 +0100Alleria(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com)
2021-01-11 06:00:44 +0100AlleriaGuest9894
2021-01-11 06:04:50 +0100Guest9894(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-01-11 06:05:31 +0100Tario(~Tario@201.192.165.173) (Ping timeout: 265 seconds)
2021-01-11 06:06:34 +0100Vulfe_(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Remote host closed the connection)
2021-01-11 06:07:04 +0100niekvandepas(~niekvande@80-100-16-191.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-01-11 06:08:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 06:08:54 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-01-11 06:12:36 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 240 seconds)
2021-01-11 06:13:31 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-01-11 06:13:38 +0100christo(~chris@81.96.113.213)
2021-01-11 06:14:06 +0100ystael(~ystael@209.6.50.55) (Ping timeout: 256 seconds)
2021-01-11 06:16:29 +0100 <iridescent> could soembody please explain why `(sequence .) . fmap = \f xs -> sequence (fmap f xs)`
2021-01-11 06:17:18 +0100 <glguy> (sequence .) . fmap
2021-01-11 06:17:27 +0100unknown(~unknown@185.204.1.185) (Remote host closed the connection)
2021-01-11 06:17:33 +0100 <glguy> (\f g x -> f (g x)) (sequence .) fmap
2021-01-11 06:17:49 +0100 <glguy> \x -> (sequence .) (fmap x)
2021-01-11 06:17:56 +0100 <glguy> \x -> sequence . fmap x
2021-01-11 06:18:19 +0100 <glguy> err, alpharename: \f -> sequence . fmap f
2021-01-11 06:18:37 +0100 <glguy> \f -> (\a b xs -> a (b xs)) sequence (fmap f)
2021-01-11 06:18:40 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 06:18:51 +0100 <glguy> \f -> \xs -> sequence (fmap f xs)
2021-01-11 06:18:57 +0100 <glguy> \f xs -> sequence (fmap f xs)
2021-01-11 06:22:44 +0100Tops21(~Tobias@dyndsl-091-249-083-248.ewe-ip-backbone.de)
2021-01-11 06:23:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 264 seconds)
2021-01-11 06:24:49 +0100Tops2(~Tobias@dyndsl-095-033-095-004.ewe-ip-backbone.de) (Ping timeout: 260 seconds)
2021-01-11 06:27:52 +0100gonemad3(~gonemad3@s91904426.blix.com)
2021-01-11 06:31:33 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:255c:18d1:c1a9:13be:6f9e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 06:32:57 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net) (Quit: dcbdnl)
2021-01-11 06:32:59 +0100ransom(~c4264035@c-67-176-3-106.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 06:33:38 +0100Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 264 seconds)
2021-01-11 06:34:58 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
2021-01-11 06:35:46 +0100jedws(~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 06:37:32 +0100jedws(~jedws@121.209.139.157)
2021-01-11 06:38:27 +0100jamestmartin(james@jtmar.me) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
2021-01-11 06:39:16 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-01-11 06:42:47 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net)
2021-01-11 06:42:54 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net)
2021-01-11 06:42:56 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net) (Client Quit)
2021-01-11 06:43:14 +0100Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2021-01-11 06:44:05 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 06:45:58 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net) (Client Quit)
2021-01-11 06:48:05 +0100 <maerwald> is there any library that allows to do HTTP pipelining?
2021-01-11 06:48:17 +0100jamestmartin(~james@jtmar.me)
2021-01-11 06:49:00 +0100iridescent(2fe3e53b@047-227-229-059.res.spectrum.com) (Quit: Connection closed)
2021-01-11 06:50:42 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 06:50:48 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 06:54:49 +0100krofe(kevin@gateway/vpn/protonvpn/krofe) (Ping timeout: 265 seconds)
2021-01-11 06:55:08 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 260 seconds)
2021-01-11 06:55:43 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 260 seconds)
2021-01-11 06:56:50 +0100idhugo(~idhugo@80-62-117-97-mobile.dk.customer.tdc.net)
2021-01-11 06:56:55 +0100idhugo(~idhugo@80-62-117-97-mobile.dk.customer.tdc.net) (Remote host closed the connection)
2021-01-11 06:57:16 +0100jamestmartin(~james@jtmar.me) (Quit: ZNC 1.8.2+deb2 - https://znc.in)
2021-01-11 06:58:28 +0100 <ephemient> out of curiosity, why? HTTP pipelining is used approximately never. https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x#http_pipelining
2021-01-11 07:03:21 +0100 <maerwald> that's for browsers
2021-01-11 07:04:19 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2021-01-11 07:05:10 +0100 <ephemient> it is, but non-browser clients tend not to use piplining either, for similar reasons. https://daniel.haxx.se/blog/2019/04/06/curl-says-bye-bye-to-pipelining/
2021-01-11 07:06:11 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2021-01-11 07:06:51 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-01-11 07:06:59 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 07:08:14 +0100 <maerwald> so which http client library does HTTP2 multiplexing by default?
2021-01-11 07:10:52 +0100 <ephemient> there's https://hackage.haskell.org/package/http2-client and I don't know of any others for Haskell
2021-01-11 07:11:26 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 264 seconds)
2021-01-11 07:11:44 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds)
2021-01-11 07:18:49 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-01-11 07:23:35 +0100 <maerwald> and, does it support multiplexing?
2021-01-11 07:29:58 +0100ADG1089__(~aditya@122.163.165.143)
2021-01-11 07:31:45 +0100 <DigitalKiwi> https://github.com/lucasdicioccio/http2-client/issues/16 lol
2021-01-11 07:33:21 +0100 <DigitalKiwi> found that when searching 'pipeline'
2021-01-11 07:34:14 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-01-11 07:37:35 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-01-11 07:37:47 +0100Varis(~Tadas@unaffiliated/varis)
2021-01-11 07:38:53 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0)
2021-01-11 07:40:08 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
2021-01-11 07:40:46 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2021-01-11 07:41:25 +0100 <maerwald> Well, I didn't get much out of this ticket except passive-aggressive comments, lol: https://github.com/snoyberg/http-client/issues/452
2021-01-11 07:43:04 +0100niekvandepas(~niekvande@2001:985:bebc:1:bd2c:61bf:46f:59d0) (Ping timeout: 240 seconds)
2021-01-11 07:45:44 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2021-01-11 07:46:04 +0100 <MarcelineVQ> especially as of this moment
2021-01-11 07:46:52 +0100 <maerwald> lol
2021-01-11 07:47:08 +0100shf(~sheaf@2a01:cb19:80cc:7e00:ed22:5b3a:3fa:a0b7)
2021-01-11 07:49:04 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 246 seconds)
2021-01-11 07:49:31 +0100 <maerwald> was my question that complicated?
2021-01-11 07:50:51 +0100 <maerwald> seems like a problem if we have neither HTTP 1.1 pipelining, nor HTTP 2 multiplexing
2021-01-11 07:51:00 +0100Flonk(~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com) (Ping timeout: 256 seconds)
2021-01-11 07:51:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 07:52:19 +0100phasespace(~sar@89-162-33-21.fiber.signal.no) (Ping timeout: 260 seconds)
2021-01-11 07:54:05 +0100jedws(~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 07:55:01 +0100knupfer(~Thunderbi@200116b82c62e300bcca5bfffe03a624.dip.versatel-1u1.de)
2021-01-11 07:55:03 +0100jedws(~jedws@121.209.139.157)
2021-01-11 07:56:28 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 07:56:37 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-01-11 07:57:25 +0100knupfer(~Thunderbi@200116b82c62e300bcca5bfffe03a624.dip.versatel-1u1.de) (Remote host closed the connection)
2021-01-11 07:57:34 +0100knupfer(~Thunderbi@200116b82c62e3005592499e46851a57.dip.versatel-1u1.de)
2021-01-11 07:57:34 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 08:01:13 +0100 <int-e> maerwald: Well you did ask 5 questions (one trivial (you should share the same manager with concurrent requests...), one that is easy to infer (it keeps track of connections kept alive), another that's easy to infer (no), another that's easy to infer (it reuses connections if a suitable one was kept alive), and one that should be a feature request (you don't), all under a headline that doesn't...
2021-01-11 08:01:14 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 264 seconds)
2021-01-11 08:01:19 +0100 <int-e> ...apply to the package at hand because there is no HTTP pipelining support at all.
2021-01-11 08:01:33 +0100 <int-e> maerwald: So... I'm not surprised that you didn't get a more constructive reply.
2021-01-11 08:07:05 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 08:09:40 +0100Lycurgus(~niemand@cpe-45-46-139-165.buffalo.res.rr.com)
2021-01-11 08:10:00 +0100ome(uid36537@gateway/web/irccloud.com/x-ccqrafxmodzzqrro) (Quit: Connection closed for inactivity)
2021-01-11 08:10:36 +0100Rudd0(~Rudd0@185.189.115.103) (Ping timeout: 240 seconds)
2021-01-11 08:11:41 +0100ericsagnes(~ericsagne@2405:6580:0:5100:5c80:7e91:5436:7bd4) (Ping timeout: 272 seconds)
2021-01-11 08:12:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 264 seconds)
2021-01-11 08:13:24 +0100xff0x(~fox@2001:1a81:53ed:d500:ffc4:2540:c5b7:b45c) (Quit: xff0x)
2021-01-11 08:13:34 +0100xff0x(~xff0x@2001:1a81:53ed:d500:ffc4:2540:c5b7:b45c)
2021-01-11 08:13:35 +0100phasespace(~sar@80-89-47-117.inet.signal.no)
2021-01-11 08:14:51 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 08:19:10 +0100dandart(~Thunderbi@home.dandart.co.uk) (Ping timeout: 246 seconds)
2021-01-11 08:19:17 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 258 seconds)
2021-01-11 08:22:18 +0100aerium(~aerium@51.194.80.91) (Ping timeout: 265 seconds)
2021-01-11 08:23:38 +0100ericsagnes(~ericsagne@2405:6580:0:5100:aa73:cc6a:b6a6:24ce)
2021-01-11 08:24:13 +0100shailangsa(~shailangs@host217-39-45-247.range217-39.btcentralplus.com) (Ping timeout: 264 seconds)
2021-01-11 08:24:23 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2021-01-11 08:26:29 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-01-11 08:29:00 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 08:29:26 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl)
2021-01-11 08:32:24 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 08:32:42 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-01-11 08:33:13 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-01-11 08:33:33 +0100puffnfresh_(~puffnfres@45.76.124.5) (Quit: ZNC 1.8.0 - https://znc.in)
2021-01-11 08:35:37 +0100dandart(~Thunderbi@home.dandart.co.uk)
2021-01-11 08:35:56 +0100elcaro(~anonymous@45.32.191.75) (Ping timeout: 240 seconds)
2021-01-11 08:36:01 +0100kuribas(~user@ptr-25vy0i7ug01ndhtx56u.18120a2.ip6.access.telenet.be)
2021-01-11 08:36:02 +0100BIG_JIMMY_D(~jim@108.61.185.76) (Ping timeout: 264 seconds)
2021-01-11 08:36:22 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 08:37:01 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 272 seconds)
2021-01-11 08:37:04 +0100elcaro(~anonymous@45.32.191.75)
2021-01-11 08:37:09 +0100puffnfresh_(~puffnfres@45.76.124.5)
2021-01-11 08:37:21 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-01-11 08:37:35 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 08:37:36 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2021-01-11 08:39:40 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 08:40:39 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 08:41:16 +0100BIG_JIMMY_D(~jim@108.61.185.76)
2021-01-11 08:41:44 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com)
2021-01-11 08:42:03 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds)
2021-01-11 08:42:29 +0100sord937(~sord937@gateway/tor-sasl/sord937)
2021-01-11 08:44:47 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 260 seconds)
2021-01-11 08:46:07 +0100shatriff(~vitaliish@176-52-216-242.irishtelecom.com) (Ping timeout: 246 seconds)
2021-01-11 08:46:28 +0100cheater(~user@unaffiliated/cheater) (Ping timeout: 246 seconds)
2021-01-11 08:46:50 +0100petersen(~petersen@redhat/juhp) (Quit: petersen)
2021-01-11 08:48:23 +0100livvy(~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds)
2021-01-11 08:48:24 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 265 seconds)
2021-01-11 08:52:03 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds)
2021-01-11 08:52:45 +0100pera(pera@gateway/vpn/mullvad/pera)
2021-01-11 08:53:02 +0100petersen(~petersen@redhat/juhp)
2021-01-11 08:55:57 +0100petersen(~petersen@redhat/juhp) (Remote host closed the connection)
2021-01-11 08:56:25 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 08:56:36 +0100petersen(~petersen@redhat/juhp)
2021-01-11 08:58:18 +0100cfricke(~cfricke@unaffiliated/cfricke)
2021-01-11 09:00:54 +0100petersen(~petersen@redhat/juhp) (Client Quit)
2021-01-11 09:01:42 +0100petersen(~petersen@redhat/juhp)
2021-01-11 09:02:55 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-01-11 09:03:24 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 240 seconds)
2021-01-11 09:03:47 +0100aerium(~aerium@51.194.80.91)
2021-01-11 09:06:59 +0100jespada(~jespada@90.254.245.49)
2021-01-11 09:07:36 +0100petersen_(~petersen@redhat/juhp)
2021-01-11 09:07:40 +0100dlam(~dlam@dlam.me)
2021-01-11 09:09:13 +0100petersen(~petersen@redhat/juhp) (Ping timeout: 264 seconds)
2021-01-11 09:09:14 +0100petersen_petersen
2021-01-11 09:13:53 +0100ubert(~Thunderbi@p200300ecdf1ee049e6b318fffe838f33.dip0.t-ipconnect.de)
2021-01-11 09:15:51 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 09:19:05 +0100cheater(~user@unaffiliated/cheater)
2021-01-11 09:20:26 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 264 seconds)
2021-01-11 09:20:28 +0100 <nshepperd2> i'm not a fan of documentation that tells you what to do
2021-01-11 09:20:48 +0100 <nshepperd2> "you should share a Manager" doesn't really tell you what happens if you do share a Manager
2021-01-11 09:21:56 +0100deu(de@uio.re) (Ping timeout: 240 seconds)
2021-01-11 09:23:40 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
2021-01-11 09:24:36 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 240 seconds)
2021-01-11 09:25:08 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 265 seconds)
2021-01-11 09:25:47 +0100 <dminuoso> nshepperd2: "Keeps track of open connections for keep-alive."
2021-01-11 09:25:57 +0100 <dminuoso> To me, it's rather obvious.. so I dont know.
2021-01-11 09:26:16 +0100 <nshepperd2> and what does that do
2021-01-11 09:26:37 +0100 <dminuoso> It allows for persistent connections
2021-01-11 09:27:06 +0100 <nshepperd2> persistent how
2021-01-11 09:27:52 +0100 <dminuoso> nshepperd2: In HTTP persistent connections/keep-alive refers to re-using an existing TCP connection for subsequent requests.
2021-01-11 09:28:33 +0100 <dminuoso> The notion of pipelining/multiplexing (which maerwald referred to earlier) takes this to the next level, where you can pump out multiple HTTP requests over the same TCP connection before you have gotten back any response yet.
2021-01-11 09:28:59 +0100 <dminuoso> Though, admittedly, the documentation should be a bit more differentiated than that.
2021-01-11 09:29:24 +0100 <dminuoso> There's legit reasons *not* to share keep-alive'd connections across multiple threads.
2021-01-11 09:29:26 +0100 <nshepperd2> i've sort of inferred from reading the code that what happens when you make a request is that it either: reuses a previous idle connection if it's still alive; or opens a new connection if there aren't any currently idle connections
2021-01-11 09:29:41 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 09:29:43 +0100 <dminuoso> Right. I suppose it's obvious if you know what keep-alive is
2021-01-11 09:30:35 +0100 <dminuoso> If, for example, the remote server is slow to respond but supports concurrent connections, and you're bottlenecked on the slow responses, then sharing a manager would do no good.
2021-01-11 09:30:40 +0100pera(pera@gateway/vpn/mullvad/pera) (Quit: leaving)
2021-01-11 09:30:50 +0100 <dminuoso> But if the remote server answers quickly, and most of the time you just have idle connections, then sharing a manager is worthwhile
2021-01-11 09:31:08 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:255c:18d1:c1a9:13be:6f9e)
2021-01-11 09:32:14 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl) (Ping timeout: 272 seconds)
2021-01-11 09:32:30 +0100gonemad3(~gonemad3@s91904426.blix.com) (Remote host closed the connection)
2021-01-11 09:32:40 +0100drbean(~drbean@TC210-63-209-203.static.apol.com.tw) (Ping timeout: 246 seconds)
2021-01-11 09:33:23 +0100stree(~stree@50-108-70-224.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2021-01-11 09:33:39 +0100jedws(~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 09:33:41 +0100stree(~stree@50-108-70-224.adr01.mskg.mi.frontiernet.net)
2021-01-11 09:34:07 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be)
2021-01-11 09:35:07 +0100 <nshepperd2> makes sense
2021-01-11 09:36:12 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
2021-01-11 09:37:44 +0100chele(~chele@ip5b40237d.dynamic.kabel-deutschland.de)
2021-01-11 09:38:53 +0100coot(~coot@37.30.56.46.nat.umts.dynamic.t-mobile.pl)
2021-01-11 09:39:22 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net)
2021-01-11 09:39:50 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 09:40:10 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 09:40:12 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 09:42:11 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2021-01-11 09:42:11 +0100srk(~sorki@gateway/tor-sasl/sorki)
2021-01-11 09:43:24 +0100kritzefitz(~kritzefit@212.86.56.80)
2021-01-11 09:43:28 +0100kritzefitz(~kritzefit@212.86.56.80) (Client Quit)
2021-01-11 09:44:24 +0100Stanley00(~stanley00@unaffiliated/stanley00) ()
2021-01-11 09:44:48 +0100cfricke(~cfricke@unaffiliated/cfricke)
2021-01-11 09:48:15 +0100fendor(~fendor@91.141.0.240.wireless.dyn.drei.com)
2021-01-11 09:48:56 +0100oerjan(~oerjan@178.162.209.171)
2021-01-11 09:50:36 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2021-01-11 09:53:16 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Remote host closed the connection)
2021-01-11 09:53:16 +0100srk(~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection)
2021-01-11 09:53:34 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2021-01-11 09:53:37 +0100srk(~sorki@gateway/tor-sasl/sorki)
2021-01-11 09:57:21 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 09:57:51 +0100 <kuribas> why do you need to buffer log output, like fast-logger does, when the file system has a buffer of it's own?
2021-01-11 10:01:01 +0100 <maerwald> int-e: "Manager *just* keeps connections alive and does nothing else. We don't support HTTP pipelining at all atm and HTTP 2 neither." -- 2 sentences that would have explained everything :)
2021-01-11 10:01:27 +0100 <maerwald> maybe I'm expecting too much
2021-01-11 10:02:11 +0100m0rphism(~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
2021-01-11 10:03:29 +0100 <maerwald> but yeah, you can respond with counter questions instead and then insult the issue author to not have read the wikipedia article :p
2021-01-11 10:04:17 +0100Lycurgus(~niemand@cpe-45-46-139-165.buffalo.res.rr.com) (Quit: Exeunt)
2021-01-11 10:05:14 +0100 <maerwald> And then we're surprised haskell community doesn't have such a good reputation elsewhere
2021-01-11 10:05:22 +0100 <dminuoso> kuribas: Because system calls are still expensive?
2021-01-11 10:06:22 +0100 <kuribas> could be...
2021-01-11 10:06:46 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-01-11 10:07:06 +0100 <dminuoso> Note, that a syscall makes you pay for not only the CPU dump/restore, but it also acts as a cooperative yield
2021-01-11 10:07:16 +0100 <dminuoso> (At least most syscalls implicitly call the scheduler)
2021-01-11 10:07:28 +0100thunderrd(~thunderrd@183.182.115.7) (Quit: If it wasn't written down it didn't happen...)
2021-01-11 10:07:46 +0100 <dminuoso> On linux anyway
2021-01-11 10:08:00 +0100thunderrd(~thunderrd@183.182.115.7)
2021-01-11 10:15:33 +0100sw1nn(~sw1nn@2a00:23c6:2385:3a00:8a08:ba4e:209b:1d11) (Ping timeout: 268 seconds)
2021-01-11 10:16:23 +0100xff0x(~xff0x@2001:1a81:53ed:d500:ffc4:2540:c5b7:b45c) (Ping timeout: 260 seconds)
2021-01-11 10:16:47 +0100xff0x(~xff0x@port-92-193-253-100.dynamic.as20676.net)
2021-01-11 10:17:07 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 246 seconds)
2021-01-11 10:17:12 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 256 seconds)
2021-01-11 10:17:20 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-01-11 10:17:25 +0100lambda-11235(~lambda-11@2600:1700:7c70:4600:2560:f230:a66e:db8d) (Quit: Bye)
2021-01-11 10:17:51 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-afbyogyvilwdnzfx) (Quit: Connection closed for inactivity)
2021-01-11 10:18:07 +0100ArConan(~ArConan@52.184.35.77)
2021-01-11 10:20:19 +0100Gurkenglas_(~Gurkengla@unaffiliated/gurkenglas)
2021-01-11 10:20:36 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-01-11 10:22:19 +0100edrx(~Eduardo@2804:56c:d2ef:cf00:369c:6c3f:6681:423e) ("Killed buffer")
2021-01-11 10:22:58 +0100jedws(~jedws@121.209.139.157)
2021-01-11 10:24:02 +0100Up39(5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net)
2021-01-11 10:24:19 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
2021-01-11 10:24:20 +0100p-core1(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
2021-01-11 10:24:45 +0100 <Up39> This is my naive solution to handling DB query results in hasql. Is there anything wrong with it?
2021-01-11 10:24:46 +0100 <Up39> handleQueryResult :: (a -> b) -> (() -> b) -> (Session.QueryError -> b) -> Either Session.QueryError (Maybe a) -> b
2021-01-11 10:24:47 +0100 <Up39> handleQueryResult _ _ errorFn (Left qe) = errorFn qe
2021-01-11 10:24:47 +0100 <Up39> handleQueryResult _ missingFn _ (Right Nothing) = missingFn ()
2021-01-11 10:24:48 +0100 <Up39> handleQueryResult successFn _ _ (Right (Just x)) = successFn x
2021-01-11 10:26:31 +0100misak(~arconan@115.209.116.183)
2021-01-11 10:26:40 +0100p-core1p-core
2021-01-11 10:27:12 +0100 <dminuoso> Up39: Can you perhaps point out what you think would be wrong with it?
2021-01-11 10:27:20 +0100 <dminuoso> Are you wondering whether such a function would be idiomatic Haskell?
2021-01-11 10:27:44 +0100 <dminuoso> The argument of type `(() -> b)` is silly, in my opinion. Just make it `b`
2021-01-11 10:28:10 +0100sw1nn(~sw1nn@2a00:23c6:2385:3a00:f123:6af9:d5d5:5175)
2021-01-11 10:28:21 +0100ArConan(~ArConan@52.184.35.77) (Remote host closed the connection)
2021-01-11 10:28:26 +0100 <Up39> dminuoso: Yes, that's basically what I'm wondering. Because there always seems to be a different solution to what I come up with
2021-01-11 10:28:38 +0100 <Up39> oh right, it can be b beause of lazy eval
2021-01-11 10:28:41 +0100 <ij> () -> b might be remnant of impure language callback idea
2021-01-11 10:28:48 +0100 <Up39> yep!
2021-01-11 10:28:56 +0100 <Up39> or non-lazy at least
2021-01-11 10:29:13 +0100 <dminuoso> I guess it's usually a mix of both
2021-01-11 10:29:25 +0100 <dminuoso> It's very JavaScriptesque
2021-01-11 10:29:28 +0100 <Up39> yes
2021-01-11 10:30:02 +0100 <dminuoso> c.f.:
2021-01-11 10:30:03 +0100 <dminuoso> % :t maybe
2021-01-11 10:30:03 +0100 <yahb> dminuoso: b -> (a -> b) -> Prelude.Maybe a -> b
2021-01-11 10:30:28 +0100 <dminuoso> Your function is, roughly, a combination of `maybe` and `either`
2021-01-11 10:31:28 +0100 <dminuoso> % :t \x y z -> either (maybe y x) z
2021-01-11 10:31:28 +0100 <yahb> dminuoso: (a -> c) -> c -> (b -> c) -> Either (Prelude.Maybe a) b -> c
2021-01-11 10:32:14 +0100 <Up39> hah, year, that's the sort of thing I thought I could be missing.
2021-01-11 10:32:28 +0100 <Up39> yeah*
2021-01-11 10:33:52 +0100 <kuribas> Up39: () -> b is used in non-pure languages because there can be an associated side-effect, but in haskell that's not possible.
2021-01-11 10:34:42 +0100 <dminuoso> % :t unsafePerformIO
2021-01-11 10:34:42 +0100 <yahb> dminuoso: IO a -> a
2021-01-11 10:34:46 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-01-11 10:34:57 +0100 <dminuoso> It rather is about the lack of lazyness
2021-01-11 10:36:51 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 10:37:05 +0100cgfbee(~bot@oc1.itim-cj.ro) (Ping timeout: 240 seconds)
2021-01-11 10:40:08 +0100bitmagie(~Thunderbi@200116b806643e00d1c9a335a3f0c811.dip.versatel-1u1.de)
2021-01-11 10:41:28 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net) (Remote host closed the connection)
2021-01-11 10:42:38 +0100ubert(~Thunderbi@p200300ecdf1ee049e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-01-11 10:44:55 +0100cgfbee(~bot@oc1.itim-cj.ro)
2021-01-11 10:47:38 +0100bitmagie(~Thunderbi@200116b806643e00d1c9a335a3f0c811.dip.versatel-1u1.de) (Quit: bitmagie)
2021-01-11 10:50:46 +0100jmchael(~jmchael@87.112.235.234)
2021-01-11 10:51:17 +0100DavidEichmann(~david@98.27.93.209.dyn.plus.net)
2021-01-11 10:51:43 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2021-01-11 10:53:43 +0100hekkaidekapus](~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2021-01-11 10:54:52 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 10:55:40 +0100cgfbee(~bot@oc1.itim-cj.ro) (Excess Flood)
2021-01-11 10:57:45 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 10:57:56 +0100cgfbee(~bot@oc1.itim-cj.ro)
2021-01-11 10:59:05 +0100charukiewicz(~quassel@irouteince04.i.subnet.rcn.com) (Quit: charukiewicz)
2021-01-11 11:00:00 +0100ukari(~ukari@unaffiliated/ukari)
2021-01-11 11:00:00 +0100Alleria(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com)
2021-01-11 11:00:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 264 seconds)
2021-01-11 11:00:24 +0100AlleriaGuest24594
2021-01-11 11:02:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 264 seconds)
2021-01-11 11:04:50 +0100Guest24594(~textual@2603-7000-3040-0000-ad3e-16ae-7559-7e68.res6.spectrum.com) (Ping timeout: 264 seconds)
2021-01-11 11:04:59 +0100solarliner(~solarline@243.81.10.109.rev.sfr.net)
2021-01-11 11:05:42 +0100 <Up39> how come pure/return works as an identity function if you don't specify the type of f in pure :: Applicative f => a -> f a ?
2021-01-11 11:05:49 +0100 <kuribas> dminuoso: I was conveniently ignoring unsafePerformIO
2021-01-11 11:05:54 +0100seveg(~gabriel@2a02-ab04-0249-8d00-3603-db93-c217-257c.dynamic.v6.chello.sk) (Quit: WeeChat 3.0)
2021-01-11 11:06:18 +0100 <dminuoso> Up39: What do you mean by that question exactly?
2021-01-11 11:06:50 +0100 <Up39> dminuoso: in ghci if I run (pure 1) it returns 1
2021-01-11 11:07:03 +0100 <Up39> I would have expected a type error
2021-01-11 11:07:19 +0100 <kuribas> dminuoso: lazyness is not even necessary for that to hold, except for bottom values.
2021-01-11 11:07:20 +0100 <dminuoso> Up39: Ah. So in GHCi it defaults to picking `f ~ IO` in this
2021-01-11 11:07:53 +0100lawid(~quassel@dslb-090-186-127-244.090.186.pools.vodafone-ip.de)
2021-01-11 11:07:57 +0100 <Up39> dminuoso: Ah, that makes sense!
2021-01-11 11:08:32 +0100 <dminuoso> Up39: This is not the behavior for `pure` in general, just for naked top level expressions.
2021-01-11 11:09:24 +0100Rudd0(~Rudd0@185.189.115.108)
2021-01-11 11:09:43 +0100 <kuribas> dminuoso: note that using unsafePerformIO and a () -> a function is not the same as an imperative callback, as haskell isn't required to perform the side-effect any time.
2021-01-11 11:09:45 +0100 <dminuoso> That is, the repl you're in is assumed to be a sort-of do-notation for IO
2021-01-11 11:10:39 +0100 <kuribas> no, the repl detects when it is in IO, then executes the action.
2021-01-11 11:10:42 +0100 <dminuoso> Which is why you can simply write something like `Prelude> f <- readFile "foo"`
2021-01-11 11:10:56 +0100 <dminuoso> Or just `Prelude> putStrLn "foo"`
2021-01-11 11:11:08 +0100 <kuribas> the repl it's is not in do notation
2021-01-11 11:12:01 +0100 <kuribas> otherwise pure functions wouldn't work...
2021-01-11 11:12:43 +0100 <kuribas> hmm, perhaps they do...
2021-01-11 11:12:49 +0100 <kuribas> > do 1 + 1
2021-01-11 11:12:49 +0100 <lortabac> kuribas: the REPL used to require "let" for all definitions
2021-01-11 11:12:51 +0100 <lambdabot> 2
2021-01-11 11:13:05 +0100esp32_prog(yoann@gateway/vpn/protonvpn/esp32prog/x-46565127)
2021-01-11 11:13:08 +0100 <lortabac> in fact you can still used "let"
2021-01-11 11:13:08 +0100 <kuribas> lortabac: yeah I remember
2021-01-11 11:14:49 +0100 <dminuoso> kuribas: Note I said "sort-of".
2021-01-11 11:18:56 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 11:21:08 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection)
2021-01-11 11:21:55 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
2021-01-11 11:22:13 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
2021-01-11 11:24:40 +0100Graypup_(Graypup@lfcode.ca) (Quit: ZNC 1.6.1 - http://znc.in)
2021-01-11 11:25:17 +0100Graypup_(Graypup@lfcode.ca)
2021-01-11 11:25:29 +0100Franciman(~francesco@host-82-48-174-127.retail.telecomitalia.it)
2021-01-11 11:25:30 +0100Alleria__(~textual@mskresolve-a.mskcc.org)
2021-01-11 11:31:21 +0100acidjnk_new(~acidjnk@p200300d0c704e7934412496f05d02b0d.dip0.t-ipconnect.de)
2021-01-11 11:31:25 +0100Lowl3v3l(~Lowl3v3l@dslb-084-062-101-233.084.062.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2021-01-11 11:32:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Quit: Reconnecting)
2021-01-11 11:32:06 +0100comerijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 11:32:35 +0100jedws(~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 11:32:39 +0100comerijnmerijn
2021-01-11 11:33:38 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 264 seconds)
2021-01-11 11:35:27 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com) (Ping timeout: 260 seconds)
2021-01-11 11:36:13 +0100ulidtko(~ulidtko@193.111.48.79)
2021-01-11 11:37:06 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-01-11 11:38:03 +0100ulidtko|k(~ulidtko@194.54.80.38)
2021-01-11 11:39:15 +0100berberman_(~berberman@unaffiliated/berberman)
2021-01-11 11:39:38 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
2021-01-11 11:40:25 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2021-01-11 11:40:45 +0100berberman_(~berberman@unaffiliated/berberman) (Max SendQ exceeded)
2021-01-11 11:40:57 +0100ulidtko(~ulidtko@193.111.48.79) (Ping timeout: 265 seconds)
2021-01-11 11:41:13 +0100berberman(~berberman@unaffiliated/berberman)
2021-01-11 11:41:29 +0100Ishutin_(~Ishutin@92-249-185-150.pool.digikabel.hu) (Ping timeout: 256 seconds)
2021-01-11 11:41:43 +0100amiri(~amiri@cpe-76-91-154-9.socal.res.rr.com)
2021-01-11 11:45:58 +0100 <gentauro> top-level functions in modules don't need `let`. Why not propagate that everywhere?
2021-01-11 11:46:21 +0100thc202(~thc202@unaffiliated/thc202)
2021-01-11 11:46:26 +0100 <gentauro> `let-it-go` (badum tsh)
2021-01-11 11:46:27 +0100 <gentauro> xD
2021-01-11 11:48:37 +0100Ishutin(~Ishutin@92-249-179-46.pool.digikabel.hu)
2021-01-11 11:49:45 +0100svc0[m](svc0matrix@gateway/shell/matrix.org/x-cgayodjircveqtkr)
2021-01-11 11:51:21 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net)
2021-01-11 11:54:28 +0100son0p(~son0p@181.58.39.182)
2021-01-11 11:56:28 +0100 <ski> propagate it how ?
2021-01-11 11:56:48 +0100 <ski> they already don't need `let' inside other `where's
2021-01-11 11:58:07 +0100 <dminuoso> I tried to think of a way where we could describe a module as a `let bindings = ... in ModSpec { ... }`
2021-01-11 11:58:21 +0100 <dminuoso> But all of that crumbled together when thinking of typeclasses.
2021-01-11 11:58:40 +0100 <ski> why ?
2021-01-11 11:59:04 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 11:59:36 +0100 <dminuoso> Oh, I was thinking of just `let decls = ... in ModSpec { exportList = ...; }`
2021-01-11 11:59:51 +0100 <int-e> gentauro: a = b = 42; b:a
2021-01-11 11:59:57 +0100 <int-e> gentauro: have fun parsing
2021-01-11 11:59:59 +0100 <dminuoso> But that doesn't work, because a module would rather need a full blown declaration field (since typeclass instances are part of the public interface)
2021-01-11 12:00:31 +0100 <int-e> let/in seems essential for sanity
2021-01-11 12:00:33 +0100guest111`(~user@49.5.6.87)
2021-01-11 12:00:48 +0100guest111(~user@49.5.6.87) (Read error: Connection reset by peer)
2021-01-11 12:00:53 +0100 <dminuoso> Even nix has let/in, presumably for the same reasons
2021-01-11 12:02:00 +0100ericsagnes(~ericsagne@2405:6580:0:5100:aa73:cc6a:b6a6:24ce) (Ping timeout: 258 seconds)
2021-01-11 12:02:23 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2021-01-11 12:03:14 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 12:03:38 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 264 seconds)
2021-01-11 12:08:23 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net)
2021-01-11 12:09:03 +0100__monty__(~toonn@unaffiliated/toonn)
2021-01-11 12:11:06 +0100 <ukari> For data Foo = Foo {getX::Int, getY::Int} deriving (Storable), how to write a magic function to get all field label functions of (undefined::Foo) to calculate it's offset like cpp offsetof?
2021-01-11 12:11:12 +0100seveg(~gabriel@188-167-252-202.dynamic.chello.sk)
2021-01-11 12:11:37 +0100 <merijn> Define "offset"
2021-01-11 12:11:59 +0100 <merijn> ukari: If you mean in terms of memory, you can't, because records don't have a defined memory layout
2021-01-11 12:12:06 +0100 <merijn> In fact *nothing* has a defined memory layout
2021-01-11 12:12:09 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2021-01-11 12:13:28 +0100 <merijn> also, how are you deriving Storable, because that's not derivable
2021-01-11 12:13:40 +0100christo(~chris@81.96.113.213)
2021-01-11 12:13:46 +0100boxscape(4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
2021-01-11 12:13:49 +0100 <ukari> I could calculate offset manually by stuffs like `sizeOf . getX $ (undefined::Foo)`
2021-01-11 12:14:15 +0100ericsagnes(~ericsagne@2405:6580:0:5100:7e9d:7180:3ecf:ff43)
2021-01-11 12:14:27 +0100 <ukari> there is a GStroable plugin to help deriving Stroable
2021-01-11 12:14:41 +0100 <merijn> Well, that sounds like a downright bad idea
2021-01-11 12:15:43 +0100 <merijn> If there's one thing where I wouldn't want weird magic it's "pointer twiddling"
2021-01-11 12:20:09 +0100 <ukari> does it mean it's better to manually calculate offset for Foo, Foo1, Foo2 ... every time? like `fooXOffset = 0, fooYOffset = 0 + sizeOf . getY $ (undefined::Foo)`
2021-01-11 12:21:15 +0100cmcma20(~cmcma20@l37-192-2-125.novotelecom.ru)
2021-01-11 12:21:53 +0100 <__monty__> Why do you need the offsets on the haskell side of things?
2021-01-11 12:22:22 +0100 <misak> > quicksort ::(Ord a) =>[a]->[a]
2021-01-11 12:22:24 +0100 <lambdabot> error:
2021-01-11 12:22:25 +0100 <lambdabot> Variable not in scope: quicksort :: [a1] -> [a1]
2021-01-11 12:22:41 +0100 <misak> why that?
2021-01-11 12:22:46 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 246 seconds)
2021-01-11 12:23:08 +0100 <ukari> vertexAttributeDescriptions in vulkan need it
2021-01-11 12:23:16 +0100 <gentauro> 11:59 < int-e> gentauro: a = b = 42; b:a
2021-01-11 12:23:31 +0100 <misak> i copy the code in the textbook
2021-01-11 12:23:34 +0100 <gentauro> let a = let b = 42 in b?
2021-01-11 12:23:57 +0100 <misak> but error
2021-01-11 12:24:13 +0100 <gentauro> let a = let b = 42 in b:a? (forgot the `a`)
2021-01-11 12:24:18 +0100 <__monty__> @hoogle quicksort
2021-01-11 12:24:19 +0100 <lambdabot> Data.Massiv.Array quicksort :: (Mutable r Ix1 e, Ord e) => Array r Ix1 e -> Array r Ix1 e
2021-01-11 12:24:19 +0100 <lambdabot> Data.Massiv.Array.Mutable.Algorithms quicksortM_ :: (Ord e, Mutable r Ix1 e, PrimMonad m) => Scheduler m () -> MArray (PrimState m) r Ix1 e -> m ()
2021-01-11 12:24:28 +0100 <__monty__> @hoogle sort
2021-01-11 12:24:28 +0100 <lambdabot> Data.List sort :: Ord a => [a] -> [a]
2021-01-11 12:24:28 +0100 <lambdabot> Data.List.NonEmpty sort :: Ord a => NonEmpty a -> NonEmpty a
2021-01-11 12:24:28 +0100 <lambdabot> GHC.OldList sort :: Ord a => [a] -> [a]
2021-01-11 12:24:45 +0100 <__monty__> misak: Maybe you're looking for `sort` instead?
2021-01-11 12:24:52 +0100 <int-e> gentauro: which I find far more readable
2021-01-11 12:25:06 +0100 <misak> >let quicksort' :: (Ord a) => [a] -> [a]
2021-01-11 12:25:07 +0100 <__monty__> misak: Otherwise I suspect the quicksort function was defined earlier in the book.
2021-01-11 12:25:45 +0100 <__monty__> Actually, since you're providing a type signature. Do you intend to define the function or use it?
2021-01-11 12:26:17 +0100 <int-e> gentauro: But maybe you only suggested this for sake of the pun?
2021-01-11 12:27:06 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Remote host closed the connection)
2021-01-11 12:27:20 +0100 <misak> i want to define a function
2021-01-11 12:27:26 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 12:27:43 +0100 <__monty__> misak: Are you trying to do so in a file or in GHCi?
2021-01-11 12:28:09 +0100 <misak> <__monty__:ghci
2021-01-11 12:28:14 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 260 seconds)
2021-01-11 12:28:34 +0100 <misak> although i use the function name as others
2021-01-11 12:28:37 +0100 <__monty__> misak: Start multi-line input with :{ and end it with :}
2021-01-11 12:29:09 +0100revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2021-01-11 12:29:17 +0100 <__monty__> GHCi expects it can evaluate line by line unless you use those.
2021-01-11 12:29:34 +0100 <misak> my compliler told me'The type signature for ‘quicksort'’ lacks an accompanying binding'
2021-01-11 12:30:12 +0100 <__monty__> Yes, you have to define the function. Can't have a type signature by itself.
2021-01-11 12:30:34 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d)
2021-01-11 12:31:13 +0100 <misak> but how to rule the type of function in ghci?
2021-01-11 12:32:06 +0100 <__monty__> What do you mean?
2021-01-11 12:34:02 +0100 <ski> misak : either do what __monty__ said, or write both the type signature and the defining equation(s) in a single interactor command, separated by `;'s
2021-01-11 12:34:09 +0100 <misak> _monty_:do i need to declare my function in ghci?
2021-01-11 12:34:17 +0100 <ski> no
2021-01-11 12:34:28 +0100 <cmcma20> !paste
2021-01-11 12:34:33 +0100 <ski> you could define it in a source file, and load that, instead
2021-01-11 12:34:35 +0100 <__monty__> @where paste
2021-01-11 12:34:36 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
2021-01-11 12:34:40 +0100 <cmcma20> @where paste
2021-01-11 12:34:41 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
2021-01-11 12:35:16 +0100seveg(~gabriel@188-167-252-202.dynamic.chello.sk) (Ping timeout: 272 seconds)
2021-01-11 12:35:53 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 12:36:46 +0100 <cmcma20> https://paste.tomsmeding.com/M6sePssO I'm deeply stuck on implementing this function though it's a nobrainer with deptypes. Can you enlighten me?
2021-01-11 12:37:02 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 12:37:39 +0100 <ski> how's `Fin' defined ?
2021-01-11 12:38:00 +0100 <cmcma20> it's from Data.Fin module
2021-01-11 12:38:11 +0100 <ski> package ?
2021-01-11 12:38:17 +0100 <cmcma20> package fin
2021-01-11 12:38:40 +0100 <cmcma20> it's indexed by Nat, has two usual suspects as constructors
2021-01-11 12:38:48 +0100 <ski> pattern-match ?
2021-01-11 12:39:12 +0100 <cmcma20> how to pattern match on k?
2021-01-11 12:39:25 +0100 <ski> don't
2021-01-11 12:40:12 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2021-01-11 12:40:18 +0100 <__monty__> cmcma20: You should be able to simply pattern match on Fin's constructors.
2021-01-11 12:40:48 +0100 <cmcma20> only if k ~ 'S n
2021-01-11 12:41:04 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 240 seconds)
2021-01-11 12:41:09 +0100 <cmcma20> if k ~ 'Z this function should return Nothing as there are no values of Fin 'Z
2021-01-11 12:41:12 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 12:41:13 +0100 <__monty__> Don't think so, cause your input type is `Fin ('S k)`.
2021-01-11 12:41:13 +0100deu(de@uio.re)
2021-01-11 12:41:35 +0100 <__monty__> strengthen Z = Nothing
2021-01-11 12:42:12 +0100 <cmcma20> it would be too easy. If k ~ 'S n I wanna actually return Just Z
2021-01-11 12:42:45 +0100 <ski> @let data Nat = Z | S Nat deriving Show
2021-01-11 12:42:46 +0100 <lambdabot> Defined.
2021-01-11 12:42:50 +0100 <__monty__> Too easy?
2021-01-11 12:42:53 +0100 <ski> @let data Fin (n :: Nat) where FZ :: Fin ('S n); FS :: Fin n -> Fin ('S n)
2021-01-11 12:42:54 +0100 <lambdabot> Defined.
2021-01-11 12:43:30 +0100 <ski> @let strengthen :: Fin ('S n) -> Maybe (Fin n); strengthen FZ = Nothing; strengthen (FS i) = Just i
2021-01-11 12:43:31 +0100 <lambdabot> Defined.
2021-01-11 12:43:43 +0100 <int-e> AIUI, you can't pattern match of k, and for a good reason: it'll be erased at runtime.
2021-01-11 12:43:46 +0100drbean(~drbean@TC210-63-209-211.static.apol.com.tw)
2021-01-11 12:43:59 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 244 seconds)
2021-01-11 12:44:30 +0100 <cmcma20> yes it will be
2021-01-11 12:44:37 +0100 <cmcma20> but have a look at this idris snippet
2021-01-11 12:44:38 +0100 <cmcma20> https://paste.tomsmeding.com/ddAMppk6
2021-01-11 12:45:00 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 12:45:01 +0100 <cmcma20> it captures the intended semantics
2021-01-11 12:45:06 +0100 <int-e> So, no you can't have the code distinguish between k ~ 'S n and k ~ Z on this level.
2021-01-11 12:45:32 +0100 <boxscape> if you really do have to pattern match on k to make this work you might have to use singletons
2021-01-11 12:45:52 +0100 <int-e> And I hope this doesn't change
2021-01-11 12:46:11 +0100 <cmcma20> don't you want -XDependentTypes?
2021-01-11 12:46:14 +0100 <int-e> because reliable type erasure is too important to lose.
2021-01-11 12:46:17 +0100 <boxscape> int-e Richard Eisenbergs plan is very much for it to not change
2021-01-11 12:46:40 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 272 seconds)
2021-01-11 12:46:41 +0100 <boxscape> the plan is to be able to decide for each type parameter whether it's relevant and not erased or irrelevant (as all are currently) and erased
2021-01-11 12:46:47 +0100 <gentauro> 12:24 < int-e> gentauro: which I find far more readable
2021-01-11 12:46:48 +0100 <boxscape> manually
2021-01-11 12:46:49 +0100 <__monty__> Recurse a single level (kinda the function obv needs to change), if that returns Nothing, return Just Z?
2021-01-11 12:47:08 +0100 <gentauro> int-e: the peeps from F# removed the `in` in `let binding`
2021-01-11 12:47:26 +0100 <gentauro> I (less) verbose stuff better
2021-01-11 12:47:26 +0100 <gentauro> :)
2021-01-11 12:47:34 +0100 <int-e> gentauro: tbf Haskell did that for `do` blocks already
2021-01-11 12:47:44 +0100 <gentauro> probably also the reason I use `where …` more than `let …`
2021-01-11 12:48:11 +0100 <cmcma20> type erasure is possible with deptypes, just use QTT
2021-01-11 12:48:17 +0100 <int-e> Oh I do use `where` a lot. But I would hate for the keyword to not be there.
2021-01-11 12:48:55 +0100 <cmcma20> boxscape: yes, or manually annotate relevance
2021-01-11 12:49:13 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 12:49:22 +0100 <ski> cmcma20 : matching on a value of type `Fin n', you'll learn what shape `n' is. you don't have to know that `n' is of the right shape, before being able to match on the corresponding data constructors
2021-01-11 12:50:48 +0100 <int-e> ski: FZ :: Fin (S n) <-- you learn nothing about n here
2021-01-11 12:51:00 +0100 <int-e> Or at least, not enough.
2021-01-11 12:51:19 +0100 <ski> that `FZ' had type `Fin (S n)', not `Fin n'
2021-01-11 12:52:47 +0100 <cmcma20> it still doesn't allow you to construct a meaningful result
2021-01-11 12:53:08 +0100 <int-e> ski: But you can't decide whether FZ :: Fin n, without inspecting n (which a dependently typed language could do)
2021-01-11 12:53:37 +0100 <int-e> (And Haskell, at this point, can't)
2021-01-11 12:53:48 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 244 seconds)
2021-01-11 12:54:16 +0100 <misak> @where paste
2021-01-11 12:54:16 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com
2021-01-11 12:54:23 +0100 <boxscape> well, you sort of can if you use a Nat singleton
2021-01-11 12:56:43 +0100 <int-e> boxscape: You still won't be pattern matching on n. You'll be pattern matching a value that happens to reflect the type (which relation you can guarantee through the type system).
2021-01-11 12:57:07 +0100 <boxscape> sure, but you get the same use out of it, at least
2021-01-11 12:58:03 +0100 <cmcma20> the same use but verbosity is enormous
2021-01-11 12:58:05 +0100 <ski> int-e : i don't know what you mean by "decide", there. `FZ :: Fin n' is not something that you may consider to check, it's something you're given
2021-01-11 12:58:26 +0100 <boxscape> cmcma20 yes, hence the push for proper dependent types in haskell :)
2021-01-11 12:58:55 +0100 <ski> % data Nat = Z | S Nat deriving Show
2021-01-11 12:58:55 +0100 <yahb> ski:
2021-01-11 12:59:15 +0100 <int-e> ski: in that forall (k :: Nat). Fin (S k) -> Maybe (Fin k) case you're only given FZ :: Fin (S k)
2021-01-11 12:59:15 +0100 <ski> % data family Fin (n :: Nat) :: * where data Fin Z = FZ; newtype Fin (S n) = FS (Fin n)
2021-01-11 12:59:15 +0100 <yahb> ski: ; <interactive>:90:33: error: parse error on input `where'
2021-01-11 12:59:32 +0100 <ski> % data family Fin (n :: Nat) :: *; data instance Fin Z = FZ; newtype instance Fin (S n) = FS (Fin n)
2021-01-11 12:59:32 +0100 <yahb> ski:
2021-01-11 12:59:46 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 12:59:52 +0100 <ski> % let strengthen :: Fin ('S n) -> Maybe (Fin n); strengthen FZ = Nothing; strengthen (FS i) = Just i
2021-01-11 12:59:52 +0100 <yahb> ski: ; <interactive>:92:59: error:; * Couldn't match type 'Z with 'S n; Expected type: Fin ('S n); Actual type: Fin 'Z; * In the pattern: FZ; In an equation for `strengthen': strengthen FZ = Nothing; * Relevant bindings include strengthen :: Fin ('S n) -> Maybe (Fin n) (bound at <interactive>:92:48)
2021-01-11 13:00:14 +0100 <int-e> ski: I think you're missing a part of what cmcma20 wants: "<cmcma20> it would be too easy. If k ~ 'S n I wanna actually return Just Z"
2021-01-11 13:00:31 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr)
2021-01-11 13:00:39 +0100ArConan(9de62a69@157.230.42.105)
2021-01-11 13:00:53 +0100 <int-e> and strengthen FZ = Nothing doesn't do that.
2021-01-11 13:01:28 +0100 <gentauro> 12:48 < int-e> Oh I do use `where` a lot. But I would hate for the keyword to not be there.
2021-01-11 13:01:31 +0100Tops21(~Tobias@dyndsl-091-249-083-248.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2021-01-11 13:01:36 +0100 <ski> int-e : i renamed to `strengthen :: Fin ('S n) -> Maybe (Fin n)' .. perhaps that's the confusion here ?
2021-01-11 13:02:20 +0100 <cmcma20> btw some context: this function is needed to properly substitute the outer de Brujin index of a locally nameless lambda
2021-01-11 13:02:21 +0100 <gentauro> int-e: I only use `let` very rarely. It's monstly in `monad` blocks cos you can define `let` bidings that depend on results of monadic code
2021-01-11 13:02:21 +0100 <int-e> ski: AIUI, they want strengthen FZ = Just FZ whenever the type n would allow that.
2021-01-11 13:02:53 +0100 <int-e> ski: and only result in Nothing if it's absolutely necessary, that is, if n = Z.
2021-01-11 13:03:19 +0100 <ski> hm
2021-01-11 13:03:20 +0100 <int-e> ski: And that's the part where I've stated that Haskell can't do that.
2021-01-11 13:03:39 +0100 <gentauro> but I have always thought about, syntaks like: `do getEffects <- doIO(); foo := getEffects`
2021-01-11 13:03:40 +0100 <int-e> (without being more explicit about what n is, for example through a singleton)
2021-01-11 13:03:49 +0100 <gentauro> replacing `let … in` with `:=`
2021-01-11 13:03:53 +0100 <gentauro> does it give sense?
2021-01-11 13:04:06 +0100 <gentauro> also it looks nice (OCD) when placing under each other :)
2021-01-11 13:04:14 +0100 <gentauro> do
2021-01-11 13:04:19 +0100 <gentauro> a <- foo ()
2021-01-11 13:04:24 +0100 <gentauro> b := a
2021-01-11 13:04:25 +0100 <gentauro> :)
2021-01-11 13:04:28 +0100 <int-e> gentauro: Let's cut this short... I don't really want to think about changing Haskell's syntax.
2021-01-11 13:04:31 +0100skidoesn't think `:=' looks nice
2021-01-11 13:04:43 +0100 <ski> (not in math, either)
2021-01-11 13:04:45 +0100 <gentauro> ski: if you have a math brain it does ;)
2021-01-11 13:04:49 +0100 <ski> nope
2021-01-11 13:04:50 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 264 seconds)
2021-01-11 13:04:59 +0100 <int-e> The current one has its warts but I've grown used to it.
2021-01-11 13:05:13 +0100 <gentauro> int-e: I understand that
2021-01-11 13:05:16 +0100 <ski> i don't want to think of a definition as a "property of equality"
2021-01-11 13:05:19 +0100 <__monty__> Let without in is also less clear about when the definitions stop and the body starts.
2021-01-11 13:05:20 +0100 <gentauro> time to make a new language xD
2021-01-11 13:05:45 +0100 <ski> i want to be able to think of a defining equation as (also) being a true equality
2021-01-11 13:06:22 +0100 <ski> (and not all definitions use equality, anyway)
2021-01-11 13:06:24 +0100 <gentauro> __monty__: that's perhaps why F# has `forced` intendation rules
2021-01-11 13:06:27 +0100 <merijn> Equality is so easy!
2021-01-11 13:06:29 +0100 <gentauro> I like that A LOT
2021-01-11 13:06:33 +0100 <merijn> Until you start learning dependent types
2021-01-11 13:06:36 +0100 <gentauro> that makes people write "readable code"
2021-01-11 13:06:36 +0100 <int-e> gentauro: But I do feel strongly that keywords serve a purpose when reading code, so dropping them carries a cost. And I read a lot more code than I write.
2021-01-11 13:06:42 +0100 <merijn> Then you realise equality is *hard*
2021-01-11 13:07:06 +0100 <merijn> gentauro: In short: No
2021-01-11 13:07:17 +0100 <gentauro> merijn: no what?
2021-01-11 13:07:23 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-01-11 13:07:30 +0100 <merijn> gentauro: In long: I will start dispatching hitman squads if people keep suggesting trivial syntactic changes with no semantic benefit
2021-01-11 13:07:30 +0100 <int-e> (For example, I *like* if ... then ... else ..., even though we could easily have if :: Bool -> a -> a -> a instead)
2021-01-11 13:07:40 +0100Lowl3v3l(~Lowl3v3l@dslb-084-062-101-233.084.062.pools.vodafone-ip.de)
2021-01-11 13:07:42 +0100 <ski> (being able to think of a defining equation as a true equality is also why i dislike deviations between the pattern and the expression language)
2021-01-11 13:07:50 +0100ericsagnes(~ericsagne@2405:6580:0:5100:7e9d:7180:3ecf:ff43) (Ping timeout: 264 seconds)
2021-01-11 13:07:52 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2021-01-11 13:08:29 +0100Entertainment(~entertain@104.246.132.210)
2021-01-11 13:08:36 +0100 <merijn> gentauro: Dropping let achieves nothing. It doesn't make programs that were previously impossible possible, it doesn't make it harder to make mistakes...all it does is "type 3 letters less for no real benefit, while breaking years of education, experience and tooling"
2021-01-11 13:08:40 +0100 <merijn> No thanks
2021-01-11 13:09:16 +0100 <int-e> merijn: it makes parsing harder though... another place where the compiler has to look far ahead to decide whether something is a pattern or an expression
2021-01-11 13:09:19 +0100 <gentauro> merijn: fair points
2021-01-11 13:09:22 +0100 <merijn> Any change to syntax better have a *damn* good reason
2021-01-11 13:09:36 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 240 seconds)
2021-01-11 13:09:38 +0100 <merijn> *especially* changes that invalidate existing code
2021-01-11 13:09:59 +0100 <gentauro> nevertheless, I'm of the believers that a language should have one-way (for simplicity) to provide basic logic
2021-01-11 13:10:11 +0100 <ski> "one-way" ?
2021-01-11 13:10:12 +0100 <gentauro> so let/in vs where vs let vs …
2021-01-11 13:10:22 +0100 <gentauro> to much confusion to new commers
2021-01-11 13:10:29 +0100 <merijn> It's simple
2021-01-11 13:10:33 +0100skithinks of one-way streets
2021-01-11 13:10:34 +0100 <__monty__> Well, let in would probably be more useful than where, since it's an expression.
2021-01-11 13:10:37 +0100 <merijn> never use let unless you must, problem solved
2021-01-11 13:10:46 +0100 <gentauro> merijn: that's my approach !!!
2021-01-11 13:11:16 +0100new_haskeller(ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com)
2021-01-11 13:11:28 +0100 <int-e> They feel different though... let/in is often about the flow of information; `where` is more of an ambient environment for the whole definition.
2021-01-11 13:11:46 +0100skilooks at new_haskeller
2021-01-11 13:12:01 +0100 <gentauro> int-e: I use `where` for data-transformations and local functions
2021-01-11 13:12:13 +0100 <gentauro> I very rareley need `let/in` bindings
2021-01-11 13:12:37 +0100skisometimes attaches `where's to `case'-`of' branches
2021-01-11 13:13:08 +0100 <gentauro> ski: are those `where` local to each case branch?
2021-01-11 13:13:13 +0100 <ski> yes
2021-01-11 13:13:14 +0100 <int-e> gentauro: Anyway, feel free to do whatever in your own language.
2021-01-11 13:13:33 +0100 <ski> (also scopes over the guards)
2021-01-11 13:13:42 +0100 <int-e> gentauro: Or in your own Haskell style guide, for that matter :P
2021-01-11 13:13:56 +0100 <boxscape> if you have something like `f x = Ctr \y -> let z = g y in ...` it seems like you can't easily replace that with case of
2021-01-11 13:14:08 +0100 <boxscape> err
2021-01-11 13:14:10 +0100 <boxscape> sorry
2021-01-11 13:14:11 +0100 <boxscape> with where
2021-01-11 13:14:13 +0100 <merijn> boxscape: sure you can
2021-01-11 13:14:13 +0100 <__monty__> I kinda want a where that scopes over all equations of a function.
2021-01-11 13:14:17 +0100 <gentauro> int-e: my own language is `hibernating` at the moment. I guess at some point I will `wake` it up :)
2021-01-11 13:14:19 +0100 <merijn> boxscape: Just get rid of the lambda
2021-01-11 13:14:27 +0100 <ski> f x = Ctr \(g -> z) -> ..z..
2021-01-11 13:14:29 +0100 <int-e> __monty__: Yeah that would be nice on occasion
2021-01-11 13:14:43 +0100 <__monty__> But then I think good modules fix all of these silly scoping concerns and am saddened by the state of haskell's "module system."
2021-01-11 13:14:50 +0100 <merijn> __monty__: Let me introduce you to "case of" :p
2021-01-11 13:14:59 +0100geowiesnot(~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-01-11 13:15:00 +0100 <ski> __monty__ : it's called `local'-`in'-`end', in SML, and i've wanted it for a long time, in Haskell
2021-01-11 13:15:06 +0100 <boxscape> merijn what would be your preferred way to get rid of the lambda?
2021-01-11 13:15:19 +0100 <merijn> __monty__: I'm sure that backpack could use your love with ezyang busy on pytorch
2021-01-11 13:15:33 +0100 <merijn> boxscape: Give it a name, put it in the where block of 'f'
2021-01-11 13:15:45 +0100 <boxscape> okay
2021-01-11 13:15:48 +0100 <ski> merijn : `case'-`of' doesn't cover the case when you want to define multiple things after the `in'
2021-01-11 13:15:57 +0100 <gentauro> speaking about `cases … of`. I like that in OCaml, if two branches are the same. You can handle their code in one by omitting arrows
2021-01-11 13:16:05 +0100 <gentauro> that's is nice. I wouldn't mind getting that to Haskell
2021-01-11 13:16:14 +0100 <merijn> ski: I meant that where scopes over the entire case-of then :p
2021-01-11 13:16:19 +0100 <gentauro> case FooBar of
2021-01-11 13:16:21 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr)
2021-01-11 13:16:24 +0100 <gentauro> Foo
2021-01-11 13:16:26 +0100 <gentauro> Bar ->
2021-01-11 13:16:36 +0100 <gentauro> that's really usefull in OCaml
2021-01-11 13:16:36 +0100 <ski> merijn : i meant `local ... in f x = ..x..; g y = ..y..'
2021-01-11 13:17:03 +0100 <dminuoso> gentauro: I guess it's not that useful in Haskell, since we rarely have nullary-only sum types.
2021-01-11 13:17:05 +0100 <ski> merijn : are you suggesting `(f,g) = (\x -> ..x..,\y -> ..y..) where ...' ?
2021-01-11 13:17:09 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 13:17:11 +0100 <merijn> ski: That's not what I was replying to?
2021-01-11 13:17:15 +0100Profpatsch(~Profpatsc@static.88-198-193-255.clients.your-server.de)
2021-01-11 13:17:22 +0100 <__monty__> merijn: I like what backpack does. But having seen Agda's modules I'm still left wanting.
2021-01-11 13:17:27 +0100 <merijn> ski: I was replying to __monty__'s complaint that where doesn't scope over multiple equations
2021-01-11 13:17:28 +0100 <dminuoso> gentauro: And most of the time we do pattern matching, we do do want to bind some of the fields.
2021-01-11 13:17:45 +0100 <merijn> dminuoso: You can do that in ocaml
2021-01-11 13:17:55 +0100 <ski> merijn : yea, i was replying to the same thing, except i also want those multiple equations to possibly define more than one identifier
2021-01-11 13:17:59 +0100 <merijn> dminuoso: "Foo x | Bar x -> stuff x" works iirc
2021-01-11 13:18:05 +0100 <Profpatsch> Is it possible to use deriving via for a restricted instance? e.g. I have newtype Foo r = Foo (Op r) and (Op r) is Divisible if Monoid r
2021-01-11 13:18:08 +0100 <dminuoso> merijn: Assuming both fields are of the same type?
2021-01-11 13:18:16 +0100 <merijn> dminuoso: Yes
2021-01-11 13:18:27 +0100 <dminuoso> Profpatsch: Standalone deriving
2021-01-11 13:18:29 +0100 <Profpatsch> But `deriving Divisible via (Op r)` doesn’t work because of the Monoid restriction
2021-01-11 13:18:36 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2021-01-11 13:18:45 +0100 <ski> iow, being able to define some helpers, that scope over multiple definitions
2021-01-11 13:18:46 +0100 <dminuoso> (you can also do standalone deriving via)
2021-01-11 13:18:51 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 13:19:00 +0100 <ski> (which is what `local'-`in'-`end' in SML allows, in general)
2021-01-11 13:19:06 +0100 <gentauro> case FooBar of
2021-01-11 13:19:09 +0100 <gentauro> Foo x
2021-01-11 13:19:12 +0100 <gentauro> Bar x ->
2021-01-11 13:19:18 +0100ericsagnes(~ericsagne@2405:6580:0:5100:e268:f1af:eeaa:71ac)
2021-01-11 13:19:33 +0100 <gentauro> dminuoso: `x` can be reused from both cases
2021-01-11 13:19:37 +0100 <ski> `let <decls> in <expr> end' is an expression (in SML). `local <decls> in <decls> end' is a declaration
2021-01-11 13:19:38 +0100 <gentauro> it's pretty nice
2021-01-11 13:20:03 +0100 <dminuoso> Honestly, out of all the wishes what Haskell should have, I'd say circular imports is on top #1 of my list.
2021-01-11 13:20:07 +0100 <ski> gentauro : unfortunately no disjunctive / OR- patterns, in Haskell
2021-01-11 13:20:13 +0100 <dminuoso> It's my single largest annoyance with Haskell
2021-01-11 13:20:23 +0100 <merijn> dminuoso: Word
2021-01-11 13:20:29 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2021-01-11 13:20:32 +0100 <gentauro> dminuoso: I would say submodules
2021-01-11 13:20:34 +0100 <gentauro> done right
2021-01-11 13:20:42 +0100 <int-e> dminuoso: That's technically not a Haskell problem, but a problem with the implementation.
2021-01-11 13:20:48 +0100 <gentauro> right now the module system is pretty `flat` and somehow `useless` :|
2021-01-11 13:20:52 +0100 <merijn> Naah, I don't care so much about submodules, but recursive imports are just so painful
2021-01-11 13:21:00 +0100 <__monty__> ski: It does sound exactly like what I want. Though otoh with agda style modules you don't end up not being able to get at the definitions, like what haskell's *.Internal convention is meant to circumvent.
2021-01-11 13:21:00 +0100gentaurocoming from an OCaml/F# module world
2021-01-11 13:21:05 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 13:21:10 +0100 <dminuoso> int-e: I guess the distinction is meaningless these days.
2021-01-11 13:21:19 +0100 <Profpatsch> dminuoso: do you have an example? I don’t see how this fits together
2021-01-11 13:21:23 +0100 <Up39> so how do you deal with cases where imports would be circular?
2021-01-11 13:21:45 +0100Entertainment(~entertain@104.246.132.210) ()
2021-01-11 13:21:56 +0100 <merijn> Up39: Try for an hour to get .hs-boot files to work, cry, give up, refactor circularlity away by tossing half the types into a .Types module >.>
2021-01-11 13:22:13 +0100 <ArConan> ah,i think i miss a splendid discussion
2021-01-11 13:22:13 +0100 <ski> __monty__ : sorry, i didn't get that about Agda style modules
2021-01-11 13:22:32 +0100 <dminuoso> Profpatsch: `deriving via (Op r) instance (Monoid r) => Divisible (Foo r)`
2021-01-11 13:22:41 +0100 <dminuoso> (I know, that syntax is eye clawing...)
2021-01-11 13:22:41 +0100 <int-e> merijn: . o O ( And pray that you'll never need Template Haskell )
2021-01-11 13:22:54 +0100 <merijn> int-e: Trigger warning, please :(
2021-01-11 13:22:59 +0100 <int-e> hah
2021-01-11 13:23:02 +0100 <ArConan> for i usually use let..in and reported error
2021-01-11 13:23:20 +0100 <Profpatsch> dminuoso: I get a parse error
2021-01-11 13:23:24 +0100 <Profpatsch> Is that a GHC 8.10 thing?
2021-01-11 13:23:25 +0100 <Up39> lol, so what if you need circular imports and template haskell?
2021-01-11 13:23:35 +0100 <int-e> merijn: I think the thought bubble actually is a trigger warning, the way I use it. :-P
2021-01-11 13:23:35 +0100 <merijn> Profpatsch: You need -XStandaloneDeriving
2021-01-11 13:23:44 +0100 <dminuoso> And -XDerivingVia
2021-01-11 13:23:49 +0100 <__monty__> ski: So let/where/local all have the problem that the definitions are inaccessible from outside the body. If you used modules for scoping then you could always get at those helpers without having to crowd the top-level namespace.
2021-01-11 13:23:52 +0100 <Profpatsch> dminuoso: It’s both enabled
2021-01-11 13:23:55 +0100Tops2(~Tobias@dyndsl-091-249-083-248.ewe-ip-backbone.de)
2021-01-11 13:24:00 +0100 <merijn> Up39: Quit your job, move into the mountains and become a goat herd
2021-01-11 13:24:25 +0100 <ski> __monty__ : why do you say it's a problem ? it's the intent of them
2021-01-11 13:24:28 +0100 <Up39> merijn: not the worst thing ever :P
2021-01-11 13:24:41 +0100 <merijn> Up39: Fortunately that cursed combination is fairly rare
2021-01-11 13:24:53 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-01-11 13:24:55 +0100 <ski> __monty__ : unless maybe if you're talking about debugging ?
2021-01-11 13:25:33 +0100 <__monty__> ski: Same reason the *.Internal convention exists. Even the wisest of us sometimes hides away something that's useful or even necessary.
2021-01-11 13:25:44 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2021-01-11 13:25:47 +0100 <int-e> Up39: you cry, cry, cry...
2021-01-11 13:25:57 +0100 <int-e> . o O ( module Cry where import Cry )
2021-01-11 13:26:03 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 246 seconds)
2021-01-11 13:26:24 +0100 <ski> __monty__ : it's a different need, requiring a different solution
2021-01-11 13:26:27 +0100 <dminuoso> Profpatsch: Mmm, are you sure you dont have an unrelated syntax error?
2021-01-11 13:26:48 +0100 <dminuoso> % deriving via (Op r) instance (Monoid r) => Divisible (Foo r)
2021-01-11 13:26:49 +0100 <yahb> dminuoso: ; <interactive>:94:15: error:; Not in scope: type constructor or class `Op'; Perhaps you meant `Ap' (imported from Control.Monad.RWS); <interactive>:94:44: error: Not in scope: type constructor or class `Divisible'
2021-01-11 13:26:56 +0100 <dminuoso> It parses fine with this GHCi at least
2021-01-11 13:27:03 +0100 <merijn> __monty__: THat's why we have
2021-01-11 13:27:07 +0100 <merijn> @hackage true-name ;)
2021-01-11 13:27:07 +0100 <lambdabot> https://hackage.haskell.org/package/true-name ;)
2021-01-11 13:27:45 +0100 <Profpatsch> dminuoso: oh, it has to be on toplevel
2021-01-11 13:27:51 +0100 <Profpatsch> I put it indented behind the type
2021-01-11 13:27:57 +0100 <dminuoso> Yes.
2021-01-11 13:27:58 +0100 <__monty__> ski: Are you familiar with Agda's modules? I think SML's Functors are similar. They're the nicest solution to scoping I've come across in any language.
2021-01-11 13:28:03 +0100 <ski> __monty__ : do you also think it's a problem that you can't access `m' and `n', if you're given the value of `m * n' ?
2021-01-11 13:28:27 +0100 <__monty__> And if `local in end` isn't a scoping construct I guess I'm missing the point.
2021-01-11 13:28:33 +0100 <ski> i'm familiar with SML module functors
2021-01-11 13:28:43 +0100 <ski> it is a scoping construct
2021-01-11 13:28:47 +0100 <dminuoso> Admittedly, it's poorly documented in the GHC manual.
2021-01-11 13:28:50 +0100 <int-e> Up39: It's not really about the imports though; circular modules will still need a .hs-boot file somwhere in the loop, and {-# SOURCE #-} imports... the issue with TH is that it breaks up modules into sections that can only refer to themselves and earlier sections... so you can have more fun with cyclic definitions. And those are ordinarily not a problem at all in Haskell.
2021-01-11 13:29:01 +0100 <ski> it's intended to hide local definitions
2021-01-11 13:29:15 +0100 <Profpatsch> dminuoso: But I noticed I can’t do it really, because I don’t have a * -> * but specialized it to *
2021-01-11 13:29:17 +0100 <ski> (not just to qualify them, packaging them up)
2021-01-11 13:29:20 +0100 <Profpatsch> So maybe I should sketch out my interface first
2021-01-11 13:29:53 +0100 <dminuoso> 13:21:56 merijn | Up39: Try for an hour to get .hs-boot files to work, cry, give up, refactor circularlity away by tossing half the types into a .Types module >.>
2021-01-11 13:30:05 +0100 <dminuoso> merijn: This works so long until your Types depend on one-another!
2021-01-11 13:30:12 +0100 <dminuoso> Starting the cycle anew.
2021-01-11 13:30:17 +0100 <merijn> dminuoso: No
2021-01-11 13:30:27 +0100 <dminuoso> Oh, you meant a *singular* types module? :P
2021-01-11 13:30:30 +0100 <merijn> Yes
2021-01-11 13:30:32 +0100 <ski> yes
2021-01-11 13:30:34 +0100 <dminuoso> Ah.
2021-01-11 13:31:04 +0100 <int-e> Up39: "template haskell" "stages" is the proper keyword combination for this particular dark corner of Haskell/GHC.
2021-01-11 13:31:21 +0100 <ski> (you could try to parameterize the types, breaking the loop. or maybe backpack could be used here ?)
2021-01-11 13:31:28 +0100 <merijn> Up39: One (easier) trick is to try and avoid having datatypes depend on each other directly
2021-01-11 13:32:21 +0100 <__monty__> ski: Pretty sure the entire field of crypto is concerned with the m * n problem : ) Granted, I don't come across the problem much in haskell. But it plagues nixpkgs for example.
2021-01-11 13:32:23 +0100 <dminuoso> GHC itself actually uses boot modules. I recall a discussion with several GHC core developers, where none of them appeared to know how to use boot modules...
2021-01-11 13:32:25 +0100 <ski> in place of `data Foo = ..Foo.Bar..; data Bar = ..Foo..Bar..', you can do `data Foo bar = ..(Foo bar)..bar..; data Bar = ..(Foo Bar)..Bar..'
2021-01-11 13:32:28 +0100 <dminuoso> That situation was tellig..
2021-01-11 13:32:44 +0100 <merijn> Up39: i.e. instead of having "data Foo = Foo Int Bar" and "data Bar = Bar Bool Foo" do something like "data Foo f = Foo Int (f (Foo f))" and "data Bar f = Bar Bool (f (Bar f))" or something like that
2021-01-11 13:32:52 +0100 <ski> (but having to do that can be quite annoying)
2021-01-11 13:33:30 +0100skilow fours merijn
2021-01-11 13:33:43 +0100 <dminuoso> And dealing with higher kinded data types introduces other annoyances, like you cant just derive instances out of the box anymore
2021-01-11 13:33:51 +0100 <dminuoso> % data Foo f = Foo { t :: f Int } deriving (Eq, Ord, Show)
2021-01-11 13:33:51 +0100 <yahb> dminuoso: ; <interactive>:96:43: error:; * No instance for (Eq (f Int)) arising from the first field of `Foo' (type `f Int'); Possible fix: use a standalone 'deriving instance' declaration, so you can specify the instance context yourself; * When deriving the instance for (Eq (Foo f)); <interactive>:96:47: error:; * No instance for (Ord (f Int)) arising from the first field of `Foo' (type `f In
2021-01-11 13:34:11 +0100 <dminuoso> Once you start with this, you soon have the modern equivalent of -fglasgow-exts enabled.
2021-01-11 13:35:01 +0100 <int-e> . o O ( Given this discussion I've decided that Haskell is the worst language on Earth and will now switch to C++. )
2021-01-11 13:35:17 +0100 <merijn> int-e: lol
2021-01-11 13:35:26 +0100 <merijn> C++ is so much worse >.>
2021-01-11 13:35:33 +0100 <merijn> It's not even funny
2021-01-11 13:35:34 +0100 <dminuoso> I think that was the joke.
2021-01-11 13:35:57 +0100 <int-e> :)
2021-01-11 13:36:03 +0100 <merijn> dminuoso: Most people think C++ is bad, but only a few have pushed enough to realise *how* bad :p
2021-01-11 13:36:25 +0100 <ski> __monty__ : i don't really see why you think the `*.Internal' situation is similar to `let'/`where' or `local'
2021-01-11 13:36:58 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 246 seconds)
2021-01-11 13:37:53 +0100 <__monty__> I see *.Internal as a way of circumventing the scoping restrictions modules impose. let et al impose similar restrictions on the scope of their definitions.
2021-01-11 13:37:59 +0100 <dminuoso> One other thing I found that slightly helps in mutually dependent modules, is mtl-style code. It's a sort of late-binding.
2021-01-11 13:38:21 +0100 <dminuoso> Which can help break up cyclic dependencies if it's just a few functions that introduce the circularity
2021-01-11 13:38:22 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net) (Ping timeout: 256 seconds)
2021-01-11 13:38:32 +0100 <ski> i have occasionally wanted to be able to access internal `where' (or `let') bindings, for debugging/testing .. (although, iirc you can actually do that, with the GHCi tracer, if the breakpoint is within the scope of the relevant bindings)
2021-01-11 13:38:56 +0100 <Up39> So what's the reason behind circular imports not being handled by the compiler?
2021-01-11 13:39:01 +0100 <ski> but other than that, i don't see why you want to break encapsulation / lexical scoping
2021-01-11 13:39:05 +0100 <dminuoso> Up39: It was never considered in the implementation of GHC.
2021-01-11 13:39:23 +0100 <dminuoso> The Haskell reports itself already permits (but not requires) circular imports.
2021-01-11 13:39:45 +0100 <dminuoso> It'd require a major rehaul of GHC to allow for circular imports.
2021-01-11 13:39:48 +0100 <ski> __monty__ : they would also preclude more aggressive optimization
2021-01-11 13:39:51 +0100 <merijn> dminuoso: It does, actually?
2021-01-11 13:39:56 +0100 <merijn> dminuoso: iirc anyway
2021-01-11 13:40:08 +0100 <merijn> Up39: "too hard to implement"
2021-01-11 13:40:45 +0100 <dminuoso> If GHC had been designed with circular dependencies from the beginning, it's conceivable a suitable implementation could have been derived.
2021-01-11 13:40:52 +0100 <__monty__> ski: Don't think they would. It's known statically whether or not modules are opened.
2021-01-11 13:41:16 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) (Ping timeout: 240 seconds)
2021-01-11 13:41:21 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 13:41:31 +0100 <ski> __monty__ : whole-program / global knowledge ?
2021-01-11 13:42:12 +0100 <__monty__> I guess.
2021-01-11 13:42:13 +0100skiidly ponders building modules at run-time
2021-01-11 13:42:35 +0100Flonk(~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
2021-01-11 13:42:43 +0100 <ski> (OCaml and Alice ML supports that. e.g. sending a module over the wire)
2021-01-11 13:42:50 +0100Entertainment(~entertain@104.246.132.210)
2021-01-11 13:45:47 +0100usr25(~usr25@unaffiliated/usr25)
2021-01-11 13:45:54 +0100ahf_ahf
2021-01-11 13:45:54 +0100ome(uid36537@gateway/web/irccloud.com/x-vxnalybdhvqhuavb)
2021-01-11 13:47:51 +0100 <Uniaika> ski: getting some Erlang vibes from that :P
2021-01-11 13:49:52 +0100new_haskeller(ae72a197@cpe00fc8d386d93-cm00fc8d386d90.cpe.net.cable.rogers.com) (Quit: Ping timeout (120 seconds))
2021-01-11 13:49:57 +0100 <ski> i recall a discussion about parameterizing Erlang modules, something like `-module foo(X,Y). ..X..Y..'
2021-01-11 13:50:31 +0100 <Uniaika> can't quite recall, but Elixir's 'use' macro enables you to call a module with parameters
2021-01-11 13:50:36 +0100 <Uniaika> it's very used
2021-01-11 13:53:54 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-01-11 13:54:28 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
2021-01-11 13:54:39 +0100Dark_Ethereal(~Drew@84.93.106.197)
2021-01-11 13:54:49 +0100__monty__(~toonn@unaffiliated/toonn) (Ping timeout: 264 seconds)
2021-01-11 13:55:08 +0100__monty__(~toonn@unaffiliated/toonn)
2021-01-11 13:55:32 +0100 <ArConan> almost every time i run my haskell code,my compiler told me` Variable not in scope:`,is it something wrong with my ghc?
2021-01-11 13:55:42 +0100 <ArConan> https://paste.tomsmeding.com/tXnBy7hM
2021-01-11 13:56:29 +0100 <merijn> ArConan: You are trying to do multiline definitions in ghci
2021-01-11 13:56:29 +0100 <Uniaika> ArConan: okay so
2021-01-11 13:56:32 +0100 <merijn> That doesn't work well
2021-01-11 13:56:56 +0100 <Uniaika> ArConan: did you activate multiline mode for GHCi?
2021-01-11 13:57:04 +0100 <merijn> My recommended solution is: Don't write multiline definitions in ghci
2021-01-11 13:57:15 +0100 <Uniaika> ^ what he says
2021-01-11 13:57:18 +0100 <merijn> Just write them in a file and load the file in ghci
2021-01-11 13:58:04 +0100son0p(~son0p@181.58.39.182) (Quit: Lost terminal)
2021-01-11 13:58:38 +0100 <ArConan> Uniaika: but it is just writen in a file
2021-01-11 13:58:47 +0100LKoen(~LKoen@152.172.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.”)
2021-01-11 13:59:21 +0100 <merijn> ArConan: Well, that error is from ghci, so if you wrote it in a file, then you haven't shown us what you typed to get that error
2021-01-11 13:59:41 +0100 <boxscape> the error seems to indicate that you defined it as quicksort' but are calling it as quicksort without the prime
2021-01-11 14:00:40 +0100 <ArConan> ah,wait a minute
2021-01-11 14:00:54 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 14:00:59 +0100 <__monty__> Is ArConan the same person as misak? Because I'm having a dèja vu.
2021-01-11 14:02:15 +0100 <ski> most likely no
2021-01-11 14:03:29 +0100 <boxscape> /whois says most likely yes
2021-01-11 14:03:33 +0100 <ArConan> err ,deja vu?a music?
2021-01-11 14:05:00 +0100solarliner(~solarline@243.81.10.109.rev.sfr.net) (Ping timeout: 256 seconds)
2021-01-11 14:05:04 +0100cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2021-01-11 14:05:23 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-01-11 14:06:22 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 246 seconds)
2021-01-11 14:07:06 +0100geekosaur(ac3a8b5c@172.58.139.92)
2021-01-11 14:07:14 +0100pera(pera@gateway/vpn/mullvad/pera)
2021-01-11 14:07:29 +0100 <ArConan> so strange.
2021-01-11 14:07:29 +0100 <ArConan> My program is working well now.....
2021-01-11 14:07:53 +0100 <ArConan> what happened=$
2021-01-11 14:08:44 +0100maxsu(~maxsu@ip-64-72-99-232.lasvegas.net) (Ping timeout: 256 seconds)
2021-01-11 14:08:49 +0100oerjan(~oerjan@178.162.209.171) (Ping timeout: 246 seconds)
2021-01-11 14:10:06 +0100phasespace(~sar@80-89-47-117.inet.signal.no) (Ping timeout: 256 seconds)
2021-01-11 14:10:35 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
2021-01-11 14:11:07 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2021-01-11 14:12:03 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 272 seconds)
2021-01-11 14:12:08 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh)
2021-01-11 14:13:01 +0100 <ArConan> __monty__: a new word accknowledged:')
2021-01-11 14:13:21 +0100 <ArConan> misak is my nickname on my client
2021-01-11 14:15:31 +0100jchia__(~jchia@58.32.32.252)
2021-01-11 14:15:37 +0100xelxebar_(~xelxebar@gateway/tor-sasl/xelxebar)
2021-01-11 14:16:23 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 240 seconds)
2021-01-11 14:18:13 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) (Ping timeout: 264 seconds)
2021-01-11 14:18:25 +0100Tario(~Tario@201.192.165.173)
2021-01-11 14:19:21 +0100 <Dark_Ethereal> ArConan: what did you change?
2021-01-11 14:19:27 +0100phasespace(~sar@89-162-33-21.fiber.signal.no)
2021-01-11 14:20:18 +0100 <ArConan> emmm,maybe for i restarted my windows terminal.....
2021-01-11 14:20:36 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-01-11 14:21:09 +0100nullifidian(~nullifidi@unaffiliated/nullifidian)
2021-01-11 14:22:51 +0100chirpsalot(~Chirps@pool-98-115-239-235.phlapa.fios.verizon.net)
2021-01-11 14:24:15 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Remote host closed the connection)
2021-01-11 14:24:35 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 14:25:00 +0100argento(~argent0@168.227.96.26)
2021-01-11 14:25:21 +0100guest111`(~user@49.5.6.87) (Read error: Connection reset by peer)
2021-01-11 14:25:29 +0100guest111`(~user@49.5.6.87)
2021-01-11 14:29:53 +0100kyali__(~kyali@APN-123-251-120-gprs.simobil.net)
2021-01-11 14:30:05 +0100kyali___(~kyali@APN-123-251-120-gprs.simobil.net)
2021-01-11 14:31:58 +0100urodna(~urodna@unaffiliated/urodna)
2021-01-11 14:32:09 +0100 <Dark_Ethereal> ArConan: Restarting ghci will cause the file to be loaded afresh, so could it be that you made a fixing change but forgot to reload it in ghci?
2021-01-11 14:32:58 +0100kyali(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 246 seconds)
2021-01-11 14:33:05 +0100kyali_(~kyali@APN-123-255-45-gprs.simobil.net) (Ping timeout: 240 seconds)
2021-01-11 14:34:14 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 14:34:48 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-01-11 14:35:01 +0100aerium(~aerium@51.194.80.91) (Ping timeout: 264 seconds)
2021-01-11 14:36:24 +0100geowiesnot(~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 265 seconds)
2021-01-11 14:36:40 +0100 <ArConan> i guess ,the old file be loaded into memory and when i use :l to load my fixed file, the windows terminal(wt) use the old filenode to find file in memory.so after restarting the wt,my code works normally@Dark_Ethereal
2021-01-11 14:37:00 +0100 <merijn> ArConan: You need to run ":reload" to reload the file after you change it
2021-01-11 14:37:14 +0100knupfer(~Thunderbi@200116b82c62e3005592499e46851a57.dip.versatel-1u1.de) (Read error: Connection reset by peer)
2021-01-11 14:37:21 +0100knupfer(~Thunderbi@200116b82c62e3007dce87ecfcf2f682.dip.versatel-1u1.de)
2021-01-11 14:37:32 +0100 <__monty__> Doesn't :load samefile work too though?
2021-01-11 14:37:39 +0100son0p(~son0p@181.136.122.143)
2021-01-11 14:37:49 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-01-11 14:38:15 +0100cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
2021-01-11 14:38:31 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 14:39:07 +0100 <merijn> maybe?
2021-01-11 14:39:11 +0100 <merijn> I dunno xD
2021-01-11 14:39:16 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Ping timeout: 246 seconds)
2021-01-11 14:40:41 +0100 <__monty__> I'd be surprised if it didn't. Though I'd be at least equally surprised if windows decides on a whim to store a file at a new inode.
2021-01-11 14:41:03 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds)
2021-01-11 14:41:17 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 14:42:26 +0100xchg(~xchg@s91904426.blix.com)
2021-01-11 14:44:07 +0100 <__monty__> For a platform without censorship they were beholden to quite a bit of strongly censoring platforms >.<
2021-01-11 14:44:19 +0100 <__monty__> Woops.
2021-01-11 14:44:21 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net)
2021-01-11 14:46:15 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d) (Remote host closed the connection)
2021-01-11 14:47:17 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Remote host closed the connection)
2021-01-11 14:47:36 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 14:47:37 +0100drbean(~drbean@TC210-63-209-211.static.apol.com.tw) (Ping timeout: 264 seconds)
2021-01-11 14:49:44 +0100mouseghost(~draco@wikipedia/desperek)
2021-01-11 14:51:19 +0100shailangsa(~shailangs@host86-186-142-117.range86-186.btcentralplus.com)
2021-01-11 14:51:22 +0100mirrorbird(~psutcliff@2a00:801:236:570e:b1f2:acf6:e570:218d)
2021-01-11 14:52:53 +0100Chobbes(~Chobbes@pool-98-115-239-235.phlapa.fios.verizon.net) (Changing host)
2021-01-11 14:52:53 +0100Chobbes(~Chobbes@unaffiliated/chobbes)
2021-01-11 14:53:32 +0100xchg(~xchg@s91904426.blix.com) (Remote host closed the connection)
2021-01-11 14:54:07 +0100 <pedrorubster[m]> <glguy "pedrorubster, that message ended"> https://paste.tomsmeding.com/5lNChHLn
2021-01-11 14:54:09 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Remote host closed the connection)
2021-01-11 14:54:22 +0100 <pedrorubster[m]> If anyone could help me with this, I would really appreciate it! ^^
2021-01-11 14:54:29 +0100Codaraxis__(~Codaraxis@141.98.255.144)
2021-01-11 14:54:34 +0100misak(~arconan@115.209.116.183) (Quit: Leaving)
2021-01-11 14:54:40 +0100ADG1089__(~aditya@122.163.165.143) (Remote host closed the connection)
2021-01-11 15:00:59 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 15:03:14 +0100star_cloud(~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
2021-01-11 15:04:06 +0100 <__monty__> pedrorubster[m]: I think you should focus less on the UI and more on the implementation part first. Start by coming up with a data structure which will best support the transformations you want to apply. A list of tuples? A list of lists? A map of records?
2021-01-11 15:04:24 +0100ViCi(daniel@10PLM.ro)
2021-01-11 15:06:02 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 264 seconds)
2021-01-11 15:11:05 +0100jespada(~jespada@90.254.245.49) (Ping timeout: 256 seconds)
2021-01-11 15:11:29 +0100aerium(~aerium@51.194.80.91)
2021-01-11 15:12:42 +0100slewis(~slewis@84.39.117.57)
2021-01-11 15:13:35 +0100jespada(~jespada@90.254.245.49)
2021-01-11 15:15:23 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2021-01-11 15:15:51 +0100carldd(~carldd@90-224-49-113-no56.tbcn.telia.com) (Read error: Connection reset by peer)
2021-01-11 15:15:56 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 15:16:29 +0100carldd(~carldd@90-224-49-113-no56.tbcn.telia.com)
2021-01-11 15:19:43 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds)
2021-01-11 15:20:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Ping timeout: 264 seconds)
2021-01-11 15:23:45 +0100 <kyali__> quit
2021-01-11 15:23:49 +0100kyali___(~kyali@APN-123-251-120-gprs.simobil.net) (Quit: leaving)
2021-01-11 15:23:49 +0100kyali__(~kyali@APN-123-251-120-gprs.simobil.net) (Quit: leaving)
2021-01-11 15:24:06 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2021-01-11 15:25:19 +0100aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2021-01-11 15:26:08 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 260 seconds)
2021-01-11 15:29:49 +0100mrchampion(~mrchampio@38.18.109.23) (Read error: No route to host)
2021-01-11 15:31:51 +0100ystael(~ystael@209.6.50.55)
2021-01-11 15:32:08 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Remote host closed the connection)
2021-01-11 15:33:18 +0100mrchampion(~mrchampio@38.18.109.23)
2021-01-11 15:33:21 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
2021-01-11 15:33:44 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 260 seconds)
2021-01-11 15:34:55 +0100ADG1089__(~aditya@122.163.165.143)
2021-01-11 15:35:58 +0100esp32_prog(yoann@gateway/vpn/protonvpn/esp32prog/x-46565127) (Ping timeout: 246 seconds)
2021-01-11 15:36:24 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 15:41:37 +0100mmmattyx(uid17782@gateway/web/irccloud.com/x-wzxcapgnieyfthce)
2021-01-11 15:45:02 +0100geekosaur(ac3a8b5c@172.58.139.92) (Quit: Connection closed)
2021-01-11 15:47:33 +0100elfets(~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
2021-01-11 15:52:04 +0100Codaraxis__(~Codaraxis@141.98.255.144) (Ping timeout: 246 seconds)
2021-01-11 15:58:26 +0100nullifidian(~nullifidi@unaffiliated/nullifidian) (Quit: Leaving)
2021-01-11 16:00:25 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh) (Ping timeout: 240 seconds)
2021-01-11 16:00:49 +0100Sgeo(~Sgeo@ool-18b98aa4.dyn.optonline.net)
2021-01-11 16:00:53 +0100 <pedrorubster[m]> <__monty__ "pedrorubster: I think you should"> I'm not worried about the UI at all, I just need the logic to make the groupby work, that's all, I couldn't care less about the UI
2021-01-11 16:01:44 +0100darjeeling_(~darjeelin@115.215.40.96) (Ping timeout: 260 seconds)
2021-01-11 16:02:23 +0100gxt(~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds)
2021-01-11 16:02:23 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 16:02:52 +0100gxt(~gxt@gateway/tor-sasl/gxt)
2021-01-11 16:03:49 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-01-11 16:05:23 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 16:06:58 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 260 seconds)
2021-01-11 16:07:29 +0100hrdl(~ef24a0e6@unaffiliated/hrdl)
2021-01-11 16:09:17 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz)
2021-01-11 16:09:50 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net) (Remote host closed the connection)
2021-01-11 16:10:45 +0100piezoid(~piezoid@82-64-150-32.subs.proxad.net)
2021-01-11 16:10:50 +0100acidjnk_new(~acidjnk@p200300d0c704e7934412496f05d02b0d.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2021-01-11 16:11:34 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net)
2021-01-11 16:16:49 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds)
2021-01-11 16:18:08 +0100darjeeling_(~darjeelin@115.215.40.96)
2021-01-11 16:21:43 +0100boxscape(4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Ping timeout (120 seconds))
2021-01-11 16:22:36 +0100 <__monty__> pedrorubster[m]: I'd simply use the groupby statements to tell me which columns should be part of the keys then keep a map of values which represent the "state to every one of them" you mention. You'd take input, derive the key, fetch the value, do the operation on the value and the new value and store that at the key and also output it.
2021-01-11 16:22:49 +0100 <__monty__> Is this enough to get you started?
2021-01-11 16:22:54 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Quit: No Ping reply in 180 seconds.)
2021-01-11 16:23:26 +0100fendor_(~fendor@77.119.128.187.wireless.dyn.drei.com)
2021-01-11 16:25:46 +0100pythag76[m](pythag76ma@gateway/shell/matrix.org/x-uokvpcmzafuiszqm)
2021-01-11 16:26:14 +0100fendor(~fendor@91.141.0.240.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-01-11 16:26:53 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Remote host closed the connection)
2021-01-11 16:27:19 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127)
2021-01-11 16:31:33 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2021-01-11 16:31:47 +0100LKoen(~LKoen@152.172.9.109.rev.sfr.net)
2021-01-11 16:32:02 +0100niekvandepas(~niekvande@2001:985:bebc:1:fd9b:198b:bc6e:4127) (Ping timeout: 260 seconds)
2021-01-11 16:33:24 +0100knupfer(~Thunderbi@200116b82c62e3007dce87ecfcf2f682.dip.versatel-1u1.de) (Ping timeout: 258 seconds)
2021-01-11 16:35:21 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 16:37:52 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 16:40:06 +0100ArConan(9de62a69@157.230.42.105) (Quit: Connection closed)
2021-01-11 16:40:47 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh)
2021-01-11 16:42:49 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 264 seconds)
2021-01-11 16:43:44 +0100miklcct(quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (Remote host closed the connection)
2021-01-11 16:44:53 +0100miklcct(quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7)
2021-01-11 16:45:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-01-11 16:47:22 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 16:47:25 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-01-11 16:48:24 +0100niekvandepas(~niekvande@89.205.132.36)
2021-01-11 16:48:57 +0100 <pedrorubster[m]> <__monty__ "Is this enough to get you starte"> Sorry, I'm a bit newbie on haskell, I really didn't got what you said :(
2021-01-11 16:49:03 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Excess Flood)
2021-01-11 16:50:46 +0100hyiltiz(~quassel@93.119.106.77)
2021-01-11 16:50:46 +0100hyiltiz(~quassel@93.119.106.77) (Changing host)
2021-01-11 16:50:46 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 16:51:37 +0100 <__monty__> Ok, do you know what a Map is?
2021-01-11 16:53:28 +0100niekvand_(~niekvande@84.241.193.122)
2021-01-11 16:54:43 +0100niekvandepas(~niekvande@89.205.132.36) (Ping timeout: 246 seconds)
2021-01-11 16:55:25 +0100darjeeling_(~darjeelin@115.215.40.96) (Ping timeout: 246 seconds)
2021-01-11 16:56:28 +0100argento(~argent0@168.227.96.26) (Ping timeout: 246 seconds)
2021-01-11 16:57:14 +0100hnOsmium0001(uid453710@gateway/web/irccloud.com/x-lyrlgqqxxqbznztz)
2021-01-11 16:59:22 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net)
2021-01-11 17:00:04 +0100theduke(thedukem1@gateway/shell/matrix.org/x-hegbybueqtkglolp) (Quit: Idle for 30+ days)
2021-01-11 17:01:53 +0100 <pedrorubster[m]> Yes, I do
2021-01-11 17:01:53 +0100carlomagno(~cararell@148.87.23.11) (Remote host closed the connection)
2021-01-11 17:01:54 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844) (Remote host closed the connection)
2021-01-11 17:02:03 +0100 <pedrorubster[m]> Not that newbie, the issue is mainly
2021-01-11 17:02:20 +0100 <pedrorubster[m]> Imagine that I do average 1 groupby 2 groupby 3
2021-01-11 17:02:30 +0100 <pedrorubster[m]> I need to keep state on every pair on the 2nd and 3rd column
2021-01-11 17:02:48 +0100 <pedrorubster[m]> But how do I do if it's 3?
2021-01-11 17:02:59 +0100 <texasmynsted> anybody here use haskell on macOS and integrate it with a GUI?
2021-01-11 17:03:01 +0100 <pedrorubster[m]> because if it was only just 2, it would be easier
2021-01-11 17:03:07 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 17:03:14 +0100mastarija(~mastarija@188.252.198.137)
2021-01-11 17:03:23 +0100 <pedrorubster[m]> I just don't know how to do when the number of groupby's can change to whatever you want __monty__
2021-01-11 17:05:10 +0100 <__monty__> pedrorubster[m]: Ah, right. You can use lists as keys into the map.
2021-01-11 17:05:28 +0100 <pedrorubster[m]> How so? Sorry, I'm really really confused
2021-01-11 17:05:54 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Ping timeout: 260 seconds)
2021-01-11 17:06:52 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh) (Remote host closed the connection)
2021-01-11 17:07:09 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh)
2021-01-11 17:07:50 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Ping timeout: 264 seconds)
2021-01-11 17:07:53 +0100niekvand_(~niekvande@84.241.193.122) (Remote host closed the connection)
2021-01-11 17:08:28 +0100niekvandepas(~niekvande@84.241.193.122)
2021-01-11 17:08:38 +0100hyiltiz(~quassel@93.119.106.77)
2021-01-11 17:08:38 +0100hyiltiz(~quassel@93.119.106.77) (Changing host)
2021-01-11 17:08:38 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 17:10:33 +0100 <__monty__> So, the groupby's tell you which columns to collect in a list and then you can use that list as a key into the Map.
2021-01-11 17:10:37 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
2021-01-11 17:11:00 +0100pavonia(~user@unaffiliated/siracusa) (Quit: Bye!)
2021-01-11 17:11:26 +0100Vulfe(~vulfe@2600:1702:31b0:34e0:21b8:123b:aba8:7844)
2021-01-11 17:11:55 +0100knupfer(~Thunderbi@mue-88-130-61-056.dsl.tropolys.de)
2021-01-11 17:12:07 +0100knupfer(~Thunderbi@mue-88-130-61-056.dsl.tropolys.de) (Client Quit)
2021-01-11 17:12:10 +0100knupfer1(~Thunderbi@200116b82c62e30071e812f479534363.dip.versatel-1u1.de)
2021-01-11 17:12:25 +0100niekvandepas(~niekvande@84.241.193.122) (Ping timeout: 240 seconds)
2021-01-11 17:12:31 +0100 <pedrorubster[m]> yes, but how do you keep state for every combination to each value that each collumn can take?
2021-01-11 17:13:03 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Client Quit)
2021-01-11 17:13:53 +0100darjeeling_(~darjeelin@115.215.40.96)
2021-01-11 17:13:54 +0100 <__monty__> You mean because average needs past values?
2021-01-11 17:14:18 +0100niekvandepas(~niekvande@84.241.193.122)
2021-01-11 17:14:33 +0100knupfer1knupfer
2021-01-11 17:16:27 +0100 <pedrorubster[m]> No, I mean
2021-01-11 17:16:32 +0100shailangsa(~shailangs@host86-186-142-117.range86-186.btcentralplus.com) (Ping timeout: 256 seconds)
2021-01-11 17:16:38 +0100 <pedrorubster[m]> for example
2021-01-11 17:16:48 +0100pedrorubster[m]sent a long message: < https://matrix.org/_matrix/media/r0/download/matrix.org/tVKfHWkowCYQvGWKDjSEHegC/message.txt >
2021-01-11 17:16:50 +0100 <pedrorubster[m]> On this case
2021-01-11 17:17:05 +0100 <pedrorubster[m]> you need to save state to every combination that the 2nd column and the 3rd can take
2021-01-11 17:17:39 +0100 <pedrorubster[m]> it's 1,4 for the first 3, then it changes to 2,4 and then 2,2 back to 2,4 and then 2,2 and you need to save state to EVERY combination that can occur
2021-01-11 17:18:20 +0100 <__monty__> 0 4 1 4 -> key is [1, 4] -> insertWith [1,4] avg 4 stateMap
2021-01-11 17:18:21 +0100pedrorubster[m]sent a long message: < https://matrix.org/_matrix/media/r0/download/matrix.org/EBelxKWsEYGkNuhBkxtejTBl/message.txt >
2021-01-11 17:19:15 +0100 <__monty__> Does that next run operate on the data stored so far?
2021-01-11 17:20:02 +0100 <pedrorubster[m]> No
2021-01-11 17:20:03 +0100hexo(~hexo@gateway/tor-sasl/hexo) (Ping timeout: 240 seconds)
2021-01-11 17:20:08 +0100carlomagno(~cararell@148.87.23.13)
2021-01-11 17:20:13 +0100 <pedrorubster[m]> You start the program, you put the groupby line first
2021-01-11 17:20:16 +0100 <pedrorubster[m]> then you can't change it
2021-01-11 17:20:50 +0100hexo(~hexo@gateway/tor-sasl/hexo)
2021-01-11 17:20:52 +0100 <__monty__> Then I don't really see the problem. You read the groupby's and those fix which values you add to the list you'll use as a key each time.
2021-01-11 17:21:30 +0100 <pedrorubster[m]> How do you scale from 2 groupby to 3 for example
2021-01-11 17:21:46 +0100 <ij> is it possible to read from an mutable vector without effects?
2021-01-11 17:22:09 +0100 <xerox_> what does that mean
2021-01-11 17:22:12 +0100 <pedrorubster[m]> __monty__: Can I DM you? I'm willing to pay for your help, I'm stuck on this for over 10 hours
2021-01-11 17:23:23 +0100Guest_81(782028db@120.32.40.219)
2021-01-11 17:23:45 +0100 <Guest_81> Hey, I'd like to ask a question about "cabal install --only-dependencies", thank you so much!
2021-01-11 17:24:03 +0100 <merijn> Guest_81: "it's mostly obsolete" ;)
2021-01-11 17:24:09 +0100 <Guest_81> I ran this one in terminal, then show "cabal: Invalid package ID: ."
2021-01-11 17:24:19 +0100nhs(~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
2021-01-11 17:24:24 +0100 <Guest_81> :') oh
2021-01-11 17:24:28 +0100 <merijn> Guest_81: Well, does you have a cabal file in that directory?
2021-01-11 17:24:39 +0100 <Guest_81> our teacher let us do like that
2021-01-11 17:24:40 +0100 <ij> xerox_, well, I know the only place where I would mutate the vector, so in-between the mutations I would like to be able to read it whole (just not to be required to type-check effects) in-between mutations
2021-01-11 17:24:52 +0100 <ij> I'm not sure I explained it very well
2021-01-11 17:24:53 +0100 <Guest_81> oh I'm not sure, merijn how could I check?
2021-01-11 17:25:16 +0100 <merijn> Well, is there a file with the extension .cabal?
2021-01-11 17:25:22 +0100 <xerox_> ij: maybe you can look at the api available for the various mutable vectors haskell has
2021-01-11 17:25:30 +0100 <Guest_81> I use cabal-install version 3.2.0.0 and macOS 11.1
2021-01-11 17:25:38 +0100 <ij> xerox_, yeah, I'm looking
2021-01-11 17:25:47 +0100 <Guest_81> merijn oh!
2021-01-11 17:25:56 +0100 <Guest_81> where can I find it '=(
2021-01-11 17:26:18 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 17:26:33 +0100ransom_(~c4264035@8.48.134.54)
2021-01-11 17:26:35 +0100 <merijn> Guest_81: "cabal install --dependencies-only ." assumes there's a cabal file/package in the current directory, if you don't have one, then it's not gonna work, no
2021-01-11 17:26:45 +0100 <xerox_> ij: maybe your point is you think there could be a pure way to read that wouldn't need the type to be in the effect monad like IO or ST, but that woudln't work very well because then the read wouldn't be sequenced, so it could happen before or after other writes which kind of makes it impossible to use?
2021-01-11 17:27:08 +0100 <Guest_81> oh!!!!!!!!!
2021-01-11 17:27:27 +0100 <Guest_81> so I need to " cd ...."?
2021-01-11 17:27:28 +0100 <ij> xerox_, yeah, but this could work, if you had a lock on it that said "pure computation is using it, so no modifications possible until that's happened"
2021-01-11 17:27:35 +0100 <Guest_81> oh!
2021-01-11 17:27:38 +0100 <Guest_81> got it!!!
2021-01-11 17:27:54 +0100 <ij> xerox_, does that make sense? I'm just wondering whether there's something that works that way\
2021-01-11 17:28:03 +0100 <Guest_81> Thank you so much!!!! merijn
2021-01-11 17:28:17 +0100 <xerox_> ij: that is not needed because inside your io/st action you can go off in the pure world as long as you want and then come back for the next important-to-happen-in-order thing
2021-01-11 17:28:21 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
2021-01-11 17:29:02 +0100 <ij> xerox_, but I can just pass it around in the pure world, I can't read it
2021-01-11 17:29:03 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Ping timeout: 240 seconds)
2021-01-11 17:29:08 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Ping timeout: 272 seconds)
2021-01-11 17:29:36 +0100 <ij> xerox_, is the only option to model effects inside my logic that reads from vector?
2021-01-11 17:29:52 +0100Guest_81(782028db@120.32.40.219) (Quit: Connection closed)
2021-01-11 17:29:52 +0100turion(~turion@2a02:810d:8abf:c4a8:d43a:b21:28bf:441a)
2021-01-11 17:30:04 +0100 <xerox_> ij: I mean you can get an immutable array off of your (say) runST $ ... and then do stuff, and then do *another* runST $ ... with the new contents, nobody is stopping you
2021-01-11 17:30:14 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-01-11 17:30:21 +0100 <ij> I want to have only one or two copies in memory
2021-01-11 17:30:28 +0100 <ij> including abandoned ones
2021-01-11 17:30:32 +0100 <xerox_> that achieves that
2021-01-11 17:31:01 +0100 <ij> ah, alright. I don't know much about ST, I just have some random hunch from reading IRC
2021-01-11 17:31:11 +0100niekvandepas(~niekvande@84.241.193.122) (Remote host closed the connection)
2021-01-11 17:31:43 +0100niekvandepas(~niekvande@84.241.193.122)
2021-01-11 17:31:55 +0100 <xerox_> 'thaw' copies the immutable one into a new mutable one
2021-01-11 17:32:14 +0100 <xerox_> so you can resume your mutating mutating
2021-01-11 17:33:17 +0100 <ski> ij : note that the elements aren't stored in the `IOArray'/`STArray'/`MVector'/whatever
2021-01-11 17:33:17 +0100 <ij> I feel like ST should be able to solve my problems, but I can't piece it together in my head
2021-01-11 17:33:38 +0100 <merijn> ij: What's your problem?
2021-01-11 17:34:05 +0100da39a3ee5e6b4b0d(~da39a3ee5@2403:6200:8876:255c:18d1:c1a9:13be:6f9e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 17:34:09 +0100solarliner(~solarline@243.81.10.109.rev.sfr.net)
2021-01-11 17:34:25 +0100niekvandepas(~niekvande@84.241.193.122) (Read error: Connection reset by peer)
2021-01-11 17:34:59 +0100 <ij> merijn, I realized the maze data I'm backtracking with on can be shared, because important data is in other structures
2021-01-11 17:35:18 +0100 <ij> ski, in the unboxed ones they are, aren't they?
2021-01-11 17:35:24 +0100 <ski> no
2021-01-11 17:35:48 +0100 <ski> they're stored in the state passed around under the covers in `IO'/`ST'
2021-01-11 17:36:11 +0100hyiltiz(~quassel@93.119.106.77)
2021-01-11 17:36:11 +0100hyiltiz(~quassel@93.119.106.77) (Changing host)
2021-01-11 17:36:11 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 17:36:46 +0100 <ski> think of an `IORef'/`IOArray'/&c. as an index into an array (the memory array), or a key into a map, that, given the array/map, you'll be able to access the corresponding elements/values
2021-01-11 17:37:52 +0100niekvandepas(~niekvande@84.241.193.122)
2021-01-11 17:38:02 +0100 <ski> (this is also how `Eq (IORef a)' can work without `Eq a'. it only compares the "index")
2021-01-11 17:38:15 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 17:38:34 +0100 <ij> so basically a pointer to the actual data in somewhere in IO/ST context, if I understand what you're saying
2021-01-11 17:38:38 +0100son0p(~son0p@181.136.122.143) (Ping timeout: 256 seconds)
2021-01-11 17:38:44 +0100 <ski> if you only have an `IOArray', then you don't have the corresponding elements
2021-01-11 17:39:22 +0100 <ski> you must use `IO' to get access to the memory in which you can look up the elements. conceptually the elements are not in the `IOArray' itself
2021-01-11 17:39:28 +0100 <ij> because it is boxed? (stores pointers)
2021-01-11 17:39:31 +0100 <ski> no
2021-01-11 17:39:44 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2021-01-11 17:40:23 +0100philopsos(~caecilius@gateway/tor-sasl/caecilius)
2021-01-11 17:43:12 +0100 <ski> consider `Mem m' implemented as `State [m]', and `MemRef m' as `Int', and then give operations `newMemRef :: m -> Mem m (MemRef m)',`readMem :: MemRef m -> Mem m m',`writeMem :: MemRef m -> m -> Mem m ()'
2021-01-11 17:44:14 +0100 <ij> wait, IOArray is just a pointer to actual data, so you can't access contents without reading more memory – is that it?
2021-01-11 17:44:15 +0100 <ski> if you're given a `MemRef String', you actually only have an `Int' inside, not a `String'. you need to use `Mem' to access the `Strig' (using `readMem')
2021-01-11 17:45:04 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
2021-01-11 17:45:09 +0100 <ski> do you follow how one could implement these operations ?
2021-01-11 17:45:51 +0100 <ij> yes, those are basic memory operations, but typed
2021-01-11 17:46:10 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-01-11 17:46:38 +0100 <ski> e.g. `newMemRef m = MkMem (state (\ms -> (MkMemRef (length ms),ms ++ [m])))'
2021-01-11 17:46:57 +0100 <ij> yes, that is clear
2021-01-11 17:47:19 +0100 <ski> and it's clear that a `MemRef m' doesn't any `m', right ?
2021-01-11 17:47:26 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 17:47:30 +0100 <ij> yes, it's a pointer :)
2021-01-11 17:47:39 +0100 <ski> it's an index, into the list of `m's
2021-01-11 17:47:46 +0100 <ij> pointers are indexes, aren't they
2021-01-11 17:48:15 +0100 <ski> a pointer, if you like, with the understanding that it just tells you where to look, elsewhere, to find the location in which some particular `m' is stored
2021-01-11 17:48:25 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
2021-01-11 17:48:55 +0100 <ij> I think it's safe to call it a pointer – it is not required to be a pointer to actual computer's memory
2021-01-11 17:49:01 +0100 <ij> to my head anyway
2021-01-11 17:49:11 +0100 <ski> what i'm arguing here is that it's useful to view references to mutable cells, and to mutable arrays/vectors, with `IO'/`ST'/`STM', in a similar way
2021-01-11 17:49:20 +0100geekosaur(42d52137@66.213.33.55)
2021-01-11 17:50:30 +0100 <mniip> if you yoneda a MemRef it's as good as containing a mutable m inside
2021-01-11 17:50:39 +0100twopoint718(~cjw@fsf/member/twopoint718)
2021-01-11 17:50:43 +0100 <ski> so, you can't have `IORef a -> a' for a similar reason that you can't have `MemRef m -> m'
2021-01-11 17:51:44 +0100 <ski> if it couldn't change value, then it would be more arguable that one could get an operation like that
2021-01-11 17:51:47 +0100 <ski> (see e.g.
2021-01-11 17:51:49 +0100 <mniip> I guess the notion of "contain" is different in `Kleisli IO`
2021-01-11 17:51:52 +0100 <ski> @hackage ivar-simple
2021-01-11 17:51:53 +0100 <lambdabot> https://hackage.haskell.org/package/ivar-simple
2021-01-11 17:51:54 +0100 <ski> )
2021-01-11 17:52:40 +0100 <ij> ski, but a vector is a pointer as well, isn't it?
2021-01-11 17:52:49 +0100 <ij> v :: Vector a
2021-01-11 17:53:02 +0100 <merijn> define "is" and "pointer"
2021-01-11 17:53:03 +0100 <ski> ij : so, if you were to allow reads from the mutable array/vector, then those could happen later, because of a lazy implementation, and then those reads wouldn't be sequenced (as mentioned before)
2021-01-11 17:53:10 +0100 <monochrom> Right, Haskell's -> is very different from SML's ->. "IORef a -> a" is perfectly normal in SML.
2021-01-11 17:53:36 +0100devalot(~ident@mail.pmade.com)
2021-01-11 17:53:41 +0100 <ski> ij : so .. i think your best bet are `freeze' and `thaw' operations
2021-01-11 17:54:01 +0100 <ij> ski, yeah, that probably means I'll have to have effectful reading
2021-01-11 17:54:17 +0100 <merijn> ij: Why is that a problem, though?
2021-01-11 17:54:32 +0100 <ski> (there are unsafe variants of those, that doesn't copy it, but to use those, one must be sure that one has no lingering reference to the old one ..)
2021-01-11 17:54:58 +0100 <ski> (i guess maybe one could also imagine something like a diff-array ?)
2021-01-11 17:55:01 +0100 <ij> merijn, I was just wondering whether that is somehow possible
2021-01-11 17:55:18 +0100 <ski> perhaps ij wanted to avoid sequencing a batch of reads
2021-01-11 17:55:28 +0100 <ski> (sequencing them wrt each other, that is)
2021-01-11 17:56:04 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
2021-01-11 17:56:33 +0100ijthinks...
2021-01-11 17:56:35 +0100 <ij> yes, that is exactly it
2021-01-11 17:56:51 +0100 <monochrom> But SML's -> is so messed up that "readIORef :: IORef a -> a" suggests that IORef Int contains the Int value, but "getChar :: () -> Char" does not suggest that () contains the Char value.
2021-01-11 17:57:18 +0100ski. o O ( SML (and OCaml) even allows matching on `ref'-patterns .. )
2021-01-11 17:57:20 +0100 <monochrom> (The same can be said of Haskell's IO. But at least the problem is not with -> now.)
2021-01-11 17:57:54 +0100 <monochrom> Oh, that reminds me of Rust. Took me a while.
2021-01-11 17:57:54 +0100ransom_(~c4264035@8.48.134.54) (Ping timeout: 256 seconds)
2021-01-11 17:57:59 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net)
2021-01-11 17:59:06 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Quit: No Ping reply in 180 seconds.)
2021-01-11 17:59:13 +0100 <ski> (in the MLs, `readIORef :: IORef a -> a' would cause a type system hole (being able to implement `unsafeCoerce :: a -> b'), were it not for the "value restriction" (which is reminiscent of the DMR ..) .. (with `unsafePerformIO :: IO a -> a' for Haskell, one could implement `unsafeCoerce' in the same way))
2021-01-11 17:59:27 +0100 <ski> monochrom : in which way ?
2021-01-11 17:59:29 +0100shailangsa(~shailangs@host86-186-177-183.range86-186.btcentralplus.com)
2021-01-11 17:59:30 +0100 <ij> ski, but freeze/thaw make copies
2021-01-11 17:59:36 +0100 <ij> did you mean the unsafe version?
2021-01-11 17:59:38 +0100 <ij> +s
2021-01-11 17:59:38 +0100 <monochrom> It also has ref patterns.
2021-01-11 17:59:51 +0100 <ski> ij : if you can ensure you actually use them in safe ways
2021-01-11 18:00:15 +0100 <ski> monochrom : ah
2021-01-11 18:00:22 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 18:00:26 +0100xelxebar_(~xelxebar@gateway/tor-sasl/xelxebar) (Remote host closed the connection)
2021-01-11 18:00:36 +0100dcbdnl(~dcbdnl@c-73-76-129-120.hsd1.tx.comcast.net) (Client Quit)
2021-01-11 18:00:49 +0100xelxebar(~xelxebar@gateway/tor-sasl/xelxebar)
2021-01-11 18:01:16 +0100 <ski> monochrom : hm. does it treat variables in a pattern as (possibly) preexisting, assigning to them ? or does it always introduce new variables with patterns ?
2021-01-11 18:02:03 +0100 <ski> @hoogle runSTUArray
2021-01-11 18:02:03 +0100 <lambdabot> Data.Array.ST runSTUArray :: (forall s . ST s (STUArray s i e)) -> UArray i e
2021-01-11 18:02:03 +0100 <lambdabot> Data.Array.ST.Safe runSTUArray :: (forall s . ST s (STUArray s i e)) -> UArray i e
2021-01-11 18:02:22 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection)
2021-01-11 18:02:26 +0100 <ski> (that one does include a safe use of `unsafeFreeze')
2021-01-11 18:02:35 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-01-11 18:02:45 +0100hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus)
2021-01-11 18:03:11 +0100 <monochrom> It is real and proper patterns like in SML and Haskell. It introduces new variables.
2021-01-11 18:03:20 +0100 <merijn> ij: Why is the copy a problem, though?
2021-01-11 18:03:26 +0100 <ski> ok
2021-01-11 18:03:38 +0100 <ij> merijn, too many copies, they eat all RAM
2021-01-11 18:03:43 +0100 <ij> and I have lots
2021-01-11 18:03:47 +0100 <merijn> ij: The old copies get GCed, though?
2021-01-11 18:04:09 +0100 <ij> merijn, could it be that they're not GCed fast enough?
2021-01-11 18:04:33 +0100 <monochrom> GC is at least as fast as consumption.
2021-01-11 18:04:57 +0100 <monochrom> But you can still be appalled at the time spent copying.
2021-01-11 18:05:30 +0100 <ij> it's a one-time computation, CPU can churn as much as it pleases until it's done
2021-01-11 18:06:19 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 18:06:22 +0100 <ij> I guess I have to profile it... (gotta figure out the right RTS option)
2021-01-11 18:07:35 +0100 <monochrom> You can also be concerned if your physical RAM is less than 4 times the array size.
2021-01-11 18:07:43 +0100 <monochrom> Yes, 4, not even 2.
2021-01-11 18:08:20 +0100 <monochrom> If the computer copies, you need 2 times, at least for an intermittent moment. That much you know.
2021-01-11 18:08:48 +0100 <ephemient> if you can't mutate objects, you never have data in older generations pointing to data in newer generations, which means there's less to scan to determine liveliness. granted, GHC RTS still has to use card tables to track some mutations, and GC hasn't gotten anywhere close to the same level of engineering work that (for example) Java's has...
2021-01-11 18:08:55 +0100 <monochrom> Our GC is a copying GC, like double buffering in graphics. That's another 2 times. Congrats!
2021-01-11 18:08:55 +0100 <ij> merijn, you bring up a good point and I'm now concerned
2021-01-11 18:09:05 +0100 <ij> monochrom, :) gotcha
2021-01-11 18:11:03 +0100 <ephemient> I believe there is an optional non-moving GC as of 8.10? I haven't used it though
2021-01-11 18:11:18 +0100 <ij> right, it is the giant vectors that are hogging up memory
2021-01-11 18:11:41 +0100 <ij> each next backtracking level deeper the previous is pinned as used, but they can be shared in this case
2021-01-11 18:12:00 +0100 <ij> 85% alloc for Matrix.setElem (which is unboxed Vector under the hood)
2021-01-11 18:12:59 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 18:13:28 +0100xff0x(~xff0x@port-92-193-253-100.dynamic.as20676.net) (Quit: xff0x)
2021-01-11 18:13:57 +0100xff0x(~xff0x@2001:1a81:53ed:d500:fd7a:b0e1:64e1:be91)
2021-01-11 18:14:01 +0100 <ephemient> https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-flag---no… (with quite a few limitations)
2021-01-11 18:16:11 +0100 <merijn> tbh, rather than mutating the maze it's probably much simpler and efficient to have an immutable maze and have a Set/list/whatever to track which positions you finished
2021-01-11 18:16:46 +0100 <merijn> Then your memory usage is linear in the part of the maze you've explored
2021-01-11 18:17:19 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 246 seconds)
2021-01-11 18:17:33 +0100 <ij> merijn, I do have tracking of solved pieces and other additional info, but changes are still baked into the maze
2021-01-11 18:17:52 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-01-11 18:18:15 +0100 <ephemient> do they have to be? the representation could be "immutable base maze + diffs"
2021-01-11 18:18:31 +0100 <ij> yeah, I'm now thinking that I could totally do that
2021-01-11 18:18:50 +0100christo(~chris@81.96.113.213)
2021-01-11 18:18:58 +0100 <ij> which is what I got suggested yesterday and I didn't listen
2021-01-11 18:20:18 +0100 <ij> I continue being wrong on a daily basis
2021-01-11 18:23:13 +0100twopoint718(~cjw@fsf/member/twopoint718) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 18:24:42 +0100urodna_(~urodna@unaffiliated/urodna)
2021-01-11 18:28:16 +0100urodna(~urodna@unaffiliated/urodna) (Ping timeout: 256 seconds)
2021-01-11 18:28:23 +0100Franciman(~francesco@host-82-48-174-127.retail.telecomitalia.it) (Quit: Leaving)
2021-01-11 18:28:37 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-uolkbeaqxmvkvibt)
2021-01-11 18:29:13 +0100urodna__(~urodna@pool-108-53-252-14.nwrknj.fios.verizon.net)
2021-01-11 18:29:49 +0100niekvandepas(~niekvande@84.241.193.122) (Remote host closed the connection)
2021-01-11 18:30:22 +0100niekvandepas(~niekvande@84.241.193.122)
2021-01-11 18:31:04 +0100mmmattyx(uid17782@gateway/web/irccloud.com/x-wzxcapgnieyfthce) (Quit: Connection closed for inactivity)
2021-01-11 18:31:35 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 18:32:08 +0100christo(~chris@81.96.113.213)
2021-01-11 18:32:27 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 18:32:43 +0100christo(~chris@81.96.113.213)
2021-01-11 18:33:00 +0100 <nf> can anyone explain this comment in the Distributive doc? "Due to the lack of non-trivial comonoids in Haskell, we can restrict ourselves to requiring a Functor rather than some Coapplicative class."
2021-01-11 18:33:02 +0100urodna_(~urodna@unaffiliated/urodna) (Ping timeout: 256 seconds)
2021-01-11 18:33:27 +0100 <nf> i guess this refers to the constraint in distribute's type signature, and i understand why there are no non-trivial comonoids, but i don't know what comonoids have to do with anything
2021-01-11 18:34:01 +0100niekvandepas(~niekvande@84.241.193.122) (Read error: Connection reset by peer)
2021-01-11 18:34:02 +0100urodna(~urodna@unaffiliated/urodna)
2021-01-11 18:34:09 +0100 <nf> (ping edwardk)
2021-01-11 18:34:15 +0100twopoint718(~cjw@fsf/member/twopoint718)
2021-01-11 18:35:24 +0100mastarija(~mastarija@188.252.198.137) (Remote host closed the connection)
2021-01-11 18:35:47 +0100mastarija(~mastarija@188.252.198.137)
2021-01-11 18:36:12 +0100dfeuer(~dfeuer@pool-173-79-253-62.washdc.fios.verizon.net)
2021-01-11 18:36:26 +0100urodna__(~urodna@pool-108-53-252-14.nwrknj.fios.verizon.net) (Ping timeout: 256 seconds)
2021-01-11 18:37:25 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 18:37:26 +0100juuandyy(~juuandyy@90.166.144.65)
2021-01-11 18:39:13 +0100geekosaur(42d52137@66.213.33.55) (Ping timeout: 248 seconds)
2021-01-11 18:39:35 +0100juuandyy(~juuandyy@90.166.144.65) (Read error: Connection reset by peer)
2021-01-11 18:39:50 +0100juuandyy(~juuandyy@90.166.144.65)
2021-01-11 18:42:05 +0100conal(~conal@64.71.133.70)
2021-01-11 18:42:15 +0100niekvandepas(~niekvande@dhcp-077-249-088-250.chello.nl)
2021-01-11 18:43:14 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
2021-01-11 18:44:39 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 18:45:37 +0100elliott_(~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
2021-01-11 18:46:28 +0100niekvandepas(~niekvande@dhcp-077-249-088-250.chello.nl) (Ping timeout: 256 seconds)
2021-01-11 18:51:01 +0100conal(~conal@64.71.133.70) (Ping timeout: 256 seconds)
2021-01-11 18:52:37 +0100dyeplexer(~lol@unaffiliated/terpin) (Read error: Connection reset by peer)
2021-01-11 18:52:48 +0100conal(~conal@198.8.81.231)
2021-01-11 18:53:18 +0100dyeplexer(~lol@unaffiliated/terpin)
2021-01-11 18:53:36 +0100fendor_fendor
2021-01-11 18:54:02 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 18:54:59 +0100zaquest(~notzaques@5.128.210.178) (Ping timeout: 260 seconds)
2021-01-11 18:55:04 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 18:55:07 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 246 seconds)
2021-01-11 18:57:20 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Quit: No Ping reply in 180 seconds.)
2021-01-11 18:57:34 +0100hyiltiz(~quassel@93.119.106.77)
2021-01-11 18:57:34 +0100hyiltiz(~quassel@93.119.106.77) (Changing host)
2021-01-11 18:57:34 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 18:58:21 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 18:59:23 +0100 <dminuoso> % type family Asg x where Asg x = x
2021-01-11 18:59:23 +0100 <yahb> dminuoso:
2021-01-11 18:59:26 +0100 <dminuoso> % data D f = D (f Int)
2021-01-11 18:59:27 +0100 <yahb> dminuoso:
2021-01-11 18:59:30 +0100 <dminuoso> % instance Eq (D Asg)
2021-01-11 18:59:30 +0100 <yahb> dminuoso: ; <interactive>:106:10: error:; * The type family `Asg' should have 1 argument, but has been given none; * In the instance declaration for `Eq (D Asg)'
2021-01-11 18:59:45 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-01-11 18:59:48 +0100 <dminuoso> Is there an alternate way to do this?
2021-01-11 19:00:08 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 19:00:18 +0100geekosaur(42d52137@66.213.33.55)
2021-01-11 19:02:34 +0100conal(~conal@198.8.81.231) (Quit: Computer has gone to sleep.)
2021-01-11 19:04:18 +0100 <dminuoso> % data C; type family F mode y; type instance F C y = y
2021-01-11 19:04:19 +0100 <yahb> dminuoso:
2021-01-11 19:04:23 +0100 <dminuoso> % data D m = D (F m Int)
2021-01-11 19:04:23 +0100 <yahb> dminuoso:
2021-01-11 19:04:25 +0100 <dminuoso> % instance Eq (D C)
2021-01-11 19:04:25 +0100 <yahb> dminuoso: ; <interactive>:123:10: warning: [-Wmissing-methods]; * No explicit implementation for; either `==' or `/='; * In the instance declaration for `Eq (D C)'
2021-01-11 19:04:31 +0100 <dminuoso> Mmm. This works I guess
2021-01-11 19:05:01 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds)
2021-01-11 19:07:30 +0100twopoint718(~cjw@fsf/member/twopoint718) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 19:08:35 +0100ome(uid36537@gateway/web/irccloud.com/x-vxnalybdhvqhuavb) (Quit: Connection closed for inactivity)
2021-01-11 19:08:52 +0100conal(~conal@198.8.81.231)
2021-01-11 19:09:11 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 19:09:29 +0100christo(~chris@81.96.113.213)
2021-01-11 19:09:57 +0100Guest71(~textual@64.71.174.175)
2021-01-11 19:10:33 +0100dyeplexer(~lol@unaffiliated/terpin) (Remote host closed the connection)
2021-01-11 19:10:52 +0100Guest71(~textual@64.71.174.175) ()
2021-01-11 19:11:14 +0100twopoint718(~cjw@fsf/member/twopoint718)
2021-01-11 19:11:55 +0100_________(~textual@64.71.174.175)
2021-01-11 19:12:18 +0100_________Guest65500
2021-01-11 19:12:47 +0100 <Guest65500> t5
2021-01-11 19:14:33 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 19:15:30 +0100sujeet(sujeet@unaffiliated/freeboson) (Quit: bye)
2021-01-11 19:16:22 +0100Ariakenom(~Ariakenom@2001:9b1:efb:fc00:55e4:e64e:d0d2:62ce)
2021-01-11 19:17:27 +0100sujeet(sujeet@unaffiliated/freeboson)
2021-01-11 19:18:44 +0100Guest65500_0x4b42
2021-01-11 19:20:03 +0100_0x4b42(~textual@64.71.174.175) (Quit: Textual IRC Client: www.textualapp.com)
2021-01-11 19:21:00 +0100xsperry(~as@unaffiliated/xsperry) ()
2021-01-11 19:28:04 +0100argento(~argent0@168.227.97.34)
2021-01-11 19:29:24 +0100Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2021-01-11 19:39:45 +0100christo(~chris@81.96.113.213) (Remote host closed the connection)
2021-01-11 19:39:54 +0100hyiltiz(~quassel@unaffiliated/hyiltiz) (Quit: hyiltiz)
2021-01-11 19:40:05 +0100rajivr(uid269651@gateway/web/irccloud.com/x-xvvnrltyuwuuhove) (Quit: Connection closed for inactivity)
2021-01-11 19:40:37 +0100howdoi(uid224@gateway/web/irccloud.com/x-yjigqeaqwzhgddjd)
2021-01-11 19:40:43 +0100Deide(~Deide@217.155.19.23)
2021-01-11 19:41:20 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-01-11 19:41:43 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 19:41:52 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 19:42:01 +0100hyiltiz(~quassel@93.119.106.77)
2021-01-11 19:42:01 +0100hyiltiz(~quassel@93.119.106.77) (Changing host)
2021-01-11 19:42:01 +0100hyiltiz(~quassel@unaffiliated/hyiltiz)
2021-01-11 19:44:11 +0100gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving)
2021-01-11 19:44:37 +0100Tario(~Tario@201.192.165.173) (Read error: Connection reset by peer)
2021-01-11 19:44:42 +0100juuandyy(~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
2021-01-11 19:46:00 +0100jamm(~jamm@unaffiliated/jamm)
2021-01-11 19:46:13 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
2021-01-11 19:46:36 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh) (Ping timeout: 240 seconds)
2021-01-11 19:51:26 +0100eacameron(uid256985@gateway/web/irccloud.com/x-ccigqlpvwahmrvhs)
2021-01-11 19:51:38 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
2021-01-11 19:55:31 +0100bennofs(~quassel@2a01:4f8:c17:5579::1) (Remote host closed the connection)
2021-01-11 19:55:47 +0100bennofs(~quassel@2a01:4f8:c17:5579::1)
2021-01-11 20:00:30 +0100cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2021-01-11 20:00:32 +0100Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2021-01-11 20:00:52 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-01-11 20:02:37 +0100Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 264 seconds)
2021-01-11 20:03:22 +0100Lord_of_Life_Lord_of_Life
2021-01-11 20:03:33 +0100ericsagnes(~ericsagne@2405:6580:0:5100:e268:f1af:eeaa:71ac) (Ping timeout: 272 seconds)
2021-01-11 20:03:39 +0100berberman_(~berberman@unaffiliated/berberman)
2021-01-11 20:04:08 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Client Quit)
2021-01-11 20:04:25 +0100Alleria(~textual@mskresolve-a.mskcc.org)
2021-01-11 20:04:49 +0100AlleriaGuest94505
2021-01-11 20:04:57 +0100berberman(~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds)
2021-01-11 20:05:13 +0100twopoint718(~cjw@fsf/member/twopoint718) (Quit: Textual IRC Client: www.textualapp.com)
2021-01-11 20:05:24 +0100_deepfire(~user@80.92.100.69) (Remote host closed the connection)
2021-01-11 20:06:50 +0100Alleria__(~textual@mskresolve-a.mskcc.org) (Ping timeout: 272 seconds)
2021-01-11 20:07:16 +0100dandart(~Thunderbi@home.dandart.co.uk) (Ping timeout: 240 seconds)
2021-01-11 20:07:48 +0100dandart(~Thunderbi@home.dandart.co.uk)
2021-01-11 20:08:54 +0100Tario(~Tario@201.192.165.173)
2021-01-11 20:09:39 +0100dandart1(~Thunderbi@home.dandart.co.uk)
2021-01-11 20:10:45 +0100pera(pera@gateway/vpn/mullvad/pera) (Ping timeout: 240 seconds)
2021-01-11 20:12:05 +0100dandart(~Thunderbi@home.dandart.co.uk) (Ping timeout: 240 seconds)
2021-01-11 20:12:05 +0100dandart1dandart
2021-01-11 20:13:15 +0100knupfer(~Thunderbi@200116b82c62e30071e812f479534363.dip.versatel-1u1.de) (Remote host closed the connection)
2021-01-11 20:13:24 +0100knupfer(~Thunderbi@200116b82c62e3007cb54228cd86c296.dip.versatel-1u1.de)
2021-01-11 20:15:35 +0100ericsagnes(~ericsagne@2405:6580:0:5100:a978:5a86:791:f563)
2021-01-11 20:15:36 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 20:17:37 +0100gentauro(~gentauro@unaffiliated/gentauro) (Quit: leaving)
2021-01-11 20:17:53 +0100gentauro(~gentauro@unaffiliated/gentauro)
2021-01-11 20:24:05 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh)
2021-01-11 20:26:01 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 20:33:06 +0100puffnfresh(~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net) (Ping timeout: 265 seconds)
2021-01-11 20:33:58 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 20:35:01 +0100puffnfresh(~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net)
2021-01-11 20:41:40 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com) (Ping timeout: 256 seconds)
2021-01-11 20:44:10 +0100conal(~conal@198.8.81.231) (Quit: Computer has gone to sleep.)
2021-01-11 20:45:40 +0100hive-mind(~hivemind@rrcs-67-53-148-69.west.biz.rr.com)
2021-01-11 20:46:08 +0100mastarija(~mastarija@188.252.198.137) (Quit: Leaving)
2021-01-11 20:46:44 +0100jess(jess@freenode/staff/jess)
2021-01-11 20:47:40 +0100jess(jess@freenode/staff/jess) (Client Quit)
2021-01-11 20:47:40 +0100jamm(~jamm@unaffiliated/jamm)
2021-01-11 20:48:15 +0100jess(jess@freenode/staff/jess)
2021-01-11 20:48:19 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 20:49:56 +0100boxscape(4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89)
2021-01-11 20:50:58 +0100acidjnk_new(~acidjnk@p200300d0c704e7934412496f05d02b0d.dip0.t-ipconnect.de)
2021-01-11 20:51:45 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 20:52:14 +0100jamm(~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
2021-01-11 20:55:10 +0100acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 246 seconds)
2021-01-11 20:56:10 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh) (Ping timeout: 256 seconds)
2021-01-11 20:56:17 +0100geekosaur(42d52137@66.213.33.55) (Ping timeout: 248 seconds)
2021-01-11 20:56:19 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 260 seconds)
2021-01-11 20:57:26 +0100conal(~conal@64.71.133.70)
2021-01-11 20:58:52 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-01-11 20:59:14 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 20:59:54 +0100 <loli> is there a way to jump to definition in haskell LSP for emacs for dependencies?
2021-01-11 21:00:27 +0100 <loli> The project I'm currently working on has a bunch of the functionality split up into many different libraries, trying to traverse them by digging in by hand instead of jump to source has gotten quite tiring
2021-01-11 21:01:49 +0100xff0x(~xff0x@2001:1a81:53ed:d500:fd7a:b0e1:64e1:be91) (Ping timeout: 272 seconds)
2021-01-11 21:02:12 +0100xff0x(~xff0x@2001:1a81:53ed:d500:fb41:db64:748c:e168)
2021-01-11 21:02:34 +0100owner(~heronwr@198.52.165.210)
2021-01-11 21:02:40 +0100ownerheronwr
2021-01-11 21:02:59 +0100Up39(5434a07f@tm.84.52.160.127.dc.cable.static.telemach.net) (Quit: Connection closed)
2021-01-11 21:04:25 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds)
2021-01-11 21:05:41 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2021-01-11 21:06:36 +0100Neuromancer(~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds)
2021-01-11 21:06:38 +0100 <kuribas> LSP in emacs is pretty aweful compared to vscode
2021-01-11 21:06:45 +0100 <ezzieyguywuf> `less -RS` is _awesome_, it's changed my life
2021-01-11 21:07:08 +0100vicfred(vicfred@gateway/vpn/mullvad/vicfred)
2021-01-11 21:07:33 +0100 <loli> is it? that is a shame
2021-01-11 21:07:38 +0100 <loli> I was using intero until it died
2021-01-11 21:08:40 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 21:10:55 +0100geekosaur(42d52137@66.213.33.55)
2021-01-11 21:11:38 +0100conal(~conal@64.71.133.70)
2021-01-11 21:11:51 +0100 <dminuoso> loli: Mmm, I use hasktags so I can just jump to definition for that.
2021-01-11 21:12:09 +0100 <loli> hasktags solves this issue?
2021-01-11 21:12:24 +0100 <dminuoso> If the definition is inside the same package, yes.
2021-01-11 21:12:31 +0100 <loli> no
2021-01-11 21:12:43 +0100 <loli> the lsp mode gives me jump to definition for definitions in the same package
2021-01-11 21:12:53 +0100Neuromancer(~Neuromanc@unaffiliated/neuromancer)
2021-01-11 21:12:58 +0100seveg(~gabriel@188-167-252-202.dynamic.chello.sk)
2021-01-11 21:13:00 +0100 <loli> however the codebase I work in has it's code spread out between many different libraries
2021-01-11 21:14:25 +0100 <loli> I think I read an issue at one point about it? I can't seem to find it again... it's just a shame, as it makes moving around, finding definitions, tedious
2021-01-11 21:16:43 +0100seveg(~gabriel@188-167-252-202.dynamic.chello.sk) (Client Quit)
2021-01-11 21:18:20 +0100klardots1klardotsh
2021-01-11 21:19:32 +0100 <dminuoso> Im not sure how that would be doable, sensibly.
2021-01-11 21:19:50 +0100ADG1089__(~aditya@122.163.165.143) (Remote host closed the connection)
2021-01-11 21:19:59 +0100seveg(~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
2021-01-11 21:20:11 +0100danvet(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2021-01-11 21:20:14 +0100 <sm[m]> loli: in vs code if I mouse over something from a dependency, the haddock pops up, and also a link to the online haddock where you can click the source link
2021-01-11 21:20:15 +0100 <dminuoso> That would need some interesting interaction with cabal, to pluck the cabal archives used in the build..
2021-01-11 21:20:52 +0100 <dminuoso> sm[m]: How does it identify that thing?
2021-01-11 21:21:04 +0100 <sm[m]> ah you asked about emacs, but maybe it gives an idea
2021-01-11 21:21:12 +0100 <dminuoso> Does it use the build plan to find the correct package on hackage?
2021-01-11 21:21:21 +0100 <loli> sm[m]: yeah I get something similar, modulo being able to click the link
2021-01-11 21:21:25 +0100 <sm[m]> no idea dminuoso. Magic!
2021-01-11 21:21:42 +0100 <loli> often mod :: T -> Mod \n _Defined in Code.Base.Here
2021-01-11 21:22:10 +0100 <dminuoso> Well, that much is easy.
2021-01-11 21:22:35 +0100 <loli> well ghci knows where the code is, if you :i it
2021-01-11 21:22:45 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-01-11 21:22:48 +0100 <loli> at least for local packages which are external to the current one
2021-01-11 21:22:53 +0100PietPtr(~pieter@unaffiliated/pietdagamer)
2021-01-11 21:22:55 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Read error: Connection reset by peer)
2021-01-11 21:22:56 +0100 <dminuoso> Sure, but that wont give you access to any haddock
2021-01-11 21:23:05 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
2021-01-11 21:23:11 +0100p-core(~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
2021-01-11 21:23:37 +0100 <loli> sure, but I'd rather just use that to jump to source
2021-01-11 21:23:57 +0100 <loli> since it knows where it is defined and possibly even the line number, I'd rather just have my emacs dive to the page
2021-01-11 21:24:18 +0100thefybe(~thefybe@249-147-161-N2.customer.vsm.sh)
2021-01-11 21:24:22 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
2021-01-11 21:25:36 +0100royal_screwup21(52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
2021-01-11 21:27:15 +0100nineonine(~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
2021-01-11 21:27:57 +0100nineonine(~nineonine@50.216.62.2)
2021-01-11 21:28:38 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl)
2021-01-11 21:28:55 +0100 <sm[m]> #haskell-ide-engine will know
2021-01-11 21:29:50 +0100ystael(~ystael@209.6.50.55) (Ping timeout: 256 seconds)
2021-01-11 21:30:06 +0100knupfer(~Thunderbi@200116b82c62e3007cb54228cd86c296.dip.versatel-1u1.de) (Remote host closed the connection)
2021-01-11 21:30:21 +0100knupfer(~Thunderbi@200116b82c62e300d9ff7a8eb0f2bc98.dip.versatel-1u1.de)
2021-01-11 21:30:51 +0100 <idnar> how do I `take` on a `Data.Text.Lazy.Builder`?
2021-01-11 21:31:08 +0100 <merijn> idnar: You turn it into Text first
2021-01-11 21:31:45 +0100 <monochrom> Possible XY problem.
2021-01-11 21:32:45 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl) (Ping timeout: 240 seconds)
2021-01-11 21:33:02 +0100 <idnar> let me pastebin
2021-01-11 21:35:12 +0100 <idnar> https://gist.github.com/mithrandi/bddb422c9b751d104f85fd926d896a95
2021-01-11 21:41:13 +0100kuribas(~user@ptr-25vy0i7ug01ndhtx56u.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-01-11 21:45:04 +0100mht(~mht@mht.wtf)
2021-01-11 21:45:44 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 21:52:56 +0100 <loli> thanks sm[m]
2021-01-11 21:55:33 +0100 <monochrom> Perhaps "go" should count down from len to 0, too. This would not destroy the efficency benefits of using builder.
2021-01-11 21:56:49 +0100 <monochrom> builder's efficiency is gained from never looking back, aka "streaming".
2021-01-11 21:59:19 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007)
2021-01-11 21:59:59 +0100knupfer(~Thunderbi@200116b82c62e300d9ff7a8eb0f2bc98.dip.versatel-1u1.de) (Quit: knupfer)
2021-01-11 22:00:05 +0100coot(~coot@37.30.56.46.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2021-01-11 22:00:14 +0100knupfer(~Thunderbi@200116b82c62e3006c32357b74a11b0b.dip.versatel-1u1.de)
2021-01-11 22:02:58 +0100 <idnar> monochrom: good idea
2021-01-11 22:03:08 +0100Jd007(~Jd007@d154-5-83-24.bchsia.telus.net)
2021-01-11 22:05:17 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58) (Remote host closed the connection)
2021-01-11 22:05:41 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-01-11 22:06:08 +0100alx741(~alx741@181.196.69.216) (Quit: alx741)
2021-01-11 22:06:13 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2021-01-11 22:06:38 +0100conal(~conal@64.71.133.70)
2021-01-11 22:06:53 +0100conal(~conal@64.71.133.70) (Client Quit)
2021-01-11 22:07:23 +0100rayyyy(~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds)
2021-01-11 22:07:55 +0100alx741(~alx741@181.196.69.216)
2021-01-11 22:07:57 +0100p3n(~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
2021-01-11 22:12:54 +0100tsrt^(~hph@ip98-184-89-2.mc.at.cox.net) ()
2021-01-11 22:14:32 +0100nrh^(~hph@ip98-184-89-2.mc.at.cox.net)
2021-01-11 22:17:13 +0100Twey(~twey@unaffiliated/twey) (Quit: ZNC - http://znc.in)
2021-01-11 22:18:44 +0100aveltras(uid364989@gateway/web/irccloud.com/x-xykekrezuzwmeque)
2021-01-11 22:19:12 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2021-01-11 22:19:44 +0100statusfailed(~statusfai@statusfailed.com) (Ping timeout: 260 seconds)
2021-01-11 22:20:07 +0100ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-01-11 22:22:23 +0100ulidtko|k(~ulidtko@194.54.80.38) (Ping timeout: 256 seconds)
2021-01-11 22:22:54 +0100piezoid(~piezoid@82-64-150-32.subs.proxad.net) (Quit: leaving...)
2021-01-11 22:23:41 +0100Twey(~twey@unaffiliated/twey)
2021-01-11 22:24:24 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca) (Ping timeout: 260 seconds)
2021-01-11 22:25:25 +0100turion(~turion@2a02:810d:8abf:c4a8:d43a:b21:28bf:441a) (Ping timeout: 272 seconds)
2021-01-11 22:27:49 +0100statusfailed(~statusfai@statusfailed.com)
2021-01-11 22:27:53 +0100justsomeguy(~Srain@unaffiliated/--/x-3805311)
2021-01-11 22:27:56 +0100 <koz_> @unmtl ExceptT e (State s) a
2021-01-11 22:27:56 +0100 <lambdabot> s -> (Either e a, s)
2021-01-11 22:29:52 +0100 <monochrom> I always like to pose the question to my students "should I use s->(Either e a,s)? or should it be s->Either e (a,s)?" given a particular scenerio.
2021-01-11 22:30:17 +0100 <Rembane> It depends.
2021-01-11 22:30:21 +0100 <monochrom> Yes.
2021-01-11 22:30:59 +0100 <monochrom> But I always describe a scenerio to requires exactly one of them.
2021-01-11 22:31:17 +0100 <monochrom> To test their understanding of the consequences of each.
2021-01-11 22:31:22 +0100 <Rembane> ^^ good stuff
2021-01-11 22:31:31 +0100justsomeguy(~Srain@unaffiliated/--/x-3805311) (Remote host closed the connection)
2021-01-11 22:32:06 +0100 <koz_> monochrom: Bonus points - all the possible stackings of LogicT, StateT and ExceptT and the varying semantics of each.
2021-01-11 22:32:37 +0100 <monochrom> Ah yeah, I should do that one day. Student marks are too high.
2021-01-11 22:32:58 +0100 <koz_> I actually whiteboarded that up for myself recently.
2021-01-11 22:32:59 +0100 <Rembane> IIRC you can break things in really fun ways if you include ContT too
2021-01-11 22:33:00 +0100 <koz_> Good stuff.
2021-01-11 22:33:10 +0100 <koz_> Rembane: LogicT is a special case of ContT.
2021-01-11 22:34:04 +0100 <monochrom> But it's such a special case you can use the simpler [] model.
2021-01-11 22:34:13 +0100 <Rembane> koz_: Nice. Which one is the most fun?
2021-01-11 22:34:19 +0100 <koz_> Yeah, and I'd actually recommend it because otherwise your brain will break.
2021-01-11 22:34:55 +0100 <koz_> Rembane: ContT is the harder of the two. Depends on your definition of 'fun' I guess.
2021-01-11 22:35:00 +0100 <monochrom> To some extent ContT is not fair because I don't have time to teach them.
2021-01-11 22:35:24 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca)
2021-01-11 22:35:52 +0100 <Rembane> koz_: I'm having a hard time deciding which definition is the most suitable here. :)
2021-01-11 22:36:08 +0100 <koz_> Rembane: The real question should be 'for whom is it the most fun?'.
2021-01-11 22:36:16 +0100 <koz_> If your answer is 'monochrom', definitely ContT.
2021-01-11 22:36:22 +0100 <monochrom> :)
2021-01-11 22:36:26 +0100 <koz_> If your answer is 'the students', then definitely LogicT.
2021-01-11 22:36:40 +0100 <koz_> If your answer is '#haskell', the correct response is 'porque no los dos?'.
2021-01-11 22:36:51 +0100 <koz_> Or, depending on where you're from, 'les deux, mon capitaine!'.
2021-01-11 22:36:51 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl)
2021-01-11 22:37:02 +0100 <monochrom> I indirectly inflicted Cont on my students in an assignment. It's by way of the monad of "from random variable to expected value".
2021-01-11 22:37:33 +0100 <Rembane> koz_: :D
2021-01-11 22:37:35 +0100 <monochrom> (which is one of many versions of "the" probability monad)
2021-01-11 22:38:15 +0100 <monochrom> Let X be your sample space. A random variable is a function from X to numbers. Let's say X->Double
2021-01-11 22:38:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-01-11 22:38:59 +0100 <monochrom> Err bad name choice X because people want to use X for the random variable!
2021-01-11 22:39:13 +0100 <monochrom> Let S be your sample space. A random variable is a function from S to numbers. Let's say R->Double.
2021-01-11 22:39:58 +0100 <monochrom> err typo, s/R/S/
2021-01-11 22:40:01 +0100 <monochrom> Let S be your sample space. A random variable is a function from S to numbers. Let's say S->Double.
2021-01-11 22:40:24 +0100Guest_8(cdfaa09d@d205-250-160-157.bchsia.telus.net)
2021-01-11 22:40:34 +0100xwvvvvwx(xwvvvvwx@gateway/vpn/mullvad/xwvvvvwx) (Quit: ZNC 1.8.2 - https://znc.in)
2021-01-11 22:40:36 +0100son0p(~son0p@181.136.122.143)
2021-01-11 22:40:43 +0100Guest_8(cdfaa09d@d205-250-160-157.bchsia.telus.net) (Client Quit)
2021-01-11 22:40:44 +0100 <monochrom> If you write "E(X)" for the expected value of X::S->Double, the logical conclusion is E :: (S->Double)->Double.
2021-01-11 22:40:53 +0100xwvvvvwx(xwvvvvwx@gateway/vpn/mullvad/xwvvvvwx)
2021-01-11 22:40:56 +0100jonatanb(~jonatanb@83.24.29.180.ipv4.supernova.orange.pl) (Ping timeout: 240 seconds)
2021-01-11 22:40:59 +0100 <monochrom> Hey that looks suspiciously like Cont Double S
2021-01-11 22:41:46 +0100 <monochrom> What really surprised me is that if fmap, pure, <*>, and >>= are to make sense in terms of expected values, they are also Cont's fmap, pure, <*>, >>=
2021-01-11 22:42:27 +0100 <koz_> monochrom: This is further proof that you can build an entire career on Cont(T).
2021-01-11 22:44:49 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca) (Quit: WeeChat 3.0)
2021-01-11 22:47:19 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca)
2021-01-11 22:47:26 +0100debclair(~debclair@host-181-39-120-169.netlife.ec)
2021-01-11 22:48:27 +0100 <monochrom> And my ingenius stroke of finishing touch of that assignment is the following.
2021-01-11 22:49:07 +0100 <monochrom> I reckoned that if I called it the "probability monad" as in the research literature, it's way too googlable. I needed a more obscure name.
2021-01-11 22:49:47 +0100heatsink(~heatsink@2600:1700:bef1:5e10:ad29:eab5:ee86:fb58)
2021-01-11 22:49:53 +0100 <monochrom> Hrm, probability, randomness... Eureka! "random monad".
2021-01-11 22:50:01 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2021-01-11 22:50:34 +0100 <monochrom> My certification of success came when a very weak student emailed me to ask "may I import Control.Monad.Random"? Gotcha!
2021-01-11 22:51:11 +0100 <monochrom> I.e., why give it an obscure name when you can give it a misleading name bwhahahaha
2021-01-11 22:51:45 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca) (Client Quit)
2021-01-11 22:52:30 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 22:53:27 +0100geekosaur(42d52137@66.213.33.55) (Quit: Connection closed)
2021-01-11 22:53:39 +0100 <glguy> monochrom: misleading names have the potential to give people a false sense of familiarity. obscure ones are just scary :nod:
2021-01-11 22:53:56 +0100Aquazi(uid312403@gateway/web/irccloud.com/x-uolkbeaqxmvkvibt) (Quit: Connection closed for inactivity)
2021-01-11 22:54:23 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection)
2021-01-11 22:54:24 +0100conal(~conal@64.71.133.70)
2021-01-11 22:56:08 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-01-11 22:57:31 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds)
2021-01-11 22:58:40 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Quit: jpds)
2021-01-11 22:59:02 +0100dfeuer(~dfeuer@pool-173-79-253-62.washdc.fios.verizon.net) (Remote host closed the connection)
2021-01-11 23:00:15 +0100conal(~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
2021-01-11 23:00:46 +0100TheCommieDuck(~mark@host-78-146-136-48.as13285.net)
2021-01-11 23:01:52 +0100sparsity(5eae2591@gateway/web/cgi-irc/kiwiirc.com/ip.94.174.37.145)
2021-01-11 23:02:44 +0100conal(~conal@64.71.133.70)
2021-01-11 23:02:44 +0100conal(~conal@64.71.133.70) (Client Quit)
2021-01-11 23:02:54 +0100olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 260 seconds)
2021-01-11 23:02:56 +0100argento(~argent0@168.227.97.34) (Ping timeout: 240 seconds)
2021-01-11 23:05:27 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca)
2021-01-11 23:06:10 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2021-01-11 23:07:41 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca) (Client Quit)
2021-01-11 23:09:08 +0100 <monochrom> If you're interested: the assignment handout is at http://www.cs.utoronto.ca/~trebla/x/0J50KOV5UH/CSCC24-2020-Winter/a2/
2021-01-11 23:09:34 +0100ke4pcx(~ke4pcx@024-158-093-129.res.spectrum.com) (Read error: Connection reset by peer)
2021-01-11 23:09:48 +0100 <dolio> The real probability monad isn't just Cont Double, though.
2021-01-11 23:09:51 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-01-11 23:09:53 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca)
2021-01-11 23:10:04 +0100 <dolio> That's just the limit of what you can reasonably encode in Haskell.
2021-01-11 23:10:23 +0100ke4pcx(~ke4pcx@024-158-093-129.res.spectrum.com)
2021-01-11 23:10:54 +0100 <monochrom> Do you mean: We need suitable restrictions on the function space, it is not the full S->SuitableNumberType?
2021-01-11 23:11:01 +0100hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 264 seconds)
2021-01-11 23:11:29 +0100 <dolio> Yeah, `X -> Double` should be some kind of 'guaranteed to be a probability measure' thing.
2021-01-11 23:11:53 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 23:11:55 +0100maxsu(~maxsu@ip-64-72-99-232.lasvegas.net)
2021-01-11 23:12:50 +0100knupfer(~Thunderbi@200116b82c62e3006c32357b74a11b0b.dip.versatel-1u1.de) (Ping timeout: 258 seconds)
2021-01-11 23:13:20 +0100boxscape(4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed)
2021-01-11 23:14:39 +0100edge563(~edge563@gateway/tor-sasl/edge563)
2021-01-11 23:15:09 +0100SrainUser(~Srain@216.186.218.241)
2021-01-11 23:15:15 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-01-11 23:15:19 +0100 <dolio> I'm not informed enough to know how it actually works. `X -> Double` might not be quite correct at all, because it's probably treating types like discrete spaces, but people studying probability want to work with measurable spaces, where you assign probabilities to subspaces, not points.
2021-01-11 23:15:56 +0100alx741(~alx741@181.196.69.216) (Ping timeout: 240 seconds)
2021-01-11 23:16:16 +0100alx741(~alx741@186.178.110.185)
2021-01-11 23:16:25 +0100 <monochrom> When X is continuous, the Double becomes probability density. And you're to do integration. Then it still works out.
2021-01-11 23:16:27 +0100SrainUser(~Srain@216.186.218.241) (Quit: SrainUser)
2021-01-11 23:16:55 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-01-11 23:17:10 +0100 <dolio> Yeah, I guess that does make sense.
2021-01-11 23:17:11 +0100 <monochrom> There is a paper that does all of this. Full-blown measure theory, no compromise.
2021-01-11 23:18:57 +0100 <monochrom> I think it's this: https://www.cs.tufts.edu/~nr/pubs/pmonad-abstract.html
2021-01-11 23:19:56 +0100 <dolio> Anyhow, it happens that the monad operations on Cont r stay valid when you want to consider only restricted classes of continuations.
2021-01-11 23:20:15 +0100ddere(uid110888@gateway/web/irccloud.com/x-qihpsouqwjjvfzge)
2021-01-11 23:22:44 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!)
2021-01-11 23:23:05 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr)
2021-01-11 23:24:05 +0100 <dolio> Or, for instance, they also work for 'free r-vector space with basis a', I believe, where the outer arrow is supposed to be linear.
2021-01-11 23:25:01 +0100 <dolio> But not every value of `Cont r a` makes sense as part of that vector space.
2021-01-11 23:25:24 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca) (Quit: WeeChat 3.0)
2021-01-11 23:27:50 +0100Deide(~Deide@217.155.19.23) (Quit: Seeee yaaaa)
2021-01-11 23:29:37 +0100ke4pcx(~ke4pcx@024-158-093-129.res.spectrum.com) ()
2021-01-11 23:29:52 +0100dhouthoo(~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9)
2021-01-11 23:30:41 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com)
2021-01-11 23:30:55 +0100niekvandepas(~niekvande@dhcp-077-249-088-250.chello.nl)
2021-01-11 23:36:42 +0100solarliner(~solarline@243.81.10.109.rev.sfr.net) (Quit: solarliner)
2021-01-11 23:36:53 +0100ADG1089__(~aditya@122.163.165.143)
2021-01-11 23:38:16 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds)
2021-01-11 23:39:39 +0100chele(~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
2021-01-11 23:39:52 +0100mputz(~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
2021-01-11 23:40:34 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-01-11 23:42:34 +0100edge563(~edge563@gateway/tor-sasl/edge563) (Quit: edge563)
2021-01-11 23:42:34 +0100bi_functor(~bi_functo@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 265 seconds)
2021-01-11 23:43:06 +0100chpatrick(sid239395@gateway/web/irccloud.com/x-okkeakcurpolpskn) ()
2021-01-11 23:46:33 +0100klardotsh(~klardotsh@c-71-231-242-112.hsd1.wa.comcast.net) (Quit: WeeChat 2.9)
2021-01-11 23:47:00 +0100danso(~dan@23-233-104-25.cpe.pppoe.ca)
2021-01-11 23:50:38 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-01-11 23:53:48 +0100fendor(~fendor@77.119.128.187.wireless.dyn.drei.com) (Remote host closed the connection)
2021-01-11 23:55:41 +0100ep1ctetus(b8bba2a3@ip184-187-162-163.sb.sd.cox.net)
2021-01-11 23:56:36 +0100inkbottle(~inkbottle@aaubervilliers-654-1-109-134.w86-212.abo.wanadoo.fr)
2021-01-11 23:56:56 +0100zebrag(~inkbottle@aaubervilliers-654-1-158-67.w86-212.abo.wanadoo.fr) (Ping timeout: 256 seconds)
2021-01-11 23:57:09 +0100 <ep1ctetus> idk if this is the best place to ask this, but I am having a problem with the VS Code Haskell add-in and Stack. I just get an error message that says "ghcide compiled against GHC 8.10.2 but currently using 8.8.4"
2021-01-11 23:57:24 +0100 <ep1ctetus> I can't use 8.10.2 on Windows because it doesn't work
2021-01-11 23:59:01 +0100heronwr(~heronwr@198.52.165.210) (Ping timeout: 264 seconds)
2021-01-11 23:59:11 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)