2020/09/21

2020-09-21 00:00:07 +0200 <edwardk> not sure how you get lighter weight than do, it acts like parentheses you don't have to close
2020-09-21 00:00:27 +0200 <edwardk> given HSpec doesn't hide prelude's $, it is just the one from Prelude
2020-09-21 00:01:07 +0200 <edwardk> anyways do takes exactly as many characters as ()'s would and self closes when you outdent
2020-09-21 00:01:37 +0200 <edwardk> but using BlockArguments does clean up the 'noise' in an HSpec file
2020-09-21 00:02:26 +0200 <edwardk> BlockArguments https://www.irccloud.com/pastebin/R8v4pxNs/BlockSpec.hs
2020-09-21 00:02:47 +0200 <edwardk> you can swap each of those do's for a $ except the one on the line with describe
2020-09-21 00:03:23 +0200 <edwardk> BlockArguments lets you kill the $ before the lambda for property there as well
2020-09-21 00:03:36 +0200 <edwardk> > 2 * do 3 + 4
2020-09-21 00:03:38 +0200 <lambdabot> 14
2020-09-21 00:04:04 +0200 <opticblast> > :t do ()
2020-09-21 00:04:07 +0200 <lambdabot> <hint>:1:1: error: <hint>:1:1: error: parse error on input ‘:’
2020-09-21 00:04:08 +0200 <ski> hyiltiz : no, it's the usual `$' in the library
2020-09-21 00:04:23 +0200 <opticblast> @type do ()
2020-09-21 00:04:25 +0200 <lambdabot> ()
2020-09-21 00:04:29 +0200 <opticblast> well, that's confusing
2020-09-21 00:04:35 +0200 <opticblast> I thought it would be something like Identity ()
2020-09-21 00:05:07 +0200 <edwardk> do doesn't change the types, it just desugars into >>= uses when there is ; -- and maybe does some applicative stuff if applicative do is on
2020-09-21 00:05:24 +0200 <edwardk> when there is only one expression there you want it passed through
2020-09-21 00:05:25 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 00:05:33 +0200 <ski> a `do'-expression has the same type as its last command (which in this case was `()')
2020-09-21 00:05:40 +0200 <edwardk> otherwise in your model do () and do (pure ()) -- would be ambiguous what to do
2020-09-21 00:05:53 +0200 <edwardk> or 'do x' where x happens to be pure y
2020-09-21 00:06:00 +0200 <edwardk> so it _can't_ do the thing you want opticblast
2020-09-21 00:06:12 +0200 <opticblast> ah, makes sense
2020-09-21 00:06:41 +0200 <edwardk> now, back in the day it used to be that do would guide inference to figure out that the type there was the application of some m to some a, but we got them to stop doing that a looong time ago
2020-09-21 00:07:14 +0200drdo(~drdo@overlord0.drdo.eu) (Remote host closed the connection)
2020-09-21 00:08:21 +0200drdo(~drdo@overlord0.drdo.eu)
2020-09-21 00:09:05 +0200obihann(~jhann@156.34.160.69)
2020-09-21 00:10:13 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 260 seconds)
2020-09-21 00:12:08 +0200 <hyiltiz> edwardk: thx! BlockArguments seems to really clean up the verbose notation
2020-09-21 00:12:23 +0200 <hyiltiz> and I am sure it works not just work HSpec as well
2020-09-21 00:12:33 +0200 <hyiltiz> Reminds me of Ruby's blocks
2020-09-21 00:13:14 +0200sagax(~sagax_nb@213.138.71.146) (Ping timeout: 272 seconds)
2020-09-21 00:13:16 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-09-21 00:14:45 +0200 <edwardk> i use it more and more these days mostly because when some library messily needs to take a argument that will be very long right before some other empty list argument or something i can break things up by lines and then just use the do to self delimit _that_ argument, without having to figure out how to put the closing paren, or get all lispy with closing parens dangling on the far right of my screen
2020-09-21 00:15:27 +0200hackagetermbox-banana 0.3.0 - reactive-banana + termbox https://hackage.haskell.org/package/termbox-banana-0.3.0 (mitchellwrosen)
2020-09-21 00:15:44 +0200 <yushyin> 6
2020-09-21 00:15:50 +0200 <yushyin> ups, sorry
2020-09-21 00:17:06 +0200tabemann(~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
2020-09-21 00:17:55 +0200 <edwardk> it amazes me that nobody has written an ncurses variant that knows how many lines worth of text it has scrolled in and gives you control over just that portion of the screen space, so it doesn't have to flip to the alt screen and works well for repls.
2020-09-21 00:18:04 +0200GyroW_GyroW
2020-09-21 00:18:05 +0200GyroW(~GyroW@ptr-48ujrfb8c7gfd2lu92q.18120a2.ip6.access.telenet.be) (Changing host)
2020-09-21 00:18:05 +0200GyroW(~GyroW@unaffiliated/gyrow)
2020-09-21 00:18:31 +0200 <edwardk> everything that works like this is some bespoke readline like monstrosity
2020-09-21 00:19:52 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 00:21:40 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 00:23:12 +0200DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-09-21 00:27:38 +0200aenesidemus(~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Quit: Leaving)
2020-09-21 00:29:56 +0200 <dolio> I think block arguments are a good idea (mostly), but characterising two extra characters as 'verbose' seems a little silly.
2020-09-21 00:30:38 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 00:33:08 +0200isovector1(~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net) (Remote host closed the connection)
2020-09-21 00:33:16 +0200isovector1(~isovector@d207-81-8-13.bchsia.telus.net)
2020-09-21 00:33:23 +0200 <edwardk> i mean i grumble about the extra : in :: all the time
2020-09-21 00:33:38 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c)
2020-09-21 00:33:40 +0200 <edwardk> so who am i to begrudge someone a complaint about twice as many characters
2020-09-21 00:34:46 +0200 <yushyin> unfortunate hysterical reasons with the : vs. :: matter
2020-09-21 00:35:21 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 265 seconds)
2020-09-21 00:35:44 +0200 <Rembane> We need a Haskell dialect where the : and :: are swapped.
2020-09-21 00:35:55 +0200 <koz_> Rembane: So, Idris? :P
2020-09-21 00:36:48 +0200 <edwardk> then the laziness gets ya
2020-09-21 00:39:57 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 00:40:06 +0200 <Rembane> koz_: Yeah, why not? :)
2020-09-21 00:40:21 +0200 <dolio> I don't think the extra typing hurts as much as being different from the settled notation.
2020-09-21 00:40:29 +0200 <yushyin> Rembane: https://github.com/ghc-proposals/ghc-proposals/pull/118
2020-09-21 00:41:07 +0200ski. o O ( ⌜∷⌝ )
2020-09-21 00:41:20 +0200 <Axman6> Rembane: DAML?
2020-09-21 00:42:53 +0200aidecoe(~aidecoe@unaffiliated/aidecoe) (Ping timeout: 272 seconds)
2020-09-21 00:43:27 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 260 seconds)
2020-09-21 00:43:48 +0200pingiun(~pingiun@j63019.upc-j.chello.nl)
2020-09-21 00:43:50 +0200 <Rembane> yushyin: Wow. Nice.
2020-09-21 00:44:08 +0200 <Rembane> Axman6: Dots Are More LOL?
2020-09-21 00:46:11 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 00:47:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 00:47:43 +0200 <koz_> Rembane: Dots Are More Leet.
2020-09-21 00:47:48 +0200isovector1(~isovector@d207-81-8-13.bchsia.telus.net) (Ping timeout: 258 seconds)
2020-09-21 00:47:56 +0200 <dolio> Regardless, it's never going to be worth changing in its own right.
2020-09-21 00:48:46 +0200 <Rembane> koz_: Of course! I'm way too tired to get that on the first try.
2020-09-21 00:53:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-09-21 00:53:09 +0200DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 260 seconds)
2020-09-21 00:53:50 +0200DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net)
2020-09-21 00:54:32 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 260 seconds)
2020-09-21 00:54:39 +0200 <Axman6> @google DAML
2020-09-21 00:54:40 +0200 <lambdabot> No Result Found.
2020-09-21 00:54:45 +0200 <Axman6> uwot
2020-09-21 00:55:06 +0200__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-09-21 00:55:10 +0200 <MarcelineVQ> don't all mutts leak?
2020-09-21 00:55:55 +0200 <Axman6> https://daml.com - a dialect of Haskell for smart contracts, its compiler GHC with some desugaring on the front end (including : <-> ::, ples a lot of other nice extensions which make using the language day to day really nice)
2020-09-21 00:56:07 +0200NaN(43aa4b1c@c-67-170-75-28.hsd1.wa.comcast.net)
2020-09-21 00:56:31 +0200NaNGuest39453
2020-09-21 00:56:52 +0200 <koz_> MarcelineVQ: Don't All Marsupials Lie?
2020-09-21 00:57:17 +0200 <MarcelineVQ> Driven Antelopes Must Leap
2020-09-21 00:57:30 +0200 <Guest39453> uh?
2020-09-21 00:57:42 +0200 <Axman6> this is the secret code, you are now authenticated
2020-09-21 00:58:18 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 00:58:48 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 00:59:11 +0200 <Guest39453> @help
2020-09-21 00:59:12 +0200 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
2020-09-21 00:59:26 +0200 <Axman6> plus*
2020-09-21 00:59:29 +0200skilooks at Guest39453
2020-09-21 01:00:00 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz)
2020-09-21 01:00:01 +0200 <Guest39453> just seeing if lambdabot is real
2020-09-21 01:00:49 +0200 <koz_> Lambdabot is indeed a figment of your imagination.
2020-09-21 01:00:53 +0200 <Axman6> are bits real?
2020-09-21 01:00:56 +0200 <MarcelineVQ> how can lambdabot be real if our toes aren't real
2020-09-21 01:01:11 +0200howdoi(uid224@gateway/web/irccloud.com/x-jznybxwchugeubau)
2020-09-21 01:01:29 +0200cosimone_(~cosimone@5.170.241.4)
2020-09-21 01:03:06 +0200 <Axman6> deep
2020-09-21 01:03:17 +0200 <Axman6> but not like learning, like the ocean
2020-09-21 01:04:28 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 260 seconds)
2020-09-21 01:05:17 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds)
2020-09-21 01:06:15 +0200 <orion> tomsmeding: Is a type familiy the same as a type synonym?: https://github.com/acid-state/acid-state/blob/bf1fa2466e749f91d2e3152ced15331f062e8d10/src/Data/Ac…
2020-09-21 01:06:58 +0200 <Axman6> no
2020-09-21 01:07:16 +0200cosimone_cosimone
2020-09-21 01:07:42 +0200MorrowM(~max@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 272 seconds)
2020-09-21 01:09:30 +0200bahamas(~lucian@188.24.181.166)
2020-09-21 01:09:30 +0200bahamas(~lucian@188.24.181.166) (Changing host)
2020-09-21 01:09:30 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 01:10:52 +0200cyphase(~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds)
2020-09-21 01:12:56 +0200machinedgod(~machinedg@d67-193-126-196.home3.cgocable.net)
2020-09-21 01:13:03 +0200mitchellsalad(uid40617@gateway/web/irccloud.com/x-ahcdpvrnkonimwkz)
2020-09-21 01:14:01 +0200aidecoe(~aidecoe@unaffiliated/aidecoe)
2020-09-21 01:14:15 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 258 seconds)
2020-09-21 01:17:50 +0200 <orion> Oh, tomsmeding was talking about MethodState.
2020-09-21 01:19:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 01:19:35 +0200Jeanne-Kamikaze(~Jeanne-Ka@104.200.129.62) (Quit: Leaving)
2020-09-21 01:20:29 +0200Guest39453(43aa4b1c@c-67-170-75-28.hsd1.wa.comcast.net) (Remote host closed the connection)
2020-09-21 01:20:58 +0200cyphase(~cyphase@unaffiliated/cyphase)
2020-09-21 01:28:29 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) (Ping timeout: 272 seconds)
2020-09-21 01:30:14 +0200 <orion> tomsmeding: type instance MethodState UpdateNow = AppState
2020-09-21 01:34:51 +0200sepi(49dc4892@c-73-220-72-146.hsd1.ca.comcast.net)
2020-09-21 01:36:12 +0200pera(~pera@unaffiliated/pera) (Ping timeout: 272 seconds)
2020-09-21 01:42:14 +0200sepi(49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) (Remote host closed the connection)
2020-09-21 01:45:21 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection)
2020-09-21 01:46:45 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 01:49:15 +0200opticblast(~june@075-128-229-153.res.spectrum.com) (Quit: leaving)
2020-09-21 01:49:21 +0200jedws(~jedws@121.209.139.222)
2020-09-21 01:49:37 +0200 <orion> tomsmeding: I got it! All I had to do was change the type signature to this: update :: (UpdateEvent event, MethodState event ~ AppState, MonadIO m, MonadTime m)
2020-09-21 01:49:39 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 01:50:07 +0200 <orion> Thank you for your assistance.
2020-09-21 01:52:43 +0200MorrowM(~max@bzq-110-168-31-106.red.bezeqint.net)
2020-09-21 01:53:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-09-21 01:53:20 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection)
2020-09-21 01:53:57 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 01:54:34 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds)
2020-09-21 01:57:51 +0200cipherchess(~oned4@151.51.54.223)
2020-09-21 01:58:07 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6)
2020-09-21 01:58:14 +0200polyrain(~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08)
2020-09-21 02:00:01 +0200romtam(~romtam@s91904426.blix.com) ()
2020-09-21 02:00:10 +0200atk(~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.)
2020-09-21 02:00:32 +0200 <cipherchess> In cabal, what is the difference between v2- and new-? Which one should I use?
2020-09-21 02:00:50 +0200wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-09-21 02:00:54 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 272 seconds)
2020-09-21 02:00:59 +0200 <dolio> The only difference is the name.
2020-09-21 02:01:42 +0200 <dolio> If your cabal-install is 3 or newer (I think), those are the default, as well.
2020-09-21 02:01:59 +0200ddellacosta(~dd@86.106.121.168) (Quit: WeeChat 2.8)
2020-09-21 02:02:02 +0200atk(~Arch-TK@ircpuzzles/staff/Arch-TK)
2020-09-21 02:02:33 +0200 <cipherchess> Oh nice, thank you.
2020-09-21 02:02:33 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6) (Client Quit)
2020-09-21 02:02:51 +0200 <edwardk> Cale: i figured a way to make everything work. i just had to give up on Nat.
2020-09-21 02:02:53 +0200 <edwardk> =)
2020-09-21 02:03:54 +0200 <edwardk> now it "just works" https://github.com/ekmett/haskell/blob/master/types/example/Vec.hs -- and you can even swap out Natural there for Int, Word, etc. to get things with smaller singletons.
2020-09-21 02:04:09 +0200MorrowM(~max@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
2020-09-21 02:04:48 +0200ddellacosta(~dd@86.106.121.168)
2020-09-21 02:05:41 +0200 <Cale> Well, that's definitely simpler
2020-09-21 02:06:15 +0200 <edwardk> basically i gave in and made fully general Z' and S' data families and used them to make Word, Word16, Natural ... all inhabitable as kinds. then made 'safe' aliases for Z and S that delegate to 0 and 1+ for the nat case but otherwise use those Z' and S' hacked constructors
2020-09-21 02:06:21 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 02:07:31 +0200 <edwardk> to be fully safe the Z and S I export should have an enumerated set of types for which they work, but the proof of concept is nice
2020-09-21 02:07:56 +0200 <edwardk> you can't use Nat in there or you get the lack of injection issue we had before, but everything else works as expected and Nat is no longer my bottleneck
2020-09-21 02:08:21 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c)
2020-09-21 02:08:27 +0200 <Cale> The definition of the S type family is amusing
2020-09-21 02:09:06 +0200shatriff(~vitaliish@176.52.219.10)
2020-09-21 02:09:12 +0200cipherchess(~oned4@151.51.54.223) ()
2020-09-21 02:09:25 +0200 <edwardk> what i'll do is switch it to an open type family that way i can enumerate exactly which types it works on and users can extend that set by importing Data.Type.Unsafe and adding a type instance
2020-09-21 02:09:47 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 260 seconds)
2020-09-21 02:10:57 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 02:13:04 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6)
2020-09-21 02:13:13 +0200 <edwardk> oh, i have an even better hack, one sec
2020-09-21 02:13:26 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6) (Client Quit)
2020-09-21 02:14:27 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 02:16:41 +0200 <edwardk> there
2020-09-21 02:16:58 +0200 <edwardk> now you need to instantiate Nice in order to unstick the evaluation of Z and S for your type
2020-09-21 02:17:06 +0200 <edwardk> making them safer to export from Data.Type
2020-09-21 02:17:16 +0200 <edwardk> they'll eval for naturals and any Nice type
2020-09-21 02:17:44 +0200sm[m]thinks why can't we have a SwapColons extension
2020-09-21 02:18:37 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2020-09-21 02:19:06 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) (Ping timeout: 246 seconds)
2020-09-21 02:19:58 +0200 <edwardk> its not currently as safe as i'd like, because you can just claim 'Nice' for any type you want. a safer version would export the Nice, but not include the defaults i guess
2020-09-21 02:20:27 +0200 <edwardk> that way if you have your own injective zero and succ you can instantiate the class, or you can delegate to mine through Unsafe
2020-09-21 02:20:33 +0200 <edwardk> ok, going back and writing longer instances
2020-09-21 02:20:45 +0200Xing`1(~Xing`@185.244.214.216)
2020-09-21 02:22:22 +0200 <ddellacosta> Baader-Meinhof is a funny thing. This morning I was checking out haskellweekly.news and clicked on a blog post about contravariant functors, as I haven't built up much of an intuition for them yet, so was interested. I skimmed it enough to note that it talked about composing predicate functions. Later, I jumped back into a side project debugging some FFI code, and searched for items on this
2020-09-21 02:22:24 +0200 <ddellacosta> topic--found another blog post, which...talked about using contravariant functors in the context of debugging. Finally I took a break and looked up a logging library someone had mentioned earlier today here, co-log...yeah, more contravariant functors. I haven't read all of these in depth yet, but I guess the universe/my unconscious is telling me I need to stop slacking off
2020-09-21 02:23:20 +0200 <koz_> ddellacosta: Contravariant functors are indeed cool.
2020-09-21 02:23:31 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 02:23:36 +0200 <ddellacosta> they seem kind of mindblowing honestly
2020-09-21 02:24:02 +0200 <koz_> ddellacosta: They can do some really cool things - discrimination sorting, for example.
2020-09-21 02:24:17 +0200 <ddellacosta> damnit, now I have another thing to go read about lol
2020-09-21 02:24:32 +0200 <koz_> ddellacosta: Do you know how radix sorting works?
2020-09-21 02:24:56 +0200 <ddellacosta> unfortunately no
2020-09-21 02:25:04 +0200 <koz_> Read that first.
2020-09-21 02:25:21 +0200 <koz_> It'll help a lot to understand what's happening and why it has the asymptotics it claims.
2020-09-21 02:25:48 +0200ddellacostapulls out the CLRS
2020-09-21 02:27:51 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 02:28:27 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 02:31:22 +0200borne(~fritjof@200116b86490460022497ba62715fb72.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-09-21 02:33:00 +0200bahamas(~lucian@188.24.181.166)
2020-09-21 02:33:01 +0200bahamas(~lucian@188.24.181.166) (Changing host)
2020-09-21 02:33:01 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 02:33:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-09-21 02:33:18 +0200suppi(~suppi@172.246.241.246) (Ping timeout: 256 seconds)
2020-09-21 02:35:39 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 02:37:41 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
2020-09-21 02:38:28 +0200CMCDragonkai1(~Thunderbi@124.19.3.250)
2020-09-21 02:39:31 +0200 <ddellacosta> koz_ thank you, that was super interesting. As far as discrimination sorting, is there a better source than this? https://hackage.haskell.org/package/discrimination Everything else that comes up is for like, young child education
2020-09-21 02:39:36 +0200plutoniix(~q@ppp-223-24-94-234.revip6.asianet.co.th)
2020-09-21 02:39:47 +0200 <Cale> ddellacosta: For the most part, a decent intuition for practically all the examples relevant to programming is just that when F is a contravariant functor, then a value of type F a is something which consumes values of type a
2020-09-21 02:40:02 +0200 <koz_> ddellacosta: That's the source, plus its links.
2020-09-21 02:40:05 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 02:40:19 +0200 <koz_> I'd read the papers it links - if you're used to algorithm literature, it's pretty readable.
2020-09-21 02:40:31 +0200 <ddellacosta> Cale: thank you, that is helpful!
2020-09-21 02:40:42 +0200 <ddellacosta> koz_: ah okay, I didn't see any linked papers but will look again
2020-09-21 02:41:01 +0200 <ddellacosta> d'oh right at the top, nevermind
2020-09-21 02:41:03 +0200 <ddellacosta> thanks koz_ !
2020-09-21 02:41:12 +0200 <koz_> No worries! Happy reading.
2020-09-21 02:41:29 +0200isovector1(~isovector@d207-81-8-13.bchsia.telus.net)
2020-09-21 02:41:30 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 02:44:31 +0200 <ski> ddellacosta : one example which can be made into a contravariant functor is the write end of a concurrent communication channel (also a write view on a mutable cell)
2020-09-21 02:45:07 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 272 seconds)
2020-09-21 02:45:42 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2020-09-21 02:45:56 +0200ddellacostathinks about it
2020-09-21 02:46:27 +0200 <ski> ("can be made", in this case, means that you allow attaching an arbitrary preprocessing step (function), that you apply before you write to the channel/cell)
2020-09-21 02:46:28 +0200ransom(~c4264035@c-73-243-2-10.hsd1.co.comcast.net)
2020-09-21 02:46:55 +0200 <ddellacosta> ski: okay that's helpful, one thing I read earlier today was that the order of processing is conceptually "reversed" when compared to a covariant functor
2020-09-21 02:47:05 +0200 <ddellacosta> I mean wrt contramap
2020-09-21 02:47:31 +0200 <ski> yes
2020-09-21 02:48:25 +0200xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 260 seconds)
2020-09-21 02:48:30 +0200 <ddellacosta> now I'm trying to understand how that connects to what Cale said
2020-09-21 02:49:15 +0200 <ski> well, the write end/view of the channel/cell consumes values, in that you feed a value to it, when writing
2020-09-21 02:49:17 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 02:50:18 +0200 <ski> (and read end/view will produce values, when reading. so that can be made into a covariant functor (by allowing attaching an arbitrary post-processing step (function), after reading))
2020-09-21 02:51:31 +0200 <ddellacosta> okay thank you ski , I think I need to think about that for a bit
2020-09-21 02:52:04 +0200plutoniix(~q@ppp-223-24-94-234.revip6.asianet.co.th) (Ping timeout: 246 seconds)
2020-09-21 02:52:06 +0200 <ddellacosta> like intuitively it makes sense, but the deeper structure of it all is eluding me still
2020-09-21 02:52:28 +0200 <ski> (if you want to, you could try to wrap `Chan' or `IORef' into such read and write ends/views. and then see if you can, possibly with some modification, make the read ones covariant functors, and the write ones contravariant functors)
2020-09-21 02:52:57 +0200 <ddellacosta> okay interesting
2020-09-21 02:53:15 +0200 <ski> (also providing some relevant operations on the new data types (which are to be exported abstractly))
2020-09-21 02:53:31 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 02:53:40 +0200 <Cale> newtype WriteEnd a = MkWriteEnd { writeTo :: a -> IO () }
2020-09-21 02:54:12 +0200 <ski> it might perhaps sometimes be nice to have a callback that you want to pass a channel to, but you only want it to write to the channel, not read, so you only pass it the write end
2020-09-21 02:54:26 +0200 <ski> Cale : hah :)
2020-09-21 02:54:39 +0200 <Cale> ddellacosta: Try writing the instance for that :)
2020-09-21 02:54:53 +0200 <ddellacosta> Cale: okay cool
2020-09-21 02:55:01 +0200 <ddellacosta> and ski the last thing you just said clicked, thank you
2020-09-21 02:55:32 +0200 <ddellacosta> and I can actually kind of see how that's like a predicate now in the general sense
2020-09-21 02:56:26 +0200 <Cale> Yeah, there will be basically no difference in what the instance looks like
2020-09-21 03:00:11 +0200 <ski> ddellacosta : btw, for the read end, you can try to make a version of `getChanContents' as well
2020-09-21 03:00:53 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz)
2020-09-21 03:00:56 +0200 <ddellacosta> okay
2020-09-21 03:02:58 +0200xff0x(~fox@2001:1a81:53e2:5200:158c:d17f:d83e:dc7f)
2020-09-21 03:03:23 +0200zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f) (Remote host closed the connection)
2020-09-21 03:03:32 +0200zaquest(~notzaques@5.128.210.178) (Quit: Leaving)
2020-09-21 03:05:18 +0200plutoniix(~q@175.176.222.7)
2020-09-21 03:05:23 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 03:05:35 +0200wroathe_(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 03:06:08 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds)
2020-09-21 03:06:24 +0200wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 03:06:30 +0200zopsi(~zopsi@irc.dir.ac)
2020-09-21 03:06:46 +0200xff0x_(~fox@port-92-195-46-13.dynamic.as20676.net) (Ping timeout: 272 seconds)
2020-09-21 03:08:27 +0200 <ski> hm, pondering `dupChan'
2020-09-21 03:09:27 +0200 <ski> at first sight, it would seen one would do `WriteChan a -> IO (ReadChan a)' ..
2020-09-21 03:09:34 +0200 <koz_> Anime has ruined concurrency for me - every time I see any variant of 'chan' I'm amused.
2020-09-21 03:09:56 +0200wroathe_wroathe
2020-09-21 03:10:07 +0200 <ski> .. however, this isn't compatible with having `WriteChan' a contravariant functor
2020-09-21 03:11:06 +0200 <ski> `Chan a -> IO (ReadChan a)' would be possible, of course (just `dupChan' and convert to `ReadChan')
2020-09-21 03:13:26 +0200mnrmnaugh(~mnrmnaugh@unaffiliated/mnrmnaugh) (Read error: Connection reset by peer)
2020-09-21 03:14:01 +0200mnrmnaugh(~mnrmnaugh@unaffiliated/mnrmnaugh)
2020-09-21 03:14:40 +0200g-belmonte(~g-belmont@2804:14c:8786:9312:3638:eaf5:dc36:146d) (Quit: Leaving)
2020-09-21 03:14:55 +0200arahael(~arahael@118.208.100.107) (Ping timeout: 240 seconds)
2020-09-21 03:15:14 +0200ddellacosta(~dd@86.106.121.168) (Ping timeout: 256 seconds)
2020-09-21 03:15:47 +0200 <ski> however, it seems that if one had a difunctor, `RWChan a b' being contravariant in `a' (write end type) and covariant in `b' (read end type), then one could do `RWChan a b -> IO (ReadChan b)' (obviously also `RWChan a b -> IO (RWChan a b)' would work)
2020-09-21 03:17:24 +0200arahael(~arahael@203.194.42.27)
2020-09-21 03:17:25 +0200zopsi(~zopsi@irc.dir.ac) (Max SendQ exceeded)
2020-09-21 03:18:14 +0200zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f)
2020-09-21 03:18:15 +0200 <ski> hm. although if one takes advantage if the fact that `Chan', which `ReadChan' is presumably implemented in terms of, also contains the write end, one could have `ReadChan a -> IO (ReadChan a)' .. although this feels like cheating a bit, since a direct reimplementation, separating the read and write ends, rather than just hiding one or the other, couldn't do this
2020-09-21 03:21:20 +0200xerox_(~xerox@unaffiliated/xerox)
2020-09-21 03:21:28 +0200ntwhaaci^(ntwhaaci@ip98-184-89-2.mc.at.cox.net) ()
2020-09-21 03:21:38 +0200CMCDragonkai1(~Thunderbi@124.19.3.250) (Ping timeout: 256 seconds)
2020-09-21 03:22:21 +0200zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f) (Max SendQ exceeded)
2020-09-21 03:22:46 +0200zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f)
2020-09-21 03:25:36 +0200wei2912(~wei2912@unaffiliated/wei2912)
2020-09-21 03:26:56 +0200zopsi(zopsi@2600:3c00::f03c:91ff:fe14:551f) (Max SendQ exceeded)
2020-09-21 03:27:20 +0200zopsi(~zopsi@irc.dir.ac)
2020-09-21 03:27:32 +0200zaquest(~notzaques@5.128.210.178)
2020-09-21 03:28:17 +0200qualiaqq(~user@47.189.249.188)
2020-09-21 03:31:26 +0200zopsi(~zopsi@irc.dir.ac) (Max SendQ exceeded)
2020-09-21 03:31:50 +0200zopsi(~zopsi@irc.dir.ac)
2020-09-21 03:36:34 +0200fulc9277(~fulc927@unaffiliated/fulc927)
2020-09-21 03:36:38 +0200 <zebrag> I'm trying to understand what is "existential" in "existential types". Is it related to quantifiers? In what way?
2020-09-21 03:37:38 +0200 <ski> yes
2020-09-21 03:38:13 +0200 <ski> do you understand what's universal about polymorphism ?
2020-09-21 03:39:12 +0200 <MarcelineVQ> Cale: what's that comparing <> example you use all the time?
2020-09-21 03:39:22 +0200 <ski> @where monoids
2020-09-21 03:39:23 +0200 <lambdabot> comment on "Monoids? In my programming language?" by Cale in 2008 (or 2009 ?) at <http://www.reddit.com/r/programming/comments/7cf4r/monoids_in_my_programming_language/c06adnx> about a use of `
2020-09-21 03:39:23 +0200 <lambdabot> instance Monoid a => Monoid (rho -> a)'
2020-09-21 03:39:25 +0200fulc927(~fulc927@unaffiliated/fulc927) (Ping timeout: 240 seconds)
2020-09-21 03:39:33 +0200 <MarcelineVQ> :D
2020-09-21 03:39:35 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 272 seconds)
2020-09-21 03:39:36 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-09-21 03:40:13 +0200 <zebrag> ski: I believe I understand what's universal about polymorphism
2020-09-21 03:40:14 +0200howdoi(uid224@gateway/web/irccloud.com/x-jznybxwchugeubau) (Quit: Connection closed for inactivity)
2020-09-21 03:40:41 +0200hololeap(~hololeap@unaffiliated/hololeap)
2020-09-21 03:40:44 +0200 <ski> zebrag : and you understand rank-2 ?
2020-09-21 03:41:09 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 03:41:32 +0200 <zebrag> ski: do you mean about the rho being in a negative position?
2020-09-21 03:42:03 +0200 <ski> `rho' ?
2020-09-21 03:42:40 +0200 <zebrag> wasn't meant for me, instance Monoid a => Monoid (rho -> a)'
2020-09-21 03:42:56 +0200 <zebrag> so no I don't quite undestand rank-2
2020-09-21 03:42:58 +0200 <ski> nah, that was answering another question
2020-09-21 03:43:27 +0200 <ski> well, let me try to fast-forward over `forall'
2020-09-21 03:44:06 +0200 <zebrag> should read that: https://wiki.haskell.org/Rank-N_types
2020-09-21 03:44:17 +0200Jeanne-Kamikaze(~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com)
2020-09-21 03:44:26 +0200 <ski> in Haskell, it happens that many uses of `forall' are implicit. but that doesn't mean that they're not there. in another language, they could be required to be explicit, always
2020-09-21 03:44:27 +0200 <zebrag> back in a jif
2020-09-21 03:45:11 +0200 <ski> so if you see e.g.
2020-09-21 03:45:19 +0200 <ski> length :: [a] -> Int
2020-09-21 03:45:21 +0200 <ski> or
2020-09-21 03:45:31 +0200 <ski> take :: Int -> [a] -> [a]
2020-09-21 03:45:32 +0200 <ski> or
2020-09-21 03:45:41 +0200 <ski> sort :: Ord a => [a] -> [a]
2020-09-21 03:45:49 +0200 <ski> then these really mean
2020-09-21 03:45:58 +0200 <ski> length :: forall a. [a] -> Int
2020-09-21 03:46:04 +0200 <ski> take :: forall a. Int -> [a] -> [a]
2020-09-21 03:46:08 +0200 <ski> sort :: forall a. Ord a => [a] -> [a]
2020-09-21 03:46:46 +0200 <zebrag> ok
2020-09-21 03:47:01 +0200 <ski> however : this does not mean that e.g. `[a] -> [a]' "really means" `forall a. [a] -> [a]' !
2020-09-21 03:47:44 +0200 <ski> since, in that case, `foo :: ([a] -> [a]) -> ([a] -> [a])' could be argued to "really mean" `foo :: (forall a. [a] -> [a]) -> (forall a. [a] -> [a])', which is incorrect
2020-09-21 03:48:17 +0200 <ski> similarly, `data Foo a = MkFoo ([a] -> [a])' does not mean `data Foo a = MkFoo (forall a. [a] -> [a])'
2020-09-21 03:48:40 +0200 <ski> the implicit `forall' is only inserted, right after the `::', in a type signature
2020-09-21 03:49:43 +0200 <ski> and even then, there are a few exceptions, which boil down to the type variable(s) in question already being in scope. e.g. in `data Foo a = MkFoo {unFoo :: [a] -> [a]}', `a' is already in scope, bound by the `data Foo a =' "head" part
2020-09-21 03:50:23 +0200 <ski> also, in `class Eq a where (==) :: a -> a -> Bool', `a' is already in scope, when we reach the type signature. so, this does not mean `class Eq a where (==) :: forall a. a -> a -> Bool'
2020-09-21 03:50:37 +0200 <ski> (`(==)' is a monomorphic class method)
2020-09-21 03:50:47 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-09-21 03:51:06 +0200 <ski> (i mention this, because these seems to be common confusions about where implicit `forall's are inserted)
2020-09-21 03:51:15 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 03:51:39 +0200 <ski> anyway, `length :: forall a. [a] -> Int' means that : for every type `a', `length' can be used as having type `[a] -> Int'
2020-09-21 03:51:59 +0200 <ski> strictly speaking, `length' is not a function, but a "polymorphic value"
2020-09-21 03:52:48 +0200cosimone(~cosimone@5.170.241.4) (Quit: Quit.)
2020-09-21 03:53:17 +0200 <ski> however, when going from `length :: forall a. [a] -> Int' to say `length :: [String] -> Int', specializing the polymorphic value, to a function in this case, we don't actually write anything more than `length'
2020-09-21 03:53:44 +0200inkbottle(~inkbottle@aaubervilliers-654-1-112-119.w86-198.abo.wanadoo.fr)
2020-09-21 03:54:01 +0200 <ski> (well, there is now an extension that allows one to explicitly write the specialization as `length @String', meaning that we pick `a' to be `String', so that this whole thing has type `[String] -> Int')
2020-09-21 03:54:13 +0200zebrag(~inkbottle@aaubervilliers-654-1-99-86.w86-212.abo.wanadoo.fr) (Ping timeout: 264 seconds)
2020-09-21 03:54:20 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6)
2020-09-21 03:54:27 +0200tsrt^(tsrt@ip98-184-89-2.mc.at.cox.net)
2020-09-21 03:55:12 +0200ddellacosta(~dd@86.106.121.168)
2020-09-21 03:55:56 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 03:56:32 +0200Gurkenglas(~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds)
2020-09-21 03:57:48 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 246 seconds)
2020-09-21 03:58:17 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 04:00:44 +0200 <inkbottle> ski: zebrag -> inkbottle; I'm still reading https://wiki.haskell.org/Rank-N_types, I think it was a very good suggestion
2020-09-21 04:01:00 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 04:01:51 +0200 <ski> ah, ok
2020-09-21 04:02:22 +0200xff0x(~fox@2001:1a81:53e2:5200:158c:d17f:d83e:dc7f) (Ping timeout: 260 seconds)
2020-09-21 04:04:08 +0200xff0x(~fox@2001:1a81:53e9:6d00:158c:d17f:d83e:dc7f)
2020-09-21 04:04:13 +0200blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net)
2020-09-21 04:04:23 +0200 <ski> inkbottle : did the above explanation make sense, so far ?
2020-09-21 04:07:34 +0200isovector1(~isovector@d207-81-8-13.bchsia.telus.net) (Ping timeout: 272 seconds)
2020-09-21 04:09:14 +0200eric(~eric@191.193.105.46)
2020-09-21 04:09:25 +0200fulc9277(~fulc927@unaffiliated/fulc927) (Ping timeout: 240 seconds)
2020-09-21 04:09:50 +0200eric(~eric@191.193.105.46) (Read error: Connection reset by peer)
2020-09-21 04:09:59 +0200danvet_(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-09-21 04:10:01 +0200urodna(~urodna@unaffiliated/urodna) (Quit: urodna)
2020-09-21 04:10:45 +0200 <inkbottle> ski: yes, they did
2020-09-21 04:12:47 +0200 <ski> ok
2020-09-21 04:13:05 +0200 <ski> so, if you have
2020-09-21 04:13:20 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 04:13:22 +0200 <ski> blah :: (forall a. [a] -> [a]) -> [String] -> [String]
2020-09-21 04:13:35 +0200 <ski> blah f ss = map f (f ss)
2020-09-21 04:14:11 +0200notzmv`(~user@177.103.86.92)
2020-09-21 04:14:16 +0200 <ski> what this means is that `blah' itself is not polymorphic. rather, it requires its first argument (a callback function), to be polymorphic
2020-09-21 04:15:31 +0200 <ski> so, you can e.g. call `blah id ["foo","bar"]', but you can't call `blah (map toUpper) ["foo","bar"]', since `map toUpper' has type `String -> String' (that is, `[Char] -> [Char]'), so is not polymorphic
2020-09-21 04:15:58 +0200notzmv(~user@unaffiliated/zmv) (Disconnected by services)
2020-09-21 04:16:11 +0200notzmv`(~user@177.103.86.92) (Changing host)
2020-09-21 04:16:11 +0200notzmv`(~user@unaffiliated/zmv)
2020-09-21 04:16:13 +0200notzmv`notzmv
2020-09-21 04:16:24 +0200 <ski> and, in this case, `blah' uses the fact that `f' is polymorphic, by picking two different types to use for `a', at the two different uses of `f' in the body
2020-09-21 04:16:50 +0200 <ski> (can you see if you can figure out which type `a' will be, in each of those two cases ?)
2020-09-21 04:17:38 +0200 <ski> (btw, in case, it's not totally obvious, the signature `blah :: forall a. ([a] -> [a]) -> [String] -> [String]' would not work at all, for this implementation of `blah')
2020-09-21 04:18:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2020-09-21 04:19:01 +0200 <ski> if you see `foo :: forall a. ..a..', then that means that the caller/user/consumer of `foo' will get to pick a type for `a'. while the callee/implementor/producer/definer of `foo', which is the definition/body for it, will have to make sure to work for any choice that could be made. may not assuming anything about `a'
2020-09-21 04:19:06 +0200 <inkbottle> hang on...
2020-09-21 04:19:18 +0200polyrain(~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 04:19:25 +0200ystael(~ystael@209.6.50.55) (Ping timeout: 240 seconds)
2020-09-21 04:19:38 +0200 <inkbottle> still reading what you wrote
2020-09-21 04:19:55 +0200 <ski> to the body of `foo', `a' acts like an unknown/forgotten/hidden/opaque/abstract/"skolem"/rigid type, that it may assume nothing about
2020-09-21 04:20:36 +0200drbean(~drbean@TC210-63-209-28.static.apol.com.tw)
2020-09-21 04:20:39 +0200 <ski> in the case of `sort :: forall a. Ord a => [a] -> [a]', the implementation of `sort' may assume that `a' is an instance of `Ord', and so can use the methods of `Ord' on values of type `a'. but can assume nothing else about `a'
2020-09-21 04:21:14 +0200 <ski> `foo' can't "look inside" values of type `a'. neither can `sort', apart from via the methods of `Ord'
2020-09-21 04:21:36 +0200notzmv`(~user@177.103.86.92)
2020-09-21 04:22:22 +0200 <ski> if you have say `foo :: forall a. (a -> Bool) -> ..a..', then `foo' can pass a value of type `a' to its callback argument (which is allowed to know what type `a' is, since it's provided by the caller, who picks `a'), and so is able to extract a `Bool' of info from the `a' value, using that
2020-09-21 04:22:56 +0200 <inkbottle> ok
2020-09-21 04:23:06 +0200notzmv`(~user@177.103.86.92) (Changing host)
2020-09-21 04:23:06 +0200notzmv`(~user@unaffiliated/zmv)
2020-09-21 04:23:09 +0200notzmv(~user@unaffiliated/zmv) (Disconnected by services)
2020-09-21 04:23:21 +0200notzmv`notzmv
2020-09-21 04:23:30 +0200 <ski> however, in the case of the rank-two `blah', the caller of the polymorphic `f' is `blah' itself
2020-09-21 04:24:04 +0200 <ski> so, while the caller of the polymorphic `foo' was to choose `a', and the callee/implementation couldn't assume anything about `a'
2020-09-21 04:25:19 +0200 <ski> in the case of the rank-two `blah', these two rôles are reversed : the callee/implementation of `blah' is the one that can pick and choose types for `a', while the caller of `blah' can't assume anything about `a' (and hence must pass a polymorphic callback, that assumes nothing about `a')
2020-09-21 04:25:22 +0200ystael(~ystael@209.6.50.55)
2020-09-21 04:26:23 +0200machinedgod(~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 265 seconds)
2020-09-21 04:27:04 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 04:27:10 +0200 <ski> this reversal of rôles between caller/user/consumer and callee/implementor/producer/definer, as pertains to who may pick and choose the actual type to use for the type variable `a', and who has to make do with the choice that's being made, is due to, in the rank-two `blah', having `forall' "to the left (inside)" of a function arrow `->'
2020-09-21 04:27:28 +0200hackagecontainers 0.6.4.1 - Assorted concrete container types https://hackage.haskell.org/package/containers-0.6.4.1 (dfeuer)
2020-09-21 04:27:38 +0200 <ski> if you have `foo :: forall a. (..a.. -> ..a..)', then the caller picks `a'
2020-09-21 04:28:04 +0200 <ski> if you have `foo :: ... -> (forall a. ..a..)', then the caller still picks `a' (but the first argument isn't allowed to mention `a')
2020-09-21 04:28:30 +0200 <ski> (note that e.g. `take :: forall a. Int -> [a] -> [a]' is basically the same thing as `take :: Int -> forall a. [a] -> [a]')
2020-09-21 04:29:00 +0200 <ski> but if you have `foo :: (forall a. ..a..) -> ...', the rank-two case, then the callee will get to pick `a'
2020-09-21 04:29:49 +0200blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net) (Ping timeout: 260 seconds)
2020-09-21 04:30:21 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 246 seconds)
2020-09-21 04:30:44 +0200 <ski> if we had `foo :: ((forall a. ..a..) -> ...) -> ...', this would be rank-three (having a `forall' "inside, to the left of", two function arrows `->'), then the rôles are reversed again, so that the caller again picks `a' (by selecting a rank-two callback to pass, which will pick an `a' (or several), to use with its polymorphic callback)
2020-09-21 04:30:53 +0200 <ski> and so on, for higher ranks ..
2020-09-21 04:31:32 +0200blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net)
2020-09-21 04:32:09 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 04:32:10 +0200lagothrixGuest42888
2020-09-21 04:32:10 +0200Guest42888(~lagothrix@unaffiliated/lagothrix) (Killed (rothfuss.freenode.net (Nickname regained by services)))
2020-09-21 04:32:16 +0200lagothrix(~lagothrix@unaffiliated/lagothrix)
2020-09-21 04:32:18 +0200 <ski> (if there's several `forall's in a type, then we say the overall rank is the maximum of the individual ranks of the `forall's in it. ordinary polymorphic operations are rank-one. monomorphic operations could be said to be rank-zero, i suppose ..)
2020-09-21 04:32:26 +0200 <ski> inkbottle : is this making sense ?
2020-09-21 04:34:05 +0200 <inkbottle> I'm not done reading, I've been interrupted
2020-09-21 04:34:30 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2020-09-21 04:35:00 +0200 <ski> take your time. if anything is unclear, if you want further elaboration, or you have questions or comments, please do tell
2020-09-21 04:36:02 +0200 <ski> here's one other example of a rank-two (and in this case also polymorphic) operation :
2020-09-21 04:36:13 +0200 <ski> runST :: forall a. (forall s. ST s a) -> a
2020-09-21 04:38:23 +0200 <inkbottle> The explanation in terms of "who pick 'a" is very interesting
2020-09-21 04:38:37 +0200 <ski> for "running" (executing/performing) an `ST s'-action (`ST s' expressing a kind of state effects, where one can dynamically allocate mutable reference cells (and arrays), and read from and write to them. implemented in terms of actual update-in-place, unlike say `State s' (which has a single global state `s', no dynamic allocation))
2020-09-21 04:39:26 +0200 <ski> yea, that's the main thing that happens, as we pass to higher ranks, we alternate between caller and callee picking
2020-09-21 04:40:04 +0200 <ski> the usual reason for wanting to define a rank-two operation is that you actually want to use a callback with multiple choices for your type variable(s)
2020-09-21 04:40:20 +0200 <ski> (as in my `blah' example a bit up)
2020-09-21 04:40:38 +0200fulc9277(~fulc927@unaffiliated/fulc927)
2020-09-21 04:40:38 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 04:41:19 +0200 <ski> another reason is to want to hide some implementation detail of the function, from its caller. that is, hide which (possiby single) type that the implementation uses
2020-09-21 04:42:17 +0200 <ski> here's some kind of example of that. consider
2020-09-21 04:42:28 +0200hackagemonad-memo 0.5.2 - Memoization monad transformer https://hackage.haskell.org/package/monad-memo-0.5.2 (EduardSergeev)
2020-09-21 04:42:45 +0200 <ski> newtype StateT s m a = MkStateT (s -> m (a,s))
2020-09-21 04:43:08 +0200asan(~yan4138@114.84.148.87)
2020-09-21 04:43:14 +0200 <ski> there is a function
2020-09-21 04:43:16 +0200 <ski> @type mapStateT
2020-09-21 04:43:18 +0200 <lambdabot> (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
2020-09-21 04:43:46 +0200howdoi(uid224@gateway/web/irccloud.com/x-mtwkarqdregvoupa)
2020-09-21 04:44:00 +0200 <ski> that can be used to change the `m' in `StateT s m a' to another monad, `n' (also here swapping `a' out for `b')
2020-09-21 04:44:47 +0200 <ski> however, in the callback, we can see that we're handed an action of type `m (a,s)', that will produce a pair. and we're to give back a new action of type `n (b,s)', that will also produce a pair
2020-09-21 04:45:01 +0200 <ski> one might consider this as "implementation detail leaking"
2020-09-21 04:45:08 +0200 <ski> so, one could make a variant
2020-09-21 04:45:26 +0200pera(~pera@unaffiliated/pera)
2020-09-21 04:45:32 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 260 seconds)
2020-09-21 04:45:48 +0200 <ski> mapStateT' :: (forall h. m h -> n h) -> StateT s m a -> StateT s n a
2020-09-21 04:46:46 +0200 <ski> where `h' here hides the pair type from the caller of the function. in some cases, this can be useful to prevent the callback that the caller provides, from messing around with the internal implementation (the values of the "hidden" type `h')
2020-09-21 04:47:00 +0200TooDifficult(~TooDiffic@139.59.59.230)
2020-09-21 04:47:44 +0200suppi(~suppi@172.246.241.246)
2020-09-21 04:48:07 +0200 <ski> inkbottle : is that reasonably clear ?
2020-09-21 04:48:41 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 04:49:59 +0200 <ski> (there are probably more suggestive examples of this "information hiding" capability of rank-two .. but i can't think offhand of one that would be quick to showcase)
2020-09-21 04:52:34 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net)
2020-09-21 04:53:26 +0200Stanley00(~stanley00@unaffiliated/stanley00)
2020-09-21 04:55:04 +0200suppi(~suppi@172.246.241.246) (Ping timeout: 272 seconds)
2020-09-21 04:55:47 +0200Volt_(~Volt_@c-73-145-164-70.hsd1.mi.comcast.net) (Quit: )
2020-09-21 04:55:47 +0200danso(~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer)
2020-09-21 04:56:22 +0200danso(~dan@107-190-41-58.cpe.teksavvy.com)
2020-09-21 04:56:50 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 04:57:27 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 04:58:14 +0200ryansmccoy(~ryansmcco@156.96.151.132) (Ping timeout: 272 seconds)
2020-09-21 04:58:41 +0200ryansmccoy(~ryansmcco@193.37.254.27)
2020-09-21 04:59:45 +0200theDon(~td@muedsl-82-207-238-073.citykom.de) (Ping timeout: 240 seconds)
2020-09-21 05:00:01 +0200Xing`1(~Xing`@185.244.214.216) ()
2020-09-21 05:00:20 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 05:01:43 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz)
2020-09-21 05:01:53 +0200theDon(~td@muedsl-82-207-238-036.citykom.de)
2020-09-21 05:03:54 +0200cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
2020-09-21 05:04:48 +0200cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-09-21 05:09:40 +0200notzmv`(~user@177.103.86.92)
2020-09-21 05:11:46 +0200toorevitimirp(~tooreviti@117.182.182.33)
2020-09-21 05:12:10 +0200iscke(~black@60.225.157.201)
2020-09-21 05:12:45 +0200notzmv(~user@unaffiliated/zmv) (Ping timeout: 240 seconds)
2020-09-21 05:12:56 +0200 <ski> inkbottle : anyway .. if you want to, perhaps we could continue this conversation later (getting to existentials, hopefully), as it's quite late here
2020-09-21 05:13:25 +0200notzmv`(~user@177.103.86.92) (Changing host)
2020-09-21 05:13:25 +0200notzmv`(~user@unaffiliated/zmv)
2020-09-21 05:13:30 +0200notzmv`notzmv
2020-09-21 05:14:05 +0200bloodstalker(~bloodstal@46.166.187.178) (Remote host closed the connection)
2020-09-21 05:14:35 +0200ryansmccoy(~ryansmcco@193.37.254.27) (Ping timeout: 240 seconds)
2020-09-21 05:14:50 +0200petersen(~petersen@redhat/juhp)
2020-09-21 05:16:57 +0200ryansmccoy(~ryansmcco@68.235.48.108)
2020-09-21 05:17:39 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2020-09-21 05:18:48 +0200acidjnk_new2(~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 05:21:09 +0200teardown(~user@unaffiliated/mrush) (Ping timeout: 260 seconds)
2020-09-21 05:22:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-09-21 05:27:40 +0200mmohammadi981261(~mmohammad@2.178.188.114)
2020-09-21 05:30:32 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk)
2020-09-21 05:30:52 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk) (Remote host closed the connection)
2020-09-21 05:31:18 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk)
2020-09-21 05:34:44 +0200TooDifficult(~TooDiffic@139.59.59.230) (Quit: TooDifficult)
2020-09-21 05:35:04 +0200TooDifficult(~TooDiffic@139.59.59.230)
2020-09-21 05:36:07 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds)
2020-09-21 05:38:14 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-09-21 05:39:24 +0200mirrorbird(~psutcliff@m83-187-173-228.cust.tele2.se)
2020-09-21 05:39:54 +0200TooDifficult(~TooDiffic@139.59.59.230) (Client Quit)
2020-09-21 05:43:43 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 272 seconds)
2020-09-21 05:45:28 +0200hackagestm-actor 0.1.0.0 - See the README https://hackage.haskell.org/package/stm-actor-0.1.0.0 (sgschlesinger)
2020-09-21 05:45:37 +0200ericsagnes(~ericsagne@2405:6580:0:5100:5585:9ff6:72b9:d99a) (Ping timeout: 260 seconds)
2020-09-21 05:47:29 +0200isovector1(~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net)
2020-09-21 05:47:45 +0200asan(~yan4138@114.84.148.87) (Ping timeout: 240 seconds)
2020-09-21 05:48:01 +0200asan(~yan4138@124.78.128.72)
2020-09-21 05:49:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 05:53:47 +0200TooDifficult(~TooDiffic@139.59.59.230)
2020-09-21 05:54:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2020-09-21 05:54:56 +0200suppi(~suppi@172.246.241.246)
2020-09-21 05:55:07 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk) (Remote host closed the connection)
2020-09-21 05:55:33 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk)
2020-09-21 05:56:13 +0200kini1(~kini@195.206.169.184)
2020-09-21 05:56:29 +0200modaljunk(~modaljunk@gateway/tor-sasl/modaljunk) (Client Quit)
2020-09-21 05:57:53 +0200ericsagnes(~ericsagne@2405:6580:0:5100:25d0:9c91:85b6:2191)
2020-09-21 06:06:38 +0200perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 2.9)
2020-09-21 06:06:39 +0200Sanchayan(~Sanchayan@122.167.114.73)
2020-09-21 06:11:27 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net) (Remote host closed the connection)
2020-09-21 06:11:52 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net)
2020-09-21 06:12:02 +0200day_(~Unknown@unaffiliated/day)
2020-09-21 06:12:27 +0200dale(dale@unaffiliated/dale) (Remote host closed the connection)
2020-09-21 06:14:35 +0200dale(dale@2600:3c02::f03c:92ff:feb4:61d1)
2020-09-21 06:14:56 +0200dale(dale@2600:3c02::f03c:92ff:feb4:61d1) (Remote host closed the connection)
2020-09-21 06:15:10 +0200day(~Unknown@unaffiliated/day) (Ping timeout: 258 seconds)
2020-09-21 06:15:10 +0200day_day
2020-09-21 06:16:19 +0200dale(dale@unaffiliated/dale)
2020-09-21 06:16:40 +0200mrlazos(~mrlazos@ppp046176231124.access.hol.gr)
2020-09-21 06:17:23 +0200mrlazos(~mrlazos@ppp046176231124.access.hol.gr) (Remote host closed the connection)
2020-09-21 06:18:10 +0200olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber)
2020-09-21 06:19:29 +0200ddellacosta(~dd@86.106.121.168) (Ping timeout: 260 seconds)
2020-09-21 06:19:29 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 06:20:18 +0200isovector1(~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net) (Remote host closed the connection)
2020-09-21 06:20:45 +0200suppi(~suppi@172.246.241.246) (Ping timeout: 260 seconds)
2020-09-21 06:22:34 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 06:23:28 +0200hackagestm-actor 0.1.1.0 - See the README https://hackage.haskell.org/package/stm-actor-0.1.1.0 (sgschlesinger)
2020-09-21 06:24:41 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection)
2020-09-21 06:25:14 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 06:25:25 +0200roconnor(~roconnor@host-45-78-255-115.dyn.295.ca) (Ping timeout: 260 seconds)
2020-09-21 06:26:57 +0200hackagestm-actor 0.1.1.1 - A simplistic actor model based on STM https://hackage.haskell.org/package/stm-actor-0.1.1.1 (sgschlesinger)
2020-09-21 06:29:36 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2020-09-21 06:29:51 +0200mmohammadi981261(~mmohammad@2.178.188.114) (Quit: I quit (╯°□°)╯︵ ┻━┻)
2020-09-21 06:30:31 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 06:31:20 +0200brettgilio(~brettgili@brettgilio.com) (Quit: Long live IRC! <https://brettgilio.com>)
2020-09-21 06:31:58 +0200hackagewai-extra 3.0.32 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.0.32 (MichaelSnoyman)
2020-09-21 06:32:33 +0200brettgilio(~brettgili@brettgilio.com)
2020-09-21 06:33:05 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 240 seconds)
2020-09-21 06:35:12 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 06:38:43 +0200TooDifficult(~TooDiffic@139.59.59.230) (Ping timeout: 260 seconds)
2020-09-21 06:41:35 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 06:42:26 +0200ggole(~ggole@2001:8003:8119:7200:e0af:f6f1:e650:ba35)
2020-09-21 06:42:39 +0200Amras(~Amras@unaffiliated/amras0000) (Ping timeout: 246 seconds)
2020-09-21 06:44:24 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
2020-09-21 06:45:17 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 06:46:09 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 246 seconds)
2020-09-21 06:46:16 +0200TooDifficult(~TooDiffic@139.59.59.230)
2020-09-21 06:48:58 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 06:49:13 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 06:49:15 +0200suppi(~suppi@172.246.241.246)
2020-09-21 06:49:57 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 06:51:57 +0200wei2912(~wei2912@unaffiliated/wei2912) (Quit: Lost terminal)
2020-09-21 06:54:10 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 06:56:28 +0200blankhart(~blankhart@pool-100-35-219-3.nwrknj.fios.verizon.net) (Quit: WeeChat 2.8)
2020-09-21 06:56:33 +0200knupfer(~Thunderbi@i5E86B42C.versanet.de)
2020-09-21 06:57:52 +0200toorevitimirp(~tooreviti@117.182.182.33) (Ping timeout: 256 seconds)
2020-09-21 06:57:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
2020-09-21 06:59:01 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 06:59:06 +0200toorevitimirp(~tooreviti@117.182.182.33)
2020-09-21 07:01:42 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 07:04:46 +0200TooDifficult(~TooDiffic@139.59.59.230) (Ping timeout: 246 seconds)
2020-09-21 07:06:26 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection)
2020-09-21 07:06:56 +0200justsomeguy(~justsomeg@unaffiliated/--/x-3805311) ()
2020-09-21 07:07:34 +0200knupfer(~Thunderbi@i5E86B42C.versanet.de) (Ping timeout: 246 seconds)
2020-09-21 07:09:20 +0200suppi(~suppi@172.246.241.246) (Ping timeout: 272 seconds)
2020-09-21 07:09:30 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 07:14:32 +0200Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-09-21 07:14:53 +0200Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 260 seconds)
2020-09-21 07:15:53 +0200Lord_of_Life_Lord_of_Life
2020-09-21 07:16:40 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-09-21 07:16:56 +0200revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 272 seconds)
2020-09-21 07:22:13 +0200mitchellsalad(uid40617@gateway/web/irccloud.com/x-ahcdpvrnkonimwkz) (Quit: Connection closed for inactivity)
2020-09-21 07:24:18 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 246 seconds)
2020-09-21 07:24:46 +0200TooDifficult(~TooDiffic@139.59.59.230)
2020-09-21 07:24:59 +0200asan(~yan4138@124.78.128.72) (Ping timeout: 240 seconds)
2020-09-21 07:25:17 +0200asan(~yan4138@114.84.148.87)
2020-09-21 07:25:44 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 07:25:48 +0200coot(~coot@37.30.49.42.nat.umts.dynamic.t-mobile.pl)
2020-09-21 07:26:14 +0200shafox(~shafox@106.51.234.111)
2020-09-21 07:31:13 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2020-09-21 07:33:25 +0200mirrorbird(~psutcliff@m83-187-173-228.cust.tele2.se) (Quit: Leaving)
2020-09-21 07:34:52 +0200jedws(~jedws@121.209.139.222) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 07:35:54 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2020-09-21 07:35:56 +0200ryansmccoy(~ryansmcco@68.235.48.108) (Ping timeout: 272 seconds)
2020-09-21 07:36:06 +0200ryansmccoy(~ryansmcco@193.37.254.27)
2020-09-21 07:36:32 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6)
2020-09-21 07:37:33 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 07:40:16 +0200shatriff(~vitaliish@176.52.219.10) (Remote host closed the connection)
2020-09-21 07:44:58 +0200hackagemonad-memo 0.5.3 - Memoization monad transformer https://hackage.haskell.org/package/monad-memo-0.5.3 (EduardSergeev)
2020-09-21 07:46:30 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 07:47:49 +0200toorevitimirp(~tooreviti@117.182.182.33) (Quit: Konversation terminated!)
2020-09-21 07:48:36 +0200abhixec(~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
2020-09-21 07:48:43 +0200toorevitimirp(~tooreviti@117.182.182.33)
2020-09-21 07:53:23 +0200Jeanne-Kamikaze(~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com) (Quit: Leaving)
2020-09-21 07:53:45 +0200drbean(~drbean@TC210-63-209-28.static.apol.com.tw) (Ping timeout: 240 seconds)
2020-09-21 07:55:04 +0200TooDifficult(~TooDiffic@139.59.59.230) (Quit: TooDifficult)
2020-09-21 07:55:12 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 07:57:05 +0200SanchayanM(~Sanchayan@106.201.114.230)
2020-09-21 07:57:28 +0200wavemode(~wavemode@097-070-075-143.res.spectrum.com) (Ping timeout: 272 seconds)
2020-09-21 07:58:35 +0200toorevitimirp(~tooreviti@117.182.182.33) (Remote host closed the connection)
2020-09-21 07:58:39 +0200Sanchayan(~Sanchayan@122.167.114.73) (Ping timeout: 260 seconds)
2020-09-21 07:59:54 +0200toorevitimirp(~tooreviti@117.182.182.33)
2020-09-21 08:00:02 +0200kini1(~kini@195.206.169.184) ()
2020-09-21 08:01:36 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection)
2020-09-21 08:02:25 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 08:02:50 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection)
2020-09-21 08:03:13 +0200Turmfalke(~user@unaffiliated/siracusa) (Quit: Bye!)
2020-09-21 08:04:04 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 08:04:51 +0200Gerula(~Gerula@unaffiliated/gerula) (Ping timeout: 260 seconds)
2020-09-21 08:05:24 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 08:05:31 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 08:05:49 +0200suppi(~suppi@172.246.241.246)
2020-09-21 08:05:52 +0200takuan_dozo(~takuan@178-116-218-225.access.telenet.be)
2020-09-21 08:06:53 +0200drbean(~drbean@TC210-63-209-64.static.apol.com.tw)
2020-09-21 08:07:11 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds)
2020-09-21 08:07:57 +0200mmohammadi981261(~mmohammad@2.178.188.114)
2020-09-21 08:08:46 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-09-21 08:12:28 +0200suppi(~suppi@172.246.241.246) (Ping timeout: 258 seconds)
2020-09-21 08:12:37 +0200plutoniix(~q@175.176.222.7) (Remote host closed the connection)
2020-09-21 08:14:57 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 08:15:21 +0200cfricke(~cfricke@unaffiliated/cfricke)
2020-09-21 08:15:26 +0200toorevitimirp(~tooreviti@117.182.182.33) (Remote host closed the connection)
2020-09-21 08:16:39 +0200toorevitimirp(~tooreviti@117.182.182.33)
2020-09-21 08:20:17 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 244 seconds)
2020-09-21 08:21:18 +0200unknown(~unknown@s91904426.blix.com)
2020-09-21 08:21:31 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 08:22:23 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 08:22:24 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection)
2020-09-21 08:28:17 +0200sfvm(~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine)
2020-09-21 08:31:30 +0200kayvan```(~user@52-119-115-243.PUBLIC.monkeybrains.net)
2020-09-21 08:32:26 +0200jedws(~jedws@121.209.139.222)
2020-09-21 08:32:43 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 08:33:04 +0200kayvan``(~user@52-119-115-243.PUBLIC.monkeybrains.net) (Ping timeout: 256 seconds)
2020-09-21 08:36:03 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 246 seconds)
2020-09-21 08:36:34 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2)
2020-09-21 08:39:52 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 08:40:20 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection)
2020-09-21 08:40:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2020-09-21 08:40:27 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 08:40:32 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 08:41:11 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 08:44:50 +0200danso(~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer)
2020-09-21 08:44:59 +0200shad0w_(~shad0w_@160.202.36.27)
2020-09-21 08:45:17 +0200 <shad0w_> morning people. just droppin in to say Hi : )
2020-09-21 08:45:36 +0200munksgaard(~philip@2a03:b0c0:3:d0::2eef:1001) ("WeeChat 1.0.1")
2020-09-21 08:45:41 +0200 <Axman6> Hello!
2020-09-21 08:45:42 +0200danso(~dan@107-190-41-58.cpe.teksavvy.com)
2020-09-21 08:45:49 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 264 seconds)
2020-09-21 08:49:00 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2020-09-21 08:52:23 +0200cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye)
2020-09-21 08:52:52 +0200qualiaqq(~user@47.189.249.188) (Quit: ERC (IRC client for Emacs 28.0.50))
2020-09-21 08:52:56 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 08:52:57 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-09-21 08:55:06 +0200toorevitimirp(~tooreviti@117.182.182.33) (Ping timeout: 272 seconds)
2020-09-21 08:55:47 +0200cfricke(~cfricke@unaffiliated/cfricke) (Ping timeout: 258 seconds)
2020-09-21 09:00:32 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 09:01:48 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c)
2020-09-21 09:01:53 +0200jespada(~jespada@90.254.241.6) (Ping timeout: 265 seconds)
2020-09-21 09:02:52 +0200jespada(~jespada@90.254.241.6)
2020-09-21 09:02:54 +0200cfricke(~cfricke@unaffiliated/cfricke)
2020-09-21 09:03:52 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection)
2020-09-21 09:05:07 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 272 seconds)
2020-09-21 09:06:23 +0200mmohammadi981261(~mmohammad@2.178.188.114) (Quit: I quit (╯°□°)╯︵ ┻━┻)
2020-09-21 09:06:40 +0200mmohammadi9812(~mmohammad@2.178.188.114)
2020-09-21 09:10:18 +0200orion(~orion@unaffiliated/orion) (Ping timeout: 272 seconds)
2020-09-21 09:11:16 +0200Rudd0(~Rudd0@185.189.115.98) (Ping timeout: 256 seconds)
2020-09-21 09:13:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 09:14:42 +0200 <dminuoso> Is there something equivalent to Chronicle's condemn for hspec Spec? I have a series of specs that rely on preconditions of earlier specs succeeding.
2020-09-21 09:15:45 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2020-09-21 09:16:22 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) (Remote host closed the connection)
2020-09-21 09:16:52 +0200dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be)
2020-09-21 09:17:30 +0200alp(~alp@2a01:e0a:58b:4920:8dbc:80e7:a786:cb13)
2020-09-21 09:17:47 +0200__Joker(~Joker@180.151.105.65) (Ping timeout: 240 seconds)
2020-09-21 09:18:28 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2020-09-21 09:19:54 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 09:20:05 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 09:20:20 +0200Ariakenom(~Ariakenom@h-98-128-229-34.NA.cust.bahnhof.se)
2020-09-21 09:20:49 +0200kritzefitz(~kritzefit@fw-front.credativ.com)
2020-09-21 09:21:01 +0200tzh(~tzh@c-73-94-222-143.hsd1.mn.comcast.net) (Quit: zzz)
2020-09-21 09:25:30 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2020-09-21 09:26:08 +0200Peter_Storm(uid288816@gateway/web/irccloud.com/x-nhjukwhxucyezwqe)
2020-09-21 09:27:19 +0200pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…)
2020-09-21 09:27:28 +0200hvr(~hvr@haskell/developer/hvr) (Ping timeout: 256 seconds)
2020-09-21 09:30:44 +0200danso(~dan@107-190-41-58.cpe.teksavvy.com) (Quit: WeeChat 2.9)
2020-09-21 09:32:46 +0200danvet_(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
2020-09-21 09:32:52 +0200danvet(~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453)
2020-09-21 09:34:02 +0200Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer)
2020-09-21 09:35:24 +0200Guest_96(51cdaf71@81-205-175-113.fixed.kpn.net)
2020-09-21 09:35:37 +0200Guest_96(51cdaf71@81-205-175-113.fixed.kpn.net) (Remote host closed the connection)
2020-09-21 09:37:09 +0200chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de)
2020-09-21 09:38:41 +0200pera(~pera@unaffiliated/pera) (Quit: leaving)
2020-09-21 09:41:04 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
2020-09-21 09:41:17 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 09:41:29 +0200 <shad0w_> yo, anyone around
2020-09-21 09:41:37 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 260 seconds)
2020-09-21 09:41:43 +0200 <shad0w_> woops. wrong channel
2020-09-21 09:42:28 +0200hackagejord 2.0.0.0 - Geographical Position Calculations https://hackage.haskell.org/package/jord-2.0.0.0 (CedricLiegeois)
2020-09-21 09:43:49 +0200 <dansho> are io actions not ordered? i don't understand why this doesn't measure time elapsed https://hatebin.com/zwvzuzpfih
2020-09-21 09:44:04 +0200 <dansho> it returns something like 0.00015 seconds
2020-09-21 09:44:37 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 09:45:46 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
2020-09-21 09:47:06 +0200__Joker(~Joker@180.151.105.65)
2020-09-21 09:47:14 +0200 <dansho> oh i guess its not measuring wall time, or something
2020-09-21 09:47:19 +0200fweht(uid404746@gateway/web/irccloud.com/x-vltddeikipwkmies)
2020-09-21 09:48:05 +0200 <dminuoso> "Computation getCPUTime returns the number of picoseconds CPU time used by the current program"
2020-09-21 09:48:31 +0200 <dminuoso> The sleep is not busy sleep
2020-09-21 09:49:34 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
2020-09-21 09:50:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2020-09-21 09:51:19 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 09:53:58 +0200jonatanb(~jonatanb@83.24.161.211.ipv4.supernova.orange.pl)
2020-09-21 09:58:46 +0200edwardkdoes a little dance.
2020-09-21 09:59:16 +0200 <Axman6> Don't hold back Ed
2020-09-21 09:59:47 +0200 <edwardk> i just managed to get my 'types' library to let me use Constraint one of the many kinds i managed to lower to the term level
2020-09-21 09:59:48 +0200sirabensends a request to the current effect handler to do a little dance
2020-09-21 09:59:53 +0200 <edwardk> this means Sing p subsumes Dict p
2020-09-21 10:00:21 +0200 <Axman6> :o
2020-09-21 10:00:22 +0200 <edwardk> and (:-) becomes able to move around any singleton through SingI instances, so it becomes a way to pass arbitrary functions between singleton types
2020-09-21 10:00:29 +0200 <edwardk> So now
2020-09-21 10:00:40 +0200 <edwardk> Sing (a :: Type) -- is TypeRep a
2020-09-21 10:00:46 +0200 <edwardk> Sing (a :: Constraint) -- is Dict a
2020-09-21 10:01:16 +0200 <edwardk> Sing (a :: String) -- is a type level string that you can actually cons on, take/drop from and otherwise manipulate unlike Symbol.
2020-09-21 10:01:35 +0200 <edwardk> etc.
2020-09-21 10:02:16 +0200 <Taneb> Ooh, that's pretty neat
2020-09-21 10:02:17 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 10:03:02 +0200 <edwardk> but the idea of a polykinded (:-) makes me super happy
2020-09-21 10:03:12 +0200 <edwardk> (:--) i guess to go with what :~~: does for HRefl
2020-09-21 10:03:16 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de)
2020-09-21 10:03:39 +0200 <edwardk> would be any function from Sing a -> Sing b -- and can be lifted into Constraint!
2020-09-21 10:03:51 +0200 <edwardk> or maybe
2020-09-21 10:03:53 +0200 <Axman6> that last oe is excellent - do you have to construct the strings a char at a time?
2020-09-21 10:04:18 +0200 <edwardk> yeah they get built up out of nil and cons. because String is defined as [Char]
2020-09-21 10:04:20 +0200 <edwardk> and i can lift Char
2020-09-21 10:04:24 +0200 <edwardk> and I can lift []!
2020-09-21 10:04:36 +0200 <edwardk> i can give a little TH love to generating them
2020-09-21 10:05:14 +0200thc202(~thc202@unaffiliated/thc202)
2020-09-21 10:05:31 +0200solonarv(~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr)
2020-09-21 10:05:37 +0200 <edwardk> oh, and i was able to overload things so that all the numeric types, injective or crappy like Nat can share a S and Z pattern
2020-09-21 10:06:16 +0200 <edwardk> er S and Z type family
2020-09-21 10:06:39 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds)
2020-09-21 10:06:45 +0200Gerula(~Gerula@unaffiliated/gerula)
2020-09-21 10:07:05 +0200aidecoe(~aidecoe@unaffiliated/aidecoe) (Ping timeout: 258 seconds)
2020-09-21 10:07:54 +0200aidecoe(~aidecoe@unaffiliated/aidecoe)
2020-09-21 10:08:44 +0200 <edwardk> > sing :: Sing '(1,Eq Int,Just (Z :: Int)) ==> Sing @(Nat,Constraint,(Maybe Int)) (1,Constraint Dict,Just 0)
2020-09-21 10:08:46 +0200 <lambdabot> <hint>:1:52: error: <hint>:1:52: error: parse error on input ‘@’
2020-09-21 10:09:02 +0200gnumonik(~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net)
2020-09-21 10:09:02 +0200irc_user(uid423822@gateway/web/irccloud.com/x-yhvajookqrbnnurt) (Quit: Connection closed for inactivity)
2020-09-21 10:09:27 +0200 <edwardk> er didn't mean to > that
2020-09-21 10:10:09 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de)
2020-09-21 10:11:39 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-09-21 10:12:10 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de) (Client Quit)
2020-09-21 10:12:31 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de)
2020-09-21 10:13:28 +0200 <Taneb> Is Z a pattern synonym there?
2020-09-21 10:13:50 +0200 <edwardk> Z there is actually a type family i have that expands to 0 in Nat and to various other things in other kinds
2020-09-21 10:14:01 +0200devalot(~ident@mail.pmade.com) (Ping timeout: 264 seconds)
2020-09-21 10:14:18 +0200 <Taneb> Right
2020-09-21 10:14:28 +0200 <edwardk> i hack Int to have a pair of injective type constructors for Z# and S# and it delegates to those for that kind
2020-09-21 10:15:30 +0200 <edwardk> testEquality (sing :: Sing Int) (sing :: Sing Int) ==> Just Refl
2020-09-21 10:16:08 +0200 <edwardk> i had to get fancy with S and Z because the lack of injectivity in Nat's (1+) approach to define Succ meant when you start building singletons on things like a Vec type that is indexed by a Nat you start breaking
2020-09-21 10:16:25 +0200 <edwardk> but if you use the fact that Natural now has Z and S which are injective for all kinds other than Nat it works fine
2020-09-21 10:17:35 +0200sQVe(~sQVe@unaffiliated/sqve)
2020-09-21 10:19:42 +0200 <edwardk> oh yeah, i forgot it is taken by the repl. i guess i need a better name
2020-09-21 10:19:45 +0200 <edwardk> er 'it'
2020-09-21 10:20:11 +0200Gerula(~Gerula@unaffiliated/gerula) (Ping timeout: 265 seconds)
2020-09-21 10:20:18 +0200 <edwardk> I and 'me' would be cute but the former too short. maybe You and you.
2020-09-21 10:20:41 +0200 <edwardk> no good ungendered singular pronouns
2020-09-21 10:21:57 +0200drbean(~drbean@TC210-63-209-64.static.apol.com.tw) (Ping timeout: 256 seconds)
2020-09-21 10:22:52 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 10:23:02 +0200Aquazi(uid312403@gateway/web/irccloud.com/x-bxvisodaildxgivh)
2020-09-21 10:23:17 +0200 <edwardk> ok, going with Me and me
2020-09-21 10:23:28 +0200 <edwardk> that way the template haskell function for building it is makeMe
2020-09-21 10:24:16 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 10:24:24 +0200 <edwardk> between that and makeNice this is becoming punnier than expected
2020-09-21 10:25:23 +0200denisse(~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 240 seconds)
2020-09-21 10:27:32 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2020-09-21 10:27:39 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 10:30:04 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Quit: Leaving)
2020-09-21 10:31:25 +0200 <edwardk> and bugger
2020-09-21 10:32:23 +0200 <edwardk> there appears to be a bug where when i go to try to validate that i can't subvert things by using Sing on constraint, it yells about overlapping instances for StrictEq Constraint -- when there is no instance?
2020-09-21 10:32:28 +0200 <edwardk> i have one on Type
2020-09-21 10:32:38 +0200 <edwardk> but Constraint and Type are different types to the surface language
2020-09-21 10:32:47 +0200 <edwardk> but even so i only have the one instance
2020-09-21 10:35:15 +0200 <Axman6> time for a GHC bug report "Ed broke it again: Overlapping instances for StrictEq Constraint"
2020-09-21 10:35:32 +0200Gerula(~Gerula@unaffiliated/gerula)
2020-09-21 10:38:12 +0200danvet(~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Quit: Leaving)
2020-09-21 10:38:29 +0200 <edwardk> ok, fixed it
2020-09-21 10:38:36 +0200 <edwardk> just crappy error reporting. whew
2020-09-21 10:43:43 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 10:43:56 +0200 <merijn> edwardk: You need to step up your GHC breaking, at least Iceland_Jack has got an error explicitly calling them out, why don't you? ;)
2020-09-21 10:45:02 +0200 <edwardk> merijn: i have a clip of simon shouting from the back of the room during a talk that he would change the compiler to make it stop allowing me to do something
2020-09-21 10:45:37 +0200 <merijn> :D
2020-09-21 10:45:58 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 10:48:29 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds)
2020-09-21 10:50:32 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 10:50:42 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 10:50:57 +0200hackagehlatex 0.3.2 - A library to build valid LaTeX files https://hackage.haskell.org/package/hlatex-0.3.2 (NicolasPouillard)
2020-09-21 10:51:44 +0200zebrag(~inkbottle@aaubervilliers-654-1-112-47.w86-198.abo.wanadoo.fr)
2020-09-21 10:52:16 +0200inkbottle(~inkbottle@aaubervilliers-654-1-112-119.w86-198.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2020-09-21 10:56:35 +0200dysfigured(dysfigured@2600:3c00::f03c:92ff:feb4:be75) (Remote host closed the connection)
2020-09-21 10:56:44 +0200dysfigured(dysfigured@2600:3c00::f03c:92ff:feb4:be75)
2020-09-21 10:57:33 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2)
2020-09-21 10:57:33 +0200mirrorbirdpsut
2020-09-21 11:00:01 +0200unknown(~unknown@s91904426.blix.com) ()
2020-09-21 11:00:14 +0200avocado(renningmat@gateway/shell/matrix.org/x-cjscopkjowyvreqy) (Quit: Idle for 30+ days)
2020-09-21 11:00:30 +0200camlriot42(camlriotma@gateway/shell/matrix.org/x-rtbhfsekxaemiuex) (Quit: Idle for 30+ days)
2020-09-21 11:02:52 +0200cpressey(~cpressey@88.144.93.20)
2020-09-21 11:05:13 +0200 <cpressey> Hi, I recently upgraded cabal from 1.24 (the version that ships with Ubuntu 18 LTS) to 3.0.2 and I'm seeing unusual behaviour: cabal build works, but doesn't detect when I've edited a source file, and cabal install tries to build and fails because it can't find my source files. I can post a minimal example in a gist if it helps.
2020-09-21 11:06:35 +0200 <[exa]> cpressey: do you have all modules listed in the cabal file? (otherwise, a MWE would certainly help)
2020-09-21 11:07:08 +0200 <maerwald> 3.0.2?
2020-09-21 11:07:27 +0200 <maerwald> that version doesn't exist
2020-09-21 11:07:44 +0200 <[exa]> probably meant 3.2.0.0?
2020-09-21 11:08:01 +0200 <cpressey> maerwald: "cabal-install version 3.0.0.0\ncompiled using version 3.0.2.0 of the Cabal library"
2020-09-21 11:08:10 +0200 <maerwald> upgrade to 3.2.0.0
2020-09-21 11:08:33 +0200 <cpressey> [exa]: In fact I don't, that could easily be the problem.
2020-09-21 11:09:50 +0200 <[exa]> debian says it has 3.0.0.0-3 which might be the same... You may just use the binary distribution of cabal from their website, or get one using ghcpu
2020-09-21 11:09:55 +0200 <[exa]> *ghcup
2020-09-21 11:10:03 +0200worc3131(~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) (Remote host closed the connection)
2020-09-21 11:10:10 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 11:10:32 +0200 <[exa]> a common observation here is that ghc/cabal versions from $distro's package manager usually suck
2020-09-21 11:10:59 +0200 <maerwald> there's also https://launchpad.net/~hvr/+archive/ubuntu/ghc but it lacks ghc-8.10
2020-09-21 11:11:02 +0200 <cpressey> maerwald: This is the version it gave me when I did "cabal install cabal-install" on (I think) Friday. I'll try upgrading again and see if it goes all the way to 3.2 this time.
2020-09-21 11:11:18 +0200psut(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Quit: Leaving)
2020-09-21 11:11:18 +0200worc3131(~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786)
2020-09-21 11:11:27 +0200 <maerwald> ah no, it has 8.10
2020-09-21 11:11:40 +0200 <maerwald> cpressey: cabal install cabal-install doesn't work very well
2020-09-21 11:11:41 +0200 <int-e> cpressey: the newer cabal-install should pick up the most recent cabal-install ;-)
2020-09-21 11:12:11 +0200 <merijn> You might need to "cabal update" first :p
2020-09-21 11:12:13 +0200 <maerwald> int-e: that depends on your GHC version, not cabal-install
2020-09-21 11:12:14 +0200 <int-e> maerwald: it turns out that cabal-install 3.2 cannot be built with cabal-install<2.2
2020-09-21 11:12:27 +0200 <maerwald> well, then both
2020-09-21 11:12:35 +0200 <cpressey> [exa]: Is it absolutely required to list all modules in the cabalfile? In development, I sometimes add/remove modules, and it would be nice to not have to remember to update the cabalfile too
2020-09-21 11:13:10 +0200 <maerwald> cpressey: you can use cabal-fmt to auto-expand modules https://oleg.fi/gists/posts/2019-08-11-cabal-fmt.html
2020-09-21 11:13:14 +0200 <merijn> cpressey: Also, why did you still have 1.24? :o THat's ancient
2020-09-21 11:13:46 +0200 <phadej> merijn: some people use distributions' package managers, and their repositories ;)
2020-09-21 11:13:46 +0200 <cpressey> merijn: because I'm running Ubuntu 18.04 LTS and was still using the version in their package repository.
2020-09-21 11:13:58 +0200 <phadej> but does 18.04 has that old cabal-install
2020-09-21 11:13:59 +0200 <merijn> cpressey: Short answer: Yes. Long answer: Yes, because the cabal file is supposed to *define* what goes into a source distribution and doing that sorta thing implicitly is...a bad idea
2020-09-21 11:14:07 +0200 <int-e> phadej: yes
2020-09-21 11:14:08 +0200 <phadej> that's wiked
2020-09-21 11:14:09 +0200 <merijn> cpressey: Wow, that's depressing
2020-09-21 11:14:19 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds)
2020-09-21 11:14:27 +0200 <int-e> phadej: 18.04 was released very shortly after cabal-install 2.0.0.0
2020-09-21 11:14:37 +0200 <int-e> phadej: presumably it was frozen then.
2020-09-21 11:14:39 +0200 <merijn> cpressey: 1.24 is probably at least 4-6 years out of date by now :o
2020-09-21 11:14:51 +0200 <[exa]> cpressey: well it sometimes picks the unlisted modules correctly for me, but I have no idea about the precise reason why it works
2020-09-21 11:15:00 +0200 <merijn> [exa]: It doesn't
2020-09-21 11:15:02 +0200 <maerwald> merijn: that's what LTS means
2020-09-21 11:15:04 +0200 <maerwald> lol
2020-09-21 11:15:13 +0200 <merijn> [exa]: However, GHC looks for imports independent of cabal
2020-09-21 11:15:15 +0200 <cpressey> Well, not listing the modules in the cabalfile probably explains my problem, anyway. Thanks all.
2020-09-21 11:15:30 +0200 <merijn> [exa]: So, even if files aren't listed, GHC may find them
2020-09-21 11:16:06 +0200 <[exa]> o good
2020-09-21 11:16:12 +0200 <int-e> phadej: Or hmm. Am I off by a year? Anyway, 1.24 wasn't ancient yet then :P
2020-09-21 11:16:13 +0200 <[exa]> makes sense, thanks
2020-09-21 11:16:42 +0200pfurla(~pfurla@ool-182ed2e2.dyn.optonline.net)
2020-09-21 11:16:45 +0200 <int-e> phadej: and your 4-6 years are definitely closer to 3.
2020-09-21 11:16:52 +0200 <merijn> int-e: That was mine
2020-09-21 11:16:57 +0200boxscape(577bcb23@gateway/web/cgi-irc/kiwiirc.com/ip.87.123.203.35)
2020-09-21 11:17:08 +0200 <merijn> Although, admittedly I may have been using the source version
2020-09-21 11:17:10 +0200 <int-e> ah. oops I did it again...
2020-09-21 11:17:35 +0200 <merijn> I just recall switching to new-build early on in the Haskell part of my phd codebase and I moved on from 1.24 really shortly after that :p
2020-09-21 11:17:45 +0200 <phadej> 20.04 is using 2.4.0.0
2020-09-21 11:17:52 +0200 <phadej> though there definitely was 3.0 and 3.2
2020-09-21 11:18:01 +0200 <boxscape> was curious how the constraints package implements Gcd so I took a look and... https://hackage.haskell.org/package/constraints-0.12/docs/src/Data.Constraint.Nat.html#Gcd
2020-09-21 11:18:02 +0200 <boxscape> that doesn't look right? Am I missing something or is it just not fully implemented?
2020-09-21 11:18:06 +0200 <merijn> int-e: Perhaps it's just academic trauma induced time dilation that makes feel like it was 6 years :p
2020-09-21 11:18:06 +0200 <phadej> and **worse**, they have ghc-8.8
2020-09-21 11:18:12 +0200 <phadej> which cabal-install-2.4 doesn't support
2020-09-21 11:18:17 +0200 <phadej> they = Ubuntu
2020-09-21 11:18:29 +0200 <merijn> lol
2020-09-21 11:18:35 +0200 <int-e> merijn: FWIW, I was surprised as well... it feels longer.
2020-09-21 11:18:38 +0200 <merijn> Linux packaging, yay!
2020-09-21 11:18:41 +0200 <phadej> or now
2020-09-21 11:18:48 +0200 <phadej> s/now/no
2020-09-21 11:18:54 +0200 <phadej> it's 8.8.1+dfsg1+is+8.6.5
2020-09-21 11:19:01 +0200 <phadej> which is :)(:
2020-09-21 11:19:19 +0200 <int-e> phadej: still usable for bootstrapping a real ghc.
2020-09-21 11:19:38 +0200 <phadej> feels like it's common that distribution packages don't really are up to date with where HAskell goes
2020-09-21 11:19:44 +0200kuribas(~user@ptr-25vy0i9m1chs7zs38i7.18120a2.ip6.access.telenet.be)
2020-09-21 11:19:44 +0200 <phadej> int-e: to bootstrap 9.0 you need 8.8.1
2020-09-21 11:19:47 +0200 <phadej> that one is really 8.6.5
2020-09-21 11:19:50 +0200 <phadej> so no luck.
2020-09-21 11:19:55 +0200borne(~fritjof@200116b864f88900f00953f5fedbeb5e.dip.versatel-1u1.de)
2020-09-21 11:19:59 +0200 <tomsmeding> boxscape: not to speak about Lcm, Div and Mod
2020-09-21 11:20:03 +0200 <int-e> phadej: 9.0 isn't released
2020-09-21 11:20:12 +0200 <phadej> int-e: I hope it's matter of weeks now.
2020-09-21 11:20:14 +0200 <boxscape> tomsmeding right
2020-09-21 11:20:46 +0200 <maerwald> int-e: 9.0.1-alpha1 is
2020-09-21 11:20:48 +0200 <tomsmeding> boxscape: does it actually _work_, somehow in a way that we don't understand? or is it actually unimplemented
2020-09-21 11:20:58 +0200 <tomsmeding> work as in "test it"
2020-09-21 11:21:06 +0200 <boxscape> I haven't actually tried to be honest but I guess I should, and I will right now
2020-09-21 11:21:07 +0200 <phadej> ghc "support" windows are too short for ubuntu :(
2020-09-21 11:21:34 +0200Cadair1(~Cadair@185.204.1.185)
2020-09-21 11:21:54 +0200 <maerwald> boxscape: try to be honest next time
2020-09-21 11:22:17 +0200 <boxscape> but I was honest this time too :(
2020-09-21 11:22:34 +0200 <boxscape> it doesn't work, by the way - Gcd 4 2 is not reduced
2020-09-21 11:22:39 +0200 <tomsmeding> heh
2020-09-21 11:22:41 +0200 <phadej> maerwald: there is no 9.0.1-alpha1, is there?
2020-09-21 11:22:54 +0200 <maerwald> https://downloads.haskell.org/~ghc/9.0.1-alpha1/
2020-09-21 11:23:15 +0200 <tomsmeding> boxscape: file a bug report :)
2020-09-21 11:23:47 +0200 <boxscape> I suppose I will, or maybe a PR if I can figure out how it should work
2020-09-21 11:25:09 +0200 <merijn> hah
2020-09-21 11:25:32 +0200 <merijn> Next thing you know you'll be handed commit access and responsible for maintaining it ;)
2020-09-21 11:25:38 +0200 <boxscape> oh boy
2020-09-21 11:25:43 +0200 <int-e> phadej: hmm if you release 2 major versions per year and you support the 2 latest major versions for bootstrapping...
2020-09-21 11:25:48 +0200 <boxscape> I am not at all qualified to handle the constraints package :)
2020-09-21 11:25:48 +0200 <tomsmeding> unlikely for this particular package I think
2020-09-21 11:25:56 +0200 <phadej> maerwald: there isn't tag in repository
2020-09-21 11:26:02 +0200 <int-e> ...that's not a very generous time frame
2020-09-21 11:26:04 +0200 <phadej> maerwald: so I have no idea what that directory is about
2020-09-21 11:26:23 +0200 <phadej> maerwald: also it wasn't announced, and according to ben, if something weren't announced it doesn't exist.
2020-09-21 11:26:29 +0200 <maerwald> phadej: I don't know either, but it works fine :p
2020-09-21 11:26:39 +0200 <phadej> maerwald: specifically, I'd ask you to not add that to ghcup
2020-09-21 11:26:44 +0200 <phadej> to not confuse shit out of users
2020-09-21 11:27:00 +0200 <maerwald> what's confusing about it?
2020-09-21 11:27:32 +0200 <phadej> if there would be an bug report "GHC-9.0.1-alpha1 regresses ..."
2020-09-21 11:27:34 +0200 <maerwald> phadej: also, ben uploaded that and signed it with his key
2020-09-21 11:27:44 +0200 <cheater> hi
2020-09-21 11:28:03 +0200 <cheater> is vty still the best thing for creating simple curses style UIs or is there something else you would suggest
2020-09-21 11:28:15 +0200 <merijn> vty is low level
2020-09-21 11:28:24 +0200 <merijn> For something higher level, probably you want brick
2020-09-21 11:28:27 +0200acidjnk_new2(~acidjnk@p200300d0c73658819d57354728142a5b.dip0.t-ipconnect.de)
2020-09-21 11:28:53 +0200 <merijn> cheater: vty deals with terminal emulation, brick deals with "using vty to draw widgets and stuff"
2020-09-21 11:29:17 +0200 <cheater> i want to create a very simple text editor
2020-09-21 11:29:25 +0200 <cheater> vim style
2020-09-21 11:29:43 +0200 <[exa]> you really want brick
2020-09-21 11:29:50 +0200jedws(~jedws@121.209.139.222) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 11:29:58 +0200 <merijn> Prepare to be surprised how comlex text editing is :p
2020-09-21 11:30:08 +0200 <maerwald> merijn: yeah, I looked into yi... whew
2020-09-21 11:30:28 +0200 <cheater> all it'll do is move lines up and down. that's all.
2020-09-21 11:30:35 +0200 <merijn> Was it Atom that took like 5 years before it could open files ? 5 MB
2020-09-21 11:30:36 +0200 <cheater> maybe edit them and add new ones or remove some.
2020-09-21 11:30:52 +0200 <merijn> cheater: Yeah...that's harder than you think :p
2020-09-21 11:30:52 +0200 <cheater> file size limited to 100k.
2020-09-21 11:31:01 +0200 <cheater> merijn: oookay
2020-09-21 11:31:16 +0200carlomagno1(~cararell@inet-hqmc01-o.oracle.com)
2020-09-21 11:31:17 +0200 <maerwald> 100k is a very precise unit
2020-09-21 11:31:21 +0200 <cheater> brick says "This package deprecates vty-ui." ahh i've been using vty-ui
2020-09-21 11:31:22 +0200 <merijn> I have a 30 page paper on "data structure for text editing" :p
2020-09-21 11:31:28 +0200 <cheater> wow can y'all stop lol
2020-09-21 11:31:40 +0200 <merijn> cheater: yeah, brick is the successor of vty-ui
2020-09-21 11:31:40 +0200 <[exa]> cheater: isn't that motivating? :]
2020-09-21 11:31:44 +0200 <maerwald> we're trying to encourage you
2020-09-21 11:31:49 +0200 <cheater> no, it's boring
2020-09-21 11:31:54 +0200 <cheater> i have enough problems as it is
2020-09-21 11:31:56 +0200 <maerwald> it's so hard, you must do it
2020-09-21 11:32:10 +0200 <Cheery> there was a library in haskell for rendering text
2020-09-21 11:32:13 +0200 <tomsmeding> cheater: I've written a terminal text editor in c++ without using any terminal library at all
2020-09-21 11:32:14 +0200 <boxscape> wait... Div and Mod seem to work, even though Gcd and Lcm don't
2020-09-21 11:32:14 +0200 <maerwald> (isn't that what motivates haskellers?)
2020-09-21 11:32:22 +0200 <tomsmeding> if I can do that you can do it with the niceties that haskell gives you
2020-09-21 11:32:24 +0200 <cheater> tomsmeding: nice
2020-09-21 11:32:34 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2)
2020-09-21 11:32:42 +0200 <cheater> yeah i'm just writing a small manual decompiling helper
2020-09-21 11:32:50 +0200 <tomsmeding> (before you actually go and look at that c++ code beware it's ugly and bad)
2020-09-21 11:32:55 +0200 <cheater> like, be able to move lines around without violating semantics
2020-09-21 11:32:57 +0200 <cheater> that's all really
2020-09-21 11:32:57 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com) (Ping timeout: 258 seconds)
2020-09-21 11:32:59 +0200 <boxscape> oh but that's because I'm using Div and Mod from a different package, never mind
2020-09-21 11:33:04 +0200 <[exa]> cheater: o nice, decompiling what precisely?
2020-09-21 11:33:06 +0200 <tomsmeding> boxscape: :D
2020-09-21 11:33:06 +0200 <boxscape> (base)
2020-09-21 11:33:13 +0200 <cheater> shader assembly
2020-09-21 11:33:28 +0200 <tomsmeding> boxscape: perhaps their implementation in base can suggest how to implement Gcd in constraints
2020-09-21 11:33:33 +0200 <boxscape> yeah, good point
2020-09-21 11:33:46 +0200 <boxscape> wait
2020-09-21 11:33:48 +0200 <boxscape> they're built in
2020-09-21 11:33:51 +0200 <[exa]> cheater: very cool
2020-09-21 11:33:53 +0200 <cheater> i decompiled it by hand already but i introduced a bug and it's going to be impossible to track down, so i'm gonna do this now
2020-09-21 11:34:03 +0200 <cheater> i commuted some lines that i shouldn't have
2020-09-21 11:34:04 +0200 <cheater> i think
2020-09-21 11:34:07 +0200 <merijn> ah, rats
2020-09-21 11:34:14 +0200 <tomsmeding> cheater: https://xkcd.com/1205/
2020-09-21 11:34:18 +0200 <merijn> I can't find a copy of the PDF i was talking about now
2020-09-21 11:34:22 +0200 <cheater> i'm not clicking any xkcd links
2020-09-21 11:34:56 +0200 <tomsmeding> merijn: pity
2020-09-21 11:36:24 +0200 <tomsmeding> merijn: it's not this one by any chance? https://www.cs.unm.edu/~crowley/papers/sds.pdf
2020-09-21 11:36:43 +0200 <merijn> Ooh, looks like it
2020-09-21 11:36:49 +0200 <merijn> cheater: ^^ that one :)
2020-09-21 11:37:07 +0200 <gnumonik> Hello. I'm trying to generate parsers for records automatically using TH. Have a function that gives me a 'Q (Parser a)', but I can't figure out how to turn that into an exp so it's unusable. Is there some way to do that or is it impossible?
2020-09-21 11:37:14 +0200 <gnumonik> Am new to TH
2020-09-21 11:37:31 +0200 <merijn> gnumonik: You need to unquote it via $()
2020-09-21 11:37:45 +0200 <cheater> merijn: what is it?
2020-09-21 11:38:05 +0200 <merijn> If "foo :: Q (Parser a)" then 'bar $(foo)' is "splice the AST of 'foo' in the code here"
2020-09-21 11:38:18 +0200 <cheater> oh yea no idc i'll just put everything in a list
2020-09-21 11:38:41 +0200ces(~ces@52d3ce3c.dynamic-ip.k-net.dk)
2020-09-21 11:38:52 +0200 <cheater> just so you understand where i'm at
2020-09-21 11:39:45 +0200 <merijn> hmm, I forget how to specify ghc-options for only local packages in cabal.project (i.e. as opposed to for all transitive dependencies)
2020-09-21 11:40:37 +0200 <gnumonik> I've tried splicing it but it doesn't work. I think it's because I have a Q Parser and not a Q exp.
2020-09-21 11:40:43 +0200ixlun(~matthew@213.205.241.81)
2020-09-21 11:41:13 +0200 <cheater> does Vty work on windows btw?
2020-09-21 11:41:16 +0200 <cheater> it works, right?
2020-09-21 11:41:38 +0200 <merijn> gnumonik: oh, wait, yeah
2020-09-21 11:41:45 +0200 <cheater> hmm i'm not seeing any mention of windows
2020-09-21 11:41:55 +0200 <merijn> gnumonik: Can you pastebin/gist the code?
2020-09-21 11:42:04 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c)
2020-09-21 11:42:13 +0200 <merijn> cheater: It supports windows for users who have/use a proper terminal emulator
2020-09-21 11:42:19 +0200 <merijn> cheater: So..."maybe"
2020-09-21 11:42:21 +0200 <cheater> how do i do that
2020-09-21 11:42:25 +0200 <cheater> is powershell proper
2020-09-21 11:42:30 +0200 <merijn> No clue
2020-09-21 11:42:58 +0200 <merijn> That's a messy swamp of complicated questions and ridiculously archaic technology your asking questions about :p
2020-09-21 11:42:59 +0200sagax(~sagax_nb@213.138.71.146)
2020-09-21 11:44:06 +0200 <gnumonik> It's pretty long and I need a sec to unbreak it, I was trying something and I ran out of undo space in VSCode
2020-09-21 11:44:18 +0200 <cheater> hmm i need to get git on this machine as well
2020-09-21 11:44:23 +0200 <gnumonik> But yeah. It just seems like there's no way to get the Parser into an Exp :-(
2020-09-21 11:44:34 +0200 <cheater> what's the least painful way to have git on windows? sorry for OT
2020-09-21 11:45:12 +0200 <mirrorbird> installing linux probably
2020-09-21 11:45:17 +0200 <[exa]> cheater: the linux subsystem kinda works, msysgit/tortoisegit also work, but the least painful way is likely to...yeah ^^
2020-09-21 11:45:30 +0200 <cheater> mirrorbird: no
2020-09-21 11:46:12 +0200 <mirrorbird> how do you know?
2020-09-21 11:46:36 +0200 <merijn> gitbash
2020-09-21 11:46:54 +0200 <merijn> gnumonik: You can, but you're mixing levels
2020-09-21 11:47:19 +0200 <[exa]> cheater: consider https://www.reddit.com/r/haskell/comments/7tutxa/vty_needs_your_help_supporting_windows/
2020-09-21 11:47:21 +0200 <merijn> gnumonik: You're creating a parser in your quotation, while what you *want* is "the Exp resembling a parser"
2020-09-21 11:47:28 +0200 <[exa]> cheater: generally, windows does _not_ have a terminal
2020-09-21 11:47:29 +0200 <cheater> this is how i know mirrorbird and why you've been put on ignore https://twitter.com/PLT_cheater/status/1306114709905694722
2020-09-21 11:47:59 +0200 <cheater> [exa]: thanks, looking!
2020-09-21 11:48:22 +0200 <mirrorbird> cheater, yeah i hate that too
2020-09-21 11:48:25 +0200 <merijn> cheater: gitbash is what my girlfriend uses on windows for git, seems the most workable solution
2020-09-21 11:48:38 +0200 <cheater> merijn: thank you
2020-09-21 11:48:49 +0200 <cheater> merijn: does she know how it compares to WSL1 or WSL2?
2020-09-21 11:49:31 +0200 <merijn> WSL1/2 are linux emulation layers fully running linux code. gitbash is just a lightweight terminal emulator that runs bash, git and some other commandline tools
2020-09-21 11:49:45 +0200 <cheater> right
2020-09-21 11:49:50 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
2020-09-21 11:49:51 +0200ces(~ces@52d3ce3c.dynamic-ip.k-net.dk) (Quit: WeeChat 2.9)
2020-09-21 11:50:00 +0200 <dminuoso> gnumonik: Of course there is! :)
2020-09-21 11:50:01 +0200 <merijn> Incidentally, all of GNU coreutils already support windows anyway. I used to use grep/bash/etc. in windows' Command.exe
2020-09-21 11:50:07 +0200 <cheater> if I need a terminal to run Vty, then maybe this will be a good way to get Vty running
2020-09-21 11:50:09 +0200 <merijn> No clue how to get git in there, though
2020-09-21 11:50:20 +0200 <merijn> And git-bash seems to have the most convenient story for installing stuff
2020-09-21 11:50:28 +0200 <cheater> mhm
2020-09-21 11:50:50 +0200 <gentauro> I once saw a .cabal file that had, besides several `executable` (`executable foobar` and `executable bazqux`) it also had another `library` besides the main/default. I just don't remember the syntax to add this ad-hoc library. Anybody can help? Thx
2020-09-21 11:51:39 +0200 <gentauro> is it `library identifier` or how is it done?
2020-09-21 11:51:42 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 11:51:57 +0200 <gentauro> I'm using `cabal 2.2`
2020-09-21 11:52:05 +0200gentaurothat's the header of the file
2020-09-21 11:52:24 +0200 <phadej> gentauro: https://cabal.readthedocs.io/en/3.4/cabal-package.html#library scroll down to internal library
2020-09-21 11:53:07 +0200 <gnumonik> I'm not sure how to get an exp that resembles a parser though :-( And I tried building the AST by hand but i reach a point where I need a way to lift a 'Parser' to get it into the syntax tree and I'm lost
2020-09-21 11:53:28 +0200hackagefloskell 0.10.5 - A flexible Haskell source code pretty printer https://hackage.haskell.org/package/floskell-0.10.5 (ecramer)
2020-09-21 11:53:42 +0200mpereira(~mpereira@2a02:810d:f40:d96:b903:bcf4:35d5:9a35)
2020-09-21 11:55:29 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Ping timeout: 272 seconds)
2020-09-21 11:55:47 +0200 <gentauro> phadej: thx. Just what I needed :)
2020-09-21 11:56:00 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-09-21 11:58:15 +0200 <gnumonik> The only thing I can think of is rewriting a bunch of Parsec (that's what I'm using) by hand in the Haskell AST, so everything's an exp. Actually it'd probably be easier to just write some haskell to generate the text of the source code for the parsers than do that
2020-09-21 11:58:40 +0200pingiun(~pingiun@j63019.upc-j.chello.nl) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 12:01:40 +0200Rudd0(~Rudd0@185.189.115.103)
2020-09-21 12:02:05 +0200 <merijn> gnumonik: You want [| |] for lifting stuff into Exp
2020-09-21 12:02:34 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds)
2020-09-21 12:02:51 +0200 <merijn> gnumonik: "[| foo 1 >>= bar |]" says "take the code "foo 1 >>= bar" and give me the Exp of that AST
2020-09-21 12:04:50 +0200polyrain(~polyrain@2001:8003:e501:6901:9557:35db:b11f:8e3c)
2020-09-21 12:05:07 +0200 <gnumonik> https://gist.github.com/gnumonik/77554f3a7817495030c16dd46739fa79 is what I have (I think that's all the important stuff, hastily reconstructed, probably quite ugly)
2020-09-21 12:05:13 +0200 <boxscape> looks like the Gcm etc. thing in constraints is intentional https://github.com/ekmett/constraints/issues/53
2020-09-21 12:07:42 +0200 <boxscape> ( tomsmeding, in case you're interested)
2020-09-21 12:09:04 +0200 <tomsmeding> boxscape: I'm not sure whether that issue still applies, given that Min does seem to have a suitable implementation now
2020-09-21 12:09:20 +0200 <boxscape> oh, huh, true
2020-09-21 12:10:18 +0200 <gnumonik> I know how the quotation brackets work. I wish I knew more so I could explain this well. The problem, I think, is that I'm trapped in the Q monad. My function that generates parsers spits out 'Q Parser a's, so when I quote it, I *think* that it's giving me the AST for an expression that spits out the Q stuff.
2020-09-21 12:11:13 +0200marek(~mmahut@209.250.249.245) (Changing host)
2020-09-21 12:11:13 +0200marek(~mmahut@fedora/pyxel)
2020-09-21 12:11:49 +0200 <dminuoso> gnumonik: Try generating a `Q Exp` instead.
2020-09-21 12:12:30 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 12:13:04 +0200 <dminuoso> gnumonik: You can either use [| ... |] like merijn suggested, or you build up that construction yourself
2020-09-21 12:13:13 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2020-09-21 12:13:50 +0200 <boxscape> s/Gcm/Gcd, whoops
2020-09-21 12:14:43 +0200 <cheater> has anyone got experience compiling medium large Haskell projects on Windows using WSL1 vs WSL2 if the data must be stored on the Windows file system?
2020-09-21 12:15:49 +0200fweht(uid404746@gateway/web/irccloud.com/x-vltddeikipwkmies) (Quit: Connection closed for inactivity)
2020-09-21 12:17:04 +0200v0d1ch(~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs)
2020-09-21 12:17:08 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-09-21 12:18:11 +0200 <gnumonik> I tried to do that and I couldn't make it work :-( If I make a parser in the Q monad I can't get it out. I can use the oxford brackets to transform any other function (or w/e) into an exp but whenever I try to quote the parser I generates I get a "No lift instance"
2020-09-21 12:18:32 +0200 <gentauro> phadej: I like this feature with `sub-libs`. That way I can keep my main library `Safe` while all the nasty stuff needed by some of the `executables` I can move to these `sub-libs` :-)
2020-09-21 12:18:53 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de)
2020-09-21 12:18:54 +0200gentaurowhat's not to like :)
2020-09-21 12:19:33 +0200olligobber(olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 272 seconds)
2020-09-21 12:21:06 +0200mmohammadi9812(~mmohammad@2.178.188.114) (Quit: I quit (╯°□°)╯︵ ┻━┻)
2020-09-21 12:23:15 +0200stree(~stree@50-108-115-67.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception)
2020-09-21 12:23:33 +0200stree(~stree@50-108-115-67.adr01.mskg.mi.frontiernet.net)
2020-09-21 12:25:58 +0200 <gnumonik> https://gist.github.com/gnumonik/51b29cb694a8e19052f3613b8cc3fcfa that's problem I think. I can quote *other* parsers in the oxford brackets but for some reason that I don't understand the compiler never lets me quote the one that I made inside the Q monad. So I have to return a 'Q Parser'. Which is kinda useless.
2020-09-21 12:27:59 +0200alp(~alp@2a01:e0a:58b:4920:8dbc:80e7:a786:cb13) (Remote host closed the connection)
2020-09-21 12:28:06 +0200alp(~alp@88.126.45.36)
2020-09-21 12:34:12 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
2020-09-21 12:36:21 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 12:37:33 +0200 <cheater> glguy: hi, do you know if there is any way yet to sensibly run Vty on Windows?
2020-09-21 12:37:40 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
2020-09-21 12:40:56 +0200polyrain(~polyrain@2001:8003:e501:6901:9557:35db:b11f:8e3c) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 12:41:07 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
2020-09-21 12:41:10 +0200 <tomsmeding> cheater: what kind of trouble are you hitting?
2020-09-21 12:41:49 +0200 <cheater> tomsmeding: Vty is said to require an ansi terminal, which windows didn't have until recently, so I don't know if Vty has been updated at all to take advantage of any of that
2020-09-21 12:42:06 +0200 <tomsmeding> have you tried it? it might just magically work
2020-09-21 12:42:25 +0200 <cheater> no, it takes a bunch of time to try it. i'd rather ask some people I know have used it.
2020-09-21 12:42:38 +0200 <tomsmeding> sure :)
2020-09-21 12:43:06 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
2020-09-21 12:44:15 +0200 <dminuoso> What is the reason `cabal build foo:test:bar` requires --enable-tests (sometimes?). Why is there some mutable state requiring me to switch between enabling and disabling tests?
2020-09-21 12:44:38 +0200 <merijn> dminuoso: It's because it affects the build plan
2020-09-21 12:45:05 +0200 <merijn> dminuoso: tests might require different build plans for the main library and having them automatically rebuild and switch plans each time is...suboptimal
2020-09-21 12:45:24 +0200 <merijn> Because then your code recompiles every time you switch between tests or not
2020-09-21 12:45:27 +0200hackagewai-extra 3.1.0 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.1.0 (MichaelSnoyman)
2020-09-21 12:45:40 +0200 <dminuoso> merijn: And that is bad why?
2020-09-21 12:45:47 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection)
2020-09-21 12:45:48 +0200 <merijn> dminuoso: Just enable tests in cabal.project(.local) so they're always in the build plan
2020-09-21 12:45:55 +0200 <dminuoso> Mm
2020-09-21 12:46:07 +0200 <merijn> dminuoso: Because if you alternate running tests and executables you don't want your library to recompile each switch?
2020-09-21 12:46:13 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
2020-09-21 12:46:27 +0200 <merijn> But not recompiling isn't safe if the build plan changes
2020-09-21 12:46:44 +0200 <merijn> So just enable tests so the build plan always accommodates them, problem solved
2020-09-21 12:48:38 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
2020-09-21 12:48:51 +0200 <tomsmeding> cheater: I _think_ that because vty will indirectly use the terminfo library, which I _think_ is not present on windows, it will not work out of the box
2020-09-21 12:48:56 +0200 <tomsmeding> but I haven't tested it either :)
2020-09-21 12:49:11 +0200 <cheater> OK
2020-09-21 12:49:13 +0200 <dminuoso> Fair enough. So --enable-tests essentially mixes in the build-depends from the test-suite, causing a new build plan to be generated that includes the (transitive) version bounds of the test-suite?
2020-09-21 12:49:24 +0200 <dminuoso> And --disable-tests turns that off again?
2020-09-21 12:50:00 +0200 <tomsmeding> cheater: I have written a library on somewhat the same level of abstraction as vty at some point, that does work on windows (https://git.tomsmeding.com/terminal-io-hs/tree/); however, it's not on hackage, and has been used for exactly one university project at some point :p
2020-09-21 12:50:14 +0200 <tomsmeding> so I don't necessarily recommend using it, but wanted to post it for completeness regardless
2020-09-21 12:50:46 +0200 <cheater> tomsmeding: thanks, that's pretty cool. how does it work on windows?
2020-09-21 12:51:20 +0200acarrico(~acarrico@pppoe-209-99-203-201.greenmountainaccess.net) (Ping timeout: 272 seconds)
2020-09-21 12:52:05 +0200 <merijn> dminuoso: Right
2020-09-21 12:52:34 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 12:52:34 +0200 <merijn> dminuoso: And there's no real design (yet?) for how to properly handle switching between executable and test targets
2020-09-21 12:52:48 +0200 <merijn> dminuoso: (recompiling each time is obviously not ideal)
2020-09-21 12:52:50 +0200 <dminuoso> merijn: But wouldnt `cabal v2-test` have to enable-tests at the very least?
2020-09-21 12:53:00 +0200 <merijn> Yes, no, maybe?
2020-09-21 12:53:38 +0200 <merijn> dminuoso: If you have a coherent design for how all the bits should work I'm sure it'll be welcome ;) And probably there's at least 1 or 2 issues discussing it on github :p
2020-09-21 12:54:07 +0200 <dminuoso> Im quite confident that this is very non-trivial.
2020-09-21 12:54:17 +0200 <dminuoso> Build systems always are.
2020-09-21 12:54:17 +0200 <merijn> :)
2020-09-21 12:54:53 +0200 <dminuoso> Hooray, I just managed to completely screw up dist-newstyle/ to the point of having to delete it.
2020-09-21 12:54:55 +0200 <boxscape> Is there a way to access functions in ghci that aren't exported?
2020-09-21 12:55:22 +0200 <cheater> using :m
2020-09-21 12:55:27 +0200 <boxscape> oh
2020-09-21 12:55:28 +0200 <boxscape> thankss
2020-09-21 12:55:31 +0200 <cheater> yw
2020-09-21 12:56:36 +0200 <boxscape> hmm though actually that seems to have the same behavior as importing it
2020-09-21 12:57:08 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2020-09-21 12:57:12 +0200 <cheater> you can use :m +Foo or something i think
2020-09-21 12:57:27 +0200 <cheater> not sure
2020-09-21 12:57:52 +0200basil(~basil@host-87-26-187-41.business.telecomitalia.it)
2020-09-21 12:58:08 +0200 <boxscape> I can use that, but it doesn't seem to bring into scope identifiers in Foo that aren't exported by Foo, unfortunately
2020-09-21 12:58:16 +0200basilGuest87848
2020-09-21 12:59:22 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 12:59:28 +0200Guest87848(~basil@host-87-26-187-41.business.telecomitalia.it) (Client Quit)
2020-09-21 12:59:39 +0200 <solonarv> :m + *Foo works
2020-09-21 12:59:54 +0200 <solonarv> has to be an interpreted module
2020-09-21 13:00:26 +0200 <boxscape> oh, interesting, thanks
2020-09-21 13:00:31 +0200basil_(~basil@host-87-26-187-41.business.telecomitalia.it)
2020-09-21 13:01:49 +0200basil_(~basil@host-87-26-187-41.business.telecomitalia.it) (Client Quit)
2020-09-21 13:02:42 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-09-21 13:03:46 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit)
2020-09-21 13:04:19 +0200basil_(~basil@host-87-26-187-41.business.telecomitalia.it)
2020-09-21 13:07:26 +0200 <dminuoso> I recall there was a super dirty and unsafe package that let gain access to non-exported identifiers from other package..
2020-09-21 13:08:20 +0200 <merijn> @hackage true-name -- this one? :p
2020-09-21 13:08:20 +0200 <lambdabot> https://hackage.haskell.org/package/true-name -- this one? :p
2020-09-21 13:08:44 +0200Gurkenglas(~Gurkengla@unaffiliated/gurkenglas)
2020-09-21 13:08:59 +0200 <boxscape> hm, neat
2020-09-21 13:09:06 +0200 <dminuoso> Yes, thats it :)
2020-09-21 13:09:36 +0200 <merijn> hmm, I forget how to specify ghc-options for only local packages in cabal.project (i.e. as opposed to for all transitive dependencies)
2020-09-21 13:09:46 +0200 <merijn> anyone know?
2020-09-21 13:11:08 +0200 <hekkaidekapus> merijn: package foo
2020-09-21 13:11:36 +0200 <hekkaidekapus> And `ghc-options:` under that stanza.
2020-09-21 13:11:42 +0200sQVe(~sQVe@unaffiliated/sqve) (Quit: Bye!)
2020-09-21 13:11:45 +0200 <tomjaguarpaw> package opaleye ghc-options: -iDoc/Tutorial -iTest -fprint-potential-instances
2020-09-21 13:11:54 +0200 <tomjaguarpaw> Hmm, bad formatting
2020-09-21 13:11:57 +0200 <tomjaguarpaw> package opaleye
2020-09-21 13:11:59 +0200 <tomjaguarpaw> ghc-options: -iDoc/Tutorial -iTest -fprint-potential-instances
2020-09-21 13:12:51 +0200v0d1ch(~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs) (Quit: WeeChat 2.9)
2020-09-21 13:13:25 +0200jespada(~jespada@90.254.241.6) (Ping timeout: 264 seconds)
2020-09-21 13:13:54 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 13:14:14 +0200 <tomsmeding> cheater: it assumes you have a sort-of xterm-compliant terminal, which windows has nowadays
2020-09-21 13:14:27 +0200 <int-e> merijn: is it too much to hope that cabal v2-configure --ghc-options would drop the flags into cabal.project.local where it will be picked up by other cabal invocations?
2020-09-21 13:14:40 +0200bahamas(~lucian@188.24.181.166)
2020-09-21 13:14:40 +0200bahamas(~lucian@188.24.181.166) (Changing host)
2020-09-21 13:14:40 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 13:14:46 +0200 <int-e> merijn: Oh.
2020-09-21 13:14:53 +0200 <tomsmeding> vty does the full thing by actually consulting the terminfo database to find out what escape sequences are appropriate for your terminal; that works great on linux but fails on windows (at least, that's my hypothesis)
2020-09-21 13:14:58 +0200 <int-e> merijn: never mind, I missed the "only local" part
2020-09-21 13:14:59 +0200 <cheater> tomsmeding: does it work in ps, or in cmd only?
2020-09-21 13:15:05 +0200 <tomsmeding> my library doesn't bother, which makes it work :p
2020-09-21 13:15:16 +0200 <tomsmeding> my windows-using friend used it in cmd at the time
2020-09-21 13:15:26 +0200 <tomsmeding> does PS support ansi escape sequences?
2020-09-21 13:15:31 +0200 <cheater> i don't know
2020-09-21 13:15:34 +0200 <cheater> at some point it didn't
2020-09-21 13:15:39 +0200 <cheater> not sure what it's like now
2020-09-21 13:15:44 +0200 <tomsmeding> printf "\x1B[1mbold text!\x1B[0m"
2020-09-21 13:16:05 +0200jespada(~jespada@90.254.241.6)
2020-09-21 13:16:34 +0200 <tomsmeding> where \x1B is byte 27; manage to print that to PS (possibly using putStrLn ;) ), if that shows bold text, then yes, else no
2020-09-21 13:18:05 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2020-09-21 13:18:51 +0200 <int-e> merijn: https://github.com/haskell/cabal/issues/3883 suggests you can't :-/
2020-09-21 13:19:28 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
2020-09-21 13:20:21 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Remote host closed the connection)
2020-09-21 13:20:26 +0200cosimone_(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
2020-09-21 13:21:20 +0200 <int-e> merijn: (The suggested workaround is to specify ghc-options for each package of interest in one of the cabal.project files... manually?)
2020-09-21 13:21:38 +0200 <merijn> hekkaidekapus: But then I need to explicitly do that for each of the local package :\
2020-09-21 13:22:04 +0200 <hekkaidekapus> Yeah, int-e has been expanding on that.
2020-09-21 13:22:07 +0200 <int-e> So... yeah what hekkaidekapus suggested.
2020-09-21 13:23:06 +0200arianvp(~weechat@arianvp.me) (Quit: WeeChat 2.7.1)
2020-09-21 13:23:22 +0200 <tomjaguarpaw> If only a cabal file was a datastructure in some programming language. Then you could just write code to do it.
2020-09-21 13:23:39 +0200arianvp(~weechat@arianvp.me)
2020-09-21 13:24:04 +0200 <Putonlalla> What is Nix?
2020-09-21 13:25:05 +0200 <Cheery> it's a package manager where the specialty is referential transparency extended to package-level.
2020-09-21 13:26:17 +0200tchouri(~tchouri@gateway/tor-sasl/hekkaidekapus)
2020-09-21 13:26:18 +0200 <merijn> Putonlalla: Oh, oh, is the answer "a terribly ill-specified programming language that's hard to use unless you have a fulltime expert to tell you how to fix things so they work"? :)
2020-09-21 13:26:27 +0200 <Putonlalla> I was just trying to play Jeopardy with tomjaguarpaw.
2020-09-21 13:26:38 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-09-21 13:27:06 +0200 <tomjaguarpaw> Ah nice
2020-09-21 13:27:39 +0200 <tomjaguarpaw> But also just having this property for our language-specific build system would be nice (some would say essential)
2020-09-21 13:27:54 +0200cpressey(~cpressey@88.144.93.20) (Quit: WeeChat 1.9.1)
2020-09-21 13:28:03 +0200hekkaidekapus(~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds)
2020-09-21 13:28:12 +0200tchourihekkaidekapus
2020-09-21 13:28:31 +0200basil_(~basil@host-87-26-187-41.business.telecomitalia.it) (Quit: Leaving)
2020-09-21 13:28:56 +0200 <merijn> tomjaguarpaw: Well, it is one, but the API is rather unstable :p
2020-09-21 13:29:40 +0200 <tomjaguarpaw> Yeah I've been considering extracting a stable subset, but I incrementally learn the internals of cabal slowly :)
2020-09-21 13:29:42 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2)
2020-09-21 13:29:55 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de)
2020-09-21 13:29:57 +0200 <tomjaguarpaw> hekkaidekapus: Does your name mean 16-legged?
2020-09-21 13:30:46 +0200 <hekkaidekapus> tomjaguarpaw: hehehehe… Yeah, it’s about arithmetic branched off octopuses…
2020-09-21 13:30:46 +0200GyroW(~GyroW@unaffiliated/gyrow) (Remote host closed the connection)
2020-09-21 13:30:57 +0200Amras(~Amras@unaffiliated/amras0000)
2020-09-21 13:31:06 +0200GyroW(~GyroW@ptr-48ujrfb8c7gfd2lu92q.18120a2.ip6.access.telenet.be)
2020-09-21 13:31:06 +0200GyroW(~GyroW@ptr-48ujrfb8c7gfd2lu92q.18120a2.ip6.access.telenet.be) (Changing host)
2020-09-21 13:31:06 +0200GyroW(~GyroW@unaffiliated/gyrow)
2020-09-21 13:31:06 +0200 <merijn> tomjaguarpaw: Godspeed
2020-09-21 13:31:25 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de)
2020-09-21 13:31:27 +0200 <merijn> tomjaguarpaw: Cabal's internals are...hairy :p
2020-09-21 13:31:54 +0200 <tomjaguarpaw> I've also been wondering whether it's possible to reduce Cabal's line count by 80%
2020-09-21 13:32:07 +0200 <tomjaguarpaw> I suspect it would be, at the expense of not supporting Hugs and other little-used things
2020-09-21 13:33:42 +0200hvr(~hvr@haskell/developer/hvr)
2020-09-21 13:35:08 +0200 <merijn> tomjaguarpaw: Well, not so much about not supporting Hugs as "dropping the established API/design that accommodates any compiler"
2020-09-21 13:35:34 +0200 <merijn> Sure, if we just threw our hands in the air and said "fuck it, cabal only supports GHC" a significant portion of the code could be eliminated
2020-09-21 13:35:52 +0200 <merijn> But I don't like the idea of tying crucial tooling *that* tightly to GHC
2020-09-21 13:38:37 +0200 <hekkaidekapus> tomjaguarpaw: The full quote: “Octopus… Enapus… pentekaidekapus hekkaidekapus heptakaidekapus OKTOKAIDEKAPUS enneakaidekapus eikosapus” courtesy of Helen Dewitt <http://helendewitt.com/>
2020-09-21 13:38:56 +0200 <tomjaguarpaw> merijn: Agreed, but it would be an interesting experiment to see just how small and simple one could get.
2020-09-21 13:39:13 +0200shafox(~shafox@106.51.234.111) (Remote host closed the connection)
2020-09-21 13:39:32 +0200 <tomjaguarpaw> hekkaidekapus: What's the connection to arithmetic?
2020-09-21 13:40:23 +0200shafox(~shafox@106.51.234.111)
2020-09-21 13:40:59 +0200 <hekkaidekapus> Learning new languages, for instance starting by counting in Greek, all of that to sustain some learning philosophy due to John S. Mill.
2020-09-21 13:42:33 +0200 <hekkaidekapus> H. Dewitt claims many teaching systems are broken and she goes on to teach Japanese, Greek, poker, bridge, maths… to an imaginary kid in her novel.
2020-09-21 13:44:09 +0200terrorjack(sid225236@gateway/web/irccloud.com/x-tzzxtdijayougbld) ()
2020-09-21 13:44:55 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 13:45:14 +0200 <tomjaguarpaw> Oh, The Last Samurai?
2020-09-21 13:45:20 +0200 <hekkaidekapus> Yep!
2020-09-21 13:45:22 +0200 <tomjaguarpaw> Interesting
2020-09-21 13:46:11 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 13:46:40 +0200 <hekkaidekapus> It’s a masterpiece, but let’s not go too far in the off-topic.
2020-09-21 13:47:04 +0200terrorjack(~terrorjac@static.23.111.201.195.clients.your-server.de)
2020-09-21 13:47:36 +0200 <hekkaidekapus> (Though I should add: wathc the movie —7 Samurai— before reading the novel)
2020-09-21 13:48:13 +0200 <tomjaguarpaw> Yes, I'm a big fan of Kurosawa, which is why I found the synopsis of this book interesting. I will keep it in mind, thanks!
2020-09-21 13:48:22 +0200chaosmasttter(~chaosmast@p200300c4a70213017ae400fffe8093b8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 13:48:25 +0200 <hekkaidekapus> yw
2020-09-21 13:49:14 +0200 <tomjaguarpaw> It's strange. When I first saw "hekkaidekapus" I assumed it was Japanese. When I looked more closely I saw it was Greek. Now we're back to Japanese again!
2020-09-21 13:49:27 +0200 <hekkaidekapus> lol
2020-09-21 13:49:49 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 13:49:54 +0200polyrain(~polyrain@2001:8003:e501:6901:1d0:1c96:3b88:7bde)
2020-09-21 13:50:03 +0200 <Putonlalla> We do have #haskell-offtopic, where you can just derail and go.
2020-09-21 13:50:20 +0200hekkaidekapusis already faded.
2020-09-21 13:50:25 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2020-09-21 13:51:01 +0200 <tomjaguarpaw> A brief flash of communication which may change a life ... or may not. And now back to your regularly scheduled Haskell programming.
2020-09-21 13:51:31 +0200 <nitrix> edwardk, How much have you explored ray marching signed-distance functions and do you remember much from it? I'm exploring the field and ran into a couple answers online by you and would have questions of my own.
2020-09-21 13:53:31 +0200 <Cale> nitrix: From what I recall, Ed has made some really cool demos involving them.
2020-09-21 13:54:33 +0200lemmih(~lemmih@58.182.131.25) (Ping timeout: 272 seconds)
2020-09-21 13:54:41 +0200jchia__(~jchia@58.32.37.220) (Read error: Connection reset by peer)
2020-09-21 13:54:54 +0200jchia_(~jchia@45.32.62.73)
2020-09-21 13:55:40 +0200jchia__(~jchia@45.32.62.73)
2020-09-21 13:55:55 +0200lemmih(~lemmih@58.182.131.25)
2020-09-21 13:56:36 +0200 <nitrix> Like many others, I've successfully rendered a cute little scene. I now want to make an editor to build 3d models using these SDFs primitives... the problem is that suddenly makes the scene dynamic.
2020-09-21 13:56:40 +0200iqubic`(~user@2601:602:9500:4870:ecd4:9584:1de:8f2d)
2020-09-21 13:57:40 +0200jchia__(~jchia@45.32.62.73) (Remote host closed the connection)
2020-09-21 13:58:13 +0200jchia__(~jchia@58.32.37.220)
2020-09-21 13:58:24 +0200 <nitrix> I sort of have an interpreter in the shader now, reading "instructions" to draw various primitives from a UBO (uniform buffer). The performance is pretty bad beyond a handful of SDFs.
2020-09-21 13:59:19 +0200 <nitrix> So that's one question for edward, then second one would be if I should drop the full-screen quad approach and invest time into compute shaders.
2020-09-21 13:59:25 +0200__Joker(~Joker@180.151.105.65) (Ping timeout: 240 seconds)
2020-09-21 13:59:49 +0200__Joker(~Joker@180.151.105.65)
2020-09-21 13:59:51 +0200 <nitrix> Not very Haskell-related but pretty math-y :D
2020-09-21 14:00:02 +0200Cadair1(~Cadair@185.204.1.185) ()
2020-09-21 14:01:02 +0200jchia_(~jchia@45.32.62.73) (Remote host closed the connection)
2020-09-21 14:01:12 +0200iqubic(~user@2601:602:9500:4870:958d:950f:29cc:a6c4) (Ping timeout: 260 seconds)
2020-09-21 14:01:23 +0200jchia_(~jchia@45.32.62.73)
2020-09-21 14:02:24 +0200jchia_(~jchia@45.32.62.73) (Remote host closed the connection)
2020-09-21 14:03:39 +0200urodna(~urodna@unaffiliated/urodna)
2020-09-21 14:03:42 +0200jchia_(~jchia@58.32.37.220)
2020-09-21 14:04:54 +0200acidjnk_new2(~acidjnk@p200300d0c73658819d57354728142a5b.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
2020-09-21 14:09:09 +0200 <tomjaguarpaw> nitrix: What's the best introduction to SDFs for that kind of thing?
2020-09-21 14:10:07 +0200sQVe(~sQVe@unaffiliated/sqve)
2020-09-21 14:11:03 +0200wavemode(~wavemode@097-070-075-143.res.spectrum.com)
2020-09-21 14:11:24 +0200 <nitrix> tomjaguarpaw, Probably this video/channel "The Art of Code": https://www.youtube.com/watch?v=PGtv-dBi2wE
2020-09-21 14:12:13 +0200 <nitrix> tomjaguarpaw, Otherwise, this guy Inigo Quilez (aka IQ) is one of the leading pioneer: https://iquilezles.org/www/articles/distfunctions/distfunctions.htm
2020-09-21 14:12:18 +0200knupfer(~Thunderbi@dynamic-046-114-145-147.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2020-09-21 14:12:27 +0200 <davve> ah nitrix beat me to linking inigos
2020-09-21 14:12:39 +0200 <davve> love those geometry functions
2020-09-21 14:12:40 +0200 <nitrix> tomjaguarpaw, He's the creator of ShaderToy (https://www.shadertoy.com/) which is junk full of that technique.
2020-09-21 14:14:29 +0200DavidEichmann(~david@43.240.198.146.dyn.plus.net)
2020-09-21 14:14:42 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2020-09-21 14:15:34 +0200Peter_Storm(uid288816@gateway/web/irccloud.com/x-nhjukwhxucyezwqe) (Quit: Connection closed for inactivity)
2020-09-21 14:16:28 +0200 <nitrix> tomjaguarpaw, Oh, and here's a video that can sell you on the technique for doing constructive solid geometry: https://www.youtube.com/watch?v=Cp5WWtMoeKg
2020-09-21 14:17:27 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-09-21 14:25:11 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
2020-09-21 14:25:19 +0200shad0w_(~shad0w_@160.202.36.27) (Read error: Connection reset by peer)
2020-09-21 14:26:41 +0200shad0w_(~shad0w_@160.202.36.94)
2020-09-21 14:26:43 +0200 <davve> nitrix: shaders are a nice way of using them
2020-09-21 14:26:54 +0200 <davve> and with glsl you get all the math functions you might need
2020-09-21 14:27:17 +0200 <davve> only they can be difficult to debug
2020-09-21 14:27:28 +0200 <davve> painful but fun
2020-09-21 14:28:01 +0200boxscape(577bcb23@gateway/web/cgi-irc/kiwiirc.com/ip.87.123.203.35) (Quit: Connection closed)
2020-09-21 14:28:49 +0200sQVe(~sQVe@unaffiliated/sqve) (Quit: Bye!)
2020-09-21 14:29:29 +0200darjeeling_(~darjeelin@122.245.219.58) (Ping timeout: 260 seconds)
2020-09-21 14:29:56 +0200 <dminuoso> aroundWith :: (ActionWith a -> ActionWith b) -> SpecWith a -> SpecWith b; type ActionWith a = a -> IO (); after action = aroundWith $ \e x -> e x `finally` action x
2020-09-21 14:30:02 +0200 <dminuoso> My head is spinning. How is this even type checking?
2020-09-21 14:30:32 +0200cfricke(~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9)
2020-09-21 14:30:39 +0200 <dminuoso> How can aroundWith take a 2-argument function with that type signature?
2020-09-21 14:31:05 +0200 <{abby}> ((a- > IO ()) -> b -> IO ()) -> SpecWith a -> SpecWith b
2020-09-21 14:31:13 +0200 <{abby}> modulo paren errors, if any
2020-09-21 14:31:15 +0200 <Cale> e :: ActionWith a, x :: a
2020-09-21 14:31:16 +0200sQVe(~sQVe@unaffiliated/sqve)
2020-09-21 14:31:41 +0200Stanley00(~stanley00@unaffiliated/stanley00) ()
2020-09-21 14:31:45 +0200 <dminuoso> Oh.
2020-09-21 14:32:10 +0200 <dminuoso> My head kept thinking of this type alias as a newtype for so long, after 15 minutes in disbelief it didn't click.
2020-09-21 14:32:12 +0200 <dminuoso> Thanks.
2020-09-21 14:32:14 +0200 <ski> what's `SpecWith' ?
2020-09-21 14:32:29 +0200 <dminuoso> type SpecWith a = SpecM a ()
2020-09-21 14:32:47 +0200 <Cale> (It doesn't matter for this question, it turns out)
2020-09-21 14:33:05 +0200 <ski> (yea, i know. just wondering)
2020-09-21 14:33:28 +0200 <dminuoso> This I think is a good example of why type aliases can be annoying.
2020-09-21 14:33:30 +0200sQVe(~sQVe@unaffiliated/sqve) (Client Quit)
2020-09-21 14:33:41 +0200 <Cale> Yeah, pretty much
2020-09-21 14:33:56 +0200 <Cale> It would be clearer without the synonym
2020-09-21 14:34:09 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 14:34:25 +0200p8m(p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 264 seconds)
2020-09-21 14:34:43 +0200sQVe(~sQVe@unaffiliated/sqve)
2020-09-21 14:34:55 +0200 <ski> aroundWith . flip . (runContT .) :: (b -> ContT () IO a) -> (SpecWith a -> SpecWith b) -- then
2020-09-21 14:35:03 +0200p8m(p8m@gateway/vpn/protonvpn/p8m)
2020-09-21 14:35:33 +0200Kaivo(~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9)
2020-09-21 14:36:02 +0200cybercraft(~Cybercraf@194.78.58.3)
2020-09-21 14:37:58 +0200sQVe(~sQVe@unaffiliated/sqve) (Client Quit)
2020-09-21 14:38:48 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 14:39:14 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 14:40:04 +0200iqubic`(~user@2601:602:9500:4870:ecd4:9584:1de:8f2d) ("ERC (IRC client for Emacs 28.0.50)")
2020-09-21 14:40:28 +0200hackagesignable-haskell-protoc 0.1 - Signable instances protoc compiler plugin. https://hackage.haskell.org/package/signable-haskell-protoc-0.1 (coingaming)
2020-09-21 14:41:05 +0200xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds)
2020-09-21 14:43:30 +0200argent0(~argent0@168.227.97.4)
2020-09-21 14:46:24 +0200rprije(~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) (Ping timeout: 260 seconds)
2020-09-21 14:47:27 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 14:48:11 +0200tronical(~tronical@185.244.214.216)
2020-09-21 14:50:21 +0200drbean(~drbean@TC210-63-209-62.static.apol.com.tw)
2020-09-21 14:50:38 +0200xerox_(~xerox@unaffiliated/xerox)
2020-09-21 14:51:57 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 14:52:19 +0200 <siraben> What should I do when stack fails to find a version of GHC that works?
2020-09-21 14:52:29 +0200 <siraben> Why wouldn't it have found a version that worked in the past?
2020-09-21 14:52:41 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer)
2020-09-21 14:55:00 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 14:56:28 +0200 <merijn> siraben: It doesn't look for a GHC version, the snapshot specifies the GHC version
2020-09-21 14:56:45 +0200rihards(~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards)
2020-09-21 14:57:05 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 240 seconds)
2020-09-21 14:57:09 +0200 <merijn> So if you stack setup uses lts 11.8 (or whatever, I don't use stack) that defines which GHC you get and if that one doesn't work, well, fix your project >.>
2020-09-21 14:57:13 +0200 <siraben> Running stack init in a repository like https://github.com/jozefg/pcf/ seems to fail
2020-09-21 14:57:41 +0200 <siraben> log: http://ix.io/2yhR
2020-09-21 14:58:13 +0200 <merijn> I'm assuming "stack init" just picks the latest LTS snapshot or something
2020-09-21 14:58:41 +0200 <merijn> I doubt it does anything smart
2020-09-21 14:59:13 +0200 <siraben> Is that log not showing it going through older LTS snapshots to find one that has all the deps?
2020-09-21 14:59:24 +0200 <merijn> ok, something smarter than I expected, but still doomed to fail
2020-09-21 14:59:34 +0200 <siraben> How should I fix it?
2020-09-21 14:59:38 +0200 <merijn> siraben: Eh, why would you assume a snapshot that has all the dependencies exists?
2020-09-21 14:59:54 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds)
2020-09-21 15:00:02 +0200 <siraben> merijn: presumably this project built at some moment in time
2020-09-21 15:00:07 +0200 <merijn> That seems...naively optimistic, especially given the lat change to that package predates the existence of stack
2020-09-21 15:00:32 +0200 <siraben> Ok, I see why, because it predates stack.
2020-09-21 15:00:36 +0200 <merijn> oh, wait, no, there's more recent changes
2020-09-21 15:00:47 +0200 <merijn> Still, I'd assume the author uses cabal-install
2020-09-21 15:01:09 +0200 <siraben> Well, cabal build doesn't work either.
2020-09-21 15:01:18 +0200 <siraben> After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: base, language-c, c-dsl, pcf
2020-09-21 15:01:28 +0200 <merijn> What's the rest of the error, though?
2020-09-21 15:01:47 +0200 <siraben> http://ix.io/2yhU
2020-09-21 15:02:08 +0200 <merijn> Right
2020-09-21 15:02:15 +0200 <siraben> stack wasn't around in 2015?
2020-09-21 15:02:46 +0200 <siraben> Ok, so building projects older than stack seems to be slightly more involved.
2020-09-21 15:02:47 +0200 <merijn> siraben: That error is pointing out that it (transitively) depends on language-c==0.4.*
2020-09-21 15:03:02 +0200 <merijn> siraben: Which requires (conflict: language-c
2020-09-21 15:03:03 +0200 <merijn> +/-separatesyb +/-splitbase => base<4.11)
2020-09-21 15:03:16 +0200 <merijn> So your GHC is to new
2020-09-21 15:03:38 +0200 <merijn> You could (optimistically) try "cabal build --allow-newer" which may work
2020-09-21 15:03:42 +0200 <siraben> Ok, so should I use a nix-shell with an older version of GHC then?
2020-09-21 15:04:37 +0200 <merijn> siraben: base 4.11 is GHC 8.4 it seems: https://wiki.haskell.org/Base_package
2020-09-21 15:05:53 +0200polyrain(~polyrain@2001:8003:e501:6901:1d0:1c96:3b88:7bde) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 15:06:42 +0200polyrain(~polyrain@2001:8003:e501:6901:1d0:1c96:3b88:7bde)
2020-09-21 15:06:42 +0200polyrain(~polyrain@2001:8003:e501:6901:1d0:1c96:3b88:7bde) (Client Quit)
2020-09-21 15:07:26 +0200 <siraben> merijn: Running cabal build --allow-newer now
2020-09-21 15:08:04 +0200 <cheater> what's a word for an exercise that's very repetitive, and you learn by doing a lot of it? like when you have a full page of stuff like 1x5 = __, 7x4 = __, and so on
2020-09-21 15:08:41 +0200 <siraben> cheater: rote
2020-09-21 15:08:48 +0200 <siraben> rote learning, that is
2020-09-21 15:10:13 +0200 <cheater> someone else suggested that too. rote learning is the method with which you learn from this. but what about the problem itself that's on the problem sheet?
2020-09-21 15:10:37 +0200acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2020-09-21 15:10:37 +0200darjeeling_(~darjeelin@122.245.219.58)
2020-09-21 15:10:50 +0200hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net)
2020-09-21 15:11:29 +0200 <int-e> boring, trite, routine
2020-09-21 15:12:31 +0200 <int-e> (and wrong channel)
2020-09-21 15:15:37 +0200 <siraben> merijn: with allow-never it seems to get all the dependencies, however how it's complaining about Pcf.hs which is the source file
2020-09-21 15:15:43 +0200 <siraben> newer*
2020-09-21 15:15:47 +0200bahamas(~lucian@188.24.181.166)
2020-09-21 15:15:47 +0200bahamas(~lucian@188.24.181.166) (Changing host)
2020-09-21 15:15:47 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 15:15:48 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 15:16:10 +0200 <siraben> http://ix.io/2yhY
2020-09-21 15:16:36 +0200 <siraben> Could I use nix to go back to GHC 8.4 with the packages there?
2020-09-21 15:16:46 +0200 <merijn> Probably a change in the dependencies or something
2020-09-21 15:16:55 +0200basil(~basil@host-87-26-187-41.business.telecomitalia.it)
2020-09-21 15:17:19 +0200basilGuest18536
2020-09-21 15:17:44 +0200Guest18536(~basil@host-87-26-187-41.business.telecomitalia.it) (Client Quit)
2020-09-21 15:18:58 +0200 <siraben> Hm, what's the easiest way to get it to build then?
2020-09-21 15:19:04 +0200 <siraben> These are not libraries I'm very familiar with.
2020-09-21 15:19:23 +0200 <Cheery> A question.. Lets say you had de-bruijn syntax, eg. λλ1, how would you represent let-expressions?
2020-09-21 15:19:37 +0200 <Cheery> and letrec syntax?
2020-09-21 15:20:01 +0200 <Cheery> let x = ... in, if we dropped the variable here, how would you adjust the syntax? How about the case expression?
2020-09-21 15:20:15 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 15:20:49 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds)
2020-09-21 15:21:36 +0200 <ggole> Indices require rewriting of the scope of a binding when you remove that binding
2020-09-21 15:22:12 +0200 <ggole> Wait, did you mean removing the name and using an index?
2020-09-21 15:22:56 +0200 <merijn> siraben: The package is lacking proper bounds, so the answer is "you manually have to patch the package description to have the correct bounds"
2020-09-21 15:23:06 +0200 <Cheery> yup. I mean, if it had a textual representation where you use de-bruijn indices, how would you form let-expressions?
2020-09-21 15:23:08 +0200 <edwardk> nitrix: i did. though i admit my brain is currently a bit of goo on the floor from my current project
2020-09-21 15:23:14 +0200 <merijn> siraben: "What are the correct bounds?" 'you have to figure that out the hard way'
2020-09-21 15:23:29 +0200 <siraben> Ugh, if only there was an automated tool to do that!
2020-09-21 15:23:43 +0200 <Cheery> You could use (λx) y to represent let = y in x
2020-09-21 15:23:54 +0200 <merijn> There can't be, because "it compiles" isn't sufficient to identify "correct" bounds
2020-09-21 15:24:02 +0200 <edwardk> Cale: if you thought `constraints` was fun. wait until you meet it's polykinded cousin https://github.com/ekmett/haskell/blob/master/types/src/Data/Type/Constraint.hs
2020-09-21 15:24:06 +0200 <ggole> Just let term in body seems ok
2020-09-21 15:25:07 +0200 <cheater> tomsmeding: so i was wondering, does cmd.exe accept the EXACT same terminal escape codes as VT100 (just possibly less of them)? what if for windows, I told Vty to not query terminfo, but instead give it a specific finite amount of supported escape codes instead?
2020-09-21 15:25:22 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 15:25:25 +0200 <cheater> tomsmeding: basically making it not use terminfo, but instead hard coded stuff
2020-09-21 15:27:04 +0200 <edwardk> Cheery: i tend to bolt lets in as an extra form in most of my type checkers. why? mainly because inference can be a bit better and you can make an ever so slightly faster evaluator that just recurses in with the arg in hand in debruijn terms you just wind up with let expression body where the body is counted as having one more expression bound in it, 'let expression' counts like a lambda in terms of var count.
2020-09-21 15:28:06 +0200cybercraft(~Cybercraf@194.78.58.3) ("WeeChat 2.9")
2020-09-21 15:28:50 +0200 <edwardk> this whole 'plumbing around every part of every expression' feels very grothendieck construction-like to me.
2020-09-21 15:29:13 +0200 <edwardk> it is weird treating "Left" as a functor. and '(:) as a bifunctor
2020-09-21 15:30:39 +0200shatriff(~vitaliish@176.52.219.10)
2020-09-21 15:30:56 +0200 <siraben> edwardk: error raised at compile time by the bound library; Exception when trying to run compile-time code: This is bad: AppT (ConT Language.Pcf.Clos) (VarT a_6989586621679111736) False, what could be causing it?
2020-09-21 15:31:44 +0200 <edwardk> wat?
2020-09-21 15:32:20 +0200 <siraben> edwardk: why doesn't this work? http://ix.io/2yi5
2020-09-21 15:32:28 +0200 <siraben> you're the author of bound right?
2020-09-21 15:32:54 +0200 <siraben> makeBound ''ExpC seems to be the culprit
2020-09-21 15:32:57 +0200hackagesignable 0.1 - Deterministic serialisation and signatures with proto-lens support https://hackage.haskell.org/package/signable-0.1 (coingaming)
2020-09-21 15:33:16 +0200 <merijn> siraben: The problem is that --allow-newer probably picks bound 2.x
2020-09-21 15:33:37 +0200 <merijn> siraben: And pcf uses bound 1.x
2020-09-21 15:33:41 +0200 <siraben> merijn: I've decided to remove the bounds completely and update the project to the newest libraries
2020-09-21 15:33:55 +0200 <siraben> So I've commented everything out and starting from top dow
2020-09-21 15:33:55 +0200 <siraben> down
2020-09-21 15:33:59 +0200 <edwardk> can you try expanding the type synonym for Clos in it?
2020-09-21 15:34:02 +0200 <merijn> siraben: Then I'd recommend consulting the changelog of dependencies and read what changed? :)
2020-09-21 15:34:04 +0200argent0(~argent0@168.227.97.4) (Remote host closed the connection)
2020-09-21 15:34:09 +0200 <edwardk> it probably isn't seeing through that
2020-09-21 15:34:15 +0200 <siraben> merijn: Ok
2020-09-21 15:34:29 +0200 <siraben> edwardk: Ah, now it works
2020-09-21 15:34:38 +0200 <siraben> Interesting, didn't know type synonym expansion matters
2020-09-21 15:34:50 +0200 <edwardk> well, we have to walk through that syntax tree manually in TH
2020-09-21 15:34:52 +0200Kaivo(~Kaivo@104-200-86-99.mc.derytele.com)
2020-09-21 15:35:03 +0200 <edwardk> and i guess we never had anybody try to hide expressions from us behind type synonyms before
2020-09-21 15:35:21 +0200 <edwardk> otherwise we have to figure out how to look them up instantiate them and keep walking somehow
2020-09-21 15:35:30 +0200 <edwardk> sounds like lots fo templatehaskell
2020-09-21 15:36:13 +0200 <siraben> edwardk: is there a problem with mutually recursive data?
2020-09-21 15:36:30 +0200 <siraben> I have, data A = .<B>., data B = ...<A> ... and makebound ''A; makeBound ''B
2020-09-21 15:36:32 +0200 <siraben> Seems to fail as well
2020-09-21 15:36:40 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 15:36:50 +0200 <edwardk> there is a 'trick' to working with bound
2020-09-21 15:37:06 +0200 <edwardk> you make one monad, and a bunch of left-modules over monads that carefully don't mention it
2020-09-21 15:37:09 +0200 <edwardk> then get parameterized on it
2020-09-21 15:37:41 +0200 <siraben> Left module over a monad is left distributivity over bind, right?
2020-09-21 15:37:43 +0200 <edwardk> https://github.com/ekmett/bound/blob/master/examples/Deriving.hs
2020-09-21 15:38:21 +0200 <edwardk> shows an example with patterns
2020-09-21 15:38:26 +0200 <edwardk> the patterns are in a separate data type
2020-09-21 15:38:35 +0200 <siraben> Ah, I'll take a look, thanks.
2020-09-21 15:38:37 +0200 <edwardk> that data type has an instance of the Bound class
2020-09-21 15:38:54 +0200 <edwardk> but note Pat carries the 'f' as a parameter and later we just instantiate that to Exp
2020-09-21 15:38:54 +0200 <hekkaidekapus> siraben: (In the shell) `printf '%s\n%s' 'packages: .' 'allow-newer: *:all' > cabal.project` in the pcf directory. Then build. You will have to make local patches to fix <https://paste.tomsmeding.com/84uGbbWh>.
2020-09-21 15:38:59 +0200 <edwardk> Pat isn't itself a monad
2020-09-21 15:39:03 +0200 <edwardk> it is just an instance of Bound
2020-09-21 15:39:43 +0200 <edwardk> Some times you dont' want to do this, so i then recommend writing the instances by hand, and making your own class for the (>>>=) equivalent operation, which is that left-module thing
2020-09-21 15:40:35 +0200drbean(~drbean@TC210-63-209-62.static.apol.com.tw) (Ping timeout: 258 seconds)
2020-09-21 15:40:52 +0200IT92(511495c6@198-149-20-81.sta.estpak.ee)
2020-09-21 15:41:14 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 15:41:30 +0200 <edwardk> siraben: https://github.com/ekmett/bound/tree/master/examples has a few examples, the overkill one shows what happens if you go all the way down the manual rabbit hole
2020-09-21 15:41:34 +0200 <siraben> I see
2020-09-21 15:41:40 +0200 <edwardk> deriving is closer to where you are now
2020-09-21 15:42:09 +0200Sheilong(uid293653@gateway/web/irccloud.com/x-nsrjqtazcudlgiur)
2020-09-21 15:42:48 +0200 <IT92> Hi guys! I'm qurious how do I declare binary dependencies for my haskell package? Here is example, my library needs secp256k1 library, but Hackage CI machine obviously don't have it https://hackage.haskell.org/package/signable-0.1/reports/1
2020-09-21 15:42:57 +0200 <siraben> At least writing that somewhat boilerplatey monad instance is better than having to deal with manual substitution, heh.
2020-09-21 15:43:28 +0200 <merijn> IT92: Short answer: You don't
2020-09-21 15:43:42 +0200 <merijn> IT92: Are you using cabal-install?
2020-09-21 15:43:56 +0200 <IT92> merijn I'm using stack and nix
2020-09-21 15:44:30 +0200 <merijn> You can build/upload docs locally to get working docs in the absence of succesful hackage build, but not sure how to do that with stack
2020-09-21 15:44:56 +0200 <merijn> "cabal haddock --haddock-for-hackage" works, I assume stack has something similar
2020-09-21 15:45:09 +0200 <IT92> merijn thanks!
2020-09-21 15:45:30 +0200ixlun(~matthew@213.205.241.81) (Ping timeout: 256 seconds)
2020-09-21 15:46:40 +0200 <hekkaidekapus> siraben: hmm… Scrolling down, I see you already got the errors in <http://ix.io/2yhY>. Cheers.
2020-09-21 15:47:29 +0200 <siraben> Alright, so the only part that seems to have problems is the one that uses the c-dsl package, hm.
2020-09-21 15:47:54 +0200 <siraben> c-dsl has dependenices base (==4.), language-c (==0.4.)
2020-09-21 15:49:33 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:7928:db17:6f00:cd09)
2020-09-21 15:49:49 +0200spew(uid195861@gateway/web/irccloud.com/x-ttozjtuhdixrdemb)
2020-09-21 15:51:18 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 15:51:40 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 15:52:16 +0200mmohammadi9812(~mmohammad@2.178.188.114)
2020-09-21 15:53:47 +0200alp(~alp@88.126.45.36) (Ping timeout: 240 seconds)
2020-09-21 15:55:09 +0200cpressey(~cpressey@79-65-248-204.host.pobb.as13285.net)
2020-09-21 15:55:13 +0200Lycurgus(~niemand@98.4.96.130)
2020-09-21 15:56:04 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 246 seconds)
2020-09-21 15:56:15 +0200takuan_dozo(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2020-09-21 15:56:16 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 272 seconds)
2020-09-21 15:56:27 +0200 <siraben> Heh, relaxing that restriction on base seems to do the job.
2020-09-21 15:57:20 +0200ryansmccoy(~ryansmcco@193.37.254.27) (Ping timeout: 256 seconds)
2020-09-21 15:57:25 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 15:58:08 +0200ryansmccoy(~ryansmcco@156.96.151.132)
2020-09-21 15:58:42 +0200 <siraben> merijn: is there a way to put --allow-newer in the cabal file?
2020-09-21 16:00:19 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 16:01:47 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 16:02:00 +0200jlamothe(~jlamothe@dev.jlamothe.net) (Quit: leaving)
2020-09-21 16:02:51 +0200alp(~alp@2a01:e0a:58b:4920:e1db:5e81:371d:6a3c)
2020-09-21 16:03:40 +0200 <siraben> cabal is complaining about multiple main libraries http://ix.io/2yil
2020-09-21 16:04:13 +0200 <siraben> Oh if I write library c-dsl instead of library, it works.
2020-09-21 16:04:14 +0200son0p(~son0p@181.136.122.143)
2020-09-21 16:04:32 +0200irc_user(uid423822@gateway/web/irccloud.com/x-orjppconqhqlsued)
2020-09-21 16:05:12 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:7928:db17:6f00:cd09) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 16:05:49 +0200 <siraben> I wonder if I could do a dependency override in cabal like in nix
2020-09-21 16:08:26 +0200jlamothe(~jlamothe@dev.jlamothe.net)
2020-09-21 16:09:22 +0200son0p(~son0p@181.136.122.143) (Ping timeout: 246 seconds)
2020-09-21 16:10:24 +0200IT92(511495c6@198-149-20-81.sta.estpak.ee) (Remote host closed the connection)
2020-09-21 16:10:34 +0200son0p(~son0p@181.136.122.143)
2020-09-21 16:11:19 +0200oxide(~lambda@unaffiliated/mclaren)
2020-09-21 16:13:31 +0200 <edwardk> siraben: that is what cabal.project files are for
2020-09-21 16:13:56 +0200 <edwardk> siraben: https://github.com/ekmett/codex/blob/master/cabal.project#L57
2020-09-21 16:13:59 +0200 <edwardk> is an example
2020-09-21 16:14:24 +0200SanchayanM(~Sanchayan@106.201.114.230) (Quit: leaving)
2020-09-21 16:14:29 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2020-09-21 16:14:57 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com)
2020-09-21 16:15:02 +0200 <siraben> edwardk: Oh, do I have to use another tool or does it work with cabal?
2020-09-21 16:15:10 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-09-21 16:15:14 +0200 <edwardk> cabal.project is part of cabak
2020-09-21 16:15:16 +0200 <edwardk> er cabal
2020-09-21 16:15:26 +0200 <siraben> Ok, I'll try that
2020-09-21 16:16:02 +0200 <edwardk> you put one at the top of your project dir, it can tell cabal where to go find libraries when they are branches in git repos, tell it to override version bounds in various ways, specify flags, etc.
2020-09-21 16:16:39 +0200 <edwardk> you can share one across multiple libraries when working on a multi-library project, etc.
2020-09-21 16:17:03 +0200xff0x(~fox@2001:1a81:53e9:6d00:158c:d17f:d83e:dc7f) (Ping timeout: 272 seconds)
2020-09-21 16:17:28 +0200 <siraben> edwardk: I already have pcf.cabal, so I add cabal.project as well?
2020-09-21 16:17:34 +0200 <edwardk> yes
2020-09-21 16:17:48 +0200 <edwardk> cabal.project is used to locate cabal files and specify things like overrides
2020-09-21 16:18:16 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 16:18:42 +0200mjuad(greg@2600:3c00::f03c:91ff:fec3:b10f) (Quit: WeeChat 1.6)
2020-09-21 16:18:55 +0200 <edwardk> that is the only actual required line
2020-09-21 16:19:14 +0200jlamothe(~jlamothe@dev.jlamothe.net) (Remote host closed the connection)
2020-09-21 16:19:30 +0200 <edwardk> after that you can skim through that file i linked, and at the bottom there are some examples of specifying local project bounds on things, or allowing newer versions of different libraries for either specific targets or all
2020-09-21 16:19:43 +0200 <edwardk> the cabal docs have a bunch to say on cabal.project files
2020-09-21 16:20:31 +0200 <siraben> Ah, I see
2020-09-21 16:20:32 +0200IT78(511495c6@198-149-20-81.sta.estpak.ee)
2020-09-21 16:20:34 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:dceb:16d3:9c64:27d9)
2020-09-21 16:21:04 +0200 <merijn> .cabal files specify packages, cabal.project files specify "build setups"
2020-09-21 16:21:28 +0200 <merijn> One is for distributing packages, the other helps specify setups when developing packages
2020-09-21 16:22:23 +0200 <IT78> Hi guys! Can cabal package use dependencies from github like stack do? I just need a bit different version of package, but don't want to push changes and propose pull request to contributor of the package
2020-09-21 16:22:35 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-09-21 16:23:10 +0200 <siraben> edwardk: great, it works, thanks!
2020-09-21 16:23:38 +0200 <merijn> IT78: Depending on circumstances "not really" or "sorta"
2020-09-21 16:24:16 +0200 <merijn> IT78: You can use cabal.project files to point to a git repo to fetch a dependency from, which is useful for "in-flight" patches/changes
2020-09-21 16:24:30 +0200 <merijn> But it's probably a bad idea for long-term
2020-09-21 16:24:42 +0200 <IT78> merijn why?
2020-09-21 16:24:53 +0200 <tomsmeding> cheater: I believe that cmd.exe attempts to act like an xterm, which is kind of the modern (but ugly, according to some?) de-facto derivative/extension of vt100
2020-09-21 16:25:01 +0200 <merijn> Well, for one, such a package can't be (usefully) distributed via Hackage
2020-09-21 16:25:13 +0200 <cheater> tomsmeding: i thought it was trying to act like vt100
2020-09-21 16:25:16 +0200 <tomsmeding> so yes, if you manage to make vty not query terminfo and just blindly assume it runs in an xterm, then yes
2020-09-21 16:25:16 +0200 <merijn> Also, git repos tend to be more volatile in terms of lifecycle
2020-09-21 16:25:20 +0200 <cheater> tomsmeding: what do you think of my plan?
2020-09-21 16:25:21 +0200 <cheater> ok
2020-09-21 16:25:21 +0200cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-09-21 16:25:41 +0200 <cheater> have you ever looked inside vty? to see if/how it figures out what escape sequences to use when?
2020-09-21 16:25:44 +0200 <tomsmeding> cheater: https://github.com/microsoft/terminal/issues/6045#issuecomment-631743728
2020-09-21 16:26:15 +0200mastarija(~mastarija@93-142-74-181.adsl.net.t-com.hr)
2020-09-21 16:26:27 +0200 <IT78> merijn so how usually such issues are solved with cabal? Just create new hackage repo with new code which you can change?
2020-09-21 16:26:42 +0200 <merijn> IT78: Depends what you're working on
2020-09-21 16:26:57 +0200 <merijn> IT78: Like, if you don't ever plan to put it on hackage then the problem is moot
2020-09-21 16:27:05 +0200 <mastarija> Is it possible to read from Control.Concurrent.Chan without blocking. Or rather, is it possible to return Nothing in case there is no value in the Chan at the moment?
2020-09-21 16:27:22 +0200DataComputist(~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...)
2020-09-21 16:27:31 +0200 <tomsmeding> cheater: as for looking inside vty, well, I just did earlier today in response to your question, and found https://hackage.haskell.org/package/vty-5.30/docs/src/Graphics.Vty.Output.html#outputForConfig which, directly or indirectly, calls https://hackage.haskell.org/package/vty-5.30/docs/src/Graphics.Vty.Output.TerminfoBased.html#reser…
2020-09-21 16:27:47 +0200 <dminuoso> IT78: You could also run a local package repository (does not have to be hackage). cabal is able to use multiple repositories
2020-09-21 16:27:52 +0200 <dminuoso> Look at skete
2020-09-21 16:27:58 +0200 <merijn> mastarija: I was gonna say yes, but apparently not
2020-09-21 16:28:03 +0200 <mastarija> From what I understand, if I attempt to read from Chan when there's nothing in it, that operation will block until a new value arrives
2020-09-21 16:28:30 +0200 <merijn> mastarija: However, I've got a package that's basically a more featureful implementation of Chan which does support that ;)
2020-09-21 16:28:33 +0200 <merijn> mastarija: https://hackage.haskell.org/package/broadcast-chan
2020-09-21 16:28:34 +0200 <IT78> dminuoso thanks!
2020-09-21 16:28:36 +0200xff0x(~fox@2001:1a81:53e9:6d00:158c:d17f:d83e:dc7f)
2020-09-21 16:28:44 +0200jlamothe(~jlamothe@dev.jlamothe.net)
2020-09-21 16:28:47 +0200 <tomsmeding> cheater: Terminfo, there, is System.Console.TermInfo from https://hackage.haskell.org/package/terminfo , which does foreign calls to a C library; I didn't look further, but I assume that's going to fail on windows
2020-09-21 16:28:53 +0200acidjnk_new2(~acidjnk@p200300d0c73658819d57354728142a5b.dip0.t-ipconnect.de)
2020-09-21 16:28:55 +0200tolt(kevin@2600:3c03::f03c:91ff:fe79:6b76) (Quit: tolt)
2020-09-21 16:29:38 +0200IT78(511495c6@198-149-20-81.sta.estpak.ee) (Remote host closed the connection)
2020-09-21 16:29:46 +0200 <tomsmeding> mastarija: any reason you're not able to use a TChan from Control.Concurrent.STM ? That does support polling
2020-09-21 16:29:52 +0200 <merijn> Wait, no
2020-09-21 16:29:54 +0200 <merijn> I lied
2020-09-21 16:29:58 +0200 <merijn> I should add that!
2020-09-21 16:30:03 +0200 <tomsmeding> :D
2020-09-21 16:30:07 +0200 <merijn> The Maybe is for when it's closed >.>
2020-09-21 16:30:21 +0200 <mastarija> tomsmeding, well, I kind of used Chan and am to lazy to switch now
2020-09-21 16:30:24 +0200machinedgod(~machinedg@45.78.189.122)
2020-09-21 16:30:31 +0200 <mastarija> :D
2020-09-21 16:30:32 +0200 <tomsmeding> that's a reason :p
2020-09-21 16:30:56 +0200 <tomsmeding> mastarija: also, I haven't tried it, but perhaps https://hackage.haskell.org/package/base-4.14.0.0/docs/System-Timeout.html#v:timeout works
2020-09-21 16:31:08 +0200utopic_int0x80(~lucid_0x8@188.253.235.98)
2020-09-21 16:31:19 +0200eric_(~eric@2804:431:c7d4:402a:842:24e2:eb65:718)
2020-09-21 16:31:19 +0200 <mastarija> tomsmeding, that was going to be my next question :D
2020-09-21 16:31:38 +0200ddellacosta(~dd@86.106.121.168)
2020-09-21 16:31:41 +0200Lycurgus(~niemand@98.4.96.130) (Quit: Exeunt)
2020-09-21 16:31:57 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Quit: Leaving)
2020-09-21 16:32:17 +0200 <tomsmeding> even if it works, it's dangerous, though, because you might get Nothing then even if there is data on the Chan
2020-09-21 16:32:31 +0200 <mastarija> tomsmeding, although I could use MVar or something like that and a separate thread to push changes form Chan into it
2020-09-21 16:32:43 +0200 <mastarija> and then read values from that MVar
2020-09-21 16:32:43 +0200 <tomsmeding> in case the read just takes abnormally long (which I guess can happen) and that happens to be longer than the (short) timeout you specified
2020-09-21 16:33:07 +0200Sgeo(~Sgeo@ool-18b982ad.dyn.optonline.net)
2020-09-21 16:33:18 +0200 <Eduard_Munteanu> mastarija, or TMVar
2020-09-21 16:33:27 +0200 <mastarija> tomsmeding, do you think my TMVar approach could work?
2020-09-21 16:33:46 +0200 <mastarija> Eduard_Munteanu, I kind of need speed in this case
2020-09-21 16:33:46 +0200 <tomsmeding> what even is a TMVar
2020-09-21 16:33:52 +0200 <Eduard_Munteanu> mastarija, the nice thing about STM primitives is you can do something like select()
2020-09-21 16:33:56 +0200 <merijn> tomsmeding: STM version of MVar
2020-09-21 16:34:10 +0200 <tomsmeding> isn't that TVar?
2020-09-21 16:34:12 +0200 <merijn> mastarija: What's the actual problem, though?
2020-09-21 16:34:13 +0200 <merijn> tomsmeding: No
2020-09-21 16:34:18 +0200 <merijn> tomsmeding: TVar can't be empty
2020-09-21 16:34:21 +0200 <tomsmeding> ah
2020-09-21 16:34:24 +0200 <mastarija> merijn, game loop for multiplayer game
2020-09-21 16:34:34 +0200 <mastarija> and I need to receive data form the server
2020-09-21 16:34:42 +0200 <merijn> mastarija: Eh, more detailed then that :p Why do you need to poll for data?
2020-09-21 16:34:43 +0200 <mastarija> so I can't have my loop block
2020-09-21 16:35:08 +0200 <merijn> You can do something super dumb
2020-09-21 16:35:22 +0200 <merijn> Like, use and MVar and have one thread "read from Chan, write to MVar"
2020-09-21 16:35:33 +0200 <merijn> and then your main loop can do "tryTakeMVar"
2020-09-21 16:35:38 +0200 <mastarija> merijn, that's what I suggested earlier
2020-09-21 16:35:43 +0200 <mastarija> I think I'll go with that :D
2020-09-21 16:35:44 +0200 <tomsmeding> that could work :p
2020-09-21 16:35:53 +0200John20(~John@82.46.59.122)
2020-09-21 16:35:55 +0200 <tomsmeding> it won't even be that slow perhaps
2020-09-21 16:35:56 +0200 <merijn> It probably wouldn't even be that inefficient, tbh
2020-09-21 16:36:01 +0200 <tomsmeding> lol
2020-09-21 16:36:18 +0200 <merijn> sleeping on Chan/MVar is pretty cheap
2020-09-21 16:36:24 +0200 <mastarija> Ok, thanks for the brainstorm peeps!
2020-09-21 16:36:29 +0200 <Eduard_Munteanu> One other reason to refactor is to use a bounded channel instead of Chan to avoid leaks.
2020-09-21 16:36:50 +0200 <mastarija> Meh, I'll accept spaceleaks for now XD
2020-09-21 16:36:51 +0200 <John20> Hi all, Does anyone have any examples of LanguageExtensions that have made it into the haskell language 'proper'?
2020-09-21 16:37:16 +0200 <mastarija> Eduard_Munteanu, But yes, I will have to fix that eventually
2020-09-21 16:37:31 +0200 <merijn> John20: PatternGuards extension was added to the report in Haskell2010
2020-09-21 16:37:43 +0200 <merijn> as was EmptyDataDecls?
2020-09-21 16:38:11 +0200 <Eduard_Munteanu> John20, https://www.haskell.org/onlinereport/haskell2010/haskellli2.html#x3-5000
2020-09-21 16:38:24 +0200Kaiepi(~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net)
2020-09-21 16:39:02 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 16:39:14 +0200 <Eduard_Munteanu> I'd count a few more as de facto into the language, such as FlexibleInstances, MPTCs...
2020-09-21 16:40:00 +0200ph88^(~ph88@2a02:8109:9e40:2704:3dae:c0b9:eddf:4cf0)
2020-09-21 16:40:59 +0200 <Eduard_Munteanu> It's hard to imagine Haskell without some of those even if not in the report.
2020-09-21 16:42:05 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 16:42:25 +0200 <John20> Thanks, that's really useful. I'm writing a blog post about some of the things that are surprising about Haskell for someone coming from a more mainstream language (Java in my case).
2020-09-21 16:43:28 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-09-21 16:44:06 +0200 <merijn> John20: The main problem is that "properly specifying" these extensions is tricky and that's what any new Haskell Report would have to do to include them. Which is why the past 2 (3?) attempts to produce a new report have stranded
2020-09-21 16:44:17 +0200ph88(~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) (Ping timeout: 272 seconds)
2020-09-21 16:44:27 +0200hackageflink-statefulfun 0.1.0.0 - Flink stateful functions SDK https://hackage.haskell.org/package/flink-statefulfun-0.1.0.0 (tdbgamer)
2020-09-21 16:44:32 +0200 <cpressey> Hi. I have a list of Word8 and I'd like to render it as hexdigit pairs (e.g. "03 a9 1e" etc). I have written a function to do this, but it uses Text.Printf, which produces a String, but the consumer of my function now expects a Data.Text.Text. I could just DT.pack the string, but... any suggestions for something more elegant?
2020-09-21 16:44:38 +0200 <merijn> Everyone wants to include "the most common/important stuff into the report", but actually specifying them is hard and people give up
2020-09-21 16:45:06 +0200 <merijn> cpressey: fyi, the Numeric module has functions for doing that too
2020-09-21 16:45:15 +0200 <John20> Language Extensions certainly fit that bill. to my mind, they feel like an incubator for new language features however, they rarely seem to actually make it into the core language. Does anyone know why that is? Is my understanding roughly correct?
2020-09-21 16:45:19 +0200 <merijn> And those are less...questionable then printf :p
2020-09-21 16:45:31 +0200 <merijn> John20: See my above 2 comments ;)
2020-09-21 16:45:48 +0200 <merijn> > showHex 152 ""
2020-09-21 16:45:51 +0200 <lambdabot> "98"
2020-09-21 16:46:00 +0200 <merijn> > showHex 252 ""
2020-09-21 16:46:04 +0200 <lambdabot> "fc"
2020-09-21 16:46:07 +0200 <John20> thanks merijn. Missed them while typing out my response!
2020-09-21 16:46:45 +0200 <merijn> cpressey: So I'd probably go with '\n -> DT.pack . showHex n ""' or something
2020-09-21 16:46:52 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 256 seconds)
2020-09-21 16:47:01 +0200sleblanc(~sleblanc@unaffiliated/sebleblanc) (Ping timeout: 264 seconds)
2020-09-21 16:47:16 +0200 <merijn> cpressey: Alternatively, you can go via text's Builder: https://hackage.haskell.org/package/text-1.2.4.0/docs/Data-Text-Lazy-Builder-Int.html#v:hexadecimal
2020-09-21 16:47:49 +0200 <merijn> John20: The other factor is that, since GHC is really the only widely used compiler, there's less incentive to go through the hardwork to produce a new report
2020-09-21 16:48:06 +0200 <merijn> John20: There's like 2.5 actively maintained Haskell2010 compilers
2020-09-21 16:48:15 +0200 <merijn> And GHC has 99% market share
2020-09-21 16:48:37 +0200 <merijn> If there was a competitor to GHC there'd be more motivation to produce a new report to standardise the various compilers
2020-09-21 16:48:43 +0200Sanchayan(~Sanchayan@106.201.114.230)
2020-09-21 16:49:12 +0200 <glguy> cheater: what changed on windows recently that makes you ask? I haven't heard any vty/Windows news myself.
2020-09-21 16:49:16 +0200 <mmaruseacph2> what's the timeframe?
2020-09-21 16:49:22 +0200 <mmaruseacph2> bad window, sorry
2020-09-21 16:49:30 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net)
2020-09-21 16:49:33 +0200 <tdammers> problem with coming up with a competitor is the economics of it
2020-09-21 16:49:55 +0200 <tdammers> in order to compete, the other compiler would have to be able to do most of what GHC can do, and keep up with GHC, and then deliver some additional benefits
2020-09-21 16:50:13 +0200 <tdammers> but at this point, with GHC being a thing and open-source, it is cheaper and more efficient for most people to just contribute to GHC instead
2020-09-21 16:50:19 +0200 <merijn> tomsmeding: I hope csaba's work and massively overambitious plan to separate out the Core backend would allow alternate Haskell implementation that compile to Core and share code gen with GHC
2020-09-21 16:50:26 +0200 <merijn> eh
2020-09-21 16:50:33 +0200 <merijn> s/tomsmeding/tdammers
2020-09-21 16:50:33 +0200 <tdammers> maybe what we need to do is make the GHC proposals procedure more difficult and cumbersome
2020-09-21 16:50:54 +0200 <tdammers> hmm, that does sound like a good plan
2020-09-21 16:51:18 +0200 <tdammers> massively ambitious indeed, and also subject to problems with Core itself not being properly version-managed
2020-09-21 16:51:21 +0200 <dolio> There were multiple compilers for many years without new reports, though.
2020-09-21 16:51:24 +0200 <cpressey> merijn: Thanks. I think I picked printf over showHex originally to get leading 0's. I guess my deeper question is, is there actually much gain performance-wise in switching from Strings to DT.Texts, if I need to call DT.pack in lots of places? Is it still justifiable to use DT.Text over String in the name of simply "being modern"?
2020-09-21 16:51:26 +0200 <merijn> tdammers: https://www.patreon.com/posts/introducing-ghc-38173710
2020-09-21 16:51:45 +0200 <merijn> cpressey: "it depends"
2020-09-21 16:51:57 +0200 <merijn> cpressey: Like, what are you outputting and when and how much
2020-09-21 16:52:09 +0200 <cpressey> I guess another way to say it is, do people laugh derisively when they see String in your code these day? :)
2020-09-21 16:52:16 +0200 <merijn> cpressey: If you're just visualising a few 100 Word8 for users it probably doesn't matter much
2020-09-21 16:52:17 +0200 <dolio> And the one new report didn't really incorporate much.
2020-09-21 16:52:48 +0200 <merijn> cpressey: plenty of stuff is still String based, depends what you use it for
2020-09-21 16:52:59 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:dceb:16d3:9c64:27d9) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 16:54:46 +0200 <oats> for anyone who knows java/oopystuffs, is an AbstractVisitor just a shittier Traverse?
2020-09-21 16:54:52 +0200 <cpressey> merijn: Makes sense, thanks. This is definitely not very performance-sensitive, I'm more wondering about norms and "nice" ways to write it. I'll probably just leave it as is.
2020-09-21 16:55:42 +0200 <merijn> cpressey: You could write a small wrapper that goes straight to Text which can be convenient when you need to combine with lots of other Text
2020-09-21 16:56:46 +0200stef204(~stef204@unaffiliated/stef-204/x-384198)
2020-09-21 16:57:14 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:c87d:6f52:4c16:4130)
2020-09-21 16:58:02 +0200 <dolio> oats: I think a visitor is the function you pass to e.g. traverse.
2020-09-21 16:59:08 +0200 <dolio> `T -> ()` basically.
2020-09-21 16:59:22 +0200 <oats> right, thanks
2020-09-21 16:59:26 +0200 <dolio> Or `T -> M ()`, since the former is useless.
2020-09-21 16:59:47 +0200 <oats> trying to read some java that's making me want to never venture near java ever again
2020-09-21 16:59:53 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 17:00:01 +0200tronical(~tronical@185.244.214.216) ()
2020-09-21 17:00:07 +0200 <dolio> There are multiple patterns that could just be functions, I think.
2020-09-21 17:01:24 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 17:02:29 +0200dale(dale@unaffiliated/dale) (Remote host closed the connection)
2020-09-21 17:03:17 +0200dale(dale@unaffiliated/dale)
2020-09-21 17:04:12 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 17:04:30 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 17:04:57 +0200borne(~fritjof@200116b864f88900f00953f5fedbeb5e.dip.versatel-1u1.de) (Ping timeout: 260 seconds)
2020-09-21 17:05:31 +0200perrier-jouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2020-09-21 17:05:43 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 17:06:41 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 17:08:46 +0200 <siraben> Which version of GHC will have -XLinearTypes ?
2020-09-21 17:09:12 +0200josh_(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 17:09:48 +0200zebrag(~inkbottle@aaubervilliers-654-1-112-47.w86-198.abo.wanadoo.fr) (Remote host closed the connection)
2020-09-21 17:10:10 +0200zebrag(~inkbottle@aaubervilliers-654-1-112-47.w86-198.abo.wanadoo.fr)
2020-09-21 17:10:26 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2020-09-21 17:11:03 +0200 <phadej> 9.0 will have an experimental support
2020-09-21 17:12:14 +0200__Joker_(~Joker@180.151.104.210)
2020-09-21 17:13:39 +0200josh_(~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 17:13:58 +0200 <siraben> When will that be released? This month?
2020-09-21 17:14:23 +0200 <phadej> no-one knows
2020-09-21 17:14:37 +0200 <dolio> When was the last one?
2020-09-21 17:14:57 +0200 <phadej> I mean, there weren't any updates on its release schedule
2020-09-21 17:15:06 +0200 <dolio> I guess it's been 6 months.
2020-09-21 17:15:16 +0200 <phadej> (it was supposed to be released this month, but it doesn't seem likely)
2020-09-21 17:15:17 +0200emmanuel_erc(~user@2604:2000:1382:ce03:71a7:7eea:bdbf:f3a4)
2020-09-21 17:15:43 +0200__Joker(~Joker@180.151.105.65) (Ping timeout: 260 seconds)
2020-09-21 17:16:17 +0200 <dolio> I guess with the major stuff, a delay isn't super surprising.
2020-09-21 17:16:22 +0200 <phadej> https://gitlab.haskell.org/ghc/ghc/-/wikis/status/ghc-9.0.1
2020-09-21 17:17:35 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2020-09-21 17:17:45 +0200Seyaryuki(~Seyaryuki@185.204.1.185)
2020-09-21 17:18:49 +0200 <phadej> looks like we should have beta release in three days!
2020-09-21 17:18:59 +0200 <siraben> so linear types will be good for safe mutable in-place updates? and allow us to make safe API abstractions?
2020-09-21 17:19:23 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 17:20:18 +0200 <siraben> Well, the first part is what Wadler claims in his 1990 paper, Linear Types can Change the World!
2020-09-21 17:20:40 +0200hhefesto(~user@2806:103e:27:514e:97f8:577a:384e:d8df)
2020-09-21 17:20:41 +0200 <phadej> maybe
2020-09-21 17:21:13 +0200 <phadej> ST s allows to do safe mutable in-place updates too
2020-09-21 17:21:23 +0200Sanchayan(~Sanchayan@106.201.114.230) (Quit: leaving)
2020-09-21 17:22:43 +0200 <phadej> I suggest to think about LinearHaskell as an academic experiment (of they would fit into Haskell).
2020-09-21 17:22:56 +0200 <phadej> at least for a year or two.
2020-09-21 17:23:03 +0200 <merijn> Or 5 :p
2020-09-21 17:23:06 +0200 <merijn> Or forever :p
2020-09-21 17:23:26 +0200 <merijn> siraben: We can already do safe mutable in-place updates with a pure API
2020-09-21 17:23:32 +0200 <merijn> siraben: It's called ST :)
2020-09-21 17:23:47 +0200 <phadej> phadej ST s allows to do safe mutable in-place updates too -- few lines above.
2020-09-21 17:23:57 +0200 <siraben> merijn: yes, but without needing to use a monad
2020-09-21 17:24:18 +0200 <merijn> siraben: Using linear functions is going to be *hella* more invasive on your code then ST will
2020-09-21 17:24:37 +0200 <merijn> siraben: Like "rewrite/update many dependencies" intensive
2020-09-21 17:24:37 +0200 <siraben> merijn: Right, because now everything has to preserve the linearity
2020-09-21 17:24:44 +0200 <phadej> time will show.
2020-09-21 17:24:55 +0200 <siraben> Perhaps with linear-base it won't be that bad, perhaps?
2020-09-21 17:24:56 +0200 <merijn> Whereas you can stick ST pretty much anywhere without much effort
2020-09-21 17:24:57 +0200bloodstalker(~bloodstal@46.166.187.154)
2020-09-21 17:25:08 +0200 <phadej> linear update "eats" the old value.
2020-09-21 17:25:17 +0200 <phadej> so you will end up writing something like ssa
2020-09-21 17:25:39 +0200 <siraben> merijn: why doesn't ST act like the state monad? is there a state monad that is efficient?
2020-09-21 17:25:47 +0200 <siraben> As in, I want modify, get, put, etc.
2020-09-21 17:25:50 +0200 <phadej> (static single assignment form)
2020-09-21 17:25:51 +0200 <dolio> I think a lot of languages experimenting with linearity for mutability stuff found that it wasn't very nice to use at the level of individual values.
2020-09-21 17:26:05 +0200teardown(~user@unaffiliated/mrush)
2020-09-21 17:26:13 +0200 <phadej> at which point one might need some kind of syntactic sugar as well
2020-09-21 17:26:14 +0200 <siraben> Rust uses an affine type system to manage memory, to great effect.
2020-09-21 17:26:29 +0200 <merijn> siraben: Not sure what you mean?
2020-09-21 17:26:40 +0200 <phadej> siraben: GHC is very good at compiling state passing code
2020-09-21 17:26:55 +0200 <siraben> merijn: ST is a lot like using IORef, right?
2020-09-21 17:27:09 +0200 <int-e> ST is a lot like IO
2020-09-21 17:27:11 +0200 <merijn> siraben: Sorta? I guess?
2020-09-21 17:27:35 +0200 <siraben> phadej: oh it is?
2020-09-21 17:27:36 +0200 <merijn> siraben: I mean, you can easily define a version of State that uses ST for the value and has get/put/modify work on that
2020-09-21 17:27:42 +0200 <siraben> mine to learn core I guess, never dove into it
2020-09-21 17:27:44 +0200 <merijn> But ST is much more general
2020-09-21 17:27:46 +0200 <int-e> IIRC the "ST" is for "state thread"... a thread that can have mutable state.
2020-09-21 17:27:57 +0200 <dolio> And then people were looking into 'linear regions' or something instead of individual linear values.
2020-09-21 17:28:35 +0200mastarija(~mastarija@93-142-74-181.adsl.net.t-com.hr) (Ping timeout: 260 seconds)
2020-09-21 17:28:47 +0200 <int-e> There's really not much of a connection to the state monad, except as an implementation detail.
2020-09-21 17:28:57 +0200 <merijn> siraben: "StateT (STRef s a) (ST s) b" with "modify :: (a -> a) -> StateT (STRef s a) (ST s) ()" is kinda the interface you're refering too
2020-09-21 17:29:03 +0200 <phadej> dolio: I understood that Rust does have that. YOu can pass ownership of just a part of array of values (e.g. part to one thread, another part to another thread)
2020-09-21 17:29:05 +0200 <siraben> https://old.reddit.com/r/haskell/comments/1rcc8t/performance_of_the_st_monad_over_the_state_monad/ ooh
2020-09-21 17:29:11 +0200 <siraben> merijn: I see
2020-09-21 17:29:12 +0200ephemera_(~E@122.34.1.187)
2020-09-21 17:29:40 +0200 <phadej> merijn: you'd be fine with just ReaderT, details...
2020-09-21 17:29:46 +0200 <merijn> siraben: The basic logic of ST is that "single threaded mutable references" are still perfectly deterministic in a purely function language
2020-09-21 17:29:52 +0200 <siraben> Wadler also mentions that there should be a mechanism for getting a read-only reference to a linear value whose deference can be nonlinear
2020-09-21 17:30:06 +0200 <merijn> siraben: Because the order of changes and what you change is perfectly deterministic in that setting
2020-09-21 17:30:11 +0200 <siraben> Right
2020-09-21 17:30:15 +0200Tuplanolla(~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
2020-09-21 17:30:29 +0200 <merijn> siraben: So ST gives you arbitrary many independent mutable variables, whereas State's interface has just one
2020-09-21 17:30:29 +0200 <dolio> phadej: Oh, I guess that's one possible meaning of 'region'. It wasn't the one I was thinking of, but maybe it's the right one.
2020-09-21 17:30:47 +0200 <merijn> siraben: So the State API is just the trivial case of "I have one STRef" :p
2020-09-21 17:30:52 +0200 <siraben> merijn: right
2020-09-21 17:30:57 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 17:30:58 +0200 <siraben> Well, I haven't used STRef yet, might come in useful.
2020-09-21 17:31:33 +0200 <phadej> yet, Rust is ownership and LinearHaskell are very different things
2020-09-21 17:31:48 +0200 <merijn> siraben: I'd say that STRef itself has limited usefulness
2020-09-21 17:31:52 +0200 <phadej> it's tricky to represent ownership with linear types
2020-09-21 17:31:55 +0200 <siraben> What do people use STRef here for? Translating imperative code?
2020-09-21 17:31:58 +0200 <merijn> siraben: The most useful ST application imo is Vector
2020-09-21 17:32:05 +0200 <phadej> you can emulate that, but whether it's convenient: again, time will whow.
2020-09-21 17:32:07 +0200 <dolio> Yeah, actually, that makes a lot more sense for how it would solve the problem.
2020-09-21 17:32:09 +0200 <siraben> phadej: right, the ownership system in its glory is a lot like linear regions
2020-09-21 17:32:31 +0200 <merijn> siraben: Vector has ST based mutable vectors, which are very useful for obvious reasons of "mutable arrays are useful" ;)
2020-09-21 17:32:45 +0200 <siraben> Memory management aside, what about linearity as an alternative to Haskell's bracket pattern?
2020-09-21 17:32:56 +0200 <phadej> siraben: they are complementary
2020-09-21 17:32:58 +0200 <siraben> Also, making sure files are closed, sesion types etc
2020-09-21 17:33:04 +0200 <phadej> LinearTypes and exceptions is not solved problem
2020-09-21 17:33:11 +0200 <siraben> phadej: Bracket pattern is like RAII in C++ and Rust?
2020-09-21 17:33:14 +0200 <merijn> siraben: I like the idea of that, but I'm not sure about the reality :p
2020-09-21 17:33:19 +0200 <phadej> (in fact explicitly unsolved, IIRC)
2020-09-21 17:33:29 +0200 <merijn> siraben: IndexedMonads might be a better solution for a "better bracket", tbh
2020-09-21 17:33:38 +0200 <siraben> phadej: How do they interact? I know that Rust does not have exceptions but I wonder if it's do to the theoretical limitations.
2020-09-21 17:33:46 +0200 <merijn> But I don't see Haskell en masse adopting indexed monads :p
2020-09-21 17:33:46 +0200 <siraben> IndexedMonads is a language extension?
2020-09-21 17:33:56 +0200 <merijn> siraben: that's a missing space ;)
2020-09-21 17:34:06 +0200 <phadej> I think someone have to do a bit of homework at this point ;)
2020-09-21 17:34:11 +0200eric___(~eric@2804:431:c7d4:a280:a420:f119:9a1a:c48)
2020-09-21 17:34:41 +0200eric_(~eric@2804:431:c7d4:402a:842:24e2:eb65:718) (Ping timeout: 246 seconds)
2020-09-21 17:34:58 +0200 <phadej> I don't know what mechanism Rust uses to report division by zero errors
2020-09-21 17:34:59 +0200 <phadej> e.g.
2020-09-21 17:35:05 +0200 <siraben> Oh, it's like the LockM monad in https://www.cs.tufts.edu/comp/150FP/archive/simon-peyton-jones/typefun.pdf
2020-09-21 17:35:06 +0200 <siraben> indexed monads, that is
2020-09-21 17:35:07 +0200 <phadej> so I cannot comment further
2020-09-21 17:35:31 +0200 <siraben> phadej: it panics
2020-09-21 17:35:34 +0200 <siraben> so, stack unwind
2020-09-21 17:35:39 +0200 <merijn> siraben: indexed monads would be "(>>>=) :: IxMonad m => m i j a -> (a -> m j k b) -> m i k b"
2020-09-21 17:35:49 +0200coffeeturtle(~coffeetur@cpc103420-donc13-2-0-cust24.17-1.cable.virginm.net)
2020-09-21 17:35:55 +0200mastarija(~mastarija@93-142-74-181.adsl.net.t-com.hr)
2020-09-21 17:36:00 +0200mastarija(~mastarija@93-142-74-181.adsl.net.t-com.hr) (Client Quit)
2020-09-21 17:36:02 +0200 <merijn> siraben: And then you can use i/j/k etc. to encode "file descript is open" file descriptor is closed, etc.
2020-09-21 17:36:07 +0200 <phadej> siraben: can you recover from panics?
2020-09-21 17:36:17 +0200 <siraben> phadej: no
2020-09-21 17:36:21 +0200 <siraben> merijn: right
2020-09-21 17:36:29 +0200 <siraben> panics are like error in Haskell, I suppose
2020-09-21 17:36:36 +0200 <phadej> you can catch `error` in Haskell
2020-09-21 17:36:55 +0200 <phadej> or just let the thread die (but not the whole program)
2020-09-21 17:37:13 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds)
2020-09-21 17:37:37 +0200acidjnk_new2(~acidjnk@p200300d0c73658819d57354728142a5b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 17:37:41 +0200coffeeturtle(~coffeetur@cpc103420-donc13-2-0-cust24.17-1.cable.virginm.net) (Remote host closed the connection)
2020-09-21 17:37:55 +0200 <phadej> :t error
2020-09-21 17:37:57 +0200 <lambdabot> [Char] -> a
2020-09-21 17:37:58 +0200 <siraben> heh, well technically you can catch panics in Rust, but it's definitely not recommended https://doc.rust-lang.org/beta/std/panic/fn.catch_unwind.html
2020-09-21 17:38:02 +0200coffeeturtle(~coffeetur@cpc103420-donc13-2-0-cust24.17-1.cable.virginm.net)
2020-09-21 17:38:09 +0200 <phadej> :t throwIO . userError
2020-09-21 17:38:11 +0200 <lambdabot> String -> IO a
2020-09-21 17:38:18 +0200 <phadej> :t throw . userError
2020-09-21 17:38:20 +0200 <lambdabot> String -> c
2020-09-21 17:38:27 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 260 seconds)
2020-09-21 17:38:30 +0200 <phadej> error = throw . userError
2020-09-21 17:38:37 +0200 <phadej> you can try to catch them in IO then
2020-09-21 17:39:10 +0200 <phadej> which is e.g. useful when you write a web-server framework, so you can log how users' buggy handlers failed
2020-09-21 17:39:31 +0200 <siraben> https://users.cs.northwestern.edu/~jesse/pubs/substructural-control/CtlURAL.pdf comes up when I search for linear types and exceptions
2020-09-21 17:39:40 +0200 <siraben> "In short, exceptions and linear types refuse to get along, because linear types make promises that exceptions do not let them keep."
2020-09-21 17:39:49 +0200 <siraben> But in an affine system apparently this is alright, just drop the variables.
2020-09-21 17:40:20 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 17:40:28 +0200 <phadej> yes.
2020-09-21 17:40:44 +0200 <phadej> this is why I said that LinearHaskell + exceptions is unsolved problem
2020-09-21 17:41:25 +0200 <phadej> one can be optimistic and think "we need an implementation to see how things fit (or not fit) together, so we can develop LinearHaskell further"
2020-09-21 17:41:39 +0200 <phadej> or you can be pessimistic and just declare upfront "it won't work"
2020-09-21 17:41:40 +0200 <phadej> :)
2020-09-21 17:41:50 +0200chele(~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds)
2020-09-21 17:41:55 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net)
2020-09-21 17:42:22 +0200 <siraben> Hehe
2020-09-21 17:42:25 +0200 <phadej> IMHO anyone who says *now* that LinearHaskell will solve any problem is just selling you a hype.
2020-09-21 17:42:38 +0200 <phadej> yeah, it might solve a problem, but give you dozen new ones.
2020-09-21 17:42:40 +0200 <siraben> Why emphasis on now?
2020-09-21 17:42:44 +0200 <siraben> Ah, right.
2020-09-21 17:42:45 +0200 <Taneb> It might solve the problem of "I would like another thing to mess around with"
2020-09-21 17:43:11 +0200 <siraben> I'm not expecting it to solve problems immediately, but linear types are interesting and I'd like to mess around with them, heh.
2020-09-21 17:43:18 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 256 seconds)
2020-09-21 17:43:18 +0200revprez_anzio(~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
2020-09-21 17:43:22 +0200 <phadej> Taneb: that can be fun :)
2020-09-21 17:43:24 +0200 <siraben> AffineHaskell, anyone?
2020-09-21 17:43:56 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds)
2020-09-21 17:45:25 +0200vdiazroa(578036c2@p578036c2.dip0.t-ipconnect.de)
2020-09-21 17:45:28 +0200mmohammadi98129(~mmohammad@2.178.188.114)
2020-09-21 17:45:38 +0200Chi1thangoo(~Chi1thang@87.112.60.168) (Remote host closed the connection)
2020-09-21 17:45:49 +0200mmohammadi9812(~mmohammad@2.178.188.114) (Ping timeout: 265 seconds)
2020-09-21 17:45:49 +0200mmohammadi98129mmohammadi9812
2020-09-21 17:47:16 +0200cole-h(~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
2020-09-21 17:49:41 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:c87d:6f52:4c16:4130) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 17:49:43 +0200wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-09-21 17:50:16 +0200cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 272 seconds)
2020-09-21 17:50:56 +0200 <phadej> GHC-9.2 will change the syntax for linear arrows, so at least that should make it clear that LinearHaskell is very experimental feature ;)
2020-09-21 17:51:54 +0200 <dolio> Presumably the emphasis is due to, right now, no one having any significant experience actually designing things with LinearHaskell, so any claims about what it will solve are just speculation.
2020-09-21 17:52:07 +0200 <phadej> yes
2020-09-21 17:52:18 +0200qwerty(59b76b94@a89-183-107-148.net-htp.de)
2020-09-21 17:52:25 +0200ph88_(~ph88@2a02:8109:9e40:2704:a1b2:872a:487a:52ae)
2020-09-21 17:52:31 +0200eric___(~eric@2804:431:c7d4:a280:a420:f119:9a1a:c48) (Read error: Connection reset by peer)
2020-09-21 17:52:35 +0200 <phadej> obviously authors claim it will solve all problems ;)
2020-09-21 17:52:43 +0200qwertyqwerty123
2020-09-21 17:52:57 +0200qwerty123qwerty93
2020-09-21 17:53:03 +0200 <dolio> Even the authors mostly have toy examples from research papers and blog posts.
2020-09-21 17:53:09 +0200eric_(~eric@2804:431:c7d4:a280:a420:f119:9a1a:c48)
2020-09-21 17:54:00 +0200coffeeturtle(~coffeetur@cpc103420-donc13-2-0-cust24.17-1.cable.virginm.net) (Quit: leaving)
2020-09-21 17:54:09 +0200 <phadej> the implicit claim? is that you examples generalise
2020-09-21 17:54:15 +0200 <phadej> s/you/toy/
2020-09-21 17:54:18 +0200utopic_int0x80(~lucid_0x8@188.253.235.98) (Quit: Leaving)
2020-09-21 17:54:30 +0200 <phadej> but in this case it is not obvious
2020-09-21 17:55:23 +0200plutoniix(~q@ppp-27-55-67-24.revip3.asianet.co.th)
2020-09-21 17:56:21 +0200nikosky(ba0e194f@186.14.25.79)
2020-09-21 17:56:29 +0200ph88^(~ph88@2a02:8109:9e40:2704:3dae:c0b9:eddf:4cf0) (Ping timeout: 272 seconds)
2020-09-21 17:56:56 +0200 <qwerty93> I want to write a function `mycatch :: a -> Either String a` which returns its argument if no error was thrown and otherwise the error message. For example, `mycatch ((error "asd")::Int)` should return `Left "asd"`. How can this be done with `unsafePerformIO`?
2020-09-21 17:57:28 +0200 <dminuoso> qwerty93: That is not possible in standard haskell/
2020-09-21 17:57:36 +0200cpressey(~cpressey@79-65-248-204.host.pobb.as13285.net) (Quit: WeeChat 1.9.1)
2020-09-21 17:57:36 +0200 <dminuoso> You have to do this in IO
2020-09-21 17:57:42 +0200nbloomf(~nbloomf@2600:1700:83e0:1f40:f82a:5e5e:a65a:42ad)
2020-09-21 17:57:47 +0200 <edwardk> pretty happy that my bytestring patch is finally going in. i'd practically forgotten about in the last year, other than using it in some cabal.project.local's
2020-09-21 17:58:00 +0200 <dminuoso> % :t Control.Exception.evaluate -- qwerty93
2020-09-21 17:58:00 +0200 <yahb> dminuoso: a -> IO a
2020-09-21 17:58:16 +0200 <dminuoso> Note, you might be tempted to use unsafePerformIO with this, but there's good reasons not to.
2020-09-21 17:58:43 +0200 <dolio> I think you should eliminate your desire to write such a function. :)
2020-09-21 17:59:59 +0200 <qwerty93> I have seen the example `catchPure h v = unsafePerformIO $ evaluate v `catch` (pure . h)` but this can only return some sort of default value for a if an error is thrown
2020-09-21 18:00:25 +0200coot(~coot@37.30.49.42.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 240 seconds)
2020-09-21 18:00:31 +0200 <davean> qwerty93: you think thats what it does at least.
2020-09-21 18:00:36 +0200 <davean> qwerty93: this is a very bad idea.
2020-09-21 18:00:51 +0200 <edwardk> qwerty93: the problem is it isn't monotone
2020-09-21 18:01:19 +0200 <davean> And thats why it doesn't do what you think it does.
2020-09-21 18:01:53 +0200s00pcan(~chris@075-133-056-178.res.spectrum.com)
2020-09-21 18:02:18 +0200ephemera_(~E@122.34.1.187) (Ping timeout: 272 seconds)
2020-09-21 18:02:22 +0200 <edwardk> in haskell pure code you enjoy the benefits of the fact that if you make your inputs more defined all that can happen is that at worst your output becomes more defined. in a world with catchPure that is no longer the case
2020-09-21 18:02:39 +0200 <edwardk> that is a pretty high price of admission
2020-09-21 18:02:49 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842)
2020-09-21 18:04:22 +0200 <qwerty93> I just want to use it for a special debugging mode, the final code would not use it anymore. So, is this not possible at all or just highly advised against?
2020-09-21 18:05:28 +0200 <davean> qwerty93: It can make your debugging harder for the reason above.
2020-09-21 18:06:31 +0200 <davean> as for if its possible, that depends on what "it" is, and I don't think you understand what it is and thats the problem.
2020-09-21 18:07:41 +0200 <qwerty93> davean: you mean it affects the semantics in the sense that is forces evaluation which could cause problems if laziness is expected? the code I'm interested in is not affected by eager evaluation. or is there more?
2020-09-21 18:07:53 +0200suppi(~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 272 seconds)
2020-09-21 18:08:02 +0200 <davean> qwerty93: Theres more, see edwardk's comment.
2020-09-21 18:08:50 +0200 <davean> qwerty93: Its value can change based on how you look at it now.
2020-09-21 18:08:53 +0200 <edwardk> qwerty93: no monotonicity police will be dispatched to your location, just saying the nature of the issue
2020-09-21 18:09:41 +0200 <davean> qwerty93: If it throws an exception, an exception is throw, how does this new function help you in your mind?
2020-09-21 18:09:59 +0200vdiazroa(578036c2@p578036c2.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-09-21 18:10:14 +0200shad0w__(~shad0w_@160.202.36.59)
2020-09-21 18:10:47 +0200kritzefitz(~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
2020-09-21 18:11:05 +0200 <davean> Tahts the sort of function I use debugging to fix, not the sort of function I use to debug.
2020-09-21 18:11:52 +0200shad0w_(~shad0w_@160.202.36.94) (Ping timeout: 246 seconds)
2020-09-21 18:11:53 +0200shad0w__shad0w_
2020-09-21 18:12:44 +0200suppi(~suppi@172.246.241.246)
2020-09-21 18:12:57 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser) (Quit: WeeChat 2.9)
2020-09-21 18:13:45 +0200tolt(~Kevin@li697-66.members.linode.com)
2020-09-21 18:14:15 +0200senri(evlian@gateway/shell/xshellz/x-qfoqhwybgfovdhvb)
2020-09-21 18:14:35 +0200unlink2(~unlink2@p5dc0ae0e.dip0.t-ipconnect.de) (Quit: Leaving)
2020-09-21 18:14:49 +0200unlink2(~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de)
2020-09-21 18:15:05 +0200tolt_(kevin@2600:3c03::f03c:91ff:fe79:6b76)
2020-09-21 18:15:30 +0200cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-09-21 18:16:52 +0200qwerty93(59b76b94@a89-183-107-148.net-htp.de) (Remote host closed the connection)
2020-09-21 18:17:12 +0200 <cheater> glguy: cmd.exe supports xterm escape sequences now
2020-09-21 18:19:13 +0200Turmfalke(~user@unaffiliated/siracusa)
2020-09-21 18:20:07 +0200josh(~josh@c-67-164-104-206.hsd1.ca.comcast.net)
2020-09-21 18:20:34 +0200tolt(~Kevin@li697-66.members.linode.com) (Quit: Goodbye!)
2020-09-21 18:21:07 +0200tolt_tolt
2020-09-21 18:23:53 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-09-21 18:24:54 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 18:25:25 +0200tzh(~tzh@2601:448:c500:5300::df41)
2020-09-21 18:29:38 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 18:30:28 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 244 seconds)
2020-09-21 18:32:05 +0200justsomeguy(~justsomeg@unaffiliated/--/x-3805311)
2020-09-21 18:33:18 +0200OptimusMKD(~risto@87.227.241.139)
2020-09-21 18:33:39 +0200OptimusMKD(~risto@87.227.241.139) (Max SendQ exceeded)
2020-09-21 18:34:09 +0200OptimusMKD(~risto@87.227.241.139)
2020-09-21 18:34:59 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2020-09-21 18:36:15 +0200OptimusMKD(~risto@87.227.241.139) (Max SendQ exceeded)
2020-09-21 18:36:45 +0200OptimusMKD(~risto@87.227.241.139)
2020-09-21 18:36:45 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net) (Remote host closed the connection)
2020-09-21 18:37:07 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 18:37:09 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net)
2020-09-21 18:38:52 +0200OptimusMKD(~risto@87.227.241.139) (Max SendQ exceeded)
2020-09-21 18:39:03 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz)
2020-09-21 18:39:30 +0200OptimusMKD(~risto@87.227.241.139)
2020-09-21 18:43:22 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 18:44:44 +0200kenran(~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds)
2020-09-21 18:48:49 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 18:50:12 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 18:51:40 +0200kritzefitz(~kritzefit@212.86.56.80)
2020-09-21 18:51:40 +0200kritzefitz(~kritzefit@212.86.56.80) (Client Quit)
2020-09-21 18:52:42 +0200Dolly(585fd1fd@ti0203q160-5312.bb.online.no)
2020-09-21 18:53:42 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 18:55:20 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-09-21 18:56:01 +0200alp(~alp@2a01:e0a:58b:4920:e1db:5e81:371d:6a3c) (Ping timeout: 272 seconds)
2020-09-21 18:56:22 +0200nineonine(~nineonine@216-19-190-182.dyn.novuscom.net) (Remote host closed the connection)
2020-09-21 18:57:44 +0200ClaudiusMaximus(~claude@unaffiliated/claudiusmaximus) (Read error: Connection reset by peer)
2020-09-21 18:58:28 +0200averell(~averell@unaffiliated/averell) (Remote host closed the connection)
2020-09-21 19:00:14 +0200OptimusMKD(~risto@87.227.241.139) (Quit: Leaving)
2020-09-21 19:00:28 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 19:03:58 +0200hackagetomland 1.3.1.0 - Bidirectional TOML serialization https://hackage.haskell.org/package/tomland-1.3.1.0 (vrom911)
2020-09-21 19:04:32 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 260 seconds)
2020-09-21 19:05:01 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 264 seconds)
2020-09-21 19:05:15 +0200roconnor(~roconnor@host-45-78-255-115.dyn.295.ca)
2020-09-21 19:05:33 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2)
2020-09-21 19:05:39 +0200nineonine(~nineonine@216.81.48.202)
2020-09-21 19:06:10 +0200nineonine(~nineonine@216.81.48.202) (Remote host closed the connection)
2020-09-21 19:06:23 +0200nineonine(~nineonine@216.81.48.202)
2020-09-21 19:07:23 +0200pgib(~textual@lmms/pgib)
2020-09-21 19:07:57 +0200AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-09-21 19:12:25 +0200LKoen(~LKoen@81.255.219.130)
2020-09-21 19:13:18 +0200alp(~alp@2a01:e0a:58b:4920:3d6a:1746:8ffe:5c08)
2020-09-21 19:13:42 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net)
2020-09-21 19:16:06 +0200Orbstheorem(~roosember@hellendaal.orbstheorem.ch)
2020-09-21 19:16:46 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 19:16:54 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection)
2020-09-21 19:17:25 +0200Lord_of_Life_(~Lord@unaffiliated/lord-of-life/x-0885362)
2020-09-21 19:17:28 +0200hackagestm-actor 0.1.2.1 - A simplistic actor model based on STM https://hackage.haskell.org/package/stm-actor-0.1.2.1 (sgschlesinger)
2020-09-21 19:17:28 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
2020-09-21 19:17:39 +0200Lord_of_Life(~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 260 seconds)
2020-09-21 19:17:45 +0200machinedgod(~machinedg@45.78.189.122) (Ping timeout: 240 seconds)
2020-09-21 19:18:28 +0200kuribas(~user@ptr-25vy0i9m1chs7zs38i7.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2020-09-21 19:18:47 +0200Lord_of_Life_Lord_of_Life
2020-09-21 19:20:33 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 19:24:38 +0200wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-09-21 19:24:51 +0200pingiun(~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) (Quit: Textual IRC Client: www.textualapp.com)
2020-09-21 19:26:16 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 19:26:34 +0200pera(~pera@unaffiliated/pera)
2020-09-21 19:29:57 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-09-21 19:30:24 +0200stef204(~stef204@unaffiliated/stef-204/x-384198) (Quit: WeeChat 2.9)
2020-09-21 19:34:25 +0200David43(4cd8d0d0@76-216-208-208.lightspeed.wbfdmi.sbcglobal.net)
2020-09-21 19:34:51 +0200David43(4cd8d0d0@76-216-208-208.lightspeed.wbfdmi.sbcglobal.net) (Remote host closed the connection)
2020-09-21 19:35:35 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 19:36:16 +0200sfvm(~sfvm@37.228.215.148)
2020-09-21 19:36:33 +0200alp(~alp@2a01:e0a:58b:4920:3d6a:1746:8ffe:5c08) (Ping timeout: 272 seconds)
2020-09-21 19:36:59 +0200geekosaur(42d52102@66.213.33.2)
2020-09-21 19:37:33 +0200jespada(~jespada@90.254.241.6) (Quit: Sleeping)
2020-09-21 19:38:10 +0200koz(~koz@2404:4408:4303:8800:4270:af80:81b7:2f9)
2020-09-21 19:38:19 +0200koz_(~koz@121.99.240.58) (Ping timeout: 246 seconds)
2020-09-21 19:39:03 +0200Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds)
2020-09-21 19:39:05 +0200plutoniix(~q@ppp-27-55-67-24.revip3.asianet.co.th) (Read error: Connection reset by peer)
2020-09-21 19:39:13 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 19:42:26 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection)
2020-09-21 19:45:46 +0200jespada(~jespada@90.254.241.6)
2020-09-21 19:46:18 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 19:47:08 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 19:47:58 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 19:48:12 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 19:49:36 +0200knupfer(~Thunderbi@i5E86B42C.versanet.de)
2020-09-21 19:49:58 +0200__Joker_(~Joker@180.151.104.210) (Ping timeout: 272 seconds)
2020-09-21 19:52:57 +0200Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-09-21 19:53:03 +0200 <monochrom> https://jscoq.github.io/node_modules/jscoq/examples/scratchpad.html
2020-09-21 19:53:22 +0200ryansmccoy(~ryansmcco@156.96.151.132) (Ping timeout: 246 seconds)
2020-09-21 19:53:50 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 19:54:10 +0200ryansmccoy(~ryansmcco@156.96.151.132)
2020-09-21 19:55:11 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 19:56:11 +0200plutoniix(~q@node-unh.pool-125-24.dynamic.totinternet.net)
2020-09-21 19:56:49 +0200mpereira(~mpereira@2a02:810d:f40:d96:b903:bcf4:35d5:9a35) (Ping timeout: 272 seconds)
2020-09-21 19:57:03 +0200alp(~alp@2a01:e0a:58b:4920:a050:58b3:20bf:5c71)
2020-09-21 19:58:21 +0200 <NieDzejkob> is there a better alternative to (const x <$>) <$> xs for replacing all elements of [[a]] by x?
2020-09-21 20:00:01 +0200Seyaryuki(~Seyaryuki@185.204.1.185) ()
2020-09-21 20:00:06 +0200John20(~John@82.46.59.122) (Ping timeout: 272 seconds)
2020-09-21 20:01:15 +0200 <phadej> :t \xs y -> set (mapped.mapped) y xs
2020-09-21 20:01:17 +0200 <lambdabot> (Functor f1, Functor f2) => f1 (f2 a) -> b -> f1 (f2 b)
2020-09-21 20:01:17 +0200 <monochrom> I think prefix notation is better. fmap (fmap (const x)) xs
2020-09-21 20:02:05 +0200Thra11(~Thra11@5.1.169.217.in-addr.arpa)
2020-09-21 20:03:23 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 20:03:45 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection)
2020-09-21 20:04:04 +0200kozkoz_
2020-09-21 20:04:12 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 20:04:36 +0200 <NieDzejkob> I'm just starting to discover lens today, I assume that's where mapped comes from :D
2020-09-21 20:05:03 +0200 <monochrom> also "set"
2020-09-21 20:05:13 +0200 <NieDzejkob> if I defined, say, foo a b = ... where bar c = a + c, how can I access bar in ghci?
2020-09-21 20:05:29 +0200 <monochrom> Cannot.
2020-09-21 20:06:43 +0200 <NieDzejkob> even if I provide a specific value of a and b? How can I debug these definitions, then?
2020-09-21 20:07:04 +0200 <dolio> fmap (const x) = (x <$)
2020-09-21 20:07:12 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 20:07:51 +0200 <monochrom> If you're OK with outputting debugging messages, look into Debug.Trace
2020-09-21 20:08:19 +0200 <monochrom> My Debug.Trace tutorial: http://www.cs.utoronto.ca/~trebla/CSCC24-2020-Summer/tracing.html
2020-09-21 20:08:37 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds)
2020-09-21 20:09:33 +0200 <Cale> NieDzejkob: You can of course, edit the definition and lift it out of the definition of foo, but you'd need to add a as a parameter then.
2020-09-21 20:10:27 +0200 <NieDzejkob> that's particularily inconvenient as the definition in question is recursive
2020-09-21 20:10:55 +0200Jaf23o(029895e7@2.152.149.231.dyn.user.ono.com)
2020-09-21 20:11:03 +0200 <Cale> Of course, addition (and other functions), work the same everywhere, so if you know a and c, you can just add them directly in ghci. (Similarly, you could use the definition of whatever local thing you were looking at to reconstruct what it would be)
2020-09-21 20:11:10 +0200sepi(49dc4892@c-73-220-72-146.hsd1.ca.comcast.net)
2020-09-21 20:11:16 +0200dansho(~dansho@ip68-108-167-185.lv.lv.cox.net) (Quit: Leaving)
2020-09-21 20:11:24 +0200 <senri> 10
2020-09-21 20:11:30 +0200 <senri> whoops
2020-09-21 20:11:34 +0200 <Cale> What's the actual definition you're trying to figure out?
2020-09-21 20:12:07 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh) (Remote host closed the connection)
2020-09-21 20:13:34 +0200__monty__(~toonn@unaffiliated/toonn)
2020-09-21 20:14:04 +0200 <NieDzejkob> oh hold on, I added some more type annotations and figured out what's going on :D
2020-09-21 20:14:18 +0200 <NieDzejkob> anyway, this is what the code in question looks like: https://gist.github.com/NieDzejkob/ea6e75ee00951fb8a82e51beafa7d7c4
2020-09-21 20:15:06 +0200 <NieDzejkob> (I'm investigating bijections f such that g(x) = x + f(x) is also bijective)
2020-09-21 20:16:03 +0200orion(~orion@unaffiliated/orion)
2020-09-21 20:16:26 +0200 <orion> Hi. Are there technical reasons why GHC does not support the Power ISA?
2020-09-21 20:16:38 +0200 <ski> composition of bijections yields a bijection
2020-09-21 20:16:47 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net)
2020-09-21 20:17:03 +0200 <NieDzejkob> not sure how that helps here?
2020-09-21 20:17:03 +0200Unhammer(~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds)
2020-09-21 20:17:08 +0200 <orion> Sorry, I should probably direct this to #ghc.
2020-09-21 20:17:19 +0200 <ski> hm, i guess it doesn't. sorry
2020-09-21 20:17:21 +0200 <geekosaur> orion, generally if ghc doesn't support some arch it's because nobody has time or access to it
2020-09-21 20:17:32 +0200 <NieDzejkob> ski: I mean, g isn't a composition of bijections
2020-09-21 20:17:56 +0200 <NieDzejkob> but composition of bijections does indeed yield a bijection
2020-09-21 20:18:02 +0200 <orion> geekosaur: How many hours of labor do you estimate would be involved in porting GHC to another architecture?
2020-09-21 20:18:38 +0200jespada(~jespada@90.254.241.6) (Quit: Sleeping)
2020-09-21 20:18:42 +0200 <geekosaur> depends on what tools you can use. it'll be much faster if you can take advantage of the llvm backend instead of going unregisterised, for example
2020-09-21 20:19:52 +0200Unhammer(~Unhammer@gateway/tor-sasl/unhammer)
2020-09-21 20:20:04 +0200Sigyn(sigyn@freenode/utility-bot/sigyn) (Quit: i've seen things you people wouldn't believe. spam bots on fire off the shoulder of sigyn. i watched k-line beams glitter in the dark near the Tannhäuser Gate. all these moments will be lost in time, like tears in rain. time to /die)
2020-09-21 20:20:43 +0200Sigyn(sigyn@freenode/utility-bot/sigyn)
2020-09-21 20:20:43 +0200ChanServ+o Sigyn
2020-09-21 20:21:56 +0200cr3(~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 265 seconds)
2020-09-21 20:22:21 +0200machinedgod(~machinedg@d67-193-126-196.home3.cgocable.net)
2020-09-21 20:22:23 +0200gehmehgeh(~ircuser1@gateway/tor-sasl/gehmehgeh)
2020-09-21 20:22:29 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 20:23:07 +0200aplainzetakind(~johndoe@captainludd.powered.by.lunarbnc.net)
2020-09-21 20:26:20 +0200cr3(~cr3@192-222-143-195.qc.cable.ebox.net)
2020-09-21 20:27:06 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be)
2020-09-21 20:28:43 +0200shad0w_(~shad0w_@160.202.36.59) (Remote host closed the connection)
2020-09-21 20:29:29 +0200senri(evlian@gateway/shell/xshellz/x-qfoqhwybgfovdhvb) (Remote host closed the connection)
2020-09-21 20:29:58 +0200jespada(~jespada@90.254.241.6)
2020-09-21 20:30:35 +0200juuandyy(~juuandyy@90.166.144.65)
2020-09-21 20:36:25 +0200machinedgod(~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 246 seconds)
2020-09-21 20:36:42 +0200Saten-san(~Saten-san@ip-83-134-202-127.dsl.scarlet.be) (Quit: WeeChat 2.8)
2020-09-21 20:38:59 +0200shafox(~shafox@106.51.234.111) (Remote host closed the connection)
2020-09-21 20:39:05 +0200ystael(~ystael@209.6.50.55) (Ping timeout: 240 seconds)
2020-09-21 20:39:07 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser) (Ping timeout: 240 seconds)
2020-09-21 20:39:23 +0200justanotheruser(~justanoth@unaffiliated/justanotheruser)
2020-09-21 20:41:47 +0200bahamas(~lucian@unaffiliated/bahamas)
2020-09-21 20:43:06 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 20:44:14 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
2020-09-21 20:44:19 +0200mirrorbird(~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Ping timeout: 272 seconds)
2020-09-21 20:44:37 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 20:46:25 +0200Aquazi(uid312403@gateway/web/irccloud.com/x-bxvisodaildxgivh) (Quit: Connection closed for inactivity)
2020-09-21 20:47:23 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 240 seconds)
2020-09-21 20:48:18 +0200 <hyperisco> since we have flip :: (a -> b -> c) -> (b -> a -> c) I think it makes a lot of sense to add flop :: (b -> a -> c) -> (a -> b -> c) in case you want to go back
2020-09-21 20:49:03 +0200 <monochrom> haha
2020-09-21 20:49:10 +0200adaminsull(~adaminsul@84.39.117.57)
2020-09-21 20:49:24 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
2020-09-21 20:49:35 +0200 <Rembane> Cunning!
2020-09-21 20:50:42 +0200 <monochrom> We also need one for reverse.
2020-09-21 20:51:02 +0200vicfred(~vicfred@unaffiliated/vicfred) (Quit: Leaving)
2020-09-21 20:51:44 +0200 <tomjaguarpaw> rovorse
2020-09-21 20:52:58 +0200hackagelibjwt-typed 0.2 - A Haskell implementation of JSON Web Token (JWT) https://hackage.haskell.org/package/libjwt-typed-0.2 (rzeznik)
2020-09-21 20:56:49 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-09-21 20:57:41 +0200knupfer(~Thunderbi@i5E86B42C.versanet.de) (Ping timeout: 260 seconds)
2020-09-21 20:57:56 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 20:58:50 +0200Jaf23o(029895e7@2.152.149.231.dyn.user.ono.com) (Ping timeout: 245 seconds)
2020-09-21 21:00:31 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
2020-09-21 21:06:14 +0200orion(~orion@unaffiliated/orion) ()
2020-09-21 21:07:20 +0200michael__(~michael@2a02:2455:b61:1b00:4ecc:6aff:fe28:be5e)
2020-09-21 21:08:23 +0200alp(~alp@2a01:e0a:58b:4920:a050:58b3:20bf:5c71) (Ping timeout: 272 seconds)
2020-09-21 21:08:42 +0200bennofs_(~quassel@dslb-094-222-034-064.094.222.pools.vodafone-ip.de)
2020-09-21 21:10:01 +0200Rudd0(~Rudd0@185.189.115.103) (Ping timeout: 246 seconds)
2020-09-21 21:10:56 +0200juuandyy(~juuandyy@90.166.144.65) (Ping timeout: 256 seconds)
2020-09-21 21:11:09 +0200 <koz_> I'm a bit confused how to write an Hspec 'SpecWith a' with 'beforeAll'. Where do I get the value of type 'a' from?
2020-09-21 21:11:40 +0200 <koz_> I'm only familiar with the 'describe "foo" . it "bars" $ x `shouldBe` y' style of incantation.
2020-09-21 21:11:54 +0200 <koz_> And the docs aren't very clear about how to use 'before' and 'beforeAll'.
2020-09-21 21:12:56 +0200bennofs(~quassel@dslb-178-000-064-245.178.000.pools.vodafone-ip.de) (Ping timeout: 272 seconds)
2020-09-21 21:13:01 +0200coot(~coot@37.30.51.178.nat.umts.dynamic.t-mobile.pl)
2020-09-21 21:14:11 +0200vicfred(~vicfred@unaffiliated/vicfred)
2020-09-21 21:14:14 +0200machinedgod(~machinedg@d67-193-126-196.home3.cgocable.net)
2020-09-21 21:16:11 +0200acidjnk_new2(~acidjnk@p200300d0c73658819d57354728142a5b.dip0.t-ipconnect.de)
2020-09-21 21:16:59 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
2020-09-21 21:17:15 +0200worc3131(~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) (Ping timeout: 272 seconds)
2020-09-21 21:20:57 +0200michael__(~michael@2a02:2455:b61:1b00:4ecc:6aff:fe28:be5e) (Quit: Leaving)
2020-09-21 21:20:57 +0200hackagesequence-formats 1.5.1.2 - A package with basic parsing utilities for several Bioinformatic data formats. https://hackage.haskell.org/package/sequence-formats-1.5.1.2 (stephan_schiffels)
2020-09-21 21:25:00 +0200sepi(49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) (Remote host closed the connection)
2020-09-21 21:25:26 +0200ystael(~ystael@116.sub-174-196-195.myvzw.com)
2020-09-21 21:28:43 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 21:30:12 +0200bahamas(~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds)
2020-09-21 21:33:02 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com) (Remote host closed the connection)
2020-09-21 21:33:56 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com)
2020-09-21 21:35:12 +0200chaosmasttter(~chaosmast@p200300c4a702130181d7af909c24ca2e.dip0.t-ipconnect.de)
2020-09-21 21:42:17 +0200nikosky(ba0e194f@186.14.25.79) (Remote host closed the connection)
2020-09-21 21:42:24 +0200alp(~alp@2a01:e0a:58b:4920:24b6:1e8a:d1c8:1f2e)
2020-09-21 21:43:28 +0200John20(~John@82.46.59.122)
2020-09-21 21:45:16 +0200ystael(~ystael@116.sub-174-196-195.myvzw.com) (Read error: Connection reset by peer)
2020-09-21 21:48:35 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 21:49:27 +0200ystael(~ystael@116.sub-174-196-195.myvzw.com)
2020-09-21 21:49:59 +0200geekosaur(42d52102@66.213.33.2) (Remote host closed the connection)
2020-09-21 21:51:23 +0200carlomagno1(~cararell@inet-hqmc01-o.oracle.com) (Ping timeout: 240 seconds)
2020-09-21 21:53:23 +0200adamwespiser(~adam_wesp@209.6.42.110) (Ping timeout: 260 seconds)
2020-09-21 21:54:08 +0200wwwww(~wwwww@unaffiliated/wwwww) (Ping timeout: 260 seconds)
2020-09-21 21:54:44 +0200irc_user(uid423822@gateway/web/irccloud.com/x-orjppconqhqlsued) (Quit: Connection closed for inactivity)
2020-09-21 21:56:02 +0200wwwww(~wwwww@unaffiliated/wwwww)
2020-09-21 21:56:26 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 21:57:16 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
2020-09-21 22:00:00 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Remote host closed the connection)
2020-09-21 22:00:34 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 22:01:01 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
2020-09-21 22:01:26 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net)
2020-09-21 22:01:49 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2020-09-21 22:03:29 +0200danvet_(~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds)
2020-09-21 22:04:14 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e)
2020-09-21 22:05:02 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2020-09-21 22:05:31 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 22:06:46 +0200xerox_(~xerox@unaffiliated/xerox) (Ping timeout: 272 seconds)
2020-09-21 22:08:24 +0200mariatsji(~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 246 seconds)
2020-09-21 22:10:06 +0200AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-09-21 22:10:10 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com)
2020-09-21 22:10:28 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 22:10:56 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2020-09-21 22:11:35 +0200juuandyy(~juuandyy@90.166.144.65)
2020-09-21 22:12:09 +0200lazerpants(c59d003d@197.157.0.61)
2020-09-21 22:14:27 +0200coot(~coot@37.30.51.178.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
2020-09-21 22:14:43 +0200hiroaki(~hiroaki@2a02:908:4b14:d500:8d4c:a111:9cac:718b)
2020-09-21 22:15:17 +0200AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-09-21 22:16:54 +0200jespada(~jespada@90.254.241.6) (Ping timeout: 272 seconds)
2020-09-21 22:18:46 +0200jespada(~jespada@90.254.241.6)
2020-09-21 22:20:29 +0200alx741(~alx741@186.178.110.130) (Quit: alx741)
2020-09-21 22:24:02 +0200ryansmccoy(~ryansmcco@156.96.151.132) (Ping timeout: 256 seconds)
2020-09-21 22:24:25 +0200ryansmccoy(~ryansmcco@193.37.254.27)
2020-09-21 22:25:33 +0200ggole(~ggole@2001:8003:8119:7200:e0af:f6f1:e650:ba35) (Quit: Leaving)
2020-09-21 22:27:15 +0200jonatanb(~jonatanb@83.24.161.211.ipv4.supernova.orange.pl) (Quit: Leaving...)
2020-09-21 22:27:16 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds)
2020-09-21 22:28:01 +0200AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving)
2020-09-21 22:28:05 +0200isovector1(~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net)
2020-09-21 22:28:56 +0200wroathe(~wroathe@c-73-24-27-54.hsd1.mn.comcast.net)
2020-09-21 22:32:38 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 22:34:06 +0200dhouthoo(~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.8)
2020-09-21 22:36:13 +0200mmohammadi9812(~mmohammad@2.178.188.114) (Quit: I quit (╯°□°)╯︵ ┻━┻)
2020-09-21 22:37:28 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds)
2020-09-21 22:39:11 +0200Kaivo(~Kaivo@104-200-86-99.mc.derytele.com) (Ping timeout: 258 seconds)
2020-09-21 22:39:12 +0200russruss83(~russruss@my.russellmcc.com)
2020-09-21 22:41:03 +0200NinjaTrappeur(~ninja@unaffiliated/ninjatrappeur) (Quit: WeeChat 2.8)
2020-09-21 22:41:27 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de)
2020-09-21 22:41:41 +0200Kaivo(~Kaivo@ec2-15-222-231-32.ca-central-1.compute.amazonaws.com)
2020-09-21 22:41:56 +0200NinjaTrappeur(~ninja@unaffiliated/ninjatrappeur)
2020-09-21 22:42:12 +0200russruss8(~russruss@my.russellmcc.com) (Ping timeout: 260 seconds)
2020-09-21 22:42:13 +0200russruss83russruss8
2020-09-21 22:42:42 +0200lazerpants(c59d003d@197.157.0.61) (Remote host closed the connection)
2020-09-21 22:45:56 +0200AlterEgo-(~ladew@124-198-158-163.dynamic.caiway.nl)
2020-09-21 22:46:02 +0200John20(~John@82.46.59.122) (Ping timeout: 272 seconds)
2020-09-21 22:47:11 +0200juuandyy(~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
2020-09-21 22:48:31 +0200aarvar(~foewfoiew@50.35.43.33)
2020-09-21 22:49:47 +0200thir(~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2020-09-21 22:50:11 +0200Dolly(585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection)
2020-09-21 22:50:36 +0200DavidEichmann(~david@43.240.198.146.dyn.plus.net) (Ping timeout: 260 seconds)
2020-09-21 22:51:33 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a)
2020-09-21 22:52:28 +0200ryansmccoy(~ryansmcco@193.37.254.27) (Ping timeout: 260 seconds)
2020-09-21 22:53:20 +0200ryansmccoy(~ryansmcco@156.96.151.132)
2020-09-21 22:53:43 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 22:55:20 +0200averell(~averell@unaffiliated/averell)
2020-09-21 22:55:33 +0200dirediresalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt)
2020-09-21 22:56:12 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com) (Ping timeout: 260 seconds)
2020-09-21 22:57:08 +0200DirefulSalt(DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Ping timeout: 260 seconds)
2020-09-21 22:58:19 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com)
2020-09-21 22:58:32 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2020-09-21 22:58:59 +0200xerox__(~xerox@unaffiliated/xerox)
2020-09-21 23:00:00 +0200glguy(x@freenode/staff/haskell.developer.glguy) (Quit: Quit)
2020-09-21 23:00:02 +0200adaminsull(~adaminsul@84.39.117.57) ()
2020-09-21 23:00:13 +0200glguy(x@freenode/staff/haskell.developer.glguy)
2020-09-21 23:00:26 +0200adamwespiser(~adam_wesp@209.6.42.110)
2020-09-21 23:01:26 +0200ystael(~ystael@116.sub-174-196-195.myvzw.com) (Ping timeout: 265 seconds)
2020-09-21 23:02:03 +0200adamwespiser(~adam_wesp@209.6.42.110) (Remote host closed the connection)
2020-09-21 23:02:21 +0200worc3131(~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786)
2020-09-21 23:02:24 +0200gmt(~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
2020-09-21 23:02:55 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
2020-09-21 23:03:01 +0200alp(~alp@2a01:e0a:58b:4920:24b6:1e8a:d1c8:1f2e) (Ping timeout: 272 seconds)
2020-09-21 23:03:11 +0200gmind[m](gmindmatri@gateway/shell/matrix.org/x-xbxgoalkishimjic)
2020-09-21 23:05:15 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2020-09-21 23:05:28 +0200hackageormolu 0.1.3.0 - A formatter for Haskell source code https://hackage.haskell.org/package/ormolu-0.1.3.0 (mrkkrp)
2020-09-21 23:06:10 +0200alx741(~alx741@186.178.110.130)
2020-09-21 23:07:03 +0200Bill--Door(550112fd@253.18.1.85.dynamic.wline.res.cust.swisscom.ch)
2020-09-21 23:07:12 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
2020-09-21 23:08:19 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com)
2020-09-21 23:09:47 +0200 <Bill--Door> How come the example in Control-Concurrent-STM-TChan doesn't type check? I don't quite understand how TChan works:
2020-09-21 23:10:13 +0200 <merijn> Which example?
2020-09-21 23:10:52 +0200 <Bill--Door> From what I've gathered in the docs, I want to use `newBroadcastTChanIO` and duplicate that for reads, but there's no `*IO` variant of `dupTChan`..
2020-09-21 23:10:54 +0200 <glguy> http://hackage.haskell.org/package/stm-2.5.0.0/docs/Control-Concurrent-STM-TChan.html#v:newBroadca…
2020-09-21 23:11:11 +0200 <glguy> Use 'atomically' to turn STM into IO
2020-09-21 23:11:14 +0200 <Bill--Door> Yeah, that one.
2020-09-21 23:11:28 +0200 <merijn> oh, hah
2020-09-21 23:11:31 +0200 <glguy> You'll rarely use the IO variants; they exist for some special cases
2020-09-21 23:11:34 +0200 <Bill--Door> But then I always get `thread blocked indefinitely in an STM transaction`, tried that too
2020-09-21 23:11:39 +0200 <merijn> someone fucked up and missed an "atomically" in the example
2020-09-21 23:11:50 +0200 <merijn> Bill--Door: That means there's someone reading but no one can ever write
2020-09-21 23:11:56 +0200 <Bill--Door> So, I am doing it right oof
2020-09-21 23:11:57 +0200 <merijn> (or vice versa)
2020-09-21 23:12:39 +0200 <Bill--Door> Wait, will the reader not be blocked & wait until the write happens?
2020-09-21 23:12:54 +0200worc3131(~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) (Remote host closed the connection)
2020-09-21 23:13:05 +0200 <glguy> The example exists as a demonstration of what *not* to do
2020-09-21 23:13:18 +0200 <glguy> a little less surprising that they didn't actually try to use it
2020-09-21 23:13:39 +0200 <merijn> Bill--Door: "thread blocked indefinitely" means "a thread blocked trying to read from a channel, but no thread can ever write to it because there are no other references"
2020-09-21 23:14:00 +0200 <merijn> i.e., "you wrote deadlocking code, but luckily we detected it"
2020-09-21 23:14:15 +0200 <Bill--Door> I'm not sure this is dead-locking: pastebin.com/fYq4B8XW
2020-09-21 23:14:30 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net)
2020-09-21 23:15:21 +0200 <Bill--Door> Everyone has a neighbour and writes there, reads what they got and so on. Somehow it deadlocks, it should work?
2020-09-21 23:15:31 +0200cosimone_(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.)
2020-09-21 23:15:57 +0200cosimone(~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6)
2020-09-21 23:17:12 +0200rprije(~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au)
2020-09-21 23:17:22 +0200 <merijn> Bill--Door: Eh, you never store 'c' and thus can't ever write to it
2020-09-21 23:17:25 +0200alp(~alp@2a01:e0a:58b:4920:154c:81bf:aad9:3bc2)
2020-09-21 23:17:39 +0200 <glguy> merijn: The c's are stored in chans
2020-09-21 23:17:39 +0200 <merijn> oh wait, the net does
2020-09-21 23:17:42 +0200 <glguy> which get put into net
2020-09-21 23:18:08 +0200 <glguy> though I still don't see why broadcast chans are being used at all yet
2020-09-21 23:18:32 +0200 <glguy> any chance this is related to AoC?
2020-09-21 23:18:35 +0200heatsink(~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2020-09-21 23:18:40 +0200 <Bill--Door> I do the `inbound <- atomically $ dupTChan c` and use `inbound` instead, like that example does
2020-09-21 23:18:50 +0200 <merijn> Where are they read, though?
2020-09-21 23:18:52 +0200 <glguy> Bill--Door: The example is showing you what not to do
2020-09-21 23:19:26 +0200 <Bill--Door> But even when I change to using `c` and `newTChanIO` which apparently leads to memory-leaks, it doesn't change
2020-09-21 23:19:32 +0200 <glguy> if you have one reader and one writer you don't need a broadcast chan
2020-09-21 23:19:44 +0200 <glguy> I mean:
2020-09-21 23:19:53 +0200 <Bill--Door> There might be multiple writers but single readers
2020-09-21 23:19:55 +0200 <glguy> if you have one reader (doesn't matter how many writters)
2020-09-21 23:20:03 +0200 <glguy> then you don't need a broadcast chan
2020-09-21 23:20:19 +0200 <merijn> glguy: If you never have 0 readers you don't need a broadcast chan
2020-09-21 23:20:26 +0200 <merijn> That's the real thing
2020-09-21 23:20:38 +0200 <glguy> the code never actually forks off all the listeners
2020-09-21 23:21:42 +0200 <Bill--Door> Oh, so I just use `c` from `newTChanIO`, but it still locks: pastebin.com/T2CBXMaM
2020-09-21 23:22:08 +0200 <glguy> You'll need to fork a thread per participant
2020-09-21 23:22:51 +0200 <Bill--Door> Oooh, crap
2020-09-21 23:23:07 +0200 <Bill--Door> I've been staring at this for way too long... thanks so much!
2020-09-21 23:23:44 +0200darjeeling_(~darjeelin@122.245.219.58) (Ping timeout: 260 seconds)
2020-09-21 23:23:45 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com) (Ping timeout: 240 seconds)
2020-09-21 23:24:55 +0200 <glguy> Bill--Door: Is this homework? online challenge problem? something you're just making up?
2020-09-21 23:25:16 +0200carlomagno(~cararell@inet-hqmc02-o.oracle.com)
2020-09-21 23:26:04 +0200 <Bill--Door> Just making sth. up, why?
2020-09-21 23:26:27 +0200 <Bill--Door> It does work (not deadlock that is) now, but I have some issues w/ logging.
2020-09-21 23:26:37 +0200darjeeling_(~darjeelin@122.245.219.58)
2020-09-21 23:26:48 +0200 <glguy> 1) why not? 2) helps to see the actual problem description 3) reminds me of something else
2020-09-21 23:26:50 +0200 <Bill--Door> I'd like to implement some simulations of multi-party protocols we looked at in uni
2020-09-21 23:28:06 +0200 <Bill--Door> In such a case my approach with `TChan` isn't completely flawed, or is it?
2020-09-21 23:28:47 +0200falafel(~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 260 seconds)
2020-09-21 23:29:03 +0200isovector1(~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net) (Ping timeout: 260 seconds)
2020-09-21 23:30:38 +0200 <Bill--Door> btw. what does this remind you of?
2020-09-21 23:30:41 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
2020-09-21 23:31:01 +0200 <glguy> Some problems from Advent of Code 2019
2020-09-21 23:31:50 +0200 <glguy> making bunch of TChans for different threads to communicate like this is fine. If you have only a single reader TQueue is a little more efficient than TChan, but it doesn't really matter for a toy
2020-09-21 23:32:50 +0200 <Bill--Door> Didn't know about advent of code, looks pretty cool. I used to do some Project Euler, but I don't think I ever used Haskell there
2020-09-21 23:33:17 +0200 <glguy> aoc is more programming focused than pe
2020-09-21 23:34:55 +0200 <Bill--Door> Yeah, PE is solely maths. Plus maybe some clever algorithms but still it got too hard at some point, maybe I should go back one day
2020-09-21 23:36:24 +0200__monty__(~toonn@unaffiliated/toonn) (Quit: leaving)
2020-09-21 23:38:27 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net)
2020-09-21 23:39:02 +0200ystael(~ystael@209.6.50.55)
2020-09-21 23:41:01 +0200hiroaki(~hiroaki@2a02:908:4b14:d500:8d4c:a111:9cac:718b) (Ping timeout: 272 seconds)
2020-09-21 23:44:44 +0200ahmr88(~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection)
2020-09-21 23:45:37 +0200 <glguy> Bill--Door: For example: https://adventofcode.com/2019/day/23
2020-09-21 23:46:50 +0200hyperisco(~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 272 seconds)
2020-09-21 23:47:05 +0200Ariakenom(~Ariakenom@h-98-128-229-34.NA.cust.bahnhof.se) (Quit: Leaving)
2020-09-21 23:52:20 +0200Kampala(~Kampala@84.39.117.57)
2020-09-21 23:55:25 +0200mnrmnaugh(~mnrmnaugh@unaffiliated/mnrmnaugh) (Read error: Connection reset by peer)
2020-09-21 23:56:02 +0200mnrmnaugh(~mnrmnaugh@unaffiliated/mnrmnaugh)
2020-09-21 23:56:46 +0200polyrain(~polyrain@2001:8003:e501:6901:c488:3d8b:4de5:8b83)
2020-09-21 23:58:45 +0200Dolly(585fd1fd@ti0203q160-5312.bb.online.no)
2020-09-21 23:58:51 +0200Dolly(585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection)
2020-09-21 23:59:11 +0200fendor(~fendor@77.119.128.64.wireless.dyn.drei.com) (Remote host closed the connection)