2022/05/24

2022-05-24 00:00:11 +0200phma(~phma@host-67-44-209-30.hnremote.net) (Read error: Connection reset by peer)
2022-05-24 00:00:25 +0200flinner(~flinner@user/flinner) (Remote host closed the connection)
2022-05-24 00:03:10 +0200michalz(~michalz@185.246.204.122) (Remote host closed the connection)
2022-05-24 00:04:41 +0200CiaoSen(~Jura@p200300c9571e4b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-05-24 00:05:28 +0200phma(~phma@2001:5b0:211f:4558:378e:f00c:29a5:2a62)
2022-05-24 00:06:29 +0200MajorBiscuit(~MajorBisc@80.146.187.107) (Ping timeout: 244 seconds)
2022-05-24 00:08:00 +0200renzhi(~xp@2607:fa49:6500:b100::2dea) (Ping timeout: 258 seconds)
2022-05-24 00:08:02 +0200chomwitt(~chomwitt@2a02:587:dc1e:cc00:8ece:d1c3:481c:8e10) (Ping timeout: 260 seconds)
2022-05-24 00:08:18 +0200MajorBiscuit(~MajorBisc@c-001-015-032.client.tudelft.eduvpn.nl)
2022-05-24 00:08:35 +0200acat(~acat__@132.255.9.33) (Quit: Leaving)
2022-05-24 00:13:34 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2022-05-24 00:20:31 +0200coot(~coot@213.134.190.95) (Ping timeout: 276 seconds)
2022-05-24 00:21:08 +0200phma(~phma@2001:5b0:211f:4558:378e:f00c:29a5:2a62) (Read error: Connection reset by peer)
2022-05-24 00:22:50 +0200romesrf(~romes@185.5.8.134) (Quit: WeeChat 3.4.1)
2022-05-24 00:24:09 +0200phma(~phma@2001:5b0:212a:cf68:bd21:e2c6:dbfb:9709)
2022-05-24 00:24:41 +0200phma(~phma@2001:5b0:212a:cf68:bd21:e2c6:dbfb:9709) (Read error: Connection reset by peer)
2022-05-24 00:25:10 +0200acidjnk(~acidjnk@p200300d0c7068b30b098d604dddded4a.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-24 00:29:00 +0200Everything(~Everythin@37.115.210.35) (Quit: leaving)
2022-05-24 00:31:56 +0200MajorBiscuit(~MajorBisc@c-001-015-032.client.tudelft.eduvpn.nl) (Ping timeout: 272 seconds)
2022-05-24 00:31:59 +0200merijn(~merijn@c-001-001-011.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
2022-05-24 00:34:07 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2022-05-24 00:34:27 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-05-24 00:40:36 +0200phma(phma@2001:5b0:211f:99c8:1e56:814f:39a7:4c4f)
2022-05-24 00:40:54 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 00:41:47 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 240 seconds)
2022-05-24 00:41:49 +0200phma(phma@2001:5b0:211f:99c8:1e56:814f:39a7:4c4f) (Read error: Connection reset by peer)
2022-05-24 00:42:13 +0200phma(~phma@host-67-44-208-37.hnremote.net)
2022-05-24 00:43:36 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 00:47:06 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 00:50:10 +0200werneta(~werneta@137.79.219.99) (Ping timeout: 258 seconds)
2022-05-24 00:50:49 +0200ubert(~Thunderbi@p200300ecdf3b99c36d3ba42fb5eab692.dip0.t-ipconnect.de) (Quit: ubert)
2022-05-24 00:50:59 +0200werneta(~werneta@137.78.30.207)
2022-05-24 00:55:31 +0200zeenk(~zeenk@2a02:2f04:a104:ef00:10:581:f80f:b980) (Quit: Konversation terminated!)
2022-05-24 00:57:14 +0200Tuplanolla(~Tuplanoll@91-159-68-39.elisa-laajakaista.fi) (Quit: Leaving.)
2022-05-24 01:07:23 +0200perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Remote host closed the connection)
2022-05-24 01:07:47 +0200perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-05-24 01:08:34 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-05-24 01:12:29 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
2022-05-24 01:14:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 01:14:42 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-24 01:16:22 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 01:16:52 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 260 seconds)
2022-05-24 01:19:22 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 01:23:54 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 258 seconds)
2022-05-24 01:24:32 +0200jrm(~jrm@156.34.173.250) (Quit: ciao)
2022-05-24 01:24:50 +0200jrm(~jrm@156.34.173.250)
2022-05-24 01:26:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 01:26:35 +0200 <Axman6> o/
2022-05-24 01:28:27 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-05-24 01:29:27 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 01:37:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 01:38:29 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-24 01:38:29 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-24 01:38:29 +0200wroathe(~wroathe@user/wroathe)
2022-05-24 01:39:10 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 01:42:59 +0200 <EvanR> \o
2022-05-24 01:43:29 +0200 <geekosaur> \o/
2022-05-24 01:43:42 +0200 <Axman6> Connection established!
2022-05-24 01:47:05 +0200 <hpc> lmao
2022-05-24 01:48:34 +0200alx741(~alx741@host-186-3-154-11.netlife.ec)
2022-05-24 01:50:28 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575)
2022-05-24 01:50:47 +0200alx741(~alx741@host-186-3-154-11.netlife.ec) (Read error: Connection reset by peer)
2022-05-24 01:51:23 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 01:54:47 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575) (Ping timeout: 255 seconds)
2022-05-24 01:59:56 +0200 <dragestil> does anyone know if integer-gmp has a source forge link? https://hackage.haskell.org/package/integer-gmp
2022-05-24 02:00:50 +0200 <dragestil> I mean a link to its vcs repo
2022-05-24 02:01:57 +0200nate1(~nate@98.45.169.16)
2022-05-24 02:02:14 +0200 <geekosaur> https://gitlab.haskell.org/ghc/ghc/-/tree/master/libraries/integer-gmp
2022-05-24 02:02:45 +0200 <geekosaur> it's not independent, it's part of the GHC repo
2022-05-24 02:03:31 +0200 <dragestil> ok thanks. it's not even a submodule?
2022-05-24 02:03:42 +0200 <geekosaur> nope
2022-05-24 02:03:50 +0200 <dragestil> hmm ok
2022-05-24 02:04:02 +0200 <geekosaur> too deeply wired into ghc currently. there is some work on changing this, but not quite that far as yet
2022-05-24 02:04:43 +0200 <dragestil> i see, i do remember needing it to build ghc
2022-05-24 02:04:48 +0200 <geekosaur> \(in particular they want to be able to choose between integer-gmp and integer-simple without having to rebuild ghc, which should also allow for pluggable implementations
2022-05-24 02:04:52 +0200 <geekosaur> )
2022-05-24 02:05:12 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575)
2022-05-24 02:05:49 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde)
2022-05-24 02:06:50 +0200nate1(~nate@98.45.169.16) (Ping timeout: 258 seconds)
2022-05-24 02:07:07 +0200 <dragestil> makes sense
2022-05-24 02:08:12 +0200 <geekosaur> there was some work a decade ago on using libtommath as an alternative, which didn't go much of anywhere; one hope is that it'll be easier to do such experiments in the future
2022-05-24 02:09:59 +0200 <Axman6> what is integer-simple's implementation these days? I remember at some point it was a [Int] or something, but feel like it was turned into something more akin to GMP's representation?
2022-05-24 02:10:27 +0200 <geekosaur> I know it was completely rewritten several years back but don't know details
2022-05-24 02:11:50 +0200 <geekosaur> https://gitlab.haskell.org/ghc/ghc/-/tree/master/libraries/ghc-bignum has some details
2022-05-24 02:12:08 +0200 <geekosaur> (that's the new swappable backend, if I read correctly)
2022-05-24 02:13:15 +0200 <Axman6> I remember years ago Erik de Castro Lopo doing some work on making a pure Haskell implementationm for Integers, and the performance was very close to GMP, with somethings being slower, and some faster
2022-05-24 02:13:34 +0200 <Axman6> https://github.com/erikd/haskell-big-integer-experiment
2022-05-24 02:14:35 +0200werneta(~werneta@137.78.30.207) (Ping timeout: 255 seconds)
2022-05-24 02:15:05 +0200 <EvanR> that's either pretty impressive, or discouraging that gmp is that bad xD
2022-05-24 02:15:45 +0200 <EvanR> like comparing the size of mars and ganymede, the reaction could go either way
2022-05-24 02:15:52 +0200 <Axman6> using data Integer = Small# Int# | Large# BigNat gives q pretty big performance boost when either argument is small
2022-05-24 02:16:01 +0200 <Axman6> GMP integers are always "big"
2022-05-24 02:17:08 +0200 <[Leary]> I wrote two's-complement integers in lambda calculus at some point, maybe I should make my own joke backend. <.<
2022-05-24 02:17:22 +0200 <EvanR> acme-bigint
2022-05-24 02:17:38 +0200 <Axman6> integer-busy-beaver
2022-05-24 02:21:01 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 258 seconds)
2022-05-24 02:21:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 02:23:09 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 02:23:22 +0200kenaryn(~aurele@cre71-h03-89-88-44-27.dsl.sta.abo.bbox.fr)
2022-05-24 02:23:57 +0200dcleonarski(~user@2804:d51:479c:4300:c312:71c1:ee9b:86ea) (Ping timeout: 260 seconds)
2022-05-24 02:25:13 +0200 <hpc> acme-idle-beaver
2022-05-24 02:25:23 +0200 <hpc> ib n = replicateM_ n mempty
2022-05-24 02:25:24 +0200 <hpc> :D
2022-05-24 02:28:55 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-05-24 02:30:46 +0200xff0x(~xff0x@b133147.ppp.asahi-net.or.jp) (Ping timeout: 246 seconds)
2022-05-24 02:34:00 +0200 <EvanR> idle beaver is the dual beaver to busy beaver
2022-05-24 02:35:18 +0200 <geekosaur> Axman6, actually GMP-backed Integers have that same optimization (see the J# constructor)
2022-05-24 02:36:10 +0200 <geekosaur> @src Integer
2022-05-24 02:36:10 +0200 <lambdabot> data Integer = S# Int#
2022-05-24 02:36:10 +0200 <lambdabot> | J# Int# ByteArray#
2022-05-24 02:36:16 +0200 <geekosaur> sorry, S#
2022-05-24 02:36:59 +0200 <geekosaur> and that's a bit out of date: (1) there's a separate constructor for negative big Integers now (2) and the representation changed so it can be in common between all the backends
2022-05-24 02:37:05 +0200 <Axman6> yeah I can't remember exactly what the advantage was 8 years ago. it might have been the explicit sign constructors simplifying things
2022-05-24 02:39:15 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-05-24 02:40:15 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 276 seconds)
2022-05-24 02:40:32 +0200Lord_of_Life_Lord_of_Life
2022-05-24 02:48:30 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 02:49:43 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde) (Remote host closed the connection)
2022-05-24 02:49:50 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2022-05-24 02:53:01 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde)
2022-05-24 02:58:34 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-24 02:59:20 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 03:00:18 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-24 03:04:19 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-05-24 03:04:40 +0200zmt00(~zmt00@user/zmt00)
2022-05-24 03:04:55 +0200stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-05-24 03:11:36 +0200xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
2022-05-24 03:36:43 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde) (Remote host closed the connection)
2022-05-24 03:37:43 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde)
2022-05-24 03:38:07 +0200 <dons> g'day folks
2022-05-24 03:39:51 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Read error: Connection reset by peer)
2022-05-24 03:39:55 +0200sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-05-24 03:48:21 +0200andrey_(~andrey@p200300dbcf14f800f85ba15fc5bddcc0.dip0.t-ipconnect.de)
2022-05-24 03:51:26 +0200andrey__(~andrey@p200300dbcf0986008b4668e560f4c52f.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2022-05-24 03:51:27 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
2022-05-24 03:51:56 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 03:52:39 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-24 03:52:56 +0200_PSY_(~PSY@2600:1700:2050:1040:dc85:ef8:9bc6:edde) (Quit: .)
2022-05-24 03:54:24 +0200 <jackdk> hi dons
2022-05-24 03:57:28 +0200 <sm> g'day dons
2022-05-24 04:09:04 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
2022-05-24 04:10:07 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
2022-05-24 04:16:03 +0200ashpil(~ashpil@98.42.126.67)
2022-05-24 04:16:31 +0200kenaryn(~aurele@cre71-h03-89-88-44-27.dsl.sta.abo.bbox.fr) (Quit: leaving)
2022-05-24 04:16:32 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 04:18:56 +0200 <ashpil> How does `getChar` have referential transparency?
2022-05-24 04:19:41 +0200 <jackdk> getChar is a constant value: a computation, which when run, will read a character from stdin
2022-05-24 04:20:07 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Read error: Connection reset by peer)
2022-05-24 04:21:49 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-05-24 04:21:53 +0200 <ashpil> Interesting. Makes sense, but does feel a bit hacky :p
2022-05-24 04:21:59 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 04:24:35 +0200 <jackdk> I don't think it's that hacky. Have a look at https://github.com/system-f/fp-course#demonstrate-io-maintains-referential-transparency : in the haskell example, DRYing up the code by moving `readFile file` into the `let` block does not change the meaning of the program. In the python example, it does.
2022-05-24 04:25:53 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-05-24 04:26:24 +0200Guest54(~Guest54@modemcable048.16-160-184.mc.videotron.ca)
2022-05-24 04:27:33 +0200 <EvanR> ashpil, consider let x = getChar in _
2022-05-24 04:27:45 +0200 <ashpil> Hmm yes it passes the technical definition, but it does sort of feel like moving the goalposts.
2022-05-24 04:27:48 +0200 <lambdabot> <hint>:1:41: error: parse error on input ‘,’
2022-05-24 04:27:51 +0200 <EvanR> anywhere in _ you can replace x with getChar and it's the same thing
2022-05-24 04:28:05 +0200 <EvanR> i.e. referential transparency
2022-05-24 04:28:19 +0200 <ashpil> Yeah I get that
2022-05-24 04:28:20 +0200 <EvanR> note how this differs from other languages
2022-05-24 04:28:43 +0200xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 246 seconds)
2022-05-24 04:29:05 +0200 <EvanR> part of which is that getChar isn't a function at all
2022-05-24 04:29:23 +0200 <[Leary]> It's not a moving of goalposts, it's a key shift in perspective---that we step back from *performing* computations *specifying* them.
2022-05-24 04:29:40 +0200 <[Leary]> to*
2022-05-24 04:30:01 +0200 <ashpil> Fair enough
2022-05-24 04:31:39 +0200jmcarthur(~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net)
2022-05-24 04:32:32 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-24 04:32:33 +0200 <EvanR> IO actions = first class asm chunks xD
2022-05-24 04:34:17 +0200 <EvanR> you can note only substitute them, but you could store them in data structures or IORefs
2022-05-24 04:34:23 +0200 <EvanR> for fun and profit
2022-05-24 04:34:53 +0200 <EvanR> or send them between threads
2022-05-24 04:35:27 +0200SridharRatnakuma(~sridmatri@2001:470:69fc:105::1c2) (Ping timeout: 240 seconds)
2022-05-24 04:35:30 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-05-24 04:35:47 +0200RudraveerMandal[(~magphimat@2001:470:69fc:105::2:eb9) (Ping timeout: 240 seconds)
2022-05-24 04:36:07 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56) (Ping timeout: 240 seconds)
2022-05-24 04:36:07 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba) (Ping timeout: 240 seconds)
2022-05-24 04:36:27 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8) (Ping timeout: 240 seconds)
2022-05-24 04:37:10 +0200xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp)
2022-05-24 04:37:50 +0200jmcarthur(~jmcarthur@c-73-29-224-10.hsd1.nj.comcast.net) (Quit: My MacBook Air has gone to sleep. ZZZzzz…)
2022-05-24 04:41:26 +0200ashpil(~ashpil@98.42.126.67) (Ping timeout: 252 seconds)
2022-05-24 04:41:33 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-24 04:41:33 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-24 04:41:33 +0200wroathe(~wroathe@user/wroathe)
2022-05-24 04:42:00 +0200 <jackdk> [Leary] hit it very well. we almost never try and run these computations ourselves, we just assign `main :: IO ()` to the thing we want to run and hand that off to the runtime.
2022-05-24 04:44:32 +0200bliminse(~bliminse@host81-154-179-167.range81-154.btcentralplus.com) (Ping timeout: 260 seconds)
2022-05-24 04:46:05 +0200bliminse(~bliminse@host86-164-169-5.range86-164.btcentralplus.com)
2022-05-24 04:47:22 +0200SridharRatnakuma(~sridmatri@2001:470:69fc:105::1c2)
2022-05-24 04:48:40 +0200YoungFrog(~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be) (Ping timeout: 246 seconds)
2022-05-24 04:48:50 +0200Alleria(~textual@user/alleria) (Ping timeout: 240 seconds)
2022-05-24 04:49:09 +0200toluene5(~toluene@user/toulene)
2022-05-24 04:49:14 +0200YoungFrog(~youngfrog@2a02:a03f:c21b:f900:8cee:eaed:9f2f:9769)
2022-05-24 04:49:19 +0200feliix42_(~felix@gibbs.uberspace.de)
2022-05-24 04:49:22 +0200feliix42(~felix@gibbs.uberspace.de) (Ping timeout: 246 seconds)
2022-05-24 04:49:34 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
2022-05-24 04:49:43 +0200toluene(~toluene@user/toulene) (Ping timeout: 246 seconds)
2022-05-24 04:49:44 +0200toluene5toluene
2022-05-24 04:49:45 +0200RudraveerMandal[(~magphimat@2001:470:69fc:105::2:eb9)
2022-05-24 04:49:49 +0200jargon(~jargon@174-22-206-112.phnx.qwest.net) (Remote host closed the connection)
2022-05-24 04:50:01 +0200alexfmpe[m](~alexfmpem@2001:470:69fc:105::38ba)
2022-05-24 04:50:04 +0200noctux(~noctux@user/noctux) (Ping timeout: 246 seconds)
2022-05-24 04:50:33 +0200Orbstheorem(~orbstheor@2001:470:69fc:105::a56)
2022-05-24 04:51:36 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-05-24 04:51:42 +0200Christoph[m](~hpotsirhc@2001:470:69fc:105::2ff8)
2022-05-24 04:51:48 +0200noctux(~noctux@user/noctux)
2022-05-24 04:55:38 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 04:55:55 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 04:56:28 +0200ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection)
2022-05-24 04:57:35 +0200ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-05-24 04:59:34 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds)
2022-05-24 05:00:16 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-24 05:04:05 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 244 seconds)
2022-05-24 05:06:37 +0200 <Guest54> I am trying to understand how to display a list and how to take a specefic element from it.
2022-05-24 05:06:37 +0200 <Guest54> So, I have a list of lists: [[Id,a,b],[Id,a,b],[Id,a,b]...]
2022-05-24 05:06:38 +0200 <Guest54> And i want to display it to this format:
2022-05-24 05:06:38 +0200 <Guest54> position(first one 1) space Id space b
2022-05-24 05:06:39 +0200 <Guest54> ...
2022-05-24 05:06:40 +0200 <Guest54> ...
2022-05-24 05:06:40 +0200 <Guest54> then--------(8 lines)
2022-05-24 05:06:41 +0200 <Guest54> if we take this example:
2022-05-24 05:06:41 +0200 <Guest54> [[43525,5,2],[7455,3,4],[25545,7,5],[98674,10,5]]
2022-05-24 05:06:42 +0200 <Guest54> i want to display somthing like this:
2022-05-24 05:06:42 +0200 <Guest54> 1 43525 2
2022-05-24 05:06:43 +0200 <Guest54> 2 7455 4
2022-05-24 05:06:43 +0200 <Guest54> 3 25545 5
2022-05-24 05:06:44 +0200 <Guest54> 4 98674 5
2022-05-24 05:06:44 +0200 <Guest54> --------
2022-05-24 05:06:46 +0200 <Axman6> Don't do that!
2022-05-24 05:06:50 +0200 <Axman6> @where paste
2022-05-24 05:06:50 +0200 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-05-24 05:07:07 +0200 <Guest54> sorry how can't delete it ? :/
2022-05-24 05:07:11 +0200 <Axman6> you can't
2022-05-24 05:07:44 +0200 <Guest54> sorry, is there any link to read rules ...
2022-05-24 05:07:58 +0200causal(~user@50.35.83.177)
2022-05-24 05:07:58 +0200 <Guest54> i m new beginner to this channel
2022-05-24 05:08:54 +0200 <Axman6> it's pretty common across IRc to not spam lots of text,. The topic has useful links. Re: your querstion, have a look at the functions mapM_/traverse/sequence, putStrLn, unwords, show
2022-05-24 05:09:10 +0200 <Axman6> Is this a homework exercise?
2022-05-24 05:09:12 +0200 <EvanR> Guest54, break it down into subproblems. First, a function that takes [Id,a,b] and formats a line of text like you want
2022-05-24 05:10:00 +0200 <EvanR> (Id,A,B) -> String
2022-05-24 05:10:06 +0200 <Axman6> or were you asking about last week?
2022-05-24 05:10:55 +0200 <Guest54> yeep that problem
2022-05-24 05:11:08 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 05:11:11 +0200 <Guest54> but i figured out how to sort the lists and to parse the data...
2022-05-24 05:11:14 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 272 seconds)
2022-05-24 05:11:36 +0200 <Axman6> > unwords ["Hello,","world"]
2022-05-24 05:11:37 +0200 <lambdabot> "Hello, world"
2022-05-24 05:11:59 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-24 05:22:01 +0200motherfsck(~motherfsc@user/motherfsck)
2022-05-24 05:27:10 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 246 seconds)
2022-05-24 05:28:27 +0200AkechiShiro(~licht@user/akechishiro) (Ping timeout: 240 seconds)
2022-05-24 05:28:57 +0200Raito_Bezarius(~Raito@2a01:e0a:5f9:9681:a0a0:bb76:611f:9da7) (Ping timeout: 248 seconds)
2022-05-24 05:29:27 +0200Luj4(~Luj@2a01:e0a:5f9:9681:4314:3e52:bdb3:a61e) (Ping timeout: 260 seconds)
2022-05-24 05:30:09 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 05:30:18 +0200frost(~frost@user/frost)
2022-05-24 05:31:01 +0200AkechiShiro(~licht@user/akechishiro)
2022-05-24 05:32:35 +0200Luj4(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb)
2022-05-24 05:34:36 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 05:34:52 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 05:37:37 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
2022-05-24 05:42:08 +0200Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius)
2022-05-24 05:58:01 +0200phma_(~phma@2001:5b0:210d:cc08:34f8:e479:1e76:ac53)
2022-05-24 05:58:41 +0200phma(~phma@host-67-44-208-37.hnremote.net) (Read error: Connection reset by peer)
2022-05-24 06:00:03 +0200 <Guest54> is there anyway to access to an element of the internal list ?
2022-05-24 06:00:03 +0200 <Guest54> [[43525,5,2],[7455,3,4]]
2022-05-24 06:00:04 +0200 <Guest54> for example access to the number 5 in the firstl list
2022-05-24 06:02:51 +0200 <Axman6> you can index into lists using !!, but generally we would recommend against it because it's not a safe function. you're better off to parse things into some sort of structure which guarantees the shame you care about, like we spoke about last week: data Patient = Patient {pId :: Int, pThing :: Int, pOther :: Int}
2022-05-24 06:03:29 +0200nate1(~nate@98.45.169.16)
2022-05-24 06:08:35 +0200nate1(~nate@98.45.169.16) (Ping timeout: 255 seconds)
2022-05-24 06:10:38 +0200 <sm> but for the sake of learning.. [[43525,5,2],[7455,3,4]] !! 0 !! 1
2022-05-24 06:12:25 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 06:12:38 +0200coot(~coot@213.134.190.95)
2022-05-24 06:14:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 06:16:56 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 06:18:59 +0200phma_phma
2022-05-24 06:20:48 +0200 <sm> when you have a small number of known shapes, you can extract it with pattern matching, eg... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/94457ea77c3bfc46d7bd14b9f375f1a93e61…)
2022-05-24 06:25:34 +0200Guest54(~Guest54@modemcable048.16-160-184.mc.videotron.ca) (Ping timeout: 252 seconds)
2022-05-24 06:32:53 +0200mvk(~mvk@2607:fea8:5ce3:8500::ba9a) (Ping timeout: 255 seconds)
2022-05-24 06:33:17 +0200 <EvanR> is that a thing, field name after first letter of type name
2022-05-24 06:33:46 +0200P1RATEZ(piratez@user/p1ratez) (Remote host closed the connection)
2022-05-24 06:33:52 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-05-24 06:35:19 +0200kaskal-(~kaskal@2001:4bb8:2e8:3abf:bc97:9581:8b80:8f4b)
2022-05-24 06:35:35 +0200Infinite(~Infinite@49.39.127.241)
2022-05-24 06:36:03 +0200kaskal(~kaskal@2001:4bb8:2e0:b5bd:e3c0:d71b:f32:84d8) (Ping timeout: 244 seconds)
2022-05-24 06:36:13 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 256 seconds)
2022-05-24 06:37:33 +0200 <jackdk> yeah I do it a lot. Less so these days, GHC seems to be better about handling record field clashes. generic-lens also helps
2022-05-24 06:43:44 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-05-24 06:44:42 +0200k8yun(~k8yun@user/k8yun)
2022-05-24 06:44:49 +0200k8yun(~k8yun@user/k8yun) (Remote host closed the connection)
2022-05-24 06:54:00 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-24 06:56:05 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 06:56:22 +0200y04nn(~y04nn@2001:ac8:28:95::a17e) (Ping timeout: 272 seconds)
2022-05-24 06:57:25 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 06:59:06 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-05-24 06:59:17 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-05-24 06:59:39 +0200Vajb(~Vajb@2001:999:42:1446:8c2:e3f9:b580:2e45)
2022-05-24 07:00:21 +0200michalz(~michalz@185.246.204.105)
2022-05-24 07:07:22 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 07:14:59 +0200kstGuest8247
2022-05-24 07:19:18 +0200frost(~frost@user/frost)
2022-05-24 07:21:11 +0200 <c_wraith> Wait, why isn't there eqInt# ?
2022-05-24 07:23:30 +0200 <dolio> Because it's called (==#).
2022-05-24 07:23:36 +0200 <c_wraith> ah, of course.
2022-05-24 07:24:10 +0200 <c_wraith> thank you
2022-05-24 07:28:51 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 276 seconds)
2022-05-24 07:30:42 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-05-24 07:33:40 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 07:36:03 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 07:38:13 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 07:38:18 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-05-24 07:40:58 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-05-24 07:41:09 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 244 seconds)
2022-05-24 07:44:53 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-05-24 07:45:10 +0200img(~img@user/img)
2022-05-24 07:54:58 +0200 <Inst> @itchyjunk
2022-05-24 07:54:58 +0200 <lambdabot> Unknown command, try @list
2022-05-24 07:55:07 +0200 <Inst> [itchyjunk] how goes your haskell journey?
2022-05-24 08:02:52 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 08:04:06 +0200 <[itchyjunk]> Inst, I have seriously slacked off.
2022-05-24 08:04:17 +0200 <Inst> did you ever get past the monad barrier?
2022-05-24 08:04:20 +0200 <Inst> I need more monad tutorials
2022-05-24 08:04:32 +0200 <Inst> if we make enough burritos we'll actually create one that works
2022-05-24 08:04:43 +0200 <[itchyjunk]> Lol, i have a slightly better idea of what it is but not, i am not fully clear on it.
2022-05-24 08:04:52 +0200 <[itchyjunk]> Concept of lifts and such from category theory.
2022-05-24 08:05:27 +0200liebach(~liebach@srv2047.zentience.net)
2022-05-24 08:05:30 +0200 <[itchyjunk]> But I need to code up a) tree search stuff b) parser it seems. to forward my programming journey.
2022-05-24 08:05:55 +0200 <[itchyjunk]> The crypto channel also recommend i implement a certain thing but might not be feasible for now
2022-05-24 08:06:15 +0200 <[itchyjunk]> What have you been exploring, Inst ?
2022-05-24 08:06:30 +0200 <Inst> haskell
2022-05-24 08:06:39 +0200 <Inst> i'd think i have a good understanding of what a monad is, which i'd say is
2022-05-24 08:06:46 +0200 <Inst> a type which can absorb another type
2022-05-24 08:07:01 +0200 <Inst> and implements lawful <$>, pure, <*>, and >>=
2022-05-24 08:07:10 +0200mattil(~mattil@helsinki.portalify.com)
2022-05-24 08:07:13 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 08:07:36 +0200 <Inst> the internal variation among monads is obscene
2022-05-24 08:08:20 +0200 <Inst> but the only commonality is that there's a type constructor that can take 1 type variable (either is not a monad, either e is)
2022-05-24 08:08:32 +0200 <Inst> <$>, pure, <*>, >>=
2022-05-24 08:10:10 +0200 <[itchyjunk]> hmm absorb other types
2022-05-24 08:10:13 +0200 <[itchyjunk]> not sure what that means
2022-05-24 08:10:30 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 240 seconds)
2022-05-24 08:10:36 +0200srk(~sorki@user/srk) (Ping timeout: 244 seconds)
2022-05-24 08:10:38 +0200Maxdaman1us(~Maxdamant@user/maxdamantus)
2022-05-24 08:10:42 +0200 <[itchyjunk]> but i gotta go for now!
2022-05-24 08:11:00 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-05-24 08:11:37 +0200Maxdamantus(~Maxdamant@user/maxdamantus) (Ping timeout: 260 seconds)
2022-05-24 08:12:21 +0200srk(~sorki@user/srk)
2022-05-24 08:13:06 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-05-24 08:13:30 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-05-24 08:16:50 +0200 <Inst> i'm still unsure
2022-05-24 08:16:53 +0200 <Inst> if anyone wants to play with me
2022-05-24 08:17:32 +0200 <Inst> if we define a monad as containing a type constructor, a structure, and a value
2022-05-24 08:18:17 +0200 <Inst> is the function embedded in the constructor StateT a value or part of the structure? It's technically a value, yes, but if you pure something into it
2022-05-24 08:18:40 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 246 seconds)
2022-05-24 08:18:41 +0200 <Inst> you end up with a \s -> (a,s)
2022-05-24 08:19:49 +0200 <[exa]> Inst: the "value" as a "bindable type of the result of monadic computation" is different from the "value" that actually represents the computation
2022-05-24 08:20:13 +0200 <Inst> yeah tbh the problem is that if you think of monads as sequencing effects and so on, or computations in a context, it's too abstract for me :(
2022-05-24 08:20:22 +0200 <Inst> and probably most people
2022-05-24 08:21:38 +0200 <[exa]> yeah the semantics of "sequencing effects" is already too specialized
2022-05-24 08:22:27 +0200 <[exa]> I imagine "Monad a" as "something that may produce values of type a, but wrapped with some special semantics"
2022-05-24 08:24:03 +0200 <[exa]> such as "a might not even exist" (Maybe), "there might be an error" (Either, Except), "there are multiple a's and user is free to choose" (List, LogicT), "computer needs access to IO actions to actually produce the a" (IO), "a is accompanied with a monoidal log of stuff" (Writer), "the whole computation needs a global parameter" (Reader), etc etc
2022-05-24 08:24:03 +0200shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-05-24 08:24:07 +0200 <Inst> i'm sort of fascinated by this hypothesis, since monads are a Zen / Daoist like incommunicable idea
2022-05-24 08:24:10 +0200 <Inst> given monad curse
2022-05-24 08:24:48 +0200 <Inst> maybe everyone has a different conception of monads, even people who purportedly "grok" monads
2022-05-24 08:24:59 +0200 <[exa]> the main problem of monad tutorial is that Monad does not "exist" as an object, which makes communication to post-OOP programmers really challenging
2022-05-24 08:25:41 +0200 <Inst> it's easier just to declare the function embedded in the state monad as part of the structure, tbh
2022-05-24 08:25:53 +0200 <[exa]> so don't think about it as an object, it's an unifying concept that allows you to write `do` and `<-` in the programs without thinking what exact computation there is
2022-05-24 08:25:53 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 08:26:01 +0200 <Inst> and say proxy x is proxy and the value is just subsumed ala Nothing
2022-05-24 08:26:24 +0200 <Inst> i mean the way i want to think about it is "any data type for which there's a lawful instance of fmap, pure, <*>, >>="
2022-05-24 08:26:48 +0200 <[exa]> there are multiple lawful instances for most of the types though
2022-05-24 08:27:00 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 08:27:13 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 08:28:53 +0200 <[exa]> how's proxy related to that?
2022-05-24 08:29:15 +0200Luj4(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Quit: The Lounge - https://thelounge.chat)
2022-05-24 08:29:25 +0200 <[exa]> also "the function embedded in the state monad" -- part of which structure?
2022-05-24 08:29:35 +0200Luj4(~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb)
2022-05-24 08:29:52 +0200Luj4Luj
2022-05-24 08:32:05 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 258 seconds)
2022-05-24 08:33:10 +0200 <Inst> i mean before i grokked state, i assumed, there were just two things to a monad
2022-05-24 08:33:37 +0200 <Inst> data declaration, implementations of fmap (of which there's only a single lawful instance), pure, <*>, >>=
2022-05-24 08:33:55 +0200 <Inst> structure + methods
2022-05-24 08:34:27 +0200 <Inst> now state / reader
2022-05-24 08:34:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 08:35:02 +0200 <Inst> then you have (->) r, which has no data declaration (iirc) but only instances
2022-05-24 08:35:48 +0200 <[exa]> it has a data declaration, although it's tricky because it's glued to (->)
2022-05-24 08:36:22 +0200 <[exa]> you may imagine there is `data (->) parameter result = ....????....` written somewhere deep in GHC internals :]
2022-05-24 08:37:00 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-24 08:37:13 +0200 <[exa]> `Monad ((->) r)` is an instance for the case if someone would like to glue 2 such functions together with >>
2022-05-24 08:39:12 +0200christiansen(~christian@83-95-137-75-dynamic.dk.customer.tdc.net)
2022-05-24 08:39:33 +0200 <[exa]> luckily, standard ReaderT and Reader have the (->) wrapped in a newtype, you have _roughly_: `newtype Reader r a = Reader (r -> a)`
2022-05-24 08:39:48 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-05-24 08:41:58 +0200 <Inst> also it creates annoyances because I want to read up about the Reader / ReaderT monad
2022-05-24 08:44:13 +0200 <[exa]> the problem there is that many people just want to use ((->) r) as reader because it is super useful, esp with applicatives (`NewStructure <$> getOldStructField1 <*> getOldStructField2 $ oldStructure`), on the other hand it creates this bit of confusion because (->) is suddenly used for several different things
2022-05-24 08:45:38 +0200jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 255 seconds)
2022-05-24 08:48:24 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 08:48:41 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 08:49:11 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-05-24 08:49:54 +0200 <[exa]> btw decomposing this is a nice related exercise:
2022-05-24 08:50:47 +0200 <[exa]> > (drop <> take) 3 "Hello"
2022-05-24 08:50:48 +0200 <lambdabot> "loHel"
2022-05-24 08:53:14 +0200 <Inst> since when have functions had a <> instance?
2022-05-24 08:53:16 +0200 <Inst> my eyes
2022-05-24 08:53:51 +0200 <[exa]> functions that return monoids can be glued together -- you copy argument to both, and glue the results together
2022-05-24 08:53:55 +0200 <Inst> https://stackoverflow.com/questions/44344706/how-do-i-use-a-monoid-instance-of-a-function
2022-05-24 08:54:00 +0200 <[exa]> s/monoids/semigroups/
2022-05-24 08:54:34 +0200echoreply(~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Quit: WeeChat 2.8)
2022-05-24 08:55:02 +0200echoreply(~echoreply@45.32.163.16)
2022-05-24 08:55:07 +0200 <[exa]> (actually I'd say it also admits monoid, you can make `mempty` function as `const mempty`)
2022-05-24 08:56:06 +0200 <Inst> how long has it been sport to instance (-> a) and other function types into typeclasses?
2022-05-24 08:56:21 +0200 <[exa]> well, since forever
2022-05-24 08:57:22 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 08:57:25 +0200 <jackdk> https://typeclasses.com/timeline/a-system-of-constructor-classes Haskell 1.3, maybe?
2022-05-24 08:57:39 +0200 <Inst> also how does that even work? those are (a -> b... oh fuck
2022-05-24 08:57:52 +0200 <Inst> it's valid for (a -> b)
2022-05-24 08:57:55 +0200 <[exa]> you see, it's not very clean (look at the error messages sometime!) but super useful. I'd say that wrapping (->) in newtypes is actually a newer attempt to make the thing fail more gracefully
2022-05-24 08:58:00 +0200 <jackdk> Functor has kind (Type -> Type) -> Constraint
2022-05-24 08:58:00 +0200 <Inst> but (c -> d) can be an a
2022-05-24 08:58:20 +0200 <jackdk> (->) has kind (very roughly, ignoring levity) Type -> Type -> Type
2022-05-24 08:58:29 +0200 <[exa]> Inst: "how does that work" you mean the monoid example or something else?
2022-05-24 08:58:43 +0200 <jackdk> ((->) r) therefore has kind Type -> Type
2022-05-24 08:59:11 +0200 <Inst> * -> * -> *
2022-05-24 09:00:42 +0200 <[exa]> Inst: *->*->* reads "you give it 2 representable Types and get a representable Type"
2022-05-24 09:00:54 +0200jonathanx(~jonathan@c-5eea24de-74736162.cust.telenor.se)
2022-05-24 09:01:24 +0200Infinite(~Infinite@49.39.127.241) (Ping timeout: 252 seconds)
2022-05-24 09:03:43 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:40c3:3bf4:26ef:9b59)
2022-05-24 09:05:29 +0200Ether17(~Ether17@103.217.111.249)
2022-05-24 09:05:32 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575) (Remote host closed the connection)
2022-05-24 09:09:47 +0200Ether17(~Ether17@103.217.111.249) (Client Quit)
2022-05-24 09:11:23 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 09:15:16 +0200mbuf(~Shakthi@31.32.33.168)
2022-05-24 09:15:24 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 258 seconds)
2022-05-24 09:18:52 +0200juri_(~juri@178.63.35.222) (Ping timeout: 246 seconds)
2022-05-24 09:20:45 +0200cfricke(~cfricke@user/cfricke)
2022-05-24 09:25:48 +0200juri_(~juri@178.63.35.222)
2022-05-24 09:27:29 +0200acidjnk(~acidjnk@p200300d0c7068b81f860a70d68b3f398.dip0.t-ipconnect.de)
2022-05-24 09:30:08 +0200juri_(~juri@178.63.35.222) (Remote host closed the connection)
2022-05-24 09:30:37 +0200alp(~alp@user/alp)
2022-05-24 09:31:32 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-24 09:33:27 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 09:33:59 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 09:34:27 +0200Infinite(~Infinite@49.39.127.241)
2022-05-24 09:35:06 +0200vonfry(~user@139.227.167.223)
2022-05-24 09:37:42 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 09:46:00 +0200Feuermagier(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2022-05-24 09:46:54 +0200kuribas(~user@ptr-17d51emj6sz64bjx9i7.18120a2.ip6.access.telenet.be)
2022-05-24 09:49:10 +0200juri_(~juri@178.63.35.222)
2022-05-24 09:49:16 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-24 09:52:09 +0200chomwitt(~chomwitt@2a02:587:dc1e:cc00:f079:d366:2a9:ed7f)
2022-05-24 09:56:21 +0200vonfry(~user@139.227.167.223) (Quit: ERC 5.4 (IRC client for GNU Emacs 28.1))
2022-05-24 09:56:27 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net)
2022-05-24 09:58:17 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 10:00:13 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 10:02:03 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Quit: ccntrq)
2022-05-24 10:02:19 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net)
2022-05-24 10:03:57 +0200zer0bitz(~zer0bitz@2001:2003:f444:8f00:1ddb:ab6a:8605:cb77)
2022-05-24 10:04:16 +0200jonathanx(~jonathan@c-5eea24de-74736162.cust.telenor.se) (Ping timeout: 244 seconds)
2022-05-24 10:04:22 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
2022-05-24 10:04:54 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-24 10:05:00 +0200nate1(~nate@98.45.169.16)
2022-05-24 10:05:56 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575)
2022-05-24 10:07:47 +0200jonathanx(~jonathan@94.234.36.222)
2022-05-24 10:09:57 +0200nate1(~nate@98.45.169.16) (Ping timeout: 244 seconds)
2022-05-24 10:10:10 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:f100:eba8:305a:4575) (Ping timeout: 250 seconds)
2022-05-24 10:10:42 +0200jonathanx_(~jonathan@dyn-5-sc.cdg.chalmers.se)
2022-05-24 10:11:22 +0200 <merijn> representable is an awkward choice of word, as it already comes with connotations from other uses
2022-05-24 10:11:55 +0200 <merijn> Additionally, depending on your POV * can also take types that I wouldn't meaningfully call "representable" (like, is Void representable?)
2022-05-24 10:13:07 +0200jonathanx(~jonathan@94.234.36.222) (Ping timeout: 246 seconds)
2022-05-24 10:15:29 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7590:47:8cf5:145e)
2022-05-24 10:16:30 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-05-24 10:17:24 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 10:18:47 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 10:20:08 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7590:47:8cf5:145e) (Ping timeout: 255 seconds)
2022-05-24 10:20:13 +0200__monty__(~toonn@user/toonn)
2022-05-24 10:20:36 +0200 <[Leary]> It occurs to me that almost all important typeclasses are just Monoid in fancy dress. Semigroup? Half a Monoid. Num? Two Monoids. Category? Indexed Monoid. Applicative? Monoidal Functor (free edition). Alternative? Monoidal Functor (natural edition). Foldable? Monoid homomorphisms (free edition). Traversable? Foldable for Applicative; that's Monoid. Monad? Kleisli composition; Category; Monoid.
2022-05-24 10:21:14 +0200 <[Leary]> I can't believe we let stupid Applicative and stupid Monad keep their stupid laws when we could bask all in their soft monoidal glow.
2022-05-24 10:21:51 +0200zeenk(~zeenk@2a02:2f04:a104:ef00:10:581:f80f:b980)
2022-05-24 10:21:56 +0200eggplant_(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Ping timeout: 255 seconds)
2022-05-24 10:22:00 +0200 <tomsmeding> I suspect that indexed monoid laws for Monad would be less readable than the current monad laws
2022-05-24 10:22:06 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 258 seconds)
2022-05-24 10:22:37 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 10:22:46 +0200 <merijn> [Leary]: It appears you are rediscovering algebra >.>
2022-05-24 10:22:49 +0200turlando(~turlando@user/turlando) (Quit: turlando)
2022-05-24 10:23:25 +0200 <merijn> [Leary]: You can reformulate monad laws more nicely if you use Kleisli fish instead of >>=
2022-05-24 10:23:52 +0200 <merijn> "f >=> return = f = return >=> f"
2022-05-24 10:24:11 +0200 <[Leary]> Yes, that's what I want people to see when they find Monad in the Prelude haddocks.
2022-05-24 10:24:28 +0200turlando(~turlando@93.51.40.51)
2022-05-24 10:24:28 +0200turlando(~turlando@93.51.40.51) (Changing host)
2022-05-24 10:24:28 +0200turlando(~turlando@user/turlando)
2022-05-24 10:24:32 +0200 <merijn> but Kleisli fish is inconvenient to work with most of the time
2022-05-24 10:24:51 +0200 <tomsmeding> haskell appeals, broadly, to two groups of people: algebraicists and programmers
2022-05-24 10:25:07 +0200 <tomsmeding> I think this law reformulation would not be an improvement for the second group :p
2022-05-24 10:26:30 +0200 <[Leary]> It really should unify and simplify things for all, but it's my bias to consider 'abstract' ~ 'simple'.
2022-05-24 10:26:49 +0200 <tomsmeding> abstract is _not_ simple for most people
2022-05-24 10:27:02 +0200 <tomsmeding> well, sometimes it is, if the abstraction is particularly useful to _reason_ about the thing
2022-05-24 10:27:16 +0200 <tomsmeding> monad/monoid/etc. abstractions are super useful
2022-05-24 10:27:21 +0200 <kuribas> merijn: well, people prefer (.) over ($), why not (>=>) over (>>=)?
2022-05-24 10:27:38 +0200 <tomsmeding> but abstracting the laws of them wouldn't carry its weight, I think
2022-05-24 10:28:22 +0200 <tomsmeding> an alternative could be to add a note to the haddocks to mention the monoid-based laws; a note is probably enough to inspire the right ideas into the people that are receptive to them :p
2022-05-24 10:29:13 +0200turlando(~turlando@user/turlando) (Ping timeout: 246 seconds)
2022-05-24 10:29:52 +0200turlando(~turlando@93.51.40.51)
2022-05-24 10:29:52 +0200turlando(~turlando@93.51.40.51) (Changing host)
2022-05-24 10:29:52 +0200turlando(~turlando@user/turlando)
2022-05-24 10:29:52 +0200rodental(~rodental@38.146.5.222)
2022-05-24 10:30:12 +0200 <tomsmeding> I guess the overarching consideration is: will the reformulation of the laws make programmers write better code
2022-05-24 10:30:15 +0200 <tomsmeding> I doubt that
2022-05-24 10:30:43 +0200 <tomsmeding> and the _reference documentation_ of the language should be about empowering programmers
2022-05-24 10:31:26 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-24 10:33:15 +0200 <Philonous> It seems like rust managed to steels Haskell's thunder just by avoiding any mention of graduate math. Haskeller's response: Hold my morphisms, I'ma add more category theory. ;)
2022-05-24 10:33:29 +0200 <Philonous> steal*
2022-05-24 10:34:14 +0200 <kuribas> call it flatMap or linq instead of "Monad", then people are happy :)
2022-05-24 10:34:38 +0200 <kuribas> or "query expression".
2022-05-24 10:34:46 +0200 <tomsmeding> Computation
2022-05-24 10:34:50 +0200 <[Leary]> I feel like it could actually help new Haskellers learn all these super useful abstractions without getting lost in Applicative/Monad/etc tutorial land, since they can see that they're all variations on the same thing, and can understand them in terms of the simple version.
2022-05-24 10:35:59 +0200 <tomsmeding> [Leary]: you may well be right, I don't know. There is an effort ongoing to improve haskell documentation; you could submit a proposal there
2022-05-24 10:36:20 +0200 <kuribas> The main problem is when people use blogposts to learn about these concepts.
2022-05-24 10:36:23 +0200 <kuribas> Or papers.
2022-05-24 10:36:54 +0200 <kuribas> Instead of a proper haskell handbook.
2022-05-24 10:37:06 +0200 <kuribas> Even the shittiest handbook is better than blogposts.
2022-05-24 10:38:35 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 258 seconds)
2022-05-24 10:39:25 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-24 10:39:25 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-24 10:39:25 +0200wroathe(~wroathe@user/wroathe)
2022-05-24 10:40:32 +0200CiaoSen(~Jura@p200300c9571e4b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-05-24 10:40:35 +0200 <tomsmeding> [Leary]: not quite sure what the process is (if there is a real process), but Hecate would be the person to contact
2022-05-24 10:41:30 +0200Guest810(~Guest8@2a02:26f7:cd46:4000:b4f0:3297:ff94:57fe)
2022-05-24 10:41:49 +0200Guest810(~Guest8@2a02:26f7:cd46:4000:b4f0:3297:ff94:57fe) (Client Quit)
2022-05-24 10:42:06 +0200Guest8(~Guest8@2a02:26f7:cd46:4000:b4f0:3297:ff94:57fe)
2022-05-24 10:42:35 +0200 <kuribas> The goal of base haskell reference documentation is not to be beginner friendly, but to be concise and informative.
2022-05-24 10:43:28 +0200akegalj(~akegalj@93.140.42.158)
2022-05-24 10:43:30 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-05-24 10:43:37 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.5)
2022-05-24 10:43:58 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 10:50:02 +0200Guest8(~Guest8@2a02:26f7:cd46:4000:b4f0:3297:ff94:57fe) (Quit: Client closed)
2022-05-24 10:50:29 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
2022-05-24 10:55:45 +0200mattil(~mattil@helsinki.portalify.com) (Remote host closed the connection)
2022-05-24 10:55:59 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-24 10:59:41 +0200ubert(~Thunderbi@2a02:8109:9880:303c:d373:59fe:aee5:a075)
2022-05-24 10:59:57 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-05-24 11:07:39 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-05-24 11:16:43 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-24 11:23:17 +0200Maxdaman1usMaxdamantus
2022-05-24 11:27:33 +0200oo_miguel(~pi@77.252.47.226)
2022-05-24 11:29:05 +0200titibandit(~thibaut@2a00:8a60:c000:1:8a13:bf74:b2:8d47)
2022-05-24 11:29:10 +0200 <oo_miguel> Hello, what makes me wonder: does stackage give any other guarantees then that, the subset of packages "will compile"? I noticed that LTS-18.28 includes pacakges marked as deprecated (on hackage).
2022-05-24 11:29:38 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-05-24 11:29:49 +0200 <merijn> oo_miguel: "we may have run some of the tests too"
2022-05-24 11:31:26 +0200mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2022-05-24 11:31:48 +0200 <oo_miguel> ok thanks
2022-05-24 11:32:16 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 11:34:53 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 11:37:09 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-05-24 11:39:11 +0200polux(~polux@51-15-169-172.rev.poneytelecom.eu) (Remote host closed the connection)
2022-05-24 11:39:12 +0200 <Inst> kuribas : why (.) over ($)?
2022-05-24 11:39:21 +0200 <Inst> is there some performance improvement? . is unpredictable
2022-05-24 11:39:34 +0200 <dminuoso_> No, it's mostly just convention
2022-05-24 11:39:34 +0200 <Inst> and often ends with a block . . . . $ data
2022-05-24 11:39:44 +0200 <dminuoso_> There's some practical considerations, but its really just a convention.
2022-05-24 11:40:08 +0200 <kuribas> Inst: it's to avoid naming a single variable, which is very, very difficult.
2022-05-24 11:40:09 +0200 <Inst> at least, the main advantage is that . works when you're stuffing it into a name
2022-05-24 11:40:20 +0200 <dminuoso_> Inst: yup, that's the sole reason.
2022-05-24 11:40:27 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-24 11:40:30 +0200 <dminuoso_> also (.) is visually more pleasing than ($) I guess
2022-05-24 11:40:36 +0200 <Inst> also can we agree to rename variables names in Haskell?
2022-05-24 11:40:44 +0200 <Inst> or are names dangerous terms?
2022-05-24 11:41:35 +0200 <dminuoso_> A variable is just a particular kind of name. Im not sure what benefits you gain from using a more overloaded name.
2022-05-24 11:41:44 +0200 <Inst> *term
2022-05-24 11:42:05 +0200 <dminuoso_> If you intend to differentiate it from "variables from traditional programming languages", rename them to mutable stores/references instead?
2022-05-24 11:42:45 +0200polux(~polux@51-15-169-172.rev.poneytelecom.eu)
2022-05-24 11:43:42 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.5)
2022-05-24 11:43:42 +0200 <merijn> Are we gonna rename variables in math too? >.>
2022-05-24 11:45:53 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 11:46:15 +0200 <Inst> hahahaha
2022-05-24 11:46:22 +0200 <Inst> does term work?
2022-05-24 11:46:26 +0200 <Inst> term level vs type level
2022-05-24 11:47:31 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 11:47:40 +0200 <merijn> A term refers to any syntactically valid expression
2022-05-24 11:48:01 +0200 <merijn> So "a" is a term, but so is "1 + 1" or "map f [1..10]"
2022-05-24 11:48:30 +0200 <Franciman> but not "map :: (a -> b) -> [a] -> [b]"
2022-05-24 11:49:01 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 11:49:07 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 11:49:45 +0200 <merijn> I mean, add some parens and it would be
2022-05-24 11:49:47 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 260 seconds)
2022-05-24 11:50:03 +0200 <merijn> > (map :: (a -> b) -> [a] -> [b]) (+1) [1..5]
2022-05-24 11:50:06 +0200 <lambdabot> [2,3,4,5,6]
2022-05-24 11:50:11 +0200 <merijn> Looks like a valid term to me!
2022-05-24 11:50:42 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 11:51:43 +0200 <kritzefitz> > let f = map :: (a -> b) -> [a] -> [b] in f (+1) [1..5]
2022-05-24 11:51:46 +0200 <lambdabot> [2,3,4,5,6]
2022-05-24 11:52:05 +0200 <kritzefitz> Even works without parens in the right context.
2022-05-24 11:52:26 +0200 <Philonous> dminuoso_, I thought they are conventionally called "reference cell"
2022-05-24 11:53:06 +0200 <Philonous> Hmm, google doesn't find it, so perhaps not.
2022-05-24 11:54:03 +0200 <Franciman> > map :: (a -> b) -> [a] -> [b]
2022-05-24 11:54:05 +0200 <lambdabot> error:
2022-05-24 11:54:05 +0200 <lambdabot> • No instance for (Typeable a0)
2022-05-24 11:54:05 +0200 <lambdabot> arising from a use of ‘show_M28235964043627188638’
2022-05-24 11:54:12 +0200 <Franciman> ?? ..
2022-05-24 11:54:12 +0200 <lambdabot> ..
2022-05-24 11:54:24 +0200albertoCCz(~albertoCC@nat-cvi-a-5086.ugr.es)
2022-05-24 11:54:25 +0200 <Franciman> oh
2022-05-24 11:55:05 +0200 <Franciman> so type signature assertions are expressions cool
2022-05-24 11:55:16 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-05-24 11:55:29 +0200 <Franciman> when i write `myFunc :: its-type` it's syntactically the same as writing `3`
2022-05-24 11:55:35 +0200 <Franciman> ?
2022-05-24 11:56:11 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-05-24 11:56:17 +0200 <merijn> Franciman: More like "(foo :: bar)" is equivalent to "foo" in an expression context
2022-05-24 11:56:31 +0200 <merijn> (well, foo with a potentially restricted type, I suppose)
2022-05-24 11:58:13 +0200 <Franciman> skewy
2022-05-24 11:58:15 +0200 <Franciman> i see
2022-05-24 11:58:36 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-24 11:59:14 +0200Infinite(~Infinite@49.39.127.241) (Ping timeout: 252 seconds)
2022-05-24 12:00:40 +0200albertoCCz(~albertoCC@nat-cvi-a-5086.ugr.es) (Remote host closed the connection)
2022-05-24 12:01:42 +0200hsw(~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net)
2022-05-24 12:03:00 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 12:04:13 +0200ubert(~Thunderbi@2a02:8109:9880:303c:d373:59fe:aee5:a075) (Remote host closed the connection)
2022-05-24 12:04:25 +0200ubert(~Thunderbi@2a02:8109:9880:303c:a9d1:8889:83c0:913)
2022-05-24 12:06:27 +0200 <oo_miguel> I just came across this: https://hackage.haskell.org/packages/preferred-versions Is there some elegant way to check if my stack project is using libraries within this ranges, and warn me otherweise?
2022-05-24 12:08:14 +0200y04nn(~y04nn@2001:ac8:28:95::a17e)
2022-05-24 12:11:00 +0200CiaoSen(~Jura@p200300c9571e4b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-24 12:14:27 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-05-24 12:15:20 +0200xff0x(~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 255 seconds)
2022-05-24 12:16:19 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-05-24 12:19:23 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-24 12:23:19 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 12:24:54 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 12:26:31 +0200zaquest(~notzaques@5.130.79.72)
2022-05-24 12:27:51 +0200feliix42_(~felix@gibbs.uberspace.de) (Read error: Connection reset by peer)
2022-05-24 12:27:51 +0200AWizzArd(~code@gehrels.uberspace.de) (Read error: Connection reset by peer)
2022-05-24 12:28:05 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 12:29:47 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 240 seconds)
2022-05-24 12:29:50 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 12:30:22 +0200CiaoSen(~Jura@p200300c9571e4b002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-05-24 12:30:43 +0200feliix42(~felix@gibbs.uberspace.de)
2022-05-24 12:32:18 +0200cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-05-24 12:33:20 +0200AWizzArd(~code@gehrels.uberspace.de)
2022-05-24 12:34:55 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-05-24 12:39:16 +0200ubert(~Thunderbi@2a02:8109:9880:303c:a9d1:8889:83c0:913) (Ping timeout: 244 seconds)
2022-05-24 12:43:28 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-05-24 12:43:29 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 12:51:40 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 12:56:13 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 246 seconds)
2022-05-24 12:57:24 +0200sabry(~sabry@197.37.57.10)
2022-05-24 12:58:29 +0200xff0x(~xff0x@b133147.ppp.asahi-net.or.jp)
2022-05-24 12:58:54 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-05-24 13:03:19 +0200bwe(~bwe@2a01:4f8:1c1c:4878::2) (Remote host closed the connection)
2022-05-24 13:06:58 +0200polux(~polux@51-15-169-172.rev.poneytelecom.eu) (Remote host closed the connection)
2022-05-24 13:07:40 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ad75:2aef:bfae:2e4b)
2022-05-24 13:08:42 +0200bwe(~bwe@2a01:4f8:1c1c:4878::2)
2022-05-24 13:09:33 +0200polux(~polux@51-15-169-172.rev.poneytelecom.eu)
2022-05-24 13:11:38 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 13:14:47 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-05-24 13:20:44 +0200acidjnk(~acidjnk@p200300d0c7068b81f860a70d68b3f398.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2022-05-24 13:21:01 +0200 <[exa]> merijn: btw is there any better "kinda intuitive" word choice instead of representable?
2022-05-24 13:22:08 +0200 <merijn> Some people use "concrete type", but I also dislike, so I guess the answer is "no"? :p
2022-05-24 13:22:30 +0200 <merijn> https://gist.github.com/merijn/796b8e041885df870fbb53b7191644b6 and all that
2022-05-24 13:22:53 +0200 <[exa]> "actual type, not just Type"
2022-05-24 13:23:11 +0200 <dminuoso_> I like concrete types. There is normal concrete, reinforced concrete, precast concrete, air entrained concrete..
2022-05-24 13:23:22 +0200 <merijn> I dislike TypInType (and thus) Type, too :p
2022-05-24 13:23:25 +0200 <[exa]> the gist recommends saying monotype?
2022-05-24 13:23:56 +0200 <merijn> It definitely does not?
2022-05-24 13:24:01 +0200 <[exa]> "something that can have values" <- broken too
2022-05-24 13:24:06 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-24 13:24:37 +0200 <merijn> [exa]: No, that is well-defined in haskell
2022-05-24 13:24:48 +0200 <[exa]> next time I'll go "yeah the tangible *type* you know which one I mean *wink wink*"
2022-05-24 13:25:03 +0200 <[exa]> merijn: works with Void?
2022-05-24 13:25:12 +0200 <merijn> [exa]: Void has a value in Haskell
2022-05-24 13:25:14 +0200y04nn(~y04nn@2001:ac8:28:95::a17e) (Ping timeout: 272 seconds)
2022-05-24 13:25:15 +0200 <merijn> undefined
2022-05-24 13:25:16 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 13:25:17 +0200 <dminuoso_> [exa]: Dont conflate necessity with sufficiency
2022-05-24 13:25:21 +0200 <[exa]> ok I'm happy
2022-05-24 13:25:26 +0200 <dminuoso_> Ah but yeah
2022-05-24 13:25:37 +0200 <tdammers> depends which side of that fast-and-loose fence you're looking from
2022-05-24 13:25:39 +0200 <[exa]> "valuable types" it is. :D
2022-05-24 13:25:43 +0200 <dminuoso_> Even if we dont consider bottom, its still correct
2022-05-24 13:25:57 +0200z0k(~z0k@39.40.43.194)
2022-05-24 13:26:26 +0200 <merijn> Ignoring non-Haskell extensions like levity and unboxed types, all values have a type of kind * and all types of kind * are inhabitated (i.e. have a value), even if that value is only bottom
2022-05-24 13:26:27 +0200 <dminuoso_> Sometimes you hear people saying that * is the kind of habitable (not necessarily habitated) types
2022-05-24 13:27:17 +0200 <[exa]> hm habitable/inhabited is actually good, will use that
2022-05-24 13:27:17 +0200 <[exa]> thanks :]
2022-05-24 13:27:38 +0200 <merijn> [exa]: It is, because that at least has an unambiguous definition :)
2022-05-24 13:28:10 +0200 <[exa]> true
2022-05-24 13:29:08 +0200 <dminuoso_> From an implementation point of view, they are all considered inhabited, including bottom, which is what we have the DataKind'ed RuntimeRep for
2022-05-24 13:30:07 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2022-05-24 13:30:18 +0200 <dminuoso_> So you have `type Type = TYPE LiftedRep` with `data TYPE (a :: RuntimeRep)`
2022-05-24 13:30:42 +0200dminuoso_idly ponders about the irony of writing type three times in a row in `type Type = TYPE ...`
2022-05-24 13:33:27 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-05-24 13:37:02 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-24 13:37:06 +0200sabry(~sabry@197.37.57.10) (Quit: Client closed)
2022-05-24 13:39:05 +0200christiansen(~christian@83-95-137-75-dynamic.dk.customer.tdc.net) (Quit: christiansen)
2022-05-24 13:39:16 +0200christiansen(~christian@83-95-137-75-dynamic.dk.customer.tdc.net)
2022-05-24 13:39:21 +0200 <jackdk> At least we don't have t@ype
2022-05-24 13:40:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-24 13:41:26 +0200akegalj(~akegalj@93.140.42.158) (Quit: leaving)
2022-05-24 13:50:08 +0200acidjnk(~acidjnk@p200300d0c7068b816dc0927526e38c9a.dip0.t-ipconnect.de)
2022-05-24 13:52:07 +0200acidjnk(~acidjnk@p200300d0c7068b816dc0927526e38c9a.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2022-05-24 13:54:12 +0200acidjnk(~acidjnk@p200300d0c7068b81149b5d5938d07897.dip0.t-ipconnect.de)
2022-05-24 13:55:17 +0200srk-(~sorki@user/srk)
2022-05-24 13:56:23 +0200srk|(~sorki@user/srk)
2022-05-24 13:57:56 +0200srk(~sorki@user/srk) (Ping timeout: 255 seconds)
2022-05-24 13:58:54 +0200mokee(~mokee@37.228.215.190)
2022-05-24 13:59:31 +0200srk|srk
2022-05-24 13:59:34 +0200srk-(~sorki@user/srk) (Ping timeout: 246 seconds)
2022-05-24 14:06:30 +0200nate1(~nate@98.45.169.16)
2022-05-24 14:11:20 +0200nate1(~nate@98.45.169.16) (Ping timeout: 258 seconds)
2022-05-24 14:15:30 +0200mima(~mmh@net-93-148-81-31.cust.dsl.teletu.it)
2022-05-24 14:20:37 +0200kenaryn(~aurele@89-88-44-27.abo.bbox.fr)
2022-05-24 14:29:03 +0200benin2(~benin@2401:4900:2323:425e:4253:4476:82af:eac4)
2022-05-24 14:31:35 +0200benin(~benin@183.82.30.29) (Ping timeout: 260 seconds)
2022-05-24 14:31:36 +0200benin2benin
2022-05-24 14:37:48 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 14:42:02 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 14:45:58 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-05-24 14:52:05 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-05-24 14:54:27 +0200polyphem(~polyphem@2a00:20:c014:d33:d5f0:b25b:c4f6:506)
2022-05-24 15:00:42 +0200benin9(~benin@183.82.178.251)
2022-05-24 15:02:01 +0200sabry(~sabry@197.37.57.10)
2022-05-24 15:02:44 +0200benin(~benin@2401:4900:2323:425e:4253:4476:82af:eac4) (Ping timeout: 255 seconds)
2022-05-24 15:02:44 +0200benin9benin
2022-05-24 15:10:34 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.5)
2022-05-24 15:11:54 +0200acidjnk(~acidjnk@p200300d0c7068b81149b5d5938d07897.dip0.t-ipconnect.de) (Ping timeout: 258 seconds)
2022-05-24 15:12:35 +0200sabry(~sabry@197.37.57.10) (Quit: Client closed)
2022-05-24 15:16:36 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 15:20:06 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-05-24 15:21:36 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 15:22:54 +0200 <kaol> I think I need to update the old Java joke: Now I have a ProblemProfunctor.
2022-05-24 15:23:26 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-24 15:25:15 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 15:26:14 +0200mcglk(~mcglk@131.191.49.120)
2022-05-24 15:26:29 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-05-24 15:28:10 +0200dcleonarski(~user@2804:d51:479c:4300:c312:71c1:ee9b:86ea)
2022-05-24 15:28:25 +0200cheater(~Username@user/cheater) (Ping timeout: 248 seconds)
2022-05-24 15:28:47 +0200cheater(~Username@user/cheater)
2022-05-24 15:29:42 +0200raym(~raym@user/raym) (Ping timeout: 260 seconds)
2022-05-24 15:29:43 +0200polyphem(~polyphem@2a00:20:c014:d33:d5f0:b25b:c4f6:506) (Read error: Connection reset by peer)
2022-05-24 15:29:52 +0200Pickchea(~private@user/pickchea)
2022-05-24 15:30:24 +0200raym(~raym@user/raym)
2022-05-24 15:31:10 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Quit: Leaving)
2022-05-24 15:32:01 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-24 15:32:01 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-24 15:32:01 +0200wroathe(~wroathe@user/wroathe)
2022-05-24 15:33:25 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2022-05-24 15:36:20 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 15:44:23 +0200vpan(~0@212.117.1.172)
2022-05-24 15:44:54 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-24 15:50:59 +0200mbuf(~Shakthi@31.32.33.168) (Quit: Leaving)
2022-05-24 15:55:26 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-24 15:56:38 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 244 seconds)
2022-05-24 15:57:29 +0200mc47(~mc47@xmonad/TheMC47)
2022-05-24 16:00:01 +0200mbuf(~Shakthi@31.32.33.168)
2022-05-24 16:03:21 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-05-24 16:03:24 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-24 16:04:40 +0200Sgeo(~Sgeo@user/sgeo)
2022-05-24 16:05:38 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 16:06:27 +0200alp(~alp@user/alp) (Ping timeout: 260 seconds)
2022-05-24 16:10:33 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-05-24 16:11:12 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:40c3:3bf4:26ef:9b59) (Quit: WeeChat 2.8)
2022-05-24 16:14:26 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-05-24 16:15:01 +0200jonathanx_(~jonathan@dyn-5-sc.cdg.chalmers.se) (Remote host closed the connection)
2022-05-24 16:23:44 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 16:25:40 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 16:30:10 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-05-24 16:31:18 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 16:33:53 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-24 16:36:17 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 16:36:42 +0200dcleonarski(~user@2804:d51:479c:4300:c312:71c1:ee9b:86ea) (Remote host closed the connection)
2022-05-24 16:38:44 +0200coot(~coot@213.134.190.95)
2022-05-24 16:38:52 +0200zebrag(~chris@user/zebrag)
2022-05-24 16:39:16 +0200shriekingnoise(~shrieking@201.231.16.156)
2022-05-24 16:40:06 +0200coot(~coot@213.134.190.95) (Client Quit)
2022-05-24 16:40:41 +0200coot(~coot@213.134.190.95)
2022-05-24 16:40:50 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 255 seconds)
2022-05-24 16:41:08 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-24 16:41:40 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-05-24 16:44:15 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 16:45:03 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-05-24 16:47:40 +0200jonathanx(~jonathan@c-5eea24de-74736162.cust.telenor.se)
2022-05-24 16:48:04 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds)
2022-05-24 16:49:24 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-24 16:49:37 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 16:50:48 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2022-05-24 16:51:32 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 16:52:35 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 16:53:49 +0200jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-05-24 16:56:43 +0200jonathanx(~jonathan@c-5eea24de-74736162.cust.telenor.se) (Ping timeout: 256 seconds)
2022-05-24 17:00:42 +0200Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2022-05-24 17:01:27 +0200titibandit(~thibaut@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Quit: Leaving.)
2022-05-24 17:01:57 +0200APic(apic@apic.name) (Quit: Boot tut gut™.)
2022-05-24 17:02:26 +0200christiansen(~christian@83-95-137-75-dynamic.dk.customer.tdc.net) (Ping timeout: 255 seconds)
2022-05-24 17:02:45 +0200Guest5451(~Guest54@132.208.12.88)
2022-05-24 17:08:03 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-05-24 17:09:56 +0200mvk(~mvk@2607:fea8:5ce3:8500::ba9a)
2022-05-24 17:12:04 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 17:17:47 +0200noctux(~noctux@user/noctux) (Read error: Connection reset by peer)
2022-05-24 17:17:47 +0200mbuf(~Shakthi@31.32.33.168) (Quit: Leaving)
2022-05-24 17:18:01 +0200noctux(~noctux@user/noctux)
2022-05-24 17:22:37 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 258 seconds)
2022-05-24 17:23:09 +0200APic(apic@apic.name)
2022-05-24 17:23:59 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-24 17:25:37 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-05-24 17:26:02 +0200shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net)
2022-05-24 17:26:13 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 17:27:29 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 17:27:46 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 17:32:10 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 17:33:34 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 17:34:09 +0200 <romes[m]> What could one say on linear vs hmatrix
2022-05-24 17:35:44 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
2022-05-24 17:35:50 +0200justsomeguy(~justsomeg@user/justsomeguy)
2022-05-24 17:36:25 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 258 seconds)
2022-05-24 17:37:39 +0200myme(~myme@2a01:799:d5a:cd00:b525:9c95:fca0:da0b) (Ping timeout: 240 seconds)
2022-05-24 17:38:11 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 17:38:45 +0200myme(~myme@2a01:799:d5a:cd00:ca17:d4bb:5fc8:9461)
2022-05-24 17:39:19 +0200cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-05-24 17:39:23 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 17:39:52 +0200Guest5451(~Guest54@132.208.12.88) (Ping timeout: 252 seconds)
2022-05-24 17:39:59 +0200cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-05-24 17:40:01 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 17:40:44 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 17:40:57 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-05-24 17:44:25 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 17:44:34 +0200 <romes[m]> Additionally: When compiling splitmix with ghc-9.2 I get this error:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/9de0ac94fc5c6309a2cd004b3d7c4200b304…)
2022-05-24 17:44:55 +0200 <romes[m]> How would one go about fixing this?
2022-05-24 17:45:34 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 17:49:00 +0200seriously_pc(~seriously@159.53.46.142)
2022-05-24 17:49:36 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 17:49:50 +0200 <c_wraith> what os are you on?
2022-05-24 17:49:59 +0200 <c_wraith> and hardware, for that matter....
2022-05-24 17:50:18 +0200 <romes[m]> macOS Intel 12.3.1
2022-05-24 17:50:57 +0200slack1256(~slack1256@191.126.99.64)
2022-05-24 17:53:18 +0200searemind(~u0_a2289@122.161.50.103)
2022-05-24 17:53:57 +0200 <slack1256> Now we will have OverloadedRecordDot, will you change the name of your accessor to be shorter? Previous advice was to prefix accessor with the type name or initial. This meant having declarations as `data User = User { userId :: Int, uAge :: Int }`. Is there still value on writing them like that with this new extension?
2022-05-24 17:54:35 +0200 <geekosaur> not everyone likes OverloadedRecordDot
2022-05-24 17:55:06 +0200 <slack1256> Apart from that.
2022-05-24 17:56:34 +0200 <tdammers> like many other GHC extensions, this one makes the language "bigger", which may add cognitive overhead - that's the core thing behind the "simple haskell" "movement"
2022-05-24 17:57:19 +0200 <slack1256> I know you guys probably have an axe to grind and are not happy about the extension.
2022-05-24 17:57:22 +0200 <c_wraith> slack1256: no. now that we have OverloadedRecordFields I will change the name of my accessors to be short.
2022-05-24 17:57:34 +0200 <c_wraith> slack1256: And I will never touch any sort of record dots
2022-05-24 17:58:00 +0200 <c_wraith> Well. DuplicateRecordFields is actually the relevant one
2022-05-24 17:58:16 +0200 <c_wraith> But other extensions make it actually usable
2022-05-24 17:58:30 +0200 <c_wraith> like OverloadedLabels
2022-05-24 17:58:57 +0200 <tdammers> also keep in mind that overloaded record dots effectively introduce type variables, and "too many" type variables (including implicit ones like these) means that you may need to explicitly annotate types in inconvenient spots, which destroys the conciseness advantage you might have gotten otherwise
2022-05-24 17:58:59 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2022-05-24 17:59:21 +0200 <romes[m]> tdammers: I wouldn't say it adds cognitive overhead; I think being able to use the same name is what one would expect at first, but only later realizes isn't possible, I know I tried at first to use the same name for two different things, only to get an error short after
2022-05-24 18:00:09 +0200 <tdammers> romes[m]: the problem is that it's not 100% transparent - to reliably use it in all use cases, you have to understand how it is really sugar on top of HasField, so you kind of have to know how that works
2022-05-24 18:00:28 +0200 <romes[m]> I see :)
2022-05-24 18:00:49 +0200 <tdammers> you won't run into it with trivial examples, but when your project grows bigger, and you start piling up a couple abstractions and generalizations, it might come and bite you
2022-05-24 18:01:14 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 18:01:20 +0200 <c_wraith> my objection to all this record dot stuff is that optics/lenses work better. Record dot stuff is a misguided attempt to prevent people coming in from other languages from having to learn anything.
2022-05-24 18:01:31 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 18:01:48 +0200 <yushyin> NoFieldSelectors + NamedFieldPuns + RecordWildCards will get you quite far, even without OverloadedRecordDot
2022-05-24 18:02:01 +0200seriously_pc38(~seriously@159.53.110.217)
2022-05-24 18:02:24 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-05-24 18:05:54 +0200seriously_pc(~seriously@159.53.46.142) (Ping timeout: 252 seconds)
2022-05-24 18:07:02 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-05-24 18:08:01 +0200nate1(~nate@98.45.169.16)
2022-05-24 18:09:10 +0200Nunci(~Nunci@2a02:a31b:3f:a400:e9a4:4a8d:7641:da1)
2022-05-24 18:10:09 +0200Nunci(~Nunci@2a02:a31b:3f:a400:e9a4:4a8d:7641:da1) (Client Quit)
2022-05-24 18:12:30 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 18:13:15 +0200nate1(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-05-24 18:14:18 +0200[_](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-24 18:15:20 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 255 seconds)
2022-05-24 18:19:40 +0200CiaoSen(~Jura@p200300c9571e4b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-24 18:23:36 +0200searemind(~u0_a2289@122.161.50.103) (Remote host closed the connection)
2022-05-24 18:25:55 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 246 seconds)
2022-05-24 18:28:47 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
2022-05-24 18:29:44 +0200econo(uid147250@user/econo)
2022-05-24 18:32:35 +0200sabry(~sabry@197.37.57.10)
2022-05-24 18:35:51 +0200seriously_pc38(~seriously@159.53.110.217) (Quit: Client closed)
2022-05-24 18:36:27 +0200ec(~ec@gateway/tor-sasl/ec)
2022-05-24 18:37:01 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2022-05-24 18:38:12 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 18:39:21 +0200king_gs(~Thunderbi@187.201.97.18)
2022-05-24 18:44:42 +0200jollygood2(~bc8147f2@199.204.85.195)
2022-05-24 18:44:49 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 18:46:04 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411)
2022-05-24 18:47:55 +0200dennilo(~dennilo@88.245.33.141)
2022-05-24 18:48:00 +0200dennilo(~dennilo@88.245.33.141) ()
2022-05-24 18:49:32 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Ping timeout: 255 seconds)
2022-05-24 18:49:52 +0200 <geekosaur> aaaand there's ghc 9.4.1 alpha2
2022-05-24 18:50:11 +0200 <romes[m]> Congrats! :)
2022-05-24 18:51:29 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-24 18:52:04 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2022-05-24 18:54:33 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 18:54:40 +0200 <maerwald> is there a good tutorial on how to build an interpolated quasiquoter?
2022-05-24 18:58:40 +0200alp(~alp@user/alp)
2022-05-24 18:59:20 +0200benin(~benin@183.82.178.251) (Ping timeout: 260 seconds)
2022-05-24 18:59:48 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 276 seconds)
2022-05-24 19:02:32 +0200 <maerwald> geekosaur: and the bindist is still defunct :D
2022-05-24 19:03:13 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 19:03:40 +0200 <geekosaur> https://downloads.haskell.org/ghc/9.4.1-alpha2/ ?
2022-05-24 19:03:43 +0200benin(~benin@183.82.204.153)
2022-05-24 19:04:02 +0200 <geekosaur> unless you mean it's broken somehow; it seems to be there and fairly complete to me
2022-05-24 19:04:24 +0200 <maerwald> yes, DESTDIR is not honoured
2022-05-24 19:04:29 +0200 <geekosaur> oh
2022-05-24 19:04:30 +0200sabry(~sabry@197.37.57.10) (Quit: Client closed)
2022-05-24 19:04:50 +0200 <maerwald> apparently this was not backported, so now I can manually fix 10 bindists again
2022-05-24 19:05:06 +0200 <geekosaur> wheee
2022-05-24 19:05:25 +0200 <sm> GHC devs should add maerwald to their release test suite
2022-05-24 19:05:34 +0200 <sm> g'day all
2022-05-24 19:05:38 +0200 <geekosaur> go add your patch to the milestone so it gets backported?
2022-05-24 19:05:52 +0200 <geekosaur> ohai
2022-05-24 19:08:13 +0200vpan(~0@212.117.1.172) (Quit: Leaving.)
2022-05-24 19:09:08 +0200king_gs(~Thunderbi@187.201.97.18) (Read error: Connection reset by peer)
2022-05-24 19:10:27 +0200 <Bulby[m]> how do I say `Foo <$> ("someprefix" <>) foo` correctly
2022-05-24 19:12:31 +0200king_gs(~Thunderbi@187.201.97.18)
2022-05-24 19:12:49 +0200 <Bulby[m]> given it's a Monad
2022-05-24 19:14:07 +0200 <Bulby[m]> would it be
2022-05-24 19:14:07 +0200 <Bulby[m]> `Foo . ("someprefix" <>) <$> foo` ?
2022-05-24 19:14:25 +0200Guest54(~Guest54@132.208.12.88)
2022-05-24 19:17:11 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 19:17:34 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 19:20:44 +0200gawen(~gawen@user/gawen) (Quit: cya)
2022-05-24 19:22:04 +0200gawen(~gawen@user/gawen)
2022-05-24 19:22:20 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 19:28:35 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-05-24 19:28:58 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 19:30:04 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 19:31:21 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection)
2022-05-24 19:31:42 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-05-24 19:32:49 +0200Guest54(~Guest54@132.208.12.88) (Quit: Client closed)
2022-05-24 19:34:43 +0200 <lyxia> that looks like a good thing to try
2022-05-24 19:35:21 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 19:35:38 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 19:37:53 +0200jollygood2(~bc8147f2@199.204.85.195) (Quit: CGI:IRC (EOF))
2022-05-24 19:38:03 +0200jollygood2(~bc8147f2@199.204.85.195)
2022-05-24 19:42:36 +0200vysn(~vysn@user/vysn)
2022-05-24 19:44:10 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 19:45:21 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-24 19:52:49 +0200lagooned(~lagooned@108-208-149-42.lightspeed.hstntx.sbcglobal.net)
2022-05-24 19:52:49 +0200vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2022-05-24 19:53:10 +0200 <monochrom> I might even start with `(\x -> Foo ("someprefix" <> x)) <$> foo` for beginners.
2022-05-24 19:54:45 +0200 <Bulby[m]> HAHAH
2022-05-24 19:54:57 +0200 <Bulby[m]> some days i'm beginner somedays i'm decent
2022-05-24 19:55:36 +0200 <geekosaur> I think that applies to all of us, if we're being honest :)
2022-05-24 19:58:57 +0200 <Bulby[m]> I work with polysemy (not well) then forget how fmap works 🙃
2022-05-24 20:00:08 +0200Adam_(uid555638@id-555638.lymington.irccloud.com)
2022-05-24 20:05:38 +0200ubert(~Thunderbi@2a02:8109:9880:303c:ad75:2aef:bfae:2e4b) (Remote host closed the connection)
2022-05-24 20:05:39 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 20:06:02 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 255 seconds)
2022-05-24 20:06:10 +0200Midjak(~Midjak@82.66.147.146)
2022-05-24 20:06:50 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 20:11:53 +0200king_gs(~Thunderbi@187.201.97.18) (Read error: Connection reset by peer)
2022-05-24 20:12:34 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
2022-05-24 20:12:50 +0200king_gs(~Thunderbi@187.201.97.18)
2022-05-24 20:14:54 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-24 20:18:34 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 20:20:35 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-05-24 20:21:39 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 20:24:25 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 20:40:20 +0200Vajb(~Vajb@2001:999:42:1446:8c2:e3f9:b580:2e45) (Ping timeout: 272 seconds)
2022-05-24 20:40:34 +0200Vajb(~Vajb@2001:999:600:879a:e69c:7638:2849:8a14)
2022-05-24 20:42:41 +0200alp_(~alp@user/alp)
2022-05-24 20:43:46 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 20:44:56 +0200alp(~alp@user/alp) (Ping timeout: 244 seconds)
2022-05-24 20:45:34 +0200king_gs(~Thunderbi@187.201.97.18) (Quit: king_gs)
2022-05-24 20:47:15 +0200[_][itchyjunk]
2022-05-24 20:48:30 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2022-05-24 20:49:22 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2022-05-24 20:54:58 +0200agumonkey(~user@88.163.231.79)
2022-05-24 20:55:34 +0200Chai-T-Rex(~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds)
2022-05-24 20:56:09 +0200thonoht[m](~thonohtma@2001:470:69fc:105::d7be)
2022-05-24 20:58:36 +0200Chai-T-Rex(~ChaiTRex@user/chaitrex)
2022-05-24 20:58:36 +0200Vajb(~Vajb@2001:999:600:879a:e69c:7638:2849:8a14) (Read error: Connection reset by peer)
2022-05-24 20:59:00 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-05-24 20:59:12 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 21:00:02 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-24 21:02:17 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 255 seconds)
2022-05-24 21:02:32 +0200sabry(~sabry@197.37.57.10)
2022-05-24 21:02:56 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer)
2022-05-24 21:03:34 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 21:03:52 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-24 21:04:03 +0200vysn(~vysn@user/vysn) (Ping timeout: 244 seconds)
2022-05-24 21:04:16 +0200LukeHoersten(~LukeHoers@user/lukehoersten)
2022-05-24 21:04:47 +0200LukeHoersten(~LukeHoers@user/lukehoersten) (Client Quit)
2022-05-24 21:07:26 +0200mokee(~mokee@37.228.215.190) (Quit: off)
2022-05-24 21:08:37 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 21:09:41 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-24 21:10:40 +0200ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2022-05-24 21:11:55 +0200Guest49(~Guest49@105.112.44.177)
2022-05-24 21:12:12 +0200 <Guest49> Hello all
2022-05-24 21:12:25 +0200 <geekosaur> hi
2022-05-24 21:13:09 +0200 <Guest49> I want to write a simple stack based vm in haskell that just supports creating a variable, addition and multiplicatoin, could I please get some pointers on how to start ?
2022-05-24 21:15:00 +0200 <Guest49> I have a format for the Opcodes already
2022-05-24 21:15:10 +0200notzmv(~zmv@user/notzmv)
2022-05-24 21:17:35 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-05-24 21:18:28 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds)
2022-05-24 21:18:46 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 21:22:25 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 21:24:49 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 21:25:18 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-05-24 21:25:39 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 21:25:52 +0200 <int-e> Do you have any input or output? Any interaction with the "real world"?
2022-05-24 21:27:42 +0200 <int-e> I mean this could be as simple as a recursive function taking a stack (a list of values), a value store (mapping variables to their values, Data.Map is your friend here), a program (list? vector or array?), and probably an instruction pointer as arguments and returning whatever final result you desire.
2022-05-24 21:28:20 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-24 21:28:43 +0200 <int-e> or as difficult as a monad transformer stack that adds a reader for immutable parts, state for input, stack, and variables, and a writer for output... or a monad transformer on top of IO for direct interaction with the real world.
2022-05-24 21:28:58 +0200 <int-e> So it's really hard to answer this generically.
2022-05-24 21:29:17 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Ping timeout: 255 seconds)
2022-05-24 21:29:46 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 21:31:00 +0200 <EvanR> OpCode -> VM -> VM
2022-05-24 21:31:09 +0200 <EvanR> write a function with this type
2022-05-24 21:31:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-24 21:31:30 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-24 21:31:30 +0200wroathe(~wroathe@user/wroathe)
2022-05-24 21:31:35 +0200 <Guest49> int-e No I do not have any interactoin with the real world.
2022-05-24 21:32:17 +0200 <EvanR> from what it sounds like, your VM is like... a stack. (a list)
2022-05-24 21:32:24 +0200 <Guest49> Yes it is
2022-05-24 21:33:23 +0200 <EvanR> so case analysis on the OpCode, do something with the VM
2022-05-24 21:33:33 +0200 <EvanR> like push, pop, pop twice and push the answer, etc
2022-05-24 21:33:45 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 21:33:56 +0200 <Hecate> I should write a VM with an instruction set similar to that of RISCV
2022-05-24 21:34:14 +0200 <maerwald> too much work
2022-05-24 21:34:49 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 21:34:49 +0200 <maerwald> programming sucks... get a rice pudding and a good movie instead
2022-05-24 21:35:01 +0200 <Guest49> EvanR and int-e Thanks lemme think and try something out , Ill come back with more questions if I have
2022-05-24 21:35:04 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-05-24 21:36:35 +0200mixfix41(~sdenynine@user/mixfix41)
2022-05-24 21:39:41 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 21:39:55 +0200 <EvanR> I like malbolge's VM. It has zero chance of ever being used to accomplish anything
2022-05-24 21:40:14 +0200 <EvanR> it's not even a good RNG
2022-05-24 21:43:55 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
2022-05-24 21:44:26 +0200acidjnk(~acidjnk@p200300d0c7068b8138d05884d43f32c7.dip0.t-ipconnect.de)
2022-05-24 21:45:29 +0200sweater(~sweater@206.81.18.26) (Remote host closed the connection)
2022-05-24 21:46:42 +0200sweater(~sweater@206.81.18.26)
2022-05-24 21:46:43 +0200 <int-e> EvanR: the amazing thing about Malbolge is that people have figured out how to implement actual loops in the language (rather than straight line programs which don't have to care about the instructions being modified as they're executed),
2022-05-24 21:46:53 +0200 <int-e> "language"
2022-05-24 21:47:29 +0200 <tomsmeding> well it's a language
2022-05-24 21:47:33 +0200 <tomsmeding> technically
2022-05-24 21:47:56 +0200 <int-e> I suspect linguists would disagree :P
2022-05-24 21:48:15 +0200 <darkling> Is there a quine in Malbolge yet?
2022-05-24 21:48:23 +0200 <int-e> FWIW, I don't think machine code is a language either, and malbolge is closer to that than to the usual programming languages.
2022-05-24 21:48:50 +0200 <int-e> https://lutter.cc/malbolge/quine.html (didn't test)
2022-05-24 21:49:52 +0200 <darkling> o_O Wow
2022-05-24 21:50:00 +0200 <EvanR> the bottom of that program is telling
2022-05-24 21:50:12 +0200 <int-e> That... barely fits, using 59032 out of 59049 possible characters.
2022-05-24 21:50:42 +0200 <tomsmeding> int-e: right, then our definitions of "language" don't agree :p
2022-05-24 21:50:59 +0200 <EvanR> any data type is a language?
2022-05-24 21:51:08 +0200 <tomsmeding> language is syntax + semantics
2022-05-24 21:51:21 +0200 <EvanR> you lost me at semantics xD
2022-05-24 21:51:26 +0200 <tomsmeding> meaning
2022-05-24 21:51:35 +0200 <EvanR> i know the meaning of...
2022-05-24 21:51:45 +0200 <int-e> tomsmeding: tbf, I have several notions of "language", including the formal language one; it's just not my default.
2022-05-24 21:51:56 +0200 <tomsmeding> right
2022-05-24 21:52:13 +0200 <EvanR> since semantics always given as more syntax, I call BS
2022-05-24 21:52:22 +0200 <tomsmeding> EvanR: is it?
2022-05-24 21:52:55 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-24 21:53:14 +0200 <geekosaur> at somew point you have to define something not in terms of more syntax. you may think of these as primitives or axioms or whatever
2022-05-24 21:53:59 +0200 <tomsmeding> usually set theory, or something similar
2022-05-24 21:54:06 +0200 <int-e> Yeah... we can't actually have turtles alls the way down
2022-05-24 21:54:28 +0200 <EvanR> ah, set theory. The gold standard for meaningfulness
2022-05-24 21:54:29 +0200 <int-e> Even set theory is built upon natural language, so something quite informal.
2022-05-24 21:54:45 +0200 <tomsmeding> I mean, yes :p
2022-05-24 21:54:58 +0200 <tomsmeding> unfortunately we humans don't really have much else to resort to
2022-05-24 21:55:09 +0200 <monochrom> Unpopular opinion: s/built upon/communicated through/
2022-05-24 21:55:11 +0200 <dolio> Sure they do.
2022-05-24 21:55:20 +0200 <int-e> But I feel it's best to leave this to the (mathematical) philosophers :)
2022-05-24 21:57:12 +0200 <monochrom> What I personally do is I listen to a set of rules communicated to me in one way or another, and I build a formal model in my mind. But it's formal.
2022-05-24 21:57:36 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-05-24 21:57:38 +0200seriously_pc(~seriously@159.53.78.142)
2022-05-24 21:57:54 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Client Quit)
2022-05-24 21:58:05 +0200 <maerwald> is there a jwt library that doesn't depend on cryptonite?
2022-05-24 21:58:12 +0200 <dolio> Scenario: natural numbers correspond to cows in your barn. Arithmetic corresponds to cows entering and leaving. Cows aren't syntax.
2022-05-24 21:58:15 +0200 <geekosaur> someone nstill has to define "formal", though. which gets us into metamathematics
2022-05-24 22:00:08 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-05-24 22:00:45 +0200ystael(~ystael@user/ystael) (Read error: Connection reset by peer)
2022-05-24 22:01:26 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 22:02:38 +0200 <seriously_pc> Hey all... coming form the haskell-beginners chat to ask a question here. I've been learning haskell for about a month now and I'm trying to build a rest service with it. I've done the starter tutorials for yesod and servant; I've chose to go with servant as it seems to be more API oriented (meaning, more of a microservice, as opposed to serving
2022-05-24 22:02:39 +0200 <seriously_pc> web pages). I'm having alot of trouble with the language pragmas (extensions)... I was notified by another user here that servant and yesod are built upon the principles of "type level programming". Alot of these extensions are beyond the scope of what I've learned so far in haskell.... Do you guys know of a easier way for me to get started with my
2022-05-24 22:02:39 +0200 <seriously_pc> rest service? Not involving any "type level programming" ?
2022-05-24 22:03:02 +0200Psybur(~Psybur@c-76-123-45-25.hsd1.va.comcast.net)
2022-05-24 22:08:59 +0200YoungFrawg(~youngfrog@39.129-180-91.adsl-dyn.isp.belgacom.be)
2022-05-24 22:09:31 +0200nate1(~nate@98.45.169.16)
2022-05-24 22:09:50 +0200 <seriously_pc> for some extra context: I'm mid-level software engineer; writing imperative/OO code in java and typescript for the past few years
2022-05-24 22:10:40 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-24 22:11:16 +0200YoungFrog(~youngfrog@2a02:a03f:c21b:f900:8cee:eaed:9f2f:9769) (Ping timeout: 258 seconds)
2022-05-24 22:11:16 +0200YoungFrawgYoungFrog
2022-05-24 22:14:10 +0200nate1(~nate@98.45.169.16) (Ping timeout: 240 seconds)
2022-05-24 22:14:21 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2022-05-24 22:14:44 +0200 <tomsmeding> seriously_pc: 'snap' is another web framework; in this pastebin implementation I'm using 'snap-core' https://github.com/tomsmeding/pastebin-haskell
2022-05-24 22:14:55 +0200phma_(~phma@2001:5b0:2143:d2f8:5c18:7b3:2a38:5b88)
2022-05-24 22:14:57 +0200phma(~phma@2001:5b0:210d:cc08:34f8:e479:1e76:ac53) (Read error: Connection reset by peer)
2022-05-24 22:15:02 +0200 <maerwald> snap is kinda outdated though
2022-05-24 22:15:08 +0200 <tomsmeding> no type level programming here, though I'm using not using the full framework, just the core implementation using snap-core and snap-server
2022-05-24 22:15:11 +0200 <tomsmeding> it works 🤷
2022-05-24 22:15:22 +0200 <tomsmeding> and it's fairly straightforward, I think
2022-05-24 22:15:31 +0200 <tomsmeding> maybe that's what seriously_pc is looking for
2022-05-24 22:17:08 +0200 <maerwald> seriously_pc: https://haskell-servant.github.io/posts/2018-07-12-servant-dsl-typelevel.html
2022-05-24 22:17:08 +0200 <tomsmeding> (straightforward as web frameworks go, I guess)
2022-05-24 22:17:16 +0200 <seriously_pc> tomsmeding maerwald let me check it out... As long as I'm able to recognize some familiar functions and patterns that I'm learning through tutorials + courses, then im happy
2022-05-24 22:18:16 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 22:18:17 +0200zeenk(~zeenk@2a02:2f04:a104:ef00:10:581:f80f:b980) (Quit: Konversation terminated!)
2022-05-24 22:19:36 +0200 <Hecate> seriously_pc: the Twain library is a nice new player in the space of non-typelevel web libraries
2022-05-24 22:19:48 +0200zeenk(~zeenk@2a02:2f04:a104:ef00:10:581:f80f:b980)
2022-05-24 22:20:04 +0200hololeap(~hololeap@user/hololeap)
2022-05-24 22:21:00 +0200 <seriously_pc> It seems right to me that I should know how to write a rest service with the original haskell compiler (no extensions) before I start learning what essentially seems like a hack (language pragmas) into haskell. Let me know if thats not a good categorizaiton of language pragmas.
2022-05-24 22:21:24 +0200 <dolio> It's not.
2022-05-24 22:21:28 +0200 <tomsmeding> I don't think that's a good characterisation :p
2022-05-24 22:21:46 +0200 <maerwald> most of them are hacks
2022-05-24 22:21:46 +0200 <geekosaur> it's not really a hack, it's just that the formal language definition has been frozen by a paralyzed language committee for over a decade
2022-05-24 22:22:36 +0200 <tomsmeding> the language implemented by GHC is larger than the language specified in the haskell report, but as a general attempt at cleanliness and because some of the extensions (subtly) change the meaning of some Haskell syntax, the extensions need to be explicitly enabled
2022-05-24 22:22:38 +0200 <maerwald> it's not like someone came up with those plugins after thinking about it very carefully... they're a result of implementation details of GHC
2022-05-24 22:23:01 +0200 <maerwald> as in: "what if we expose more of the internal machinery to the user?"
2022-05-24 22:23:07 +0200 <seriously_pc> ok then haha let me write back here in a few months when my haskell horizon will have no doubt broadened
2022-05-24 22:23:19 +0200 <tomsmeding> maerwald: which extensions are you thinking about?
2022-05-24 22:23:29 +0200 <tomsmeding> GADTs is hardly in that category :p
2022-05-24 22:23:29 +0200 <maerwald> DataKinds
2022-05-24 22:23:52 +0200 <tomsmeding> I'd rather point to TypeInType as the guilty one there
2022-05-24 22:24:18 +0200 <tomsmeding> though that standpoint is weakened by not realistically being able to turn that off :p
2022-05-24 22:25:19 +0200 <tomsmeding> MultiParamTypeClasses, GADTs, TypeFamilies, ScopedTypeVariables, QuantifiedConstraints, Deriving*, etc. are definitely not hacks
2022-05-24 22:25:29 +0200 <geekosaur> which does strengthen maerwald's argument though
2022-05-24 22:25:34 +0200 <tomsmeding> yeah for DataKinds it does
2022-05-24 22:25:50 +0200 <geekosaur> I'd say for TypeInType as well
2022-05-24 22:25:54 +0200coot(~coot@213.134.190.95)
2022-05-24 22:26:24 +0200 <geekosaur> it's exposing a decision to let things leak across boundaries in the typechecker. DataKinds just exposes that decision to the usert
2022-05-24 22:26:53 +0200 <seriously_pc> Hecate thanks for the recomendation, looking into twain now
2022-05-24 22:27:15 +0200 <geekosaur> *exposes a consequence
2022-05-24 22:27:22 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 258 seconds)
2022-05-24 22:29:27 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-24 22:30:15 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-24 22:30:24 +0200sabry(~sabry@197.37.57.10) (Quit: Client closed)
2022-05-24 22:32:38 +0200 <tomsmeding> maerwald: I disagree on "_most_ of them are hacks", I went through the list of extensions and I think the following qualify as hacks in some reasonable way:
2022-05-24 22:32:41 +0200 <tomsmeding> ConstraintKinds, DataKinds, TypeInType, IncoherentInstances, InstanceSigs(?), LiberalTypeSynonyms (TIL), MonoLocalBinds/MonomorphismRestriction, TypeSynonymInstances(?), Undecidable{Instances,SuperClasses}
2022-05-24 22:33:07 +0200 <maerwald> well, type families certainly feel like a hack
2022-05-24 22:33:07 +0200 <tomsmeding> that's 11 out of 123
2022-05-24 22:33:17 +0200 <tomsmeding> wat?
2022-05-24 22:33:41 +0200 <maerwald> are you saying type families are 1. ergonomic and 2. powerful enough to do cool stuff?
2022-05-24 22:34:12 +0200 <tomsmeding> it's sad that you can't partially apply them
2022-05-24 22:34:46 +0200 <geekosaur> more ergonomic than FunctionalDependencies, which imo are the real hack because they're basically a chunk of Prolog dropped into the typechecker
2022-05-24 22:34:49 +0200 <maerwald> like... would anyone come up with how type families are designed when starting a new language?
2022-05-24 22:35:04 +0200 <tomsmeding> maerwald: what would you improve
2022-05-24 22:35:08 +0200 <geekosaur> but do the same thing
2022-05-24 22:35:15 +0200 <maerwald> tomsmeding: I don't know where to start
2022-05-24 22:35:27 +0200 <maerwald> I'd just do something entirely different
2022-05-24 22:36:28 +0200abrantesasf(~abrantesa@177.137.232.91)
2022-05-24 22:37:16 +0200 <geekosaur> will the result fill the need of correlating types, or do you want to ignore that problem (or leave it to fundeps) and invent something else instead
2022-05-24 22:37:54 +0200 <geekosaur> do remember that the original point was making MultiParameterTypeClasses usable in practice
2022-05-24 22:37:54 +0200 <tomsmeding> I mean, I'm not sure I agree (but perhaps if I see a better design I would be swayed that way), but in any case a suboptimal design of the language extension is something different than being a hack that just exposes internal machinery to the user :p
2022-05-24 22:37:55 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net) (Ping timeout: 246 seconds)
2022-05-24 22:37:59 +0200 <tomsmeding> and that's what I was trying to refute
2022-05-24 22:38:03 +0200agumonkey(~user@88.163.231.79) (Remote host closed the connection)
2022-05-24 22:38:19 +0200 <maerwald> I dunno... I'm not spending a lot of time with language design :p
2022-05-24 22:38:57 +0200 <tomsmeding> no I'm not saying you should, I'm also not saying I like the current design a lot (I don't know anything much better, but that doesn't mean it doesn't exist)
2022-05-24 22:39:08 +0200 <maerwald> I think the smart people who invented Haskell would know something better... the problem is only if you're trying to retro-fit ideas onto old horses
2022-05-24 22:39:24 +0200 <maerwald> then you end up with C++
2022-05-24 22:40:28 +0200 <maerwald> and that might be one reason we won't get another standard, because all it would do is capture popular plugins and sanction them
2022-05-24 22:40:59 +0200 <maerwald> not very interesting
2022-05-24 22:41:25 +0200 <tomsmeding> maerwald: if we're going to talk about unfortunate language extension _design_, then let's take the elephant in the room, LinearTypes
2022-05-24 22:41:54 +0200 <maerwald> yeah, I mean... I'm still on 8.10.7 and refuse to update to anything that starts with 9
2022-05-24 22:41:55 +0200 <tomsmeding> with the assumption that you must extend Haskell and keep the original language and ecosystem intact, it's a wonderful and brilliant design
2022-05-24 22:42:19 +0200 <tomsmeding> but without that assumption, there's other designs (uniqueness types yo) that are 1. well-understood and 2. much more ergonomic
2022-05-24 22:42:23 +0200 <tomsmeding> like, _much_ more
2022-05-24 22:42:36 +0200 <maerwald> there's some interesting things linear types could solve in streaming libraries
2022-05-24 22:42:57 +0200 <maerwald> right now, streamly relies on GC hooks
2022-05-24 22:43:01 +0200 <maerwald> to clean up resources
2022-05-24 22:43:08 +0200 <tomsmeding> sounds like a use for LT yes
2022-05-24 22:43:12 +0200raym(~raym@user/raym) (Ping timeout: 272 seconds)
2022-05-24 22:43:21 +0200 <dolio> Uniqueness types aren't a substitute for linear types.
2022-05-24 22:43:58 +0200 <maerwald> and resource cleanup depending on GC sounds like a good way to create extremely difficult to debug bugs
2022-05-24 22:46:10 +0200 <maerwald> so, there seems to be a use case beyond someone promoting their PhD thesis
2022-05-24 22:46:10 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net)
2022-05-24 22:47:49 +0200mmhat(~mmh@p200300f1c705841dee086bfffe095315.dip0.t-ipconnect.de)
2022-05-24 22:49:11 +0200 <dmj`> I think it'd be cool to make IO / ST use uniqueness types, and maybe even like have mutable blocks in a similar vein to ST, except not implemented w/ a monad, and not using existentials
2022-05-24 22:50:26 +0200nate1(~nate@98.45.169.16)
2022-05-24 22:50:39 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 22:50:44 +0200yauhsien(~yauhsien@61-231-39-34.dynamic-ip.hinet.net) (Ping timeout: 255 seconds)
2022-05-24 22:50:56 +0200Guest49(~Guest49@105.112.44.177) (Quit: Client closed)
2022-05-24 22:51:03 +0200 <EvanR> mutable variables are weird enough to use for actual things without also having to use a weird type system at the same time xD
2022-05-24 22:51:17 +0200 <EvanR> linear types for using a resource API correctly seems interesting though
2022-05-24 22:52:14 +0200ubert(~Thunderbi@p200300ecdf3b997ccd2957383dda91a7.dip0.t-ipconnect.de)
2022-05-24 22:53:32 +0200stackdroid18(14094@user/stackdroid)
2022-05-24 22:54:19 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-24 22:54:28 +0200 <maerwald> https://hackage.haskell.org/package/text-builder-linear-0.1/candidate
2022-05-24 22:54:50 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 22:55:28 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 22:57:51 +0200dsrt^(~dsrt@c-24-126-228-147.hsd1.ga.comcast.net)
2022-05-24 22:58:44 +0200 <dmj`> EvanR: well, maybe like mutable "blocks", as a first class language construct, where you have the same freeze / thaw situation, but for any type.
2022-05-24 22:59:19 +0200pavonia(~user@user/siracusa)
2022-05-24 23:01:19 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
2022-05-24 23:02:16 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-24 23:04:57 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-05-24 23:07:44 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 23:09:42 +0200ubert(~Thunderbi@p200300ecdf3b997ccd2957383dda91a7.dip0.t-ipconnect.de) (Quit: ubert)
2022-05-24 23:09:55 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411) (Remote host closed the connection)
2022-05-24 23:10:30 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411)
2022-05-24 23:12:33 +0200michalz(~michalz@185.246.204.105) (Remote host closed the connection)
2022-05-24 23:14:46 +0200slack1256(~slack1256@191.126.99.64) (Ping timeout: 244 seconds)
2022-05-24 23:14:54 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411) (Ping timeout: 258 seconds)
2022-05-24 23:15:10 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Remote host closed the connection)
2022-05-24 23:15:27 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 23:16:05 +0200Pickchea(~private@user/pickchea)
2022-05-24 23:19:26 +0200sympt2(~sympt@user/sympt)
2022-05-24 23:19:51 +0200wagle(~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2022-05-24 23:20:16 +0200wagle(~wagle@quassel.wagle.io)
2022-05-24 23:20:36 +0200sympt(~sympt@user/sympt) (Ping timeout: 248 seconds)
2022-05-24 23:20:36 +0200sympt2sympt
2022-05-24 23:20:42 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 23:21:44 +0200zer0bitz(~zer0bitz@2001:2003:f444:8f00:1ddb:ab6a:8605:cb77) (Read error: Connection reset by peer)
2022-05-24 23:24:38 +0200shiraeeshi(~shiraeesh@46.34.206.185)
2022-05-24 23:25:47 +0200alp_(~alp@user/alp) (Ping timeout: 240 seconds)
2022-05-24 23:28:31 +0200Guest52(~Guest52@catv-89-132-181-211.catv.fixed.vodafone.hu)
2022-05-24 23:31:30 +0200 <shiraeeshi> I have some questions about polymorphic type synonyms
2022-05-24 23:31:52 +0200 <shiraeeshi> So I was reading Pipes Tutorial https://hackage.haskell.org/package/pipes-4.3.16/docs/Pipes-Tutorial.html
2022-05-24 23:32:17 +0200 <shiraeeshi> in the "Appendix: Types" it says:
2022-05-24 23:32:33 +0200 <shiraeeshi> <quote>
2022-05-24 23:32:34 +0200 <shiraeeshi> However, polymorphic type synonyms cause problems in many other cases:
2022-05-24 23:32:43 +0200 <shiraeeshi> They usually give the wrong behavior when used as the argument of a function (known as the "negative" or "contravariant" position) like this:
2022-05-24 23:32:50 +0200 <shiraeeshi> f :: Producer' a m r -> ... -- Wrong
2022-05-24 23:32:56 +0200 <shiraeeshi> f :: Producer a m r -> ... -- Right
2022-05-24 23:33:05 +0200 <shiraeeshi> The former function only accepts polymorphic Producers as arguments. The latter function accepts both polymorphic and concrete Producers, which is probably what you want.
2022-05-24 23:33:09 +0200 <shiraeeshi> </quote>
2022-05-24 23:33:53 +0200z0k(~z0k@39.40.43.194) (Ping timeout: 244 seconds)
2022-05-24 23:33:59 +0200 <shiraeeshi> Producer and Producer' are defined as:
2022-05-24 23:34:01 +0200 <shiraeeshi> type Producer' b m r = forall x' x . Proxy x' x () b m r
2022-05-24 23:34:12 +0200 <shiraeeshi> type Producer b = Proxy X () () b
2022-05-24 23:35:26 +0200abrantesasf(~abrantesa@177.137.232.91) (Ping timeout: 244 seconds)
2022-05-24 23:35:28 +0200 <shiraeeshi> it seemed counter-intuitive to me that a function that says in the type declaration that it accepts polymorphic Producers, accepts only polymorphic Producers and not concrete ones
2022-05-24 23:35:31 +0200_abrantesasf_(abrantesas@gateway/vpn/protonvpn/abrantesasf)
2022-05-24 23:35:47 +0200 <shiraeeshi> arent concrete Producers instances of polymorphic ones?
2022-05-24 23:35:51 +0200 <dminuoso_> Yes.
2022-05-24 23:35:58 +0200 <shiraeeshi> so I tried to run an experiment
2022-05-24 23:36:02 +0200 <dminuoso_> So this is essentially just RankNTypes
2022-05-24 23:36:04 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5) (Remote host closed the connection)
2022-05-24 23:36:12 +0200 <dminuoso_> Compare with the following:
2022-05-24 23:36:41 +0200 <dminuoso_> `f :: (forall t. Num t => t) -> String` is a function that demands the caller apply it to a polymorphic value.
2022-05-24 23:36:44 +0200Guest52(~Guest52@catv-89-132-181-211.catv.fixed.vodafone.hu) (Quit: Client closed)
2022-05-24 23:36:50 +0200 <dminuoso_> It's conceptually similar to say:
2022-05-24 23:37:05 +0200 <dminuoso_> `f :: (Int -> Char) -> Bool` demands the argument to be a function itself.
2022-05-24 23:37:47 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-05-24 23:38:12 +0200 <dminuoso_> shiraeeshi: You can draw some intuition by understanding that a polymorphic value is one whose *user/caller* must chose a type for. But they can make multiple such choices
2022-05-24 23:39:03 +0200 <shiraeeshi> hmm
2022-05-24 23:39:04 +0200 <dminuoso_> f :: (forall t. Num t => t) -> (Int, Double); f x = (x, x)
2022-05-24 23:39:07 +0200 <dminuoso_> @let f :: (forall t. Num t => t) -> (Int, Double); f x = (x, x)
2022-05-24 23:39:09 +0200 <lambdabot> Defined.
2022-05-24 23:39:25 +0200 <dminuoso_> Note that in a Rank2Type like here the roles are inverted.
2022-05-24 23:39:49 +0200 <dminuoso_> The caller of f must supply an polymorphic value, but the implementor of f can instantiate that polymorphic value at multiple types.
2022-05-24 23:40:21 +0200 <shiraeeshi> let me show you what I tried: https://paste.tomsmeding.com/lsxdzath
2022-05-24 23:40:37 +0200 <shiraeeshi> a compiler output: https://paste.tomsmeding.com/C0F74KMK
2022-05-24 23:41:23 +0200 <shiraeeshi> I tried to show that I can pass any value to a function that accepts polymorphic type synonyms
2022-05-24 23:41:50 +0200 <shiraeeshi> but the problem is that I can't create instances of such polymorphic synonyms
2022-05-24 23:42:12 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:30cf:ca81:9fb0:16f5)
2022-05-24 23:42:39 +0200 <shiraeeshi> and it seems like indeed the compiler complains that I can't pass concrete values to such functions (that accept polymorphic synonyms)
2022-05-24 23:42:41 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411)
2022-05-24 23:42:53 +0200 <dminuoso_> shiraeeshi: Lets start with my above example of `f`.
2022-05-24 23:43:02 +0200 <dminuoso_> > f 20
2022-05-24 23:43:05 +0200 <lambdabot> error:
2022-05-24 23:43:05 +0200 <lambdabot> Ambiguous occurrence ‘f’
2022-05-24 23:43:05 +0200 <lambdabot> It could refer to
2022-05-24 23:43:07 +0200 <dminuoso_> Ugh
2022-05-24 23:43:18 +0200 <dminuoso_> @let two :: (forall t. Num t => t) -> (Int, Double); two x = (x, x)
2022-05-24 23:43:19 +0200 <lambdabot> Defined.
2022-05-24 23:43:21 +0200 <dminuoso_> > two 10
2022-05-24 23:43:23 +0200 <lambdabot> (10,10.0)
2022-05-24 23:43:46 +0200 <dminuoso_> Note how the literal `10 :: Num a => a`, so its a properly polymorphic thing.
2022-05-24 23:44:19 +0200 <dminuoso_> The implementation of `two` can then instantiate this at one or more types of its choice. In this example it instantiates it at both Int and Double.
2022-05-24 23:44:32 +0200 <dminuoso_> But the caller of two has no choice. You cant pass a specific Int.
2022-05-24 23:44:36 +0200 <dminuoso_> > two (10 :: Int)
2022-05-24 23:44:38 +0200 <lambdabot> error:
2022-05-24 23:44:39 +0200 <lambdabot> • Couldn't match expected type ‘t’ with actual type ‘Int’
2022-05-24 23:44:39 +0200 <lambdabot> ‘t’ is a rigid type variable bound by
2022-05-24 23:45:30 +0200 <dminuoso_> You're essentially trying to do just that.
2022-05-24 23:46:05 +0200merijn(~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds)
2022-05-24 23:46:30 +0200 <shiraeeshi> what about this sentence "The latter function accepts both polymorphic and concrete Producers, which is probably what you want."
2022-05-24 23:47:17 +0200zincy(~zincy@2a00:23c8:970c:4801:5ce3:174f:85c3:8411) (Ping timeout: 260 seconds)
2022-05-24 23:47:53 +0200 <dminuoso_> @let type Id a = a
2022-05-24 23:47:54 +0200 <lambdabot> Defined.
2022-05-24 23:48:07 +0200 <shiraeeshi> how can it accept polymorphic Producers if it has already decided the types to be () and X?
2022-05-24 23:48:15 +0200 <[Leary]> The polymorphic argument specialises down to the concrete.
2022-05-24 23:48:29 +0200phma_phma
2022-05-24 23:48:52 +0200nate1(~nate@98.45.169.16) (Ping timeout: 244 seconds)
2022-05-24 23:49:28 +0200 <[Leary]> In the same way that you can pass `id :: a -> a` to a function that wants an `Int -> Int`.
2022-05-24 23:49:35 +0200 <shiraeeshi> wait, so polymorphic Producer says "I don't know what the types will be, you decide", right?
2022-05-24 23:49:41 +0200 <geekosaur> a polymorphic Producer can be specialized to a concrete type
2022-05-24 23:49:55 +0200 <geekosaur> a monomorphic Producer can't be generalized to a polymorphic type
2022-05-24 23:50:07 +0200 <dminuoso_> shiraeeshi: In a polymorphic value, the *caller/user* decides/instantiates the types. To the *implementor* its an opaque unknown type.
2022-05-24 23:50:43 +0200 <dminuoso_> In a rank 2 type the *caller* specifies a polymorphic type, but the *implementor* gets to decide/instantiate that polymorphic tye
2022-05-24 23:50:47 +0200acidjnk(~acidjnk@p200300d0c7068b8138d05884d43f32c7.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-05-24 23:51:30 +0200 <shiraeeshi> I think this is it: in my intuitive understanding the word "polymorphic" meant that if function says that it accepts polymorphic types, then anybody can pass anything to it
2022-05-24 23:51:54 +0200 <dminuoso_> shiraeeshi: In the example of [Leary], if you pass `id` to a function that wants `Int -> Int`, its really *you* who monomorphizes `id`.
2022-05-24 23:51:58 +0200 <dminuoso_> Not that other function.
2022-05-24 23:52:14 +0200 <monochrom> s/accept/provide/ then that sentence would be right.
2022-05-24 23:52:27 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-05-24 23:52:48 +0200 <monochrom> Example: "id :: forall a. a -> a". id provides a polymorphic type, namely "forall a. a -> a".
2022-05-24 23:53:03 +0200 <dminuoso_> shiraeeshi: Perhaps another useful angle is to think of polymorphic values as "functions taking a type, producing a value"
2022-05-24 23:54:29 +0200 <dminuoso_> Then it might help understand who has the obligation (or even possibility) to apply that "function taking a type"
2022-05-24 23:54:33 +0200_abrantesasf_(abrantesas@gateway/vpn/protonvpn/abrantesasf) (Ping timeout: 244 seconds)
2022-05-24 23:54:58 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net) (Ping timeout: 252 seconds)
2022-05-24 23:56:17 +0200 <shiraeeshi> in the "id" example the type "a" is both in the covariant and contra-variant position
2022-05-24 23:56:33 +0200 <dminuoso_> Not from a type rank position
2022-05-24 23:56:53 +0200 <dminuoso_> Write out the implicit forall
2022-05-24 23:56:54 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-05-24 23:56:56 +0200 <shiraeeshi> but the text says that polymorphic type synonyms are problematic in contra-variant position, but ok in covariant position
2022-05-24 23:57:00 +0200 <dminuoso_> id :: forall a. (a -> a)
2022-05-24 23:57:05 +0200 <dminuoso_> c.f.
2022-05-24 23:57:07 +0200 <monochrom> But look at the "forall a" instead.
2022-05-24 23:57:12 +0200anon15041149(~anon15041@host-80-41-95-245.as13285.net)
2022-05-24 23:57:18 +0200 <dminuoso_> wo :: (forall t. Num t => t) -> String
2022-05-24 23:57:27 +0200 <monochrom> That is the reason I explicate "forall a".
2022-05-24 23:57:48 +0200 <monochrom> You should be looking at where is the "forall", not where are the type variables.
2022-05-24 23:57:52 +0200 <shiraeeshi> hmm, so it's not in contravariant position in the "id" example?
2022-05-24 23:57:55 +0200 <dminuoso_> shiraeeshi: Yes, because in a rank-2 type synonym its not obvious at all
2022-05-24 23:58:41 +0200 <dminuoso_> @let type PolyNum = forall t. Num t => t
2022-05-24 23:58:43 +0200 <lambdabot> Defined.
2022-05-24 23:58:59 +0200 <monochrom> "foo :: forall a. blah" is equivalent to "foo :: () -> (forall a. blah)" so is that positive or negative?
2022-05-24 23:59:14 +0200 <dminuoso_> `g :: PolyNum -> String` if you substitute PolyNum for its type alias definition, you get `g :: (forall t. Num t => t) -> String`
2022-05-24 23:59:40 +0200 <shiraeeshi> monochrom: so id becomes "id :: () -> (forall a . a -> a)" ?