2025/12/12

Newest at the top

2025-12-12 15:20:54 +0100Square(~Square4@user/square) Square
2025-12-12 15:08:37 +0100euphores(~SASL_euph@user/euphores) euphores
2025-12-12 15:06:49 +0100karenw(~karenw@user/karenw) karenw
2025-12-12 15:03:54 +0100tromp(~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2)
2025-12-12 14:40:57 +0100Everything(~Everythin@172-232-54-192.ip.linodeusercontent.com) (Quit: leaving)
2025-12-12 14:31:33 +0100Enrico63(~Enrico63@host-95-251-99-143.retail.telecomitalia.it) Enrico63
2025-12-12 14:29:35 +0100stef204(~stef204@user/stef204) stef204
2025-12-12 14:27:31 +0100fp(~Thunderbi@130.233.70.102) fp
2025-12-12 14:24:15 +0100trickard(~trickard@cpe-83-98-47-163.wireline.com.au)
2025-12-12 14:24:02 +0100trickard(~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-12-12 14:17:41 +0100fp(~Thunderbi@2001:708:150:10::7e06) (Ping timeout: 244 seconds)
2025-12-12 14:12:55 +0100fp(~Thunderbi@2001:708:150:10::7e06) fp
2025-12-12 14:07:05 +0100lucabtz_lucabtz
2025-12-12 14:06:30 +0100 <lucabtz_> though the only foralls which can be implicit are the ones at the top level no?
2025-12-12 14:04:34 +0100lucabtz(~lucabtz@user/lucabtz) (Ping timeout: 246 seconds)
2025-12-12 14:03:39 +0100 <merijn> Yes, but then pinning down exactly what that means isn't always obvious in Haskell given that the source language doesn't always match the one with explicit foralls directly
2025-12-12 14:02:24 +0100lucabtz_(~lucabtz@user/lucabtz) lucabtz
2025-12-12 13:59:13 +0100lucabtz(~lucabtz@user/lucabtz) lucabtz
2025-12-12 13:56:23 +0100Googulator50(~Googulato@team.broadbit.hu) (Ping timeout: 272 seconds)
2025-12-12 13:55:30 +0100lucabtz(~lucabtz@user/lucabtz) (Quit: leaving)
2025-12-12 13:44:11 +0100tromp(~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-12-12 13:38:55 +0100Enrico63(~Enrico63@host-95-251-99-143.retail.telecomitalia.it) (Quit: Client closed)
2025-12-12 13:36:47 +0100xff0x(~xff0x@2405:6580:b080:900:d3a9:b169:555e:b9ec)
2025-12-12 13:35:24 +0100 <lucabtz> isnt the definition as rank N has as parameters rank N-1 types correct?
2025-12-12 13:35:12 +0100lucabtz(~lucabtz@user/lucabtz) lucabtz
2025-12-12 13:30:17 +0100chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-12-12 13:29:25 +0100lucabtz(~lucabtz@user/lucabtz) (Ping timeout: 264 seconds)
2025-12-12 13:27:35 +0100chromoblob(~chromoblo@user/chromob1ot1c) (Ping timeout: 240 seconds)
2025-12-12 13:24:43 +0100Googulator(~Googulato@team.broadbit.hu) (Ping timeout: 272 seconds)
2025-12-12 13:20:57 +0100Googulator50(~Googulato@team.broadbit.hu)
2025-12-12 13:16:13 +0100Katarushisu(~Katarushi@finc-20-b2-v4wan-169598-cust1799.vm7.cable.virginm.net) Katarushisu
2025-12-12 13:04:28 +0100pabs3(~pabs3@user/pabs3) pabs3
2025-12-12 13:02:46 +0100pabs3(~pabs3@user/pabs3) (Ping timeout: 244 seconds)
2025-12-12 13:02:19 +0100__monty__(~toonn@user/toonn) toonn
2025-12-12 13:01:13 +0100__monty__(~toonn@user/toonn) (Ping timeout: 264 seconds)
2025-12-12 12:34:01 +0100 <merijn> Especially since GHC doesn't even distinguish between Rank2 and RankN
2025-12-12 12:33:37 +0100 <merijn> In practice the value is understanding "why does this not compile and how can I make it do what I want" :p
2025-12-12 12:33:30 +0100Square2(~Square@user/square) Square
2025-12-12 12:33:18 +0100 <merijn> then again, in practice there's very little value in knowing the exact rank of a type :p
2025-12-12 12:32:58 +0100 <mauke> the SO page I found is better, but includes two incompatible answers :-)
2025-12-12 12:32:46 +0100 <merijn> sure
2025-12-12 12:32:43 +0100pabs3(~pabs3@user/pabs3) pabs3
2025-12-12 12:32:33 +0100 <mauke> which is useless if I want to know the actual definition of "rank"
2025-12-12 12:32:20 +0100 <mauke> yeah, when I search for "rank-n type", most results are examples like ^
2025-12-12 12:31:28 +0100 <merijn> Enrico63: This is the clearest example of Rank1 vs RankN I cooked up a few years ago: https://gist.github.com/merijn/77e3fa9757658e59b01d
2025-12-12 12:31:19 +0100 <mauke> Enrico63: yes, that's a H98 type (by floating out the forall)
2025-12-12 12:30:52 +0100 <mauke> this looks much better: https://stackoverflow.com/questions/22362196/what-is-n-in-rankntypes
2025-12-12 12:28:10 +0100 <Enrico63> Anyway, going to the exercises I found on the book "Thinking with Types" that I'm reading, `Int -> forall a. a -> a` is rank 1, correct?
2025-12-12 12:26:11 +0100 <Enrico63> No?
2025-12-12 12:26:10 +0100 <Enrico63> which means that the implementation of foo is choosing a=Int, which could not be the case if foo was rank 1, because the caller would choose a.