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 +0200 | sm | is 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 +0200 | MQ-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 +0200 | CnnibisIndica | (~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 +0200 | MQ-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 +0200 | eggplantade | (~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 +0200 | nehsou^ | (~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 +0200 | vysn | (~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 +0200 | pavonia | (~user@user/siracusa) |
2021-09-29 00:25:58 +0200 | tromp | (~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 +0200 | pzanco | (~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 +0200 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-09-29 00:30:28 +0200 | pzanco | (~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 +0200 | max22- | (~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 +0200 | merijn | (~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 +0200 | jess | (~jess@libera/staff/jess) |
2021-09-29 00:37:40 +0200 | Hydrazer | (~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 +0200 | emf | (~emf@163.114.132.6) (Ping timeout: 252 seconds) |
2021-09-29 00:45:51 +0200 | rtjure | (~rtjure@bras-79-132-17-74.comnet.bg) (Ping timeout: 268 seconds) |
2021-09-29 00:45:53 +0200 | norskalm | (~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 +0200 | Hydrazer | (~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 +0200 | Tuplanolla | (~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 +0200 | vicfred | (~vicfred@user/vicfred) |
2021-09-29 00:56:44 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-29 00:58:01 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 00:58:05 +0200 | chris | Guest557 |
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 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 01:01:27 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 01:01:27 +0200 | wroathe | (~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 +0200 | eggplantade | (~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 +0200 | wroathe | (~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 +0200 | haykam2 | (~haykam@static.100.2.21.65.clients.your-server.de) (Changing host) |
2021-09-29 01:08:29 +0200 | haykam2 | (~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 +0200 | merijn | (~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 +0200 | werneta | (~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 +0200 | haykam2 | (~haykam@user/haykam) (Remote host closed the connection) |
2021-09-29 01:24:14 +0200 | haykam | (~haykam@user/haykam) |
2021-09-29 01:24:14 +0200 | haykam | (~haykam@user/haykam) (Read error: Connection reset by peer) |
2021-09-29 01:24:28 +0200 | haykam | (~haykam@user/haykam) |
2021-09-29 01:24:28 +0200 | haykam | (~haykam@user/haykam) (Read error: Connection reset by peer) |
2021-09-29 01:24:45 +0200 | haykam | (~haykam@user/haykam) |
2021-09-29 01:24:45 +0200 | haykam | (~haykam@user/haykam) (Read error: Connection reset by peer) |
2021-09-29 01:24:58 +0200 | haykam | (~haykam@user/haykam) |
2021-09-29 01:24:58 +0200 | haykam | (~haykam@user/haykam) (Read error: Connection reset by peer) |
2021-09-29 01:25:11 +0200 | haykam | (~haykam@user/haykam) |
2021-09-29 01:25:11 +0200 | haykam | (~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 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-29 01:32:39 +0200 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
2021-09-29 01:32:42 +0200 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds) |
2021-09-29 01:33:19 +0200 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
2021-09-29 01:34:05 +0200 | acidjnk_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 +0200 | Robin_Jadoul | (~Robin_Jad@152.67.64.160) (Read error: Connection reset by peer) |
2021-09-29 01:44:59 +0200 | Robin_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 +0200 | mei | (~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 +0200 | yauhsien | (~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 +0200 | Guest7240 | (~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 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
2021-09-29 01:55:50 +0200 | Franciman | (~Franciman@mx1.fracta.dev) (Ping timeout: 260 seconds) |
2021-09-29 01:56:07 +0200 | pierrot | (~pi@user/pierrot) (Ping timeout: 240 seconds) |
2021-09-29 01:56:41 +0200 | Franciman | (~Franciman@mx1.fracta.dev) |
2021-09-29 01:56:41 +0200 | zebrag | (~chris@user/zebrag) |
2021-09-29 01:57:28 +0200 | pierrot | (~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 +0200 | jlamothe | (~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 +0200 | tabaqui | (~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 +0200 | monochrom | is 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 +0200 | myShoggoth | (~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 +0200 | pierrot | (~pi@user/pierrot) (Ping timeout: 246 seconds) |
2021-09-29 02:14:43 +0200 | <koala_man> | huh interesting |
2021-09-29 02:14:44 +0200 | pierrot_ | (~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 +0200 | Null_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 +0200 | Null_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 +0200 | pretty_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 +0200 | lavaman | (~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 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 246 seconds) |
2021-09-29 02:50:06 +0200 | FinnElija | (~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 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-09-29 02:52:25 +0200 | waleee | (~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 +0200 | alzgh | (~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 +0200 | tabaqui | (~root@46.39.45.162) (Quit: WeeChat 3.2) |
2021-09-29 03:02:08 +0200 | Psybur | (~Psybur@mobile-166-170-32-197.mycingular.net) (Remote host closed the connection) |
2021-09-29 03:07:17 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 03:07:24 +0200 | a6a45081-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 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-29 03:10:47 +0200 | <monochrom> | Yes. Parse error. |
2021-09-29 03:13:26 +0200 | Robin_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 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-29 03:17:07 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-29 03:17:07 +0200 | MQ-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 +0200 | myShoggoth | (~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 +0200 | xff0x | (~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 +0200 | MQ-17J | (~MQ-17J@8.6.144.233) |
2021-09-29 03:22:44 +0200 | xff0x | (~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 +0200 | raehik | (~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 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 03:33:51 +0200 | lavaman | (~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 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-09-29 03:41:03 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 03:41:03 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 03:41:03 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-29 03:42:11 +0200 | Null_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 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
2021-09-29 03:46:08 +0200 | <Axman6> | matches* |
2021-09-29 03:47:05 +0200 | goepsilongo | (~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 +0200 | waleee | (~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 +0200 | yinghua | (~yinghua@2800:2121:1400:1db:c8ff:6a08:d6d8:71db) (Quit: Leaving) |
2021-09-29 03:54:37 +0200 | fef | (~thedawn@user/thedawn) |
2021-09-29 03:54:39 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-09-29 03:55:34 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 03:55:34 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 03:55:34 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-29 03:56:03 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 03:59:32 +0200 | alx741 | (~alx741@186.178.109.237) (Ping timeout: 252 seconds) |
2021-09-29 03:59:43 +0200 | jespada | (~jespada@2803:9800:9842:7a62:8558:368:788c:6dc6) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-09-29 04:00:53 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 265 seconds) |
2021-09-29 04:04:41 +0200 | Carro | (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) |
2021-09-29 04:05:28 +0200 | td_ | (~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 +0200 | td_ | (~td@muedsl-82-207-238-213.citykom.de) |
2021-09-29 04:12:25 +0200 | alx741 | (~alx741@186.178.109.205) |
2021-09-29 04:12:36 +0200 | MQ-17J | (~MQ-17J@8.6.144.233) (Ping timeout: 245 seconds) |
2021-09-29 04:23:32 +0200 | alx741 | (~alx741@186.178.109.205) (Quit: alx741) |
2021-09-29 04:24:00 +0200 | seydar | (~seydar@154-27-113-252.starry-inc.net) (Quit: leaving) |
2021-09-29 04:28:51 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-11dd-67ac-2a26-67df.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 04:28:51 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com) |
2021-09-29 04:30:28 +0200 | DigitalKiwi | (~kiwi@192.241.157.119) (Quit: quite.) |
2021-09-29 04:31:15 +0200 | DigitalKiwi | (~kiwi@192.241.157.119) |
2021-09-29 04:40:00 +0200 | doyougnu | (~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 +0200 | Carro | (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed) |
2021-09-29 04:51:54 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 268 seconds) |
2021-09-29 04:56:46 +0200 | pooryorick | (~pooryoric@87-119-174-173.tll.elisa.ee) (Ping timeout: 260 seconds) |
2021-09-29 04:59:15 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 05:01:59 +0200 | pooryorick | (~pooryoric@87-119-174-173.tll.elisa.ee) |
2021-09-29 05:02:36 +0200 | Carro | (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) |
2021-09-29 05:03:41 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 264 seconds) |
2021-09-29 05:04:17 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 264 seconds) |
2021-09-29 05:05:29 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-09-29 05:16:45 +0200 | zebrag | (~chris@user/zebrag) (Remote host closed the connection) |
2021-09-29 05:18:11 +0200 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds) |
2021-09-29 05:29:36 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-09-29 05:35:31 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds) |
2021-09-29 05:35:47 +0200 | agoraphobic_ | (~agoraphob@ip11-173.bon.riksnet.se) (Ping timeout: 252 seconds) |
2021-09-29 05:36:18 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) |
2021-09-29 05:37:18 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 05:38:06 +0200 | tommd | (~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 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
2021-09-29 05:46:57 +0200 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) |
2021-09-29 05:47:40 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-29 05:51:01 +0200 | agoraphobic | (~agoraphob@ip11-173.bon.riksnet.se) |
2021-09-29 05:52:32 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
2021-09-29 06:05:52 +0200 | pzuidhoek | (~textual@82-95-239-200.ip.xs4all.nl) |
2021-09-29 06:10:37 +0200 | pzuidhoek | (~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com) |
2021-09-29 06:11:52 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-09-29 06:14:50 +0200 | vysn | (~vysn@user/vysn) |
2021-09-29 06:15:24 +0200 | Guest20 | (~textual@82-95-239-200.ip.xs4all.nl) |
2021-09-29 06:19:00 +0200 | Guest20 | (~textual@82-95-239-200.ip.xs4all.nl) (Client Quit) |
2021-09-29 06:19:36 +0200 | Guest20 | (~textual@82-95-239-200.ip.xs4all.nl) |
2021-09-29 06:21:16 +0200 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-09-29 06:23:39 +0200 | zaquest | (~notzaques@5.128.210.178) (Remote host closed the connection) |
2021-09-29 06:24:43 +0200 | zaquest | (~notzaques@5.128.210.178) |
2021-09-29 06:26:41 +0200 | tommd | (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 246 seconds) |
2021-09-29 06:31:39 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-09-29 06:35:57 +0200 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-09-29 06:38:33 +0200 | Carro | (~Carro@2806:261:40a:1389:407c:dfb9:3c44:5688) (Quit: Client closed) |
2021-09-29 06:42:36 +0200 | oxide | (~lambda@user/oxide) |
2021-09-29 06:44:40 +0200 | Guest20 | (~textual@82-95-239-200.ip.xs4all.nl) (Quit: Textual IRC Client: www.textualapp.com) |
2021-09-29 06:56:18 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 06:58:01 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds) |
2021-09-29 06:59:59 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) |
2021-09-29 07:00:24 +0200 | fef | (~thedawn@user/thedawn) (Quit: Leaving) |
2021-09-29 07:00:31 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-09-29 07:00:33 +0200 | iridium__ | (~iridium@223.235.192.51) |
2021-09-29 07:04:50 +0200 | notzmv | (~zmv@user/notzmv) (Ping timeout: 246 seconds) |
2021-09-29 07:16:38 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-29 07:17:50 +0200 | MidAutumnMoon | (~MidAutumn@user/midautumnmoon) |
2021-09-29 07:22:58 +0200 | Andrew_ | (~andrew@user/andrewyu) |
2021-09-29 07:23:35 +0200 | AndrewYu | (~andrew@user/andrewyu) (Ping timeout: 252 seconds) |
2021-09-29 07:27:07 +0200 | mei | (~mei@user/mei) |
2021-09-29 07:38:05 +0200 | sndr | (~sander@user/sander) |
2021-09-29 07:38:26 +0200 | sander | (~sander@user/sander) (Ping timeout: 252 seconds) |
2021-09-29 07:38:48 +0200 | sndr | sander |
2021-09-29 07:46:07 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-09-29 07:56:40 +0200 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-29 07:59:30 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds) |
2021-09-29 08:00:09 +0200 | vicfred | (~vicfred@user/vicfred) (Quit: Leaving) |
2021-09-29 08:00:13 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-29 08:01:26 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 08:05:59 +0200 | ub | (~Thunderbi@178.115.72.201.wireless.dyn.drei.com) |
2021-09-29 08:07:50 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 08:10:19 +0200 | a6a45081-2b83 | (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection) |
2021-09-29 08:11:22 +0200 | michalz | (~michalz@185.246.204.33) |
2021-09-29 08:13:20 +0200 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-09-29 08:19:27 +0200 | emf | (~emf@2620:10d:c090:400::5:8ff1) |
2021-09-29 08:19:41 +0200 | img | (~img@user/img) |
2021-09-29 08:26:14 +0200 | emf | (~emf@2620:10d:c090:400::5:8ff1) (Quit: emf) |
2021-09-29 08:26:32 +0200 | emf | (~emf@2620:10d:c090:400::5:8ff1) |
2021-09-29 08:29:20 +0200 | qbt | (~edun@user/edun) |
2021-09-29 08:32:47 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-29 08:37:14 +0200 | lavaman | (~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 +0200 | JeSCaLis23-F | (~rizon@188.119.22.153) |
2021-09-29 08:42:08 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
2021-09-29 08:43:05 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-09-29 08:43:23 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2021-09-29 08:46:04 +0200 | JeSCaLis23-F | (~rizon@188.119.22.153) (Client Quit) |
2021-09-29 08:47:51 +0200 | phma | (~phma@host-67-44-208-197.hnremote.net) (Read error: Connection reset by peer) |
2021-09-29 08:48:34 +0200 | phma | (~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 +0200 | cfricke | (~cfricke@user/cfricke) |
2021-09-29 09:01:36 +0200 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-09-29 09:05:56 +0200 | emf | (~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 +0200 | gehmehgeh | (~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 +0200 | chele | (~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 +0200 | notzmv | (~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 +0200 | nehsou^ | (~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 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:54f2:236a:7bb5:55bf) (Ping timeout: 245 seconds) |
2021-09-29 09:22:54 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) |
2021-09-29 09:23:07 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-09-29 09:24:52 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:6beb:5bcb:e1d4:764) |
2021-09-29 09:26:08 +0200 | rtjure | (~rtjure@bras-79-132-17-74.comnet.bg) |
2021-09-29 09:26:35 +0200 | ub | (~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 246 seconds) |
2021-09-29 09:28:29 +0200 | emf | (~emf@2620:10d:c090:400::5:8ff1) |
2021-09-29 09:28:46 +0200 | nrl^ | (~nrl@68.101.50.106) |
2021-09-29 09:35:58 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 09:40:53 +0200 | yauhsien | (~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 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 09:56:52 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de) |
2021-09-29 09:56:54 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-09-29 09:59:02 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 265 seconds) |
2021-09-29 09:59:36 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2021-09-29 09:59:38 +0200 | emf | (~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 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 10:00:13 +0200 | iridium__ | (~iridium@223.235.192.51) () |
2021-09-29 10:00:46 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2021-09-29 10:02:23 +0200 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) |
2021-09-29 10:03:10 +0200 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-09-29 10:05:20 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
2021-09-29 10:05:50 +0200 | acidjnk_new | (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) |
2021-09-29 10:05:55 +0200 | hendursa1 | (~weechat@user/hendursaga) |
2021-09-29 10:08:17 +0200 | <c_wraith> | only sanity |
2021-09-29 10:08:54 +0200 | hendursaga | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-09-29 10:09:14 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c703cb53f8ed89eaeab7169f.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2021-09-29 10:12:16 +0200 | NinjaTrappeur | (~ninja@user/ninjatrappeur) (Quit: WeeChat 3.1) |
2021-09-29 10:13:07 +0200 | NinjaTrappeur | (~ninja@user/ninjatrappeur) |
2021-09-29 10:16:28 +0200 | gehmehgeh | (~user@user/gehmehgeh) |
2021-09-29 10:16:36 +0200 | Heisen | (~Heisen@77.240.67.20) |
2021-09-29 10:17:10 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-29 10:17:33 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-29 10:18:54 +0200 | hnOsmium0001 | (uid453710@id-453710.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-29 10:21:42 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-09-29 10:22:17 +0200 | siraben | (~siraben@user/siraben) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | MatrixTravelerbo | (~voyagert2@2001:470:69fc:105::22) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | Arathorn | (~arathorn@2001:470:69fc:105::1f) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | kadoban | (~kadoban@user/kadoban) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | peddie | (~peddie@2001:470:69fc:105::25d) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | psydroid | (~psydroid@user/psydroid) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:17 +0200 | Las[m] | (~lasmatrix@2001:470:69fc:105::74e) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | SimonWeiss[m] | (~weiss-dma@2001:470:69fc:105::bebd) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | fgaz | (~fgaz@2001:470:69fc:105::842) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | jophish | (~jophish@2001:470:69fc:105::670) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | vaibhavsagar[m] | (~vaibhavsa@2001:470:69fc:105::ffe) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | maralorn | (~maralorn@2001:470:69fc:105::251) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | kar1 | (~kar1@2001:470:69fc:105::c308) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | PotatoHatsue | (~berberman@2001:470:69fc:105::b488) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | marinelli[m] | (~marinelli@2001:470:69fc:105::2d8) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | ericson2314 | (~ericson23@2001:470:69fc:105::70c) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | zfnmxt | (~zfnmxtzfn@user/zfnmxt) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | carmysilna | (~brightly-@2001:470:69fc:105::2190) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | hsiktas[m] | (~hsiktasma@2001:470:69fc:105::30d4) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | maerwald[m] | (~maerwaldm@2001:470:69fc:105::1ee) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | Morrow[m] | (~morrowmma@2001:470:69fc:105::1d0) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | amesgen[m] | (~amesgenm]@2001:470:69fc:105::82b) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | Ollie[m] | (~ollieocha@2001:470:69fc:105::41a5) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | SawyerBergeron[m | (~sawyerber@2001:470:69fc:105::3036) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | moats | (~oats@user/oats) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | aidy | (~aidy@2001:470:69fc:105::c7b4) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | schuelermine[m] | (~schuelerm@user/schuelermine) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | bitonic | (~bitonic@2001:470:69fc:105::1812) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | soft | (~soft-matr@2001:470:69fc:105::c75) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | thomasjm[m] | (~thomasjmm@2001:470:69fc:105::c6d9) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | oak- | (~oakuniver@2001:470:69fc:105::fcd) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | bakinonion[m] | (~bakinonio@2001:470:69fc:105::ddb3) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | erinvanderveen[m | (~erinvande@2001:470:69fc:105::e8f3) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | zwro[m] | (~zwromatri@2001:470:69fc:105::1d4) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:18 +0200 | jchia[m] | (~jchiamatr@2001:470:69fc:105::c50b) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | Magnus[m] | (~magthetch@2001:470:69fc:105::d1a7) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | wysteriary[m] | (~wysteriar@2001:470:69fc:105::a42e) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | Topik[m] | (~topikmatr@2001:470:69fc:105::a082) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | cloudy | (~cloudy@2001:470:69fc:105::50c0) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | srid[m] | (~sridmatri@2001:470:69fc:105::1c2) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | dualinverter[m] | (~dualinver@2001:470:69fc:105::16a7) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | ManofLetters[m] | (~manoflett@2001:470:69fc:105::3be) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | hjulle[m] | (~hjullemat@2001:470:69fc:105::1dd) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:19 +0200 | unclechu | (~unclechu@2001:470:69fc:105::354) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:20 +0200 | reza[m] | (~rezaphone@2001:470:69fc:105::3eda) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:21 +0200 | fcortesi | (~fcortesi@2001:470:69fc:105::f3a9) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:24 +0200 | shiraeeshi[m] | (~shiraeesh@2001:470:69fc:105::1:77) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:24 +0200 | commuswift[m] | (~commuswif@2001:470:69fc:105::e862) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:26 +0200 | jesser[m] | (~jessermat@2001:470:69fc:105::d5ae) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:26 +0200 | stoicswe[m] | (~deadlette@2001:470:69fc:105::d277) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:27 +0200 | smichel17[m] | (~smichel17@2001:470:69fc:105::2d32) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | craige[m] | (~craigemcw@2001:470:69fc:105::35f1) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | ixlun | (~ixlun@2001:470:69fc:105::41b3) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | alexfmpe[m] | (~alexfmpem@2001:470:69fc:105::38ba) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | afotgkmnzj7asv3r | (~afotgkmnz@2001:470:69fc:105::c24b) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | jakefromstatefar | (~jakefroms@2001:470:69fc:105::15ef) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | unrooted | (~unrooted@2001:470:69fc:105::a4a) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | asdofindia-m | (~akshaymat@2001:470:69fc:105::831) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | dexmad[m] | (~dexmadmat@2001:470:69fc:105::e056) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | ongy[m] | (~ongymatri@2001:470:69fc:105::5018) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | fendor[m] | (~fendormat@2001:470:69fc:105::fcbd) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:28 +0200 | hsek[m] | (~hsekmatri@2001:470:69fc:105::d18f) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | hughjfchen[m] | (~hughjfche@2001:470:69fc:105::c29d) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | jneira[m] | (~jneiramat@2001:470:69fc:105::d729) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | infinisil | (~infinisil@2001:470:69fc:105::ff8) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | Tisoxin | (~ikosit@user/ikosit) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | cdsmith | (~cdsmithma@2001:470:69fc:105::284) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | ormaaj | (~ormaaj@user/ormaaj) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:29 +0200 | rednaZ[m] | (~r3dnazmat@2001:470:69fc:105::ba70) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | ServerStatsDisco | (~serversta@2001:470:69fc:105::1a) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | sm | (~sm@plaintextaccounting/sm) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | Christoph[m] | (~hpotsirhc@2001:470:69fc:105::2ff8) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | lwe[m] | (~dendrumat@2001:470:69fc:105::2f9b) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | Drew[m] | (~drewefenw@2001:470:69fc:105::c8c4) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:30 +0200 | IgnatInsarov[m] | (~kindaroma@2001:470:69fc:105::f5d9) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | ru0mad[m] | (~ru0madmat@2001:470:69fc:105::9b2) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | OndejSkup[m] | (~mimivxmat@2001:470:69fc:105::c300) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | bb010g | (~bb010g@2001:470:69fc:105::9a5) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | denbrahe[m] | (~denbrahem@2001:470:69fc:105::19c0) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | Deewiant | (~deewiant@2001:470:69fc:105::2fd3) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:32 +0200 | sky_lounge[m] | (~skylounge@2001:470:69fc:105::efa6) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | quantum | (~quantum@user/quantum/x-8556232) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | monadfritz[m] | (~ahdytmatr@2001:470:69fc:105::e1f1) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | fakehacker[m] | (~fakehacke@2001:470:69fc:105::b5f0) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | Orbstheorem | (~orbstheor@2001:470:69fc:105::a56) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | kevin[m]1 | (~pnotequal@2001:470:69fc:105::a54) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | YoungChiefBTW | (~youngchie@user/youngchiefbtw) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | reddishblue[m] | (~reddishbl@2001:470:69fc:105::21eb) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | justosophy[m] | (~justosoph@2001:470:69fc:105::572f) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | sam[m]1 | (~sammtopoi@2001:470:69fc:105::e887) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | the-coot[m] | (~the-cootm@2001:470:69fc:105::95f) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | Deide | (~deide@user/deide) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:33 +0200 | rosariopulella[m | (~rosariopu@2001:470:69fc:105::a57) (Quit: Bridge terminating on SIGTERM) |
2021-09-29 10:22:41 +0200 | acidjnk_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 +0200 | acidjnk_new | (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2021-09-29 10:25:44 +0200 | jakefromstatefar | (~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 +0200 | maerwald[m] | (~maerwaldm@2001:470:69fc:105::1ee) |
2021-09-29 10:27:11 +0200 | jchia[m] | (~jchiamatr@2001:470:69fc:105::c50b) |
2021-09-29 10:27:11 +0200 | MatrixTravelerbo | (~voyagert2@2001:470:69fc:105::22) |
2021-09-29 10:27:23 +0200 | dualinverter[m] | (~dualinver@2001:470:69fc:105::16a7) |
2021-09-29 10:27:23 +0200 | fgaz | (~fgaz@2001:470:69fc:105::842) |
2021-09-29 10:27:23 +0200 | peddie | (~peddie@2001:470:69fc:105::25d) |
2021-09-29 10:27:23 +0200 | cdsmith | (~cdsmithma@2001:470:69fc:105::284) |
2021-09-29 10:27:23 +0200 | Morrow[m] | (~morrowmma@2001:470:69fc:105::1d0) |
2021-09-29 10:27:35 +0200 | thomasjm[m] | (~thomasjmm@2001:470:69fc:105::c6d9) |
2021-09-29 10:27:35 +0200 | hsek[m] | (~hsekmatri@2001:470:69fc:105::d18f) |
2021-09-29 10:27:35 +0200 | ru0mad[m] | (~ru0madmat@2001:470:69fc:105::9b2) |
2021-09-29 10:27:50 +0200 | bb010g | (~bb010g@2001:470:69fc:105::9a5) |
2021-09-29 10:27:50 +0200 | vaibhavsagar[m] | (~vaibhavsa@2001:470:69fc:105::ffe) |
2021-09-29 10:27:50 +0200 | Las[m] | (~lasmatrix@2001:470:69fc:105::74e) |
2021-09-29 10:27:50 +0200 | ServerStatsDisco | (~serversta@2001:470:69fc:105::1a) |
2021-09-29 10:27:50 +0200 | amesgen[m] | (~amesgenm]@2001:470:69fc:105::82b) |
2021-09-29 10:27:50 +0200 | the-coot[m] | (~the-cootm@2001:470:69fc:105::95f) |
2021-09-29 10:27:50 +0200 | moats | (~oats@user/oats) |
2021-09-29 10:28:02 +0200 | soft | (~soft-matr@2001:470:69fc:105::c75) |
2021-09-29 10:28:02 +0200 | zfnmxt | (~zfnmxtzfn@2001:470:69fc:105::2b32) |
2021-09-29 10:28:16 +0200 | oak- | (~oakuniver@2001:470:69fc:105::fcd) |
2021-09-29 10:28:16 +0200 | kadoban | (~kadoban@user/kadoban) |
2021-09-29 10:28:16 +0200 | bitonic | (~bitonic@2001:470:69fc:105::1812) |
2021-09-29 10:28:16 +0200 | ericson2314 | (~ericson23@2001:470:69fc:105::70c) |
2021-09-29 10:28:17 +0200 | jophish | (~jophish@2001:470:69fc:105::670) |
2021-09-29 10:28:17 +0200 | Arathorn | (~arathorn@2001:470:69fc:105::1f) |
2021-09-29 10:28:17 +0200 | Ollie[m] | (~ollieocha@2001:470:69fc:105::41a5) |
2021-09-29 10:28:17 +0200 | PotatoHatsue | (~berberman@2001:470:69fc:105::b488) |
2021-09-29 10:28:17 +0200 | ixlun | (~ixlun@2001:470:69fc:105::41b3) |
2021-09-29 10:28:17 +0200 | unclechu | (~unclechu@2001:470:69fc:105::354) |
2021-09-29 10:28:31 +0200 | Deewiant | (~deewiant@2001:470:69fc:105::2fd3) |
2021-09-29 10:28:31 +0200 | unrooted | (~unrooted@2001:470:69fc:105::a4a) |
2021-09-29 10:28:31 +0200 | rednaZ[m] | (~r3dnazmat@2001:470:69fc:105::ba70) |
2021-09-29 10:28:31 +0200 | maralorn | (~maralorn@2001:470:69fc:105::251) |
2021-09-29 10:28:32 +0200 | SimonWeiss[m] | (~weiss-dma@2001:470:69fc:105::bebd) |
2021-09-29 10:28:32 +0200 | denbrahe[m] | (~denbrahem@2001:470:69fc:105::19c0) |
2021-09-29 10:28:32 +0200 | lwe[m] | (~dendrumat@2001:470:69fc:105::2f9b) |
2021-09-29 10:28:44 +0200 | jesser[m] | (~jessermat@2001:470:69fc:105::d5ae) |
2021-09-29 10:28:59 +0200 | erinvanderveen[m | (~erinvande@2001:470:69fc:105::e8f3) |
2021-09-29 10:29:20 +0200 | reza[m] | (~rezaphone@2001:470:69fc:105::3eda) |
2021-09-29 10:29:20 +0200 | quantum | (~quantum@user/quantum/x-8556232) |
2021-09-29 10:29:20 +0200 | marinelli[m] | (~marinelli@2001:470:69fc:105::2d8) |
2021-09-29 10:29:20 +0200 | hsiktas[m] | (~hsiktasma@2001:470:69fc:105::30d4) |
2021-09-29 10:29:33 +0200 | Orbstheorem | (~orbstheor@2001:470:69fc:105::a56) |
2021-09-29 10:29:45 +0200 | craige[m] | (~craigemcw@2001:470:69fc:105::35f1) |
2021-09-29 10:29:57 +0200 | afotgkmnzj7asv3r | (~afotgkmnz@2001:470:69fc:105::c24b) |
2021-09-29 10:29:58 +0200 | schuelermine[m] | (~schuelerm@user/schuelermine) |
2021-09-29 10:29:58 +0200 | sm | (~sm@plaintextaccounting/sm) |
2021-09-29 10:29:59 +0200 | reddishblue[m] | (~reddishbl@2001:470:69fc:105::21eb) |
2021-09-29 10:30:11 +0200 | justosophy[m] | (~justosoph@2001:470:69fc:105::572f) |
2021-09-29 10:30:11 +0200 | kevin[m]1 | (~pnotequal@2001:470:69fc:105::a54) |
2021-09-29 10:30:11 +0200 | Deide | (~deide@user/deide) |
2021-09-29 10:30:23 +0200 | fakehacker[m] | (~fakehacke@2001:470:69fc:105::b5f0) |
2021-09-29 10:30:23 +0200 | hughjfchen[m] | (~hughjfche@2001:470:69fc:105::c29d) |
2021-09-29 10:30:35 +0200 | IgnatInsarov[m] | (~kindaroma@2001:470:69fc:105::f5d9) |
2021-09-29 10:30:35 +0200 | srid[m] | (~sridmatri@2001:470:69fc:105::1c2) |
2021-09-29 10:30:35 +0200 | psydroid | (~psydroid@user/psydroid) |
2021-09-29 10:30:47 +0200 | wysteriary[m] | (~wysteriar@2001:470:69fc:105::a42e) |
2021-09-29 10:30:47 +0200 | Christoph[m] | (~hpotsirhc@2001:470:69fc:105::2ff8) |
2021-09-29 10:30:47 +0200 | zwro[m] | (~zwromatri@2001:470:69fc:105::1d4) |
2021-09-29 10:30:59 +0200 | stoicswe[m] | (~deadlette@2001:470:69fc:105::d277) |
2021-09-29 10:31:11 +0200 | sam[m]1 | (~sammtopoi@2001:470:69fc:105::e887) |
2021-09-29 10:31:23 +0200 | Topik[m] | (~topikmatr@2001:470:69fc:105::a082) |
2021-09-29 10:31:23 +0200 | OndejSkup[m] | (~mimivxmat@2001:470:69fc:105::c300) |
2021-09-29 10:31:23 +0200 | kar1 | (~kar1@2001:470:69fc:105::c308) |
2021-09-29 10:31:23 +0200 | ongy[m] | (~ongymatri@2001:470:69fc:105::5018) |
2021-09-29 10:31:23 +0200 | YoungChiefBTW | (~youngchie@2001:470:69fc:105::214c) |
2021-09-29 10:31:23 +0200 | alexfmpe[m] | (~alexfmpem@2001:470:69fc:105::38ba) |
2021-09-29 10:31:23 +0200 | asdofindia-m | (~akshaymat@2001:470:69fc:105::831) |
2021-09-29 10:31:23 +0200 | ormaaj | (~ormaaj@user/ormaaj) |
2021-09-29 10:31:23 +0200 | hjulle[m] | (~hjullemat@2001:470:69fc:105::1dd) |
2021-09-29 10:31:37 +0200 | infinisil | (~infinisil@2001:470:69fc:105::ff8) |
2021-09-29 10:31:37 +0200 | Drew[m] | (~drewefenw@2001:470:69fc:105::c8c4) |
2021-09-29 10:31:37 +0200 | jneira[m] | (~jneiramat@2001:470:69fc:105::d729) |
2021-09-29 10:31:37 +0200 | Magnus[m] | (~magthetch@2001:470:69fc:105::d1a7) |
2021-09-29 10:31:37 +0200 | siraben | (~siraben@user/siraben) |
2021-09-29 10:31:49 +0200 | dexmad[m] | (~dexmadmat@2001:470:69fc:105::e056) |
2021-09-29 10:31:49 +0200 | smichel17[m] | (~smichel17@2001:470:69fc:105::2d32) |
2021-09-29 10:31:50 +0200 | SawyerBergeron[m | (~sawyerber@2001:470:69fc:105::3036) |
2021-09-29 10:32:02 +0200 | sky_lounge[m] | (~skylounge@2001:470:69fc:105::efa6) |
2021-09-29 10:32:02 +0200 | Tisoxin | (~ikosit@user/ikosit) |
2021-09-29 10:32:14 +0200 | monadfritz[m] | (~ahdytmatr@2001:470:69fc:105::e1f1) |
2021-09-29 10:32:14 +0200 | bakinonion[m] | (~bakinonio@2001:470:69fc:105::ddb3) |
2021-09-29 10:32:26 +0200 | rosariopulella[m | (~rosariopu@2001:470:69fc:105::a57) |
2021-09-29 10:32:28 +0200 | fcortesi | (~fcortesi@2001:470:69fc:105::f3a9) |
2021-09-29 10:32:28 +0200 | ManofLetters[m] | (~manoflett@2001:470:69fc:105::3be) |
2021-09-29 10:32:28 +0200 | cloudy | (~cloudy@2001:470:69fc:105::50c0) |
2021-09-29 10:32:40 +0200 | commuswift[m] | (~commuswif@2001:470:69fc:105::e862) |
2021-09-29 10:32:40 +0200 | carmysilna | (~brightly-@2001:470:69fc:105::2190) |
2021-09-29 10:32:40 +0200 | fendor[m] | (~fendormat@2001:470:69fc:105::fcbd) |
2021-09-29 10:32:40 +0200 | aidy | (~aidy@2001:470:69fc:105::c7b4) |
2021-09-29 10:32:40 +0200 | shiraeeshi[m] | (~shiraeesh@2001:470:69fc:105::1:77) |
2021-09-29 10:33:56 +0200 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds) |
2021-09-29 10:41:15 +0200 | zincy_ | (~tom@2a00:23c8:970c:4801:e07c:c539:ea16:90d3) |
2021-09-29 10:41:34 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2021-09-29 10:43:21 +0200 | jpds | (~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 +0200 | merijn | (~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 +0200 | dminuoso | always 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 +0200 | azeem | (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer) |
2021-09-29 10:59:37 +0200 | azeem | (~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 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 11:06:52 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection) |
2021-09-29 11:18:08 +0200 | arpl | (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) |
2021-09-29 11:26:41 +0200 | nfd | (~nfd@user/nfd) |
2021-09-29 11:27:04 +0200 | norskalm | (~norskalm@101.175.64.73) |
2021-09-29 11:29:53 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-09-29 11:30:56 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 11:32:57 +0200 | zer0bitz | (~zer0bitz@dsl-hkibng31-54fafc-123.dhcp.inet.fi) |
2021-09-29 11:34:29 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-09-29 11:34:50 +0200 | arpl | (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed) |
2021-09-29 11:35:29 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-09-29 11:35:36 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-09-29 11:36:55 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 11:38:42 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-09-29 11:39:41 +0200 | tinwood | (~tinwood@canonical/tinwood) (Remote host closed the connection) |
2021-09-29 11:40:15 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com) |
2021-09-29 11:40:33 +0200 | Guest557 | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-09-29 11:41:32 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
2021-09-29 11:42:11 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-c4b5-f493-7437-ddea.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 11:42:39 +0200 | tinwood | (~tinwood@general.default.akavanagh.uk0.bigv.io) |
2021-09-29 11:42:39 +0200 | tinwood | (~tinwood@general.default.akavanagh.uk0.bigv.io) (Changing host) |
2021-09-29 11:42:39 +0200 | tinwood | (~tinwood@canonical/tinwood) |
2021-09-29 11:45:30 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 11:46:16 +0200 | Heisen | (~Heisen@77.240.67.20) (Quit: Client closed) |
2021-09-29 11:48:16 +0200 | spruit11 | (~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5) (Ping timeout: 265 seconds) |
2021-09-29 11:49:41 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 11:51:05 +0200 | rtjure | (~rtjure@bras-79-132-17-74.comnet.bg) (Ping timeout: 264 seconds) |
2021-09-29 11:52:32 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 246 seconds) |
2021-09-29 11:53:11 +0200 | iridium__ | (~iridium@223.235.192.51) |
2021-09-29 11:54:37 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-09-29 11:57:43 +0200 | iridium__ | (~iridium@223.235.192.51) (Quit: leaving) |
2021-09-29 11:57:47 +0200 | spruit11 | (~quassel@2a02:a467:ccd6:1:ed67:f262:991e:7f5) |
2021-09-29 12:01:13 +0200 | phma | (~phma@host-67-44-208-52.hnremote.net) (Read error: Connection reset by peer) |
2021-09-29 12:01:52 +0200 | phma | (~phma@host-67-44-208-25.hnremote.net) |
2021-09-29 12:03:43 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) |
2021-09-29 12:08:26 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer) |
2021-09-29 12:08:43 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) |
2021-09-29 12:08:53 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 12:10:42 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) (Read error: Connection reset by peer) |
2021-09-29 12:11:27 +0200 | azeem | (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) |
2021-09-29 12:13:00 +0200 | arpl | (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) |
2021-09-29 12:13:01 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-09-29 12:13:11 +0200 | Heisen | (~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 +0200 | img_ | (~img@user/img) |
2021-09-29 12:17:34 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-09-29 12:18:22 +0200 | img | (~img@user/img) (Ping timeout: 250 seconds) |
2021-09-29 12:19:10 +0200 | ubert1 | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) |
2021-09-29 12:20:31 +0200 | ubert | (~Thunderbi@178.115.72.201.wireless.dyn.drei.com) (Ping timeout: 245 seconds) |
2021-09-29 12:20:31 +0200 | ubert1 | ubert |
2021-09-29 12:21:18 +0200 | shriekingnoise | (~shrieking@186.137.144.80) (Quit: Quit) |
2021-09-29 12:21:20 +0200 | azeem | (~azeem@2a00:801:2d5:6b0b:3559:4c30:7a57:5531) (Read error: Connection reset by peer) |
2021-09-29 12:21:28 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds) |
2021-09-29 12:21:46 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 245 seconds) |
2021-09-29 12:23:03 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) |
2021-09-29 12:24:50 +0200 | Heisen | (~Heisen@77.240.67.20) (Quit: Client closed) |
2021-09-29 12:27:42 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 12:31:31 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-09-29 12:32:06 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com) |
2021-09-29 12:32:08 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-09-29 12:32:11 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 12:33:10 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-09-29 12:33:37 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) |
2021-09-29 12:34:41 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-f17d-df99-d880-46ae.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 12:41:42 +0200 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2021-09-29 12:42:03 +0200 | alzgh | (~alzgh@user/alzgh) |
2021-09-29 12:43:19 +0200 | ph88 | (~ph88@2a02:8109:9e00:7e5c:5435:afc4:e6b4:ce6b) |
2021-09-29 12:44:38 +0200 | arpl | (~arpl@84-107-171-239.cable.dynamic.v4.ziggo.nl) (Quit: Client closed) |
2021-09-29 12:45:34 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 12:46:14 +0200 | yauhsien | (~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 +0200 | hololeap | (~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 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2021-09-29 12:50:50 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
2021-09-29 12:50:52 +0200 | benin036932301 | (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat) |
2021-09-29 12:50:54 +0200 | iridium__ | (~iridium@223.235.192.51) |
2021-09-29 12:51:46 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 12:53:53 +0200 | benin036932301 | (~benin@183.82.176.107) (Client Quit) |
2021-09-29 12:54:49 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 12:56:59 +0200 | benin036932301 | (~benin@183.82.176.107) (Client Quit) |
2021-09-29 12:57:09 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-09-29 12:58:28 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 12:58:49 +0200 | iridium__ | (~iridium@223.235.192.51) (Quit: leaving) |
2021-09-29 13:00:04 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 252 seconds) |
2021-09-29 13:00:54 +0200 | alx741 | (~alx741@186.178.109.205) |
2021-09-29 13:03:02 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) |
2021-09-29 13:06:59 +0200 | benin036932301 | (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat) |
2021-09-29 13:07:53 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 13:08:19 +0200 | nfd | (~nfd@user/nfd) (Ping timeout: 252 seconds) |
2021-09-29 13:08:33 +0200 | Las[m] | (~lasmatrix@2001:470:69fc:105::74e) (Quit: Reconnecting) |
2021-09-29 13:10:26 +0200 | lortabac | (~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 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 265 seconds) |
2021-09-29 13:11:09 +0200 | AlexNoo_ | (~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 +0200 | benin036932301 | (~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 +0200 | Alex_test | (~al_test@178.34.161.193) (Ping timeout: 252 seconds) |
2021-09-29 13:13:24 +0200 | Soanvig | (~Soanvig@80.49.217.249.ipv4.supernova.orange.pl) |
2021-09-29 13:13:26 +0200 | raehik | (~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 +0200 | AlexZenon | (~alzenon@178.34.161.193) (Ping timeout: 252 seconds) |
2021-09-29 13:14:29 +0200 | AlexNoo | (~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 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-09-29 13:15:47 +0200 | benin036932301 | (~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 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482) |
2021-09-29 13:19:25 +0200 | AlexZenon | (~alzenon@178.34.161.150) |
2021-09-29 13:19:26 +0200 | Alex_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 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-29 13:20:02 +0200 | cunne | (~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 +0200 | benin036932301 | (~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 +0200 | benin036932301 | (~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 +0200 | CiaoSen | (~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 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 13:24:02 +0200 | benin036932301 | (~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 +0200 | benin036932301 | (~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 +0200 | eggplantade | (~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 +0200 | benin036932301 | (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat) |
2021-09-29 13:40:03 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 13:41:03 +0200 | AlexNoo_ | 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 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-09-29 13:42:28 +0200 | CiaoSen | (~Jura@p200300c9571be1002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2021-09-29 13:43:09 +0200 | CiaoSen | (~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 +0200 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
2021-09-29 13:48:02 +0200 | mestre | (~mestre@191.177.175.57) (Quit: Lost terminal) |
2021-09-29 13:50:56 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 245 seconds) |
2021-09-29 13:55:04 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2021-09-29 13:59:35 +0200 | michalz | (~michalz@185.246.204.33) (Read error: No route to host) |
2021-09-29 14:00:44 +0200 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 268 seconds) |
2021-09-29 14:01:21 +0200 | CiaoSen | (~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 +0200 | benin036932301 | (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat) |
2021-09-29 14:01:59 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-29 14:02:39 +0200 | benin036932301 | (~benin@183.82.176.107) |
2021-09-29 14:03:22 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2021-09-29 14:04:16 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 245 seconds) |
2021-09-29 14:10:13 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 14:10:20 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 14:12:10 +0200 | Soanvig | (~Soanvig@80.49.217.249.ipv4.supernova.orange.pl) (Quit: Client closed) |
2021-09-29 14:14:41 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 14:14:52 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-29 14:16:24 +0200 | xiongxin | (~quassel@119.123.100.167) |
2021-09-29 14:28:50 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-09-29 14:30:49 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-09-29 14:32:36 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com) |
2021-09-29 14:33:26 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-9cf3-4260-a35d-73be.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 14:34:44 +0200 | Psybur | (~Psybur@mobile-166-170-32-197.mycingular.net) |
2021-09-29 14:34:49 +0200 | hololeap | . o (RoleAnnotations ?) |
2021-09-29 14:37:28 +0200 | dschrempf | (~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 +0200 | eggplantade | (~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 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 265 seconds) |
2021-09-29 14:42:15 +0200 | mikoto-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 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 14:47:06 +0200 | pbrisbin | (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) |
2021-09-29 14:47:42 +0200 | yauhsien | (~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 +0200 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-29 14:52:11 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-09-29 14:52:33 +0200 | jespada | (~jespada@2803:9800:9842:7a62:9cdc:f08c:7ab8:bd6a) |
2021-09-29 14:54:28 +0200 | machinedgod | (~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 +0200 | hyiltiz | (~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 +0200 | michalz | (~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 +0200 | hyiltiz | (~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 +0200 | lavaman | (~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 +0200 | jakefromstatefar | (~jakefroms@2001:470:69fc:105::15ef) (Ping timeout: 240 seconds) |
2021-09-29 15:10:53 +0200 | maerwald[m] | (~maerwaldm@2001:470:69fc:105::1ee) (Ping timeout: 264 seconds) |
2021-09-29 15:10:59 +0200 | infinisil | (~infinisil@2001:470:69fc:105::ff8) (Ping timeout: 246 seconds) |
2021-09-29 15:11:15 +0200 | vaibhavsagar[m] | (~vaibhavsa@2001:470:69fc:105::ffe) (Ping timeout: 268 seconds) |
2021-09-29 15:11:29 +0200 | ormaaj | (~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 +0200 | tromp | (~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 +0200 | tromp | (~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 +0200 | nvmd | (~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 +0200 | Morrow | (~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 +0200 | Organizers|Robin | (~Robin_Jad@152.67.64.160) |
2021-09-29 15:21:45 +0200 | Morrow | (~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 +0200 | yinghua | (~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7) |
2021-09-29 15:33:51 +0200 | jonathanx | (~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 +0200 | doyougnu | (~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 +0200 | shapr | hugs 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 +0200 | xerox | takes 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 +0200 | brandonh | (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 +0200 | eggplantade | (~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 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 15:49:22 +0200 | epolanski | (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 +0200 | Lycurgus | (~juan@98.4.112.204) |
2021-09-29 15:56:44 +0200 | unmanbearpig | (~unmanbear@user/unmanbearpig) (Quit: unmanbearpig) |
2021-09-29 15:57:12 +0200 | unmanbearpig | (~unmanbear@45.76.95.141) |
2021-09-29 15:57:39 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 15:58:39 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 15:58:39 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 15:58:39 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-29 15:59:35 +0200 | max22- | (~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr) |
2021-09-29 16:01:16 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) |
2021-09-29 16:02:33 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2021-09-29 16:02:40 +0200 | xsperry | (~xs@user/xsperry) (Ping timeout: 252 seconds) |
2021-09-29 16:03:02 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh) |
2021-09-29 16:04:17 +0200 | slack1256 | (~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 +0200 | shriekingnoise | (~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 +0200 | waleee | (~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 +0200 | hendursa1 | (~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 +0200 | Flonk | (~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 +0200 | hendursa1 | (~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 +0200 | Lycurgus | suspects 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 +0200 | Lycurgus | ... 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 +0200 | slack1256 | reads |
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 +0200 | waleee | (~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 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2021-09-29 16:30:51 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-09-29 16:31:10 +0200 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-09-29 16:31:15 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2021-09-29 16:37:17 +0200 | Null_A | (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) |
2021-09-29 16:38:19 +0200 | ub | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) |
2021-09-29 16:38:35 +0200 | cheater | (~Username@user/cheater) (Remote host closed the connection) |
2021-09-29 16:38:36 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) (Read error: Connection reset by peer) |
2021-09-29 16:39:50 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) |
2021-09-29 16:43:20 +0200 | hnOsmium0001 | (uid453710@id-453710.hampstead.irccloud.com) |
2021-09-29 16:45:19 +0200 | cheater | (~Username@user/cheater) |
2021-09-29 16:49:19 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 16:50:31 +0200 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2021-09-29 16:51:54 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-09-29 16:52:47 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com) |
2021-09-29 16:53:57 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
2021-09-29 16:54:42 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-11e5-eaf7-be1f-d354.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 16:55:10 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Read error: Connection reset by peer) |
2021-09-29 16:58:05 +0200 | acidjnk_new3 | (~acidjnk@pd9e0b933.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
2021-09-29 16:59:29 +0200 | Lycurgus | (~juan@98.4.112.204) (Quit: Exeunt) |
2021-09-29 17:04:42 +0200 | azeem | (~azeem@emp-180-222.eduroam.uu.se) (Ping timeout: 265 seconds) |
2021-09-29 17:05:48 +0200 | azeem | (~azeem@2a00:801:42e:f0c5:54bc:9505:1b65:51ec) |
2021-09-29 17:05:55 +0200 | xsperry | (~xs@cpe-188-129-101-182.dynamic.amis.hr) |
2021-09-29 17:05:55 +0200 | xsperry | (~xs@cpe-188-129-101-182.dynamic.amis.hr) (Changing host) |
2021-09-29 17:05:55 +0200 | xsperry | (~xs@user/xsperry) |
2021-09-29 17:06:10 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
2021-09-29 17:06:53 +0200 | gdhffd[m] | (~gdhffdmat@2001:470:69fc:105::1:799) |
2021-09-29 17:08:43 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 17:09:20 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 17:09:28 +0200 | goepsilongo | (~goepsilon@2603-7000-ab00-62ed-79c3-eb84-501d-4a08.res6.spectrum.com) |
2021-09-29 17:11:46 +0200 | goepsilongo_ | (~goepsilon@2603-7000-ab00-62ed-509b-8499-b4b2-d246.res6.spectrum.com) (Ping timeout: 245 seconds) |
2021-09-29 17:13:26 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 17:14:13 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:29ed:389e:8e87:468f) (Ping timeout: 252 seconds) |
2021-09-29 17:14:58 +0200 | gdhffd[m] | (~gdhffdmat@2001:470:69fc:105::1:799) () |
2021-09-29 17:15:11 +0200 | xff0x | (~xff0x@2001:1a81:5386:1100:ed62:9085:5098:b430) |
2021-09-29 17:15:56 +0200 | xiongxin | (~quassel@119.123.100.167) (Ping timeout: 252 seconds) |
2021-09-29 17:16:30 +0200 | Guest2 | (~Guest2@86.57.234.195) |
2021-09-29 17:16:34 +0200 | xiongxin | (~quassel@119.123.100.167) |
2021-09-29 17:17:20 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-09-29 17:19:29 +0200 | ub | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-09-29 17:19:46 +0200 | ub | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) |
2021-09-29 17:19:51 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 17:22:18 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 17:22:26 +0200 | ilkecan[m] | (~ilkecanma@2001:470:69fc:105::1:79b) |
2021-09-29 17:23:05 +0200 | ub | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-09-29 17:23:05 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
2021-09-29 17:23:11 +0200 | ub1 | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) |
2021-09-29 17:23:32 +0200 | segfaultfizzbuzz | (~segfaultf@135-180-0-138.static.sonic.net) |
2021-09-29 17:23:51 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
2021-09-29 17:24:26 +0200 | Guest2 | (~Guest2@86.57.234.195) () |
2021-09-29 17:24:41 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-09-29 17:25:29 +0200 | ub1 | ub |
2021-09-29 17:26:21 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-29 17:34:32 +0200 | hendursa1 | (~weechat@user/hendursaga) (Quit: hendursa1) |
2021-09-29 17:34:58 +0200 | hendursaga | (~weechat@user/hendursaga) |
2021-09-29 17:35:20 +0200 | xiongxin | (~quassel@119.123.100.167) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-09-29 17:36:27 +0200 | byorgey | (~byorgey@155.138.238.211) (Quit: leaving) |
2021-09-29 17:36:34 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:1256:fdab:1396:c482) (Quit: WeeChat 2.8) |
2021-09-29 17:36:35 +0200 | byorgey | (~byorgey@155.138.238.211) |
2021-09-29 17:38:07 +0200 | norskalm | (~norskalm@101.175.64.73) (Ping timeout: 256 seconds) |
2021-09-29 17:38:43 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection) |
2021-09-29 17:40:43 +0200 | doyougnu | (~user@c-73-25-202-122.hsd1.or.comcast.net) (Remote host closed the connection) |
2021-09-29 17:42:54 +0200 | tzh | (~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 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 17:45:08 +0200 | chris | Guest3846 |
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 +0200 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.2.1) |
2021-09-29 17:58:01 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 245 seconds) |
2021-09-29 17:59:30 +0200 | benin036932301 | (~benin@183.82.176.107) (Quit: The Lounge - https://thelounge.chat) |
2021-09-29 17:59:35 +0200 | eggplantade | (~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 +0200 | ub | (~Thunderbi@178.115.55.159.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-09-29 18:03:51 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 18:04:56 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 18:07:00 +0200 | slac42908 | (~slack1256@191.126.227.219) |
2021-09-29 18:09:10 +0200 | slack1256 | (~slack1256@191.125.154.227) (Ping timeout: 252 seconds) |
2021-09-29 18:09:55 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
2021-09-29 18:11:09 +0200 | max22- | (~maxime@2a01cb0883359800129990ac0bc95b23.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-09-29 18:11:59 +0200 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-09-29 18:13:38 +0200 | slack1256 | (~slack1256@181.203.20.152) |
2021-09-29 18:14:44 +0200 | Guest3846 | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-09-29 18:15:31 +0200 | slac42908 | (~slack1256@191.126.227.219) (Ping timeout: 245 seconds) |
2021-09-29 18:19:59 +0200 | nfd | (~nfd@user/nfd) |
2021-09-29 18:20:19 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 18:20:23 +0200 | chris | Guest1239 |
2021-09-29 18:24:52 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 18:24:56 +0200 | Guest1239 | (~chris@81.96.113.213) (Ping timeout: 265 seconds) |
2021-09-29 18:24:59 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 18:27:15 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-09-29 18:29:16 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Ping timeout: 245 seconds) |
2021-09-29 18:29:46 +0200 | merijn | (~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 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
2021-09-29 18:35:18 +0200 | mc47 | (~mc47@xmonad/TheMC47) |
2021-09-29 18:36:48 +0200 | boxscape_ | (~boxscape_@i577BCBE7.versanet.de) |
2021-09-29 18:43:21 +0200 | Null_A | (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection) |
2021-09-29 18:45:39 +0200 | Null_A | (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) |
2021-09-29 18:50:51 +0200 | Cajun | (~Cajun@user/cajun) (Quit: Client closed) |
2021-09-29 18:51:02 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2021-09-29 18:54:08 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2021-09-29 18:59:15 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 265 seconds) |
2021-09-29 18:59:52 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 19:00:49 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) (Remote host closed the connection) |
2021-09-29 19:00:58 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:f920:a9dd:18bc:fca2) |
2021-09-29 19:01:24 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-29 19:01:25 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 19:02:20 +0200 | notzmv | (~zmv@user/notzmv) (Ping timeout: 246 seconds) |
2021-09-29 19:05:31 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 245 seconds) |
2021-09-29 19:05:56 +0200 | cheater | (~Username@user/cheater) |
2021-09-29 19:17:11 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) (Ping timeout: 245 seconds) |
2021-09-29 19:17:29 +0200 | ystael | (~ystael@user/ystael) (Ping timeout: 252 seconds) |
2021-09-29 19:18:20 +0200 | ystael | (~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 +0200 | econo | (uid147250@user/econo) |
2021-09-29 19:28:20 +0200 | emf | (~emf@2601:602:9401:b660:47d:d5f4:4143:7c05) |
2021-09-29 19:29:55 +0200 | MQ-17J | (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) |
2021-09-29 19:31:11 +0200 | MQ-17J | (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer) |
2021-09-29 19:31:18 +0200 | notzmv | (~zmv@user/notzmv) |
2021-09-29 19:32:12 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) |
2021-09-29 19:32:41 +0200 | emf | (~emf@2601:602:9401:b660:47d:d5f4:4143:7c05) (Quit: emf) |
2021-09-29 19:33:48 +0200 | Null_A | (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) (Remote host closed the connection) |
2021-09-29 19:34:01 +0200 | emf | (~emf@2620:10d:c090:400::5:d028) |
2021-09-29 19:34:16 +0200 | tommd | (~tommd@75-164-130-101.ptld.qwest.net) |
2021-09-29 19:34:34 +0200 | YoungChiefBTW | (~youngchie@2001:470:69fc:105::214c) (Changing host) |
2021-09-29 19:34:34 +0200 | YoungChiefBTW | (~youngchie@user/youngchiefbtw) |
2021-09-29 19:35:01 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-09-29 19:35:56 +0200 | nrl^ | (~nrl@68.101.50.106) (Ping timeout: 245 seconds) |
2021-09-29 19:38:56 +0200 | nrl^ | (~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 +0200 | lbseale | (~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 +0200 | YoungChiefBTW | (~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 +0200 | YoungChiefBTW | (~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 +0200 | YoungChiefBTW | (~youngchie@2001:470:69fc:105::214c) (Changing host) |
2021-09-29 19:44:04 +0200 | YoungChiefBTW | (~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 +0200 | BosonCollider | (~olofs@90-227-86-119-no542.tbcn.telia.com) |
2021-09-29 19:45:28 +0200 | nilof | (~olofs@90-227-86-119-no542.tbcn.telia.com) |
2021-09-29 19:45:40 +0200 | nilof | (~olofs@90-227-86-119-no542.tbcn.telia.com) (Remote host closed the connection) |
2021-09-29 19:46:05 +0200 | tromp | (~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 +0200 | benin036932301 | (~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 +0200 | MQ-17J | (~MQ-17J@35.50.53.58) (Ping timeout: 252 seconds) |
2021-09-29 19:55:11 +0200 | MQ-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 +0200 | fresheyeball | (~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 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 245 seconds) |
2021-09-29 20:00:36 +0200 | Guest41 | (~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 +0200 | goepsilongo | (~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 +0200 | myShoggoth | (~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 +0200 | tabaqui | (~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 +0200 | Null_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 +0200 | emf_ | (~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 +0200 | fresheyeball | (~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 +0200 | yauhsien | (~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 +0200 | emf | (~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 +0200 | yauhsien | (~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 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 20:13:19 +0200 | chris | Guest2478 |
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 +0200 | MQ-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 +0200 | MQ-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 +0200 | epolanski | (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 +0200 | aegon | (~mike@174.127.249.180) |
2021-09-29 20:22:01 +0200 | jlamothe | (~jlamothe@104.158.48.100) |
2021-09-29 20:22:11 +0200 | xff0x | (~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 +0200 | xff0x | (~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 +0200 | tomsmeding | is confused |
2021-09-29 20:24:57 +0200 | Guest2478 | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-09-29 20:25:14 +0200 | kuribas | (~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 +0200 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-09-29 20:25:56 +0200 | emf_ | (~emf@2620:10d:c090:400::5:b24f) (Quit: emf_) |
2021-09-29 20:25:59 +0200 | tromp | (~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 +0200 | qbt | (~edun@user/edun) (Ping timeout: 246 seconds) |
2021-09-29 20:29:31 +0200 | gensyst | (gensyst@user/gensyst) |
2021-09-29 20:29:34 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 20:29:36 +0200 | <Guest41> | *facepalm* |
2021-09-29 20:29:38 +0200 | chris | Guest4418 |
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 +0200 | emf | (~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 +0200 | Guest4418 | (~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 +0200 | Null_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 +0200 | Null_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 +0200 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
2021-09-29 20:33:31 +0200 | acidjnk_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 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 20:36:17 +0200 | chris | Guest6556 |
2021-09-29 20:40:27 +0200 | Guest6556 | (~chris@81.96.113.213) (Ping timeout: 240 seconds) |
2021-09-29 20:45:53 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-09-29 20:46:22 +0200 | MarsIronPI | (~MarsIronP@107.117.175.35) |
2021-09-29 20:47:40 +0200 | MarsIronPI | (~MarsIronP@107.117.175.35) (Client Quit) |
2021-09-29 20:50:26 +0200 | nfd | (~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 +0200 | max22- | (~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 +0200 | ircbrowse_tom | (~ircbrowse@2a01:4f8:1c1c:9319::1) (ZNC 1.7.5+deb4 - https://znc.in) |
2021-09-29 21:03:10 +0200 | ircbrowse_tom | (~ircbrowse@2a01:4f8:1c1c:9319::1) |
2021-09-29 21:03:10 +0200 | Server | +Cnt |
2021-09-29 21:04:11 +0200 | tabaqui | (~root@46.39.45.162) (Ping timeout: 252 seconds) |
2021-09-29 21:05:11 +0200 | gensyst | (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 +0200 | wroathe | (~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 +0200 | k | (~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 +0200 | fendor | (~fendor@178.165.164.78.wireless.dyn.drei.com) |
2021-09-29 21:16:21 +0200 | mikoto-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 +0200 | mikoto-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 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 21:21:42 +0200 | chris | Guest6826 |
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 +0200 | Guest6826 | (~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 +0200 | Guest41 | (~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 +0200 | myShoggoth | (~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 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 21:25:47 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 21:25:47 +0200 | wroathe | (~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 +0200 | Guest41 | (~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 +0200 | chris | (~chris@81.96.113.213) |
2021-09-29 21:27:22 +0200 | chris | Guest816 |
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 +0200 | myShoggoth | (~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 +0200 | wroathe | (~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 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-29 21:31:43 +0200 | Guest816 | (~chris@81.96.113.213) (Ping timeout: 252 seconds) |
2021-09-29 21:31:46 +0200 | oxide | (~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 +0200 | takuan | (~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 +0200 | Morrow | (~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 +0200 | Morrow | (~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 +0200 | emf | (~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 +0200 | y04nn | (~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 +0200 | ec | (~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 +0200 | Morrow | (~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 +0200 | Morrow | (~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 +0200 | tomsmeding | finds 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 +0200 | hexfive | (~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 +0200 | doyougnu | (~user@c-73-25-202-122.hsd1.or.comcast.net) |
2021-09-29 21:57:18 +0200 | hexfive | (~eric@50.35.83.177) (Client Quit) |
2021-09-29 21:57:36 +0200 | tomsmeding | wonders 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 +0200 | kuribas | (~user@ptr-25vy0i8j07s3q8yomww.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
2021-09-29 22:01:17 +0200 | mcfrdy | (~mcfrdy@user/mcfrdy) (Quit: quit) |
2021-09-29 22:02:07 +0200 | mcfrdy | (~mcfrdy@user/mcfrdy) |
2021-09-29 22:02:26 +0200 | emf | (~emf@2620:10d:c090:400::5:b24f) |
2021-09-29 22:03:35 +0200 | emf | (~emf@2620:10d:c090:400::5:b24f) (Client Quit) |
2021-09-29 22:03:37 +0200 | dixie_ | (~dixie@real.wilbury.sk) (Ping timeout: 252 seconds) |
2021-09-29 22:05:02 +0200 | oxide | (~lambda@user/oxide) |
2021-09-29 22:05:29 +0200 | juhp | (~juhp@128.106.188.220) (Ping timeout: 265 seconds) |
2021-09-29 22:05:40 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-29 22:07:22 +0200 | juhp | (~juhp@128.106.188.220) |
2021-09-29 22:10:15 +0200 | dixie | (~dixie@real.wilbury.sk) |
2021-09-29 22:11:42 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) |
2021-09-29 22:12:54 +0200 | acidjnk_new | (~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de) |
2021-09-29 22:13:44 +0200 | acidjnk | (~acidjnk@p200300d0c703cb532872c69d6a5a30e0.dip0.t-ipconnect.de) |
2021-09-29 22:14:36 +0200 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2021-09-29 22:14:42 +0200 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2021-09-29 22:15:56 +0200 | yauhsien | (~yauhsien@118-167-48-21.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-09-29 22:16:21 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c703cb53c55fe893eb04092a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
2021-09-29 22:16:58 +0200 | mht | (~mht@mht.wtf) (Ping timeout: 260 seconds) |
2021-09-29 22:17:11 +0200 | connrs | (~connrs@user/connrs) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-09-29 22:17:31 +0200 | connrs | (~connrs@user/connrs) |
2021-09-29 22:17:54 +0200 | acidjnk_new | (~acidjnk@p200300d0c703cb53d06c99722a203ed2.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-09-29 22:17:54 +0200 | Morrow_ | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Read error: Connection reset by peer) |
2021-09-29 22:18:01 +0200 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2021-09-29 22:19:18 +0200 | sshine | (~simon@hubris.eta.solutions) (Ping timeout: 260 seconds) |
2021-09-29 22:19:18 +0200 | zzz | (~yin@user/yin) (Ping timeout: 260 seconds) |
2021-09-29 22:19:46 +0200 | rookie101 | (~rookie@207.154.204.166) (Ping timeout: 260 seconds) |
2021-09-29 22:19:47 +0200 | janus | (janus@anubis.0x90.dk) (Ping timeout: 240 seconds) |
2021-09-29 22:21:20 +0200 | nrl^ | (~nrl@68.101.50.106) (Remote host closed the connection) |
2021-09-29 22:22:11 +0200 | sshine | (~simon@hubris.eta.solutions) |
2021-09-29 22:23:44 +0200 | mht | (~mht@mht.wtf) |
2021-09-29 22:23:45 +0200 | zzz | (~yin@user/yin) |
2021-09-29 22:28:54 +0200 | justsomeguy | (~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 +0200 | janus | (janus@anubis.0x90.dk) |
2021-09-29 22:32:11 +0200 | rookie101 | (~rookie@207.154.204.166) |
2021-09-29 22:32:46 +0200 | slack1256 | (~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 +0200 | Null_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 +0200 | Null_A | (~null_a@2601:645:8700:2290:91f2:4a69:be9c:a77e) |
2021-09-29 22:43:38 +0200 | alzgh | (~alzgh@user/alzgh) (Remote host closed the connection) |
2021-09-29 22:44:00 +0200 | alzgh | (~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 +0200 | Guest79 | (~Guest79@247.158-248-49.customer.lyse.net) |
2021-09-29 22:48:01 +0200 | <Guest79> | Howdy |
2021-09-29 22:48:01 +0200 | vysn | (~vysn@user/vysn) (Ping timeout: 245 seconds) |
2021-09-29 22:48:01 +0200 | mei | (~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 +0200 | MQ-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 +0200 | MQ-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 +0200 | geranim0 | (~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 +0200 | Null_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 +0200 | zer0bitz | (~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 +0200 | awpr | wishes 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 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-29 22:59:08 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-29 22:59:08 +0200 | wroathe | (~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 +0200 | emf | (~emf@2620:10d:c090:400::5:2507) |
2021-09-29 23:03:00 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-29 23:04:01 +0200 | Null_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 +0200 | yinghua | (~yinghua@2800:2121:1400:1db:2dd5:711:7e56:f9f7) (Ping timeout: 240 seconds) |
2021-09-29 23:07:41 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
2021-09-29 23:08:54 +0200 | yinghua | (~yinghua@181.228.40.183) |
2021-09-29 23:09:46 +0200 | jaitoon | (~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 +0200 | Lord_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 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
2021-09-29 23:15:06 +0200 | Lord_of_Life_ | Lord_of_Life |
2021-09-29 23:15:44 +0200 | emf | (~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 +0200 | myShoggoth | (~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 +0200 | emf | (~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 +0200 | michalz | (~michalz@185.246.204.72) (Remote host closed the connection) |
2021-09-29 23:21:16 +0200 | SquidDev | (~SquidDev@autoclave.squiddev.cc) (Quit: Bye!) |
2021-09-29 23:21:41 +0200 | SquidDev | (~SquidDev@autoclave.squiddev.cc) |
2021-09-29 23:22:30 +0200 | emf | (~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 +0200 | oxide | (~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 +0200 | gehmehgeh | (~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 +0200 | pbrisbin | (~patrick@pool-173-49-147-250.phlapa.fios.verizon.net) (Ping timeout: 265 seconds) |
2021-09-29 23:32:50 +0200 | emf | (~emf@2620:10d:c090:400::5:2507) |
2021-09-29 23:34:23 +0200 | Guest4176 | (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-09-29 23:34:27 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 240 seconds) |
2021-09-29 23:35:32 +0200 | mestre | (~mestre@191.177.175.57) |
2021-09-29 23:36:04 +0200 | emf | (~emf@2620:10d:c090:400::5:2507) (Client Quit) |
2021-09-29 23:36:28 +0200 | y04nn | (~y04nn@193.32.127.238) (Ping timeout: 252 seconds) |
2021-09-29 23:38:31 +0200 | Guest41 | (~Guest41@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds) |
2021-09-29 23:39:34 +0200 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 260 seconds) |
2021-09-29 23:40:09 +0200 | Morrow | (~Morrow@bzq-110-168-31-106.red.bezeqint.net) |
2021-09-29 23:41:23 +0200 | cheater | (~Username@user/cheater) |
2021-09-29 23:44:14 +0200 | emf | (~emf@2620:10d:c090:400::5:2507) |
2021-09-29 23:45:03 +0200 | Guest2934 | (~Guest29@206.12.14.124) |
2021-09-29 23:47:44 +0200 | MQ-17J | (~MQ-17J@2607:fb90:8848:a516:92d8:c446:e2f1:d98e) (Read error: Connection reset by peer) |
2021-09-29 23:48:42 +0200 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
2021-09-29 23:48:57 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2021-09-29 23:49:32 +0200 | makrus | (~makrus@206.12.14.124) |
2021-09-29 23:50:22 +0200 | makrus | (~makrus@206.12.14.124) () |
2021-09-29 23:50:32 +0200 | Null_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 +0200 | dhouthoo | (~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 +0200 | Null_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 +0200 | Guest79 | (~Guest79@247.158-248-49.customer.lyse.net) (Quit: Client closed) |
2021-09-29 23:55:14 +0200 | myShoggoth | (~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 +0200 | max22- | (~maxime@2a01cb088335980073a4b4db0ef417b5.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-09-29 23:57:59 +0200 | y04nn | (~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 +0200 | Guest2934 | (~Guest29@206.12.14.124) (Quit: Client closed) |