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.