| 2026-03-11 00:03:30 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-03-11 00:14:23 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 00:14:23 +0100 | Sgeo | (~Sgeo@user/sgeo) Sgeo |
| 2026-03-11 00:19:07 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 00:30:10 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 00:35:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 00:37:58 +0100 | Tuplanolla | (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi) Tuplanolla |
| 2026-03-11 00:45:57 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 00:49:05 +0100 | mmaruseacph2 | (~mihai@mihai.page) (Ping timeout: 265 seconds) |
| 2026-03-11 00:49:30 +0100 | prdak | (~Thunderbi@user/prdak) prdak |
| 2026-03-11 00:49:36 +0100 | mmaruseacph2 | (~mihai@mihai.page) mmaruseacph2 |
| 2026-03-11 00:51:00 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-03-11 00:51:46 +0100 | emmanuelux | (~em@user/emmanuelux) emmanuelux |
| 2026-03-11 00:53:01 +0100 | bionade24 | (~quassel@server2.oscloud.info) (Quit: Apocalypse Incoming!) |
| 2026-03-11 00:53:13 +0100 | bionade24 | (~quassel@server2.oscloud.info) bionade24 |
| 2026-03-11 00:54:09 +0100 | prdak | (~Thunderbi@user/prdak) (Ping timeout: 255 seconds) |
| 2026-03-11 01:17:18 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 01:19:59 +0100 | Square | (~Square4@user/square) Square |
| 2026-03-11 01:20:18 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 246 seconds) |
| 2026-03-11 01:22:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-03-11 01:22:23 +0100 | acidjnk_new | (~acidjnk@p200300d6e700e547f0589d3e513577e0.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 2026-03-11 01:32:43 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 01:37:48 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-03-11 01:48:29 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 01:55:14 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-03-11 01:59:49 +0100 | Googulator | (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-03-11 02:00:04 +0100 | Googulator | (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu) |
| 2026-03-11 02:02:19 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
| 2026-03-11 02:06:04 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 02:10:43 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 02:15:24 +0100 | czan | (~czan@user/mange) czan |
| 2026-03-11 02:21:51 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 02:26:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-03-11 02:28:21 +0100 | AlexNoo_ | (~AlexNoo@5.139.232.240) |
| 2026-03-11 02:29:50 +0100 | Alex_delenda_est | (~al_test@178.34.160.184) (Ping timeout: 244 seconds) |
| 2026-03-11 02:31:00 +0100 | AlexZenon | (~alzenon@178.34.160.184) (Ping timeout: 264 seconds) |
| 2026-03-11 02:32:12 +0100 | AlexNoo | (~AlexNoo@178.34.160.184) (Ping timeout: 264 seconds) |
| 2026-03-11 02:32:22 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
| 2026-03-11 02:33:06 +0100 | Tuplanolla | (~Tuplanoll@88-114-89-88.elisa-laajakaista.fi) (Ping timeout: 248 seconds) |
| 2026-03-11 02:33:23 +0100 | califax | (~califax@user/califx) califx |
| 2026-03-11 02:34:26 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-03-11 02:34:49 +0100 | AlexZenon | (~alzenon@5.139.232.240) |
| 2026-03-11 02:37:38 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 02:41:03 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-03-11 02:44:24 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-03-11 02:47:03 +0100 | img | (~img@user/img) (Quit: ZNC 1.10.1 - https://znc.in) |
| 2026-03-11 02:48:18 +0100 | img | (~img@user/img) img |
| 2026-03-11 02:55:40 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 03:00:54 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-03-11 03:02:49 +0100 | confusedalex_ | (~confuseda@user/confusedalex) confusedalex |
| 2026-03-11 03:03:14 +0100 | confusedalex | (~confuseda@user/confusedalex) (Ping timeout: 245 seconds) |
| 2026-03-11 03:03:14 +0100 | confusedalex_ | confusedalex |
| 2026-03-11 03:03:28 +0100 | czan` | (~czan@user/mange) czan |
| 2026-03-11 03:03:59 +0100 | czan | (~czan@user/mange) (Killed (NickServ (GHOST command used by czan`))) |
| 2026-03-11 03:04:05 +0100 | czan` | czan |
| 2026-03-11 03:04:59 +0100 | rekahsoft | (~rekahsoft@76.67.111.168) (Read error: Connection reset by peer) |
| 2026-03-11 03:07:06 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
| 2026-03-11 03:11:28 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 03:15:49 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 03:22:26 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-03-11 03:27:01 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 03:31:33 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-03-11 03:42:23 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 03:44:01 +0100 | pabs3 | Guest1123 |
| 2026-03-11 03:44:01 +0100 | Guest1123 | (~pabs3@user/pabs3) (Killed (uranium.libera.chat (Nickname regained by services))) |
| 2026-03-11 03:44:18 +0100 | pabs3 | (~pabs3@user/pabs3) pabs3 |
| 2026-03-11 03:44:24 +0100 | Googulator | (~Googulato@2a01-036d-0106-0119-01e8-0aed-2fac-7c8a.pool6.digikabel.hu) (Quit: Client closed) |
| 2026-03-11 03:46:59 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-03-11 03:55:30 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 255 seconds) |
| 2026-03-11 03:58:09 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 03:59:42 +0100 | stackdroid18 | (~stackdroi@user/stackdroid) () |
| 2026-03-11 04:02:24 +0100 | terrorjack | (~terrorjac@2a01:4f8:271:2d98::2) (Quit: The Lounge - https://thelounge.chat) |
| 2026-03-11 04:02:50 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 04:07:57 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 2026-03-11 04:08:19 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) ChaiTRex |
| 2026-03-11 04:10:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 04:11:18 +0100 | gabiruh | (~gabiruh@vps19177.publiccloud.com.br) (Quit: ZNC 1.7.5 - https://znc.in) |
| 2026-03-11 04:11:35 +0100 | gabiruh | (~gabiruh@vps19177.publiccloud.com.br) gabiruh |
| 2026-03-11 04:12:42 +0100 | rekahsoft | (~rekahsoft@76.67.111.168) rekahsoft |
| 2026-03-11 04:14:59 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 2026-03-11 04:22:28 +0100 | rekahsoft | (~rekahsoft@76.67.111.168) (Read error: Connection reset by peer) |
| 2026-03-11 04:25:33 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 04:32:17 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 2026-03-11 04:37:33 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1103w-grc-20-76-67-111-168.dsl.bell.ca) rekahsoft |
| 2026-03-11 04:37:44 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-03-11 04:41:12 +0100 | jmcantrell_ | (~weechat@user/jmcantrell) jmcantrell |
| 2026-03-11 04:43:36 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 04:46:45 +0100 | Square | (~Square4@user/square) (Ping timeout: 244 seconds) |
| 2026-03-11 04:47:00 +0100 | tusko | (~uwu@user/tusko) (Remote host closed the connection) |
| 2026-03-11 04:48:11 +0100 | machinedgod | (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 268 seconds) |
| 2026-03-11 04:48:36 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-03-11 04:52:17 +0100 | tusko | (~uwu@user/tusko) tusko |
| 2026-03-11 04:54:42 +0100 | rekahsoft | (~rekahsoft@bras-base-orllon1103w-grc-20-76-67-111-168.dsl.bell.ca) (Remote host closed the connection) |
| 2026-03-11 04:55:00 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 2026-03-11 04:59:22 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 05:00:15 +0100 | jmcantrell_ | (~weechat@user/jmcantrell) (Ping timeout: 272 seconds) |
| 2026-03-11 05:03:55 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-03-11 05:06:10 +0100 | pandeyan | (~pandeyan@192-184-248-122.fiber.dynamic.sonic.net) (Ping timeout: 248 seconds) |
| 2026-03-11 05:06:34 +0100 | terrorjack | (~terrorjac@2a01:4f8:271:2d98::2) terrorjack |
| 2026-03-11 05:12:46 +0100 | terrorjack | (~terrorjac@2a01:4f8:271:2d98::2) (Quit: The Lounge - https://thelounge.chat) |
| 2026-03-11 05:14:48 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 05:14:49 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 272 seconds) |
| 2026-03-11 05:16:04 +0100 | terrorjack | (~terrorjac@2a01:4f8:271:2d98::2) terrorjack |
| 2026-03-11 05:19:44 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-03-11 05:30:35 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 05:35:27 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-03-11 05:36:19 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 264 seconds) |
| 2026-03-11 05:51:27 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-03-11 05:58:03 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds) |
| 2026-03-11 06:00:50 +0100 | takuan | (~takuan@d8D86B9E9.access.telenet.be) |
| 2026-03-11 06:00:57 +0100 | arandombit | (~arandombi@2a02:2455:8656:7100:49ae:b06e:43ec:7652) |
| 2026-03-11 06:00:57 +0100 | arandombit | (~arandombi@2a02:2455:8656:7100:49ae:b06e:43ec:7652) (Changing host) |
| 2026-03-11 06:00:57 +0100 | arandombit | (~arandombi@user/arandombit) arandombit |
| 2026-03-11 06:02:10 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 06:05:28 +0100 | Gravifer | (~Gravifer@user/Gravifer) Gravifer |
| 2026-03-11 06:06:19 +0100 | arandombit | (~arandombi@user/arandombit) (Ping timeout: 244 seconds) |
| 2026-03-11 06:09:21 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-03-11 06:11:10 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 06:16:28 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 2026-03-11 06:26:41 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 06:31:31 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-03-11 06:33:10 +0100 | peterbecich | (~Thunderbi@71.84.33.135) peterbecich |
| 2026-03-11 06:36:05 +0100 | anpad | (~pandeyan@user/anpad) anpad |
| 2026-03-11 06:37:34 +0100 | michalz | (~michalz@185.246.207.221) |
| 2026-03-11 06:39:28 +0100 | Gravifer | (~Gravifer@user/Gravifer) (Ping timeout: 240 seconds) |
| 2026-03-11 06:42:09 +0100 | divlamir | (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 2026-03-11 06:42:25 +0100 | divlamir | (~divlamir@user/divlamir) divlamir |
| 2026-03-11 06:44:36 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 06:47:38 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-03-11 06:49:06 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-03-11 06:51:46 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 248 seconds) |
| 2026-03-11 06:59:54 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 07:05:12 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 2026-03-11 07:06:51 +0100 | arandombit | (~arandombi@2a02:2455:8656:7100:cd70:20e7:538d:131c) |
| 2026-03-11 07:06:51 +0100 | arandombit | (~arandombi@2a02:2455:8656:7100:cd70:20e7:538d:131c) (Changing host) |
| 2026-03-11 07:06:51 +0100 | arandombit | (~arandombi@user/arandombit) arandombit |
| 2026-03-11 07:12:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 07:16:00 +0100 | jreicher | (~joelr@user/jreicher) (Quit: brb) |
| 2026-03-11 07:16:25 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-03-11 07:26:24 +0100 | peterbecich | (~Thunderbi@71.84.33.135) (Ping timeout: 246 seconds) |
| 2026-03-11 07:26:43 +0100 | jreicher | (~joelr@user/jreicher) jreicher |
| 2026-03-11 07:27:30 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 07:32:50 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 2026-03-11 07:42:47 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-03-11 07:43:16 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 07:47:15 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) (Ping timeout: 255 seconds) |
| 2026-03-11 07:48:12 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 2026-03-11 07:53:45 +0100 | chromoblob | (~chromoblo@user/chromob1ot1c) chromoblob\0 |
| 2026-03-11 07:59:04 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 08:03:46 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-03-11 08:10:21 +0100 | <gentauro> | Can `BangPatterns` be used in do-notation? Like: `do foo! <- readFile "bar.txt"`. |
| 2026-03-11 08:10:44 +0100 | <gentauro> | ups |
| 2026-03-11 08:10:57 +0100 | <gentauro> | should be `do !foo <- readFile "bar.txt"` |
| 2026-03-11 08:10:59 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 2026-03-11 08:13:08 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 08:15:17 +0100 | gentauro | I mean it compiles. I just want to be use that the `bang` forces the `readFile` to go from lazy to strict |
| 2026-03-11 08:15:49 +0100 | <[exa]> | gentauro: I'd suspect it only forces the first cons of the list |
| 2026-03-11 08:16:16 +0100 | <[exa]> | there's some strict variant of readFile for this use |
| 2026-03-11 08:16:24 +0100 | <[exa]> | (or use deepseq) |
| 2026-03-11 08:18:38 +0100 | <mesaoptimizer> | What is the current set of recommended beginner's books to learn Haskell (that enables understanding of the following concepts: Functor, Applicatives, Monads, record syntax)? I find my lack of fluency with the following things to be getting in the way of growing the small set of personal applications I use that are written in Haskell |
| 2026-03-11 08:19:28 +0100 | <opqdonut> | mesaoptimizer: I'm not sure what the community at large is recommending, but students have been giving good feedbakc on my open online course haskell.mooc.fi |
| 2026-03-11 08:20:06 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds) |
| 2026-03-11 08:21:37 +0100 | <mesaoptimizer> | that's quite an interesting syllabus sequence, I might attempt that MOOC, and if I do, I'll give you feedback too :) |
| 2026-03-11 08:21:38 +0100 | <ski> | iirc "Haskell: The Craft of Functional Programming" should cover that, apart from `Applicative' |
| 2026-03-11 08:21:48 +0100 | <ski> | (by Simon Thompson) |
| 2026-03-11 08:22:07 +0100 | <ski> | then there's stuff like |
| 2026-03-11 08:22:12 +0100 | <ski> | @where Typeclassopedia |
| 2026-03-11 08:22:13 +0100 | <lambdabot> | http://www.haskell.org/haskellwiki/Typeclassopedia |
| 2026-03-11 08:22:50 +0100 | <gentauro> | [exa]: thx |
| 2026-03-11 08:24:32 +0100 | <[exa]> | mesaoptimizer: the community LYAH is not bad if you know some coding already https://learnyouahaskell.github.io/ |
| 2026-03-11 08:24:50 +0100 | <[exa]> | gentauro: btw what's the usecase there? literally just forcing the file in? |
| 2026-03-11 08:24:51 +0100 | <mesaoptimizer> | I read the first part of Graham Hutton's book two years ago btw |
| 2026-03-11 08:25:36 +0100 | <mesaoptimizer> | I returned to it recently and didn't like it, and especially didn't appreciate the lack of a mention of record syntax anywhere, but perhaps that was after the publication of the 2016 book |
| 2026-03-11 08:26:14 +0100 | <mesaoptimizer> | then again, Chris Allen and Julie Moronuki's https://haskellbook.com mentions record syntax (I did a search in the PDF) and it was published in 2017 |
| 2026-03-11 08:26:17 +0100 | <gentauro> | [exa]: last time I did this -> `LBS.readFile f >>= \bs -> LBS.length bs `seq` pure bs` :| |
| 2026-03-11 08:26:37 +0100 | <gentauro> | I guess by forcing the length of the file and then returning the bytes |
| 2026-03-11 08:26:39 +0100 | <gentauro> | :-\ |
| 2026-03-11 08:26:45 +0100 | humasect | (~humasect@184.151.37.182) humasect |
| 2026-03-11 08:27:23 +0100 | <[exa]> | gentauro: you might want to use the strict reader https://hackage-content.haskell.org/package/bytestring-0.12.2.0/docs/Data-ByteString.html#v:readFile and then thaw the string |
| 2026-03-11 08:28:01 +0100 | <[exa]> | as in, `fromStrict <$> StrictBS.readFile` |
| 2026-03-11 08:28:06 +0100 | <gentauro> | [exa]: use case is (files are small enough to be in mem) so yes, they need to be fully in mem |
| 2026-03-11 08:28:19 +0100 | <ski> | preflex: xseen bitemyapp |
| 2026-03-11 08:28:19 +0100 | <preflex> | Sorry, I haven't seen bitemyapp |
| 2026-03-11 08:28:27 +0100 | <mesaoptimizer> | my current favorite resource has been https://leanpub.com/finding-success-in-haskell by Julie Moronuki and Chris Martin. It helped me ease into the use of Either and Maybe and `newtype` and introduced me to `Data.Coerce` |
| 2026-03-11 08:28:32 +0100 | chele | (~chele@user/chele) chele |
| 2026-03-11 08:28:58 +0100 | <dminuoso> | If you're starting out Data.Coerce is most likely something you not should be wielding |
| 2026-03-11 08:29:24 +0100 | <mesaoptimizer> | I did a PLT semantics course, its all right |
| 2026-03-11 08:29:31 +0100 | <gentauro> | [exa]: yeah, my code import is -> `import qualified Data.ByteString.Lazy as LBS`. Kind of dump to import the `lazy` version if I want to do strict stuff |
| 2026-03-11 08:30:02 +0100 | <[exa]> | well add the SBS and there you go |
| 2026-03-11 08:30:02 +0100 | <dminuoso> | mesaoptimizer: I'm not sure how that module could help you on your path *shrugs* |
| 2026-03-11 08:30:19 +0100 | <gentauro> | [exa]: got it |
| 2026-03-11 08:30:25 +0100 | <[exa]> | :) |
| 2026-03-11 08:31:11 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 08:31:23 +0100 | <mesaoptimizer> | dminuoso: hmm, perhaps you have a better idea than I do of how footgunny `Data.Coerce` is. I do know that I can't use it if I enable `Safe` language pragma |
| 2026-03-11 08:31:27 +0100 | <dminuoso> | mesaoptimizer: It's not really about "understanding" coercions, just that they dont fit into *any* idiomatic code for when you bootstrap yourself into the language. |
| 2026-03-11 08:31:56 +0100 | <dminuoso> | Oh it's not dangerous, but I'd be willing to say that almost any use of `coerce` in your first year is probably a smell |
| 2026-03-11 08:32:15 +0100 | <dminuoso> | Explicit unpacking/repacking is just better most of the time. |
| 2026-03-11 08:33:06 +0100 | <mesaoptimizer> | I see. I was using type applications with it |
| 2026-03-11 08:33:31 +0100 | <mesaoptimizer> | `coerce` without enabling the `TypeApplication` extension seems almost unusable at least in my experience |
| 2026-03-11 08:34:10 +0100 | <dminuoso> | Beginner trying to grasp Functor and Maybe already dabbling with TypeApplication :-) |
| 2026-03-11 08:34:17 +0100 | <dminuoso> | This is how you know you're in #haskell |
| 2026-03-11 08:34:38 +0100 | <humasect> | eh well. learn on the battlefield |
| 2026-03-11 08:35:03 +0100 | <[exa]> | +1 for coercefield experience |
| 2026-03-11 08:35:21 +0100 | <[exa]> | nothing explains that you don't want to use X better than using X |
| 2026-03-11 08:35:51 +0100 | <dminuoso> | mesaoptimizer: But you're on a right track as far as coerce goes. If you're using it with TypeApplications it's as good as manual unpacking/repacking - albeit more unusual |
| 2026-03-11 08:35:56 +0100 | <mesaoptimizer> | Functors are easy to wrap one's head around via just the type signature. Applicatives and Monad type signatures seem a bit harder to understand just by looking at it though |
| 2026-03-11 08:35:57 +0100 | <dminuoso> | Forget what I said, then. |
| 2026-03-11 08:36:03 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 2026-03-11 08:36:12 +0100 | <mesaoptimizer> | dminuoso: I see, that's useful to know |
| 2026-03-11 08:38:13 +0100 | arandombit | (~arandombi@user/arandombit) (Ping timeout: 244 seconds) |
| 2026-03-11 08:38:57 +0100 | <dminuoso> | mesaoptimizer: Some of the reasons that Applicative/Monad are difficult to understand are an obscure name and the fact that the pattern they abstract over something that has no "purpose" or "intent", just an observation that there's some things that just follow the same form and laws... I personally think that too much time is lost trying to focus around what they mean because it's almost entirely |
| 2026-03-11 08:38:59 +0100 | <dminuoso> | irrelevant for learning haskell. |
| 2026-03-11 08:39:25 +0100 | <dminuoso> | I'd be willing to bet you can learn Haskell just fine without understanding what Applicative or Monad "are" |
| 2026-03-11 08:40:09 +0100 | <humasect> | yea; it clicks when it clicks |
| 2026-03-11 08:40:26 +0100 | ski | . o O ( "How to Replace Failure by a List of Successes: A method for exception handling, backtracking, and pattern matching in lazy functional languages" by Philip Wadler in 1985 at <http://www.rkrishnan.org/files/wadler-1985.pdf> ) |
| 2026-03-11 08:42:01 +0100 | <dminuoso> | mesaoptimizer: I mean most individual instances of Applicative/Monad are trivial enough to figure out in a minute or two as long as you have more than a week of programming experience - and that knowledge is likely enough to become competent in Haskell.. |
| 2026-03-11 08:42:46 +0100 | <dminuoso> | The biggest pedagogic mistake of Haskell. |
| 2026-03-11 08:43:53 +0100 | <humasect> | depends where one starts after all |
| 2026-03-11 08:44:07 +0100 | <mesaoptimizer> | I see. Sure, perhaps I figure it out via learning to be comfortable with actual instances of these type classes. I'll try that. I didn't have the misconception that it was directly related to the category theoretic concepts, of course |
| 2026-03-11 08:44:19 +0100 | <mesaoptimizer> | nor that the laws necessarily hold if you define an instance of the classes |
| 2026-03-11 08:44:44 +0100 | <Axman6> | There's a lot of external pressure to explain monads, because they're the big boogie man of Haskell people struggle to understand - but they'd be much better off starting to use things which are monads first, and then see that there's a common interface for them |
| 2026-03-11 08:44:57 +0100 | <opqdonut> | yes, agreed |
| 2026-03-11 08:46:48 +0100 | <Axman6> | It's basically how we taught things in the NICTA/Data61/System F FP course - here's a type, here's a function which uses that typew, implement the function that matches that type (hint there is 1/2/infinite ways to do that). Here's another type, here's a function's type: implement the function with that type... Hey, their types look really similar, can we do something with that? |
| 2026-03-11 08:46:59 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 08:49:24 +0100 | Digit | (~user@user/digit) (Ping timeout: 256 seconds) |
| 2026-03-11 08:49:34 +0100 | Digitteknohippie | (~user@user/digit) Digit |
| 2026-03-11 08:49:37 +0100 | oskarw | (~user@user/oskarw) oskarw |
| 2026-03-11 08:51:50 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 2026-03-11 08:53:38 +0100 | CiaoSen | (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen |
| 2026-03-11 08:53:56 +0100 | poscat0x04 | (~poscat@user/poscat) poscat |
| 2026-03-11 08:54:43 +0100 | <ski> | mesaoptimizer : do note that most "monad tutorials" out there are bad (unhelpful, hinders comprehension) |
| 2026-03-11 08:55:19 +0100 | poscat | (~poscat@user/poscat) (Ping timeout: 245 seconds) |
| 2026-03-11 08:55:20 +0100 | <[exa]> | +1000 ^ |
| 2026-03-11 08:55:41 +0100 | <[exa]> | who said that thing with "abstract complex are elucidated by throwing examples at them" |
| 2026-03-11 08:59:39 +0100 | humasect | (~humasect@184.151.37.182) (Quit: Leaving...) |
| 2026-03-11 09:02:45 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn |
| 2026-03-11 09:03:55 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) sord937 |
| 2026-03-11 09:07:24 +0100 | merijn | (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |