Logs on 2024-12-28 (liberachat/#haskell)
| 00:00:21 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 00:00:39 | <haskellbridge> | <sm> matrix edits are a godsend |
| 00:01:43 | <OftenFaded> | monochrom: you have me in a spiral of doubt with your 'manufactured reasons' point. Is the reason for choosing a language truly arbitrary? And if so, why are we here? Why do we have a liking for haskell over others if it's truly arbitrary? |
| 00:02:40 | <OftenFaded> | Like I enjoy learning haskell through xmonad, but would I be better off learning python in a qtile environment? one must be better than the other, no? |
| 00:02:44 | <geekosaur> | it's not arbitrary. it's referring to various anti-Haskell memes that don't even begin to hold up to reality |
| 00:03:17 | <homo> | the reasons to like haskell: strong static typing, IO monad, lazy evaluations and syntax is cuter than that of lisp, haxe and erlang |
| 00:03:25 | <OftenFaded> | maaan, got got on a meme again. where is the rickroll link hiding |
| 00:04:00 | <homo> | in guix I write lisp on daily basis, so I know lisp is pain to read and write |
| 00:04:20 | <OftenFaded> | also how long has this room been bridged to matrix? |
| 00:05:48 | <geekosaur> | mm, don't recall when I started running the predecessor to this bridge. although even that was the second time; back on freenode #haskell:matrix.org was bridged to the fn version of this channel, and I have no idea how long that was true |
| 00:05:49 | <homo> | it's impossible to enjoy any other functional language without those 4 basic features that haskell has |
| 00:06:30 | <geekosaur> | it was discontinued on the move to libera, and only came back when I brought up matterbridge. then that broke on me earlier this year and I moved to heisenbridge |
| 00:06:34 | <haskellbridge> | <loonycyborg> most notable to me is that exact order of statements doesn't matter |
| 00:06:38 | <geekosaur> | I think it's been around a year total |
| 00:06:51 | <geekosaur> | well, 13 months |
| 00:07:32 | <haskellbridge> | <loonycyborg> that way you can write a program in some order that matters to you |
| 00:07:43 | <haskellbridge> | <loonycyborg> maybe for clarity for example |
| 00:08:37 | <geekosaur> | top down vs. bottom up has been a feud that probably goes back to Ada Lovelace 😛 |
| 00:08:59 | <OftenFaded> | haven't heard of heisenbridge, I'mma have to check this out to see if I can reconnect with discord homies |
| 00:10:43 | <homo> | loonycyborg reminds me that in go you can split same module into multiple files, like file1.go contains "package mymodule" file2.go contains "package mymodule" file3.go also contains "package mymodule", I've never seen haskell modules being split like that |
| 00:12:10 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:12:15 | → | aerphanas joins (~aerphanas@user/aerphanas) |
| 00:12:16 | <monochrom> | homo: It is possible to like Racket for its delimited continuation, dynamic typing, and s-expression syntax. I almost did. |
| 00:13:26 | <monochrom> | "Fortunately", it breaks currying, so I headed back to Haskell. >:) |
| 00:13:29 | <homo> | monochrom I have enough of dynamic typing in guile and it is a big pain |
| 00:14:02 | <monochrom> | Oh, I don't actually use dynamic typing. |
| 00:14:04 | <geekosaur> | still better than C… |
| 00:14:25 | <homo> | not to mention how it's impossible to understand error message produced by dynamic typing |
| 00:14:28 | <haskellbridge> | <loonycyborg> you haven't seen dynamic typing until you tried a language that allows you to add number to a string |
| 00:14:48 | <homo> | do you mean javascript? |
| 00:14:49 | <monochrom> | haha |
| 00:14:50 | <haskellbridge> | <loonycyborg> iirc it was lua |
| 00:15:27 | <monochrom> | Stronger: you haven't seen dynamic typing until you see the javascript trinity. >:) |
| 00:15:40 | <homo> | do it add number to the number in the string or does it contatenate number to the string? |
| 00:15:43 | <geekosaur> | or php |
| 00:15:55 | <haskellbridge> | <loonycyborg> I don't remember |
| 00:16:12 | <haskellbridge> | <loonycyborg> I would assume it would try to show the string |
| 00:16:26 | <haskellbridge> | <loonycyborg> maybe doesn't even apply to current versions |
| 00:16:46 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 00:16:49 | <homo> | tbh thanks to haskell I no longer understand imperative languages |
| 00:16:50 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 265 seconds) |
| 00:17:02 | <homo> | imperative languages are so counter-intuitive |
| 00:17:22 | <jle`> | imperative programming in haskell makes so much sense that imperative programming in imperative languages seems weird |
| 00:17:30 | <monochrom> | We need to make a joke language that defines number+string to be this: convert the number to string, convert the string to number with default 0 then convert back to string, then concatenate. |
| 00:17:31 | <homo> | yes! |
| 00:17:54 | <monochrom> | then convert back to number! |
| 00:18:03 | <monochrom> | So for example 4 + "a" = 40 |
| 00:19:38 | <Zenen> | 4:"t":"a" -> "four":"t":"a" -> "fourty" -> 40 |
| 00:19:50 | <homo> | anyway, speaking of bootstrapping, ghc depends way too much on its own extensions, it depends on extensions to implement itself, I like haskell as a language, but I am not a fan of its toolchain ecosystem |
| 00:20:25 | <monochrom> | Yeah I don't get why people don't like monad for imperative programming and make it sound like it's additional and unnatural. The explicit >>= clarifies what's really going on. |
| 00:20:55 | <monochrom> | whereas the misleading syntax "print(getchar())" is the confusing one. |
| 00:21:26 | <monochrom> | "oh it's so academic" No, it's more honest. |
| 00:21:34 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 00:21:47 | <haskellbridge> | <loonycyborg> I tend to see monads as something like Command pattern |
| 00:21:50 | <monochrom> | Also what's wrong with being academic? OOP started out as purely academic, too. So what. |
| 00:22:21 | <homo> | funny enough I see haskell as OOP |
| 00:23:35 | <OftenFaded> | academia doesn't have the best image currently |
| 00:23:58 | <homo> | I was taught that OOP has 4 pillars: abstraction, encapsulation, polymorphism and inheritance, name one pillar that haskell doesn't have |
| 00:24:04 | <OftenFaded> | lots of 'woke cultural marxists poisoning the youth with gender theories' and whatnot |
| 00:24:35 | <monochrom> | Maybe not very generalizable to other disciplines, but in the context of PL, you can count on academia being honest about complexity, and you can count on self-identified "practical" people being liars hiding their complexities and denying that they have made footguns. |
| 00:25:33 | <haskellbridge> | <loonycyborg> if they rely on trade secrets and the like to get ahead of competition then of course they would have to lie a lot |
| 00:25:41 | <haskellbridge> | <loonycyborg> with at least lies of omission |
| 00:25:48 | <monochrom> | Haskell doesn't have their polymorphism. Haskell has the opposite kind. |
| 00:26:13 | <homo> | loonycyborg you forgot about narcissism |
| 00:27:42 | <haskellbridge> | <loonycyborg> though anyone can do their learning and result doesn't depend on whether it's in academia or not |
| 00:27:48 | <haskellbridge> | <loonycyborg> only on effort put in |
| 00:28:08 | <homo> | OftenFaded don't know what you are talking about, in my experience school youth is poisoned with close-minded hateful christianity |
| 00:28:30 | <OftenFaded> | superb counterpoint I can't argue with at all |
| 00:28:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:28:59 | <OftenFaded> | jeebus is truth evolution is black magic |
| 00:29:16 | × | iteratee quits (~kyle@162.218.222.207) (Read error: Connection reset by peer) |
| 00:29:28 | → | iteratee joins (~kyle@162.218.222.207) |
| 00:29:33 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 00:31:43 | <OftenFaded> | Need to leave soon folks, does anyone have a matrix room link by chance? |
| 00:33:02 | <haskellbridge> | <Bowuigi> #haskell:matrix.org (https://matrix.to/#/#haskell:matrix.org) this? I wonder if IRC displays it properly lol |
| 00:33:30 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 00:33:41 | <OftenFaded> | works for me! merci! |
| 00:34:32 | <geekosaur> | it does |
| 00:34:56 | <geekosaur> | but the link for *this* room is https://matrix.to/#/%23haskell-irc%3Amatrix.org?via=matrix.org&via=kf8nh.com&via=kde.org |
| 00:35:10 | × | OftenFaded quits (~OftenFade@user/tisktisk) (Quit: Client closed) |
| 00:35:19 | <geekosaur> | #haskell:matrix.org was linked on freenode but declined to re-establish the link on libera, as I said earlier |
| 00:36:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 00:38:17 | <homo> | while digging hugs's source code, I was surprised to find it contains implementation of prolog |
| 00:38:24 | <homo> | prolog implemented in haskell... |
| 00:38:42 | <Zenen> | [rationality intensifies] |
| 00:38:49 | <geekosaur> | wouldn't have been related to functional dependencies, would it? |
| 00:39:05 | <geekosaur> | they're more or less prolog in haskell's type system |
| 00:39:28 | <haskellbridge> | <Bowuigi> I think it is related to MPTC and overlapping instances |
| 00:39:41 | <haskellbridge> | <Bowuigi> I don't remember Hugs having fundeps, lemme check |
| 00:40:15 | <geekosaur> | pretty sure it had both MPTC and fundeps (which are pretty much mandatory to make MPTC usable) |
| 00:40:45 | <geekosaur> | (well, you can also do it with associated type families, but Hugs definitely doesn't have those) |
| 00:40:51 | <homo> | it is hard for me to understand source code of hugs, I am trying to patch src/parser.y in order to add bangpatterns, but it appears I cannot add them in one short line :( |
| 00:41:00 | → | IamPyu joins (~IamPyu@static209-34-105-235.r.rev.accesscomm.ca) |
| 00:41:00 | × | IamPyu quits (~IamPyu@static209-34-105-235.r.rev.accesscomm.ca) (Changing host) |
| 00:41:00 | → | IamPyu joins (~IamPyu@user/IamPyu) |
| 00:41:25 | <monochrom> | Oh, bang pattern is a cross-cutting concern, yeah. |
| 00:41:26 | <homo> | I want to bootstrap microhs from hugs and it requires bangpatterns, I would rather not remove bangpatterns from microhs's source |
| 00:41:37 | <haskellbridge> | <Bowuigi> Oh it has fundeps https://www.haskell.org/hugs/pages/hugsman/exts.html |
| 00:41:47 | → | euandreh joins (~Thunderbi@2804:d59:8929:cc00:c70d:53a7:f44e:6c64) |
| 00:42:19 | <homo> | all other extensions that microhs requires are already (partially?) supported by hugs, so there is hope to get better implementation than hugs bootstrappable |
| 00:42:44 | <homo> | it's interesting how much of haskell2010 hugs supports |
| 00:43:07 | <geekosaur> | not very; 2010 only added like two things to H98 (and removed one) |
| 00:43:29 | <homo> | npk patterns, a simulation of logical programming |
| 00:43:54 | <geekosaur> | ignoring FFI and hierarchical modules, which were widely supported and (semi-)official extensions |
| 00:44:05 | × | sprotte24 quits (~sprotte24@p200300d16f4a7c0031dcae6904c3663c.dip0.t-ipconnect.de) (Quit: Leaving) |
| 00:44:35 | × | IamPyu quits (~IamPyu@user/IamPyu) (Client Quit) |
| 00:44:56 | <homo> | it's interesting how only haskell's type-system is logic programming, but functional patterns like in curry language are impossible |
| 00:45:30 | <homo> | last (xs ++ [x]) = x |
| 00:45:40 | → | Sisyphean joins (~Sisyphean@user/Sisyphean) |
| 00:46:16 | → | simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) |
| 00:48:09 | <haskellbridge> | <Bowuigi> Because that's a term level function, not a type level one |
| 00:48:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:48:46 | <haskellbridge> | <Bowuigi> A similar thing can be done at the type level, tho it doesn't look like that |
| 00:49:14 | <homo> | microhs is the only hope to bootstrap ghc, as unfortunately ghc maintainers have no interest to make ghc buildable with smaller haskell implementations :( |
| 00:51:42 | × | simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 276 seconds) |
| 00:52:35 | <haskellbridge> | <Bowuigi> Hmmm would a simple text replacement command deleting every ! work? |
| 00:52:59 | <haskellbridge> | <Bowuigi> "tr -d '!'" on Linux/POSIX |
| 00:53:04 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 00:54:35 | <homo> | speaking of smaller, https://github.com/blynn/compiler is an interesting quest where minimal compiler written in C compiles tiny subset of haskell, so next compiler is written in that tiny subset to implement bigger subset, then another compiler is written in bigger subset... |
| 00:54:57 | <geekosaur> | tr'd [] = []; tr'd ('!':xs) = tr'd xs |
| 00:55:07 | × | Sisyphean quits (~Sisyphean@user/Sisyphean) (Read error: Connection reset by peer) |
| 00:55:33 | <homo> | Bowuigi I don't want to do that because bangpatterns are very important for optimization, they might even prevent hugs from segfaulting |
| 00:55:38 | <geekosaur> | uh, no |
| 00:56:01 | <c_wraith> | you could always use seq directly. |
| 00:56:23 | <homo> | this is why I'm trying to figure out how to add bangpatterns to hugs instead of removing every ! from microhs's code |
| 00:56:26 | → | Sisyphean joins (~Sisyphean@user/Sisyphean) |
| 00:57:06 | <geekosaur> | tr'd xs = go xs "" where go [] ys = ys; go ('!':xs) ys = go xs ys; go (x:xs) = go xs (ys ++ [x]) |
| 00:57:21 | <geekosaur> | faster wouuld be to prepend to ys and reverse it at the end |
| 00:57:58 | <homo> | sed s/!//g |
| 00:59:50 | <haskellbridge> | <Bowuigi> geekosaur it might be faster to use a Cayley-ish abstraction |
| 01:03:11 | <haskellbridge> | <Bowuigi> "tr'd xs = go xs "" where go [] = id; go ('!':xs) = go xs; go (x:xs) = (x:) . go xs" |
| 01:05:27 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 01:06:22 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:07:39 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 01:08:36 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
| 01:10:34 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 01:11:08 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 01:11:25 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 01:12:44 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 01:13:48 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 01:15:46 | <homo> | btw, #guix channel has bot "sneek" and you can ask it "sneek later tell username your message" and it will do that the moment that user sends message, is there similar bot in this channel? |
| 01:17:14 | × | euandreh quits (~Thunderbi@2804:d59:8929:cc00:c70d:53a7:f44e:6c64) (Remote host closed the connection) |
| 01:17:50 | → | euandreh joins (~Thunderbi@2804:d59:8929:cc00:c70d:53a7:f44e:6c64) |
| 01:18:20 | <geekosaur> | lambdabot has @tell / @ask |
| 01:20:17 | <geekosaur> | also I think libera still operates a memoserv, but sender and recipient must both be registered with nickserv |
| 01:22:52 | <homo> | @tell OftenFaded I think negative part about haskell being academic is that its development cycle is not business-friendly, companies want lts releases of compilers, libraries and everything else, they want stable API and ABI that doesn't break on updates, which is not the case with haskell ecosystem as it's in process of constant research and refactoring |
| 01:22:52 | <lambdabot> | Consider it noted. |
| 01:22:57 | <homo> | thanks |
| 01:27:20 | <geekosaur> | the odd thing there is a lot of the changes are driven by … businesses |
| 01:28:19 | <homo> | have you never noticed projects using bundled libraries? |
| 01:28:33 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:29:25 | <homo> | when I create packages for distro, I have to make sure they don't build nor link to bundled libraries and instead link to system-wide libraries |
| 01:30:17 | <homo> | some projects (palemoon) are so hostile that they threaten with lawsuit if you don't use bundled libraries |
| 01:31:56 | <fp> | So I've heard that first year CS students at Edinburgh University are taught haskell as the first programming language, supposedly because it evens the playing field between students who have never programmed before and those that have. I wonder if people here have thoughts on that |
| 01:33:13 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 01:33:20 | <c_wraith> | I suspect it's more about leveling the playing field between script kiddies and the inexperienced, without calling them out as such... |
| 01:33:21 | <geekosaur> | there is a recurrent meme that it's easier to learn Haskell if you don't know other programming languages. the factual evidence for that is mixed, as I understand it; I think I recall someone actually teaching Haskell to children and finding it was no easier for them than common programming languages, for example |
| 01:34:05 | <c_wraith> | The fact is, knowing how to organize your thoughts formally is the same skill no matter what programming language is involved. |
| 01:34:06 | <geekosaur> | (which doesn't surprise me enormously as you prpbably need a baseline level of math for it to make any sense) |
| 01:34:14 | <geekosaur> | and that |
| 01:34:56 | <homo> | when I had job with functional programming, unfortunately it was not haskell, it was a clone of haxe created by customer that segfaults on recursion, and I had to adjust my code just because compiler is incompetent |
| 01:36:22 | <homo> | I told customer that bug needs to be fixed in compiler instead of me adjust my code, for that reason I lost that job and I am so happy |
| 01:37:08 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 01:40:07 | <homo> | geekosaur before haskell I programmed in lua, C, go and tcl, little bit of perl, python and rust, I confirm that haskell is easy to learn |
| 01:40:13 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 01:40:34 | <homo> | so easy that I forgot how to program in those languages |
| 01:42:00 | <Sisyphean> | homo: can you write all those languages fluently? |
| 01:42:34 | <c_wraith> | honestly, forgetting other languages when you're doing solely Haskell is a real thing. |
| 01:42:46 | <homo> | Sisyphean after several years of not touching them? highly doubt it |
| 01:42:54 | <c_wraith> | I spent like 18 months working *only* in Haskell, and I forgot how line-by-line execution works. |
| 01:43:13 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 248 seconds) |
| 01:43:17 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f3024b97f8e6af9334e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 01:44:00 | <homo> | haskell creates addiction to declarative programming |
| 01:45:08 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:45:17 | → | simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) |
| 01:46:14 | <homo> | my former customer said that they cloned haxe because they don't want C/C++ programmers to learn new syntax... |
| 01:46:28 | <homo> | functional programming language with C syntax doesn't make any sense |
| 01:48:31 | <homo> | they are looking for programmers willing to learn new, but they don't want programmers to learn new syntax... |
| 01:49:38 | × | simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 265 seconds) |
| 01:50:07 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 01:51:33 | <Sisyphean> | homo: how many C/C++ programmers even exist now? |
| 01:51:43 | <Sisyphean> | aren't the majority of them now in their 60s and 70s? |
| 01:52:41 | <homo> | I even had a co-worker who asked me "if in haskell you don't type ';' in your code, how do you separate statements?" :D |
| 01:53:01 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 01:53:08 | <Sisyphean> | that's surprising ... hm |
| 01:53:34 | <homo> | Sisyphean you'd be surprised to learn how young they were in company I worked for |
| 01:53:46 | <geekosaur> | may I note that Gtk is C? |
| 01:54:01 | <geekosaur> | although I'll cop to the 60s comment 🙂 |
| 01:54:41 | <int-e> | @quote o.v.r.a.l |
| 01:54:41 | <lambdabot> | cjs says: I have to explain this shit to people. I mean, I start out right, "Hey, you know how you always have these bugs because what you thought was in the variable is not there?" And I get all of |
| 01:54:41 | <lambdabot> | these nods of agreement. "Well, I've found a new language that solves that problem." Audience: "Ooooh! How?" Me: "There's no variables!" And then they all start moving away from me slowly.... |
| 01:56:28 | <homo> | gnome is a combination of C, css, javascript and rust... |
| 01:56:49 | <homo> | won't be surprising if part of gtk is already in rust |
| 01:58:28 | <homo> | I don't understand hype behind rust, is it because haskell is not loudly advertized as safe language? |
| 01:59:41 | <geekosaur> | people insist C is the fastest. rust offers those people the speed of C with more safety |
| 02:00:05 | <homo> | or rather C+++ with more safety |
| 02:00:49 | <geekosaur> | please, no. C+ maybe. no templates and thank whoever's in charge for that |
| 02:01:02 | → | sayurc joins (~sayurc@169.150.203.34) |
| 02:01:40 | <homo> | C is very minimal language, both C++ and rust are extremely bloated, too much language features |
| 02:02:28 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:03:43 | <c_wraith> | C is a lot less "minimal" thank people think. |
| 02:03:56 | <homo> | I guess the main difference between haskell and rust is that in rust you can write entire operating system kernel |
| 02:04:03 | <geekosaur> | C hasn't been minimal since early pcc |
| 02:04:17 | <geekosaur> | if not earlier |
| 02:04:22 | <homo> | there used to be HOUSE as attempt to have operating system in haskell, but it used way too much cbits in its source code |
| 02:06:04 | <homo> | geekosaur does C offer a lot of features from other programming paradigms making it difficult to choose which features to use and work with other projects? |
| 02:06:52 | <geekosaur> | early pcc certainly didn't |
| 02:07:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds) |
| 02:07:20 | <geekosaur> | ansi C… has grown a bit, and occasionally of late has turf wars with C++ |
| 02:07:48 | × | talismanick quits (~user@2601:644:937c:ed10::ae5) (Read error: Connection reset by peer) |
| 02:08:04 | <homo> | still, it is much smaller than both C++ and rust, those 2 languages are feature creeps that say "yes" to every feature request |
| 02:08:15 | <geekosaur> | most of that, though, has stuck to C-but… languages (C++ in particular but also Objective-C) |
| 02:09:18 | <geekosaur> | (objc seemed to me like it wanted to be smalltalk) |
| 02:09:37 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:11:15 | <Sisyphean> | homo: Isn't that similar to logical positivism? It seems like you're suggesting that you only need a small subset of modern languages to accomplish anything meaningful. |
| 02:11:58 | <haskellbridge> | <loonycyborg> you can accomplish something meaningful even with direct use of assembly |
| 02:12:21 | <haskellbridge> | <loonycyborg> after that it's matter of taste how many abstraction layers over that you'd apply |
| 02:14:58 | <geekosaur> | hell, you can bang bits. doesn't mean it's a good idea |
| 02:15:37 | <geekosaur> | I gave up on x86 back in the i386 days, never mind modern x86_64 |
| 02:15:38 | <homo> | Sisyphean multi-paradigm programming languages are very clumsy, because they absorb features from every other language, they have very detailed hard to read and write syntax, it is harder to make consistent API with them and hard to work with other projects |
| 02:16:41 | <homo> | try functional programming in rust and compare it to haskell, which one is cleaner to the eyes? |
| 02:16:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 02:16:42 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 02:17:00 | <homo> | hell, try functional programming in C++ or java or javascript |
| 02:17:06 | <geekosaur> | PL/I never quite dies, does it? |
| 02:17:20 | <haskellbridge> | <loonycyborg> I like template metaprogramming in C++ |
| 02:17:56 | <haskellbridge> | <loonycyborg> in C++ you'd never have trouble getting a compile time variable, unlike haskell with its dependent types that are coming tomorrow :P |
| 02:18:00 | <homo> | I like when language's syntax is very clean, haskell's syntax makes sense only to functional programming, prolog's syntax makes sense only to logic programming |
| 02:18:10 | <haskellbridge> | <loonycyborg> * variable at runtime, |
| 02:19:08 | <haskellbridge> | <loonycyborg> and both have some large amount of emergent paradigms. |
| 02:19:18 | <haskellbridge> | <loonycyborg> Caused by features that are arguably missing |
| 02:19:20 | <Sisyphean> | homo: why can't I choose the subset of features that solves my problem? |
| 02:19:35 | <Sisyphean> | or are you saying I'm incapable of that and most users need to be spoonfed? |
| 02:19:53 | <Sisyphean> | or are you implying some kind of inconsistency (which I don't get since the language must compile) |
| 02:20:18 | <haskellbridge> | <loonycyborg> Like singletons and libs based on them very much remind me boost.mpl and other c++ template metaprogramming libs |
| 02:20:55 | <geekosaur> | PL/I was IBM's attempt at an "everything" programming language, originally unifying FORTRAN and COBOL and later adding SNOBOL and other languages. It was a huge, bloated nightmare |
| 02:21:11 | <homo> | Sisyphean that "subset" is the reason I prefer using different languages so that code looks very clean to the eyes, every time I open up .java, .rs, .cpp in the editor I think I am getting eye cancer because of how ugly they look |
| 02:21:45 | <haskellbridge> | <loonycyborg> I still think it's mostly matter of taste |
| 02:21:58 | <geekosaur> | the problem with subset of features is you may find yourself limited to the libraries that support the same interface, unless the compiler and runtime are very clever about being able to combine the features at the RTS level |
| 02:22:46 | <homo> | and consistency is about working with other projects |
| 02:23:03 | <geekosaur> | for a minor example, in Haskell's FFI all values must be forced and all constructors removed because C can't deal with them, and conversely constructors must be added to C values |
| 02:23:49 | <homo> | I was about to rewrite my message and accidentally hit enter :) |
| 02:25:00 | <homo> | I actually want to play with haskell on plan9, because there ffi doesn't make sense, all you have to do is open a file and start reading and writing to that file |
| 02:25:41 | <homo> | do you want haskell to render stuff on the screen? open file /dev/draw and write draw commands |
| 02:26:25 | <geekosaur> | you're reminding me of porting plan9's window system to sco unix 🙂 |
| 02:26:57 | <homo> | plan9's window system cannot be ported to unix because unix doesn't have network-transparent namespaces |
| 02:28:15 | <geekosaur> | someone did a hack-up at one point |
| 02:28:29 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Quit: au revoir) |
| 02:28:29 | <geekosaur> | I recall everything under it being done by echoing escape sequences |
| 02:28:30 | <homo> | with 9P, namespaces and files as REST API resources there is too much flexibility to do anything without ffi |
| 02:28:40 | <geekosaur> | opening windows, drawing graphics, etc. |
| 02:28:46 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:28:58 | <homo> | do you mean a hack-up used in plan9port? |
| 02:29:11 | <homo> | it works only for tools internal to plan9port |
| 02:30:50 | <geekosaur> | no, I'm talking about a hacked-up port to *BSD back in the 1990s |
| 02:31:43 | <homo> | hurd might be the only exception, as they say hurd's translators are same thing as plan9's file servers, but I don't know anything about hurd besides it's being microkernel, and I don't know where hurd offers network-transparent namespaces |
| 02:32:09 | <homo> | s/where/whether/ |
| 02:32:16 | × | Zenen quits (~Zenen@node-1w7jr9uk45pdylasbk2itgwn9.ipv6.telus.net) (Quit: Client closed) |
| 02:32:53 | × | Sisyphean quits (~Sisyphean@user/Sisyphean) (Read error: Connection reset by peer) |
| 02:33:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 02:34:50 | → | Sisyphean joins (~Sisyphean@user/Sisyphean) |
| 02:44:30 | <Sisyphean> | plan 9 |
| 02:44:38 | <Sisyphean> | wasn't that in the 70s? |
| 02:44:44 | <Sisyphean> | what does that have to do with today? |
| 02:44:56 | <Sisyphean> | or am I crazy? |
| 02:45:44 | <homo> | Sisyphean anyway, I didn't mean to offend you, I have personal struggle with multi-paradigm languages because of how unpleasant their syntax looks to the point it's necessary to use auto-completion plugins in the editor and how hard it is to understand someone else's code, instead it's much easier to read when there are separate languages for every paradigm, I recommend to watch "public static void" and "simplicity is complicated" talks by Rob Pike |
| 02:45:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:46:04 | <homo> | unix was born in the 70s, plan9 is not that old |
| 02:46:24 | <homo> | plan9 is haskell of operating systems |
| 02:46:27 | <Sisyphean> | yeah I stand corrected mid-80s |
| 02:48:23 | <Sisyphean> | homo, makes sense. I think that'd be ideal. I still think there's always going to be naturally many languages and we just have to deal with it. |
| 02:48:33 | <Sisyphean> | but I could be wrong. |
| 02:49:30 | <homo> | many languages are wonderful when they offer thinking from different perspective not available in other languages |
| 02:50:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 02:53:00 | <fp> | I'm trying to write a parser with megaparsec and I want to read in input up to a delimiter. The delimiter can be a few different characters, but I'd also like for it to be EOF. However, the char parsing is of type =Parser Char=, but EOF is =Parser ()=. How can I make a single parser that capture both characters and EOF |
| 02:53:08 | <homo> | go's abstraction is CSP-style concurrency, you don't need library for that, make's abstraction is dependency management, again you don't need separate library for that, prolog's abstraction is search, once again no library is needed for that |
| 02:53:46 | <homo> | it's when such abstractions are separated in different languages they are easy to read and write |
| 02:55:21 | <homo> | tcl offers a clean syntax to quickly prototype gui with tk |
| 03:00:41 | × | haver quits (~Enviosity@2.219.56.221) (Ping timeout: 265 seconds) |
| 03:02:03 | <Sisyphean> | yea I agree, surely CSP-style comm is how the Universe works |
| 03:02:08 | × | l_k quits (~student@85.172.76.246) (Ping timeout: 265 seconds) |
| 03:02:29 | <homo> | Sisyphean anyway, what plan9 and haskell have in common is that they both are academic, they both are relevant today, the difference is that lawyers destroyed further development of plan9, after everyone got scared away by its license it got proper free software license 3 years ago |
| 03:02:30 | <Sisyphean> | diff strokes for diff folks. long live the many-languages-many-paradigms approach |
| 03:02:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:03:05 | <homo> | more than 30 years of tyrant license and it is finally under mit license |
| 03:03:26 | <Sisyphean> | homo: do you think it can catch up? |
| 03:03:52 | → | l_k joins (~student@85.172.76.246) |
| 03:05:37 | <homo> | Sisyphean yes, and from the beginning it has features that make it more advanced than other operating systems, even on gnu/linux I still use plan9port because I don't know of replacement other than inferno-os |
| 03:06:39 | <Sisyphean> | ok good to know I'm not alone in thinking the future was written 40 years ago. I will read more about plan9, I obviously misjudged. |
| 03:06:41 | <homo> | 3 ideas from which everything is build - transparent window and sound systems, vpn, containers, cloud, etc. |
| 03:07:11 | <Sisyphean> | transparent window? |
| 03:07:15 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 03:07:24 | <geekosaur> | "there are more things in heaven and earth, Horatio, than are dreamt of in your philosophy" |
| 03:07:41 | <homo> | transparent window system, not transparent window |
| 03:07:45 | <Sisyphean> | geekosaur, wow |
| 03:07:50 | <Sisyphean> | is that Hamlet? |
| 03:07:54 | <geekosaur> | yep |
| 03:09:14 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 03:09:18 | × | Katarushisu quits (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) (Quit: Ping timeout (120 seconds)) |
| 03:09:30 | → | housemate joins (~housemate@pa49-183-76-50.pa.vic.optusnet.com.au) |
| 03:09:36 | → | Katarushisu joins (~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) |
| 03:10:58 | <homo> | transparent in the sense of network transparency |
| 03:11:42 | <homo> | it's possible because of namespaces |
| 03:13:15 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:14:45 | <Sisyphean> | yeah namespaces. |
| 03:14:51 | <Sisyphean> | never heard that before |
| 03:14:57 | <Sisyphean> | so like hierarchy? |
| 03:15:13 | <Sisyphean> | amazing |
| 03:15:48 | <homo> | well, think about them as namespaces in programming languages |
| 03:16:55 | <homo> | for example, there is file /dev/audio , it can be provided by kernel, by sound server and even by remote machine, but to your programs it looks like local file |
| 03:18:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 03:18:25 | <homo> | if your router runs plan9, you can bind its /net to /net of your laptop and get access to internet without nat |
| 03:18:45 | <homo> | that is, you don't need ipv6 to eliminate nat |
| 03:18:47 | <Sisyphean> | ok I guess that's a good thing |
| 03:19:03 | <Sisyphean> | appreciate you explaining it |
| 03:19:28 | <homo> | you can find research papers from cat-v.org, but that site is currently down |
| 03:20:01 | × | housemate quits (~housemate@pa49-183-76-50.pa.vic.optusnet.com.au) (Ping timeout: 265 seconds) |
| 03:20:34 | <homo> | this is tour of acme, plan9's ide https://www.youtube.com/watch?v=dP1xVpMPn8M |
| 03:21:10 | <Sisyphean> | internet is too centralized now |
| 03:22:26 | <Sisyphean> | but it's easy to just talk about it |
| 03:22:31 | <Sisyphean> | people have been doing that for 50 years lol |
| 03:22:49 | <Sisyphean> | net neutrality, etc |
| 03:24:12 | <Sisyphean> | talking about it before clearly did shit |
| 03:24:52 | <homo> | https://web.archive.org/web/20240922064812/https://doc.cat-v.org/plan_9/4th_edition/papers/ I recommend to read at the very least introduction papers, then https://web.archive.org/web/20240522195315/http://doc.cat-v.org/plan_9/3rd_edition/rio/ https://web.archive.org/web/20240303195542/http://doc.cat-v.org/bell_labs/concurrent_window_system/ https://web.archive.org/web/20240521085627/http://doc.cat-v.org/bell_labs/transparent_wsys/ https://web.archive.org/web/2024 |
| 03:24:52 | <homo> | 0718051824/http://doc.cat-v.org/bell_labs/good_bad_ugly/ |
| 03:25:30 | <Sisyphean> | ok |
| 03:25:44 | <Sisyphean> | I'll read those papers, appreciate it |
| 03:26:35 | × | notzmv quits (~umar@user/notzmv) (Ping timeout: 260 seconds) |
| 03:27:14 | ← | Sisyphean parts (~Sisyphean@user/Sisyphean) (Leaving) |
| 03:27:59 | <homo> | symlinks, sockets, ioctl() and many other things you find in linux and bsd are considered harmful, plan9 has replacement for them, on top of that instead of dbus and env variables like EDITOR there is plumber (is this punchline on unix pipes?) |
| 03:28:48 | → | Sisyphean joins (~Sisyphean@user/Sisyphean) |
| 03:29:01 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:29:59 | <homo> | btw, if you like jokes, in plan9 there are manpages for vi(1) and emacs(1) |
| 03:31:37 | × | hueso quits (~root@user/hueso) (Ping timeout: 265 seconds) |
| 03:32:02 | → | hueso joins (~root@user/hueso) |
| 03:33:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 03:34:29 | <homo> | "I'm not alone in thinking the future was written 40 years ago." it's because software systems research is abandoned, today we have companies milking money out of ads and microtransactions with users, nobody wants to pay for doing further systems research |
| 03:36:27 | × | td_ quits (~td@i53870935.versanet.de) (Ping timeout: 265 seconds) |
| 03:37:19 | <Sisyphean> | homo: true |
| 03:37:53 | <Sisyphean> | so what do you recommend? |
| 03:37:59 | → | td_ joins (~td@i5387093F.versanet.de) |
| 03:37:59 | <Sisyphean> | what's the answer |
| 03:38:36 | <homo> | well, personally I'm having fun being different than everyone else |
| 03:43:07 | <homo> | so, recommendation is throw your fears away and have fun thinking from perspectives that contradicts choices of majority, choose to do something that is not popular because it's fun to do |
| 03:44:41 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:45:38 | <haskellbridge> | <loonycyborg> things become popular only because someone starts to tinker with them. |
| 03:46:09 | <homo> | programming as hobby is so much better than programming as profession, a lot of flexibility to do things differently, to choose tools that suit you best |
| 03:46:17 | <haskellbridge> | <loonycyborg> majority isn't a hive mind and things change all the time |
| 03:47:14 | <haskellbridge> | <loonycyborg> therefore if you're chasing trends then you're always a distant second :P |
| 03:47:42 | <Sisyphean> | sounds reasonable |
| 03:48:05 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds) |
| 03:48:30 | <homo> | loonycyborg don't most thing become popular because of marketing? |
| 03:49:06 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 03:49:34 | <homo> | for example, this is why dis is better than jvm https://web.archive.org/web/20240521004107/http://doc.cat-v.org/inferno/4th_edition/dis_VM_design |
| 03:49:57 | <homo> | but jvm became popular because of marketing |
| 03:50:58 | <haskellbridge> | <loonycyborg> Marketing total trash isn't worthwhile in most cases anyway. |
| 03:51:06 | <haskellbridge> | <loonycyborg> that's why it's only one of reasons |
| 03:51:36 | <haskellbridge> | <loonycyborg> all in all there's so much stuff happening there that it's hard to find a single reason |
| 03:51:54 | <homo> | then why haskell is less popular than rust, java, c#? |
| 03:52:03 | → | housemate joins (~housemate@pa49-199-79-186.pa.vic.optusnet.com.au) |
| 03:52:37 | <haskellbridge> | <loonycyborg> I dunno, to me it seems pretty conceptually alien to people who started programming with C/python/basic etc |
| 03:53:26 | <homo> | and haskell doesn't look to them as cleaner version of python... |
| 03:54:10 | <homo> | on java and c# side too much marketing happenned, and rust is not different in safety propaganda |
| 03:54:15 | → | talismanick joins (~user@2601:644:937c:ed10::ae5) |
| 03:54:19 | <homo> | but there are no aggressive ads for haskell |
| 03:54:29 | <haskellbridge> | <loonycyborg> I'm not sure it's cleaner than python. |
| 03:55:01 | × | Sisyphean quits (~Sisyphean@user/Sisyphean) (Quit: Leaving) |
| 03:55:09 | <haskellbridge> | <loonycyborg> especially given libs that overload various weird letter salad as operators. |
| 03:56:38 | <haskellbridge> | <loonycyborg> but it's not matter of language itself but who uses it. |
| 03:56:38 | <homo> | hah, you can tell that you can make haskell look like any language because of operators |
| 03:56:46 | × | housemate quits (~housemate@pa49-199-79-186.pa.vic.optusnet.com.au) (Remote host closed the connection) |
| 03:56:55 | <haskellbridge> | <loonycyborg> if it empowers some important projects then it would become more popular |
| 03:57:07 | <geekosaur> | there's at least one BASIC implementation (abusing operators and do notation) |
| 03:57:23 | <homo> | go empowers important projects, but is not popular |
| 03:57:26 | <haskellbridge> | <loonycyborg> homo: I don't think so, basic syntax is pretty restrictive |
| 03:57:45 | <haskellbridge> | <loonycyborg> but if you use parsec with template haskell probably everything is possible |
| 03:58:08 | <geekosaur> | pandoc's actually pretty popular, but hasn't really driven much haskell adoption. then again, nobody cares what language it's written in if they're interacting with a command line program |
| 03:58:16 | <haskellbridge> | <loonycyborg> especially the way infix operators are handled |
| 03:58:42 | <homo> | also don't forget that most people use windows and macos on desktops even if gnu/linux offers them superior alternatives |
| 03:59:06 | <haskellbridge> | <loonycyborg> I mean lack of prefix/postfix except - |
| 03:59:17 | <haskellbridge> | <loonycyborg> and that ghc extension seems to require () everywhere |
| 03:59:46 | <haskellbridge> | <loonycyborg> probably it would be hard to make more general system though without adding lots of ambiguities |
| 04:00:31 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:01:29 | <homo> | I don't know which today's trend is the most horrible: electron apps; subscriptions; microsoft recall; microtransactions in games |
| 04:01:57 | <geekosaur> | chatgpt. |
| 04:02:52 | <monochrom> | Sorry, what is wrong with electron apps again? |
| 04:05:08 | <haskellbridge> | <sm> electron bad! |
| 04:05:19 | <haskellbridge> | <sm> so negative! |
| 04:06:16 | <geekosaur> | bloated, slow, leaky JS code, mostly |
| 04:06:39 | <monochrom> | OK, that's just being lame, not horrible. |
| 04:06:39 | <geekosaur> | I've had electron apps OOM my machine if left running overnight |
| 04:06:58 | <homo> | I tried vscode once, I just removed 1 character in code and it got frozen for more than minute, couldn't type text at all |
| 04:07:23 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 04:07:31 | <haskellbridge> | <sm> what kind of machine homo ? |
| 04:08:49 | <homo> | it was 64-bit 4GB RAM laptop |
| 04:09:01 | <glguy> | It's a useful to not let single events shape your whole reality |
| 04:09:09 | <homo> | or was it 8GB RAM, I really forgot as I don't have it 2 years already |
| 04:09:10 | <glguy> | useful thing* |
| 04:09:47 | <homo> | back then I was doing unity game development and unity was so painfully slow I gave up |
| 04:09:54 | <geekosaur> | 4GB i'd believe |
| 04:09:58 | <haskellbridge> | <sm> I guess it was overloaded. I have a couple of terrific daily-use electron apps, but more memory to run them in |
| 04:10:21 | <geekosaur> | I ripped apart a dead machine to scavenge its 16GB RAM to make a 4GB laptop I had usable |
| 04:10:23 | <homo> | overloaded? I didn't even install any plugins, I ran with complete defaults |
| 04:10:44 | <geekosaur> | imagine chrome in 4GB, if you will |
| 04:10:44 | <haskellbridge> | <loonycyborg> I'm not sure what electron apps do under the hood. Can they share resources? |
| 04:11:01 | <haskellbridge> | <loonycyborg> or it's always like running an extra browser per app |
| 04:11:18 | <geekosaur> | I think it's the latter |
| 04:11:52 | <haskellbridge> | <loonycyborg> ye I guess it's about having 64Gb ram everywhere now |
| 04:12:06 | <haskellbridge> | <sm> your computer may have been running some other things as well. Also, the project you had open in VSC might have been a factor. Also, you might have been unlucky and hit a bug ? It sounds abd |
| 04:12:12 | <haskellbridge> | <sm> * bad |
| 04:12:25 | <haskellbridge> | <sm> but yes 4G isn't much for today's apps |
| 04:12:44 | <haskellbridge> | <sm> +big |
| 04:13:09 | <geekosaur> | the really extreme case was when I was temporarily limited to an old eee pc laptop. 600MHz Atom, 2GB |
| 04:13:41 | <geekosaur> | minuscule screen |
| 04:14:53 | <haskellbridge> | <sm> which in the grand scheme of things is an amazingly powerful machine, right?! It's just you've got to have software right sized / efficient enough for the hardware |
| 04:15:57 | <haskellbridge> | <sm> I'm remembering my 1K ZX80 |
| 04:16:31 | <geekosaur> | I can't really complain much, it had a good full life until its battery finally died (nobody makes batteries for it any more, of course) |
| 04:17:07 | <homo> | so, when you need so much RAM, how much multi-tasking does your computer perform? can you keep more apps open today than you could 10 years ago? 20 years ago? |
| 04:17:20 | <geekosaur> | although I actually still have it and it may yet ride again: unlike at least some modern machines, it works on AC power even without a battery installed |
| 04:17:50 | <haskellbridge> | <sm> homo: depends on the apps, doesn't it |
| 04:18:21 | <geekosaur> | and except for that brief-ish period trying to use it as an emergency backup laptop, it spent its later years as a fileserver |
| 04:18:51 | <monochrom> | Certainly I can keep two ghci open today but I couldn't back then. :) |
| 04:19:00 | haskellbridge | sm has 630 processes running here |
| 04:19:36 | <monochrom> | Actually even two ghci open and one ghc compiling. |
| 04:20:06 | <geekosaur> | my current machine is big enough that it only starts to breathe heavy when building ghc |
| 04:20:13 | <monochrom> | couldn't do that with 4GB 7 years ago. |
| 04:20:14 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:20:39 | <geekosaur> | and then only because I use -j12 |
| 04:21:34 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 04:21:48 | × | sayurc quits (~sayurc@169.150.203.34) (Quit: Konversation terminated!) |
| 04:24:44 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 04:27:15 | <homo> | another reason to have alternative haskell compiler: save resourses compiling it |
| 04:28:55 | <homo> | what if ghc maintainers are secretly afraid that something can compile ghc faster than ghc compiles itself and that's why they make it impossible to bootstrap |
| 04:29:57 | <haskellbridge> | <sm> a lighter haskell compiler would be great! try microhs and hell |
| 04:30:46 | <homo> | another advantage of microhs is that it might be ported on more cpu architectures than ghc itself |
| 04:31:10 | <homo> | if there is any special work required for porting that is |
| 04:32:21 | <homo> | or even something crazyingly impossible for ghc: port microhs to plan9 and enjoy haskell2010 with 50 extensions |
| 04:32:31 | <haskellbridge> | <sm> has microhs been compiled with ghc wasm yet I wonder |
| 04:36:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:38:27 | <homo> | at the very least until ghc's bootstrap problem is solved, the biggest haskell one will get on guix on riscv and arm is microhs |
| 04:39:59 | <homo> | to me it is important to always have darcs available |
| 04:41:17 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 04:45:42 | → | giost joins (~giost@pool-72-74-37-230.bstnma.fios.verizon.net) |
| 04:46:55 | × | rekahsoft quits (~rekahsoft@76.69.85.220) (Remote host closed the connection) |
| 04:47:44 | × | fun-safe-math quits (~fun-safe-@2601:1c2:1b7f:801f:83ce:3f54:3f3c:7c89) (Quit: No Ping reply in 180 seconds.) |
| 04:49:00 | → | fun-safe-math joins (~fun-safe-@2601:1c2:1b7f:801f:ece:4698:cd8b:41e1) |
| 04:54:32 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:58:43 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 05:05:31 | <haskellbridge> | <sm> ah, a darcs user! |
| 05:08:31 | <homo> | yeah, so much different from the rest :) |
| 05:10:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:11:12 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 05:15:14 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 05:16:52 | × | remedan_ quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 05:17:07 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving) |
| 05:19:24 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 05:20:34 | → | gorignak joins (~gorignak@user/gorignak) |
| 05:27:09 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:30:57 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 05:31:40 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 05:37:00 | → | notzmv joins (~umar@user/notzmv) |
| 05:38:30 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 05:39:01 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 05:44:05 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:45:29 | × | ycp quits (~znc@user/dragestil) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 05:45:57 | → | ycp joins (~znc@user/dragestil) |
| 05:50:51 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 05:53:06 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 244 seconds) |
| 05:53:26 | → | tnt1 joins (~Thunderbi@user/tnt1) |
| 05:56:26 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 05:58:04 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 265 seconds) |
| 05:58:04 | tnt2 | is now known as tnt1 |
| 06:03:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:08:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 06:18:19 | → | gorignak joins (~gorignak@user/gorignak) |
| 06:18:22 | × | notzmv quits (~umar@user/notzmv) (Ping timeout: 265 seconds) |
| 06:22:08 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:22:43 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 06:23:48 | <fp> | How, with megaparsec, does one represent an optional parser? The problem I'm solving is that I have a decimal literal, which can be like =1234= or =#d1234=, so the =#d= is optional and I don't care about the value. =optional= exists, but it creates a =Maybe= which I can't just throw away its value |
| 06:25:30 | <haskellbridge> | <maerwald> maybeParser *> decimalParser |
| 06:26:24 | <haskellbridge> | <maerwald> :t (*>) |
| 06:27:01 | <haskellbridge> | <maerwald> (*>) :: f a -> f b -> f b |
| 06:27:04 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 06:27:14 | <haskellbridge> | <maerwald> you run both effects, but discard the left value |
| 06:27:22 | <c_wraith> | In particular, both (*>) and (<*) do just "throw away" things in exactly the way you'd want. (You use *> more standalone, <* more in applicative chains) |
| 06:28:02 | <haskellbridge> | <maerwald> the effect of a parser is that it consumes input (or not) |
| 06:29:53 | <fp> | So I don't want for decimalParser to be Maybe, like the grammar I want is like <decimal> ::= "#d"? [0-9]+, so I just want something like the ? |
| 06:30:35 | <fp> | or is that what you're saying? |
| 06:31:53 | <c_wraith> | optional (chunk "#d") <* some (satisfy isDigit) |
| 06:32:07 | <c_wraith> | err. *> |
| 06:35:17 | <haskellbridge> | <maerwald> The effect of a parser is consuming input or failing... a maybe parser never fails (but may backtrack, depending on how you defined it). You only care about the effect here, but not the value (Maybe). That's what (*>) does. |
| 06:35:46 | <fp> | That still gives me a type error on the left side that it's Maybe and not Parser |
| 06:36:12 | <fp> | looking at the type signature of (*>), I think both sides need to be of the same monad? |
| 06:36:26 | <haskellbridge> | <maerwald> yes |
| 06:36:27 | <c_wraith> | optional returns a parser. |
| 06:36:36 | <c_wraith> | What are you doing to make it not? |
| 06:36:41 | <haskellbridge> | <maerwald> show the real code |
| 06:36:57 | <fp> | number <- optional string "#d" <* someTill decimalDigit (lookAhead delimiter) |
| 06:37:10 | <c_wraith> | yeah, flip that to *> |
| 06:37:19 | <fp> | same that way |
| 06:37:23 | <haskellbridge> | <maerwald> missing parenthesis too I think |
| 06:37:31 | <c_wraith> | oh, right. |
| 06:37:38 | <c_wraith> | option (string "#d") |
| 06:37:54 | <c_wraith> | I should stop trying to type correctly tonight. option*al*. |
| 06:38:21 | <haskellbridge> | <maerwald> without parens, you have (optional string) "#d" |
| 06:39:16 | <fp> | right yeah, that was it |
| 06:39:19 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:39:30 | <fp> | now to figure out why that didn't solve my problem |
| 06:39:31 | <haskellbridge> | <maerwald> that would then use the function applicative instance I believe |
| 06:39:36 | <fp> | (unrelated to my question) |
| 06:40:13 | <c_wraith> | If you're using megaparsec, you need to know when/why to use try |
| 06:40:44 | <c_wraith> | not using it when you need to will make parses fail for no apparent reason. |
| 06:40:46 | <haskellbridge> | <maerwald> I prefer attoparsec |
| 06:41:21 | <haskellbridge> | <maerwald> it always backtracks on failure |
| 06:42:07 | <fp> | I know it's not related to backtracking because the misbehaviour is at the beginning of the input |
| 06:42:07 | <c_wraith> | well, sort of. It never discards input it might still choose to use. I don't believe it will actually backtrack on a successful parse if a future parse fails. |
| 06:43:44 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 06:45:21 | → | haver joins (~Enviosity@2.219.56.221) |
| 06:48:53 | <c_wraith> | yeah, attoparsec doesn't backtrack either. parseOnly ((string "a" <|> string "aa") <* string "b") "aab" ----> Left "string" |
| 06:50:05 | <c_wraith> | being able to parse that string with that parser is backtracking. Not needing to use try to avoid breaking is just not being broken. |
| 06:51:27 | <haskellbridge> | <maerwald> it doesn't backtrack on failure of a single parser |
| 06:51:40 | <haskellbridge> | <maerwald> *does |
| 06:53:00 | <haskellbridge> | <maerwald> what you want is non-determinism, that's not what it does |
| 06:54:41 | <c_wraith> | I want basic refactoring to work, which is not what it does. |
| 06:56:32 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:57:11 | <haskellbridge> | <maerwald> no idea what that means |
| 06:57:46 | <c_wraith> | If I have to know that ((a <*> b) <|> (a <*> c)) is the same as (a <*> (b <|> c)), but ((a <*> c) <|> (b <*> c)) is not the same as ((a <|> b) <*> c), it's gone off the rails. |
| 06:58:32 | <c_wraith> | just give me simple distributive laws which don't have tons of cases. |
| 07:00:19 | × | JamesMowery439 quits (~JamesMowe@ip68-228-212-232.ph.ph.cox.net) (Quit: Goodbye) |
| 07:00:35 | → | JamesMowery439 joins (~JamesMowe@ip68-228-212-232.ph.ph.cox.net) |
| 07:01:11 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 07:01:18 | <haskellbridge> | <maerwald> well, distributive laws don't hold for Alternative even in core libs |
| 07:01:23 | → | housemate joins (~housemate@pa49-199-79-186.pa.vic.optusnet.com.au) |
| 07:02:12 | <c_wraith> | But they do hold for the parser combinator library in base! |
| 07:06:55 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 07:07:32 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 07:08:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:14:02 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 07:18:42 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 07:21:48 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 264 seconds) |
| 07:24:39 | × | housemate quits (~housemate@pa49-199-79-186.pa.vic.optusnet.com.au) (Ping timeout: 252 seconds) |
| 07:25:37 | × | ephilalethes quits (~noumenon@202.186.200.33) (Read error: Connection reset by peer) |
| 07:27:06 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:32:22 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 07:43:51 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:44:01 | → | Milan joins (~Milan@88.212.61.169) |
| 07:44:19 | × | Milan quits (~Milan@88.212.61.169) (Remote host closed the connection) |
| 07:45:39 | → | Digitteknohippie joins (~user@user/digit) |
| 07:46:15 | × | Digit quits (~user@user/digit) (Ping timeout: 244 seconds) |
| 07:47:26 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 07:48:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 07:49:10 | × | Flow quits (~none@gentoo/developer/flow) (Ping timeout: 252 seconds) |
| 07:50:12 | × | Digitteknohippie quits (~user@user/digit) (Ping timeout: 265 seconds) |
| 07:51:31 | → | Digit joins (~user@user/digit) |
| 07:52:18 | → | Flow joins (~none@gentoo/developer/flow) |
| 07:59:51 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:00:04 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:05 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:00:43 | → | caconym joins (~caconym@user/caconym) |
| 08:04:20 | ← | giost parts (~giost@pool-72-74-37-230.bstnma.fios.verizon.net) (Leaving) |
| 08:05:15 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 08:08:46 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:09:01 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 08:09:27 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:14:46 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 08:15:11 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:16:22 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:20:59 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 08:22:17 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 08:23:09 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 08:23:33 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 265 seconds) |
| 08:23:35 | tnt2 | is now known as tnt1 |
| 08:27:24 | → | notzmv joins (~umar@user/notzmv) |
| 08:29:15 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:32:24 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:34:34 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 08:36:52 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 08:39:30 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 08:43:59 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 08:44:09 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 08:44:25 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 08:50:47 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 08:51:51 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:56:37 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:56:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 09:08:22 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 09:14:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 09:16:55 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 09:17:37 | × | remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!) |
| 09:20:22 | → | remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz) |
| 09:21:03 | → | Square joins (~Square@user/square) |
| 09:27:23 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 09:31:20 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Ping timeout: 264 seconds) |
| 09:32:11 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 09:32:30 | → | manwithluck joins (~manwithlu@194.177.28.164) |
| 09:35:05 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:42:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 09:45:13 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 09:47:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 09:49:35 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 10:00:23 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 10:05:03 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 10:07:04 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 10:10:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 10:11:59 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 10:17:43 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 10:17:49 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 10:19:58 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) |
| 10:20:02 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 10:22:37 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 10:26:56 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 10:28:55 | → | euleritian joins (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) |
| 10:30:41 | → | CiaoSen joins (~Jura@2a05:5800:2ca:8300:ca4b:d6ff:fec1:99da) |
| 10:40:26 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 10:45:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 10:47:03 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 10:51:06 | × | alp quits (~alp@2001:861:8ca0:4940:8d4c:5a22:6b11:16da) (Remote host closed the connection) |
| 10:55:17 | → | __monty__ joins (~toonn@user/toonn) |
| 10:58:37 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 11:02:40 | <SrPx> | tips and tricks to make cabal install not take 20s when developing / debugging? i just want to edit my haskell project and run it without having to wait 20s every damn time. that is completely killing my productivity. i wonder if runghc can be used for that perhaps? |
| 11:03:32 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 11:03:43 | <int-e> | Hmm maybe `cabal repl` and :r gets you close enough? |
| 11:04:40 | <Leary> | SrPx: ghcid/ghciwatch |
| 11:05:33 | <mauke> | what is taking 20s? |
| 11:07:19 | <SrPx> | doing 'cabal install' on https://github.com/HigherOrderCO/HVM3... |
| 11:07:22 | <SrPx> | which isn't even a big project |
| 11:07:37 | <SrPx> | so whenever I make a change in HVM3, I need to wait 20s to run a hvml file and test it. |
| 11:09:00 | <SrPx> | runhaskell cant be used in a project? |
| 11:11:16 | × | euleritian quits (~euleritia@dynamic-176-006-141-001.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 11:11:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 11:11:53 | <mauke> | but which part of 'cabal install' is taking the most time? compiling, linking, installing, something else? |
| 11:12:01 | <mauke> | also, why are you running 'cabal install' during development? |
| 11:12:54 | <mauke> | heh, that readme is functionally meaningless |
| 11:15:40 | <SrPx> | mauke: 1. make some change to the project. 2. cabal install. 3. run the file I want to test (ex: 'hvml run my_file.hvml'). |
| 11:15:59 | <SrPx> | that's how I work usually, but cabal install taking forever is making this miserable |
| 11:16:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 11:16:31 | <SrPx> | im testing cabal repl and it seems to work decently enough, without optimizations though |
| 11:17:12 | <SrPx> | but I'd like to call it from a standalone terminal, not from inside cabal repl. can I replicate that quick reload without having to be inside cabal repl? |
| 11:18:24 | <mauke> | any reason you're not using 'cabal run'? |
| 11:18:30 | × | sawilagar quits (~sawilagar@user/sawilagar) (Remote host closed the connection) |
| 11:18:55 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 11:19:23 | <SrPx> | ah that's better but still takes ~3s |
| 11:20:04 | <Leary> | `cabal install` is not intended for development. Things that can be tested with interpreted code should be run in repl, things that need compilation should be `test-suite`s or `benchmark`s in your .cabal file with appropriate optimisation flags. |
| 11:21:43 | <SrPx> | Leary: that doesn't fit my project. it is a language and I'm iteratively extending it and testing (by opening foo.hvml files and running them on my editor). so, I need a quick feedback loop where I change something on the Haskell project, move to my editor, and run an hvml file there |
| 11:22:23 | <SrPx> | so basically you're saying I need to use the repl instead of my editor to run files I test, which kinda sucks |
| 11:22:57 | <SrPx> | because if I'm editing "foo.hvml" I want to be able to run it there, rather than moving to another tab (of the cabal repl) and typing its full path |
| 11:23:17 | <__monty__> | Just have your editor run `cabal run hvml` instead of `hvml`? (Modulo `--` to pass options to hvml rather than Cabal or something.) |
| 11:24:02 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 11:25:08 | <SrPx> | __monty__: yes but it seems like `cabal run hvml` is slower than `:r` on `cabal repl` (which is quite fast it seems) |
| 11:25:37 | <mauke> | just set the optimization level to 1 or 0 for dev |
| 11:26:09 | <SrPx> | that goes in cabal.project? |
| 11:26:42 | <SrPx> | I had to set 'optimization: 2' on cabal.project because setting it on HVM3.cabal was being ignored for some reason |
| 11:27:20 | <mauke> | yes |
| 11:28:04 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 11:28:12 | <Leary> | SrPx: When I say repl, I really mean indirectly via ghcid/ghciwatch, as I recommended earlier. They can run `-- $> <code>` comments embedded in haskell files and be made to watch e.g. your .hvml test file for changes. |
| 11:28:18 | <mauke> | (IIRC there is no 'optimization' setting in *.cabal files; you'd have to do soemthing like 'ghc-options: -O2') |
| 11:28:54 | <SrPx> | Leary: I've seen ghciwatch but it seemed unrelated, so you mean it can keep a repl open, and then allow me to access it in a separate terminal? |
| 11:28:58 | <SrPx> | that would be ideal |
| 11:29:34 | <Leary> | It watches your source and test files for changes and reloads a repl in the background. |
| 11:31:08 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 11:31:20 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 11:31:20 | ljdarj1 | is now known as ljdarj |
| 11:31:56 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 11:32:28 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 11:32:34 | <SrPx> | yes but it is still a repl, not sure how that helps with running it from a separate terminal? |
| 11:36:00 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 11:36:48 | <__monty__> | SrPx: Is it too slow just the first time or every time? I don't think you can speed up `cabal run` much but maybe watching the files with something like ghcid or entr and running `cabal build` whenever the project changes will avoid having to pay the full price of compilation the moment you run code from your editor? |
| 11:37:05 | → | tnt2 joins (~Thunderbi@user/tnt1) |
| 11:37:51 | × | tnt1 quits (~Thunderbi@user/tnt1) (Ping timeout: 265 seconds) |
| 11:37:51 | tnt2 | is now known as tnt1 |
| 11:39:09 | <SrPx> | __monty__: every time I make a change it takes that amount of time. yet `:r` on the repl is instant. so ideally all I need is a way to talk to the repl (from another terminal) quickly. almost considering spawning a socket but there must be a built in way |
| 11:40:40 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 11:41:59 | <SrPx> | oh never mind sonnet provided an easy / obvious solution |
| 11:42:47 | <SrPx> | basically just open the repl and watch a named pipe for a lightweight communication between my VIM and it |
| 11:45:26 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 11:48:07 | <Leary> | SrPx: You don't need to run anything; it runs automatically when you save changes to the files. |
| 11:49:45 | → | tv joins (~tv@user/tv) |
| 11:50:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 11:50:36 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 11:52:41 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) |
| 11:54:46 | <SrPx> | is it possible to reload ghci with an actual function, not ':r'? i'm trying to call it from an IO block |
| 11:55:00 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 11:59:39 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 12:00:04 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 12:02:17 | → | caconym joins (~caconym@user/caconym) |
| 12:03:28 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 265 seconds) |
| 12:06:16 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 12:12:54 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 12:13:03 | <SrPx> | hm that didnt working |
| 12:13:05 | <SrPx> | work* |
| 12:13:14 | <SrPx> | again what I need seems to be: 1. leave a ghci session open in the background; 2. have it reload whenever a file changes; 3. allow me to, from a separate terminal, run haskell commands on it |
| 12:13:22 | <SrPx> | the 3 part is the issue, ghcid for example doesn't allow that |
| 12:13:37 | × | CiaoSen quits (~Jura@2a05:5800:2ca:8300:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds) |
| 12:16:33 | <Leary> | SrPx: Put the commands you want to run in `-- $> ...` comments in the haskell files, and pass ghcid/ghciwatch the appropriate flag to tell it to look for and run these comments. |
| 12:17:34 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 12:26:17 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 12:29:50 | → | annamalai joins (~yaaic@2409:4072:609c:96c7::1350:d8b1) |
| 12:30:11 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 12:30:17 | <SrPx> | Leary: how can I do that if the commands aren't static? for example if I want to run a file X.hvml, I'd do 'hvml run X.hvml'. that's not a static command I want to run every time I save a file |
| 12:30:52 | <SrPx> | unless you mean I should create a script to edit a comment in a Haskell file on HVM3 whenever I want to run an hvml file on VIM, which sounds hacky as hell |
| 12:33:46 | <Leary> | You can either manually edit the haskell file, or write your automation there. E.g. an IO action that pull the most recently modified .hvml file from a test directory and runs it. |
| 12:34:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 12:35:24 | <Leary> | Re the former option, it really shouldn't be something that disturbs your flow or substantially slows you down; I suspect you need a better (or better configured) WM. |
| 12:43:08 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 12:47:28 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 12:50:04 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:52:25 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 12:52:37 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 12:53:37 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 12:53:49 | → | plitter joins (~plitter@user/plitter) |
| 13:00:26 | <SrPx> | hmm I see |
| 13:00:31 | <SrPx> | okay thanks for the help |
| 13:00:47 | <SrPx> | not perfect but my workflow is muuch better now |
| 13:03:49 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 13:04:50 | <plitter> | Why am I getting so many errors with ghc-pkg -check? https://termbin.com/nb82 I'm on arch linux, and haven't really configured anything yet. I stumbled on these errors when trying to figure out how to build a small test program, and it failed until I added -dynamic to ghc. |
| 13:08:14 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 13:09:42 | → | simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) |
| 13:11:32 | × | dsrt^ quits (~dsrt@c-98-242-74-66.hsd1.ga.comcast.net) (Ping timeout: 252 seconds) |
| 13:13:53 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 13:14:28 | × | simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 252 seconds) |
| 13:15:37 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 13:18:52 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 13:21:51 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:26:37 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 13:27:17 | <Leary> | plitter: "I'm on arch linux" <-- You answered your own question. |
| 13:29:41 | <int-e> | The only thing the ghc distro package from Arch is useful for is to potentially bootstrap your own ghc that doesn't rug-pull your shared library with every update. But ghcup will be less hassle. |
| 13:30:55 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 13:30:55 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 13:32:05 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 13:35:17 | → | gmg joins (~user@user/gehmehgeh) |
| 13:35:53 | → | Nixkernal joins (~Nixkernal@90.74.198.178.dynamic.cust.swisscom.net) |
| 13:39:01 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 13:46:37 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:47:07 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 13:52:19 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 13:55:23 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 13:56:00 | → | rvalue joins (~rvalue@user/rvalue) |
| 13:57:28 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 13:59:00 | <SrPx> | how exactly can I have a cabal project that uses -O0 on cabal run and -O2 on cabal install? documentation is bad |
| 14:00:25 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 14:01:45 | × | fp quits (~Thunderbi@216-165-226-178.championbroadband.com) (Ping timeout: 252 seconds) |
| 14:03:50 | <int-e> | I suspect you can't do that because it's `cabal build` further down the line either way. You can pass --(dis|en)able-optimization as a command line flag though. |
| 14:07:03 | ← | JuanDaugherty parts (~juan@user/JuanDaugherty) () |
| 14:07:29 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:07:46 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 14:08:38 | <Leary> | SrPx: Your main `executable` stanza should have `ghc-options: -O2`, then separately you should have a `test-suite` stanza with `ghc-options: -O0`, which can presumably point to the same `Main.hs`. You then use `cabal test` instead of `cabal run`. |
| 14:09:15 | <SrPx> | ok thanks |
| 14:12:03 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 14:13:42 | <Leary> | You probably also need to remove any optimisation settings from cabal.project(.local); I suspect that overrides the .cabal file. |
| 14:14:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 14:15:50 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 14:18:45 | → | rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) |
| 14:19:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 14:26:17 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 14:28:23 | → | sprotte24 joins (~sprotte24@p200300d16f0bfe00711e65c2b30202f1.dip0.t-ipconnect.de) |
| 14:30:59 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 14:31:04 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 14:31:38 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 14:33:24 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 14:35:30 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 14:38:37 | → | euleritian joins (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) |
| 14:39:41 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
| 14:41:39 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 244 seconds) |
| 14:42:58 | × | euleritian quits (~euleritia@dynamic-176-007-157-163.176.7.pool.telefonica.de) (Ping timeout: 265 seconds) |
| 14:48:02 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 14:50:40 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 14:52:40 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 14:57:04 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
| 15:05:03 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 15:10:18 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 15:15:52 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 15:16:18 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:23:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 15:32:28 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 15:34:21 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 15:38:57 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 15:39:55 | → | alp joins (~alp@128-79-174-146.hfc.dyn.abo.bbox.fr) |
| 15:45:48 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:46:12 | → | __monty__ joins (~toonn@user/toonn) |
| 15:52:14 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 15:53:03 | <hellwolf> | hmm, so, record syntax wise, you can not define a field that does not have a function, while others have? |
| 15:54:18 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 15:55:21 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:56:32 | <__monty__> | You can selectively export field accessors from a module IIRC. |
| 15:56:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 15:57:08 | <__monty__> | But it doesn't actually make the field inaccessible so I'm not sure it's a good idea. |
| 15:58:21 | <hellwolf> | then there is a warning of that the function is not used. |
| 16:04:08 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:04:24 | <geekosaur> | it is best to treat traditional record syntax as a wart, and either work around it or switch to a newer one (labels, OverloadedRecordDot, lenses) |
| 16:04:25 | × | aerphanas quits (~aerphanas@user/aerphanas) (Quit: WeeChat 3.8) |
| 16:04:27 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 16:04:39 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 16:04:46 | <__monty__> | Seems like a case of an overeager warning. There's probably a way to disable a warning with a pragma? |
| 16:04:52 | <geekosaur> | I don't like OverloadedRecordDot much but it is at least a partial solution to records |
| 16:05:33 | <geekosaur> | sadly there's no way to disable it only for some things |
| 16:06:07 | <geekosaur> | nor a way IIRC to say "this is actually used"; ghc's way to say "not used" is prefix underscore, but that messes with other ways to use the selector |
| 16:06:15 | <geekosaur> | like I said, wart |
| 16:07:28 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 16:08:52 | <int-e> | hellwolf: hack hack hack: https://paste.tomsmeding.com/P0Xif3Ga |
| 16:09:47 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 16:12:01 | <hellwolf> | 12-28 18:08 <int-e> hellwolf: hack hack hack: https://paste.tomsmeding.com/P0Xif3Ga |
| 16:12:03 | <hellwolf> | :) |
| 16:12:35 | <haskellbridge> | <loonycyborg> I'm wondering why record syntax is made in such a way you can't use indentation with it |
| 16:12:44 | <haskellbridge> | <loonycyborg> were there any proposals to change that? |
| 16:13:07 | <haskellbridge> | <loonycyborg> I'm wondering why record syntax is made in such a way you can't use indentation with it to get rid of {} |
| 16:14:01 | → | simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) |
| 16:14:11 | <hellwolf> | labels, lenses, OverloadedRecordDot seems its own paradigm. |
| 16:14:19 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 16:14:24 | × | simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Remote host closed the connection) |
| 16:15:09 | <hellwolf> | but I probably should just export all fields. |
| 16:15:57 | <hellwolf> | asking for partially "anonymous" fields seems a stretch. Considering that in most languages, you don't have such a thing. |
| 16:16:07 | <hellwolf> | not sure how using "labels" would look like. |
| 16:16:11 | <hellwolf> | what is it? |
| 16:16:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 16:20:00 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
| 16:21:13 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 16:27:16 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 16:27:39 | <plitter> | I'm doing an advent of code https://adventofcode.com/2015/day/7 and thought I could use haskell to just input all the instructions but translated to haskell https://termbin.com/9u1q. But getting an error because of what I'm assuming is out of scope variable https://termbin.com/o4kn. I thought that haskell would wait with trying to input values until the end. And that I could just print the value I |
| 16:27:41 | <plitter> | was interested in at the end. Is there some compiler options that will let me do that? Or amI on the wrong track? |
| 16:28:57 | <int-e> | plitter: you'd want a single `let` block |
| 16:30:26 | <int-e> | plitter: but the error you're getting is because `if` is a keyword |
| 16:31:14 | <int-e> | (and there are more keywords to find) |
| 16:31:27 | <enikar> | maybe don't do all the stuff in main will help |
| 16:32:15 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 16:32:50 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 16:33:11 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 16:34:04 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Quit: WeeChat 4.4.2) |
| 16:35:16 | <plitter> | ok, I'll try to find the other keywords, fixing the amount of let and maybe outside of main :) thanks for the suggestions! |
| 16:36:34 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 16:52:49 | <monochrom> | loonycyborg: I have a hunch that the real cause is that indentation desugars to {foo ; bar; } but record syntax wants {foo , bar}, i.e., the {} part is fine, the issue is with ; vs , and also extra ; |
| 17:00:30 | <monochrom> | I like record syntax, it is not a wart, and it is pretty much compatible with e.g. SML record syntax. The wart is in the semantics --- lacking actual record semantics. |
| 17:01:40 | <monochrom> | (or actual record type system --- but I sneakily classify that as static semantics, therefore still covered haha) |
| 17:05:46 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:10:31 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 17:12:31 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 17:12:35 | <plitter> | Thanks everyone! AoC solved! |
| 17:13:26 | <monochrom> | Hot take: You don't even need overloaded record dot, you can just write "myrecord & myfield". |
| 17:15:05 | <enikar> | plitter: to solve I'd probably use a Map. The key will be variable name, and the value just the value of this variable ;) |
| 17:17:02 | <enikar> | remain to solve the dependency graph |
| 17:17:37 | <monochrom> | If you use Data.Map.Lazy, lazy evaluation will figure out the dependency for you. >:) |
| 17:17:37 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) |
| 17:17:53 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:18:49 | <monochrom> | i.e., it is OK to have resolvable self reference such as: m = Map.fromList [(1, "a"), (2, (m!1) ++ "b"] |
| 17:19:21 | × | Xe quits (~Xe@perl/impostor/xe) (Quit: ZNC 1.9.1 - https://znc.in) |
| 17:19:43 | <monochrom> | Similarly, you can let Haskell do dynamic programming for you by using a lazy array/vector! |
| 17:20:55 | → | Xe joins (~Xe@perl/impostor/xe) |
| 17:22:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 17:22:49 | <enikar> | monochrom: nice, it's a good idea. I just wondered if i could let haskell do the job with lazy evaluation and recursive definition :) |
| 17:23:45 | <enikar> | laziness is sometimes very usefull |
| 17:26:18 | <plitter> | To be fair, it is not just laziness. (at least for me who is not yet used to haskell) More like working hard to hardly work! Investment in the future :P |
| 17:30:43 | <plitter> | monochrom: I thought this already was lazy https://termbin.com/sz27 :) |
| 17:31:07 | <enikar> | I'm just lazier than haskell. Where haskell says ok, I'll do it later and ends up evaluating everything to print results, I say ok, I'll print the result maybe another day and take a rest :D |
| 17:34:34 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:39:11 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 17:39:11 | × | ubert quits (~Thunderbi@p200300ecdf117c91b816f4b90c54fbf2.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 17:39:29 | → | Everything joins (~Everythin@195.138.86.118) |
| 17:40:12 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 17:40:18 | × | Xe quits (~Xe@perl/impostor/xe) (Quit: ZNC 1.9.1 - https://znc.in) |
| 17:40:57 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 17:42:53 | × | rekahsoft quits (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) (Ping timeout: 245 seconds) |
| 17:49:24 | × | tabemann__ quits (~tabemann@2600:1700:7990:24e0:12b1:e4e1:19de:88e5) (Remote host closed the connection) |
| 17:49:28 | → | Xe joins (~Xe@perl/impostor/xe) |
| 17:51:19 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 17:52:06 | × | GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Quit: WeeChat 4.4.2) |
| 17:52:36 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:55:51 | → | tabemann__ joins (~tabemann@2600:1700:7990:24e0:ada6:84a7:3e7e:966c) |
| 17:55:52 | → | prsteele joins (~prsteele@pool-173-48-172-223.bstnma.fios.verizon.net) |
| 17:57:00 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:57:08 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds) |
| 17:58:48 | <prsteele> | I'm trying to figure out if there's a reasonable way to annotate locally-bound functions in the ST monad. Examples at https://paste.tomsmeding.com/cjXBqns9 |
| 18:00:40 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 272 seconds) |
| 18:01:26 | × | tabemann__ quits (~tabemann@2600:1700:7990:24e0:ada6:84a7:3e7e:966c) (Remote host closed the connection) |
| 18:02:21 | → | tabemann__ joins (~tabemann@2600:1700:7990:24e0:ada6:84a7:3e7e:966c) |
| 18:04:49 | <tokie> | is there a good option for haskell on the ipad? |
| 18:05:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:05:44 | × | kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux) |
| 18:06:17 | → | fp joins (~Thunderbi@216-165-226-178.championbroadband.com) |
| 18:06:42 | × | Natch quits (~natch@c-92-34-7-158.bbcust.telenor.se) (Remote host closed the connection) |
| 18:09:10 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 18:10:49 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:12:15 | → | kimiamania joins (~65804703@user/kimiamania) |
| 18:12:26 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 18:14:41 | × | fp quits (~Thunderbi@216-165-226-178.championbroadband.com) (Ping timeout: 248 seconds) |
| 18:15:02 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 18:16:43 | <haskellbridge> | <hellwolf> play.haskell.org |
| 18:17:20 | <geekosaur> | I thought someone had an iOS port somewhere, but yeh, play.haskell.org or godbolt.org would be easiest |
| 18:18:30 | <monochrom> | plitter: Yes if you use "let" it's already lazy. |
| 18:20:24 | <monochrom> | prsteele: That one is extremely difficult to hand-annotate. Long story. If possible, just don't bother. |
| 18:25:46 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 18:26:11 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 18:27:07 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:27:13 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 18:27:14 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit) |
| 18:29:07 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 18:29:46 | → | pavonia joins (~user@user/siracusa) |
| 18:31:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 18:33:25 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 18:35:13 | → | Natch joins (~natch@c-92-34-7-158.bbcust.telenor.se) |
| 18:35:36 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:40:21 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 18:40:40 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 18:44:46 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 18:51:40 | <tokie> | yeah, i was hoping for an offline copy but i guess play is the best bet |
| 18:51:59 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 272 seconds) |
| 18:52:11 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:56:43 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 18:59:08 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 18:59:10 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 19:01:26 | ljdarj1 | is now known as ljdarj |
| 19:01:42 | × | Everything quits (~Everythin@195.138.86.118) (Ping timeout: 252 seconds) |
| 19:02:01 | <prsteele> | Thanks monochrom |
| 19:08:50 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:09:54 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 19:10:24 | × | acidjnk_new3 quits (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 19:11:56 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 19:15:37 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 19:23:00 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:25:24 | × | tabemann__ quits (~tabemann@2600:1700:7990:24e0:ada6:84a7:3e7e:966c) (Ping timeout: 245 seconds) |
| 19:27:25 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Remote host closed the connection) |
| 19:28:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:29:56 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 19:30:34 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Client Quit) |
| 19:31:31 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 19:31:53 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:439f:78fd:a524:27e2) |
| 19:32:54 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 19:33:41 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 19:37:11 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 244 seconds) |
| 19:45:54 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 19:46:40 | × | prsteele quits (~prsteele@pool-173-48-172-223.bstnma.fios.verizon.net) (Ping timeout: 240 seconds) |
| 19:46:43 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:48:46 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
| 19:48:46 | ljdarj1 | is now known as ljdarj |
| 19:51:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 19:52:23 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 19:52:42 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 19:55:42 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 276 seconds) |
| 20:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:38 | → | caconym joins (~caconym@user/caconym) |
| 20:02:31 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 20:04:43 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:06:43 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 20:09:03 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 20:20:26 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:24:43 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 20:35:51 | <hellwolf> | I asked this before.. I am gonna ask again... what's the best way of testing a piece of code *cannot* be compiled due to type error. |
| 20:36:07 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:37:30 | <haskellbridge> | <loonycyborg> testing in what way? |
| 20:37:50 | <haskellbridge> | <loonycyborg> in unit tests? |
| 20:38:09 | <hellwolf> | I am not sure. Regular test framework doesn't seem to cut it |
| 20:38:19 | <hellwolf> | unless there is some neat/smart trick that I am not aware of |
| 20:38:37 | <haskellbridge> | <loonycyborg> maybe turn it into AST with some parser |
| 20:40:11 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:40:24 | <geekosaur> | mm, without some kind of compilation testing framework I don't think this can be done generally |
| 20:41:12 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 20:41:17 | <geekosaur> | quick and dirty is to shell out to a compiler and see if the `waitForProcess` at the end throws an exception, but you then need to arrange for the test program to use your code (maybe `CPP` and a `#include`) |
| 20:43:33 | <hellwolf> | https://paste.tomsmeding.com/0cTPAGam <-- this is the example. Unless I can swap out the "Assert" for a different implementation during testing, I don't think I can "test" it per se. Is that some sort of advanced module feature that I sometimes hear of? I guess if I really try, I could use cabal mixins to force that. |
| 20:44:45 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 20:44:52 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Ping timeout: 244 seconds) |
| 20:45:06 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 20:45:51 | <geekosaur> | compiling that would use whatever `Assert` is in scope, no? it's not like it's a wired-in that requires `NoImplicitPrelude` or `RebindableSyntax` |
| 20:45:55 | → | acidjnk_new3 joins (~acidjnk@p200300d6e7283f42bc4ebb891d7561a4.dip0.t-ipconnect.de) |
| 20:47:36 | <hellwolf> | you are right, the package is compiled with the Assert from base, testing package cannot change that |
| 20:47:45 | <geekosaur> | the real question there is, what possible replacement would let that avoid your test suite itself failing to compile? it's kinda a `undefined`-like situation (type level bottom), isn't it? |
| 20:48:15 | <geekosaur> | um? just don't import that one, import a different one |
| 20:49:06 | <geekosaur> | may have to play with the import list for the providing module (is it still in the same module as TypeError or am I misremembering that?) |
| 20:49:08 | <hellwolf> | the magic constraint like HasCallStack, or Typeable which you can have some runtime information? |
| 20:49:29 | <hellwolf> | (for testing in runtime) |
| 20:50:05 | <hellwolf> | say, GHCWillAssert :: Constraint) |
| 20:50:36 | <geekosaur> | actually I think the wizard mode trick is not to replace `Assert`, but `TypeError` |
| 20:50:55 | <geekosaur> | sadly I think that's also the harder one |
| 20:51:05 | <geekosaur> | `Assert` itself is just a type family |
| 20:51:48 | <geekosaur> | https://hackage.haskell.org/package/ghc-internal-9.1201.0/docs/src/GHC.Internal.TypeError.html#Assert no magic at all |
| 20:51:49 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 20:52:51 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:53:14 | <geekosaur> | but there's no reason you couldn't have it not import the standard Assert and write your own, it's a very simple closed type family as you can see from the link |
| 20:55:25 | <geekosaur> | like, define your own constraint WouldAssert and have your Assert include that context in place of errMsg, then use IfCxt to check for it afterward? |
| 20:59:29 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 21:01:40 | <hellwolf> | wait, how can I programatically change the Assertion behavior? |
| 21:01:49 | <hellwolf> | when I use my own. |
| 21:02:42 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 21:03:51 | <hellwolf> | https://paste.tomsmeding.com/IEBO6dOs |
| 21:04:13 | <hellwolf> | this is my poor man's version of testing: commenting-out-method |
| 21:04:48 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 21:05:14 | <hellwolf> | since the code doesn't change often, I can live with it by testing only once... |
| 21:07:18 | <geekosaur> | like I said, don't import (`import … hiding (Assert)`) and write your own |
| 21:08:12 | <geekosaur> | although I am assuming you are including thos code into a separate test framework; if this is in a library, you're dead before you start because the library component will fail to compile |
| 21:12:00 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:13:39 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 21:16:23 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 21:16:37 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 21:25:33 | → | Everything joins (~Everythin@195.138.86.118) |
| 21:27:37 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:28:13 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:28:16 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 244 seconds) |
| 21:28:35 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 21:33:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 21:33:35 | <haskellbridge> | <hellwolf> probably the good old CPP can help?! |
| 21:34:19 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 21:39:37 | → | Digitteknohippie joins (~user@user/digit) |
| 21:40:05 | × | Digit quits (~user@user/digit) (Ping timeout: 248 seconds) |
| 21:41:11 | <hellwolf> | even if I did that, not sure what kind constraint injected could be utilized for testing purpose. |
| 21:41:22 | <hellwolf> | anyways, I think I will give up again on this inquiry, for now. |
| 21:42:50 | Digitteknohippie | is now known as Digit |
| 21:42:52 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:44:36 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:49:16 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 21:51:30 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 22:01:14 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:05:36 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
| 22:06:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 22:06:38 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 22:11:52 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:17:53 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:18:39 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 22:18:52 | × | Xe quits (~Xe@perl/impostor/xe) (Quit: ZNC 1.9.1 - https://znc.in) |
| 22:21:19 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 22:22:36 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 22:27:44 | → | Xe joins (~Xe@perl/impostor/xe) |
| 22:33:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:35:08 | × | euleritian quits (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) (Ping timeout: 244 seconds) |
| 22:39:01 | <haskellbridge> | <thirdofmay18081814goya> anyone got examples of "pass" or "listen" with the Writer monadf/ |
| 22:39:31 | × | Xe quits (~Xe@perl/impostor/xe) (Quit: ZNC 1.9.1 - https://znc.in) |
| 22:40:05 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 22:41:26 | <haskellbridge> | <thirdofmay18081814goya> "listen" should just be understood as a function to add to the current log the logs from some other Writer monad right? |
| 22:42:10 | <haskellbridge> | <thirdofmay18081814goya> in fact "listen" should give us an analog to the "State" monad right? |
| 22:42:32 | <geekosaur> | the second is correct, the first sounds a little weird |
| 22:42:54 | <geekosaur> | it means to run an action in Writer and accumulate the logs from it |
| 22:43:01 | <haskellbridge> | <thirdofmay18081814goya> geekosaur: uh sorry which one is correct, that "listen" gives us an analog to the "State" monad? |
| 22:43:10 | <geekosaur> | roughly, yes |
| 22:43:19 | <haskellbridge> | <thirdofmay18081814goya> right ok I see |
| 22:43:22 | <geekosaur> | the paper linked at the top of the haddock is probably a good reference |
| 22:43:47 | <geekosaur> | even if it's about the mtl1 Writer |
| 22:43:49 | <haskellbridge> | <thirdofmay18081814goya> I'll give it a read ty |
| 22:47:26 | → | prasad joins (~Thunderbi@c-73-75-25-251.hsd1.in.comcast.net) |
| 22:49:04 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:52:16 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:54:22 | <hololeap> | I have this: UpdaterLoop m = m () -> m () |
| 22:54:29 | <hololeap> | runLoop :: UpdaterLoop m -> m () |
| 22:54:33 | <hololeap> | runLoop loop = loop (updateAndContinue loop) |
| 22:55:27 | <hololeap> | am I reinventing ContT or is this something else? |
| 22:56:16 | → | housemate joins (~housemate@pa49-185-30-217.pa.vic.optusnet.com.au) |
| 22:56:53 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 22:56:53 | <geekosaur> | I want to say you've reinvented CPS, rather than ContT as such |
| 22:57:52 | <hololeap> | ok, because I didn't see any connection to resetT and shiftT, but I wasn't sure |
| 23:05:02 | → | cowboy8625 joins (~cowboy@2605-4A80-7405-640-B51A-FA7D-9084-E360-dynamic.midco.net) |
| 23:09:06 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:10:10 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:11:07 | → | Xe joins (~Xe@perl/impostor/xe) |
| 23:12:54 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 260 seconds) |
| 23:13:40 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 23:23:44 | <haskellbridge> | <thirdofmay18081814goya> hm, anyone has some insight about why the indexed monad's "bind" has that type? |
| 23:24:35 | <haskellbridge> | <thirdofmay18081814goya> "(a -> m j k b) -> m i j a -> m i k b", the two last types makes sense, but the first type "(a -> m j k b)" I'm not too sure about |
| 23:25:44 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:26:13 | × | housemate quits (~housemate@pa49-185-30-217.pa.vic.optusnet.com.au) (Ping timeout: 248 seconds) |
| 23:26:21 | <haskellbridge> | <thirdofmay18081814goya> I'm reading "m i j a" as, the monad indexed by "i", such that "j" depends on "i" |
| 23:26:37 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:30:17 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 23:30:30 | <geekosaur> | looks like a straightforward generalization of (a -> m b) -> m a -> m b, with an assumption that the action produces both a new value type and a new index type to go with it, and the result type encodes the initial and final index types while discarding the intermediate one (j) because it becomes k when the action is run |
| 23:32:01 | <geekosaur> | the initial state encodes i->j, then the action gives you j->k, meaning the result is i->k |
| 23:32:41 | <haskellbridge> | <thirdofmay18081814goya> hm I'll think about the idea of discarding the intermediate index type, ty |
| 23:33:10 | <haskellbridge> | <thirdofmay18081814goya> right ok |
| 23:33:13 | <haskellbridge> | <thirdofmay18081814goya> that makes more sense, ok ty |
| 23:33:21 | <geekosaur> | there isn't much to think about, any more than it's worth thinking about 2+3+4 giving you an intermediate 5 |
| 23:33:42 | → | euleritian joins (~euleritia@dynamic-176-006-135-074.176.6.pool.telefonica.de) |
| 23:35:40 | <geekosaur> | AIUI the whole point is that the indexed monad tracks an initial and a final index. individual actions within it produce new "final" indexes which aren't the final index of the entire computation because the next action maps from the first "final" index to a new one |
| 23:39:35 | <haskellbridge> | <thirdofmay18081814goya> ok right, I wasn't quite getting that in "m i j a", both "i" and "j" are indextypes |
| 23:43:50 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:45:37 | × | foul_owl quits (~kerry@193.42.0.124) (Ping timeout: 252 seconds) |
| 23:46:55 | <haskellbridge> | <thirdofmay18081814goya> they are from the same indexing type* |
| 23:47:36 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 23:47:51 | <haskellbridge> | <thirdofmay18081814goya> was reading that wrong |
| 23:48:26 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:52:35 | <haskellbridge> | <thirdofmay18081814goya> next question is... why two indexes? |
| 23:53:11 | <haskellbridge> | <thirdofmay18081814goya> the usage of one index is understandable, e.g. the type of lists with a given length |
| 23:54:10 | <haskellbridge> | <thirdofmay18081814goya> hm but maybe you'll two indexes if you're mapping from lists of length n to lists of length m? |
| 23:54:22 | <haskellbridge> | <thirdofmay18081814goya> you'll want two indexed* |
| 23:55:18 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:56:00 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 23:59:55 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:59:55 | <geekosaur> | think a and b having different Ord instances |
All times are in UTC on 2024-12-28.