2026/04/03

Newest at the top

2026-04-03 02:10:53 +0000 <EvanR> maybe mesaoptimizer wants to see also SafeHaskell
2026-04-03 02:08:54 +0000 <monochrom> So even sophomores can understand that the negation of "all usages of unsafePerformIO are safe" is not "all usages of unsafePerformIO are unsafe".
2026-04-03 02:08:49 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 02:08:43 +0000zzz(~zero@user/zero) (Ping timeout: 264 seconds)
2026-04-03 02:07:24 +0000 <monochrom> I will start with a conversation I overheard. Two 1st-year students were at a cafe discussing logic homework. The homework question was "what is the negation of: everyone wears glasses?". The students first said "is it: no one wears glasses?" But within 10 seconds, "no, that's not right".
2026-04-03 01:57:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2026-04-03 01:56:14 +0000xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2026-04-03 01:53:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 01:52:06 +0000 <EvanR> if you use GMP based Integer there's also that
2026-04-03 01:51:42 +0000 <EvanR> there are a lot of them
2026-04-03 01:51:21 +0000 <EvanR> even without unsafe perform IO, the primitives GHC has get implemented somehow
2026-04-03 01:46:01 +0000foul_owl(~kerry@94.156.149.94) (Read error: Connection reset by peer)
2026-04-03 01:41:59 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 245 seconds)
2026-04-03 01:36:34 +0000jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2026-04-03 01:35:29 +0000merijn(~merijn@62.45.136.136) merijn
2026-04-03 01:24:25 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-04-03 01:21:05 +0000comonad(~comonad@p200300d02717df00adc247ef70bd7367.dip0.t-ipconnect.de)
2026-04-03 01:20:01 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 01:19:57 +0000comonad(~comonad@p200300d02717df00adc247ef70bd7367.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2026-04-03 01:16:12 +0000 <glguy> The point isn't that all uses of unsafePerformIO are protected by the type system, it's that unsafePerformIO can be carefully used in ways that benefit from type system protection
2026-04-03 01:15:48 +0000 <c_wraith> (It's true for ST as long as you don't use any of the unsafe* functions)
2026-04-03 01:15:30 +0000 <c_wraith> which the reference to runST implies is what it's intended to be talking about.
2026-04-03 01:15:29 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-04-03 01:15:16 +0000 <c_wraith> It's nearly accurate for ST
2026-04-03 01:14:01 +0000 <mesaoptimizer> imperative nonsense may occur. Externally, the function is pure. The world outside the boundary gets none of the mutation, only the result." https://blog.haskell.org/a-couple-million-lines-of-haskell/ this is an incorrect inference, right? if you use unsafe IO or unsafe side effects, the type system cannot and will not be able to guarantee the purity
2026-04-03 01:13:59 +0000 <mesaoptimizer> effects, observable within the computation. What makes it acceptable is that the side effects are encapsulated such that the boundary cannot be violated. The rank-2 type (that is, the type s is scoped within the parenthesis and can't escape) of runST ensures that the mutable references created inside the computation cannot escape due to being tagged with the type s. Internally, all sorts of
2026-04-03 01:13:57 +0000 <mesaoptimizer> "Under the hood, Haskell is not a magical machine that performs side effects despite being pure. Behind every "pure" function in bytestring, text, and vector lies a cheerful little hellscape of mutable allocation, buffer writes, unsafe coercions, and other behavior that would alarm you if you discovered it in a junior engineer's side project. Behind the ST monad lies in-place mutation and side
2026-04-03 01:09:20 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-04-03 01:04:40 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 00:57:22 +0000xff0x(~xff0x@2405:6580:b080:900:1644:ff9e:fe83:e2e) (Ping timeout: 248 seconds)
2026-04-03 00:54:15 +0000synchromesh(~john@2406:5a00:2412:2c00:fc97:d0a4:cdd9:afc1) synchromesh
2026-04-03 00:54:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2026-04-03 00:53:42 +0000acidjnk_new3(~acidjnk@p200300d6e700e5001e1160b7d23e5dd6.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2026-04-03 00:52:59 +0000synchromesh(~john@2406:5a00:2412:2c00:fc97:d0a4:cdd9:afc1) (Read error: Connection reset by peer)
2026-04-03 00:52:59 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 265 seconds)
2026-04-03 00:49:18 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 00:38:42 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2026-04-03 00:33:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 00:33:18 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 255 seconds)
2026-04-03 00:23:07 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-04-03 00:18:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-03 00:12:09 +0000jmcantrell_(~weechat@user/jmcantrell) (Ping timeout: 255 seconds)
2026-04-03 00:07:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-04-03 00:06:13 +0000jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2026-04-03 00:05:59 +0000karenw(~karenw@user/karenw) karenw
2026-04-03 00:00:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-04-02 23:56:44 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-04-02 23:54:54 +0000Square3(~Square@user/square) (Ping timeout: 245 seconds)
2026-04-02 23:49:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2026-04-02 23:46:20 +0000squid64(~user@fsf/member/squid64) squid64