Logs on 2021-08-21 (liberachat/#haskell)
| 00:00:01 | → | Axman6 joins (~Axman6@user/axman6) |
| 00:01:07 | × | Axma67744 quits (~Axman6@user/axman6) (Ping timeout: 256 seconds) |
| 00:06:33 | → | fresheyeball joins (~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net) |
| 00:07:21 | → | dajoer joins (~david@user/gvx) |
| 00:09:03 | × | Axman6 quits (~Axman6@user/axman6) (Ping timeout: 256 seconds) |
| 00:09:24 | → | gianfranco joins (~gianfranc@181.28.82.192) |
| 00:09:43 | <gianfranco> | is this chat room active? |
| 00:11:46 | <lechner> | sometimes |
| 00:14:01 | <hpc> | technically since this chat room is only active in the moment when a message is sent, it is only infinitessimally active |
| 00:14:23 | <lechner> | which means never |
| 00:14:27 | <lechner> | Hi, I don't mean to open up old wounds, but why is RecordDotSyntax better than lenses? Does it finally remove the accessors from the file-level name space? |
| 00:15:20 | <monochrom> | RecordDotSyntax is not better. |
| 00:15:45 | <monochrom> | RecordHashSyntax would be better. SML and OCaml already do it. |
| 00:16:31 | <monochrom> | But I'm pretty sure either way it doesn't take away existing syntax such as accessors. |
| 00:16:51 | <monochrom> | OK, I haven't checked, I can't be sure. |
| 00:17:04 | <monochrom> | You can see how much I care. |
| 00:17:11 | <lechner> | i am just catching up to the group. there is no agenda |
| 00:17:25 | <lechner> | is it an optional language featkre? |
| 00:17:25 | <gianfranco> | oh ok |
| 00:17:32 | <lechner> | feature? |
| 00:17:40 | <gianfranco> | I saw this room featured on haskell.org lol |
| 00:18:18 | <lechner> | what were you doing on haskell.org? |
| 00:18:25 | <xsperry> | what would RecordHashSyntax do differently? just replace . character with #? |
| 00:18:31 | <monochrom> | Yes. |
| 00:18:48 | <gianfranco> | I'm new to haskell |
| 00:18:59 | <gianfranco> | was looking for documentation mainly |
| 00:19:07 | <lechner> | me too |
| 00:19:42 | <lechner> | check out What I wish I knew about Haskell |
| 00:19:54 | <lechner> | monochrom: why is it better? (I may agree) |
| 00:20:22 | × | gianfranco quits (~gianfranc@181.28.82.192) (Quit: Client closed) |
| 00:20:51 | <Clint> | he wants . to have only two meanings instead of three |
| 00:20:57 | <monochrom> | But lens has other powers that even real record systems cannot dream of. I would not forget about lens. |
| 00:21:38 | <lechner> | Clint: was that dot an inside joke? |
| 00:22:06 | × | reumeth quits (~reumeth@user/reumeth) (Ping timeout: 250 seconds) |
| 00:22:35 | <Lycurgus> | real record systems |
| 00:22:48 | <monochrom> | You don't want "f.g" to not mean "f . g" |
| 00:22:53 | → | gianfranco joins (~gianfranc@181.28.82.192) |
| 00:23:21 | <Clint> | lechner: i don't think so? |
| 00:23:22 | <Lycurgus> | gianfranco, there is a beginners channel |
| 00:23:24 | <lechner> | is see. it was an explicit "." |
| 00:23:37 | <Lycurgus> | #haskell-beginners i think |
| 00:23:56 | <monochrom> | One can get used to it, sure. One can write a parser for it, sure. But this is one of those times I get to say "can ≠ should". |
| 00:23:59 | → | tommd joins (~tommd@75-164-130-101.ptld.qwest.net) |
| 00:24:35 | <monochrom> | #haskell-beginners is centered around a book, not around the notion of beginner. False advertising. |
| 00:25:30 | <monochrom> | And recently a learner's blog, featured in HWN, did roast the book I think. |
| 00:25:53 | <Lycurgus> | well multiple off topic side channels, multiple newbies wouldn surprise |
| 00:26:29 | <monochrom> | "With a book, you can’t just open a browser window and just start typing. Well, technically, you could. I read one during my 3 months of emersion that was over 1000 pages and could’ve been easily 300 pages if they had a good editor who was also a functional programmer (also known as a unicorn)." |
| 00:26:42 | → | benin036932 joins (~benin@183.82.178.142) |
| 00:26:50 | <monochrom> | There is only one 1000-page Haskell book. That one. |
| 00:26:53 | <monochrom> | https://cscalfani.medium.com/why-is-learning-functional-programming-so-damned-hard-bfd00202a7d1 |
| 00:27:08 | → | retro_ joins (~retro@5ec19a54.skybroadband.com) |
| 00:27:45 | Lycurgus | is in the arduous process of going thru all his physical books to decide which to schlep and which to toss |
| 00:28:12 | <lechner> | keep the ones you like |
| 00:28:20 | → | silver_ joins (~silver@37.214.31.4) |
| 00:28:36 | <monochrom> | I used to think, the book's purpose is to be slow-paced, step-by-step, so it may warrant 1000 pages, maybe it's a benefit. I haven't really checked myself. |
| 00:29:23 | <monochrom> | By now, seeing someone who had struggled during learning Haskell, now reporting what worked and what didn't, and the 1000-page book was one of the didn'ts and is roasted like this, well, that changes my mind. |
| 00:29:26 | × | lbseale quits (~lbseale@user/ep1ctetus) (Read error: Connection reset by peer) |
| 00:29:53 | × | retroid_ quits (~retro@5ec19a54.skybroadband.com) (Ping timeout: 258 seconds) |
| 00:30:03 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 268 seconds) |
| 00:30:07 | <Lycurgus> | i was gonna give away my great books my dad gave me in 6th grade and the 15th edition of brittanica but then i found their value was about $2K |
| 00:31:06 | <Lycurgus> | i don't think you can learn something like haskell any other way than doing |
| 00:31:28 | <lechner> | i am not sure even that works |
| 00:31:38 | <Lycurgus> | langs in general except for the super simple immersion is the way |
| 00:32:01 | <Lycurgus> | well yeah hs and cl have that in common |
| 00:32:11 | <Lycurgus> | haskell more than lisp |
| 00:32:46 | <Lycurgus> | most langs don't dare not have fixed largely unchanging baselines |
| 00:33:19 | <monochrom> | It is a human nature to assume that every need is to be resolved by more consumption. |
| 00:33:51 | <monochrom> | If someone doesn't understand monads, they think "what more should I read/watch", not "what more should I practice". |
| 00:34:16 | <monochrom> | If someone feels sick, they think "what should I eat to cure it", not "what should I stop eating to cure it". |
| 00:35:00 | <lechner> | one night with Haskell will make a strong man humble |
| 00:35:07 | <Lycurgus> | that seems to be an idee fix with you, but I think in general there's a greater diversity |
| 00:35:13 | <monochrom> | Cease the means of consumption. |
| 00:35:27 | <Lycurgus> | there will be people who's first lang is hs |
| 00:35:52 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 00:35:59 | <Lycurgus> | under the right circumstances it will seem natural and easy to them |
| 00:36:46 | <lechner> | to those who do not drop out? |
| 00:36:53 | <Lycurgus> | also people with a really wide experience rather than the usual algol-like suspects are not gonna try to force haskell into earlier experiences |
| 00:37:48 | <Lycurgus> | for example say a strong music theory major |
| 00:37:56 | <Lycurgus> | have seen that |
| 00:38:17 | <lechner> | but a haskell army? |
| 00:39:17 | <Lycurgus> | needs to some other kinda collective |
| 00:39:36 | <Lycurgus> | vanguard oder |
| 00:39:54 | <lechner> | or a secret cabal? |
| 00:40:21 | <Lycurgus> | :) |
| 00:40:52 | <Cajun> | monochrom: it may be difficult for someone who doesnt understand monads to think of a way to use it that doesnt involve what the book has already given them. i found reading from more sources that offered other views to quaint my understanding until it finally clicked. you need to know enough about them before you can use them to learn more about |
| 00:40:53 | <Cajun> | them, essentially. at least this is my experience |
| 00:42:15 | <monochrom> | But I was not criticizing that. |
| 00:43:02 | <Cajun> | ah it was just a statement not a point of discussion, this is what happens when i stumble into a convo :P |
| 00:43:16 | × | gianfranco quits (~gianfranc@181.28.82.192) (Quit: Client closed) |
| 00:43:27 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 00:46:26 | <monochrom> | Either question you ask, you will have to find someone to answer, or Google for an answer. You can't answer either question yourself. I grant that. |
| 00:46:58 | <monochrom> | But there is still a difference between googling for more "intuition, analogies" and googling for more examples. |
| 00:48:01 | × | tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 248 seconds) |
| 00:48:13 | <monochrom> | Especially if, after seeing the beginning of an example, you go "hold on, don't show my all your code yet, let me try to write some of it myself, then compare with yours". Now that's respectable practicing. |
| 00:48:37 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:49:15 | <Cajun> | i like to predict whats next/predict the result of a function before seeing it, its quick enough never to be a pain because it doesnt require writing/rewriting lines of code |
| 00:49:28 | <monochrom> | Yes that too. |
| 00:50:38 | <Cajun> | although i do entirely agree that googling the "right" and "wrong" thing is an inconvenience. its also doesnt help many sources use the same examples (Maybe monad, Identity monad) which doesnt always help too much |
| 00:50:56 | <Cajun> | (seeing the same example multiple times doesnt help too much, to clarify) |
| 00:58:36 | Lycurgus | thinks the most cogent explanation of what a hs monad is "a mechanism haskell uses to effect referential transparency" |
| 01:01:27 | <Lycurgus> | s/is/is is/ |
| 01:02:08 | <lechner> | i am not sure i would use the words transparency and monad in the same sentence |
| 01:02:31 | <Lycurgus> | sounds like a criticism |
| 01:02:46 | <lechner> | of monads, maybe |
| 01:03:05 | <lechner> | or just a case of cynical friday |
| 01:03:16 | → | tommd joins (~tommd@75-164-130-101.ptld.qwest.net) |
| 01:03:23 | <Cajun> | i liked the explanation given on that one stack overflow page <https://stackoverflow.com/questions/44965/what-is-a-monad> |
| 01:04:00 | <Cajun> | lechner: why not cynical sunday, rolls off the tongue better :P |
| 01:04:49 | <monochrom> | You know what, "monad" is also vacuous for mathematicians. You have to have seen the definition, or else you couldn't even start to guess. |
| 01:05:30 | <lechner> | Cajun: based on some primitive stastistics, cases pile up on fridays |
| 01:05:41 | <monochrom> | whereas for example "Minkowski transfrom" is somewhat guessable, "ah, a function defined by Minkowski in some paper" |
| 01:05:51 | <Lycurgus> | it's like 'functor' except more so, monads are ancient |
| 01:06:07 | <Lycurgus> | functors are 20th century |
| 01:06:15 | <lechner> | Cajun: also, which one of the 46 (!) answers? |
| 01:06:18 | <monochrom> | And you know what, "computation builder" is just as vacuous. |
| 01:06:44 | <Cajun> | lechner: the top one |
| 01:07:08 | <monochrom> | "chain" is a good word though. I wouldn't object "computation chainer" if you're pressed for a 5-second elevator pitch. |
| 01:07:30 | <Cajun> | monochom: yeah it still doesnt mean much, but at least you know it does something (some kind of computation in some way by "building" the chain of binds) rather than just "monad" |
| 01:07:47 | <Cajun> | yeah i like computation chainer better, makes more sense |
| 01:08:29 | <monochrom> | But only for a 5-second pitch. |
| 01:09:03 | <monochrom> | For 30 seconds, "chain" is still suboptimal. It's just a whee bit better than "build". |
| 01:09:06 | <lechner> | to me, a monad sequences operations. is that right? |
| 01:09:46 | <Cajun> | i like thinking of it as a chain but sequence is probably more in line with how it looks (feeds from top to bottom in sequence) |
| 01:10:03 | <Lycurgus> | a less pretentious term would have been more fortunate in retrospect but I guess it was already set out by saunders maclane et al |
| 01:10:08 | <monochrom> | In "f . g", f and g are computations too, "." "builds" and "chains" too. Yet "." only gives you an arrow, not a monad. It is "$" who gives you a monad (the Identity monad). |
| 01:10:40 | <monochrom> | But "chain" is a whee bit better than "build" because <|> also builds, but not chains. |
| 01:10:51 | <lechner> | i meant: impose an order of evaluation |
| 01:11:23 | <lechner> | or is that wrong? |
| 01:11:33 | <Cajun> | Lycurgus: i recall simon peyton jones mentioning that the biggest regret is the scary name they gave monads rather than something more warm and cozy. its in some talk somewhere |
| 01:11:46 | <monochrom> | The 30-second pitch I now use is "callback-style programming". |
| 01:12:17 | <Lycurgus> | Cajun, yeah i think i know the one you mean |
| 01:12:34 | <lechner> | monads are asynchronous? |
| 01:13:14 | <monochrom> | Generally whatever story you come up with, you need to fight the confirmation bias. Programmers have proved to be undesirably susceptible to the confirmation bias. |
| 01:13:49 | × | Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt) |
| 01:14:05 | <monochrom> | Don't just ask yourself "do all monad examples fit my story?". Also ask yourself "how about examples of non-monads? if they also fit my story, then my story is bunk". |
| 01:14:42 | <c_wraith> | monads are joining-precisely-the-way-I'm-thinking things |
| 01:18:12 | <monochrom> | This is why 99.9% of wordings I've seen are all bunk. "monad as computation" - there are parser types (clearly computations, no?) that are not monads, only arrows or alternatives. "monad as container" - ZipList is a non-monad container, again only applicative. "builds" - <|> also builds. "chains" - >>> also chains. |
| 01:18:40 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
| 01:18:52 | × | tommd quits (~tommd@75-164-130-101.ptld.qwest.net) (Ping timeout: 250 seconds) |
| 01:19:08 | <c_wraith> | my first intuition for monads was actually "makes do blocks work how you'd expect" |
| 01:19:56 | <c_wraith> | which is... very circular. |
| 01:21:07 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 01:21:30 | <monochrom> | I think it is on the right track, under the following condition... |
| 01:21:49 | <Cajun> | the thing that really put my head through a loop was functions like "get" that dont take parameters (in do notation at least. doesnt it effectively take the rest of the computation as the parameter?) |
| 01:22:14 | <monochrom> | Have you seen https://wiki.haskell.org/Monad_laws ? Especially the do-notation versions of the laws? |
| 01:22:16 | <c_wraith> | Yeah, there's a post on Dan Piponi's blog about how you can look at monads as doing that. |
| 01:22:46 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 01:23:10 | <monochrom> | If your "how do blocks works" includes expecting the equivalence of those various ways of writing do-blocks, then you already know monads. |
| 01:23:33 | <c_wraith> | yeah, those were part of my mental model of do blocks. |
| 01:24:28 | × | Teacup quits (~teacup@user/teacup) (Quit: Teacup) |
| 01:26:51 | → | Teacup joins (~teacup@user/teacup) |
| 01:30:52 | × | t0zy quits (~t0zy@49.207.220.61) (Ping timeout: 252 seconds) |
| 01:31:07 | → | t0zy joins (~t0zy@49.207.193.1) |
| 01:33:35 | × | t0zy quits (~t0zy@49.207.193.1) (Read error: Connection reset by peer) |
| 01:35:56 | → | t0zy joins (~t0zy@49.207.193.1) |
| 01:39:24 | <monochrom> | In the case of State and its "get", I have had weaker students, but still very wise, who didn't understand it, but they were wise because they thought up "I think it would help if you and I together expand 'runState foo 5' by hand to see why 'get >>= ...' isn't given a parameter there so where does the parameter come from?" |
| 01:39:40 | <monochrom> | It's very brutal, but it worked. |
| 01:40:59 | <Cajun> | what like entirely desugar it? |
| 01:41:07 | <monochrom> | Yes. |
| 01:41:20 | <c_wraith> | be the compiler. inline. simplify. |
| 01:41:34 | <monochrom> | runState (get >>= \x -> put (x+1) >> get >>= \y -> return y) 5 |
| 01:41:44 | <monochrom> | evaluate by hand. |
| 01:42:13 | <Cajun> | i wish i didnt know about do notation until i *actually* understood monads |
| 01:42:17 | <monochrom> | brutal, but it explicitly shows 5 goes to the 1st get, 5+1 goes to the 2nd get. |
| 01:42:40 | <monochrom> | Oh yeah that too, another of my trick is to never mention do-notation. |
| 01:43:22 | <Cajun> | do you teach haskell in uni? |
| 01:43:40 | × | xff0x quits (~xff0x@2001:1a81:5207:3100:686a:e8fd:47a9:633d) (Ping timeout: 240 seconds) |
| 01:43:45 | <arahael> | whats this "allow newer" thing in cabal.project that adamCS mentioned last night (probably this morning for most of you here...) |
| 01:43:48 | <Cajun> | since you mentioned having students |
| 01:44:17 | <c_wraith> | arahael: it allows cabal to ignore upper bounds when solving the package constraints. |
| 01:44:31 | <adamCS> | arahuel: It lets cabal ignore the upper bounds...What c_wraith said. |
| 01:44:37 | <monochrom> | So many of my students are very good, they don't need this expansion to see, they can imagine it just after seeing the definitions of get, >>=, runState, etc. A few are weaker, but only weaker at this level of abstractions and jumps, they just need to see a concrete session of running it through. |
| 01:44:43 | <adamCS> | arahael: ^ |
| 01:44:54 | <c_wraith> | arahael: you can enable it for all packages, or specific ones that you know can have newer versions. |
| 01:45:16 | <monochrom> | What I am still impressed is that they know what they need, they just need my help to ensure that they do it right. |
| 01:45:49 | <monochrom> | Yes. |
| 01:45:52 | → | xff0x joins (~xff0x@2001:1a81:523e:7200:987e:5abc:19e1:66f6) |
| 01:45:57 | <lechner> | haskell needs a teacher |
| 01:46:03 | <c_wraith> | Yeah, being willing to actually do the work is way more than I saw from the weaker students when I was at college |
| 01:46:47 | <arahael> | c_wraith: that sounds *possibly* what i want, assuming it works with monadfail. I'll check out the docs. |
| 01:47:02 | <arahael> | adamCS: thanks :) that gives another option! |
| 01:47:08 | <adamCS> | arahael: You can do "allow-newer: base" which allows cabal to ignore the upper bound on base in any other package or "allow-newer: diagrams:base" which only allows it in diagrams, e.g., |
| 01:47:45 | × | t0zy quits (~t0zy@49.207.193.1) (Read error: Connection reset by peer) |
| 01:47:57 | <Cajun> | ive heard haskell being taught to freshmen and alternatively being taught to upperclassmen (who have already taken an imperative programming course) and the latter being more effective at teaching the language |
| 01:48:51 | → | t0zy joins (~t0zy@49.207.193.1) |
| 01:48:54 | <yushyin> | arahael: https://cabal.readthedocs.io/en/3.4/cabal-project.html?#cfg-field-allow-newer |
| 01:49:50 | <lechner> | Cajun: selection bias? |
| 01:50:15 | <arahael> | adamCS: that sounds like what i want! so basically unless it actually has an api breakage, it should probably work and i'll find out once it builds (or fails to build). |
| 01:50:25 | <arahael> | yushyin: thanks - already on it! |
| 01:50:34 | <adamCS> | arahael: Yep. |
| 01:50:47 | <yushyin> | arahael: good! ;) |
| 01:50:48 | <Cajun> | lechner: huh? i meant that ive read teaching HS/FP to people who have programming knowledge bears more fruits than teaching a freshman with limited experience in programming |
| 01:51:26 | <adamCS> | arahael: Using the more specific version can help you remember which packages might need updating and is a little more controlled, but I usually just start throwing stuff in there until it compiles or I get a compiler error. |
| 01:51:27 | × | awschnap quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 01:51:31 | <monochrom> | Hrm, I guess I can see a sweet spot. |
| 01:51:46 | <lechner> | Cajun: did all of the freshmen take the advanced class? |
| 01:52:07 | <monochrom> | We already know what happens to teaching to people who boast "40 years in the industry". |
| 01:52:32 | <arahael> | adamCS: yeah, i've a lot of dependencies, this is a personal side project afterall, so i'll probably do it for specific dependencies. |
| 01:52:41 | <monochrom> | OTOH a clean slate who hasn't become comfortable with induction thinking is also a lost cause. |
| 01:52:51 | <Cajun> | im not sure, i read it in `Masterminds of Programming Conversations with the Creators of Major Programming Languages ` |
| 01:52:57 | <Cajun> | lechner: ^ |
| 01:53:29 | <monochrom> | OTOOH a very naive kid who haven't thought of questioning the validity of recursion is also fine >:) |
| 01:53:54 | <lechner> | Cajun: okay, thanks! |
| 01:56:02 | <arahael> | monochrom: why would you question recursion, though? ;) |
| 01:56:04 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2) |
| 01:56:42 | <monochrom> | I know right? Why would anyone? >:) |
| 01:59:16 | <Cajun> | monochrom: well the reason stated was because they find the supposed power of side effects: "The reason is that students quickly conclude that FLs are toy languages, |
| 01:59:16 | <Cajun> | since, after all, they were used in their intro classes, mostly on toy examples. And once |
| 01:59:17 | <Cajun> | they discover the “power” of side effects, many of them never turn back. What a shame!" |
| 01:59:31 | <Cajun> | the formatted of that really got messed up :P |
| 01:59:37 | <Cajun> | formatting* |
| 01:59:51 | × | alx741 quits (~alx741@181.196.68.120) (Quit: alx741) |
| 02:01:32 | <Cajun> | and then this: "It seems to me that the best things about FP aren’t often appreciated by beginners. It’s only after you’ve programmed for awhile that the benefits become apparent." |
| 02:03:26 | → | lavaman joins (~lavaman@98.38.249.169) |
| 02:05:07 | → | sleblanc joins (~sleblanc@user/sleblanc) |
| 02:05:27 | × | aplainzetakind quits (~johndoe@captainludd.powered.by.lunarbnc.net) (Ping timeout: 245 seconds) |
| 02:05:32 | × | supersven quits (uid501114@charlton.irccloud.com) (Ping timeout: 245 seconds) |
| 02:05:39 | → | supersven joins (uid501114@id-501114.charlton.irccloud.com) |
| 02:05:53 | <monochrom> | I guess then Paul Hudak's approach would work well for them. HIs book has effects (making pictures, sounds, animations) at early, middle, late points. |
| 02:05:57 | × | angerman quits (sid209936@charlton.irccloud.com) (Ping timeout: 245 seconds) |
| 02:06:11 | × | andreas3- quits (andreas303@ip227.orange.bnc4free.com) (Ping timeout: 252 seconds) |
| 02:06:17 | <monochrom> | The problem is he's dead, his library suffers bit rot. |
| 02:06:24 | → | angerman joins (sid209936@id-209936.charlton.irccloud.com) |
| 02:06:44 | × | elcaro quits (~anonymous@45.32.191.75) (Ping timeout: 252 seconds) |
| 02:06:50 | → | andreas303 joins (andreas303@ip227.orange.bnc4free.com) |
| 02:07:12 | × | nrr quits (sid20938@id-20938.tooting.irccloud.com) (Ping timeout: 256 seconds) |
| 02:07:21 | → | aplainzetakind joins (~johndoe@captainludd.powered.by.lunarbnc.net) |
| 02:07:25 | → | alx741 joins (~alx741@181.196.68.120) |
| 02:07:29 | → | elcaro joins (~anonymous@45.32.191.75) |
| 02:07:46 | × | mrckndt quits (~mrckndt@user/mrckndt) (Ping timeout: 256 seconds) |
| 02:07:58 | → | nrr joins (sid20938@id-20938.tooting.irccloud.com) |
| 02:07:58 | → | mrckndt joins (~mrckndt@user/mrckndt) |
| 02:08:02 | × | slep quits (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) (Ping timeout: 245 seconds) |
| 02:08:15 | → | slep joins (~slep@cpc150002-brnt4-2-0-cust437.4-2.cable.virginm.net) |
| 02:09:55 | <Cajun> | bit rot is such a scary sounding term ): |
| 02:20:48 | × | alx741 quits (~alx741@181.196.68.120) (Quit: alx741) |
| 02:22:34 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 250 seconds) |
| 02:24:27 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:26:40 | × | dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
| 02:29:06 | → | dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
| 02:32:23 | → | keutoi joins (~keutoi@157.47.6.137) |
| 02:32:54 | → | zebrag joins (~chris@user/zebrag) |
| 02:38:22 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 02:41:18 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:41:25 | × | td_ quits (~td@94.134.91.77) (Ping timeout: 268 seconds) |
| 02:42:41 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 248 seconds) |
| 02:42:41 | → | td_ joins (~td@muedsl-82-207-238-079.citykom.de) |
| 02:44:46 | → | drsocks joins (~aaashutos@113.199.143.57) |
| 02:45:40 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 02:53:54 | × | drsocks quits (~aaashutos@113.199.143.57) (Quit: Konversation terminated!) |
| 03:06:04 | × | dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 268 seconds) |
| 03:06:20 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 03:08:44 | → | notzmv joins (~zmv@user/notzmv) |
| 03:09:10 | → | lavaman joins (~lavaman@98.38.249.169) |
| 03:09:12 | → | dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
| 03:11:14 | <sm> | it is a scourge! |
| 03:11:48 | <sm> | found in all climates! |
| 03:15:58 | × | blankhart quits (~blankhart@pool-72-88-174-206.nwrknj.fios.verizon.net) (Quit: WeeChat 2.9) |
| 03:19:14 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 03:19:32 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 03:19:56 | → | lavaman joins (~lavaman@98.38.249.169) |
| 03:25:16 | × | MQ-17J quits (~MQ-17J@8.6.144.209) (Ping timeout: 252 seconds) |
| 03:25:16 | × | otto_s quits (~user@p5de2f5f0.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 03:27:03 | → | otto_s joins (~user@p5de2f4c7.dip0.t-ipconnect.de) |
| 03:28:08 | × | cawfee quits (~root@2406:3003:2077:2758::babe) (Ping timeout: 258 seconds) |
| 03:32:46 | → | Guest43 joins (~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) |
| 03:37:55 | × | dsrt^ quits (~dsrt@209.65.131.194) (Ping timeout: 252 seconds) |
| 03:48:54 | × | Guest43 quits (~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed) |
| 03:51:07 | × | sleblanc quits (~sleblanc@user/sleblanc) (Ping timeout: 252 seconds) |
| 03:51:44 | → | mei joins (~mei@user/mei) |
| 03:53:34 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 03:55:45 | × | dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 248 seconds) |
| 03:56:00 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 04:00:24 | → | dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
| 04:04:27 | × | venue quits (~venue@user/venue) (Quit: adios) |
| 04:08:43 | × | dtman34 quits (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 252 seconds) |
| 04:11:09 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 04:11:47 | → | dtman34 joins (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
| 04:26:43 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 04:31:16 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 252 seconds) |
| 04:39:22 | × | sus quits (thelounge@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net) |
| 04:42:06 | → | sus joins (thelounge@user/zeromomentum) |
| 04:45:56 | × | auri quits (~admin@fsf/member/auri) (Quit: auri) |
| 04:46:19 | → | auri joins (~quassel@fsf/member/auri) |
| 04:46:19 | × | auri quits (~quassel@fsf/member/auri) (Client Quit) |
| 04:46:45 | → | auri joins (~quassel@fsf/member/auri) |
| 04:50:01 | → | Guest43 joins (~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) |
| 04:52:56 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 250 seconds) |
| 05:05:19 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 05:29:04 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 05:29:33 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 05:32:56 | × | MidAutumnMoon quits (~MidAutumn@user/midautumnmoon) (Quit: Leaving for a break - theLounge) |
| 05:33:28 | → | MidAutumnMoon joins (~MidAutumn@user/midautumnmoon) |
| 05:37:46 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:43:38 | × | Guest43 quits (~Guest43@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed) |
| 05:44:00 | → | Guest46 joins (~Guest46@2001:8003:33f0:c100:b87b:9892:523:f338) |
| 05:44:01 | → | lavaman joins (~lavaman@98.38.249.169) |
| 05:46:09 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 05:48:01 | × | silver_ quits (~silver@37.214.31.4) (Read error: Connection reset by peer) |
| 05:48:10 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 05:50:12 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:58:03 | → | dsrt^ joins (~dsrt@209.65.131.194) |
| 06:02:55 | → | Megant joins (megant@user/megant) |
| 06:08:17 | × | radw quits (~radw@user/radw) (Ping timeout: 252 seconds) |
| 06:11:28 | × | Guest46 quits (~Guest46@2001:8003:33f0:c100:b87b:9892:523:f338) (Quit: Client closed) |
| 06:14:20 | × | mousey quits (~skymouse@gateway/tor-sasl/mousey) (Ping timeout: 244 seconds) |
| 06:17:29 | × | mei quits (~mei@user/mei) (Quit: mei) |
| 06:18:34 | → | mei joins (~mei@user/mei) |
| 06:20:11 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 06:22:12 | → | ubert joins (~Thunderbi@178.115.47.86.wireless.dyn.drei.com) |
| 06:22:54 | → | mousey joins (~skymouse@gateway/tor-sasl/mousey) |
| 06:24:34 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
| 06:25:05 | <hsek[m]> | What's a bit rot |
| 06:29:13 | → | aman joins (~aman@user/aman) |
| 06:33:30 | <pavonia> | When a bit deteriorates such that you can't tell if it is a 0 or 1 anymore |
| 06:38:52 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
| 06:39:25 | × | jespada quits (~jespada@90.254.247.46) (Ping timeout: 252 seconds) |
| 06:41:49 | → | jespada joins (~jespada@90.254.247.46) |
| 06:47:17 | × | dave_uy quits (~dave_uy@108.61.193.26) (Quit: The Lounge - https://thelounge.chat) |
| 06:48:09 | → | vysn joins (~vysn@user/vysn) |
| 06:48:14 | → | dave_uy joins (~dave_uy@108.61.193.26) |
| 06:52:05 | → | phma joins (phma@2001:5b0:2144:518:c685:6b7:63c5:83c0) |
| 06:59:07 | × | ubert quits (~Thunderbi@178.115.47.86.wireless.dyn.drei.com) (Quit: ubert) |
| 06:59:21 | → | ubert joins (~Thunderbi@178.115.47.86.wireless.dyn.drei.com) |
| 07:00:36 | → | notzmv joins (~zmv@user/notzmv) |
| 07:02:28 | <arahael> | How do I specify "allow-newer" in my cabal file? It doesn't matter where I stick it, it doesn't appear to have any impact? |
| 07:02:53 | <arahael> | (If I specify it on the command line, eg, `cabal build --allow-newer`, it does have an impact.) |
| 07:03:48 | × | ubert quits (~Thunderbi@178.115.47.86.wireless.dyn.drei.com) (Ping timeout: 250 seconds) |
| 07:03:49 | <arahael> | I've been trying to specify: allow-newer: base |
| 07:03:58 | <maerwald> | that should work |
| 07:04:12 | <arahael> | maerwald: In the global scope? |
| 07:04:16 | <maerwald> | yeah |
| 07:04:23 | <arahael> | cabal-version: 3.4? |
| 07:04:42 | <maerwald> | sure |
| 07:04:49 | <sclv> | it goes in cabal.project |
| 07:04:53 | <arahael> | Wierd it has no impact whatsoever, it still dies because something has an upper-bound of 4.14 for base. |
| 07:04:58 | <sclv> | Not in foo.cabal |
| 07:05:01 | <arahael> | Oooh... |
| 07:05:18 | <maerwald> | oh |
| 07:05:30 | <maerwald> | yeah, documentation clearly says it's cabal.project |
| 07:05:30 | <arahael> | What's the difference between foo.cabal and cabal.foo? |
| 07:05:37 | <sclv> | the cabal file specifies the package. the project file is build options for the package |
| 07:05:42 | <arahael> | maerwald: My interpretation was "the project's cabal file". |
| 07:06:24 | <sclv> | cabal.project files aren’t part of a tgz sdist of the package. they’re just build settings for development |
| 07:07:27 | <maerwald> | sclv: well, you can make them part of it :p |
| 07:07:50 | <arahael> | sclv: And if there's no cabal.project at all, I guess it just uses defaults? |
| 07:08:04 | <maerwald> | `packages: .` I think |
| 07:08:09 | <arahael> | I'm about to create a cabal.project containing only the one line: allow-newer: all |
| 07:09:09 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 07:09:09 | × | MQ-17J quits (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 07:09:55 | → | MQ-17J joins (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
| 07:10:53 | → | Guest|58 joins (~Guest|58@131.226.66.188) |
| 07:11:18 | <arahael> | Weird day of dev. Clean kitchen. Research headsets (as a deaf dude, that's... Not common). Tiny bit of haskell research. Carry wood downstairs. Tiny bit of haskell research. Make lunch. Walk to shops. Headphones research. Tiny bit of headphone research. Tiny bit of *actual haskell dev* - allow-newer fiddling. ETc. :) |
| 07:11:48 | × | Guest|58 quits (~Guest|58@131.226.66.188) (Client Quit) |
| 07:13:10 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 240 seconds) |
| 07:13:15 | <arahael> | Nice. allow-newer works nicely. Now I should probably restrict it to the one package that actually needs the hack. |
| 07:15:04 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 250 seconds) |
| 07:20:31 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 07:23:04 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 07:30:38 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:32:38 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 07:34:37 | <mastarija> | Is there a way to create a constraint that "excludes" a certain type class? e.g. `instance ( Not ( Monoid a ) ) => SomeClass ( MyType a ) where ...` |
| 07:35:25 | <mastarija> | So basically, my function / instance is valid for everything that isn't a `Monoid` |
| 07:36:07 | <maerwald> | what is "everything"? |
| 07:36:34 | <mastarija> | Any 'a' |
| 07:36:40 | <maerwald> | you've defined instances for all classes from all of hackage? |
| 07:37:15 | <mastarija> | Not sure what you are asking. I'm talking about types, not classes |
| 07:37:18 | <int-e> | This is incompatible with the open nature of type classes; adding a Monoid instance could invalidate type inference decisions that were made in a different module when that instance wasn't yet visible. |
| 07:37:35 | <tomsmeding> | mastarija: impossible, but you _can_ get a constraint that says "a is match one any of this list of types" |
| 07:37:38 | <maerwald> | mastarija: you're talking about classes |
| 07:37:58 | <mastarija> | So I want to make an instance for any "type" that doesn't have this particular instance |
| 07:38:01 | <tomsmeding> | s/a is/a doesn't/ |
| 07:38:23 | <maerwald> | you make instances of classes, not types |
| 07:38:26 | <tomsmeding> | _why_ do you want this constraint? so that you can have a different one that only works for Monoid? |
| 07:38:34 | <mastarija> | maerwald, true |
| 07:38:41 | <int-e> | There are closed type families though, which trade openness for the power of negation (among other things). |
| 07:38:51 | <maerwald> | so you don't know what classes you have, how are you gonna make instances? |
| 07:39:41 | <tomsmeding> | if so, class C a where yourfunction :: ... ; instance {-# OVERLAPPABLE #-} C a where yourfunction = yourdefinition ; instance {-# OVERLAPPING #-} Monoid a => C a where yourfunction = error "no" |
| 07:39:51 | <tomsmeding> | maerwald: any _type_ that doesn't implement Monoid |
| 07:39:55 | <mastarija> | maerwald, I have a class I want to make an instance of, but I can make it only if the type I'm working with isn't a Monoid. |
| 07:40:14 | <int-e> | as far as existing mechanisms for type classes go... this sounds like incoherent instances territory, which is the scary kind of overloaded instances. |
| 07:40:17 | <tomsmeding> | note that overlapping instances do work, kind of, but they're finicky I believe |
| 07:40:20 | <arahael> | I'm way out of my depth here, but why not... Ignore the Monoid instance? |
| 07:40:25 | <mastarija> | This is just an example. But as int-e said, open world comes into play |
| 07:41:09 | <mastarija> | Dunno, I had a thought, so I asked :D |
| 07:41:35 | <maerwald> | tomsmeding: ah, I think they wanted to make instances for every non-Monoid class :D |
| 07:41:38 | <tomsmeding> | mastarija: please don't do this unless you know exactly what you want and it's this :p |
| 07:41:59 | <mastarija> | I kind of do |
| 07:42:20 | <mastarija> | But it wasn't well formed yet |
| 07:43:04 | <tomsmeding> | oh right, this kind of overlapping instances (like I gave in my C example) can give rise to incoherence (different typeclass dictionaries being used for the same type in the same program) |
| 07:43:34 | <tomsmeding> | if you use the class C in a polymorphic context where it isn't known yet whether there will be a Monoid instance available for the concrete type in the end |
| 07:43:41 | <mastarija> | yes I guessed this would happen |
| 07:43:55 | <mastarija> | but you know, if I'm careful maybe it'll work :D |
| 07:44:05 | <tomsmeding> | mastarija: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/instances.html#extension-OverlappingInstances |
| 07:44:29 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 07:44:34 | <mastarija> | Oh.. that's deprecated now |
| 07:44:55 | <tomsmeding> | I believe you can use the pragmas without enabling the extension |
| 07:45:14 | <mastarija> | yes, just noticed that in the docs :D |
| 07:45:18 | <mastarija> | good to know |
| 07:46:32 | <tomsmeding> | oh my instances are _too_ overlapping :p |
| 07:46:43 | <tomsmeding> | of course this will not work |
| 07:47:11 | <tomsmeding> | ghc decides which instance to use without looking at the constraints of instances; then after it has chosen one, it looks at the constraints and adds them to the set of things it needs to solve |
| 07:47:36 | <tomsmeding> | since these two instances will have the same "right-hand side" (namely C a), ghc can never choose |
| 07:48:07 | <mastarija> | can't it just pick the first one :P |
| 07:48:13 | <tomsmeding> | then it would always pick the first one |
| 07:48:20 | <tomsmeding> | which would defeat the point of having the second one :p |
| 07:51:48 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 07:54:42 | → | cawfee joins (~root@2406:3003:2077:2758::babe) |
| 07:55:34 | → | acidjnk_new joins (~acidjnk@p200300d0c72b9557dc14868c6ad3e278.dip0.t-ipconnect.de) |
| 07:56:08 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 07:56:33 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 07:57:38 | → | reumeth joins (~reumeth@user/reumeth) |
| 08:00:25 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) |
| 08:01:52 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds) |
| 08:04:54 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 08:06:05 | → | hendursa1 joins (~weechat@user/hendursaga) |
| 08:07:08 | → | kenran joins (~kenran@200116b82bfa730075b97161738401b4.dip.versatel-1u1.de) |
| 08:08:00 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 244 seconds) |
| 08:17:16 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 08:17:30 | × | Megant quits (megant@user/megant) (Ping timeout: 268 seconds) |
| 08:17:39 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 08:21:13 | → | Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
| 08:32:56 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:33:12 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 08:36:31 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 08:36:48 | → | enoq joins (~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) |
| 08:37:34 | × | kenran quits (~kenran@200116b82bfa730075b97161738401b4.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
| 08:37:40 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds) |
| 08:40:10 | × | favonia quits (~favonia@user/favonia) (Ping timeout: 240 seconds) |
| 08:40:58 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds) |
| 08:44:09 | arahael | likes Haskell. :) |
| 08:46:55 | → | MoC joins (~moc@user/moc) |
| 08:47:09 | tomsmeding | too :) |
| 08:47:44 | <arahael> | The community here is awesome, the language is awesome, and there's lots of good stuff, even if the learning curve for those of us who usually develop in non-haskell projects is initially high. :) |
| 08:48:03 | <arahael> | And it's _great_ for refactorability. Never found another language that lets you fearlessly refactor quite so well. |
| 08:49:17 | <tomsmeding> | rust - fearless concurrency; haskell - fearless refactoring |
| 08:50:46 | <arahael> | Heh, actually isn't Haskell good for fearless concurrency, too? |
| 08:51:21 | <arahael> | Rust is on my list of langugages to really learn - already done the rustlings course which is pretty awesome, and I like the language, but ultimately still prefer Haskell for various reasons. |
| 08:51:42 | × | dsrt^ quits (~dsrt@209.65.131.194) (Ping timeout: 250 seconds) |
| 08:52:26 | <arahael> | (Though that might depend on what I'm doing with it. Just right now, I'm doing a web service with haskell) |
| 08:53:26 | <tomsmeding> | indeed haskell is also very good at fearless concurrency :) |
| 08:58:33 | → | dsrt^ joins (~dsrt@209.65.131.194) |
| 09:00:08 | <arahael> | Main thing I might pick Rust for is perhaps simpler build tooling, eg, to build a library where I know I can pretty easily produce something for windows, linux, ios, etc, without needing a 16-GB docker image just to build (as is the case for iOS with haskell today, iirc |
| 09:00:10 | <arahael> | ) |
| 09:01:19 | <int-e> | . o O ( rust = cargo cult ) |
| 09:01:27 | <tomsmeding> | heh |
| 09:01:28 | <arahael> | (Eg, with reflex-frp, their docker image needs 16 GB of RAM for doing haskell stuff for iOS, which, incidentially, is the maximum memory you can get on any apple laptop) |
| 09:01:31 | <arahael> | int-e: ha. |
| 09:02:10 | <tomsmeding> | just use swap ;) |
| 09:02:23 | <arahael> | At work I use Swift. Not a /bad/ language - it's actually much better than most other options used in enterprise projects. But blegh, there's so much I wish was better. |
| 09:02:34 | <arahael> | tomsmeding: Ha. Swap. |
| 09:03:23 | <tomsmeding> | but yeah the cross-compilation story of haskell is suboptimal still |
| 09:04:08 | <tomsmeding> | though I haven't actually tried it myself, neither with haskell nor with rust, so I only know second/third-hand experiences |
| 09:07:01 | <arahael> | Rust has a series of "platforms" they officially support in a fairly organised structure. iOS is "second tier", which means supported, just not actively tested in CI systems. |
| 09:07:28 | <arahael> | Not doing template-haskell makes certain things much simpler, I would expect. |
| 09:07:38 | <tomsmeding> | presumably, yes |
| 09:13:08 | <tomsmeding> | rust's procedural macros run on a custom-specified VM in the compiler, which is much easier to port (i.e. no work) than template haskell is (which I believe actually compile to native code because it can call FFI and whatnot?) |
| 09:14:34 | <arahael> | That's awesome. |
| 09:14:44 | <tomsmeding> | which of the two :p |
| 09:15:08 | <tomsmeding> | alaso note that "custom-specified VM" is cool-speak for "interpreter" |
| 09:15:41 | × | hnOsmium0001 quits (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
| 09:18:08 | × | enoq quits (~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) (Ping timeout: 250 seconds) |
| 09:20:01 | → | enoq joins (~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) |
| 09:20:13 | × | averell quits (~averell@user/averell) (Quit: .) |
| 09:20:43 | → | kuribas joins (~user@ptr-25vy0i7pvnvbb3ckill.18120a2.ip6.access.telenet.be) |
| 09:23:31 | × | enoq quits (~enoq@2a05:1141:1f5:5600:eb83:919c:c248:eabe) (Remote host closed the connection) |
| 09:28:42 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 09:32:49 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 09:33:00 | <arahael> | tomsmeding: Rusts. :) |
| 09:33:15 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 09:33:20 | <arahael> | And yeah, even so, as an interpreter, it's nifty that it's effectively a constrained environment that the compiler can specify. |
| 09:34:15 | <tomsmeding> | arahael: while spelunking through the rustc source code I found this unrelated thing https://doc.rust-lang.org/nightly/nightly-rustc/src/rustc_expand/proc_macro_server.rs.html#813 |
| 09:34:44 | <arahael> | ... |
| 09:34:45 | × | notzmv quits (~zmv@user/notzmv) (Read error: Connection reset by peer) |
| 09:34:47 | <arahael> | actix-web? |
| 09:34:52 | <tomsmeding> | https://github.com/rust-lang/rust/issues/74616 |
| 09:35:18 | <tomsmeding> | similar to the microsoft hacks that have been written about on the internet :p |
| 09:35:27 | × | pbrisbin quits (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 245 seconds) |
| 09:35:32 | <tomsmeding> | where the windows kernel has compatibility hacks for specific programs |
| 09:35:47 | → | biberu joins (~biberu@user/biberu) |
| 09:36:12 | → | ubert joins (~Thunderbi@77.119.170.32.wireless.dyn.drei.com) |
| 09:36:18 | <arahael> | I fear that's going to be a dark hole. |
| 09:37:36 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 09:38:01 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 09:38:16 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds) |
| 09:39:25 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 09:41:51 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 09:42:35 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
| 09:43:16 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds) |
| 09:45:53 | → | lavaman joins (~lavaman@98.38.249.169) |
| 09:46:13 | × | random-jellyfish quits (~random-je@user/random-jellyfish) (Ping timeout: 246 seconds) |
| 09:47:30 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 09:48:28 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 250 seconds) |
| 09:50:16 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 09:54:36 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection) |
| 09:56:43 | → | nschoe joins (~quassel@2a01:e0a:8e:a190:dc3:57c7:ad61:19ea) |
| 09:57:47 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 09:59:30 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 10:00:53 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:02:44 | <tomsmeding> | https://mail.haskell.org/pipermail/haskell-cafe/2021-August/134351.html |
| 10:06:14 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 10:10:22 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection) |
| 10:14:06 | <arahael> | That sucks, I'm currently an iOS dev, actually, but I'm not really happy with how difficult xcode makes things. |
| 10:14:40 | × | oldsk00l_ quits (~znc@ec2-3-124-242-227.eu-central-1.compute.amazonaws.com) (Remote host closed the connection) |
| 10:18:48 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) (Ping timeout: 250 seconds) |
| 10:21:06 | × | michalz quits (~michalz@185.246.204.55) (Remote host closed the connection) |
| 10:26:11 | → | ubert1 joins (~Thunderbi@77.119.170.32.wireless.dyn.drei.com) |
| 10:30:57 | × | ubert1 quits (~Thunderbi@77.119.170.32.wireless.dyn.drei.com) (Ping timeout: 258 seconds) |
| 10:34:40 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 10:35:27 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 10:36:21 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 10:38:33 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 10:38:58 | → | Megant joins (megant@user/megant) |
| 10:39:31 | → | wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com) |
| 10:44:15 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 10:51:50 | × | wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 10:52:36 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds) |
| 10:54:19 | → | vysn joins (~vysn@user/vysn) |
| 10:54:42 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 10:55:27 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 10:56:55 | → | severen joins (~severen@202.36.179.72) |
| 10:58:04 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 11:00:44 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 11:01:04 | → | alx741 joins (~alx741@181.196.68.120) |
| 11:05:10 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 250 seconds) |
| 11:07:41 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:08:35 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 11:09:16 | → | AlexNoo_ joins (~AlexNoo@94.233.241.255) |
| 11:12:33 | × | AlexZenon quits (~alzenon@94.233.241.41) (Ping timeout: 248 seconds) |
| 11:12:33 | × | Alex_test quits (~al_test@94.233.241.41) (Ping timeout: 248 seconds) |
| 11:12:47 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 11:13:22 | × | AlexNoo quits (~AlexNoo@94.233.241.41) (Ping timeout: 272 seconds) |
| 11:14:58 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:15:28 | → | dipankar joins (~dipankar@50.35.187.85) |
| 11:15:31 | × | benin036932 quits (~benin@183.82.178.142) (Ping timeout: 252 seconds) |
| 11:15:55 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 11:16:51 | → | Alex_test joins (~al_test@94.233.241.255) |
| 11:17:01 | → | AlexZenon joins (~alzenon@94.233.241.255) |
| 11:24:25 | → | benin036932 joins (~benin@183.82.178.142) |
| 11:24:49 | × | NieDzejkob quits (~quassel@195.149.98.3) (Ping timeout: 248 seconds) |
| 11:24:52 | × | Megant quits (megant@user/megant) (Ping timeout: 252 seconds) |
| 11:26:13 | → | NieDzejkob joins (~quassel@195.149.98.3) |
| 11:30:20 | → | Megant joins (megant@user/megant) |
| 11:34:58 | × | acidjnk_new quits (~acidjnk@p200300d0c72b9557dc14868c6ad3e278.dip0.t-ipconnect.de) (Ping timeout: 258 seconds) |
| 11:36:10 | × | nschoe quits (~quassel@2a01:e0a:8e:a190:dc3:57c7:ad61:19ea) (Ping timeout: 240 seconds) |
| 11:41:11 | × | ubert quits (~Thunderbi@77.119.170.32.wireless.dyn.drei.com) (Remote host closed the connection) |
| 11:42:33 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:43:46 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 11:46:11 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 11:46:37 | → | lavaman joins (~lavaman@98.38.249.169) |
| 11:49:06 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 11:51:16 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 11:51:30 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 11:51:55 | × | AndrewYu quits (~andrew@user/andrewyu) (Quit: Leaving) |
| 11:57:21 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 248 seconds) |
| 11:58:28 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 250 seconds) |
| 11:59:51 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 12:14:56 | × | p0lyph3m quits (~polyphem@2a02:810d:640:776c:bd0c:a594:ef4e:c3f3) (Read error: Connection reset by peer) |
| 12:15:10 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:26:55 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 12:33:01 | → | nschoe joins (~quassel@2a01:e0a:8e:a190:7c9d:d6d2:278b:44a9) |
| 12:33:41 | AlexNoo_ | is now known as AlexNoo |
| 12:37:17 | × | dipankar quits (~dipankar@50.35.187.85) (Quit: Connection closed) |
| 12:37:21 | × | severen quits (~severen@202.36.179.72) (Ping timeout: 248 seconds) |
| 12:38:01 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 12:38:05 | → | Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com) |
| 12:39:50 | → | favonia joins (~favonia@user/favonia) |
| 12:41:56 | → | notzmv joins (~zmv@user/notzmv) |
| 12:45:16 | × | hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1) |
| 12:45:40 | → | hendursaga joins (~weechat@user/hendursaga) |
| 12:47:07 | → | chris joins (~chris@81.96.113.213) |
| 12:47:12 | chris | is now known as Guest9404 |
| 12:48:02 | × | mousey quits (~skymouse@gateway/tor-sasl/mousey) (Ping timeout: 244 seconds) |
| 12:48:44 | → | leitz joins (~LeamHall@cpe-173-172-58-72.tx.res.rr.com) |
| 12:49:39 | <leitz> | Sorry to bother, but is there a general "Functional Programming" IRC channel? I'm just learning, but not using a regular FP language. |
| 12:51:51 | → | skykanin joins (~skykanin@115.81-166-221.customer.lyse.net) |
| 12:53:17 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 12:54:55 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 12:59:20 | <tomsmeding> | not that I know of; if it's sufficiently functional, you may have luck just asking here, or perhaps on #haskell-offtopic depending on the exact question :) |
| 13:08:49 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 13:09:06 | → | oxide joins (~lambda@user/oxide) |
| 13:10:37 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 13:12:52 | × | shapr quits (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 268 seconds) |
| 13:14:56 | → | burnside_ joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 13:14:56 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 13:18:08 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 13:18:08 | × | burnside_ quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 13:18:18 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 13:18:57 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 248 seconds) |
| 13:22:04 | × | nschoe quits (~quassel@2a01:e0a:8e:a190:7c9d:d6d2:278b:44a9) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 13:30:17 | → | nate1 joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 13:32:24 | → | goepsilongo joins (~goepsilon@2603-7000-ab00-62ed-0d8f-34df-93a6-03c1.res6.spectrum.com) |
| 13:32:53 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 13:35:13 | × | nate1 quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 13:36:11 | × | alphabeta quits (~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) (Quit: Quitting IRC :() |
| 13:36:24 | → | alphabeta joins (~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) |
| 13:36:26 | × | alphabeta quits (~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) (Client Quit) |
| 13:36:44 | → | kilolympus joins (~kilolympu@cpc92710-cmbg20-2-0-cust265.5-4.cable.virginm.net) |
| 13:36:49 | × | tubogram quits (~tubogram@user/tubogram) (Quit: See ya later!) |
| 13:38:46 | → | tubogram joins (~tubogram@user/tubogram) |
| 13:39:15 | <Lycurgus> | leitz, probably doesn't make sense since there are strongly contrasting notions of what constitutes FP |
| 13:39:44 | <leitz> | tomsmeding, I'll ask over in offtopic, more a general thoughts thing. |
| 13:39:55 | <Lycurgus> | from langs like haskell to commonlisp both of which have channels of those names |
| 13:40:14 | <Lycurgus> | representing the ends of the spectrum |
| 13:40:54 | <Lycurgus> | lisp is the old FP |
| 13:41:07 | <Lycurgus> | the old notion |
| 13:41:15 | <hsek[m]> | Where was the `cabal` proposal for Stackage intregration? Can't seem to find it |
| 13:42:28 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
| 13:42:28 | × | keutoi quits (~keutoi@157.47.6.137) (Ping timeout: 268 seconds) |
| 13:42:54 | <hsek[m]> | Ah I found it. https://github.com/haskell/cabal/issues/7556 |
| 13:42:58 | <leitz> | Lycurgus, I'm studying "Grokking Simplicity" and it's giving me a lot of good ideas about how to code better using a functional programming mindset. |
| 13:43:10 | <Lycurgus> | notions, partisans, and no unity |
| 13:44:02 | <Lycurgus> | leitz, ah |
| 13:44:03 | → | keutoi joins (~keutoi@106.208.52.196) |
| 13:44:04 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 13:44:49 | <Lycurgus> | there is #lisp corresponding the old ##lisp at freenode, a distant match but prolly closest |
| 13:48:32 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds) |
| 13:48:54 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 13:50:46 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 13:52:52 | → | jess joins (~jess@libera/staff/jess) |
| 13:55:40 | × | tubogram quits (~tubogram@user/tubogram) (Quit: See ya later!) |
| 13:56:05 | × | mcglk quits (~mcglk@131.191.49.120) (Read error: Connection timed out) |
| 13:56:57 | → | mcglk joins (~mcglk@131.191.49.120) |
| 13:57:57 | → | tubogram joins (~tubogram@user/tubogram) |
| 13:58:50 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 14:00:31 | × | Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt) |
| 14:01:08 | × | tubogram quits (~tubogram@user/tubogram) (Client Quit) |
| 14:05:10 | → | shapr joins (~user@pool-108-28-144-11.washdc.fios.verizon.net) |
| 14:07:23 | → | tubogram joins (~tubogram@user/tubogram) |
| 14:08:47 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Quit: Leaving) |
| 14:09:06 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 14:09:52 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Ping timeout: 252 seconds) |
| 14:14:19 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2) |
| 14:14:39 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 14:15:00 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 14:15:51 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 14:17:34 | → | Guest96 joins (~Guest96@p1256008-ipoe.ipoe.ocn.ne.jp) |
| 14:18:14 | × | Guest96 quits (~Guest96@p1256008-ipoe.ipoe.ocn.ne.jp) (Quit: Client closed) |
| 14:19:18 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 250 seconds) |
| 14:19:45 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 14:20:19 | × | keutoi quits (~keutoi@106.208.52.196) (Ping timeout: 252 seconds) |
| 14:20:45 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 14:27:28 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 14:27:31 | × | MoC quits (~moc@user/moc) (Quit: Konversation terminated!) |
| 14:29:31 | → | wallymathieu joins (~wallymath@81-234-151-21-no94.tbcn.telia.com) |
| 14:30:21 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection) |
| 14:31:17 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 14:32:00 | → | keutoi joins (~keutoi@106.208.52.196) |
| 14:33:45 | → | burnside_ joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 14:33:46 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 14:36:01 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 244 seconds) |
| 14:36:16 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 252 seconds) |
| 14:43:10 | <_bin> | Does anyone know what the `(..)` syntax in an import means? Specifically, `import Colog.Core (LogAction (..), (<&), logStringStdout)`. |
| 14:43:37 | <Clint> | _bin: yes |
| 14:44:13 | <Clint> | it means to import everything "within" LogAction |
| 14:44:22 | <Clint> | i'm sure there's a better word for that |
| 14:44:56 | <tomsmeding> | if LogAction is a class, that imports LogAction as well as the methods of the class; if it's a datatype, it imporst the datatype as well as the constructors of that datatype |
| 14:45:08 | <tomsmeding> | importing just 'LogAction' would only import that one name |
| 14:45:28 | <_bin> | Clint, tomsmeding: Thanks, that helps. |
| 14:47:11 | → | neo joins (~neo3@cpe-292712.ip.primehome.com) |
| 14:47:15 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 14:47:17 | × | fresheyeball quits (~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9) |
| 14:48:48 | → | drd joins (~drd@93-39-151-19.ip76.fastwebnet.it) |
| 14:48:57 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 14:49:14 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 14:50:45 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine) |
| 14:52:58 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 14:52:58 | × | burnside_ quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
| 14:53:01 | → | nuncanada joins (~dude@181.213.52.63) |
| 14:53:37 | × | nuncanada quits (~dude@181.213.52.63) (Remote host closed the connection) |
| 14:53:43 | × | tomsmeding quits (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 14:54:09 | × | Skyfire quits (~pyon@user/pyon) (Remote host closed the connection) |
| 14:54:17 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 14:54:27 | → | Skyfire joins (~pyon@user/pyon) |
| 14:56:38 | → | burnside_ joins (~burnsides@client-8-91.eduroam.oxuni.org.uk) |
| 14:56:42 | × | burnside_ quits (~burnsides@client-8-91.eduroam.oxuni.org.uk) (Remote host closed the connection) |
| 14:57:54 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-156.002.203.pools.vodafone-ip.de) |
| 14:59:22 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 252 seconds) |
| 15:02:37 | → | tomsmeding joins (~tomsmedin@tomsmeding.com) |
| 15:05:04 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 15:08:50 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 15:10:37 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 15:12:28 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 15:13:02 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 250 seconds) |
| 15:15:14 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 15:15:19 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds) |
| 15:17:20 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 15:23:49 | × | Guest9404 quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 15:24:35 | → | chris joins (~chris@81.96.113.213) |
| 15:24:39 | chris | is now known as Guest1299 |
| 15:26:35 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 15:29:04 | × | Guest1299 quits (~chris@81.96.113.213) (Ping timeout: 252 seconds) |
| 15:30:10 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 15:31:09 | × | dajoer quits (~david@user/gvx) (Quit: leaving) |
| 15:32:32 | × | reumeth quits (~reumeth@user/reumeth) (Ping timeout: 250 seconds) |
| 15:33:32 | × | ystael quits (~ystael@user/ystael) (Quit: Lost terminal) |
| 15:35:46 | → | ystael joins (~ystael@user/ystael) |
| 15:36:01 | × | drd quits (~drd@93-39-151-19.ip76.fastwebnet.it) (Ping timeout: 248 seconds) |
| 15:37:30 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 244 seconds) |
| 15:38:40 | → | Jack joins (~Jack@node-1w7jra24ayur83r37n177ovv8.ipv6.telus.net) |
| 15:41:30 | → | bitmapper joins (uid464869@id-464869.tooting.irccloud.com) |
| 15:46:58 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 15:48:22 | → | lavaman joins (~lavaman@98.38.249.169) |
| 15:49:26 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 15:51:29 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 248 seconds) |
| 15:52:54 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 250 seconds) |
| 15:54:53 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 15:56:55 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 268 seconds) |
| 15:58:04 | → | Guest|60 joins (~Guest|60@181.171.68.90) |
| 15:58:07 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 15:58:19 | × | Guest|60 quits (~Guest|60@181.171.68.90) (Client Quit) |
| 15:58:40 | → | econo joins (uid147250@user/econo) |
| 16:05:21 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 16:05:23 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:06:23 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 16:08:21 | → | lavaman joins (~lavaman@98.38.249.169) |
| 16:09:59 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:10:01 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 16:11:12 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 16:11:32 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 16:11:34 | → | hololeap joins (~hololeap@user/hololeap) |
| 16:14:09 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 16:14:52 | → | nate1 joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 16:19:21 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 16:20:12 | × | azeem quits (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Ping timeout: 250 seconds) |
| 16:21:00 | → | azeem joins (~azeem@176.200.245.90) |
| 16:22:58 | × | keutoi quits (~keutoi@106.208.52.196) (Ping timeout: 252 seconds) |
| 16:23:31 | × | aman quits (~aman@user/aman) (Ping timeout: 252 seconds) |
| 16:24:39 | × | benin036932 quits (~benin@183.82.178.142) (Ping timeout: 268 seconds) |
| 16:25:01 | → | keutoi joins (~keutoi@223.238.95.231) |
| 16:25:20 | → | aman joins (~aman@user/aman) |
| 16:37:55 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 16:38:20 | × | azeem quits (~azeem@176.200.245.90) (Read error: Connection reset by peer) |
| 16:38:45 | → | azeem joins (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) |
| 16:42:33 | → | lavaman joins (~lavaman@98.38.249.169) |
| 16:47:10 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 16:50:48 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 16:52:19 | → | vpan joins (~vilius@212.117.1.172) |
| 16:55:29 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 16:56:57 | → | __monty__ joins (~toonn@user/toonn) |
| 16:59:24 | → | goepsilongo_ joins (~goepsilon@2603-7000-ab00-62ed-c9e0-8f19-de85-1d2f.res6.spectrum.com) |
| 17:00:40 | × | goepsilongo quits (~goepsilon@2603-7000-ab00-62ed-0d8f-34df-93a6-03c1.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 17:05:19 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds) |
| 17:06:31 | → | mdunnio joins (~mdunn@205.178.28.97) |
| 17:09:56 | <Athas> | What is the simplest Haskell library for writing a very simple TUI, with a few input fields and such? |
| 17:10:07 | <Athas> | I know of Brick, which can be used for anything, but is there something simpler? |
| 17:10:35 | → | mestre joins (~mestre@191.177.175.57) |
| 17:10:44 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 17:11:14 | × | HarveyPwca quits (~HarveyPwc@2601:246:c180:a570:29df:3b00:ad0e:3a06) (Quit: Leaving) |
| 17:11:16 | <sm> | Athas: there's wizards |
| 17:11:17 | → | hnOsmium0001 joins (uid453710@id-453710.stonehaven.irccloud.com) |
| 17:12:02 | → | Guest2172 joins (~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57) |
| 17:12:35 | <Guest2172> | Could somebody help me regarding my haskell homework? |
| 17:13:13 | <sm> | if you want positioned input fields, it's brick or make your own with vty or ansi-terminal I think |
| 17:14:01 | <sm> | @where paste, Guest2172 |
| 17:14:01 | <lambdabot> | I know nothing about paste,. |
| 17:14:17 | <sm> | @where paste |
| 17:14:17 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 17:14:27 | <Guest2172> | Ah. Gimme a sec |
| 17:14:55 | → | son0p joins (~ff@181.136.122.143) |
| 17:15:09 | <Athas> | sm: that looks interesting! |
| 17:15:19 | <Athas> | I have no opinion on positioning. |
| 17:15:34 | <Guest2172> | https://paste.tomsmeding.com/ctfNt47T this good? |
| 17:15:42 | <sm> | i use wizards for hledger add, it's great |
| 17:16:13 | <sm> | that's good Guest2172, what are you stuck on ? |
| 17:16:55 | <Guest2172> | Basically where to start. My mind can't think Haskell at all |
| 17:17:17 | <sm> | is there a simpler problem you could tackle first ? |
| 17:17:40 | <Guest2172> | There are a few, yea. Was just thinking that one would end up being easy |
| 17:18:01 | <Guest2172> | There's a multi-part one that I started, give me a second |
| 17:18:25 | <sm> | or maybe the first couple at project euler or exercism.io would get you warmed up |
| 17:19:05 | <Guest2172> | I am warmed up a bit, have been trying to work through these the entire day |
| 17:19:12 | × | mestre quits (~mestre@191.177.175.57) (Quit: leaving) |
| 17:19:28 | → | mestre joins (~mestre@191.177.175.57) |
| 17:19:29 | <Guest2172> | https://paste.tomsmeding.com/e8D0Jsqv |
| 17:20:43 | <Guest2172> | I don't really get how I'm supposed to get StockL out of the definition at the top |
| 17:22:07 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 17:22:27 | <__monty__> | Do you understand why your solution for countF works? |
| 17:23:44 | <Guest2172> | Partially. |
| 17:24:23 | <sm> | good answer :) |
| 17:24:45 | <maerwald> | can someone explain to me how Data.Char.isLower is implemented? It ends up like an boscure ffi call it seems to https://gitlab.haskell.org/ghc/ghc/-/blob/master/libraries/base/cbits/WCsubst.c which I don't understand |
| 17:24:49 | <Guest2172> | I am assuming that the Item datatype is acting like a lookup table when Single_Apple is mentioned |
| 17:25:04 | <sm> | it looks like you know how to get the list of items, now you need a way to look up one item in that list |
| 17:26:22 | <sm> | hint: there's a function in Prelude called lookup |
| 17:26:40 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 17:28:18 | <monochrom> | or you could write your own recursion. it's a good exercise anyway, even if you throw it away afterwards |
| 17:28:43 | <monochrom> | unless you have no idea how to work with a list |
| 17:28:55 | <monochrom> | in which case more needs for more fingering exercises |
| 17:29:33 | <Guest2172> | I do know how to work a list, dw |
| 17:29:42 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 17:29:56 | <monochrom> | It takes zero understanding to say "StockL is some kind of database". Every random person on the street knows that much. |
| 17:30:39 | <Guest2172> | Yea, I'm just dumb when it comes to Haskell |
| 17:31:02 | <Guest2172> | Give me Python, c or c++ and I'll do just fine. Give me Haskell and I literally can't think |
| 17:31:23 | <sm> | it takes time to rewire the brain for it |
| 17:31:35 | <sm> | soon it'll be easy |
| 17:32:18 | <Clint> | maerwald: looks like it's just checking an autogenerated lookup table for a flag |
| 17:32:35 | <maerwald> | yeah, I'm screwed |
| 17:32:37 | <sm> | Have you read a lot of (simple) haskell code ? this can help a lot I think |
| 17:34:03 | <__monty__> | Guest2172: Could you say in a sentence or two how countF works? I think it'll help with a misunderstanding in your commented out countL. |
| 17:34:34 | → | pbrisbin joins (~patrick@174-081-116-011.res.spectrum.com) |
| 17:35:00 | → | pavonia joins (~user@user/siracusa) |
| 17:37:47 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 17:38:02 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 17:38:49 | <Guest2172> | countF takes in a variable of type StockF, and parses that to getStockF, which acts as a lookup for those items. |
| 17:41:14 | <Guest2172> | Is that correct? |
| 17:41:47 | <Guest2172> | __monty__ |
| 17:42:52 | <pavonia> | maerwald: What are you trying to do? |
| 17:43:18 | <maerwald> | pavonia: toUpper for Word16, similar to the word8 package |
| 17:43:33 | × | neo quits (~neo3@cpe-292712.ip.primehome.com) (Quit: Leaving) |
| 17:43:53 | → | neo joins (~neo3@cpe-292712.ip.primehome.com) |
| 17:46:09 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 17:50:00 | × | wallymathieu quits (~wallymath@81-234-151-21-no94.tbcn.telia.com) (Quit: Textual IRC Client: www.textualapp.com) |
| 17:50:34 | <tomsmeding> | maerwald: https://hackage.haskell.org/package/base-4.15.0.0/docs/src/GHC-Unicode.html says that the implementation uses libunicode if that's available |
| 17:50:46 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds) |
| 17:51:29 | <dsal> | Guest2172: I don't think I'd phrase it that way. |
| 17:51:36 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 17:51:44 | <Guest2172> | I just can't think haskell |
| 17:52:12 | <__monty__> | Guest2172: Not quite. You're saying `getStockF` is the function that takes an item and returns a count? |
| 17:52:25 | <__monty__> | What is `x`? |
| 17:53:02 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 17:53:19 | <Guest2172> | `x` is StockF f |
| 17:54:06 | <__monty__> | Yes, and StockF f is a record, with one field called `getStockF`. |
| 17:54:34 | <__monty__> | This field is also a function that extracts the value of the field from such a record. |
| 17:55:05 | <tomsmeding> | maerwald: oh but a comment later on claims that the WCsubst.c functions are used unconditionally? |
| 17:55:52 | <__monty__> | So `getStockF x` is just the value of the similarly named field. |
| 17:56:27 | <maerwald> | yeah, I think there's no way I can have toLower on Word16 reasonably without converting to Char |
| 17:56:43 | <maerwald> | for Word8 it's straight forward |
| 17:56:51 | <Guest2172> | So if I were to write them down exactly the same, getStockL x would give me the list, right? |
| 17:56:59 | <__monty__> | Guest2172: It's clearer if you make it less pointfree. `countF x i = (getStockF x) i`, you see? So what's wrong with your proposed countL? |
| 17:57:02 | <__monty__> | Yes, exactly. |
| 17:57:16 | <__monty__> | So passing a list to `getStockL` wouldn't work. |
| 17:57:40 | <__monty__> | Now that you know how to get the list you should be able to implement countL. |
| 17:58:25 | → | severen joins (~severen@202.36.179.72) |
| 17:58:46 | <pavonia> | maerwald: You could also filter the Unicode database files yourself and create a static mapping. The format is quite simple |
| 17:59:26 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds) |
| 18:00:41 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 18:00:58 | <Guest2172> | I am confused how I should apply both getStockL and lookup though. getStockL x gives me the list, and somehow I'm supposed to use lookup to get the second element in that list |
| 18:01:14 | × | bitmapper quits (uid464869@id-464869.tooting.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:01:28 | → | jtomas joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 18:01:56 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 18:02:52 | <maerwald> | my property tests say that `toUpper = charToWord16 . C.toUpper . word16ToChar` is safe, because Data.Char.toUpper never goes beyond Word16 maxBound :p |
| 18:02:56 | <maerwald> | that's luck |
| 18:04:16 | <tomsmeding> | maerwald: what it ends up doing is a binary search in the allchars[] list starting on line 303; the entries are {starting codepoint, number of points in block, rule of this block}. The rules are defined directly above the allchars table, where the first item in the {} is the category, which is a bitwise OR of some of the GENCAT_?? defines, which are all distinct, single bits |
| 18:04:37 | <maerwald> | yeah, pretty sure I don't wanna understand it :p |
| 18:04:45 | <tomsmeding> | and it tests if the category has the GENCAT_LL bit set :) |
| 18:05:04 | × | nate1 quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 250 seconds) |
| 18:06:05 | <tomsmeding> | it divides up the codepoints 0 to 65535 in 2719 blocks of the same category |
| 18:06:40 | <tomsmeding> | this would be very easy to convert to whatever format you want it in, but at that point you can also generate it from the official UnicodeData.txt file :p |
| 18:06:45 | <__monty__> | Guest2172: You can just apply a function to the value `f (getStockL x)`. |
| 18:06:57 | × | pbrisbin quits (~patrick@174-081-116-011.res.spectrum.com) (Ping timeout: 248 seconds) |
| 18:07:19 | <__monty__> | Guest2172: I'd try implementing the recursion though, it's good practice. |
| 18:07:48 | <tomsmeding> | maerwald: pretty sure that toUpper-closedness is not luck; 0000-FFFF is the so-called Basic Multilingual Plane and is a closed set of stuff |
| 18:07:57 | <maerwald> | oh |
| 18:08:17 | <tomsmeding> | maerwald: https://en.wikipedia.org/wiki/Unicode#Code_planes_and_blocks (I'm not recalling this from memory or something :p) |
| 18:09:05 | <maerwald> | yeah, it def performs worse than the hand-written 'toLower' of Word8 |
| 18:09:26 | <tomsmeding> | heh you can compress that table in WCsubst.c quite a bit if you allow for a slightly more complicated lookup function |
| 18:09:37 | <maerwald> | 41.10 μs vs 7.613 μs |
| 18:10:11 | <tomsmeding> | lots of alternating rule22 and rule23, which is just the same but then uppercase/lowercase |
| 18:10:28 | × | mestre quits (~mestre@191.177.175.57) (Quit: leaving) |
| 18:10:37 | <maerwald> | well, good enough |
| 18:10:41 | × | keutoi quits (~keutoi@223.238.95.231) (Quit: leaving) |
| 18:10:43 | → | mestre joins (~mestre@191.177.175.57) |
| 18:10:56 | <tomsmeding> | and that binary search is also inefficient in general, because of the use of the bsearch C library function, which is fine but not inlined (because C) so the comparison function is an indirect function call |
| 18:12:01 | <tomsmeding> | in other words, if you want a really efficient implementation of isLower for Word16, you can do a bit better than ghc's current impl :) |
| 18:12:24 | × | zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving) |
| 18:13:11 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 268 seconds) |
| 18:13:48 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 18:14:34 | <tomsmeding> | wait, that isLower calls u_iswlower which is an _unsafe_ FFI call |
| 18:14:36 | × | azeem quits (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Ping timeout: 250 seconds) |
| 18:15:50 | → | markpythonicbtc joins (~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30) |
| 18:16:48 | → | azeem joins (~azeem@176.200.245.90) |
| 18:17:16 | <maerwald> | hmm... if you want to deal with UTF-16LE ShortByteString on a BE platform, then `pack :: [Word16] -> ShortByteString` will give you a surprise |
| 18:17:45 | <tomsmeding> | endianness yay |
| 18:18:01 | <maerwald> | Word16 appears to be BE interpreted by the primitives like writeWord16Array# |
| 18:18:11 | <maerwald> | and so it performs alignment based on platform |
| 18:18:50 | × | markpythonicbtc quits (~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30) (Client Quit) |
| 18:18:51 | → | zaquest joins (~notzaques@5.128.210.178) |
| 18:19:07 | <tomsmeding> | probably the most efficient implementation |
| 18:20:14 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 250 seconds) |
| 18:20:14 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 18:21:09 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 18:25:15 | <kuribas> | I am trying vscode again after a few months "the haskell server crashed 5 times in the last 3 minutes". |
| 18:25:26 | <kuribas> | Is this really what I should recommend to my team? |
| 18:25:40 | × | aman quits (~aman@user/aman) (Ping timeout: 240 seconds) |
| 18:26:07 | <janus> | kuribas: who said you should recommend it to anyone? |
| 18:26:13 | → | markpythonicbtc joins (~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30) |
| 18:26:24 | <kuribas> | janus: many people recommend the LSP. |
| 18:26:36 | <monochrom> | I think you can try for yourself again. |
| 18:27:04 | <kuribas> | It's nice when it works. But it never works (for me). |
| 18:27:44 | → | aman joins (~aman@user/aman) |
| 18:27:51 | <janus> | doesn't work for me either when you have hundreds of modules. i thought it was just because of that |
| 18:28:13 | <janus> | what kinda problem are you having? memory usage? if so, it's probably just because it was developed and tested on small projects |
| 18:28:27 | × | azeem quits (~azeem@176.200.245.90) (Read error: Connection reset by peer) |
| 18:28:30 | × | meinside_ quits (uid24933@id-24933.brockwell.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:29:07 | <janus> | high latency, high memory usage, leaking memory, those are the problems i had with v1.1 |
| 18:29:43 | → | azeem joins (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) |
| 18:29:53 | <kuribas> | janus: idk |
| 18:30:21 | <kuribas> | I just cannot say to the team, haskell is great, but you have to debug the tooling... |
| 18:30:36 | <janus> | how can you not know what kinda problem you're having? how do you even know you're having a problem if you don't know how to describe it? |
| 18:30:58 | <kuribas> | janus: the problem I have is "the haskell server crashed 5 times in the last 3 minutes" |
| 18:30:59 | × | t0zy quits (~t0zy@49.207.193.1) (Remote host closed the connection) |
| 18:31:00 | <monochrom> | I think "crashed" was already said. |
| 18:31:12 | <janus> | right, it probably crashed because of the OOM killer |
| 18:31:16 | → | t0zy joins (~t0zy@49.207.193.1) |
| 18:31:57 | <janus> | but it's just my guess of course, based on the problems i had |
| 18:32:02 | <kuribas> | Perhaps, I have a module which is using TH to compile a large amount of code. |
| 18:32:10 | <kuribas> | but it works fine in emacs. |
| 18:32:12 | <kuribas> | (without LSP) |
| 18:33:16 | <kuribas> | anything else that might work? maybe intellij? |
| 18:34:16 | <monochrom> | My students seem to be fine with vscode, but it's probably because of 2 factors. 1. My course doesn't have TH, or lots of code. 2. I think most of them are still not using HLS or LSP. |
| 18:34:44 | <monochrom> | Does intellij even know of Haskell? |
| 18:34:59 | <kuribas> | monochrom: well, isn't it then nothing more than a glorified text editor with syntax highlighing? |
| 18:35:05 | <janus> | you can get far just with Telescope (a Ctrl-P like for Neovim). it allows you to quickly jump to another module. and you can use ripgrep from neovim also, allowing you to quickly search for the word under the cursor |
| 18:35:11 | <kuribas> | monochrom: or do they use another plugin? |
| 18:35:25 | <janus> | you can also use CoCSearch to do a global replace with context, that is pretty cool |
| 18:35:30 | <monochrom> | I think my students don't insist on anything more. |
| 18:35:30 | <kuribas> | monochrom: yes, there are intellij plugins for haskell. |
| 18:36:01 | <janus> | kuribas: check out this screenshot : https://github.com/neoclide/coc.nvim/issues/1080 |
| 18:36:22 | <janus> | you see the context of the searched term across all files, and then you can replace it accordingly |
| 18:36:50 | <janus> | if you do a global replace in the CoC buffer/window (dunno terminology) , it automatically applies it in each file |
| 18:37:05 | <janus> | kinda like a perl pie++ http://technosophos.com/2009/05/21/perl-pie-if-you-only-learn-how-do-one-thing-perl-it.html |
| 18:37:17 | <kuribas> | janus: what I want at least is to visualise type errors. |
| 18:37:47 | <janus> | ah, ok, i don't have that, never seemed like a big problem to jump to the line number from the error message |
| 18:38:27 | × | Guest2172 quits (~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57) (Quit: Client closed) |
| 18:38:36 | <janus> | the line number is in the error message, then it is two chars to open Telescope, couple of chars to type parts of the file name (fuzzy search), couple of chars to jump to the line |
| 18:39:19 | <monochrom> | Why is that not called Microscope? :) |
| 18:39:23 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
| 18:40:04 | <janus> | what i do is i have a terminal running in neovim on the right, which contains the compilation loop or ghcid. so you won't need to switch windows |
| 18:40:22 | <tomsmeding> | kuribas: that "using TH to compile a large amount of code" sounds heavily suspect; HLS had lots of trouble with TH in the past, and it's for sure not completely resolved yet |
| 18:41:16 | <tomsmeding> | but in a project I work on, which has ~130 modules, it works fine and it doesn't crash on me -- though I don't actually work on the modules that define or use TH, it's just elsewhere in the project |
| 18:41:54 | <tomsmeding> | also: having C code in the project makes things finicky; it can work fine, but you have to first compile the project fully first, and only then start up HLS |
| 18:42:07 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Ping timeout: 252 seconds) |
| 18:43:04 | <kuribas> | tomsmeding: what do you use? |
| 18:43:25 | <tomsmeding> | HLS in neovim, since a few days with the new neovim 0.5 built-in LSP support, but before that using ALE |
| 18:43:36 | <kuribas> | ALE? |
| 18:43:57 | <tomsmeding> | vim plugin that, among other things, has a bare-bones (but solid) LSP implementation |
| 18:44:50 | → | gentauro_ joins (~gentauro@95.166.247.26) |
| 18:46:24 | <maerwald> | tomsmeding: TH, big modules, hsc files, ... |
| 18:47:35 | <Drew[m]> | ghcup-hs's source currently crashes my HLS server when I try to open up the contents of the /app folder. There is TH and CPP in those modules and I've chalked it up to those |
| 18:48:54 | <Drew[m]> | maerwald: does that happen for you too? |
| 18:49:09 | <maerwald> | yeah |
| 18:49:16 | <hololeap> | isn't there another library that does the same thing as this? https://github.com/hdgarrood/qq-literals |
| 18:49:18 | <maerwald> | especially the Main module |
| 18:49:23 | <maerwald> | it's big and has quasiquotes |
| 18:50:02 | <hololeap> | I want to parse literals and throw compile errors if they are incorrect |
| 18:50:54 | <hololeap> | someone recommended a library for this once, but I can't remember the name of it |
| 18:51:51 | <monochrom> | Would it be https://hackage.haskell.org/package/string-qq ? https://hackage.haskell.org/package/string-quote ? |
| 18:52:09 | → | mastarija joins (~mastarija@78-3-210-70.adsl.net.t-com.hr) |
| 18:52:43 | <monochrom> | I don't know the difference, or why the author made both. |
| 18:53:42 | <janus> | from looking at the docs, it seems the difference is "that the leading newline is trimmed and carriage returns stripped." |
| 18:53:45 | <hololeap> | no, it wasn't either of those. it had a much more fleshed-out interface and it gave an example in the readme for checking for odd numbers |
| 18:53:51 | <hololeap> | (or something like that) |
| 18:55:28 | × | jamestmartin quits (james@jtmar.me) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
| 18:56:07 | <janus> | would it be possible to find it via hoogle? i am not too familiar, but it sounds like it should be "(String -> a) -> QQ a" or something? |
| 18:58:01 | → | jamestmartin joins (james@jtmar.me) |
| 18:59:51 | <hololeap> | I remember it had a typeclass that handled conversion to QQ |
| 19:00:56 | × | kuribas quits (~user@ptr-25vy0i7pvnvbb3ckill.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 19:01:47 | <tomsmeding> | maerwald: Drew[m]: working HLS for me in app/ghcup/Main.hs https://tomsmeding.com/ss/get/tomsmeding/JOKELd |
| 19:01:58 | <tomsmeding> | ghc 8.10.6 with my self-compiled HLS |
| 19:02:34 | <Drew[m]> | hmm |
| 19:02:43 | <Drew[m]> | I'll give that a go at some point |
| 19:03:53 | <tomsmeding> | hololeap: https://hackage.haskell.org/package/validated-literals |
| 19:03:55 | <hololeap> | sweet, I found it by searching through my IRC logs: https://hackage.haskell.org/package/validated-literals |
| 19:04:00 | <hololeap> | lol |
| 19:04:02 | tomsmeding | high-fives hololeap |
| 19:04:05 | <tomsmeding> | that timing was perfect |
| 19:04:15 | <hololeap> | yes it was :) |
| 19:04:57 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Remote host closed the connection) |
| 19:05:09 | → | Guest2130 joins (~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57) |
| 19:05:21 | <Guest2130> | Got a question in terms of record fields |
| 19:05:24 | <tomsmeding> | (I just searched for 'literal' on hackage and went through the not-even-all-that-long list of 85 packages) |
| 19:05:37 | <tomsmeding> | also written by a #haskell regular :) |
| 19:06:07 | <maerwald> | tomsmeding: see those sweet quasi quotes in the code? :d |
| 19:06:26 | <maerwald> | nice is when your quasi quotes starts with # on the second line |
| 19:06:49 | <maerwald> | most tools will think it's CPP and then mess up |
| 19:06:59 | <tomsmeding> | not my vim :p |
| 19:07:10 | <maerwald> | well, I think even hlint fails here |
| 19:07:16 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 19:07:18 | <Guest2130> | https://paste.tomsmeding.com/oKfOX56s |
| 19:07:43 | <Guest2130> | Can anyone look at this and tell me how I might be able to do this better? |
| 19:08:08 | <Guest2130> | It can't match expected type CSStudent, with DBTreeO CSStudent |
| 19:08:27 | <Guest2130> | I know I'm on the verge of the solution, just not sure what the last part is |
| 19:08:45 | <tomsmeding> | Guest2130: what line is that error on? |
| 19:08:57 | <tomsmeding> | ah I see it |
| 19:09:27 | <Guest2130> | Yea, it's the last line |
| 19:09:32 | <tomsmeding> | I'd expect the error to be pretty clear in this case (allowing for the general situation where it takes some time before you get used to ghc's errors) |
| 19:09:43 | <tomsmeding> | last line? |
| 19:09:51 | <tomsmeding> | oh right yes |
| 19:09:53 | <Guest2130> | Did I send the wrong snippet? |
| 19:10:09 | <tomsmeding> | no you didn't |
| 19:10:25 | <monochrom> | I am unsympathetic. This doesn't look like you are even aware that you have to code up an elaborate search algorithm. |
| 19:10:50 | <Guest2130> | I don't have to make anything elaborate, is the thing |
| 19:10:57 | <__monty__> | Guest2130: Look at the types of `students` and `sid`. |
| 19:12:12 | × | vpan quits (~vilius@212.117.1.172) (Quit: Leaving.) |
| 19:12:13 | <monochrom> | The DBTreeO type is a pretty elaborate tree. I would think that looking for a node that has the thing you want is not going to be just a 1-liner, much less a 5-worder. |
| 19:14:13 | <Drew[m]> | <Drew[m]> "I'll give that a go at some poin" <- Just got to compile a small handful of dependencies first... |
| 19:14:13 | <Drew[m]> | https://paste.tomsmeding.com/zzR5f9id |
| 19:14:48 | <tomsmeding> | Drew[m]: get a better PC, you surely didn't think you could be productive in haskell without a 20-core machine |
| 19:15:48 | <tomsmeding> | Drew[m]: do you already have a HLS for 8.10.6? note that that particular ghc version doesn't have a released HLS yet as far as I know |
| 19:16:42 | <Drew[m]> | I don't have HLS for 8.10.6 but I'm willing to compile it from source if it'll fix this one thing |
| 19:17:02 | → | lavaman joins (~lavaman@98.38.249.169) |
| 19:17:32 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 19:17:42 | <Drew[m]> | But that's just me recompiling ghcup |
| 19:18:03 | <tomsmeding> | well HLS also has a bunch of dependencies, that's why I asked :p |
| 19:18:22 | <maerwald> | Drew[m]: why are you compiling ghcup from source anyway? |
| 19:20:22 | → | jacks2 joins (~bc8167eb@217.29.117.252) |
| 19:20:27 | ← | jacks2 parts (~bc8167eb@217.29.117.252) () |
| 19:21:10 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 19:23:09 | <tomsmeding> | oh hey, I tried again using ghc 9.0.1 and a downloaded HLS binary, and suddenly I see my friend again that I hadn't seen for almost a year at this point |
| 19:23:17 | <tomsmeding> | that friend being "allocatestack.c:384: advise_stack_range: Assertion `freesize < size' failed." |
| 19:23:47 | <tomsmeding> | previously the fix for that seemed to be a build on my own machine |
| 19:23:54 | tomsmeding | compiles HLS |
| 19:24:11 | <Drew[m]> | <maerwald> "Drew: why are you compiling..." <- I'm poking and prodding that large Main.hs file you mentioned |
| 19:24:23 | × | oxide quits (~lambda@user/oxide) (Quit: oxide) |
| 19:31:34 | → | lavaman joins (~lavaman@98.38.249.169) |
| 19:31:34 | × | azeem quits (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) (Read error: Connection reset by peer) |
| 19:32:43 | × | mei quits (~mei@user/mei) (Ping timeout: 252 seconds) |
| 19:33:49 | × | neo quits (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 252 seconds) |
| 19:34:30 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:36:34 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Read error: Connection reset by peer) |
| 19:38:03 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 19:39:30 | <tomsmeding> | Drew[m]: maerwald: yep, self-compiled HLS with ghc 9.0.1 works with ghcup's app/ghcup/Main.hs :) |
| 19:40:21 | <tomsmeding> | it's slow though, but it works (feedback after making a change takes like 1sec or something) |
| 19:40:43 | <Drew[m]> | Oh neat I'll just recompile all these dependencies with 9.0.1 |
| 19:40:54 | <Drew[m]> | 😱 |
| 19:41:01 | <tomsmeding> | :D |
| 19:41:19 | <tomsmeding> | like, I could send you my binary but that probably wouldn't help :p |
| 19:41:22 | <maerwald> | I have no idea how the dep footprint got so bad, but yeah |
| 19:41:45 | <tomsmeding> | Drew[m]: didn't 8.10.6 work for you? |
| 19:41:52 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 19:42:17 | <Drew[m]> | It probably will and I will probably just use that |
| 19:42:29 | <Drew[m]> | But that's les humourous |
| 19:42:40 | <Drew[m]> | less* |
| 19:43:10 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 19:43:59 | <Drew[m]> | The long first-time compile is not something that normally bothers me since usually I'm not constantly switching compiler version |
| 19:44:28 | <Drew[m]> | It's just that trying to fix the HLS issue has been making me do it an awful lot recently |
| 19:44:30 | <maerwald> | I am for libraries, testing between 8.0.2 and 9.0.1 |
| 19:44:32 | Lord_of_Life_ | is now known as Lord_of_Life |
| 19:44:51 | <maerwald> | with stack it's a little tedious, because it locks you into old Cabal versions |
| 19:45:10 | <maerwald> | then you can't use modern cabal features on old resolvers |
| 19:45:31 | <maerwald> | but 8.0.2 works fine with new Cabal |
| 19:48:19 | <Drew[m]> | I started on 9.0.1, then thought maybe HLS would be more likely to work on an older version so switched to 8.10.6, not realizing it didn't have a HLS release for it yet... |
| 19:48:19 | <Drew[m]> | So then I switched to 8.10.5, and that didn't fix it. |
| 19:48:25 | <Drew[m]> | Then I realized I hadn't put -haddock in my cabal config properly, because I hadn't commented out a certain line... so I had to fix that... ofc meaning literally everything must recompile. |
| 19:48:28 | → | azeem joins (~azeem@dynamic-adsl-94-34-33-6.clienti.tiscali.it) |
| 19:48:45 | <Drew[m]> | So even if I was to switch back to 9.0.1 where I originally built it, it'll have to rebuild anyway |
| 19:48:55 | → | notzmv joins (~zmv@user/notzmv) |
| 19:49:09 | <Drew[m]> | not fun |
| 19:49:15 | <maerwald> | wasn't there a thing to view the depgraph of haskell packages to figure out what's the biggest culprit? |
| 19:49:46 | <tomsmeding> | maerwald: well there's 'cabal-plan dot | dot -Tpng -o graph.png' but not sure whether that will help immensely (I already tried) |
| 19:49:53 | × | gentauro_ quits (~gentauro@95.166.247.26) (Ping timeout: 248 seconds) |
| 19:49:58 | <maerwald> | I want stats |
| 19:50:07 | <maerwald> | like: direct dependencies and their trans |
| 19:50:18 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:57:08 | <tomsmeding> | maerwald: https://paste.tomsmeding.com/zfQgpGdD direct dependencies of the ghcup library and the ghcup main executable, prefixed with the number of direct dependencies those have |
| 19:57:39 | <tomsmeding> | but perhaps a more useful measure is "how many deps do I save if I remove dependency X" |
| 19:57:45 | <maerwald> | yeah |
| 19:58:43 | <maerwald> | but then you have to know "how many deps do I save if I remove dependency X and Y" |
| 19:59:32 | <maerwald> | well, aeson and yaml probably can't be removed |
| 19:59:47 | <maerwald> | surprised there's no light aeson package |
| 20:00:05 | <maerwald> | monad-logger pulls in all this conduit nonsense |
| 20:02:48 | <maerwald> | meh, and zip as well |
| 20:05:06 | × | juhp quits (~juhp@128.106.188.220) (Ping timeout: 250 seconds) |
| 20:05:34 | → | neo joins (~neo3@cpe-292712.ip.primehome.com) |
| 20:06:24 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 20:08:18 | → | juhp joins (~juhp@128.106.188.220) |
| 20:09:42 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 20:11:04 | → | mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
| 20:11:27 | <maerwald> | is there a light alternative to monad-logger? |
| 20:11:43 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 20:12:11 | × | skykanin quits (~skykanin@115.81-166-221.customer.lyse.net) (Quit: WeeChat 3.2) |
| 20:12:52 | <monochrom> | Yesterday someone asked "Any recommendation on logging frameworks? co-log and katip appear to be two common ones, but I'm not sure as to why one or the other is better." |
| 20:13:10 | <maerwald> | I'm interested in smalles dep footprint |
| 20:13:13 | <monochrom> | No one answered. But perhaps you could also consider those two mentioned. |
| 20:13:29 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 20:13:48 | <hpc> | syslog, if you don't care about windows? |
| 20:13:55 | <maerwald> | I do |
| 20:13:57 | × | mastarija quits (~mastarija@78-3-210-70.adsl.net.t-com.hr) (Quit: Leaving) |
| 20:14:56 | <maerwald> | https://hackage.haskell.org/package/hslogger |
| 20:15:22 | <maerwald> | most of hvrs stuff is unmaintained though... |
| 20:16:48 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 20:17:44 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 20:17:49 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 252 seconds) |
| 20:20:10 | × | superbil quits (~superbil@1-34-176-171.HINET-IP.hinet.net) (Ping timeout: 240 seconds) |
| 20:20:45 | × | xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Read error: Connection reset by peer) |
| 20:23:09 | → | jtomas_ joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 20:23:45 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 20:25:46 | × | jtomas quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Ping timeout: 268 seconds) |
| 20:28:08 | <hololeap> | I'm getting a GHC crash: http://sprunge.us/ui6BdB here is the repo I'm working on: https://github.com/hololeap/gemport |
| 20:28:51 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 268 seconds) |
| 20:30:05 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 20:30:52 | <geekosaur> | is /tmp by any chance mounted noexec? |
| 20:30:58 | <hololeap> | yeah |
| 20:31:42 | <hololeap> | does TemplateHaskell execute something in /tmp? |
| 20:31:42 | <geekosaur> | you'll need to set TMPDIR to point somewhere that allows executables, then |
| 20:32:11 | <geekosaur> | yes, well, it maps executable pages from on-the-fly built shared objects in /tmp |
| 20:32:25 | <geekosaur> | which is the same thing under the hood |
| 20:32:41 | <hololeap> | is TMPDIR an environment variable? |
| 20:33:00 | <geekosaur> | yes |
| 20:33:33 | × | shapr quits (~user@pool-108-28-144-11.washdc.fios.verizon.net) (Ping timeout: 258 seconds) |
| 20:33:42 | → | burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk) |
| 20:33:46 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
| 20:33:57 | × | burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection) |
| 20:34:18 | <maerwald> | POSIX sanctioned |
| 20:34:25 | <hololeap> | ok, thanks for the quick response geekosaur |
| 20:34:30 | → | burnsidesLlama joins (~burnsides@client-8-91.eduroam.oxuni.org.uk) |
| 20:34:36 | <maerwald> | https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html |
| 20:34:44 | → | xlei joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net) |
| 20:36:26 | <maerwald> | also, how do haskellers test their code on big endian? |
| 20:39:16 | × | jtomas_ quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Ping timeout: 252 seconds) |
| 20:39:20 | × | burnsidesLlama quits (~burnsides@client-8-91.eduroam.oxuni.org.uk) (Ping timeout: 268 seconds) |
| 20:39:57 | <tomsmeding> | do haskellers test their code? |
| 20:40:37 | <maerwald> | if the input strings are filenames, you BETTER :D |
| 20:41:12 | <monochrom> | tmpfs being noexec by default also tripped me when I set up a docker container to mark student assignments :) |
| 20:41:20 | → | acidjnk_new joins (~acidjnk@p200300d0c72b954921d359bc9986b356.dip0.t-ipconnect.de) |
| 20:41:25 | <tomsmeding> | maerwald: if you're willing to drop one arbitrary dependency from both ghcup:exe and ghcup:lib, the one that removes most packages from the full dependency graph is monad-logger at 12 packages less |
| 20:41:38 | <tomsmeding> | if you're willing to drop two, take monad-logger and zip, at 25 packages less |
| 20:41:42 | <maerwald> | yep |
| 20:42:34 | <tomsmeding> | but probably dropping zip is not really an option :p |
| 20:42:59 | <maerwald> | it is |
| 20:43:07 | <maerwald> | https://hackage.haskell.org/package/LibZip-1.0.1 |
| 20:43:18 | <tomsmeding> | oooh |
| 20:43:20 | <maerwald> | but I will have to create a bundled C version of https://hackage.haskell.org/package/bindings-libzip |
| 20:43:24 | <tomsmeding> | look at that dep list |
| 20:43:29 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 20:43:57 | <maerwald> | https://hackage.haskell.org/package/hslogger also looks feasible, but less ergonomic |
| 20:44:19 | <tomsmeding> | oh if you're willing to drop three packages, monad-logger, zip and string-interpolate give 36 less transitive deps :) |
| 20:44:21 | <maerwald> | it uses a global MVar, which is kinda gross |
| 20:44:26 | <tomsmeding> | (that took ~2min to compute) |
| 20:44:36 | <maerwald> | https://hackage.haskell.org/package/hslogger-1.3.1.0/docs/src/System.Log.Logger.html#logTree |
| 20:44:39 | <janus> | hslogger is abandoned, good to migrate away from it |
| 20:44:43 | <maerwald> | to what |
| 20:44:57 | <janus> | i don't know :( |
| 20:45:10 | <tomsmeding> | just... you know, away :) |
| 20:45:17 | <maerwald> | tomsmeding: oh, but string-interpolate I use heavily |
| 20:45:23 | <tomsmeding> | yeah |
| 20:45:44 | tomsmeding | wrote some gross haskell code to compute this |
| 20:46:08 | <monochrom> | NP-hard problems call for gross code that takes 2 minutes to run :) |
| 20:46:25 | <maerwald> | tomsmeding: I think haskell-src-meta might be a bad apple here |
| 20:48:49 | → | superbil joins (~superbil@1-34-176-171.hinet-ip.hinet.net) |
| 20:50:20 | <maerwald> | https://hackage.haskell.org/package/fast-logger |
| 20:51:13 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 248 seconds) |
| 20:51:37 | <tomsmeding> | maerwald: yeah, 7 of the 11 deps that dropping string-interpolate gives you (if you're already dropping monad-logger and zip) come from haskell-src-meta; the other 3 are from text-conversions |
| 20:52:05 | <sm> | haskell-src-meta is on my bad apple list |
| 20:52:15 | × | neo quits (~neo3@cpe-292712.ip.primehome.com) (Remote host closed the connection) |
| 20:52:29 | <sm> | and so are most of the string interpolating libs, I forget why |
| 20:52:35 | <maerwald> | tomsmeding: I opened https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/212 |
| 20:53:52 | <tomsmeding> | yay |
| 20:54:43 | tomsmeding | is going to bed |
| 20:54:56 | <maerwald> | I can't find a single quasi quoter without haskell-src-meta |
| 20:55:13 | × | superbil quits (~superbil@1-34-176-171.hinet-ip.hinet.net) (Ping timeout: 252 seconds) |
| 20:56:56 | <sm> | ...maybe that was why |
| 20:59:14 | <tomsmeding> | maerwald: if I'm not mistaken, the only use of haskell-src-meta in string-interpolate is here: https://gitlab.com/williamyaoh/string-interpolate/-/blob/master/src/lib/Data/String/Interpolate.hs#L278 |
| 20:59:27 | <tomsmeding> | where toExp is from this instance: https://hackage.haskell.org/package/haskell-src-meta-0.8.7/docs/src/Language.Haskell.Meta.Syntax.Translate.html#line-270 |
| 21:00:02 | <tomsmeding> | oh right that references lots of other stuff too |
| 21:00:06 | tomsmeding | is really going now |
| 21:00:14 | <maerwald> | cheers |
| 21:01:26 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 21:04:55 | → | oldsk00l joins (~znc@ec2-52-58-63-152.eu-central-1.compute.amazonaws.com) |
| 21:05:05 | <amesgen[m]> | String interpolators use haskell-src-meta in order to convert quoted text to TH Exps: https://gitlab.haskell.org/ghc/ghc/-/issues/19148 |
| 21:05:49 | <amesgen[m]> | Interpolators like neat-interpolation don't use haskell-src-meta, but they only support interpolating variables and not arbitrary expressions. |
| 21:07:02 | → | cheater1__ joins (~Username@user/cheater) |
| 21:07:04 | × | cheater quits (~Username@user/cheater) (Ping timeout: 250 seconds) |
| 21:07:06 | cheater1__ | is now known as cheater |
| 21:07:35 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:08:27 | <sm> | amesgen++, informative |
| 21:08:30 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 21:13:10 | → | sm[i] joins (~user@plaintextaccounting/sm) |
| 21:15:02 | <maerwald[m]> | QuasiQuoters are just convenience, so we can certainly do without. It's just tedious work |
| 21:17:04 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 21:17:04 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 21:17:07 | allbery_b | is now known as geekosaur |
| 21:17:15 | × | sm[i]_ quits (~user@li229-222.members.linode.com) (Ping timeout: 258 seconds) |
| 21:17:39 | × | sm[i] quits (~user@plaintextaccounting/sm) (Remote host closed the connection) |
| 21:18:41 | <sm> | yes, it's a pity |
| 21:19:20 | → | sm[i] joins (~user@plaintextaccounting/sm) |
| 21:19:46 | <sclv> | i wonder if there's enough parsing now exposed by ghc to obviate the need for haskell-src-meta |
| 21:20:00 | <sclv> | if not, maybe that would be good to fix :-) |
| 21:20:35 | <sclv> | Like we really just want a function `String -> UntypedTH` directly in ghc.exts or the like |
| 21:20:48 | → | silver_ joins (~silver@37.214.30.4) |
| 21:21:30 | <Guest2130> | Can someone help me maybe understand where I'm going wrong with this lookup? Or point me in the right direction to get it working? |
| 21:22:23 | <Guest2130> | I am trying to get to the list in this benWalker = Student "Ben Walker" 19 Halifax [(SOFT, 62), (EASY, 42), (FULL, 62)] |
| 21:22:23 | <sm> | Guest2130, what's your latest code ? |
| 21:22:52 | <Guest2130> | It's literally just `lookup EASY x` |
| 21:23:04 | <Guest2130> | x being benWalker |
| 21:23:07 | <sclv> | `getList (Student _ _ _ l) = l` |
| 21:23:13 | <monochrom> | Use "pattern matching" as taught in your class. |
| 21:23:22 | <Guest2130> | Oh, pattern matching works here? |
| 21:23:40 | <sclv> | pattern match on Student -- its a data constructor, you can pattern match out of any data constructor |
| 21:23:43 | <maerwald[m]> | monochrom: your class? :D |
| 21:23:44 | <monochrom> | and sclv just showed what it looks like. |
| 21:23:52 | <monochrom> | No. Gladly. |
| 21:23:57 | <sclv> | jumped the gun, didn't realize how socratic we were trying to be :-) |
| 21:25:06 | <monochrom> | My class, I would have told them "pattern matching is your only option for working with algebraic data types" and they would not need to ask here. |
| 21:25:31 | <monochrom> | Right? During May-June no one came here asking like this. |
| 21:25:35 | <Guest2130> | Online teaching had been a bitch to us this year sadly |
| 21:25:46 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection) |
| 21:25:53 | <monochrom> | And you think my class didn't suffer just as much online teaching? |
| 21:26:24 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 21:26:30 | <monochrom> | To be sure, to be fair, the other angle is that students have the tendency to ignore course material and listen to Google and stackoverflow. |
| 21:27:06 | <monochrom> | I would be really surprised if the course material had not shown examples like this. |
| 21:29:09 | <monochrom> | BTW said tendency had been amply observed long before COVID-19. In fact for over two decades. |
| 21:29:27 | <monochrom> | So, even predated SARS. |
| 21:30:28 | <maerwald[m]> | Some course material is worse than SO, though. I had a prof who thought teaching a new language is best achieved by exposing the student to ALL pitfalls. That was a nightmare for C++ and ruby. |
| 21:31:02 | <monochrom> | "Is that vaccination?" meme |
| 21:31:59 | <monochrom> | BTW I wouldn't complain about stackoverflow if it were right. |
| 21:33:32 | <monochrom> | I had a midterm test question, the correct answer was right there in my lecture slides staring at you. Stackoverflow had the wrong answer, probably still does. I had students who gave the Stackoverflow answer. |
| 21:33:41 | → | wroathe joins (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) |
| 21:34:40 | <monochrom> | This one: https://stackoverflow.com/questions/36428098/c-how-to-check-if-my-input-bufferstdin-is-empty?rq=1 |
| 21:34:55 | <monochrom> | fseek in stdin?! Excuse me?! What were they smoking? |
| 21:35:02 | <monochrom> | s/ in / on / |
| 21:37:16 | <monochrom> | And notice how the incorrect fseek solution got 2 votes, the correct "you must attempt reading before you can know" solution got 0 votes. |
| 21:37:40 | → | superbil joins (~superbil@1-34-176-171.HINET-IP.hinet.net) |
| 21:40:17 | → | jgeerds joins (~jgeerds@55d4b311.access.ecotel.net) |
| 21:41:33 | <monochrom> | Low quality courses regarding Haskell exist but AFAIK are low quality in a different way from C++ ones. |
| 21:42:40 | <monochrom> | Haskell ones would not be low quality for forgetting to teach you algebraic data types and pattern matching. |
| 21:43:59 | <monochrom> | The more likely kinds of low quality comes in: having too much faith in your recursion ability, having too much faith in your ability to understand advanced abstractions and generalizations. |
| 21:44:20 | <monochrom> | Telling you too early about laws and proofs. |
| 21:47:06 | <monochrom> | The one I was most badly-impressed by was about 5-10 years ago there was a homework question for implementing a list function that would end all list functions. |
| 21:47:44 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 21:47:44 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 21:47:47 | allbery_b | is now known as geekosaur |
| 21:47:56 | <c_wraith> | closer to 10 years ago, IIRC |
| 21:48:13 | <monochrom> | It took like 10 parameters (OK, 5) and based on the parameters you give you can obtain foldr, foldl, unfoldr, map, map-reduce, everything. And this is why it takes 5 parameters. |
| 21:48:44 | <monochrom> | So, going overboard with abstraction and generalization. |
| 21:49:24 | <monochrom> | And by today's standard a very misguided, ad-hoc one, too. We now understand that foldMap is the correct sweet spot. |
| 21:49:52 | → | sagax joins (~sagax@213.138.71.146) |
| 21:51:41 | <monochrom> | I'm an old-geezer now, it all seemed like just yesterday to me. :) |
| 21:52:22 | <monochrom> | Anyone still remember CP/M? (OK I'll stop now haha.) |
| 21:53:19 | <sm> | yes, never used it though |
| 21:53:35 | × | derelict quits (~derelict@user/derelict) (Quit: WeeChat 3.2) |
| 21:53:49 | <c_wraith> | I remember people telling me how much better than DOS it was. |
| 22:02:09 | → | aab joins (~aab@193.56.116.154) |
| 22:05:27 | → | Guest4623 joins (~Guest46@182.64.179.3) |
| 22:05:43 | × | markpythonicbtc quits (~textual@2601:647:5a00:35:697a:eb38:2e9e:dc30) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 22:11:10 | <Guest4623> | Hey, I have a function `f :: a -> b -> c` . I want to memoize `f a` but `a` is not know at compile time (and also it is not Memoizable), however it is constant. How should I memoize it? Obviously I can't create `f' :: a -> b -> c` and call `memoize2` on it |
| 22:14:32 | × | silver_ quits (~silver@37.214.30.4) (Quit: Leaving) |
| 22:15:38 | <hpc> | what does "not known at compile time but consistent" mean in this context? |
| 22:15:55 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:17:11 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Remote host closed the connection) |
| 22:18:34 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 22:22:50 | → | jtomas_ joins (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) |
| 22:24:19 | × | o1lo01ol1o quits (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) (Ping timeout: 252 seconds) |
| 22:24:38 | × | acidjnk_new quits (~acidjnk@p200300d0c72b954921d359bc9986b356.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 22:25:40 | × | Tuplanolla quits (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
| 22:25:48 | <Guest4623> | essentially it reads the value of `a` from a file |
| 22:26:04 | <dminuoso> | And you want this memoized how exactly? |
| 22:26:10 | <hpc> | it reads the type from a file? |
| 22:27:10 | × | xff0x quits (~xff0x@2001:1a81:523e:7200:987e:5abc:19e1:66f6) (Ping timeout: 240 seconds) |
| 22:27:15 | × | jtomas_ quits (~jtomas@233.red-83-34-2.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 22:27:26 | <Guest4623> | oops, bad notation, sorry. `a` refers to both type and the variable. The type is not memoizable and the variable is read from the file |
| 22:29:02 | <Guest4623> | I want to memoize it wrt the second parameter |
| 22:29:52 | → | enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
| 22:30:49 | × | Guest2130 quits (~Guest21@2a02:8109:a080:6368:d5d2:328b:373c:5b57) (Quit: Client closed) |
| 22:36:39 | → | Lycurgus joins (~juan@cpe-45-46-140-49.buffalo.res.rr.com) |
| 22:39:36 | → | derelict joins (~derelict@user/derelict) |
| 22:40:24 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:43:27 | <Lycurgus> | leitz, this title https://www.amazon.com/Software-development-rigorous-approach-Jones/dp/0138218846 occured to me after our exchange earlier |
| 22:43:41 | <Lycurgus> | as it's on the pile of books I'm discarding |
| 22:44:29 | <Lycurgus> | it does predate the current situation where FB has split into more or less non communication magistries |
| 22:44:38 | <Lycurgus> | and is about FP |
| 22:44:46 | × | derelict quits (~derelict@user/derelict) (Quit: WeeChat 3.2) |
| 22:44:49 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 248 seconds) |
| 22:45:32 | <Lycurgus> | s/non communication/contending/ |
| 22:47:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 22:47:24 | <Lycurgus> | s/FB/FP/ |
| 22:48:31 | × | haasn quits (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 22:48:54 | → | haasn joins (~nand@haasn.dev) |
| 22:49:57 | → | xff0x joins (~xff0x@2001:1a81:5267:2d00:60:bdd1:fa4d:cbd0) |
| 22:55:40 | × | severen quits (~severen@202.36.179.72) (Ping timeout: 252 seconds) |
| 22:56:09 | → | shapr joins (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
| 22:58:23 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 23:11:04 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 252 seconds) |
| 23:12:41 | × | Lycurgus quits (~juan@cpe-45-46-140-49.buffalo.res.rr.com) (Quit: Exeunt) |
| 23:14:54 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
| 23:15:46 | × | wroathe quits (~wroathe@96-88-30-181-static.hfc.comcastbusiness.net) (Ping timeout: 250 seconds) |
| 23:21:24 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 250 seconds) |
| 23:22:30 | × | xlei quits (znc@pool-68-129-84-118.nycmny.fios.verizon.net) (Quit: ZNC - https://znc.in) |
| 23:25:42 | → | derelict joins (~derelict@user/derelict) |
| 23:26:45 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 23:26:45 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 23:27:15 | → | gentauro joins (~gentauro@user/gentauro) |
| 23:27:25 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 23:30:27 | → | lavaman joins (~lavaman@98.38.249.169) |
| 23:31:02 | → | markpythonicbtc joins (~textual@2601:647:5a00:35:ed7b:d29e:3bfe:71d0) |
| 23:31:08 | → | xlei joins (znc@pool-68-129-84-118.nycmny.fios.verizon.net) |
| 23:38:01 | → | fresheyeball joins (~fresheyeb@c-71-237-105-37.hsd1.co.comcast.net) |
| 23:38:06 | <fresheyeball> | I have a build that dies saying I have missing-home-modules |
| 23:38:11 | <fresheyeball> | but I have them in my cabal file! |
| 23:39:59 | <sm> | so you say.. you know what we're gonna ask.. |
| 23:41:06 | <sm> | let's see it, etc. Maybe they're not in all the right places ? |
| 23:41:31 | <monochrom> | No rectification without 3rd-party reproduction. |
| 23:41:43 | <fresheyeball> | sec |
| 23:41:50 | <fresheyeball> | http://ix.io/3wCL |
| 23:42:06 | <sm> | I'm sorry sir or madam but we have strict procedures in these cases, our hands our tied, if only we could help.. oh, damn |
| 23:42:26 | <fresheyeball> | http://ix.io/3wCM |
| 23:42:36 | <fresheyeball> | ok so there is the build output and the cabal file |
| 23:42:44 | <fresheyeball> | These modules are needed for compilation but not listed in your .cabal file's other-modules: |
| 23:42:45 | <fresheyeball> | Ageto.Types.Login Ageto.Types.LoginSpec |
| 23:42:53 | <fresheyeball> | you can clearly see there are present in the cabal file for unit |
| 23:43:18 | × | xff0x quits (~xff0x@2001:1a81:5267:2d00:60:bdd1:fa4d:cbd0) (Ping timeout: 258 seconds) |
| 23:43:32 | <sm> | they are needed for some of the other components, perhaps ? |
| 23:43:38 | <fresheyeball> | yes |
| 23:43:45 | <sm> | executable 'client' |
| 23:43:45 | <fresheyeball> | all of them |
| 23:43:55 | <fresheyeball> | client is not failing though |
| 23:44:03 | <fresheyeball> | only the test suite is having this problem |
| 23:44:04 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 252 seconds) |
| 23:44:33 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 23:44:40 | <sm> | hmm, yes |
| 23:46:06 | <sm> | check for weird whitespace/unicode chars ? |
| 23:46:10 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 23:46:23 | <sm> | sure it's using this copy of the cabal file ? |
| 23:46:31 | <fresheyeball> | sm yes |
| 23:46:58 | <sclv> | this often happens if the src directories are shared between different stanzas |
| 23:47:13 | × | Guest4623 quits (~Guest46@182.64.179.3) (Quit: Client closed) |
| 23:47:14 | <sclv> | like if your test stanza is using your /src just like your lib stanza is |
| 23:47:18 | <sm> | LoginSpec doesn't seem to be exposed by the library ? |
| 23:47:55 | <sm> | but listen to sclv, not me |
| 23:48:01 | <sclv> | yeah, this layout is wrong |
| 23:48:11 | <sclv> | no component should share the source dir with the lib component |
| 23:48:33 | <fresheyeball> | sm: sure but it's in lib |
| 23:48:35 | <sclv> | otherwise when it compiles Foo.Test and that imports Foo.Lib.Thing it _won't_ get it from the lib component, it'll pick it up from the source dir |
| 23:48:40 | <sclv> | and then you get that error! |
| 23:48:45 | <fresheyeball> | btw it compiles fine inside the nix-shell |
| 23:49:13 | <sm> | this is an old foot gun with cabal, isn't it ? I wonder how it could be prevented |
| 23:49:38 | <sclv> | yeah, its a classic problem. i think we reworked cabal init so it creates projects with test suites setup that don't have this issue |
| 23:49:40 | <fresheyeball> | I don't get it |
| 23:49:41 | <sclv> | to guide people away from it |
| 23:49:51 | <sclv> | ok, suppose you have LibModule and TestModule |
| 23:49:57 | <sclv> | and now TestModule imports LibModule |
| 23:49:57 | <fresheyeball> | ok |
| 23:50:05 | <fresheyeball> | yes |
| 23:50:07 | <sclv> | it could either pick it up from the _compiled library component_ |
| 23:50:20 | <fresheyeball> | I don't have the library as a build-depends though |
| 23:50:22 | <fresheyeball> | to avoid that |
| 23:50:22 | <sclv> | _or_ it could notice that LibModule.hs is in your /src directory, which your tests also include |
| 23:50:40 | <sclv> | ok, but you _are_ importing its modules into your tests? |
| 23:51:04 | <fresheyeball> | yes |
| 23:51:11 | <fresheyeball> | but just by shared hs-source-dirs |
| 23:51:56 | <fresheyeball> | either way this error message is horrible |
| 23:52:08 | → | dajoer joins (~david@user/gvx) |
| 23:52:31 | <sclv> | ah |
| 23:53:20 | → | kissofthedeath joins (~fedorafan@user/fedorafan) |
| 23:53:42 | ← | kissofthedeath parts (~fedorafan@user/fedorafan) (Textual IRC Client: www.textualapp.com) |
| 23:54:39 | <sclv> | right, ghc throws the error, and its doing it because somehow those modules aren't making their way to it. i don't have any better ideas. i'll note that you're only erroring out instead of getting a warning because you're explicitly calling -Werror, so you can fix that at least. *shrug* |
| 23:55:03 | × | enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
| 23:55:05 | <fresheyeball> | sclv: what is the point of other-modules? |
| 23:55:09 | <sclv> | running with verbosity will show you the erroring ghc call |
| 23:55:15 | <fresheyeball> | can I just ignore missing-home-modules |
| 23:55:17 | <sclv> | the point is exactly how you're using it. |
| 23:55:20 | <fresheyeball> | its a ton to maintain in the cabal file |
| 23:55:26 | <fresheyeball> | I wish it was automatic |
| 23:55:30 | → | xff0x joins (~xff0x@2001:1a81:5267:2d00:3019:a525:5831:f042) |
| 23:55:31 | <sclv> | assume you just had a library |
| 23:55:38 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
| 23:55:42 | <sclv> | if it didn't declare the modules, how would you know what was part of the package? |
| 23:55:46 | <sclv> | how would any manifest work? |
| 23:56:06 | <fresheyeball> | it would use the exposed modules |
| 23:56:16 | <sclv> | but how does it know what's exposed? |
| 23:56:24 | <fresheyeball> | you would still need to provide exposed-modules |
| 23:56:26 | <sclv> | the files need to be declared somewhere |
| 23:56:32 | <fresheyeball> | and it would include the tree of deps that implies |
| 23:56:44 | <sclv> | ok, so the issue is of course that cabal doesn't know the trace tree of the deps |
| 23:56:46 | <fresheyeball> | if the build requires a module that is not exposed, it just includes it |
| 23:56:47 | <sclv> | and nobody else does too |
| 23:56:56 | <fresheyeball> | well it sure seems to |
| 23:56:56 | <sclv> | so figuring out "what files are in this package" would require running ghc |
| 23:57:02 | <fresheyeball> | since it can warn about it |
| 23:57:08 | <sclv> | that's ghc's warning, not cabals |
| 23:57:11 | <fresheyeball> | right |
| 23:57:18 | <fresheyeball> | so... code needs to be written |
| 23:57:27 | <sclv> | anyway you asked what the point was, and that's the point |
| 23:57:36 | <fresheyeball> | but nothing to stop ghc's warning to become other-modules automatically behind the scenes |
| 23:57:37 | → | o1lo01ol1o joins (~o1lo01ol1@5.181.115.89.rev.vodafone.pt) |
| 23:57:41 | <fresheyeball> | ok |
| 23:57:44 | <fresheyeball> | so fuck it |
| 23:57:45 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 23:57:46 | <sclv> | and also, even if cabal could know from ghc we'd still want a manifest so anyone else could know without running ghc |
| 23:57:49 | <fresheyeball> | I am goign to ignore this |
| 23:57:56 | <sm> | hpack can reduce maintenance effort. I don't know if it helps here at all |
| 23:57:59 | <sclv> | for a test suite you can ignore it |
| 23:57:59 | <fresheyeball> | I don't want to have to maintain these other-modules lists |
| 23:58:09 | <sclv> | for the main lib you can't ignore it |
| 23:58:10 | <fresheyeball> | why is that a special case? |
| 23:58:20 | <sclv> | because cabal sdist will not produce a proper package |
| 23:58:25 | <fresheyeball> | omg |
| 23:58:27 | <sclv> | since it won't gather up all the files |
| 23:58:34 | <sclv> | since it doesn't know what they are, unless you tell it |
| 23:58:36 | <fresheyeball> | we have got to fix this |
| 23:58:48 | <fresheyeball> | this is just annoying busy work for developers that doesn't need to be there |
| 23:58:49 | <sclv> | the alternative, which is far worse, is that cabal just grabs every stray file in /src |
| 23:58:56 | <sclv> | we have ides that manage this for you |
| 23:59:14 | <fresheyeball> | I don't find that satisfying |
| 23:59:16 | <fresheyeball> | also how? |
| 23:59:22 | <sclv> | well people wrote them |
| 23:59:25 | <sclv> | is how we got them |
| 23:59:39 | → | chris joins (~chris@81.96.113.213) |
| 23:59:42 | <sm> | less than a real fix, but could Cabal detect and warn about this more clearly ? |
| 23:59:43 | chris | is now known as Guest9363 |
| 23:59:46 | <sclv> | anyway my recommendation is that sharing directories like you're doing is entirely not recommended |
All times are in UTC on 2021-08-21.