WEBVTT 00:01.000 --> 00:01.840 Okay, excellent. 00:01.840 --> 00:04.000 I think we are live on stream. 00:05.320 --> 00:06.360 Yuchen is here with us. 00:06.360 --> 00:08.560 Thanks for the great talk, Yuchen. 00:08.560 --> 00:11.840 For the questions, people are welcome to post them on IRC 00:11.840 --> 00:12.680 or on the pad. 00:13.560 --> 00:17.000 And we will also open this big blue button room up 00:17.000 --> 00:19.560 in a few minutes if people want to join here 00:19.560 --> 00:22.680 and ask Yuchen the questions directly. 00:22.680 --> 00:30.680 So yeah, thanks again and take it away. 00:30.680 --> 00:53.680 Yeah, thanks. 01:00.680 --> 01:29.680 Okay. 01:29.680 --> 01:33.000 Well, I guess while we wait for some other audience questions 01:33.000 --> 01:36.200 to start trickling in, I wonder, 01:37.280 --> 01:39.800 not having yet watched your talk, obviously, 01:39.800 --> 01:42.120 because it's been behind the scenes, 01:42.120 --> 01:44.320 I wonder if your system works 01:44.320 --> 01:46.040 with offline documentation as well, 01:46.040 --> 01:49.200 because I remember seeing earlier 01:49.200 --> 01:52.520 some other Haskell-related workflows 01:52.520 --> 01:56.000 where people would have downloaded the entirety 01:56.000 --> 02:00.280 of the Hackage documentations 02:00.280 --> 02:03.280 and yeah, be able to browse them locally when offline. 02:06.120 --> 02:06.960 Yeah, for sure. 02:06.960 --> 02:17.960 I mean, that's one of the points of writing these packages. 02:17.960 --> 02:26.520 So the Hadock org documentation is meant for generation 02:26.520 --> 02:30.120 of org files of these Haskell packages 02:30.120 --> 02:33.160 so that you can have them locally on your computer 02:33.160 --> 02:35.240 rather than having to rely on Hackage, 02:36.400 --> 02:40.440 which is online, which is on the web. 02:40.440 --> 02:48.720 The other one, HCL, the code explorer, it's self-hosted. 02:48.720 --> 02:54.920 So all you need to do is to download the packages 02:54.920 --> 02:58.840 you want to index and then index them on the server 02:58.840 --> 03:02.120 or on the local host and then, yeah, 03:02.120 --> 03:05.520 then you can unplug your Ethernet cable 03:05.520 --> 03:10.880 and explore Haskell code on your computer. 03:10.880 --> 03:35.880 Nice, thanks, that makes sense. 03:41.880 --> 03:45.640 Maybe another question while we wait for other questions 03:45.640 --> 03:48.800 from the audience and again, not having had a chance 03:48.800 --> 03:50.720 to watch your talk yet. 03:50.720 --> 03:53.280 What do you think is the state of, I guess, 03:53.280 --> 03:56.760 integration of Haskell, both, I guess, 03:56.760 --> 04:01.080 the language, the packages, the tooling, all that stuff, 04:01.080 --> 04:05.160 integration with Emacs today in like 2022? 04:05.160 --> 04:07.480 Because I'm also, I do have a Haskell background, 04:07.480 --> 04:10.120 but I haven't done much of it in a few years. 04:10.120 --> 04:13.200 And back when I do remember some pain points, 04:13.200 --> 04:16.360 including when trying to integrate it into Emacs. 04:16.360 --> 04:19.520 So I do wonder what the general state of things 04:19.520 --> 04:25.040 are, if you could maybe answer quickly, I guess. 04:25.040 --> 04:26.520 Not in great detail necessarily. 04:29.640 --> 04:33.480 OK, yeah, I mean, I haven't tried all the packages, 04:33.480 --> 04:34.880 Haskell-related packages. 04:34.880 --> 04:40.680 And I think the most prominent ones are Haskell mode 04:40.680 --> 04:45.080 and Haskell language servers through language server 04:45.080 --> 04:49.880 packages like eglots or LSP mode. 04:49.880 --> 04:56.280 Yeah, I mean, Haskell mode is like, 04:56.280 --> 05:03.160 it feels to me like a standard language mode where 05:03.160 --> 05:09.280 it offers font locking, syntax highlighting, I mean, 05:09.280 --> 05:18.520 and REPL, like Python mode, and limited documentation 05:18.520 --> 05:25.400 and cross-references, which is, I mean, as I mentioned, 05:25.400 --> 05:30.360 that's why I did this HCL package. 05:30.360 --> 05:38.280 And the language server is like, it is also pretty standard 05:38.280 --> 05:42.440 and offering all the language server things, most of them, 05:42.440 --> 05:43.200 I think. 05:43.200 --> 05:46.320 But it's very slow. 05:46.320 --> 05:49.520 It's slower than any other language server I've used. 05:49.520 --> 05:55.440 And yeah, and it doesn't really work 05:55.440 --> 06:03.360 with cross-reference, which I also mentioned in the talk. 06:03.360 --> 06:11.120 So yeah, that's the two main packages 06:11.120 --> 06:12.720 I think people use most. 06:12.720 --> 06:23.520 And yeah, I can't think of anything else that's very 06:23.520 --> 06:24.600 prominent. 06:28.280 --> 06:29.120 Great, thanks. 06:33.040 --> 06:34.400 Oh, OK, I just remembered. 06:34.400 --> 06:39.200 There's also the Haskell TNG package. 06:39.200 --> 06:41.120 But I haven't looked into it yet. 06:41.120 --> 06:47.960 It's, if I remember correctly, it's like in the GNU ELP, 06:47.960 --> 06:50.080 is it in GNU ELP or non-GNU? 06:50.080 --> 06:50.840 Let me have a look. 06:58.280 --> 07:00.200 Right, it's also in non-GNU. 07:00.200 --> 07:02.680 Never mind. 07:02.680 --> 07:07.200 Yeah, I think it's a new, up-and-coming Haskell media 07:07.200 --> 07:10.480 mode, an experimental rewrite of Haskell mode. 07:10.480 --> 07:12.040 That's the description. 07:19.080 --> 07:21.800 Cool, and have you had a chance to maybe play around 07:21.800 --> 07:24.640 with that a little bit and see how 07:24.640 --> 07:27.440 it compares with the traditional, the older, 07:27.440 --> 07:28.520 the existing Haskell mode? 07:32.960 --> 07:34.120 No, I haven't yet. 07:34.120 --> 07:35.680 OK. 08:05.000 --> 08:07.160 Yeah, I can't think of anything else that's very prominent. 08:07.160 --> 08:09.160 I haven't looked into it yet. 08:09.160 --> 08:12.120 It's, if I remember correctly, it's like in the GNU ELP. 08:12.120 --> 08:15.440 Yeah, I think it's a new, up-and-coming Haskell 08:15.440 --> 08:19.400 media mode, an experimental rewrite of Haskell mode. 08:19.400 --> 08:20.280 That's the description. 08:20.280 --> 08:22.520 I haven't yet, I haven't looked into it, 08:22.520 --> 08:25.480 and I think it's a new, up-and-coming Haskell 08:25.480 --> 08:28.920 media mode, an experimental rewrite of Haskell mode. 08:28.920 --> 08:31.680 Yeah, I haven't yet, I haven't looked into it, 08:31.680 --> 08:33.740 you 09:01.680 --> 09:17.280 One question that just occurred to me, I guess, about the state of like literate Haskell and 09:17.280 --> 09:22.960 potential integration with org mode. I've actually never, I haven't put too much thought into this, 09:22.960 --> 09:28.000 but it just occurred to me that Haskell, as you likely know, already has a literate Haskell mode 09:28.000 --> 09:36.000 with like.LHS files. And I was wondering, I guess, if you've tried maintaining or writing 09:36.000 --> 09:41.200 any projects in literate Haskell, at least not, if not entirely, then with a considerable amount 09:41.200 --> 09:50.400 of source code in that approach and how it might compare, for example, to something like Babel, 09:50.400 --> 09:58.160 I guess, which is very much more documentation oriented with like code blocks intermingled. 10:01.280 --> 10:10.880 Okay. Yeah, I'm afraid I haven't really used the literate Haskell. I heard of it. And if I want 10:11.600 --> 10:17.680 to like write literate programming, I would, I mean, I would go for org mode and org Babel, 10:17.680 --> 10:24.720 indeed, first before, yeah, before the more language specific mode. 10:28.240 --> 10:34.080 Right. That makes sense. I just thought it's interesting because Haskell is, I guess, 10:34.080 --> 10:39.200 one of the fewer languages where it actually does have its own literate mode, if you will, 10:39.200 --> 10:43.600 and yeah, there might be something interesting there to think about or try exploring at some 10:43.600 --> 10:55.040 point. Yeah, yeah, definitely. Yeah. Yeah, I will look into it. 10:55.040 --> 11:10.960 Poo. 11:25.040 --> 11:53.740 Yeah, so I'm reading about this Haskell TNG mode. 11:53.740 --> 11:57.400 It looks like it can also jump to definition 11:57.400 --> 12:03.440 outside of the project using a thing uses 12:03.440 --> 12:09.560 a tool called HS Inspect, which is also 12:09.560 --> 12:15.000 a tool using the GHC API. 12:15.000 --> 12:17.480 Yeah, not sure how it is achieved, though. 12:17.480 --> 12:21.520 Bren. 12:48.480 --> 12:51.360 I think I have a question on IRC. 12:51.360 --> 12:53.320 Is the indexing faster? 12:53.320 --> 12:55.400 And when re-indexing, would it be too slow 12:55.400 --> 12:56.480 to re-index on demand? 13:01.560 --> 13:05.120 Sorry, what's the question again? 13:05.120 --> 13:09.240 The question is, is the indexing faster when re-indexing? 13:09.240 --> 13:11.560 Would it be too slow to re-index on demand? 13:11.560 --> 13:14.960 I think this might be for the other talk stream. 13:14.960 --> 13:15.920 I'm not entirely sure. 13:15.920 --> 13:21.640 So yeah, I mean, it sounds relevant to this talk, though. 13:21.640 --> 13:23.600 Oh, OK, then, yeah, OK, sorry. 13:23.600 --> 13:26.600 I'm a little scatterbrained. 13:26.600 --> 13:28.320 No, it's OK. 13:28.320 --> 13:36.760 Oh, yeah, yeah, re-indexing, I mean, I don't know, actually, 13:36.760 --> 13:41.680 because I haven't started implementing 13:41.680 --> 13:44.400 on-demand re-indexing yet. 13:44.400 --> 13:49.320 And I'm still a bit hazy about whether it strictly 13:49.320 --> 13:53.520 requires recompiling when re-indexing. 13:53.520 --> 14:03.440 And I mean, but I do think it's like the main workhorse 14:03.440 --> 14:09.400 of this process would be the GHC API compiling process, 14:09.400 --> 14:15.760 whether it can avoid recompilation efficiency. 14:15.760 --> 14:23.680 When, yeah, and I think it can. 14:23.680 --> 14:28.720 It has some optimization with recompilation. 14:28.720 --> 14:35.480 And also, ideally, you should start 14:35.480 --> 14:39.800 using a bit less heavy compilation, 14:39.800 --> 14:45.640 like this HIE,.hie files, instead of compiling 14:45.640 --> 14:49.280 the whole thing, instead of requiring 14:49.280 --> 14:55.120 the compilation of the whole project from using 14:55.120 --> 14:56.000 the whole pipeline. 14:56.000 --> 15:01.760 So HIE, I think, is more or less the only front-end part. 15:01.760 --> 15:05.800 Yeah, and if, I mean, that's one of the things, 15:05.800 --> 15:10.520 like, main to-dos for this project, for the HCL project, 15:10.520 --> 15:16.920 to replace the cabal helper with using.hie 15:16.920 --> 15:18.920 that I haven't looked into yet. 15:22.920 --> 15:23.440 Awesome. 15:26.480 --> 15:29.000 Yeah, sounds interesting and looking forward to it. 15:29.000 --> 15:32.240 I think we have about, like, less than a minute or so 15:32.240 --> 15:34.640 for the live Q&A. Of course, people 15:34.640 --> 15:37.520 are welcome to keep asking questions, 15:37.520 --> 15:40.240 whether on the pad or on IRC. 15:40.240 --> 15:43.520 And yeah, so after this, Q&A concludes. 15:43.520 --> 15:44.920 This is our last talk of today. 15:44.920 --> 15:49.080 So we would appreciate it if people would join us 15:49.080 --> 15:54.120 on the general stream for the closing remarks of today. 15:54.120 --> 15:55.720 And yeah, we'll still have tomorrow 15:55.720 --> 15:57.440 to look forward to the next one. 15:57.440 --> 15:59.640 We'll still have tomorrow to look forward to, of course. 15:59.640 --> 16:01.160 OK. 16:25.960 --> 16:28.040 I see that EmacsConf just left. 16:28.040 --> 16:30.400 Does that mean the Q&A is over? 16:30.400 --> 16:31.680 Yep, I believe so. 16:31.680 --> 16:35.760 So I think we should head on over to the GenStream. 16:35.760 --> 16:36.800 OK, cool. 16:36.800 --> 16:39.280 Yeah, I'll go there as well. 16:39.280 --> 16:41.400 All right, thanks a lot for your questions. 16:41.400 --> 16:43.480 Yep, and thank you, Yuchun, for your great talk. 16:43.480 --> 16:45.000 Thank you. 16:45.000 --> 16:46.440 Thanks, bye-bye. 16:46.440 --> 16:47.200 Bye. 16:47.200 --> 17:03.240 You are currently the only person in this conference.