Logs on 2025-01-16 (liberachat/#haskell)
| 00:00:51 | × | jcarpenter2 quits (~lol@2603:3016:1e01:b9c0:794b:ce9f:2a3d:41ae) (Ping timeout: 252 seconds) |
| 00:02:39 | <Guest71> | jackdk: monopackage would work. I'm just thinking that from a UX point of view users in general do not want to pull stuff they will not use: larger binaries, larger logic surface means potentially more room to misuse/bugs, potentially worse test coverage, and as you said, now your API is less stable (more moving parts), |
| 00:03:16 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 00:03:25 | <haskellbridge> | <sm> Guest71: it may be a good move, but you will have to think about it from time to time, even with automation, if you care about packaging (one or more of your packages will break with X ghc/dep version / on Y platform, disrupting your/packagers' scripts... etc.) |
| 00:03:37 | <jackdk> | Guest71: I mean monorepo, not monopackage. Cabal (and Stack too but I don't know the details) let you maintain several cabal packages in a single project repository, which you can then individually submit to Hackage. |
| 00:03:49 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 00:03:50 | ljdarj1 | is now known as ljdarj |
| 00:04:42 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:05:24 | → | lbseale joins (~quassel@user/ep1ctetus) |
| 00:05:28 | <jackdk> | But I would also look at sublibraries which _should_ be usable everywhere now? Amazonka doesn't use them (yet?) because it predates them being widely available. Then you have a larger initial download but everything's in one place. Users still wouldn't compile things they don't need. |
| 00:06:09 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f02edd754543fe6660f.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 00:07:02 | <Guest71> | sm: I suppose that is always a possibility. But assuming I fix that for one package, then I would just apply the diff to the rest and be done, no? |
| 00:08:56 | <Guest71> | jackdk: It could work as a monorepo too. In fact, it used to be a monorepo and was later broken up (even the namespacing was mostly kept). Do you believe a monorepo with micropackaging would be better? |
| 00:09:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 00:11:18 | <jackdk> | I consolidated work's split repositories into a monorepo, which has since grown to ~150kLoC. It was a large improvement because maintenance often topologically sorting the repositories in your head and working from the leaves up, and if something broke you often had to go back to the leaves and start again. |
| 00:11:32 | <jackdk> | The monorepo has been a massive QoL improvement. But the depgraph is relatively deep; if your project's depgraph is wide and shallow you might not hit this problem. Why did you split it up? |
| 00:12:49 | <jackdk> | Also, perhaps the term "split packaging" is more accurate than "micropackaging"? The latter makes me think of `left-pad` and single-function libraries. |
| 00:15:15 | <jackdk> | The way I see it, you have several options: 1a. monorepo, monopackage; 1b. monorepo, single package with sublibraries; 1c. monorepo, split packages; 2a. multi-repo, automated consolidation to single package; 2b. multi-repo, automated consolidation to package-with-sublibraries; 3. multi-repo, individual packages |
| 00:18:22 | <jackdk> | My gut says to avoid 1a because of the large compilation load it'll ask of your users. 1b and 1c seem reasonable, and since you're looking at updating bindings to a single broad interface I could imagine the versioning updating in lockstep. 2a and 2b look to me like they introduce a lot of devops complexity for benefit that I cannot see. 3 could cause a lot of dependency troubles if you have a deep depgraph. |
| 00:19:41 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:20:04 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:20:05 | <Guest71> | jackdk: Regarding the reason for the split, It was relatively easy to do (each component was contained in a submodule anyway) and figured there was no downside to doing it. On the upside, it enforces API boundaries, keeps your git history relevant (reverting or rebasing across submodules is no fun), and just plain keeps your workstation resource |
| 00:20:05 | <Guest71> | usage lower. I guess also mapping packages to repos 1-to-1 seemed better design all else being equal, but maybe I am wrong about that one. That's why I wanted input from the community. |
| 00:20:10 | × | Guest69 quits (~Guest69@2601:642:4103:1b0:a477:319d:e581:377a) (Ping timeout: 240 seconds) |
| 00:21:48 | <jackdk> | I don't understand why you brought up git submodules. I agree that they are no fun - I'd have used wholly independent repositories or a single repository. A single cabal project will enforce package boundaries |
| 00:22:06 | <jackdk> | (between the package it contains) |
| 00:24:46 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 00:26:53 | <haskellbridge> | <sm> Guest71: I'm just saying that all else being equal, many packages costs more to understand/maintain/package than one package. But all else isn't equal, it'll be an engineering judgement call |
| 00:28:33 | <haskellbridge> | <sm> long term maintainer and packager capacity, number and type of users are things to consider |
| 00:28:53 | <Guest71> | jackdk: Regarding the reason for the split, It was relatively easy to do (each component was contained in a submodule anyway) and figured there was no downside to doing it. On the upside, it enforces API boundaries, keeps your git history relevant (reverting or rebasing across submodules is no fun), and just plain keeps your workstation resource |
| 00:28:54 | <Guest71> | usage lower. I guess also mapping packages to repos 1-to-1 seemed better design all else being equal, but maybe I am wrong about that one. That's why I wanted input from the community. |
| 00:29:28 | <haskellbridge> | <sm> ot |
| 00:29:41 | <Guest71> | Oops, sorry about that. My message got replaced with a copy of the old thing. |
| 00:29:58 | <haskellbridge> | <sm> it's worth thinking about, because you can't erase things uploaded to hackage, or easily rearrange VC history |
| 00:30:02 | <jackdk> | I just had the strangest case of deja vu |
| 00:30:34 | <haskellbridge> | <magic_rb> Ive heard that overly polymorphic code doesnt specialize well, but then id ask why? Because couldnt GHC track what different instantiations of each toplevel binding occur and then based on some metric (plain count, expected machine code size) specialize automatically? I assume something like this happens already, but question is why not well enough where "overly polymorphic" ceases to be a problem |
| 00:32:44 | <haskellbridge> | <sm> will docs/changelogs be easy to segment by package ? Will you always release all packages in lockstep, or will you allow say a bugfix release to an individual package, complicating release scripts ? etc. |
| 00:33:25 | <haskellbridge> | <sm> issue tracker per package ? |
| 00:33:31 | <Guest71> | I was going to say that I wasn't meaning to say git submodules, but Haskell submodules (let's call them subprojects). What I was trying to say is that keeping a monorepo means that a subproject's history is merged together with everything else, which means more work around handing history. |
| 00:33:32 | <Guest71> | As for the boundary enforcement, it is true that you may enforce it with cabal. I suppose in my mind that is a sort of "softer" enforcement than splitting repos (boundary enforcement is regulated by a file inside the project repo), so I just reached for the most generic solution. Maybe this was a bad call? |
| 00:34:24 | <haskellbridge> | <sm> I think we don't know enough to have (more of :) an opinion |
| 00:35:29 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:36:18 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 00:36:40 | <Guest71> | sm: issue tracker per package, yes. Docs are basically pure Haddock, so they are split already. I would not release in lockstep. |
| 00:37:43 | <jackdk> | That Haskell calls a source file a "module" means I find it confusing to call a unit of project organisation a "submodule", especially when that word had meaning to `git`. For clarity: a cabal "package" has multiple "components" (library, named sublibrary, executable, test suite, etc). One or more "packages" on the filesystem can be collected into a "project", where `cabal.project` lets you apply settings across them. |
| 00:38:01 | <haskellbridge> | <sm> will people often want to install all the packages together ? It sounds like not |
| 00:38:56 | <Guest71> | sm: I'm expecting not, except for users that happen to have different use-cases that could be better served by different implementations |
| 00:39:10 | <JuanDaugherty> | 'source module" is an ancient idiom for a single file of code text |
| 00:39:37 | <JuanDaugherty> | as opposed to "object module" |
| 00:39:56 | <haskellbridge> | <sm> +1 to jackdk. "package" is the right term for units of hackage/cabal/stack-stuff |
| 00:40:03 | <geekosaur> | (for which we have IBM to blame, IIRC) |
| 00:40:04 | × | sprotte24 quits (~sprotte24@p200300d16f35c200f4f310a9fb58ced0.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 00:40:05 | <Guest71> | Okay, point taken. What's the best way to call everything under a namespace? |
| 00:40:16 | <JuanDaugherty> | yes them |
| 00:40:19 | <geekosaur> | which kind of namespace? |
| 00:40:33 | <geekosaur> | if you mean module namespaces, they're pretty fake |
| 00:40:36 | <Guest71> | As in I have lib/Foo/Bar/Baz.hs |
| 00:40:40 | <haskellbridge> | <sm> a project can consist of one or more repos which may store one or more packages |
| 00:40:44 | <Guest71> | What do I call everythin under Foo/Bar? |
| 00:40:44 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 00:40:51 | <Guest71> | The modules called Foo.Bar.* |
| 00:40:57 | <geekosaur> | modules |
| 00:40:58 | <jackdk> | Without knowing what the mysterious API is, it sounds like the bindings are more loosely coupled than Amazonka's. This makes me lean toward either option 1c (monorepo with split packages) or 3 (split repos with individual release infrastructure) |
| 00:41:15 | <geekosaur> | there is no real concept of related-ness; a different package could also use the Foo.Bar "namespace" |
| 00:41:41 | <JuanDaugherty> | cause in that time computers were called ibm machines so their usages became industry norms, even tho there was actually much greater arch diversity |
| 00:41:57 | <Guest71> | I can tell more about the project, it's not a secret. I just don't want to overwhelm you with noise. |
| 00:42:59 | <Guest71> | The project originally had a form of Foo.Iface, Foo.Bar.Baz1, Foo.Bar.Baz2, Foo.Bar.Baz3... all the BazN modules implement the Foo.Iface |
| 00:43:21 | <JuanDaugherty> | "module" is more of a construct and often enough contentious, eg. in prolog |
| 00:43:37 | <jackdk> | I think knowing the specific interface would be extremely helpful, if you can provide it. |
| 00:43:45 | <jackdk> | At least its name, I mean. |
| 00:44:49 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 00:45:08 | → | califax joins (~califax@user/califx) |
| 00:45:51 | <Guest71> | jackdk: it's called Nera |
| 00:46:13 | <Guest71> | Though I imagine you were hoping for something descriptive |
| 00:47:13 | × | xff0x quits (~xff0x@2405:6580:b080:900:8310:6e2:3d63:5127) (Ping timeout: 248 seconds) |
| 00:47:38 | <jackdk> | Ideally a link to a high-level API page. So far I have found a page on cloud-based aged care software and a PDF report from a consultancy about Smart Meters for the Australian Energy Market Commission. Please, help us help you. |
| 00:47:44 | <JuanDaugherty> | can a namespace just be a namespace? names r powerful, their rectification is a whole deal |
| 00:48:15 | <Guest71> | Oh, sorry, it isn't public as of right now. |
| 00:48:40 | <Guest71> | I'm currently in the process of trying to publish it, hence this conversation :) |
| 00:49:06 | <Guest71> | It basically combines a bunch of numeric interfaces and add some other stuff on top |
| 00:49:11 | <Guest71> | It's a numeric library |
| 00:50:04 | <Guest71> | JuanDaugherty: sorry, I'm not sure what you meant by that (re: namespaces being just namespaces) |
| 00:50:09 | JuanDaugherty | is now known as ColinRobinson |
| 00:50:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:51:33 | <Guest71> | jackdk: were you planning to look at the repo? |
| 00:52:22 | <Guest71> | Or rather, just tell me what information you would like about the project. |
| 00:52:42 | <jackdk> | I was planning on getting an idea of the problem you are trying to solve, because my head is in the HTTP API space by default. I don't know much about numeric code and how people expect it to be organised. |
| 00:54:48 | <ColinRobinson> | 'unit of compilation' is the clear but you generally only see that in specs |
| 00:55:04 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 00:55:31 | <jackdk> | At this point I'm not sure I know what questions to ask. I will point out that you can soft-launch a package by uploading it to a public repo and working from there. Both Cabal and Stack let you pull in code from git repos, and then hopefully you can attract more users and find out what splits they're looking for |
| 00:57:00 | <Guest71> | The interface is a collection of numeric operations and the implementations are well... different ways to implement each of them. |
| 00:57:00 | <Guest71> | As an example: there are many ways to compute a logarithmic expression. So, you have different sub-projects that implement the different ways. Depending on your algorithm or problem as a user of the library, you may prefer one or the other. Maybe you have different use-cases, and you want to use more than one. |
| 00:57:33 | <haskellbridge> | <sm> good idea! validate your repo/package organisation a little before committing to hackage uploads |
| 00:59:41 | <jackdk> | I'm reminded of https://hackage.haskell.org/package/ad which has a bunch of different automatic differentiation methods in a single library. If the scope of each operation is relatively small, a similar approach may serve you well. It can be annoying to ask your users to go back to their cabal file and re-jig their build just to experiment with another implementation of the same method. |
| 01:00:35 | <haskellbridge> | <sm> +1 |
| 01:00:37 | <Guest71> | The interface is actually remarkably boring, and by far the least important part. It only exists because I want my users to be able to swap implementations transparently and benchmark the differences for their workloads easily to make a more informed decision. |
| 01:01:20 | <jackdk> | OTOH, I consider it a good thing that all the different regex engines in the `regex-*` universe are in different packages, because you usually just pick one (either TDFA or PCRE) and stick with it. I wouldn't use `regex-base` as a guide for how to design an interface usable by multiple implementations, though. My head spins every time I look at it. |
| 01:02:53 | <haskellbridge> | <sm> if the different packages have heterogenous dependencies, such that some of them may be hard to build on certain platforms / with certain GHC versions, that could be a reason to segment. If the deps are the same for all of them, and the only issue is downloading unused code.. that's not a big cost |
| 01:03:02 | <Guest71> | jackdk: From skimming the summary that looks exactly like the kind of project I'm developing |
| 01:03:38 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Quit: Lost terminal) |
| 01:03:55 | <jackdk> | IME it is harder to take back over-engineered solutions than it is to add smarts where it's needed. I would start with (for example) a package for calculating "logarithmic expressions" and put them all in there. If you need to split the package later, you can then extract an interface and create several implementations, but the reverse is harder: you can't un-claim a package in the Hackage namespace. |
| 01:06:14 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:06:34 | <Guest71> | jackdk: so your are advising to publish a monopackage and split later is users want it? |
| 01:08:05 | <Guest71> | sm: they implementations should be transparently interchangeable so they should have the same dependencies and build under the same stack. |
| 01:09:04 | <haskellbridge> | <sm> I think we're advising a cautious less is more approach: yes start with one repo and one package, on github (eg); get a sense of how this will work; if it seems ok, publish that to hackage |
| 01:09:16 | <Guest71> | jackdk: yet, what you say about the regex package is what I imagine my users thinking: I just want the implementation X, don't make me pull Y if I'm not going ot use it |
| 01:09:35 | <jackdk> | 70kLoC is about 4× the size of `lens`. I don't understand numeric code well enough to know whether that's a reasonable size for a library or library family. My advice would be to upload a monopackage to a public forge site, hold off on the Hackage release while you get users and see where the convenient cuts are, and split if necessary. |
| 01:09:49 | <jackdk> | sm: +1 |
| 01:10:01 | <haskellbridge> | <sm> most users will rather pull one simple package than have to think about which variant they need |
| 01:10:19 | <haskellbridge> | <sm> especially if they're going to be comparing implementations as you say |
| 01:10:24 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 01:10:37 | <haskellbridge> | <sm> but YMMV and you can always split up the package later as jack says |
| 01:10:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 01:10:53 | <jackdk> | Especially if the "experimentation phase" means "add and benchmark them all" and that's something that most users will want to do. |
| 01:12:52 | <haskellbridge> | <sm> if you unnecessarily proliferate packages and it's not providing real benefit, I promise some day as maintainer you will rue the day |
| 01:14:04 | <jackdk> | Knowing little about your problem space, and having tremendous respect for Ed's library design sensibilities, I would lean towards following `ad` as a model over `regex-*` since it sounds closer to what you want to do. Note also that the Kmettverse of category-theory-flavoured packages started as a single `category-extras` package that was split when it became too large |
| 01:14:20 | <Guest71> | So my theory is that for initial setup my users would pull an umbrella package that re-exports the smaller packages, benchmark their code, pick an implementation (or implementations) and then change their dependencies to only pull the one implementation. |
| 01:14:20 | <jackdk> | sm: +1, again |
| 01:14:55 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
| 01:16:20 | <Guest71> | That ad package does look like the class of problem that my library tries to solve, though |
| 01:16:20 | <jackdk> | I think it is easier to add that engineering later, should it prove necessary, than it will be to remove it should it prove unnecessary. It also won't leave a trail of obsolete packages on Hackage. YAGNI is a great rule of thumb, particularly if you can get your code into users' hands (via a soft-launch on a public repo) and find out whether you are really GNI. |
| 01:17:58 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@79.127.217.40) |
| 01:18:31 | <jackdk> | The risk is that you do all this work and people bounce off your library because they don't understand your abstraction over all the implementations. I have seen it many times with `regex-*`: beginners come in with a problem and know that regexen are _a_ solution to that problem, and get completely lost. If your target audience includes people dipping into Haskell from other languages, there's a lot to be said for simple packages. |
| 01:20:30 | <jackdk> | Also, I would expect numeric code to be pure, and the "interface" to be "all these functions have the same type, so I can apply the one I want". If FFI or complex data structures are involved, perhaps that's not the case, but it's an ideal. I consider https://hackage.haskell.org/package/search-algorithms a beautiful package, because its interface is just functions. |
| 01:21:06 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f246994c33ea14f59d4.dip0.t-ipconnect.de) |
| 01:21:37 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:21:49 | <Guest71> | I am now realizing I made no emphasis on the umbrella package and it might address many of the concerns you raise. |
| 01:21:49 | <Guest71> | Because the plan was to have an umbrella project that reexports all the other smaller packages. Semantically, it would look exactly like the monopackage. |
| 01:22:09 | <Guest71> | (Ideally you'd use it a little at first and then commit to one of the implementations) |
| 01:23:10 | <Guest71> | jackdk: the different implementations have different data requirements so they do handle special purpose data structures. Hence the interface (a type class) and not just a single type. |
| 01:23:26 | <Guest71> | No FFI though, pure Haskell. |
| 01:23:40 | <Guest71> | (Portable Haskell too, if that matters) |
| 01:24:25 | <Guest71> | Then again, as you say, semantic equivalence means that I can split off at any time in the future and not even break API |
| 01:24:35 | <Guest71> | That would for sure be more conservative |
| 01:24:36 | <jackdk> | Beware that Haddocks' rendering of module re-exports is not the clearest, especially for new users. I still think I'd do the simplest thing that could possibly work, which still sounds like a single package. |
| 01:26:30 | × | ColinRobinson quits (~juan@user/JuanDaugherty) (Quit: ColinRobinson) |
| 01:26:46 | <Guest71> | Making the monopackage from the microrepos would probably just entail using git submodules and crafting a .cabal file for the purpose. So basically easy. |
| 01:27:02 | <jackdk> | This conversation has gone on for nearly 90 minutes without a clear resolution, and I'm sorry but I have to tap out and focus on work. I think you should soft-launch a monopackage to a git forge and try and drum up some users. That would give you more information about what your real users need from your library, and how to split it up; and give us something to look at so we're making recommendations based on something that we can see. |
| 01:27:54 | <Guest71> | jackdk: Oh, sorry to keep you busy. Thank you so much! |
| 01:28:39 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 01:28:49 | <jackdk> | I still don't understand (but would like to, once it's in a public repo) what numeric algorithms you're implementing and whether 4× the LoC of `lens` indicates opportunities for simplification or for library splitting. Best of luck Guest71, I hope you figure out something that works for you and your users. |
| 01:30:59 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 01:32:23 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:32:44 | × | otto_s quits (~user@p5b044c54.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 01:34:29 | → | otto_s joins (~user@p4ff27909.dip0.t-ipconnect.de) |
| 01:38:56 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 01:39:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:43:25 | → | califax joins (~califax@user/califx) |
| 01:44:19 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 01:45:02 | <Guest71> | sm: Thanks to you as well, you were very helpful! |
| 01:47:01 | <haskellbridge> | <sm> 👍 |
| 01:49:30 | <Guest71> | geekosaur, ColinRobinson, thanks for your input as well |
| 01:50:01 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 01:53:12 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 01:55:02 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:03:07 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f246994c33ea14f59d4.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 02:04:15 | × | mulk quits (~mulk@p5b112493.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 02:04:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 02:13:22 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
| 02:14:55 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:17:50 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@79.127.217.40) (Quit: Leaving) |
| 02:19:11 | → | mulk joins (~mulk@pd9514590.dip0.t-ipconnect.de) |
| 02:19:27 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 02:21:04 | × | user363627 quits (~user@user/user363627) (Remote host closed the connection) |
| 02:23:20 | → | smalltalkman joins (uid545680@id-545680.hampstead.irccloud.com) |
| 02:23:35 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 02:24:06 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 02:30:18 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:34:34 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 02:43:10 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 02:44:06 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 02:45:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:49:58 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 02:52:46 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:56:37 | → | Square joins (~Square@user/square) |
| 03:03:03 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 03:06:23 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 03:06:51 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out) |
| 03:06:59 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 03:07:20 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 03:07:35 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 03:11:42 | → | euleritian joins (~euleritia@77.23.250.232) |
| 03:14:07 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:16:20 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 03:18:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 03:19:28 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 03:19:39 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:20:43 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 03:21:54 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 03:27:00 | → | housemate joins (~housemate@146.70.66.228) |
| 03:29:30 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:34:15 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 03:36:54 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 03:37:33 | → | Guest20 joins (~Guest71@2800:a4:10ef:7400:35a0:bf8a:5772:25a7) |
| 03:37:34 | <Square> | I will be neading to create a JSON (de)serializer for a type that will require a context during the deserialization step. Aiui aeson doesn't support this. Sure I could roll my own with with some parser combinators, but I wonder if anyone sees a simpler approach? |
| 03:38:10 | × | Guest71 quits (~Guest71@2800:a4:10ef:7400:35a0:bf8a:5772:25a7) (Ping timeout: 240 seconds) |
| 03:38:38 | <jackdk> | Square: what sort of data is carried by the context? |
| 03:41:23 | <Square> | jackdk, info about how fields should be deserialized. Like the presence of '"value":12' could get all sorts of type wrappings. 'Int', 'Maybe Int', 'SomeType (Maybe Int)' |
| 03:42:36 | <jackdk> | Is the universe of possible contexts small enough to be represented by a family of newtypes? |
| 03:44:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:45:08 | <jackdk> | merijn: your client is blinking in and out of this channel again |
| 03:45:33 | <Square> | jackdk, Hmm possibly. But I forgot to say that above mentioned types will be shuved into a existential type |
| 03:46:01 | <Square> | existentially qualified wrapper type* |
| 03:46:08 | <Square> | quantified* |
| 03:46:15 | <jackdk> | Can we jump to the concrete? What type are you trying to deserialise into and is the context defined anywhere (even perhaps outside of Haskell, like an API doc?) |
| 03:46:39 | <Square> | ok |
| 03:47:11 | <Square> | Say i want to deserialize a Map SomeKey |
| 03:47:12 | <Square> | ops |
| 03:47:40 | <jackdk> | If this is going to be a long explanation, you might want to use a pastebin |
| 03:47:57 | <Square> | Say i want to deserialize a 'Map SomeKey Box'. 'data Box = forall a. Box a'. |
| 03:48:06 | <Square> | ok, ill do that |
| 03:48:27 | <jackdk> | Thanks. Please mention me when it's ready so I get a beep |
| 03:49:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 03:57:28 | <Square> | i will! Realized I needed to think a bit to write something comprehensive. |
| 04:00:16 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:04:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 04:05:24 | → | jzargo joins (~jzargo@user/jzargo) |
| 04:10:06 | <Square> | jackdk, Hope this makes sense https://paste.tomsmeding.com/dCXlspBC |
| 04:10:23 | × | housemate quits (~housemate@146.70.66.228) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. I do not work for any body DIRECTLY although I do represent BOT NET.) |
| 04:12:12 | <Square> | So I redifined my idea a bit, so ignore types mentioned in posts before the paste. |
| 04:12:21 | × | m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 276 seconds) |
| 04:14:23 | <Square> | I guess the parser would use a "Output Box" where box would be the sumtype housing the listing of type I mentioned in the paste. That "Box" would need existential quantifican (+ Typeable) as the enums would be arbitrary. |
| 04:15:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:17:07 | → | m5zs7k joins (aquares@web10.mydevil.net) |
| 04:18:11 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:20:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 04:23:40 | × | Guest20 quits (~Guest71@2800:a4:10ef:7400:35a0:bf8a:5772:25a7) (Ping timeout: 240 seconds) |
| 04:28:37 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 04:31:05 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:37:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 04:49:08 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:51:09 | → | sp1ff joins (~user@c-67-160-173-55.hsd1.wa.comcast.net) |
| 04:57:33 | → | CaptainSlog joins (~user@67.237.174.60) |
| 04:57:56 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 05:01:29 | × | CaptainSlog quits (~user@67.237.174.60) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4)) |
| 05:04:28 | <jackdk> | I'm sorry, I still don't really understand what I'm looking at. Is `Wrap a` meant to be a sum type? Is the universe of keys meant to be finite? |
| 05:05:22 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:05:58 | <jackdk> | Is it fair to characterise the problem as "I want to provide a set of keys, whether or not the keys are optional, and the types of their expected value, and get a JSON deserialiser for an object with those keys"? |
| 05:08:31 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:08:50 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:13:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 05:19:22 | <mauke> | Square: I mean, you could use aeson to decode to Value |
| 05:19:36 | <mauke> | then the rest boils down to tree conversion, not json parsing |
| 05:21:58 | → | dontdieych2 joins (~quassel@user/dontdieych2) |
| 05:24:13 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:28:44 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 05:29:50 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 05:30:12 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 05:30:33 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 05:35:52 | → | raym joins (~ray@user/raym) |
| 05:39:24 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Read error: Connection reset by peer) |
| 05:39:36 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:39:38 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 05:42:59 | × | tt12310978324354 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Ping timeout: 260 seconds) |
| 05:43:53 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 05:46:03 | × | olivial quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer) |
| 05:46:19 | → | olivial joins (~benjaminl@user/benjaminl) |
| 05:47:34 | → | tt12310978324354 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) |
| 05:47:38 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 05:48:01 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 248 seconds) |
| 05:48:02 | tnt2 | is now known as tnt1 |
| 05:54:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:59:34 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 05:59:45 | × | alp quits (~alp@2001:861:8ca0:4940:e814:f100:32a:4db4) (Ping timeout: 248 seconds) |
| 06:00:21 | × | hsw_ quits (~hsw@112-104-8-145.adsl.dynamic.seed.net.tw) (Ping timeout: 248 seconds) |
| 06:00:24 | × | ft quits (~ft@p4fc2a354.dip0.t-ipconnect.de) (Quit: leaving) |
| 06:04:19 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:08:50 | → | michalz joins (~michalz@185.246.207.221) |
| 06:10:03 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:13:37 | × | gorignak quits (~gorignak@user/gorignak) (Ping timeout: 248 seconds) |
| 06:13:41 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Remote host closed the connection) |
| 06:13:44 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Remote host closed the connection) |
| 06:13:58 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 06:14:03 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 06:14:41 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 06:16:59 | × | myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Remote host closed the connection) |
| 06:17:31 | → | gorignak joins (~gorignak@user/gorignak) |
| 06:17:41 | → | myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com) |
| 06:18:16 | × | doyougnu quits (~doyougnu@syn-045-046-170-068.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 06:18:32 | → | doyougnu joins (~doyougnu@syn-045-046-170-068.res.spectrum.com) |
| 06:18:47 | × | lbseale quits (~quassel@user/ep1ctetus) (Quit: No Ping reply in 180 seconds.) |
| 06:20:03 | → | lbseale joins (~quassel@user/ep1ctetus) |
| 06:22:57 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 06:23:11 | <Square> | jackdk, the number of keys will be in the several 100s range. And data Wrap = IWrap Int | SWrap String | forall a. (Enum a, Typeable a) => SCWrap a | forall a. (Enum a, Typeable a) => MCWrap (Set a) | etc... |
| 06:25:26 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:28:36 | → | hsw joins (~hsw@112-104-8-145.adsl.dynamic.seed.net.tw) |
| 06:32:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 06:32:13 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 06:36:35 | × | euleritian quits (~euleritia@77.23.250.232) (Ping timeout: 244 seconds) |
| 06:36:36 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 06:37:13 | → | euleritian joins (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) |
| 06:40:18 | → | alp joins (~alp@2001:861:8ca0:4940:1917:36a4:8890:6036) |
| 06:41:14 | → | Square2 joins (~Square4@user/square) |
| 06:44:30 | × | Square quits (~Square@user/square) (Ping timeout: 265 seconds) |
| 06:45:36 | × | euleritian quits (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 06:45:54 | → | euleritian joins (~euleritia@77.23.250.232) |
| 06:47:54 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:51:27 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 06:52:15 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 276 seconds) |
| 06:52:15 | tnt2 | is now known as tnt1 |
| 06:53:08 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 06:55:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:57:22 | → | acidjnk joins (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) |
| 06:57:22 | × | euleritian quits (~euleritia@77.23.250.232) (Read error: Connection reset by peer) |
| 06:57:29 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 06:57:40 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 06:58:04 | <Square2> | https://learnyouahaskell.org seems to have problems with latest iterations of Firefox? https://imgur.com/a/tosoyH6 . Author says he idles here using username "BONUS", but I can't find him. |
| 06:59:17 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 06:59:28 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds) |
| 06:59:28 | tnt2 | is now known as tnt1 |
| 06:59:35 | → | Sgeo_ joins (~Sgeo@user/sgeo) |
| 07:00:27 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 07:03:22 | × | Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 265 seconds) |
| 07:03:54 | <mauke> | that was like 10 years ago |
| 07:03:57 | → | CiaoSen joins (~Jura@2a05:5800:21a:4900:ca4b:d6ff:fec1:99da) |
| 07:05:00 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 07:05:54 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds) |
| 07:05:54 | tnt2 | is now known as tnt1 |
| 07:11:02 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:12:15 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds) |
| 07:12:40 | → | euleritian joins (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) |
| 07:13:50 | × | remexre quits (~remexre@user/remexre) (Read error: Connection reset by peer) |
| 07:13:58 | → | remexre joins (~remexre@user/remexre) |
| 07:16:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 07:16:45 | → | rvalue- joins (~rvalue@user/rvalue) |
| 07:17:29 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 260 seconds) |
| 07:19:57 | <Square2> | mauke, Any suggestions on where to send new users these days? I guess some users will get cold feet if they're told that is the best learning resource. |
| 07:23:13 | rvalue- | is now known as rvalue |
| 07:25:39 | <mauke> | @where books |
| 07:25:39 | <lambdabot> | https://www.extrema.is/articles/haskell-books is the best list of Haskell books. See also: LYAH, HTAC, RWH, PH, YAHT, SOE, HR, PIH, TFwH, wikibook, PCPH, HPFFP, FSAF, HftVB, TwT, FoP, PFAD, WYAH, |
| 07:25:39 | <lambdabot> | non-haskell-books |
| 07:26:24 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:26:44 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 07:29:00 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 07:29:55 | → | ash3en joins (~Thunderbi@146.70.124.222) |
| 07:30:00 | × | koz quits (~koz@121.99.240.58) (Quit: ZNC 1.8.2 - https://znc.in) |
| 07:30:50 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 07:32:40 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:32:48 | → | koz joins (~koz@121.99.240.58) |
| 07:34:27 | <Square2> | mauke, thanks |
| 07:35:19 | × | ProofTechnique_ quits (sid79547@id-79547.ilkley.irccloud.com) (*.net *.split) |
| 07:35:19 | × | amir quits (sid22336@user/amir) (*.net *.split) |
| 07:35:19 | × | lexi-lambda quits (sid92601@id-92601.hampstead.irccloud.com) (*.net *.split) |
| 07:35:19 | × | S11001001 quits (sid42510@id-42510.ilkley.irccloud.com) (*.net *.split) |
| 07:35:19 | × | T_S_____ quits (sid501726@id-501726.uxbridge.irccloud.com) (*.net *.split) |
| 07:35:19 | × | dsal quits (sid13060@id-13060.lymington.irccloud.com) (*.net *.split) |
| 07:35:39 | <mauke> | @where tutorial |
| 07:35:39 | <lambdabot> | http://www.haskell.org/tutorial/ |
| 07:35:41 | <mauke> | @where tutorials |
| 07:35:41 | <lambdabot> | http://haskell.org/haskellwiki/Tutorials |
| 07:35:43 | <mauke> | ... |
| 07:38:13 | <Square2> | great |
| 07:39:18 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:40:37 | → | ProofTechnique_ joins (sid79547@id-79547.ilkley.irccloud.com) |
| 07:40:37 | → | amir joins (sid22336@user/amir) |
| 07:40:37 | → | lexi-lambda joins (sid92601@id-92601.hampstead.irccloud.com) |
| 07:40:37 | → | S11001001 joins (sid42510@id-42510.ilkley.irccloud.com) |
| 07:40:37 | → | T_S_____ joins (sid501726@id-501726.uxbridge.irccloud.com) |
| 07:40:37 | → | dsal joins (sid13060@id-13060.lymington.irccloud.com) |
| 07:41:47 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:43:38 | × | manwithluck quits (~manwithlu@194.177.28.164) (Read error: Connection reset by peer) |
| 07:44:03 | → | manwithluck joins (~manwithlu@194.177.28.164) |
| 07:46:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 07:53:13 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:54:15 | <haskellbridge> | <sm> @where links |
| 07:54:21 | <sm> | @where links |
| 07:54:21 | <lambdabot> | https://haskell-links.org collected Haskell links and search tools, including @where links |
| 07:54:37 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 07:55:12 | × | acidjnk quits (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 07:55:30 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 252 seconds) |
| 07:55:31 | tnt2 | is now known as tnt1 |
| 07:56:09 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 07:56:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:42 | → | caconym joins (~caconym@user/caconym) |
| 08:01:01 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 08:01:20 | → | housemate joins (~housemate@146.70.66.228) |
| 08:08:07 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 08:08:17 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 08:14:26 | × | euleritian quits (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:14:44 | × | dysthesis quits (~dysthesis@user/dysthesis) (Remote host closed the connection) |
| 08:14:45 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 08:19:01 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
| 08:26:34 | × | housemate quits (~housemate@146.70.66.228) (Ping timeout: 252 seconds) |
| 08:30:46 | × | todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 08:32:49 | × | Katarushisu quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
| 08:33:00 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds) |
| 08:33:20 | → | Katarushisu joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) |
| 08:33:56 | → | euleritian joins (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) |
| 08:37:27 | → | akegalj joins (~akegalj@168-159.dsl.iskon.hr) |
| 08:44:13 | → | merijn joins (~merijn@77.242.116.146) |
| 08:50:18 | × | euleritian quits (~euleritia@dynamic-176-007-194-010.176.7.pool.telefonica.de) (Ping timeout: 272 seconds) |
| 08:50:31 | → | euleritian joins (~euleritia@dynamic-176-004-001-234.176.4.pool.telefonica.de) |
| 08:54:35 | → | crvs joins (~crvs@185.147.238.3) |
| 08:56:24 | × | mange quits (~user@user/mange) (Ping timeout: 276 seconds) |
| 08:57:03 | × | ash3en quits (~Thunderbi@146.70.124.222) (Quit: ash3en) |
| 09:01:58 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 09:03:20 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 09:03:52 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 09:04:17 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds) |
| 09:08:10 | × | kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux) |
| 09:09:56 | → | kimiamania joins (~65804703@user/kimiamania) |
| 09:12:34 | × | euleritian quits (~euleritia@dynamic-176-004-001-234.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 09:13:02 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 09:13:47 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 09:14:22 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 09:14:25 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 09:15:14 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 09:15:36 | → | merijn joins (~merijn@77.242.116.146) |
| 09:18:45 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 09:19:04 | → | euleritian joins (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) |
| 09:19:44 | × | todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 09:20:35 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 09:20:37 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds) |
| 09:20:54 | × | euleritian quits (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 09:21:11 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 09:24:43 | → | dysthesis joins (~dysthesis@user/dysthesis) |
| 09:25:26 | → | todi1 joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 09:26:13 | × | todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 09:28:07 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 09:31:30 | × | todi1 quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 09:32:16 | → | merijn joins (~merijn@77.242.116.146) |
| 09:37:25 | × | cyphase quits (~cyphase@user/cyphase) (Ping timeout: 244 seconds) |
| 09:42:29 | → | cyphase joins (~cyphase@user/cyphase) |
| 09:43:17 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 09:49:09 | → | acidjnk joins (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) |
| 09:55:48 | × | akegalj quits (~akegalj@168-159.dsl.iskon.hr) (Ping timeout: 245 seconds) |
| 09:58:57 | → | housemate joins (~housemate@146.70.66.228) |
| 10:06:23 | → | akegalj joins (~akegalj@89-172-132-1.adsl.net.t-com.hr) |
| 10:06:51 | → | comerijn joins (~merijn@77.242.116.146) |
| 10:06:52 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 244 seconds) |
| 10:08:24 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 10:08:50 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 272 seconds) |
| 10:08:50 | tnt2 | is now known as tnt1 |
| 10:09:36 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 10:14:25 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 10:16:03 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 10:19:40 | → | hgolden_ joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 10:20:30 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Read error: Connection reset by peer) |
| 10:20:59 | → | hgolden__ joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 10:22:48 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 10:24:00 | × | hgolden_ quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Ping timeout: 252 seconds) |
| 10:24:08 | × | dtman34 quits (~dtman34@c-76-156-106-11.hsd1.mn.comcast.net) (Ping timeout: 244 seconds) |
| 10:24:19 | → | dtman34_ joins (~dtman34@c-76-156-106-11.hsd1.mn.comcast.net) |
| 10:24:21 | → | sprotte24 joins (~sprotte24@p200300d16f3cd90039044ee6d2c6f144.dip0.t-ipconnect.de) |
| 10:24:43 | → | __monty__ joins (~toonn@user/toonn) |
| 10:25:02 | × | sprotte24 quits (~sprotte24@p200300d16f3cd90039044ee6d2c6f144.dip0.t-ipconnect.de) (Client Quit) |
| 10:28:03 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:28:49 | × | V quits (~v@ircpuzzles/2022/april/winner/V) (Remote host closed the connection) |
| 10:29:02 | × | xdej quits (~xdej@quatramaran.salle-s.org) (Ping timeout: 252 seconds) |
| 10:29:11 | → | xdej joins (~xdej@quatramaran.salle-s.org) |
| 10:29:17 | → | V joins (~v@ircpuzzles/2022/april/winner/V) |
| 10:32:18 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 10:34:05 | × | tv quits (~tv@user/tv) (Read error: Connection reset by peer) |
| 10:35:03 | → | ColinRobinson joins (~juan@user/JuanDaugherty) |
| 10:36:28 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 10:37:09 | × | todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 10:38:06 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 10:39:40 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Ping timeout: 252 seconds) |
| 10:45:54 | × | housemate quits (~housemate@146.70.66.228) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. I do not work for any body DIRECTLY although I do represent BOT NET.) |
| 10:47:51 | <smiesner> | hi, i want to update a haskell package in nix. is this the correct file i have to edit and PR? https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/development/haskell-modules/hackage-packages.nix#L158047 |
| 10:48:04 | <dminuoso> | No. |
| 10:48:17 | <dminuoso> | smiesner: What exactly do you want to do with the package? |
| 10:48:34 | <smiesner> | I want to bump it's version, since there is an update of the library. |
| 10:48:49 | <dminuoso> | smiesner: That will happen automatically to a degree. |
| 10:50:24 | × | Square2 quits (~Square4@user/square) (Ping timeout: 260 seconds) |
| 10:51:09 | <yushyin> | see first line of that file: /* hackage-packages.nix is auto-generated by hackage2nix -- DO NOT EDIT MANUALLY! */ |
| 10:51:34 | <smiesner> | oh great, reading would have helped as always |
| 10:51:40 | <dminuoso> | There is ./pkgs/development/haskell-modules/configuration-hackage2nix/stackage.yaml however that is used to fiddle with that manuallz |
| 10:51:41 | → | mreh joins (~matthew@host86-146-138-36.range86-146.btcentralplus.com) |
| 10:52:17 | <dminuoso> | But not for regular updates. Roughly nix is doing the same thing as stackage: provide a snapshot of hackage where things mostly work with each other. |
| 10:52:24 | <dminuoso> | s/nix/nixpkgs/ |
| 10:53:06 | <dminuoso> | Err ./pkgs/development/haskell-modules/configuration-hackage2nix/main.yaml rather, sorry |
| 10:53:22 | <dminuoso> | (As you can see, this roughly follows stackage) |
| 10:55:47 | <dminuoso> | smiesner: https://nixos.org/manual/nixpkgs/stable/#haskell-available-packages contains a bit of documentation on the subject |
| 10:55:49 | <smiesner> | dminuoso: thank you very much! |
| 10:56:16 | <mreh> | is it possible to (somewhat) reliably memoise with function type arguments? maybe with something like a StableName and some compiler magic? |
| 10:56:30 | <yushyin> | smiesner: maybe you can/should overlay the package or even use haskell.nix, either way, it might be worth popping over to #haskell:nixos.org and asking them what you should do now |
| 10:56:41 | <dminuoso> | (So roughly we take most of hackage, but when the package is also on some stackage resolver - dont ask me which - then we try to provide the version from that stackage resolveer/ |
| 10:57:09 | <dminuoso> | At work we have stopped using nixpkgs haskell packages because it leads to lot of problems and lack of speed. |
| 10:57:38 | <dminuoso> | It's only haskell.nix here now, which gives us all the benefits and the big price tag attached to it. :-) |
| 10:57:55 | <smiesner> | thanks for the very detailed explanation and links! |
| 10:58:23 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 10:58:36 | <dminuoso> | The biggest price tag is that you really want a local nix cache with some CI that is able to build the bootstrap GHCs continuously for all architectures you have. |
| 10:58:37 | → | housemate joins (~housemate@146.70.66.228) |
| 10:59:03 | <dminuoso> | If you can muster that, its great. If not... haskell.nix is a kind of terrible experience unless you dont mind following the update cadence of IOG. |
| 10:59:27 | <smiesner> | just for my understanding now: when a library is bumped on hackage, how long does nix need to integrate it? or is it no time at all bc it 'researches' on every nix build try? |
| 11:00:01 | <dminuoso> | smiesner: It depends on whether it receives a pin in that main.yaml |
| 11:00:07 | <dminuoso> | (or a pin via stackage resolver) |
| 11:00:23 | <dminuoso> | If its unpinned, it should get updated the next time haskell2nix runs (daily perhaps? unsure) |
| 11:02:11 | <dminuoso> | smiesner: Though know, that these updates dont get merged into master automatically. |
| 11:02:28 | <smiesner> | hm, i cant find the package I want to use the latest version of in the main.yaml. it's this one: https://search.nixos.org/packages?channel=24.11&show=haskellPackages.hosc&from=0&size=50&sort=relevance&type=packages&query=hosc |
| 11:02:39 | <smiesner> | i'm really a noobie with nix, sorry |
| 11:02:47 | <smiesner> | just used it once or twice |
| 11:02:56 | <dminuoso> | smiesner: There is a branch called haskell-updates which I believe is updated daily |
| 11:03:30 | <dminuoso> | Now there's some maintainer script to merge open haskell-updates PRs back into master. |
| 11:03:48 | <dminuoso> | See https://github.com/NixOS/nixpkgs/blob/haskell-updates/pkgs/development/haskell-modules/HACKING.md |
| 11:05:01 | <dminuoso> | smiesner: https://github.com/NixOS/nixpkgs/blob/haskell-updates/pkgs/development/haskell-modules/HACKING.md#additional-info here we go |
| 11:05:07 | <dminuoso> | Hydra evaluates haskell-branch every 4 hours. |
| 11:05:24 | <dminuoso> | The Haskell team members generally hang out in the Matrix room #haskell:nixos.org. |
| 11:05:29 | <dminuoso> | Check with them for further details. |
| 11:06:59 | <Leary> | mreh: Try 'stable-memo' or 'memo-ptr' and find out. |
| 11:07:02 | <smiesner> | thank you so much! |
| 11:07:54 | × | housemate quits (~housemate@146.70.66.228) (Quit: Nothing to see here. I wasn't there. I take IRC seriously. I do not work for any body DIRECTLY although I do represent BOT NET.) |
| 11:11:04 | → | xff0x joins (~xff0x@2405:6580:b080:900:7761:255c:77e5:46e1) |
| 11:11:41 | <mreh> | Leary, I think I'll have a go and see what happens. |
| 11:12:07 | <mreh> | I was asking on the off chance someone had tried it before. |
| 11:12:18 | × | comerijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 11:14:19 | <mreh> | I'm planning an interface where users can fetch a graphics pipeline uniform from the environment when they call a function with a getter, but every call will result in a new uniform descriptor being added, and on some systems there are only 4 of those available |
| 11:14:53 | <mreh> | so if I could memoise the binding number for each getter, that would be nice |
| 11:15:08 | <mreh> | but it's not the end of the world |
| 11:17:23 | <Leary> | I would not rely on this kind of memoisation, but write something that explicitly generates and manages unique identifiers. |
| 11:20:03 | <mreh> | It might be easier just to document the gotcha. It's not very onerous to ask users to only get a uniform once in their pipeline definition. |
| 11:25:16 | → | merijn joins (~merijn@77.242.116.146) |
| 11:27:48 | → | Digitteknohippie joins (~user@user/digit) |
| 11:28:50 | × | Digit quits (~user@user/digit) (Ping timeout: 248 seconds) |
| 11:32:12 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 11:33:09 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 11:33:24 | → | euleritian joins (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) |
| 11:34:11 | × | myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Ping timeout: 244 seconds) |
| 11:34:54 | → | myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com) |
| 11:35:19 | × | Typedfern quits (~Typedfern@104.red-83-37-43.dynamicip.rima-tde.net) (Ping timeout: 260 seconds) |
| 11:38:31 | × | pointlessslippe- quits (~pointless@62.106.85.17) (Quit: ZNC - http://znc.in) |
| 11:40:55 | → | weary-traveler joins (~user@user/user363627) |
| 11:42:18 | × | dysthesis quits (~dysthesis@user/dysthesis) (Remote host closed the connection) |
| 11:44:17 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 11:45:06 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 11:45:36 | × | euleritian quits (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 11:45:53 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 11:48:35 | × | notzmv quits (~umar@user/notzmv) (Ping timeout: 252 seconds) |
| 11:48:36 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Ping timeout: 252 seconds) |
| 11:51:23 | → | Typedfern joins (~Typedfern@51.red-83-37-40.dynamicip.rima-tde.net) |
| 11:52:19 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 11:54:28 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 11:54:58 | → | euleritian joins (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) |
| 11:55:53 | × | Typedfern quits (~Typedfern@51.red-83-37-40.dynamicip.rima-tde.net) (Ping timeout: 244 seconds) |
| 11:56:54 | → | tv joins (~tv@user/tv) |
| 12:00:04 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 12:00:46 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 12:01:21 | × | CiaoSen quits (~Jura@2a05:5800:21a:4900:ca4b:d6ff:fec1:99da) (Ping timeout: 252 seconds) |
| 12:01:25 | Digitteknohippie | is now known as Digit |
| 12:01:45 | → | caconym joins (~caconym@user/caconym) |
| 12:05:03 | × | euleritian quits (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 12:05:20 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 12:08:32 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 12:09:08 | → | Typedfern joins (~Typedfern@248.red-83-37-32.dynamicip.rima-tde.net) |
| 12:09:21 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 12:10:52 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 12:11:31 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 12:12:11 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 12:21:53 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 12:25:12 | → | weary-traveler joins (~user@user/user363627) |
| 12:26:51 | → | dnerdhm^ joins (~dnerdhm@108.192.66.114) |
| 12:28:43 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:30:37 | → | alexherbo2 joins (~alexherbo@2a02-8440-3505-d15c-e885-791c-fa20-9243.rev.sfr.net) |
| 12:32:56 | ColinRobinson | is now known as JuanDaugherty |
| 12:34:52 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 12:35:01 | → | euleritian joins (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) |
| 12:35:22 | × | euleritian quits (~euleritia@dynamic-176-004-140-216.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 12:35:40 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 12:36:20 | → | user363627 joins (~user@user/user363627) |
| 12:40:21 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 248 seconds) |
| 12:42:09 | × | AlexZenon quits (~alzenon@178.34.163.23) (Quit: ;-) |
| 12:42:56 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 12:44:50 | × | user363627 quits (~user@user/user363627) (Remote host closed the connection) |
| 12:46:11 | × | AlexNoo quits (~AlexNoo@178.34.163.23) (Quit: Leaving) |
| 12:46:31 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 12:47:35 | <kuribas> | tomsmeding: I've started a type checker in idris. I am using normal substitution for now. |
| 12:47:59 | <kuribas> | Forall : String -> (k:Kind) -> PolyType l -> PolyType l |
| 12:48:30 | <kuribas> | basically "forall (a:k) . t" |
| 12:49:03 | <kuribas> | tomsmeding: a verified checker. |
| 12:50:32 | <kuribas> | tomsmeding: My goal is to have a verified implementation of https://www.cl.cam.ac.uk/~nk480/bidir.pdf, then add higher kinded types, type classes, data kinds and type families. |
| 12:55:06 | × | xff0x quits (~xff0x@2405:6580:b080:900:7761:255c:77e5:46e1) (Quit: xff0x) |
| 12:57:12 | → | xff0x joins (~xff0x@2405:6580:b080:900:d12f:67f5:c2b0:5368) |
| 12:57:13 | → | Square2 joins (~Square4@user/square) |
| 12:57:47 | → | notzmv joins (~umar@user/notzmv) |
| 12:57:53 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 12:58:04 | → | rvalue- joins (~rvalue@user/rvalue) |
| 12:58:43 | → | Guest38 joins (~Guest38@2a02:a03f:c0fd:e500:6c68:1cd6:8c4:155f) |
| 12:59:44 | × | Guest38 quits (~Guest38@2a02:a03f:c0fd:e500:6c68:1cd6:8c4:155f) (Client Quit) |
| 12:59:58 | → | housemate joins (~housemate@146.70.66.228) |
| 13:00:12 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 264 seconds) |
| 13:00:21 | × | PHO` quits (~pho@akari.cielonegro.org) (Quit: SIGTERM received; exit) |
| 13:03:46 | × | xff0x quits (~xff0x@2405:6580:b080:900:d12f:67f5:c2b0:5368) (Ping timeout: 248 seconds) |
| 13:04:27 | → | PHO` joins (~pho@akari.cielonegro.org) |
| 13:05:54 | rvalue- | is now known as rvalue |
| 13:06:43 | → | xff0x joins (~xff0x@2405:6580:b080:900:cb37:dc44:25ad:be87) |
| 13:12:11 | <kuribas> | Is '* -> *' considered a type? |
| 13:12:27 | <kuribas> | :k * -> * |
| 13:12:28 | <lambdabot> | * |
| 13:13:30 | → | Digitteknohippie joins (~user@user/digit) |
| 13:13:53 | × | xff0x quits (~xff0x@2405:6580:b080:900:cb37:dc44:25ad:be87) (Ping timeout: 248 seconds) |
| 13:14:46 | × | Digit quits (~user@user/digit) (Ping timeout: 252 seconds) |
| 13:16:10 | <dminuoso> | kuribas: Yes, TypeInType is (in effect) on by default and cannot be turned off. |
| 13:16:31 | → | AlexNoo joins (~AlexNoo@178.34.163.23) |
| 13:16:41 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 13:17:05 | <kuribas> | Aren't types supposed to be inhabited? |
| 13:17:06 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 13:17:15 | <dminuoso> | Nope? |
| 13:17:32 | <dminuoso> | In fact, inhabitation and *inhabitability* are qualities of all types. |
| 13:17:34 | <kuribas> | So there is a difference betwee "Types" and "Type"? |
| 13:17:49 | <kuribas> | No, "Maybe" is not inhabited. |
| 13:17:56 | → | AlexZenon joins (~alzenon@178.34.163.23) |
| 13:17:57 | <kuribas> | :k Maybe |
| 13:17:58 | <lambdabot> | * -> * |
| 13:18:10 | <dminuoso> | kuribas: Types of type * -> * are uninhabitable. |
| 13:18:20 | <dminuoso> | Types of * are inhabitable, but not necessarily habitated. |
| 13:19:07 | <kuribas> | right. |
| 13:19:49 | <kuribas> | Then there is no distinction between types '*' and types with other kinds, even though '*' is named 'Type'? |
| 13:20:07 | <dminuoso> | What do you mean by distinction? |
| 13:20:13 | <dminuoso> | * and Int are *distinct* types. |
| 13:20:31 | <dminuoso> | % undefined :: * |
| 13:20:32 | <yahb2> | <interactive>:5:14: warning: [GHC-39567] [-Wstar-is-type] ; Using ‘*’ (or its Unicode variant) to mean ‘Data.Kind.Type’ ; relies on the StarIsType extension, which will become ; depreca... |
| 13:20:39 | <dminuoso> | % undefined :: Type |
| 13:20:39 | <yahb2> | <interactive>:7:14: error: [GHC-76037] ; Not in scope: type constructor or class ‘Type’ |
| 13:21:20 | × | m5zs7k quits (aquares@web10.mydevil.net) (Ping timeout: 265 seconds) |
| 13:21:22 | <dminuoso> | % import Data.Kind |
| 13:21:22 | <yahb2> | <no output> |
| 13:21:25 | <dminuoso> | % a = undefined :: Type |
| 13:21:25 | <yahb2> | <no output> |
| 13:21:28 | → | xff0x joins (~xff0x@2405:6580:b080:900:cb37:dc44:25ad:be87) |
| 13:22:01 | <dminuoso> | kuribas: Does that answer your question? |
| 13:22:38 | <dminuoso> | One particular note here: |
| 13:22:42 | <dminuoso> | type Type = TYPE LiftedRep |
| 13:22:44 | <kuribas> | I suppose. '*' or 'Type' is the "kind" Type, while other kinds are also types, but not the "kind" type.. |
| 13:23:02 | <dminuoso> | Well, the distinction is lost with TypeInType. |
| 13:23:05 | <dminuoso> | That's really the point of it. |
| 13:23:41 | <dminuoso> | Since even `Type` is inhabitated (by bottom), you cannot even differentiate in terms of "is it habitated" |
| 13:24:19 | <dminuoso> | And if "inhabitated by bottom" only came to mind |
| 13:24:22 | <dminuoso> | % data Foo |
| 13:24:22 | <yahb2> | <no output> |
| 13:24:31 | <dminuoso> | Here you have a type `Foo` inhabitated only by bottom. |
| 13:24:50 | <dminuoso> | Now it would be interesting if we could conjure `newtype Bar` equivalently |
| 13:26:01 | <__monty__> | (inhabited) |
| 13:26:12 | <dminuoso> | Oh, right. Thanks |
| 13:26:15 | <Leary> | % newtype Bar = Bar Bar |
| 13:26:15 | <yahb2> | <no output> |
| 13:26:36 | <dminuoso> | % undefined :: Bar |
| 13:26:36 | <yahb2> | <interactive>:23:1: error: [GHC-39999] ; • No instance for ‘Show Bar’ ; arising from a use of ‘Yahb2Defs.limitedPrint’ ; • In a stmt of an interactive GHCi command: ; Yahb2D... |
| 13:26:41 | <dminuoso> | Guess that works too. |
| 13:26:59 | <dminuoso> | But cute trick, did not know you could do that. |
| 13:27:14 | <kuribas> | What does that even mean? |
| 13:27:38 | <kuribas> | An uninhabited newtype? |
| 13:27:52 | <__monty__> | Except for bottom, yes. |
| 13:29:32 | <kuribas> | If it's not lazy, can it be bottom? |
| 13:33:00 | → | merijn joins (~merijn@77.242.116.146) |
| 13:34:09 | × | Digitteknohippie quits (~user@user/digit) (Ping timeout: 248 seconds) |
| 13:35:07 | → | m5zs7k joins (aquares@web10.mydevil.net) |
| 13:36:39 | <__monty__> | I don't see why not? |
| 13:42:48 | <geekosaur> | because if it's not lazy then it is necessarily fully evaluated already and any nbottom would have already been triggered |
| 13:44:10 | <__monty__> | That changes nothing about whether or not the type is inhabited though? |
| 13:45:35 | <geekosaur> | try constructing an inhabitant. (you can't) |
| 13:46:11 | <geekosaur> | since newtypes don't add a layer (unlike data) you must have an inhabitant to newtype-wrap into an inhabitant of the newtype |
| 13:51:04 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 13:51:49 | → | merijn joins (~merijn@77.242.116.146) |
| 13:52:09 | → | weary-traveler joins (~user@user/user363627) |
| 13:54:53 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 13:56:26 | <hellwolf> | λ newtype A = MkA Void |
| 13:56:46 | <hellwolf> | does that count? |
| 13:57:49 | hellwolf | maybe missing the point here :p |
| 13:58:40 | <geekosaur> | try making a value |
| 13:58:46 | <geekosaur> | "inhabited" |
| 13:58:51 | × | akegalj quits (~akegalj@89-172-132-1.adsl.net.t-com.hr) (Ping timeout: 244 seconds) |
| 13:58:55 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 14:00:21 | <hellwolf> | :type undefined |
| 14:00:27 | <hellwolf> | > :t undefined |
| 14:00:28 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
| 14:00:59 | <hellwolf> | "undefined :: GHC.Internal.Stack.Types.HasCallStack => a" |
| 14:01:01 | <hellwolf> | interesting :) |
| 14:01:45 | <hellwolf> | undefined = raise# (errorCallWithCallStackException "Prelude.undefined" ?callStack) |
| 14:03:10 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds) |
| 14:03:40 | → | vpan joins (~vpan@212.117.1.172) |
| 14:04:28 | → | merijn joins (~merijn@77.242.116.146) |
| 14:04:34 | <kuribas> | hellwolf: Void is actually inhabited :-O |
| 14:24:27 | → | ephilalethes joins (~noumenon@36.83.232.119) |
| 14:32:55 | <kuribas> | if it's defined as "data Void" |
| 14:32:57 | ← | kuribas parts (~user@ip-188-118-57-242.reverse.destiny.be) (ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.3)) |
| 14:39:46 | → | CiaoSen joins (~Jura@2a05:5800:21a:4900:ca4b:d6ff:fec1:99da) |
| 14:50:17 | → | chele joins (~chele@user/chele) |
| 14:52:17 | × | housemate quits (~housemate@146.70.66.228) (Ping timeout: 252 seconds) |
| 14:52:40 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 14:53:01 | → | euleritian joins (~euleritia@dynamic-176-006-134-022.176.6.pool.telefonica.de) |
| 14:53:37 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:56:17 | × | CiaoSen quits (~Jura@2a05:5800:21a:4900:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds) |
| 14:58:54 | <hellwolf> | do you need a visa for it? |
| 15:00:55 | × | ephilalethes quits (~noumenon@36.83.232.119) (Quit: Leaving) |
| 15:02:18 | × | eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 246 seconds) |
| 15:03:44 | → | alecs joins (~alecs@nat16.software.imdea.org) |
| 15:04:07 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:08:10 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 15:08:33 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 15:09:13 | <EvanR> | it's not morally inhabited |
| 15:09:35 | <EvanR> | also this stretches the letter and spirit of inhabited by some |
| 15:11:34 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 15:12:23 | × | alexherbo2 quits (~alexherbo@2a02-8440-3505-d15c-e885-791c-fa20-9243.rev.sfr.net) (Remote host closed the connection) |
| 15:12:42 | <int-e> | So Haskell is morally wrong, then... |
| 15:13:25 | → | akegalj joins (~akegalj@168-159.dsl.iskon.hr) |
| 15:13:26 | → | alexherbo2 joins (~alexherbo@2a02-8440-3505-d15c-f15c-6f5a-a985-dbfb.rev.sfr.net) |
| 15:14:07 | <geekosaur> | bottoms break everything 🙂 |
| 15:15:00 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 15:16:58 | × | alexherbo2 quits (~alexherbo@2a02-8440-3505-d15c-f15c-6f5a-a985-dbfb.rev.sfr.net) (Remote host closed the connection) |
| 15:19:17 | <__monty__> | I don't understand the problem, bottom is an inhabitant. You can't actually do anything with it but that doesn't matter, this is type checking, not program execution. |
| 15:20:57 | <geekosaur> | I think the context here is formal reasoning? and bottoms complicate that enormously |
| 15:21:38 | × | hueso quits (~root@user/hueso) (Ping timeout: 245 seconds) |
| 15:22:28 | <int-e> | Programs don't actually use bottoms very much, so some people argue that they have a moral right to reason about programs as if there were none :P |
| 15:23:55 | <int-e> | (not actually a joke... except that the term is terribly loaded) |
| 15:24:19 | <int-e> | but this is what (some) academics do for fun |
| 15:25:21 | × | SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving) |
| 15:27:27 | <EvanR> | bottom doesn't exist at type checking time |
| 15:27:44 | <EvanR> | so if this is just type checking, it still doesn't count |
| 15:28:00 | <EvanR> | ignoring shenanigans with undecidable instances |
| 15:28:08 | → | hueso joins (~root@user/hueso) |
| 15:28:25 | <EvanR> | but the heart of abstraction is ignoring stuff |
| 15:28:26 | <__monty__> | I have no idea what you mean. You can typecheck an infinite recursion just fine. |
| 15:28:43 | <EvanR> | exactly |
| 15:28:50 | <EvanR> | you are checking types not values |
| 15:29:04 | <__monty__> | That's a bottom, and hence an inhabitant, because it type checks. |
| 15:29:23 | <EvanR> | the program type checked, bottom is a semantic value |
| 15:34:19 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 15:40:55 | × | crvs quits (~crvs@185.147.238.3) (Quit: Leaving) |
| 15:43:13 | × | acidjnk quits (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 15:44:05 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 15:46:38 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 15:47:00 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 264 seconds) |
| 15:47:03 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 245 seconds) |
| 15:47:04 | tnt2 | is now known as tnt1 |
| 15:53:43 | × | euleritian quits (~euleritia@dynamic-176-006-134-022.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:54:02 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 15:55:18 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:57:23 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 15:59:55 | <haskellbridge> | <Bowuigi> Bottom just means "this doesn't work", evaluating one either results in a crash or in infinite recursion |
| 16:02:02 | <haskellbridge> | <Bowuigi> Being able to typecheck a bottom is not a formally nice property because you have one more inhabitant on every type and you have to adapt everything to that |
| 16:02:46 | <haskellbridge> | <Bowuigi> Parametricity gains extra conditions, the evaluation strategy now matters so you gotta be careful when doing equational reasoning, empty types are no longer empty, etc |
| 16:02:57 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 16:03:58 | → | euleritian joins (~euleritia@dynamic-176-006-134-022.176.6.pool.telefonica.de) |
| 16:04:35 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 16:08:05 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds) |
| 16:10:43 | → | merijn joins (~merijn@77.242.116.146) |
| 16:21:45 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:22:45 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds) |
| 16:24:11 | → | ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:463b:107b:324c:e3d3) |
| 16:25:29 | × | OftenFaded quits (~OftenFade@user/tisktisk) (Ping timeout: 265 seconds) |
| 16:26:20 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 16:31:49 | × | euleritian quits (~euleritia@dynamic-176-006-134-022.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 16:31:52 | → | Digit joins (~user@user/digit) |
| 16:32:45 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 252 seconds) |
| 16:32:46 | → | euleritian joins (~euleritia@dynamic-176-000-019-008.176.0.pool.telefonica.de) |
| 16:33:31 | → | acidjnk joins (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) |
| 16:34:10 | → | merijn joins (~merijn@77.242.116.146) |
| 16:36:41 | × | tomsmeding quits (~tomsmedin@2a01:4f8:c0c:5e5e::2) (Quit: ZNC 1.9.1 - https://znc.in) |
| 16:36:48 | × | yahb2 quits (~yahb2@user/tomsmeding/bot/yahb2) (Remote host closed the connection) |
| 16:37:12 | → | yahb2 joins (~yahb2@user/tomsmeding/bot/yahb2) |
| 16:37:12 | ChanServ | sets mode +v yahb2 |
| 16:37:49 | → | tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de) |
| 16:39:19 | × | euleritian quits (~euleritia@dynamic-176-000-019-008.176.0.pool.telefonica.de) (Read error: Connection reset by peer) |
| 16:39:37 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 16:39:49 | → | eL_Bart0 joins (eL_Bart0@dietunichtguten.org) |
| 16:40:49 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 16:42:18 | × | akegalj quits (~akegalj@168-159.dsl.iskon.hr) (Quit: leaving) |
| 16:43:19 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 16:52:11 | → | merijn joins (~merijn@77.242.116.146) |
| 16:54:30 | × | dnerdhm^ quits (~dnerdhm@108.192.66.114) (Remote host closed the connection) |
| 16:54:58 | <constxd> | bros what are the top haskell software |
| 16:55:13 | <constxd> | shellcheck, pandoc, xmonad? |
| 16:55:34 | <EvanR> | top tier haskell apps |
| 16:55:43 | <EvanR> | GHC |
| 16:55:58 | <constxd> | i am not including haskell-related tooling |
| 16:56:06 | <EvanR> | nikki and the robots |
| 16:59:04 | × | alecs quits (~alecs@nat16.software.imdea.org) (Ping timeout: 260 seconds) |
| 17:02:40 | × | hc quits (~hc@mail.hce.li) (Remote host closed the connection) |
| 17:03:06 | <geekosaur> | git-annex maybe? |
| 17:03:44 | × | alp quits (~alp@2001:861:8ca0:4940:1917:36a4:8890:6036) (Ping timeout: 260 seconds) |
| 17:04:02 | → | hc joins (~hc@mail.hce.li) |
| 17:04:06 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 17:07:24 | → | OftenFaded joins (OftenFaded@user/tisktisk) |
| 17:12:24 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:12:35 | <haskellbridge> | <Bowuigi> https://swarm-game.github.io/ is pretty good if games are allowed |
| 17:13:50 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:14:09 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 17:17:51 | × | acidjnk quits (~acidjnk@p200300d6e7283f2464fbbfe361ec58f6.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 17:18:48 | <glguy> | constxd: glirc is the Haskell program I use most :) |
| 17:18:51 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
| 17:20:38 | <glguy> | Agda's pretty great, too |
| 17:24:36 | → | Square joins (~Square@user/square) |
| 17:27:50 | × | Square2 quits (~Square4@user/square) (Ping timeout: 265 seconds) |
| 17:32:59 | → | alp joins (~alp@2001:861:8ca0:4940:b0b7:f401:582f:6c1b) |
| 17:38:26 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:38:47 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 17:45:02 | × | vpan quits (~vpan@212.117.1.172) (Quit: Leaving.) |
| 17:46:58 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 17:48:47 | → | ColinRobinson joins (~juan@user/JuanDaugherty) |
| 17:50:10 | → | jespada joins (~jespada@2800:a4:9f:7800:6da5:a33b:4775:882d) |
| 17:51:25 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:51:49 | → | ft joins (~ft@p4fc2a354.dip0.t-ipconnect.de) |
| 17:51:59 | → | acidjnk joins (~acidjnk@p200300d6e7283f2409bfe5ecbb77eb1c.dip0.t-ipconnect.de) |
| 17:56:35 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:56:43 | × | Square quits (~Square@user/square) (Ping timeout: 252 seconds) |
| 18:02:28 | × | euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds) |
| 18:03:20 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
| 18:06:29 | → | dnerdhm^ joins (~dnerdhm@108.192.66.114) |
| 18:07:02 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 18:08:21 | → | euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) |
| 18:08:45 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 18:09:30 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 18:10:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 18:10:25 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:16:10 | <haskellbridge> | <sm> here's a ranking of haskell github projects by stars: https://github.com/EvanLi/Github-Ranking/blob/master/Top100/Haskell.md |
| 18:18:50 | × | ColinRobinson quits (~juan@user/JuanDaugherty) (Quit: ColinRobinson) |
| 18:19:42 | <haskellbridge> | <sm> end user apps there seem to be: shellcheck and pandoc far out in front (35k), followed by kmonad (4k), xmonad, hledger, Simula (3k), patat (2k) |
| 18:20:01 | <haskellbridge> | <sm> too few non-developer apps there :( |
| 18:21:28 | → | user363627 joins (~user@user/user363627) |
| 18:21:34 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 272 seconds) |
| 18:21:51 | <EvanR> | hledger awwww yeah |
| 18:22:00 | <haskellbridge> | <sm> wait, I guess shellcheck is a dev tool also. The mighty pandoc rules as always |
| 18:23:59 | <haskellbridge> | <sm> though OP didn't ask for non-dev-related, just non-haskell-related. shellcheck definitely counts then. |
| 18:24:22 | <haskellbridge> | <sm> why is kmonad so popular ? I don't hear about it |
| 18:27:05 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:28:27 | <haskellbridge> | <sm> forgot to mention Cardano there (3k) |
| 18:28:32 | <haskellbridge> | <Bowuigi> Kmonad allows you to customize your keyboard as if it was a QMK/ZMK supported one |
| 18:28:56 | <haskellbridge> | <Bowuigi> It doesn't actually use haskell for configuring so I prefer keyd instead |
| 18:31:14 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 260 seconds) |
| 18:32:05 | → | Midjak joins (~MarciZ@82.66.147.146) |
| 18:32:58 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 18:33:23 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 18:36:06 | <tomsmeding> | shellcheck is <3 |
| 18:36:51 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 18:37:02 | × | ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:463b:107b:324c:e3d3) (Quit: ubert) |
| 18:39:10 | <juri_> | I like implicitCAD. I may be biased, however. :) |
| 18:39:52 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out) |
| 18:40:00 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 18:40:16 | <haskellbridge> | <sm> non-haskell-dev apps/tools from that list: shellcheck, pandoc (35k); postgrest (24k); hadolint (10k); semantic code analyser (9k); purescript language (8k); elm language (7k), unison, Carp languages (5k); kmonad keyboard manager, duckling language (4k), Kind language, Idris language, xmonad window manager, koka language, hledger, cardano blockchain node, Simula VR desktop (3k); echidna ethereum contract fuzzer, hakyll... |
| 18:40:17 | → | pavonia joins (~user@user/siracusa) |
| 18:40:21 | <haskellbridge> | ... site generator, wire chat server, eta language, xdg-ninja $HOME cleaner, agda language, patat presentation tool, futhark language, gitit wiki, corrode c/rust translator, dapptools ethereum tools (2k) ... |
| 18:40:45 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 276 seconds) |
| 18:41:20 | Lord_of_Life_ | is now known as Lord_of_Life |
| 18:41:51 | <haskellbridge> | <sm> they are missing ImplicitCAD for some reason (CAD app, 1k, website down) |
| 18:42:19 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 260 seconds) |
| 18:42:28 | <juri_> | yeah, trying to get the webserver to boot, now. :) |
| 18:43:24 | <sm> | 👍🏻 |
| 18:43:53 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 18:44:10 | <haskellbridge> | <sm> ok we need programming languages to be in their own list :) |
| 18:46:24 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 18:47:39 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:47:40 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 18:50:35 | <juri_> | welp, take ImplicitCAD off of the list, then. :) |
| 18:50:47 | <juri_> | (haskell is amazing for DSLs.) |
| 18:52:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 18:54:18 | → | euphores joins (~SASL_euph@user/euphores) |
| 19:03:02 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:08:00 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 19:08:30 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 19:08:53 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 19:13:28 | → | gmg joins (~user@user/gehmehgeh) |
| 19:18:46 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 19:18:54 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:23:09 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:23:29 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 19:26:18 | lol_ | is now known as jcarpenter2 |
| 19:27:13 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 19:28:50 | → | sprotte24 joins (~sprotte24@p200300d16f3cd90019624f68c556fd78.dip0.t-ipconnect.de) |
| 19:30:38 | → | alecs joins (~alecs@61.pool85-58-154.dynamic.orange.es) |
| 19:32:43 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:34:17 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:34:58 | × | alecs quits (~alecs@61.pool85-58-154.dynamic.orange.es) (Ping timeout: 245 seconds) |
| 19:37:10 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:37:20 | <[exa]> | oh wow that's a good list |
| 19:37:30 | [exa] | discovers patat |
| 19:39:51 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 19:41:33 | <hellwolf> | it might be an infinite list, it all depends on if you keep consume it. |
| 19:44:07 | <[exa]> | lol I meant that github ranking from above |
| 19:45:59 | → | dsrt^ joins (~dsrt@108.192.66.114) |
| 19:48:53 | → | JuanDaugherty joins (~00000000@user/JuanDaugherty) |
| 19:50:10 | × | user363627 quits (~user@user/user363627) (Remote host closed the connection) |
| 19:51:00 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:54:24 | → | SlackCoder joins (~SlackCode@remote.nationalgallery.org.ky) |
| 19:55:32 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 19:58:09 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 20:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:34 | → | Digitteknohippie joins (~user@user/digit) |
| 20:00:41 | → | caconym joins (~caconym@user/caconym) |
| 20:02:00 | × | Digit quits (~user@user/digit) (Ping timeout: 276 seconds) |
| 20:06:02 | JuanDaugherty | is now known as ColinRobinson |
| 20:06:23 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:13:08 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 20:21:19 | <juri_> | website's back up. :P |
| 20:24:25 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:26:46 | × | ColinRobinson quits (~00000000@user/JuanDaugherty) (Quit: Client closed) |
| 20:29:24 | × | SlackCoder quits (~SlackCode@remote.nationalgallery.org.ky) (Quit: Leaving) |
| 20:29:27 | → | weary-traveler joins (~user@user/user363627) |
| 20:29:30 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 20:33:33 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 20:39:02 | Digitteknohippie | is now known as Digit |
| 20:39:37 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 20:39:45 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 248 seconds) |
| 20:39:50 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:43:08 | → | weary-traveler joins (~user@user/user363627) |
| 20:44:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 20:49:31 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 20:51:55 | <fr33domlover> | o/ is there an elegant way to do type-level list mapping? I used to do it with FCF but much type/instance inference didn't happen and I ended up finding a workaround using Vinyl instead. But whenever I need type level list mapping (this starts repeating, let's call it TLLM :p) again I keep looking for ways to avoid it... sometimes there's no |
| 20:51:55 | <fr33domlover> | elegant way... are we still waiting for the golden Haskell feature that will solve that? |
| 20:55:12 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:57:38 | haskellbridge | sm went down a rabbit hole gathering old notes: https://joyful.com/Haskell |
| 20:59:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 21:03:41 | <c_wraith> | There really isn't any way to approach type-level lists elegantly. By their nature, they require the types to reflect the terms in a way that just creates a lot of bookkeeping. |
| 21:04:45 | <constxd> | wow cool i think i will play around with this hledger thing |
| 21:05:32 | <constxd> | i was just joking with my friend saying i'm going to start using GnuCash to track my finances and now 2mins later i stumble on this |
| 21:05:42 | <haskellbridge> | <sm> it's a sign! |
| 21:06:32 | <c_wraith> | there's a lot to be said for plain-text accounting. Tools automate lots of tasks, but with the tools all the info is still easily available. |
| 21:06:43 | <c_wraith> | err, *without* the tools |
| 21:07:23 | <EvanR> | to simply map a type level list, it's not that bad |
| 21:07:23 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 21:07:41 | <haskellbridge> | <sm> +1! even without power or in the even of a cyberpocalypse, I can read / reconstruct the data from a printout |
| 21:07:42 | <EvanR> | if you expect / agree that this mapping results in a list of the same size and shape |
| 21:10:34 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:10:49 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 21:14:13 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:15:28 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 21:17:55 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 21:19:38 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 21:25:16 | × | Guest1364 quits (~user@2601:644:937c:ed10::ae5) (Read error: Connection reset by peer) |
| 21:25:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:30:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 21:38:54 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 244 seconds) |
| 21:39:03 | × | hgolden__ quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection) |
| 21:40:46 | <tomsmeding> | @tell maerwald ghc 9.12.1 is quite broken https://gitlab.haskell.org/ghc/ghc/-/issues/25653 |
| 21:40:46 | <lambdabot> | Consider it noted. |
| 21:41:18 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:41:52 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 21:42:28 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 21:45:28 | × | michalz quits (~michalz@185.246.207.221) (Remote host closed the connection) |
| 21:45:40 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 21:47:23 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
| 21:47:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 21:49:57 | × | ft quits (~ft@p4fc2a354.dip0.t-ipconnect.de) (Quit: Lost terminal) |
| 21:52:22 | × | jespada quits (~jespada@2800:a4:9f:7800:6da5:a33b:4775:882d) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 21:53:16 | → | ft joins (~ft@p4fc2a354.dip0.t-ipconnect.de) |
| 21:55:39 | <geekosaur> | wow |
| 21:58:20 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:02:46 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 22:04:36 | × | Midjak quits (~MarciZ@82.66.147.146) (Quit: This computer has gone to sleep) |
| 22:11:21 | <c_wraith> | This is the second bug related to compilation of arithmetic on 8-bit types in like the last year |
| 22:13:42 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:15:03 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:18:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 22:28:55 | <EvanR> | I like how the test failed to catch it |
| 22:29:02 | <EvanR> | should have wrote a test testing the test smh |
| 22:29:07 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:29:39 | <EvanR> | like a backup launch escape system for the launch escape system |
| 22:30:41 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 22:30:41 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:33:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 22:36:37 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 248 seconds) |
| 22:37:20 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 22:41:24 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 22:42:05 | × | Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!) |
| 22:44:26 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 22:44:27 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:46:28 | → | mange joins (~user@user/mange) |
| 22:48:46 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 265 seconds) |
| 22:51:40 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 22:52:22 | → | tomboy64 joins (~tomboy64@user/tomboy64) |
| 22:57:57 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
| 22:58:11 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 23:00:12 | → | weary-traveler joins (~user@user/user363627) |
| 23:01:52 | × | weary-traveler quits (~user@user/user363627) (Client Quit) |
| 23:02:30 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:04:31 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 23:05:54 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 23:06:51 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:09:03 | × | agent314 quits (~quassel@37.19.210.25) (Ping timeout: 252 seconds) |
| 23:10:07 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 23:10:28 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 23:13:25 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Client Quit) |
| 23:14:40 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:14:57 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 248 seconds) |
| 23:15:20 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 265 seconds) |
| 23:17:55 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:18:44 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 265 seconds) |
| 23:20:30 | → | tnt1 joins (~Thunderbi@user/tnt1) |
| 23:23:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 23:25:40 | × | Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!) |
| 23:25:46 | → | Guest71 joins (~Guest71@2800:a4:109a:fe00:78a8:c71b:478b:eb7d) |
| 23:33:51 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 23:33:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:36:15 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 23:37:43 | → | alecs joins (~alecs@61.pool85-58-154.dynamic.orange.es) |
| 23:39:12 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:41:04 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 23:42:40 | × | alecs quits (~alecs@61.pool85-58-154.dynamic.orange.es) (Ping timeout: 272 seconds) |
| 23:45:39 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds) |
| 23:48:19 | × | Fijxu quits (~Fijxu@user/fijxu) (Quit: XD!!) |
| 23:50:04 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 23:50:12 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:50:24 | × | Fijxu quits (~Fijxu@user/fijxu) (Client Quit) |
| 23:51:45 | × | acidjnk quits (~acidjnk@p200300d6e7283f2409bfe5ecbb77eb1c.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 23:51:46 | → | agent314 joins (~quassel@c-24-17-1-67.hsd1.wa.comcast.net) |
| 23:53:26 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:54:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 23:55:27 | → | Fijxu joins (~Fijxu@user/fijxu) |
| 23:55:41 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 23:59:14 | → | emmanuelux_ joins (~emmanuelu@user/emmanuelux) |
All times are in UTC on 2025-01-16.