2021/12/08

2021-12-08 00:00:13 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 00:03:10 +0100 <monochrom> dminuoso: Some users of ApplicativeDo use the ugly trick of "pure (let y=x+1 etc in ...)". Maybe you won't mind it as a compromise.
2021-12-08 00:03:14 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-12-08 00:03:44 +0100 <dminuoso> monochrom: Oh, that will work? o.o
2021-12-08 00:03:53 +0100 <dminuoso> I definitely wont mind. Thanks for the tip
2021-12-08 00:04:11 +0100Sgeo(~Sgeo@user/sgeo)
2021-12-08 00:04:14 +0100juri_(~juri@178.63.35.222) (Ping timeout: 252 seconds)
2021-12-08 00:04:35 +0100 <monochrom> It is a bit ugly, especially considering the dilemma of how to even layout multiple bindings in the first place.
2021-12-08 00:05:31 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 00:07:12 +0100max22-(~maxime@2a01cb08833598007f53408425037c9d.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-12-08 00:08:45 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 00:09:20 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2021-12-08 00:09:48 +0100Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-12-08 00:11:20 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-08 00:12:32 +0100 <dminuoso> Since I frequently layout like that, it seems fine with me
2021-12-08 00:12:50 +0100img(~img@user/img)
2021-12-08 00:13:06 +0100shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-12-08 00:14:15 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2021-12-08 00:14:21 +0100img(~img@user/img) (Client Quit)
2021-12-08 00:14:36 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 00:15:48 +0100img(~img@user/img)
2021-12-08 00:17:24 +0100 <Axman6> edwardk: I made a thing which allows you do use discrimination with generics-sop, and wondered if there was a better way to do this: https://paste.tomsmeding.com/jovB7kDq. I know it's redundant given the current implementation's GHC.Generics support, but fun nonetheless, and might end up being faster if https://github.com/well-typed/generics-sop/pull/129 ever gets merged. I'm mostly wondering if there's a way to avoid the Maybe in the SmallArray (Maybe (m (b -
2021-12-08 00:17:24 +0100 <Axman6> > m ())))
2021-12-08 00:17:26 +0100 <lambdabot> <hint>:1:5: error: parse error on input ‘)’
2021-12-08 00:17:58 +0100 <Axman6> ... did that message get split right at the '>'?
2021-12-08 00:18:57 +0100 <geekosaur> yep
2021-12-08 00:19:05 +0100 <Axman6> That's amazing
2021-12-08 00:20:04 +0100 <Axman6> glguy: how hard do you thnk it would be for glirc to highlight where messages would be split while typing? not a super useful feature, but kinda fun
2021-12-08 00:20:50 +0100 <glguy> I guess we just need to decide what it would look like
2021-12-08 00:20:58 +0100 <glguy> the message splitting happens pretty late in the pipeline
2021-12-08 00:21:22 +0100 <glguy> so we'd need to get the information needed up into the textbox renderer
2021-12-08 00:22:23 +0100 <Axman6> how is that length decided? is it a protocol thing, a server setting?
2021-12-08 00:22:59 +0100 <glguy> The protocol says messages can be 512 bytes long. So you have to consider UTF-8 encoding, your nickname, username, and hostname, the channel you're sending to
2021-12-08 00:23:20 +0100 <Axman6> hmm, interesting, yeah that is a little more difficult
2021-12-08 00:24:07 +0100 <glguy> so there's some code in there to avoid splitting in the middle of a UTF-8 encoded codepoint and some stuff to track what the client things your username, nickname, and hostname are
2021-12-08 00:24:31 +0100 <dminuoso> glguy: By the way, is there a reason you chose `*` over `-` for config-value?
2021-12-08 00:24:48 +0100 <dminuoso> In some way, `-` would have been nice because that would have enabled various YAML tooling to smoothly interoperate with it.
2021-12-08 00:25:14 +0100 <dminuoso> Say YAML-based syntax highlighting, or even using `yq`
2021-12-08 00:25:16 +0100 <glguy> YAML's horible treatment of strings would make it a bit fussy to use across
2021-12-08 00:25:33 +0100 <janus> where can 'where' blocks go? does it change with BlockArguments?
2021-12-08 00:25:36 +0100 <dminuoso> Well, it seems at first glance with `-` any config-value file would at least be valid YAML
2021-12-08 00:25:39 +0100 <dminuoso> Nothing more
2021-12-08 00:25:49 +0100 <glguy> I don't remember if there was a reason for picking one over the other at this point
2021-12-08 00:26:27 +0100 <geekosaur> janus, at the end of any declaration: "module", "class", "instance", function definition equation, etc.
2021-12-08 00:26:35 +0100 <geekosaur> BlockArguments does not affect this
2021-12-08 00:26:51 +0100 <glguy> I use -- for comments (a la Haskell) so maybe at the time I was trying to be sufficiently distinct from that?
2021-12-08 00:27:00 +0100 <janus> geekosaur: but what is the motivation for now allowing it anywhere let..in can go?
2021-12-08 00:27:00 +0100 <glguy> otherwise there's probably not any particular reason
2021-12-08 00:27:29 +0100 <geekosaur> janus, so it can scope over guards in a function/equation definition
2021-12-08 00:27:31 +0100darchitect(~darchitec@2a00:23c6:3584:df00:7dec:bf13:8fa:748c) (Ping timeout: 252 seconds)
2021-12-08 00:27:47 +0100 <glguy> dminuoso: I have syntax highlighting for Vim, at least :) (no I don't think that resolves your issue)
2021-12-08 00:27:49 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net) (Ping timeout: 240 seconds)
2021-12-08 00:29:10 +0100 <geekosaur> also so it is consistent with all other uses of "where"
2021-12-08 00:29:13 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 00:29:35 +0100 <dminuoso> Would alex/happy allow for parametrizing over a token, such that a user could customize it with some kind of `parseWithOpts (defaultOpts { listChar = '-' })?
2021-12-08 00:30:01 +0100 <dminuoso> Im completely unfamiliar with these tools, so I wouldn't even know where to look
2021-12-08 00:30:23 +0100 <glguy> dminuoso: ehh, I not really, but what you can do is like what GHC does, parse everything and then reject some stuff later
2021-12-08 00:30:45 +0100 <glguy> making bare - lex the same way as * , or as an alt* token and putting that in the parser would work
2021-12-08 00:31:08 +0100 <oats> aha, I found the magic data structure to make Day 6 veryfast. multiset \o/
2021-12-08 00:31:27 +0100 <glguy> I don't mind supporting both styles at the same time; i'd want to think about it for a moment to decide that I wasn't boxing myself out of some other use of - later
2021-12-08 00:31:47 +0100 <glguy> I think some markdowns support more than one list element delimiter
2021-12-08 00:31:54 +0100 <dminuoso> glguy: So if I was to bolt this on, a separate token seems more useful, as we could have a backwards compatible mode and let the user simply decide which style they want
2021-12-08 00:32:18 +0100 <dsal> oats: Is taht faster than an IntSet?
2021-12-08 00:32:30 +0100 <dsal> Er, IntMap
2021-12-08 00:32:31 +0100 <dminuoso> Though this is edge case thinking, it seems at worst we would just suddenly enable parsing previously invalid config files
2021-12-08 00:32:33 +0100 <glguy> dminuoso: are you using config-value for something already?
2021-12-08 00:32:41 +0100 <oats> dsal, no idea, I'd have to try
2021-12-08 00:32:41 +0100 <dminuoso> glguy: Im using config-schema everywhere! :)
2021-12-08 00:33:41 +0100 <dminuoso> Each tool comes with a `config-help` optparse applicative command, giving you interactive and always-up-to-date configuration documentation.
2021-12-08 00:34:02 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-12-08 00:34:19 +0100 <glguy> What's that do with optparse applicative?
2021-12-08 00:34:31 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 265 seconds)
2021-12-08 00:35:21 +0100 <dminuoso> Nothing really, Im just saying that each command line tool that takes a config also has some mode where it prints out the result of generateDocs
2021-12-08 00:35:27 +0100 <dminuoso> Which is the main selling point to me.
2021-12-08 00:35:37 +0100 <dminuoso> Tools that document their configuration themselves
2021-12-08 00:35:52 +0100 <dminuoso> No need to keep some CONFIG.md up-to-date with my code
2021-12-08 00:36:00 +0100 <glguy> yeah, having glirc being able to tell me all of its configuration fields is important to me remembering how to use it
2021-12-08 00:36:28 +0100 <glguy> way better than hoping I can remember what smart name I used for everything the first time
2021-12-08 00:36:34 +0100 <dminuoso> Indeed. :)
2021-12-08 00:36:53 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net)
2021-12-08 00:36:55 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 00:37:18 +0100 <dminuoso> And I find humans are terrible at keeping this kind of documentation up to date, so over time you get drift and typos
2021-12-08 00:37:32 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-08 00:37:39 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 00:38:40 +0100 <oats> dsal, `IntMultiSet` is just an `IntMap Int` under the hood lol
2021-12-08 00:38:47 +0100 <oats> just with some convenience functions on top
2021-12-08 00:39:16 +0100 <dsal> Oh I see. Yeah.
2021-12-08 00:39:49 +0100 <dminuoso> glguy: Ah by the way, it seems that adding a hyphen would disallow it being inside an atom.
2021-12-08 00:39:55 +0100 <dminuoso> Mmm.
2021-12-08 00:39:55 +0100Sgeo_(~Sgeo@user/sgeo)
2021-12-08 00:40:04 +0100 <glguy> err, why?
2021-12-08 00:40:29 +0100 <glguy> atoms never start with -
2021-12-08 00:40:31 +0100 <dsal> oats: My breeder is just this: https://www.irccloud.com/pastebin/eYZijgwl/breed.hs
2021-12-08 00:40:51 +0100 <dminuoso> Ahh I misread
2021-12-08 00:41:05 +0100 <dminuoso> glguy: If you're in principle happy with the idea, Ill make the necessary PR
2021-12-08 00:41:14 +0100 <glguy> negative numbers can start with -, but they have to have more than just a bare -
2021-12-08 00:41:57 +0100 <oats> dsal, https://github.com/oatberry/aoc2021-haskell/blob/main/src/Day6.hs
2021-12-08 00:42:23 +0100 <oats> I tried, like, all the listy monads hoping one would be performant :P
2021-12-08 00:42:35 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2021-12-08 00:43:02 +0100 <dsal> oats: well that's nice
2021-12-08 00:43:06 +0100 <glguy> dminuoso: I think I'd be OK with just adding this line below line 68: "-" { token_ Bullet }
2021-12-08 00:43:20 +0100 <oats> I thought so too 😊
2021-12-08 00:43:25 +0100xff0x(~xff0x@2001:1a81:52ad:7f00:863f:6855:4758:14df) (Ping timeout: 240 seconds)
2021-12-08 00:44:24 +0100 <dminuoso> glguy: My thinking is it's nice to have no ambiguous syntax. It might look odd if `- foo\n* bar\n- quux` was permisseable.
2021-12-08 00:44:37 +0100xff0x(~xff0x@2001:1a81:52ad:7f00:65a:88aa:1a84:9da4)
2021-12-08 00:44:58 +0100 <dminuoso> Plus, if we tokenize it as a separate character, we can defer the choice to the user.
2021-12-08 00:45:01 +0100 <glguy> dminuoso: to me "ambiguous syntax" means there are multiple interpretations
2021-12-08 00:45:07 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2021-12-08 00:45:11 +0100 <dminuoso> Perhaps I misused that term here.
2021-12-08 00:45:14 +0100 <glguy> and deferring it to the user means making the parser API more complicated
2021-12-08 00:45:35 +0100 <dminuoso> If everything has a default mode, it wont make it more complicated unless you opt-in
2021-12-08 00:45:58 +0100 <dminuoso> Say if you had `parse :: Text -> Either ParseError (Value Position); parse = parseWith defaultOpts`
2021-12-08 00:46:41 +0100 <glguy> In markdown you can use (from my current reading) + - *
2021-12-08 00:46:55 +0100 <glguy> and maybe you'd want to mix those up to make it easier to distinguish levels
2021-12-08 00:47:20 +0100 <glguy> I guess we could require each list to use all of one bullet token
2021-12-08 00:47:38 +0100 <glguy> thus making it easier to specify nested lists
2021-12-08 00:48:14 +0100 <dminuoso> Heh, for a while I was wishing for nix-style nested sections
2021-12-08 00:48:55 +0100 <dminuoso> After an hour or so I decided to restructure the config schema
2021-12-08 00:49:27 +0100 <dminuoso> Nested lists dont appear to have comfortable solutions, so this seems sensible
2021-12-08 00:50:40 +0100 <dsal> oats: this API is kind of weird. It looks like it's just here to solve this problem.
2021-12-08 00:51:08 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 00:51:26 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 00:53:21 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 00:53:42 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 00:53:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 00:54:39 +0100teo(~teo@user/teo) (Ping timeout: 252 seconds)
2021-12-08 00:56:50 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
2021-12-08 00:56:59 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 00:57:11 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-08 00:57:25 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 00:58:13 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds)
2021-12-08 00:58:23 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 00:58:44 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net) (Read error: Connection reset by peer)
2021-12-08 01:00:53 +0100xff0x(~xff0x@2001:1a81:52ad:7f00:65a:88aa:1a84:9da4) (Ping timeout: 252 seconds)
2021-12-08 01:02:20 +0100 <dsal> oats: It's actually faster than mine. Neat.
2021-12-08 01:02:48 +0100xff0x(~xff0x@2001:1a81:52dd:ce00:6ce:d182:5c9e:e129)
2021-12-08 01:04:06 +0100 <oats> dsal, the API for multiset?
2021-12-08 01:04:31 +0100 <oats> https://en.wikipedia.org/wiki/Multiset
2021-12-08 01:04:55 +0100 <dsal> Yeah, I've known about such a thing for a while, but it's never felt like something useful.
2021-12-08 01:05:50 +0100 <janus> seems like you can even have 'where' on case cases
2021-12-08 01:05:54 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 01:06:12 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 01:06:12 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Client Quit)
2021-12-08 01:06:30 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 01:08:59 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-12-08 01:10:55 +0100 <EvanR> really I thought where was only declarations
2021-12-08 01:11:01 +0100acidjnk_new(~acidjnk@p200300d0c7271e23ace56c846c004ca7.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2021-12-08 01:11:14 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-08 01:11:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-08 01:12:12 +0100 <monochrom> Sometimes it's joyful to take a look at the Haskell Report and discover extra things it supports :)
2021-12-08 01:14:10 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2021-12-08 01:15:07 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 265 seconds)
2021-12-08 01:18:35 +0100 <janus> % :t \case {() | n -> 0 where n = True}
2021-12-08 01:18:35 +0100 <yahb> janus: Num p => () -> p
2021-12-08 01:18:43 +0100cyphase(~cyphase@user/cyphase)
2021-12-08 01:18:57 +0100 <janus> :t \case {() | n -> 0; () | not n -> 1 where n = True}
2021-12-08 01:18:58 +0100 <lambdabot> error:
2021-12-08 01:18:58 +0100 <lambdabot> • Couldn't match expected type ‘Bool’ with actual type ‘Expr’
2021-12-08 01:18:58 +0100 <lambdabot> • In the expression: n
2021-12-08 01:19:15 +0100 <janus> how do i use where across cases with semicolon and brace based syntax?
2021-12-08 01:20:32 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-08 01:20:37 +0100Topsi(~Tobias@dyndsl-095-033-088-108.ewe-ip-backbone.de)
2021-12-08 01:21:00 +0100 <geekosaur> isn't the where on each case alternative?
2021-12-08 01:21:01 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Ping timeout: 240 seconds)
2021-12-08 01:21:10 +0100 <geekosaur> so the first one is using the n from simple-reflect
2021-12-08 01:21:12 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 01:21:58 +0100 <janus> oh
2021-12-08 01:21:59 +0100 <geekosaur> :t \case { () | n = 0 where n = True; () | not n -> 1 where n = True}
2021-12-08 01:22:00 +0100 <lambdabot> error: parse error on input ‘=’
2021-12-08 01:22:11 +0100 <geekosaur> :t \case { () | n -> 0 where n = True; () | not n -> 1 where n = True}
2021-12-08 01:22:12 +0100 <lambdabot> error: parse error on input ‘->’
2021-12-08 01:22:21 +0100 <janus> so in this case i would actually need to use let..in to achieve the desired effect of using a shared biding in guards
2021-12-08 01:22:29 +0100 <geekosaur> yeh
2021-12-08 01:22:47 +0100 <geekosaur> although I too seem to be doing something wrong
2021-12-08 01:23:01 +0100 <geekosaur> :t \case { () | n -> 0 where {n = True}; () | not n -> 1 where {n = True}}
2021-12-08 01:23:02 +0100 <lambdabot> Num p => () -> p
2021-12-08 01:23:27 +0100 <janus> aaah right, like with the let. gotta remember that around anything that uses ..=.. syntax i guess...
2021-12-08 01:23:57 +0100 <geekosaur> any time you have nested layouts (here case vs. where)
2021-12-08 01:24:04 +0100 <geekosaur> more commonly with do vs. let
2021-12-08 01:24:46 +0100k60(~user@static.100.218.46.78.clients.your-server.de)
2021-12-08 01:25:33 +0100 <janus> ah right, the case doesn't use equals but it still uses layout
2021-12-08 01:26:58 +0100 <geekosaur> do vs. case can also happen and doesn't involve = at all
2021-12-08 01:29:44 +0100pavonia(~user@user/siracusa)
2021-12-08 01:30:51 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2021-12-08 01:31:01 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 240 seconds)
2021-12-08 01:32:02 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 265 seconds)
2021-12-08 01:32:28 +0100k60`(~user@94.25.169.9)
2021-12-08 01:33:25 +0100k60(~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 240 seconds)
2021-12-08 01:35:49 +0100juri_(~juri@178.63.35.222)
2021-12-08 01:37:33 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 252 seconds)
2021-12-08 01:38:09 +0100shriekingnoise(~shrieking@186.137.144.80)
2021-12-08 01:39:15 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-12-08 01:41:14 +0100cyphase(~cyphase@user/cyphase)
2021-12-08 01:50:26 +0100 <monochrom> janus: There is not supposed to be a semicolon between "| guard1 -> e1" and "| guard2 -> e2"
2021-12-08 01:51:35 +0100 <monochrom> Corollary: The two "|"s do not have to be aligned.
2021-12-08 01:51:57 +0100 <EvanR> according this article on STG certain function applications involve a check for stack overflow before pushing arguments, so it can maybe grow stack space
2021-12-08 01:52:13 +0100 <EvanR> seems like the kind of thing you could use a page fault for
2021-12-08 01:52:51 +0100 <EvanR> have the cpu do the check
2021-12-08 01:52:57 +0100 <monochrom> Next, "| guard1 -> e1" and "| guard2 -> e2" shares the same "where", if you have a "where".
2021-12-08 01:53:23 +0100 <geekosaur> notice that they actually made separate case clauses
2021-12-08 01:53:44 +0100 <monochrom> OK yeah. But one doesn't need to.
2021-12-08 01:55:46 +0100 <dminuoso> glguy: How strongly do you feel about not providing some `parse = parseWith defaultOpts` and `parseWith :: ParseOpts -> T.Text -> Either ParseError (Value Position)`
2021-12-08 01:55:56 +0100 <dminuoso> Asking because I think I have it carved out
2021-12-08 01:56:24 +0100 <monochrom> Page fault may be too expensive.
2021-12-08 01:56:44 +0100 <geekosaur> it's how C does it
2021-12-08 01:56:47 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 01:57:02 +0100 <geekosaur> every function has a stack probe which may incur a page fault that rows the stack segment
2021-12-08 01:57:07 +0100 <geekosaur> *grows
2021-12-08 01:57:12 +0100 <dminuoso> The grammar is glued in as well, supporting only a singular style at a given level
2021-12-08 01:57:12 +0100 <monochrom> Also the fear of "what if someone ports GHC to a platform that doesn't have it" but I guess I don't know how important it is.
2021-12-08 01:57:24 +0100 <dminuoso> So mixing -/+/* in a list is not possible
2021-12-08 01:57:42 +0100 <geekosaur> this said, the stack probe method does not play well with per-thread stacks
2021-12-08 01:58:12 +0100 <geekosaur> (typically C threads other than the main thread start with fixed stack sizes that cannot be grown dynamically)
2021-12-08 01:58:28 +0100 <monochrom> That is very sad.
2021-12-08 01:58:40 +0100 <EvanR> mildly flabbergasted
2021-12-08 02:03:49 +0100 <monochrom> Err no, not sad, I have always coded in C without relying on growable stack.
2021-12-08 02:04:07 +0100 <monochrom> If you have given up hope, nothing disappoints you any more.
2021-12-08 02:04:25 +0100xff0x(~xff0x@2001:1a81:52dd:ce00:6ce:d182:5c9e:e129) (Ping timeout: 265 seconds)
2021-12-08 02:04:59 +0100xff0x(~xff0x@2001:1a81:52dd:ce00:6a6c:bf95:6ade:ac72)
2021-12-08 02:06:20 +0100dmenz(~daniel@2804:14d:5cd4:5e94::d)
2021-12-08 02:06:53 +0100 <AndreasK> EvanR: These checks are also used to stop threads. The runtime sets available stack/heap to zero. The function checks, and calls into the rts for gc if there is not enough space. The RTS can suspend the thread.
2021-12-08 02:07:17 +0100 <AndreasK> Not that you couldn't also do that with probes. It's what the JVM does iirc.
2021-12-08 02:08:59 +0100 <EvanR> a thread can also suspend when it tries to push something on the stack?
2021-12-08 02:09:34 +0100 <AndreasK> EvanR: Kinda. For any given piece of code you know how much stack space it needs
2021-12-08 02:09:49 +0100 <AndreasK> so we check for available space first, then do all the pushing
2021-12-08 02:09:55 +0100 <monochrom> Well, last time, we discussed that the time's-up handler fakes "heap full". Perhaps it also fakes "stack full", too.
2021-12-08 02:10:21 +0100 <AndreasK> Yeah iirc it fakes both
2021-12-08 02:10:32 +0100 <monochrom> But it is true that GHC-generated asm code does do "if stack full then call GC else push"
2021-12-08 02:11:04 +0100 <monochrom> in addition to "if heap full then call GC else store data"
2021-12-08 02:11:22 +0100vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2021-12-08 02:11:46 +0100 <monochrom> where "call GC" plays the double role of making space and switching to another thread.
2021-12-08 02:11:49 +0100 <EvanR> hopefully the gc doesn't help you with the full stack by removing parts xD
2021-12-08 02:11:57 +0100 <AndreasK> I was mistaken, we only fake the Hp so I guess we can't stop threads on entering stack-using code.
2021-12-08 02:12:56 +0100 <glguy> dminuoso: How about this? https://github.com/glguy/config-value/pull/9
2021-12-08 02:13:52 +0100 <AndreasK> EvanR: I think there is some kind of optimization ("Stack squeezin") that can safely remove things from your stack for haskell applications.
2021-12-08 02:13:56 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-12-08 02:14:06 +0100 <dminuoso> glguy: Ah, I did not know you could have parametrized production rules. This is cool
2021-12-08 02:14:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 02:14:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 02:14:52 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 02:14:52 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-08 02:14:54 +0100 <EvanR> how does that not violate stack invariant
2021-12-08 02:15:19 +0100 <AndreasK> EvanR: What invariant exactly?
2021-12-08 02:15:50 +0100 <EvanR> N pops after N pushes leaves you with the original stack, I guess
2021-12-08 02:15:56 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 268 seconds)
2021-12-08 02:18:05 +0100 <monochrom> Is that like TCO but done during run time and after unnecessary data have been pushed?
2021-12-08 02:18:27 +0100 <AndreasK> I'm trying to find out what it does atm. It's been a while :D
2021-12-08 02:19:29 +0100 <glguy> dminuoso: happy's pretty great ^_^
2021-12-08 02:20:20 +0100 <dminuoso> But yeah, the PR looks good
2021-12-08 02:22:06 +0100 <monochrom> + - * bullet points form a ring. <duck>
2021-12-08 02:22:50 +0100 <dminuoso> Algebra of lists
2021-12-08 02:24:43 +0100 <AndreasK> monochrom: Seems to be about collapsing multiple update frames next to each other into a single frame.
2021-12-08 02:25:27 +0100 <monochrom> Hrm, update frames, I have a vague memory of those.
2021-12-08 02:27:21 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 02:28:18 +0100 <monochrom> I think https://github.com/quchen/stgi explains it.
2021-12-08 02:28:39 +0100 <AndreasK> Squeezing or the frames?
2021-12-08 02:29:20 +0100 <monochrom> The update frames.
2021-12-08 02:30:08 +0100 <AndreasK> Got my hopes up for a moment :D
2021-12-08 02:30:37 +0100 <monochrom> Oh, merging them is "just engineering" >:)
2021-12-08 02:30:53 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 02:31:34 +0100 <AndreasK> It seems stack squeezing transforms [Update T1, Update T2, Update T3] into [Update T1] and in the Heap [T2 = T1, T3 = T1].
2021-12-08 02:31:49 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-12-08 02:32:28 +0100Pent(sid313808@id-313808.lymington.irccloud.com) (Quit: Updating details, brb)
2021-12-08 02:32:41 +0100Pent(sid313808@id-313808.lymington.irccloud.com)
2021-12-08 02:33:41 +0100 <AndreasK> And then we can shift up all the frames below Update T3 by however many bytes the removed update frames took up.
2021-12-08 02:33:58 +0100 <AndreasK> And GC will remove the indirections in the heap.
2021-12-08 02:34:02 +0100slack1256(~slack1256@191.125.99.72) (Remote host closed the connection)
2021-12-08 02:34:12 +0100 <AndreasK> Surprised it's worth it
2021-12-08 02:34:15 +0100hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-12-08 02:35:21 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-12-08 02:35:21 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
2021-12-08 02:35:42 +0100 <AndreasK> EvanR: I guess the key thing being then that nothing is changed *within* any stack frame. So to some code that runs your invariant seems to hold.
2021-12-08 02:35:49 +0100nfd(~nfd@user/nfd) (Ping timeout: 240 seconds)
2021-12-08 02:36:35 +0100 <geekosaur> sounds like something from the bad old days of 4GB machines :)
2021-12-08 02:36:37 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-08 02:36:59 +0100 <geekosaur> (or even older days but I doubt any variety of haskell ran on those machines :)
2021-12-08 02:37:07 +0100 <AndreasK> I guess this happens if you have foo = bar; bar = baz; baz = urk; urk = whatever.
2021-12-08 02:37:23 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net)
2021-12-08 02:37:24 +0100hololeap(~hololeap@user/hololeap)
2021-12-08 02:38:33 +0100 <EvanR> haskell is from the year 1990 right, was 32bit even a thing yet ? xD
2021-12-08 02:39:28 +0100 <dsal> I had a bug in some ocaml code back in the day because ints were 30 bit.
2021-12-08 02:39:34 +0100 <geekosaur> 68020 existed so yes
2021-12-08 02:39:34 +0100 <dsal> then I had a bug in the same code because of 31 bits.
2021-12-08 02:39:45 +0100 <int-e> EvanR: yes, even in x86 land
2021-12-08 02:39:52 +0100 <dsal> By the time I hit 32 bits, it wasn't my bug anymore.
2021-12-08 02:40:37 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2021-12-08 02:41:08 +0100 <EvanR> 30 bits, to conveniently store groups of 10 bits for decimals no doubt
2021-12-08 02:41:31 +0100 <geekosaur> 2 bits stolen for GC
2021-12-08 02:41:36 +0100 <EvanR> right just kidding
2021-12-08 02:41:58 +0100 <geekosaur> takes only 4 bits to represent decimals
2021-12-08 02:42:14 +0100 <geekosaur> (oh god, BCD)
2021-12-08 02:42:36 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 265 seconds)
2021-12-08 02:42:43 +0100 <AndreasK> Using the highest bit to indicate if something is an object or an int was (is?) popular. I think the haskell report even says Int's are "at least 30 bit's wide"
2021-12-08 02:42:49 +0100 <geekosaur> when did intel finally jettison ABCD or whatever the instruction was?
2021-12-08 02:42:52 +0100 <int-e> geekosaur: what a waste though when you can stuff 9 digits into 30 bits
2021-12-08 02:43:10 +0100 <EvanR> decimal arithmetic is not supported in 64bit mode
2021-12-08 02:43:13 +0100 <geekosaur> AndreasK, yes and I almost mentioned that
2021-12-08 02:43:28 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2021-12-08 02:43:47 +0100 <int-e> . o O ( The best thing BCD ever gave me was the AAA mnemonic. )
2021-12-08 02:43:49 +0100dmenz(~daniel@2804:14d:5cd4:5e94::d) (Ping timeout: 240 seconds)
2021-12-08 02:44:56 +0100 <int-e> Which, actually, is for unpacked BCD, a byte per digit. What a weird thing to have hardware support for :P
2021-12-08 02:45:00 +0100 <dsal> int-e: what's that?
2021-12-08 02:45:26 +0100 <geekosaur> COBOL used to offer that one too
2021-12-08 02:45:31 +0100 <geekosaur> unpacked decimal
2021-12-08 02:45:43 +0100 <int-e> dsal: i386 ... it takes the result of adding two unpacked BCD numbers and does the carry propagation (so some adjustment when the lower byte is larger than 9)
2021-12-08 02:46:04 +0100 <dsal> What's the "AAA" though?
2021-12-08 02:46:05 +0100 <int-e> s/i386/80x86/
2021-12-08 02:46:11 +0100 <dsal> I assume that means something very different to me.
2021-12-08 02:46:17 +0100 <geekosaur> right, so that was the intel version of the one I mentioned earlier which was probably the zilog mnemonic
2021-12-08 02:46:18 +0100 <int-e> "ASCII Adjust after Addition"
2021-12-08 02:46:27 +0100 <dsal> I didn't even know BCD was a thing in Intel. I didn't use them much.
2021-12-08 02:46:30 +0100 <AndreasK> It seems we only check the last chunk of a stack for squeezing, and only when we pause the thread. So I guess checking for it isn't that expensive. And every update you squeeze out is one less execution of the thunk update code
2021-12-08 02:46:34 +0100 <dsal> Oh interesting. AAaA
2021-12-08 02:47:05 +0100AndreasKheads of to check how often we actually squeeze
2021-12-08 02:47:26 +0100 <geekosaur> I think DECIMAL was unpacked decimal, COMPUTATIONAL was packed decimal, COMPUTATIONAL-3 was binary?
2021-12-08 02:47:39 +0100 <EvanR> AAAAAaaaaaaaa....
2021-12-08 02:47:43 +0100 <dsal> nix collect-garbage deletes gmp and libffi which are apparently required.
2021-12-08 02:47:52 +0100 <geekosaur> reasonable reaction to COBOL :þ
2021-12-08 02:47:55 +0100 <monochrom> Hrm, why is it 3 for binary?
2021-12-08 02:48:08 +0100 <geekosaur> ask IBM, 'twas their idea
2021-12-08 02:48:16 +0100 <monochrom> Heh OK!
2021-12-08 02:48:21 +0100 <int-e> Yeah there seems to be an unwritten rule that every architecture needs its own mnemonic for assembly language.
2021-12-08 02:48:33 +0100monochromconjures jokes about 3-value logics
2021-12-08 02:48:39 +0100 <geekosaur> I had no idea, just knew that COMP-3 was what every other language used for numbers
2021-12-08 02:48:43 +0100 <EvanR> true false filenotfound
2021-12-08 02:48:49 +0100dsalthought the same
2021-12-08 02:49:24 +0100 <jackdk> http://www.coboloncogs.org/INDEX.HTM I'm sure you've seen this joke because it is old
2021-12-08 02:49:25 +0100 <monochrom> But yes Intel floating point has native hardware support for 10-digit BCD.
2021-12-08 02:49:28 +0100 <int-e> monochrom: wouldn't it be fun if balanced ternary was the standard hardware number representation
2021-12-08 02:49:50 +0100 <monochrom> \∩/ Cantor sets
2021-12-08 02:49:59 +0100 <geekosaur> I think I was the first one to post it here, back 2007ish
2021-12-08 02:50:01 +0100 <int-e> (no sign bits!)
2021-12-08 02:50:08 +0100pfurla(~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14)
2021-12-08 02:50:31 +0100 <EvanR> unum arithmetic!
2021-12-08 02:51:26 +0100 <dsal> Is there any meaningful way to "see" rules being applied?
2021-12-08 02:51:33 +0100 <dsal> (other than, I guess, core)
2021-12-08 02:52:57 +0100 <geekosaur> -ddump-rule-firings?
2021-12-08 02:53:33 +0100 <int-e> and -ddump-rule-rewrites
2021-12-08 02:53:34 +0100 <dsal> Oh nice! Thanks
2021-12-08 02:53:36 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 02:55:11 +0100 <dsal> Tiny file. Lots of rewrites.
2021-12-08 02:55:40 +0100 <int-e> Oh there's a -drule-check that's supposed to tell you why a rule doesn't fire, I wonder how that works. https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/debugging.html is a fun read
2021-12-08 02:56:01 +0100emf_(~emf@2620:10d:c091:480::1:102a) (Ping timeout: 268 seconds)
2021-12-08 02:56:12 +0100 <dsal> Oh cool. It's doing a thing I thought it might do, but couldn't find something that suggested it should.
2021-12-08 02:56:42 +0100 <dsal> I'm doing a length of a filter and was considering rewriting it to a foldr, but GHC already thought of that.
2021-12-08 02:57:27 +0100mmhat(~mmh@55d4422a.access.ecotel.net) (Quit: WeeChat 3.3)
2021-12-08 02:58:09 +0100 <int-e> yeah build/foldr fusion should be able to do that :P
2021-12-08 02:58:35 +0100 <int-e> but can it go the extra mile and make a foldl'...
2021-12-08 02:59:01 +0100 <dsal> This is an incredibly large amount of output. heh.
2021-12-08 03:00:14 +0100 <int-e> Just for completeness, if you are just interested in which rules are relevant, -ddump-rules is enough.
2021-12-08 03:00:27 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 03:00:31 +0100 <int-e> Uh
2021-12-08 03:00:50 +0100 <int-e> Sorry, that would be -ddump-rules-firings and that was already mentioned.
2021-12-08 03:01:13 +0100kennyd(~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2021-12-08 03:01:25 +0100trillp(~user@69.233.98.238)
2021-12-08 03:01:40 +0100 <dsal> Yeah, though it's a bit harder to understand.
2021-12-08 03:01:42 +0100 <dsal> Rule fired: filter (GHC.List)
2021-12-08 03:01:42 +0100 <dsal> Rule fired: length (GHC.List)
2021-12-08 03:01:42 +0100 <dsal> Rule fired: fold/build (GHC.Base)
2021-12-08 03:03:17 +0100 <dsal> core's a little noisy to read, but it's neat to see what those rules actually do.
2021-12-08 03:06:32 +0100 <dsal> Actually, yeah, that's not too bad as long as I have source available.
2021-12-08 03:07:04 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 03:07:16 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 03:07:25 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2021-12-08 03:08:11 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 03:09:54 +0100 <dsal> Thanks. I've now confirmed the code was already doing exactly what I was about to rewrite the code to do.
2021-12-08 03:13:01 +0100xff0x(~xff0x@2001:1a81:52dd:ce00:6a6c:bf95:6ade:ac72) (Ping timeout: 240 seconds)
2021-12-08 03:14:50 +0100shailangsa(~shailangs@host86-186-136-27.range86-186.btcentralplus.com) (Remote host closed the connection)
2021-12-08 03:15:10 +0100xff0x(~xff0x@2001:1a81:52f0:d600:c9ec:7be2:e073:b0e)
2021-12-08 03:17:50 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 03:18:19 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 03:28:03 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 256 seconds)
2021-12-08 03:39:05 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 03:39:35 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 03:40:53 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
2021-12-08 03:41:50 +0100genieliu(~genieliu@103.37.140.38)
2021-12-08 03:41:54 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 03:42:13 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-12-08 03:42:16 +0100tito(tito@tilde.team) (Ping timeout: 268 seconds)
2021-12-08 03:43:26 +0100incertia(~incertia@d4-50-26-103.nap.wideopenwest.com)
2021-12-08 03:45:10 +0100tito(tito@tilde.team)
2021-12-08 03:49:32 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3)
2021-12-08 03:49:55 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-08 03:52:05 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
2021-12-08 03:53:13 +0100jkaye(~jkaye@2601:281:8300:7530:6e92:54cb:12e7:3fa1) (Ping timeout: 252 seconds)
2021-12-08 03:53:37 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 03:53:54 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 03:54:16 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Client Quit)
2021-12-08 03:54:35 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 03:54:52 +0100shailangsa(~shailangs@host86-186-136-27.range86-186.btcentralplus.com)
2021-12-08 03:59:31 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 03:59:50 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 04:00:03 +0100sander(~sander@user/sander) (Quit: So long! :))
2021-12-08 04:00:37 +0100pfurla(~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 04:01:01 +0100neurocyte0132889(~neurocyte@user/neurocyte) (Ping timeout: 240 seconds)
2021-12-08 04:01:32 +0100sander(~sander@user/sander)
2021-12-08 04:02:50 +0100tito(tito@tilde.team) (Ping timeout: 265 seconds)
2021-12-08 04:05:34 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net)
2021-12-08 04:05:49 +0100tito(tito@tilde.team)
2021-12-08 04:08:14 +0100pfurla(~pfurla@201.17.118.230)
2021-12-08 04:17:43 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2021-12-08 04:17:43 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2021-12-08 04:17:43 +0100finn_elijaFinnElija
2021-12-08 04:20:46 +0100boxscape_(~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2021-12-08 04:21:37 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-08 04:25:57 +0100dmenz(~dmenz@2804:14d:5cd4:5e94::d)
2021-12-08 04:26:05 +0100dmenezes(~dmenz@2804:14d:5cd4:5e94::d)
2021-12-08 04:26:24 +0100dmenezes(~dmenz@2804:14d:5cd4:5e94::d) (Remote host closed the connection)
2021-12-08 04:32:10 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-08 04:32:31 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 04:32:37 +0100td_(~td@94.134.91.180) (Ping timeout: 240 seconds)
2021-12-08 04:32:39 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-08 04:34:29 +0100td_(~td@94.134.91.212)
2021-12-08 04:34:50 +0100mbuf(~Shakthi@223.178.121.64)
2021-12-08 04:37:09 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-12-08 04:37:12 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds)
2021-12-08 04:37:27 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 04:37:42 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 04:37:49 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 04:38:02 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 04:38:10 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 04:38:25 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 04:38:32 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 04:39:03 +0100JimL(~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 252 seconds)
2021-12-08 04:42:26 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2021-12-08 04:43:39 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2021-12-08 04:48:53 +0100 <glguy> dminuoso: do you use/know-about the macro expansion stuff in config-value?
2021-12-08 04:54:37 +0100tito(tito@tilde.team) (Ping timeout: 240 seconds)
2021-12-08 04:55:05 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 04:56:32 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2021-12-08 04:56:46 +0100tito(tito@tilde.team)
2021-12-08 04:59:25 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 05:02:53 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 05:09:16 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 05:13:53 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-12-08 05:20:40 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 05:22:13 +0100tito(tito@tilde.team) (Ping timeout: 240 seconds)
2021-12-08 05:23:27 +0100tito(tito@tilde.team)
2021-12-08 05:25:28 +0100user0(~aj@langw.roketelkom.co.ug)
2021-12-08 05:33:32 +0100Topsi(~Tobias@dyndsl-095-033-088-108.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2021-12-08 05:33:53 +0100user01(~aj@154.0.137.32)
2021-12-08 05:34:46 +0100pfurla(~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 05:35:01 +0100genieliu(~genieliu@103.37.140.38) (Ping timeout: 240 seconds)
2021-12-08 05:36:07 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds)
2021-12-08 05:37:01 +0100user0(~aj@langw.roketelkom.co.ug) (Ping timeout: 240 seconds)
2021-12-08 05:37:52 +0100user0(~aj@129.205.7.82)
2021-12-08 05:38:32 +0100user01(~aj@154.0.137.32) (Ping timeout: 265 seconds)
2021-12-08 05:38:58 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 05:39:27 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-08 05:40:37 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
2021-12-08 05:41:26 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-12-08 05:42:07 +0100user0(~aj@129.205.7.82) (Ping timeout: 252 seconds)
2021-12-08 05:42:08 +0100user01(~aj@129.205.7.82)
2021-12-08 05:45:05 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2021-12-08 05:45:45 +0100nfd(~nfd@user/nfd)
2021-12-08 05:46:11 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 05:46:14 +0100monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2021-12-08 05:51:25 +0100xff0x(~xff0x@2001:1a81:52f0:d600:c9ec:7be2:e073:b0e) (Ping timeout: 240 seconds)
2021-12-08 05:52:22 +0100xff0x(~xff0x@2001:1a81:52f0:d600:cda8:efb:cccc:cf1c)
2021-12-08 05:52:33 +0100lechner(~lechner@debian/lechner) (Ping timeout: 250 seconds)
2021-12-08 05:54:33 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 05:54:35 +0100user01(~aj@129.205.7.82) (Ping timeout: 252 seconds)
2021-12-08 05:54:47 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 05:54:55 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 05:55:15 +0100user0(~aj@154.0.137.32)
2021-12-08 06:01:18 +0100img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-08 06:03:40 +0100genieliu(~genieliu@103.37.140.38)
2021-12-08 06:04:13 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-08 06:09:01 +0100rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds)
2021-12-08 06:13:17 +0100genieliu(~genieliu@103.37.140.38) (Ping timeout: 252 seconds)
2021-12-08 06:13:20 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 06:14:46 +0100img(~img@user/img)
2021-12-08 06:25:27 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 06:26:07 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 06:26:43 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-12-08 06:27:49 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds)
2021-12-08 06:29:58 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2021-12-08 06:39:50 +0100genieliu(~genieliu@103.37.140.24)
2021-12-08 06:43:03 +0100monochrom(trebla@216.138.220.146)
2021-12-08 06:48:13 +0100jinsun(~quassel@user/jinsun) (Ping timeout: 240 seconds)
2021-12-08 06:50:09 +0100jinsun(~quassel@user/jinsun)
2021-12-08 06:52:14 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 06:53:54 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 06:56:03 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 06:56:39 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 06:56:47 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 07:00:05 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net)
2021-12-08 07:01:19 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2021-12-08 07:02:53 +0100res0nat0r8res0nat0r
2021-12-08 07:03:54 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 07:04:34 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-12-08 07:09:48 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 07:13:42 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 07:13:49 +0100michalz(~michalz@185.246.204.40)
2021-12-08 07:14:13 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-08 07:17:25 +0100Everything(~Everythin@37.115.210.35)
2021-12-08 07:18:13 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2021-12-08 07:18:48 +0100curiousgay(~curiousga@77-120-141-90.kha.volia.net)
2021-12-08 07:20:43 +0100kimjetwav(~user@2607:fea8:2363:8f00:788b:37b5:7592:32b4)
2021-12-08 07:22:32 +0100vicfred(~vicfred@user/vicfred)
2021-12-08 07:25:49 +0100senoraraton(~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds)
2021-12-08 07:30:37 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2021-12-08 07:31:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 07:31:22 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 07:31:22 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 07:36:09 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-12-08 07:45:40 +0100Erutuon(~Erutuon@user/erutuon)
2021-12-08 07:55:39 +0100x88x88x(~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Quit: ZNC 1.7.5+deb4 - https://znc.in)
2021-12-08 07:57:16 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 08:01:25 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 240 seconds)
2021-12-08 08:05:29 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 252 seconds)
2021-12-08 08:05:46 +0100catern(~sbaugh@cpe-98-7-229-235.nyc.res.rr.com) (Ping timeout: 245 seconds)
2021-12-08 08:06:02 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2021-12-08 08:09:26 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 08:11:16 +0100 <int-e> > unwords $ map (\x -> printf "%.2f" (191 - x/16)) [3011,2989,2965,2944,2934,2886,2875,2863,2851,2850]
2021-12-08 08:11:17 +0100 <lambdabot> "2.81 4.19 5.69 7.00 7.62 10.62 11.31 12.06 12.81 12.88"
2021-12-08 08:11:53 +0100 <xerox> I fell from 12.66 to 12.88, yikes! :)
2021-12-08 08:15:33 +0100x88x88x(~x88x88x@149.28.53.172)
2021-12-08 08:20:02 +0100Merfont(~Kaiepi@156.34.44.192)
2021-12-08 08:20:48 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 08:21:32 +0100 <int-e> somehow part 2 is really messing with people :)
2021-12-08 08:22:13 +0100Kaipi(~Kaiepi@156.34.44.192) (Ping timeout: 240 seconds)
2021-12-08 08:22:38 +0100 <xerox> it messed with me too, I didn't even realize it started snowing 😳
2021-12-08 08:22:47 +0100 <int-e> almost 2 1/2 hours in and there's still more silver stars (not counting gold stars) than gold stars
2021-12-08 08:23:35 +0100 <int-e> (globally)
2021-12-08 08:26:29 +0100dmenz(~dmenz@2804:14d:5cd4:5e94::d) (Quit: Leaving)
2021-12-08 08:28:28 +0100 <iqubic> Why doesn't Data.Set have a symetric set difference functon?
2021-12-08 08:28:34 +0100 <iqubic> I'd really like that now.
2021-12-08 08:30:01 +0100vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2021-12-08 08:35:07 +0100 <int-e> It has come up but with little activity (at least recently) to make it (or some generization thereof) happen https://mail.haskell.org/pipermail/libraries/2020-June/030633.html
2021-12-08 08:35:35 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 08:36:12 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 08:37:36 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2021-12-08 08:38:02 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-12-08 08:41:03 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2021-12-08 08:43:25 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
2021-12-08 08:45:01 +0100retroid_(~retro@97e2ba2e.skybroadband.com)
2021-12-08 08:46:54 +0100retro_(~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds)
2021-12-08 08:49:49 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 08:53:44 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-12-08 08:56:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 08:57:29 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 08:59:27 +0100gehmehgeh(~user@user/gehmehgeh)
2021-12-08 09:05:44 +0100zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2021-12-08 09:06:52 +0100zaquest(~notzaques@5.130.79.72)
2021-12-08 09:07:36 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:09:16 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:09:34 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:09:58 +0100Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-12-08 09:12:21 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-12-08 09:14:10 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:14:27 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:14:55 +0100acidjnk_new(~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de)
2021-12-08 09:16:07 +0100max22-(~maxime@2a01cb08833598006f80219c43541139.ipv6.abo.wanadoo.fr)
2021-12-08 09:18:37 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:18:54 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:20:34 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:20:52 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:22:52 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:23:09 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:24:49 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:25:07 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:26:47 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:27:05 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:28:45 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:29:01 +0100chomwitt(~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374)
2021-12-08 09:29:03 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:32:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:33:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:36:56 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:37:13 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:38:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:39:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:41:23 +0100notzmv(~zmv@user/notzmv)
2021-12-08 09:41:35 +0100retro_(~retro@05412d78.skybroadband.com)
2021-12-08 09:41:47 +0100retroid_(~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds)
2021-12-08 09:44:23 +0100ftzm(~ftzm@178.249.51.108)
2021-12-08 09:45:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 09:47:37 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:47:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:49:35 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 09:49:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 09:50:14 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi)
2021-12-08 09:57:03 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 09:58:01 +0100pfurla(~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14)
2021-12-08 09:59:31 +0100mvk(~mvk@2607:fea8:5cdd:f000::9788) (Ping timeout: 252 seconds)
2021-12-08 10:01:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:01:21 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 252 seconds)
2021-12-08 10:01:28 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:03:24 +0100 <dminuoso> glguy: I actually did not. Especially the file loading macro seems useful.
2021-12-08 10:05:18 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-12-08 10:05:21 +0100 <dminuoso> The freedom you have with expandMacros' seems interest as well, since you could give @load some interesting behavior.
2021-12-08 10:06:28 +0100 <dminuoso> So Im writing a tool right now, that I hope will gain some users outside the Haskell world. Broadly speaking its a configurable authentication proxy for some service, and I've been wondering how to potentially allow JSON configuration in the mix of this.
2021-12-08 10:07:31 +0100trillp(~user@69.233.98.238) (Remote host closed the connection)
2021-12-08 10:09:04 +0100cfricke(~cfricke@user/cfricke)
2021-12-08 10:09:11 +0100 <dminuoso> With expandMacros' I could have a neat hook to allow mixing JSON into a config. The config might have some mostly static configuration, and then some more dynamic portion that the user could specify via JSON-encoded config-schema, which then could be mixed in via expandMacros'
2021-12-08 10:10:00 +0100 <dminuoso> With some custom @load that translates the JSON-encoded stuff into config-schema first
2021-12-08 10:10:05 +0100 <dminuoso> I like it.
2021-12-08 10:10:54 +0100teo(~teo@user/teo)
2021-12-08 10:11:16 +0100 <dminuoso> s/config-schema/config-value/
2021-12-08 10:11:32 +0100 <dminuoso> These two libraries really are some of my favourite ones on hackage. :)
2021-12-08 10:14:57 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 10:15:48 +0100xkuru(~xkuru@user/xkuru)
2021-12-08 10:17:34 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-12-08 10:17:34 +0100allbery_b(~geekosaur@xmonad/geekosaur)
2021-12-08 10:17:37 +0100allbery_bgeekosaur
2021-12-08 10:18:33 +0100catern(~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407)
2021-12-08 10:21:03 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:21:21 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:24:43 +0100ftzm(~ftzm@178.249.51.108) (Quit: Client closed)
2021-12-08 10:25:58 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-08 10:27:38 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:27:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:28:59 +0100pfurla(~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 10:32:14 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:32:32 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:34:12 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:34:30 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:36:10 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:36:28 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:36:34 +0100zincy_(~zincy@2a00:23c8:970c:4801:4508:9275:13c9:2a0)
2021-12-08 10:37:19 +0100zincy_(~zincy@2a00:23c8:970c:4801:4508:9275:13c9:2a0) (Remote host closed the connection)
2021-12-08 10:38:39 +0100gehmehgeh(~user@user/gehmehgeh) (Ping timeout: 276 seconds)
2021-12-08 10:40:42 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 10:40:55 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:2cfd:b00:73ba:1137)
2021-12-08 10:41:00 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 10:41:25 +0100gehmehgeh(~user@user/gehmehgeh)
2021-12-08 10:44:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
2021-12-08 10:46:52 +0100wolfshappen(~waff@irc.furworks.de) (Quit: later)
2021-12-08 10:47:57 +0100wolfshappen(~waff@irc.furworks.de)
2021-12-08 10:48:25 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 10:49:58 +0100 <lortabac> I have a thread that provides a non-essential feature, currently if an exception occurs in that thread it bubbles up to the toplevel and makes the application crash
2021-12-08 10:50:25 +0100 <lortabac> how can I make it just log a message and kill the thread?
2021-12-08 10:50:59 +0100 <[exa]> can you catch the exception in the thread and let it kill itself?
2021-12-08 10:52:25 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 10:52:46 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 10:55:02 +0100 <dminuoso> lortabac: setUncaughtExceptionHandler?
2021-12-08 10:56:37 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-08 10:57:37 +0100 <lortabac> [exa]: that's what I'm trying to do, but for some reason the exceptions is not caught in the thread
2021-12-08 10:57:43 +0100 <lortabac> *exception
2021-12-08 10:57:49 +0100 <dminuoso> lortabac: Is this an async exception perhaps?
2021-12-08 10:58:22 +0100 <dminuoso> If you're using unliftio/safe-exceptions you couldn't recover from them unless with manual fiddlery
2021-12-08 10:58:35 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-08 10:59:08 +0100 <lortabac> the thread starts a Prometheus scraping server, in order to test exception handling I'm starting it on a busy port
2021-12-08 10:59:59 +0100 <lortabac> it doesn't look like an async exception to me, but to be honest I don't know
2021-12-08 11:00:16 +0100dyeplexer(~dyeplexer@user/dyeplexer)
2021-12-08 11:00:27 +0100 <dminuoso> lortabac: Which catch facility are you using? Control.Exception?
2021-12-08 11:00:39 +0100 <dminuoso> Or Control.Exception.Safe/UnliftIO.Exception?
2021-12-08 11:00:41 +0100 <lortabac> I tried replacing unliftio with exceptions and I still have the same result
2021-12-08 11:00:46 +0100 <lortabac> I'm using catchAll
2021-12-08 11:00:59 +0100 <dminuoso> lortabac: Ah so if you're using unliftio catch/catchAll, then I suspect you have an async exception
2021-12-08 11:01:16 +0100 <dminuoso> Because they're specifically designed to not be able to recover from async exceptions
2021-12-08 11:01:29 +0100 <dminuoso> You can verify using https://hackage.haskell.org/package/unliftio-0.2.20/docs/UnliftIO-Exception.html#v:isAsyncException
2021-12-08 11:02:43 +0100 <lortabac> I would like to verify, but how do I get the exception in the first place? :D
2021-12-08 11:02:56 +0100 <lortabac> if I can't catch it I can't pass it to that function
2021-12-08 11:03:32 +0100 <dminuoso> Use onException
2021-12-08 11:03:49 +0100tom_(~tom@host86-151-99-97.range86-151.btcentralplus.com)
2021-12-08 11:03:50 +0100michalz(~michalz@185.246.204.40) (Remote host closed the connection)
2021-12-08 11:04:20 +0100 <lortabac> perhaps withException?
2021-12-08 11:04:31 +0100 <dminuoso> Ah, yeah
2021-12-08 11:06:15 +0100zincy(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 252 seconds)
2021-12-08 11:06:18 +0100retroid_(~retro@05412d78.skybroadband.com)
2021-12-08 11:06:36 +0100tom__(~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 245 seconds)
2021-12-08 11:07:30 +0100retro_(~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds)
2021-12-08 11:08:29 +0100zincy(~tom@2a00:23c8:970c:4801:2c67:e51d:1302:54d3)
2021-12-08 11:08:46 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-12-08 11:10:48 +0100 <lortabac> the exception handler is never reached
2021-12-08 11:10:54 +0100 <lortabac> I need to investigate more
2021-12-08 11:11:04 +0100genieliu(~genieliu@103.37.140.24) (Ping timeout: 265 seconds)
2021-12-08 11:11:04 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2021-12-08 11:11:09 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-12-08 11:11:16 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 11:12:42 +0100ubert(~Thunderbi@2a02:8109:9880:303c:d0b4:48a4:6b63:b6a2)
2021-12-08 11:13:14 +0100 <dminuoso> Perhaps there's some exception handler somewhere that directly calls exit(2)?
2021-12-08 11:13:52 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2021-12-08 11:13:52 +0100Lord_of_Life_Lord_of_Life
2021-12-08 11:14:10 +0100 <lortabac> dminuoso: that's possible, I'm still not familiar with all the corners of the code base
2021-12-08 11:14:59 +0100 <lortabac> alternatively, I can make the Prometheus mandatory and let it crash, but now I'm curious to understand anyway
2021-12-08 11:15:16 +0100 <lortabac> *the Prometheus scraping server
2021-12-08 11:15:25 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-08 11:15:58 +0100 <dminuoso> lortabac: You can try looking for `foreign import ccall unsafe "exit"` or `exitImmediately`
2021-12-08 11:16:14 +0100 <dminuoso> But really, only that thread dies?
2021-12-08 11:16:21 +0100 <dminuoso> Or wait, you say the entire process dies right?
2021-12-08 11:16:41 +0100 <lortabac> yes, whatever I put in the handler is never executed
2021-12-08 11:16:42 +0100 <dminuoso> Then I suspect something is calling exit(2) using one of the two methods above
2021-12-08 11:16:49 +0100 <lortabac> and the whole process dies instead
2021-12-08 11:17:14 +0100 <dminuoso> Yeah, look for the above ffi import or uses of `exitImmediately`
2021-12-08 11:17:25 +0100 <dminuoso> Though this could also be hidden inside some dependency
2021-12-08 11:17:28 +0100 <dminuoso> Ugly.
2021-12-08 11:18:10 +0100 <lortabac> yes, I can't find it in our code base
2021-12-08 11:20:25 +0100 <dminuoso> lortabac: Another thing that might be happening is that your main/top thread gets killed away.
2021-12-08 11:20:45 +0100 <dminuoso> Say if there's some inner exception handler that throws an async exception at the main thread.
2021-12-08 11:21:05 +0100 <dminuoso> That is, your spawned thread has some exception handler that signals the main/top thread.
2021-12-08 11:21:12 +0100 <lortabac> this seems quite likely
2021-12-08 11:21:25 +0100 <lortabac> maybe warp does this?
2021-12-08 11:21:26 +0100 <tomsmeding> non-serious suggestion: write a C program that redefines exit(3) and _exit(3), compile that to a shared library, and LD_PRELOAD it so that you can break on that in a debugger
2021-12-08 11:23:00 +0100 <dminuoso> lortabac: Oh I have a theory!
2021-12-08 11:23:18 +0100 <dminuoso> I've tripped into this situation 3 times in tests. And every time I forget about it.
2021-12-08 11:23:32 +0100 <lortabac> maybe it's me who is doing something stupid, I certainly don't exclude this possibility :)
2021-12-08 11:25:43 +0100 <dminuoso> Is your code publically visible or can you share the structure of the test code here?
2021-12-08 11:26:28 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 11:27:35 +0100 <lortabac> I can't share the full code because it's work, but I can paste just the relevant bits
2021-12-08 11:30:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 11:30:30 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 11:30:52 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-12-08 11:31:22 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-12-08 11:33:35 +0100 <lortabac> dminuoso: https://paste.tomsmeding.com/52npg0c7
2021-12-08 11:33:39 +0100kennyd(~bc8165b6@cerf.good1.com)
2021-12-08 11:34:41 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-12-08 11:36:25 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 11:36:41 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 265 seconds)
2021-12-08 11:36:44 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 11:38:45 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-08 11:39:40 +0100genieliu(~genieliu@103.37.140.24)
2021-12-08 11:40:17 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 11:41:46 +0100kuribas(~user@ptr-25vy0i9qa16kzbd65yl.18120a2.ip6.access.telenet.be)
2021-12-08 11:42:31 +0100mmhat(~mmh@55d44a9c.access.ecotel.net)
2021-12-08 11:44:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 11:45:13 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 11:46:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 11:47:03 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-12-08 11:47:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 11:53:48 +0100JimL(~quassel@89-162-2-132.fiber.signal.no)
2021-12-08 11:55:01 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 240 seconds)
2021-12-08 11:55:23 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-12-08 11:57:57 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 11:58:15 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 11:58:20 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-12-08 11:59:20 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 12:01:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:02:13 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:03:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:04:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:07:42 +0100user0(~aj@154.0.137.32) (Ping timeout: 256 seconds)
2021-12-08 12:09:12 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 12:12:41 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:12:56 +0100user0(~aj@154.0.137.32)
2021-12-08 12:12:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:14:13 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Ping timeout: 240 seconds)
2021-12-08 12:15:00 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-08 12:16:35 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
2021-12-08 12:17:20 +0100darchitect(~darchitec@2a00:23c6:3584:df00:7dec:bf13:8fa:748c)
2021-12-08 12:18:15 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-12-08 12:18:19 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2021-12-08 12:21:11 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:21:29 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:23:26 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:23:43 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:28:01 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:28:20 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:30:00 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:30:18 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:35:52 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-12-08 12:41:13 +0100wolfshappen(~waff@irc.furworks.de) (Ping timeout: 252 seconds)
2021-12-08 12:41:58 +0100wolfshappen(~waff@irc.furworks.de)
2021-12-08 12:43:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 12:44:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 12:45:57 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 12:46:37 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 12:47:22 +0100genieliu(~genieliu@103.37.140.24) (Ping timeout: 256 seconds)
2021-12-08 12:48:43 +0100genieliu(~genieliu@103.37.140.24)
2021-12-08 12:49:20 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-08 12:49:28 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 12:52:21 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:52:39 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-08 12:52:39 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 12:55:28 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 12:56:36 +0100pfurla(~pfurla@2804:14d:5c81:4104:d013:2c25:702e:efd1)
2021-12-08 12:56:38 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 12:57:00 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
2021-12-08 12:58:49 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 12:59:06 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:00:46 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:01:04 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:01:30 +0100 <dminuoso> lortabac: Mmm no clue. I'd add careful logging to test some implied assertions you make.
2021-12-08 13:01:35 +0100 <dminuoso> That is, is that thing even called?
2021-12-08 13:01:46 +0100 <dminuoso> Wrap `run` with logging, see if it finished perhaps
2021-12-08 13:02:14 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 13:02:23 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 13:04:49 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:05:06 +0100 <lortabac> dminuoso: yes, I'm sure it's called because it works properly with the right port setting
2021-12-08 13:05:06 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:06:01 +0100 <dminuoso> lortabac: Do you ever get past `run`?
2021-12-08 13:06:14 +0100 <dminuoso> i.e. if you do something like `run ... >> hPutStrLn stderr "foo"`, do you get output?
2021-12-08 13:07:08 +0100 <dminuoso> And then I'd also try `run ... `onException` hPutStrLn "exception thrown"`
2021-12-08 13:07:19 +0100 <dminuoso> The intention is to understand how control flow is working here
2021-12-08 13:07:53 +0100 <dminuoso> In addition, you can try customizing `setUncaughtExceptionHandler` on the main thread
2021-12-08 13:08:02 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 13:08:09 +0100 <dminuoso> (Try doing this as late as possible, to avoid any library doing this for you)
2021-12-08 13:08:17 +0100 <dminuoso> Or rather, overwriting any potential library handler that is being installed
2021-12-08 13:08:17 +0100 <lortabac> the actual 'run' is called by the prometheus library, I only call it indirectly through 'serveMetrics'
2021-12-08 13:08:29 +0100 <dminuoso> Sure, then `serveMetrics >> hPutStrLn stderr "foo"`
2021-12-08 13:08:32 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 13:08:49 +0100 <dminuoso> And: serveMetrics `onException` hPutStrLn stderr "exception thrown"
2021-12-08 13:10:37 +0100 <dminuoso> Also, something like: setUncaughtExceptionHandler (\e -> when (isAsyncException e) (hPutStrLn stderr "main thread killed by async exception") >> hPutStrLn (displayException e)) >> void (async ... serveMetrics)`
2021-12-08 13:13:48 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:13:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 13:14:05 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:14:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 13:17:51 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:18:09 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:19:49 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:20:06 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:20:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 13:20:50 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 13:21:35 +0100__monty__(~toonn@user/toonn)
2021-12-08 13:23:22 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-08 13:25:18 +0100machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-12-08 13:26:24 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 13:26:41 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 13:28:30 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-08 13:30:43 +0100 <lortabac> dminuoso: I think I solved the mystery
2021-12-08 13:30:49 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-12-08 13:31:27 +0100 <lortabac> let me do another couple of tests
2021-12-08 13:33:09 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:33:26 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:34:39 +0100 <lortabac> ok, so everything works as expected, the problem was just my test
2021-12-08 13:35:38 +0100 <lortabac> in order to trigger an exception I ran the metrics server on the same port as another service, but in fact the other service started **later**
2021-12-08 13:37:02 +0100nfd(~nfd@user/nfd) (Ping timeout: 265 seconds)
2021-12-08 13:37:03 +0100 <lortabac> if I choose a port that is actually busy the exception is caught in the thread as expected
2021-12-08 13:38:00 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 265 seconds)
2021-12-08 13:41:39 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:41:56 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:45:37 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:45:56 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:47:52 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 13:49:35 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:49:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:51:20 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-12-08 13:54:08 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:54:26 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 13:54:44 +0100lechner(~lechner@debian/lechner)
2021-12-08 13:58:35 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 13:58:53 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:00:33 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:00:51 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:02:31 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:02:48 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:03:37 +0100max22-(~maxime@2a01cb08833598006f80219c43541139.ipv6.abo.wanadoo.fr) (Ping timeout: 265 seconds)
2021-12-08 14:03:59 +0100InternetCitizen(~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-12-08 14:06:35 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:06:52 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:08:32 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:08:50 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:12:49 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:13:07 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:14:03 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 14:14:39 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 14:16:47 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:17:04 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:17:04 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 14:17:23 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 14:17:41 +0100mncheck(~mncheck@193.224.205.254)
2021-12-08 14:18:00 +0100zaquest(~notzaques@5.130.79.72) (Read error: Connection reset by peer)
2021-12-08 14:19:25 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-08 14:19:27 +0100zaquest(~notzaques@5.130.79.72)
2021-12-08 14:21:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 14:24:59 +0100mikoto-chan(~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan)
2021-12-08 14:28:07 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2021-12-08 14:31:19 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2021-12-08 14:32:45 +0100simendsjo(~user@84.211.91.241)
2021-12-08 14:34:49 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 14:36:58 +0100acidjnk_new(~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-12-08 14:39:21 +0100kupi(uid212005@id-212005.hampstead.irccloud.com)
2021-12-08 14:40:58 +0100pfurla(~pfurla@2804:14d:5c81:4104:d013:2c25:702e:efd1) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 14:43:12 +0100 <merijn> heh
2021-12-08 14:43:18 +0100 <merijn> Set has a map, but no traverse?
2021-12-08 14:43:56 +0100 <merijn> That's annoying
2021-12-08 14:44:13 +0100genieliu(~genieliu@103.37.140.24) (Ping timeout: 265 seconds)
2021-12-08 14:44:37 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 14:46:33 +0100 <maerwald> hmm
2021-12-08 14:46:34 +0100acidjnk_new(~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de)
2021-12-08 14:47:07 +0100 <maerwald> merijn: https://github.com/haskell/containers/pull/592
2021-12-08 14:47:12 +0100 <Franciman> :t traverse
2021-12-08 14:47:13 +0100 <lambdabot> (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b)
2021-12-08 14:47:21 +0100vgtw_(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Ping timeout: 252 seconds)
2021-12-08 14:47:41 +0100 <maerwald> merijn: tldr: don't try to add anything to containers
2021-12-08 14:47:45 +0100max22-(~maxime@2a01cb088335980011e17f1477c78e4b.ipv6.abo.wanadoo.fr)
2021-12-08 14:47:52 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 14:47:57 +0100 <Franciman> lol
2021-12-08 14:48:30 +0100 <maerwald> took a year to get useful input and then it ended in bikeshedding about CPP pragmas
2021-12-08 14:48:57 +0100 <maerwald> but the fastest version is in that PR
2021-12-08 14:49:15 +0100 <merijn> tbh, I don't really care about speed anyway
2021-12-08 14:49:20 +0100 <maerwald> traverse f s0 = fmap (GHCExts.fromListN (size s0)) . Prelude.traverse f . toList $ s0
2021-12-08 14:49:40 +0100 <maerwald> that seems to fuse well or so
2021-12-08 14:52:13 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2021-12-08 14:53:04 +0100 <Franciman> if you don't care about speed what's the point of using set?
2021-12-08 14:53:06 +0100 <Franciman> x.x
2021-12-08 14:53:25 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
2021-12-08 14:53:42 +0100 <merijn> Franciman: Semantics?
2021-12-08 14:53:45 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-12-08 14:54:08 +0100 <Franciman> no i mean
2021-12-08 14:54:09 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit)
2021-12-08 14:54:10 +0100 <Franciman> you can use map
2021-12-08 14:54:12 +0100 <Franciman> it has traverse
2021-12-08 14:54:21 +0100 <merijn> Franciman: On values, not on keys
2021-12-08 14:54:25 +0100 <Franciman> https://hackage.haskell.org/package/containers-0.6.5.1/docs/Data-Map-Strict.html#v:traverseWithKey
2021-12-08 14:54:43 +0100 <merijn> Franciman: How would you reconstruct the semantics of "traversing Set" using that?
2021-12-08 14:55:02 +0100 <Franciman> i don't care tbf
2021-12-08 14:55:07 +0100 <Franciman> ops wrong channel
2021-12-08 14:55:10 +0100 <Franciman> merijn: I see
2021-12-08 14:55:15 +0100 <Franciman> I read the type wrongly
2021-12-08 14:55:19 +0100 <Franciman> sorry
2021-12-08 14:55:29 +0100 <Franciman> then you can use a list
2021-12-08 14:55:36 +0100 <Franciman> and continuously traverse it
2021-12-08 14:55:46 +0100 <Franciman> O(n^n)
2021-12-08 14:55:48 +0100 <Franciman> ~
2021-12-08 14:56:40 +0100caubert(~caubert@136.244.111.235) (Quit: WeeChat 3.3)
2021-12-08 14:56:44 +0100 <Franciman> https://hackage.haskell.org/package/data-ordlist-0.4.7.0/docs/Data-List-Ordered.html merijn ejony
2021-12-08 14:56:54 +0100 <dminuoso> maerwald: Uh, whats the tldr for that pull request?
2021-12-08 14:57:38 +0100 <dminuoso> Im not sure I understand the claim that this does not add functionality.
2021-12-08 14:58:04 +0100 <dminuoso> Especially given `map f = fromList . List.map f . toList`
2021-12-08 14:58:07 +0100 <maerwald> dminuoso: that contributing to containers is annoying
2021-12-08 14:58:13 +0100 <dminuoso> How does that make it into containers but traverse not?
2021-12-08 14:58:42 +0100 <maerwald> there was some bikeshedding about CPP and ancient GHC versions and then I got no further input on what to do
2021-12-08 15:01:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 15:04:03 +0100filwisher(2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection)
2021-12-08 15:04:03 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection)
2021-12-08 15:04:03 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e) (Remote host closed the connection)
2021-12-08 15:04:04 +0100jakzale(6291399afa@user/jakzale) (Remote host closed the connection)
2021-12-08 15:05:20 +0100 <Franciman> btw the semantics of a traverse on set are not so clear. If you don't care about speed
2021-12-08 15:05:22 +0100 <Franciman> just do
2021-12-08 15:05:32 +0100 <Franciman> traverse . toList
2021-12-08 15:05:40 +0100 <Franciman> do your traverse and rebuild your set
2021-12-08 15:06:02 +0100 <Franciman> provlem solved
2021-12-08 15:06:06 +0100 <Franciman> i suppose
2021-12-08 15:06:12 +0100 <maerwald> Franciman: that's what I just posted above
2021-12-08 15:06:14 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection)
2021-12-08 15:06:14 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection)
2021-12-08 15:06:14 +0100samhh(7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection)
2021-12-08 15:06:14 +0100nickdaly-away(45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection)
2021-12-08 15:06:14 +0100sm2n(ae95cb1267@user/sm2n) (Remote host closed the connection)
2021-12-08 15:06:20 +0100 <maerwald> that IS the fastest version
2021-12-08 15:06:23 +0100 <Franciman> sorry maerwald I didn't read it
2021-12-08 15:06:27 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 265 seconds)
2021-12-08 15:06:33 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2021-12-08 15:06:35 +0100filwisher(2e6936c793@2604:bf00:561:2000::170)
2021-12-08 15:06:35 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e)
2021-12-08 15:06:36 +0100samhh(7569f027cf@2604:bf00:561:2000::e4)
2021-12-08 15:06:40 +0100 <Franciman> ah nice
2021-12-08 15:06:43 +0100nickdaly-away(45ce440a48@2604:bf00:561:2000::e2)
2021-12-08 15:06:43 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f)
2021-12-08 15:06:43 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0)
2021-12-08 15:06:43 +0100 <Franciman> then what are we talking about?
2021-12-08 15:06:47 +0100 <Franciman> I am losing time as usual
2021-12-08 15:06:49 +0100 <Franciman> bye
2021-12-08 15:06:49 +0100sm2n(ae95cb1267@user/sm2n)
2021-12-08 15:06:50 +0100jakzale(6291399afa@user/jakzale)
2021-12-08 15:06:53 +0100 <Franciman> thanks
2021-12-08 15:08:27 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-08 15:09:40 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 15:10:36 +0100 <Franciman> maerwald: sorry is it very efficient because of laziness?
2021-12-08 15:10:55 +0100 <maerwald> I guess it fuses well
2021-12-08 15:10:58 +0100 <Franciman> i think it can be made at least as efficient, without changing the ease of composition with explicit codata and polarisation
2021-12-08 15:11:10 +0100 <Franciman> can't wait to try
2021-12-08 15:11:22 +0100 <Franciman> imagine a streaming list implementation
2021-12-08 15:11:30 +0100 <Franciman> who gives you the elements of the set on demand
2021-12-08 15:11:45 +0100 <Franciman> with linearity you can also get fusion, I believe
2021-12-08 15:11:49 +0100 <Franciman> no more ghc vodoo
2021-12-08 15:11:51 +0100 <Franciman> OH OHHH
2021-12-08 15:11:55 +0100 <dminuoso> "
2021-12-08 15:11:57 +0100 <Franciman> who knows if this makes sense
2021-12-08 15:12:04 +0100 <Franciman> I do wonder
2021-12-08 15:12:17 +0100 <dminuoso> Found type wildcard '_' standing for '_'
2021-12-08 15:12:19 +0100 <dminuoso> Thanks GHC!
2021-12-08 15:12:22 +0100 <Franciman> ^^
2021-12-08 15:12:51 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 15:14:09 +0100caubert(~caubert@136.244.111.235)
2021-12-08 15:17:01 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2021-12-08 15:19:34 +0100xdej(~xdej@quatramaran.salle-s.org)
2021-12-08 15:20:01 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 15:21:37 +0100jkaye(~jkaye@c-71-205-220-154.hsd1.co.comcast.net)
2021-12-08 15:27:40 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection)
2021-12-08 15:28:21 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2021-12-08 15:28:45 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2021-12-08 15:29:10 +0100gaff(~gaff@49.207.205.24)
2021-12-08 15:29:30 +0100 <gaff> i have some code at https://paste.ofcode.org/3bCeaTekdDQTadp8CPRwV65
2021-12-08 15:30:26 +0100k60`(~user@94.25.169.9) (Read error: No route to host)
2021-12-08 15:30:30 +0100 <gaff> to test this code using quickcheck, do you randomly generate leap years then check if the function returns true?
2021-12-08 15:31:16 +0100k60``(~user@94.25.169.9)
2021-12-08 15:31:28 +0100 <gaff> i ask this question because one of the pitfalls of using quickcheck is that if you are not careful, you end up duplicating the source code in your tests.
2021-12-08 15:31:30 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-08 15:32:18 +0100 <gaff> appreciate your help
2021-12-08 15:33:02 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 15:34:41 +0100 <[exa]> gaff: property test are much better for code where it is not very obvious that the implementation follows the "defining property". Here the defining property is basically same as implementation so I wouldn't care much, the only "gain" you get here is that you are less likely to do the same code error in both the test and code
2021-12-08 15:35:26 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 15:35:40 +0100 <[exa]> "normal" tests that throw in a few years that should be leap and few that should not, just to make sure that the function is sane, would make better sense here to me
2021-12-08 15:36:54 +0100k60``(~user@94.25.169.9) (Ping timeout: 265 seconds)
2021-12-08 15:36:59 +0100 <[exa]> if you'd go with quickcheck, you might test that against some kind of standard library that can calculate leap years, but then the question is why not use the library in the first place :]
2021-12-08 15:37:23 +0100Techcable(~Techcable@168.235.93.147) (Ping timeout: 265 seconds)
2021-12-08 15:38:07 +0100 <gaff> [exa]: ok, i am just trying to learn how to write good properties with quickcheck. in this case, which is deliberately simple, quickcheck can test some invariants, like if `x` is a leap year, so must `4 * x`, etc
2021-12-08 15:38:20 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 15:38:20 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 15:38:20 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 15:39:09 +0100 <merijn> Man...today's AoC is surprisingly tricky
2021-12-08 15:39:26 +0100 <gaff> also, quickcheck can generate a whole set of random leap years, so perhaps you can have more confidence in your tests. so that's the plus i see. plus, i learn to write some properties.
2021-12-08 15:39:38 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-12-08 15:40:24 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 15:41:25 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 15:41:47 +0100 <[exa]> merijn: the first part looks very prologish
2021-12-08 15:41:59 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 15:42:07 +0100jippiedoe(~david@2a02-a44c-e14e-1-3090-ba98-2dba-9449.fixed6.kpn.net)
2021-12-08 15:42:26 +0100 <[exa]> gaff: ah yes practicing this would probably make sense
2021-12-08 15:42:46 +0100 <merijn> [exa]: The first part is the non-prolog-y part
2021-12-08 15:42:51 +0100 <merijn> it's the second one that is
2021-12-08 15:42:54 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
2021-12-08 15:43:02 +0100 <merijn> Feels very "the tip of my tongue"-y
2021-12-08 15:43:19 +0100 <merijn> I think maybe my problem is that my solution is trying to be overly generic
2021-12-08 15:44:09 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-12-08 15:44:18 +0100 <gaff> [exa]: ok
2021-12-08 15:45:08 +0100Guest40(~Guest40@ec2-54-215-90-243.us-west-1.compute.amazonaws.com)
2021-12-08 15:45:23 +0100 <gaff> [exa]: what bugs me is that almost all talks on quickcheck start with the same hackneyed example: reverse (reverse xs) = xs
2021-12-08 15:47:42 +0100genieliu(~genieliu@111.193.167.10)
2021-12-08 15:48:19 +0100 <gaff> [exa]: also, quickcheck properties, if you can write them, are good if you don't know what exactly may be the output of an operation for a random input.
2021-12-08 15:48:30 +0100alx741(~alx741@186.178.108.36) (Ping timeout: 265 seconds)
2021-12-08 15:49:39 +0100 <dminuoso> Can someone explain to me why GHC complains that `pat0` is ambiguous here? https://gist.github.com/dminuoso/7ca1d473e20c70b1ddb98fc714f4391c
2021-12-08 15:50:46 +0100 <tomsmeding> dminuoso: type family Inner tag field = r | r -> field where
2021-12-08 15:50:55 +0100 <tomsmeding> with TypeFamilyDependencies
2021-12-08 15:51:13 +0100 <tomsmeding> crucial bit: "NB: ‘Inner’ is a non-injective type family"
2021-12-08 15:51:46 +0100 <dminuoso> tomsmeding: that does not work, that would violate injectivity
2021-12-08 15:51:58 +0100 <dminuoso> See: Inner Descr f = T.Text
2021-12-08 15:52:04 +0100 <tomsmeding> oh
2021-12-08 15:52:17 +0100polezaivsani(~polezaivs@orangeshoelaces.net)
2021-12-08 15:52:20 +0100 <tomsmeding> oh fair point
2021-12-08 15:52:24 +0100Guest40toeinriver
2021-12-08 15:53:01 +0100genieliu(~genieliu@111.193.167.10) (Ping timeout: 240 seconds)
2021-12-08 15:53:05 +0100gaff(~gaff@49.207.205.24) ()
2021-12-08 15:53:19 +0100 <tomsmeding> the point is that if you call hasPerm, say as 'hasPerm u f t', then from the types of u, f and t, ghc can infer what 'Inner mode [Authorization tok pat]' should be, but from that it can't infer what tok and pat should be
2021-12-08 15:53:30 +0100 <tomsmeding> tok can be inferred from the final return type, but pat appears nowhere else
2021-12-08 15:53:39 +0100 <tomsmeding> so it's precisely the non-injectivity that makes it fail here
2021-12-08 15:53:46 +0100 <dminuoso> I want it to not care what `pat` is
2021-12-08 15:54:18 +0100 <dminuoso> So previously I had: hasPerm :: (Show tok, Show pat) => [Authorization tok pat] -> T.Text -> GerdM tok
2021-12-08 15:54:35 +0100 <dminuoso> And I turned it into: hasPerm :: User -> PermSelector tok pat -> T.Text -> GerdM tok
2021-12-08 15:56:34 +0100tomsmedingdoesn't know how to get what you want; would say it is impossible but not sure
2021-12-08 15:56:41 +0100 <tomsmeding> add a Proxy :p
2021-12-08 15:56:53 +0100 <dminuoso> Yeah I dont know how to do that
2021-12-08 15:57:08 +0100 <tomsmeding> how to add a proxy to fix this?
2021-12-08 15:57:15 +0100 <tomsmeding> hasPerm :: Proxy pat -> User -> ...
2021-12-08 15:57:22 +0100 <dminuoso> Uh, but why would that..
2021-12-08 15:57:40 +0100 <tomsmeding> then the signature gets accepted, and at a call site you have to choose a type for 'pat'
2021-12-08 15:58:10 +0100 <tomsmeding> the point was that from knowing Inner mode [Authorization tok pat] ~ t for some concrete t, ghc can't get a concrete type for pat
2021-12-08 15:58:16 +0100 <tomsmeding> and ghc needs concrete types for everything
2021-12-08 15:58:22 +0100 <tomsmeding> Proxy is a data type, so is injective
2021-12-08 15:58:27 +0100 <dminuoso> But if that type variable is not used anywhere, why does it matter in the first place?
2021-12-08 15:58:56 +0100tomsmedinghas to go, sorry
2021-12-08 15:59:02 +0100 <dminuoso> No worries, thanks for your help!
2021-12-08 15:59:11 +0100 <tomsmeding> that's precisely the NoAllowAmbiguousTypes restriction I believe
2021-12-08 15:59:43 +0100 <oats> https://paste.xinu.at/z2e3Dv/
2021-12-08 15:59:43 +0100 <oats> anyone able to help me figure out why this parser can't parse Day 8? it's something to do with the " | " separator, but I can't figure it out exactly in my testing...
2021-12-08 16:00:17 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-08 16:02:09 +0100 <merijn> oats: The space combinator consumes the space in front of " | " and doesn't backtrack
2021-12-08 16:02:34 +0100 <oats> oof, that's a little counterintuitive
2021-12-08 16:02:37 +0100 <oats> thanks :)
2021-12-08 16:04:48 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 16:05:05 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 252 seconds)
2021-12-08 16:05:42 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
2021-12-08 16:06:21 +0100 <dminuoso> space = void $ takeWhileP (Just "white space") isSpace
2021-12-08 16:06:30 +0100 <dminuoso> And takeWhileP does not backtrack?
2021-12-08 16:06:33 +0100k60``(~user@94.25.169.9)
2021-12-08 16:06:40 +0100 <dminuoso> The documentation says differently, what am I missing merijn?
2021-12-08 16:07:04 +0100 <merijn> dminuoso: sepBy doesn't backtrack, though
2021-12-08 16:07:33 +0100 <merijn> dminuoso: It doesn't wrap the separator in a try
2021-12-08 16:07:38 +0100gustik(~gustik@2a01:c844:242f:ba20:72e:7030:46bf:1353)
2021-12-08 16:08:10 +0100dminuosofinds megaparsec confusing
2021-12-08 16:08:20 +0100 <merijn> In general the backtracking behaviour of megaparsec is poorly explained/documented
2021-12-08 16:08:24 +0100 <merijn> Which is a bummer
2021-12-08 16:08:32 +0100 <merijn> So I mostly debug it via guessing
2021-12-08 16:08:49 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net)
2021-12-08 16:09:01 +0100 <oats> is there a generally agreed upon better megaparsec?
2021-12-08 16:09:09 +0100 <merijn> Part of the reason is the splitting off of parser-combinators
2021-12-08 16:09:11 +0100 <merijn> oats: No
2021-12-08 16:09:22 +0100 <dminuoso> Everything Ive seen in alex/happy looked nice so far
2021-12-08 16:09:26 +0100 <merijn> So parser-combinators has to be parser implementation agnostic
2021-12-08 16:10:03 +0100 <dminuoso> For for something like AoC alex/happy seem like drastic overkill
2021-12-08 16:10:14 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2021-12-08 16:10:54 +0100 <merijn> At least your parser not working protects you from the rest of today's excercise >.>
2021-12-08 16:11:28 +0100dminuosodwindled away into type progamming lands
2021-12-08 16:11:37 +0100alx741(~alx741@186.178.108.192)
2021-12-08 16:11:39 +0100 <oats> merijn, uh oh
2021-12-08 16:11:43 +0100 <dminuoso> And it seems my enchanted swork broke when fighting the water daemon of GHC.
2021-12-08 16:11:51 +0100 <merijn> I was trying a nice generic constraint solver, but that's not encoding enough information :\
2021-12-08 16:11:55 +0100 <dminuoso> The type error diagnostics are slowly defeating me. :(
2021-12-08 16:12:12 +0100 <merijn> and naming things for today is hard :\
2021-12-08 16:12:40 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-12-08 16:13:25 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 16:14:03 +0100oatsattempts to build a map
2021-12-08 16:15:25 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Ping timeout: 240 seconds)
2021-12-08 16:17:57 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:540e:67c2:47ff:b4e3)
2021-12-08 16:18:59 +0100toeinriver(~Guest40@ec2-54-215-90-243.us-west-1.compute.amazonaws.com) (Quit: Client closed)
2021-12-08 16:20:39 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 16:20:57 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 16:21:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 16:21:56 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 16:21:56 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 16:23:36 +0100 <__monty__> merijn: Maybe you're overthinking it? I'm using such stellar names as "zero" and "four".
2021-12-08 16:23:54 +0100 <merijn> __monty__: More for my constraint computation
2021-12-08 16:23:57 +0100 <merijn> Also
2021-12-08 16:24:06 +0100 <merijn> A pox upon the lack of symmetric difference in containers
2021-12-08 16:24:42 +0100 <merijn> Leaving me to compute myself...*again*
2021-12-08 16:25:25 +0100 <__monty__> Doing two differences isn't *that* bad though. Just constant factors ; )
2021-12-08 16:25:40 +0100 <merijn> It's not two differences, though?
2021-12-08 16:25:51 +0100 <merijn> You need to union, intersect, then difference
2021-12-08 16:26:40 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-08 16:27:25 +0100shailangsa(~shailangs@host86-186-136-27.range86-186.btcentralplus.com) (Ping timeout: 240 seconds)
2021-12-08 16:28:03 +0100 <__monty__> Isn't that disjointUnion?
2021-12-08 16:28:12 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:540e:67c2:47ff:b4e3) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 16:28:33 +0100 <merijn> No
2021-12-08 16:28:40 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:540e:67c2:47ff:b4e3)
2021-12-08 16:29:09 +0100 <merijn> __monty__: At least the type signature and example of disjointUnion look *nothing* like symmetric difference
2021-12-08 16:29:24 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-08 16:29:46 +0100 <merijn> Symmetric difference is something like:
2021-12-08 16:29:47 +0100 <merijn> symmDiff s1 s2 = (s1 `S.union` s2) `S.difference` (s1 `S.intersection` s2)
2021-12-08 16:30:23 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 16:30:27 +0100 <dminuoso> tomsmeding: Ohh its starting to slowly hit me.
2021-12-08 16:31:07 +0100 <dminuoso> type PermSelector tok pat = forall mode. PermsF mode -> Inner mode [Authorization tok pat]
2021-12-08 16:31:52 +0100 <dminuoso> Even if use `PermSelector () ()`, the `tok` and `pat` in the resulting part are still ambiguous, because Inner is non-injective. And indeed, if we consider the Descr branch of Inner, I start to see why
2021-12-08 16:33:08 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:540e:67c2:47ff:b4e3) (Ping timeout: 252 seconds)
2021-12-08 16:33:12 +0100 <dminuoso> I guess the crux is trying to make PermSelector polymorphic over `mode`
2021-12-08 16:33:15 +0100ystael(~ystael@user/ystael) (Quit: Lost terminal)
2021-12-08 16:33:22 +0100Everything(~Everythin@37.115.210.35) (Quit: leaving)
2021-12-08 16:33:48 +0100 <dminuoso> Seems like I cant ergonomically have a universally quantified type, if that quantified type goes into into a non-injective type family
2021-12-08 16:34:00 +0100 <dminuoso> It hinders type inference completely
2021-12-08 16:34:50 +0100 <__monty__> merijn: You're right of course. My brain saw what it wanted to see.
2021-12-08 16:34:52 +0100 <dminuoso> So I have an idea. Instead of using `Inner Descr a = T.Text`, I could use `Inner Descr a = Const Text a`
2021-12-08 16:35:00 +0100 <dminuoso> Then I could get the injectivity back
2021-12-08 16:35:49 +0100ystael(~ystael@user/ystael)
2021-12-08 16:38:27 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 16:38:44 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 16:39:07 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 16:40:35 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 16:42:25 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 16:42:43 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 16:42:47 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 16:42:47 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 16:42:47 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 16:46:20 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 16:47:11 +0100 <boxscape> Hmm is there any value/prior work in thinking about strictness like an Applicative functor, such that `f <$> Strict x <*> Strict y` is `f $! x $! y`?
2021-12-08 16:47:20 +0100boxscape_(~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de)
2021-12-08 16:47:28 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-12-08 16:47:43 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 16:48:16 +0100 <boxscape> (The only reason I'm thinking about this is because I was thinking "Idris's ! notation could also instead be used to indicate that an argument should be evaluated before application" and then was thinking "but maybe you can combine those")
2021-12-08 16:48:21 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 16:49:52 +0100kennyd(~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2021-12-08 16:50:51 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 265 seconds)
2021-12-08 16:51:20 +0100mc47(~mc47@xmonad/TheMC47)
2021-12-08 16:51:36 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 268 seconds)
2021-12-08 16:52:45 +0100simendsjo(~user@84.211.91.241) (Ping timeout: 252 seconds)
2021-12-08 16:53:18 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2021-12-08 16:54:20 +0100 <sprout_> merijn: https://github.com/egel-lang/aoc-2021/blob/main/day8/task2.eg <- task 2. took me 3 or 4 hours..
2021-12-08 16:54:36 +0100 <sprout_> not haskell but close enough, I guess
2021-12-08 16:54:46 +0100 <merijn> I can't look yet, I'm still solving it :p But I think I had the necessary epiphany so it's "just programming" now :p
2021-12-08 16:55:01 +0100 <sprout_> good luck!
2021-12-08 16:57:09 +0100acidjnk_new(~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-12-08 16:57:27 +0100mbuf(~Shakthi@223.178.121.64) (Quit: Leaving)
2021-12-08 16:59:33 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-08 17:02:15 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 17:02:33 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 17:03:42 +0100 <tomsmeding> dminuoso: what you say sounds right to me
2021-12-08 17:03:47 +0100 <tomsmeding> the Const hack is a hack though :p
2021-12-08 17:03:51 +0100 <tomsmeding> then I'd prefer a Proxy
2021-12-08 17:04:07 +0100 <dminuoso> tomsmeding: Doesnt work.
2021-12-08 17:04:09 +0100 <tomsmeding> at least that doesn't imply that you're doing anything fancy with the Const, just fixing a type parameter
2021-12-08 17:04:20 +0100 <tomsmeding> (can also add the Proxy argument to the PermSelector instead of hasPerms
2021-12-08 17:04:21 +0100 <tomsmeding> )
2021-12-08 17:04:28 +0100 <dminuoso> Or rather, it has to be so ubiquitously present with explicit types..
2021-12-08 17:04:33 +0100 <tomsmeding> right
2021-12-08 17:04:54 +0100 <dminuoso> tomsmeding: With Tagged (which I prefer over Const for this), this becomes visible only in one small part of the code basis where I extract text for visualization
2021-12-08 17:05:03 +0100 <dminuoso> Which means it has much less impact on the general code
2021-12-08 17:05:24 +0100 <tomsmeding> what's Tagged? just 'data Tagged tag a = Tagged a'?
2021-12-08 17:05:29 +0100 <dminuoso> Yeah
2021-12-08 17:05:36 +0100 <tomsmeding> yeah feels semantically better to me
2021-12-08 17:05:40 +0100 <tomsmeding> than Const, that is
2021-12-08 17:05:53 +0100 <dminuoso> Yup, I mean you can omap over it if you like
2021-12-08 17:06:07 +0100 <dminuoso> Not that I really want, but Tagged conveys the intent much better
2021-12-08 17:06:11 +0100 <tomsmeding> assuming that you correctly assessed that a Proxy is unworkable, which I readily assume you did :)
2021-12-08 17:06:27 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 17:06:35 +0100 <dminuoso> tomsmeding: I would have had to pass proxy over a hundred times.
2021-12-08 17:06:43 +0100 <tomsmeding> or if carrying the tag type variable actually makes some semantic sense
2021-12-08 17:06:57 +0100 <dminuoso> With Tagged it's just 4 places that become aware of it
2021-12-08 17:07:13 +0100 <tomsmeding> and in all those hundred times, can the type variable be inferred if you just write 'Proxy' at the call site?
2021-12-08 17:07:25 +0100 <dminuoso> tomsmeding: no
2021-12-08 17:07:43 +0100 <dminuoso> Inference broke everywhere
2021-12-08 17:07:49 +0100 <tomsmeding> ah, then indeed it's unworkable
2021-12-08 17:07:55 +0100 <dminuoso> Basically I had this situation:
2021-12-08 17:08:06 +0100shailangsa(~shailangs@host86-161-220-126.range86-161.btcentralplus.com)
2021-12-08 17:08:25 +0100 <dminuoso> f :: PermSelector tok () -> tok; f sel = somethingElse sel
2021-12-08 17:08:38 +0100 <dminuoso> And inference for `somethingElse sel` broke on pat being ambiguous
2021-12-08 17:08:57 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:2cfd:b00:73ba:1137) (Quit: WeeChat 2.8)
2021-12-08 17:09:13 +0100 <dminuoso> Which seemed ridiculous initially, but the problem was not that I set the second type argument to (), but inside of `type PermSelector` there was this type family
2021-12-08 17:09:24 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 17:09:33 +0100 <dminuoso> type PermSelector tok pat = forall mode. PermsF mode -> Inner mode [Authorization tok pat]
2021-12-08 17:10:01 +0100 <tomsmeding> right, f's type signature fixes the output of that type family
2021-12-08 17:10:04 +0100 <tomsmeding> and only that
2021-12-08 17:10:13 +0100 <tomsmeding> and 'sel' fixes 'mode', which doesn't help here
2021-12-08 17:10:27 +0100 <dminuoso> no, sel does not fix mode
2021-12-08 17:10:30 +0100 <dminuoso> which is the crux of the probel
2021-12-08 17:10:52 +0100 <tomsmeding> ok, "fix" as in relate the type variable to some explicit quantifier
2021-12-08 17:11:05 +0100 <tomsmeding> it's not yet monomorphic, true, but not ambiguous anymore
2021-12-08 17:11:06 +0100 <dminuoso> Ah yeah
2021-12-08 17:11:17 +0100 <tomsmeding> pat, on the other hand, is ambigiuous still
2021-12-08 17:11:34 +0100 <tomsmeding> I think you analysed the problem correctly and should just use Tagged :p
2021-12-08 17:11:58 +0100 <dminuoso> tomsmeding: I hope I do, I dont really understand it, its just some very lose sense of "I think I have an understanding"
2021-12-08 17:12:00 +0100 <tomsmeding> even if my gut doesn't like it for some reason
2021-12-08 17:12:12 +0100 <dminuoso> Well, with Tagged + tyfam fundeps everything just works out
2021-12-08 17:12:30 +0100 <dminuoso> And the pain is little, so I guess it doesnt matter
2021-12-08 17:12:57 +0100 <dminuoso> I need to reduce this into a simplistic reproducer and fight my way through type inference
2021-12-08 17:12:57 +0100 <tomsmeding> I'm fairly sure I understand where the error is coming from, technically (which allows me to suggest a _possible_ fix), but I'm also fairly sure I have no idea how this issue fits in the more general framework of my understanding of haskell -- and that latter thing is what should motivate the _correct_ fix
2021-12-08 17:13:34 +0100gaff(~gaff@49.207.205.24)
2021-12-08 17:13:38 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 17:13:41 +0100 <tomsmeding> s,correct,correct/idiomatic,
2021-12-08 17:13:56 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 17:14:21 +0100 <dminuoso> I gotta run for now. Ill make a smaller testcase, and then we can perhaps continue this
2021-12-08 17:14:29 +0100 <dminuoso> I'd really like to fully understand what's going on here
2021-12-08 17:14:35 +0100 <tomsmeding> cheers :)
2021-12-08 17:14:49 +0100kupi(uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 17:18:09 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 17:18:24 +0100rookie101(~rookie@165.232.121.13)
2021-12-08 17:20:02 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 17:20:34 +0100son0p(~ff@181.136.122.143)
2021-12-08 17:21:26 +0100alx741(~alx741@186.178.108.192) (Quit: alx741)
2021-12-08 17:22:38 +0100alx741(~alx741@186.178.108.192)
2021-12-08 17:25:35 +0100gaff(~gaff@49.207.205.24) (Quit: Bye ...)
2021-12-08 17:26:23 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net)
2021-12-08 17:29:43 +0100lyxia(~lyxia@poisson.chat) (Quit: WeeChat 3.3)
2021-12-08 17:29:59 +0100lyxia(~lyxia@poisson.chat)
2021-12-08 17:31:14 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 17:31:44 +0100HurdyGurdyBurdy(~HurdyGurd@user/hurdygurdyburdy) (Quit: server died; rip)
2021-12-08 17:33:11 +0100Axma10079(~Axman6@user/axman6)
2021-12-08 17:34:31 +0100HurdyGurdyBurdy(~HurdyGurd@user/hurdygurdyburdy)
2021-12-08 17:35:28 +0100Axman6(~Axman6@user/axman6) (Ping timeout: 260 seconds)
2021-12-08 17:35:43 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 17:37:31 +0100Techcable(~Techcable@168.235.93.147)
2021-12-08 17:38:42 +0100MoC(~moc@user/moc)
2021-12-08 17:39:10 +0100 <merijn> oof
2021-12-08 17:39:14 +0100 <merijn> Finally done with today
2021-12-08 17:39:58 +0100 <MoC> I fully agree with that sentiment.
2021-12-08 17:40:03 +0100burnsidesLlama(~burnsides@dhcp168-017.wadham.ox.ac.uk)
2021-12-08 17:40:08 +0100 <merijn> Now I need to clean up the nightmare mess that is the code I used to get there xD
2021-12-08 17:40:58 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 17:42:34 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 17:44:43 +0100 <sprout_> yah, I don't feel cleaning up the code either...
2021-12-08 17:45:01 +0100 <merijn> oh, now that I have a working solution that part is fairly easy
2021-12-08 17:45:17 +0100 <merijn> Main problem is that I took a lot of shortcuts violating my own rules :p
2021-12-08 17:45:24 +0100 <sprout_> with me it's just moving the packing/unpacking around
2021-12-08 17:45:55 +0100 <merijn> I need to get all the error handling fixed
2021-12-08 17:46:19 +0100 <sprout_> I worked incrementally towards a solution but in the end it's just creating a 'word -> word' and 'word -> int' mapping
2021-12-08 17:47:06 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 268 seconds)
2021-12-08 17:47:12 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 17:47:15 +0100 <sprout_> the idea is that you only need to create the 'word -> word' permutation map once
2021-12-08 17:47:21 +0100 <sprout_> then it's easy
2021-12-08 17:48:09 +0100 <merijn> Well yeah, but still :p
2021-12-08 17:48:53 +0100 <c_wraith> .... holy crap. after all that time I spent on it last night, I just figured out how to do it as dumb as rocks but actually easy to code.
2021-12-08 17:49:44 +0100 <merijn> c_wraith: My solution isn't super complicated (any more), but I wouldn't call my final solution dumb as rocks, so I'm curious what the dumb as rocks solution is
2021-12-08 17:49:48 +0100 <c_wraith> ... that should have taken me 15 minutes, not the roughly 23 it's going to end up
2021-12-08 17:49:55 +0100 <c_wraith> 23 *hours*, that is
2021-12-08 17:50:18 +0100 <c_wraith> I'll send you a private message
2021-12-08 17:51:49 +0100 <darchitect> I've heard Simon Payton talk about elegant internal language which Haskell compiles down to
2021-12-08 17:52:03 +0100 <darchitect> (presumably lambda calc)
2021-12-08 17:52:20 +0100 <darchitect> does anyone know how to get this representation from ghc ? (for learning purposes)
2021-12-08 17:52:21 +0100 <c_wraith> there are a few levels of internal languages GHC uses
2021-12-08 17:52:26 +0100 <c_wraith> he probably was talking about core
2021-12-08 17:52:42 +0100 <merijn> I would assume he was talking about System F_omega in a talk
2021-12-08 17:52:56 +0100 <c_wraith> well, that the elegant language that core aspires to be :)
2021-12-08 17:53:01 +0100 <c_wraith> *that's
2021-12-08 17:53:39 +0100 <darchitect> I am currently going through the Haskell Book and the first chapter is on lambda calculus, which made me think about my programs in a rather different way
2021-12-08 17:54:16 +0100 <darchitect> and was wondering if I can get a haskell proram to compile down to pure lambda calc
2021-12-08 17:54:23 +0100 <darchitect> but I guess that's not the case ?
2021-12-08 17:54:31 +0100neverfindme(~hayden@158.123.160.43)
2021-12-08 17:54:38 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 17:55:11 +0100 <shapr> darchitect: you could produce STG ? https://github.com/quchen/stgi
2021-12-08 17:55:24 +0100 <merijn> darchitect: tbh, mostly it is. Not to the simply-typed/untyped lambda calculus shown in the Haskell Book
2021-12-08 17:55:31 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 17:55:51 +0100 <monochrom> "pure lambda calculus" does not have built-in integers, it uses huge functions to mimick huge integers. It is utterly impractical to compile Haskell or any useful language to "pure lambda calculus".
2021-12-08 17:56:10 +0100 <merijn> Well, depends on how you define "pure" lambda calculus
2021-12-08 17:56:38 +0100 <monochrom> Sure, but "the Haskell Book" is cited. We all know what's in its Chapter 1. Or rather, what's not in.
2021-12-08 17:57:11 +0100 <darchitect> yeah yeah there is a mention in the book where they say you can derive numbers with lambda calculus but it was ommited
2021-12-08 17:57:17 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 17:57:30 +0100_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-12-08 17:57:33 +0100 <merijn> darchitect: I mean, compiling to untyped lambda calculus is fairly straightforward, but rather impractical, so nobody bothers with that
2021-12-08 17:57:42 +0100 <monochrom> But if you allow yourself to add integers and characters and user-defined data types, GHC does that.
2021-12-08 17:58:10 +0100dmenz(~dmenz@2804:14d:5cd4:5e94::d)
2021-12-08 17:58:47 +0100 <monochrom> I mean if you allow a practical lambda calculus that already comes with those types.
2021-12-08 17:59:01 +0100 <darchitect> yeah I don't have any restrictions just want to play around with the ideas from Chapter 1 and see how they are represented in Haskell
2021-12-08 17:59:18 +0100 <darchitect> can you give me an example representation of a simple haskell program ?
2021-12-08 18:00:46 +0100Feuermagier(~Feuermagi@user/feuermagier)
2021-12-08 18:00:50 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-08 18:01:27 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-12-08 18:02:22 +0100 <merijn> tbh, I'm not really sure how to answer that :)
2021-12-08 18:02:30 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2021-12-08 18:02:37 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:c8d5:dc72:c642:445d)
2021-12-08 18:04:34 +0100 <darchitect> yeah, no worries I reckon the question is a bit vague anyway :d
2021-12-08 18:04:47 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net)
2021-12-08 18:05:03 +0100 <darchitect> nothing important, I just wanted to see if someone has done it before
2021-12-08 18:05:36 +0100 <merijn> darchitect: So one insight is that there isn't really a single "lambda calculus"
2021-12-08 18:05:57 +0100 <merijn> darchitect: Instead there's nearly infinite different lambda calculi based around the rough ideas
2021-12-08 18:06:04 +0100 <darchitect> o.O
2021-12-08 18:06:05 +0100 <boxscape> darchitect: Church encodings are one way to encode data in lambda calculus, but Haskell doesn't actually use it - it has a way to construct data types build in on top of lambda calculus, since it's more efficient https://en.wikipedia.org/wiki/Church_encoding#Church_numerals
2021-12-08 18:06:15 +0100 <merijn> iirc, Haskell Book mostly deals with the "untyped lambda calculus"
2021-12-08 18:06:21 +0100 <boxscape> I guess monochrom more or less said that
2021-12-08 18:06:30 +0100 <monochrom> (There is not even a single "the set of all natural numbers". There are two.)
2021-12-08 18:06:51 +0100 <merijn> darchitect: But there's the Simply Typed Lambda Calculus, etc. All variations of the base idea of the untyped one extended with more toys
2021-12-08 18:06:54 +0100 <monochrom> (More practically, there is not a single "C language" either.)
2021-12-08 18:07:07 +0100 <darchitect> haha thanks guys
2021-12-08 18:07:08 +0100 <merijn> darchitect: The untyped LC is the most popular because it has the smallest number of primitives
2021-12-08 18:07:11 +0100 <darchitect> will look into both
2021-12-08 18:07:14 +0100 <darchitect> of the above
2021-12-08 18:07:18 +0100 <merijn> darchitect: Which makes it mathematically easy to deal with
2021-12-08 18:07:19 +0100 <boxscape> darchitect: you can also compile a program with -ddump-simpl to see the intermediate representation in the Core language (which SPJ was likely talking about), but it's not super readable, since it's not meant for human consumption
2021-12-08 18:07:27 +0100dsrt^(~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 268 seconds)
2021-12-08 18:07:35 +0100 <merijn> darchitect: But also makes it *hopelessly* painful for actual, you know, computation
2021-12-08 18:07:50 +0100 <monochrom> This is what happens to social constructs. https://xkcd.com/927/
2021-12-08 18:08:02 +0100 <darchitect> ... should have joined irc earlier in my life
2021-12-08 18:08:04 +0100 <merijn> darchitect: So you get ideas like "well, what if instead of having just lambdas and applications, we also have numbers and operations on them?"
2021-12-08 18:08:23 +0100 <merijn> darchitect: You *can* implement numbers and math using just untyped LC, but that sucks
2021-12-08 18:09:04 +0100 <darchitect> got it
2021-12-08 18:09:08 +0100 <darchitect> thanks again
2021-12-08 18:09:35 +0100 <merijn> whereas untyped LC + numbers is drastically more efficient with only a fairly small number of extra primitives. In the end "System F_omega" is the language GHC uses internally, which is a lambda calculus that's extended with a whole bunch of stuff like datatypes, types, and what not
2021-12-08 18:09:54 +0100 <merijn> darchitect: But it still looks a hell of a lot like the untyped LC if you squint a bit
2021-12-08 18:10:19 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:c8d5:dc72:c642:445d) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 18:10:34 +0100 <merijn> And converting it into untyped LC basically just means finding LC translations for the extra/added primitives (which we know is doable, we just cannot be bothered)
2021-12-08 18:11:12 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2021-12-08 18:11:23 +0100 <__monty__> >.< Introduced a newline in my input and suddenly my combinator parser required over 10 GB of memory (killed) : s
2021-12-08 18:11:23 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 18:11:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 18:12:22 +0100 <monochrom> \∩/ O(1)-input DoS attacks
2021-12-08 18:12:56 +0100 <__monty__> This is a bit of a sobering experience tbh. I thought I had *some* grasp of parser combinators.
2021-12-08 18:13:26 +0100 <__monty__> Dunning-Kruger effect eliminated.
2021-12-08 18:13:27 +0100 <Dansk31> Hi, are IRC channels the best way to chat anonymously ?
2021-12-08 18:13:51 +0100dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-12-08 18:13:52 +0100nfd(~nfd@user/nfd)
2021-12-08 18:13:54 +0100 <monochrom> Do you absolutely need "best" or is good enough good enough?
2021-12-08 18:13:55 +0100 <merijn> Define anonymously
2021-12-08 18:14:00 +0100 <__monty__> Dansk31: Really not the right channel for such a question. Depends a lot on your definition of anonymous.
2021-12-08 18:14:26 +0100 <monochrom> IRC is good enough. I don't know what "best" means.
2021-12-08 18:14:36 +0100 <monochrom> Err, I know. The best way to win is not to play.
2021-12-08 18:14:48 +0100bollu(uid233390@id-233390.helmsley.irccloud.com)
2021-12-08 18:14:53 +0100 <monochrom> Indeed, I don't even have a Facebook account.
2021-12-08 18:15:41 +0100boxscape_(~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) (Quit: Connection closed)
2021-12-08 18:16:10 +0100neverfindme(~hayden@158.123.160.43) (Remote host closed the connection)
2021-12-08 18:16:28 +0100neverfindme(~hayden@158.123.160.43)
2021-12-08 18:19:39 +0100polezaivsani(~polezaivs@orangeshoelaces.net) (Remote host closed the connection)
2021-12-08 18:20:46 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.3)
2021-12-08 18:21:29 +0100neverfindme(~hayden@158.123.160.43) (Remote host closed the connection)
2021-12-08 18:21:48 +0100neverfindme(~hayden@158.123.160.43)
2021-12-08 18:23:06 +0100srk(~sorki@user/srk) (Remote host closed the connection)
2021-12-08 18:23:21 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net)
2021-12-08 18:23:24 +0100srk(~sorki@user/srk)
2021-12-08 18:23:47 +0100 <Dansk31> Thank you for your answers !
2021-12-08 18:24:06 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 18:24:53 +0100polezaivsani(~polezaivs@orangeshoelaces.net)
2021-12-08 18:26:27 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2021-12-08 18:26:44 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Client Quit)
2021-12-08 18:27:04 +0100nattiestnate(~nate@2001:448a:20a0:4134:25e:715f:d637:5263)
2021-12-08 18:27:19 +0100 <oats> the best way to chat anonymously is in-person, in a soundproofed faraday cage
2021-12-08 18:27:45 +0100 <geekosaur> define anonymously
2021-12-08 18:28:13 +0100 <oats> oh wait anonymously, I interpreted that as "securely" somehow
2021-12-08 18:28:19 +0100 <geekosaur> that5's not so much anonymous as untappabvle. anonymous probably means the other person doesn't know who you are, which that fails on
2021-12-08 18:28:25 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 18:28:39 +0100 <oats> the best way to chat anonymously is message-in-a-bottle
2021-12-08 18:29:14 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 18:30:46 +0100MoC(~moc@user/moc) (Quit: Konversation terminated!)
2021-12-08 18:32:07 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2021-12-08 18:32:09 +0100 <geekosaur> anyway I would say IRC is not particularly anonymous, although you can provide any user info you want other people can see things like the server's idea of your IP address (unless you have a cloak, but then IRC ops know your IP address and possibly other information for you to get that cloak)
2021-12-08 18:32:45 +0100 <geekosaur> there might be e.g. discord servers oriented around anonymity
2021-12-08 18:33:31 +0100 <Dansk31> Yep I will check that
2021-12-08 18:33:36 +0100 <Franciman> don't they get banned?
2021-12-08 18:33:41 +0100zhakupov(~zhakupov@static.90.189.158.74.sinor.ru)
2021-12-08 18:33:41 +0100alx741(~alx741@186.178.108.192) (Quit: alx741)
2021-12-08 18:33:53 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net) ()
2021-12-08 18:34:59 +0100 <geekosaur> federated discord servers likely, but I imagine there are others
2021-12-08 18:35:21 +0100 <geekosaur> or servers federated into networks around anonymity
2021-12-08 18:38:28 +0100emf(~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com)
2021-12-08 18:40:06 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 18:40:22 +0100emf_(~emf@2620:10d:c091:480::1:7b30)
2021-12-08 18:41:02 +0100emf(~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) (Read error: Connection reset by peer)
2021-12-08 18:42:58 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net)
2021-12-08 18:44:26 +0100ubert(~Thunderbi@2a02:8109:9880:303c:d0b4:48a4:6b63:b6a2) (Remote host closed the connection)
2021-12-08 18:45:49 +0100Guest48(~Guest48@wireless-student-pt3-241-129.lut.ac.uk)
2021-12-08 18:46:03 +0100 <Guest48> Hey, is this chat still active?
2021-12-08 18:46:14 +0100 <geekosaur> yes?
2021-12-08 18:46:32 +0100 <DigitalKiwi> no, never
2021-12-08 18:47:09 +0100 <DigitalKiwi> don't listen to geekosaur or any of the other 700+ people that might say otherwise
2021-12-08 18:47:10 +0100Guest48(~Guest48@wireless-student-pt3-241-129.lut.ac.uk) (Client Quit)
2021-12-08 18:47:53 +0100 <sm> shhh
2021-12-08 18:47:53 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 18:49:01 +0100neverfindme(~hayden@158.123.160.43) (Ping timeout: 240 seconds)
2021-12-08 18:49:23 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 18:50:25 +0100neverfindme(~hayden@158.123.160.43)
2021-12-08 18:50:29 +0100zer0bitz_(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi)
2021-12-08 18:52:07 +0100neverfindme(~hayden@158.123.160.43) (Client Quit)
2021-12-08 18:52:13 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Ping timeout: 240 seconds)
2021-12-08 18:52:18 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net) ()
2021-12-08 18:55:49 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 18:57:35 +0100 <DigitalKiwi> i have been shhh'd twice by as many people in 10 minutes
2021-12-08 18:57:41 +0100 <DigitalKiwi> apparently i'm being onery today
2021-12-08 19:01:33 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 19:02:18 +0100zer0bitz_zer0bitz
2021-12-08 19:03:14 +0100simendsjo(~user@84.211.91.241)
2021-12-08 19:04:05 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-08 19:05:45 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 19:06:21 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-08 19:07:17 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2021-12-08 19:07:38 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-12-08 19:09:41 +0100 <EvanR> am I on the right track that learning logic programming would have applications to day 8 of AoC
2021-12-08 19:12:29 +0100georgy(~bc8165b6@cerf.good1.com)
2021-12-08 19:14:24 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 265 seconds)
2021-12-08 19:14:32 +0100alx741(~alx741@186.178.108.192)
2021-12-08 19:16:03 +0100AlainJourez[m](~sherekahn@2001:470:69fc:105::1:4a71)
2021-12-08 19:17:28 +0100justsomeguy(~justsomeg@user/justsomeguy)
2021-12-08 19:17:31 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 19:17:37 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net)
2021-12-08 19:18:09 +0100Erutuon(~Erutuon@user/erutuon)
2021-12-08 19:18:44 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:10e5:165:b849:664a)
2021-12-08 19:20:51 +0100 <tomsmeding> I find it funny that Guest48 immediately left after getting that response
2021-12-08 19:22:15 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 19:23:17 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net) (Remote host closed the connection)
2021-12-08 19:23:26 +0100 <johnjay> i mean. you told him not to listen to geekosaur at all
2021-12-08 19:23:51 +0100 <johnjay> i guess he won't get help now!
2021-12-08 19:25:10 +0100econo(uid147250@user/econo)
2021-12-08 19:25:49 +0100 <shapr> tomsmeding: maybe they were disappointed?
2021-12-08 19:26:00 +0100 <tomsmeding> that the chat was active?
2021-12-08 19:26:05 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 19:26:10 +0100 <tomsmeding> I mean, they got replies from two different people within 2 minutes
2021-12-08 19:26:13 +0100 <tomsmeding> sounds active
2021-12-08 19:26:24 +0100 <tomsmeding> contents of the replies notwithstanding :)
2021-12-08 19:26:27 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2021-12-08 19:26:38 +0100 <monochrom> I doubt that they were even looking for Haskell chat.
2021-12-08 19:27:27 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 19:27:51 +0100ProofTechnique(sid79547@5.254.36.60) (Ping timeout: 245 seconds)
2021-12-08 19:27:51 +0100integral(sid296274@user/integral) (Ping timeout: 245 seconds)
2021-12-08 19:27:51 +0100nrr__(sid20938@lymington.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:27:51 +0100alanz(sid110616@uxbridge.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:27:51 +0100agander_m(sid407952@tinside.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:28:11 +0100jonrh(sid5185@ilkley.irccloud.com) (Read error: Connection reset by peer)
2021-12-08 19:28:12 +0100aria(sid380617@lymington.irccloud.com) (Read error: Connection reset by peer)
2021-12-08 19:28:16 +0100systemfault(sid267009@uxbridge.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:28:16 +0100gmc_(sid58314@ilkley.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:28:16 +0100cln(sid336875@ilkley.irccloud.com) (Ping timeout: 245 seconds)
2021-12-08 19:28:24 +0100alinab(sid468903@helmsley.irccloud.com) (Read error: Connection reset by peer)
2021-12-08 19:28:32 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection)
2021-12-08 19:28:40 +0100truckasaurus(sid457088@helmsley.irccloud.com) (Read error: Connection reset by peer)
2021-12-08 19:29:00 +0100truckasaurus(sid457088@id-457088.helmsley.irccloud.com)
2021-12-08 19:29:07 +0100integral(sid296274@user/integral)
2021-12-08 19:29:07 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 19:29:08 +0100gmc_(sid58314@id-58314.ilkley.irccloud.com)
2021-12-08 19:29:10 +0100alanz(sid110616@id-110616.uxbridge.irccloud.com)
2021-12-08 19:29:12 +0100jonrh(sid5185@id-5185.ilkley.irccloud.com)
2021-12-08 19:29:12 +0100aria(sid380617@id-380617.lymington.irccloud.com)
2021-12-08 19:29:13 +0100agander_m(sid407952@id-407952.tinside.irccloud.com)
2021-12-08 19:29:13 +0100cln(sid336875@id-336875.ilkley.irccloud.com)
2021-12-08 19:29:13 +0100systemfault(sid267009@id-267009.uxbridge.irccloud.com)
2021-12-08 19:29:14 +0100alinab(sid468903@id-468903.helmsley.irccloud.com)
2021-12-08 19:29:28 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 19:29:31 +0100nrr__(sid20938@id-20938.lymington.irccloud.com)
2021-12-08 19:30:04 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-12-08 19:30:08 +0100ProofTechnique(sid79547@id-79547.ilkley.irccloud.com)
2021-12-08 19:30:18 +0100gmc_gmc
2021-12-08 19:31:12 +0100kuribas(~user@ptr-25vy0i9qa16kzbd65yl.18120a2.ip6.access.telenet.be) (Remote host closed the connection)
2021-12-08 19:31:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 19:31:52 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 19:31:52 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 19:34:21 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-12-08 19:35:01 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-08 19:35:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 19:35:55 +0100 <dsal> EvanR: list monad is pretty easy
2021-12-08 19:36:10 +0100 <EvanR> :thonk:
2021-12-08 19:36:42 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi)
2021-12-08 19:40:22 +0100yauhsien(~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-12-08 19:42:56 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2021-12-08 19:43:02 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2021-12-08 19:43:32 +0100SrPx(sid108780@id-108780.uxbridge.irccloud.com) (Ping timeout: 240 seconds)
2021-12-08 19:46:44 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds)
2021-12-08 19:46:56 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 19:47:14 +0100SrPx(sid108780@id-108780.uxbridge.irccloud.com)
2021-12-08 19:47:50 +0100dmenz(~dmenz@2804:14d:5cd4:5e94::d) (Ping timeout: 252 seconds)
2021-12-08 19:47:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 19:48:13 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection)
2021-12-08 19:51:41 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 19:51:54 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-12-08 19:51:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 19:52:13 +0100deadmarshal(~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds)
2021-12-08 19:54:08 +0100 <glguy> dminuoso: https://hackage.haskell.org/package/config-value-0.8.2/changelog
2021-12-08 19:54:59 +0100 <tomsmeding> merijn: day 8 was so easy, part 2 worked on the first compile
2021-12-08 19:55:48 +0100 <tomsmeding> takes 80ms though, probably got c_wraith's "dumb" solution
2021-12-08 19:55:57 +0100 <tomsmeding> hint: 7! is not that large
2021-12-08 19:56:15 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
2021-12-08 19:56:31 +0100 <dsal> I'm not entirely sure why mine's so slow. Guess I should profile. It's taking me around 4s on the big input.
2021-12-08 19:56:33 +0100 <merijn> tomsmeding: Yes, but I took offensive to brute force
2021-12-08 19:56:42 +0100 <tomsmeding> :p can relate
2021-12-08 19:56:44 +0100 <merijn> tomsmeding: Which was also c_wraith's solution
2021-12-08 19:57:07 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2021-12-08 19:57:10 +0100 <merijn> tomsmeding: I've got a working (and mostly) cleaned up version which doesn't result to brute force
2021-12-08 19:57:22 +0100 <tomsmeding> cool!
2021-12-08 19:57:49 +0100 <merijn> tomsmeding: (spoilers, obviously) https://github.com/merijn/AdventOfCode/blob/master/Day8.hs
2021-12-08 19:58:01 +0100 <tomsmeding> merijn: (also spoilers) https://git.tomsmeding.com/AOC/tree/2021/8.hs
2021-12-08 19:58:08 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-12-08 19:58:13 +0100 <merijn> tomsmeding: Mostly I wanna still clean up simplifyConstraints which currently will just loop infinitely if there's an input with no solutions
2021-12-08 19:58:14 +0100 <jkaye> AoC spoiler question: were there any math-based (or inductive) solutions to today's AoC puzzle? I solved it using a simple rule-based deduction, but I'm thinking there was probably something more elegant
2021-12-08 19:58:15 +0100 <tomsmeding> well, less I gues
2021-12-08 19:59:05 +0100 <merijn> jkaye: I did constraint solving without any hard coded rules
2021-12-08 19:59:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 19:59:27 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 19:59:27 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 19:59:59 +0100 <merijn> I guess I should also remove the hack solution for the 1st part
2021-12-08 20:01:16 +0100 <merijn> Since it can trivially be reformulated using my current solution
2021-12-08 20:01:59 +0100 <bitmapper> anyone have any ideas of how to do a membership constraint on type level lists? i did this https://gist.github.com/bitmappergit/dccfbce2ff7ca2bc66d51be187f77928
2021-12-08 20:02:35 +0100 <jkaye> Interesting
2021-12-08 20:02:37 +0100max22-(~maxime@2a01cb088335980011e17f1477c78e4b.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2021-12-08 20:02:50 +0100 <merijn> jkaye: You can check my link from earlier (spoilers, obviously)
2021-12-08 20:02:57 +0100 <dsal> build with --profile doesn't work on my mac, so I guess I'll profile on LInux
2021-12-08 20:02:57 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
2021-12-08 20:03:14 +0100 <EvanR> bitmapper, yes there's a type class based way to say it, I recall from looking at one of the libs
2021-12-08 20:03:23 +0100 <merijn> dsal: Hmm? How/where are you specifying --profile?
2021-12-08 20:03:28 +0100 <jkaye> I basically just wrote a bitwise rule for each number, realizing that regardless of order/value, the bitwise relationships between the numbers always hold
2021-12-08 20:03:34 +0100 <merijn> dsal: Works fine on my mac
2021-12-08 20:03:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2021-12-08 20:03:58 +0100 <jkaye> I'll stop now so I don't spoil it for anyone
2021-12-08 20:04:01 +0100 <jkaye> Thanks for sharing
2021-12-08 20:04:06 +0100 <monochrom> There is no single "mac"... >:)
2021-12-08 20:04:20 +0100 <EvanR> for day 8 I made it play clue
2021-12-08 20:04:22 +0100 <merijn> monochrom: Well, hence the question of "how/where"
2021-12-08 20:04:35 +0100tomsmedingis too tired/lazy to fully understand merijn's code
2021-12-08 20:04:37 +0100shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-12-08 20:04:37 +0100 <dsal> merijn: `stack build --profile`
2021-12-08 20:04:38 +0100 <merijn> Clearly today's puzzle was just to make the prolog programmers happy :p
2021-12-08 20:04:42 +0100 <EvanR> ^
2021-12-08 20:04:45 +0100 <dsal> I'm not going to look into it just yet.
2021-12-08 20:04:49 +0100 <merijn> dsal: Shouldn't that be "--enable-profiling"?
2021-12-08 20:04:55 +0100 <tomsmeding> isn't that cabal
2021-12-08 20:05:12 +0100 <dsal> merijn: I think it works typically. It's failing to compile some dependencies.
2021-12-08 20:05:15 +0100 <merijn> tomsmeding: Sure, but that flag is interpreted by Cabal, so non-zero chance of the same in stack :p
2021-12-08 20:05:24 +0100 <tomsmeding> ah
2021-12-08 20:05:24 +0100 <merijn> dsal: could be, I don't use stack :p
2021-12-08 20:05:31 +0100 <dsal> colour > Could not find module ‘Prelude’
2021-12-08 20:05:31 +0100 <dsal> colour > Perhaps you haven't installed the profiling libraries for package ‘base-4.14.3.0’?
2021-12-08 20:05:34 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-12-08 20:05:37 +0100 <dsal> No idea what led to that thing.
2021-12-08 20:05:37 +0100 <tomsmeding> '--profile' has worked for me before
2021-12-08 20:05:44 +0100 <tomsmeding> dsal: how have you installed haskell, system package manager?
2021-12-08 20:05:46 +0100 <merijn> dsal: oh, you have broken GHC install without profiling libs
2021-12-08 20:05:46 +0100 <tomsmeding> use ghcup instead
2021-12-08 20:05:48 +0100 <monochrom> I have long learned to stop guessing how to use stack.
2021-12-08 20:05:52 +0100 <dsal> tomsmeding: Everything insane. :)
2021-12-08 20:05:58 +0100 <bitmapper> merijn: hahaha i was considering pulling out curry!
2021-12-08 20:06:00 +0100 <dsal> The only stuff that works for me right now is nix + stack, and just barely.
2021-12-08 20:06:14 +0100 <tomsmeding> oh wait this is stack of course
2021-12-08 20:06:20 +0100tomsmedingflees from nix
2021-12-08 20:06:48 +0100 <tomsmeding> but yeah your ghc installation is broken and misses profiling libs
2021-12-08 20:06:52 +0100 <merijn> dsal: If base has no profiling libs, then your GHC install is one without profiling libs, which means either stack or Nix installed a GHC without profiling libs and screwed you
2021-12-08 20:07:00 +0100 <tomsmeding> ^
2021-12-08 20:07:03 +0100 <dsal> ah, that makes sense.
2021-12-08 20:07:17 +0100 <dsal> I used to have this working, and then nothing worked at all, and then it started working some. So maybe it's not done yet.
2021-12-08 20:07:55 +0100 <monochrom> Is your mac an arm mac, not an intel mac?
2021-12-08 20:07:58 +0100jakalx(~jakalx@base.jakalx.net)
2021-12-08 20:08:12 +0100 <dsal> Yes, it's the fanciest ARM
2021-12-08 20:08:36 +0100 <dsal> Chip: Apple M1 Max Total Number of Cores: 10 (8 performance and 2 efficiency)
2021-12-08 20:08:55 +0100 <merijn> I'm glad I'm not you :D
2021-12-08 20:08:57 +0100 <dsal> When I got it, I was having to run all the intel builds.
2021-12-08 20:09:13 +0100 <dsal> My linux machine is pretty plain and boring. It's building all the things right now.
2021-12-08 20:09:34 +0100 <merijn> tbh, it's great that Apple is forcing large parts of tech to support something other than Intel
2021-12-08 20:09:47 +0100 <merijn> But I'm happy I'm not trying to be on that cutting edge xD
2021-12-08 20:09:51 +0100 <dsal> I really like almost everything, but transitions are rough.
2021-12-08 20:10:05 +0100 <dsal> I can run Ableton Live built natively as long as I don't want most of my plugins to work.
2021-12-08 20:10:21 +0100 <janus> amazon is offering gravitron (or whatever its called) too
2021-12-08 20:10:28 +0100 <janus> risc-v is picking up steam
2021-12-08 20:10:34 +0100 <dsal> Oh neat.
2021-12-08 20:10:46 +0100janusrefuses to accept that apple is improving anything :P
2021-12-08 20:11:05 +0100 <dsal> I used to run all my stuff at home on weird ARM-based Linux machines that had almost no support for anything and could build stuff. I'd do GHC builds under QEMU just to get a program I could run on the things.
2021-12-08 20:13:18 +0100 <joeyh> did ghc 9.0.1 change something about forall embedded inside a type, eg type Foo = forall a. (Bar -> a) -> a
2021-12-08 20:13:35 +0100 <DigitalKiwi> hey joeyh!
2021-12-08 20:13:39 +0100 <joeyh> I had to expand such a Foo to make it accept it in a type signature, where it was accepted before
2021-12-08 20:13:41 +0100 <joeyh> hello
2021-12-08 20:13:48 +0100 <tomsmeding> yes, keyword is "simplified subsumption"
2021-12-08 20:14:06 +0100 <tomsmeding> or, hm, you're talking about types
2021-12-08 20:14:15 +0100 <DigitalKiwi> joeyh: how's your arduino project?
2021-12-08 20:14:29 +0100 <tomsmeding> yuo mean expanding the type signature, or having to eta-expand terms of that type?
2021-12-08 20:14:48 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 20:15:08 +0100deadmarshal(~deadmarsh@95.38.228.30)
2021-12-08 20:15:19 +0100 <monochrom> Still, take a look at "simplified subsumption".
2021-12-08 20:15:26 +0100 <joeyh> tomsmeding: I mean I expanded foo :: X -> Foo to foo :: forall a. X -> (Bar -> a) -> a
2021-12-08 20:15:55 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 20:16:12 +0100 <monochrom> "Did it change something about forall in type aliases?" may be barking up the wrong tree because the other tree is the use site of your type alias.
2021-12-08 20:16:13 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 20:16:59 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 252 seconds)
2021-12-08 20:17:03 +0100 <joeyh> DigitalKiwi: it works. I've been thinking about expanding the idea to https://zephyrproject.org/ to support a lot more boards
2021-12-08 20:17:08 +0100 <tomsmeding> joeyh: if I write 'data Bar' ; 'type Foo = forall a. (Bar -> a) -> a' ; 'foo :: Int -> Foo; foo = undefined' then ghci-9.0 shouts at me. If I instead write 'foo _ = undefined' then all is fine
2021-12-08 20:17:17 +0100 <monochrom> One of the things simplified subsumption explicitly talks about is that "X -> forall a. Y" is no longer indistinguishable from "forall a. X -> Y"
2021-12-08 20:17:28 +0100 <DigitalKiwi> joeyh: i haven't played with it in a while i should again
2021-12-08 20:17:53 +0100 <joeyh> tomsmeding: sounds like what I sa
2021-12-08 20:18:05 +0100 <tomsmeding> so the point is not the type, but having to eta-expand foo
2021-12-08 20:18:08 +0100 <monochrom> which is going to affect type aliases because if you say "type T = forall a. Y" then it means "X -> T" is distinguishable from "forall a. X -> Y"
2021-12-08 20:18:19 +0100 <tomsmeding> so this actually is the effect of simplified subsumption
2021-12-08 20:18:33 +0100 <tomsmeding> oh, what monochrom says
2021-12-08 20:18:54 +0100 <joeyh> ok, seems intentional breakage then
2021-12-08 20:18:59 +0100 <tomsmeding> yes
2021-12-08 20:19:10 +0100 <tomsmeding> but (almost) always fixable using eta expansion
2021-12-08 20:19:12 +0100 <monochrom> But it is not like, technically strictly speaking, changing the semantics and legality of "type T = forall a. Y". No change there.
2021-12-08 20:20:23 +0100 <DigitalKiwi> https://hackage.haskell.org/package/arduino-copilot for observers wondering what joeyh and i are talking about
2021-12-08 20:20:37 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds)
2021-12-08 20:21:06 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds)
2021-12-08 20:21:10 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 20:21:36 +0100 <joeyh> DigitalKiwi: I think that copilot is supposed to be getting some better support for typing in the DSL eventually, eg phantom types or something like that. The main thing I feel it needs to be more useful
2021-12-08 20:22:46 +0100 <DigitalKiwi> https://www.dropbox.com/s/2czxqdv8yddll0e/2020-02-27%2011.57.04.mp4?dl=0 this arduino was programmed with haskell
2021-12-08 20:23:54 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 20:25:34 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 20:26:49 +0100nfd(~nfd@user/nfd) (Ping timeout: 268 seconds)
2021-12-08 20:27:23 +0100 <joeyh> in arduino-copilot? code would be: main = arduino $ do { b <- input pin12; led := b; pin13 := b }
2021-12-08 20:28:11 +0100nfd(~nfd@user/nfd)
2021-12-08 20:29:44 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 20:30:56 +0100 <dsal> I'm really surprised parMap isn't using a lot more cores.
2021-12-08 20:31:25 +0100 <dsal> Do I need to do something to make it parMap harder?
2021-12-08 20:33:43 +0100rusty(~rustyboy@2a02:2f0e:5610:ab00:b16b:f583:26df:4061)
2021-12-08 20:34:07 +0100jippiedoe(~david@2a02-a44c-e14e-1-3090-ba98-2dba-9449.fixed6.kpn.net) (Quit: Leaving)
2021-12-08 20:35:01 +0100 <dsal> It speeds stuff up in the small case, but not the large case. Really weird.
2021-12-08 20:40:00 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-12-08 20:42:29 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 20:45:48 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 20:46:01 +0100 <oats> folds are fun, but sometimes you just wanna `go`
2021-12-08 20:47:09 +0100 <monochrom> haha
2021-12-08 20:47:32 +0100gaff(~gaff@49.207.205.24)
2021-12-08 20:47:40 +0100gaff(~gaff@49.207.205.24) (Client Quit)
2021-12-08 20:48:52 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 20:49:02 +0100k60``(~user@94.25.169.9) (Ping timeout: 256 seconds)
2021-12-08 20:50:06 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-12-08 20:52:50 +0100 <dminuoso> tomsmeding: https://gist.github.com/dminuoso/ea39c159219afcb4ba56fef01307da12
2021-12-08 20:52:53 +0100 <dminuoso> This is a small reproducer
2021-12-08 20:54:39 +0100 <tomsmeding> dsal: using sufficiently high +RTS -N? Are your threads allocating once in a while?
2021-12-08 20:55:45 +0100k60``(~user@static.100.218.46.78.clients.your-server.de)
2021-12-08 20:57:52 +0100 <tomsmeding> dminuoso: you need some -XDataKinds :p
2021-12-08 20:58:06 +0100 <dminuoso> tomsmeding: Uh, my copy paste skills elude me.
2021-12-08 20:58:18 +0100 <dminuoso> Guess I wasnt entirely scrolled up in my editor there
2021-12-08 21:01:18 +0100jonas39(~jonas@pool-108-49-252-36.bstnma.fios.verizon.net)
2021-12-08 21:01:50 +0100 <jonas39> Is it accurate to say that monads are an abstraction on function composition?
2021-12-08 21:02:00 +0100 <tomsmeding> dminuoso: and what's your question about this? why this error or how to fix it nicely?
2021-12-08 21:02:27 +0100 <c_wraith> jonas39: it's more accurate to say that monads are a generalization of function composition
2021-12-08 21:02:47 +0100 <c_wraith> jonas39: or rather that Kleisli categories are, but those are the same thing as monads
2021-12-08 21:02:57 +0100 <dminuoso> tomsmeding: So its funny, as I was staring at it, I begin to realize why I had so much confusion at the end.
2021-12-08 21:03:14 +0100 <dminuoso> There was a spurious AllowAmbiguousTypes, which made me scratch my head so much..
2021-12-08 21:03:30 +0100 <tomsmeding> which allows the definition but postpones the trouble to call time :p
2021-12-08 21:04:17 +0100 <jonas39> c_wraith: I realized this after learning about kleisli arrows. It is becoming more clear now thanks.
2021-12-08 21:04:29 +0100 <dminuoso> tomsmeding: Right! So roughly what I had was another function `f :: Sel Char -> String; f sel = doc sel`, and GHC kept giving me ambiguitiy errors on `doc sel`
2021-12-08 21:04:48 +0100 <dminuoso> And it seemed to make absolutely no sense, because my `Sel` was already monomorphizeable
2021-12-08 21:05:15 +0100 <dminuoso> Hold on..
2021-12-08 21:05:17 +0100 <dminuoso> No this works.
2021-12-08 21:05:19 +0100 <dminuoso> Okay Im baffled now.
2021-12-08 21:05:28 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 256 seconds)
2021-12-08 21:06:13 +0100 <tomsmeding> doesn't seem to typecheck for me
2021-12-08 21:06:16 +0100 <tomsmeding> even with AAT
2021-12-08 21:06:31 +0100 <dminuoso> Hold on
2021-12-08 21:06:48 +0100juhp(~juhp@128.106.188.82)
2021-12-08 21:06:49 +0100 <dminuoso> Try this https://gist.github.com/dminuoso/6b9181446eaffac9ceb0771a0e013d3b
2021-12-08 21:07:00 +0100mrckndt8(~mrckndt@user/mrckndt)
2021-12-08 21:07:00 +0100 <dminuoso> I mean it seems obvious that this should even type check
2021-12-08 21:07:14 +0100jonas39(~jonas@pool-108-49-252-36.bstnma.fios.verizon.net) (Quit: Client closed)
2021-12-08 21:07:40 +0100tired-(~tired@user/tired)
2021-12-08 21:07:44 +0100exarkun_(~exarkun@user/exarkun)
2021-12-08 21:08:04 +0100acro_(~acro@user/acro)
2021-12-08 21:08:23 +0100 <tomsmeding> dminuoso: that also typechecks without AAT for me
2021-12-08 21:09:41 +0100 <tomsmeding> dminuoso: added some Proxy to your previous paste https://paste.tomsmeding.com/75qOA3xD
2021-12-08 21:09:49 +0100 <tomsmeding> oh crap wrong code
2021-12-08 21:09:54 +0100tristanC_(~tristanC@163.172.94.116)
2021-12-08 21:10:10 +0100 <tomsmeding> dminuoso: this one https://paste.tomsmeding.com/gPdxCvQ6
2021-12-08 21:10:24 +0100df_(~ben@justworks.xyz)
2021-12-08 21:10:35 +0100platz_(~platz@40.122.118.113)
2021-12-08 21:10:42 +0100Ankhers_(~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com)
2021-12-08 21:11:23 +0100 <dminuoso> tomsmeding: The reproducer was bad.
2021-12-08 21:11:26 +0100 <dminuoso> Let me try and recreate it again
2021-12-08 21:12:51 +0100simendsjo(~user@84.211.91.241) (Remote host closed the connection)
2021-12-08 21:13:30 +0100relrod_(~relrod@redhat/ansible.staff.relrod)
2021-12-08 21:14:30 +0100mrckndt(~mrckndt@user/mrckndt) (Quit: Ping timeout (120 seconds))
2021-12-08 21:14:30 +0100tired(~tired@user/tired) (Quit: /)
2021-12-08 21:14:30 +0100acro(~acro@user/acro) (Quit: Bye.)
2021-12-08 21:14:30 +0100Ankhers(~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com) (Quit: ZNC 1.8.2 - https://znc.in)
2021-12-08 21:14:30 +0100w1gz(~do@159.89.11.133) (Ping timeout: 260 seconds)
2021-12-08 21:14:30 +0100exarkun(~exarkun@user/exarkun) (Ping timeout: 260 seconds)
2021-12-08 21:14:30 +0100mrckndt8mrckndt
2021-12-08 21:14:30 +0100tristanC(~tristanC@user/tristanc) (Ping timeout: 260 seconds)
2021-12-08 21:14:31 +0100platz(~platz@user/platz) (Ping timeout: 260 seconds)
2021-12-08 21:14:31 +0100df(~ben@justworks.xyz) (Ping timeout: 260 seconds)
2021-12-08 21:14:31 +0100relrod(~relrod@redhat/ansible.staff.relrod) (Ping timeout: 260 seconds)
2021-12-08 21:14:31 +0100acro_acro
2021-12-08 21:14:31 +0100Ankhers_Ankhers
2021-12-08 21:15:18 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 21:15:27 +0100Akiva(~Akiva@user/Akiva)
2021-12-08 21:17:01 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 21:18:41 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 21:18:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 21:19:38 +0100zhakupov(~zhakupov@static.90.189.158.74.sinor.ru) (Ping timeout: 256 seconds)
2021-12-08 21:19:41 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 252 seconds)
2021-12-08 21:21:41 +0100 <dminuoso> tomsmeding: https://gist.github.com/dminuoso/9144f5a72f645896a8a9f7c3d90eb423
2021-12-08 21:22:08 +0100zmt00(~zmt00@user/zmt00)
2021-12-08 21:23:03 +0100 <tomsmeding> I was going b.hs, c.hs locally, now you jump all the way ahead to f, we can't have that
2021-12-08 21:23:29 +0100 <dminuoso> Haha
2021-12-08 21:23:39 +0100 <dminuoso> f.hs is such muscle memory for gist
2021-12-08 21:23:57 +0100 <dminuoso> Let me try and reduce it a bit further
2021-12-08 21:25:26 +0100 <dminuoso> Updated.
2021-12-08 21:25:32 +0100 <dminuoso> yeah, this captures the issue I had very well
2021-12-08 21:26:41 +0100 <tomsmeding> yeah this can be fixed with a proxy
2021-12-08 21:26:53 +0100 <tomsmeding> but indeed ghc can't infer which proxy you mean
2021-12-08 21:27:26 +0100 <dminuoso> I guess by proxy you mean specifying `f (Proxy @Field) sel` right?
2021-12-08 21:27:31 +0100 <dminuoso> It seems the problem is that you end up with:
2021-12-08 21:27:38 +0100 <dminuoso> `Sel () ~ forall. mode. ArgF mode -> Inner mode ()`
2021-12-08 21:27:41 +0100 <tomsmeding> https://paste.tomsmeding.com/KaBp8hul
2021-12-08 21:28:04 +0100 <tomsmeding> oh the ScopedTypeVariables is not needed of course
2021-12-08 21:28:13 +0100 <tomsmeding> was for your earlier, non-reduced example
2021-12-08 21:28:24 +0100 <dminuoso> Or this right
2021-12-08 21:28:52 +0100 <dminuoso> Maybe Im just thrown off by the error message
2021-12-08 21:29:05 +0100_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-12-08 21:29:29 +0100 <tomsmeding> the issue is that you have a 'sel :: forall mode. ArgF mode -> Inner mode pat', and you're passing it to an argument which has type "forall mode'. ArgF mode' -> Inner mode' pat'" for some pat'
2021-12-08 21:30:03 +0100 <tomsmeding> so GHC has to unify "Inner mode pat" and "Inner mode pat'", but it can't use this unification to deduce anything about pat' because Inner is non-injective
2021-12-08 21:31:00 +0100 <tomsmeding> (recall that a function f is injective if f x = f y => x = y)
2021-12-08 21:31:13 +0100 <dminuoso> Are these two not alpha equivalent?
2021-12-08 21:31:34 +0100 <tomsmeding> sure, you can _choose_ pat' ~ pat and make the constraints work out
2021-12-08 21:31:47 +0100 <tomsmeding> but you have no guarantee that that is the only valid choice for pat'
2021-12-08 21:32:00 +0100 <tomsmeding> because there may be other values for pat' for which Inner mode pat' ~ Inner mode pat
2021-12-08 21:32:35 +0100 <tomsmeding> in fact, I'm indirectly forcing this choice pat' ~ pat by forcing pat' to equal the type parameter of that Proxy, which I set to pat
2021-12-08 21:32:41 +0100 <dminuoso> So I guess one solution would be to newtype Sel intead.
2021-12-08 21:32:45 +0100 <tomsmeding> yes
2021-12-08 21:33:12 +0100 <tomsmeding> that fixes the problem too :p
2021-12-08 21:33:23 +0100 <dminuoso> It seems my naive expectation was constantly "Hey you tool, Im giving you `Sel ()`, and you allow `Sel a`. Work it out!"
2021-12-08 21:33:27 +0100 <tomsmeding> and is probably a nicer solution, depending on the rest of your code
2021-12-08 21:33:37 +0100 <tomsmeding> right, which works for injective type constructors
2021-12-08 21:33:40 +0100 <tomsmeding> but Sel is not
2021-12-08 21:33:44 +0100 <tomsmeding> and newtypes and data types are
2021-12-08 21:34:17 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:e6c3:e85f:49be:975c)
2021-12-08 21:34:20 +0100 <dminuoso> tomsmeding: So it seems one other solution would be to fix mode
2021-12-08 21:34:31 +0100 <dminuoso> Because then GHC can resolve the type family, and then do regular plain old unification
2021-12-08 21:34:57 +0100 <tomsmeding> as in, make 'mode' a type parameter to Sel?
2021-12-08 21:35:19 +0100 <dminuoso> No as in:
2021-12-08 21:35:41 +0100 <dminuoso> `f (sel @Field)`
2021-12-08 21:35:46 +0100 <dminuoso> Except for some reason I cant specify that
2021-12-08 21:36:31 +0100 <dminuoso> oh wait
2021-12-08 21:36:36 +0100 <dminuoso> No I begin to see the problem
2021-12-08 21:36:59 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 21:37:00 +0100 <dminuoso> The problem is that `f` demands a polymorphic Sel
2021-12-08 21:37:03 +0100 <tomsmeding> not sure that applies Field to the right type variable
2021-12-08 21:37:04 +0100 <dminuoso> And g has no control over that
2021-12-08 21:37:07 +0100 <tomsmeding> right
2021-12-08 21:38:02 +0100 <tomsmeding> I like the newtype; they are kind of a catch-all solution for type inference issues it seems
2021-12-08 21:38:20 +0100 <dminuoso> newtypes dont work well for my problem domain
2021-12-08 21:38:34 +0100 <dminuoso> Tagged is by far the most ergonomic option
2021-12-08 21:38:38 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 21:38:38 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 21:38:38 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 21:38:40 +0100 <tomsmeding> they allow recursive ("infinite") types, and fix type inference surrounding universal quantification and non-injectivity
2021-12-08 21:38:45 +0100 <tomsmeding> ah
2021-12-08 21:38:54 +0100 <dminuoso> tomsmeding: Look at ArgF, do you see why?
2021-12-08 21:39:04 +0100 <dminuoso> Though hold on
2021-12-08 21:39:08 +0100 <dminuoso> Let me give it a try
2021-12-08 21:39:14 +0100 <tomsmeding> 'Sel field1', right?
2021-12-08 21:39:23 +0100 <tomsmeding> or am I brainfarting
2021-12-08 21:40:03 +0100 <tomsmeding> how should I delimit code blocks here on irc
2021-12-08 21:40:10 +0100 <tomsmeding> all the quotes are taken by haskell
2021-12-08 21:40:42 +0100 <dminuoso> tomsmeding: I guess its just mildly annoying that I then have to wrap each field accessor with a newtype.
2021-12-08 21:40:44 +0100 <byorgey> guillemets
2021-12-08 21:40:47 +0100 <tomsmeding> I guess the correct answer is «
2021-12-08 21:40:48 +0100 <tomsmeding> yeah
2021-12-08 21:40:51 +0100 <byorgey> =D
2021-12-08 21:41:10 +0100 <tomsmeding> dminuoso: true
2021-12-08 21:41:19 +0100 <geekosaur> I just use `, it's only ambiguous if the content is a single identifier :)
2021-12-08 21:41:37 +0100 <tomsmeding> but I don't feel like adding a hotkey to my keyboard layout for guillemets :p
2021-12-08 21:41:42 +0100 <dminuoso> tomsmeding: So the two solutions we now have is: newtype on Sel, which means *every* use site has to wrap the selector before passing it around, or we use Tagged + tyfam fundeps, which just imposes a `runTagged` each time you use the `ArgF Descr` style
2021-12-08 21:41:48 +0100 <tomsmeding> geekosaur: true
2021-12-08 21:42:01 +0100 <dminuoso> tomsmeding: Given that the `Field` mode is by far used more, the second approach seems less intrusive
2021-12-08 21:42:08 +0100 <dminuoso> otoh, with newtypes you get far easier diagnostics..
2021-12-08 21:42:17 +0100exarkun_exarkun
2021-12-08 21:42:31 +0100 <tomsmeding> are you using the selectors as actual selectors as well
2021-12-08 21:42:45 +0100 <dminuoso> Well, only to read fields.
2021-12-08 21:42:50 +0100 <tomsmeding> if not, do the lens thing and define the natural selector names as newtype-wrapped versions of the actual ones
2021-12-08 21:42:53 +0100 <tomsmeding> ah
2021-12-08 21:43:06 +0100 <dminuoso> Let me give you a broad idea what i Have:
2021-12-08 21:43:14 +0100 <dminuoso> To introduce you why I started this whole thing:
2021-12-08 21:43:52 +0100 <dminuoso> tomsmeding: https://gist.github.com/dminuoso/7df4f8ad87906050e08a0c1a0e041234
2021-12-08 21:44:23 +0100 <dminuoso> Now, I can simply fling a selector around, and the relevant code can first check the authorization, while at the same time logging the correct description using permsDescr
2021-12-08 21:44:36 +0100 <dminuoso> And at the same time, permsDescr is used in the config parser for diagnostics and help output
2021-12-08 21:44:44 +0100 <dminuoso> permTSIGKeyDelete <- optSection' "tsigKeyDelete" auth''spec (descr permTSIGKeyDelete)
2021-12-08 21:44:47 +0100 <dminuoso> Using lines like that
2021-12-08 21:44:54 +0100 <tomsmeding> auth''spec
2021-12-08 21:45:02 +0100 <tomsmeding> but yeah I figured this was for automatic documentation
2021-12-08 21:45:13 +0100 <tomsmeding> or, automatic description of the fields
2021-12-08 21:45:17 +0100 <dminuoso> Indeed.
2021-12-08 21:45:53 +0100 <tomsmeding> so where would the Tagged go exactly, again?
2021-12-08 21:46:26 +0100 <dminuoso> type family Inner tag field = r | r -> tag field where Inner Field f = Maybe f; Inner Descr f = Tagged f T.Text
2021-12-08 21:46:32 +0100 <dminuoso> Note, that by using Tagged we can make the tyfam injective
2021-12-08 21:46:41 +0100 <dsal> tomsmeding: Yeah, I think so, just -N. It seems like an ideal parallel case, but only half my cores spin up.
2021-12-08 21:46:43 +0100pfurla_(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390)
2021-12-08 21:47:05 +0100 <tomsmeding> dsal: check if your computations allocate
2021-12-08 21:47:11 +0100 <dminuoso> tomsmeding: ah hold on, this gist is mispaste because emacs had a non-reverted buffer
2021-12-08 21:47:20 +0100 <tomsmeding> if a computation doesn't allocate, it doesn't yield to the scheduler, and stuff gets locked up and no more threads get spawned
2021-12-08 21:47:51 +0100 <tomsmeding> I fought with this a while ago, though I had N-1 threads instead of N/2
2021-12-08 21:47:57 +0100 <dminuoso> tomsmeding: Its updated.
2021-12-08 21:48:08 +0100 <tomsmeding> so the "solution" (read: workaround) was -N$(($(njobs) + 1))
2021-12-08 21:48:25 +0100 <monochrom> But parMap uses sparks. Do they work differently from threads?
2021-12-08 21:48:31 +0100 <dminuoso> tomsmeding: Also note that Authorization'' is where auth''spec comes from. :p
2021-12-08 21:49:14 +0100 <tomsmeding> monochrom: I wasn't able to get reliably N threads with -N N when I tried a few months ago, in any way whatsoever, if the computations don't allocate often
2021-12-08 21:49:43 +0100pfurla_(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) (Client Quit)
2021-12-08 21:50:01 +0100 <dsal> I'm definitely allocating in the work.
2021-12-08 21:50:12 +0100 <merijn> tomsmeding: You can just set the number of capabilities in code?
2021-12-08 21:50:13 +0100 <tomsmeding> dminuoso: oh right, to make Inner injective
2021-12-08 21:50:17 +0100 <dminuoso> Indeed.
2021-12-08 21:50:31 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:10e5:165:b849:664a) (Ping timeout: 265 seconds)
2021-12-08 21:50:38 +0100smartin(~Thunderbi@88.135.18.171)
2021-12-08 21:50:42 +0100 <tomsmeding> merijn: I believe I didn't try that, then, but I feel like that shouldn't do anything different than the -N switch, right?
2021-12-08 21:50:48 +0100 <dminuoso> tomsmeding: This comes at the cost of every time I want to pull the documentation, I have to `runTagged`. But honestly, with newtype *everytime* you wanted to use a selector you'd have to unSel it, and everytime you wanted to pass it you'd have to Sel it.
2021-12-08 21:50:56 +0100 <dminuoso> So ergonomically that seems far worse
2021-12-08 21:51:01 +0100 <tomsmeding> dminuoso: makes sense
2021-12-08 21:51:08 +0100 <merijn> tomsmeding: No, but then you don't have to remember to set flags and compiles with those flags enabled :p
2021-12-08 21:51:29 +0100 <tomsmeding> dminuoso: ah, and it also kind of makes sense: the documentation is just a string, but it's tagged with the type of the thing that it's documenting
2021-12-08 21:51:48 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390)
2021-12-08 21:51:48 +0100 <tomsmeding> it's not a completely random type that's tucked somewhere just to make inference work out, it actually makes some semantic sense somehow
2021-12-08 21:51:51 +0100 <tomsmeding> I like it
2021-12-08 21:51:59 +0100 <tomsmeding> merijn: that was not my problem :p
2021-12-08 21:52:02 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) (Client Quit)
2021-12-08 21:52:07 +0100 <tomsmeding> my problem was that I specify N threads and only N-1 do stuff
2021-12-08 21:52:52 +0100 <merijn> tomsmeding: If N = number of cores, you shouldn't run N threads anyway, for reasons that mean it's not entirely unlikely that only N-1 do stuff :p
2021-12-08 21:56:26 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390)
2021-12-08 21:56:33 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 21:56:59 +0100 <dminuoso> tomsmeding: Fun thing, I cant have `Field f = f` because of this either. But luckily I want every field wrapped in Maybe anyway!
2021-12-08 21:57:15 +0100 <dminuoso> So instead of putting it into the field, I just toss it into `Inner Field f = Maybe f` instead
2021-12-08 21:57:15 +0100 <tomsmeding> dminuoso: heh yeah
2021-12-08 21:57:21 +0100 <tomsmeding> #hacks
2021-12-08 21:57:23 +0100 <dminuoso> :>
2021-12-08 21:57:34 +0100 <tomsmeding> that indeed seems the appropriate emoji somehow
2021-12-08 21:58:54 +0100max22-(~maxime@2a01cb088335980012b6a709282cc846.ipv6.abo.wanadoo.fr)
2021-12-08 21:59:14 +0100rusty(~rustyboy@2a02:2f0e:5610:ab00:b16b:f583:26df:4061) (Quit: Leaving)
2021-12-08 21:59:26 +0100 <dsal> -e200000 got it to burn more cores, but not really go faster.
2021-12-08 21:59:34 +0100 <dminuoso> tomsmeding: Here's another cute trick you can do with this:
2021-12-08 21:59:40 +0100 <dminuoso> describe :: forall a pat. (Typeable a, Tagged a String ~ Inner Descr pat) => Sel pat -> TypeRep
2021-12-08 21:59:40 +0100 <dsal> Oh wait, because I overshot -N
2021-12-08 21:59:42 +0100 <dminuoso> describe _ = typeOf (undefined :: a)
2021-12-08 21:59:51 +0100 <dminuoso> This is another benefit of Tagged
2021-12-08 22:00:07 +0100 <dminuoso> Sadly I have no use for this. :(
2021-12-08 22:00:08 +0100 <merijn> dsal: Did you disbable parallel GC< btw?
2021-12-08 22:01:05 +0100 <tomsmeding> dminuoso: does that work? Like, can ghc infer what `pat` should be there?
2021-12-08 22:01:37 +0100 <dminuoso> Yes
2021-12-08 22:01:41 +0100 <dsal> -qg slows it down a lot.
2021-12-08 22:02:00 +0100 <dminuoso> tomsmeding: https://gist.github.com/dminuoso/28a5b34a92e4dc050313827ed2470ef9
2021-12-08 22:02:05 +0100 <dminuoso> run this and try `describe field1`
2021-12-08 22:02:12 +0100 <dsal> With `+RTS -N -e200000` it uses all the cores.
2021-12-08 22:02:20 +0100 <merijn> dsal: It *slows down* with -qg? o.O
2021-12-08 22:02:33 +0100 <merijn> dsal: I wanna see the output of +RTS -sstderr
2021-12-08 22:02:57 +0100 <dsal> With -qg it only uses ~1 core.
2021-12-08 22:03:05 +0100 <merijn> For GC...
2021-12-08 22:03:18 +0100 <merijn> It doesn't affect the number of capabilities
2021-12-08 22:03:25 +0100 <dminuoso> tomsmeding: Another solution in this design space would be to attach this documentation string to each field via Tagged and symbols.
2021-12-08 22:03:28 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 22:03:43 +0100 <merijn> "+RTS -N" without -qg is almost always a mistake
2021-12-08 22:03:46 +0100 <dminuoso> But then I have to Tagged/runTagged fields all over the place. :(
2021-12-08 22:03:59 +0100 <tomsmeding> dminuoso: interesting tradeoff
2021-12-08 22:04:37 +0100 <dminuoso> i.e. so you'd have `data Foo = Foo { field1 :: Tagged "its a field" Char, field2 :: Tagged "another field" Int }`
2021-12-08 22:04:54 +0100 <dminuoso> This incurs far less extensions and is mostly unnoticeable
2021-12-08 22:05:14 +0100 <dminuoso> But if you have any unification errors with those fields, the diagnostics will be a bit noisy
2021-12-08 22:05:19 +0100 <dsal> merijn: this is with -qg https://www.irccloud.com/pastebin/CMwJgYfY/sstdout.txt
2021-12-08 22:05:33 +0100 <dminuoso> Well. Unnoticeable apart from having to runTagged/Tagged everywhere
2021-12-08 22:05:34 +0100 <merijn> 36% productivity oof
2021-12-08 22:05:44 +0100 <dminuoso> But if you use `lenses`, you could hide this away
2021-12-08 22:05:49 +0100 <merijn> What's the code?
2021-12-08 22:06:17 +0100 <dsal> merijn: Do you want something runnable?
2021-12-08 22:06:24 +0100 <dminuoso> tomsmeding: Mmm. Actually this might be tempting
2021-12-08 22:06:29 +0100 <tomsmeding> dminuoso: facepalm of course 'pat' is inferrable, because Inner is now injective so all is sweet
2021-12-08 22:06:33 +0100 <dminuoso> Yup
2021-12-08 22:06:44 +0100 <dsal> This is my aoc day 8. It's a list monad. * each line of input.
2021-12-08 22:06:57 +0100 <merijn> dsal: Not gonna be running it anyway :p
2021-12-08 22:07:15 +0100 <tomsmeding> dminuoso: I also kind of like the type level version, but only you know whether the newtype (un)wrapping is doable or not
2021-12-08 22:07:21 +0100 <merijn> Only looking at IRC to modulate videogame frustration levels xD
2021-12-08 22:07:29 +0100 <dsal> part2 :: [Line] -> Int ; part2 = sum . parMap rseq decodeLine
2021-12-08 22:07:49 +0100 <dminuoso> tomsmeding: Honestly, the more I have worked with this, the more I realize this is black magic to anyone not involved in type families
2021-12-08 22:07:58 +0100 <dsal> decodeLine figures out what map works and then applies it to the "output" section. So it's definitely doing some work.
2021-12-08 22:08:04 +0100 <dminuoso> Nothing about it is clear to unsuspecting users.
2021-12-08 22:08:11 +0100 <dsal> without the -qg (and another 0 of -e) : Productivity 76.4% of total user, 9.4% of total elapsed
2021-12-08 22:08:30 +0100 <tomsmeding> dminuoso: then perhaps the Tagged-with-docs-in-Symbol version is actually more accessible, even if more noisy
2021-12-08 22:08:35 +0100 <dsal> It doesn't actually get *faster*, but it does more.
2021-12-08 22:08:41 +0100 <merijn> dsal: Basically that means you have a giant live set, which I guess isn't surprising with the parMap + rseq
2021-12-08 22:08:58 +0100 <dminuoso> It's sort of annoying we have no way of annotating data types
2021-12-08 22:08:58 +0100 <tomsmeding> dsal: I can relate
2021-12-08 22:09:14 +0100 <dsal> Let me try -N8. I have this asymmetrical multiprocessor thing going on.
2021-12-08 22:09:27 +0100 <dsal> I like that it's working harder. I'd just hope that'd make it go faster.
2021-12-08 22:09:38 +0100 <merijn> But that's also a *giant* time for the problem
2021-12-08 22:09:49 +0100 <dsal> Oh, it says it decided on -N10
2021-12-08 22:09:51 +0100 <merijn> Isn't the problem simply that decodeLine is super slow
2021-12-08 22:10:28 +0100 <dsal> Sure, if decodeLine is slow, then I'd think using twice as many cores to get the same amount of work done wouldn't take almost the same amount of time.
2021-12-08 22:10:32 +0100 <merijn> 132s, mine is effectively instant doing every line sequentially
2021-12-08 22:11:49 +0100 <sprout_> Imma blow up my laptop with a par_map...
2021-12-08 22:11:58 +0100 <dsal> It's taking me 4s to do the Big Input™ on this machine. Making it more parallel seems to slow it down, but not get it done sooner.
2021-12-08 22:12:12 +0100 <dminuoso> tomsmeding: None of these are really comforting. :(
2021-12-08 22:12:28 +0100 <merijn> dsal: eh, wait
2021-12-08 22:12:43 +0100 <merijn> dsal: Shouldn't it be "parMap rpar" not "parMap rseq"?
2021-12-08 22:13:17 +0100 <dsal> Hmm....
2021-12-08 22:13:26 +0100 <tomsmeding> dminuoso: I agree
2021-12-08 22:13:57 +0100 <dsal> I'd think rseq would get it done in the spark vs. just like, whatever rpar does.
2021-12-08 22:14:12 +0100 <merijn> rpar makes sparks...
2021-12-08 22:14:38 +0100 <merijn> tbh, I'm not sure, I haven't used parallel much
2021-12-08 22:14:45 +0100 <dsal> sparks are flying... when I turn up -e I get a bunch of thread usage.
2021-12-08 22:15:12 +0100 <dsal> Nothing really changes the amount of time it takes to finish, though
2021-12-08 22:16:21 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-12-08 22:17:42 +0100 <merijn> If you're not compute bound this behaviour isn't surprising, though. So the question is "is decodeLine compute bound?" and "if no, how to fix that"
2021-12-08 22:17:53 +0100 <dsal> It does help a lot in smaller data sets.
2021-12-08 22:17:59 +0100 <dsal> It's at the top of my profile
2021-12-08 22:18:12 +0100acidjnk_new(~acidjnk@p200300d0c7271e730cb547fb259b1246.dip0.t-ipconnect.de)
2021-12-08 22:18:24 +0100 <merijn> Which implies that the difference is dataset size, possibly due to keep too much data alive?
2021-12-08 22:18:45 +0100 <dsal> On the smaller data set, parMap is about 8x faster than fmap. On the larger one, it won't show a difference.
2021-12-08 22:18:50 +0100 <merijn> For comparisong, my max residency is: 571,992 bytes maximum residency
2021-12-08 22:19:02 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-12-08 22:19:09 +0100 <merijn> So that's, uh, 2-3 orders of magnitude :)
2021-12-08 22:20:53 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 22:21:14 +0100 <sprout_> https://github.com/egel-lang/aoc-2021/blob/main/day8/task2.eg <- 89 second parallel on the last computation, 29 seconds without par_map ...
2021-12-08 22:21:16 +0100 <sprout_> heh
2021-12-08 22:22:50 +0100 <merijn> dsal: What's decodeLine look like?
2021-12-08 22:22:57 +0100 <sprout_> well doh. guess the overhead of managing 200 threads is substantial...
2021-12-08 22:23:02 +0100 <tomsmeding> merijn: hm, my brute force version has 996224 bytes max residency
2021-12-08 22:23:53 +0100 <merijn> tomsmeding: Get on my level ;)
2021-12-08 22:24:09 +0100 <sprout_> the fastest method so far is just counting digits on each line since those unique identify each other
2021-12-08 22:24:21 +0100 <tomsmeding> :p
2021-12-08 22:24:25 +0100 <sprout_> uh, letters
2021-12-08 22:24:40 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 22:24:43 +0100 <tomsmeding> lol
2021-12-08 22:25:02 +0100 <sprout_> my solution is just picking one of 7! permutations on each line. should be way fast in Haskell too
2021-12-08 22:25:23 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 22:25:33 +0100 <sprout_> Haskell being roughly two orders faster I think
2021-12-08 22:25:35 +0100 <dsal> That's the "brute force" way. I'm doing a bit less brute
2021-12-08 22:26:12 +0100zer0bitz(~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-12-08 22:26:14 +0100 <merijn> dsal: I'm not doing any brute force :p
2021-12-08 22:26:33 +0100 <dsal> merijn: I can paste in a bit, but it's basically computing a map in a list monad and then applying that map to the output side to foldl' up a number
2021-12-08 22:26:49 +0100 <merijn> https://paste.tomsmeding.com/nqzcEvju
2021-12-08 22:27:11 +0100 <sprout_> not sure it's that brute force, I precompute the 7! functions from word to digit and that gives 5040/2*2log(10)*small_constant (maps are easily rejected) or 10k comparisons per line
2021-12-08 22:27:14 +0100 <dsal> Is that the large input?
2021-12-08 22:27:22 +0100 <merijn> dsal: That's the large input, yeah
2021-12-08 22:27:28 +0100 <dsal> Neat
2021-12-08 22:27:32 +0100 <merijn> and tbh, not particularly optimised either
2021-12-08 22:27:44 +0100 <merijn> Which is why I'm so curious why it's so slow for you :p
2021-12-08 22:27:56 +0100 <merijn> I'm not using any list monad stuff, though
2021-12-08 22:28:06 +0100 <dsal> I'm doing a bunch of selects to grab digits and guarding as I go
2021-12-08 22:28:08 +0100 <sprout_> 200k comparisons. shouldn't be a problem for Haskell. not sure you even need a map. log(n) lookup is nice but for a container with only 10 elements...
2021-12-08 22:28:30 +0100 <merijn> dsal: https://github.com/merijn/AdventOfCode/blob/master/Day8.hs
2021-12-08 22:28:32 +0100 <sprout_> shouldn't matter. lists should be good enough
2021-12-08 22:28:46 +0100 <dsal> It's not the slow thing that's the issue right now, it's why it's not faster on the large input with parMap (but it's is on the small input)
2021-12-08 22:28:46 +0100doyougnu(~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Read error: Connection reset by peer)
2021-12-08 22:29:03 +0100 <dsal> merijn: oh, I should point out that's a criterion run
2021-12-08 22:29:30 +0100 <sprout_> dsal: with Egel it's just likely the OS overhead of managing 200 threads. with Haskell I wouldn't know since that should have it's own scheduler
2021-12-08 22:29:32 +0100 <merijn> dsal: Well, since a lot of time is GC time and GC time is proportional to live set, having parallelism on a large set of input increases the liveset and thus GC time
2021-12-08 22:30:06 +0100 <merijn> dsal: oh, improper caching with criterion can also mess you up, depending on how you're configuring the criterion benchmarks
2021-12-08 22:31:29 +0100 <sprout_> ah. that too. 200 threads competing on access to the same data structures?
2021-12-08 22:35:20 +0100Guest97(~Guest97@pool-98-111-246-199.pitbpa.ftas.verizon.net)
2021-12-08 22:35:37 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-12-08 22:35:37 +0100wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-12-08 22:35:37 +0100wroathe(~wroathe@user/wroathe)
2021-12-08 22:36:36 +0100 <EvanR> accessing the same immutable data structure shouldn't be an issue
2021-12-08 22:38:11 +0100vicfred(~vicfred@user/vicfred)
2021-12-08 22:38:56 +0100 <dminuoso> tomsmeding: it took me less time to switch to the Tagged than it took to make a reproducer for the tyfam injectivity issues!
2021-12-08 22:39:05 +0100 <dminuoso> I think I made my decision
2021-12-08 22:39:54 +0100 <Guest97> Question - I need the type-level version of the identity function, that is a type `Ident` of kind `* -> *` where `a = Ident a`.
2021-12-08 22:39:54 +0100 <Guest97> I know its possible to construct this using type synonyms in Scala, but when I tried `type Ident a = a`, I can't seem to use `Ident` as a higher-kinded type. Is there any way to do this?
2021-12-08 22:39:56 +0100 <tomsmeding> dminuoso: the Tagged with docs in a Symbol type param?
2021-12-08 22:39:58 +0100 <tomsmeding> nice!
2021-12-08 22:40:06 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2021-12-08 22:40:29 +0100 <dminuoso> tomsmeding: https://gitlab.com/wobcom/haskell/powerdns-gerd/-/blob/master/lib/PowerDNS/Gerd/Permission/Types.h…
2021-12-08 22:40:33 +0100 <tomsmeding> % :i Data.Functor.Identity -- Guest97
2021-12-08 22:40:34 +0100 <yahb> tomsmeding: ; <interactive>:1:1: error: Not in scope: `Data.Functor.Identity'
2021-12-08 22:40:36 +0100 <awpr> there's no current way to pass a non-generative type function as a type parameter, if that's what you're looking for.
2021-12-08 22:40:41 +0100 <tomsmeding> % :i Identity -- Guest97
2021-12-08 22:40:41 +0100 <yahb> tomsmeding: ; <interactive>:1:3: error: parse error (possibly incorrect indentation or mismatched brackets)
2021-12-08 22:40:45 +0100 <tomsmeding> % import Data.Functor.Identity
2021-12-08 22:40:45 +0100 <yahb> tomsmeding:
2021-12-08 22:40:49 +0100 <tomsmeding> % :i Identity
2021-12-08 22:40:49 +0100 <yahb> tomsmeding: type Identity :: * -> *; newtype Identity a = Identity {runIdentity :: a}; -- Defined in `Data.Functor.Identity'; instance Applicative Identity -- Defined in `Data.Functor.Identity'; instance Eq a => Eq (Identity a) -- Defined in `Data.Functor.Identity'; instance Functor Identity -- Defined in `Data.Functor.Identity'; instance Monad Identity -- Defined in `Data.Functor.Identity'; instance Monoid a =>
2021-12-08 22:40:55 +0100 <merijn> Guest97: You can't do that without a newtype
2021-12-08 22:40:57 +0100 <awpr> that's not _exactly_ an identity function, unfortunately
2021-12-08 22:41:07 +0100 <EvanR> what about a type family
2021-12-08 22:41:08 +0100 <awpr> representationally yes, but not nominally
2021-12-08 22:41:16 +0100 <tomsmeding> right
2021-12-08 22:41:16 +0100 <dminuoso> Hah I have another cunning plan
2021-12-08 22:41:18 +0100 <awpr> a type family can't be passed as a type parameter
2021-12-08 22:41:22 +0100 <dminuoso> You can use type constructors in infix position too
2021-12-08 22:41:23 +0100 <merijn> EvanR: You can't have partially applied type families as parameter
2021-12-08 22:41:26 +0100 <merijn> EvanR: So...no
2021-12-08 22:41:26 +0100 <EvanR> oah right
2021-12-08 22:41:32 +0100 <dminuoso> That might look nicer, and would avoid needing to wrap the field in parens
2021-12-08 22:41:37 +0100 <tomsmeding> dminuoso: `WithDocs`?
2021-12-08 22:41:39 +0100myShoggoth(~myShoggot@97-120-85-195.ptld.qwest.net)
2021-12-08 22:41:47 +0100 <myShoggoth> HF November update: https://discourse.haskell.org/t/haskell-foundation-november-update/3797
2021-12-08 22:41:56 +0100 <EvanR> with dependent haskell we can finally write an identity function at the type level? xD
2021-12-08 22:42:04 +0100 <EvanR> if no, that's ridiculous
2021-12-08 22:42:16 +0100 <Guest97> The only constraint I need to satisfy is that `a = f a` for any a, and I have to be able to use `f` as a typeclass parameter
2021-12-08 22:42:30 +0100 <awpr> not possible IIUC
2021-12-08 22:42:51 +0100 <tomsmeding> yeah
2021-12-08 22:43:05 +0100 <Guest97> thanks
2021-12-08 22:43:06 +0100 <Guest97> I can technically do what I'm trying to do with a newtype, but having to throw another isomorphism into the mix is just annoying
2021-12-08 22:43:09 +0100 <awpr> there are workarounds, though: you can pass a stub type and have the consuming thing apply a type family to it
2021-12-08 22:44:11 +0100 <awpr> `data IdentityF` `type family Apply f (a :: k) :: k` `type instance Apply IdentityF a = a` `class MyClass f a where something :: Apply f a -> Bool`
2021-12-08 22:44:32 +0100 <awpr> then `something @IdentityF @a :: a -> Bool`
2021-12-08 22:44:52 +0100 <dminuoso> tomsmeding: Yeah
2021-12-08 22:45:11 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390)
2021-12-08 22:45:12 +0100 <Guest97> oh thats actually genius
2021-12-08 22:45:12 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:e6c3:e85f:49be:975c) (Quit: WeeChat 2.8)
2021-12-08 22:45:52 +0100 <awpr> (this is often called "defunctionalization", and the `singletons` library takes it to extreme lengths)
2021-12-08 22:46:08 +0100 <Guest97> makes sense
2021-12-08 22:47:22 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection)
2021-12-08 22:48:45 +0100Morrow(~quassel@bzq-110-168-31-106.red.bezeqint.net)
2021-12-08 22:48:48 +0100alx741(~alx741@186.178.108.192) (Quit: alx741)
2021-12-08 22:49:01 +0100 <Guest97> rn tho I think its easier for me to just use a newtype
2021-12-08 22:49:02 +0100 <Guest97> Reworking the superclass to use the newtype is gonna be way easier than making defunctionalized versions of most of the things its building on anyway
2021-12-08 22:49:06 +0100 <Guest97> thanks for the help tho
2021-12-08 22:49:13 +0100 <dminuoso> tomsmeding: Oh yes, Ive pushed it already. This looks even nicer!
2021-12-08 22:49:30 +0100 <dminuoso> Also cute benefit, the unwrapping functions name:
2021-12-08 22:49:37 +0100 <awpr> yeah I've generally found in the things I've worked on that defunctionalizing ended up being more annoying than just doing the newtype
2021-12-08 22:49:38 +0100 <dminuoso> data newtype WithDocs b (s :: Symbol) = WithDocs { withoutDocs :: b }
2021-12-08 22:49:54 +0100 <tomsmeding> :)
2021-12-08 22:49:57 +0100alx741(~alx741@186.178.108.192)
2021-12-08 22:50:05 +0100 <dminuoso> Bikeshedded into oblivion.
2021-12-08 22:50:07 +0100 <dminuoso> Thanks :)
2021-12-08 22:50:11 +0100 <tomsmeding> still see Tagged on the link you sent though
2021-12-08 22:50:48 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 22:51:42 +0100 <dminuoso> Check again?
2021-12-08 22:52:40 +0100 <tomsmeding> <3
2021-12-08 22:53:08 +0100 <tomsmeding> a newline got introduced though before the 'Per zone' section
2021-12-08 22:53:30 +0100 <tomsmeding> (noticed because the line highlight now stops one line before the end of the data type
2021-12-08 22:53:31 +0100 <tomsmeding> )
2021-12-08 22:54:08 +0100 <dminuoso> tomsmeding: Yeah, already fixed that up because I realized I can put `WithDocs` "foo" on a separate line as well
2021-12-08 22:54:34 +0100 <dminuoso> Pushed, if you like to see
2021-12-08 22:54:46 +0100 <dminuoso> I think this is quite acceptable now
2021-12-08 22:54:46 +0100 <tomsmeding> oh that's nice indeed
2021-12-08 22:54:55 +0100 <tomsmeding> quite high, but nice
2021-12-08 22:55:11 +0100 <tomsmeding> alternative would be alignment, but then you get long lines
2021-12-08 22:55:22 +0100 <tomsmeding> bikeshedded into oblivion indeed
2021-12-08 22:58:15 +0100Akiva(~Akiva@user/Akiva) (Quit: WeeChat 3.3)
2021-12-08 22:58:35 +0100Akiva(~Akiva@user/Akiva)
2021-12-08 22:59:09 +0100 <dminuoso> tomsmeding: But with this indentation style, I could have kept Tagged!
2021-12-08 22:59:31 +0100 <tomsmeding> nooooo
2021-12-08 22:59:34 +0100 <tomsmeding> this is better
2021-12-08 23:00:05 +0100 <dminuoso> Because this reads `foo :: Maybe [Baz]` at first glance?
2021-12-08 23:00:30 +0100 <tomsmeding> yes, and because WithDocs precisely says what it means
2021-12-08 23:00:36 +0100 <tomsmeding> s/cs/c/
2021-12-08 23:00:53 +0100meinside(uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 23:01:34 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 265 seconds)
2021-12-08 23:02:18 +0100user0(~aj@154.0.137.32) (Quit: Leaving.)
2021-12-08 23:03:24 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 23:03:30 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 23:05:10 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 23:05:23 +0100 <dminuoso> Guess another benefit is that I dont need polykinds
2021-12-08 23:05:27 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 23:05:35 +0100 <dminuoso> Because WithDocs is tied to just (s :: Symbol)
2021-12-08 23:06:32 +0100retroid_(~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds)
2021-12-08 23:09:41 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 23:09:58 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 23:10:47 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-12-08 23:13:59 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 23:14:17 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 23:15:42 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-12-08 23:15:54 +0100lavaman(~lavaman@98.38.249.169)
2021-12-08 23:17:57 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 23:18:15 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com)
2021-12-08 23:18:29 +0100jgeerds(~jgeerds@55d4ac73.access.ecotel.net)
2021-12-08 23:18:38 +0100mcgroin(~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds)
2021-12-08 23:20:03 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-12-08 23:21:02 +0100jespada(~jespada@87.74.37.56) (Ping timeout: 240 seconds)
2021-12-08 23:22:13 +0100k60``(~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 240 seconds)
2021-12-08 23:23:21 +0100jespada(~jespada@87.74.33.157)
2021-12-08 23:23:21 +0100Guest48(~Guest48@wireless-student-pt3-241-129.lut.ac.uk)
2021-12-08 23:24:03 +0100retroid_(~retro@05412d78.skybroadband.com)
2021-12-08 23:24:08 +0100superstar64(~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4)
2021-12-08 23:24:11 +0100k60``(~user@static.100.218.46.78.clients.your-server.de)
2021-12-08 23:25:29 +0100Guest48(~Guest48@wireless-student-pt3-241-129.lut.ac.uk) (Client Quit)
2021-12-08 23:25:59 +0100waleee(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2021-12-08 23:27:04 +0100jeetelongname(~jeet@148.197.248.50)
2021-12-08 23:27:27 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) (Quit: gone to sleep. ZZZzzz…)
2021-12-08 23:27:30 +0100hskpractice(~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection)
2021-12-08 23:28:22 +0100fizbin(~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection)
2021-12-08 23:34:17 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-12-08 23:34:35 +0100bollu(uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-12-08 23:36:22 +0100k60``(~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 265 seconds)
2021-12-08 23:37:22 +0100pfurla(~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390)
2021-12-08 23:38:40 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net)
2021-12-08 23:39:00 +0100Dansk31(~Dansk31@147.114.141.88.rev.sfr.net) (Client Quit)
2021-12-08 23:39:16 +0100merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-12-08 23:39:18 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-12-08 23:40:10 +0100sciencentistguy(~sciencent@hacksoc/ordinary-member) (Ping timeout: 256 seconds)
2021-12-08 23:41:05 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-12-08 23:45:03 +0100Guest40(~Guest40@ec2-54-215-90-243.us-west-1.compute.amazonaws.com)
2021-12-08 23:47:47 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc)
2021-12-08 23:50:37 +0100chomwitt(~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds)
2021-12-08 23:53:24 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 268 seconds)
2021-12-08 23:56:32 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2021-12-08 23:56:49 +0100Guest97(~Guest97@pool-98-111-246-199.pitbpa.ftas.verizon.net) (Quit: Client closed)
2021-12-08 23:58:18 +0100Axma10079Axman6
2021-12-08 23:59:24 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2021-12-08 23:59:25 +0100CiaoSen(~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)