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