Home liberachat/#haskell: Logs Calendar

Logs on 2022-02-21 (liberachat/#haskell)

00:00:26 hololeap only uses 4-space indents
00:00:45 <Unicorn_Princess> well it is the objectively correct number of spaces
00:00:53 <hololeap> dunno why, but two space has always bugged me
00:01:06 hololeap nods
00:01:20 <Unicorn_Princess> alas, the world is full of heretics
00:01:48 × juhp quits (~juhp@128.106.188.82) (Quit: juhp)
00:02:06 juhp joins (~juhp@128.106.188.82)
00:02:42 × max22- quits (~maxime@2a01cb0883359800761b1c69d9198b7f.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
00:03:55 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
00:09:01 <int-e> hololeap: Surely "where" deserves a 2 space indent
00:09:44 <hpc> this is why i always indent to prime-numbered tab stops
00:09:52 <hololeap> yeah, it does :)
00:09:52 <hpc> 2 spaces, then 3, then 5, then 8, then 13
00:09:57 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:09:57 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:09:57 wroathe joins (~wroathe@user/wroathe)
00:10:01 <geekosaur> isnt that fibo?
00:10:09 <hpc> my math is too advanced for you
00:10:13 <hpc> (also yes)
00:10:14 <hololeap> 8 aint no prime
00:10:40 <hpc> look i am a programmer, not a mathematician
00:10:42 <int-e> hpc: is that a Haskell prime joke
00:11:12 <hololeap> hpc, nice use of golden ratio in your line starts
00:11:52 <hololeap> very artistic
00:11:56 <hpc> i also separate all my definitions with vertical tabs instead of newlines
00:14:41 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
00:15:20 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:15:20 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:15:20 wroathe joins (~wroathe@user/wroathe)
00:16:49 geekosaur reminded of back when it was de riguer for C programmers to separate function definitions with formfeeds
00:18:58 <monochrom> Consider putting multiple Haskell modules in the same file separated by formfeeds >:)
00:19:05 tatarqa joins (~kli@ip-89-177-122-45.net.upcbroadband.cz)
00:20:12 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
00:24:19 × wavemode quits (~wavemode@2601:241:0:fc90:79a9:b149:73a6:32c7) (Ping timeout: 256 seconds)
00:28:55 lavaman joins (~lavaman@98.38.249.169)
00:31:05 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
00:31:05 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
00:31:05 wroathe joins (~wroathe@user/wroathe)
00:33:41 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
00:33:41 × jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 272 seconds)
00:35:47 × burnsidesLlama quits (~burnsides@dhcp168-012.wadham.ox.ac.uk) (Remote host closed the connection)
00:40:27 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
00:44:37 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
00:48:54 × dvdrw quits (~dvdrw@87.116.177.189) (Quit: leaving)
00:51:31 irishman joins (~vshev4enk@178.151.117.243)
00:53:21 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799)
00:54:25 <int-e> monochrom: cute, but who'd compile that?
00:54:40 × little_mac quits (~little_ma@2601:410:4300:3ce0:45bc:2e9e:c6:5360) (Remote host closed the connection)
00:55:48 × irishman quits (~vshev4enk@178.151.117.243) (Ping timeout: 240 seconds)
00:57:03 dons joins (~dons@user/dons)
01:04:41 leungbk joins (~user@2603-8000-1201-2dd2-e8ab-4c7e-ecf4-c621.res6.spectrum.com)
01:06:57 azimut_ joins (~azimut@gateway/tor-sasl/azimut)
01:08:56 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
01:10:41 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:11:51 × Me-me quits (~me-me@v.working.name) (Changing host)
01:11:51 Me-me joins (~me-me@user/me-me)
01:16:11 × DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
01:16:47 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:17:22 × random quits (~random@46.254.129.49) (Ping timeout: 272 seconds)
01:28:11 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
01:32:17 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
01:35:50 vysn joins (~vysn@user/vysn)
01:41:25 × aweinstock quits (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (Ping timeout: 240 seconds)
01:43:07 ski often puts form feeds into Haskell source
01:44:00 <ski> (multiple modules .. i wish)
01:46:49 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
01:57:58 × leungbk quits (~user@2603-8000-1201-2dd2-e8ab-4c7e-ecf4-c621.res6.spectrum.com) (Remote host closed the connection)
02:00:00 aweinstock joins (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com)
02:01:42 freeman42x[m] joins (~freeman42@2001:470:69fc:105::7d29)
02:02:15 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
02:04:57 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
02:09:56 × Topsi quits (~Tobias@dyndsl-095-033-018-175.ewe-ip-backbone.de) (Read error: Connection reset by peer)
02:10:26 <Me-me> int-e: I followed some of that.
02:13:43 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
02:14:50 × random-jellyfish quits (~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
02:21:21 × cheater quits (~Username@user/cheater) (Ping timeout: 272 seconds)
02:27:10 cheater joins (~Username@user/cheater)
02:33:56 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
02:34:06 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
02:35:20 × Hash quits (~Hash@hashsecurity.org) (Quit: https://hashsecurity.org)
02:35:45 Hash joins (~Hash@hashsecurity.org)
02:35:53 × justAstache quits (~justache@user/justache) (Read error: Connection reset by peer)
02:36:48 justAstache joins (~justache@user/justache)
02:39:06 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds)
02:44:44 <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
02:46:39 <Unicorn_Princess> it's currently using 2-space offsets, despite c-basic-offset, standard-offset, and tab-width all set to 4
02:46:53 <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?
02:47:15 <freeman42x[m]> maybe auto-format hmm
02:47:37 <Unicorn_Princess> it's done by lsp if you call lsp--format-region
02:48:17 <Unicorn_Princess> lsp-format-region*
02:48:17 × xff0x quits (~xff0x@2001:1a81:5301:6400:b772:c1d8:3c5d:2da4) (Ping timeout: 240 seconds)
02:48:23 <freeman42x[m]> oh, so you are asking how to set the indentation when running that command?
02:48:44 <Unicorn_Princess> yep
02:49:05 ski . o O ( "Yet Another Tabs v. Spaces Debate" ("I mix tabs and spaces.") by dmwit at <http://dmwit.com/tabs/> )
02:49:58 geekosaur joins (~geekosaur@xmonad/geekosaur)
02:50:22 xff0x joins (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
02:50:30 <Unicorn_Princess> sorry, s/standard-offset/standard-indent
02:51:13 <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
02:54:36 notzmv joins (~zmv@user/notzmv)
02:54:53 <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
02:56:11 <freeman42x[m]> this also might help, in case it is not the default provider: https://github.com/haskell/stylish-haskell#haskell-language-server
02:58:44 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
03:02:14 <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?
03:02:57 <freeman42x[m]> Unicorn_Princess: curious, how did you figure out which provider was default?
03:03:51 <Unicorn_Princess> by desperately groping around in the dark in all directions
03:03:57 × lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in)
03:04:15 <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
03:04:53 <Unicorn_Princess> it also mentions customization variables, which reminded me to check M-x customize-variable, and search for haskell format
03:05:45 <Unicorn_Princess> i'm in the unenviable position of knowing next to nothing about emacs and lsp, and trying to configure lsp for emacs :)
03:05:57 <freeman42x[m]> Unicorn_Princess: do you want to change from Ormolu to another provider?
03:06:19 <Unicorn_Princess> i have no idea
03:06:44 <Unicorn_Princess> i'd like 4-space indents, but don't want to sacrifice too much to get it
03:07:17 <Unicorn_Princess> so if ormolu doesn't support changing this, but some other, less mature provider does, i'd stick with ormolu/2-spaces
03:07:27 <freeman42x[m]> <freeman42x[m]> "this also might help, in case it..." <- ^ this tells you how to switch to stylish-haskell if you want to
03:09:28 <freeman42x[m]> once you switched to it, use the previous link about how to configure stylish-haskell via config files
03:10:27 × werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer)
03:10:50 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 250 seconds)
03:13:35 Erutuon joins (~Erutuon@user/erutuon)
03:16:35 little_mac joins (~little_ma@2601:410:4300:3ce0:6823:32a0:8d3a:9add)
03:16:57 lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
03:23:48 × td_ quits (~td@94.134.91.130) (Ping timeout: 240 seconds)
03:24:56 werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
03:26:01 td_ joins (~td@muedsl-82-207-238-047.citykom.de)
03:27:58 random joins (~random@46.254.129.49)
03:32:19 × random quits (~random@46.254.129.49) (Remote host closed the connection)
03:33:48 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
03:36:43 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
03:38:07 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
03:51:10 random joins (~random@46.254.129.49)
04:00:04 × kadobanana quits (~mud@user/kadoban) (Quit: quit)
04:01:13 <freeman42x[m]> Unicorn_Princess: did you get it to work?
04:02:52 <Unicorn_Princess> The oak fought the wind and was broken, the willow bent when it must and survived.
04:03:18 <Unicorn_Princess> i gave up >_>
04:03:57 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 272 seconds)
04:04:26 <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?
04:04:30 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
04:04:35 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
04:04:38 <Unicorn_Princess> i'm wary of making my configuration too much of a special unique case
04:05:07 mud joins (~mud@user/kadoban)
04:06:46 <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
04:07:42 <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
04:07:54 <Unicorn_Princess> i just, foolishly, thought it would be easy to adjust :|
04:07:57 <freeman42x[m]> Unicorn_Princess: you'd need to switch to stylish-haskell for that to work. maybe try configuring ormolu instead
04:09:05 × tatarqa quits (~kli@ip-89-177-122-45.net.upcbroadband.cz) (Quit: Leaving)
04:10:02 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:10:02 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:10:02 wroathe joins (~wroathe@user/wroathe)
04:10:46 × cjb quits (~cjb@user/cjb) (Quit: rcirc on GNU Emacs 29.0.50)
04:11:11 <Unicorn_Princess> the willow bent and survived, freeman42x[m]
04:11:23 <Unicorn_Princess> 2 spaces is fine..
04:12:21 <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?
04:12:37 lavaman joins (~lavaman@98.38.249.169)
04:14:42 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
04:14:49 <freeman42x[m]> Unicorn_Princess: aight, most Haskell githup repositories use 2 spaces, 62% https://ukupat.github.io/tabs-or-spaces/
04:16:50 zmt00 joins (~zmt00@user/zmt00)
04:17:14 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 272 seconds)
04:18:28 dsrt^ joins (~dsrt@50.233.120.162)
04:18:32 <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)
04:19:48 vonfry joins (~user@119.135.207.43)
04:20:57 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
04:21:41 Guest|17 joins (~Guest|17@172.93.132.243)
04:22:00 × Guest|17 quits (~Guest|17@172.93.132.243) (Client Quit)
04:25:33 <Sqaure> c_wraith, i was thinking of the motivation for the creation of this https://well-typed.com/blog/2021/08/large-records/
04:26:47 <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.
04:31:32 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:31:32 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:31:32 wroathe joins (~wroathe@user/wroathe)
04:36:46 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:41:11 <sm> seen in #haskell:matrix.org , tomsmeding:
04:41:23 <sm> > I wish these pastebin sites would allow highlighting specific rows like gist/github
04:41:25 <lambdabot> error:
04:41:25 <lambdabot> Data constructor not in scope:
04:41:25 <lambdabot> I :: t0
04:41:44 × h_ quits (rootvegeta@fsf/member/hays) (Remote host closed the connection)
04:42:36 cynomys joins (~cynomys@user/cynomys)
04:44:24 × azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
04:44:45 azimut joins (~azimut@gateway/tor-sasl/azimut)
04:45:19 machinedgod joins (~machinedg@24.105.81.50)
04:45:26 deadmarshal joins (~deadmarsh@95.38.117.184)
04:51:43 × vonfry quits (~user@119.135.207.43) (Remote host closed the connection)
04:52:12 vonfry joins (~user@119.135.207.43)
04:52:34 vonfry parts (~user@119.135.207.43) ()
04:52:36 × waleee quits (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 240 seconds)
04:59:42 toastloop joins (~toastloop@user/toastloop)
05:02:20 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
05:02:21 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
05:02:21 wroathe joins (~wroathe@user/wroathe)
05:05:35 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Remote host closed the connection)
05:05:41 <freeman42x[m]> is there any "reload GHCI and re-run last command" capable VSCode plugin or external program?
05:05:58 × HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection)
05:06:14 HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato)
05:07:00 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
05:10:46 Guest89 joins (~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197)
05:18:21 × drdo quits (~drdo@roach0.drdo.eu) (Quit: Ping timeout (120 seconds))
05:19:16 drdo joins (~drdo@roach0.drdo.eu)
05:19:24 × lechner quits (~lechner@debian/lechner) (Ping timeout: 240 seconds)
05:20:26 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
05:21:41 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
05:21:50 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
05:22:21 ChaiTRex joins (~ChaiTRex@user/chaitrex)
05:22:25 lechner joins (~lechner@debian/lechner)
05:26:12 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
05:27:58 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
05:32:41 astra is now known as amish
05:33:11 amish is now known as Guest120
05:34:00 Guest120 is now known as amish
05:34:04 × amish quits (sid289983@2a03:5180:f:4::4:6cbf) (Changing host)
05:34:04 amish joins (sid289983@user/amish)
05:34:21 amish is now known as astra
05:39:17 × mvk quits (~mvk@2607:fea8:5cdc:bf00::99e7) (Ping timeout: 240 seconds)
05:47:00 × dons quits (~dons@user/dons) (Ping timeout: 260 seconds)
05:49:01 × deadmarshal quits (~deadmarsh@95.38.117.184) (Ping timeout: 256 seconds)
05:49:40 <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
05:49:40 <Guest89> thought 'parseFile' should respect language pragmas?
05:51:10 <freeman42x[m]> Guest89: language pragma's can also be declared globally in a cabal file, that might be cause of the issue
05:59:09 <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?
05:59:46 <sclv> The Cabal lib itself
06:02:36 × poss quits (~fes@mobile-access-567357-189.dhcp.inet.fi) (Ping timeout: 240 seconds)
06:03:46 <Guest89> Oh... maybe I could've thought of that, thanks again!
06:12:24 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:15:44 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
06:18:49 × Kaiepi quits (~Kaiepi@156.34.47.253) (Remote host closed the connection)
06:25:42 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
06:26:05 jpds joins (~jpds@gateway/tor-sasl/jpds)
06:31:00 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
06:35:05 lavaman joins (~lavaman@98.38.249.169)
06:37:58 Kaiepi joins (~Kaiepi@156.34.47.253)
06:39:44 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
06:43:06 × shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit)
06:43:52 deadmarshal joins (~deadmarsh@95.38.117.184)
07:00:54 jonathanx__ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
07:00:54 × jonathanx_ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
07:01:48 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
07:03:09 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
07:03:09 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
07:03:09 wroathe joins (~wroathe@user/wroathe)
07:03:38 <sshine> Guest89, I stopped putting my pragmas in package.yaml/.cabal because the language server couldn't parse that back when I did it.
07:04:06 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
07:06:17 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
07:06:50 Erutuon joins (~Erutuon@user/erutuon)
07:07:38 <sm> freeman42x: ghcid -t sort of thing ?
07:08:15 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
07:10:26 <freeman42x[m]> sm: what is the description of that in help? sorry, I don't have it installed
07:12:39 <sm> https://github.com/ndmitchell/ghcid#evaluation
07:13:05 × arkeet quits (arkeet@moriya.ca) (Quit: ZNC 1.8.2 - https://znc.in)
07:13:25 arkeet joins (arkeet@moriya.ca)
07:14:58 ardell joins (~ardell@user/ardell)
07:17:24 × raym quits (~raym@user/raym) (Ping timeout: 240 seconds)
07:21:51 michalz joins (~michalz@185.246.204.61)
07:23:14 × little_mac quits (~little_ma@2601:410:4300:3ce0:6823:32a0:8d3a:9add) (Remote host closed the connection)
07:29:15 <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
07:29:43 <freeman42x[m]> `ghcid -t` says it is for `Set window topmost (Windows only)`
07:30:50 califax joins (~califax@user/califx)
07:34:32 Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
07:38:57 × Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
07:39:00 coot joins (~coot@213.134.190.95)
07:42:01 zeenk joins (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5)
07:44:21 <dminuoso> maerwald[m]: Yes.
07:45:25 <dminuoso> Postfix configuration generally is not that complicated if you make a few design decisions.
07:46:21 <dminuoso> rspamd and dovecot are way more complicated in terms of how you usually configure them
07:46:30 <dminuoso> If you make use of these
07:46:40 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
07:48:07 <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.
07:49:34 <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.
07:49:55 <dminuoso> So we just have to turn on `services.postfix.enable = true;` on any server, and it will automatigally be included by our monitoring
07:50:18 <dminuoso> Anyway. Not trying to convince you it's great which Im sure you disagree with.
07:55:25 dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be)
07:56:59 lortabac joins (~lortabac@2a01:e0a:541:b8f0:48c3:41d8:b68d:811a)
07:57:02 Ariakenom joins (~Ariakenom@2001:9b1:efe:9d00:f583:242c:b5f1:2422)
07:57:15 gehmehgeh joins (~user@user/gehmehgeh)
08:01:04 neurocyte0917090 joins (~neurocyte@IP-045136169050.dynamic.medianet-world.de)
08:01:04 × neurocyte0917090 quits (~neurocyte@IP-045136169050.dynamic.medianet-world.de) (Changing host)
08:01:04 neurocyte0917090 joins (~neurocyte@user/neurocyte)
08:01:55 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
08:02:21 chele joins (~chele@user/chele)
08:03:13 Ariakenom_ joins (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se)
08:05:26 kuribas joins (~user@188.188.61.69)
08:05:35 × Logio quits (em@kapsi.fi) (Ping timeout: 256 seconds)
08:05:35 × micro quits (~micro@user/micro) (Ping timeout: 256 seconds)
08:05:43 Logio joins (em@kapsi.fi)
08:06:21 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:06:31 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
08:07:03 × Ariakenom quits (~Ariakenom@2001:9b1:efe:9d00:f583:242c:b5f1:2422) (Ping timeout: 256 seconds)
08:07:04 Sgeo joins (~Sgeo@user/sgeo)
08:07:07 micro joins (~micro@user/micro)
08:07:42 mc47 joins (~mc47@xmonad/TheMC47)
08:07:43 mbuf joins (~Shakthi@122.174.44.9)
08:08:38 raym joins (~raym@user/raym)
08:09:28 jakalx parts (~jakalx@base.jakalx.net) ()
08:09:37 kuribas` joins (~user@dD5779AA0.access.telenet.be)
08:10:15 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
08:10:57 alp joins (~alp@user/alp)
08:11:49 × kuribas quits (~user@188.188.61.69) (Ping timeout: 256 seconds)
08:15:40 phma_ joins (phma@2001:5b0:211f:f48:ea23:e8cf:9b9f:fa4a)
08:16:16 × phma quits (phma@2001:5b0:211c:8bf8:1555:98c1:2056:8534) (Read error: Connection reset by peer)
08:18:54 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
08:18:54 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
08:18:54 wroathe joins (~wroathe@user/wroathe)
08:22:10 jakalx joins (~jakalx@base.jakalx.net)
08:23:34 briandaed joins (~root@109.95.142.93.r.toneticgroup.pl)
08:23:37 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds)
08:25:17 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
08:27:08 dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net)
08:28:20 k8yun joins (~k8yun@user/k8yun)
08:28:43 × k8yun quits (~k8yun@user/k8yun) (Remote host closed the connection)
08:33:45 × kuribas` quits (~user@dD5779AA0.access.telenet.be) (Remote host closed the connection)
08:35:54 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
08:37:30 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
08:40:53 cfricke joins (~cfricke@user/cfricke)
08:44:56 acidjnk joins (~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de)
08:45:17 max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
08:47:15 × random quits (~random@46.254.129.49) (Remote host closed the connection)
08:48:57 × toastloop quits (~toastloop@user/toastloop) (Quit: Leaving)
08:49:22 toastloop joins (~toastloop@user/toastloop)
08:49:44 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
08:49:44 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
08:49:44 wroathe joins (~wroathe@user/wroathe)
08:55:17 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds)
08:55:25 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
08:56:40 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
08:57:36 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
08:58:27 × wolfshappen quits (~waff@irc.furworks.de) (Ping timeout: 272 seconds)
08:58:30 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
08:58:43 wolfshappen joins (~waff@irc.furworks.de)
09:03:00 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
09:03:12 × dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection)
09:05:49 ccntrq joins (~Thunderbi@2a01:e34:eccb:b060:9e4b:b673:9870:6415)
09:10:20 Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
09:12:39 arievw joins (~arievw@85.148.234.95)
09:16:57 × shreyasminocha quits (51fdc93eda@user/shreyasminocha) (Ping timeout: 240 seconds)
09:16:57 × raghavgururajan quits (ea769b8000@user/raghavgururajan) (Ping timeout: 240 seconds)
09:17:01 × tdmm quits (1c9b9145fc@2604:bf00:561:2000::1c8) (Ping timeout: 245 seconds)
09:17:01 × filwisher quits (2e6936c793@2604:bf00:561:2000::170) (Ping timeout: 245 seconds)
09:17:01 × lukec quits (9dfd4d094e@2604:bf00:561:2000::10e) (Ping timeout: 245 seconds)
09:17:17 × pranaysashank quits (ef3e56ca8b@2604:bf00:561:2000::3c4) (Ping timeout: 240 seconds)
09:18:02 × Ankhers quits (e99e97ef8e@2604:bf00:561:2000::2a2) (Ping timeout: 240 seconds)
09:18:03 × fluffyballoon quits (45ce440a48@2604:bf00:561:2000::e2) (Ping timeout: 250 seconds)
09:18:15 tdmm joins (1c9b9145fc@2604:bf00:561:2000::1c8)
09:18:17 × jleightcap quits (7bc4014b62@user/jleightcap) (Ping timeout: 240 seconds)
09:18:27 jleightcap joins (7bc4014b62@user/jleightcap)
09:18:37 × dawdler quits (035b60b5aa@user/dawdler) (Read error: Connection reset by peer)
09:18:37 × bsima1 quits (9d7e39c8ad@2604:bf00:561:2000::dd) (Ping timeout: 240 seconds)
09:18:39 jakzale_ joins (6291399afa@user/jakzale)
09:18:39 pranaysashank joins (ef3e56ca8b@2604:bf00:561:2000::3c4)
09:18:39 evanrelf_ joins (3addc196af@2604:bf00:561:2000::f0)
09:18:40 raghavgururajan joins (ea769b8000@user/raghavgururajan)
09:18:55 × sm2n quits (ae95cb1267@user/sm2n) (Ping timeout: 250 seconds)
09:18:59 dawdler joins (035b60b5aa@2604:bf00:561:2000::3b6)
09:18:59 × dawdler quits (035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
09:18:59 dawdler joins (035b60b5aa@user/dawdler)
09:19:02 × evanrelf quits (3addc196af@2604:bf00:561:2000::f0) (Ping timeout: 240 seconds)
09:19:02 × jakzale quits (6291399afa@user/jakzale) (Ping timeout: 240 seconds)
09:19:02 × samhh quits (7569f027cf@2604:bf00:561:2000::e4) (Ping timeout: 240 seconds)
09:19:02 jakzale_ is now known as jakzale
09:19:03 evanrelf_ is now known as evanrelf
09:19:10 Ankhers joins (e99e97ef8e@2604:bf00:561:2000::2a2)
09:19:11 bsima1 joins (9d7e39c8ad@2604:bf00:561:2000::dd)
09:19:20 samhh joins (7569f027cf@2604:bf00:561:2000::e4)
09:19:23 shreyasminocha joins (51fdc93eda@user/shreyasminocha)
09:19:41 sm2n joins (ae95cb1267@user/sm2n)
09:19:49 fluffyballoon joins (45ce440a48@2604:bf00:561:2000::e2)
09:19:54 lukec joins (9dfd4d094e@2604:bf00:561:2000::10e)
09:19:54 filwisher joins (2e6936c793@2604:bf00:561:2000::170)
09:23:04 jespada joins (~jespada@148.252.132.52)
09:29:45 × Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
09:30:59 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
09:32:53 eggplant_ joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
09:35:48 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:5928:8400:a51e:7799) (Ping timeout: 240 seconds)
09:41:53 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:42:19 toastloop parts (~toastloop@user/toastloop) (Leaving)
09:45:01 cosimone joins (~user@93-34-132-33.ip49.fastwebnet.it)
09:53:33 × eggplant_ quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection)
09:53:49 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
09:54:54 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
09:55:59 MajorBiscuit joins (~MajorBisc@c-001-030-015.client.tudelft.eduvpn.nl)
09:56:59 × xff0x quits (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8) (Ping timeout: 256 seconds)
09:57:47 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
09:59:46 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
10:01:09 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 272 seconds)
10:01:44 geekosaur joins (~geekosaur@xmonad/geekosaur)
10:03:33 `2jt joins (~jtomas@210.red-88-24-179.staticip.rima-tde.net)
10:05:16 fendor joins (~fendor@77.119.193.215.wireless.dyn.drei.com)
10:05:37 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
10:06:57 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
10:08:54 xff0x joins (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
10:09:41 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds)
10:11:31 × ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:9e4b:b673:9870:6415) (Remote host closed the connection)
10:13:36 ccntrq joins (~Thunderbi@2a01:e34:eccb:b060:768b:1849:a78b:4ad)
10:13:47 × vglfr quits (~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer)
10:13:57 vglfr joins (~vglfr@coupling.penchant.volia.net)
10:16:51 Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
10:21:29 × Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
10:23:39 × coot quits (~coot@213.134.190.95) (Quit: coot)
10:25:53 coot joins (~coot@213.134.190.95)
10:36:49 lavaman joins (~lavaman@98.38.249.169)
10:40:19 <turlando> Using a stack project, is it possible to load from ghci the modules residing in the app directory without touching the package.yaml?
10:41:00 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
10:43:39 × zachel quits (~zachel@user/zachel) (Quit: Quit: Leaving!)
10:46:05 × fendor quits (~fendor@77.119.193.215.wireless.dyn.drei.com) (Remote host closed the connection)
10:46:54 zachel joins (~zachel@user/zachel)
10:47:21 <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."
10:47:33 <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>
10:48:57 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 240 seconds)
10:48:57 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:48c3:41d8:b68d:811a) (Ping timeout: 240 seconds)
10:50:44 Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
10:51:36 <geekosaur> not that that answers the question, I think,but then I'm not entirely sure what the question is
10:51:50 <geekosaur> note that ghci is dumb and doesn't handlemultiple modules well
10:51:59 <merijn> s/well//
10:52:01 <geekosaur> neither stacknor cabal can help much with this
10:52:48 <geekosaur> there is some limited support, see :add
10:53:55 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
10:55:17 × Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 240 seconds)
10:56:54 geekosaur wonders if a PhD thesis could be squeezed out of designing a better repl
10:58:12 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds)
11:00:37 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:01:14 dvdrw joins (~dvdrw@87.116.162.63)
11:01:40 × dvdrw quits (~dvdrw@87.116.162.63) (Changing host)
11:01:40 dvdrw joins (~dvdrw@user/dvdrw)
11:02:08 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:02:08 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
11:02:28 azimut joins (~azimut@gateway/tor-sasl/azimut)
11:03:17 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:06:58 <merijn> there was work in progress on multi-component GHCI
11:07:00 <merijn> for GSoC
11:08:39 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Quit: leaving)
11:12:52 jao joins (~jao@static-68-235-44-61.cust.tzulo.com)
11:14:12 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
11:15:07 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
11:16:41 × shailangsa quits (~shailangs@host86-186-127-164.range86-186.btcentralplus.com) (Remote host closed the connection)
11:19:37 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
11:20:19 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
11:23:26 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
11:24:46 × cynomys quits (~cynomys@user/cynomys) (Ping timeout: 256 seconds)
11:25:03 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
11:25:10 geekosaur joins (~geekosaur@xmonad/geekosaur)
11:33:28 __monty__ joins (~toonn@user/toonn)
11:35:31 × zaquest quits (~notzaques@5.130.79.72) (Ping timeout: 272 seconds)
11:37:49 × qwedfg quits (~qwedfg@user/qwedfg) (Remote host closed the connection)
11:38:33 DNH joins (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
11:39:03 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
11:40:08 Midjak joins (~Midjak@82.66.147.146)
11:40:24 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
11:40:58 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:41:16 qwedfg joins (~qwedfg@user/qwedfg)
11:41:36 <turlando> Tanks ski, will check that
11:42:05 <turlando> Eventually what I really needed was as simple as stack ghci project:project-exe with the default stack naming
11:49:03 Guest|99 joins (~Guest|99@n151-p1.eduroam.kth.se)
11:49:22 × Guest|99 quits (~Guest|99@n151-p1.eduroam.kth.se) (Client Quit)
11:51:21 × zachel quits (~zachel@user/zachel) (Quit: Quit: Leaving!)
11:51:48 zachel joins (~zachel@user/zachel)
11:53:21 <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)
11:53:52 jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net)
11:54:06 × acidjnk quits (~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
11:56:57 × califax quits (~califax@user/califx) (Remote host closed the connection)
11:57:11 califax joins (~califax@user/califx)
12:01:19 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
12:02:35 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
12:05:01 vickyHaskell joins (~textual@49.37.161.125)
12:05:53 <vickyHaskell> Hello all, I am newbie to haskell/purescript, is this the right place to ask basic queries
12:06:56 × alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
12:07:44 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds)
12:08:03 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
12:09:49 <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
12:10:31 <Franciman> hi vickyHaskell it sure is
12:10:39 <Franciman> regarding purescript there is also the dedicated channel #purescript
12:10:57 lortabac joins (~lortabac@2a01:e0a:541:b8f0:c36d:f85d:bf20:a174)
12:11:33 <vickyHaskell> Sure I will go there, thanks francis, but I guess this question can be answered by haskell users as well.
12:11:37 phma_ is now known as phma
12:13:13 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
12:13:39 zer0bitz joins (~zer0bitz@2001:2003:f74d:b800:3027:99e6:c0d6:7e32)
12:14:06 <Franciman> vickyHaskell: i would reason as follows
12:14:48 <Franciman> you can easily understand how flip works, right?
12:15:14 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
12:15:22 <Franciman> :t flip
12:15:23 <lambdabot> (a -> b -> c) -> b -> a -> c
12:15:32 <Franciman> haskell has it too lol
12:15:46 × deadmarshal quits (~deadmarsh@95.38.117.184) (Ping timeout: 256 seconds)
12:15:53 <Franciman> given a function, it creates a new function which accepts the argument in reverse order
12:15:57 <Franciman> let me explain what i mean
12:16:02 <Franciman> :t (-)
12:16:03 <lambdabot> Num a => a -> a -> a
12:16:07 <Franciman> this is subtraction
12:16:08 <vickyHaskell> I usnderstand how flip works
12:16:10 <Franciman> and
12:16:19 <Franciman> > (-) 3 1
12:16:21 <lambdabot> 2
12:16:31 <Franciman> now if i apply flip to (-), i get a new function
12:16:33 Giovanni joins (~Giovanni@176.67.166.45)
12:16:40 <Franciman> > (flip (-)) 3 1
12:16:42 <lambdabot> -2
12:17:09 <Franciman> the new function runs the subtraction `1 - 3`
12:17:46 <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
12:17:57 <Franciman> apply takes 2 inputs
12:17:59 <vickyHaskell> (-
12:18:01 <Franciman> the first is a function
12:18:09 <Franciman> and the second is the argument to which you want to apply the function
12:18:14 <Franciman> in haskell the name of apply is:
12:18:16 <Franciman> :t ($)
12:18:17 <lambdabot> (a -> b) -> a -> b
12:18:59 <Franciman> apply takes two arguments, a function f :: a -> b, and an argument x :: a
12:19:00 <vickyHaskell> same in purescript as well
12:19:03 <Franciman> yes
12:19:07 notzmv joins (~zmv@user/notzmv)
12:19:10 <Franciman> apply f a = f a
12:19:36 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
12:19:52 <Franciman> so, flip apply's type is
12:19:54 <vickyHaskell> ok now I get it, apply is also taking 2 aguments
12:19:56 <Franciman> :t flip ($)
12:19:57 <lambdabot> a -> (a -> c) -> c
12:20:00 <Franciman> yes
12:20:29 <Franciman> apply (\x -> x + 1) 3
12:20:33 <Franciman> this is how you call it
12:20:43 <Franciman> > ($) (\x -> x + 1) 3
12:20:45 <lambdabot> 4
12:20:52 <Franciman> > ($) (\x -> x + 5) 3
12:20:54 <lambdabot> 8
12:20:58 <Franciman> > ($) (\x -> x * 5) 3
12:20:59 <lambdabot> 15
12:21:06 × jao quits (~jao@static-68-235-44-61.cust.tzulo.com) (Ping timeout: 272 seconds)
12:21:11 <Franciman> i ran apply (or haskell's name for it), to 3 different functions
12:21:25 <vickyHaskell> Thank you Francis & lamdabot, now it seems to me the question was dumb on my part, I did not understand apply properly.
12:21:51 <Franciman> vickyHaskell: what matters is that you understood
12:21:57 <Franciman> questions are cheap
12:22:34 <dvdrw> no reason to fret, it's always a bunch of small steps :)
12:22:52 jao joins (~jao@66.63.167.109)
12:23:05 <vickyHaskell> Yes I did, basically flip, flips the order of inputs, as apply has 2 inputs it is simply fliping the order
12:23:25 <Franciman> correct
12:24:53 × jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 256 seconds)
12:27:52 <[exa]> vickyHaskell: it is slightly interesting to check out what actually happens with the type of "flip" in that expression
12:28:48 × jao quits (~jao@66.63.167.109) (Ping timeout: 256 seconds)
12:29:14 <[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`
12:29:49 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
12:29:51 × exadifficult quits (~etadiffic@95.155.49.108) (Quit: Client closed)
12:31:17 × DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
12:33:57 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
12:35:47 DNH joins (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
12:41:20 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
12:48:21 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds)
12:54:26 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
12:56:01 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
12:56:31 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
12:59:27 geekosaur joins (~geekosaur@xmonad/geekosaur)
13:00:35 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 256 seconds)
13:05:33 deadmarshal joins (~deadmarsh@95.38.117.184)
13:07:52 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
13:07:59 × DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
13:09:32 DNH joins (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
13:14:17 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
13:14:59 × Hecate quits (~mariposa@user/hecate) (Ping timeout: 256 seconds)
13:15:28 Hecate joins (~mariposa@user/hecate)
13:17:28 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
13:17:45 alp joins (~alp@user/alp)
13:21:21 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
13:23:17 <dminuoso> FernandoChu[m]:
13:23:50 shailangsa joins (~shailangs@host86-186-127-164.range86-186.btcentralplus.com)
13:24:30 <dminuoso> FernandoChu[m]: The ambiguity problem exists irrespective of how many instances we have.
13:24:42 <dminuoso> Consider we are writing a module in isolation:
13:25:09 <dminuoso> `module Foo () where instance Foo Int String where f = 1`
13:25:10 × meinside quits (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
13:26:00 <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`
13:27:16 <dminuoso> So we assume that the typeclass instances are open, that means we never know the full extend of available instances.
13:27:46 <dminuoso> However, your second option is perfectly valid and not ambiguous
13:27:49 ph88 joins (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de)
13:28:07 <dminuoso> % class Two a b where g :: (a, b)
13:28:08 <yahb> dminuoso:
13:28:18 <dminuoso> % instance Two Int String where g = (1, "foo")
13:28:18 <yahb> dminuoso:
13:28:25 <dminuoso> % instance Two Char Double where g = ('a', 3.0)
13:28:25 <yahb> dminuoso:
13:28:42 <dminuoso> The reason this works out is because `g` is a polymorphic value. That means:
13:28:43 <dminuoso> % :t g
13:28:43 <yahb> dminuoso: forall {a} {b}. Two a b => (a, b)
13:29:38 <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
13:29:51 <dminuoso> % g :: (Char, Double)
13:29:52 <yahb> dminuoso: ('a',3.0)
13:29:57 <dminuoso> % g :: (Int, String)
13:29:58 <yahb> dminuoso: (1,"foo")
13:30:16 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds)
13:30:20 <dminuoso> That rule, that the caller/consumer/user of a polymorphic thing must decide what the type variables be, always holds. :)
13:31:16 × hololeap quits (~hololeap@user/hololeap) (Ping timeout: 240 seconds)
13:31:45 <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?
13:31:50 hololeap joins (~hololeap@user/hololeap)
13:32:08 <dminuoso> FernandoChu[m]: Consider what I wrote at face value.
13:32:22 <dminuoso> The *user* of a polymorphic thing must decide the types of its type variables.
13:32:44 ec joins (~ec@gateway/tor-sasl/ec)
13:32:56 <dminuoso> So if `h` was a method of `Two`, then whoever *uses* h must decide what `a` and `b` are going to be.
13:32:58 <FernandoChu[m]> ohhhh
13:33:09 <dminuoso> This usage is *usually* inferred
13:33:16 <dminuoso> But sometimes it needs a helping hand
13:33:59 <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.
13:34:04 <dminuoso> Or she/it.
13:34:20 <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
13:34:28 <dminuoso> Exactly.
13:34:33 <FernandoChu[m]> thanks a lot for your time and explanation!
13:34:36 × ardell quits (~ardell@user/ardell) (Ping timeout: 240 seconds)
13:35:34 <dminuoso> FernandoChu[m]: By the way, we can still make `f :: a` work with a bit of trickery!
13:35:51 <FernandoChu[m]> fundeps right?
13:35:54 <dminuoso> No, much simpler
13:36:00 <dminuoso> We make a very simple helper data type
13:36:02 <FernandoChu[m]> :O
13:36:05 <dminuoso> % data Proxy a = Proxy
13:36:05 <yahb> dminuoso:
13:36:12 <dminuoso> This thing is completely blant, it's almost like () right?
13:36:27 <FernandoChu[m]> I see
13:36:28 <dminuoso> So now we can conjure this:
13:36:38 <FernandoChu[m]> so `f :: a -> Proxy a
13:36:40 <FernandoChu[m]> ?
13:36:45 <dminuoso> Not quite
13:36:50 <dminuoso> % data Foo a b where h :: Proxy a -> b
13:36:50 <yahb> dminuoso: ; <interactive>:90:20: error: parse error on input `h'
13:37:01 <dminuoso> % class Foo a b where h :: Proxy a -> b
13:37:01 <yahb> dminuoso:
13:37:02 <FernandoChu[m]> yeah oops
13:37:06 <dminuoso> So now you can do:
13:37:06 × euandreh quits (~euandreh@2804:14c:33:9fe5:41b:9f3:a75a:9b8b) (Ping timeout: 260 seconds)
13:37:14 <dminuoso> h (Proxy :: Proxy Int)
13:37:48 <FernandoChu[m]> very interesting, it's just extra fodder to carry the type information
13:37:52 <dminuoso> Exactly! :)
13:37:57 <FernandoChu[m]> thanks for sharing that too :)
13:39:46 Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
13:46:13 komikat joins (~komikat@183.82.154.44)
13:46:27 <komikat> hi
13:46:52 <geekosaur> hi
13:46:57 <komikat> epic this works
13:47:58 <geekosaur> you might also be interested in matrix, which gives you a more web-like environment. I think we're #haskell@matrix.org
13:48:54 <dminuoso> Mmm, Im not sure that a "more web-like environment" is a good thing... :)
13:49:09 <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...
13:49:15 <komikat> XD
13:49:23 <komikat> is there any benefit to using matrix over irc?
13:49:31 <komikat> because I'm comfortable with irc
13:49:37 <[exa]> unlikely
13:49:47 × max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 272 seconds)
13:49:50 <komikat> cool
13:49:54 <geekosaur> #haskell:matrix.org apparently
13:50:00 <[exa]> perhaps do they provide chat history?
13:50:09 <geekosaur> some people like IRC, some prefer the more "modern" matrix environment
13:50:10 <hpc> if you're already using matrix for something else the bridge means you don't need more than one chat client
13:50:13 <hpc> and that's about it
13:50:20 <geekosaur> matrix does have chat history, yes
13:50:32 <komikat> I think I'm already on the matrix
13:50:50 <komikat> makes sense
13:51:05 <komikat> I prefer discord but IRC seems nice
13:51:39 <dminuoso> I never quite understood why matrix took off but jabber did not.
13:51:51 <[exa]> better name
13:52:02 <geekosaur> I haven't seen many good jabber clients tbh
13:52:14 <komikat> "joining the matrix"
13:52:17 <komikat> sounds cool so theres that
13:52:22 <geekosaur> tried a bunch of them a couple years agoand all of them sucked in one way or another
13:52:37 <[exa]> we've run jabber clients and servers for like 10 years, but everyone moved to slacks nowadays
13:53:01 <dminuoso> geekosaur: whatsapp and zoom use xmpp variants.
13:53:02 × Guest89 quits (~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197) (Quit: Client closed)
13:53:32 <merijn> jabber is mostly dead anyway. There was some hope when GoogleTalk still supported it, but now there's no critical mass
13:53:37 <dminuoso> But I guess this is the typical "if its not new, its not hip" problem
13:53:56 <dminuoso> Add some "json", "go libraries" and "npm packages" - and you've won your popularity contest.
13:54:59 <komikat> add some "Artificial intelligence" for some more traction
13:55:41 × dsrt^ quits (~dsrt@50.233.120.162) (Remote host closed the connection)
13:55:43 <Clint> i would guess that it's because matrix prioritized group chat in a way that jabber never did
13:55:48 × Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
13:55:56 Erutuon joins (~Erutuon@user/erutuon)
13:58:34 <komikat> stack or cabal
13:59:17 <geekosaur> pick one. the community'sabout 50-50 on it these days
13:59:35 <geekosaur> cabal used to have problems but cabal 2.x and above work quite well
13:59:46 <komikat> coo
13:59:48 <komikat> l
13:59:50 <dminuoso> And stack has its own share of issues.
14:00:11 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
14:00:50 peri4n joins (~peri4n@85.232.9.17)
14:01:38 <dminuoso> komikat: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07
14:01:51 <dminuoso> This is a relatively neutral comparison between the two
14:01:51 <komikat> dminuoso: thanks
14:02:08 <komikat> oh is this how you reply to people, very cool
14:02:34 <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)
14:02:57 <dminuoso> The colon and space (or some similar separator) is automatically inserted by most clients tab-completion.
14:03:37 <komikat> interesting
14:05:46 <freeman42x[m]> ski: question regarding the stack / cabal gist you shared: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07?permalink_comment_id=4073014#gistcomment-4073014
14:08:21 <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
14:08:56 <geekosaur> this isn't always ideal, since you don;t have any say in what version of `base` is used with that compiler
14:09:06 × Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
14:09:32 <geekosaur> also, you can get from stackage a cabal freeze file which serves many of the purposes of a resolver
14:10:06 <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
14:10:58 <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
14:10:59 Guest89 joins (~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197)
14:12:26 euandreh joins (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
14:14:02 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
14:14:42 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
14:19:18 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
14:23:26 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
14:25:00 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
14:25:18 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
14:25:18 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
14:25:18 wroathe joins (~wroathe@user/wroathe)
14:28:49 hololeap_ joins (~hololeap@user/hololeap)
14:29:16 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
14:29:17 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
14:30:07 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
14:30:28 komikat joins (~komikat@183.82.154.44)
14:30:39 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
14:30:39 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Client Quit)
14:31:28 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
14:33:27 <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
14:34:30 <dminuoso> freeman42x[m]: regarding "stable builds", ask davean about that.. :)
14:34:47 <dminuoso> They have a great story about doJailbreak and its widespread use in nixpkgs
14:36:06 telser joins (~quassel@user/telser)
14:36:25 <komikat> is there a way to get ghci to "remember" my settings
14:36:39 burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk)
14:36:39 <geekosaur> create a .ghci file
14:36:42 <komikat> like remembering I :set prefix to something else
14:36:43 <komikat> oh
14:36:47 <komikat> cool
14:36:57 <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?
14:36:58 <geekosaur> https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-ghci-and-haskeline-files
14:37:38 <geekosaur> you can create a global one, or per project
14:37:56 × Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: Ping timeout (120 seconds))
14:38:02 <dminuoso> freeman42x[m]: I dont understand the question.
14:38:18 lavaman joins (~lavaman@98.38.249.169)
14:38:45 <komikat> geekosaur: thanks
14:38:45 Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com)
14:39:24 × euandreh quits (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1) (Ping timeout: 240 seconds)
14:39:34 <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?
14:39:50 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:40:01 <dminuoso> freeman42x[m]: cabal solves it like nix does, roughly
14:40:05 <dminuoso> it's nix-inspired
14:40:31 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:40:33 <dminuoso> Which is why you sometime see the v2-* style commands (which are now the default comments) referred to as nix-style commands.
14:40:38 jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net)
14:40:50 <dminuoso> or rather, it solves it better than nix
14:41:15 <dminuoso> the cabal resolver has the entirety of hackage at its disposal and will compute a build plan that satisfies all given constraints
14:41:24 bontaq joins (~user@ool-45779fe5.dyn.optonline.net)
14:41:45 euandreh joins (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
14:42:13 <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
14:42:18 <geekosaur> right, stack and cabal do things completely differently here. but you can use freeze files to get cabal to behave like stack
14:42:19 <dminuoso> differentiated by some hash
14:42:36 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
14:43:11 <geekosaur> the downside of the stack way is you're dependent on someone continuing to maintain stackage
14:43:13 zaquest joins (~notzaques@5.130.79.72)
14:43:22 <merijn> and stack itself :p
14:43:43 <geekosaur> as stack itself has been relegated to "community maintenance" (which in practice seems to mean not much), one can wonder about stackage
14:43:54 <geekosaur> as merijn just commented :)
14:47:17 <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
14:47:29 <freeman42x[m]> s/stack/cabal/
14:47:37 <dminuoso> I dont think there's a way being fought anywhere.
14:47:46 <dminuoso> There might be some overzealous individual users
14:48:34 × hud quits (~hud@uwyo-129-72-161-67.uwyo.edu) (Quit: Client closed)
14:48:36 × HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 240 seconds)
14:48:36 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
14:48:37 <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
14:49:41 <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
14:49:48 <dminuoso> In the first place.
14:50:23 <geekosaur> that said, nobody really knows the bus factor of cabal
14:50:33 <geekosaur> except the insiders who don't say much
14:50:56 max22- joins (~maxime@2a01cb0883359800280d6109c37c5449.ipv6.abo.wanadoo.fr)
14:51:10 <merijn> geekosaur: Better than it was before :p
14:51:19 × vickyHaskell quits (~textual@49.37.161.125) (Ping timeout: 256 seconds)
14:52:23 <merijn> Emily and a couple others have taken over after hvr disappeared and phadej quit
14:52:30 × telser quits (~quassel@user/telser) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:54:02 <geekosaur> poor hvr is probably trapped somewhere in the source trying to find a way out :)
14:54:14 <geekosaur> (either cabal or the matrix builder…)
14:55:00 ardell joins (~ardell@user/ardell)
14:55:02 × euandreh quits (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1) (Ping timeout: 240 seconds)
14:56:20 shriekingnoise joins (~shrieking@201.231.16.156)
14:57:25 telser joins (~quassel@user/telser)
14:57:37 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
14:58:20 <freeman42x[m]> any significant features one would miss if switching from Stack to Cabal? or just minor stuff with simple solutions
14:59:07 <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
14:59:12 <geekosaur> the switch from a resolver mindset to a nix-like mindset is the big one
14:59:50 <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
15:00:03 waleee joins (~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
15:00:06 <carbolymer> and stack likes to install GHC ;-]
15:00:39 <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?
15:01:05 <maerwald> freeman42x[m]: automatic installation of GHC
15:01:12 <maerwald> cabal doesn't have it
15:01:29 <maerwald> or hpack integration
15:01:30 <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
15:01:38 <maerwald> I find both features annoying, but if you like those...
15:01:56 <geekosaur> hpack is seen as something of a downside these days even by the stack folks
15:01:57 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 240 seconds)
15:02:04 <maerwald> finally some sanity
15:02:05 <carbolymer> geekosaur: why is that?
15:02:30 <maerwald> next step: implement an actual constraint solver for stack
15:02:55 <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
15:03:00 × polyphem quits (~rod@2a02:810d:840:8754:22de:a5de:2070:f535) (Ping timeout: 240 seconds)
15:03:13 <geekosaur> and anyone who doesn't use stack has to install hpack and generate a cabal file to install
15:03:17 <maerwald> and it's also annoying to deal with generated files, it causes other problems
15:04:32 × Guest89 quits (~Guest89@2a01:41e1:464f:6b00:42ac:86d9:c817:5197) (Quit: Client closed)
15:04:35 <carbolymer> right
15:05:11 <carbolymer> but it would be nice to have some kidn of templating layer over cabal files
15:06:14 <Artem[m]> carbolymer: like `cabal init`?
15:06:35 <geekosaur> cabal's kinda trying to serve two masters here
15:06:54 <geekosaur> on the one hand, developers would like something more flexible
15:07:03 × jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 272 seconds)
15:07:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
15:07:30 <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
15:07:47 <geekosaur> which is why e.g. they don't want to support module wildcards
15:08:37 dextaa_ joins (~dextaa@user/dextaa)
15:08:44 <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...
15:08:50 <merijn> geekosaur: Also, because hpack isn't stable
15:09:10 <merijn> geekosaur: The real problem why Snoyberg stopped recommending hpack is that the cabal files generated change between hpack versions
15:09:18 <merijn> Which made reproducible builds hard
15:09:32 <maerwald> nixify everything and pin all binaries, libraries, ...
15:09:36 <merijn> Unless you just committed the cabal file
15:09:39 <maerwald> oh wait, that causes security havoc
15:10:28 <dminuoso> why does that cause security havoc?
15:10:39 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:10:40 <maerwald> pinning library versions does
15:10:46 <dminuoso> Your nix hyperboles are getting a bit tiring...
15:10:54 <maerwald> this isn't nix specific
15:11:02 <maerwald> freeze files do the same
15:11:18 × awpr quits (uid446117@id-446117.lymington.irccloud.com) (Quit: Connection closed for inactivity)
15:11:22 <dminuoso> Usually you pin the nixpkgs in nix, and regularly update it. That way you get security updates automatically
15:11:25 <maerwald> PVP was designed so that you get security bugfixes
15:11:43 <maerwald> but since it doesn't really work, we're left with excessive dependency pinning
15:11:57 <dminuoso> Right, so building straight with nix is fairly ugly for a variety of reasons
15:12:01 <maerwald> that is never good security practice
15:12:06 <sclv> i mean its the tradeoff. "fully reproducible" means "reproducible bugs and security flaws and all"
15:12:11 <maerwald> yeah
15:12:18 <dminuoso> haskell.nix does solve it more adequately, at the cost of "yet another ball of nix in the middle"
15:12:22 acidjnk joins (~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de)
15:16:30 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
15:16:42 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
15:16:57 × m1dnight quits (~christoph@christophe.dev) (Quit: WeeChat 3.1)
15:16:57 <carbolymer> so... stack and its LTS is the ultimate stable solution for haskell projects?
15:17:57 <Clint> stackage ≠ stack
15:17:57 <maerwald> no, that's stackage (a package set where everything builds with each other and test suites pass)
15:18:04 <maerwald> those can be used with cabal too
15:18:05 m1dnight joins (~christoph@78-22-9-5.access.telenet.be)
15:18:32 <carbolymer> rly? I didn't know that. How can I point cabal to certain stackage version?
15:18:56 <maerwald> https://www.stackage.org/lts-18.26/cabal.config
15:19:02 <maerwald> or use stack2cabal
15:19:17 <maerwald> that cabal.config can (or rather should) be user as cabal.project.freeze
15:19:43 <carbolymer> but either way I should ping GHC version somehow, right?
15:19:46 <maerwald> https://cabal.readthedocs.io/en/3.6/cabal-project.html?highlight=cabal.project
15:19:49 <carbolymer> s/ping/pin
15:20:09 <maerwald> carbolymer: no, GHC is stable within the first two version components
15:20:38 <carbolymer> maerwald: so there's no stability guarantee between 8.x and 9.x
15:20:47 <carbolymer> maerwald: so still I should pin its version somehow
15:21:04 <sclv> you "pin" the ghc version by pinning the version if the "base" library which ships with the ghcs you want to allow
15:21:21 <carbolymer> that should work
15:21:43 <maerwald> see `ghcup list -t ghc` to see the mapping of ghc version to base version`
15:21:45 komikat joins (~komikat@183.82.154.44)
15:21:53 <carbolymer> nice
15:22:18 × zaquest quits (~notzaques@5.130.79.72) (Ping timeout: 250 seconds)
15:23:34 polyphem joins (~rod@2a02:810d:840:8754:2123:9506:671d:c7f0)
15:24:49 × LiaoTao quits (~LiaoTao@gateway/tor-sasl/liaotao) (Write error: Broken pipe)
15:24:49 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
15:24:49 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
15:24:49 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
15:24:49 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Write error: Connection reset by peer)
15:25:03 chexum joins (~quassel@gateway/tor-sasl/chexum)
15:25:07 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
15:25:09 LiaoTao joins (~LiaoTao@gateway/tor-sasl/liaotao)
15:25:16 stiell joins (~stiell@gateway/tor-sasl/stiell)
15:25:27 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
15:26:13 × komikat quits (~komikat@183.82.154.44) (Ping timeout: 256 seconds)
15:30:08 × gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection)
15:30:53 gehmehgeh joins (~user@user/gehmehgeh)
15:32:02 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
15:32:05 × ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec)
15:33:11 komikat joins (~komikat@183.82.154.44)
15:34:25 zaquest joins (~notzaques@5.130.79.72)
15:37:58 × dfg quits (~dfg@user/dfg) (Quit: I hate quit messages.)
15:40:06 alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo)
15:41:36 × acidjnk quits (~acidjnk@p200300d0c7363f90286e28f39b70c9d3.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
15:41:53 × michalz quits (~michalz@185.246.204.61) (Ping timeout: 272 seconds)
15:43:30 michalz joins (~michalz@185.246.204.61)
15:49:52 euandreh joins (~euandreh@2804:14c:33:9fe5:436f:e6b2:c8c4:a5a1)
15:56:11 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:56:11 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:56:11 wroathe joins (~wroathe@user/wroathe)
15:56:46 xkuru joins (~xkuru@user/xkuru)
15:59:53 × peri4n quits (~peri4n@85.232.9.17) (Ping timeout: 256 seconds)
16:00:01 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
16:00:24 × mbuf quits (~Shakthi@122.174.44.9) (Quit: Leaving)
16:01:18 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
16:02:23 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
16:04:00 ub joins (~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de)
16:04:05 komikat joins (~komikat@183.82.154.44)
16:04:24 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:c36d:f85d:bf20:a174) (Quit: WeeChat 2.8)
16:04:37 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
16:04:42 × ubert quits (~Thunderbi@86.107.21.238) (Ping timeout: 256 seconds)
16:04:42 ub is now known as ubert
16:11:50 × adamcstephens quits (161730d29b@2604:bf00:561:2000::2d5) (Remote host closed the connection)
16:11:50 × bsima1 quits (9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection)
16:11:50 × evanrelf quits (3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection)
16:11:50 × sm2n quits (ae95cb1267@user/sm2n) (Remote host closed the connection)
16:11:50 × pranaysashank quits (ef3e56ca8b@2604:bf00:561:2000::3c4) (Remote host closed the connection)
16:11:50 × shreyasminocha quits (51fdc93eda@user/shreyasminocha) (Remote host closed the connection)
16:11:50 × jakzale quits (6291399afa@user/jakzale) (Remote host closed the connection)
16:11:50 × jleightcap quits (7bc4014b62@user/jleightcap) (Remote host closed the connection)
16:11:50 × samhh quits (7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection)
16:11:50 × dawdler quits (035b60b5aa@user/dawdler) (Remote host closed the connection)
16:11:50 × Ankhers quits (e99e97ef8e@2604:bf00:561:2000::2a2) (Remote host closed the connection)
16:11:50 × filwisher quits (2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection)
16:11:50 × jkoshy quits (99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection)
16:11:50 × lukec quits (9dfd4d094e@2604:bf00:561:2000::10e) (Write error: Connection reset by peer)
16:11:51 × raghavgururajan quits (ea769b8000@user/raghavgururajan) (Remote host closed the connection)
16:11:51 × tdmm quits (1c9b9145fc@2604:bf00:561:2000::1c8) (Remote host closed the connection)
16:11:51 × fluffyballoon quits (45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection)
16:11:56 <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
16:11:57 <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
16:12:30 bsima1 joins (9d7e39c8ad@2604:bf00:561:2000::dd)
16:12:30 lukec joins (9dfd4d094e@2604:bf00:561:2000::10e)
16:12:31 dawdler joins (035b60b5aa@2604:bf00:561:2000::3b6)
16:12:31 samhh joins (7569f027cf@2604:bf00:561:2000::e4)
16:12:32 jakzale joins (6291399afa@user/jakzale)
16:12:32 adamcstephens joins (161730d29b@2604:bf00:561:2000::2d5)
16:12:33 filwisher joins (2e6936c793@2604:bf00:561:2000::170)
16:12:38 evanrelf joins (3addc196af@2604:bf00:561:2000::f0)
16:12:38 sm2n joins (ae95cb1267@user/sm2n)
16:12:38 shreyasminocha joins (51fdc93eda@user/shreyasminocha)
16:12:44 × dawdler quits (035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
16:12:44 dawdler joins (035b60b5aa@user/dawdler)
16:12:50 raghavgururajan joins (ea769b8000@user/raghavgururajan)
16:12:50 jkoshy joins (99b9359beb@2604:bf00:561:2000::10f)
16:12:50 jleightcap joins (7bc4014b62@user/jleightcap)
16:12:51 pranaysashank joins (ef3e56ca8b@2604:bf00:561:2000::3c4)
16:12:54 tdmm joins (1c9b9145fc@2604:bf00:561:2000::1c8)
16:12:54 Ankhers joins (e99e97ef8e@2604:bf00:561:2000::2a2)
16:12:54 fluffyballoon joins (45ce440a48@2604:bf00:561:2000::e2)
16:16:31 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
16:22:25 × arievw quits (~arievw@85.148.234.95) (Quit: Nettalk6 - www.ntalk.de)
16:25:01 fendor joins (~fendor@178.115.60.54.wireless.dyn.drei.com)
16:32:05 <komikat> how do I do GSoC with haskell as my org
16:32:23 <komikat> do I have to make contribs beforehand or do I contact a mentor right away
16:33:54 zebrag joins (~chris@user/zebrag)
16:34:47 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 256 seconds)
16:35:29 ec joins (~ec@gateway/tor-sasl/ec)
16:41:25 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
16:41:42 × MasseR4 quits (~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat)
16:42:19 MasseR4 joins (~MasseR@51.15.143.128)
16:43:20 sagax joins (~sagax_nb@user/sagax)
16:43:58 mikoto-chan joins (~mikoto-ch@213.177.151.239)
16:45:09 × MasseR4 quits (~MasseR@51.15.143.128) (Client Quit)
16:46:02 <freeman42x[m]> did my question above make sense? sweating profusely
16:47:34 <freeman42x[m]> are there solutions for reducing duplications in functions like: https://github.com/puffnfresh/fp-course/blob/01dff1f47424fc2e724a969e44a92ee0c5a30f71/projects/TicTacToe/Main.hs#L38-L76 ? would lenses work for that purpose or what?
16:48:29 jakalx parts (~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection)
16:48:30 jakalx joins (~jakalx@base.jakalx.net)
16:49:08 <geekosaur> your question made sense, I just can't answer it
16:49:21 geekosaur avoids type level shenanigans
16:50:18 <merijn> ^^ that :p
16:52:00 × vysn quits (~vysn@user/vysn) (Ping timeout: 250 seconds)
16:54:53 <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)
16:55:40 <geekosaur> but typelevel mitigates the bugs aspect: if it compiles it'sfar more likely to be correct
16:56:20 <merijn> freeman42x[m]: IMO fancy type-y things are like spices "a little can go a long way" :p
16:56:27 <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
16:56:58 <sm> and the turmeric will stain everything
16:57:14 <geekosaur> the original paper ondoing typelevelin haskell was called "hasochism" for a reason :)
16:57:25 <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
16:58:09 <fendor> komikat, Essentially, you write a proposal what you want to work on, how you plan to tackle it, etc...
16:58:11 × shreyasminocha quits (51fdc93eda@user/shreyasminocha) (Remote host closed the connection)
16:58:12 × samhh quits (7569f027cf@2604:bf00:561:2000::e4) (Remote host closed the connection)
16:58:12 × jleightcap quits (7bc4014b62@user/jleightcap) (Remote host closed the connection)
16:58:12 × jakzale quits (6291399afa@user/jakzale) (Remote host closed the connection)
16:58:12 × pranaysashank quits (ef3e56ca8b@2604:bf00:561:2000::3c4) (Remote host closed the connection)
16:58:12 × sm2n quits (ae95cb1267@user/sm2n) (Remote host closed the connection)
16:58:12 × evanrelf quits (3addc196af@2604:bf00:561:2000::f0) (Remote host closed the connection)
16:58:12 × jkoshy quits (99b9359beb@2604:bf00:561:2000::10f) (Remote host closed the connection)
16:58:12 × dawdler quits (035b60b5aa@user/dawdler) (Remote host closed the connection)
16:58:12 × filwisher quits (2e6936c793@2604:bf00:561:2000::170) (Remote host closed the connection)
16:58:12 × bsima1 quits (9d7e39c8ad@2604:bf00:561:2000::dd) (Remote host closed the connection)
16:58:12 × Ankhers quits (e99e97ef8e@2604:bf00:561:2000::2a2) (Remote host closed the connection)
16:58:12 × tdmm quits (1c9b9145fc@2604:bf00:561:2000::1c8) (Remote host closed the connection)
16:58:12 × raghavgururajan quits (ea769b8000@user/raghavgururajan) (Remote host closed the connection)
16:58:12 × adamcstephens quits (161730d29b@2604:bf00:561:2000::2d5) (Remote host closed the connection)
16:58:12 × lukec quits (9dfd4d094e@2604:bf00:561:2000::10e) (Remote host closed the connection)
16:58:17 × fluffyballoon quits (45ce440a48@2604:bf00:561:2000::e2) (Remote host closed the connection)
16:58:20 <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*
16:58:34 <geekosaur> instead of crashing at runtime
16:59:00 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
16:59:03 <geekosaur> sadly, haskell is not well equipped to give you help fixing what you broke
16:59:09 nehsou^ joins (~nehsou@50.233.120.162)
16:59:10 <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
16:59:48 <komikat> fendor: how exactly do i go about finding a mentor
17:00:05 <fendor> komikat, Depends on where you want to contribute
17:00:35 <fendor> People post here ideas sometimes: https://summer.haskell.org/ideas.html
17:00:48 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
17:00:52 <komikat> ah makes sense
17:01:06 <komikat> fendor: suppose I've decided what I want to contribute
17:01:14 <komikat> where do I post in order to get a mentor
17:01:21 <fendor> then big projects have sometimes a meta issue for collecting ideas
17:01:36 <fendor> who would benefit from your idea/project?
17:01:53 <komikat> the community in general?
17:02:07 × dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection)
17:02:09 <komikat> like I think I'm interested in working on the language server
17:02:30 <fendor> great thing! then start by joining #haskell-language-server, and look at the meta issue we have posted
17:02:49 <fendor> (I am looking for it now)
17:03:02 <komikat> ah great, thanks
17:03:09 <geekosaur> https://summer.haskell.org/tips.html suggests they can help you with mentors
17:03:13 <freeman42x[m]> geekosaur: I am not sure that is the case. Look at this code: https://github.com/puffnfresh/fp-course/blob/01dff1f47424fc2e724a969e44a92ee0c5a30f71/projects/TicTacToe/Main.hs#L38-L76 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
17:03:13 <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
17:03:16 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Ping timeout: 250 seconds)
17:03:35 × yrlnry quits (~mjd@pool-74-109-20-19.phlapa.fios.verizon.net) (Ping timeout: 272 seconds)
17:03:43 <fendor> komikat, can you view this page? https://github.com/haskell/haskell-language-server/discussions/2700 (no idea whether that's public already)
17:03:47 Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
17:04:07 <komikat> fendor, I can yeah
17:04:15 lukec joins (9dfd4d094e@2604:bf00:561:2000::10e)
17:04:15 bsima1 joins (9d7e39c8ad@2604:bf00:561:2000::dd)
17:04:15 tdmm joins (1c9b9145fc@2604:bf00:561:2000::1c8)
17:04:15 samhh joins (7569f027cf@2604:bf00:561:2000::e4)
17:04:15 dawdler joins (035b60b5aa@2604:bf00:561:2000::3b6)
17:04:15 filwisher joins (2e6936c793@2604:bf00:561:2000::170)
17:04:24 Ankhers joins (e99e97ef8e@2604:bf00:561:2000::2a2)
17:04:26 sm2n joins (ae95cb1267@user/sm2n)
17:04:28 × dawdler quits (035b60b5aa@2604:bf00:561:2000::3b6) (Changing host)
17:04:29 dawdler joins (035b60b5aa@user/dawdler)
17:04:30 fluffyballoon joins (45ce440a48@2604:bf00:561:2000::e2)
17:04:31 evanrelf joins (3addc196af@2604:bf00:561:2000::f0)
17:04:31 jakzale joins (6291399afa@user/jakzale)
17:04:32 shreyasminocha joins (51fdc93eda@user/shreyasminocha)
17:04:33 jkoshy joins (99b9359beb@2604:bf00:561:2000::10f)
17:04:35 <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
17:04:35 jleightcap joins (7bc4014b62@user/jleightcap)
17:04:36 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
17:04:37 raghavgururajan joins (ea769b8000@user/raghavgururajan)
17:04:39 pranaysashank joins (ef3e56ca8b@2604:bf00:561:2000::3c4)
17:04:40 adamcstephens joins (161730d29b@2604:bf00:561:2000::2d5)
17:05:16 <komikat> hey shreyasminocha, I think I remember you from GCI :P
17:05:37 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
17:05:43 <geekosaur> any language will let you write garbage; the trick is knowing how to use the language to minimize it
17:06:58 × ardell quits (~ardell@user/ardell) (Quit: Konversation terminated!)
17:07:48 <geekosaur> setBoardPosition P1 newA board = board {a = newA}
17:08:13 <geekosaur> easier to read and much safer
17:08:28 × Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
17:08:28 Akiva joins (~Akiva@user/Akiva)
17:13:25 <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
17:15:37 tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
17:16:19 zer0bitz_ joins (~zer0bitz@2001:2003:f74d:b800:8a6:a8d3:62c4:7875)
17:17:25 fresheyeball joins (~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net)
17:17:48 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 240 seconds)
17:18:05 bahamas joins (~lucian@84.232.140.52)
17:20:41 × zer0bitz quits (~zer0bitz@2001:2003:f74d:b800:3027:99e6:c0d6:7e32) (Ping timeout: 256 seconds)
17:21:30 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
17:22:01 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
17:22:25 komikat joins (~komikat@183.82.154.44)
17:24:59 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
17:25:04 <geekosaur> freeman42x[m], the whole point of type level is moving such errors into the types so they happen at compile time
17:25:32 × ubert quits (~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
17:25:41 <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
17:25:52 ubert joins (~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de)
17:26:20 edge joins (~edge@111.92.81.133)
17:26:55 Sgeo joins (~Sgeo@user/sgeo)
17:29:58 × edge quits (~edge@111.92.81.133) (Client Quit)
17:31:18 little_mac joins (~little_ma@2601:410:4300:3ce0:150f:8c19:261d:f4d9)
17:32:56 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
17:35:18 spacenautx joins (~spacenaut@111.92.81.133)
17:35:24 × fresheyeball quits (~fresheyeb@c-76-25-93-164.hsd1.co.comcast.net) (Ping timeout: 240 seconds)
17:37:01 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
17:37:17 lavaman joins (~lavaman@98.38.249.169)
17:37:33 × spacenautx quits (~spacenaut@111.92.81.133) (Changing host)
17:37:33 spacenautx joins (~spacenaut@user/spacenautx)
17:37:45 <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
17:37:45 <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
17:38:09 × spacenautx quits (~spacenaut@user/spacenautx) (Client Quit)
17:38:27 edge joins (~spacenaut@111.92.81.133)
17:38:31 <geekosaur> no, it'snot an easy question, but a lot depends on just knowing how to use your tools
17:39:00 <geekosaur> I'[m not sure there is ever a guaranteed "perfect" way to do it
17:39:25 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
17:40:26 <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
17:40:38 × edge quits (~spacenaut@111.92.81.133) (Client Quit)
17:40:54 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Remote host closed the connection)
17:41:13 edge joins (~spacenaut@111.92.81.133)
17:41:31 × edge quits (~spacenaut@111.92.81.133) (Client Quit)
17:41:31 <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)
17:41:37 alp joins (~alp@user/alp)
17:42:52 <maerwald> don't forget intellectual complexity... which by itself introduces programmer errors
17:42:59 <maerwald> that includes type level programming
17:43:10 <maerwald> if you think you can't write bugs with it, you're wrong :p
17:45:59 econo joins (uid147250@user/econo)
17:47:33 <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
17:48:03 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
17:49:17 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
17:49:32 <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
17:49:36 yauhsien_ joins (~yauhsien@61-231-37-106.dynamic-ip.hinet.net)
17:52:21 <freeman42x[m]> geekosaur: would all "compile time type safety" programming methods fit under "type level programming" or just a part of them?
17:52:52 <maerwald> you could run your test suite via TH at compile time xD
17:53:02 <geekosaur> even basic Haskell gives you compile time type safety, but I wouldn't call it type level programming
17:53:48 × yauhsien_ quits (~yauhsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
17:53:50 <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
17:54:11 <freeman42x[m]> maerwald: can it also launch nukes at compile time? I always wanted to do that!11
17:54:24 <geekosaur> and you can't even begin to produce a String/Text where a number is expected
17:54:39 <maerwald> freeman42x[m]: that's only of concern to the president, really
17:54:45 ub joins (~Thunderbi@p548c8d84.dip0.t-ipconnect.de)
17:54:55 × ubert quits (~Thunderbi@p200300ecdf3be9f1a9bca37dd282c10f.dip0.t-ipconnect.de) (Remote host closed the connection)
17:54:55 ub is now known as ubert
17:54:59 <geekosaur> typelevel programming can't launch nukes. TH can though
17:55:45 <maerwald> without the launch codes?
18:00:41 × coot quits (~coot@213.134.190.95) (Read error: Connection reset by peer)
18:00:53 coot joins (~coot@213.134.190.95)
18:01:14 × alp quits (~alp@user/alp) (Ping timeout: 260 seconds)
18:01:19 sndr joins (~sander@user/sander)
18:01:25 <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
18:02:17 × sander quits (~sander@user/sander) (Ping timeout: 256 seconds)
18:02:17 sndr is now known as sander
18:02:29 <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)
18:02:35 <geekosaur> *singletons
18:03:58 <geekosaur> in particular I don't regard smart "ordinary" (non-defunctionalization) use of types to be type level programming for the most part
18:04:14 <geekosaur> you can look up defunctionalization to see what I'm talking about there
18:05:20 <bahamas> freeman42x[m]: there's a book https://www.goodreads.com/book/show/42736297-thinking-with-types-type-level-programming-in-haskell
18:05:42 <geekosaur> we have strict typing, it's often good enough without getting into the weirder stuff
18:06:10 <Franciman> if you want great type level power, i suggest you totally forget haskell
18:06:14 <Franciman> it is too hairy
18:06:15 <bahamas> freeman42x[m]: also, there's this blog post https://lexi-lambda.github.io/blog/2021/03/25/an-introduction-to-typeclass-metaprogramming/
18:06:21 <Franciman> just switch to idris / agda
18:07:03 <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
18:07:04 <geekosaur> I'm actually inclined to agree. Idris is often a good place to start on typelevel programming if you already know Haskell
18:07:09 <Franciman> so it's like coding in C++ or in Haskell
18:07:16 <Franciman> except that now Haskell is C++, and Idris is Haskell
18:07:25 <Franciman> ok not this much maybe :P
18:08:44 <Franciman> now, people still code in C++ with profit
18:09:49 Null_A joins (~null_a@c-98-210-133-39.hsd1.ca.comcast.net)
18:11:22 <maerwald> people do all sorts of stupid things, true
18:12:21 <Franciman> well, servant for example, seems to me readable
18:12:26 <Franciman> and a form of type level programming
18:12:56 <Franciman> so if you don't need _a lot_ haskell gant you enough power in an understandable way
18:13:12 <Franciman> grants*
18:13:53 × chele quits (~chele@user/chele) (Remote host closed the connection)
18:16:52 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Remote host closed the connection)
18:17:38 <maerwald> yeah, I love servant... I bought 5 new screens to be able to read the GHC errors
18:20:50 <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
18:21:33 <EvanR> "bus factor" ?
18:22:33 <MosheTeutsch[m]> Lens question: I have values of the form: [("label1", value1), ..., ("label-n", valuen)]
18:22:33 <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.
18:23:03 <MosheTeutsch[m]> So I want an output of the form [("label1", something1), ... ]
18:23:06 <Franciman> i agree freeman42x[m]
18:23:12 <maerwald> EvanR: there's a wikipedia article on it even :p
18:23:19 <Franciman> and i understand
18:23:29 <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
18:24:01 <EvanR> it's funny someone just used this term in a totally different context like 1 hour ago
18:24:04 <EvanR> and i never heard it before
18:24:21 <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 :(
18:24:22 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
18:24:34 <EvanR> ah, getting hit by a bus
18:25:40 <bgamari> Thankfully things are much better now than they used to be; mpickering and AndreasK pull quite a bit of weight
18:26:05 <maerwald> geekosaur: haha
18:26:10 <bgamari> but indeed all language projects tend to have pretty small sets of core contributors
18:26:39 <maerwald> bgamari needs a bodyguard... employed by the HF maybe
18:28:00 <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
18:28:04 × Null_A quits (~null_a@c-98-210-133-39.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
18:28:25 <bgamari> mpickering is picking up more of the planning now
18:29:19 <bgamari> but yes, historically that has been true
18:31:15 edge joins (~spacenaut@111.92.81.133)
18:31:45 × Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Remote host closed the connection)
18:32:04 Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
18:32:13 <Rembane> bgamari: Have you ever considered cloning yourself?
18:33:54 × lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
18:34:14 × edge quits (~spacenaut@111.92.81.133) (Client Quit)
18:34:56 spacenautx joins (~spacenaut@111.92.81.133)
18:36:24 × spacenautx quits (~spacenaut@111.92.81.133) (Client Quit)
18:36:29 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
18:36:33 <freeman42x[m]> any way to tell whether someone is connected via Element (except those read receipt indicators)?
18:37:02 komikat joins (~komikat@183.82.154.44)
18:37:44 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 250 seconds)
18:38:57 × Nahra quits (~user@static.161.95.99.88.clients.your-server.de) (Remote host closed the connection)
18:39:18 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
18:40:00 ChaiTRex joins (~ChaiTRex@user/chaitrex)
18:40:30 <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
18:40:46 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
18:40:59 komikat joins (~komikat@183.82.154.44)
18:41:01 <sclv> `cabal list-bin`
18:41:09 hololeap_ is now known as hololeap
18:41:25 × mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection)
18:42:25 doyougnu joins (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com)
18:42:30 mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001)
18:42:48 <hololeap> thank you
18:43:02 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
18:44:37 awpr joins (uid446117@id-446117.lymington.irccloud.com)
18:45:22 <geekosaur> freeman42x[m], in general the folks using Matrix have IPv6 addresses of the form 2604:bf00:561:2000::<something>. but this changes occasionally
18:46:48 benin joins (~benin@59.88.179.150)
18:47:55 <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
18:49:21 CiaoSen joins (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
18:51:36 × komikat quits (~komikat@183.82.154.44) (Quit: Leaving...)
18:53:16 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds)
18:54:25 × phma quits (phma@2001:5b0:211f:f48:ea23:e8cf:9b9f:fa4a) (Read error: Connection reset by peer)
18:55:19 phma joins (~phma@host-67-44-208-227.hnremote.net)
18:55:33 cynomys joins (~cynomys@user/cynomys)
18:55:42 komikat joins (~komikat@183.82.154.44)
18:56:37 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
18:57:34 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
18:59:18 <freeman42x[m]> <geekosaur> "freeman42x, in general the folks..." <- I don't see any IP address available in Element. is that some IRC command?
19:00:22 <geekosaur> my IRC client shows me e.g. [21 17:04:15] * lukec (9dfd4d094e@2604:bf00:561:2000::10e) has joined
19:00:30 <geekosaur> but there is also /WHOIS
19:00:52 <geekosaur> I wouldn't know what the equivalent on the Matrix side of things is
19:01:19 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 250 seconds)
19:01:26 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
19:02:36 × deadmarshal quits (~deadmarsh@95.38.117.184) (Ping timeout: 240 seconds)
19:03:08 <geekosaur> or how you'd access it from Element
19:05:48 <komikat> how exactly do you reply in that format on IRC freeman42x[m]
19:06:10 <komikat> I'm guessing you just used the reply feature on matrix
19:06:32 <geekosaur> that is presumably a reply command in element
19:06:52 <komikat> yeah I meant element* never mind
19:07:03 <freeman42x[m]> yeah, I just used the Element reply and I hope it does not show like some mangled suff on IRC
19:07:05 × bahamas quits (~lucian@84.232.140.52) (Ping timeout: 272 seconds)
19:07:13 <geekosaur> what parts of it come from the client, what from the server, and what from the bridge I couldn't tell you
19:07:29 <geekosaur> there are a lot of moving parts here :)
19:07:35 <komikat> very interesting
19:08:08 benin7 joins (benin@gateway/vpn/protonvpn/benin)
19:08:32 × cynomys quits (~cynomys@user/cynomys) (Quit: leaving)
19:08:50 cynomys joins (~cynomys@user/cynomys)
19:08:54 <geekosaur> hm,that earlier address might be a different bridge
19:09:02 bahamas joins (~lucian@84.232.140.52)
19:09:30 <geekosaur> 2001:470:69fc:105::<stuff> looks more familiar
19:09:37 × benin quits (~benin@59.88.179.150) (Ping timeout: 240 seconds)
19:09:37 benin7 is now known as benin
19:12:13 benin2 joins (~benin@59.88.179.150)
19:13:22 Null_A joins (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909)
19:13:43 Zemyla joins (~Zemyla@2603-8080-4901-6095-a8ef-cc67-cf0b-f093.res6.spectrum.com)
19:13:57 × benin quits (benin@gateway/vpn/protonvpn/benin) (Ping timeout: 240 seconds)
19:13:57 benin2 is now known as benin
19:17:42 × Zemyla quits (~Zemyla@2603-8080-4901-6095-a8ef-cc67-cf0b-f093.res6.spectrum.com) (Client Quit)
19:18:04 Zemyla joins (~ec2-user@ec2-54-196-172-247.compute-1.amazonaws.com)
19:20:18 <Zemyla> > 1 + 1
19:20:20 <lambdabot> 2
19:21:57 <freeman42x[m]> > let 2 + 2 = 5 in 2 + 2
19:21:58 × bahamas quits (~lucian@84.232.140.52) (Quit: leaving)
19:21:59 <lambdabot> 5
19:25:20 × dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
19:31:39 × Null_A quits (~null_a@2601:645:8700:2290:a4fb:481a:7fa9:b909) (Ping timeout: 250 seconds)
19:34:05 yauhsien_ joins (~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net)
19:34:32 Pickchea joins (~private@user/pickchea)
19:36:55 × neurocyte0917090 quits (~neurocyte@user/neurocyte) (Ping timeout: 256 seconds)
19:36:59 × ccntrq quits (~Thunderbi@2a01:e34:eccb:b060:768b:1849:a78b:4ad) (Ping timeout: 252 seconds)
19:37:00 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds)
19:37:29 × yauhsien quits (~Yau-Hsien@61-231-37-106.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
19:41:04 neurocyte0917090 joins (~neurocyte@user/neurocyte)
19:44:27 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:44:56 califax joins (~califax@user/califx)
19:44:59 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
19:45:43 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
19:45:45 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
19:48:22 Lord_of_Life_ is now known as Lord_of_Life
19:49:00 × cynomys quits (~cynomys@user/cynomys) (Quit: leaving)
19:49:15 cynomys joins (~cynomys@user/cynomys)
19:51:29 × MajorBiscuit quits (~MajorBisc@c-001-030-015.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
19:52:22 × cynomys quits (~cynomys@user/cynomys) (Client Quit)
19:53:12 yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net)
19:54:04 cynomys joins (~cynomys@user/cynomys)
19:54:10 × jespada quits (~jespada@148.252.132.52) (Ping timeout: 260 seconds)
19:57:39 × yauhsien quits (~yauhsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 250 seconds)
20:00:52 <hololeap> I'm surprised there hasn't been any effort to get cabal highlighting support working for skylighting
20:03:30 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 260 seconds)
20:05:17 × juhp quits (~juhp@128.106.188.82) (Ping timeout: 240 seconds)
20:05:43 Erutuon joins (~Erutuon@user/erutuon)
20:06:40 juhp joins (~juhp@128.106.188.82)
20:09:59 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
20:16:34 jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net)
20:16:56 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
20:18:53 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
20:19:08 komikat joins (~komikat@183.82.154.44)
20:19:49 <ski> freeman42x[m] : it does show as somewhat mangled
20:20:59 × `2jt quits (~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Remote host closed the connection)
20:21:22 `2jt joins (~jtomas@210.red-88-24-179.staticip.rima-tde.net)
20:22:22 × fendor quits (~fendor@178.115.60.54.wireless.dyn.drei.com) (Remote host closed the connection)
20:23:40 × komikat quits (~komikat@183.82.154.44) (Ping timeout: 256 seconds)
20:25:00 <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?
20:25:30 <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?
20:25:54 <ski> (not sure whether you typed the "<-" part of that, or not)
20:26:10 <geekosaur> no, that'sa normal partof the reply from what I've seen
20:26:13 <maerwald> is there a backend library that supports SSE?
20:26:26 <geekosaur> still don't know if that's the bridge or matrix or element
20:26:31 komikat joins (~komikat@183.82.154.44)
20:27:41 <ski> freeman42x[m] : the quotes around the message (but not around the nickname who uttered it) does look slightly confusing, to me
20:28:42 <geekosaur> maerwald, do you want -msse ?
20:28:48 <maerwald> server-sent events
20:28:49 cjb joins (~cjb@user/cjb)
20:29:32 <monochrom> Oh, web backend and web SSE?
20:30:14 <maerwald> wai-extra seems to have something: https://hackage.haskell.org/package/wai-extra-3.1.8/docs/Network-Wai-EventSource.html
20:30:29 <geekosaur> oh,this is like those freaks who think API is something javascript web slingers invented
20:30:30 <maerwald> now the question is if this works with servant
20:32:56 <maerwald> don't ask me why
20:33:04 <maerwald> not my idea, thanks
20:34:05 × komikat quits (~komikat@183.82.154.44) (Remote host closed the connection)
20:34:15 <freeman42x[m]> geekosaur: 2015 isomorphic javascript frameworks callback :))
20:38:57 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
20:39:21 komikat joins (~komikat@183.82.154.44)
20:40:14 × xff0x quits (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8) (Ping timeout: 252 seconds)
20:43:37 × komikat quits (~komikat@183.82.154.44) (Ping timeout: 240 seconds)
20:48:25 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
20:50:25 acidjnk joins (~acidjnk@p200300d0c7363f76650908051e62c7e6.dip0.t-ipconnect.de)
20:50:56 xff0x joins (~xff0x@2001:1a81:5339:f000:1ec4:ce6f:8558:a9e8)
20:52:03 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
20:52:17 × benin quits (~benin@59.88.179.150) (Ping timeout: 240 seconds)
20:53:29 dextaa_ joins (~dextaa@user/dextaa)
20:53:54 × zer0bitz_ quits (~zer0bitz@2001:2003:f74d:b800:8a6:a8d3:62c4:7875) (Ping timeout: 260 seconds)
20:54:57 benin joins (~benin@59.88.179.150)
20:58:57 × briandaed quits (~root@109.95.142.93.r.toneticgroup.pl) (Quit: leaving)
21:00:41 notzmv joins (~zmv@user/notzmv)
21:04:28 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
21:08:51 × DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:09:55 <dvdrw> I've given my imperdicative polymorphic `map` some more thought
21:09:57 <dvdrw> :t map
21:09:59 <lambdabot> (a -> b) -> [a] -> [b]
21:10:19 <dvdrw> In my case, [a] ~ [forall a. F a]
21:10:49 <dvdrw> The idea was to preserve the (a -> b) mapping individually for each element, somehow
21:11:10 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
21:11:11 DNH joins (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
21:11:33 <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)
21:12:02 <dvdrw> As that inner `a` is scoped, there's no hope in bridging the (->) gap.
21:12:40 <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?
21:13:51 pavonia joins (~user@user/siracusa)
21:14:08 <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)
21:14:39 jespada joins (~jespada@148.252.132.52)
21:14:44 <geekosaur> which has its limitations, for example there's no difference between [forall a. Show a => a] and [String]
21:15:16 deadmarshal joins (~deadmarsh@95.38.117.184)
21:15:17 <ski> s/forall a. Show a =>/exists a. Show a *>/
21:15:54 <dvdrw> I figured as much; it looks like it's a trade off between 'expressive' types and 'smooth interfaces' that hide the particularities
21:16:15 <dvdrw> i.e. you'd have trouble keeping GADT type refinement and sanding it down to the same constraint(s)
21:16:15 <ski> dvdrw : are you really sure you want `[forall a. F a]', rather than `[exists a. F a]' ?
21:16:52 <dvdrw> ski: I'm not sure of the difference in this case
21:17:17 <ski> it depends on what `F' is, of course
21:17:46 <ski> but the only value of type `[forall a. Show a => a]' (e.g.), (ignoring bottoms) is `[]', the empty list
21:18:53 <ski> (hint, there is no value which has type `a', for *all* types `a' which are instances of `Show' .. apart from bottom)
21:19:06 <geekosaur> right, sorry, thinkoed that
21:19:21 <geekosaur> otoh that's one reason why haskell makes it hard to make such messes to begin with :)
21:19:34 <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')
21:19:37 × deadmarshal quits (~deadmarsh@95.38.117.184) (Ping timeout: 240 seconds)
21:20:04 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
21:20:04 yauhsienhuangtw joins (~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net)
21:20:06 <ski> dvdrw : perhaps you should pick some concrete example `F' that we could talk about ?
21:21:06 <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?
21:21:50 <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'
21:22:01 <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.
21:22:23 <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')
21:22:57 <ski> ah .. "heterogeneous lists" suggests that you are looking for existentials :)
21:23:10 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
21:23:10 × yauhsien_ quits (~Yau-Hsien@61-231-19-150.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
21:23:10 <dvdrw> That is indeed where I started :)
21:23:16 <ski> (which ?)
21:23:27 <dvdrw> With existentials
21:23:49 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
21:24:03 <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)
21:24:31 <dvdrw> Maybe it'd be best if I gave a motivating example and how I got into this mess
21:24:43 <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
21:26:37 <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 `()'
21:26:37 <ski> (oh, and `G', of course)
21:27:38 <dvdrw> One of the steps could be to map `F a' to a monad `G a' whose unwrapping would evalute to that `a'
21:28:00 <ski> unwrapping ?
21:28:15 ski mostly didn't understand that sentence
21:28:17 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
21:28:57 <dvdrw> Well, if it were a monad like ST or State, applying the relevant `runState'
21:29:21 <dvdrw> It limits the choice of monad to those that do have an arrow like that, though
21:29:21 × DNH quits (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be) (Quit: My MacBook has gone to sleep. ZZZzzz…)
21:30:19 <dvdrw> Ultimately, the goal is to have an expression akin to `run $ foldl1 (>>) (map ftog xs)'
21:31:11 <dvdrw> The list, `xs', would be heterogenous because the type parameter to `F' varies
21:31:23 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
21:32:59 <ski> hm, so are you saying `F' and `G' in your case are monads ?
21:33:10 <dvdrw> `G' is, at least
21:33:51 <ski> i'm not sure to which extent `exists a. G a' would be preferable over `G ()'
21:34:00 <awpr> that whole expression looks like it's trying to achieve `traverse10` of `newtype ExList f = ExList [Some f]`
21:34:01 <awpr> https://hackage.haskell.org/package/ten-0.1.0.2/docs/Data-Ten-Foldable.html#v:traverse10_
21:34:45 <awpr> or equivalently https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:ftraverse_
21:35:02 <dvdrw> awpr: that looks to be very promising, actually
21:35:22 <Zemyla> Maybe you should turn the forall a. F a into F ().
21:35:41 <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)
21:35:46 <ski> there is no `forall a.' there, aiui
21:36:10 <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
21:36:37 <awpr> hmm, preserving the existentials seems incompatible with trying to fold them with `>>`
21:36:43 <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
21:37:30 × burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Remote host closed the connection)
21:37:44 <ski> dvdrw : hm, anyway the `(>>)' suggests you're not interested in the monadic result types, right ?
21:37:54 <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'
21:37:54 <ski> in which case, why not `G ()' ?
21:38:05 <dvdrw> ...which is still more hand waving
21:38:12 <ski> (and if `F' is also a functor, why not `F ()', too ?)
21:38:36 <awpr> that's what an `fmap10`/`ftraverse10` style thing would do: leave the parameters untouched and map only the `f` part
21:39:05 <ski> dvdrw : ok. but do you actually care about that `a' ? `(>>)' is going to discard most of the results, anyway
21:39:37 <dvdrw> ski: Ideally there'd be a constraint set on `a' to where you could do something with it in the end
21:39:52 <ski> okay
21:40:10 <ski> but you're still only keeping the last result, right ?
21:40:16 <dvdrw> ski: correct
21:41:02 <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
21:41:40 <dvdrw> awpr: `Foldable10' is a much nicer way of talking about (what I think) I want :)
21:42:02 <dvdrw> It sounds like it approaches the same problem, just from the other end
21:42:28 <Zemyla> Sounds like the skolem escaping is inevitable.
21:42:52 <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
21:42:54 Akiva joins (~Akiva@user/Akiva)
21:43:14 <awpr> but you can always write the same thing without a library / without dispatching things through a typeclass
21:43:52 <dvdrw> awpr: In any case, I'll check it out to get a better apparatus for conceiving of these things -- thanks!
21:47:27 spacenautx joins (~spacenaut@user/spacenautx)
21:47:47 machinedgod joins (~machinedg@24.105.81.50)
21:48:02 <ski> .. i don't really know why people keep saying `forall a. ..a..', when they mean `exists a. ..a..'
21:49:17 <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 ..)
21:49:35 <awpr> /me was just looking up the syntax used for that
21:49:41 awpr was just looking up the syntax used for that
21:50:14 <awpr> (part of the reason is probably that there is no real syntax for existentials or positive-position constraints)
21:50:15 <ski> (of course, `Cxt *> T' is yet another thing. but this mostly occurs with the `forall' vs. `exists' thing, anyway)
21:50:30 <awpr> https://github.com/goldfirere/ghc-proposals/blob/existentials/proposals/0000-existentials.rst uses `/\` for it
21:50:46 <ski> well .. i guess that's one reason why i keep using this pseudo-Haskell syntax to talk about it
21:51:10 <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...
21:51:53 <ski> hm, how does it open up that (anymore than say parameterized types does) ?
21:52:06 <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
21:52:08 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection)
21:52:17 <awpr> `data X = forall a. X a` being the syntax for `-XExistentialQuantification` probably doesn't help the confusion
21:52:34 <ski> yea, it doesn't help that `ExistentialQuantification' is a misnomer
21:53:08 <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)
21:53:58 <dvdrw> ski: I think it's easier to imagine parametrised types to something immediately and intuitively knowable
21:54:37 <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
21:55:13 × jassob quits (~jassob@h-155-4-71-72.A785.priv.bahnhof.se) (Quit: WeeChat 2.8)
21:55:25 <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 `(* -> *) -> *')
21:56:18 <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
21:56:29 <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
21:57:29 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:57:39 <ski> (i also dislike the term "higher-kinded type". we don't say "higher-typed values" ..)
21:57:44 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
21:58:00 <dvdrw> ski: but we do say "higher-order functions" :)
21:58:22 <ski> yes, and, at least i, say "higher-order type (function)"
21:58:43 <ski> `MaybeT' is a higher-order type (function)
21:58:47 <ski> @kind MaybeT
21:58:48 <lambdabot> error:
21:58:48 <lambdabot> Not in scope: type constructor or class ‘MaybeT’
21:58:48 <lambdabot> Perhaps you meant ‘Maybe’ (imported from Data.Maybe)
21:58:56 hays joins (rootvegeta@fsf/member/hays)
21:59:16 <ski> @let import Control.Monad.Trans.Maybe
21:59:17 <lambdabot> Defined.
21:59:18 <ski> @kind MaybeT
21:59:20 <lambdabot> (* -> *) -> * -> *
21:59:37 <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'
22:00:04 <ski> i just don't see why one should make the terminology any more unclear than necessary
22:00:43 <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 ?
22:00:44 sonny joins (~sonny@bras-base-london1483w-grc-30-74-12-157-79.dsl.bell.ca)
22:01:33 DNH joins (~DNH@2a02:8108:1100:16d8:25f4:e878:3056:b5be)
22:01:37 <dvdrw> That, I think is to blame at the lack of omniscience of individual authors shaping the literature/applied practice :P
22:02:09 <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
22:02:13 <dvdrw> Jokes aside, calculus, being pretty fundamental to mathemathics, suffers from a very dodgy notation which gets abused by all those who use it
22:02:27 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 250 seconds)
22:02:34 <ski> so, that suggests that `Queue a' should be `exists q. (q,a -> q -> q,q -> Maybe (q,a))'
22:03:08 <ski> er, s/Queue/QueueOps/
22:03:27 <ski> now, imagine that `QueueOps a' will be a `data' type, with a data constructor, say `MkQueueOps'. we want it to have the signature
22:03:43 <ski> MkQueueOps :: (exists q. (q,a -> q -> q,q -> Maybe (q,a))) -> QueueOps a
22:03:50 <ski> (or, if we're being more explicit
22:03:59 <ski> MkQueueOps :: forall a. (exists q. (q,a -> q -> q,q -> Maybe (q,a))) -> QueueOps a
22:04:02 <ski> )
22:04:09 × Giovanni quits (~Giovanni@176.67.166.45) (Read error: Connection reset by peer)
22:04:13 slowtype- joins (~slowtyper@2a02:214c:840d:cd00:225:64ff:feb7:4668)
22:05:08 <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)
22:05:13 <dvdrw> Right, for any `a', and a given `q' type such that the following 'type expression' exists -- more hand waving
22:05:14 × slowtyper quits (~slowtyper@user/slowtyper) (Read error: Connection reset by peer)
22:05:16 <ski> so, refactoring with this, we get
22:05:17 zincy_ joins (~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
22:05:28 Giovanni joins (~Giovanni@176.67.166.45)
22:05:34 <ski> MkQueueOps :: forall a q. (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
22:05:43 <ski> or, eliding the `forall'
22:05:45 <Zemyla> @let class Nub c where nubWith :: (Eq a, c a) => Proxy c -> [a] -> [a]
22:05:47 <lambdabot> Defined.
22:05:47 <ski> MkQueueOps :: (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
22:05:57 <ski> this suggests, using `GADTs'
22:06:03 <ski> data QueueOps a
22:06:05 <ski> where
22:06:07 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
22:06:09 <ski> MkQueueOps :: (q,a -> q -> q,q -> Maybe (q,a)) -> QueueOps a
22:06:23 lavaman joins (~lavaman@98.38.249.169)
22:06:23 <ski> or, if you want to uncurry the data constructor
22:06:35 <ski> MkQueueOps :: q -> (a -> q -> q) -> (q -> Maybe (q,a)) -> QueueOps a
22:06:47 <ski> or, using the `ExistentialQuantification' syntax
22:06:54 × coot quits (~coot@213.134.190.95) (Quit: coot)
22:07:13 <ski> data QueueOps a = forall q. MkQueueOps q (a -> q -> q) (q -> Maybe (q,a))
22:08:08 <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'
22:08:45 <dvdrw> Yes.
22:08:46 <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
22:09:12 <awpr> the formal version of this is the linear logic rule that existential quantification cuts against universal quantification
22:09:21 <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)
22:10:33 × zincy_ quits (~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
22:10:38 <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)
22:11:11 zincy_ joins (~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b)
22:11:12 <dvdrw> `QueueOps' seems more natural when dealing with the reality of dragging along state yourself
22:11:44 <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")
22:11:57 × doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 240 seconds)
22:12:24 <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 ..
22:12:54 <ski> (i wish someone could have told me that partial vs. total derivatives was about lexical vs. dynamic scope)
22:13:45 burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk)
22:14:26 <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
22:14:46 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
22:16:19 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
22:17:04 <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
22:17:33 <dvdrw> I'm having trouble imagining `[exists a. a]' .. it'd be just `forall a. [a]' in this case, right?
22:18:18 <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)
22:19:53 <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")
22:20:08 <awpr> yeah, duals is good too. in linear logic that shows up as the two being each other's linear negations
22:20:15 eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535)
22:20:18 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
22:20:19 <ski> yes
22:20:21 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
22:20:52 × burnsidesLlama quits (~burnsides@dhcp168-023.wadham.ox.ac.uk) (Ping timeout: 272 seconds)
22:21:43 <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)?
22:22:07 <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
22:22:37 <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' !
22:22:41 × dy quits (~dy@user/dy) (Remote host closed the connection)
22:23:05 <awpr> yeah, that's a fair point, they both show up as free and skolem in introducing/eliminating them, just in the opposite order
22:23:17 <byorgey> awpr: yes, although the concept of Skolem variables came from mathematics
22:23:30 <ski> `exists a. ..a..' is neutral. how you experience it depends on whether you're introducing/producing it, or eliminating/consuming it
22:24:10 <ski> (well, Skolem was a logician)
22:24:58 <awpr> in any case I think "the thing you have when introducing a forall or eliminating an existential" is a fair description
22:25:07 <ski> (btw, the more common term would be "skolem constant" (and "skolem function", when it's parameterized on meta-variables), not "skolem variable")
22:25:24 <ski> yes
22:25:44 <awpr> I just phrased it poorly at first with "provided" and "brought into scope"
22:25:59 IWantToLikeHaske joins (~IWantToLi@95.76.226.57)
22:26:33 kilolympus joins (~kilolympu@vpn-fn-229.net.ed.ac.uk)
22:28:14 × IWantToLikeHaske quits (~IWantToLi@95.76.226.57) (Client Quit)
22:28:52 <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)
22:29:10 HaskellSux joins (~HaskellSu@95.76.226.57)
22:29:29 ChanServ sets mode +o geekosaur
22:29:48 ski glances around nervously
22:30:10 × HaskellSux quits (~HaskellSu@95.76.226.57) (Client Quit)
22:30:29 geekosaur sets mode -o geekosaur
22:31:35 <dvdrw> That makes sense to me :P
22:32:32 × jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Remote host closed the connection)
22:32:36 ski . o O ( <https://en.wikipedia.org/wiki/Skolem_normal_form> )
22:32:51 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 245 seconds)
22:33:06 Eyyyy joins (~Eyyyy@95.76.226.57)
22:34:05 <ski> (i recall i called "axiom of choice", "skolem", before i learned it had the previous name)
22:34:50 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:04 lavaman joins (~lavaman@98.38.249.169)
22:35:12 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:15 ski . o O ( "Intensional vs. Extensional Choice" by roconnor in 2005-06-04 at <https://r6.ca/blog/20050604T143800Z.html> )
22:35:26 lavaman joins (~lavaman@98.38.249.169)
22:35:34 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:47 lavaman joins (~lavaman@98.38.249.169)
22:35:55 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:35:57 ChanServ sets mode +o litharge
22:35:58 litharge sets mode +b lavaman!~lavaman@98.38.249.169$##fix-your-connection
22:36:08 litharge sets mode -o litharge
22:37:12 × dvdrw quits (~dvdrw@user/dvdrw) (Quit: leaving)
22:38:17 dvdrw joins (~dvdrw@user/dvdrw)
22:39:45 Eyyyy parts (~Eyyyy@95.76.226.57) ()
22:40:04 burnsidesLlama joins (~burnsides@dhcp168-023.wadham.ox.ac.uk)
22:43:40 × dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3)
22:43:56 × little_mac quits (~little_ma@2601:410:4300:3ce0:150f:8c19:261d:f4d9) (Remote host closed the connection)
22:49:52 × jespada quits (~jespada@148.252.132.52) (Read error: Connection reset by peer)
22:50:58 ChanServ sets mode +o litharge
22:50:58 litharge sets mode -bo lavaman!~lavaman@98.38.249.169$##fix-your-connection litharge
22:51:00 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
22:51:10 lavaman joins (~lavaman@98.38.249.169)
22:51:17 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:51:32 lavaman joins (~lavaman@98.38.249.169)
22:51:39 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:51:54 lavaman joins (~lavaman@98.38.249.169)
22:52:02 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:52:16 lavaman joins (~lavaman@98.38.249.169)
22:52:23 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:52:38 lavaman joins (~lavaman@98.38.249.169)
22:52:45 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:52:58 lavaman joins (~lavaman@98.38.249.169)
22:53:06 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:53:21 lavaman joins (~lavaman@98.38.249.169)
22:53:27 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:53:42 lavaman joins (~lavaman@98.38.249.169)
22:53:49 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:53:55 × zincy_ quits (~zincy@2a00:23c8:970c:4801:39f9:90f7:922:e73b) (Remote host closed the connection)
22:54:03 lavaman joins (~lavaman@98.38.249.169)
22:54:10 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:54:25 lavaman joins (~lavaman@98.38.249.169)
22:54:32 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:54:46 lavaman joins (~lavaman@98.38.249.169)
22:54:53 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:55:08 lavaman joins (~lavaman@98.38.249.169)
22:55:15 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:55:29 lavaman joins (~lavaman@98.38.249.169)
22:55:36 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:55:51 lavaman joins (~lavaman@98.38.249.169)
22:55:58 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:56:12 lavaman joins (~lavaman@98.38.249.169)
22:56:20 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:56:30 <FernandoChu[m]> Is there any negative effects of `FlexibleContexts`? If not, why is it not "on" by default? It seems very natural to me
22:56:35 lavaman joins (~lavaman@98.38.249.169)
22:56:43 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:56:43 × max22- quits (~maxime@2a01cb0883359800280d6109c37c5449.ipv6.abo.wanadoo.fr) (Quit: Leaving)
22:56:56 lavaman joins (~lavaman@98.38.249.169)
22:57:04 × lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection)
22:57:10 yauhsien joins (~yauhsien@61-231-19-150.dynamic-ip.hinet.net)
22:58:06 ChanServ sets mode +o litharge
22:58:06 litharge sets mode +b *!*@98.38.249.169
22:58:17 litharge sets mode -o litharge
22:58:42 <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
22:59:00 × `2jt quits (~jtomas@210.red-88-24-179.staticip.rima-tde.net) (Remote host closed the connection)
22:59:15 <geekosaur> (note that this is changing as of ghc 9.2 where the GHC2021 suite of extensions is on by default)
22:59:25 romesrf joins (~romes@44.190.189.46.rev.vodafone.pt)
23:00:02 <dvdrw> is GHC2021 the delayed Haskell2020?
23:00:36 <dvdrw> or was a new report never in the works, but a set of extensions (to Haskell98?) first, and then whatever comes of it
23:00:50 <geekosaur> sort of. the standards process is stuck anmd has been for years, so ghc is kinda taking over and proposing its own.
23:01:37 jespada joins (~jespada@148.252.132.52)
23:01:48 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
23:02:05 <dvdrw> oic
23:03:07 <geekosaur> and part of why the standards process is stuck is nobody wants to formally document things like the exact behavior of type families
23:03:39 <geekosaur> r going on between the type families camp and the functional dependencies camp
23:03:57 <geekosaur> which means MultiParamTypeClasses can't be standardized because it needs one or the other
23:04:16 <dvdrw> I can imagine, I think I heard someone from the committee once say Haskell2010 was a nightmare to formalise
23:04:41 <dvdrw> C++ can probably afford it with the manpower they can acquire
23:04:55 <dolio> I think I once saw someone say that FlexibleContexts were bad, but I don't recall the reason being very compelling.
23:05:16 <Zemyla> Even C++ couldn't get concepts in.
23:06:26 <dvdrw> Zemyla: C++ has been trying to get concepts ever since templates and C++11
23:07:06 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
23:08:04 × jespada quits (~jespada@148.252.132.52) (Read error: Connection reset by peer)
23:08:36 × Ariakenom_ quits (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Quit: Leaving)
23:09:45 alx741 joins (~alx741@157.100.197.240)
23:09:49 jgeerds joins (~jgeerds@55d4b9df.access.ecotel.net)
23:11:29 <geekosaur> hm, whoops, that line earlier got mangled
23:11:30 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:11:41 <geekosaur> "andthen there's the tug of war…"
23:13:50 <janus> dvdrw: don't they have concepts in C++20? or do they not qualify because features have been cut?
23:14:53 <dvdrw> janus: They've implemented concepts in C++20, but it's a smaller featureset than the people pushing it wanted. It's basically syntactic sugar (and slightly better errors) for what was possible with C++17 templates
23:15:14 <dvdrw> I couldn't list the limitations off the top of my head, but they're a bit lackluster
23:15:38 <dvdrw> Also, last time I checked, GCC didn't check concept constraints on template variables lol
23:17:01 Null_A joins (~null_a@2601:645:8700:2290:44bc:7304:7645:6729)
23:18:10 × zeenk quits (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!)
23:20:03 merijn joins (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl)
23:20:42 × bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 250 seconds)
23:21:17 × CiaoSen quits (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:27:49 alx741 joins (~alx741@157.100.197.240)
23:28:06 ChanServ sets mode +o litharge
23:28:07 litharge sets mode -bo *!*@98.38.249.169 litharge
23:29:05 <zzz> what happened to data Scientific?
23:29:25 <dsal> What do you mean?
23:30:18 <zzz> nevermind, I misunderstood something I just read
23:30:35 <dsal> Science can be confusing.
23:30:44 × jgeerds quits (~jgeerds@55d4b9df.access.ecotel.net) (Ping timeout: 252 seconds)
23:33:53 × cosimone quits (~user@93-34-132-33.ip49.fastwebnet.it) (Ping timeout: 250 seconds)
23:34:43 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:34:54 × acidjnk quits (~acidjnk@p200300d0c7363f76650908051e62c7e6.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
23:34:57 × Null_A quits (~null_a@2601:645:8700:2290:44bc:7304:7645:6729) (Ping timeout: 240 seconds)
23:35:18 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:35:18 alx741 joins (~alx741@157.100.197.240)
23:38:47 × alx741 quits (~alx741@157.100.197.240) (Read error: Connection reset by peer)
23:44:31 × spacenautx quits (~spacenaut@user/spacenautx) (Quit: WeeChat 3.4)
23:45:17 × eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:106a:7188:c314:3535) (Remote host closed the connection)
23:45:17 spacenautx joins (~spacenaut@user/spacenautx)
23:50:01 × spacenautx quits (~spacenaut@user/spacenautx) (Client Quit)
23:50:57 <zzz> "It does not matter how slowly you go so long as you do not stop."
23:52:58 spacenautx joins (~spacenaut@user/spacenautx)
23:53:59 × merijn quits (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
23:56:56 alx741 joins (~alx741@181.199.42.143)

All times are in UTC on 2022-02-21.