2021-12-08 00:00:13 +0100 | hskpractice | (~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 +0100 | mc47 | (~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 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2021-12-08 00:04:14 +0100 | juri_ | (~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 +0100 | bollu | (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 00:07:12 +0100 | max22- | (~maxime@2a01cb08833598007f53408425037c9d.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-12-08 00:08:45 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 00:09:20 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
2021-12-08 00:09:48 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-12-08 00:11:20 +0100 | img | (~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 +0100 | img | (~img@user/img) |
2021-12-08 00:13:06 +0100 | shriekingnoise | (~shrieking@186.137.144.80) (Quit: Quit) |
2021-12-08 00:14:15 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) (Ping timeout: 256 seconds) |
2021-12-08 00:14:21 +0100 | img | (~img@user/img) (Client Quit) |
2021-12-08 00:14:36 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 00:15:48 +0100 | img | (~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 +0100 | darchitect | (~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 +0100 | curiousgay | (~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 +0100 | yauhsien | (~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 +0100 | yauhsien | (~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 +0100 | cosimone | (~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 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) |
2021-12-08 00:36:55 +0100 | burnsidesLlama | (~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 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2021-12-08 00:37:39 +0100 | merijn | (~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 +0100 | Sgeo_ | (~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 +0100 | Sgeo | (~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 +0100 | xff0x | (~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 +0100 | xff0x | (~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 +0100 | xkuru | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 00:51:26 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 00:53:21 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) |
2021-12-08 00:53:42 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 00:53:59 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 00:54:39 +0100 | teo | (~teo@user/teo) (Ping timeout: 252 seconds) |
2021-12-08 00:56:50 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
2021-12-08 00:56:59 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 00:57:11 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-12-08 00:57:25 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds) |
2021-12-08 00:58:13 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds) |
2021-12-08 00:58:23 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 00:58:44 +0100 | myShoggoth | (~myShoggot@97-120-85-195.ptld.qwest.net) (Read error: Connection reset by peer) |
2021-12-08 01:00:53 +0100 | xff0x | (~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 +0100 | xff0x | (~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 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 01:06:12 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 01:06:12 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Client Quit) |
2021-12-08 01:06:30 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 01:08:59 +0100 | pretty_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 +0100 | acidjnk_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 +0100 | merijn | (~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 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2021-12-08 01:15:07 +0100 | cyphase | (~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 +0100 | cyphase | (~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 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-12-08 01:20:37 +0100 | Topsi | (~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 +0100 | lbseale | (~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 +0100 | eggplantade | (~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 +0100 | k60 | (~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 +0100 | pavonia | (~user@user/siracusa) |
2021-12-08 01:30:51 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-12-08 01:31:01 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 240 seconds) |
2021-12-08 01:32:02 +0100 | doyougnu | (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 265 seconds) |
2021-12-08 01:32:28 +0100 | k60` | (~user@94.25.169.9) |
2021-12-08 01:33:25 +0100 | k60 | (~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 240 seconds) |
2021-12-08 01:35:49 +0100 | juri_ | (~juri@178.63.35.222) |
2021-12-08 01:37:33 +0100 | cyphase | (~cyphase@user/cyphase) (Ping timeout: 252 seconds) |
2021-12-08 01:38:09 +0100 | shriekingnoise | (~shrieking@186.137.144.80) |
2021-12-08 01:39:15 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2021-12-08 01:41:14 +0100 | cyphase | (~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 +0100 | lavaman | (~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 +0100 | xff0x | (~xff0x@2001:1a81:52dd:ce00:6ce:d182:5c9e:e129) (Ping timeout: 265 seconds) |
2021-12-08 02:04:59 +0100 | xff0x | (~xff0x@2001:1a81:52dd:ce00:6a6c:bf95:6ade:ac72) |
2021-12-08 02:06:20 +0100 | dmenz | (~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 +0100 | vicfred | (~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 +0100 | bitdex | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 02:14:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 02:14:52 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-08 02:14:52 +0100 | burnsidesLlama | (~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 +0100 | machinedgod | (~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 +0100 | lavaman | (~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 +0100 | yauhsien | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
2021-12-08 02:32:28 +0100 | Pent | (sid313808@id-313808.lymington.irccloud.com) (Quit: Updating details, brb) |
2021-12-08 02:32:41 +0100 | Pent | (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 +0100 | slack1256 | (~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 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2021-12-08 02:35:21 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds) |
2021-12-08 02:35:21 +0100 | raehik | (~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 +0100 | nfd | (~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 +0100 | fizbin | (~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 +0100 | dsrt^ | (~dsrt@wsip-98-188-240-142.mc.at.cox.net) |
2021-12-08 02:37:24 +0100 | hololeap | (~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 +0100 | fizbin | (~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 +0100 | InternetCitizen | (~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 +0100 | lbseale | (~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 +0100 | dmenz | (~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 +0100 | AndreasK | heads 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 +0100 | monochrom | conjures 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 +0100 | dsal | thought 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 +0100 | pfurla | (~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 +0100 | whatsupdoc | (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 +0100 | emf_ | (~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 +0100 | mmhat | (~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 +0100 | lavaman | (~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 +0100 | kennyd | (~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
2021-12-08 03:01:25 +0100 | trillp | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 03:07:16 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 03:07:25 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2021-12-08 03:08:11 +0100 | merijn | (~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 +0100 | xff0x | (~xff0x@2001:1a81:52dd:ce00:6a6c:bf95:6ade:ac72) (Ping timeout: 240 seconds) |
2021-12-08 03:14:50 +0100 | shailangsa | (~shailangs@host86-186-136-27.range86-186.btcentralplus.com) (Remote host closed the connection) |
2021-12-08 03:15:10 +0100 | xff0x | (~xff0x@2001:1a81:52f0:d600:c9ec:7be2:e073:b0e) |
2021-12-08 03:17:50 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 03:18:19 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 03:28:03 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) (Ping timeout: 256 seconds) |
2021-12-08 03:39:05 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 03:39:35 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 03:40:53 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection) |
2021-12-08 03:41:50 +0100 | genieliu | (~genieliu@103.37.140.38) |
2021-12-08 03:41:54 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 03:42:13 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-12-08 03:42:16 +0100 | tito | (tito@tilde.team) (Ping timeout: 268 seconds) |
2021-12-08 03:43:26 +0100 | incertia | (~incertia@d4-50-26-103.nap.wideopenwest.com) |
2021-12-08 03:45:10 +0100 | tito | (tito@tilde.team) |
2021-12-08 03:49:32 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.3) |
2021-12-08 03:49:55 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-12-08 03:52:05 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit) |
2021-12-08 03:53:13 +0100 | jkaye | (~jkaye@2601:281:8300:7530:6e92:54cb:12e7:3fa1) (Ping timeout: 252 seconds) |
2021-12-08 03:53:37 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 03:53:54 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 03:54:16 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Client Quit) |
2021-12-08 03:54:35 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 03:54:52 +0100 | shailangsa | (~shailangs@host86-186-136-27.range86-186.btcentralplus.com) |
2021-12-08 03:59:31 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 03:59:50 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 04:00:03 +0100 | sander | (~sander@user/sander) (Quit: So long! :)) |
2021-12-08 04:00:37 +0100 | pfurla | (~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14) (Quit: gone to sleep. ZZZzzz…) |
2021-12-08 04:01:01 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
2021-12-08 04:01:32 +0100 | sander | (~sander@user/sander) |
2021-12-08 04:02:50 +0100 | tito | (tito@tilde.team) (Ping timeout: 265 seconds) |
2021-12-08 04:05:34 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) |
2021-12-08 04:05:49 +0100 | tito | (tito@tilde.team) |
2021-12-08 04:08:14 +0100 | pfurla | (~pfurla@201.17.118.230) |
2021-12-08 04:17:43 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2021-12-08 04:17:43 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2021-12-08 04:17:43 +0100 | finn_elija | FinnElija |
2021-12-08 04:20:46 +0100 | boxscape_ | (~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2021-12-08 04:21:37 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
2021-12-08 04:25:57 +0100 | dmenz | (~dmenz@2804:14d:5cd4:5e94::d) |
2021-12-08 04:26:05 +0100 | dmenezes | (~dmenz@2804:14d:5cd4:5e94::d) |
2021-12-08 04:26:24 +0100 | dmenezes | (~dmenz@2804:14d:5cd4:5e94::d) (Remote host closed the connection) |
2021-12-08 04:32:10 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection) |
2021-12-08 04:32:31 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 04:32:37 +0100 | td_ | (~td@94.134.91.180) (Ping timeout: 240 seconds) |
2021-12-08 04:32:39 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
2021-12-08 04:34:29 +0100 | td_ | (~td@94.134.91.212) |
2021-12-08 04:34:50 +0100 | mbuf | (~Shakthi@223.178.121.64) |
2021-12-08 04:37:09 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 265 seconds) |
2021-12-08 04:37:12 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds) |
2021-12-08 04:37:27 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 04:37:42 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 04:37:49 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 04:38:02 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 04:38:10 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 04:38:25 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 04:38:32 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 04:39:03 +0100 | JimL | (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 252 seconds) |
2021-12-08 04:42:26 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
2021-12-08 04:43:39 +0100 | terrorjack | (~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 +0100 | tito | (tito@tilde.team) (Ping timeout: 240 seconds) |
2021-12-08 04:55:05 +0100 | deadmarshal | (~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 +0100 | tito | (tito@tilde.team) |
2021-12-08 04:59:25 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds) |
2021-12-08 05:02:53 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 05:09:16 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 05:13:53 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
2021-12-08 05:20:40 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 05:22:13 +0100 | tito | (tito@tilde.team) (Ping timeout: 240 seconds) |
2021-12-08 05:23:27 +0100 | tito | (tito@tilde.team) |
2021-12-08 05:25:28 +0100 | user0 | (~aj@langw.roketelkom.co.ug) |
2021-12-08 05:33:32 +0100 | Topsi | (~Tobias@dyndsl-095-033-088-108.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
2021-12-08 05:33:53 +0100 | user01 | (~aj@154.0.137.32) |
2021-12-08 05:34:46 +0100 | pfurla | (~pfurla@201.17.118.230) (Quit: gone to sleep. ZZZzzz…) |
2021-12-08 05:35:01 +0100 | genieliu | (~genieliu@103.37.140.38) (Ping timeout: 240 seconds) |
2021-12-08 05:36:07 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds) |
2021-12-08 05:37:01 +0100 | user0 | (~aj@langw.roketelkom.co.ug) (Ping timeout: 240 seconds) |
2021-12-08 05:37:52 +0100 | user0 | (~aj@129.205.7.82) |
2021-12-08 05:38:32 +0100 | user01 | (~aj@154.0.137.32) (Ping timeout: 265 seconds) |
2021-12-08 05:38:58 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 05:39:27 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
2021-12-08 05:40:37 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2021-12-08 05:41:26 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-12-08 05:42:07 +0100 | user0 | (~aj@129.205.7.82) (Ping timeout: 252 seconds) |
2021-12-08 05:42:08 +0100 | user01 | (~aj@129.205.7.82) |
2021-12-08 05:45:05 +0100 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
2021-12-08 05:45:45 +0100 | nfd | (~nfd@user/nfd) |
2021-12-08 05:46:11 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) |
2021-12-08 05:46:14 +0100 | monochrom | (trebla@216.138.220.146) (Quit: NO CARRIER) |
2021-12-08 05:51:25 +0100 | xff0x | (~xff0x@2001:1a81:52f0:d600:c9ec:7be2:e073:b0e) (Ping timeout: 240 seconds) |
2021-12-08 05:52:22 +0100 | xff0x | (~xff0x@2001:1a81:52f0:d600:cda8:efb:cccc:cf1c) |
2021-12-08 05:52:33 +0100 | lechner | (~lechner@debian/lechner) (Ping timeout: 250 seconds) |
2021-12-08 05:54:33 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 05:54:35 +0100 | user01 | (~aj@129.205.7.82) (Ping timeout: 252 seconds) |
2021-12-08 05:54:47 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 05:54:55 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 05:55:15 +0100 | user0 | (~aj@154.0.137.32) |
2021-12-08 06:01:18 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-12-08 06:03:40 +0100 | genieliu | (~genieliu@103.37.140.38) |
2021-12-08 06:04:13 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2021-12-08 06:09:01 +0100 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
2021-12-08 06:13:17 +0100 | genieliu | (~genieliu@103.37.140.38) (Ping timeout: 252 seconds) |
2021-12-08 06:13:20 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 06:14:46 +0100 | img | (~img@user/img) |
2021-12-08 06:25:27 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 06:26:07 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 06:26:43 +0100 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2021-12-08 06:27:49 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds) |
2021-12-08 06:29:58 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2021-12-08 06:39:50 +0100 | genieliu | (~genieliu@103.37.140.24) |
2021-12-08 06:43:03 +0100 | monochrom | (trebla@216.138.220.146) |
2021-12-08 06:48:13 +0100 | jinsun | (~quassel@user/jinsun) (Ping timeout: 240 seconds) |
2021-12-08 06:50:09 +0100 | jinsun | (~quassel@user/jinsun) |
2021-12-08 06:52:14 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 06:53:54 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 06:56:03 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-12-08 06:56:39 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 06:56:47 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection) |
2021-12-08 07:00:05 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) |
2021-12-08 07:01:19 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
2021-12-08 07:02:53 +0100 | res0nat0r8 | res0nat0r |
2021-12-08 07:03:54 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 07:04:34 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-12-08 07:09:48 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 07:13:42 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 07:13:49 +0100 | michalz | (~michalz@185.246.204.40) |
2021-12-08 07:14:13 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
2021-12-08 07:17:25 +0100 | Everything | (~Everythin@37.115.210.35) |
2021-12-08 07:18:13 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-12-08 07:18:48 +0100 | curiousgay | (~curiousga@77-120-141-90.kha.volia.net) |
2021-12-08 07:20:43 +0100 | kimjetwav | (~user@2607:fea8:2363:8f00:788b:37b5:7592:32b4) |
2021-12-08 07:22:32 +0100 | vicfred | (~vicfred@user/vicfred) |
2021-12-08 07:25:49 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) (Ping timeout: 240 seconds) |
2021-12-08 07:30:37 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
2021-12-08 07:31:22 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 07:31:22 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 07:31:22 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-08 07:36:09 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
2021-12-08 07:45:40 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2021-12-08 07:55:39 +0100 | x88x88x | (~x88x88x@2001:19f0:5:39a8:5400:3ff:feb6:73cb) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
2021-12-08 07:57:16 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 08:01:25 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 240 seconds) |
2021-12-08 08:05:29 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 252 seconds) |
2021-12-08 08:05:46 +0100 | catern | (~sbaugh@cpe-98-7-229-235.nyc.res.rr.com) (Ping timeout: 245 seconds) |
2021-12-08 08:06:02 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2021-12-08 08:09:26 +0100 | merijn | (~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 +0100 | x88x88x | (~x88x88x@149.28.53.172) |
2021-12-08 08:20:02 +0100 | Merfont | (~Kaiepi@156.34.44.192) |
2021-12-08 08:20:48 +0100 | eggplantade | (~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 +0100 | Kaipi | (~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 +0100 | dmenz | (~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 +0100 | vicfred | (~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 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-12-08 08:36:12 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 08:37:36 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2021-12-08 08:38:02 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-12-08 08:41:03 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
2021-12-08 08:43:25 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-12-08 08:45:01 +0100 | retroid_ | (~retro@97e2ba2e.skybroadband.com) |
2021-12-08 08:46:54 +0100 | retro_ | (~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds) |
2021-12-08 08:49:49 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 08:53:44 +0100 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) |
2021-12-08 08:56:37 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection) |
2021-12-08 08:57:29 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-08 08:59:27 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-12-08 09:05:44 +0100 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2021-12-08 09:06:52 +0100 | zaquest | (~notzaques@5.130.79.72) |
2021-12-08 09:07:36 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:09:16 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:09:34 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:09:58 +0100 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-12-08 09:12:21 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2021-12-08 09:14:10 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:14:27 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:14:55 +0100 | acidjnk_new | (~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de) |
2021-12-08 09:16:07 +0100 | max22- | (~maxime@2a01cb08833598006f80219c43541139.ipv6.abo.wanadoo.fr) |
2021-12-08 09:18:37 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:18:54 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:20:34 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:20:52 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:22:52 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:23:09 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:24:49 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:25:07 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:26:47 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:27:05 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:28:45 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:29:01 +0100 | chomwitt | (~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374) |
2021-12-08 09:29:03 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:32:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:33:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:36:56 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:37:13 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:38:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:39:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:41:23 +0100 | notzmv | (~zmv@user/notzmv) |
2021-12-08 09:41:35 +0100 | retro_ | (~retro@05412d78.skybroadband.com) |
2021-12-08 09:41:47 +0100 | retroid_ | (~retro@97e2ba2e.skybroadband.com) (Ping timeout: 268 seconds) |
2021-12-08 09:44:23 +0100 | ftzm | (~ftzm@178.249.51.108) |
2021-12-08 09:45:27 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 09:47:37 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:47:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:49:35 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 09:49:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 09:50:14 +0100 | zer0bitz | (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) |
2021-12-08 09:57:03 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 09:58:01 +0100 | pfurla | (~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14) |
2021-12-08 09:59:31 +0100 | mvk | (~mvk@2607:fea8:5cdd:f000::9788) (Ping timeout: 252 seconds) |
2021-12-08 10:01:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:01:21 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 252 seconds) |
2021-12-08 10:01:28 +0100 | hskpractice | (~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 +0100 | kupi | (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 +0100 | trillp | (~user@69.233.98.238) (Remote host closed the connection) |
2021-12-08 10:09:04 +0100 | cfricke | (~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 +0100 | teo | (~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 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 10:15:48 +0100 | xkuru | (~xkuru@user/xkuru) |
2021-12-08 10:17:34 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-12-08 10:17:34 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-12-08 10:17:37 +0100 | allbery_b | geekosaur |
2021-12-08 10:18:33 +0100 | catern | (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) |
2021-12-08 10:21:03 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:21:21 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:24:43 +0100 | ftzm | (~ftzm@178.249.51.108) (Quit: Client closed) |
2021-12-08 10:25:58 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) |
2021-12-08 10:27:38 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:27:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:28:59 +0100 | pfurla | (~pfurla@2804:14d:5c81:4104:91cd:1543:8918:bc14) (Quit: gone to sleep. ZZZzzz…) |
2021-12-08 10:32:14 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:32:32 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:34:12 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:34:30 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:36:10 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:36:28 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:36:34 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:4508:9275:13c9:2a0) |
2021-12-08 10:37:19 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:4508:9275:13c9:2a0) (Remote host closed the connection) |
2021-12-08 10:38:39 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Ping timeout: 276 seconds) |
2021-12-08 10:40:42 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 10:40:55 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:2cfd:b00:73ba:1137) |
2021-12-08 10:41:00 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 10:41:25 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-12-08 10:44:24 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-12-08 10:46:52 +0100 | wolfshappen | (~waff@irc.furworks.de) (Quit: later) |
2021-12-08 10:47:57 +0100 | wolfshappen | (~waff@irc.furworks.de) |
2021-12-08 10:48:25 +0100 | yauhsien | (~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 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 10:52:46 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 10:55:02 +0100 | <dminuoso> | lortabac: setUncaughtExceptionHandler? |
2021-12-08 10:56:37 +0100 | yauhsien | (~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 +0100 | CiaoSen | (~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 +0100 | dyeplexer | (~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 +0100 | tom_ | (~tom@host86-151-99-97.range86-151.btcentralplus.com) |
2021-12-08 11:03:50 +0100 | michalz | (~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 +0100 | zincy | (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 252 seconds) |
2021-12-08 11:06:18 +0100 | retroid_ | (~retro@05412d78.skybroadband.com) |
2021-12-08 11:06:36 +0100 | tom__ | (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Ping timeout: 245 seconds) |
2021-12-08 11:07:30 +0100 | retro_ | (~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds) |
2021-12-08 11:08:29 +0100 | zincy | (~tom@2a00:23c8:970c:4801:2c67:e51d:1302:54d3) |
2021-12-08 11:08:46 +0100 | mcgroin | (~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 +0100 | genieliu | (~genieliu@103.37.140.24) (Ping timeout: 265 seconds) |
2021-12-08 11:11:04 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
2021-12-08 11:11:09 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2021-12-08 11:11:16 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 11:12:42 +0100 | ubert | (~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 +0100 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
2021-12-08 11:13:52 +0100 | Lord_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 +0100 | lavaman | (~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 +0100 | yauhsien | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 11:30:30 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 11:30:52 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-12-08 11:31:22 +0100 | yauhsien | (~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 +0100 | kennyd | (~bc8165b6@cerf.good1.com) |
2021-12-08 11:34:41 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2021-12-08 11:36:25 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 11:36:41 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 265 seconds) |
2021-12-08 11:36:44 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 11:38:45 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-12-08 11:39:40 +0100 | genieliu | (~genieliu@103.37.140.24) |
2021-12-08 11:40:17 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) |
2021-12-08 11:41:46 +0100 | kuribas | (~user@ptr-25vy0i9qa16kzbd65yl.18120a2.ip6.access.telenet.be) |
2021-12-08 11:42:31 +0100 | mmhat | (~mmh@55d44a9c.access.ecotel.net) |
2021-12-08 11:44:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 11:45:13 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 11:46:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 11:47:03 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2021-12-08 11:47:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 11:53:48 +0100 | JimL | (~quassel@89-162-2-132.fiber.signal.no) |
2021-12-08 11:55:01 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 240 seconds) |
2021-12-08 11:55:23 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-12-08 11:57:57 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 11:58:15 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 11:58:20 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-12-08 11:59:20 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 12:01:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:02:13 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:03:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:04:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:07:42 +0100 | user0 | (~aj@154.0.137.32) (Ping timeout: 256 seconds) |
2021-12-08 12:09:12 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 12:12:41 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:12:56 +0100 | user0 | (~aj@154.0.137.32) |
2021-12-08 12:12:59 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:14:13 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
2021-12-08 12:15:00 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-12-08 12:16:35 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit) |
2021-12-08 12:17:20 +0100 | darchitect | (~darchitec@2a00:23c6:3584:df00:7dec:bf13:8fa:748c) |
2021-12-08 12:18:15 +0100 | CiaoSen | (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2021-12-08 12:18:19 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2021-12-08 12:21:11 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:21:29 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:23:26 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:23:43 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:28:01 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:28:20 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:30:00 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:30:18 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:35:52 +0100 | InternetCitizen | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-12-08 12:41:13 +0100 | wolfshappen | (~waff@irc.furworks.de) (Ping timeout: 252 seconds) |
2021-12-08 12:41:58 +0100 | wolfshappen | (~waff@irc.furworks.de) |
2021-12-08 12:43:23 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 12:44:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 12:45:57 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 12:46:37 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds) |
2021-12-08 12:47:22 +0100 | genieliu | (~genieliu@103.37.140.24) (Ping timeout: 256 seconds) |
2021-12-08 12:48:43 +0100 | genieliu | (~genieliu@103.37.140.24) |
2021-12-08 12:49:20 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-12-08 12:49:28 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 12:52:21 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:52:39 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) |
2021-12-08 12:52:39 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 12:55:28 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 12:56:36 +0100 | pfurla | (~pfurla@2804:14d:5c81:4104:d013:2c25:702e:efd1) |
2021-12-08 12:56:38 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 12:57:00 +0100 | InternetCitizen | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds) |
2021-12-08 12:58:49 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 12:59:06 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:00:46 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:01:04 +0100 | hskpractice | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 13:02:23 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 13:04:49 +0100 | hskpractice | (~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 +0100 | hskpractice | (~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 +0100 | merijn | (~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 +0100 | merijn | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:13:50 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 13:14:05 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:14:44 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 13:17:51 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:18:09 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:19:49 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:20:06 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:20:07 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 13:20:50 +0100 | merijn | (~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 +0100 | bollu | (uid233390@id-233390.helmsley.irccloud.com) |
2021-12-08 13:25:18 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-12-08 13:26:24 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 13:26:41 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 13:28:30 +0100 | CiaoSen | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:33:26 +0100 | hskpractice | (~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 +0100 | nfd | (~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 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) (Ping timeout: 265 seconds) |
2021-12-08 13:41:39 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:41:56 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:45:37 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:45:56 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:47:52 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) |
2021-12-08 13:49:35 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:49:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:51:20 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2021-12-08 13:54:08 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:54:26 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 13:54:44 +0100 | lechner | (~lechner@debian/lechner) |
2021-12-08 13:58:35 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 13:58:53 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:00:33 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:00:51 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:02:31 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:02:48 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:03:37 +0100 | max22- | (~maxime@2a01cb08833598006f80219c43541139.ipv6.abo.wanadoo.fr) (Ping timeout: 265 seconds) |
2021-12-08 14:03:59 +0100 | InternetCitizen | (~fuzzypixe@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-12-08 14:06:35 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:06:52 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:08:32 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:08:50 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:12:49 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:13:07 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:14:03 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-12-08 14:14:39 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 14:16:47 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:17:04 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:17:04 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 14:17:23 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 14:17:41 +0100 | mncheck | (~mncheck@193.224.205.254) |
2021-12-08 14:18:00 +0100 | zaquest | (~notzaques@5.130.79.72) (Read error: Connection reset by peer) |
2021-12-08 14:19:25 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Ping timeout: 240 seconds) |
2021-12-08 14:19:27 +0100 | zaquest | (~notzaques@5.130.79.72) |
2021-12-08 14:21:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 14:24:59 +0100 | mikoto-chan | (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Quit: mikoto-chan) |
2021-12-08 14:28:07 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2021-12-08 14:31:19 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-12-08 14:32:45 +0100 | simendsjo | (~user@84.211.91.241) |
2021-12-08 14:34:49 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 14:36:58 +0100 | acidjnk_new | (~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2021-12-08 14:39:21 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) |
2021-12-08 14:40:58 +0100 | pfurla | (~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 +0100 | genieliu | (~genieliu@103.37.140.24) (Ping timeout: 265 seconds) |
2021-12-08 14:44:37 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds) |
2021-12-08 14:46:33 +0100 | <maerwald> | hmm |
2021-12-08 14:46:34 +0100 | acidjnk_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 +0100 | vgtw_ | (~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 +0100 | max22- | (~maxime@2a01cb088335980011e17f1477c78e4b.ipv6.abo.wanadoo.fr) |
2021-12-08 14:47:52 +0100 | yauhsien | (~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 +0100 | yauhsien | (~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 +0100 | vgtw | (~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 +0100 | pretty_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 +0100 | pretty_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 +0100 | caubert | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 15:04:03 +0100 | filwisher | (2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection) |
2021-12-08 15:04:03 +0100 | jkoshy | (99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection) |
2021-12-08 15:04:03 +0100 | lukec | (9dfd4d094e@2604:bf00:561:2000::10e) (Remote host closed the connection) |
2021-12-08 15:04:04 +0100 | jakzale | (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 +0100 | bsima1 | (9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection) |
2021-12-08 15:06:14 +0100 | evanrelf | (3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection) |
2021-12-08 15:06:14 +0100 | samhh | (7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection) |
2021-12-08 15:06:14 +0100 | nickdaly-away | (45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection) |
2021-12-08 15:06:14 +0100 | sm2n | (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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 265 seconds) |
2021-12-08 15:06:33 +0100 | bsima1 | (9d7e39c8ad@2604:bf00:561:2000::dd) |
2021-12-08 15:06:35 +0100 | filwisher | (2e6936c793@2604:bf00:561:2000::170) |
2021-12-08 15:06:35 +0100 | lukec | (9dfd4d094e@2604:bf00:561:2000::10e) |
2021-12-08 15:06:36 +0100 | samhh | (7569f027cf@2604:bf00:561:2000::e4) |
2021-12-08 15:06:40 +0100 | <Franciman> | ah nice |
2021-12-08 15:06:43 +0100 | nickdaly-away | (45ce440a48@2604:bf00:561:2000::e2) |
2021-12-08 15:06:43 +0100 | jkoshy | (99b9359beb@2604:bf00:561:2000::10f) |
2021-12-08 15:06:43 +0100 | evanrelf | (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 +0100 | sm2n | (ae95cb1267@user/sm2n) |
2021-12-08 15:06:50 +0100 | jakzale | (6291399afa@user/jakzale) |
2021-12-08 15:06:53 +0100 | <Franciman> | thanks |
2021-12-08 15:08:27 +0100 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2021-12-08 15:09:40 +0100 | tromp | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 15:14:09 +0100 | caubert | (~caubert@136.244.111.235) |
2021-12-08 15:17:01 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
2021-12-08 15:19:34 +0100 | xdej | (~xdej@quatramaran.salle-s.org) |
2021-12-08 15:20:01 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 15:21:37 +0100 | jkaye | (~jkaye@c-71-205-220-154.hsd1.co.comcast.net) |
2021-12-08 15:27:40 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-12-08 15:28:21 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection) |
2021-12-08 15:28:45 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2021-12-08 15:29:10 +0100 | gaff | (~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 +0100 | k60` | (~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 +0100 | k60`` | (~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 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2021-12-08 15:32:18 +0100 | <gaff> | appreciate your help |
2021-12-08 15:33:02 +0100 | bollu | (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 +0100 | deadmarshal | (~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 +0100 | k60`` | (~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 +0100 | Techcable | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 15:38:20 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 15:38:20 +0100 | wroathe | (~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 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds) |
2021-12-08 15:40:24 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 15:41:25 +0100 | yauhsien | (~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 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 15:42:07 +0100 | jippiedoe | (~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 +0100 | doyougnu | (~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 +0100 | CiaoSen | (~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 +0100 | Guest40 | (~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 +0100 | genieliu | (~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 +0100 | alx741 | (~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 +0100 | polezaivsani | (~polezaivs@orangeshoelaces.net) |
2021-12-08 15:52:20 +0100 | <tomsmeding> | oh fair point |
2021-12-08 15:52:24 +0100 | Guest40 | toeinriver |
2021-12-08 15:53:01 +0100 | genieliu | (~genieliu@111.193.167.10) (Ping timeout: 240 seconds) |
2021-12-08 15:53:05 +0100 | gaff | (~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 +0100 | tomsmeding | doesn'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 +0100 | tomsmeding | has 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 +0100 | shapr | (~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 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2021-12-08 16:05:05 +0100 | dsrt^ | (~dsrt@wsip-98-188-240-142.mc.at.cox.net) (Ping timeout: 252 seconds) |
2021-12-08 16:05:42 +0100 | shapr | (~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 +0100 | k60`` | (~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 +0100 | gustik | (~gustik@2a01:c844:242f:ba20:72e:7030:46bf:1353) |
2021-12-08 16:08:10 +0100 | dminuoso | finds 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 +0100 | dsrt^ | (~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 +0100 | burnsidesLlama | (~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 +0100 | dminuoso | dwindled away into type progamming lands |
2021-12-08 16:11:37 +0100 | alx741 | (~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 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-12-08 16:13:25 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 240 seconds) |
2021-12-08 16:14:03 +0100 | oats | attempts to build a map |
2021-12-08 16:15:25 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) (Ping timeout: 240 seconds) |
2021-12-08 16:17:57 +0100 | pfurla | (~pfurla@2804:14d:5c5a:9a78:540e:67c2:47ff:b4e3) |
2021-12-08 16:18:59 +0100 | toeinriver | (~Guest40@ec2-54-215-90-243.us-west-1.compute.amazonaws.com) (Quit: Client closed) |
2021-12-08 16:20:39 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 16:20:57 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 16:21:56 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 16:21:56 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 16:21:56 +0100 | wroathe | (~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 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2021-12-08 16:27:25 +0100 | shailangsa | (~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 +0100 | pfurla | (~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 +0100 | pfurla | (~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 +0100 | shapr | (~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 +0100 | tromp | (~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 +0100 | pfurla | (~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 +0100 | ystael | (~ystael@user/ystael) (Quit: Lost terminal) |
2021-12-08 16:33:22 +0100 | Everything | (~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 +0100 | ystael | (~ystael@user/ystael) |
2021-12-08 16:38:27 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 16:38:44 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 16:39:07 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 16:40:35 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 16:42:25 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 16:42:43 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 16:42:47 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 16:42:47 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 16:42:47 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-08 16:46:20 +0100 | deadmarshal | (~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 +0100 | boxscape_ | (~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) |
2021-12-08 16:47:28 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-12-08 16:47:43 +0100 | yauhsien | (~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 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 16:49:52 +0100 | kennyd | (~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
2021-12-08 16:50:51 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) (Ping timeout: 265 seconds) |
2021-12-08 16:51:20 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2021-12-08 16:51:36 +0100 | doyougnu | (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) (Ping timeout: 268 seconds) |
2021-12-08 16:52:45 +0100 | simendsjo | (~user@84.211.91.241) (Ping timeout: 252 seconds) |
2021-12-08 16:53:18 +0100 | yauhsien | (~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 +0100 | acidjnk_new | (~acidjnk@p200300d0c7271e233cc6a7b9846dd72b.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2021-12-08 16:57:27 +0100 | mbuf | (~Shakthi@223.178.121.64) (Quit: Leaving) |
2021-12-08 16:59:33 +0100 | CiaoSen | (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2021-12-08 17:02:15 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 17:02:33 +0100 | hskpractice | (~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 +0100 | eggplantade | (~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 +0100 | shailangsa | (~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 +0100 | lortabac | (~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 +0100 | lavaman | (~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 +0100 | gaff | (~gaff@49.207.205.24) |
2021-12-08 17:13:38 +0100 | hskpractice | (~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 +0100 | hskpractice | (~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 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 17:18:09 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 17:18:24 +0100 | rookie101 | (~rookie@165.232.121.13) |
2021-12-08 17:20:02 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 17:20:34 +0100 | son0p | (~ff@181.136.122.143) |
2021-12-08 17:21:26 +0100 | alx741 | (~alx741@186.178.108.192) (Quit: alx741) |
2021-12-08 17:22:38 +0100 | alx741 | (~alx741@186.178.108.192) |
2021-12-08 17:25:35 +0100 | gaff | (~gaff@49.207.205.24) (Quit: Bye ...) |
2021-12-08 17:26:23 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) |
2021-12-08 17:29:43 +0100 | lyxia | (~lyxia@poisson.chat) (Quit: WeeChat 3.3) |
2021-12-08 17:29:59 +0100 | lyxia | (~lyxia@poisson.chat) |
2021-12-08 17:31:14 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 17:31:44 +0100 | HurdyGurdyBurdy | (~HurdyGurd@user/hurdygurdyburdy) (Quit: server died; rip) |
2021-12-08 17:33:11 +0100 | Axma10079 | (~Axman6@user/axman6) |
2021-12-08 17:34:31 +0100 | HurdyGurdyBurdy | (~HurdyGurd@user/hurdygurdyburdy) |
2021-12-08 17:35:28 +0100 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 260 seconds) |
2021-12-08 17:35:43 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 17:37:31 +0100 | Techcable | (~Techcable@168.235.93.147) |
2021-12-08 17:38:42 +0100 | MoC | (~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 +0100 | burnsidesLlama | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection) |
2021-12-08 17:42:34 +0100 | lavaman | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 268 seconds) |
2021-12-08 17:47:12 +0100 | hskpractice | (~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 +0100 | neverfindme | (~hayden@158.123.160.43) |
2021-12-08 17:54:38 +0100 | lavaman | (~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 +0100 | tromp | (~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 +0100 | tromp | (~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 +0100 | dmenz | (~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 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2021-12-08 18:00:50 +0100 | eggplantade | (~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 +0100 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2021-12-08 18:02:37 +0100 | pfurla | (~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 +0100 | Dansk31 | (~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 +0100 | dsrt^ | (~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 +0100 | pfurla | (~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 +0100 | eggplantade | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 18:11:59 +0100 | hskpractice | (~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 +0100 | dyeplexer | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2021-12-08 18:13:52 +0100 | nfd | (~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 +0100 | bollu | (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 +0100 | boxscape_ | (~boxscape_@p4ff0bb6c.dip0.t-ipconnect.de) (Quit: Connection closed) |
2021-12-08 18:16:10 +0100 | neverfindme | (~hayden@158.123.160.43) (Remote host closed the connection) |
2021-12-08 18:16:28 +0100 | neverfindme | (~hayden@158.123.160.43) |
2021-12-08 18:19:39 +0100 | polezaivsani | (~polezaivs@orangeshoelaces.net) (Remote host closed the connection) |
2021-12-08 18:20:46 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
2021-12-08 18:21:29 +0100 | neverfindme | (~hayden@158.123.160.43) (Remote host closed the connection) |
2021-12-08 18:21:48 +0100 | neverfindme | (~hayden@158.123.160.43) |
2021-12-08 18:23:06 +0100 | srk | (~sorki@user/srk) (Remote host closed the connection) |
2021-12-08 18:23:21 +0100 | doyougnu | (~doyougnu@c-73-25-202-122.hsd1.or.comcast.net) |
2021-12-08 18:23:24 +0100 | srk | (~sorki@user/srk) |
2021-12-08 18:23:47 +0100 | <Dansk31> | Thank you for your answers ! |
2021-12-08 18:24:06 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 18:24:53 +0100 | polezaivsani | (~polezaivs@orangeshoelaces.net) |
2021-12-08 18:26:27 +0100 | nattiestnate | (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) |
2021-12-08 18:26:44 +0100 | nattiestnate | (~nate@2001:448a:20a0:4134:25e:715f:d637:5263) (Client Quit) |
2021-12-08 18:27:04 +0100 | nattiestnate | (~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 +0100 | hskpractice | (~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 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 18:30:46 +0100 | MoC | (~moc@user/moc) (Quit: Konversation terminated!) |
2021-12-08 18:32:07 +0100 | CiaoSen | (~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 +0100 | zhakupov | (~zhakupov@static.90.189.158.74.sinor.ru) |
2021-12-08 18:33:41 +0100 | alx741 | (~alx741@186.178.108.192) (Quit: alx741) |
2021-12-08 18:33:53 +0100 | Dansk31 | (~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 +0100 | emf | (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) |
2021-12-08 18:40:06 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 18:40:22 +0100 | emf_ | (~emf@2620:10d:c091:480::1:7b30) |
2021-12-08 18:41:02 +0100 | emf | (~emf@2603-6080-9403-11bf-0000-0000-0000-0007.res6.spectrum.com) (Read error: Connection reset by peer) |
2021-12-08 18:42:58 +0100 | Dansk31 | (~Dansk31@147.114.141.88.rev.sfr.net) |
2021-12-08 18:44:26 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:d0b4:48a4:6b63:b6a2) (Remote host closed the connection) |
2021-12-08 18:45:49 +0100 | Guest48 | (~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 +0100 | Guest48 | (~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 +0100 | deadmarshal | (~deadmarsh@95.38.228.30) |
2021-12-08 18:49:01 +0100 | neverfindme | (~hayden@158.123.160.43) (Ping timeout: 240 seconds) |
2021-12-08 18:49:23 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 18:50:25 +0100 | neverfindme | (~hayden@158.123.160.43) |
2021-12-08 18:50:29 +0100 | zer0bitz_ | (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) |
2021-12-08 18:52:07 +0100 | neverfindme | (~hayden@158.123.160.43) (Client Quit) |
2021-12-08 18:52:13 +0100 | zer0bitz | (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Ping timeout: 240 seconds) |
2021-12-08 18:52:18 +0100 | Dansk31 | (~Dansk31@147.114.141.88.rev.sfr.net) () |
2021-12-08 18:55:49 +0100 | lavaman | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 19:02:18 +0100 | zer0bitz_ | zer0bitz |
2021-12-08 19:03:14 +0100 | simendsjo | (~user@84.211.91.241) |
2021-12-08 19:04:05 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) |
2021-12-08 19:05:45 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 19:06:21 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection) |
2021-12-08 19:07:17 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2021-12-08 19:07:38 +0100 | mcgroin | (~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 +0100 | georgy | (~bc8165b6@cerf.good1.com) |
2021-12-08 19:14:24 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 265 seconds) |
2021-12-08 19:14:32 +0100 | alx741 | (~alx741@186.178.108.192) |
2021-12-08 19:16:03 +0100 | AlainJourez[m] | (~sherekahn@2001:470:69fc:105::1:4a71) |
2021-12-08 19:17:28 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-12-08 19:17:31 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 19:17:37 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
2021-12-08 19:18:09 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2021-12-08 19:18:44 +0100 | pfurla | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 19:23:17 +0100 | jgeerds | (~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 +0100 | econo | (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 +0100 | tromp | (~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 +0100 | tzh | (~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 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 19:27:51 +0100 | ProofTechnique | (sid79547@5.254.36.60) (Ping timeout: 245 seconds) |
2021-12-08 19:27:51 +0100 | integral | (sid296274@user/integral) (Ping timeout: 245 seconds) |
2021-12-08 19:27:51 +0100 | nrr__ | (sid20938@lymington.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:27:51 +0100 | alanz | (sid110616@uxbridge.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:27:51 +0100 | agander_m | (sid407952@tinside.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:28:11 +0100 | jonrh | (sid5185@ilkley.irccloud.com) (Read error: Connection reset by peer) |
2021-12-08 19:28:12 +0100 | aria | (sid380617@lymington.irccloud.com) (Read error: Connection reset by peer) |
2021-12-08 19:28:16 +0100 | systemfault | (sid267009@uxbridge.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:28:16 +0100 | gmc_ | (sid58314@ilkley.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:28:16 +0100 | cln | (sid336875@ilkley.irccloud.com) (Ping timeout: 245 seconds) |
2021-12-08 19:28:24 +0100 | alinab | (sid468903@helmsley.irccloud.com) (Read error: Connection reset by peer) |
2021-12-08 19:28:32 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Remote host closed the connection) |
2021-12-08 19:28:40 +0100 | truckasaurus | (sid457088@helmsley.irccloud.com) (Read error: Connection reset by peer) |
2021-12-08 19:29:00 +0100 | truckasaurus | (sid457088@id-457088.helmsley.irccloud.com) |
2021-12-08 19:29:07 +0100 | integral | (sid296274@user/integral) |
2021-12-08 19:29:07 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 19:29:08 +0100 | gmc_ | (sid58314@id-58314.ilkley.irccloud.com) |
2021-12-08 19:29:10 +0100 | alanz | (sid110616@id-110616.uxbridge.irccloud.com) |
2021-12-08 19:29:12 +0100 | jonrh | (sid5185@id-5185.ilkley.irccloud.com) |
2021-12-08 19:29:12 +0100 | aria | (sid380617@id-380617.lymington.irccloud.com) |
2021-12-08 19:29:13 +0100 | agander_m | (sid407952@id-407952.tinside.irccloud.com) |
2021-12-08 19:29:13 +0100 | cln | (sid336875@id-336875.ilkley.irccloud.com) |
2021-12-08 19:29:13 +0100 | systemfault | (sid267009@id-267009.uxbridge.irccloud.com) |
2021-12-08 19:29:14 +0100 | alinab | (sid468903@id-468903.helmsley.irccloud.com) |
2021-12-08 19:29:28 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 19:29:31 +0100 | nrr__ | (sid20938@id-20938.lymington.irccloud.com) |
2021-12-08 19:30:04 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-12-08 19:30:08 +0100 | ProofTechnique | (sid79547@id-79547.ilkley.irccloud.com) |
2021-12-08 19:30:18 +0100 | gmc_ | gmc |
2021-12-08 19:31:12 +0100 | kuribas | (~user@ptr-25vy0i9qa16kzbd65yl.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
2021-12-08 19:31:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 19:31:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 19:31:52 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-12-08 19:34:21 +0100 | zer0bitz | (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-12-08 19:35:01 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-12-08 19:35:16 +0100 | merijn | (~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 +0100 | zer0bitz | (~zer0bitz@dsl-hkibng32-54fbfb-173.dhcp.inet.fi) |
2021-12-08 19:40:22 +0100 | yauhsien | (~yauhsien@61-231-32-247.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-12-08 19:42:56 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
2021-12-08 19:43:02 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2021-12-08 19:43:32 +0100 | SrPx | (sid108780@id-108780.uxbridge.irccloud.com) (Ping timeout: 240 seconds) |
2021-12-08 19:46:44 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-12-08 19:46:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 19:47:14 +0100 | SrPx | (sid108780@id-108780.uxbridge.irccloud.com) |
2021-12-08 19:47:50 +0100 | dmenz | (~dmenz@2804:14d:5cd4:5e94::d) (Ping timeout: 252 seconds) |
2021-12-08 19:47:55 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 19:48:13 +0100 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Remote host closed the connection) |
2021-12-08 19:51:41 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 19:51:54 +0100 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-12-08 19:51:59 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 19:52:13 +0100 | deadmarshal | (~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 +0100 | dschrempf | (~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 +0100 | bitmapper | (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 +0100 | dschrempf | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 19:59:27 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 19:59:27 +0100 | wroathe | (~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 +0100 | max22- | (~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 +0100 | dschrempf | (~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 +0100 | wroathe | (~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 +0100 | tomsmeding | is too tired/lazy to fully understand merijn's code |
2021-12-08 20:04:37 +0100 | shapr | (~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 +0100 | jakalx | (~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 +0100 | tomsmeding | flees 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 +0100 | jakalx | (~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 +0100 | janus | refuses 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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection) |
2021-12-08 20:15:08 +0100 | deadmarshal | (~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 +0100 | hskpractice | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 20:16:59 +0100 | werneta | (~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 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Ping timeout: 256 seconds) |
2021-12-08 20:21:06 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds) |
2021-12-08 20:21:10 +0100 | hskpractice | (~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 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-08 20:25:34 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 20:26:49 +0100 | nfd | (~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 +0100 | nfd | (~nfd@user/nfd) |
2021-12-08 20:29:44 +0100 | lavaman | (~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 +0100 | rusty | (~rustyboy@2a02:2f0e:5610:ab00:b16b:f583:26df:4061) |
2021-12-08 20:34:07 +0100 | jippiedoe | (~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 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-12-08 20:42:29 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-12-08 20:45:48 +0100 | tromp | (~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 +0100 | gaff | (~gaff@49.207.205.24) |
2021-12-08 20:47:40 +0100 | gaff | (~gaff@49.207.205.24) (Client Quit) |
2021-12-08 20:48:52 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 20:49:02 +0100 | k60`` | (~user@94.25.169.9) (Ping timeout: 256 seconds) |
2021-12-08 20:50:06 +0100 | werneta | (~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 +0100 | k60`` | (~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 +0100 | jonas39 | (~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 +0100 | juhp | (~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 +0100 | juhp | (~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 +0100 | mrckndt8 | (~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 +0100 | jonas39 | (~jonas@pool-108-49-252-36.bstnma.fios.verizon.net) (Quit: Client closed) |
2021-12-08 21:07:40 +0100 | tired- | (~tired@user/tired) |
2021-12-08 21:07:44 +0100 | exarkun_ | (~exarkun@user/exarkun) |
2021-12-08 21:08:04 +0100 | acro_ | (~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 +0100 | tristanC_ | (~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 +0100 | df_ | (~ben@justworks.xyz) |
2021-12-08 21:10:35 +0100 | platz_ | (~platz@40.122.118.113) |
2021-12-08 21:10:42 +0100 | Ankhers_ | (~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 +0100 | simendsjo | (~user@84.211.91.241) (Remote host closed the connection) |
2021-12-08 21:13:30 +0100 | relrod_ | (~relrod@redhat/ansible.staff.relrod) |
2021-12-08 21:14:30 +0100 | mrckndt | (~mrckndt@user/mrckndt) (Quit: Ping timeout (120 seconds)) |
2021-12-08 21:14:30 +0100 | tired | (~tired@user/tired) (Quit: /) |
2021-12-08 21:14:30 +0100 | acro | (~acro@user/acro) (Quit: Bye.) |
2021-12-08 21:14:30 +0100 | Ankhers | (~Ankhers@ec2-54-196-233-138.compute-1.amazonaws.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-12-08 21:14:30 +0100 | w1gz | (~do@159.89.11.133) (Ping timeout: 260 seconds) |
2021-12-08 21:14:30 +0100 | exarkun | (~exarkun@user/exarkun) (Ping timeout: 260 seconds) |
2021-12-08 21:14:30 +0100 | mrckndt8 | mrckndt |
2021-12-08 21:14:30 +0100 | tristanC | (~tristanC@user/tristanc) (Ping timeout: 260 seconds) |
2021-12-08 21:14:31 +0100 | platz | (~platz@user/platz) (Ping timeout: 260 seconds) |
2021-12-08 21:14:31 +0100 | df | (~ben@justworks.xyz) (Ping timeout: 260 seconds) |
2021-12-08 21:14:31 +0100 | relrod | (~relrod@redhat/ansible.staff.relrod) (Ping timeout: 260 seconds) |
2021-12-08 21:14:31 +0100 | acro_ | acro |
2021-12-08 21:14:31 +0100 | Ankhers_ | Ankhers |
2021-12-08 21:15:18 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 21:15:27 +0100 | Akiva | (~Akiva@user/Akiva) |
2021-12-08 21:17:01 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 21:18:41 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 21:18:59 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 21:19:38 +0100 | zhakupov | (~zhakupov@static.90.189.158.74.sinor.ru) (Ping timeout: 256 seconds) |
2021-12-08 21:19:41 +0100 | eggplantade | (~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 +0100 | zmt00 | (~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 +0100 | lortabac | (~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 +0100 | eggplantade | (~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 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 21:38:38 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 21:38:38 +0100 | wroathe | (~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 +0100 | exarkun_ | 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 +0100 | pfurla_ | (~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 +0100 | pfurla_ | (~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 +0100 | pfurla | (~pfurla@2804:14d:5c5a:9a78:10e5:165:b849:664a) (Ping timeout: 265 seconds) |
2021-12-08 21:50:38 +0100 | smartin | (~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 +0100 | pfurla | (~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 +0100 | pfurla | (~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 +0100 | pfurla | (~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) |
2021-12-08 21:56:33 +0100 | lavaman | (~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 +0100 | max22- | (~maxime@2a01cb088335980012b6a709282cc846.ipv6.abo.wanadoo.fr) |
2021-12-08 21:59:14 +0100 | rusty | (~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 +0100 | pfurla | (~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 +0100 | CiaoSen | (~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 +0100 | acidjnk_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 +0100 | wroathe | (~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 +0100 | eggplantade | (~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 +0100 | eggplantade | (~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 +0100 | tromp | (~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 +0100 | zer0bitz | (~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 +0100 | doyougnu | (~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 +0100 | Guest97 | (~Guest97@pool-98-111-246-199.pitbpa.ftas.verizon.net) |
2021-12-08 22:35:37 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-12-08 22:35:37 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-12-08 22:35:37 +0100 | wroathe | (~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 +0100 | vicfred | (~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 +0100 | wroathe | (~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 +0100 | myShoggoth | (~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 +0100 | pfurla | (~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 +0100 | lortabac | (~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 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Remote host closed the connection) |
2021-12-08 22:48:45 +0100 | Morrow | (~quassel@bzq-110-168-31-106.red.bezeqint.net) |
2021-12-08 22:48:48 +0100 | alx741 | (~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 +0100 | alx741 | (~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 +0100 | tromp | (~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 +0100 | Akiva | (~Akiva@user/Akiva) (Quit: WeeChat 3.3) |
2021-12-08 22:58:35 +0100 | Akiva | (~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 +0100 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 23:01:34 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 265 seconds) |
2021-12-08 23:02:18 +0100 | user0 | (~aj@154.0.137.32) (Quit: Leaving.) |
2021-12-08 23:03:24 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 23:03:30 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 23:05:10 +0100 | hskpractice | (~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 +0100 | hskpractice | (~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 +0100 | retroid_ | (~retro@05412d78.skybroadband.com) (Ping timeout: 268 seconds) |
2021-12-08 23:09:41 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 23:09:58 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 23:10:47 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2021-12-08 23:13:59 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 23:14:17 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 23:15:42 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-12-08 23:15:54 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-12-08 23:17:57 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 23:18:15 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) |
2021-12-08 23:18:29 +0100 | jgeerds | (~jgeerds@55d4ac73.access.ecotel.net) |
2021-12-08 23:18:38 +0100 | mcgroin | (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 256 seconds) |
2021-12-08 23:20:03 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-12-08 23:21:02 +0100 | jespada | (~jespada@87.74.37.56) (Ping timeout: 240 seconds) |
2021-12-08 23:22:13 +0100 | k60`` | (~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 240 seconds) |
2021-12-08 23:23:21 +0100 | jespada | (~jespada@87.74.33.157) |
2021-12-08 23:23:21 +0100 | Guest48 | (~Guest48@wireless-student-pt3-241-129.lut.ac.uk) |
2021-12-08 23:24:03 +0100 | retroid_ | (~retro@05412d78.skybroadband.com) |
2021-12-08 23:24:08 +0100 | superstar64 | (~superstar@2600:1700:ed80:50a0:d250:99ff:fe2c:53c4) |
2021-12-08 23:24:11 +0100 | k60`` | (~user@static.100.218.46.78.clients.your-server.de) |
2021-12-08 23:25:29 +0100 | Guest48 | (~Guest48@wireless-student-pt3-241-129.lut.ac.uk) (Client Quit) |
2021-12-08 23:25:59 +0100 | waleee | (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
2021-12-08 23:27:04 +0100 | jeetelongname | (~jeet@148.197.248.50) |
2021-12-08 23:27:27 +0100 | pfurla | (~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) (Quit: gone to sleep. ZZZzzz…) |
2021-12-08 23:27:30 +0100 | hskpractice | (~hskpracti@94-255-217-215.cust.bredband2.com) (Remote host closed the connection) |
2021-12-08 23:28:22 +0100 | fizbin | (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection) |
2021-12-08 23:34:17 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-12-08 23:34:35 +0100 | bollu | (uid233390@id-233390.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-12-08 23:36:22 +0100 | k60`` | (~user@static.100.218.46.78.clients.your-server.de) (Ping timeout: 265 seconds) |
2021-12-08 23:37:22 +0100 | pfurla | (~pfurla@2804:14d:5c5a:9a78:840d:6ccb:3c35:c390) |
2021-12-08 23:38:40 +0100 | Dansk31 | (~Dansk31@147.114.141.88.rev.sfr.net) |
2021-12-08 23:39:00 +0100 | Dansk31 | (~Dansk31@147.114.141.88.rev.sfr.net) (Client Quit) |
2021-12-08 23:39:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-12-08 23:39:18 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-12-08 23:40:10 +0100 | sciencentistguy | (~sciencent@hacksoc/ordinary-member) (Ping timeout: 256 seconds) |
2021-12-08 23:41:05 +0100 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-12-08 23:45:03 +0100 | Guest40 | (~Guest40@ec2-54-215-90-243.us-west-1.compute.amazonaws.com) |
2021-12-08 23:47:47 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) |
2021-12-08 23:50:37 +0100 | chomwitt | (~chomwitt@2a02:587:dc0d:3700:12c3:7bff:fe6d:d374) (Ping timeout: 240 seconds) |
2021-12-08 23:53:24 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:b5e5:6571:976d:7afc) (Ping timeout: 268 seconds) |
2021-12-08 23:56:32 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
2021-12-08 23:56:49 +0100 | Guest97 | (~Guest97@pool-98-111-246-199.pitbpa.ftas.verizon.net) (Quit: Client closed) |
2021-12-08 23:58:18 +0100 | Axma10079 | Axman6 |
2021-12-08 23:59:24 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2021-12-08 23:59:25 +0100 | CiaoSen | (~Jura@p200300c9570204002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |