2021/09/29

2021-09-29 00:00:21 +0200 <dminuoso> A linter in `cabal run` seems like a bad idea.
2021-09-29 00:00:35 +0200 <monochrom> Lately I thought up this dad joke accidentally.
2021-09-29 00:00:42 +0200 <sm> free_functor, I don't think you can enforce anything about your VCS commits from the cabal file
2021-09-29 00:01:06 +0200 <dminuoso> What's wrong with just a plain git hook?
2021-09-29 00:01:33 +0200 <dminuoso> Aside the fact that I firmly believe that automatic linting is an unwise idea.
2021-09-29 00:01:46 +0200 <sm> if you want to standardise/genericise it a bit, you could maybe add a test suite that runs your checks, and manually add a commit hook that runs that suite
2021-09-29 00:02:35 +0200smis doing automatic linting of commit messages, and life is so much better
2021-09-29 00:03:24 +0200 <dminuoso> Oh, that I could probably live with.
2021-09-29 00:03:27 +0200 <monochrom> The type sig of the division operator and division by zero. Let's say div but the same discussion applies to (/). You know how some people prefer "div :: X -> X -> X", it's a more convenient type but can crash; and other people prefer "div :: X -> X -> Maybe X" so it doesn't crash and it's handlable, but less convenient when you don't really have div-by-zero.
2021-09-29 00:03:37 +0200 <dminuoso> Does it do linguistic analysis and assert commit messages are in imperative form?
2021-09-29 00:03:59 +0200 <monochrom> So I was thinking "this can become a divisive issue... oh wait what did I do there? hahaha"
2021-09-29 00:04:04 +0200 <free_functor> dminuoso, the dependency manager is a reasonable place to declare your linting, since the linter is a dev dependency. And the linter doesn't need to be enforced - it could be a warning only, that pops up in your editor
2021-09-29 00:04:23 +0200 <dminuoso> free_functor: "dev dependency" is not a thing for us, really.
2021-09-29 00:04:30 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-09-29 00:04:57 +0200 <dminuoso> and also I disagree that its a sensible place, as that suggests the only reasonable place where a linter could come from, is via hackage.
2021-09-29 00:05:34 +0200 <dminuoso> Here we simply use a shell.nix to provide development time dependencies
2021-09-29 00:06:04 +0200 <dminuoso> Which is great because it lets us properly declare even native dependencies, something you simply cant do with npm-style dev dependencies.
2021-09-29 00:06:17 +0200 <dminuoso> Or executable/binary tools that must be present
2021-09-29 00:06:18 +0200CnnibisIndica(~herb@user/mesaboogie)
2021-09-29 00:06:50 +0200 <sm> dminuoso: nah, it mainly just requires one or more prefixes: at the start. But also when it fails, prints an informative message about the conventions, and how to configure as a local hook. This also shows up in CI output to pull requestors. Super effective.
2021-09-29 00:07:19 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-09-29 00:07:20 +0200 <dminuoso> sm: Is that available for sharing?
2021-09-29 00:07:24 +0200 <dminuoso> Im genuinely curious
2021-09-29 00:07:43 +0200 <sm> sure! https://github.com/simonmichael/hledger/blob/master/bin/commitlint
2021-09-29 00:07:53 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
2021-09-29 00:08:15 +0200 <dminuoso> sm: Oh, are you simonmic on matrix/haskell?
2021-09-29 00:08:24 +0200 <sm> I am!
2021-09-29 00:08:29 +0200 <dminuoso> Figures, that name did look familiar
2021-09-29 00:08:48 +0200 <dminuoso> Ah yes, that looks really good.
2021-09-29 00:08:53 +0200 <dminuoso> I can see the value in that.
2021-09-29 00:12:38 +0200 <sm> I was writing commit messages this way myself, but it wasn't something others thought much about. So producing changelogs and release notes after time had passed was painful.. this has worked really well at improving our commit messages project wide and reducing the cost of change documentation (and releases)
2021-09-29 00:14:09 +0200 <sm> doing it robustly in github CI is hard, but https://github.com/simonmichael/hledger/blob/master/.github/workflows/linux.yml#L104 works well enough
2021-09-29 00:15:25 +0200 <sm> (improving commit messages has knock on effects: design thinking, commits, PRs, docs all improve)
2021-09-29 00:20:18 +0200 <free_functor> dminuoso, so if you're not documenting your linter's version and provenance in the same place where you document your other project dependencies, where /does/ that metadata go? In the nix file?
2021-09-29 00:20:47 +0200nehsou^(~nehsou@68.101.50.106)
2021-09-29 00:20:50 +0200 <free_functor> ie, nix file fetches some particular git commit from some particular repo, and then it uses nix to build the some raw binaries or whatever?
2021-09-29 00:22:26 +0200 <dminuoso> free_functor: We can do everything coherently via nix, actually.
2021-09-29 00:22:29 +0200 <dminuoso> Even the cabal dependencies
2021-09-29 00:22:48 +0200 <dminuoso> And yes, they are separate tools really.
2021-09-29 00:23:05 +0200 <dminuoso> cabal just doesnt know how to install GHC, it's just the way it is.
2021-09-29 00:23:13 +0200 <dminuoso> So you have to provide for that yourself.
2021-09-29 00:23:19 +0200 <dminuoso> Similarly, cabal cant provide you with an editor
2021-09-29 00:23:24 +0200 <dminuoso> you have to provide that yourself too.
2021-09-29 00:23:36 +0200 <dminuoso> cabal also cant hand you gdb or lldb for debugging, or valgrind
2021-09-29 00:24:05 +0200vysn(~vysn@user/vysn) (Ping timeout: 246 seconds)
2021-09-29 00:24:13 +0200 <dminuoso> You quickly arrive at the fact, that cabal is really just good for making haskell stuff available, and the "needs for compilation time" rarely encompasses only haskell packages
2021-09-29 00:24:46 +0200pavonia(~user@user/siracusa)
2021-09-29 00:25:58 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 00:27:04 +0200 <dminuoso> The primary use case of devDependencies is rather things like testing things.
2021-09-29 00:27:24 +0200 <dminuoso> And to model that cabal has something more powerful, we can simply have separate (sub)packages that deal with testing
2021-09-29 00:27:56 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-09-29 00:27:58 +0200 <dminuoso> And that (sub)package would then depend on say quickcheck, that way your production build doesnt have quickcheck and its constraints imposed on you
2021-09-29 00:28:38 +0200 <free_functor> I do not yet understand why cabal should not be able to fetch a fresh ghc binary like poetry - it feels like the reason ghc-up exists is because cabal maintainers are stuck in year 2008 as far as package manager requirements - back then we didn't expect package managers to speak semver and integrate /w dvcs, and we didn't expect them to provide their own deterministic build environment either.
2021-09-29 00:28:39 +0200 <dminuoso> I mean yeah, if you have a haskell library capable of linting haskell code, you can even call it directly from your test
2021-09-29 00:28:56 +0200 <dminuoso> Many haskell programs have clean separation and expose the running interface as a haskell library
2021-09-29 00:29:14 +0200pzanco(~Android@187.104.158.159)
2021-09-29 00:29:41 +0200 <dminuoso> cabal can talk PVP (which is comparable to semver), and it can do deterministic build environments.
2021-09-29 00:30:12 +0200 <free_functor> when you init a poetry project, it builds a whole new python venv - if you asked for python 3.9 but that is not on your system, beep bop boop, poetry fetches python 3.9 when provisioning the project's venv
2021-09-29 00:30:15 +0200 <dminuoso> Im not sure why you suggest being able to fetch a GHC is paramount for `cabal`, or why lacking that capability means its "stuck in ancient past"
2021-09-29 00:30:15 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-09-29 00:30:28 +0200pzanco(~Android@187.104.158.159) (Client Quit)
2021-09-29 00:30:39 +0200 <dminuoso> free_functor: it's simply not in the scope of cabal, it's as simple as that.
2021-09-29 00:30:45 +0200 <sclv> basically you could merge ghcup and cabal but then you couldn’t manage cabal with ghcup, and ghcup also handles now things like msys on windows and various -dev deps on debian and also installling hls and ide tools.
2021-09-29 00:31:00 +0200 <sclv> and having cabal do all that would be beyond absurd
2021-09-29 00:31:26 +0200 <sclv> and having ghcup do it instead is totally nice and fine and works great!
2021-09-29 00:31:27 +0200 <free_functor> dminuoso, things like the statement "it's simply not in the scope of cabal" is what makes me say it's stuck in an ancient - and mysterious, and unaccountable past... which is not relevant to my own requirements
2021-09-29 00:31:40 +0200 <sclv> I suggest you use ghcup
2021-09-29 00:32:35 +0200 <dminuoso> free_functor: How about you start exploring what Cabal-the-spec is?
2021-09-29 00:32:46 +0200 <free_functor> sclv, ghcup only exists because cabal refuses to take hints from package managers like cargo, yarn, npm, and poetry, all of which do these things and don't seem to feel it's featuritis or scope creep
2021-09-29 00:32:57 +0200 <sclv> sometimes having different tools to do different things instead of one tool to do everything is called “a feature” and “good software architecture” and “the reason unix-like systems succeeded”
2021-09-29 00:33:00 +0200 <Hecate> free_functor: Other languages like Rust, Elixir & Ruby do the same. You don't install the toolchain with the project manager.
2021-09-29 00:33:03 +0200 <dminuoso> Every time I have interacted with yarn or npm I ended up hating myself.
2021-09-29 00:33:15 +0200max22-(~maxime@2a01cb0883359800a9478b4b8829df15.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-29 00:33:26 +0200 <dminuoso> They are fundamentally broken.
2021-09-29 00:33:34 +0200 <free_functor> ie, being able to go from a git repo to a fully working deployment feels like the package manager's job in 2021
2021-09-29 00:33:54 +0200 <dminuoso> free_functor: Feel free to improve the situation.
2021-09-29 00:34:24 +0200 <sclv> i mean ghcup works great. Literally what problem do you have with that workflow outside of “its not yarn”
2021-09-29 00:34:26 +0200 <zzz> so today someone showed me this, which i found interesting: https://www.codewars.com/kata/550756a881b8bdba99000348/train/haskell
2021-09-29 00:34:42 +0200 <free_functor> I mean, whoever it is on the cabal team who is against merging ghc-up into cabal needs to be deplatformed before anything can improve
2021-09-29 00:34:56 +0200 <dminuoso> You seem to be just wanting to fight for no obvious reasons.
2021-09-29 00:35:03 +0200 <dminuoso> So Ill detach from this discussion.
2021-09-29 00:35:05 +0200 <sclv> answer my question
2021-09-29 00:35:59 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 00:36:02 +0200 <dminuoso> If you want to have a rational discussions, I suggest you don't start with accusations and a made up mind.
2021-09-29 00:36:21 +0200 <free_functor> "<dminuoso> free_functor: it's simply not in the scope of cabal, it's as simple as that."
2021-09-29 00:36:22 +0200 <dminuoso> And start with questions of curiosity instead. It's much more productive.
2021-09-29 00:36:27 +0200 <free_functor> the conversation ended there, dminuoso
2021-09-29 00:36:50 +0200 <Boarders> I would not say taking hints from python is a good idea in this space, the lang is a massive disaster at package management
2021-09-29 00:37:02 +0200jess(~jess@libera/staff/jess)
2021-09-29 00:37:40 +0200Hydrazer(~Hydrazer@S010684c9b26eee6d.cg.shawcable.net)
2021-09-29 00:37:58 +0200 <Hydrazer> does anyone know if it's possible to automatically run the main program when typing the ghci command? like ghci main "bruh.hs"
2021-09-29 00:39:53 +0200 <sclv> skimming poetry’s website i do see that python is now recommending upper bounds on all dependencies. score one for the good guys
2021-09-29 00:40:03 +0200 <hpc> do you want runghc maybe?
2021-09-29 00:41:09 +0200 <Hydrazer> yeah how do i get that
2021-09-29 00:41:48 +0200 <zzz> Hydrazer: you can do it with ghcid
2021-09-29 00:42:24 +0200 <sclv> runghc should be installed with ghc
2021-09-29 00:42:33 +0200 <Hydrazer> on windows?
2021-09-29 00:42:36 +0200 <hpc> yep
2021-09-29 00:42:42 +0200 <Hydrazer> hm
2021-09-29 00:42:43 +0200 <hpc> just do runghc foo.hs
2021-09-29 00:42:46 +0200 <hpc> it'll run main and exit
2021-09-29 00:44:10 +0200emf(~emf@163.114.132.6) (Ping timeout: 252 seconds)
2021-09-29 00:45:51 +0200rtjure(~rtjure@bras-79-132-17-74.comnet.bg) (Ping timeout: 268 seconds)
2021-09-29 00:45:53 +0200norskalm(~norskalm@101.175.64.73) (Quit: Client closed)
2021-09-29 00:46:03 +0200 <Hydrazer> yeah perfect nice
2021-09-29 00:46:29 +0200Hydrazer(~Hydrazer@S010684c9b26eee6d.cg.shawcable.net) (Quit: Client closed)
2021-09-29 00:46:35 +0200 <zzz> i used to do 'watch runghc ...' but now i do 'ghcid --test=test ...' and have all my tests in a 'test :: IO ()' function so i can see the output live update when i save the file
2021-09-29 00:47:14 +0200 <zzz> that way i dont pollute my main function
2021-09-29 00:47:35 +0200 <zzz> and can make it run iff all my tests pass
2021-09-29 00:48:45 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.)
2021-09-29 00:48:46 +0200[Kalisto](~nico@user/kalisto/x-8968079)
2021-09-29 00:50:44 +0200[Kalisto](~nico@user/kalisto/x-8968079) ()
2021-09-29 00:50:46 +0200 <zzz> i have it aliased. 'hs {file}' is 'ghcid --warnings --lint --no-status --test=test --test-message="
2021-09-29 00:50:52 +0200 <zzz> " --clear --no-height-limit ${file}'
2021-09-29 00:50:52 +0200 <free_functor> @Hecate, I believe rust has a "ghc-up" styled script called rustup, which is its official installer. It is indeed this rustup component which shotguns both the compiler and the package manager onto the system all at once. So I was wrong - it's not cargo that does this, but instead, it's the official rust installer which installs both cargo and rust
2021-09-29 00:50:52 +0200 <lambdabot> Unknown command, try @list
2021-09-29 00:51:55 +0200vicfred(~vicfred@user/vicfred)
2021-09-29 00:56:44 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-29 00:58:01 +0200chris(~chris@81.96.113.213)
2021-09-29 00:58:05 +0200chrisGuest557
2021-09-29 00:58:20 +0200 <monochrom> IIRC rustup is not a build tool. As a counterexample.
2021-09-29 00:58:49 +0200 <free_functor> I suppose correct me if I am wrong on this: If the same rust model were applied to haskell, all that would have to change is that ghcup would become an officially supported installer for cabal and ghc. Ie, for ghcup to serve the same role that rustup serves, it needs legitimacy and endorsement from both ghc and cabal communities.
2021-09-29 00:59:09 +0200 <sclv> ghcup is such an officially supported installer
2021-09-29 00:59:29 +0200 <Hecate> free_functor: ghcup benefits from support from GHC, Cabal, HLS…
2021-09-29 00:59:34 +0200 <monochrom> And cargo is not an install-rust-compiler tool either, IIRC.
2021-09-29 00:59:58 +0200 <Hecate> free_functor: and yes, ghcup is modeled after rustup
2021-09-29 01:00:36 +0200 <free_functor> monochrom, I believe it is so - https://doc.rust-lang.org/cargo/getting-started/installation.html note the "Rust is installed now. Great!" message - after I have done this in the past, I had rust and cargo
2021-09-29 01:01:12 +0200 <dminuoso> ghcup is an officially supported and endorsed installer.
2021-09-29 01:01:17 +0200 <monochrom> But you know you can always write your own shell script that dispatches ghcup or cabal or linter or git-pull automatically.
2021-09-29 01:01:27 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 01:01:27 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 01:01:27 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 01:01:41 +0200 <dminuoso> https://www.haskell.org/ghcup/
2021-09-29 01:01:41 +0200 <free_functor> dminuoso, I think sclv was trying to tell me that earlier but it didn't connect
2021-09-29 01:02:24 +0200 <monochrom> How does "Rust is installed now. Great!" have anything to do with building?
2021-09-29 01:02:47 +0200 <monochrom> How does "Rust is installed now. Great!" refute my "rustup is not a build tool"?
2021-09-29 01:04:16 +0200 <sm> replying to backlog: free_functor, are you aware of stack ? That's a combined install/build tool
2021-09-29 01:04:27 +0200 <dminuoso> free_functor: The key thing about cabal, is that it's focused on doing one thing and one thing well. CABAL stands for common architecture for building applications and libraries and it defines how these things should be built, with dependencies, cabal-the-library implements that specification together by being able to parse a .cabal file, and cabal-install uses cabal-the-library to resolve
2021-09-29 01:04:29 +0200 <dminuoso> dependencies from hackage in order to build said packages.
2021-09-29 01:05:20 +0200 <free_functor> dminuoso, in fact I now see that cabal itself now has official installation instructions that depend on ghcup
2021-09-29 01:05:37 +0200 <free_functor> which.. is... the thing I thought was not the case... because I was wrong :(
2021-09-29 01:05:56 +0200 <monochrom> This is why I hate people with "strong conviction".
2021-09-29 01:05:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 01:06:05 +0200 <monochrom> They opine before they research.
2021-09-29 01:06:07 +0200 <free_functor> monochrom, we hate you too :0
2021-09-29 01:06:15 +0200 <dminuoso> free_functor: at the end, the thing is `cabal` being completely isolated is a good thing, because it reduces friction by not interfering with your system as much as it can. It's a modular thing that you can bundle up in say `stack` or `ghcup`.
2021-09-29 01:06:15 +0200 <sm> monochrom: there's something circular in that statement :)
2021-09-29 01:06:21 +0200 <dminuoso> But `cabal-install` itself makes no such assumptions.
2021-09-29 01:06:21 +0200 <monochrom> 30 years ago we had a great phrase for that on BBSes.
2021-09-29 01:06:32 +0200 <monochrom> "insert foot into mouth, echo internationally"
2021-09-29 01:06:40 +0200 <free_functor> lol
2021-09-29 01:06:48 +0200 <free_functor> that still applies
2021-09-29 01:07:17 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 264 seconds)
2021-09-29 01:08:14 +0200 <monochrom> And the context in which I first learned the phrase "strong conviction" is this.
2021-09-29 01:08:17 +0200 <free_functor> I have no excuse - the last time I looked at ghcup, it was not yet the official solution.. but that was over a year ago, when GHCUP would randomly not work in settings like alpine, for no reason I could discern
2021-09-29 01:08:29 +0200haykam2(~haykam@static.100.2.21.65.clients.your-server.de) (Changing host)
2021-09-29 01:08:29 +0200haykam2(~haykam@user/haykam)
2021-09-29 01:08:39 +0200 <monochrom> I got a humour book about writing recommendation letters for those you don't really want to write for.
2021-09-29 01:09:14 +0200 <hpc> and inside it said "go away" followed by 250 empty pages?
2021-09-29 01:09:19 +0200 <monochrom> One scenerio is there is an ex-convict, a former gangster, so you dare not refuse, and you dare not write bad things in plain sight either.
2021-09-29 01:09:33 +0200 <monochrom> So the solution was "this is a person of strong conviction".
2021-09-29 01:10:02 +0200 <dminuoso> free_functor: Even before ghcup, managing via bindists is really fine. Or if you insisted on this "one piece of software for it all", stack had you covered.
2021-09-29 01:10:06 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-09-29 01:10:19 +0200 <free_functor> that's not even damning with faint praise, that's fairly seething - you must estimate this rogue as less than insightful!
2021-09-29 01:10:58 +0200 <dminuoso> This is mostly a problem that relates to "easing in the way for newcomers", but let's face it: spending 3 minutes on installing GHC/cabal by hand if need be is largely irrelevant in the scope of spending 800h on a given Haskell project in some year.
2021-09-29 01:11:09 +0200 <dminuoso> So this doesn't really impact the actual workload
2021-09-29 01:11:51 +0200 <dminuoso> So yeah, Haskell had some rough edges that made getting into it harder than it should have been, but none of them were really relevant for people working with haskell on a daily basis.
2021-09-29 01:12:18 +0200 <dminuoso> ghcup nicely closed that up, and I do believe it has helped more people successfully start learning haskell
2021-09-29 01:12:53 +0200 <Gurkenglas> Is there a particular monotonic map that can only be implemented using try/catch?
2021-09-29 01:12:55 +0200 <dminuoso> But really the lack is not proof of any immaturity, it's mostly just annoyances. cabals build plans are robust, npm builds plans are (IME) not.
2021-09-29 01:19:35 +0200 <dminuoso> for instance the separatio of peerDependencies and normal dependencies can lead to dependency duplication, and the javascript solution is to "never pass structures between package boundaries". This sort of works because passing non-opaque structures tends to work well enough, and any friction is eaten away/hidden in automatic conversions, or perhaps it leads to random bugs
2021-09-29 01:21:44 +0200 <dminuoso> if peerDependencies and dependencies were always properly maintained, it'd probably not be much of an issue, but the reality is that they are horribly maintained
2021-09-29 01:22:16 +0200 <dminuoso> also, Id be really curious at the constraint solving used by npm, because finding suitable plans with what npm has seems almost impossible to do
2021-09-29 01:22:40 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-09-29 01:23:02 +0200 <dminuoso> Or maybe it's because npm doesnt use a constraint solver?
2021-09-29 01:23:56 +0200haykam2(~haykam@user/haykam) (Remote host closed the connection)
2021-09-29 01:24:14 +0200haykam(~haykam@user/haykam)
2021-09-29 01:24:14 +0200haykam(~haykam@user/haykam) (Read error: Connection reset by peer)
2021-09-29 01:24:28 +0200haykam(~haykam@user/haykam)
2021-09-29 01:24:28 +0200haykam(~haykam@user/haykam) (Read error: Connection reset by peer)
2021-09-29 01:24:45 +0200haykam(~haykam@user/haykam)
2021-09-29 01:24:45 +0200haykam(~haykam@user/haykam) (Read error: Connection reset by peer)
2021-09-29 01:24:58 +0200haykam(~haykam@user/haykam)
2021-09-29 01:24:58 +0200haykam(~haykam@user/haykam) (Read error: Connection reset by peer)
2021-09-29 01:25:11 +0200haykam(~haykam@user/haykam)
2021-09-29 01:25:11 +0200haykam(~haykam@user/haykam) (Read error: Connection reset by peer)
2021-09-29 01:25:59 +0200 <free_functor> once upon a time it solved that issue by including the kitchen sink. If module A used version 2.0 of module C, and module B needed version 1.8, .npm_modules would collect both versions.
2021-09-29 01:30:32 +0200 <zzz> this still goin on?
2021-09-29 01:30:51 +0200ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-29 01:32:39 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-09-29 01:32:42 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds)
2021-09-29 01:33:19 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-09-29 01:34:05 +0200acidjnk_new3(~acidjnk@p200300d0c703cb49b458fc4f9b844b2d.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2021-09-29 01:35:14 +0200 <free_functor> I notice that ghcup is not yet really a "first class citizen" of haskell.org. Lets compare to rust.org, where the call to action ("get started") takes you directly to a page with clear rustup directions.
2021-09-29 01:39:31 +0200 <shapr> I would like for ghcup to be that first class citizen
2021-09-29 01:42:38 +0200 <monochrom> Generally it is trivial for an interpreter to support loading up both versions of the "same" library. Less easier but still pretty doable for a non-optimizing compiler.
2021-09-29 01:43:10 +0200 <monochrom> But this is absolutely unsafe for an aggressively inlining optimizing compiler such as GHC.
2021-09-29 01:43:31 +0200 <monochrom> In particular aggressive enough to do cross-module inlining.
2021-09-29 01:44:30 +0200 <monochrom> Everything bad about the "cabal hell" horror story traces back to this fundamental fact.
2021-09-29 01:44:42 +0200Robin_Jadoul(~Robin_Jad@152.67.64.160) (Read error: Connection reset by peer)
2021-09-29 01:44:59 +0200Robin_Jadoul(~Robin_Jad@152.67.64.160)
2021-09-29 01:45:02 +0200 <awpr> I believe GHC handles this fine (if un-ergonomically): two "different versions of the same library" are just totally unrelated packages with disjoint types and code. I know I've seen some non-Cabal builds fail with errors like "could not match these-0.2:These with these-0.3:These"
2021-09-29 01:45:11 +0200 <monochrom> But people do not understand. They look at Python and Javascript and then come back and say "why can't Haskell do the same?"
2021-09-29 01:45:22 +0200 <monochrom> Do you want to run Hugs? Then you can do the same.
2021-09-29 01:46:01 +0200 <free_functor> shapr, I think one very simple change would send a clear signal: The haskell page has a call action (Try it!); underneath, or replacing it, there could be another call to action "Install it!"
2021-09-29 01:46:18 +0200 <sclv> also javascript and python have, as the ecosystem of deps has grown, have run into eventual problems with this modue
2021-09-29 01:46:44 +0200 <monochrom> Yes, GHC does a type-check and allow when it sees disjointness. cabal-install though plays it safe and simply ban up front.
2021-09-29 01:46:57 +0200 <monochrom> Or rather, cabal-install since after cabal hell.
2021-09-29 01:47:06 +0200 <monochrom> There was a time it was OK with this too.
2021-09-29 01:47:12 +0200 <awpr> "when cabal hell freezes over"
2021-09-29 01:47:29 +0200 <awpr> now refers to a time in the past
2021-09-29 01:48:46 +0200 <monochrom> But problem is that the name "cabal hell" includes seeing the GHC error message and, instead of thanking the safety checks, complaining about "a new kind of DLL hell".
2021-09-29 01:49:16 +0200mei(~mei@user/mei) (Ping timeout: 245 seconds)
2021-09-29 01:49:55 +0200 <monochrom> Right? People's response to build failures is name calling.
2021-09-29 01:50:55 +0200 <seydar> For some reason, my install of ghc (fresh from homebrew) can't find any standard packages (specifically Network.Socket). Is there a command I can run to better identify why it can't see anything?
2021-09-29 01:51:21 +0200 <monochrom> Ah, I think Network.Socket doesn't come with GHC any more.
2021-09-29 01:51:31 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 01:52:09 +0200 <monochrom> I think network was drop a year ago or further.
2021-09-29 01:52:16 +0200Guest7240(~Guest72@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-09-29 01:52:16 +0200 <monochrom> s/drop/dropped/
2021-09-29 01:52:59 +0200 <monochrom> Ah, but the command you're looking for is "ghc-pkg" :)
2021-09-29 01:53:06 +0200 <monochrom> e.g. ghc-pkg list
2021-09-29 01:55:47 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
2021-09-29 01:55:50 +0200Franciman(~Franciman@mx1.fracta.dev) (Ping timeout: 260 seconds)
2021-09-29 01:56:07 +0200pierrot(~pi@user/pierrot) (Ping timeout: 240 seconds)
2021-09-29 01:56:41 +0200Franciman(~Franciman@mx1.fracta.dev)
2021-09-29 01:56:41 +0200zebrag(~chris@user/zebrag)
2021-09-29 01:57:28 +0200pierrot(~pi@user/pierrot)
2021-09-29 01:58:04 +0200 <free_functor> sorry for flogging this dead horse, dminuoso, but here are the other signals that the haskell org maintainers don't officially endorse ghcup yet: 1) The ghcup install instructions don't appear front and center at in https://www.haskell.org/downloads/. 2) The cabal docs (https://cabal.readthedocs.io/en/3.6/getting-started.html#installing-the-haskell-toolchain) link to the ghcup git repo, not the ghcup instructions page. 3) The
2021-09-29 01:58:04 +0200 <free_functor> official status of GHCUP is not at all reflected on the GHC download page https://www.haskell.org/ghc/download_ghc_8_10_7.html
2021-09-29 01:59:57 +0200 <monochrom> This is because there are people who prefer ghcup, people who prefer going through stack, and people who prefer other alternatives, for example homebrew, chocolate.
2021-09-29 02:00:04 +0200jlamothe(~jlamothe@104.158.48.100) (Ping timeout: 252 seconds)
2021-09-29 02:00:33 +0200 <monochrom> While everyone takes side privately, no one would want to take side in a leader role to call any of the above "official".
2021-09-29 02:01:02 +0200 <monochrom> Well, either that, or all of the above are official. Same difference.
2021-09-29 02:01:02 +0200 <sclv> the HF has been trying to shephard some stuff through, but the individual webpages are controlled by various teams
2021-09-29 02:01:17 +0200 <sclv> haskell.org controls the downloads page, and there are prs in flight under discussion for improving it
2021-09-29 02:01:36 +0200 <sclv> the ghc downloads page just points to binaries, because its intended as an official source for the binaries and nothing else
2021-09-29 02:02:01 +0200 <sclv> arguably it could say "hey, if you want an installer for your platform and not just the binaries, check here: " but nobody's made a pr to do that
2021-09-29 02:02:04 +0200 <monochrom> And I still get my rustc from "apt-get install", not from rustup, BTW.
2021-09-29 02:02:18 +0200 <sclv> the cabal website would welcome a pr to change the ghcup pointer to a better destination. *shrug*
2021-09-29 02:02:40 +0200 <monochrom> And I was an early adopter of ghcup, long before it was even mentioned on haskell.org
2021-09-29 02:02:59 +0200 <monochrom> When it was still a shell script, I was there.
2021-09-29 02:03:09 +0200 <koala_man> if I do `ghci src/foo/myfile.hs` then I can interactively run any function defined in it. If I do `cabal repl` or `cabal repl src/foo/myfile.hs` with or without `:m +foo.myfile` then I can only run exported ones. Is there a way to run unexported functions for debugging purposes via the cabal repl?
2021-09-29 02:03:13 +0200 <monochrom> Screw "official".
2021-09-29 02:03:33 +0200 <monochrom> Where is the "official website" of C anyway?
2021-09-29 02:04:10 +0200 <monochrom> Did that stop anyone from praising C as if it were the most official language? The standard against all other languages are supposed to look up to?
2021-09-29 02:04:23 +0200 <sclv> koala_man: you should use `:load` to load the file explicitly
2021-09-29 02:04:29 +0200 <monochrom> Where can I download my cup?
2021-09-29 02:04:52 +0200 <koala_man> sclv: perfect, thanks
2021-09-29 02:05:11 +0200 <free_functor> I think for ghcup to recieve the legitimacy of official endorsement, and lower barriers to new adopters, ghcorg should certainly consider officially promoting ghcup on front page. Imo that alone would be a huge - and A/B testable - imrprovement to daily haskell deploys
2021-09-29 02:06:01 +0200 <monochrom> koala_man: :add is a version of :load that doesn't unload existing stuff, btw, in case you need to load multiple modules after the fact.
2021-09-29 02:06:13 +0200 <free_functor> Then with that primary call to action in place, the confusing download page, and somewhat inconsistent install documentation can no longer bite a newb
2021-09-29 02:06:14 +0200 <sclv> new adopters don't go to the ghc homepage, they got to the haskell homepage, which points them to downloads, which points them to ghcup
2021-09-29 02:07:57 +0200tabaqui(~root@46.39.45.162)
2021-09-29 02:08:12 +0200 <tabaqui> Hey all!
2021-09-29 02:08:17 +0200 <tabaqui> It was a long time
2021-09-29 02:08:41 +0200 <monochrom> But everything seems like just yesterday to me. :)
2021-09-29 02:08:52 +0200monochromis old and wise.
2021-09-29 02:09:06 +0200 <free_functor> sclv, I propose that that ghcup is the fifth item on the download page which perplexes new users - me included. New users are given the option to manuall install cabal + ghc before they are given the option to install stack, before they are given the option to install ghcup - then to install ghcup they must click a link, rather than just copying text
2021-09-29 02:09:53 +0200 <sclv> "8:01 PM <sclv> haskell.org controls the downloads page, and there are prs in flight under discussion for improving it"
2021-09-29 02:10:03 +0200 <free_functor> sclv, I have the feeling that the downloads page needs to link to all those things for maintenance reasons - but if the front page itself gives the user the option to copy the ghcup install string, 90% of users will skip the downloads page
2021-09-29 02:10:19 +0200 <sclv> ok, make a pr to the front page, not a bad idea!
2021-09-29 02:11:11 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 246 seconds)
2021-09-29 02:11:51 +0200 <monochrom> You realize that ghcup on Windows is only a recent thing?
2021-09-29 02:12:22 +0200 <monochrom> This is why it was problematic to recommend ghcup at a high priority unconditionally.
2021-09-29 02:12:37 +0200 <free_functor> because of the windows story alone?
2021-09-29 02:12:43 +0200 <koala_man> while I'm asking about cabal, is there an equivalent to `runghc` that lets me run a program in interpreted mode to skip the compilation?
2021-09-29 02:12:59 +0200 <monochrom> Have you been in a tech support role to field questions from Windows users "hi ghcup doesn't work for me?"
2021-09-29 02:13:04 +0200 <sclv> i mean.. that's just "runghc"?
2021-09-29 02:13:14 +0200 <tabaqui> I faced a problem, apparantly requires GC hacking, but I'm not good with it
2021-09-29 02:13:37 +0200 <free_functor> monochrom, yes, with the added bonus that I was the clueless window user, I think.. and I don't think it worked at the time
2021-09-29 02:13:48 +0200 <free_functor> I think at the time not even the choco scripts were reliable
2021-09-29 02:13:53 +0200 <tabaqui> I have a code with high loads on STM.TChan, which causes space leak even when chans are empty
2021-09-29 02:14:04 +0200 <sclv> there's also v2-run and script support https://cabal.readthedocs.io/en/latest/cabal-commands.html#cabal-v2-run
2021-09-29 02:14:06 +0200 <tabaqui> basically, it is like this https://gist.github.com/boris-stepanov/481821f9fdf93cc3076157a1e8b912a9
2021-09-29 02:14:08 +0200 <koala_man> sclv: but runghc doesn't understand cabal, right? so it doesn't generate build files or import packages from the current dir
2021-09-29 02:14:22 +0200 <sclv> koala_man: see my above
2021-09-29 02:14:22 +0200 <tabaqui> 600M leak, be carefull
2021-09-29 02:14:34 +0200 <tabaqui> can anyone help me to tune RTS here?
2021-09-29 02:14:41 +0200pierrot(~pi@user/pierrot) (Ping timeout: 246 seconds)
2021-09-29 02:14:43 +0200 <koala_man> huh interesting
2021-09-29 02:14:44 +0200pierrot_(~pi@user/pierrot)
2021-09-29 02:16:28 +0200 <sclv> i'm not sure what the leak is you're describing. you're writing a ton of stuff to a tchan, and then reading it
2021-09-29 02:16:33 +0200 <sclv> so thats going to... consume memory?
2021-09-29 02:16:45 +0200 <tabaqui> yeah, but memory is still allocated after reading
2021-09-29 02:17:09 +0200 <monochrom> > 600*1000*1000 / 10000000
2021-09-29 02:17:10 +0200 <lambdabot> 60.0
2021-09-29 02:17:20 +0200 <monochrom> > 600*1000*1000 / 10000000 / 8
2021-09-29 02:17:22 +0200 <lambdabot> 7.5
2021-09-29 02:17:32 +0200 <monochrom> Sounds about right.
2021-09-29 02:17:55 +0200 <monochrom> Actually this is even better:
2021-09-29 02:17:57 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 02:18:03 +0200 <monochrom> > 600*1000*1000 / 2 / 10000000 / 8
2021-09-29 02:18:05 +0200 <lambdabot> 3.75
2021-09-29 02:18:13 +0200 <free_functor> monochrom, the idea of having a "Install Me!" call to action on the front page is still workable, given 1) People are willing to tolerate that it will reduce traffic to the download page 2) in particular, they accept that it will reduce the number of stack downloads 3) it is permissible to show windows users the choco version of the install script, rather than GHCUP
2021-09-29 02:18:19 +0200 <monochrom> The /2 is because "copying GC" also means double-buffering.
2021-09-29 02:18:33 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 02:18:39 +0200 <sclv> we should be recommending ghcup for windows now. its sufficiently tested. that's one of the prs in flight for the downloads page
2021-09-29 02:18:49 +0200 <free_functor> monochrom, then in that way, we give users a 2 click copy-paste installation experience like other lang pages, even if they're windows users
2021-09-29 02:19:15 +0200 <tabaqui> I've just started reading SM and company paper about haskell GC, hope to understand something
2021-09-29 02:19:22 +0200 <monochrom> If you look into the implementation of TChan, you may be able to see that each node can take up say 4 machine words.
2021-09-29 02:19:53 +0200 <tabaqui> as far as I understand, TChan is basically a linked list of TVars
2021-09-29 02:20:13 +0200 <monochrom> Sure.
2021-09-29 02:20:17 +0200 <tabaqui> and when the end is very far from the beginning, gc can't free the head
2021-09-29 02:20:28 +0200 <monochrom> So each list node is already 3 words.
2021-09-29 02:20:36 +0200 <monochrom> Each TVar is 1 or 2 words.
2021-09-29 02:20:55 +0200 <monochrom> That's already 4 to 5.
2021-09-29 02:21:11 +0200 <free_functor> sclv, does GHCUP for windows use WSL II?
2021-09-29 02:21:15 +0200 <koala_man> sclv: it's saying "cabal: The run command can only run an executable as a whole, not files or modules within them, but the target 'test/shellcheck.hs' refers to the file test/shellcheck.hsin the test suite test-shellcheck.". The file is an executable (i.e. has a main method). Is it saying it can't span multiple files?
2021-09-29 02:21:31 +0200 <sclv> nope, no wsl. the standard windows haskell toolchain uses msys
2021-09-29 02:21:54 +0200 <free_functor> sclv, I was noticing that is what the choco package uses
2021-09-29 02:22:22 +0200 <tabaqui> so... Can I force GC to collect the fully read tchan?
2021-09-29 02:22:30 +0200 <sclv> koala_man: yes, the run runs a component, or runs a script. it doesn't run a single file. you can use cabal to create a ghc environment file, and when one of those is around, then the correct package imports will be in scope
2021-09-29 02:22:42 +0200 <sclv> ?hoogle performGC
2021-09-29 02:22:42 +0200 <lambdabot> System.Mem performGC :: IO ()
2021-09-29 02:22:42 +0200 <lambdabot> BasePrelude performGC :: IO ()
2021-09-29 02:22:42 +0200 <lambdabot> Pipes.Concurrent performGC :: IO ()
2021-09-29 02:23:07 +0200 <free_functor> lol, was there ever a version of ghcup that installed on windows via a chocolately wrapper? That feels devious but also kind of cursed!
2021-09-29 02:23:30 +0200 <awpr> are you sure the TChan is actually retaining anything? could it just be that the runtime is holding onto the memory in anticipation of allocating it later?
2021-09-29 02:23:33 +0200 <monochrom> I think if you have like "threadDelay (2 * 10^6)", that will already trigger GC?
2021-09-29 02:23:39 +0200 <sclv> note that ghc does _not_ release memory it allocates, iirc. so performing gc might reduce the active footprint, but you won't necessary see the effect directly in a memory monitor
2021-09-29 02:23:54 +0200 <sclv> also, no, ghcup never did windows any other way than this
2021-09-29 02:24:01 +0200 <tabaqui> nope, didn't help
2021-09-29 02:24:24 +0200 <tabaqui> right, I hope it just collects the first node of the tchan
2021-09-29 02:24:50 +0200 <sclv> in any case, looking at "memory usage" won't tell you what sort of leaks do or don't occur in terms of things not being collected when you expect. you need to profile with heap profiling for that
2021-09-29 02:25:22 +0200 <free_functor> sclv, when a PR goes out to the haskell.org pront page, do they have the metrics to tell if there has been an improvement?
2021-09-29 02:25:46 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3)
2021-09-29 02:25:54 +0200 <tabaqui> awpr: both tchans are empty. Broadcast is by definition, and read tchan is empty cause I check it later
2021-09-29 02:26:06 +0200 <sclv> there's google metrics, but its hard to judge what "improvement" means. it'll let one figure out "conversion rates to ghcup clickthrus" i guess..??
2021-09-29 02:26:29 +0200 <tabaqui> sclv: I did profiling - as I understood, leak is in TVars (which are TChan nodes)
2021-09-29 02:27:26 +0200 <tabaqui> sclv: btw, you mentioned that ghc does not release memory. So what can be done here?
2021-09-29 02:27:42 +0200 <sclv> idk.. nothing?
2021-09-29 02:27:56 +0200 <sclv> i just mean that if ghc system memory usage hits some high water mark you might not see that released
2021-09-29 02:28:08 +0200 <awpr> I just profiled it. what I'm seeing looks like there is no space leak
2021-09-29 02:28:13 +0200 <free_functor> sclv, in once scenario, the page would serve the new version to 10% of the users, at random, for a week... if rate of downloads increases significantly among the test group, then the change rolls out...
2021-09-29 02:28:25 +0200 <free_functor> doing this on top of a hakyll page would be.... hmmm...
2021-09-29 02:28:29 +0200 <awpr> heap size grows for half a second, then shrinks for 2 seconds, and then it's negligible
2021-09-29 02:28:29 +0200 <sclv> there's no technology for a/b testing vis a vis how the website is built
2021-09-29 02:29:10 +0200 <sclv> ok, sounds like no leak then, just a "trick of the light"
2021-09-29 02:30:06 +0200 <tabaqui> awpr: can you confirm 600M of resident memory after 3 seconds?
2021-09-29 02:30:37 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 02:31:29 +0200 <awpr> yeah. I think that's just the GHC runtime not handing memory back to the OS
2021-09-29 02:31:46 +0200 <tabaqui> not good
2021-09-29 02:31:49 +0200 <awpr> why?
2021-09-29 02:32:13 +0200 <tabaqui> memory is limited, and this program doesn't use it
2021-09-29 02:32:31 +0200 <sclv> but OSes are designed to let you overallocate memory with no problem
2021-09-29 02:32:37 +0200 <sclv> as long as you don't use it
2021-09-29 02:32:39 +0200 <awpr> if the program exits soon, it has no effect. if it doesn't, it'll probably allocate again soon, and returning memory would make those allocations expensive
2021-09-29 02:32:40 +0200 <sclv> that's why ghc made this choice
2021-09-29 02:32:41 +0200 <tabaqui> it's virtual memory
2021-09-29 02:33:01 +0200 <sclv> right. if you don't use it, it doesn't prevent someone else from using it too
2021-09-29 02:33:01 +0200 <tabaqui> I'm ok that ghc sometimes allocate 1TB of virtual memory
2021-09-29 02:33:14 +0200 <tabaqui> but resident is another case
2021-09-29 02:33:22 +0200 <free_functor> sclv, I suppose that before making any PRs for the front page, it would be helpful to give the site maintainers a believable way to run an AB experiment on a statick hackyll page
2021-09-29 02:33:30 +0200 <monochrom> tabaqui: I decided to try this: rename your main to main2, define my own "main = main2 >> main2". And of course change "100" to "10" so I don't wait that long.
2021-09-29 02:34:02 +0200 <monochrom> It does not occupy 1200MB. It still only occupies 600M, ever. I rest my case.
2021-09-29 02:34:20 +0200 <monochrom> And I have also tried variations in which I reuse r and w, no creating new channels.
2021-09-29 02:35:24 +0200 <tabaqui> 740 in my case, but I catch your point
2021-09-29 02:35:39 +0200 <sclv> tabaqui: with a sufficiently recent ghc you have some tuning options: https://well-typed.com/blog/2021/03/memory-return/
2021-09-29 02:36:33 +0200 <monochrom> Oh, 740M when without -threaded. I had -threaded.
2021-09-29 02:37:05 +0200 <awpr> threads occupy negative memory, I'd never have guessed
2021-09-29 02:37:58 +0200 <monochrom> Oh the flip side, I have seen -threaded causing a bit of slowness for unconcurrent code.
2021-09-29 02:38:45 +0200 <monochrom> But lately I have been brainwashed to always say "-O2 -threaded" because that's what open.kattis.com uses. :)
2021-09-29 02:38:52 +0200 <tabaqui> https://gitlab.haskell.org/ghc/ghc/-/issues/14702
2021-09-29 02:38:55 +0200 <tabaqui> Found this issue
2021-09-29 02:39:13 +0200 <tabaqui> nvm, it doesn't explain
2021-09-29 02:39:25 +0200 <tabaqui> ~0 * 4 < 600Mb
2021-09-29 02:39:47 +0200 <monochrom> And BTW the memoization mistake puzzle I posted earlier, the real problem I made my mistake in is https://open.kattis.com/problems/fixingbugs
2021-09-29 02:41:05 +0200 <tabaqui> https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5036
2021-09-29 02:41:19 +0200 <monochrom> :)
2021-09-29 02:42:42 +0200 <tabaqui> "+RTS -Fd0" shrink it to 100M
2021-09-29 02:43:28 +0200 <tabaqui> uh, any Fd does the same :)
2021-09-29 02:46:56 +0200 <monochrom> I respect being concerned about a program that holds on to space that it has once written to and no longer needs.
2021-09-29 02:47:16 +0200 <tabaqui> docs are saying that Fd is defaulted to 4, but setting -Fd4 manually makes a lot of help still
2021-09-29 02:47:39 +0200 <monochrom> "the OS doesn't allocate the pages anyway" holds only when you have never written to it.
2021-09-29 02:48:07 +0200 <monochrom> But you have. Now the OS thinks it has important data. It goes to swap, at best.
2021-09-29 02:48:49 +0200 <monochrom> Swap is both finite and sucky.
2021-09-29 02:49:16 +0200 <monochrom> If every program decides to cause 600M on swap, you will still run into OOM pretty quickly.
2021-09-29 02:49:20 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 246 seconds)
2021-09-29 02:50:06 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 245 seconds)
2021-09-29 02:50:47 +0200 <Cajun> so a friend of mine is trying to install ghc through ghcup and so far all has worked but when installing ghc, it always failed with `BuildFailed failed in dir [dir]: Process "make" with arguments ["install"] failed with exit code 2`
2021-09-29 02:51:35 +0200 <Axman6> which os?
2021-09-29 02:51:42 +0200 <Cajun> debian on WSL2
2021-09-29 02:51:50 +0200 <Cajun> same thing i run so idk why theres an issue with it
2021-09-29 02:52:11 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-09-29 02:52:25 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-29 02:52:37 +0200 <Axman6> is make installed?
2021-09-29 02:52:43 +0200 <Cajun> yup
2021-09-29 02:52:58 +0200 <tabaqui> It's not "-Fd", but just "-F". I'll stay on -F1, it seems pretty well
2021-09-29 02:53:00 +0200 <Axman6> does the error mention any logs? There should be some somewhere
2021-09-29 02:53:13 +0200 <tabaqui> and probably I should wait for 9.2 on stackage
2021-09-29 02:54:38 +0200alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-09-29 02:55:05 +0200 <Cajun> Axman6: it does. it complains `ghc-pkg: couldnt open database [db] for modification: [omitted]: hLock: invalid argument (invalid argument) ghc.mk:979: recipe for target 'install_packages' failed`
2021-09-29 02:55:07 +0200 <tabaqui> -M also helps
2021-09-29 02:55:15 +0200 <tabaqui> allright, I need to sleep
2021-09-29 02:55:23 +0200 <tabaqui> thanks guys, you've helped a lot!
2021-09-29 02:55:48 +0200 <Cajun> oh and after that Make complains that the `install` recipe failed
2021-09-29 02:56:20 +0200 <Axman6> hmm, something up with package db by the looks of it - no idea how to fix that, it's been a very long time since I've had issues like that!
2021-09-29 02:59:03 +0200tabaqui(~root@46.39.45.162) (Quit: WeeChat 3.2)
2021-09-29 03:02:08 +0200Psybur(~Psybur@mobile-166-170-32-197.mycingular.net) (Remote host closed the connection)
2021-09-29 03:07:17 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 03:07:24 +0200a6a45081-2b83(~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507)
2021-09-29 03:08:03 +0200 <a6a45081-2b83> Hi, I am looking at `memoized_fib = (map fib [0 ..] !!)` So if I call `memoized_fib 10^25` will it allocate/create 10^25 thunks?
2021-09-29 03:08:27 +0200 <a6a45081-2b83> or some other function than fib which does not require computation of all the 10^25-1 thunks?
2021-09-29 03:09:16 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-29 03:10:47 +0200 <monochrom> Yes. Parse error.
2021-09-29 03:13:26 +0200Robin_Jadoul(~Robin_Jad@152.67.64.160) (Ping timeout: 245 seconds)
2021-09-29 03:13:40 +0200 <seydar> monochrom: yep, apparently network doesn't come with GHC anymore. do you know why that change was made?
2021-09-29 03:14:18 +0200 <monochrom> I don't know.
2021-09-29 03:15:13 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-29 03:17:07 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-29 03:17:07 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer)
2021-09-29 03:17:55 +0200 <Axman6> a6a45081-2b83: I don't think that will effectively memoise anything
2021-09-29 03:19:13 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 03:20:19 +0200 <Axman6> if you had: fibs = map fib [0..]; memoise_fibs = (fibs !!) it would. and you would actually take advantage of that memoisation if you defined fib n = memoise_fibs (n-1) + memoise_fibs (n-2) (with appropriate handling of fib 0 and fib 1)
2021-09-29 03:20:33 +0200 <geekosaur> seydar, ghc ships with the minimum needed to build ghc, not with a "batteries included" ecosystem
2021-09-29 03:20:50 +0200xff0x(~xff0x@2001:1a81:534d:3900:7ca7:1f1d:7921:2152) (Ping timeout: 246 seconds)
2021-09-29 03:21:26 +0200 <geekosaur> back in the day it included more of an ecosystem, but that became unsupportable because it meant e.g. network could only be safely upgraded with a ghc upgrade
2021-09-29 03:22:14 +0200 <a6a45081-2b83> Axman6: that sounds bad if I have sparse calls, say only 1000 values in range of 0 to 10^25. Might be better to use a hashmap or something
2021-09-29 03:22:34 +0200MQ-17J(~MQ-17J@8.6.144.233)
2021-09-29 03:22:44 +0200xff0x(~xff0x@2001:1a81:5386:1100:54f2:236a:7bb5:55bf)
2021-09-29 03:22:52 +0200 <a6a45081-2b83> Also, I looked at fix and memoFix from haskellWiki but still confused if that can help if I have a function like `go :: Int128 -> [Int128] -> Int` ...
2021-09-29 03:22:53 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
2021-09-29 03:23:23 +0200 <Axman6> yeah it's a memory-time trade off, if memory is more valuable (and at 10^25 it probably is) then using the "linear" algorithm to compute fibs is probably worthwhile and using a map or something
2021-09-29 03:31:12 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 03:33:51 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-09-29 03:36:16 +0200 <seydar> geekosaur: oh interesting, that makes perfect sense
2021-09-29 03:40:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds)
2021-09-29 03:41:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 03:41:03 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 03:41:03 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 03:42:11 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Ping timeout: 246 seconds)
2021-09-29 03:44:16 +0200 <seydar> okay, so now i'm unable to see `iNADDR_ANY` or `send` from the Network.Socket package. It can see all the other parts (I'm implementing https://wiki.haskell.org/Implement_a_chat_server#Simple_socket_server)
2021-09-29 03:45:55 +0200 <Axman6> it's worth noting that that page was last edited in 2019 and it's likely there's a fair amount that's out of date - you might try loading Network.Socket into GHCi and :browse'ing it to see what is actually there and if it still amtches
2021-09-29 03:46:02 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 246 seconds)
2021-09-29 03:46:08 +0200 <Axman6> matches*
2021-09-29 03:47:05 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-11dd-67ac-2a26-67df.res6.spectrum.com)
2021-09-29 03:47:05 +0200 <geekosaur> network has been pretty much rewritten since then, I think.
2021-09-29 03:48:06 +0200 <geekosaur> in fact I think you want the network-bsd package
2021-09-29 03:48:26 +0200 <glguy> seydar, iNADDR_ANY is old tech. you'd only need network-bsd for some really specific stuff these days
2021-09-29 03:48:52 +0200 <Axman6> And if you're feeling adventurous and find how to fix things, maybe you could update the wiki
2021-09-29 03:50:10 +0200 <glguy> https://hackage.haskell.org/package/network-3.1.2.2/docs/Network-Socket.html has an example at the beginning about how you make make a listening server
2021-09-29 03:50:31 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 245 seconds)
2021-09-29 03:50:34 +0200 <glguy> sending of bytestrings is in Network.Socket.ByteString over here: https://hackage.haskell.org/package/network-3.1.2.2/docs/Network-Socket-ByteString.html#v:send
2021-09-29 03:51:04 +0200yinghua(~yinghua@2800:2121:1400:1db:c8ff:6a08:d6d8:71db) (Quit: Leaving)
2021-09-29 03:54:37 +0200fef(~thedawn@user/thedawn)
2021-09-29 03:54:39 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-09-29 03:55:34 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 03:55:34 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 03:55:34 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 03:56:03 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 03:59:32 +0200alx741(~alx741@186.178.109.237) (Ping timeout: 252 seconds)
2021-09-29 03:59:43 +0200jespada(~jespada@2803:9800:9842:7a62:8558:368:788c:6dc6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2021-09-29 04:00:53 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-09-29 04:04:41 +0200Carro(~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688)
2021-09-29 04:05:28 +0200td_(~td@muedsl-82-207-238-070.citykom.de) (Ping timeout: 252 seconds)
2021-09-29 04:07:02 +0200 <seydar> glguy: thanks! and I see now at the top of the Network.Socket docs, it says to use ByteString for sending
2021-09-29 04:07:29 +0200td_(~td@muedsl-82-207-238-213.citykom.de)
2021-09-29 04:12:25 +0200alx741(~alx741@186.178.109.205)
2021-09-29 04:12:36 +0200MQ-17J(~MQ-17J@8.6.144.233) (Ping timeout: 245 seconds)
2021-09-29 04:23:32 +0200alx741(~alx741@186.178.109.205) (Quit: alx741)
2021-09-29 04:24:00 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Quit: leaving)
2021-09-29 04:28:51 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-11dd-67ac-2a26-67df.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 04:28:51 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com)
2021-09-29 04:30:28 +0200DigitalKiwi(~kiwi@192.241.157.119) (Quit: quite.)
2021-09-29 04:31:15 +0200DigitalKiwi(~kiwi@192.241.157.119)
2021-09-29 04:40:00 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Quit: ERC (IRC client for Emacs 28.0.50))
2021-09-29 04:49:01 +0200Carro(~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed)
2021-09-29 04:51:54 +0200segfaultfizzbuzz(~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds)
2021-09-29 04:56:46 +0200pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 260 seconds)
2021-09-29 04:59:15 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 05:01:59 +0200pooryorick(~pooryoric@87-119-174-173.tll.elisa.ee)
2021-09-29 05:02:36 +0200Carro(~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688)
2021-09-29 05:03:41 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 264 seconds)
2021-09-29 05:04:17 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-09-29 05:05:29 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-09-29 05:16:45 +0200zebrag(~chris@user/zebrag) (Remote host closed the connection)
2021-09-29 05:18:11 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
2021-09-29 05:29:36 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-09-29 05:35:31 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
2021-09-29 05:35:47 +0200agoraphobic_(~agoraphob@ip11-173.bon.riksnet.se) (Ping timeout: 252 seconds)
2021-09-29 05:36:18 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 05:37:18 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 05:38:06 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-09-29 05:42:38 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2021-09-29 05:42:57 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-09-29 05:46:57 +0200fvr(uid503686@id-503686.uxbridge.irccloud.com)
2021-09-29 05:47:40 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 05:51:01 +0200agoraphobic(~agoraphob@ip11-173.bon.riksnet.se)
2021-09-29 05:52:32 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-29 06:05:52 +0200pzuidhoek(~textual@82-95-239-200.ip.xs4all.nl)
2021-09-29 06:10:37 +0200pzuidhoek(~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-29 06:11:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-29 06:14:50 +0200vysn(~vysn@user/vysn)
2021-09-29 06:15:24 +0200Guest20(~textual@82-95-239-200.ip.xs4all.nl)
2021-09-29 06:19:00 +0200Guest20(~textual@82-95-239-200.ip.xs4all.nl) (Client Quit)
2021-09-29 06:19:36 +0200Guest20(~textual@82-95-239-200.ip.xs4all.nl)
2021-09-29 06:21:16 +0200Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2021-09-29 06:23:39 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-09-29 06:24:43 +0200zaquest(~notzaques@5.128.210.178)
2021-09-29 06:26:41 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 246 seconds)
2021-09-29 06:31:39 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-09-29 06:35:57 +0200slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2021-09-29 06:38:33 +0200Carro(~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed)
2021-09-29 06:42:36 +0200oxide(~lambda@user/oxide)
2021-09-29 06:44:40 +0200Guest20(~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-29 06:56:18 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 06:58:01 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
2021-09-29 06:59:59 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 07:00:24 +0200fef(~thedawn@user/thedawn) (Quit: Leaving)
2021-09-29 07:00:31 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-09-29 07:00:33 +0200iridium__(~iridium@223.235.192.51)
2021-09-29 07:04:50 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 246 seconds)
2021-09-29 07:16:38 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-29 07:17:50 +0200MidAutumnMoon(~MidAutumn@user/midautumnmoon)
2021-09-29 07:22:58 +0200Andrew_(~andrew@user/andrewyu)
2021-09-29 07:23:35 +0200AndrewYu(~andrew@user/andrewyu) (Ping timeout: 252 seconds)
2021-09-29 07:27:07 +0200mei(~mei@user/mei)
2021-09-29 07:38:05 +0200sndr(~sander@user/sander)
2021-09-29 07:38:26 +0200sander(~sander@user/sander) (Ping timeout: 252 seconds)
2021-09-29 07:38:48 +0200sndrsander
2021-09-29 07:46:07 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-09-29 07:56:40 +0200fvr(uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-29 07:59:30 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-29 08:00:09 +0200vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2021-09-29 08:00:13 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-29 08:01:26 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 08:05:59 +0200ub(~Thunderbi@178.115.72.201.wireless.dyn.drei.com)
2021-09-29 08:07:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 08:10:19 +0200a6a45081-2b83(~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection)
2021-09-29 08:11:22 +0200michalz(~michalz@185.246.204.33)
2021-09-29 08:13:20 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2021-09-29 08:19:27 +0200emf(~emf@2620:10d:c090:400::5:8ff1)
2021-09-29 08:19:41 +0200img(~img@user/img)
2021-09-29 08:26:14 +0200emf(~emf@2620:10d:c090:400::5:8ff1) (Quit: emf)
2021-09-29 08:26:32 +0200emf(~emf@2620:10d:c090:400::5:8ff1)
2021-09-29 08:29:20 +0200qbt(~edun@user/edun)
2021-09-29 08:32:47 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 08:37:14 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 246 seconds)
2021-09-29 08:37:22 +0200 <Axman6> Could you use pattern synonyms to make a pattern like foo (PrefixedBy "Hello" rest), that would be the same as 'H':'e':'l':'l':'o':rest?
2021-09-29 08:40:40 +0200 <c_wraith> Should be able to.
2021-09-29 08:40:47 +0200 <c_wraith> :t stripPrefix
2021-09-29 08:40:48 +0200 <lambdabot> Eq a => [a] -> [a] -> Maybe [a]
2021-09-29 08:41:14 +0200 <c_wraith> Should just be a view pattern involving that
2021-09-29 08:41:47 +0200 <c_wraith> and if you want it to be bidirectional, it's ++ in the other direction
2021-09-29 08:41:58 +0200JeSCaLis23-F(~rizon@188.119.22.153)
2021-09-29 08:42:08 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds)
2021-09-29 08:43:05 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-09-29 08:43:23 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2021-09-29 08:46:04 +0200JeSCaLis23-F(~rizon@188.119.22.153) (Client Quit)
2021-09-29 08:47:51 +0200phma(~phma@host-67-44-208-197.hnremote.net) (Read error: Connection reset by peer)
2021-09-29 08:48:34 +0200phma(~phma@host-67-44-208-52.hnremote.net)
2021-09-29 08:50:02 +0200 <iridium__> is there a way to change the "override" the show method for lists?
2021-09-29 08:50:10 +0200 <iridium__> s/change the//
2021-09-29 08:50:35 +0200 <c_wraith> Nope. Your options are using a different type or using a different function
2021-09-29 08:52:17 +0200 <iridium__> c_wraith: ok. thanks.
2021-09-29 08:57:07 +0200cfricke(~cfricke@user/cfricke)
2021-09-29 09:01:36 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-09-29 09:05:56 +0200emf(~emf@2620:10d:c090:400::5:8ff1) (Ping timeout: 245 seconds)
2021-09-29 09:08:48 +0200 <Axman6> @hoogle concapMapM
2021-09-29 09:08:48 +0200 <lambdabot> No results found
2021-09-29 09:09:03 +0200gehmehgeh(~user@user/gehmehgeh)
2021-09-29 09:09:19 +0200 <c_wraith> Axman6: guess not. Looks like you can't use pattern arguments as inputs in pattern matches - they're outputs only
2021-09-29 09:09:27 +0200 <Axman6> c_wraith: hmm, interesting. Mostly just a thought, but one day I reckon I might have a use for that
2021-09-29 09:09:38 +0200 <Axman6> hmm, ok
2021-09-29 09:09:47 +0200 <c_wraith> Axman6: I *almost* got there with DataKinds
2021-09-29 09:10:02 +0200chele(~chele@user/chele)
2021-09-29 09:10:02 +0200 <c_wraith> But it turns out to be... uh..
2021-09-29 09:10:20 +0200 <c_wraith> error: Type applications in patterns are not yet supported
2021-09-29 09:10:40 +0200 <c_wraith> And without that... Can't quite work.
2021-09-29 09:11:43 +0200 <c_wraith> Hmm. Maybe a different strategy can work.
2021-09-29 09:16:25 +0200notzmv(~zmv@user/notzmv)
2021-09-29 09:17:30 +0200 <c_wraith> Hmm, the other thing I wanted to try also doesn't work. It feels like something should, I just haven't put it together.
2021-09-29 09:17:34 +0200nehsou^(~nehsou@68.101.50.106) (Remote host closed the connection)
2021-09-29 09:20:27 +0200 <Axman6> Can pattern synonyms be recursive? =)
2021-09-29 09:21:46 +0200xff0x(~xff0x@2001:1a81:5386:1100:54f2:236a:7bb5:55bf) (Ping timeout: 245 seconds)
2021-09-29 09:22:54 +0200xff0x(~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f)
2021-09-29 09:23:07 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 09:24:52 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:6beb:5bcb:e1d4:764)
2021-09-29 09:26:08 +0200rtjure(~rtjure@bras-79-132-17-74.comnet.bg)
2021-09-29 09:26:35 +0200ub(~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 246 seconds)
2021-09-29 09:28:29 +0200emf(~emf@2620:10d:c090:400::5:8ff1)
2021-09-29 09:28:46 +0200nrl^(~nrl@68.101.50.106)
2021-09-29 09:35:58 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 09:40:53 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 264 seconds)
2021-09-29 09:42:09 +0200 <c_wraith> Axman6: here. You can think of this as either performance art or a joke: https://paste.tomsmeding.com/KmOT6PZy
2021-09-29 09:45:31 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 09:56:52 +0200acidjnk_new3(~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de)
2021-09-29 09:56:54 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-09-29 09:59:02 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 265 seconds)
2021-09-29 09:59:36 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2021-09-29 09:59:38 +0200emf(~emf@2620:10d:c090:400::5:8ff1) (Ping timeout: 260 seconds)
2021-09-29 10:00:05 +0200 <Axman6> =| amazing, but what did it cost?
2021-09-29 10:00:11 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 10:00:13 +0200iridium__(~iridium@223.235.192.51) ()
2021-09-29 10:00:46 +0200dyeplexer(~dyeplexer@user/dyeplexer)
2021-09-29 10:02:23 +0200fvr(uid503686@id-503686.uxbridge.irccloud.com)
2021-09-29 10:03:10 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-09-29 10:05:20 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-09-29 10:05:50 +0200acidjnk_new(~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de)
2021-09-29 10:05:55 +0200hendursa1(~weechat@user/hendursaga)
2021-09-29 10:08:17 +0200 <c_wraith> only sanity
2021-09-29 10:08:54 +0200hendursaga(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-09-29 10:09:14 +0200acidjnk_new3(~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2021-09-29 10:12:16 +0200NinjaTrappeur(~ninja@user/ninjatrappeur) (Quit: WeeChat 3.1)
2021-09-29 10:13:07 +0200NinjaTrappeur(~ninja@user/ninjatrappeur)
2021-09-29 10:16:28 +0200gehmehgeh(~user@user/gehmehgeh)
2021-09-29 10:16:36 +0200Heisen(~Heisen@77.240.67.20)
2021-09-29 10:17:10 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-29 10:17:33 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-29 10:18:54 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-29 10:21:42 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-09-29 10:22:17 +0200siraben(~siraben@user/siraben) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200Arathorn(~arathorn@2001:470:69fc:105::1f) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200kadoban(~kadoban@user/kadoban) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200peddie(~peddie@2001:470:69fc:105::25d) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200psydroid(~psydroid@user/psydroid) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:17 +0200Las[m](~lasmatrix@2001:470:69fc:105::74e) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200SimonWeiss[m](~weiss-dma@2001:470:69fc:105::bebd) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200fgaz(~fgaz@2001:470:69fc:105::842) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200jophish(~jophish@2001:470:69fc:105::670) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200vaibhavsagar[m](~vaibhavsa@2001:470:69fc:105::ffe) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200maralorn(~maralorn@2001:470:69fc:105::251) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200kar1(~kar1@2001:470:69fc:105::c308) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200PotatoHatsue(~berberman@2001:470:69fc:105::b488) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200ericson2314(~ericson23@2001:470:69fc:105::70c) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200zfnmxt(~zfnmxtzfn@user/zfnmxt) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200carmysilna(~brightly-@2001:470:69fc:105::2190) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200hsiktas[m](~hsiktasma@2001:470:69fc:105::30d4) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200amesgen[m](~amesgenm]@2001:470:69fc:105::82b) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200Ollie[m](~ollieocha@2001:470:69fc:105::41a5) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200SawyerBergeron[m(~sawyerber@2001:470:69fc:105::3036) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200moats(~oats@user/oats) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200aidy(~aidy@2001:470:69fc:105::c7b4) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200schuelermine[m](~schuelerm@user/schuelermine) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200bitonic(~bitonic@2001:470:69fc:105::1812) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200soft(~soft-matr@2001:470:69fc:105::c75) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200oak-(~oakuniver@2001:470:69fc:105::fcd) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200bakinonion[m](~bakinonio@2001:470:69fc:105::ddb3) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200erinvanderveen[m(~erinvande@2001:470:69fc:105::e8f3) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200zwro[m](~zwromatri@2001:470:69fc:105::1d4) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:18 +0200jchia[m](~jchiamatr@2001:470:69fc:105::c50b) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200Magnus[m](~magthetch@2001:470:69fc:105::d1a7) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200wysteriary[m](~wysteriar@2001:470:69fc:105::a42e) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200Topik[m](~topikmatr@2001:470:69fc:105::a082) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200cloudy(~cloudy@2001:470:69fc:105::50c0) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200srid[m](~sridmatri@2001:470:69fc:105::1c2) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200dualinverter[m](~dualinver@2001:470:69fc:105::16a7) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200hjulle[m](~hjullemat@2001:470:69fc:105::1dd) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:19 +0200unclechu(~unclechu@2001:470:69fc:105::354) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:20 +0200reza[m](~rezaphone@2001:470:69fc:105::3eda) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:21 +0200fcortesi(~fcortesi@2001:470:69fc:105::f3a9) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:24 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:24 +0200commuswift[m](~commuswif@2001:470:69fc:105::e862) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:26 +0200jesser[m](~jessermat@2001:470:69fc:105::d5ae) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:26 +0200stoicswe[m](~deadlette@2001:470:69fc:105::d277) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:27 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200craige[m](~craigemcw@2001:470:69fc:105::35f1) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200ixlun(~ixlun@2001:470:69fc:105::41b3) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200jakefromstatefar(~jakefroms@2001:470:69fc:105::15ef) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200unrooted(~unrooted@2001:470:69fc:105::a4a) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200asdofindia-m(~akshaymat@2001:470:69fc:105::831) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200dexmad[m](~dexmadmat@2001:470:69fc:105::e056) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200ongy[m](~ongymatri@2001:470:69fc:105::5018) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200fendor[m](~fendormat@2001:470:69fc:105::fcbd) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:28 +0200hsek[m](~hsekmatri@2001:470:69fc:105::d18f) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200jneira[m](~jneiramat@2001:470:69fc:105::d729) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200infinisil(~infinisil@2001:470:69fc:105::ff8) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200Tisoxin(~ikosit@user/ikosit) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200cdsmith(~cdsmithma@2001:470:69fc:105::284) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200ormaaj(~ormaaj@user/ormaaj) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:29 +0200rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200ServerStatsDisco(~serversta@2001:470:69fc:105::1a) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200sm(~sm@plaintextaccounting/sm) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200lwe[m](~dendrumat@2001:470:69fc:105::2f9b) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200Drew[m](~drewefenw@2001:470:69fc:105::c8c4) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:30 +0200IgnatInsarov[m](~kindaroma@2001:470:69fc:105::f5d9) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200ru0mad[m](~ru0madmat@2001:470:69fc:105::9b2) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200OndejSkup[m](~mimivxmat@2001:470:69fc:105::c300) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200bb010g(~bb010g@2001:470:69fc:105::9a5) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200denbrahe[m](~denbrahem@2001:470:69fc:105::19c0) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200Deewiant(~deewiant@2001:470:69fc:105::2fd3) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:32 +0200sky_lounge[m](~skylounge@2001:470:69fc:105::efa6) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200quantum(~quantum@user/quantum/x-8556232) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200monadfritz[m](~ahdytmatr@2001:470:69fc:105::e1f1) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200kevin[m]1(~pnotequal@2001:470:69fc:105::a54) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200reddishblue[m](~reddishbl@2001:470:69fc:105::21eb) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200justosophy[m](~justosoph@2001:470:69fc:105::572f) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200sam[m]1(~sammtopoi@2001:470:69fc:105::e887) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200the-coot[m](~the-cootm@2001:470:69fc:105::95f) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200Deide(~deide@user/deide) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:33 +0200rosariopulella[m(~rosariopu@2001:470:69fc:105::a57) (Quit: Bridge terminating on SIGTERM)
2021-09-29 10:22:41 +0200acidjnk_new3(~acidjnk@pd9e0b933.dip0.t-ipconnect.de)
2021-09-29 10:23:28 +0200 <Heisen> Hello, I am trying to print out each element in my list with the same principles as I did with my for loop however I don't get it to work, could someone give me a helping hand?:] https://paste.tomsmeding.com/p0LlFz2c
2021-09-29 10:24:46 +0200 <c_wraith> you're testing to see if the tail of the list is empty
2021-09-29 10:25:25 +0200 <c_wraith> Though more initially problematic, the type you provided doesn't match the type it has
2021-09-29 10:25:42 +0200acidjnk_new(~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2021-09-29 10:25:44 +0200jakefromstatefar(~jakefroms@2001:470:69fc:105::15ef)
2021-09-29 10:26:45 +0200 <Heisen> oh wow, thank yo
2021-09-29 10:26:48 +0200 <Heisen> -u
2021-09-29 10:26:59 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee)
2021-09-29 10:27:11 +0200jchia[m](~jchiamatr@2001:470:69fc:105::c50b)
2021-09-29 10:27:11 +0200MatrixTravelerbo(~voyagert2@2001:470:69fc:105::22)
2021-09-29 10:27:23 +0200dualinverter[m](~dualinver@2001:470:69fc:105::16a7)
2021-09-29 10:27:23 +0200fgaz(~fgaz@2001:470:69fc:105::842)
2021-09-29 10:27:23 +0200peddie(~peddie@2001:470:69fc:105::25d)
2021-09-29 10:27:23 +0200cdsmith(~cdsmithma@2001:470:69fc:105::284)
2021-09-29 10:27:23 +0200Morrow[m](~morrowmma@2001:470:69fc:105::1d0)
2021-09-29 10:27:35 +0200thomasjm[m](~thomasjmm@2001:470:69fc:105::c6d9)
2021-09-29 10:27:35 +0200hsek[m](~hsekmatri@2001:470:69fc:105::d18f)
2021-09-29 10:27:35 +0200ru0mad[m](~ru0madmat@2001:470:69fc:105::9b2)
2021-09-29 10:27:50 +0200bb010g(~bb010g@2001:470:69fc:105::9a5)
2021-09-29 10:27:50 +0200vaibhavsagar[m](~vaibhavsa@2001:470:69fc:105::ffe)
2021-09-29 10:27:50 +0200Las[m](~lasmatrix@2001:470:69fc:105::74e)
2021-09-29 10:27:50 +0200ServerStatsDisco(~serversta@2001:470:69fc:105::1a)
2021-09-29 10:27:50 +0200amesgen[m](~amesgenm]@2001:470:69fc:105::82b)
2021-09-29 10:27:50 +0200the-coot[m](~the-cootm@2001:470:69fc:105::95f)
2021-09-29 10:27:50 +0200moats(~oats@user/oats)
2021-09-29 10:28:02 +0200soft(~soft-matr@2001:470:69fc:105::c75)
2021-09-29 10:28:02 +0200zfnmxt(~zfnmxtzfn@2001:470:69fc:105::2b32)
2021-09-29 10:28:16 +0200oak-(~oakuniver@2001:470:69fc:105::fcd)
2021-09-29 10:28:16 +0200kadoban(~kadoban@user/kadoban)
2021-09-29 10:28:16 +0200bitonic(~bitonic@2001:470:69fc:105::1812)
2021-09-29 10:28:16 +0200ericson2314(~ericson23@2001:470:69fc:105::70c)
2021-09-29 10:28:17 +0200jophish(~jophish@2001:470:69fc:105::670)
2021-09-29 10:28:17 +0200Arathorn(~arathorn@2001:470:69fc:105::1f)
2021-09-29 10:28:17 +0200Ollie[m](~ollieocha@2001:470:69fc:105::41a5)
2021-09-29 10:28:17 +0200PotatoHatsue(~berberman@2001:470:69fc:105::b488)
2021-09-29 10:28:17 +0200ixlun(~ixlun@2001:470:69fc:105::41b3)
2021-09-29 10:28:17 +0200unclechu(~unclechu@2001:470:69fc:105::354)
2021-09-29 10:28:31 +0200Deewiant(~deewiant@2001:470:69fc:105::2fd3)
2021-09-29 10:28:31 +0200unrooted(~unrooted@2001:470:69fc:105::a4a)
2021-09-29 10:28:31 +0200rednaZ[m](~r3dnazmat@2001:470:69fc:105::ba70)
2021-09-29 10:28:31 +0200maralorn(~maralorn@2001:470:69fc:105::251)
2021-09-29 10:28:32 +0200SimonWeiss[m](~weiss-dma@2001:470:69fc:105::bebd)
2021-09-29 10:28:32 +0200denbrahe[m](~denbrahem@2001:470:69fc:105::19c0)
2021-09-29 10:28:32 +0200lwe[m](~dendrumat@2001:470:69fc:105::2f9b)
2021-09-29 10:28:44 +0200jesser[m](~jessermat@2001:470:69fc:105::d5ae)
2021-09-29 10:28:59 +0200erinvanderveen[m(~erinvande@2001:470:69fc:105::e8f3)
2021-09-29 10:29:20 +0200reza[m](~rezaphone@2001:470:69fc:105::3eda)
2021-09-29 10:29:20 +0200quantum(~quantum@user/quantum/x-8556232)
2021-09-29 10:29:20 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2021-09-29 10:29:20 +0200hsiktas[m](~hsiktasma@2001:470:69fc:105::30d4)
2021-09-29 10:29:33 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56)
2021-09-29 10:29:45 +0200craige[m](~craigemcw@2001:470:69fc:105::35f1)
2021-09-29 10:29:57 +0200afotgkmnzj7asv3r(~afotgkmnz@2001:470:69fc:105::c24b)
2021-09-29 10:29:58 +0200schuelermine[m](~schuelerm@user/schuelermine)
2021-09-29 10:29:58 +0200sm(~sm@plaintextaccounting/sm)
2021-09-29 10:29:59 +0200reddishblue[m](~reddishbl@2001:470:69fc:105::21eb)
2021-09-29 10:30:11 +0200justosophy[m](~justosoph@2001:470:69fc:105::572f)
2021-09-29 10:30:11 +0200kevin[m]1(~pnotequal@2001:470:69fc:105::a54)
2021-09-29 10:30:11 +0200Deide(~deide@user/deide)
2021-09-29 10:30:23 +0200fakehacker[m](~fakehacke@2001:470:69fc:105::b5f0)
2021-09-29 10:30:23 +0200hughjfchen[m](~hughjfche@2001:470:69fc:105::c29d)
2021-09-29 10:30:35 +0200IgnatInsarov[m](~kindaroma@2001:470:69fc:105::f5d9)
2021-09-29 10:30:35 +0200srid[m](~sridmatri@2001:470:69fc:105::1c2)
2021-09-29 10:30:35 +0200psydroid(~psydroid@user/psydroid)
2021-09-29 10:30:47 +0200wysteriary[m](~wysteriar@2001:470:69fc:105::a42e)
2021-09-29 10:30:47 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8)
2021-09-29 10:30:47 +0200zwro[m](~zwromatri@2001:470:69fc:105::1d4)
2021-09-29 10:30:59 +0200stoicswe[m](~deadlette@2001:470:69fc:105::d277)
2021-09-29 10:31:11 +0200sam[m]1(~sammtopoi@2001:470:69fc:105::e887)
2021-09-29 10:31:23 +0200Topik[m](~topikmatr@2001:470:69fc:105::a082)
2021-09-29 10:31:23 +0200OndejSkup[m](~mimivxmat@2001:470:69fc:105::c300)
2021-09-29 10:31:23 +0200kar1(~kar1@2001:470:69fc:105::c308)
2021-09-29 10:31:23 +0200ongy[m](~ongymatri@2001:470:69fc:105::5018)
2021-09-29 10:31:23 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c)
2021-09-29 10:31:23 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2021-09-29 10:31:23 +0200asdofindia-m(~akshaymat@2001:470:69fc:105::831)
2021-09-29 10:31:23 +0200ormaaj(~ormaaj@user/ormaaj)
2021-09-29 10:31:23 +0200hjulle[m](~hjullemat@2001:470:69fc:105::1dd)
2021-09-29 10:31:37 +0200infinisil(~infinisil@2001:470:69fc:105::ff8)
2021-09-29 10:31:37 +0200Drew[m](~drewefenw@2001:470:69fc:105::c8c4)
2021-09-29 10:31:37 +0200jneira[m](~jneiramat@2001:470:69fc:105::d729)
2021-09-29 10:31:37 +0200Magnus[m](~magthetch@2001:470:69fc:105::d1a7)
2021-09-29 10:31:37 +0200siraben(~siraben@user/siraben)
2021-09-29 10:31:49 +0200dexmad[m](~dexmadmat@2001:470:69fc:105::e056)
2021-09-29 10:31:49 +0200smichel17[m](~smichel17@2001:470:69fc:105::2d32)
2021-09-29 10:31:50 +0200SawyerBergeron[m(~sawyerber@2001:470:69fc:105::3036)
2021-09-29 10:32:02 +0200sky_lounge[m](~skylounge@2001:470:69fc:105::efa6)
2021-09-29 10:32:02 +0200Tisoxin(~ikosit@user/ikosit)
2021-09-29 10:32:14 +0200monadfritz[m](~ahdytmatr@2001:470:69fc:105::e1f1)
2021-09-29 10:32:14 +0200bakinonion[m](~bakinonio@2001:470:69fc:105::ddb3)
2021-09-29 10:32:26 +0200rosariopulella[m(~rosariopu@2001:470:69fc:105::a57)
2021-09-29 10:32:28 +0200fcortesi(~fcortesi@2001:470:69fc:105::f3a9)
2021-09-29 10:32:28 +0200ManofLetters[m](~manoflett@2001:470:69fc:105::3be)
2021-09-29 10:32:28 +0200cloudy(~cloudy@2001:470:69fc:105::50c0)
2021-09-29 10:32:40 +0200commuswift[m](~commuswif@2001:470:69fc:105::e862)
2021-09-29 10:32:40 +0200carmysilna(~brightly-@2001:470:69fc:105::2190)
2021-09-29 10:32:40 +0200fendor[m](~fendormat@2001:470:69fc:105::fcbd)
2021-09-29 10:32:40 +0200aidy(~aidy@2001:470:69fc:105::c7b4)
2021-09-29 10:32:40 +0200shiraeeshi[m](~shiraeesh@2001:470:69fc:105::1:77)
2021-09-29 10:33:56 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
2021-09-29 10:41:15 +0200zincy_(~tom@2a00:23c8:970c:4801:e07c:c539:ea16:90d3)
2021-09-29 10:41:34 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2021-09-29 10:43:21 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 276 seconds)
2021-09-29 10:44:01 +0200 <zincy_> What is the correct data structure to use if you have 2 grids of alphabetical chars and you want to flip and shift one of them - essentially creating a caeser cipher but with a grid instead of a list
2021-09-29 10:44:36 +0200 <kuribas> zincy_: list of lists?
2021-09-29 10:45:21 +0200 <zincy_> Yeah
2021-09-29 10:45:25 +0200 <Rembane> Data.Map! :D
2021-09-29 10:46:16 +0200 <zincy_> Rembane: How then do you do a transformation on say the x rows of the grid?
2021-09-29 10:46:43 +0200 <zincy_> [1,2][3,4]] -> [1,2][4,3]]
2021-09-29 10:47:04 +0200 <zincy_> i.e map doesnt know about position
2021-09-29 10:47:08 +0200 <Rembane> zincy_: One cell at the time. :: Data.Map (Int, Int) Int
2021-09-29 10:47:40 +0200 <Rembane> But it seems like you have a dense matrix, so a list of lists or vector of vectors are probably better.
2021-09-29 10:48:46 +0200 <zincy_> Rembane: Out of curiosity what do the keys and value types denote
2021-09-29 10:48:51 +0200 <zincy_> in your type sig
2021-09-29 10:48:52 +0200 <dminuoso> vector of vectors is always good :)
2021-09-29 10:48:58 +0200 <zincy_> Yeah
2021-09-29 10:49:34 +0200 <pavonia> Why not an MArray instead, which might be easier to handle for random access?
2021-09-29 10:49:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
2021-09-29 10:50:54 +0200 <zincy_> pavonia: You mean nicer interface for random access?
2021-09-29 10:51:11 +0200 <zincy_> Interesting never heard of MArray before
2021-09-29 10:51:14 +0200 <pavonia> Also faster than Map, I guess
2021-09-29 10:51:47 +0200 <dminuoso> pavonia: It's a French commune.
2021-09-29 10:51:51 +0200 <dminuoso> Err, zincy_!
2021-09-29 10:52:54 +0200 <Heisen> Is using head and tail always bad even though I know that the list isn't empty? Also why doesn't my second solution work? https://paste.tomsmeding.com/YvFHcd6N
2021-09-29 10:52:58 +0200 <zincy_> dminuso: Is that surprise you are feeling?
2021-09-29 10:53:09 +0200 <kuribas> Heisen: yes
2021-09-29 10:53:18 +0200 <kuribas> Heisen: if you know it isn't empty, you can pattern match.
2021-09-29 10:53:38 +0200 <Heisen> How would I go about pattern matching there?
2021-09-29 10:53:39 +0200 <dminuoso> And since you're in IO, you can also simply use exitFailure or throw an exception in case the list is, unexpectedly, empty
2021-09-29 10:53:44 +0200 <dminuoso> printList (x:xs) = ...
2021-09-29 10:53:47 +0200 <dminuoso> printList [] = ...
2021-09-29 10:53:52 +0200 <kuribas> Heisen: don't write "if length l > 0"
2021-09-29 10:54:11 +0200 <kuribas> Heisen: instead, write: case l of [] -> ...; x:xs -> ...
2021-09-29 10:54:46 +0200 <kuribas> Heisen: or better: printList [] = ...; printList (x:xs) = ...
2021-09-29 10:57:57 +0200dminuosoalways starts with the more likely condition first
2021-09-29 10:58:19 +0200 <dminuoso> Just a very cheap force of habit that avoids unnecessary pattern matches in the general case. :)
2021-09-29 10:58:35 +0200azeem(~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer)
2021-09-29 10:59:37 +0200azeem(~azeem@emp-180-222.eduroam.uu.se)
2021-09-29 11:00:01 +0200 <kuribas> ghc will warn about those, no?
2021-09-29 11:00:57 +0200 <Heisen> This is good? =) https://paste.tomsmeding.com/whUMkJ6j
2021-09-29 11:01:06 +0200 <Heisen> Also thank you for your time
2021-09-29 11:01:39 +0200 <kuribas> Heisen: better, but I prefer matching in the function declaration.
2021-09-29 11:04:30 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 11:06:52 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
2021-09-29 11:18:08 +0200arpl(~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl)
2021-09-29 11:26:41 +0200nfd(~nfd@user/nfd)
2021-09-29 11:27:04 +0200norskalm(~norskalm@101.175.64.73)
2021-09-29 11:29:53 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-09-29 11:30:56 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 11:32:57 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi)
2021-09-29 11:34:29 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 11:34:50 +0200arpl(~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
2021-09-29 11:35:29 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-09-29 11:35:36 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-29 11:36:55 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 11:38:42 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 11:39:41 +0200tinwood(~tinwood@canonical/tinwood) (Remote host closed the connection)
2021-09-29 11:40:15 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com)
2021-09-29 11:40:33 +0200Guest557(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-29 11:41:32 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2021-09-29 11:42:11 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 11:42:39 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io)
2021-09-29 11:42:39 +0200tinwood(~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host)
2021-09-29 11:42:39 +0200tinwood(~tinwood@canonical/tinwood)
2021-09-29 11:45:30 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 11:46:16 +0200Heisen(~Heisen@77.240.67.20) (Quit: Client closed)
2021-09-29 11:48:16 +0200spruit11(~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5) (Ping timeout: 265 seconds)
2021-09-29 11:49:41 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 11:51:05 +0200rtjure(~rtjure@bras-79-132-17-74.comnet.bg) (Ping timeout: 264 seconds)
2021-09-29 11:52:32 +0200xff0x(~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 246 seconds)
2021-09-29 11:53:11 +0200iridium__(~iridium@223.235.192.51)
2021-09-29 11:54:37 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-29 11:57:43 +0200iridium__(~iridium@223.235.192.51) (Quit: leaving)
2021-09-29 11:57:47 +0200spruit11(~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5)
2021-09-29 12:01:13 +0200phma(~phma@host-67-44-208-52.hnremote.net) (Read error: Connection reset by peer)
2021-09-29 12:01:52 +0200phma(~phma@host-67-44-208-25.hnremote.net)
2021-09-29 12:03:43 +0200xff0x(~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f)
2021-09-29 12:08:26 +0200azeem(~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer)
2021-09-29 12:08:43 +0200azeem(~azeem@emp-180-222.eduroam.uu.se)
2021-09-29 12:08:53 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 12:10:42 +0200azeem(~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer)
2021-09-29 12:11:27 +0200azeem(~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531)
2021-09-29 12:13:00 +0200arpl(~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl)
2021-09-29 12:13:01 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-09-29 12:13:11 +0200Heisen(~Heisen@77.240.67.20)
2021-09-29 12:15:00 +0200 <Heisen> When I type for example fold in GHCi and then tab, can I somehow choose which one I want with my arrow keys or something?
2021-09-29 12:17:14 +0200img_(~img@user/img)
2021-09-29 12:17:34 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-09-29 12:18:22 +0200img(~img@user/img) (Ping timeout: 250 seconds)
2021-09-29 12:19:10 +0200ubert1(~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
2021-09-29 12:20:31 +0200ubert(~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 245 seconds)
2021-09-29 12:20:31 +0200ubert1ubert
2021-09-29 12:21:18 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-09-29 12:21:20 +0200azeem(~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer)
2021-09-29 12:21:28 +0200cods(~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds)
2021-09-29 12:21:46 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 245 seconds)
2021-09-29 12:23:03 +0200azeem(~azeem@emp-180-222.eduroam.uu.se)
2021-09-29 12:24:50 +0200Heisen(~Heisen@77.240.67.20) (Quit: Client closed)
2021-09-29 12:27:42 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 12:31:31 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 12:32:06 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com)
2021-09-29 12:32:08 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-29 12:32:11 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 12:33:10 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 12:33:37 +0200cods(~fred@82-65-232-44.subs.proxad.net)
2021-09-29 12:34:41 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 12:41:42 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2021-09-29 12:42:03 +0200alzgh(~alzgh@user/alzgh)
2021-09-29 12:43:19 +0200ph88(~ph88@2a02:8109:9e00:7e5c:5435:afc4:e6b4:ce6b)
2021-09-29 12:44:38 +0200arpl(~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
2021-09-29 12:45:34 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 12:46:14 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 12:47:16 +0200 <dminuoso> No.
2021-09-29 12:47:45 +0200 <dminuoso> If you want this type of interactive writing, consider using haskell-language-server.
2021-09-29 12:48:01 +0200 <dminuoso> Since it exposes LSP, it integrates with many editors well.
2021-09-29 12:48:10 +0200 <dminuoso> Most offer some kind of "narrowing"
2021-09-29 12:48:40 +0200hololeap(~hololeap@user/hololeap)
2021-09-29 12:48:55 +0200 <dminuoso> Strictly speaking this could also with just with just say hasktags, but the HLS experience is quite good in general.
2021-09-29 12:50:41 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2021-09-29 12:50:50 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2021-09-29 12:50:52 +0200benin036932301(~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
2021-09-29 12:50:54 +0200iridium__(~iridium@223.235.192.51)
2021-09-29 12:51:46 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 12:53:53 +0200benin036932301(~benin@183.82.176.107) (Client Quit)
2021-09-29 12:54:49 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 12:56:59 +0200benin036932301(~benin@183.82.176.107) (Client Quit)
2021-09-29 12:57:09 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-29 12:58:28 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 12:58:49 +0200iridium__(~iridium@223.235.192.51) (Quit: leaving)
2021-09-29 13:00:04 +0200azeem(~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 252 seconds)
2021-09-29 13:00:54 +0200alx741(~alx741@186.178.109.205)
2021-09-29 13:03:02 +0200azeem(~azeem@emp-180-222.eduroam.uu.se)
2021-09-29 13:06:59 +0200benin036932301(~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
2021-09-29 13:07:53 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 13:08:19 +0200nfd(~nfd@user/nfd) (Ping timeout: 252 seconds)
2021-09-29 13:08:33 +0200Las[m](~lasmatrix@2001:470:69fc:105::74e) (Quit: Reconnecting)
2021-09-29 13:10:26 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:6beb:5bcb:e1d4:764) (Ping timeout: 265 seconds)
2021-09-29 13:10:29 +0200 <arahael> Do we have a library that, for a given dtd, can generate random xmls? (Eg, for testing with quickcheck)?
2021-09-29 13:10:46 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds)
2021-09-29 13:11:09 +0200AlexNoo_(~AlexNoo@178.34.161.150)
2021-09-29 13:11:17 +0200 <sshine> I haven't seen that before.
2021-09-29 13:11:50 +0200 <Cajun> there was a `random-data` package or something like that, but im not sure if it dealt with xml (and i dont know what a dtd is)
2021-09-29 13:12:42 +0200benin036932301(~benin@183.82.176.107) (Client Quit)
2021-09-29 13:12:59 +0200 <sshine> Cajun, a DTD is a document type definition. sort of like JSON Schema, but from the W3C days.
2021-09-29 13:13:16 +0200Alex_test(~al_test@178.34.161.193) (Ping timeout: 252 seconds)
2021-09-29 13:13:24 +0200Soanvig(~Soanvig@80.49.217.249.ipv4.supernova.orange.pl)
2021-09-29 13:13:26 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 245 seconds)
2021-09-29 13:13:34 +0200 <arahael> I'm thinking I'll just write it myself (though by manually interpreting the dtd). This particular one is simple enough.
2021-09-29 13:13:46 +0200 <sshine> Cajun, DTDs are written in SGML, which is a meta-syntax for specifying HTML and XML.
2021-09-29 13:13:49 +0200 <arahael> (Ie, hardcoding it)
2021-09-29 13:13:52 +0200AlexZenon(~alzenon@178.34.161.193) (Ping timeout: 252 seconds)
2021-09-29 13:14:29 +0200AlexNoo(~AlexNoo@178.34.161.193) (Ping timeout: 252 seconds)
2021-09-29 13:15:42 +0200 <Soanvig> Hello guys. I have question about Parsec in that case I cannot really solve by myself. So my application uses Parsec and I want to show Parsec errors to the user. However Parsec heavily relies on `show` to print it's errors (https://hackage.haskell.org/package/parsec-3.1.14.0/docs/src/Text.Parsec.Error.html#showErrorMessa…), and I need normal,
2021-09-29 13:15:43 +0200 <Soanvig> non-escaped String as error message. Any idea how to handle that (except creating error formatter by myself)?
2021-09-29 13:15:44 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-29 13:15:47 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 13:16:26 +0200 <sshine> Cajun, so the <!DOCTYPE ...> part of XML is the DTD header :) and the <!...> tags in general is SGML.
2021-09-29 13:16:55 +0200 <Cajun> interesting, today i learned :)
2021-09-29 13:18:05 +0200 <hpc> you'll wish you didn't learn - it means parsing xml is an impure operation, since the sgml lives behind an http url
2021-09-29 13:18:19 +0200 <hpc> there have been some pretty entertaining CVEs based on that
2021-09-29 13:18:33 +0200 <arahael> Not to mention entity expansion.
2021-09-29 13:18:52 +0200 <sshine> Cajun, do you mean 'generic-random'? (can't find 'random-data')
2021-09-29 13:18:54 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482)
2021-09-29 13:19:25 +0200AlexZenon(~alzenon@178.34.161.150)
2021-09-29 13:19:26 +0200Alex_test(~al_test@178.34.161.150)
2021-09-29 13:19:56 +0200 <Cajun> that wasnt it, ill have to search for it. it used a dataset and generated random names and stuff but it may have also included file formats. didnt read into it beyond the readme
2021-09-29 13:19:59 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-29 13:20:02 +0200cunne(~cunne@user/cunne) (Ping timeout: 246 seconds)
2021-09-29 13:20:17 +0200 <hololeap> is it possible to coerce inside some container `f`, even if it isn't a Functor, specifically a TVar?
2021-09-29 13:20:19 +0200benin036932301(~benin@183.82.176.107) (Client Quit)
2021-09-29 13:21:05 +0200 <hpc> does it need to be generic wrt f?
2021-09-29 13:21:14 +0200 <hpc> the various *Vars have their own modify functions
2021-09-29 13:21:18 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 13:21:40 +0200 <Cajun> `fakedata` and `fakedata-quickcheck` sshine
2021-09-29 13:22:25 +0200 <Cajun> seems its more for data than files sadly
2021-09-29 13:22:38 +0200 <hololeap> newtype FunctorMap map f k a = FunctorMap { getFunctorMap :: map k (f a) }
2021-09-29 13:22:59 +0200 <hololeap> newtype Trie map f k a = Trie { getTrie :: Cofree (FunctorMap map f k) a }
2021-09-29 13:23:16 +0200CiaoSen(~Jura@p200300c9571be1002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2021-09-29 13:23:39 +0200 <hololeap> unwrap :: Trie map f k a -> FunctorMap map f k (Trie map f k a)
2021-09-29 13:23:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 13:24:02 +0200benin036932301(~benin@183.82.176.107) (Client Quit)
2021-09-29 13:24:37 +0200 <hololeap> i need this: FunctorMap map f k (Cofree (FunctorMap map f k) a) -> FunctorMap map f k (Trie map f k a)
2021-09-29 13:25:03 +0200 <hololeap> the Cofree there should be coercable into a Trie
2021-09-29 13:25:14 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 13:25:51 +0200 <hololeap> but if `f` isn't a Functor (in the case of TVar) I stop being able to use `unwrap`
2021-09-29 13:26:40 +0200 <hololeap> if I just `fmap` the Trie constructor into the FunctorMap
2021-09-29 13:28:01 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 13:34:00 +0200 <hololeap> http://sprunge.us/GAC2hR
2021-09-29 13:36:36 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2021-09-29 13:38:55 +0200 <arahael> Oh, I could use a RELAX NG schema instead.
2021-09-29 13:39:09 +0200benin036932301(~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
2021-09-29 13:40:03 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 13:41:03 +0200AlexNoo_AlexNoo
2021-09-29 13:41:05 +0200 <sshine> Cajun, fakedata seems pretty nice. but it seems to generate predefined types, and generally not deeply nested stuff, even though those predefined types compose nicely.
2021-09-29 13:41:31 +0200 <sshine> Cajun, I'll have to remember to use fakedata for something fun soon, or I'll forget it exists. there are too many interesting packages.
2021-09-29 13:42:11 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-29 13:42:28 +0200CiaoSen(~Jura@p200300c9571be1002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-29 13:43:09 +0200CiaoSen(~Jura@p5dcc145a.dip0.t-ipconnect.de)
2021-09-29 13:43:52 +0200 <hololeap> hm, it looks like if I specify `map` as HashMap and `f` as TVar, it works. is there any way to constrain a type variable as "not nominal"?
2021-09-29 13:44:35 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq)
2021-09-29 13:48:02 +0200mestre(~mestre@191.177.175.57) (Quit: Lost terminal)
2021-09-29 13:50:56 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds)
2021-09-29 13:55:04 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2021-09-29 13:59:35 +0200michalz(~michalz@185.246.204.33) (Read error: No route to host)
2021-09-29 14:00:44 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2021-09-29 14:01:21 +0200CiaoSen(~Jura@p5dcc145a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-09-29 14:01:31 +0200 <hololeap> We cannot know what roles the parameters to ‘map k’ have; we must assume that the role is nominal
2021-09-29 14:01:47 +0200benin036932301(~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
2021-09-29 14:01:59 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 14:02:39 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 14:03:22 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-09-29 14:04:16 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
2021-09-29 14:10:13 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 14:10:20 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 14:12:10 +0200Soanvig(~Soanvig@80.49.217.249.ipv4.supernova.orange.pl) (Quit: Client closed)
2021-09-29 14:14:41 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 14:14:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-29 14:16:24 +0200xiongxin(~quassel@119.123.100.167)
2021-09-29 14:28:50 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-29 14:30:49 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-29 14:32:36 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com)
2021-09-29 14:33:26 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 14:34:44 +0200Psybur(~Psybur@mobile-166-170-32-197.mycingular.net)
2021-09-29 14:34:49 +0200hololeap. o (RoleAnnotations ?)
2021-09-29 14:37:28 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2021-09-29 14:38:56 +0200 <xerox> on mac do you have CTRL+arrows and CTRL+A or CTRL+E to move between words, to the beginning of the line, to the end of line work?
2021-09-29 14:40:25 +0200 <geekosaur> hololeap, RoleAnnotations work when declaring types, but not when constraining them
2021-09-29 14:40:36 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 14:40:59 +0200 <geekosaur> you can't say e.g. role t ~ nominal => ...
2021-09-29 14:41:38 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 265 seconds)
2021-09-29 14:42:15 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-29 14:42:29 +0200 <geekosaur> xerox, haskeline should work the same way on all platforms, which is part of why ghci uses it. same with readline or editline (Mac "built-in" line editing)
2021-09-29 14:42:59 +0200 <geekosaur> none of them work with a bare getLine, except within ghci where I think haskeline is always used
2021-09-29 14:43:05 +0200 <xerox> geekosaur: it is extremely broken here
2021-09-29 14:45:06 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 14:47:06 +0200pbrisbin(~patrick@pool-173-49-147-250.phlapa.fios.verizon.net)
2021-09-29 14:47:42 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 14:48:44 +0200 <geekosaur> with getLine in Haskell you will get only very basic line editing (backspace for delete, ^W deletes previous word, ^U deletes back to the beginning of the line; no arrows or other control keys)
2021-09-29 14:49:22 +0200 <geekosaur> you need to explicitly use haskeline or readline to get real line editing
2021-09-29 14:49:54 +0200 <xerox> geekosaur: I'm not trying to make a prompt myself, I'm using ghci
2021-09-29 14:50:50 +0200 <geekosaur> odd. do you have a haskeline config file (https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-haskeline-file) ?
2021-09-29 14:52:06 +0200fvr(uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-29 14:52:11 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-09-29 14:52:33 +0200jespada(~jespada@2803:9800:9842:7a62:9cdc:f08c:7ab8:bd6a)
2021-09-29 14:54:28 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-09-29 14:55:44 +0200 <geekosaur> in particular you might have (perhaps accidentally) switched haskeline to vi emulation mode (I think that works these days?)
2021-09-29 14:56:46 +0200 <geekosaur> in which case it starts out in insert mode and you have to press esc to use commands
2021-09-29 14:57:24 +0200 <xerox> hmm I have ghc 8.10.7 not 9
2021-09-29 14:57:48 +0200 <geekosaur> you might not have noticed previously because iirc vi emulation was broken/ignored for a while
2021-09-29 14:58:17 +0200 <xerox> ok, I do not have that file
2021-09-29 14:59:20 +0200 <xerox> making one with editMode: Emacs does not change the brokennes
2021-09-29 14:59:26 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 246 seconds)
2021-09-29 14:59:33 +0200 <xerox> it does work but the display of what is doing is rong
2021-09-29 14:59:35 +0200 <xerox> *wrong
2021-09-29 15:00:17 +0200 <geekosaur> weird. but that sounds more like a terminal issue than a ghci / editline issue
2021-09-29 15:00:57 +0200 <geekosaur> do you have something like colors in the prompt?
2021-09-29 15:01:04 +0200 <xerox> this is macos terminal.app
2021-09-29 15:01:19 +0200 <xerox> nope
2021-09-29 15:01:42 +0200michalz(~michalz@185.246.204.72)
2021-09-29 15:02:11 +0200 <xerox> for example ctrl+left arrow goes back 1 char visually, but functionally it seems to do the right thing and go back a word, or CTRL+A also goes back 1 char visually, but CTRL+K correctly functionally deletes the whole line such that if I type '2' and RET it evaluates to 2 no matter what was on the line before, does that make sense?
2021-09-29 15:02:29 +0200 <geekosaur> this is sounding very bizarre
2021-09-29 15:02:47 +0200 <geekosaur> actually this is starting to sound like a bad terminfo entry
2021-09-29 15:02:58 +0200 <geekosaur> except it takes quite a lot of work to get that :)
2021-09-29 15:03:41 +0200hyiltiz(~quassel@31.220.5.250)
2021-09-29 15:04:07 +0200 <geekosaur> even if you somehow selected the wrong terminfo entry it should mostly work as expected these days, since almost all terminals emulate VT240 / xterm
2021-09-29 15:04:29 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-09-29 15:05:04 +0200 <xerox> geekosaur: https://i.imgur.com/HYJRDMC.mp4
2021-09-29 15:05:29 +0200 <xerox> geekosaur: every other program that is not ghci has correct line editing, where these work as expected
2021-09-29 15:05:52 +0200 <xerox> see how that CTRL+A goes back 1 char not all 3 of them
2021-09-29 15:06:09 +0200 <geekosaur> yeh, I understood your description, that was what made me think terminfo
2021-09-29 15:06:23 +0200 <xerox> wouldn't that mean the other line editing programs would also be broken?
2021-09-29 15:06:49 +0200 <geekosaur> hm, yes
2021-09-29 15:07:24 +0200 <geekosaur> except there's like 6 ways to do that particular positioning operation and other programs might use a different one from haskeline
2021-09-29 15:08:01 +0200 <geekosaur> terminals are muy complicated
2021-09-29 15:08:22 +0200 <geekosaur> lots of ways for things to go wrong :(
2021-09-29 15:09:47 +0200jakefromstatefar(~jakefroms@2001:470:69fc:105::15ef) (Ping timeout: 240 seconds)
2021-09-29 15:10:53 +0200maerwald[m](~maerwaldm@2001:470:69fc:105::1ee) (Ping timeout: 264 seconds)
2021-09-29 15:10:59 +0200infinisil(~infinisil@2001:470:69fc:105::ff8) (Ping timeout: 246 seconds)
2021-09-29 15:11:15 +0200vaibhavsagar[m](~vaibhavsa@2001:470:69fc:105::ffe) (Ping timeout: 268 seconds)
2021-09-29 15:11:29 +0200ormaaj(~ormaaj@user/ormaaj) (Ping timeout: 264 seconds)
2021-09-29 15:12:03 +0200 <geekosaur> hm, I'm on 8.10.7 and it works here, so presumably not a haskeline bug
2021-09-29 15:12:10 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 15:12:45 +0200 <xerox> darn! :)
2021-09-29 15:13:08 +0200 <xerox> I cannot try 9.0.1 as it is not available on arm
2021-09-29 15:13:59 +0200 <geekosaur> pretty sure it works under rosetta
2021-09-29 15:14:13 +0200 <geekosaur> but yes, native awaits 9.2.1
2021-09-29 15:14:44 +0200 <xerox> right but then I need a x64 ghcup in parallel if I want to manage nonnative bins as well
2021-09-29 15:15:21 +0200 <maerwald> xerox: 9.0.1 is not available where?
2021-09-29 15:15:32 +0200 <geekosaur> M1 Mac, native
2021-09-29 15:15:46 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 15:16:11 +0200 <xerox> maerwald: https://i.imgur.com/8bIrzlz.png
2021-09-29 15:16:26 +0200 <xerox> on M1 yes
2021-09-29 15:16:39 +0200nvmd(~nvmd@user/nvmd)
2021-09-29 15:16:58 +0200 <maerwald> 9.2.0.20210821 is though
2021-09-29 15:17:05 +0200 <maerwald> it just appears to be missing from ghcup metadata
2021-09-29 15:17:07 +0200Morrow(~Morrow@37.142.145.18)
2021-09-29 15:17:09 +0200 <xerox> ah neat
2021-09-29 15:17:13 +0200 <maerwald> I'll add it
2021-09-29 15:17:19 +0200 <xerox> I'll give it a whirl
2021-09-29 15:19:12 +0200 <maerwald> ghcup install ghc -u https://downloads.haskell.org/~ghc/9.2.1-rc1/ghc-9.2.0.20210821-aarch64-apple-darwin.tar.xz 9.2.0.20210821
2021-09-29 15:20:47 +0200Organizers|Robin(~Robin_Jad@152.67.64.160)
2021-09-29 15:21:45 +0200Morrow(~Morrow@37.142.145.18) (Ping timeout: 265 seconds)
2021-09-29 15:21:59 +0200 <xerox> hmpf, that one is broken on my system as well
2021-09-29 15:22:00 +0200 <dminuoso> • A_Lens cannot be composed with A_Lens
2021-09-29 15:22:05 +0200 <dminuoso> Mmm, optics diagnostic fail. :(
2021-09-29 15:26:28 +0200yinghua(~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7)
2021-09-29 15:33:51 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds)
2021-09-29 15:36:05 +0200 <xerox> I wonder what can I bang my head against to fix this
2021-09-29 15:36:21 +0200 <dminuoso> Concrete walls are good.
2021-09-29 15:37:12 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-09-29 15:37:15 +0200 <Psybur> xerox, a button that when pressed gives me money
2021-09-29 15:37:23 +0200shaprhugs xerox
2021-09-29 15:37:32 +0200 <xerox> hey shapr :-)
2021-09-29 15:37:38 +0200 <shapr> how you doin xerox ?
2021-09-29 15:37:43 +0200 <xerox> p good!!
2021-09-29 15:37:50 +0200 <xerox> how about you
2021-09-29 15:37:50 +0200 <shapr> Any cool projects lately?
2021-09-29 15:38:25 +0200 <xerox> yeah I'm doing stuff, related to wood and agricolture, a whole other domain of things, it's good
2021-09-29 15:38:25 +0200 <shapr> I'm writing small fun things for my own use: https://github.com/shapr/bloohm and https://github.com/shapr/sandwatch and https://github.com/shapr/takedouble
2021-09-29 15:38:43 +0200xeroxtakes a look
2021-09-29 15:39:52 +0200 <shapr> xerox: do you write about your wood / agriculture adventures? blog or place to post things?
2021-09-29 15:40:12 +0200 <xerox> shapr: not yet, just started out, that's a good idea tho I'll see what I can do
2021-09-29 15:40:20 +0200 <shapr> cool, I'd read for sure!
2021-09-29 15:41:07 +0200 <shapr> I want to tune sandwatch and publish it, and I don't know how to publish bloohm so that many can use it.
2021-09-29 15:41:13 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh)
2021-09-29 15:41:47 +0200 <shapr> xerox: will you visit north america anytime soon?
2021-09-29 15:41:52 +0200 <shapr> would be nice to see you again
2021-09-29 15:42:17 +0200 <xerox> shapr: I doubt it, but I would love to meet again for sure, you foresee coming to this side of the atlantic anytime in the future?
2021-09-29 15:42:35 +0200 <shapr> hm, thinking of visiting scandinavia again
2021-09-29 15:42:40 +0200 <shapr> might could visit the south too
2021-09-29 15:44:13 +0200 <xerox> that'd be nice, how many years has it been, I think it was something like 2006-7-8 for the MSR meets
2021-09-29 15:44:24 +0200 <shapr> might have been 2005
2021-09-29 15:44:28 +0200 <xerox> !
2021-09-29 15:44:30 +0200 <shapr> I think that's when AngloHaskell happened
2021-09-29 15:44:41 +0200 <xerox> I have fond memories of that time
2021-09-29 15:44:43 +0200 <shapr> so, fifteen or sixteen years?
2021-09-29 15:44:44 +0200 <shapr> me too!
2021-09-29 15:45:05 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 15:45:13 +0200 <xerox> Heffalump yelling "duck!!" and I could see no duck, only to learn it is also a verb and my head was saved from a hanging branch on the cam river
2021-09-29 15:45:33 +0200 <shapr> :-D
2021-09-29 15:45:37 +0200 <shapr> punting was fun
2021-09-29 15:46:01 +0200 <xerox> with duncan bridge-hopping
2021-09-29 15:46:19 +0200 <shapr> yeah, good adventures!
2021-09-29 15:46:27 +0200 <xerox> :)))
2021-09-29 15:46:52 +0200 <xerox> have you been at other haskell related meets afterwards? I had some issues and fell off the map for a while afterwards
2021-09-29 15:49:16 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 15:49:22 +0200epolanski(uid312403@id-312403.helmsley.irccloud.com)
2021-09-29 15:54:14 +0200 <shapr> I fell off the map for a few years myself, but I have a haskell job for the past two years, yay!
2021-09-29 15:56:29 +0200Lycurgus(~juan@98.4.112.204)
2021-09-29 15:56:44 +0200unmanbearpig(~unmanbear@user/unmanbearpig) (Quit: unmanbearpig)
2021-09-29 15:57:12 +0200unmanbearpig(~unmanbear@45.76.95.141)
2021-09-29 15:57:39 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 15:58:39 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 15:58:39 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 15:58:39 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 15:59:35 +0200max22-(~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr)
2021-09-29 16:01:16 +0200MQ-17J(~MQ-17J@35.50.53.58)
2021-09-29 16:02:33 +0200Sgeo(~Sgeo@user/sgeo)
2021-09-29 16:02:40 +0200xsperry(~xs@user/xsperry) (Ping timeout: 252 seconds)
2021-09-29 16:03:02 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh)
2021-09-29 16:04:17 +0200slack1256(~slack1256@191.125.154.227)
2021-09-29 16:06:32 +0200 <slack1256> I got the impression that TH made compilation slower and memory usage bigger. I remember some folk advice to control that, such as separating TH heavy modules in multiple submodule so GHC has an easier time. Is that still valid?
2021-09-29 16:07:30 +0200 <slack1256> I am using multiple graphql queries/mutations and I am generating the corresponding ADTs via TH. But I am at the border where memory usage is too much.
2021-09-29 16:08:16 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-09-29 16:11:53 +0200 <dminuoso> slack1256: It's really hard to say in general.
2021-09-29 16:12:13 +0200 <dminuoso> Without knowing the details of what your TH code generates, and without GHC profiling options enabled.
2021-09-29 16:12:35 +0200 <dminuoso> GHC has a bunch of flags that make it tell you a lot of information about its internals
2021-09-29 16:13:48 +0200 <Lycurgus> really at the border or just ghc prealloced to the maz?
2021-09-29 16:13:56 +0200 <Lycurgus> *max
2021-09-29 16:14:27 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Quit: WeeChat 3.3)
2021-09-29 16:14:28 +0200 <Lycurgus> out the kazoo, or whatever quanta
2021-09-29 16:14:35 +0200 <slack1256> No, border of what my machine and peers can give it. Which is 3Gb.
2021-09-29 16:15:14 +0200 <dminuoso> 3Gb is quite.. slim..
2021-09-29 16:15:20 +0200 <Lycurgus> so you have 3GB RAM and it's swapping with nothing else running?
2021-09-29 16:15:30 +0200hendursa1(~weechat@user/hendursaga) (Ping timeout: 276 seconds)
2021-09-29 16:15:39 +0200 <dminuoso> For Haskell I wouldn't pick a machine without 8G of ram for non-trivial projects. It's so easy to blow up memory usage.. :(
2021-09-29 16:15:47 +0200 <slack1256> Well it is a 4 gb machine.
2021-09-29 16:15:47 +0200 <dminuoso> s/without/with less than/
2021-09-29 16:16:15 +0200 <slack1256> I was thinking on advice in the line of https://www.parsonsmatt.org/2019/11/27/keeping_compilation_fast.html . There it shows that GHC is superlinear on module size respect to memory usage.
2021-09-29 16:16:26 +0200 <Lycurgus> peers?
2021-09-29 16:16:32 +0200 <slack1256> Given that TH expands before compilation, that can be a source of slowness.
2021-09-29 16:16:40 +0200 <slack1256> Lycurgus: closed source project.
2021-09-29 16:16:45 +0200 <Lycurgus> ah
2021-09-29 16:16:55 +0200Flonk(~Flonk@ec2-52-40-29-25.us-west-2.compute.amazonaws.com)
2021-09-29 16:16:55 +0200 <Lycurgus> so the group has set a limit
2021-09-29 16:17:13 +0200 <dminuoso> slack1256: But yes, module size has a notable impact on compilation time.
2021-09-29 16:17:20 +0200hendursa1(~weechat@user/hendursaga)
2021-09-29 16:17:26 +0200 <janus> lortabac: i found out my issue with DataKinds was due to TemplateHaskell and DataKinds somehow interacting
2021-09-29 16:17:31 +0200 <dminuoso> It's part of why, for the code generator Im working on right now, carefully generates many small modules.
2021-09-29 16:17:47 +0200 <dminuoso> (or rather, notable impact on memory usage)
2021-09-29 16:18:17 +0200 <slack1256> More like, we are distributed through the world and everybody has different machines. They have in average around 4GB for compiling projects. If haskell uses more memory than that, people will try to avoid to compile it or use it. Which is a shame because is the interaction with the compiler while programming that is soo useful.
2021-09-29 16:18:53 +0200 <dminuoso> slack1256: And in fact, this is why I dont use TH for code generation, but rather a separate haskell program with a bunch of tooling to make that task easier.
2021-09-29 16:19:05 +0200 <Lycurgus> most phones have 4X that these days
2021-09-29 16:19:09 +0200 <slack1256> dminuoso: So it seems reasonable to try to break the big TH module on a series of little one and see if it get better?
2021-09-29 16:19:20 +0200 <slack1256> Lycurgus: in the US.
2021-09-29 16:19:21 +0200 <dminuoso> slack1256: Yeah.
2021-09-29 16:19:27 +0200 <dminuoso> slack1256: Or even just not doing this in TH at all.
2021-09-29 16:19:32 +0200 <janus> slack1256: where did you get the 4gb figure from?
2021-09-29 16:19:48 +0200Lycurgussuspects hs is first world thing
2021-09-29 16:19:49 +0200 <slack1256> myself and my other peer in the philiphines.
2021-09-29 16:20:21 +0200Lycurgus... with outliers
2021-09-29 16:20:34 +0200 <slack1256> I am develop on a phenom II from 2008 with 5.3 Gb, kill me.
2021-09-29 16:20:54 +0200 <Lycurgus> janus e said it was an arbitrary group decided limit
2021-09-29 16:21:18 +0200 <dminuoso> slack1256: Then perhaps indeed, consider a separate code generator program
2021-09-29 16:21:32 +0200 <dminuoso> And generate smaller modules.
2021-09-29 16:21:38 +0200 <slack1256> Arbitrary in the sense I don't decide the machine of the remote workers. Yet the usage should be reasonable even for them.
2021-09-29 16:21:52 +0200 <slack1256> dminuoso: Awesome. Any tool I should be looking at?
2021-09-29 16:21:57 +0200 <Lycurgus> hs, in general, is not the skinny
2021-09-29 16:22:01 +0200 <janus> hmm so you have 5.3 gb, the average is 4gb though. so your buddy must have 2.7 gb. interesting
2021-09-29 16:22:09 +0200 <dminuoso> slack1256: I use haskell-src-exts together with haskell-src-exts-qq
2021-09-29 16:22:12 +0200 <Lycurgus> ghcjs and the like notwithstandig
2021-09-29 16:22:33 +0200 <dminuoso> slack1256: oh and haskell-src-exts-simple
2021-09-29 16:22:35 +0200 <slack1256> janus: There is other people. So far the one with problems is the one from the philiphines.
2021-09-29 16:22:41 +0200 <dminuoso> these three fit nicely together, it's mostly similar to TH
2021-09-29 16:22:50 +0200 <dminuoso> Except you dont have any ambient state, you have to manage that yourself
2021-09-29 16:22:56 +0200 <slack1256> Awesome, thanks dminuoso !
2021-09-29 16:23:35 +0200 <dminuoso> Note that the -qq package likely needs to used from https://github.com/bezirg/haskell-src-exts-qq
2021-09-29 16:23:45 +0200 <dminuoso> Because the original package is no longer maintained, a really minor issue
2021-09-29 16:23:55 +0200 <dminuoso> Someone ought to just take over the original package and push that update..
2021-09-29 16:24:00 +0200 <Lycurgus> send the Phillipenes some memory
2021-09-29 16:24:27 +0200 <Lycurgus> prolly cheaper
2021-09-29 16:24:27 +0200 <slack1256> Instead of fixing what is broken on our project? come on Lycurgus.
2021-09-29 16:24:54 +0200 <Lycurgus> yeah I wasn't clear if it was broken or normal ghc ops
2021-09-29 16:24:59 +0200 <Lycurgus> on a big codebase
2021-09-29 16:25:48 +0200 <dminuoso> slack1256: In case you're curious, https://github.com/bezirg/haskell-src-exts-qq/commit/226e1268c372b6b1f8ec807873f1df23383a1faa is the sole reason why. :)
2021-09-29 16:26:06 +0200slack1256reads
2021-09-29 16:27:20 +0200 <dminuoso> So for our code generator I work inside some `StateT G IO` where G is a record that keeps track of a buch of things, like definitions, imports, pragmas, etc, and at certain points I have a monadic `flush` action that builds a haskell-src-exts module based on all the currently built stuff
2021-09-29 16:27:29 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-29 16:28:17 +0200 <Lycurgus> there's ur solution slack1256
2021-09-29 16:28:58 +0200 <slack1256> Oh, you do the "buffering" yourself. Neat.
2021-09-29 16:30:16 +0200ec(~ec@gateway/tor-sasl/ec)
2021-09-29 16:30:51 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-09-29 16:31:10 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-09-29 16:31:15 +0200ec(~ec@gateway/tor-sasl/ec)
2021-09-29 16:37:17 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 16:38:19 +0200ub(~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
2021-09-29 16:38:35 +0200cheater(~Username@user/cheater) (Remote host closed the connection)
2021-09-29 16:38:36 +0200MQ-17J(~MQ-17J@35.50.53.58) (Read error: Connection reset by peer)
2021-09-29 16:39:50 +0200MQ-17J(~MQ-17J@35.50.53.58)
2021-09-29 16:43:20 +0200hnOsmium0001(uid453710@id-453710.hampstead.irccloud.com)
2021-09-29 16:45:19 +0200cheater(~Username@user/cheater)
2021-09-29 16:49:19 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 16:50:31 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 16:51:54 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-09-29 16:52:47 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com)
2021-09-29 16:53:57 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2021-09-29 16:54:42 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 16:55:10 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Read error: Connection reset by peer)
2021-09-29 16:58:05 +0200acidjnk_new3(~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2021-09-29 16:59:29 +0200Lycurgus(~juan@98.4.112.204) (Quit: Exeunt)
2021-09-29 17:04:42 +0200azeem(~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 265 seconds)
2021-09-29 17:05:48 +0200azeem(~azeem@2a00:801:42e:f0c5:54bc:9505:1b65:51ec)
2021-09-29 17:05:55 +0200xsperry(~xs@cpe-188-129-101-182.dynamic.amis.hr)
2021-09-29 17:05:55 +0200xsperry(~xs@cpe-188-129-101-182.dynamic.amis.hr) (Changing host)
2021-09-29 17:05:55 +0200xsperry(~xs@user/xsperry)
2021-09-29 17:06:10 +0200Tuplanolla(~Tuplanoll@91-159-69-50.elisa-laajakaista.fi)
2021-09-29 17:06:53 +0200gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799)
2021-09-29 17:08:43 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 17:09:20 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 17:09:28 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-79c3-eb84-501d-4a08.res6.spectrum.com)
2021-09-29 17:11:46 +0200goepsilongo_(~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com) (Ping timeout: 245 seconds)
2021-09-29 17:13:26 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 17:14:13 +0200xff0x(~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 252 seconds)
2021-09-29 17:14:58 +0200gdhffd[m](~gdhffdmat@2001:470:69fc:105::1:799) ()
2021-09-29 17:15:11 +0200xff0x(~xff0x@2001:1a81:5386:1100:ed62:9085:5098:b430)
2021-09-29 17:15:56 +0200xiongxin(~quassel@119.123.100.167) (Ping timeout: 252 seconds)
2021-09-29 17:16:30 +0200Guest2(~Guest2@86.57.234.195)
2021-09-29 17:16:34 +0200xiongxin(~quassel@119.123.100.167)
2021-09-29 17:17:20 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection)
2021-09-29 17:19:29 +0200ub(~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2021-09-29 17:19:46 +0200ub(~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
2021-09-29 17:19:51 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 17:22:18 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 17:22:26 +0200ilkecan[m](~ilkecanma@2001:470:69fc:105::1:79b)
2021-09-29 17:23:05 +0200ub(~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer)
2021-09-29 17:23:05 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-09-29 17:23:11 +0200ub1(~Thunderbi@178.115.55.159.wireless.dyn.drei.com)
2021-09-29 17:23:32 +0200segfaultfizzbuzz(~segfaultf@135-180-0-138.static.sonic.net)
2021-09-29 17:23:51 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Quit: Leaving)
2021-09-29 17:24:26 +0200Guest2(~Guest2@86.57.234.195) ()
2021-09-29 17:24:41 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-09-29 17:25:29 +0200ub1ub
2021-09-29 17:26:21 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-29 17:34:32 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-09-29 17:34:58 +0200hendursaga(~weechat@user/hendursaga)
2021-09-29 17:35:20 +0200xiongxin(~quassel@119.123.100.167) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-09-29 17:36:27 +0200byorgey(~byorgey@155.138.238.211) (Quit: leaving)
2021-09-29 17:36:34 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482) (Quit: WeeChat 2.8)
2021-09-29 17:36:35 +0200byorgey(~byorgey@155.138.238.211)
2021-09-29 17:38:07 +0200norskalm(~norskalm@101.175.64.73) (Ping timeout: 256 seconds)
2021-09-29 17:38:43 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
2021-09-29 17:40:43 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection)
2021-09-29 17:42:54 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-09-29 17:44:08 +0200 <fryguybob> tabaqui, sclv: I have no idea if this is actually related to your problem, but the RTS does hang on to trec chunks to recycle them with the idea that they are hot in the cache.
2021-09-29 17:45:04 +0200chris(~chris@81.96.113.213)
2021-09-29 17:45:08 +0200chrisGuest3846
2021-09-29 17:46:11 +0200 <fryguybob> If you touch *a lot* of TVars once and then not much after that, this is clearly not ideal. We shouldn't be keeping more than would be resident in cache anyway. Maybe a workaround would be to set the number of capabilities to 1, GC, then set it back up to N.
2021-09-29 17:51:09 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.2.1)
2021-09-29 17:58:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds)
2021-09-29 17:59:30 +0200benin036932301(~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat)
2021-09-29 17:59:35 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 18:03:10 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2021-09-29 18:03:47 +0200ub(~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Remote host closed the connection)
2021-09-29 18:03:51 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 18:04:56 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 18:07:00 +0200slac42908(~slack1256@191.126.227.219)
2021-09-29 18:09:10 +0200slack1256(~slack1256@191.125.154.227) (Ping timeout: 252 seconds)
2021-09-29 18:09:55 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2021-09-29 18:11:09 +0200max22-(~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-29 18:11:59 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr)
2021-09-29 18:13:38 +0200slack1256(~slack1256@181.203.20.152)
2021-09-29 18:14:44 +0200Guest3846(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-29 18:15:31 +0200slac42908(~slack1256@191.126.227.219) (Ping timeout: 245 seconds)
2021-09-29 18:19:59 +0200nfd(~nfd@user/nfd)
2021-09-29 18:20:19 +0200chris(~chris@81.96.113.213)
2021-09-29 18:20:23 +0200chrisGuest1239
2021-09-29 18:24:52 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 18:24:56 +0200Guest1239(~chris@81.96.113.213) (Ping timeout: 265 seconds)
2021-09-29 18:24:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 18:27:15 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 18:29:16 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds)
2021-09-29 18:29:46 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-29 18:29:47 +0200_ht(~quassel@82-169-194-8.biz.kpn.net)
2021-09-29 18:33:36 +0200kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2021-09-29 18:35:18 +0200mc47(~mc47@xmonad/TheMC47)
2021-09-29 18:36:48 +0200boxscape_(~boxscape_@i577BCBE7.versanet.de)
2021-09-29 18:43:21 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 18:45:39 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 18:50:51 +0200Cajun(~Cajun@user/cajun) (Quit: Client closed)
2021-09-29 18:51:02 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-09-29 18:54:08 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 18:59:15 +0200cheater(~Username@user/cheater) (Ping timeout: 265 seconds)
2021-09-29 18:59:52 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 19:00:49 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection)
2021-09-29 19:00:58 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2)
2021-09-29 19:01:24 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 19:01:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 19:02:20 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 246 seconds)
2021-09-29 19:05:31 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 245 seconds)
2021-09-29 19:05:56 +0200cheater(~Username@user/cheater)
2021-09-29 19:17:11 +0200MQ-17J(~MQ-17J@35.50.53.58) (Ping timeout: 245 seconds)
2021-09-29 19:17:29 +0200ystael(~ystael@user/ystael) (Ping timeout: 252 seconds)
2021-09-29 19:18:20 +0200ystael(~ystael@user/ystael)
2021-09-29 19:21:02 +0200 <segfaultfizzbuzz> i have a bit of a philosophical question here, feel free to have me not ask this due to it being too fuzzy:
2021-09-29 19:22:09 +0200 <segfaultfizzbuzz> when i was introduced to groups for the first time i felt that the concept of a group was fundamentally descriptive, and by this i mean that the group does not "exist" and is not "as real" as other mathematical objects
2021-09-29 19:22:33 +0200 <segfaultfizzbuzz> in the same way that the color red does not exist, there are only red cars and red buildings and soforth
2021-09-29 19:23:12 +0200 <segfaultfizzbuzz> i never had a mechanism to justify this view until recently, where i came across a discussion of the monster group
2021-09-29 19:23:43 +0200 <segfaultfizzbuzz> and a clear presentation of the various "unnatural" objects which satisfy the laws of a group
2021-09-29 19:23:49 +0200 <monochrom> Ah, if this will not involve Haskell, then #haskell-offtopic is a good place.
2021-09-29 19:23:56 +0200 <segfaultfizzbuzz> okay i will jump over there
2021-09-29 19:24:31 +0200econo(uid147250@user/econo)
2021-09-29 19:28:20 +0200emf(~emf@2601:602:9401:b660:47d:d5f4:4143:7c05)
2021-09-29 19:29:55 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
2021-09-29 19:31:11 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
2021-09-29 19:31:18 +0200notzmv(~zmv@user/notzmv)
2021-09-29 19:32:12 +0200MQ-17J(~MQ-17J@35.50.53.58)
2021-09-29 19:32:41 +0200emf(~emf@2601:602:9401:b660:47d:d5f4:4143:7c05) (Quit: emf)
2021-09-29 19:33:48 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 19:34:01 +0200emf(~emf@2620:10d:c090:400::5:d028)
2021-09-29 19:34:16 +0200tommd(~tommd@75-164-130-101.ptld.qwest.net)
2021-09-29 19:34:34 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c) (Changing host)
2021-09-29 19:34:34 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw)
2021-09-29 19:35:01 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-29 19:35:56 +0200nrl^(~nrl@68.101.50.106) (Ping timeout: 245 seconds)
2021-09-29 19:38:56 +0200nrl^(~nrl@68.101.50.106)
2021-09-29 19:40:02 +0200 <nf> > let 1 = 0 in ()
2021-09-29 19:40:04 +0200 <lambdabot> ()
2021-09-29 19:40:06 +0200 <nf> how does this parse?
2021-09-29 19:41:53 +0200lbseale(~lbseale@user/ep1ctetus) (Ping timeout: 246 seconds)
2021-09-29 19:42:09 +0200 <Taneb> It parses because "1" is valid in pattern contexts. This is useful for things like case 0 -> 0; 1 -> 1; n -> n + 4
2021-09-29 19:43:03 +0200 <boxscape_> nf it's desugared to `let x | x == 1 = 0 in ()`
2021-09-29 19:43:14 +0200 <boxscape_> more or less
2021-09-29 19:43:22 +0200 <nf> ooh, right
2021-09-29 19:43:43 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw) (Quit: Reconnecting)
2021-09-29 19:43:46 +0200 <Taneb> The more surprising thing is it executes. That's because (I believe) the pattern is only executed if a bound symbol is used, and there's no bound symbols to use
2021-09-29 19:43:57 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c)
2021-09-29 19:43:58 +0200 <boxscape_> > let !1 = 0 in ()
2021-09-29 19:44:00 +0200 <lambdabot> *Exception: <interactive>:3:5-10: Non-exhaustive patterns in 1
2021-09-29 19:44:04 +0200YoungChiefBTW(~youngchie@2001:470:69fc:105::214c) (Changing host)
2021-09-29 19:44:04 +0200YoungChiefBTW(~youngchie@user/youngchiefbtw)
2021-09-29 19:44:29 +0200 <boxscape_> > let Just x = Nothing in ()
2021-09-29 19:44:30 +0200 <lambdabot> ()
2021-09-29 19:45:25 +0200BosonCollider(~olofs@90-227-86-119-no542.tbcn.telia.com)
2021-09-29 19:45:28 +0200nilof(~olofs@90-227-86-119-no542.tbcn.telia.com)
2021-09-29 19:45:40 +0200nilof(~olofs@90-227-86-119-no542.tbcn.telia.com) (Remote host closed the connection)
2021-09-29 19:46:05 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 19:51:21 +0200 <monochrom> case 0 of ~1 -> ()
2021-09-29 19:51:40 +0200 <boxscape_> hm I'm actually not sure what a good desugaring of `let !1 = 0 in ()` would be
2021-09-29 19:52:00 +0200 <monochrom> case 0 of 1 -> ()
2021-09-29 19:52:25 +0200 <monochrom> Everything is nicer with "case" and irrefutable patterns :)
2021-09-29 19:52:41 +0200 <tomsmeding> boxscape_: let !x | x == 1 = 0 in () ? :p
2021-09-29 19:52:48 +0200 <monochrom> Indeed the Haskell Report also has this inclination of reducing everything to "case".
2021-09-29 19:52:56 +0200 <boxscape_> > let !x | x == 1 = 0 in ()
2021-09-29 19:52:58 +0200 <lambdabot> ()
2021-09-29 19:53:00 +0200 <tomsmeding> oh
2021-09-29 19:53:12 +0200 <tomsmeding> wut
2021-09-29 19:53:13 +0200benin036932301(~benin@183.82.176.107)
2021-09-29 19:53:20 +0200 <tomsmeding> how does that even work
2021-09-29 19:53:26 +0200 <boxscape_> er
2021-09-29 19:53:44 +0200 <boxscape_> > let !x | x == 1 = 0 in x `seq` ()
2021-09-29 19:53:47 +0200 <lambdabot> *Exception: <<loop>>
2021-09-29 19:54:20 +0200MQ-17J(~MQ-17J@35.50.53.58) (Ping timeout: 252 seconds)
2021-09-29 19:55:11 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
2021-09-29 19:55:21 +0200 <boxscape_> not really sure where the loop there comes from either
2021-09-29 19:56:31 +0200 <monochrom> You probably should desuger "x | x==1 = 0" first.
2021-09-29 19:56:54 +0200 <monochrom> something equiv to "x = if x==1 then 0 else undefined"
2021-09-29 19:57:44 +0200fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
2021-09-29 19:57:53 +0200 <monochrom> Mixing bang pattern with guard probably requires a very careful reading of the GHC user's guide.
2021-09-29 19:59:01 +0200 <boxscape_> looks like it, yeah
2021-09-29 19:59:16 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds)
2021-09-29 20:00:36 +0200Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-09-29 20:01:12 +0200 <monochrom> Ugh why does the GHC user's guide still links to Haskell 98 not Haskell 2010 haha
2021-09-29 20:01:16 +0200 <boxscape_> wait, I think I'm confused because I'm mixing up pattern and function bindings
2021-09-29 20:01:27 +0200goepsilongo(~goepsilon@2603-7000-ab00-62ed-79c3-eb84-501d-4a08.res6.spectrum.com) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-29 20:01:33 +0200 <boxscape_> to have `x | x == 1 = 0`, you need to know what x is (for the guard), to find out what x is
2021-09-29 20:01:35 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 20:01:38 +0200 <boxscape_> which is the loop
2021-09-29 20:02:38 +0200tabaqui(~root@46.39.45.162)
2021-09-29 20:02:42 +0200 <boxscape_> `let 1 = 0` should actually be desugared to something more like `let 1 | 1 == 0 = 0`
2021-09-29 20:02:45 +0200 <boxscape_> I think
2021-09-29 20:03:07 +0200 <boxscape_> er, `let _ | 1 == 0 = 0`
2021-09-29 20:03:10 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 20:03:23 +0200 <tabaqui> sort of
2021-09-29 20:03:52 +0200 <boxscape_> % let !_ | 1 == 0 = 0 in () -- tomsmeding this does work
2021-09-29 20:03:52 +0200 <yahb> boxscape_: *** Exception: <interactive>:99:5-19: Non-exhaustive guards in
2021-09-29 20:04:57 +0200 <Guest41> hello. I seem to be misunderstanding parser combinators in Megaparsec. I have a parser of the form `choice [pNumber, try pBool, pString], `
2021-09-29 20:05:03 +0200 <tomsmeding> boxscape_: fascinating
2021-09-29 20:05:05 +0200 <monochrom> No, it really is better to translate "let 1=0 in foo" to "case".
2021-09-29 20:05:06 +0200 <Guest41> but even though I'm using the try primitive, the pBool parser keeps consuming input and triggering errors (eof not found) down the line
2021-09-29 20:05:25 +0200 <tomsmeding> I shall continue to avoid ! in let bindings, and reach for a case or pattern guards or explicit seq
2021-09-29 20:05:32 +0200 <boxscape_> monochrom but the part I'm interested in translating is the `1` pattern, your case desugaring still contains that
2021-09-29 20:05:50 +0200 <monochrom> But it also has ~
2021-09-29 20:06:22 +0200 <Guest41> I was following the pattern described here: https://markkarpov.com/tutorial/megaparsec.html#controlling-backtracking-with-try
2021-09-29 20:06:25 +0200 <tomsmeding> Guest41: "eof not found" -- does pBool call eof?
2021-09-29 20:06:37 +0200 <boxscape_> I do agree that with case it's easier to follow what happens than with bang patterns
2021-09-29 20:06:41 +0200emf_(~emf@2620:10d:c090:400::5:b24f)
2021-09-29 20:06:45 +0200 <boxscape_> in let
2021-09-29 20:07:01 +0200 <Guest41> tomsmeding: no it's called after the parser as in: `myParser <* eof`
2021-09-29 20:07:03 +0200fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
2021-09-29 20:07:03 +0200 <tomsmeding> boxscape_: case also corresponds more closely to the form in Core, so there's less semantics translation going on
2021-09-29 20:07:12 +0200 <boxscape_> right, yeah
2021-09-29 20:07:27 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 20:07:52 +0200 <tomsmeding> Guest41: then are you sure it's pBool that's failing? If pBool fails properly, it shouldn't even reach that 'eof' parser
2021-09-29 20:08:08 +0200 <Guest41> tomsmeding: I have it set that way because some strings are special, ie: "true" and "false", otherwise I want to fallback to parsing Text
2021-09-29 20:08:33 +0200 <tomsmeding> (parsing yaml?)
2021-09-29 20:09:09 +0200 <tomsmeding> Guest41: try putting 'getInput >>= \s -> traceIO ("Remaining: <" ++ s ++ ">")' right after that 'choice'
2021-09-29 20:09:14 +0200 <tomsmeding> with 'import Debug.Trace'
2021-09-29 20:09:15 +0200 <Guest41> tomsmeding: that makes sense, how would I make pBool fail if it parses something like "trueAAAAA"
2021-09-29 20:09:33 +0200 <monochrom> "!var = e" and even "!(Ctor pat1 pat2) = e" are pretty unsurprising. You don't have to avoid these use cases of bang patterns.
2021-09-29 20:09:34 +0200 <tomsmeding> Guest41: what's the definition of pBool?
2021-09-29 20:09:48 +0200 <tomsmeding> monochrom: true, I guess
2021-09-29 20:09:52 +0200 <Guest41> you are right, pBool isn't failing: `pBool = True <$ string "true" <|> False <$ string "false"`
2021-09-29 20:10:02 +0200emf(~emf@2620:10d:c090:400::5:d028) (Ping timeout: 260 seconds)
2021-09-29 20:10:07 +0200 <monochrom> But "!var | cond = e" is the one that surprised me. This one is reasonable to avoid.
2021-09-29 20:10:12 +0200 <tomsmeding> Guest41: because of megaparsec's semantics of 'string', that shouldn't even need 'try' I think
2021-09-29 20:10:30 +0200 <tomsmeding> it's parsec that has a 'string' that needs to be wrapped in 'try'; megaparsec changed that
2021-09-29 20:10:36 +0200 <boxscape_> monochrom yes, I'm still trying to figure out why `let !x | x == 1 = 0` *doesn't* loop
2021-09-29 20:10:39 +0200 <monochrom> Now I have to be a lawyer and follow the GHC user's guide and Haskell 2010 to desugar what's going on with that. :)
2021-09-29 20:11:55 +0200 <Guest41> tomsmeding: yes you are right, "Note that as of Megaparsec 4.4.0, string backtracks automatically (see tokens), so it does not need try. However, the examples above demonstrate the idea behind try so well that it was decided to keep them. You still need to use try when your alternatives are complex, composite parsers."
2021-09-29 20:12:00 +0200 <Guest41> https://hackage.haskell.org/package/megaparsec-9.2.0/docs/Text-Megaparsec.html
2021-09-29 20:12:14 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 265 seconds)
2021-09-29 20:12:24 +0200 <tomsmeding> ah, so I remembered correctly
2021-09-29 20:13:03 +0200 <Guest41> I still can't see how to force pBool to fail, it should expect whitespace after a Bool
2021-09-29 20:13:08 +0200 <boxscape_> FWIW, `f = () where !x | x == True = False` is desugared into Core as `f = case x_r1kw of { __DEFAULT -> break<2>() GHC.Tuple.() }`
2021-09-29 20:13:15 +0200chris(~chris@81.96.113.213)
2021-09-29 20:13:19 +0200chrisGuest2478
2021-09-29 20:13:23 +0200 <tomsmeding> Guest41: what about that definition you gave forces whitespace?
2021-09-29 20:13:28 +0200 <boxscape_> oh wait I guess that's only part of it
2021-09-29 20:14:03 +0200 <Guest41> tomsmeding: nothing, I tried adding `<* space` at the end but it didn't change the behaviour
2021-09-29 20:14:50 +0200 <boxscape_> (this is the full Core https://paste.tomsmeding.com/rsvN5Uml )
2021-09-29 20:14:52 +0200 <Guest41> Wait, I was wrong, it does complain about expecting whitespace
2021-09-29 20:14:59 +0200 <tomsmeding> Guest41: could you try: pBool = (True <$ string "true" <|> False <$ string "false") <* lookAhead space
2021-09-29 20:15:08 +0200 <Guest41> but it doesn't move on to the _next_ choice
2021-09-29 20:15:26 +0200 <boxscape_> oh but wait calling f *does* loop...
2021-09-29 20:15:32 +0200 <tomsmeding> Guest41: yeah with that '<* space', with or without lookAhead, you do now need the 'try'
2021-09-29 20:16:11 +0200 <boxscape_> % let !x | x == True = False
2021-09-29 20:16:16 +0200 <yahb> boxscape_: [Timed out]
2021-09-29 20:16:17 +0200 <boxscape_> % let !x | x == 1 = 0
2021-09-29 20:16:18 +0200 <yahb> boxscape_:
2021-09-29 20:16:22 +0200 <boxscape_> it's a dictionary thing, apparently
2021-09-29 20:16:41 +0200 <Guest41> tomsmeding: because combining primitives doesn't give auto-backtracking parsers, yes?
2021-09-29 20:16:42 +0200 <boxscape_> x is a function that takes a dictionary, so the bang pattern only forces it to be a lambda (is my hypothesis)
2021-09-29 20:16:49 +0200 <boxscape_> ^ monochrom
2021-09-29 20:17:23 +0200 <monochrom> > let !x = case () of () | x==1 -> 0 in () -- this is following Haskell 2010 4.4.3.2 to desugar guards in a pattern binding.
2021-09-29 20:17:25 +0200 <lambdabot> ()
2021-09-29 20:17:37 +0200 <monochrom> Hrm
2021-09-29 20:17:45 +0200 <tomsmeding> Guest41: indeed, nothing is backtracking by default except when explicitly made backtracking with 'try', or if it's a special case, of which 'string' is one
2021-09-29 20:17:58 +0200 <monochrom> > let !x = case () of () | x==False -> True in () -- this is following Haskell 2010 4.4.3.2 to desugar guards in a pattern binding.
2021-09-29 20:18:00 +0200 <lambdabot> *Exception: <<loop>>
2021-09-29 20:18:27 +0200 <tomsmeding> wonky
2021-09-29 20:18:29 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
2021-09-29 20:18:37 +0200 <monochrom> > let !x | x = False in ()
2021-09-29 20:18:40 +0200 <lambdabot> *Exception: <<loop>>
2021-09-29 20:18:47 +0200MQ-17J(~MQ-17J@35.50.53.58)
2021-09-29 20:18:58 +0200 <boxscape_> > !x | x == x in ()
2021-09-29 20:18:59 +0200 <monochrom> That theory does hold water.
2021-09-29 20:19:00 +0200 <lambdabot> <hint>:1:4: error: parse error on input ‘|’
2021-09-29 20:19:05 +0200 <boxscape_> > let !x | x == x in ()
2021-09-29 20:19:06 +0200 <lambdabot> <hint>:1:17: error: parse error on input ‘in’
2021-09-29 20:19:08 +0200 <Guest41> tomsmeding: the parser /still/ doesn't refrain from consuming "true" in "trueAAAA". I will simply Paste the code now so you can see it :P
2021-09-29 20:19:10 +0200epolanski(uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-29 20:19:12 +0200 <boxscape_> egh
2021-09-29 20:19:19 +0200 <monochrom> !x | x==x = not x ?
2021-09-29 20:19:37 +0200 <boxscape_> > let !x | x == x = () in ()
2021-09-29 20:19:38 +0200 <monochrom> !x | x = x ?
2021-09-29 20:19:40 +0200 <lambdabot> *Exception: <<loop>>
2021-09-29 20:19:54 +0200 <boxscape_> > let !x | x == x = undefined in ()
2021-09-29 20:19:55 +0200 <Guest41> tomsmeding: https://paste.tomsmeding.com/F8u1rsRa
2021-09-29 20:19:56 +0200 <lambdabot> ()
2021-09-29 20:20:03 +0200 <Guest41> (forgive the use of parseTest)
2021-09-29 20:20:04 +0200 <boxscape_> okay yeah this makes sense I think
2021-09-29 20:21:45 +0200aegon(~mike@174.127.249.180)
2021-09-29 20:22:01 +0200jlamothe(~jlamothe@104.158.48.100)
2021-09-29 20:22:11 +0200xff0x(~xff0x@2001:1a81:5386:1100:ed62:9085:5098:b430) (Ping timeout: 245 seconds)
2021-09-29 20:22:36 +0200 <tomsmeding> Guest41: what's that L import?
2021-09-29 20:22:44 +0200 <tomsmeding> oh Lexer
2021-09-29 20:22:53 +0200 <Guest41> yes `import qualified Text.Megaparsec.Char.Lexer as L`
2021-09-29 20:23:02 +0200xff0x(~xff0x@2001:1a81:5386:1100:51ce:15a:f28:e4d7)
2021-09-29 20:24:30 +0200 <Guest41> what I don't understand is why doesn't choice fallback to the third parser when pBool fails
2021-09-29 20:24:34 +0200 <tomsmeding> Guest41: when I give that trueAAAA I get back 'unexpected A, expecting end of input', which makes sense to me?
2021-09-29 20:24:39 +0200 <tomsmeding> oh wait no it doesn't
2021-09-29 20:24:56 +0200tomsmedingis confused
2021-09-29 20:24:57 +0200Guest2478(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-29 20:25:14 +0200kuribas(~user@ptr-25vy0i8j07s3q8yomww.18120a2.ip6.access.telenet.be)
2021-09-29 20:25:24 +0200 <Guest41> it should get a `StringValue` right?
2021-09-29 20:25:38 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2021-09-29 20:25:56 +0200emf_(~emf@2620:10d:c090:400::5:b24f) (Quit: emf_)
2021-09-29 20:25:59 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2021-09-29 20:28:44 +0200 <tomsmeding> oooooooh
2021-09-29 20:28:50 +0200 <tomsmeding> space: Skip zero or more white space characters.
2021-09-29 20:29:13 +0200 <tomsmeding> Guest41: should use spaceChar
2021-09-29 20:29:29 +0200qbt(~edun@user/edun) (Ping timeout: 246 seconds)
2021-09-29 20:29:31 +0200gensyst(gensyst@user/gensyst)
2021-09-29 20:29:34 +0200chris(~chris@81.96.113.213)
2021-09-29 20:29:36 +0200 <Guest41> *facepalm*
2021-09-29 20:29:38 +0200chrisGuest4418
2021-09-29 20:29:43 +0200 <tomsmeding> dumb megaparsec, shouldn't have changed the meaning of 'space' from the original parsec meaning
2021-09-29 20:29:52 +0200emf(~emf@2620:10d:c090:400::5:b24f)
2021-09-29 20:30:35 +0200 <gensyst> Can someone quickly please do this? "mkdir testproj; cd testproj; cabal init; vim testproj.cabal", add "Chart-chairo" dependency, and "cabal build"? Do you also get the error "(conflict: pkg-config package cairo>=1.2.0, not found in the pkg-config database)" ?
2021-09-29 20:30:39 +0200 <gensyst> How to solve this?
2021-09-29 20:30:58 +0200Guest4418(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-29 20:31:01 +0200 <tomsmeding> gensyst: install cairo with your system package manager :p
2021-09-29 20:31:05 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 20:31:11 +0200 <sclv> also possibly cairo-dev
2021-09-29 20:31:22 +0200 <tomsmeding> apparently that has a dependency on the cairo C library that you don't have installed (or the pkg-config file isn't installed for some reason)
2021-09-29 20:31:24 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 20:31:27 +0200 <sclv> its not a haskell lib, its a c lib that the haskell lib depends on
2021-09-29 20:32:27 +0200max22-(~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 240 seconds)
2021-09-29 20:33:31 +0200acidjnk_new3(~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de)
2021-09-29 20:33:39 +0200 <Guest41> tomsmeding: thank you very much
2021-09-29 20:34:52 +0200 <tomsmeding> Guest41: cheers :)
2021-09-29 20:36:13 +0200chris(~chris@81.96.113.213)
2021-09-29 20:36:17 +0200chrisGuest6556
2021-09-29 20:40:27 +0200Guest6556(~chris@81.96.113.213) (Ping timeout: 240 seconds)
2021-09-29 20:45:53 +0200justsomeguy(~justsomeg@user/justsomeguy)
2021-09-29 20:46:22 +0200MarsIronPI(~MarsIronP@107.117.175.35)
2021-09-29 20:47:40 +0200MarsIronPI(~MarsIronP@107.117.175.35) (Client Quit)
2021-09-29 20:50:26 +0200nfd(~nfd@user/nfd) (Ping timeout: 252 seconds)
2021-09-29 20:51:08 +0200 <c_wraith> I think it was too late last night when I unleashed my latest abomination upon this channel.
2021-09-29 20:51:29 +0200 <c_wraith> So I present it again now. Look upon my works, and despair: https://paste.tomsmeding.com/KmOT6PZy
2021-09-29 20:52:44 +0200 <tomsmeding> c_wraith: should call that pattern synonym :++ instead
2021-09-29 20:53:25 +0200 <c_wraith> I'm just "happy" that using it is more work than... not.
2021-09-29 20:53:31 +0200 <tomsmeding> c_wraith: you don't need the provided constraints () => to be listed explicitly, right?
2021-09-29 20:53:54 +0200 <tomsmeding> I like it :p
2021-09-29 20:53:56 +0200 <c_wraith> I'm not sure. Didn't look at the grammar for pattern signatures too closely.
2021-09-29 20:54:08 +0200 <tomsmeding> iirc provided constraints are optional
2021-09-29 20:54:25 +0200 <c_wraith> On the other hand, it doesn't really hurt anything
2021-09-29 20:54:59 +0200 <tomsmeding> how do you _use_ this though? 'f (PrefixedBy (Proxy @"prefix") suffix) = print suffix'?
2021-09-29 20:55:17 +0200 <c_wraith> No, I had an earlier version that would work like that.
2021-09-29 20:55:20 +0200 <monochrom> "is this dependent typing?" meme
2021-09-29 20:55:33 +0200 <c_wraith> except ghc doesn't allow type applications inside patterns
2021-09-29 20:55:44 +0200 <c_wraith> it even has a fun error message saying "yet"
2021-09-29 20:55:44 +0200 <tomsmeding> rip
2021-09-29 20:55:47 +0200 <tomsmeding> lol
2021-09-29 20:56:01 +0200max22-(~maxime@2a01cb088335980073a4b4db0ef417b5.ipv6.abo.wanadoo.fr)
2021-09-29 20:56:17 +0200 <c_wraith> So this is like.... PrefixedBy (Proxy :: Proxy "prefix") suffix
2021-09-29 20:56:45 +0200 <c_wraith> and even that requires enabling ScopedTypeVariables
2021-09-29 20:56:55 +0200 <tomsmeding> blegh
2021-09-29 20:57:03 +0200 <c_wraith> it's a horrible mess!
2021-09-29 20:57:06 +0200 <c_wraith> I'm so proud!
2021-09-29 20:57:11 +0200 <tomsmeding> :D
2021-09-29 21:01:25 +0200ircbrowse_tom(~ircbrowse@2a01:4f8:1c1c:9319::1) (ZNC 1.7.5+deb4 - https://znc.in)
2021-09-29 21:03:10 +0200ircbrowse_tom(~ircbrowse@2a01:4f8:1c1c:9319::1)
2021-09-29 21:03:10 +0200Server+Cnt
2021-09-29 21:04:11 +0200tabaqui(~root@46.39.45.162) (Ping timeout: 252 seconds)
2021-09-29 21:05:11 +0200gensyst(gensyst@user/gensyst) (Quit: Leaving)
2021-09-29 21:07:47 +0200 <boxscape_> c_wraith neat, I was wondering if it's possible to write something like this without having to do `PrefixOf "prefix" -> Just suffix` when using the pattern synonym. Will be interesting to see if Proxy is still necessary once visible forall is a thing
2021-09-29 21:08:30 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-09-29 21:08:33 +0200 <c_wraith> boxscape_: it almost works now, except for type applications not being allowed in patterns.
2021-09-29 21:09:14 +0200 <c_wraith> err, works without the Proxy argument
2021-09-29 21:09:44 +0200 <boxscape_> right, I suppose it's quite possible that that restriction will also extend to visible type applications
2021-09-29 21:10:00 +0200 <boxscape_> or, "visible-by-default" type applications, not sure what the proper terminology is
2021-09-29 21:10:39 +0200 <kuribas> c_wraith: what does that do?
2021-09-29 21:11:15 +0200 <c_wraith> it's a pattern for matching a string with a specific prefix and binding the rest to a name
2021-09-29 21:11:47 +0200 <c_wraith> kind of like Erlang's pattern matching on strings can do
2021-09-29 21:12:07 +0200 <c_wraith> except the syntax for using it is atrocious
2021-09-29 21:12:23 +0200 <boxscape_> there is/was some ongoing work (not sure if complete) that makes it possible to have patterns like (Just @Int 4), not sure if that applies to pattern synonyms as well
2021-09-29 21:13:11 +0200 <c_wraith> if it does, it would allow using something like (PrefixedBy @"prefix" suffix) with no other changes
2021-09-29 21:13:40 +0200 <c_wraith> err. no other ghc changes
2021-09-29 21:13:42 +0200k(~user@152.1.137.158)
2021-09-29 21:15:50 +0200 <boxscape_> it's in 9.2.1, let me check if it works for synonyms
2021-09-29 21:16:09 +0200fendor(~fendor@178.165.164.78.wireless.dyn.drei.com)
2021-09-29 21:16:21 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds)
2021-09-29 21:16:29 +0200 <k> Say I have a class like `Monad m` with methods `(>>=)` and `(>>)` , and a default definition in terms of `(>>=)` is given for `(>>)`. Does GHC inline the default definition everywhere it appears? Or does it specialize the definition to the type of each instance, and then use its usual heuristic to decide whether to inline the specialized version? Or does it just use it's usual heuristic to decide whether to inline a fully polymorphic
2021-09-29 21:16:29 +0200 <k> version?
2021-09-29 21:16:55 +0200 <k> Sorry about the apostrophe in 'its'.
2021-09-29 21:18:32 +0200 <kuribas> c_wraith: why not just: myFun pref s | Just rest <- stripPrefix pref s = rest | otherwise = ""
2021-09-29 21:18:32 +0200mikoto-chan(~mikoto-ch@83.137.2.251)
2021-09-29 21:19:42 +0200 <c_wraith> because that's not a pattern. it is a lot easier to use right now, but it's sort of missing the point.
2021-09-29 21:20:17 +0200 <boxscape_> c_wraith seems to work just fine with pattern synonyms in master
2021-09-29 21:20:42 +0200 <c_wraith> yeah, 9.2 fixed some other type application bug I ran into recently.
2021-09-29 21:20:52 +0200 <c_wraith> seems like it got improved a bunch.
2021-09-29 21:21:10 +0200 <kuribas> c_wraith: ok, so obfuscation is the point...
2021-09-29 21:21:28 +0200 <c_wraith> no, the point is that you can use it as pattern matching.
2021-09-29 21:21:38 +0200chris(~chris@81.96.113.213)
2021-09-29 21:21:42 +0200chrisGuest6826
2021-09-29 21:22:17 +0200 <c_wraith> looks like in GHC 9.2 it will actually be useable sanely.
2021-09-29 21:22:27 +0200Guest6826(~chris@81.96.113.213) (Remote host closed the connection)
2021-09-29 21:22:28 +0200 <c_wraith> instead of how you have to use that version
2021-09-29 21:23:09 +0200 <boxscape_> I think there might be a bug though, since `f (PrefixedBy (Proxy @GHC.Types.Symbol @"prefix") suffix) = suffix` works
2021-09-29 21:23:18 +0200 <boxscape_> whereas leaving out the @GHC.Types.Symbol doesn't
2021-09-29 21:23:30 +0200 <boxscape_> but I think it should be the other way around, since Proxy only has one specified type argument?
2021-09-29 21:23:39 +0200 <c_wraith> oh, it's the kind argument.
2021-09-29 21:23:49 +0200 <c_wraith> can you just leave it at @_ ?
2021-09-29 21:23:52 +0200 <boxscape_> yeah but it's inferred, you shouldn't be able to provide it via type application
2021-09-29 21:24:29 +0200 <boxscape_> yes, @_ works, but I would expect to get the same error I get if I try `Proxy @_ @"test"` in an expression instead of in a pattern
2021-09-29 21:24:29 +0200Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Quit: Client closed)
2021-09-29 21:24:34 +0200 <boxscape_> % Proxy @_ @"test"
2021-09-29 21:24:34 +0200 <yahb> boxscape_: ; <interactive>:2:1: error:; * Cannot apply expression of type `Proxy w0'; to a visible type argument `"test"'; * In the expression: Proxy @_ @"test"; In an equation for `it': it = Proxy @_ @"test"
2021-09-29 21:24:58 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
2021-09-29 21:25:00 +0200 <kuribas> c_wraith: or do: myFun (stripPrefix "myPrefix" -> Just rest) = rest; myFun _ = ""
2021-09-29 21:25:05 +0200 <c_wraith> hah, ok. that is certainly unexpected
2021-09-29 21:25:25 +0200 <kuribas> c_wraith: I don't see what you gain with a Pattern...
2021-09-29 21:25:42 +0200 <kuribas> unless it's some weird "challenge".
2021-09-29 21:25:42 +0200 <c_wraith> you gain not having to write a view pattern
2021-09-29 21:25:47 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 21:25:47 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 21:25:47 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 21:25:54 +0200 <boxscape_> kuribas if you have to do this a bunch of times for different prefixes it's a lot less visual clutter
2021-09-29 21:25:55 +0200Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-09-29 21:26:07 +0200 <tomsmeding> and you gain the ability to say "my latest abomination"
2021-09-29 21:26:11 +0200 <tomsmeding> which is clearly an advantage
2021-09-29 21:26:22 +0200 <Guest41> any ideas on how one might write a test suite for a parser written in (mega)parsec ?
2021-09-29 21:26:32 +0200 <c_wraith> like, the whole reason pattern synonyms were added to GHC is that view patterns are rerrible
2021-09-29 21:26:36 +0200 <c_wraith> *terrible
2021-09-29 21:26:36 +0200 <Guest41> I've never written a proper test suite before
2021-09-29 21:26:47 +0200 <shapr> Guest41: property based tests?
2021-09-29 21:27:18 +0200chris(~chris@81.96.113.213)
2021-09-29 21:27:22 +0200chrisGuest816
2021-09-29 21:27:23 +0200 <Guest41> shapr: I'll look it up
2021-09-29 21:27:34 +0200 <Guest41> (first time hearing the term)
2021-09-29 21:27:40 +0200 <shapr> I like doing round trip tests for parsers, where I can generate a random value of the type, turn that into text, and then parse it back out and see if it's the same thing.
2021-09-29 21:27:57 +0200 <shapr> Guest41: you could start with straight up unit tests using hspec
2021-09-29 21:28:47 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 21:29:11 +0200 <Guest41> shapr: what you said sounds very interesting. How would hspec differ/
2021-09-29 21:29:22 +0200 <Guest41> s;/;?
2021-09-29 21:30:00 +0200 <kuribas> boxscape_: that looks perfectly clear to my eyes...
2021-09-29 21:30:06 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2021-09-29 21:30:49 +0200 <boxscape_> ¯\_(ツ)_/¯ it's two more tokens, which isn't a lot but adds up
2021-09-29 21:31:12 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-29 21:31:43 +0200Guest816(~chris@81.96.113.213) (Ping timeout: 252 seconds)
2021-09-29 21:31:46 +0200oxide(~lambda@user/oxide) (Ping timeout: 245 seconds)
2021-09-29 21:32:37 +0200 <shapr> Guest41: if you've written some Haskell before, what do you think about the tutorial? https://hspec.github.io/
2021-09-29 21:33:08 +0200 <shapr> Guest41: I don't understand the question, how would hspec differ from? oh, do you mean differ from property based tests?
2021-09-29 21:33:24 +0200 <Guest41> shapr: sorry, yes that's I meant
2021-09-29 21:33:55 +0200 <shapr> unit tests are where you declare that a particular input should match a particular output.
2021-09-29 21:33:57 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2021-09-29 21:34:14 +0200 <shapr> Property based tests are where you say some class of inputs should match some class of outputs.
2021-09-29 21:34:23 +0200 <shapr> oh, I've forgotten how to use @check
2021-09-29 21:34:52 +0200 <shapr> @help check
2021-09-29 21:34:52 +0200 <lambdabot> check <expr>
2021-09-29 21:34:52 +0200 <lambdabot> You have QuickCheck and 3 seconds. Prove something.
2021-09-29 21:35:15 +0200 <Guest41> oh so in your example "class of inputs" is just type correctness, yes?
2021-09-29 21:35:49 +0200 <shapr> it can be something as simple as "the length of a list should be the same after sorting the list"
2021-09-29 21:35:50 +0200 <Guest41> if the outputs are the correct type then they pass the tests
2021-09-29 21:36:11 +0200 <tomsmeding> @check \l -> length (sort l) == length (l :: [Int])
2021-09-29 21:36:12 +0200 <lambdabot> +++ OK, passed 100 tests.
2021-09-29 21:36:15 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
2021-09-29 21:36:23 +0200 <tomsmeding> @check \l -> sort l == (l :: [Int])
2021-09-29 21:36:25 +0200 <lambdabot> *** Failed! Falsifiable (after 6 tests and 5 shrinks):
2021-09-29 21:36:25 +0200 <lambdabot> [-3,3,3,3,-4]
2021-09-29 21:36:28 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 21:36:33 +0200 <shapr> when I'm giving a talk on property based testing I ask whether everyone in the audience believes that a * (b * c) is the same as (a * b) * c
2021-09-29 21:36:51 +0200emf(~emf@2620:10d:c090:400::5:b24f) (Quit: emf)
2021-09-29 21:36:59 +0200 <shapr> I also ask whether every number can be saved to json, and will be the same when it's loaded from json
2021-09-29 21:37:21 +0200 <shapr> @check \a b c -> a * (b * c) == (a * b) * c
2021-09-29 21:37:22 +0200 <lambdabot> +++ OK, passed 100 tests.
2021-09-29 21:37:42 +0200 <shapr> Guest41: does the associativity of multiplication seem like a reasonable property?
2021-09-29 21:37:51 +0200 <Guest41> Wait how does lambdabot generate its tests?
2021-09-29 21:37:52 +0200 <shapr> tomsmeding: thanks for that example :-)
2021-09-29 21:38:21 +0200 <Guest41> shapr: well I think you could overload your operator some horrible way and break it
2021-09-29 21:38:22 +0200y04nn(~y04nn@193.32.127.238)
2021-09-29 21:38:29 +0200 <kuribas> @check \a b c -> (a::Double) * (b * c) == (a * b) * c
2021-09-29 21:38:29 +0200 <shapr> Guest41: lambdabot uses QuickCheck, which has a definition for how to generate the values for each type.
2021-09-29 21:38:31 +0200 <lambdabot> *** Failed! Falsifiable (after 4 tests and 8 shrinks):
2021-09-29 21:38:31 +0200 <lambdabot> -0.16831687903971976 0.7961839001969537 0.28952502728872787
2021-09-29 21:38:44 +0200 <Hecate> :O
2021-09-29 21:38:52 +0200 <shapr> Guest41: also, floating point numbers in computers aren't what you think!
2021-09-29 21:38:56 +0200 <shapr> as kuribas just demonstrated
2021-09-29 21:39:00 +0200 <tomsmeding> for some conservative definition of "each" in "each type" :p
2021-09-29 21:39:11 +0200 <shapr> heh, yes
2021-09-29 21:39:16 +0200 <Guest41> aha, interesting how it didn't try that many DOubles the first time
2021-09-29 21:39:28 +0200 <Guest41> it had to be nudged a bit
2021-09-29 21:40:02 +0200 <Guest41> shapr: so does hspec "allow" writing property based tests?
2021-09-29 21:40:18 +0200 <Guest41> Also, what numbers break JSON :^)
2021-09-29 21:40:22 +0200 <shapr> in Haskell, if your parser produces a data structure like an abstract syntax tree, you could turn that data structure into the matching text, and then see if the parser gets the right result!
2021-09-29 21:40:56 +0200 <shapr> Guest41: surprisingly many numbers break JSON, but the most common is that dividing by zero gives you NaN which is a floating point value, and is saved into JSON as the string "NaN"
2021-09-29 21:41:41 +0200 <shapr> you'd also think that all values of numbers should equal themselves, but NaN == NaN is false
2021-09-29 21:41:43 +0200 <boxscape_> > read "NaN" :: Double
2021-09-29 21:41:44 +0200 <lambdabot> NaN
2021-09-29 21:42:20 +0200 <justsomeguy> Floating point as a whole is really confusing and unintuitive to me.
2021-09-29 21:42:26 +0200 <shapr> > let nan = read "NaN" :: Double in nan == nan
2021-09-29 21:42:28 +0200 <lambdabot> False
2021-09-29 21:42:53 +0200 <Guest41> shapr: thank you for the information
2021-09-29 21:43:07 +0200 <shapr> Guest41: yes, hspec allows you to write both unit tests and property based tests
2021-09-29 21:43:33 +0200 <shapr> Guest41: got any other fun questions?
2021-09-29 21:43:36 +0200 <Guest41> I think a mix of both is what I'll go for
2021-09-29 21:43:46 +0200 <tomsmeding> > (0.0 == -0.0, show 0.0 == show "-0.0")
2021-09-29 21:43:48 +0200 <lambdabot> (True,False)
2021-09-29 21:43:53 +0200 <Guest41> shapr: What a thing to say :^)
2021-09-29 21:43:54 +0200 <boxscape_> "NaN" being stored as a string in JSON doesn't seem to imply that storing it in JSON doesn't preserve the information, after all, JSON generally doesn't store type information and you always have to know as what type you want to decode it, and you can with `read @Double`
2021-09-29 21:43:56 +0200 <tomsmeding> > (0.0 == -0.0, show 0.0 == show (-0.0))
2021-09-29 21:43:57 +0200 <lambdabot> (True,False)
2021-09-29 21:44:06 +0200 <boxscape_> or well
2021-09-29 21:44:07 +0200 <shapr> boxscape_: oh that's a good point
2021-09-29 21:44:26 +0200 <boxscape_> I guess technically for read in particular to work, regular numbers would also have to have ""
2021-09-29 21:44:28 +0200 <boxscape_> but close enough
2021-09-29 21:45:56 +0200 <tomsmeding> > round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) == 2 ^ 55 + 1
2021-09-29 21:45:57 +0200 <lambdabot> False
2021-09-29 21:46:06 +0200 <shapr> fromIntegral can bite you hard
2021-09-29 21:46:35 +0200_ht(~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
2021-09-29 21:46:46 +0200 <tomsmeding> > round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) :: Int == 2 ^ 55 + 1
2021-09-29 21:46:47 +0200 <lambdabot> error:
2021-09-29 21:46:47 +0200 <lambdabot> Not in scope: type constructor or class ‘==’error:
2021-09-29 21:46:47 +0200 <lambdabot> Not in scope: type constructor or class ‘^’error:
2021-09-29 21:46:57 +0200 <tomsmeding> > (round (fromIntegral (2 ^ 55 + 1 :: Int) :: Double) :: Int) == 2 ^ 55 + 1
2021-09-29 21:46:58 +0200 <lambdabot> False
2021-09-29 21:47:02 +0200ec(~ec@gateway/tor-sasl/ec)
2021-09-29 21:47:04 +0200 <tomsmeding> there, all types specified
2021-09-29 21:47:10 +0200 <tomsmeding> nice error message btw
2021-09-29 21:47:14 +0200 <shapr> heh
2021-09-29 21:47:17 +0200 <Guest41> well, probably not a fun question, but I'm struggling to write a parser that can consume a sequence of interspersed value types. Something like `A 1 2 "hello" True 5.6 False` I would need to store each list of values in a record field. I have no idea how to do this :P
2021-09-29 21:47:36 +0200 <tomsmeding> Guest41: do you have a parser that parses one such value?
2021-09-29 21:47:43 +0200 <Guest41> Yes I do
2021-09-29 21:47:51 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
2021-09-29 21:47:54 +0200 <tomsmeding> 'pValue `sepBy` spaces1' ?
2021-09-29 21:48:04 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 21:48:06 +0200 <Guest41> I have one parser foreach type I want to parse
2021-09-29 21:48:27 +0200 <shapr> do you know the order of the types in the string you want to parse?
2021-09-29 21:48:27 +0200 <Guest41> wait I asked the question wrong
2021-09-29 21:48:54 +0200 <shapr> Guest41: sounds like you are taking an especially fun class
2021-09-29 21:49:07 +0200 <Guest41> well I'm trying to write a parser for: https://github.com/kdl-org/kdl/blob/main/SPEC.md#node
2021-09-29 21:50:05 +0200 <Guest41> it's a doc language where a node can be in the form `node 123 { emptyNode; } prop=value`
2021-09-29 21:50:36 +0200 <Guest41> the spec insists you can have values, sub-nodes, and key-value pairs interspersed in any order
2021-09-29 21:50:57 +0200 <Guest41> so much for an XML-like language
2021-09-29 21:51:07 +0200 <tomsmeding> perhaps make an ADT, something like 'data Thing = ValueThing Value | SubNodeThing SubNode | KeyValueThing Key Value'
2021-09-29 21:51:22 +0200 <shapr> yeah, I like that
2021-09-29 21:51:29 +0200 <tomsmeding> and make a pThing = ValueThing <$> pValue <|> ...
2021-09-29 21:51:35 +0200 <tomsmeding> and then the sepBy thing :p
2021-09-29 21:51:50 +0200 <tomsmeding> and then build your record from the grouped values in the resulting list
2021-09-29 21:52:12 +0200tomsmedingfinds that linked description very hard to read
2021-09-29 21:52:37 +0200 <Guest41> I swear those algebraic data types are amazing
2021-09-29 21:52:45 +0200 <shapr> they are!
2021-09-29 21:52:56 +0200 <Guest41> such a simple one-liner to solve a rather tricky issue
2021-09-29 21:53:06 +0200 <shapr> but really you can say "this holds one of these things" or you can say "this holds several things"
2021-09-29 21:53:27 +0200hexfive(~eric@50.35.83.177)
2021-09-29 21:53:56 +0200 <shapr> Guest41: if it were me, I'd start by writing a parser that does some of the things and doesn't do the rest
2021-09-29 21:53:57 +0200 <Guest41> well only now do I see the latter
2021-09-29 21:54:08 +0200 <kuribas> Or you can make a record data ThingMaybe = ThingMaybe (Maybe Value) (Maybe SubNode) (Maybe KeyValue)
2021-09-29 21:54:10 +0200 <shapr> but that's because I get more motivation from incremental small successes
2021-09-29 21:54:23 +0200 <kuribas> and parse into (Endo ThingMaybe)
2021-09-29 21:54:42 +0200 <kuribas> then check in the end if all values are "Just".
2021-09-29 21:54:44 +0200 <Guest41> shapr: That's good idea for me too, because I will probably write some nonesense the first time around
2021-09-29 21:54:51 +0200 <shapr> I certainly do that
2021-09-29 21:55:46 +0200 <tomsmeding> kuribas: in this case probably replace Maybe by [] since there maybe be more than one
2021-09-29 21:55:46 +0200 <kuribas> I almost always start my code with nonsense.
2021-09-29 21:56:14 +0200 <tomsmeding> but that's kind of a clever solution; the sum type approach that I suggested is more accessible to a non-advanced haskeller, I think
2021-09-29 21:56:16 +0200 <kuribas> tomsmeding: in that case your ADT would be more useful.
2021-09-29 21:56:18 +0200doyougnu(~user@c-73-25-202-122.hsd1.or.comcast.net)
2021-09-29 21:57:18 +0200hexfive(~eric@50.35.83.177) (Client Quit)
2021-09-29 21:57:36 +0200tomsmedingwonders if someone has written a generic function that takes a [Thing] and returns a ThingList, but then using Generics so it works for all suhc types
2021-09-29 21:57:41 +0200 <tomsmeding> s/suhc/such/
2021-09-29 21:57:56 +0200 <tomsmeding> like generalised 'partition'
2021-09-29 21:58:03 +0200 <tomsmeding> um, 'partitionEithers'
2021-09-29 22:00:39 +0200kuribas(~user@ptr-25vy0i8j07s3q8yomww.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2021-09-29 22:01:17 +0200mcfrdy(~mcfrdy@user/mcfrdy) (Quit: quit)
2021-09-29 22:02:07 +0200mcfrdy(~mcfrdy@user/mcfrdy)
2021-09-29 22:02:26 +0200emf(~emf@2620:10d:c090:400::5:b24f)
2021-09-29 22:03:35 +0200emf(~emf@2620:10d:c090:400::5:b24f) (Client Quit)
2021-09-29 22:03:37 +0200dixie_(~dixie@real.wilbury.sk) (Ping timeout: 252 seconds)
2021-09-29 22:05:02 +0200oxide(~lambda@user/oxide)
2021-09-29 22:05:29 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 265 seconds)
2021-09-29 22:05:40 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-29 22:07:22 +0200juhp(~juhp@128.106.188.220)
2021-09-29 22:10:15 +0200dixie(~dixie@real.wilbury.sk)
2021-09-29 22:11:42 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net)
2021-09-29 22:12:54 +0200acidjnk_new(~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de)
2021-09-29 22:13:44 +0200acidjnk(~acidjnk@p200300d0c703cb532872c69d6a5a30e0.dip0.t-ipconnect.de)
2021-09-29 22:14:36 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
2021-09-29 22:14:42 +0200Morrow_(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 22:15:56 +0200yauhsien(~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds)
2021-09-29 22:16:21 +0200acidjnk_new3(~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-09-29 22:16:58 +0200mht(~mht@mht.wtf) (Ping timeout: 260 seconds)
2021-09-29 22:17:11 +0200connrs(~connrs@user/connrs) (Quit: ZNC 1.8.2 - https://znc.in)
2021-09-29 22:17:31 +0200connrs(~connrs@user/connrs)
2021-09-29 22:17:54 +0200acidjnk_new(~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-09-29 22:17:54 +0200Morrow_(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer)
2021-09-29 22:18:01 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 22:19:18 +0200sshine(~simon@hubris.eta.solutions) (Ping timeout: 260 seconds)
2021-09-29 22:19:18 +0200zzz(~yin@user/yin) (Ping timeout: 260 seconds)
2021-09-29 22:19:46 +0200rookie101(~rookie@207.154.204.166) (Ping timeout: 260 seconds)
2021-09-29 22:19:47 +0200janus(janus@anubis.0x90.dk) (Ping timeout: 240 seconds)
2021-09-29 22:21:20 +0200nrl^(~nrl@68.101.50.106) (Remote host closed the connection)
2021-09-29 22:22:11 +0200sshine(~simon@hubris.eta.solutions)
2021-09-29 22:23:44 +0200mht(~mht@mht.wtf)
2021-09-29 22:23:45 +0200zzz(~yin@user/yin)
2021-09-29 22:28:54 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-09-29 22:29:29 +0200 <Guest41> hmm, if I have a type like Int wrapped in some data constructor like Constructor Int, is there an "idiomatic" way to "flatten" it?
2021-09-29 22:30:11 +0200 <Guest41> sometthing like `flatten :: AnyConstructor a -> a`
2021-09-29 22:30:51 +0200 <Guest41> I know I can pattern match against what I need but I think this would be common (no?)
2021-09-29 22:30:51 +0200 <geekosaur> look at the Data.Coerce module?
2021-09-29 22:31:18 +0200 <geekosaur> otherwise no, there's no shortcut. but you can pattern match in more places than you might think
2021-09-29 22:31:33 +0200janus(janus@anubis.0x90.dk)
2021-09-29 22:32:11 +0200rookie101(~rookie@207.154.204.166)
2021-09-29 22:32:46 +0200slack1256(~slack1256@181.203.20.152) (Ping timeout: 252 seconds)
2021-09-29 22:34:24 +0200 <Guest41> geekosaur: the doc is unreadable for me ... how should I use coerce exactly?
2021-09-29 22:35:17 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 22:35:28 +0200 <geekosaur> given your example, a valid use of coerce would be coerce :: Constructor Int -> Int (not that you have to write the signature, that's just what a use of coerce under those circumstances would do)
2021-09-29 22:35:50 +0200 <geekosaur> it would also be able to go the other way, coerce on an Int can produce a Constructor Int
2021-09-29 22:38:44 +0200 <Guest41> oh no I made a silly mistake. Constructor isn't a type: `data Type = Constructor Int | Constructor1 String` ...
2021-09-29 22:39:09 +0200 <geekosaur> no, you need to pattern match for that
2021-09-29 22:39:23 +0200 <Guest41> no way to use coerce right?
2021-09-29 22:39:35 +0200 <geekosaur> nope
2021-09-29 22:39:46 +0200 <geekosaur> coerce operates on types, not data constructors
2021-09-29 22:40:11 +0200 <geekosaur> what type would a hypothetical dataCoerce have with respect to type Type?
2021-09-29 22:40:54 +0200 <awpr> you could make it a record constructor and use the field selector function. but then it's a partial function, with all the associated issues (like, you need to already know it's the right constructor, which means you probably already pattern-matched it, and thus already have the contents from the pattern match and don't need the selector function)
2021-09-29 22:43:05 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 22:43:38 +0200alzgh(~alzgh@user/alzgh) (Remote host closed the connection)
2021-09-29 22:44:00 +0200alzgh(~alzgh@user/alzgh)
2021-09-29 22:45:08 +0200 <Guest41> awpr: well in fact I already pattern matched it to exclude unwanted constructors, which means a field selector is just the right thing for me
2021-09-29 22:45:44 +0200 <Guest41> I hadn't written field selectors the first time I wrote the type definition and I seemingly forgot they exis
2021-09-29 22:45:55 +0200 <geekosaur> if you pattern matched it, it's trivial to extract the value at the same time
2021-09-29 22:46:01 +0200 <Guest41> it's always the simple things with haskell :^)
2021-09-29 22:46:02 +0200 <awpr> but if you're inside a pattern match for that constructor, then the contents are already in scope, unless you _'d the
2021-09-29 22:46:03 +0200 <awpr> m
2021-09-29 22:47:54 +0200 <Guest41> geekosaur: I used `filter isRightConstructor list` where isRightConstructor x = case x of RightConstructor _ -> True ....
2021-09-29 22:47:58 +0200Guest79(~Guest79@247.158-248-49.customer.lyse.net)
2021-09-29 22:48:01 +0200 <Guest79> Howdy
2021-09-29 22:48:01 +0200vysn(~vysn@user/vysn) (Ping timeout: 245 seconds)
2021-09-29 22:48:01 +0200mei(~mei@user/mei) (Quit: mei)
2021-09-29 22:48:18 +0200 <geekosaur> right, so just change the _ to a variable name and you have your value
2021-09-29 22:48:18 +0200 <Guest41> wait yes
2021-09-29 22:48:29 +0200 <Guest41> *facepalm*
2021-09-29 22:48:44 +0200 <awpr> try `mapMaybe` in place of `filter`
2021-09-29 22:48:51 +0200MQ-17J(~MQ-17J@35.50.53.58) (Ping timeout: 245 seconds)
2021-09-29 22:48:56 +0200 <Guest79> Can I ask a noob question? I found " foldl " and according to zvon.org it is Prelude, but when I run the examples in ghci I just get errors
2021-09-29 22:49:00 +0200 <Guest79> http://zvon.org/other/haskell/Outputprelude/foldl_f.html
2021-09-29 22:49:28 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e)
2021-09-29 22:50:46 +0200 <Guest41> awpr: Amazing!
2021-09-29 22:50:48 +0200geranim0(~geranim0@modemcable242.171-178-173.mc.videotron.ca)
2021-09-29 22:50:59 +0200 <Guest41> I should learn more about these functions
2021-09-29 22:52:18 +0200 <geekosaur> > foldl (/) 64 [4,2,4]
2021-09-29 22:52:23 +0200 <lambdabot> 2.0
2021-09-29 22:54:17 +0200 <Guest79> https://i.imgur.com/RZDUpzi.png
2021-09-29 22:54:20 +0200 <Guest79> oh god
2021-09-29 22:54:20 +0200 <Guest79> nevermind...
2021-09-29 22:54:20 +0200 <geekosaur> so what errors heh
2021-09-29 22:54:20 +0200 <Guest79> i guess i redefined the function in my .hs file
2021-09-29 22:54:20 +0200 <Guest79> hehe, ty tho
2021-09-29 22:54:20 +0200 <monochrom> This is why remote tech support is impossible.
2021-09-29 22:55:15 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 22:55:15 +0200 <Guest79> Well it helped me within 1 minute
2021-09-29 22:55:15 +0200 <monochrom> That's just rubber duck working.
2021-09-29 22:55:28 +0200 <Guest79> it's a bit cozier having cyber humans instead of rubber ducks tho
2021-09-29 22:55:37 +0200zer0bitz(~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-29 22:55:47 +0200 <monochrom> My TA and I came up with this crazy idea that we should distribute rubber ducks to our students.
2021-09-29 22:56:33 +0200awprwishes Haskell had a cute mascot like the Go-pher or the Rust crab
2021-09-29 22:57:12 +0200 <monochrom> I then came up with this next idea that the rubber ducks should contain smart circuitry to automatically escalate their questions to me when appropriate.
2021-09-29 22:57:24 +0200 <geekosaur> overengineered
2021-09-29 22:57:37 +0200 <monochrom> My TA pointed out "therefore it just needs the null circuitry".
2021-09-29 22:58:16 +0200 <monochrom> We had a Da Lamb mascot.
2021-09-29 22:58:25 +0200 <monochrom> But it didn't take off.
2021-09-29 22:58:48 +0200 <monochrom> We're now stuck with the bind-lambda logo.
2021-09-29 22:59:07 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-29 22:59:08 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-29 22:59:08 +0200wroathe(~wroathe@user/wroathe)
2021-09-29 22:59:24 +0200 <awpr> because it's an infix of lambda or because it's a popular ingredient in curry
2021-09-29 23:00:04 +0200 <monochrom> I think it began as simply the letter game of permuting "lambda"
2021-09-29 23:00:38 +0200 <monochrom> But I used to say "applicative is curried burrito"
2021-09-29 23:00:45 +0200 <monochrom> err "curry burrito"
2021-09-29 23:00:47 +0200 <awpr> just brainstorming more potential mascots here: C++thulhu
2021-09-29 23:01:03 +0200 <monochrom> https://currito.com/
2021-09-29 23:02:09 +0200emf(~emf@2620:10d:c090:400::5:2507)
2021-09-29 23:03:00 +0200lavaman(~lavaman@98.38.249.169)
2021-09-29 23:04:01 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 23:04:37 +0200 <boxscape_> awpr https://pbs.twimg.com/media/EXBVdPuWoAIt2K2?format=jpg&name=large
2021-09-29 23:05:02 +0200 <monochrom> Nice.
2021-09-29 23:06:47 +0200yinghua(~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7) (Ping timeout: 240 seconds)
2021-09-29 23:07:41 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-29 23:08:54 +0200yinghua(~yinghua@181.228.40.183)
2021-09-29 23:09:46 +0200jaitoon(~Jaitoon@2a02:c7f:a5f:1d00:f43d:e16d:5d40:5652)
2021-09-29 23:10:25 +0200 <Guest41> is that an unofficial mascot?
2021-09-29 23:10:51 +0200 <boxscape_> there's a big wiki page with logo suggestions where that was one https://wiki.haskell.org/Haskell_logos/New_logo_ideas
2021-09-29 23:11:03 +0200 <boxscape_> (before the current logo was chosen, though I believe it was born in that thread)
2021-09-29 23:13:40 +0200 <monochrom> The radioactivity one came from the 1st and worst monad analogy.
2021-09-29 23:13:46 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-09-29 23:14:14 +0200 <monochrom> Perhaps it's time you young lads hear the long-forgotten cautionary tale.
2021-09-29 23:14:36 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2021-09-29 23:15:06 +0200Lord_of_Life_Lord_of_Life
2021-09-29 23:15:44 +0200emf(~emf@2620:10d:c090:400::5:2507) (Quit: emf)
2021-09-29 23:17:03 +0200 <monochrom> Don Stewart (IRC nick dons) was a prominent contributor to Haskell libraries back then. You have him to thank for bytestring, plugins (not GHC plugin, rather the "can my haskell exe load a plugin dynamically?" kind), and others.
2021-09-29 23:18:34 +0200 <Hecate> monochrom: what's the state of plugins anyway?
2021-09-29 23:18:58 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 252 seconds)
2021-09-29 23:19:06 +0200 <monochrom> So one day he blogged that he finally thought up the perfect analogy for monad or the IO monad (I forgot which): a spacesuit with hazardous nuclear waste inside, you are outside so you are safe.
2021-09-29 23:19:18 +0200emf(~emf@2620:10d:c090:400::5:2507)
2021-09-29 23:19:22 +0200 <monochrom> I think miraculous it still builds today. I haven't really checked.
2021-09-29 23:19:51 +0200 <monochrom> The problem is that, if anything, you should be inside, the nuclear waste should be outside.
2021-09-29 23:20:12 +0200 <geekosaur> someone seems to be keeping it up to date
2021-09-29 23:20:13 +0200 <monochrom> And this analogy works for IO only, if anything.
2021-09-29 23:20:33 +0200 <monochrom> There is nothing unsafe about even the [] monad.
2021-09-29 23:21:02 +0200michalz(~michalz@185.246.204.72) (Remote host closed the connection)
2021-09-29 23:21:16 +0200SquidDev(~SquidDev@autoclave.squiddev.cc) (Quit: Bye!)
2021-09-29 23:21:41 +0200SquidDev(~SquidDev@autoclave.squiddev.cc)
2021-09-29 23:22:30 +0200emf(~emf@2620:10d:c090:400::5:2507) (Client Quit)
2021-09-29 23:23:34 +0200 <boxscape_> there's a whole wikibooks page using the nuclear waste analogy https://en.wikibooks.org/w/index.php?title=Haskell/Understanding_monads&oldid=933545
2021-09-29 23:23:38 +0200 <boxscape_> (removed in the current version)
2021-09-29 23:23:38 +0200oxide(~lambda@user/oxide) (Ping timeout: 265 seconds)
2021-09-29 23:24:12 +0200 <monochrom> Yeah good riddance.
2021-09-29 23:25:42 +0200 <monochrom> The Haskell Wikibook restored my faith in the wiki way of doing things because someone was rude enough to just delete a whole chapter wholesale.
2021-09-29 23:25:46 +0200 <monochrom> "rude"
2021-09-29 23:26:13 +0200 <monochrom> You look at the haskell wiki and you can still see that everyone is too polite to delete outdated, obsolete, wrong stuff.
2021-09-29 23:26:35 +0200 <monochrom> This politeness makes the whole thing useless.
2021-09-29 23:26:49 +0200 <geekosaur> never assume "too polite" when "doesn't give a damn" is sufficient
2021-09-29 23:26:59 +0200 <boxscape_> whose razor is that
2021-09-29 23:26:59 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2021-09-29 23:27:07 +0200 <geekosaur> which, sadly, is a recurrent disease of wikis
2021-09-29 23:27:08 +0200 <awpr> wow some of those logos are so bad they're actually amazing
2021-09-29 23:27:13 +0200 <awpr> "HELL ASK"
2021-09-29 23:27:28 +0200 <boxscape_> oh I didn't even notice that's an anagram when I saw the logo
2021-09-29 23:28:35 +0200 <monochrom> OK, I was speaking for and about myself. I gave a damn, but too afraid to delete.
2021-09-29 23:29:55 +0200pbrisbin(~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) (Ping timeout: 265 seconds)
2021-09-29 23:32:50 +0200emf(~emf@2620:10d:c090:400::5:2507)
2021-09-29 23:34:23 +0200Guest4176(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net)
2021-09-29 23:34:27 +0200cheater(~Username@user/cheater) (Ping timeout: 240 seconds)
2021-09-29 23:35:32 +0200mestre(~mestre@191.177.175.57)
2021-09-29 23:36:04 +0200emf(~emf@2620:10d:c090:400::5:2507) (Client Quit)
2021-09-29 23:36:28 +0200y04nn(~y04nn@193.32.127.238) (Ping timeout: 252 seconds)
2021-09-29 23:38:31 +0200Guest41(~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds)
2021-09-29 23:39:34 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 260 seconds)
2021-09-29 23:40:09 +0200Morrow(~Morrow@bzq-110-168-31-106.red.bezeqint.net)
2021-09-29 23:41:23 +0200cheater(~Username@user/cheater)
2021-09-29 23:44:14 +0200emf(~emf@2620:10d:c090:400::5:2507)
2021-09-29 23:45:03 +0200Guest2934(~Guest29@206.12.14.124)
2021-09-29 23:47:44 +0200MQ-17J(~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer)
2021-09-29 23:48:42 +0200MQ-17J(~MQ-17J@d192-24-122-179.try.wideopenwest.com)
2021-09-29 23:48:57 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2021-09-29 23:49:32 +0200makrus(~makrus@206.12.14.124)
2021-09-29 23:50:22 +0200makrus(~makrus@206.12.14.124) ()
2021-09-29 23:50:32 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection)
2021-09-29 23:51:39 +0200 <sclv> monochrom: i had no idea that dons was responsible for the nuclear waste metaphor, lol
2021-09-29 23:52:08 +0200 <monochrom> :)
2021-09-29 23:52:17 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
2021-09-29 23:52:53 +0200 <Hecate> awpr: oh yeah it's fantastic
2021-09-29 23:53:03 +0200Null_A(~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e)
2021-09-29 23:53:21 +0200 <boxscape_> (https://wiki.haskell.org/Monad_tutorials_timeline claims Eric Kow came up with space suits and Paul Johnson with nuclear waste)
2021-09-29 23:55:12 +0200Guest79(~Guest79@247.158-248-49.customer.lyse.net) (Quit: Client closed)
2021-09-29 23:55:14 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-29 23:57:25 +0200 <monochrom> Ah, the one I saw was "2007-01 Think of a monad - Don Stewart (reposted on Eric Kow's blog)"
2021-09-29 23:57:37 +0200max22-(~maxime@2a01cb088335980073a4b4db0ef417b5.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-29 23:57:59 +0200y04nn(~y04nn@193.32.127.238)
2021-09-29 23:59:15 +0200 <monochrom> I admit error in attributing the 1st monad analogy.
2021-09-29 23:59:29 +0200Guest2934(~Guest29@206.12.14.124) (Quit: Client closed)