summaryrefslogtreecommitdiffstats
path: root/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt
blob: 7f4c42b676ed323661f7c93203c56b938d2280f0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
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.