2022/02/21

2022-02-21 00:02:40 +0100hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2022-02-21 00:02:58 +0100Tuplanolla(~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
2022-02-21 00:04:11 +0100hololeap(~hololeap@user/hololeap)
2022-02-21 00:09:06 +0100cosimone(~user@93-34-133-75.ip49.fastwebnet.it) (Quit: ERC (IRC client for Emacs 27.1))
2022-02-21 00:11:49 +0100Pickchea(~private@user/pickchea)
2022-02-21 00:12:07 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-02-21 00:13:50 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 00:18:52 +0100 <hololeap> ok, pandoc is amazing
2022-02-21 00:20:28 +0100 <Unicorn_Princess> how strong is the haskell convention of using 2-space indents?
2022-02-21 00:21:23 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-02-21 00:21:29 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-02-21 00:28:01 +0100 <justsomeguy> It can bench press 300 pounds, and squat 900.
2022-02-21 00:29:22 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-21 00:30:20 +0100 <geekosaur> I wouldn't say it's that strong; I see and occasionally edit source with 4-space indents
2022-02-21 00:30:52 +0100 <geekosaur> it's common, but this isn't Python
2022-02-21 00:31:45 +0100jalil(~jalil@2a01:e0a:277:4100:5321:349f:8c6a:80f8) (Quit: jalil)
2022-02-21 00:32:00 +0100 <Unicorn_Princess> thanks
2022-02-21 00:33:03 +0100pgib(~textual@173.38.117.90) (Ping timeout: 252 seconds)
2022-02-21 00:34:33 +0100srk-(~sorki@user/srk)
2022-02-21 00:35:17 +0100Topsi(~Tobias@dyndsl-095-033-018-175.ewe-ip-backbone.de)
2022-02-21 00:36:10 +0100acidjnk(~acidjnk@p200300d0c7363f90955657ea6b285d32.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-02-21 00:37:41 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 00:37:41 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 00:37:41 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 00:37:42 +0100meinside(uid24933@id-24933.helmsley.irccloud.com)
2022-02-21 00:38:25 +0100srk(~sorki@user/srk) (Ping timeout: 256 seconds)
2022-02-21 00:38:25 +0100srk-srk
2022-02-21 00:38:27 +0100travisbtabemann
2022-02-21 00:39:24 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 00:40:03 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Remote host closed the connection)
2022-02-21 00:44:05 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-02-21 00:51:44 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-02-21 00:53:10 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-02-21 00:54:25 +0100jao(~jao@static-68-235-44-77.cust.tzulo.com) (Ping timeout: 272 seconds)
2022-02-21 00:56:13 +0100juhp(~juhp@128.106.188.82) (Quit: juhp)
2022-02-21 00:56:27 +0100juhp(~juhp@128.106.188.82)
2022-02-21 00:56:30 +0100juhp(~juhp@128.106.188.82) (Remote host closed the connection)
2022-02-21 00:56:41 +0100juhp(~juhp@128.106.188.82)
2022-02-21 00:56:47 +0100analognoise(~analognoi@ip98-176-154-48.sd.sd.cox.net) (Read error: Connection reset by peer)
2022-02-21 00:59:56 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2022-02-21 01:00:26 +0100hololeaponly uses 4-space indents
2022-02-21 01:00:45 +0100 <Unicorn_Princess> well it is the objectively correct number of spaces
2022-02-21 01:00:53 +0100 <hololeap> dunno why, but two space has always bugged me
2022-02-21 01:01:06 +0100hololeapnods
2022-02-21 01:01:20 +0100 <Unicorn_Princess> alas, the world is full of heretics
2022-02-21 01:01:48 +0100juhp(~juhp@128.106.188.82) (Quit: juhp)
2022-02-21 01:02:06 +0100juhp(~juhp@128.106.188.82)
2022-02-21 01:02:42 +0100max22-(~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-02-21 01:03:55 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-21 01:09:01 +0100 <int-e> hololeap: Surely "where" deserves a 2 space indent
2022-02-21 01:09:44 +0100 <hpc> this is why i always indent to prime-numbered tab stops
2022-02-21 01:09:52 +0100 <hololeap> yeah, it does :)
2022-02-21 01:09:52 +0100 <hpc> 2 spaces, then 3, then 5, then 8, then 13
2022-02-21 01:09:57 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 01:09:57 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 01:09:57 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 01:10:01 +0100 <geekosaur> isnt that fibo?
2022-02-21 01:10:09 +0100 <hpc> my math is too advanced for you
2022-02-21 01:10:13 +0100 <hpc> (also yes)
2022-02-21 01:10:14 +0100 <hololeap> 8 aint no prime
2022-02-21 01:10:40 +0100 <hpc> look i am a programmer, not a mathematician
2022-02-21 01:10:42 +0100 <int-e> hpc: is that a Haskell prime joke
2022-02-21 01:11:12 +0100 <hololeap> hpc, nice use of golden ratio in your line starts
2022-02-21 01:11:52 +0100 <hololeap> very artistic
2022-02-21 01:11:56 +0100 <hpc> i also separate all my definitions with vertical tabs instead of newlines
2022-02-21 01:14:41 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-21 01:15:20 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 01:15:20 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 01:15:20 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 01:16:49 +0100geekosaurreminded of back when it was de riguer for C programmers to separate function definitions with formfeeds
2022-02-21 01:18:58 +0100 <monochrom> Consider putting multiple Haskell modules in the same file separated by formfeeds >:)
2022-02-21 01:19:05 +0100tatarqa(~kli@ip-89-177-122-45.net.upcbroadband.cz)
2022-02-21 01:20:12 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-21 01:24:19 +0100wavemode(~wavemode@2601:241:0:fc90:79a9:b149:73a6:32c7) (Ping timeout: 256 seconds)
2022-02-21 01:28:55 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 01:31:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 01:31:05 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 01:31:05 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 01:33:41 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2022-02-21 01:33:41 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 272 seconds)
2022-02-21 01:35:47 +0100burnsidesLlama(~burnsides@dhcp168-012.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-21 01:40:27 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-21 01:44:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
2022-02-21 01:48:54 +0100dvdrw(~dvdrw@87.116.177.189) (Quit: leaving)
2022-02-21 01:51:31 +0100irishman(~vshev4enk@178.151.117.243)
2022-02-21 01:53:21 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
2022-02-21 01:54:25 +0100 <int-e> monochrom: cute, but who'd compile that?
2022-02-21 01:54:40 +0100little_mac(~little_ma@2601:410:4300:3ce0:45bc:2e9e:c6:5360) (Remote host closed the connection)
2022-02-21 01:55:48 +0100irishman(~vshev4enk@178.151.117.243) (Ping timeout: 240 seconds)
2022-02-21 01:57:03 +0100dons(~dons@user/dons)
2022-02-21 02:04:41 +0100leungbk(~user@2603-8000-1201-2dd2-e8ab-4c7e-ecf4-c621.res6.spectrum.com)
2022-02-21 02:06:57 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-02-21 02:08:56 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2022-02-21 02:10:41 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-02-21 02:11:51 +0100Me-me(~me-me@v.working.name) (Changing host)
2022-02-21 02:11:51 +0100Me-me(~me-me@user/me-me)
2022-02-21 02:16:11 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-21 02:16:47 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-02-21 02:17:22 +0100random(~random@46.254.129.49) (Ping timeout: 272 seconds)
2022-02-21 02:28:11 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 02:32:17 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 02:35:50 +0100vysn(~vysn@user/vysn)
2022-02-21 02:41:25 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (Ping timeout: 240 seconds)
2022-02-21 02:43:07 +0100skioften puts form feeds into Haskell source
2022-02-21 02:44:00 +0100 <ski> (multiple modules .. i wish)
2022-02-21 02:46:49 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 02:57:58 +0100leungbk(~user@2603-8000-1201-2dd2-e8ab-4c7e-ecf4-c621.res6.spectrum.com) (Remote host closed the connection)
2022-02-21 03:00:00 +0100aweinstock(~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
2022-02-21 03:01:42 +0100freeman42x[m](~freeman42@2001:470:69fc:105::7d29)
2022-02-21 03:02:15 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-02-21 03:04:57 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 03:09:56 +0100Topsi(~Tobias@dyndsl-095-033-018-175.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-02-21 03:10:26 +0100 <Me-me> int-e: I followed some of that.
2022-02-21 03:13:43 +0100xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-02-21 03:14:50 +0100random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2022-02-21 03:21:21 +0100cheater(~Username@user/cheater) (Ping timeout: 272 seconds)
2022-02-21 03:27:10 +0100cheater(~Username@user/cheater)
2022-02-21 03:33:56 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-02-21 03:34:06 +0100Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2022-02-21 03:35:20 +0100Hash(~Hash@hashsecurity.org) (Quit: https://hashsecurity.org)
2022-02-21 03:35:45 +0100Hash(~Hash@hashsecurity.org)
2022-02-21 03:35:53 +0100justAstache(~justache@user/justache) (Read error: Connection reset by peer)
2022-02-21 03:36:48 +0100justAstache(~justache@user/justache)
2022-02-21 03:39:06 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 260 seconds)
2022-02-21 03:44:44 +0100 <Unicorn_Princess> is there any way to set the indent width used by the haskell language server? specifically in spacemacs, but i'll accept any kind of answer, maybe it'll provide me with a hint
2022-02-21 03:46:39 +0100 <Unicorn_Princess> it's currently using 2-space offsets, despite c-basic-offset, standard-offset, and tab-width all set to 4
2022-02-21 03:46:53 +0100 <freeman42x[m]> Unicorn_Princess: isn't the indentation done by the editor/IDE based on whatever you set it to be tabs/spaces/size ? I am not aware of HLS doing anything regards indentation unless maybe you are asking about linting?
2022-02-21 03:47:15 +0100 <freeman42x[m]> maybe auto-format hmm
2022-02-21 03:47:37 +0100 <Unicorn_Princess> it's done by lsp if you call lsp--format-region
2022-02-21 03:48:17 +0100 <Unicorn_Princess> lsp-format-region*
2022-02-21 03:48:17 +0100xff0x(~xff0x@2001:1a81:5301:6400:b772:c1d8:3c5d:2da4) (Ping timeout: 240 seconds)
2022-02-21 03:48:23 +0100 <freeman42x[m]> oh, so you are asking how to set the indentation when running that command?
2022-02-21 03:48:44 +0100 <Unicorn_Princess> yep
2022-02-21 03:49:05 +0100ski. o O ( "Yet Another Tabs v. Spaces Debate" ("I mix tabs and spaces.") by dmwit at <http://dmwit.com/tabs/> )
2022-02-21 03:49:58 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-21 03:50:22 +0100xff0x(~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
2022-02-21 03:50:30 +0100 <Unicorn_Princess> sorry, s/standard-offset/standard-indent
2022-02-21 03:51:13 +0100 <Unicorn_Princess> which is also what is returned by (lsp--get-indent-width major-mode) when in haskell-mode. and its value is again 4. yet, 2-space indent persists. i'll probably just live with 2, tbh
2022-02-21 03:54:36 +0100notzmv(~zmv@user/notzmv)
2022-02-21 03:54:53 +0100 <freeman42x[m]> Unicorn_Princess: by default HLS seems to be using stylish-haskell. Maybe try setting a configuration for it and see if it gets applied: https://github.com/haskell/stylish-haskell#configuration
2022-02-21 03:56:11 +0100 <freeman42x[m]> this also might help, in case it is not the default provider: https://github.com/haskell/stylish-haskell#haskell-language-server
2022-02-21 03:58:44 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2022-02-21 04:02:14 +0100 <Unicorn_Princess> looks like ormolu is the default. but how do i 1) change it, 2) check what the provider is, to make sure the change worked?
2022-02-21 04:02:57 +0100 <freeman42x[m]> Unicorn_Princess: curious, how did you figure out which provider was default?
2022-02-21 04:03:51 +0100 <Unicorn_Princess> by desperately groping around in the dark in all directions
2022-02-21 04:03:57 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
2022-02-21 04:04:15 +0100 <Unicorn_Princess> one of those gropes landed me on https://haskell-language-server.readthedocs.io/en/latest/configuration.html, which says it's the default
2022-02-21 04:04:53 +0100 <Unicorn_Princess> it also mentions customization variables, which reminded me to check M-x customize-variable, and search for haskell format
2022-02-21 04:05:45 +0100 <Unicorn_Princess> i'm in the unenviable position of knowing next to nothing about emacs and lsp, and trying to configure lsp for emacs :)
2022-02-21 04:05:57 +0100 <freeman42x[m]> Unicorn_Princess: do you want to change from Ormolu to another provider?
2022-02-21 04:06:19 +0100 <Unicorn_Princess> i have no idea
2022-02-21 04:06:44 +0100 <Unicorn_Princess> i'd like 4-space indents, but don't want to sacrifice too much to get it
2022-02-21 04:07:17 +0100 <Unicorn_Princess> so if ormolu doesn't support changing this, but some other, less mature provider does, i'd stick with ormolu/2-spaces
2022-02-21 04:07:27 +0100 <freeman42x[m]> <freeman42x[m]> "this also might help, in case it..." <- ^ this tells you how to switch to stylish-haskell if you want to
2022-02-21 04:09:28 +0100 <freeman42x[m]> once you switched to it, use the previous link about how to configure stylish-haskell via config files
2022-02-21 04:10:27 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer)
2022-02-21 04:10:50 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 250 seconds)
2022-02-21 04:13:35 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-21 04:16:35 +0100little_mac(~little_ma@2601:410:4300:3ce0:6823:32a0:8d3a:9add)
2022-02-21 04:16:57 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-02-21 04:23:48 +0100td_(~td@94.134.91.130) (Ping timeout: 240 seconds)
2022-02-21 04:24:56 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-02-21 04:26:01 +0100td_(~td@muedsl-82-207-238-047.citykom.de)
2022-02-21 04:27:58 +0100random(~random@46.254.129.49)
2022-02-21 04:32:19 +0100random(~random@46.254.129.49) (Remote host closed the connection)
2022-02-21 04:33:48 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-21 04:36:43 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
2022-02-21 04:38:07 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-21 04:51:10 +0100random(~random@46.254.129.49)
2022-02-21 05:00:04 +0100kadobanana(~mud@user/kadoban) (Quit: quit)
2022-02-21 05:01:13 +0100 <freeman42x[m]> Unicorn_Princess: did you get it to work?
2022-02-21 05:02:52 +0100 <Unicorn_Princess> The oak fought the wind and was broken, the willow bent when it must and survived.
2022-02-21 05:03:18 +0100 <Unicorn_Princess> i gave up >_>
2022-02-21 05:03:57 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 272 seconds)
2022-02-21 05:04:26 +0100 <freeman42x[m]> Unicorn_Princess: why? it didn't seem that hard to configure (famous words before being hard to configure). run into any issues? what did you try?
2022-02-21 05:04:30 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
2022-02-21 05:04:35 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-21 05:04:38 +0100 <Unicorn_Princess> i'm wary of making my configuration too much of a special unique case
2022-02-21 05:05:07 +0100mud(~mud@user/kadoban)
2022-02-21 05:06:46 +0100 <Unicorn_Princess> all i tried was sticking a 'stylish-haskell into the lsp-haskell layer variables. 1st attempt failed, then i reconsidered if i want to do this at all
2022-02-21 05:07:42 +0100 <Unicorn_Princess> since after that i'd need like, .yaml files to customize the formatting somewhere, and that's more configuration than i'm willing to deal with, since 2-space indent doesn't bother me /that/ much
2022-02-21 05:07:54 +0100 <Unicorn_Princess> i just, foolishly, thought it would be easy to adjust :|
2022-02-21 05:07:57 +0100 <freeman42x[m]> Unicorn_Princess: you'd need to switch to stylish-haskell for that to work. maybe try configuring ormolu instead
2022-02-21 05:09:05 +0100tatarqa(~kli@ip-89-177-122-45.net.upcbroadband.cz) (Quit: Leaving)
2022-02-21 05:10:02 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 05:10:02 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 05:10:02 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 05:10:46 +0100cjb(~cjb@user/cjb) (Quit: rcirc on GNU Emacs 29.0.50)
2022-02-21 05:11:11 +0100 <Unicorn_Princess> the willow bent and survived, freeman42x[m]
2022-02-21 05:11:23 +0100 <Unicorn_Princess> 2 spaces is fine..
2022-02-21 05:12:21 +0100 <Sqaure> I read that the number of records fields blows up core size by O(n^2). Curious to see if theres an ongoing fix for this but couldnt find it. Anyone know?
2022-02-21 05:12:37 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 05:14:42 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-21 05:14:49 +0100 <freeman42x[m]> Unicorn_Princess: aight, most Haskell githup repositories use 2 spaces, 62% https://ukupat.github.io/tabs-or-spaces/
2022-02-21 05:16:50 +0100zmt00(~zmt00@user/zmt00)
2022-02-21 05:17:14 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
2022-02-21 05:18:28 +0100dsrt^(~dsrt@50.233.120.162)
2022-02-21 05:18:32 +0100 <c_wraith> Sqaure: it's just... field selectors. They're just going to be that big as long as they're functions. (I wonder if -XNoFieldSelectors removes that)
2022-02-21 05:19:48 +0100vonfry(~user@119.135.207.43)
2022-02-21 05:20:57 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-02-21 05:21:41 +0100Guest|17(~Guest|17@172.93.132.243)
2022-02-21 05:22:00 +0100Guest|17(~Guest|17@172.93.132.243) (Client Quit)
2022-02-21 05:25:33 +0100 <Sqaure> c_wraith, i was thinking of the motivation for the creation of this https://well-typed.com/blog/2021/08/large-records/
2022-02-21 05:26:47 +0100 <c_wraith> I mean, sure, there are things that addresses, but... seriously, write out field accessors for a record. You'll find the amount of code you write is quadratic in the number of fields.
2022-02-21 05:31:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 05:31:32 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 05:31:32 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 05:36:46 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-21 05:41:11 +0100 <sm> seen in #haskell:matrix.org , tomsmeding:
2022-02-21 05:41:23 +0100 <sm> > I wish these pastebin sites would allow highlighting specific rows like gist/github
2022-02-21 05:41:25 +0100 <lambdabot> error:
2022-02-21 05:41:25 +0100 <lambdabot> Data constructor not in scope:
2022-02-21 05:41:25 +0100 <lambdabot> I :: t0
2022-02-21 05:41:44 +0100h_(rootvegeta@fsf/member/hays) (Remote host closed the connection)
2022-02-21 05:42:36 +0100cynomys(~cynomys@user/cynomys)
2022-02-21 05:44:24 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-02-21 05:44:45 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-21 05:45:19 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-21 05:45:26 +0100deadmarshal(~deadmarsh@95.38.117.184)
2022-02-21 05:51:43 +0100vonfry(~user@119.135.207.43) (Remote host closed the connection)
2022-02-21 05:52:12 +0100vonfry(~user@119.135.207.43)
2022-02-21 05:52:34 +0100vonfry(~user@119.135.207.43) ()
2022-02-21 05:52:36 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
2022-02-21 05:59:42 +0100toastloop(~toastloop@user/toastloop)
2022-02-21 06:02:20 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 06:02:21 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 06:02:21 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 06:05:35 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
2022-02-21 06:05:41 +0100 <freeman42x[m]> is there any "reload GHCI and re-run last command" capable VSCode plugin or external program?
2022-02-21 06:05:58 +0100HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
2022-02-21 06:06:14 +0100HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato)
2022-02-21 06:07:00 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-21 06:10:46 +0100Guest89(~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197)
2022-02-21 06:18:21 +0100drdo(~drdo@roach0.drdo.eu) (Quit: Ping timeout (120 seconds))
2022-02-21 06:19:16 +0100drdo(~drdo@roach0.drdo.eu)
2022-02-21 06:19:24 +0100lechner(~lechner@debian/lechner) (Ping timeout: 240 seconds)
2022-02-21 06:20:26 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-02-21 06:21:41 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 06:21:50 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-02-21 06:22:21 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-02-21 06:22:25 +0100lechner(~lechner@debian/lechner)
2022-02-21 06:26:12 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 06:27:58 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-02-21 06:32:41 +0100astraamish
2022-02-21 06:33:11 +0100amishGuest120
2022-02-21 06:34:00 +0100Guest120amish
2022-02-21 06:34:04 +0100amish(sid289983@2a03:5180:f:4::4:6cbf) (Changing host)
2022-02-21 06:34:04 +0100amish(sid289983@user/amish)
2022-02-21 06:34:21 +0100amishastra
2022-02-21 06:39:17 +0100mvk(~mvk@2607:fea8:5cdc:bf00::99e7) (Ping timeout: 240 seconds)
2022-02-21 06:47:00 +0100dons(~dons@user/dons) (Ping timeout: 260 seconds)
2022-02-21 06:49:01 +0100deadmarshal(~deadmarsh@95.38.117.184) (Ping timeout: 256 seconds)
2022-02-21 06:49:40 +0100 <Guest89> Hi, beginner question here: I am using Haskell-src-exts analysing Github projects I've scraped. However when parsing them with 'parseFile', I get tons of ParseErrors in repos which compile just fine when I clone them. The Errors mostly concern missing language extensions and advise to add a corresponding pragma. Am I using the wrong function? I
2022-02-21 06:49:40 +0100 <Guest89> thought 'parseFile' should respect language pragmas?
2022-02-21 06:51:10 +0100 <freeman42x[m]> Guest89: language pragma's can also be declared globally in a cabal file, that might be cause of the issue
2022-02-21 06:59:09 +0100 <Guest89> freeman42x[m]: Thanks! At least for some of the errors that seems to be the case. Do you perchance know any lib which can parse cabal files since haskell-src-exts can't do that?
2022-02-21 06:59:46 +0100 <sclv> The Cabal lib itself
2022-02-21 07:02:36 +0100poss(~fes@mobile-access-567357-189.dhcp.inet.fi) (Ping timeout: 240 seconds)
2022-02-21 07:03:46 +0100 <Guest89> Oh... maybe I could've thought of that, thanks again!
2022-02-21 07:12:24 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-02-21 07:15:44 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 07:18:49 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-02-21 07:25:42 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-02-21 07:26:05 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-02-21 07:31:00 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 07:35:05 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 07:37:58 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-02-21 07:39:44 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-02-21 07:43:06 +0100shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-02-21 07:43:52 +0100deadmarshal(~deadmarsh@95.38.117.184)
2022-02-21 08:00:54 +0100jonathanx__(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-02-21 08:00:54 +0100jonathanx_(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
2022-02-21 08:01:48 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 08:03:09 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 08:03:09 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 08:03:09 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 08:03:38 +0100 <sshine> Guest89, I stopped putting my pragmas in package.yaml/.cabal because the language server couldn't parse that back when I did it.
2022-02-21 08:04:06 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-02-21 08:06:17 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 08:06:50 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-21 08:07:38 +0100 <sm> freeman42x: ghcid -t sort of thing ?
2022-02-21 08:08:15 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-21 08:10:26 +0100 <freeman42x[m]> sm: what is the description of that in help? sorry, I don't have it installed
2022-02-21 08:12:39 +0100 <sm> https://github.com/ndmitchell/ghcid#evaluation
2022-02-21 08:13:05 +0100arkeet(arkeet@moriya.ca) (Quit: ZNC 1.8.2 - https://znc.in)
2022-02-21 08:13:25 +0100arkeet(arkeet@moriya.ca)
2022-02-21 08:14:58 +0100ardell(~ardell@user/ardell)
2022-02-21 08:17:24 +0100raym(~raym@user/raym) (Ping timeout: 240 seconds)
2022-02-21 08:21:51 +0100michalz(~michalz@185.246.204.61)
2022-02-21 08:23:14 +0100little_mac(~little_ma@2601:410:4300:3ce0:6823:32a0:8d3a:9add) (Remote host closed the connection)
2022-02-21 08:29:15 +0100 <freeman42x[m]> <sm> "https://github.com/ndmitchell/..." <- that is close, what I meant is to provide a REPL eg. GHCI and when saving a file the last command you run in the repl will be rerun. This is what ide-haskell-repl Atom extension does and it is very useful. Can't find anything like it for VSCode though, nor external application
2022-02-21 08:29:43 +0100 <freeman42x[m]> `ghcid -t` says it is for `Set window topmost (Windows only)`
2022-02-21 08:30:50 +0100califax(~califax@user/califx)
2022-02-21 08:34:32 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-21 08:38:57 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-21 08:39:00 +0100coot(~coot@213.134.190.95)
2022-02-21 08:42:01 +0100zeenk(~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
2022-02-21 08:44:21 +0100 <dminuoso> maerwald[m]: Yes.
2022-02-21 08:45:25 +0100 <dminuoso> Postfix configuration generally is not that complicated if you make a few design decisions.
2022-02-21 08:46:21 +0100 <dminuoso> rspamd and dovecot are way more complicated in terms of how you usually configure them
2022-02-21 08:46:30 +0100 <dminuoso> If you make use of these
2022-02-21 08:46:40 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-02-21 08:48:07 +0100 <dminuoso> But yeah, we feel very comfortable this works out nicer with nix. For instance, we have a base profile that configures `services.postfix.config.disable_vrfy_command = true;`, so every postfix we have in our infrastructure has VRFY disabled by default. And this profile is composable with other settings, it's small things like this that are very expressible with nixos.
2022-02-21 08:49:34 +0100 <dminuoso> And we have some pretty sleek automatism to generate multiplexed prometheus exporters on each server, and the nix code generates a discovery.json that gives us automatic service discovery.
2022-02-21 08:49:55 +0100 <dminuoso> So we just have to turn on `services.postfix.enable = true;` on any server, and it will automatigally be included by our monitoring
2022-02-21 08:50:18 +0100 <dminuoso> Anyway. Not trying to convince you it's great which Im sure you disagree with.
2022-02-21 08:55:25 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-02-21 08:56:59 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:48c3:41d8:b68d:811a)
2022-02-21 08:57:02 +0100Ariakenom(~Ariakenom@2001:9b1:efe:9d00:f583:242c:b5f1:2422)
2022-02-21 08:57:15 +0100gehmehgeh(~user@user/gehmehgeh)
2022-02-21 09:01:04 +0100neurocyte0917090(~neurocyte@IP-045136169050.dynamic.medianet-world.de)
2022-02-21 09:01:04 +0100neurocyte0917090(~neurocyte@IP-045136169050.dynamic.medianet-world.de) (Changing host)
2022-02-21 09:01:04 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-21 09:01:55 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 09:02:21 +0100chele(~chele@user/chele)
2022-02-21 09:03:13 +0100Ariakenom_(~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
2022-02-21 09:05:26 +0100kuribas(~user@188.188.61.69)
2022-02-21 09:05:35 +0100Logio(em@kapsi.fi) (Ping timeout: 256 seconds)
2022-02-21 09:05:35 +0100micro(~micro@user/micro) (Ping timeout: 256 seconds)
2022-02-21 09:05:43 +0100Logio(em@kapsi.fi)
2022-02-21 09:06:21 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-02-21 09:06:31 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-21 09:07:03 +0100Ariakenom(~Ariakenom@2001:9b1:efe:9d00:f583:242c:b5f1:2422) (Ping timeout: 256 seconds)
2022-02-21 09:07:04 +0100Sgeo(~Sgeo@user/sgeo)
2022-02-21 09:07:07 +0100micro(~micro@user/micro)
2022-02-21 09:07:42 +0100mc47(~mc47@xmonad/TheMC47)
2022-02-21 09:07:43 +0100mbuf(~Shakthi@122.174.44.9)
2022-02-21 09:08:38 +0100raym(~raym@user/raym)
2022-02-21 09:09:28 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-02-21 09:09:37 +0100kuribas`(~user@dD5779AA0.access.telenet.be)
2022-02-21 09:10:15 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 09:10:57 +0100alp(~alp@user/alp)
2022-02-21 09:11:49 +0100kuribas(~user@188.188.61.69) (Ping timeout: 256 seconds)
2022-02-21 09:15:40 +0100phma_(phma@2001:5b0:211f:f48:ea23:e8cf:9b9f:fa4a)
2022-02-21 09:16:16 +0100phma(phma@2001:5b0:211c:8bf8:1555:98c1:2056:8534) (Read error: Connection reset by peer)
2022-02-21 09:18:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 09:18:54 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 09:18:54 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 09:22:10 +0100jakalx(~jakalx@base.jakalx.net)
2022-02-21 09:23:34 +0100briandaed(~root@109.95.142.93.r.toneticgroup.pl)
2022-02-21 09:23:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-02-21 09:25:17 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 09:27:08 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2022-02-21 09:28:20 +0100k8yun(~k8yun@user/k8yun)
2022-02-21 09:28:43 +0100k8yun(~k8yun@user/k8yun) (Remote host closed the connection)
2022-02-21 09:33:45 +0100kuribas`(~user@dD5779AA0.access.telenet.be) (Remote host closed the connection)
2022-02-21 09:35:54 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-02-21 09:37:30 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475)
2022-02-21 09:40:53 +0100cfricke(~cfricke@user/cfricke)
2022-02-21 09:44:56 +0100acidjnk(~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de)
2022-02-21 09:45:17 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-02-21 09:47:15 +0100random(~random@46.254.129.49) (Remote host closed the connection)
2022-02-21 09:48:57 +0100toastloop(~toastloop@user/toastloop) (Quit: Leaving)
2022-02-21 09:49:22 +0100toastloop(~toastloop@user/toastloop)
2022-02-21 09:49:44 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 09:49:44 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 09:49:44 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 09:55:17 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2022-02-21 09:55:25 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 09:56:40 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 09:57:36 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-21 09:58:27 +0100wolfshappen(~waff@irc.furworks.de) (Ping timeout: 272 seconds)
2022-02-21 09:58:30 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 09:58:43 +0100wolfshappen(~waff@irc.furworks.de)
2022-02-21 10:03:00 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-21 10:03:12 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-02-21 10:05:49 +0100ccntrq(~Thunderbi@2a01:e34:eccb:b060:9e4b:b673:9870:6415)
2022-02-21 10:10:20 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-21 10:12:39 +0100arievw(~arievw@85.148.234.95)
2022-02-21 10:16:57 +0100shreyasminocha(51fdc93eda@user/shreyasminocha) (Ping timeout: 240 seconds)
2022-02-21 10:16:57 +0100raghavgururajan(ea769b8000@user/raghavgururajan) (Ping timeout: 240 seconds)
2022-02-21 10:17:01 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8) (Ping timeout: 245 seconds)
2022-02-21 10:17:01 +0100filwisher(2e6936c793@2604:bf00:561:2000::170) (Ping timeout: 245 seconds)
2022-02-21 10:17:01 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e) (Ping timeout: 245 seconds)
2022-02-21 10:17:17 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4) (Ping timeout: 240 seconds)
2022-02-21 10:18:02 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2) (Ping timeout: 240 seconds)
2022-02-21 10:18:03 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2) (Ping timeout: 250 seconds)
2022-02-21 10:18:15 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8)
2022-02-21 10:18:17 +0100jleightcap(7bc4014b62@user/jleightcap) (Ping timeout: 240 seconds)
2022-02-21 10:18:27 +0100jleightcap(7bc4014b62@user/jleightcap)
2022-02-21 10:18:37 +0100dawdler(035b60b5aa@user/dawdler) (Read error: Connection reset by peer)
2022-02-21 10:18:37 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (Ping timeout: 240 seconds)
2022-02-21 10:18:39 +0100jakzale_(6291399afa@user/jakzale)
2022-02-21 10:18:39 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4)
2022-02-21 10:18:39 +0100evanrelf_(3addc196af@2604:bf00:561:2000::f0)
2022-02-21 10:18:40 +0100raghavgururajan(ea769b8000@user/raghavgururajan)
2022-02-21 10:18:55 +0100sm2n(ae95cb1267@user/sm2n) (Ping timeout: 250 seconds)
2022-02-21 10:18:59 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6)
2022-02-21 10:18:59 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
2022-02-21 10:18:59 +0100dawdler(035b60b5aa@user/dawdler)
2022-02-21 10:19:02 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0) (Ping timeout: 240 seconds)
2022-02-21 10:19:02 +0100jakzale(6291399afa@user/jakzale) (Ping timeout: 240 seconds)
2022-02-21 10:19:02 +0100samhh(7569f027cf@2604:bf00:561:2000::e4) (Ping timeout: 240 seconds)
2022-02-21 10:19:02 +0100jakzale_jakzale
2022-02-21 10:19:03 +0100evanrelf_evanrelf
2022-02-21 10:19:10 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2)
2022-02-21 10:19:11 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2022-02-21 10:19:20 +0100samhh(7569f027cf@2604:bf00:561:2000::e4)
2022-02-21 10:19:23 +0100shreyasminocha(51fdc93eda@user/shreyasminocha)
2022-02-21 10:19:41 +0100sm2n(ae95cb1267@user/sm2n)
2022-02-21 10:19:49 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2)
2022-02-21 10:19:54 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e)
2022-02-21 10:19:54 +0100filwisher(2e6936c793@2604:bf00:561:2000::170)
2022-02-21 10:23:04 +0100jespada(~jespada@148.252.132.52)
2022-02-21 10:29:45 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
2022-02-21 10:30:59 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 10:32:53 +0100eggplant_(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 10:35:48 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
2022-02-21 10:41:53 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-02-21 10:42:19 +0100toastloop(~toastloop@user/toastloop) (Leaving)
2022-02-21 10:45:01 +0100cosimone(~user@93-34-132-33.ip49.fastwebnet.it)
2022-02-21 10:53:33 +0100eggplant_(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection)
2022-02-21 10:53:49 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-21 10:54:54 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 10:55:59 +0100MajorBiscuit(~MajorBisc@c-001-030-015.client.tudelft.eduvpn.nl)
2022-02-21 10:56:59 +0100xff0x(~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8) (Ping timeout: 256 seconds)
2022-02-21 10:57:47 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-02-21 10:59:46 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-21 11:01:09 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 272 seconds)
2022-02-21 11:01:44 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-21 11:03:33 +0100`2jt(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-21 11:05:16 +0100fendor(~fendor@77.119.193.215.wireless.dyn.drei.com)
2022-02-21 11:05:37 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be)
2022-02-21 11:06:57 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-02-21 11:08:54 +0100xff0x(~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
2022-02-21 11:09:41 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 256 seconds)
2022-02-21 11:11:31 +0100ccntrq(~Thunderbi@2a01:e34:eccb:b060:9e4b:b673:9870:6415) (Remote host closed the connection)
2022-02-21 11:13:36 +0100ccntrq(~Thunderbi@2a01:e34:eccb:b060:768b:1849:a78b:4ad)
2022-02-21 11:13:47 +0100vglfr(~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
2022-02-21 11:13:57 +0100vglfr(~vglfr@coupling.penchant.volia.net)
2022-02-21 11:16:51 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-21 11:21:29 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
2022-02-21 11:23:39 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-21 11:25:53 +0100coot(~coot@213.134.190.95)
2022-02-21 11:36:49 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 11:40:19 +0100 <turlando> Using a stack project, is it possible to load from ghci the modules residing in the app directory without touching the package.yaml?
2022-02-21 11:41:00 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-02-21 11:43:39 +0100zachel(~zachel@user/zachel) (Quit: Quit: Leaving!)
2022-02-21 11:46:05 +0100fendor(~fendor@77.119.193.215.wireless.dyn.drei.com) (Remote host closed the connection)
2022-02-21 11:46:54 +0100zachel(~zachel@user/zachel)
2022-02-21 11:47:21 +0100 <ski> "The only real strong opinion I have is that you should avoid Stack's (optional) use of `hpack' at all costs. `hpack' is a tool that generates `.cabal' files from `package.yaml'. In the past there were some (in my personal opinion, weak) reasons for using `package.yaml', but those are nowadays possible in `.cabal' too."
2022-02-21 11:47:33 +0100 <ski> "`package.yaml' does not support all CABAL features and requires all your potential users to install extra tooling. The `.cabal' format is understood by both `cabal-install' and `stack' without extra tools, so everyone can just use/contribute with their preferred tools." -- "The Cabal/Stack Disambiguation Guide" <https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07>
2022-02-21 11:48:57 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 240 seconds)
2022-02-21 11:48:57 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:48c3:41d8:b68d:811a) (Ping timeout: 240 seconds)
2022-02-21 11:50:44 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-21 11:51:36 +0100 <geekosaur> not that that answers the question, I think,but then I'm not entirely sure what the question is
2022-02-21 11:51:50 +0100 <geekosaur> note that ghci is dumb and doesn't handlemultiple modules well
2022-02-21 11:51:59 +0100 <merijn> s/well//
2022-02-21 11:52:01 +0100 <geekosaur> neither stacknor cabal can help much with this
2022-02-21 11:52:48 +0100 <geekosaur> there is some limited support, see :add
2022-02-21 11:53:55 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 11:55:17 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
2022-02-21 11:56:54 +0100geekosaurwonders if a PhD thesis could be squeezed out of designing a better repl
2022-02-21 11:58:12 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds)
2022-02-21 12:00:37 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-02-21 12:01:14 +0100dvdrw(~dvdrw@87.116.162.63)
2022-02-21 12:01:40 +0100dvdrw(~dvdrw@87.116.162.63) (Changing host)
2022-02-21 12:01:40 +0100dvdrw(~dvdrw@user/dvdrw)
2022-02-21 12:02:08 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-21 12:02:08 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-02-21 12:02:28 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-02-21 12:03:17 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-21 12:06:58 +0100 <merijn> there was work in progress on multi-component GHCI
2022-02-21 12:07:00 +0100 <merijn> for GSoC
2022-02-21 12:08:39 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Quit: leaving)
2022-02-21 12:12:52 +0100jao(~jao@static-68-235-44-61.cust.tzulo.com)
2022-02-21 12:14:12 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-02-21 12:15:07 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-02-21 12:16:41 +0100shailangsa(~shailangs@host86-186-127-164.range86-186.btcentralplus.com) (Remote host closed the connection)
2022-02-21 12:19:37 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 12:20:19 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 12:23:26 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-02-21 12:24:46 +0100cynomys(~cynomys@user/cynomys) (Ping timeout: 256 seconds)
2022-02-21 12:25:03 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-21 12:25:10 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-21 12:33:28 +0100__monty__(~toonn@user/toonn)
2022-02-21 12:35:31 +0100zaquest(~notzaques@5.130.79.72) (Ping timeout: 272 seconds)
2022-02-21 12:37:49 +0100qwedfg(~qwedfg@user/qwedfg) (Remote host closed the connection)
2022-02-21 12:38:33 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
2022-02-21 12:39:03 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-21 12:40:08 +0100Midjak(~Midjak@82.66.147.146)
2022-02-21 12:40:24 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-21 12:40:58 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-02-21 12:41:16 +0100qwedfg(~qwedfg@user/qwedfg)
2022-02-21 12:41:36 +0100 <turlando> Tanks ski, will check that
2022-02-21 12:42:05 +0100 <turlando> Eventually what I really needed was as simple as stack ghci project:project-exe with the default stack naming
2022-02-21 12:49:03 +0100Guest|99(~Guest|99@n151-p1.eduroam.kth.se)
2022-02-21 12:49:22 +0100Guest|99(~Guest|99@n151-p1.eduroam.kth.se) (Client Quit)
2022-02-21 12:51:21 +0100zachel(~zachel@user/zachel) (Quit: Quit: Leaving!)
2022-02-21 12:51:48 +0100zachel(~zachel@user/zachel)
2022-02-21 12:53:21 +0100 <FernandoChu[m]> why do type classes require that their methods use all the types? E.g. if `Foo a b` is my type class, `f :: a` can't be a method, as the compiler complains that `f` is now ambiguous (which seems to me to be true but only as long as there are multiple instances). But it seems to me that even if I replaced `f` with `g :: (a,b)` then `g` is still ambiguous (again, if I have multiple instances)
2022-02-21 12:53:52 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-21 12:54:06 +0100acidjnk(~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2022-02-21 12:56:57 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-02-21 12:57:11 +0100califax(~califax@user/califx)
2022-02-21 13:01:19 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-21 13:02:35 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 13:05:01 +0100vickyHaskell(~textual@49.37.161.125)
2022-02-21 13:05:53 +0100 <vickyHaskell> Hello all, I am newbie to haskell/purescript, is this the right place to ask basic queries
2022-02-21 13:06:56 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-02-21 13:07:44 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
2022-02-21 13:08:03 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 13:09:49 +0100 <vickyHaskell> please refer to https://paste.tomsmeding.com/sCbxddGX my question is flip takes in a function with 2 inputs, where as if you look at line 21 flip is taking in the function apply that only takes one input, this is working and I am not able to get my head around on how it is working, any help highly appreciated
2022-02-21 13:10:31 +0100 <Franciman> hi vickyHaskell it sure is
2022-02-21 13:10:39 +0100 <Franciman> regarding purescript there is also the dedicated channel #purescript
2022-02-21 13:10:57 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c36d:f85d:bf20:a174)
2022-02-21 13:11:33 +0100 <vickyHaskell> Sure I will go there, thanks francis, but I guess this question can be answered by haskell users as well.
2022-02-21 13:11:37 +0100phma_phma
2022-02-21 13:13:13 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-21 13:13:39 +0100zer0bitz(~zer0bitz@2001:2003:f74d:b800:3027:99e6:c0d6:7e32)
2022-02-21 13:14:06 +0100 <Franciman> vickyHaskell: i would reason as follows
2022-02-21 13:14:48 +0100 <Franciman> you can easily understand how flip works, right?
2022-02-21 13:15:14 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-02-21 13:15:22 +0100 <Franciman> :t flip
2022-02-21 13:15:23 +0100 <lambdabot> (a -> b -> c) -> b -> a -> c
2022-02-21 13:15:32 +0100 <Franciman> haskell has it too lol
2022-02-21 13:15:46 +0100deadmarshal(~deadmarsh@95.38.117.184) (Ping timeout: 256 seconds)
2022-02-21 13:15:53 +0100 <Franciman> given a function, it creates a new function which accepts the argument in reverse order
2022-02-21 13:15:57 +0100 <Franciman> let me explain what i mean
2022-02-21 13:16:02 +0100 <Franciman> :t (-)
2022-02-21 13:16:03 +0100 <lambdabot> Num a => a -> a -> a
2022-02-21 13:16:07 +0100 <Franciman> this is subtraction
2022-02-21 13:16:08 +0100 <vickyHaskell> I usnderstand how flip works
2022-02-21 13:16:10 +0100 <Franciman> and
2022-02-21 13:16:19 +0100 <Franciman> > (-) 3 1
2022-02-21 13:16:21 +0100 <lambdabot> 2
2022-02-21 13:16:31 +0100 <Franciman> now if i apply flip to (-), i get a new function
2022-02-21 13:16:33 +0100Giovanni(~Giovanni@176.67.166.45)
2022-02-21 13:16:40 +0100 <Franciman> > (flip (-)) 3 1
2022-02-21 13:16:42 +0100 <lambdabot> -2
2022-02-21 13:17:09 +0100 <Franciman> the new function runs the subtraction `1 - 3`
2022-02-21 13:17:46 +0100 <vickyHaskell> that is correct, but fundamentally the first input to flip is a function (a->b->c) that takes 2 inputs, but apply is only taking 1 input, how is that passing
2022-02-21 13:17:57 +0100 <Franciman> apply takes 2 inputs
2022-02-21 13:17:59 +0100 <vickyHaskell> (-
2022-02-21 13:18:01 +0100 <Franciman> the first is a function
2022-02-21 13:18:09 +0100 <Franciman> and the second is the argument to which you want to apply the function
2022-02-21 13:18:14 +0100 <Franciman> in haskell the name of apply is:
2022-02-21 13:18:16 +0100 <Franciman> :t ($)
2022-02-21 13:18:17 +0100 <lambdabot> (a -> b) -> a -> b
2022-02-21 13:18:59 +0100 <Franciman> apply takes two arguments, a function f :: a -> b, and an argument x :: a
2022-02-21 13:19:00 +0100 <vickyHaskell> same in purescript as well
2022-02-21 13:19:03 +0100 <Franciman> yes
2022-02-21 13:19:07 +0100notzmv(~zmv@user/notzmv)
2022-02-21 13:19:10 +0100 <Franciman> apply f a = f a
2022-02-21 13:19:36 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 13:19:52 +0100 <Franciman> so, flip apply's type is
2022-02-21 13:19:54 +0100 <vickyHaskell> ok now I get it, apply is also taking 2 aguments
2022-02-21 13:19:56 +0100 <Franciman> :t flip ($)
2022-02-21 13:19:57 +0100 <lambdabot> a -> (a -> c) -> c
2022-02-21 13:20:00 +0100 <Franciman> yes
2022-02-21 13:20:29 +0100 <Franciman> apply (\x -> x + 1) 3
2022-02-21 13:20:33 +0100 <Franciman> this is how you call it
2022-02-21 13:20:43 +0100 <Franciman> > ($) (\x -> x + 1) 3
2022-02-21 13:20:45 +0100 <lambdabot> 4
2022-02-21 13:20:52 +0100 <Franciman> > ($) (\x -> x + 5) 3
2022-02-21 13:20:54 +0100 <lambdabot> 8
2022-02-21 13:20:58 +0100 <Franciman> > ($) (\x -> x * 5) 3
2022-02-21 13:20:59 +0100 <lambdabot> 15
2022-02-21 13:21:06 +0100jao(~jao@static-68-235-44-61.cust.tzulo.com) (Ping timeout: 272 seconds)
2022-02-21 13:21:11 +0100 <Franciman> i ran apply (or haskell's name for it), to 3 different functions
2022-02-21 13:21:25 +0100 <vickyHaskell> Thank you Francis & lamdabot, now it seems to me the question was dumb on my part, I did not understand apply properly.
2022-02-21 13:21:51 +0100 <Franciman> vickyHaskell: what matters is that you understood
2022-02-21 13:21:57 +0100 <Franciman> questions are cheap
2022-02-21 13:22:34 +0100 <dvdrw> no reason to fret, it's always a bunch of small steps :)
2022-02-21 13:22:52 +0100jao(~jao@66.63.167.109)
2022-02-21 13:23:05 +0100 <vickyHaskell> Yes I did, basically flip, flips the order of inputs, as apply has 2 inputs it is simply fliping the order
2022-02-21 13:23:25 +0100 <Franciman> correct
2022-02-21 13:24:53 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 256 seconds)
2022-02-21 13:27:52 +0100 <[exa]> vickyHaskell: it is slightly interesting to check out what actually happens with the type of "flip" in that expression
2022-02-21 13:28:48 +0100jao(~jao@66.63.167.109) (Ping timeout: 256 seconds)
2022-02-21 13:29:14 +0100 <[exa]> vickyHaskell: the argument of `flip` has type `a -> b -> c` for some combination of a,b,c types, and you're pushing ($) into that, which has type `(x -> y) -> x -> y`
2022-02-21 13:29:49 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 13:29:51 +0100exadifficult(~etadiffic@95.155.49.108) (Quit: Client closed)
2022-02-21 13:31:17 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-21 13:33:57 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 13:35:47 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
2022-02-21 13:41:20 +0100Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-02-21 13:48:21 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
2022-02-21 13:54:26 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-02-21 13:56:01 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 13:56:31 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-02-21 13:59:27 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-02-21 14:00:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 256 seconds)
2022-02-21 14:05:33 +0100deadmarshal(~deadmarsh@95.38.117.184)
2022-02-21 14:07:52 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-02-21 14:07:59 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-21 14:09:32 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
2022-02-21 14:14:17 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-02-21 14:14:59 +0100Hecate(~mariposa@user/hecate) (Ping timeout: 256 seconds)
2022-02-21 14:15:28 +0100Hecate(~mariposa@user/hecate)
2022-02-21 14:17:28 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 14:17:45 +0100alp(~alp@user/alp)
2022-02-21 14:21:21 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-21 14:23:17 +0100 <dminuoso> FernandoChu[m]:
2022-02-21 14:23:50 +0100shailangsa(~shailangs@host86-186-127-164.range86-186.btcentralplus.com)
2022-02-21 14:24:30 +0100 <dminuoso> FernandoChu[m]: The ambiguity problem exists irrespective of how many instances we have.
2022-02-21 14:24:42 +0100 <dminuoso> Consider we are writing a module in isolation:
2022-02-21 14:25:09 +0100 <dminuoso> `module Foo () where instance Foo Int String where f = 1`
2022-02-21 14:25:10 +0100meinside(uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-21 14:26:00 +0100 <dminuoso> You might say "well, `f` cant possibly be ambiguous. But the problem is, we have what's called an open world assumption. Anyone, anywhere, in any point in the future or past, can define an additional `instance Foo Int Char`
2022-02-21 14:27:16 +0100 <dminuoso> So we assume that the typeclass instances are open, that means we never know the full extend of available instances.
2022-02-21 14:27:46 +0100 <dminuoso> However, your second option is perfectly valid and not ambiguous
2022-02-21 14:27:49 +0100ph88(~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
2022-02-21 14:28:07 +0100 <dminuoso> % class Two a b where g :: (a, b)
2022-02-21 14:28:08 +0100 <yahb> dminuoso:
2022-02-21 14:28:18 +0100 <dminuoso> % instance Two Int String where g = (1, "foo")
2022-02-21 14:28:18 +0100 <yahb> dminuoso:
2022-02-21 14:28:25 +0100 <dminuoso> % instance Two Char Double where g = ('a', 3.0)
2022-02-21 14:28:25 +0100 <yahb> dminuoso:
2022-02-21 14:28:42 +0100 <dminuoso> The reason this works out is because `g` is a polymorphic value. That means:
2022-02-21 14:28:43 +0100 <dminuoso> % :t g
2022-02-21 14:28:43 +0100 <yahb> dminuoso: forall {a} {b}. Two a b => (a, b)
2022-02-21 14:29:38 +0100 <dminuoso> The *consumer*/*user* of a polymorphic value, like `g` above, must decide for the type variables `a` and `b`. i.e. they must make some choice, as long as the cosntraint `Two a b` is satisfied
2022-02-21 14:29:51 +0100 <dminuoso> % g :: (Char, Double)
2022-02-21 14:29:52 +0100 <yahb> dminuoso: ('a',3.0)
2022-02-21 14:29:57 +0100 <dminuoso> % g :: (Int, String)
2022-02-21 14:29:58 +0100 <yahb> dminuoso: (1,"foo")
2022-02-21 14:30:16 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
2022-02-21 14:30:20 +0100 <dminuoso> That rule, that the caller/consumer/user of a polymorphic thing must decide what the type variables be, always holds. :)
2022-02-21 14:31:16 +0100hololeap(~hololeap@user/hololeap) (Ping timeout: 240 seconds)
2022-02-21 14:31:45 +0100 <FernandoChu[m]> hmm ok, but what about something like `h :: a -> b`. As you said there could be instances `Foo Int Char` and `Foo Int String` so that `charOrInt = h 0` is ambiguous, right?
2022-02-21 14:31:50 +0100hololeap(~hololeap@user/hololeap)
2022-02-21 14:32:08 +0100 <dminuoso> FernandoChu[m]: Consider what I wrote at face value.
2022-02-21 14:32:22 +0100 <dminuoso> The *user* of a polymorphic thing must decide the types of its type variables.
2022-02-21 14:32:44 +0100ec(~ec@gateway/tor-sasl/ec)
2022-02-21 14:32:56 +0100 <dminuoso> So if `h` was a method of `Two`, then whoever *uses* h must decide what `a` and `b` are going to be.
2022-02-21 14:32:58 +0100 <FernandoChu[m]> ohhhh
2022-02-21 14:33:09 +0100 <dminuoso> This usage is *usually* inferred
2022-02-21 14:33:16 +0100 <dminuoso> But sometimes it needs a helping hand
2022-02-21 14:33:59 +0100 <dminuoso> FernandoChu[m]: More to the point, he has the obligation (and freedom) to chose *any* type for a type variable, as long as the constraint (the thing left to the => arrow) is satisfied.
2022-02-21 14:34:04 +0100 <dminuoso> Or she/it.
2022-02-21 14:34:20 +0100 <FernandoChu[m]> got it, that's why `f :: a` is illegal, because it's not possible to specify which instance you're referring to even with annotations
2022-02-21 14:34:28 +0100 <dminuoso> Exactly.
2022-02-21 14:34:33 +0100 <FernandoChu[m]> thanks a lot for your time and explanation!
2022-02-21 14:34:36 +0100ardell(~ardell@user/ardell) (Ping timeout: 240 seconds)
2022-02-21 14:35:34 +0100 <dminuoso> FernandoChu[m]: By the way, we can still make `f :: a` work with a bit of trickery!
2022-02-21 14:35:51 +0100 <FernandoChu[m]> fundeps right?
2022-02-21 14:35:54 +0100 <dminuoso> No, much simpler
2022-02-21 14:36:00 +0100 <dminuoso> We make a very simple helper data type
2022-02-21 14:36:02 +0100 <FernandoChu[m]> :O
2022-02-21 14:36:05 +0100 <dminuoso> % data Proxy a = Proxy
2022-02-21 14:36:05 +0100 <yahb> dminuoso:
2022-02-21 14:36:12 +0100 <dminuoso> This thing is completely blant, it's almost like () right?
2022-02-21 14:36:27 +0100 <FernandoChu[m]> I see
2022-02-21 14:36:28 +0100 <dminuoso> So now we can conjure this:
2022-02-21 14:36:38 +0100 <FernandoChu[m]> so `f :: a -> Proxy a
2022-02-21 14:36:40 +0100 <FernandoChu[m]> ?
2022-02-21 14:36:45 +0100 <dminuoso> Not quite
2022-02-21 14:36:50 +0100 <dminuoso> % data Foo a b where h :: Proxy a -> b
2022-02-21 14:36:50 +0100 <yahb> dminuoso: ; <interactive>:90:20: error: parse error on input `h'
2022-02-21 14:37:01 +0100 <dminuoso> % class Foo a b where h :: Proxy a -> b
2022-02-21 14:37:01 +0100 <yahb> dminuoso:
2022-02-21 14:37:02 +0100 <FernandoChu[m]> yeah oops
2022-02-21 14:37:06 +0100 <dminuoso> So now you can do:
2022-02-21 14:37:06 +0100euandreh(~euandreh@2804:14c:33:9fe5:41b:9f3:a75a:9b8b) (Ping timeout: 260 seconds)
2022-02-21 14:37:14 +0100 <dminuoso> h (Proxy :: Proxy Int)
2022-02-21 14:37:48 +0100 <FernandoChu[m]> very interesting, it's just extra fodder to carry the type information
2022-02-21 14:37:52 +0100 <dminuoso> Exactly! :)
2022-02-21 14:37:57 +0100 <FernandoChu[m]> thanks for sharing that too :)
2022-02-21 14:39:46 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-21 14:46:13 +0100komikat(~komikat@183.82.154.44)
2022-02-21 14:46:27 +0100 <komikat> hi
2022-02-21 14:46:52 +0100 <geekosaur> hi
2022-02-21 14:46:57 +0100 <komikat> epic this works
2022-02-21 14:47:58 +0100 <geekosaur> you might also be interested in matrix, which gives you a more web-like environment. I think we're #haskell@matrix.org
2022-02-21 14:48:54 +0100 <dminuoso> Mmm, Im not sure that a "more web-like environment" is a good thing... :)
2022-02-21 14:49:09 +0100 <dminuoso> Next thing you know, people can just write javascript or haskell code in the chat, and your client will execute it for your convenience...
2022-02-21 14:49:15 +0100 <komikat> XD
2022-02-21 14:49:23 +0100 <komikat> is there any benefit to using matrix over irc?
2022-02-21 14:49:31 +0100 <komikat> because I'm comfortable with irc
2022-02-21 14:49:37 +0100 <[exa]> unlikely
2022-02-21 14:49:47 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 272 seconds)
2022-02-21 14:49:50 +0100 <komikat> cool
2022-02-21 14:49:54 +0100 <geekosaur> #haskell:matrix.org apparently
2022-02-21 14:50:00 +0100 <[exa]> perhaps do they provide chat history?
2022-02-21 14:50:09 +0100 <geekosaur> some people like IRC, some prefer the more "modern" matrix environment
2022-02-21 14:50:10 +0100 <hpc> if you're already using matrix for something else the bridge means you don't need more than one chat client
2022-02-21 14:50:13 +0100 <hpc> and that's about it
2022-02-21 14:50:20 +0100 <geekosaur> matrix does have chat history, yes
2022-02-21 14:50:32 +0100 <komikat> I think I'm already on the matrix
2022-02-21 14:50:50 +0100 <komikat> makes sense
2022-02-21 14:51:05 +0100 <komikat> I prefer discord but IRC seems nice
2022-02-21 14:51:39 +0100 <dminuoso> I never quite understood why matrix took off but jabber did not.
2022-02-21 14:51:51 +0100 <[exa]> better name
2022-02-21 14:52:02 +0100 <geekosaur> I haven't seen many good jabber clients tbh
2022-02-21 14:52:14 +0100 <komikat> "joining the matrix"
2022-02-21 14:52:17 +0100 <komikat> sounds cool so theres that
2022-02-21 14:52:22 +0100 <geekosaur> tried a bunch of them a couple years agoand all of them sucked in one way or another
2022-02-21 14:52:37 +0100 <[exa]> we've run jabber clients and servers for like 10 years, but everyone moved to slacks nowadays
2022-02-21 14:53:01 +0100 <dminuoso> geekosaur: whatsapp and zoom use xmpp variants.
2022-02-21 14:53:02 +0100Guest89(~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197) (Quit: Client closed)
2022-02-21 14:53:32 +0100 <merijn> jabber is mostly dead anyway. There was some hope when GoogleTalk still supported it, but now there's no critical mass
2022-02-21 14:53:37 +0100 <dminuoso> But I guess this is the typical "if its not new, its not hip" problem
2022-02-21 14:53:56 +0100 <dminuoso> Add some "json", "go libraries" and "npm packages" - and you've won your popularity contest.
2022-02-21 14:54:59 +0100 <komikat> add some "Artificial intelligence" for some more traction
2022-02-21 14:55:41 +0100dsrt^(~dsrt@50.233.120.162) (Remote host closed the connection)
2022-02-21 14:55:43 +0100 <Clint> i would guess that it's because matrix prioritized group chat in a way that jabber never did
2022-02-21 14:55:48 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
2022-02-21 14:55:56 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-21 14:58:34 +0100 <komikat> stack or cabal
2022-02-21 14:59:17 +0100 <geekosaur> pick one. the community'sabout 50-50 on it these days
2022-02-21 14:59:35 +0100 <geekosaur> cabal used to have problems but cabal 2.x and above work quite well
2022-02-21 14:59:46 +0100 <komikat> coo
2022-02-21 14:59:48 +0100 <komikat> l
2022-02-21 14:59:50 +0100 <dminuoso> And stack has its own share of issues.
2022-02-21 15:00:11 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-21 15:00:50 +0100peri4n(~peri4n@85.232.9.17)
2022-02-21 15:01:38 +0100 <dminuoso> komikat: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07
2022-02-21 15:01:51 +0100 <dminuoso> This is a relatively neutral comparison between the two
2022-02-21 15:01:51 +0100 <komikat> dminuoso: thanks
2022-02-21 15:02:08 +0100 <komikat> oh is this how you reply to people, very cool
2022-02-21 15:02:34 +0100 <geekosaur> yes, colon or comma will work. and for many of us a mention anywhere in the line will work (but this is not universal)
2022-02-21 15:02:57 +0100 <dminuoso> The colon and space (or some similar separator) is automatically inserted by most clients tab-completion.
2022-02-21 15:03:37 +0100 <komikat> interesting
2022-02-21 15:05:46 +0100 <freeman42x[m]> ski: question regarding the stack / cabal gist you shared: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07?permalink_comment_id=4073014#gistc…
2022-02-21 15:08:21 +0100 <geekosaur> cabal has -w. cabal's assumption is you have standardized on one ghc version and it adapts to that, rather than the ghc version being picked per project
2022-02-21 15:08:56 +0100 <geekosaur> this isn't always ideal, since you don;t have any say in what version of `base` is used with that compiler
2022-02-21 15:09:06 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-02-21 15:09:32 +0100 <geekosaur> also, you can get from stackage a cabal freeze file which serves many of the purposes of a resolver
2022-02-21 15:10:06 +0100 <dminuoso> But you can address this with very minor overhead of setting up `ghc` and `cabal` using a) nix-shell, b) direnv, some other mechanism
2022-02-21 15:10:58 +0100 <dminuoso> so Im a cabal user, and every project has at least some 10 line shell.nix to set up ghc, cabal and libraries at specific versions needed for that project
2022-02-21 15:10:59 +0100Guest89(~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197)
2022-02-21 15:12:26 +0100euandreh(~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
2022-02-21 15:14:02 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-21 15:14:42 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2022-02-21 15:19:18 +0100mon_aaraj(~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
2022-02-21 15:23:26 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-02-21 15:25:00 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 15:25:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 15:25:18 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 15:25:18 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 15:28:49 +0100hololeap_(~hololeap@user/hololeap)
2022-02-21 15:29:16 +0100hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2022-02-21 15:29:17 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 15:30:07 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 15:30:28 +0100komikat(~komikat@183.82.154.44)
2022-02-21 15:30:39 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-02-21 15:30:39 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
2022-02-21 15:31:28 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-02-21 15:33:27 +0100 <freeman42x[m]> dminuoso: If I could I would use Nix + Cabal everywhere since it gives very stable builds etc.; but on native Windows it's not possiblet yet (no WSL, CYGWIN, MINGW, or other VM or emulation) because of no Nix on Windows yet
2022-02-21 15:34:30 +0100 <dminuoso> freeman42x[m]: regarding "stable builds", ask davean about that.. :)
2022-02-21 15:34:47 +0100 <dminuoso> They have a great story about doJailbreak and its widespread use in nixpkgs
2022-02-21 15:36:06 +0100telser(~quassel@user/telser)
2022-02-21 15:36:25 +0100 <komikat> is there a way to get ghci to "remember" my settings
2022-02-21 15:36:39 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2022-02-21 15:36:39 +0100 <geekosaur> create a .ghci file
2022-02-21 15:36:42 +0100 <komikat> like remembering I :set prefix to something else
2022-02-21 15:36:43 +0100 <komikat> oh
2022-02-21 15:36:47 +0100 <komikat> cool
2022-02-21 15:36:57 +0100 <freeman42x[m]> dminuoso: I was asking specifically for native Windows cabal only development (no Nix). what geekosaur said, the cabal freze from stackage would be a solution. does cabal by itself have any other way to solve the issue that stackage fixes?
2022-02-21 15:36:58 +0100 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-ghci-and-haskeline-fi…
2022-02-21 15:37:38 +0100 <geekosaur> you can create a global one, or per project
2022-02-21 15:37:56 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
2022-02-21 15:38:02 +0100 <dminuoso> freeman42x[m]: I dont understand the question.
2022-02-21 15:38:18 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 15:38:45 +0100 <komikat> geekosaur: thanks
2022-02-21 15:38:45 +0100Flonk(~Flonk@vps-zap441517-1.zap-srv.com)
2022-02-21 15:39:24 +0100euandreh(~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1) (Ping timeout: 240 seconds)
2022-02-21 15:39:34 +0100 <freeman42x[m]> dminuoso: stack used to solve the main cabal hell issue: packages not compiling well together via stackage. did cabal (no Nix) solve that issue in any other way except using a stackage freeze file?
2022-02-21 15:39:50 +0100jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-02-21 15:40:01 +0100 <dminuoso> freeman42x[m]: cabal solves it like nix does, roughly
2022-02-21 15:40:05 +0100 <dminuoso> it's nix-inspired
2022-02-21 15:40:31 +0100jpds(~jpds@gateway/tor-sasl/jpds)
2022-02-21 15:40:33 +0100 <dminuoso> Which is why you sometime see the v2-* style commands (which are now the default comments) referred to as nix-style commands.
2022-02-21 15:40:38 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-21 15:40:50 +0100 <dminuoso> or rather, it solves it better than nix
2022-02-21 15:41:15 +0100 <dminuoso> the cabal resolver has the entirety of hackage at its disposal and will compute a build plan that satisfies all given constraints
2022-02-21 15:41:24 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-02-21 15:41:45 +0100euandreh(~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
2022-02-21 15:42:13 +0100 <dminuoso> and then, it will fetch and build all packages at the exact versions/styles for that build plan - they are then put and shared in a global store
2022-02-21 15:42:18 +0100 <geekosaur> right, stack and cabal do things completely differently here. but you can use freeze files to get cabal to behave like stack
2022-02-21 15:42:19 +0100 <dminuoso> differentiated by some hash
2022-02-21 15:42:36 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-02-21 15:43:11 +0100 <geekosaur> the downside of the stack way is you're dependent on someone continuing to maintain stackage
2022-02-21 15:43:13 +0100zaquest(~notzaques@5.130.79.72)
2022-02-21 15:43:22 +0100 <merijn> and stack itself :p
2022-02-21 15:43:43 +0100 <geekosaur> as stack itself has been relegated to "community maintenance" (which in practice seems to mean not much), one can wonder about stackage
2022-02-21 15:43:54 +0100 <geekosaur> as merijn just commented :)
2022-02-21 15:47:17 +0100 <freeman42x[m]> someone told me: "why are you using Stack? it's 2022 and you know better" :)) tbh. I installed Stack thinking it might provide more functionality than stack and I was also not aware that Cabal fixed the hell related issues. how come there is no cabal/stack feature comparison anywhere? especially considering all the wars fought over which to use
2022-02-21 15:47:29 +0100 <freeman42x[m]> s/stack/cabal/
2022-02-21 15:47:37 +0100 <dminuoso> I dont think there's a way being fought anywhere.
2022-02-21 15:47:46 +0100 <dminuoso> There might be some overzealous individual users
2022-02-21 15:48:34 +0100hud(~hud@uwyo-129-72-161-67.uwyo.edu) (Quit: Client closed)
2022-02-21 15:48:36 +0100HotblackDesiato(~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 240 seconds)
2022-02-21 15:48:36 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-02-21 15:48:37 +0100 <dminuoso> Here on libera the consensus is generally "Either is fine, chose what you want" - though in recent news there's some rising skepticism about the future of stack due to Snoyman taking a timeout
2022-02-21 15:49:41 +0100 <dminuoso> And it does also beg the question of whether we should build all our projects based on software that has a bus factor of little over 1.0
2022-02-21 15:49:48 +0100 <dminuoso> In the first place.
2022-02-21 15:50:23 +0100 <geekosaur> that said, nobody really knows the bus factor of cabal
2022-02-21 15:50:33 +0100 <geekosaur> except the insiders who don't say much
2022-02-21 15:50:56 +0100max22-(~maxime@2a01cb0883359800280d6109c37c5449.ipv6.abo.wanadoo.fr)
2022-02-21 15:51:10 +0100 <merijn> geekosaur: Better than it was before :p
2022-02-21 15:51:19 +0100vickyHaskell(~textual@49.37.161.125) (Ping timeout: 256 seconds)
2022-02-21 15:52:23 +0100 <merijn> Emily and a couple others have taken over after hvr disappeared and phadej quit
2022-02-21 15:52:30 +0100telser(~quassel@user/telser) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-02-21 15:54:02 +0100 <geekosaur> poor hvr is probably trapped somewhere in the source trying to find a way out :)
2022-02-21 15:54:14 +0100 <geekosaur> (either cabal or the matrix builder…)
2022-02-21 15:55:00 +0100ardell(~ardell@user/ardell)
2022-02-21 15:55:02 +0100euandreh(~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1) (Ping timeout: 240 seconds)
2022-02-21 15:56:20 +0100shriekingnoise(~shrieking@201.231.16.156)
2022-02-21 15:57:25 +0100telser(~quassel@user/telser)
2022-02-21 15:57:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 15:58:20 +0100 <freeman42x[m]> any significant features one would miss if switching from Stack to Cabal? or just minor stuff with simple solutions
2022-02-21 15:59:07 +0100 <carbolymer> freeman42x[m]: with cabal freeze I guess it's the same; also LTS constains libraries tested against each other so it's a bit of stability guarantee
2022-02-21 15:59:12 +0100 <geekosaur> the switch from a resolver mindset to a nix-like mindset is the big one
2022-02-21 15:59:50 +0100 <geekosaur> beyond that it should allbe pretty much the same, including that neither one likes to install libraries globally but both will install executables globally if asked
2022-02-21 16:00:03 +0100waleee(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-02-21 16:00:06 +0100 <carbolymer> and stack likes to install GHC ;-]
2022-02-21 16:00:39 +0100 <carbolymer> I need fast, mutable variable (unboxed I guess?) - an array of bytes, I will need to modify it lot (and later pipe to stdout). What would be better, STRef, Foreign.Ptr, or something else?
2022-02-21 16:01:05 +0100 <maerwald> freeman42x[m]: automatic installation of GHC
2022-02-21 16:01:12 +0100 <maerwald> cabal doesn't have it
2022-02-21 16:01:29 +0100 <maerwald> or hpack integration
2022-02-21 16:01:30 +0100 <geekosaur> well, yes, I mentioned that one earlier, stackconsiders ghc version to be a project attribute and will automatically install one based on the resolver, cabal assumes you have standardized on a spexific version
2022-02-21 16:01:38 +0100 <maerwald> I find both features annoying, but if you like those...
2022-02-21 16:01:56 +0100 <geekosaur> hpack is seen as something of a downside these days even by the stack folks
2022-02-21 16:01:57 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds)
2022-02-21 16:02:04 +0100 <maerwald> finally some sanity
2022-02-21 16:02:05 +0100 <carbolymer> geekosaur: why is that?
2022-02-21 16:02:30 +0100 <maerwald> next step: implement an actual constraint solver for stack
2022-02-21 16:02:55 +0100 <geekosaur> because package.yaml isn't as flexible as cabal files and doesn't support as much, so for anything beyond simple projects you need toswitch to cabal files anyway
2022-02-21 16:03:00 +0100polyphem(~rod@2a02:810d:840:8754:22de:a5de:2070:f535) (Ping timeout: 240 seconds)
2022-02-21 16:03:13 +0100 <geekosaur> and anyone who doesn't use stack has to install hpack and generate a cabal file to install
2022-02-21 16:03:17 +0100 <maerwald> and it's also annoying to deal with generated files, it causes other problems
2022-02-21 16:04:32 +0100Guest89(~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197) (Quit: Client closed)
2022-02-21 16:04:35 +0100 <carbolymer> right
2022-02-21 16:05:11 +0100 <carbolymer> but it would be nice to have some kidn of templating layer over cabal files
2022-02-21 16:06:14 +0100 <Artem[m]> carbolymer: like `cabal init`?
2022-02-21 16:06:35 +0100 <geekosaur> cabal's kinda trying to serve two masters here
2022-02-21 16:06:54 +0100 <geekosaur> on the one hand, developers would like something more flexible
2022-02-21 16:07:03 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 272 seconds)
2022-02-21 16:07:11 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-21 16:07:30 +0100 <geekosaur> on the other, one big advantage of current cabal files is they're almost(?) identical to what gets registered in the package database when a package is installed
2022-02-21 16:07:47 +0100 <geekosaur> which is why e.g. they don't want to support module wildcards
2022-02-21 16:08:37 +0100dextaa_(~dextaa@user/dextaa)
2022-02-21 16:08:44 +0100 <carbolymer> Artem[m]: rather other way, just to be able to build modular cabal files which can have parts that can be re-used; but considering how often I modify cabal files it has diminishing returns...
2022-02-21 16:08:50 +0100 <merijn> geekosaur: Also, because hpack isn't stable
2022-02-21 16:09:10 +0100 <merijn> geekosaur: The real problem why Snoyberg stopped recommending hpack is that the cabal files generated change between hpack versions
2022-02-21 16:09:18 +0100 <merijn> Which made reproducible builds hard
2022-02-21 16:09:32 +0100 <maerwald> nixify everything and pin all binaries, libraries, ...
2022-02-21 16:09:36 +0100 <merijn> Unless you just committed the cabal file
2022-02-21 16:09:39 +0100 <maerwald> oh wait, that causes security havoc
2022-02-21 16:10:28 +0100 <dminuoso> why does that cause security havoc?
2022-02-21 16:10:39 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-02-21 16:10:40 +0100 <maerwald> pinning library versions does
2022-02-21 16:10:46 +0100 <dminuoso> Your nix hyperboles are getting a bit tiring...
2022-02-21 16:10:54 +0100 <maerwald> this isn't nix specific
2022-02-21 16:11:02 +0100 <maerwald> freeze files do the same
2022-02-21 16:11:18 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-02-21 16:11:22 +0100 <dminuoso> Usually you pin the nixpkgs in nix, and regularly update it. That way you get security updates automatically
2022-02-21 16:11:25 +0100 <maerwald> PVP was designed so that you get security bugfixes
2022-02-21 16:11:43 +0100 <maerwald> but since it doesn't really work, we're left with excessive dependency pinning
2022-02-21 16:11:57 +0100 <dminuoso> Right, so building straight with nix is fairly ugly for a variety of reasons
2022-02-21 16:12:01 +0100 <maerwald> that is never good security practice
2022-02-21 16:12:06 +0100 <sclv> i mean its the tradeoff. "fully reproducible" means "reproducible bugs and security flaws and all"
2022-02-21 16:12:11 +0100 <maerwald> yeah
2022-02-21 16:12:18 +0100 <dminuoso> haskell.nix does solve it more adequately, at the cost of "yet another ball of nix in the middle"
2022-02-21 16:12:22 +0100acidjnk(~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de)
2022-02-21 16:16:30 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 16:16:42 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 16:16:57 +0100m1dnight(~christoph@christophe.dev) (Quit: WeeChat 3.1)
2022-02-21 16:16:57 +0100 <carbolymer> so... stack and its LTS is the ultimate stable solution for haskell projects?
2022-02-21 16:17:57 +0100 <Clint> stackage ≠ stack
2022-02-21 16:17:57 +0100 <maerwald> no, that's stackage (a package set where everything builds with each other and test suites pass)
2022-02-21 16:18:04 +0100 <maerwald> those can be used with cabal too
2022-02-21 16:18:05 +0100m1dnight(~christoph@78-22-9-5.access.telenet.be)
2022-02-21 16:18:32 +0100 <carbolymer> rly? I didn't know that. How can I point cabal to certain stackage version?
2022-02-21 16:18:56 +0100 <maerwald> https://www.stackage.org/lts-18.26/cabal.config
2022-02-21 16:19:02 +0100 <maerwald> or use stack2cabal
2022-02-21 16:19:17 +0100 <maerwald> that cabal.config can (or rather should) be user as cabal.project.freeze
2022-02-21 16:19:43 +0100 <carbolymer> but either way I should ping GHC version somehow, right?
2022-02-21 16:19:46 +0100 <maerwald> https://cabal.readthedocs.io/en/3.6/cabal-project.html?highlight=cabal.project
2022-02-21 16:19:49 +0100 <carbolymer> s/ping/pin
2022-02-21 16:20:09 +0100 <maerwald> carbolymer: no, GHC is stable within the first two version components
2022-02-21 16:20:38 +0100 <carbolymer> maerwald: so there's no stability guarantee between 8.x and 9.x
2022-02-21 16:20:47 +0100 <carbolymer> maerwald: so still I should pin its version somehow
2022-02-21 16:21:04 +0100 <sclv> you "pin" the ghc version by pinning the version if the "base" library which ships with the ghcs you want to allow
2022-02-21 16:21:21 +0100 <carbolymer> that should work
2022-02-21 16:21:43 +0100 <maerwald> see `ghcup list -t ghc` to see the mapping of ghc version to base version`
2022-02-21 16:21:45 +0100komikat(~komikat@183.82.154.44)
2022-02-21 16:21:53 +0100 <carbolymer> nice
2022-02-21 16:22:18 +0100zaquest(~notzaques@5.130.79.72) (Ping timeout: 250 seconds)
2022-02-21 16:23:34 +0100polyphem(~rod@2a02:810d:840:8754:2123:9506:671d:c7f0)
2022-02-21 16:24:49 +0100LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao) (Write error: Broken pipe)
2022-02-21 16:24:49 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-02-21 16:24:49 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
2022-02-21 16:24:49 +0100stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-02-21 16:24:49 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Write error: Connection reset by peer)
2022-02-21 16:25:03 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-02-21 16:25:07 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-02-21 16:25:09 +0100LiaoTao(~LiaoTao@gateway/tor-sasl/liaotao)
2022-02-21 16:25:16 +0100stiell(~stiell@gateway/tor-sasl/stiell)
2022-02-21 16:25:27 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-02-21 16:26:13 +0100komikat(~komikat@183.82.154.44) (Ping timeout: 256 seconds)
2022-02-21 16:30:08 +0100gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2022-02-21 16:30:53 +0100gehmehgeh(~user@user/gehmehgeh)
2022-02-21 16:32:02 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 16:32:05 +0100ec(~ec@gateway/tor-sasl/ec) (Quit: ec)
2022-02-21 16:33:11 +0100komikat(~komikat@183.82.154.44)
2022-02-21 16:34:25 +0100zaquest(~notzaques@5.130.79.72)
2022-02-21 16:37:58 +0100dfg(~dfg@user/dfg) (Quit: I hate quit messages.)
2022-02-21 16:40:06 +0100alMalsamo(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-02-21 16:41:36 +0100acidjnk(~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2022-02-21 16:41:53 +0100michalz(~michalz@185.246.204.61) (Ping timeout: 272 seconds)
2022-02-21 16:43:30 +0100michalz(~michalz@185.246.204.61)
2022-02-21 16:49:52 +0100euandreh(~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
2022-02-21 16:56:11 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-02-21 16:56:11 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-02-21 16:56:11 +0100wroathe(~wroathe@user/wroathe)
2022-02-21 16:56:46 +0100xkuru(~xkuru@user/xkuru)
2022-02-21 16:59:53 +0100peri4n(~peri4n@85.232.9.17) (Ping timeout: 256 seconds)
2022-02-21 17:00:01 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 17:00:24 +0100mbuf(~Shakthi@122.174.44.9) (Quit: Leaving)
2022-02-21 17:01:18 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-02-21 17:02:23 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 17:04:00 +0100ub(~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de)
2022-02-21 17:04:05 +0100komikat(~komikat@183.82.154.44)
2022-02-21 17:04:24 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c36d:f85d:bf20:a174) (Quit: WeeChat 2.8)
2022-02-21 17:04:37 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 17:04:42 +0100ubert(~Thunderbi@86.107.21.238) (Ping timeout: 256 seconds)
2022-02-21 17:04:42 +0100ububert
2022-02-21 17:11:50 +0100adamcstephens(161730d29b@2604:bf00:561:2000::2d5) (Remote host closed the connection)
2022-02-21 17:11:50 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection)
2022-02-21 17:11:50 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection)
2022-02-21 17:11:50 +0100sm2n(ae95cb1267@user/sm2n) (Remote host closed the connection)
2022-02-21 17:11:50 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4) (Remote host closed the connection)
2022-02-21 17:11:50 +0100shreyasminocha(51fdc93eda@user/shreyasminocha) (Remote host closed the connection)
2022-02-21 17:11:50 +0100jakzale(6291399afa@user/jakzale) (Remote host closed the connection)
2022-02-21 17:11:50 +0100jleightcap(7bc4014b62@user/jleightcap) (Remote host closed the connection)
2022-02-21 17:11:50 +0100samhh(7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection)
2022-02-21 17:11:50 +0100dawdler(035b60b5aa@user/dawdler) (Remote host closed the connection)
2022-02-21 17:11:50 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2) (Remote host closed the connection)
2022-02-21 17:11:50 +0100filwisher(2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection)
2022-02-21 17:11:50 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection)
2022-02-21 17:11:50 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e) (Write error: Connection reset by peer)
2022-02-21 17:11:51 +0100raghavgururajan(ea769b8000@user/raghavgururajan) (Remote host closed the connection)
2022-02-21 17:11:51 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8) (Remote host closed the connection)
2022-02-21 17:11:51 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection)
2022-02-21 17:11:56 +0100 <freeman42x[m]> I'm trying to figure out how to use the more typesafe API from this code: https://github.com/puffnfresh/fp-course/blob/twitch/projects/TicTacToe/Main.hs The version with more compile time guarantees would be using Move1, Move2, etc. instead of MainMoves which is currently used in run function. The reason I don't understand how to use the api via Move1, Move2 etc. is because I can't figure out any way to use those types in a recursive
2022-02-21 17:11:57 +0100 <freeman42x[m]> function (or equiv), since on first loop I'd try to construct Move1, in a later loop Move2 etc. I think this issue might be solved by dependent types, no idea how else. Also I can't figure out how exactly it would be implemented anyway. I hope I explained clearly enough why I don't know how to use the API via Move1, Move2, etc., kind of struggling to put in a clea way the issue I have with solving it
2022-02-21 17:12:30 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2022-02-21 17:12:30 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e)
2022-02-21 17:12:31 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6)
2022-02-21 17:12:31 +0100samhh(7569f027cf@2604:bf00:561:2000::e4)
2022-02-21 17:12:32 +0100jakzale(6291399afa@user/jakzale)
2022-02-21 17:12:32 +0100adamcstephens(161730d29b@2604:bf00:561:2000::2d5)
2022-02-21 17:12:33 +0100filwisher(2e6936c793@2604:bf00:561:2000::170)
2022-02-21 17:12:38 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0)
2022-02-21 17:12:38 +0100sm2n(ae95cb1267@user/sm2n)
2022-02-21 17:12:38 +0100shreyasminocha(51fdc93eda@user/shreyasminocha)
2022-02-21 17:12:44 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
2022-02-21 17:12:44 +0100dawdler(035b60b5aa@user/dawdler)
2022-02-21 17:12:50 +0100raghavgururajan(ea769b8000@user/raghavgururajan)
2022-02-21 17:12:50 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f)
2022-02-21 17:12:50 +0100jleightcap(7bc4014b62@user/jleightcap)
2022-02-21 17:12:51 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4)
2022-02-21 17:12:54 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8)
2022-02-21 17:12:54 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2)
2022-02-21 17:12:54 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2)
2022-02-21 17:16:31 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 17:22:25 +0100arievw(~arievw@85.148.234.95) (Quit: Nettalk6 - www.ntalk.de)
2022-02-21 17:25:01 +0100fendor(~fendor@178.115.60.54.wireless.dyn.drei.com)
2022-02-21 17:32:05 +0100 <komikat> how do I do GSoC with haskell as my org
2022-02-21 17:32:23 +0100 <komikat> do I have to make contribs beforehand or do I contact a mentor right away
2022-02-21 17:33:54 +0100zebrag(~chris@user/zebrag)
2022-02-21 17:34:47 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 256 seconds)
2022-02-21 17:35:29 +0100ec(~ec@gateway/tor-sasl/ec)
2022-02-21 17:41:25 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 17:41:42 +0100MasseR4(~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat)
2022-02-21 17:42:19 +0100MasseR4(~MasseR@51.15.143.128)
2022-02-21 17:43:20 +0100sagax(~sagax_nb@user/sagax)
2022-02-21 17:43:58 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-02-21 17:45:09 +0100MasseR4(~MasseR@51.15.143.128) (Client Quit)
2022-02-21 17:46:02 +0100 <freeman42x[m]> did my question above make sense? sweating profusely
2022-02-21 17:47:34 +0100 <freeman42x[m]> are there solutions for reducing duplications in functions like: https://github.com/puffnfresh/fp-course/blob/01dff1f47424fc2e724a969e44a92ee0c5a30f71/projects/Tic… ? would lenses work for that purpose or what?
2022-02-21 17:48:29 +0100jakalx(~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection)
2022-02-21 17:48:30 +0100jakalx(~jakalx@base.jakalx.net)
2022-02-21 17:49:08 +0100 <geekosaur> your question made sense, I just can't answer it
2022-02-21 17:49:21 +0100geekosauravoids type level shenanigans
2022-02-21 17:50:18 +0100 <merijn> ^^ that :p
2022-02-21 17:52:00 +0100vysn(~vysn@user/vysn) (Ping timeout: 250 seconds)
2022-02-21 17:54:53 +0100 <freeman42x[m]> seems that to get more compile time safety typically leads to writing more code. Which makes me wonder if or when is that even worth it. Substantially more code is much more likely to lead to it having bugs. The Move1, Move2 etc. code for the case above could be fully replaced with 1 runtime condition I think (total valid moves always <= 9)
2022-02-21 17:55:40 +0100 <geekosaur> but typelevel mitigates the bugs aspect: if it compiles it'sfar more likely to be correct
2022-02-21 17:56:20 +0100 <merijn> freeman42x[m]: IMO fancy type-y things are like spices "a little can go a long way" :p
2022-02-21 17:56:27 +0100 <geekosaur> that said,in general yes, dependent types or even haskell type-level fake dependent types means a lot more code and a lot more annoyance to keep the compiler happy
2022-02-21 17:56:58 +0100 <sm> and the turmeric will stain everything
2022-02-21 17:57:14 +0100 <geekosaur> the original paper ondoing typelevelin haskell was called "hasochism" for a reason :)
2022-02-21 17:57:25 +0100 <freeman42x[m]> geekosaur: of course, my point is that it's a tradeoff because by writing more code to make code more compile time safe you are writing more code which can lead to more bugs because it's most stuff that could possibly go wrong
2022-02-21 17:58:09 +0100 <fendor> komikat, Essentially, you write a proposal what you want to work on, how you plan to tackle it, etc...
2022-02-21 17:58:11 +0100shreyasminocha(51fdc93eda@user/shreyasminocha) (Remote host closed the connection)
2022-02-21 17:58:12 +0100samhh(7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection)
2022-02-21 17:58:12 +0100jleightcap(7bc4014b62@user/jleightcap) (Remote host closed the connection)
2022-02-21 17:58:12 +0100jakzale(6291399afa@user/jakzale) (Remote host closed the connection)
2022-02-21 17:58:12 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4) (Remote host closed the connection)
2022-02-21 17:58:12 +0100sm2n(ae95cb1267@user/sm2n) (Remote host closed the connection)
2022-02-21 17:58:12 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection)
2022-02-21 17:58:12 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection)
2022-02-21 17:58:12 +0100dawdler(035b60b5aa@user/dawdler) (Remote host closed the connection)
2022-02-21 17:58:12 +0100filwisher(2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection)
2022-02-21 17:58:12 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection)
2022-02-21 17:58:12 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2) (Remote host closed the connection)
2022-02-21 17:58:12 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8) (Remote host closed the connection)
2022-02-21 17:58:12 +0100raghavgururajan(ea769b8000@user/raghavgururajan) (Remote host closed the connection)
2022-02-21 17:58:12 +0100adamcstephens(161730d29b@2604:bf00:561:2000::2d5) (Remote host closed the connection)
2022-02-21 17:58:12 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e) (Remote host closed the connection)
2022-02-21 17:58:17 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection)
2022-02-21 17:58:20 +0100 <geekosaur> freeman42x[m], the key point is that yes, it'smore stuff that could go wrong, but it's also far more likely to go wrong *at compile time*
2022-02-21 17:58:34 +0100 <geekosaur> instead of crashing at runtime
2022-02-21 17:59:00 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 17:59:03 +0100 <geekosaur> sadly, haskell is not well equipped to give you help fixing what you broke
2022-02-21 17:59:09 +0100nehsou^(~nehsou@50.233.120.162)
2022-02-21 17:59:10 +0100 <fendor> In general, you better chances that your proposal is accepted the more details it contains and the more people know you. So, finding a mentor beforehand and contributing to OSS projects will increase your chances usualy
2022-02-21 17:59:48 +0100 <komikat> fendor: how exactly do i go about finding a mentor
2022-02-21 18:00:05 +0100 <fendor> komikat, Depends on where you want to contribute
2022-02-21 18:00:35 +0100 <fendor> People post here ideas sometimes: https://summer.haskell.org/ideas.html
2022-02-21 18:00:48 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-21 18:00:52 +0100 <komikat> ah makes sense
2022-02-21 18:01:06 +0100 <komikat> fendor: suppose I've decided what I want to contribute
2022-02-21 18:01:14 +0100 <komikat> where do I post in order to get a mentor
2022-02-21 18:01:21 +0100 <fendor> then big projects have sometimes a meta issue for collecting ideas
2022-02-21 18:01:36 +0100 <fendor> who would benefit from your idea/project?
2022-02-21 18:01:53 +0100 <komikat> the community in general?
2022-02-21 18:02:07 +0100dextaa_(~dextaa@user/dextaa) (Remote host closed the connection)
2022-02-21 18:02:09 +0100 <komikat> like I think I'm interested in working on the language server
2022-02-21 18:02:30 +0100 <fendor> great thing! then start by joining #haskell-language-server, and look at the meta issue we have posted
2022-02-21 18:02:49 +0100 <fendor> (I am looking for it now)
2022-02-21 18:03:02 +0100 <komikat> ah great, thanks
2022-02-21 18:03:09 +0100 <geekosaur> https://summer.haskell.org/tips.html suggests they can help you with mentors
2022-02-21 18:03:13 +0100 <freeman42x[m]> geekosaur: I am not sure that is the case. Look at this code: https://github.com/puffnfresh/fp-course/blob/01dff1f47424fc2e724a969e44a92ee0c5a30f71/projects/Tic… There are so many ways to make mistakes in it which would not be caught at compile time. For example: setBoardPosition P1 a (Board _ b c d e f g h i) = Board a b b d e f g h i So there are countless ways where a simple typo could completely break the
2022-02-21 18:03:13 +0100 <freeman42x[m]> program without any compile time warning yet the only benefit (as far as I can tell) is just the fact that Board limits at compile time all the possible positions to be exactly 9
2022-02-21 18:03:16 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 250 seconds)
2022-02-21 18:03:35 +0100yrlnry(~mjd@pool-74-109-20-19.phlapa.fios.verizon.net) (Ping timeout: 272 seconds)
2022-02-21 18:03:43 +0100 <fendor> komikat, can you view this page? https://github.com/haskell/haskell-language-server/discussions/2700 (no idea whether that's public already)
2022-02-21 18:03:47 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-21 18:04:07 +0100 <komikat> fendor, I can yeah
2022-02-21 18:04:15 +0100lukec(9dfd4d094e@2604:bf00:561:2000::10e)
2022-02-21 18:04:15 +0100bsima1(9d7e39c8ad@2604:bf00:561:2000::dd)
2022-02-21 18:04:15 +0100tdmm(1c9b9145fc@2604:bf00:561:2000::1c8)
2022-02-21 18:04:15 +0100samhh(7569f027cf@2604:bf00:561:2000::e4)
2022-02-21 18:04:15 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6)
2022-02-21 18:04:15 +0100filwisher(2e6936c793@2604:bf00:561:2000::170)
2022-02-21 18:04:24 +0100Ankhers(e99e97ef8e@2604:bf00:561:2000::2a2)
2022-02-21 18:04:26 +0100sm2n(ae95cb1267@user/sm2n)
2022-02-21 18:04:28 +0100dawdler(035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
2022-02-21 18:04:29 +0100dawdler(035b60b5aa@user/dawdler)
2022-02-21 18:04:30 +0100fluffyballoon(45ce440a48@2604:bf00:561:2000::e2)
2022-02-21 18:04:31 +0100evanrelf(3addc196af@2604:bf00:561:2000::f0)
2022-02-21 18:04:31 +0100jakzale(6291399afa@user/jakzale)
2022-02-21 18:04:32 +0100shreyasminocha(51fdc93eda@user/shreyasminocha)
2022-02-21 18:04:33 +0100jkoshy(99b9359beb@2604:bf00:561:2000::10f)
2022-02-21 18:04:35 +0100 <geekosaur> freeman42x[m], that's actually just bad code. I'd define Board as a record and the appropriate update becomes `Board {_a = a}` or equivalent
2022-02-21 18:04:35 +0100jleightcap(7bc4014b62@user/jleightcap)
2022-02-21 18:04:36 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
2022-02-21 18:04:37 +0100raghavgururajan(ea769b8000@user/raghavgururajan)
2022-02-21 18:04:39 +0100pranaysashank(ef3e56ca8b@2604:bf00:561:2000::3c4)
2022-02-21 18:04:40 +0100adamcstephens(161730d29b@2604:bf00:561:2000::2d5)
2022-02-21 18:05:16 +0100 <komikat> hey shreyasminocha, I think I remember you from GCI :P
2022-02-21 18:05:37 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-02-21 18:05:43 +0100 <geekosaur> any language will let you write garbage; the trick is knowing how to use the language to minimize it
2022-02-21 18:06:58 +0100ardell(~ardell@user/ardell) (Quit: Konversation terminated!)
2022-02-21 18:07:48 +0100 <geekosaur> setBoardPosition P1 newA board = board {a = newA}
2022-02-21 18:08:13 +0100 <geekosaur> easier to read and much safer
2022-02-21 18:08:28 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
2022-02-21 18:08:28 +0100Akiva(~Akiva@user/Akiva)
2022-02-21 18:13:25 +0100 <freeman42x[m]> geekosaur: fair point, your solution doesn't introduce more run time bugs. I'm not sure what would convince someone that is always the case though eg. adding compile type safety does not increase number of possible run time bugs caused by typo's or other types of mistakes
2022-02-21 18:15:37 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-02-21 18:16:19 +0100zer0bitz_(~zer0bitz@2001:2003:f74d:b800:8a6:a8d3:62c4:7875)
2022-02-21 18:17:25 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
2022-02-21 18:17:48 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 240 seconds)
2022-02-21 18:18:05 +0100bahamas(~lucian@84.232.140.52)
2022-02-21 18:20:41 +0100zer0bitz(~zer0bitz@2001:2003:f74d:b800:3027:99e6:c0d6:7e32) (Ping timeout: 256 seconds)
2022-02-21 18:21:30 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 18:22:01 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 18:22:25 +0100komikat(~komikat@183.82.154.44)
2022-02-21 18:24:59 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-02-21 18:25:04 +0100 <geekosaur> freeman42x[m], the whole point of type level is moving such errors into the types so they happen at compile time
2022-02-21 18:25:32 +0100ubert(~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-02-21 18:25:41 +0100 <geekosaur> tbh what that looks like does not make me think type level though, it makes me think Template Haskell. which would again move potential errors to compile time as it referenced values or fields that didn't exist
2022-02-21 18:25:52 +0100ubert(~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de)
2022-02-21 18:26:20 +0100edge(~edge@111.92.81.133)
2022-02-21 18:26:55 +0100Sgeo(~Sgeo@user/sgeo)
2022-02-21 18:29:58 +0100edge(~edge@111.92.81.133) (Client Quit)
2022-02-21 18:31:18 +0100little_mac(~little_ma@2601:410:4300:3ce0:150f:8c19:261d:f4d9)
2022-02-21 18:32:56 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 18:35:18 +0100spacenautx(~spacenaut@111.92.81.133)
2022-02-21 18:35:24 +0100fresheyeball(~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Ping timeout: 240 seconds)
2022-02-21 18:37:01 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
2022-02-21 18:37:17 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 18:37:33 +0100spacenautx(~spacenaut@111.92.81.133) (Changing host)
2022-02-21 18:37:33 +0100spacenautx(~spacenaut@user/spacenautx)
2022-02-21 18:37:45 +0100 <freeman42x[m]> geekosaur: the goal is to get compile time errors yes, that is not what I am asking or questioning. I am asking how would you know whether using compile time bug catching code won't in average introduce more runtime bugs than compile time bugs it catches. Note that in that example above it introduces way more possible runtime bugs than compile time guarantees, even though there is a better solution which you mentioned and does not have
2022-02-21 18:37:45 +0100 <freeman42x[m]> this issue. Let's say a developer could somehow always write "good" compile time checked code. Will that: never introduce new runtime bugs? sometimes introduce new runtime bugs? tbh. I doubt this is an easy question
2022-02-21 18:38:09 +0100spacenautx(~spacenaut@user/spacenautx) (Client Quit)
2022-02-21 18:38:27 +0100edge(~spacenaut@111.92.81.133)
2022-02-21 18:38:31 +0100 <geekosaur> no, it'snot an easy question, but a lot depends on just knowing how to use your tools
2022-02-21 18:39:00 +0100 <geekosaur> I'[m not sure there is ever a guaranteed "perfect" way to do it
2022-02-21 18:39:25 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 18:40:26 +0100 <geekosaur> and some of your tools will catch some errors but potentially introduce others, so you need to decide which errors you care more about => catch at runtime
2022-02-21 18:40:38 +0100edge(~spacenaut@111.92.81.133) (Client Quit)
2022-02-21 18:40:54 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-02-21 18:41:13 +0100edge(~spacenaut@111.92.81.133)
2022-02-21 18:41:31 +0100edge(~spacenaut@111.92.81.133) (Client Quit)
2022-02-21 18:41:31 +0100 <geekosaur> or if one tool will catch more errors than another (as I mentioned earlier, TH might be a better choice than type level here)
2022-02-21 18:41:37 +0100alp(~alp@user/alp)
2022-02-21 18:42:52 +0100 <maerwald> don't forget intellectual complexity... which by itself introduces programmer errors
2022-02-21 18:42:59 +0100 <maerwald> that includes type level programming
2022-02-21 18:43:10 +0100 <maerwald> if you think you can't write bugs with it, you're wrong :p
2022-02-21 18:45:59 +0100econo(uid147250@user/econo)
2022-02-21 18:47:33 +0100 <freeman42x[m]> geekosaur: do you have a (link to a) definition for "type level"? I took it to be related to "compile time type safety" but I assume they are not exactly the same
2022-02-21 18:48:03 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-02-21 18:49:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 18:49:32 +0100 <geekosaur> "type level programming" in Haskell typically means moving as much value level programming as possible up to the type level so errors will be caught at compile time instead of run time, since run time values often originate from outside the program but the "universe" of types must be completely defined at compile time
2022-02-21 18:49:36 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
2022-02-21 18:52:21 +0100 <freeman42x[m]> geekosaur: would all "compile time type safety" programming methods fit under "type level programming" or just a part of them?
2022-02-21 18:52:52 +0100 <maerwald> you could run your test suite via TH at compile time xD
2022-02-21 18:53:02 +0100 <geekosaur> even basic Haskell gives you compile time type safety, but I wouldn't call it type level programming
2022-02-21 18:53:48 +0100yauhsien_(~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-02-21 18:53:50 +0100 <geekosaur> I mean, arbitrary python or JS code can toss you a None/nil/whatever with no warning, but Haskell makes you use Maybe and deal with the possibility
2022-02-21 18:54:11 +0100 <freeman42x[m]> maerwald: can it also launch nukes at compile time? I always wanted to do that!11
2022-02-21 18:54:24 +0100 <geekosaur> and you can't even begin to produce a String/Text where a number is expected
2022-02-21 18:54:39 +0100 <maerwald> freeman42x[m]: that's only of concern to the president, really
2022-02-21 18:54:45 +0100ub(~Thunderbi@p548c8d84.dip0.t-ipconnect.de)
2022-02-21 18:54:55 +0100ubert(~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-02-21 18:54:55 +0100ububert
2022-02-21 18:54:59 +0100 <geekosaur> typelevel programming can't launch nukes. TH can though
2022-02-21 18:55:45 +0100 <maerwald> without the launch codes?
2022-02-21 19:00:41 +0100coot(~coot@213.134.190.95) (Read error: Connection reset by peer)
2022-02-21 19:00:53 +0100coot(~coot@213.134.190.95)
2022-02-21 19:01:14 +0100alp(~alp@user/alp) (Ping timeout: 260 seconds)
2022-02-21 19:01:19 +0100sndr(~sander@user/sander)
2022-02-21 19:01:25 +0100 <freeman42x[m]> geekosaur: how do you tell wether something is "typelevel" or not? is there some clear distinction or fuzzy like most of the stuff we humans deal with. philosophers could talk for millenia over what can be considered to be a chair. any good tutorial for typelevel programming? maybe converting non-typelevel code to the typelevel version
2022-02-21 19:02:17 +0100sander(~sander@user/sander) (Ping timeout: 256 seconds)
2022-02-21 19:02:17 +0100sndrsander
2022-02-21 19:02:29 +0100 <geekosaur> it's fuzzy. my guideline for typelevel is use of the "singletons" library (or manual defunctionalization which probably ought to be done with singletones instead)
2022-02-21 19:02:35 +0100 <geekosaur> *singletons
2022-02-21 19:03:58 +0100 <geekosaur> in particular I don't regard smart "ordinary" (non-defunctionalization) use of types to be type level programming for the most part
2022-02-21 19:04:14 +0100 <geekosaur> you can look up defunctionalization to see what I'm talking about there
2022-02-21 19:05:20 +0100 <bahamas> freeman42x[m]: there's a book https://www.goodreads.com/book/show/42736297-thinking-with-types-type-level-programming-in-haskell
2022-02-21 19:05:42 +0100 <geekosaur> we have strict typing, it's often good enough without getting into the weirder stuff
2022-02-21 19:06:10 +0100 <Franciman> if you want great type level power, i suggest you totally forget haskell
2022-02-21 19:06:14 +0100 <Franciman> it is too hairy
2022-02-21 19:06:15 +0100 <bahamas> freeman42x[m]: also, there's this blog post https://lexi-lambda.github.io/blog/2021/03/25/an-introduction-to-typeclass-metaprogramming/
2022-02-21 19:06:21 +0100 <Franciman> just switch to idris / agda
2022-02-21 19:07:03 +0100 <Franciman> haskell tries really hard to get you things, with its zillion of ghc extensions, but idris and agda given their naturally more powerful type system, give you those things and more in a cleaner way
2022-02-21 19:07:04 +0100 <geekosaur> I'm actually inclined to agree. Idris is often a good place to start on typelevel programming if you already know Haskell
2022-02-21 19:07:09 +0100 <Franciman> so it's like coding in C++ or in Haskell
2022-02-21 19:07:16 +0100 <Franciman> except that now Haskell is C++, and Idris is Haskell
2022-02-21 19:07:25 +0100 <Franciman> ok not this much maybe :P
2022-02-21 19:08:44 +0100 <Franciman> now, people still code in C++ with profit
2022-02-21 19:09:49 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
2022-02-21 19:11:22 +0100 <maerwald> people do all sorts of stupid things, true
2022-02-21 19:12:21 +0100 <Franciman> well, servant for example, seems to me readable
2022-02-21 19:12:26 +0100 <Franciman> and a form of type level programming
2022-02-21 19:12:56 +0100 <Franciman> so if you don't need _a lot_ haskell gant you enough power in an understandable way
2022-02-21 19:13:12 +0100 <Franciman> grants*
2022-02-21 19:13:53 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-02-21 19:16:52 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Remote host closed the connection)
2022-02-21 19:17:38 +0100 <maerwald> yeah, I love servant... I bought 5 new screens to be able to read the GHC errors
2022-02-21 19:20:50 +0100 <freeman42x[m]> <Franciman> "just switch to idris / agda..." <- there are much more stuff involved in choosing a programming language to use for a project besides just the merits of the language itself. Stuff like community, libraries, language maintainers bus factor, difficulty to learn, interop, etc. etc. A lot of these prevent me from using Idris / Agda for most use cases I have
2022-02-21 19:21:33 +0100 <EvanR> "bus factor" ?
2022-02-21 19:22:33 +0100 <MosheTeutsch[m]> Lens question: I have values of the form: [("label1", value1), ..., ("label-n", valuen)]
2022-02-21 19:22:33 +0100 <MosheTeutsch[m]> and I want to compose lenses/traversals/etc. that operate that will get me some values *from the values*, but keep the labels available at the end.
2022-02-21 19:23:03 +0100 <MosheTeutsch[m]> So I want an output of the form [("label1", something1), ... ]
2022-02-21 19:23:06 +0100 <Franciman> i agree freeman42x[m]
2022-02-21 19:23:12 +0100 <maerwald> EvanR: there's a wikipedia article on it even :p
2022-02-21 19:23:19 +0100 <Franciman> and i understand
2022-02-21 19:23:29 +0100 <freeman42x[m]> EvanR: like https://en.wikipedia.org/wiki/Bus_factor languages like Agda / Idris have very few core contributors, typical 1 does most of the work
2022-02-21 19:24:01 +0100 <EvanR> it's funny someone just used this term in a totally different context like 1 hour ago
2022-02-21 19:24:04 +0100 <EvanR> and i never heard it before
2022-02-21 19:24:21 +0100 <geekosaur> not sure haskell is that much better: if bgamari gets hit by a bus it won't matter much how many other ghc devs we have :(
2022-02-21 19:24:22 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 19:24:34 +0100 <EvanR> ah, getting hit by a bus
2022-02-21 19:25:40 +0100 <bgamari> Thankfully things are much better now than they used to be; mpickering and AndreasK pull quite a bit of weight
2022-02-21 19:26:05 +0100 <maerwald> geekosaur: haha
2022-02-21 19:26:10 +0100 <bgamari> but indeed all language projects tend to have pretty small sets of core contributors
2022-02-21 19:26:39 +0100 <maerwald> bgamari needs a bodyguard... employed by the HF maybe
2022-02-21 19:28:00 +0100 <geekosaur> bgamari, not thinking so much of weight. I kinda get the impression you're the keeper of the master plan and things will go off the rails quickly without that central coordination
2022-02-21 19:28:04 +0100Null_A(~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
2022-02-21 19:28:25 +0100 <bgamari> mpickering is picking up more of the planning now
2022-02-21 19:29:19 +0100 <bgamari> but yes, historically that has been true
2022-02-21 19:31:15 +0100edge(~spacenaut@111.92.81.133)
2022-02-21 19:31:45 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Remote host closed the connection)
2022-02-21 19:32:04 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-02-21 19:32:13 +0100 <Rembane> bgamari: Have you ever considered cloning yourself?
2022-02-21 19:33:54 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2022-02-21 19:34:14 +0100edge(~spacenaut@111.92.81.133) (Client Quit)
2022-02-21 19:34:56 +0100spacenautx(~spacenaut@111.92.81.133)
2022-02-21 19:36:24 +0100spacenautx(~spacenaut@111.92.81.133) (Client Quit)
2022-02-21 19:36:29 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 19:36:33 +0100 <freeman42x[m]> any way to tell whether someone is connected via Element (except those read receipt indicators)?
2022-02-21 19:37:02 +0100komikat(~komikat@183.82.154.44)
2022-02-21 19:37:44 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 250 seconds)
2022-02-21 19:38:57 +0100Nahra(~user@static.161.95.99.88.clients.your-server.de) (Remote host closed the connection)
2022-02-21 19:39:18 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
2022-02-21 19:40:00 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-02-21 19:40:30 +0100 <hololeap_> geekosaur: what was the command in cabal again that could help locate binaries in dist-newstyle? I saw you mention it a couple times on here
2022-02-21 19:40:46 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 19:40:59 +0100komikat(~komikat@183.82.154.44)
2022-02-21 19:41:01 +0100 <sclv> `cabal list-bin`
2022-02-21 19:41:09 +0100hololeap_hololeap
2022-02-21 19:41:25 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
2022-02-21 19:42:25 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com)
2022-02-21 19:42:30 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001)
2022-02-21 19:42:48 +0100 <hololeap> thank you
2022-02-21 19:43:02 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-02-21 19:44:37 +0100awpr(uid446117@id-446117.lymington.irccloud.com)
2022-02-21 19:45:22 +0100 <geekosaur> freeman42x[m], in general the folks using Matrix have IPv6 addresses of the form 2604:bf00:561:2000::<something>. but this changes occasionally
2022-02-21 19:46:48 +0100benin(~benin@59.88.179.150)
2022-02-21 19:47:55 +0100 <geekosaur> mostly I watch for bridge hiccups when a bunch of people with ip6 addrs with the same prefix go missing all at once, many but not all with [m] suffixes
2022-02-21 19:49:21 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-02-21 19:51:36 +0100komikat(~komikat@183.82.154.44) (Quit: Leaving...)
2022-02-21 19:53:16 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
2022-02-21 19:54:25 +0100phma(phma@2001:5b0:211f:f48:ea23:e8cf:9b9f:fa4a) (Read error: Connection reset by peer)
2022-02-21 19:55:19 +0100phma(~phma@host-67-44-208-227.hnremote.net)
2022-02-21 19:55:33 +0100cynomys(~cynomys@user/cynomys)
2022-02-21 19:55:42 +0100komikat(~komikat@183.82.154.44)
2022-02-21 19:56:37 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 19:57:34 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
2022-02-21 19:59:18 +0100 <freeman42x[m]> <geekosaur> "freeman42x, in general the folks..." <- I don't see any IP address available in Element. is that some IRC command?
2022-02-21 20:00:22 +0100 <geekosaur> my IRC client shows me e.g. [21 17:04:15] * lukec (9dfd4d094e@2604:bf00:561:2000::10e) has joined
2022-02-21 20:00:30 +0100 <geekosaur> but there is also /WHOIS
2022-02-21 20:00:52 +0100 <geekosaur> I wouldn't know what the equivalent on the Matrix side of things is
2022-02-21 20:01:19 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 250 seconds)
2022-02-21 20:01:26 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-02-21 20:02:36 +0100deadmarshal(~deadmarsh@95.38.117.184) (Ping timeout: 240 seconds)
2022-02-21 20:03:08 +0100 <geekosaur> or how you'd access it from Element
2022-02-21 20:05:48 +0100 <komikat> how exactly do you reply in that format on IRC freeman42x[m]
2022-02-21 20:06:10 +0100 <komikat> I'm guessing you just used the reply feature on matrix
2022-02-21 20:06:32 +0100 <geekosaur> that is presumably a reply command in element
2022-02-21 20:06:52 +0100 <komikat> yeah I meant element* never mind
2022-02-21 20:07:03 +0100 <freeman42x[m]> yeah, I just used the Element reply and I hope it does not show like some mangled suff on IRC
2022-02-21 20:07:05 +0100bahamas(~lucian@84.232.140.52) (Ping timeout: 272 seconds)
2022-02-21 20:07:13 +0100 <geekosaur> what parts of it come from the client, what from the server, and what from the bridge I couldn't tell you
2022-02-21 20:07:29 +0100 <geekosaur> there are a lot of moving parts here :)
2022-02-21 20:07:35 +0100 <komikat> very interesting
2022-02-21 20:08:08 +0100benin7(benin@gateway/vpn/protonvpn/benin)
2022-02-21 20:08:32 +0100cynomys(~cynomys@user/cynomys) (Quit: leaving)
2022-02-21 20:08:50 +0100cynomys(~cynomys@user/cynomys)
2022-02-21 20:08:54 +0100 <geekosaur> hm,that earlier address might be a different bridge
2022-02-21 20:09:02 +0100bahamas(~lucian@84.232.140.52)
2022-02-21 20:09:30 +0100 <geekosaur> 2001:470:69fc:105::<stuff> looks more familiar
2022-02-21 20:09:37 +0100benin(~benin@59.88.179.150) (Ping timeout: 240 seconds)
2022-02-21 20:09:37 +0100benin7benin
2022-02-21 20:12:13 +0100benin2(~benin@59.88.179.150)
2022-02-21 20:13:22 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
2022-02-21 20:13:43 +0100Zemyla(~Zemyla@2603-8080-4901-6095-a8ef-cc67-cf0b-f093.res6.spectrum.com)
2022-02-21 20:13:57 +0100benin(benin@gateway/vpn/protonvpn/benin) (Ping timeout: 240 seconds)
2022-02-21 20:13:57 +0100benin2benin
2022-02-21 20:17:42 +0100Zemyla(~Zemyla@2603-8080-4901-6095-a8ef-cc67-cf0b-f093.res6.spectrum.com) (Client Quit)
2022-02-21 20:18:04 +0100Zemyla(~ec2-user@ec2-54-196-172-247.compute-1.amazonaws.com)
2022-02-21 20:20:18 +0100 <Zemyla> > 1 + 1
2022-02-21 20:20:20 +0100 <lambdabot> 2
2022-02-21 20:21:57 +0100 <freeman42x[m]> > let 2 + 2 = 5 in 2 + 2
2022-02-21 20:21:58 +0100bahamas(~lucian@84.232.140.52) (Quit: leaving)
2022-02-21 20:21:59 +0100 <lambdabot> 5
2022-02-21 20:25:20 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-02-21 20:31:39 +0100Null_A(~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
2022-02-21 20:34:05 +0100yauhsien_(~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net)
2022-02-21 20:34:32 +0100Pickchea(~private@user/pickchea)
2022-02-21 20:36:55 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
2022-02-21 20:36:59 +0100ccntrq(~Thunderbi@2a01:e34:eccb:b060:768b:1849:a78b:4ad) (Ping timeout: 252 seconds)
2022-02-21 20:37:00 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
2022-02-21 20:37:29 +0100yauhsien(~Yau-Hsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
2022-02-21 20:41:04 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-02-21 20:44:27 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-02-21 20:44:56 +0100califax(~califax@user/califx)
2022-02-21 20:44:59 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 20:45:43 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-02-21 20:45:45 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-02-21 20:48:22 +0100Lord_of_Life_Lord_of_Life
2022-02-21 20:49:00 +0100cynomys(~cynomys@user/cynomys) (Quit: leaving)
2022-02-21 20:49:15 +0100cynomys(~cynomys@user/cynomys)
2022-02-21 20:51:29 +0100MajorBiscuit(~MajorBisc@c-001-030-015.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
2022-02-21 20:52:22 +0100cynomys(~cynomys@user/cynomys) (Client Quit)
2022-02-21 20:53:12 +0100yauhsien(~yauhsien@61-231-19-150.dynamic-ip.hinet.net)
2022-02-21 20:54:04 +0100cynomys(~cynomys@user/cynomys)
2022-02-21 20:54:10 +0100jespada(~jespada@148.252.132.52) (Ping timeout: 260 seconds)
2022-02-21 20:57:39 +0100yauhsien(~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
2022-02-21 21:00:52 +0100 <hololeap> I'm surprised there hasn't been any effort to get cabal highlighting support working for skylighting
2022-02-21 21:03:30 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 260 seconds)
2022-02-21 21:05:17 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 240 seconds)
2022-02-21 21:05:43 +0100Erutuon(~Erutuon@user/erutuon)
2022-02-21 21:06:40 +0100juhp(~juhp@128.106.188.82)
2022-02-21 21:09:59 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 21:16:34 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net)
2022-02-21 21:16:56 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-02-21 21:18:53 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 21:19:08 +0100komikat(~komikat@183.82.154.44)
2022-02-21 21:19:49 +0100 <ski> freeman42x[m] : it does show as somewhat mangled
2022-02-21 21:20:59 +0100`2jt(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Remote host closed the connection)
2022-02-21 21:21:22 +0100`2jt(~jtomas@210.red-88-24-179.staticip.rima-tde.net)
2022-02-21 21:22:22 +0100fendor(~fendor@178.115.60.54.wireless.dyn.drei.com) (Remote host closed the connection)
2022-02-21 21:23:40 +0100komikat(~komikat@183.82.154.44) (Ping timeout: 256 seconds)
2022-02-21 21:25:00 +0100 <freeman42x[m]> <ski> "freeman42x : it does show as..." <- how does it look like? any clear indication of where the quoted part ends and the reply starts?
2022-02-21 21:25:30 +0100 <ski> <freeman42x[m]> <ski> "freeman42x : it does show as..." <- how does it look like? any clear indication of where the quoted part ends and the reply starts?
2022-02-21 21:25:54 +0100 <ski> (not sure whether you typed the "<-" part of that, or not)
2022-02-21 21:26:10 +0100 <geekosaur> no, that'sa normal partof the reply from what I've seen
2022-02-21 21:26:13 +0100 <maerwald> is there a backend library that supports SSE?
2022-02-21 21:26:26 +0100 <geekosaur> still don't know if that's the bridge or matrix or element
2022-02-21 21:26:31 +0100komikat(~komikat@183.82.154.44)
2022-02-21 21:27:41 +0100 <ski> freeman42x[m] : the quotes around the message (but not around the nickname who uttered it) does look slightly confusing, to me
2022-02-21 21:28:42 +0100 <geekosaur> maerwald, do you want -msse ?
2022-02-21 21:28:48 +0100 <maerwald> server-sent events
2022-02-21 21:28:49 +0100cjb(~cjb@user/cjb)
2022-02-21 21:29:32 +0100 <monochrom> Oh, web backend and web SSE?
2022-02-21 21:30:14 +0100 <maerwald> wai-extra seems to have something: https://hackage.haskell.org/package/wai-extra-3.1.8/docs/Network-Wai-EventSource.html
2022-02-21 21:30:29 +0100 <geekosaur> oh,this is like those freaks who think API is something javascript web slingers invented
2022-02-21 21:30:30 +0100 <maerwald> now the question is if this works with servant
2022-02-21 21:32:56 +0100 <maerwald> don't ask me why
2022-02-21 21:33:04 +0100 <maerwald> not my idea, thanks
2022-02-21 21:34:05 +0100komikat(~komikat@183.82.154.44) (Remote host closed the connection)
2022-02-21 21:34:15 +0100 <freeman42x[m]> geekosaur: 2015 isomorphic javascript frameworks callback :))
2022-02-21 21:38:57 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 21:39:21 +0100komikat(~komikat@183.82.154.44)
2022-02-21 21:40:14 +0100xff0x(~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8) (Ping timeout: 252 seconds)
2022-02-21 21:43:37 +0100komikat(~komikat@183.82.154.44) (Ping timeout: 240 seconds)
2022-02-21 21:48:25 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
2022-02-21 21:50:25 +0100acidjnk(~acidjnk@p200300d0c7363f76650908051e62c7e6.dip0.t-ipconnect.de)
2022-02-21 21:50:56 +0100xff0x(~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
2022-02-21 21:52:03 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-02-21 21:52:17 +0100benin(~benin@59.88.179.150) (Ping timeout: 240 seconds)
2022-02-21 21:53:29 +0100dextaa_(~dextaa@user/dextaa)
2022-02-21 21:53:54 +0100zer0bitz_(~zer0bitz@2001:2003:f74d:b800:8a6:a8d3:62c4:7875) (Ping timeout: 260 seconds)
2022-02-21 21:54:57 +0100benin(~benin@59.88.179.150)
2022-02-21 21:58:57 +0100briandaed(~root@109.95.142.93.r.toneticgroup.pl) (Quit: leaving)
2022-02-21 22:00:41 +0100notzmv(~zmv@user/notzmv)
2022-02-21 22:04:28 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
2022-02-21 22:08:51 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-21 22:09:55 +0100 <dvdrw> I've given my imperdicative polymorphic `map` some more thought
2022-02-21 22:09:57 +0100 <dvdrw> :t map
2022-02-21 22:09:59 +0100 <lambdabot> (a -> b) -> [a] -> [b]
2022-02-21 22:10:19 +0100 <dvdrw> In my case, [a] ~ [forall a. F a]
2022-02-21 22:10:49 +0100 <dvdrw> The idea was to preserve the (a -> b) mapping individually for each element, somehow
2022-02-21 22:11:10 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-02-21 22:11:11 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
2022-02-21 22:11:33 +0100 <dvdrw> However, it becomes painfully obvious the `a` will get instantiated with `forall a. F a`, meaning the function will look like ((forall a. F a) -> G b)
2022-02-21 22:12:02 +0100 <dvdrw> As that inner `a` is scoped, there's no hope in bridging the (->) gap.
2022-02-21 22:12:40 +0100 <dvdrw> So, for any function of a type like that, wouldn't that be the same as using an existential type, but without the wrapping?
2022-02-21 22:13:51 +0100pavonia(~user@user/siracusa)
2022-02-21 22:14:08 +0100 <geekosaur> generally the only way to do anything with such a value is to have a constraint on it so you can at least use the functions in that typeclass(es)
2022-02-21 22:14:39 +0100jespada(~jespada@148.252.132.52)
2022-02-21 22:14:44 +0100 <geekosaur> which has its limitations, for example there's no difference between [forall a. Show a => a] and [String]
2022-02-21 22:15:16 +0100deadmarshal(~deadmarsh@95.38.117.184)
2022-02-21 22:15:17 +0100 <ski> s/forall a. Show a =>/exists a. Show a *>/
2022-02-21 22:15:54 +0100 <dvdrw> I figured as much; it looks like it's a trade off between 'expressive' types and 'smooth interfaces' that hide the particularities
2022-02-21 22:16:15 +0100 <dvdrw> i.e. you'd have trouble keeping GADT type refinement and sanding it down to the same constraint(s)
2022-02-21 22:16:15 +0100 <ski> dvdrw : are you really sure you want `[forall a. F a]', rather than `[exists a. F a]' ?
2022-02-21 22:16:52 +0100 <dvdrw> ski: I'm not sure of the difference in this case
2022-02-21 22:17:17 +0100 <ski> it depends on what `F' is, of course
2022-02-21 22:17:46 +0100 <ski> but the only value of type `[forall a. Show a => a]' (e.g.), (ignoring bottoms) is `[]', the empty list
2022-02-21 22:18:53 +0100 <ski> (hint, there is no value which has type `a', for *all* types `a' which are instances of `Show' .. apart from bottom)
2022-02-21 22:19:06 +0100 <geekosaur> right, sorry, thinkoed that
2022-02-21 22:19:21 +0100 <geekosaur> otoh that's one reason why haskell makes it hard to make such messes to begin with :)
2022-02-21 22:19:34 +0100 <ski> (otoh, there are many values which has type `a', for *some* type `a' which is an instance of `Show'. iow, there are many values of type `exists a. Show a *> a')
2022-02-21 22:19:37 +0100deadmarshal(~deadmarsh@95.38.117.184) (Ping timeout: 240 seconds)
2022-02-21 22:20:04 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 22:20:04 +0100yauhsienhuangtw(~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net)
2022-02-21 22:20:06 +0100 <ski> dvdrw : perhaps you should pick some concrete example `F' that we could talk about ?
2022-02-21 22:21:06 +0100 <ski> <dvdrw> Given an f :: forall a. F a -> G a, and xs :: [forall a. F a]; how would I 'lift' map so as to work with a nested forall?
2022-02-21 22:21:50 +0100 <ski> just from reading that, i was thinking perhaps you wanted `\(xs :: forall a. F a) -> f xs :: (forall a. F a) -> (forall a. G a)' instead of `f :: forall a. F a -> G a'
2022-02-21 22:22:01 +0100 <dvdrw> My original idea was to pipe a phantom type variable (i.e. the `a' in `F a'), but have it work on heterogeneous lists.
2022-02-21 22:22:23 +0100 <ski> but now it sounds like you might actually want `(exists a. F a) -> (exists a. G a)' instead ? (which you can also get to, from `f :: forall a. F a -> G a')
2022-02-21 22:22:57 +0100 <ski> ah .. "heterogeneous lists" suggests that you are looking for existentials :)
2022-02-21 22:23:10 +0100merijn(~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-02-21 22:23:10 +0100yauhsien_(~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-02-21 22:23:10 +0100 <dvdrw> That is indeed where I started :)
2022-02-21 22:23:16 +0100 <ski> (which ?)
2022-02-21 22:23:27 +0100 <dvdrw> With existentials
2022-02-21 22:23:49 +0100c209e6dc-4d76-47(~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
2022-02-21 22:24:03 +0100 <ski> (btw, there is a difference betwee `[exists a. Show a *> a]' and `[String]' .. but the difference isn't too relevant to the discussion here)
2022-02-21 22:24:31 +0100 <dvdrw> Maybe it'd be best if I gave a motivating example and how I got into this mess
2022-02-21 22:24:43 +0100 <ski> dvdrw : seeing at least somewhat more context (of what you're trying to do), if not a concrete example of `F', would probably help
2022-02-21 22:26:37 +0100 <dvdrw> Imagine `F' were a GADT, with its type parameter being used to provide some assertions about how it would act; for example `F ()' would convey that there'd be a way to 'evaluate' it down to type `()'
2022-02-21 22:26:37 +0100 <ski> (oh, and `G', of course)
2022-02-21 22:27:38 +0100 <dvdrw> One of the steps could be to map `F a' to a monad `G a' whose unwrapping would evalute to that `a'
2022-02-21 22:28:00 +0100 <ski> unwrapping ?
2022-02-21 22:28:15 +0100skimostly didn't understand that sentence
2022-02-21 22:28:17 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
2022-02-21 22:28:57 +0100 <dvdrw> Well, if it were a monad like ST or State, applying the relevant `runState'
2022-02-21 22:29:21 +0100 <dvdrw> It limits the choice of monad to those that do have an arrow like that, though
2022-02-21 22:29:21 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-02-21 22:30:19 +0100 <dvdrw> Ultimately, the goal is to have an expression akin to `run $ foldl1 (>>) (map ftog xs)'
2022-02-21 22:31:11 +0100 <dvdrw> The list, `xs', would be heterogenous because the type parameter to `F' varies
2022-02-21 22:31:23 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-02-21 22:32:59 +0100 <ski> hm, so are you saying `F' and `G' in your case are monads ?
2022-02-21 22:33:10 +0100 <dvdrw> `G' is, at least
2022-02-21 22:33:51 +0100 <ski> i'm not sure to which extent `exists a. G a' would be preferable over `G ()'
2022-02-21 22:34:00 +0100 <awpr> that whole expression looks like it's trying to achieve `traverse10` of `newtype ExList f = ExList [Some f]`
2022-02-21 22:34:01 +0100 <awpr> https://hackage.haskell.org/package/ten-0.1.0.2/docs/Data-Ten-Foldable.html#v:traverse10_
2022-02-21 22:34:45 +0100 <awpr> or equivalently https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:ftraverse_
2022-02-21 22:35:02 +0100 <dvdrw> awpr: that looks to be very promising, actually
2022-02-21 22:35:22 +0100 <Zemyla> Maybe you should turn the forall a. F a into F ().
2022-02-21 22:35:41 +0100 <awpr> (the main obstacle so far seems to be that you want a list of `F` elements with independent existential parameters, but none of the types being mentioned actually is that)
2022-02-21 22:35:46 +0100 <ski> there is no `forall a.' there, aiui
2022-02-21 22:36:10 +0100 <dvdrw> Zemyla: I'm interested into preserving the `a's across the mapping, is the issue, although collapsing them into a single more manageable type seems inevitable
2022-02-21 22:36:37 +0100 <awpr> hmm, preserving the existentials seems incompatible with trying to fold them with `>>`
2022-02-21 22:36:43 +0100 <ski> it's not clear to me what you mean by "preserving the `a's across the mapping", from only the small snippets and talk you've given so far
2022-02-21 22:37:30 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
2022-02-21 22:37:44 +0100 <ski> dvdrw : hm, anyway the `(>>)' suggests you're not interested in the monadic result types, right ?
2022-02-21 22:37:54 +0100 <dvdrw> I'm sort of hand waving to convey that, if you could 'pick' and element of the output list, and somehow reconstruct its type, it'd be a `G a' as if it were just that value applied to an `f :: F a -> G a'
2022-02-21 22:37:54 +0100 <ski> in which case, why not `G ()' ?
2022-02-21 22:38:05 +0100 <dvdrw> ...which is still more hand waving
2022-02-21 22:38:12 +0100 <ski> (and if `F' is also a functor, why not `F ()', too ?)
2022-02-21 22:38:36 +0100 <awpr> that's what an `fmap10`/`ftraverse10` style thing would do: leave the parameters untouched and map only the `f` part
2022-02-21 22:39:05 +0100 <ski> dvdrw : ok. but do you actually care about that `a' ? `(>>)' is going to discard most of the results, anyway
2022-02-21 22:39:37 +0100 <dvdrw> ski: Ideally there'd be a constraint set on `a' to where you could do something with it in the end
2022-02-21 22:39:52 +0100 <ski> okay
2022-02-21 22:40:10 +0100 <ski> but you're still only keeping the last result, right ?
2022-02-21 22:40:16 +0100 <dvdrw> ski: correct
2022-02-21 22:41:02 +0100 <dvdrw> I mean, it could be a bind that folds them, I don't think it'd be too hard to make either work starting from the other
2022-02-21 22:41:40 +0100 <dvdrw> awpr: `Foldable10' is a much nicer way of talking about (what I think) I want :)
2022-02-21 22:42:02 +0100 <dvdrw> It sounds like it approaches the same problem, just from the other end
2022-02-21 22:42:28 +0100 <Zemyla> Sounds like the skolem escaping is inevitable.
2022-02-21 22:42:52 +0100 <awpr> yeah, it seems like a good fit to me -- in particular with the talk of constraints on the `a`s, `ten` has a toolkit for talking about stuff like that too
2022-02-21 22:42:54 +0100Akiva(~Akiva@user/Akiva)
2022-02-21 22:43:14 +0100 <awpr> but you can always write the same thing without a library / without dispatching things through a typeclass
2022-02-21 22:43:52 +0100 <dvdrw> awpr: In any case, I'll check it out to get a better apparatus for conceiving of these things -- thanks!
2022-02-21 22:47:27 +0100spacenautx(~spacenaut@user/spacenautx)
2022-02-21 22:47:47 +0100machinedgod(~machinedg@24.105.81.50)
2022-02-21 22:48:02 +0100 <ski> .. i don't really know why people keep saying `forall a. ..a..', when they mean `exists a. ..a..'
2022-02-21 22:49:17 +0100 <ski> (a somewhat related confusion is saying `Cxt => T' when you mean `T', given that `Cxt' holds. i've also noticed this seems to occur often. perhaps this is somehow to blame on tutorials which might mess this up ..)
2022-02-21 22:49:35 +0100 <awpr> /me was just looking up the syntax used for that
2022-02-21 22:49:41 +0100awprwas just looking up the syntax used for that
2022-02-21 22:50:14 +0100 <awpr> (part of the reason is probably that there is no real syntax for existentials or positive-position constraints)
2022-02-21 22:50:15 +0100 <ski> (of course, `Cxt *> T' is yet another thing. but this mostly occurs with the `forall' vs. `exists' thing, anyway)
2022-02-21 22:50:30 +0100 <awpr> https://github.com/goldfirere/ghc-proposals/blob/existentials/proposals/0000-existentials.rst uses `/\` for it
2022-02-21 22:50:46 +0100 <ski> well .. i guess that's one reason why i keep using this pseudo-Haskell syntax to talk about it
2022-02-21 22:51:10 +0100 <dvdrw> I think quantification is the least rigorously explained, since it opens up more questions like kinds/sorts/universes, the finer details of the extended typechecking algorithm...
2022-02-21 22:51:53 +0100 <ski> hm, how does it open up that (anymore than say parameterized types does) ?
2022-02-21 22:52:06 +0100 <dvdrw> It goes past what's immediately useful for producing code, and it's only left to people to seek it out themselves, which leads to a weird mix of inconsistent syntax -- think calculus notation -- so most people don't bother
2022-02-21 22:52:08 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection)
2022-02-21 22:52:17 +0100 <awpr> `data X = forall a. X a` being the syntax for `-XExistentialQuantification` probably doesn't help the confusion
2022-02-21 22:52:34 +0100 <ski> yea, it doesn't help that `ExistentialQuantification' is a misnomer
2022-02-21 22:53:08 +0100 <ski> (i have no problem with that `data X = forall a. X a' syntax, though. although some people definitely prefer using `GADTs' syntax to express this)
2022-02-21 22:53:58 +0100 <dvdrw> ski: I think it's easier to imagine parametrised types to something immediately and intuitively knowable
2022-02-21 22:54:37 +0100 <dvdrw> Most people would *feel* how it works better than they could explain it, but it is satisfyingly logically coherent enough not to worry about particularly
2022-02-21 22:55:13 +0100jassob(~jassob@h-155-4-71-72.A785.priv.bahnhof.se) (Quit: WeeChat 2.8)
2022-02-21 22:55:25 +0100 <ski> dvdrw : sure. but parameterized types naturally gives rise to polymorphism (universally quantified types). however, that doesn't necessarily imply higher order type( function)s (iow more "advanced" kinds, like `(* -> *) -> *')
2022-02-21 22:56:18 +0100 <awpr> https://replit.com/@AndrewPritchard/ListOfExistentials#Main.hs demonstrates a way to do what I think you're looking for without any of the HKD libraries
2022-02-21 22:56:29 +0100 <ski> but as soon as you start talking about parameterized types, you might, later down the road, start to want to parameterize over a *parameterized* type. usually it's only *after* that that you start to want to *quantify* over a parameterized type
2022-02-21 22:57:29 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-02-21 22:57:39 +0100 <ski> (i also dislike the term "higher-kinded type". we don't say "higher-typed values" ..)
2022-02-21 22:57:44 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 22:58:00 +0100 <dvdrw> ski: but we do say "higher-order functions" :)
2022-02-21 22:58:22 +0100 <ski> yes, and, at least i, say "higher-order type (function)"
2022-02-21 22:58:43 +0100 <ski> `MaybeT' is a higher-order type (function)
2022-02-21 22:58:47 +0100 <ski> @kind MaybeT
2022-02-21 22:58:48 +0100 <lambdabot> error:
2022-02-21 22:58:48 +0100 <lambdabot> Not in scope: type constructor or class ‘MaybeT’
2022-02-21 22:58:48 +0100 <lambdabot> Perhaps you meant ‘Maybe’ (imported from Data.Maybe)
2022-02-21 22:58:56 +0100hays(rootvegeta@fsf/member/hays)
2022-02-21 22:59:16 +0100 <ski> @let import Control.Monad.Trans.Maybe
2022-02-21 22:59:17 +0100 <lambdabot> Defined.
2022-02-21 22:59:18 +0100 <ski> @kind MaybeT
2022-02-21 22:59:20 +0100 <lambdabot> (* -> *) -> * -> *
2022-02-21 22:59:37 +0100 <dvdrw> ski: Maybe it's demographics and a particular approach to learning Haskell that's to blame, but I don't see the bulk of people reaching across the abyss to 'play with types'
2022-02-21 23:00:04 +0100 <ski> i just don't see why one should make the terminology any more unclear than necessary
2022-02-21 23:00:43 +0100 <ski> there are clear analogies between value level, and type level. why not leverage those, in the terminology, rather than use disparate terms, or even go against the grain ?
2022-02-21 23:00:44 +0100sonny(~sonny@bras-base-london1483w-grc-30-74-12-157-79.dsl.bell.ca)
2022-02-21 23:01:33 +0100DNH(~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
2022-02-21 23:01:37 +0100 <dvdrw> That, I think is to blame at the lack of omniscience of individual authors shaping the literature/applied practice :P
2022-02-21 23:02:09 +0100 <ski> anyway, a quick way to explain that `forall' there. let's say you want to express a type of queue operations, on elements of type `a'. the operations you want to express are empty queue, enqueue, dequeue. a queue is represented by a value of some unknown implementation/state type `q', which the operations operate on
2022-02-21 23:02:13 +0100 <dvdrw> Jokes aside, calculus, being pretty fundamental to mathemathics, suffers from a very dodgy notation which gets abused by all those who use it
2022-02-21 23:02:27 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 250 seconds)
2022-02-21 23:02:34 +0100 <ski> so, that suggests that `Queue a' should be `exists q. (q,a -> q -> q,q -> Maybe (q,a))'
2022-02-21 23:03:08 +0100 <ski> er, s/Queue/QueueOps/
2022-02-21 23:03:27 +0100 <ski> now, imagine that `QueueOps a' will be a `data' type, with a data constructor, say `MkQueueOps'. we want it to have the signature
2022-02-21 23:03:43 +0100 <ski> MkQueueOps :: (exists q. (q,a -> q -> q,q -> Maybe (q,a))) -> QueueOps a
2022-02-21 23:03:50 +0100 <ski> (or, if we're being more explicit
2022-02-21 23:03:59 +0100 <ski> MkQueueOps :: forall a. (exists q. (q,a -> q -> q,q -> Maybe (q,a))) -> QueueOps a
2022-02-21 23:04:02 +0100 <ski> )
2022-02-21 23:04:09 +0100Giovanni(~Giovanni@176.67.166.45) (Read error: Connection reset by peer)
2022-02-21 23:04:13 +0100slowtype-(~slowtyper@2a02:214c:840d:cd00:225:64ff:feb7:4668)
2022-02-21 23:05:08 +0100 <ski> anyway, there's a general logical law that `(exists x. ..x..) -> ...' is equivalent to `forall x. (..x.. -> ...)' (also `... -> (forall a. ..a..)' is equivalent to `forall a. (... -> ..a..)'. these two are in some sense comparable laws)
2022-02-21 23:05:13 +0100 <dvdrw> Right, for any `a', and a given `q' type such that the following 'type expression' exists -- more hand waving
2022-02-21 23:05:14 +0100slowtyper(~slowtyper@user/slowtyper) (Read error: Connection reset by peer)
2022-02-21 23:05:16 +0100 <ski> so, refactoring with this, we get
2022-02-21 23:05:17 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-21 23:05:28 +0100Giovanni(~Giovanni@176.67.166.45)
2022-02-21 23:05:34 +0100 <ski> MkQueueOps :: forall a q. (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
2022-02-21 23:05:43 +0100 <ski> or, eliding the `forall'
2022-02-21 23:05:45 +0100 <Zemyla> @let class Nub c where nubWith :: (Eq a, c a) => Proxy c -> [a] -> [a]
2022-02-21 23:05:47 +0100 <lambdabot> Defined.
2022-02-21 23:05:47 +0100 <ski> MkQueueOps :: (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
2022-02-21 23:05:57 +0100 <ski> this suggests, using `GADTs'
2022-02-21 23:06:03 +0100 <ski> data QueueOps a
2022-02-21 23:06:05 +0100 <ski> where
2022-02-21 23:06:07 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-02-21 23:06:09 +0100 <ski> MkQueueOps :: (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
2022-02-21 23:06:23 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:06:23 +0100 <ski> or, if you want to uncurry the data constructor
2022-02-21 23:06:35 +0100 <ski> MkQueueOps :: q -> (a -> q -> q) -> (q -> Maybe (q,a)) -> QueueOps a
2022-02-21 23:06:47 +0100 <ski> or, using the `ExistentialQuantification' syntax
2022-02-21 23:06:54 +0100coot(~coot@213.134.190.95) (Quit: coot)
2022-02-21 23:07:13 +0100 <ski> data QueueOps a = forall q. MkQueueOps q (a -> q -> q) (q -> Maybe (q,a))
2022-02-21 23:08:08 +0100 <ski> so, bottom line is, it's `forall q.', because the data constructor (which "hides/forgets" the abstract/opaque/skolem `q') is polymorphic in `q'
2022-02-21 23:08:45 +0100 <dvdrw> Yes.
2022-02-21 23:08:46 +0100 <awpr> it's also neat to think about the fact that existentials are the negation of foralls: if you have a forall type and look at it "from the outside", the quantified variable is a slot that you can plug any type into; but from "inside" the forall looking out and trying to assign a type to the rest of the program (the context), it's existential: there's some type provided by the context that you can't know anything about
2022-02-21 23:09:12 +0100 <awpr> the formal version of this is the linear logic rule that existential quantification cuts against universal quantification
2022-02-21 23:09:21 +0100 <ski> (or, expressed otherwise, any universally quantified (over the whole signature) type variables in a data constructor acts like "expressing existentials", because of that `(exists x. ..x..) -> ...' vs. `forall x. (..x.. -> ...)' equivalence)
2022-02-21 23:10:33 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-21 23:10:38 +0100 <ski> (btw, there's a reason why i said `QueueOps' and not `Queue'. this is about ADT (in the Abstract Data Type sense) vs. OO. if i had said `Queue', taking the `q' component not as "empty queue operation", but as "current queue state", then that would be OO)
2022-02-21 23:11:11 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
2022-02-21 23:11:12 +0100 <dvdrw> `QueueOps' seems more natural when dealing with the reality of dragging along state yourself
2022-02-21 23:11:44 +0100 <ski> (ADT and OO can be seen as two different styles in which you use existentials. you can also reformulate the OO view in terms of recursive (coinductive) types, rather than existentials, and this ties in with "objects as closures")
2022-02-21 23:11:57 +0100doyougnu(~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 240 seconds)
2022-02-21 23:12:24 +0100 <ski> dvdrw : "Jokes aside, calculus, being pretty fundamental to mathemathics, suffers from a very dodgy notation which gets abused by all those who use it" -- i'm painfully aware of this, yea ..
2022-02-21 23:12:54 +0100 <ski> (i wish someone could have told me that partial vs. total derivatives was about lexical vs. dynamic scope)
2022-02-21 23:13:45 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2022-02-21 23:14:26 +0100 <ski> dvdrw : yea, with `QueueOps' (ADT), you open the abstraction (the existential) once, and then you carry around the bare `q's directly. with `Queue' (OO), you always keep the current state wrapped together with the methods/operations, rewrapping any time you apply an operation that generates a new state
2022-02-21 23:14:46 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
2022-02-21 23:16:19 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-02-21 23:17:04 +0100 <ski> awpr : "existentials are the negation of foralls" -- i'd say they are duals of each other. `exists' and `forall' exactly swap the rôles of the caller/user/consumer and the callee/implementor/producer. one rôle gets to pick the type, the other must be prepared to handle any type, and can't assume anything about it, must treat it as abstract
2022-02-21 23:17:33 +0100 <dvdrw> I'm having trouble imagining `[exists a. a]' .. it'd be just `forall a. [a]' in this case, right?
2022-02-21 23:18:18 +0100 <ski> "but from \"inside\" the forall looking out and trying to assign a type to the rest of the program (the context), it's existential" -- i'd say that from the inside, it's a skolem. from the outside it's a placeholder / meta variable (in logic programming, this is called a logic variable, or (concurrent logic programming) a dataflow variable)
2022-02-21 23:19:53 +0100 <ski> when you have `length :: forall a. [a] -> Int', and you use (typically call) `length', that occurance gets specialized to having type `[_a] -> Int', where `_a' is a placeholder. but when you're type-checking the definition of `length' (with an explicit type signature), `forall a. [a] -> Int' gets turned into `[?a] -> Int', where `?a' is a skolem (aka "rigid type variable")
2022-02-21 23:20:08 +0100 <awpr> yeah, duals is good too. in linear logic that shows up as the two being each other's linear negations
2022-02-21 23:20:15 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
2022-02-21 23:20:18 +0100meinside(uid24933@id-24933.helmsley.irccloud.com)
2022-02-21 23:20:19 +0100 <ski> yes
2022-02-21 23:20:21 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-02-21 23:20:52 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 272 seconds)
2022-02-21 23:21:43 +0100 <awpr> skolem seems to be the functional-programming-compiler-author term for a type variable provided by an existential quantifier (or equivalently, brought into scope by a universal quantifier)?
2022-02-21 23:22:07 +0100 <ski> so, both universal and existential quantification both have the (opposite) meta-variable/placeholder vs. skolem qualities. (so i don't like to say that either of those are e.g. "existential"). which one you experience depends on which quantifier you use, and on which side of the caller/elimination vs. callee/introduction fence you are standing
2022-02-21 23:22:37 +0100 <ski> "for a type variable provided by an existential quantifier" -- no. the point is that it has just as much to do with `forall', as with `exists' !
2022-02-21 23:22:41 +0100dy(~dy@user/dy) (Remote host closed the connection)
2022-02-21 23:23:05 +0100 <awpr> yeah, that's a fair point, they both show up as free and skolem in introducing/eliminating them, just in the opposite order
2022-02-21 23:23:17 +0100 <byorgey> awpr: yes, although the concept of Skolem variables came from mathematics
2022-02-21 23:23:30 +0100 <ski> `exists a. ..a..' is neutral. how you experience it depends on whether you're introducing/producing it, or eliminating/consuming it
2022-02-21 23:24:10 +0100 <ski> (well, Skolem was a logician)
2022-02-21 23:24:58 +0100 <awpr> in any case I think "the thing you have when introducing a forall or eliminating an existential" is a fair description
2022-02-21 23:25:07 +0100 <ski> (btw, the more common term would be "skolem constant" (and "skolem function", when it's parameterized on meta-variables), not "skolem variable")
2022-02-21 23:25:24 +0100 <ski> yes
2022-02-21 23:25:44 +0100 <awpr> I just phrased it poorly at first with "provided" and "brought into scope"
2022-02-21 23:25:59 +0100IWantToLikeHaske(~IWantToLi@95.76.226.57)
2022-02-21 23:26:33 +0100kilolympus(~kilolympu@vpn-fn-229.net.ed.ac.uk)
2022-02-21 23:28:14 +0100IWantToLikeHaske(~IWantToLi@95.76.226.57) (Client Quit)
2022-02-21 23:28:52 +0100 <ski> (e.g. if you have `forall a. exists b. F a b', then, by axiom of choice, you can reformulate this as `exists f. forall a. F a (f a)'. if you're consuming this, you need to consume `forall a. F a (?f a)', where `?f' is a skolem function. iow, you need to consume `F _a (?f _a)', where `_a' is now a placeholder / meta-variable, that you're allowed to pick)
2022-02-21 23:29:10 +0100HaskellSux(~HaskellSu@95.76.226.57)
2022-02-21 23:29:29 +0100ChanServ+o geekosaur
2022-02-21 23:29:48 +0100skiglances around nervously
2022-02-21 23:30:10 +0100HaskellSux(~HaskellSu@95.76.226.57) (Client Quit)
2022-02-21 23:30:29 +0100geekosaur-o geekosaur
2022-02-21 23:31:35 +0100 <dvdrw> That makes sense to me :P
2022-02-21 23:32:32 +0100jgeerds(~jgeerds@55d4b9df.access.ecotel.net) (Remote host closed the connection)
2022-02-21 23:32:36 +0100ski. o O ( <https://en.wikipedia.org/wiki/Skolem_normal_form> )
2022-02-21 23:32:51 +0100Null_A(~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 245 seconds)
2022-02-21 23:33:06 +0100Eyyyy(~Eyyyy@95.76.226.57)
2022-02-21 23:34:05 +0100 <ski> (i recall i called "axiom of choice", "skolem", before i learned it had the previous name)
2022-02-21 23:34:50 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:35:04 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:35:12 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:35:15 +0100ski. o O ( "Intensional vs. Extensional Choice" by roconnor in 2005-06-04 at <https://r6.ca/blog/20050604T143800Z.html> )
2022-02-21 23:35:26 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:35:34 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:35:47 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:35:55 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:35:57 +0100ChanServ+o litharge
2022-02-21 23:35:58 +0100litharge+b lavaman!~lavaman@98.38.249.169$##fix-your-connection
2022-02-21 23:36:08 +0100litharge-o litharge
2022-02-21 23:37:12 +0100dvdrw(~dvdrw@user/dvdrw) (Quit: leaving)
2022-02-21 23:38:17 +0100dvdrw(~dvdrw@user/dvdrw)
2022-02-21 23:39:45 +0100Eyyyy(~Eyyyy@95.76.226.57) ()
2022-02-21 23:40:04 +0100burnsidesLlama(~burnsides@dhcp168-023.wadham.ox.ac.uk)
2022-02-21 23:43:40 +0100dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
2022-02-21 23:43:56 +0100little_mac(~little_ma@2601:410:4300:3ce0:150f:8c19:261d:f4d9) (Remote host closed the connection)
2022-02-21 23:49:52 +0100jespada(~jespada@148.252.132.52) (Read error: Connection reset by peer)
2022-02-21 23:50:58 +0100ChanServ+o litharge
2022-02-21 23:50:58 +0100litharge-bo lavaman!~lavaman@98.38.249.169$##fix-your-connection litharge
2022-02-21 23:51:00 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-02-21 23:51:10 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:51:17 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:51:32 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:51:39 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:51:54 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:52:02 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:52:16 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:52:23 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:52:38 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:52:45 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:52:58 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:53:06 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:53:21 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:53:27 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:53:42 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:53:49 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:53:55 +0100zincy_(~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
2022-02-21 23:54:03 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:54:10 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:54:25 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:54:32 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:54:46 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:54:53 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:55:08 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:55:15 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:55:29 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:55:36 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:55:51 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:55:58 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:56:12 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:56:20 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:56:30 +0100 <FernandoChu[m]> Is there any negative effects of `FlexibleContexts`? If not, why is it not "on" by default? It seems very natural to me
2022-02-21 23:56:35 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:56:43 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:56:43 +0100max22-(~maxime@2a01cb0883359800280d6109c37c5449.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2022-02-21 23:56:56 +0100lavaman(~lavaman@98.38.249.169)
2022-02-21 23:57:04 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-02-21 23:57:10 +0100yauhsien(~yauhsien@61-231-19-150.dynamic-ip.hinet.net)
2022-02-21 23:58:06 +0100ChanServ+o litharge
2022-02-21 23:58:06 +0100litharge+b *!*@98.38.249.169
2022-02-21 23:58:17 +0100litharge-o litharge
2022-02-21 23:58:42 +0100 <geekosaur> the main reason it'soff is ghc tries to stick as close as possible to the standard unless you explicitly tell it not to
2022-02-21 23:59:00 +0100`2jt(~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Remote host closed the connection)
2022-02-21 23:59:15 +0100 <geekosaur> (note that this is changing as of ghc 9.2 where the GHC2021 suite of extensions is on by default)
2022-02-21 23:59:25 +0100romesrf(~romes@44.190.189.46.rev.vodafone.pt)