2022-04-21 00:00:01 +0200 | abiss27 | (~abiss27@user/abiss) |
2022-04-21 00:02:01 +0200 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2022-04-21 00:02:06 +0200 | werneta | (~werneta@137.79.218.82) (Ping timeout: 276 seconds) |
2022-04-21 00:08:30 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::46a8) |
2022-04-21 00:09:37 +0200 | <abastro[m]> | Actual range datatype would be great |
2022-04-21 00:09:50 +0200 | xff0x_ | (~xff0x@om126194210237.10.openmobile.ne.jp) |
2022-04-21 00:10:17 +0200 | <abastro[m]> | Which can act as foldable |
2022-04-21 00:14:08 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds) |
2022-04-21 00:15:39 +0200 | [Leary] | (~Leary]@122-58-90-96-vdsl.sparkbb.co.nz) (Ping timeout: 240 seconds) |
2022-04-21 00:19:39 +0200 | ubert | (~Thunderbi@p200300ecdf1588a8ad1d2aec8363db05.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2022-04-21 00:19:57 +0200 | ubert | (~Thunderbi@p548c8d44.dip0.t-ipconnect.de) |
2022-04-21 00:23:42 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2022-04-21 00:24:45 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 00:25:15 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-04-21 00:27:04 +0200 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2022-04-21 00:28:47 +0200 | acidjnk | (~acidjnk@p200300d0c722df425cfbfca65ef55eb7.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2022-04-21 00:31:28 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 00:35:26 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590:768c:7129:aa80:96d9) |
2022-04-21 00:36:40 +0200 | zyklotomic | (~ethan@r4-128-61-92-91.res.gatech.edu) (Ping timeout: 250 seconds) |
2022-04-21 00:38:37 +0200 | zyklotomic | (~ethan@res380d-128-61-86-145.res.gatech.edu) |
2022-04-21 00:39:38 +0200 | <Guest27> | If I have a do-block of the form |
2022-04-21 00:39:39 +0200 | <Guest27> | ``` |
2022-04-21 00:39:39 +0200 | <Guest27> | a <- ma |
2022-04-21 00:39:40 +0200 | <Guest27> | b <- f a |
2022-04-21 00:39:41 +0200 | <Guest27> | someBigOperation b |
2022-04-21 00:39:41 +0200 | <Guest27> | ``` |
2022-04-21 00:39:41 +0200 | <Guest27> | Is this a memory leak? Is a reference to `a` being held when it isn't needed anymore? |
2022-04-21 00:41:45 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 00:42:45 +0200 | <geekosaur> | the compiler should see it isn't needed any more |
2022-04-21 00:44:17 +0200 | <geekosaur> | I wouldn't be surprised to see there be no reference, in fact: that could easily compile down to |
2022-04-21 00:44:34 +0200 | <geekosaur> | @. pl undo do { a <- ma; b <- f a; someBigOperation b } |
2022-04-21 00:44:35 +0200 | <lambdabot> | someBigOperation =<< f =<< ma |
2022-04-21 00:44:38 +0200 | renzhi | (~xp@2607:fa49:6500:b100::229c) |
2022-04-21 00:46:22 +0200 | <Guest27> | geekosaur Thanks. If no optimizations were applied would that still be true? I'm unsure how to reason about reference lifetimes in Haskell in general |
2022-04-21 00:46:52 +0200 | <geekosaur> | it should still be true, I think |
2022-04-21 00:47:11 +0200 | <geekosaur> | things are held in scope by actual references, not just bindings |
2022-04-21 00:47:32 +0200 | <geekosaur> | like avg xs = sum xs / length xs holds xs because it's used twice |
2022-04-21 00:47:47 +0200 | <geekosaur> | but just having xs be there unused would not count as a reference |
2022-04-21 00:48:00 +0200 | <geekosaur> | it's not a "variable" that has space allocated for it or etc. |
2022-04-21 00:48:26 +0200 | <Guest27> | Thanks, that's a great explanation |
2022-04-21 00:48:34 +0200 | <geekosaur> | (well, with the right coercions so that typechecks) |
2022-04-21 00:52:52 +0200 | Guest91 | (~Guest91@caliga.eecs.tufts.edu) |
2022-04-21 00:54:16 +0200 | joo-_ | (~joo-_@fsf/member/joo--) (Ping timeout: 248 seconds) |
2022-04-21 00:54:52 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 260 seconds) |
2022-04-21 00:54:59 +0200 | <Guest91> | I am a systems administrator. I wish to install the latest set of Haskell tools -- a custom list -- centrally on my servers. I have so far found no way to do this; everything wants to install in my home directory. I specifically do not want anything installed in ~/.ghc or ~/.cabal, as my goal at the end of this is 'rm -rf ~/.ghc ~/.cabal' and |
2022-04-21 00:55:00 +0200 | <Guest91> | have everything I install still present -- libraries, dependencies, documentation -- in a central directory somewhere else. Is there documentation anywhere on how to do this? |
2022-04-21 00:55:44 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 00:55:54 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-04-21 00:56:11 +0200 | joo-_ | (~joo-_@80-62-117-45-mobile.dk.customer.tdc.net) |
2022-04-21 00:56:11 +0200 | joo-_ | (~joo-_@80-62-117-45-mobile.dk.customer.tdc.net) (Changing host) |
2022-04-21 00:56:11 +0200 | joo-_ | (~joo-_@fsf/member/joo--) |
2022-04-21 00:56:18 +0200 | <geekosaur> | maerwald? ^^ |
2022-04-21 00:57:13 +0200 | <geekosaur> | ghcup has some options that can make it work globally, and cabal install has a strongly disrecommended --global flag. the problem with --global is it pretty much locks you into the exact versions of libraries you have installed globally |
2022-04-21 00:58:15 +0200 | <Guest91> | This is for a class being taught; lock-in is desirable, as it makes consistent grading much easier. |
2022-04-21 00:58:19 +0200 | <sclv> | you can install ghc itself globally, and cabal the executable globally |
2022-04-21 00:58:55 +0200 | <sclv> | you can then cabal v1-install —global individual libs. However i really urge you not to |
2022-04-21 00:59:20 +0200 | <Guest91> | I've tried the --global flag in various flavors. It keeps thinking it has everything installed in my home directory and only installs the new thing in the place I've specified with --prefix --installdir and --libdir. It's also so far barfed on trying to install ghc there. |
2022-04-21 00:59:26 +0200 | <sclv> | Just install the tools globally and let cabal and ghc manage per user lib envs — thats how things are designed to worj |
2022-04-21 00:59:28 +0200 | <sclv> | Work |
2022-04-21 01:00:11 +0200 | <Guest91> | Per-user library environments are exactly the problem I'm trying to avoid. Makes grading difficult when the instructor has no ready way to see what version the student has grabbed. Everyone should be using the central libraries, nothing else. |
2022-04-21 01:00:39 +0200 | <sclv> | you can say they must specify their deps in a cabal file |
2022-04-21 01:01:22 +0200 | <sclv> | to install ghc globally dont use ghcup, use the installer directly from ghchq |
2022-04-21 01:01:34 +0200 | <sclv> | or just use a distro package manager |
2022-04-21 01:01:46 +0200 | <Guest91> | Distro version is too old, so installer it is. |
2022-04-21 01:01:55 +0200 | Batzy | (~quassel@user/batzy) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2022-04-21 01:02:03 +0200 | <sm> | you could force them to use stack with a specific resolver and no extra-deps |
2022-04-21 01:02:04 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590:768c:7129:aa80:96d9) (Quit: Client closed) |
2022-04-21 01:02:14 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 01:02:52 +0200 | <Guest91> | Instructor has specifically told me to use cabal, not stack. Last I tried building stack, it would not play at all with cabal, but that was probably 3-4 years ago. Have things improved since then, that I can install both? |
2022-04-21 01:02:58 +0200 | <sclv> | or just give a skeleton project with a cabal file with pinned deps and tell them they can’t alter those deps |
2022-04-21 01:03:41 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:03:47 +0200 | <exarkun> | Guest91: stack uses cabal, so depending on what you mean, they play quite well together. |
2022-04-21 01:04:01 +0200 | <sm> | you could also set up your own hackage server I guess and force them to use that. (Sounds like a lot of effort) |
2022-04-21 01:04:23 +0200 | Batzy | (~quassel@user/batzy) |
2022-04-21 01:04:40 +0200 | <Guest91> | 'cabal install --global [umpty flags] stack' blew up in multiple ways I could not fix at the time. Haven't tried this round, as the whole --global thing I left myself notes on from last time is no longer working. |
2022-04-21 01:04:54 +0200 | <geekosaur> | both of them use the same mechanism to whack ghc over the head and make it use the right librariesneither stack nor cabal can see the other's sandboxed libraries. this is irrelevant if you'reinstalling everything in the global db though |
2022-04-21 01:05:14 +0200 | <geekosaur> | whoops |
2022-04-21 01:05:28 +0200 | <geekosaur> | neither stack nor cabal can see the other's sandboxed libraries. this is irrelevant if you'reinstalling everything in the global db though |
2022-04-21 01:06:09 +0200 | <Guest91> | Is using the global db going to involve cabal and stack stepping on each other as I try to get a central install working? |
2022-04-21 01:06:14 +0200 | <geekosaur> | and anything you did a few years ago with cabal install now needs to be cabal v1-install |
2022-04-21 01:06:16 +0200 | <sm> | installing stack with cabal would be a waste of effort, there are many easier ways |
2022-04-21 01:06:38 +0200 | <geekosaur> | (and I don't think stack can do global installs at all) |
2022-04-21 01:06:47 +0200 | <monochrom> | ghcup can get you cabal or stack or both. |
2022-04-21 01:06:55 +0200 | <Guest91> | I'm pretty sure the last time I invoked 'cabal install' in earnest was in 2018. |
2022-04-21 01:06:59 +0200 | <sclv> | you're getting too much conflicting advice here from everyone. but i think stack is a red herring |
2022-04-21 01:07:04 +0200 | <monochrom> | But there is no longer any --global |
2022-04-21 01:07:22 +0200 | <sclv> | the first step is a global ghc -- do that by installing ghc from ghchq |
2022-04-21 01:07:36 +0200 | <sclv> | second, get a cabal executable and place it in the global /bin |
2022-04-21 01:07:36 +0200 | tired | (~tired@user/tired) (Quit: /) |
2022-04-21 01:07:40 +0200 | <sclv> | finally, worry about the libs |
2022-04-21 01:07:53 +0200 | <Guest91> | Got it. Will try that; many thanks. |
2022-04-21 01:07:59 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 01:08:11 +0200 | <sm> | well, it's an interesting problem with many solutions, none of them easy |
2022-04-21 01:08:37 +0200 | <sclv> | vis a vis the libs you can either "cabal v1-install --global LIBNAME" _or_ my preferred way would be to give every student a template cabal project with the allowed libs pinned and just tell them "don't alter em" |
2022-04-21 01:08:45 +0200 | <Guest91> | This is why I take notes. But my notes are no good, which was leading me to getting a flat spot on my forehead. |
2022-04-21 01:09:04 +0200 | tired | (~tired@user/tired) |
2022-04-21 01:09:16 +0200 | <sclv> | a lot has changed in the last few years, so it requires thinking through the goals again based on the current state of tools |
2022-04-21 01:09:22 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-04-21 01:09:24 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:09:25 +0200 | Unicorn_Princess | (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection) |
2022-04-21 01:09:37 +0200 | <sm> | haskell notes decay in about six months :) |
2022-04-21 01:10:15 +0200 | <Guest91> | ...and these last worked in July 2018. Well decayed by now. |
2022-04-21 01:10:55 +0200 | <Guest91> | OK, off to run the steps sclv listed. Thanks! |
2022-04-21 01:11:12 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-04-21 01:11:23 +0200 | <sm> | I would suggest an amendment, start with ghcup. Why wouldn't you |
2022-04-21 01:12:57 +0200 | <Guest91> | I already tried ghcup. It put ghc in my home directory along with all the other tools. I then tried using the cabal that came with to 'cabal install --global [umpty path flags] ghc', which failed with a version conflict on the first dependency it tried. |
2022-04-21 01:13:22 +0200 | <Guest91> | Unfortunately, the specific error is out of my scrollback, so I'd have to rebuild that whole sequence to reproduce it. |
2022-04-21 01:13:39 +0200 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds) |
2022-04-21 01:14:01 +0200 | <sm> | Guest91: ah right, you don't want things installed in $HOME |
2022-04-21 01:14:02 +0200 | DNH | (~DNH@2a02:8109:b740:2c4:39b1:39b8:aa61:2e31) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-04-21 01:14:08 +0200 | <Guest91> | Not even a little bit. |
2022-04-21 01:14:15 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 01:14:42 +0200 | <sm> | cabal install-ing ghc would be crazy, unless you are really intent on building everything from source ? |
2022-04-21 01:15:10 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:15:28 +0200 | <Guest91> | That's certainly how I've done it in the past. Using the distro elderly ghc to bootstrap my way up to latest, then grabbing a cabal binary and doing the same with that, then installing tools. |
2022-04-21 01:15:45 +0200 | <jackdk> | If you want this level of control, have you considered Nix? |
2022-04-21 01:16:19 +0200 | <Guest91> | I don't know Nix. nix-shell ? |
2022-04-21 01:16:20 +0200 | <sm> | I see... what about GHC binaries from haskell.org/ghc ? |
2022-04-21 01:16:49 +0200 | <Guest91> | Part of the problem here is that I'm a sysadmin -- I am not a Haskell user. I put stuff in place, other people use it. |
2022-04-21 01:17:19 +0200 | <sm> | maerwald: does/should ghcup have an option to install things elsewhere than $HOME ? |
2022-04-21 01:19:17 +0200 | <Guest91> | Hah, having just looked at the binary distros on haskell.org, my OS isn't there -- RHEL 8. I suspect I'm going to have to build at least ghc from source regardless. |
2022-04-21 01:19:47 +0200 | <Guest91> | With luck my notes for that haven't decayed quite so badly. |
2022-04-21 01:20:13 +0200 | <sm> | note, `cabal install ghc` does not install GHC, but the `ghc` API package |
2022-04-21 01:20:33 +0200 | <Guest91> | Aha, useful to know. Thank you. I was figuring it was the compiler itself. |
2022-04-21 01:21:08 +0200 | <sm> | and perhaps you don't need a RHEL 8 specific binary ? Just Linux (ARCH) |
2022-04-21 01:21:22 +0200 | chenqisu1 | (~chenqisu1@183.217.200.38) |
2022-04-21 01:21:46 +0200 | <Guest91> | We put things in weird places to avoid disturbing the system binaries & libraries, so I often need to build to make sure that any baked-in paths are correct. |
2022-04-21 01:22:44 +0200 | <sm> | you have a fun job don't you :) |
2022-04-21 01:23:10 +0200 | <Guest91> | Academic sysadmin! It has its moments. Dealing with Haskell and cabal are... not my favorite, I must say. |
2022-04-21 01:23:33 +0200 | <sm> | I was going to throw docker into the mix... |
2022-04-21 01:24:27 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 01:24:29 +0200 | <Guest91> | So far managed to avoid that one. We use VMWare to good effect, and have handed user-level docker privs on specific machines to the three users who so far have required that. |
2022-04-21 01:25:01 +0200 | cawfee | (~root@2406:3003:2077:2758::babe) (Ping timeout: 240 seconds) |
2022-04-21 01:25:15 +0200 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 260 seconds) |
2022-04-21 01:25:41 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:25:43 +0200 | cosimone` | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2022-04-21 01:25:59 +0200 | geekosaur | has been there |
2022-04-21 01:26:09 +0200 | <Guest91> | Yup, here's the ghc bootstrapping I was expecting. Can't build 9.2.2 with my distro's version 8.2.2. Interstitial versions, here I come... |
2022-04-21 01:26:13 +0200 | kronicma1 | (user73386@neotame.csclub.uwaterloo.ca) (Ping timeout: 240 seconds) |
2022-04-21 01:26:29 +0200 | <geekosaur> | bindist shouldn't need to bootstrap |
2022-04-21 01:26:35 +0200 | <geekosaur> | did I miss something? |
2022-04-21 01:26:40 +0200 | <sm> | ohh so old. I would definitely be trying the 9.2.2 binaries |
2022-04-21 01:27:09 +0200 | <geekosaur> | (managed cluster and grad student machines for Carnegie Mellon ECE for a decade, around a decade ago) |
2022-04-21 01:27:27 +0200 | kronicma1 | (user92502@neotame.csclub.uwaterloo.ca) |
2022-04-21 01:27:34 +0200 | <geekosaur> | ECE, so no compiler stuff unless you count Verilog |
2022-04-21 01:28:19 +0200 | <Guest91> | geekosaur no bindist for RHEL 8, and I'm already leery of our odd install pathing, so bootstrapping my way from 8.2.2 to 9.2.2. |
2022-04-21 01:28:37 +0200 | cawfee | (~root@2406:3003:2077:2758::babe) |
2022-04-21 01:29:37 +0200 | <monochrom> | Are you sure the one for Fedora 27 isn't good enough? |
2022-04-21 01:29:53 +0200 | <monochrom> | Are you already on https://www.haskell.org/ghc/download_ghc_9_2_2.html#linux_x86_64 ? |
2022-04-21 01:30:09 +0200 | <geekosaur> | RHEL is usually fairly old, so probably it's not |
2022-04-21 01:30:23 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 260 seconds) |
2022-04-21 01:30:26 +0200 | <monochrom> | OK yikes |
2022-04-21 01:30:35 +0200 | <geekosaur> | had to deal with RHEL at my last job, it makes Debian look like rolling release |
2022-04-21 01:31:03 +0200 | <Guest91> | RHEL 8 is based on Fedora 28, might work. But I've done bootstrap in the past to good effect, so bootstrap here should -- I hope! -- still work. |
2022-04-21 01:31:07 +0200 | <monochrom> | Perhaps CentOS 7 is closer? |
2022-04-21 01:31:17 +0200 | <sm> | since you already succeeded installing a modern ghc with ghcup: there's also the option of doing that and just moving it |
2022-04-21 01:31:26 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:31:30 +0200 | <geekosaur> | that should be since CentOS is more or less free RHEL |
2022-04-21 01:31:36 +0200 | <geekosaur> | *should be OK |
2022-04-21 01:32:54 +0200 | <Guest91> | sm: no baked in paths to worry about? I've been bit by that on various occasions. |
2022-04-21 01:33:01 +0200 | <monochrom> | At any rate they are built for you to just say "./configure --prefix=/foo/bar && make install" so you can choose whatever /foo/bar you want, maximum flexibility. |
2022-04-21 01:33:16 +0200 | <sm> | I don't know, but I sure would give it a try before bootstrapping through multiple GHC versions on an ancient system |
2022-04-21 01:33:35 +0200 | <monochrom> | There are install-time bake-in paths. |
2022-04-21 01:33:48 +0200 | <geekosaur> | ghc doesn't bake in paths, and you'll find that an installed ghc uses wrapper scripts which pass -B options to find itself |
2022-04-21 01:33:50 +0200 | <monochrom> | But they are install-time. |
2022-04-21 01:34:13 +0200 | <geekosaur> | at need you can edit the wrappers |
2022-04-21 01:34:58 +0200 | <geekosaur> | oh, package db registrations have baked-in paths also. but you can edit the registration files and then run ghc-pkg recache --global |
2022-04-21 01:35:13 +0200 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-04-21 01:35:29 +0200 | <monochrom> | That gets out of hand quickly. |
2022-04-21 01:35:38 +0200 | <Guest91> | Eh, I have 8.6.5 building with 8.2.2. Next up: 8.10.7, and then 9.2.2. I vaguely remember not being able to skip quite so many versions last time I did this. |
2022-04-21 01:35:51 +0200 | <geekosaur> | hopefully it's only done once while provisioning the machine |
2022-04-21 01:36:01 +0200 | <monochrom> | I mean for those of us who deeply understand how GHC organizes itself it looks "trivial". |
2022-04-21 01:36:27 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2022-04-21 01:37:13 +0200 | <geekosaur> | Guest91, somewhere mid-8.x ghc went from "support one prior version" to "support two prior versions" |
2022-04-21 01:37:28 +0200 | <Guest91> | That'd explain it. Much appreciated! |
2022-04-21 01:37:36 +0200 | <monochrom> | I use ghcup but I pull a GHCUP_INSTALL_BASE_PREFIX=/usr/local trick. :) |
2022-04-21 01:37:37 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 01:37:54 +0200 | <sm> | monochrom: ah, there it is, nice |
2022-04-21 01:38:00 +0200 | zer0bitz | (~zer0bitz@2001:2003:f444:8f00:9093:7e91:d33a:2c42) (Ping timeout: 248 seconds) |
2022-04-21 01:38:04 +0200 | <Guest91> | Hm! I may try that separately while this interstitial is building. |
2022-04-21 01:38:25 +0200 | <Guest91> | It'll probably still leave me a pile of things in ~/.ghc and ~/.cabal. |
2022-04-21 01:38:34 +0200 | <monochrom> | But then it means /usr/local/.ghcup (generally $GHCUP_INSTALL_BASE_PREFIX/.ghcup). |
2022-04-21 01:38:39 +0200 | <Guest91> | Ooog. |
2022-04-21 01:38:56 +0200 | <monochrom> | But no matter, I then set up symlinks to get nicer directory names. |
2022-04-21 01:39:09 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:39:57 +0200 | <Guest91> | Our install paths are weird because we install everything into a per-version directory and then symlink into a common bin & lib & other stuff directory set. Lets us keep old versions around in case someone is relying on them. |
2022-04-21 01:40:07 +0200 | <geekosaur> | yup |
2022-04-21 01:40:17 +0200 | <monochrom> | ghcup does that internally too. |
2022-04-21 01:40:35 +0200 | <Guest91> | But many things look askance at being installed into a directory like /usr/local/ghc-9.2.2, which is why I'm leery of binary distros. |
2022-04-21 01:40:54 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 276 seconds) |
2022-04-21 01:41:04 +0200 | <geekosaur> | ghc's "binary distro" has a configure script |
2022-04-21 01:41:06 +0200 | <monochrom> | Although, to be fair, "does it internally" also means not according to your established scheme. |
2022-04-21 01:41:18 +0200 | <sclv> | i'd also check if the prof really wants 9.2.2 -- the stable-tho-somewhat-old version still in production many places is 8.10.7 |
2022-04-21 01:41:41 +0200 | <sm> | +1 |
2022-04-21 01:41:43 +0200 | <jackdk> | I am aware of at least one academic institution that's still teaching with 8.6.5 |
2022-04-21 01:41:48 +0200 | <Guest91> | Latest release by request! That much I know. |
2022-04-21 01:41:53 +0200 | <geekosaur> | and 9.2.2 did change some details of parsing |
2022-04-21 01:42:06 +0200 | <monochrom> | Yes you should make the prof decide on the version and sign it black and white and witnessed by a lawyer and a justice of peace. |
2022-04-21 01:42:16 +0200 | <geekosaur> | notably spaces arenowrequires in someplaces where they were optional |
2022-04-21 01:42:24 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 01:42:26 +0200 | <geekosaur> | *are now required |
2022-04-21 01:42:30 +0200 | <Guest91> | The prof is quite good about being consistent on these things. One of our best customers in that regard. |
2022-04-21 01:42:53 +0200 | <sm> | but hey, if 9.2.2 is acceptable it's faster and probably nicer all round and why not save a bunch of students some pain |
2022-04-21 01:43:18 +0200 | <Guest91> | And I'll have 8.10.7 as an interstitial anyhow, so I might as well keep it. |
2022-04-21 01:43:55 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 260 seconds) |
2022-04-21 01:44:54 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:45:22 +0200 | <monochrom> | But yeah putting different versions in different directories is a good idea. |
2022-04-21 01:46:06 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 276 seconds) |
2022-04-21 01:46:09 +0200 | <jackdk> | When you have time, I think you should give Nix (not the whole OS, just the package manager/build tool/floor wax) a good look - its whole point is that everything it builds lives under /nix/store, with a lot of work going into hardcoding rpaths etc such that it's not depending on system libs etc. Not sure if they support RHEL 8 though. |
2022-04-21 01:46:32 +0200 | <Guest91> | jackdk: I'll have a look while I'm building these interstitials. |
2022-04-21 01:46:52 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 250 seconds) |
2022-04-21 01:46:52 +0200 | russruss | (~russruss@my.russellmcc.com) (Ping timeout: 250 seconds) |
2022-04-21 01:47:09 +0200 | cynomys | (~cynomys@user/cynomys) |
2022-04-21 01:47:11 +0200 | <jackdk> | It also seems like a useful thing to have for reproducible science |
2022-04-21 01:47:44 +0200 | <geekosaur> | downside is you end up with Nix-flavored duplicates of half your system libraries |
2022-04-21 01:47:54 +0200 | <Guest91> | Yup. Another reason I dislike the default behavior of cabal putting everything in $HOME. |
2022-04-21 01:48:04 +0200 | <geekosaur> | as a sysadmin I find that annoying |
2022-04-21 01:48:43 +0200 | <monochrom> | I'm a sysadmin-wannabe so I have some of that sentiment too. |
2022-04-21 01:49:12 +0200 | <monochrom> | Although, I'm sysadminning for just one user (myself) so I am not really impacted. |
2022-04-21 01:49:28 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 01:50:23 +0200 | <sibnull[m]> | I'm a developer, and NixOS is great, because all the sysamin stuff is basically outsourced to professionals, and all I do is reproduce their curated configuration on my computer. |
2022-04-21 01:50:40 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 01:53:12 +0200 | <geekosaur> | I think nix*os* makes more sense than nix itself |
2022-04-21 01:53:58 +0200 | <geekosaur> | specifically because nix has to duplicate the host system to ensure its curated configuration is used |
2022-04-21 01:55:06 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 01:56:26 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 02:00:12 +0200 | <Guest91> | One other thing I did notice while messing around with the cabal that ghcup gave me: the --enable-tests and --run-tests flags no longer worked for things I told cabal to install. Is that something that works again in the latest version of cabal, or is that set of flags now repurposed? |
2022-04-21 02:00:15 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-04-21 02:00:44 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 02:00:46 +0200 | <sclv> | old behavior is with v1-install |
2022-04-21 02:00:54 +0200 | jerry99 | (~339ea683@cerf.good1.com) (Quit: CGI:IRC (Ping timeout)) |
2022-04-21 02:00:59 +0200 | <sclv> | new behavior is a totally different workflow. |
2022-04-21 02:01:02 +0200 | <Guest91> | OK, guess I'll be using v1-install a lot then. |
2022-04-21 02:01:24 +0200 | <sclv> | right. new is an extremely per-user workflow |
2022-04-21 02:01:46 +0200 | <Guest91> | Or is there a way in the new workflow to get the test suites to run for the thing I'm installing and all the deps too? |
2022-04-21 02:01:51 +0200 | <sclv> | you should warn the prof that in a few years we will be new behavior only |
2022-04-21 02:02:03 +0200 | <Guest91> | Will do. |
2022-04-21 02:02:12 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 02:02:33 +0200 | <sclv> | in the new workflow “installing” a lib is a fiction. its project based and manages lib deps behind the scenes |
2022-04-21 02:02:34 +0200 | <Guest91> | Also, I fear that if I'm doing this again in four years, I may end up bald from ripping out my own hair. |
2022-04-21 02:02:58 +0200 | <Guest91> | Ooof. No obvious way to work with a central setup there at all. |
2022-04-21 02:03:21 +0200 | <sclv> | they should move to a teaching plan based on projects with fixed deps, and not try to centrally manage libs |
2022-04-21 02:03:43 +0200 | <sclv> | it doesn’t make things pedagogically harder, and teaches a modern approach |
2022-04-21 02:03:44 +0200 | xff0x_ | (~xff0x@om126194210237.10.openmobile.ne.jp) (Read error: Connection reset by peer) |
2022-04-21 02:04:08 +0200 | <geekosaur> | note that a stack resolver or a cabal freeze file will do almost all of what your prof wants, and both work with a modern workflow |
2022-04-21 02:04:33 +0200 | stackdroid18 | (14094@user/stackdroid) () |
2022-04-21 02:04:36 +0200 | <Guest91> | Got bit years ago like that with Ruby when CVE-2009-1904 dropped and one web app we had was carrying around its own version of every gem instead of using system ones. We ended up just killing the app outright. |
2022-04-21 02:04:39 +0200 | <sclv> | Or just giving a skeleton project with the deps already fixed |
2022-04-21 02:04:49 +0200 | <sclv> | just have the students git clone it and off they fo |
2022-04-21 02:05:59 +0200 | <geekosaur> | Guest91, you'd be bitten by that with Haskell anyway because of cross-module inlining |
2022-04-21 02:06:15 +0200 | <geekosaur> | even if you replace the global one you *still* have to recompile everything that uses it |
2022-04-21 02:06:26 +0200 | <Guest91> | Hah, I am warned. So far nobody's tried putting up Haskell code on the web server, though. |
2022-04-21 02:07:57 +0200 | jerry99 | (~339ea102@cerf.good1.com) |
2022-04-21 02:08:04 +0200 | <Guest91> | Python, Ruby, Perl, PHP, JavaScript, sure. No Haskell. |
2022-04-21 02:08:09 +0200 | abiss27 | (~abiss27@user/abiss) (Quit: hasta la vista... tchau!) |
2022-04-21 02:10:39 +0200 | gurkenglas | (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2022-04-21 02:15:21 +0200 | chomwitt | (~chomwitt@2a02:587:dc1b:da00:41cd:5357:91a5:6) (Ping timeout: 248 seconds) |
2022-04-21 02:16:31 +0200 | <Guest91> | Thanks for all the help and pointers. I'm going to leave this build of 8.6.5 running and pick up tomorrow. |
2022-04-21 02:17:40 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
2022-04-21 02:17:43 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 256 seconds) |
2022-04-21 02:19:22 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::46a8) (Ping timeout: 250 seconds) |
2022-04-21 02:21:44 +0200 | euandreh | (~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174) (Ping timeout: 260 seconds) |
2022-04-21 02:31:36 +0200 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 276 seconds) |
2022-04-21 02:36:57 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-04-21 02:38:25 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-04-21 02:38:26 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-04-21 02:38:26 +0200 | wroathe | (~wroathe@user/wroathe) |
2022-04-21 02:40:56 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 02:41:37 +0200 | <monochrom> | The problem with cabal/stack-project-based at school for student accounts is that schools give student accounts very limited disk quota. |
2022-04-21 02:41:57 +0200 | <monochrom> | I have had students exceeding disk quota just by a "cabal update". |
2022-04-21 02:42:44 +0200 | <monochrom> | The error message did not say that either, too. |
2022-04-21 02:43:34 +0200 | <monochrom> | Multiple students got that problem before the nth one cleverly discovered it was a "disk out of space" error. |
2022-04-21 02:45:25 +0200 | <monochrom> | My solution for now is that I don't involve anything that doesn't come with GHC. Hell I rolled my own unit-test library and include it in every assignment. "cabal repl --build-depends HUnit" is out of the question, see above. |
2022-04-21 02:45:54 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 276 seconds) |
2022-04-21 02:46:05 +0200 | <sclv> | gak |
2022-04-21 02:46:21 +0200 | <sclv> | nix would work but its awful heavyweight |
2022-04-21 02:47:09 +0200 | <monochrom> | My previous solution was I did manual dependency chasing for HUnit and prepared a zip file containing HUnit's tarball, its dependencies' tarballs, and a shell script. The shell script called "runghc Setup.hs build/copy/register" in the right order. At least it took much less disk space. |
2022-04-21 02:47:34 +0200 | <sclv> | i think that a "local hackage" would be like that but nicer |
2022-04-21 02:47:37 +0200 | <monochrom> | I am not my school's sysadmin, I cannot just decree "nix". |
2022-04-21 02:48:06 +0200 | <sclv> | there's a tool that's in development iirc that makes bundling up a "local hackage" easier |
2022-04-21 02:48:37 +0200 | <sclv> | students would still have the hit of building at least once the libs they needed and the on-disk binary cost of that |
2022-04-21 02:48:53 +0200 | <sclv> | but thats much smaller than the footprint of a full 01-index tarball |
2022-04-21 02:50:55 +0200 | mmhat | (~mmh@55d4917e.access.ecotel.net) (Quit: WeeChat 3.5) |
2022-04-21 02:52:36 +0200 | <dolio> | Isn't cabal v1-update going to blow up the disks, too? |
2022-04-21 02:53:08 +0200 | <dolio> | It's the same list of packages. |
2022-04-21 02:53:12 +0200 | <sclv> | with a local hackage it won't :-) |
2022-04-21 02:53:25 +0200 | lbseale | (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
2022-04-21 02:53:32 +0200 | <sclv> | otherwise i think the idea is all these other solutions avoid ever having to update, by having all the packages distributed directly |
2022-04-21 02:53:33 +0200 | <dolio> | Well, right. |
2022-04-21 02:53:33 +0200 | euandreh | (~euandreh@2804:14c:33:9fe5:2165:73d6:1630:f174) |
2022-04-21 02:53:58 +0200 | <dolio> | Yeah, you can use a project file with all the dependencies in a repo or something. |
2022-04-21 02:54:32 +0200 | <dolio> | Presumably. |
2022-04-21 02:59:20 +0200 | <jackdk> | monochrom: yeah, this disk quota issue will become a serious problem for teaching Haskell soon, unless you want to confine yourself to included packages. |
2022-04-21 02:59:55 +0200 | xff0x_ | (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
2022-04-21 03:00:48 +0200 | <jackdk> | dolio: The way one academic institution did this was the lab base image did a bunch of cabal v1-install of everything the courses needed at start of semester, all at once, and this provided packages in the global db so cabal v2-install would solve and find them |
2022-04-21 03:01:41 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 03:01:58 +0200 | kristjansson | (sid126207@id-126207.tinside.irccloud.com) (Excess Flood) |
2022-04-21 03:02:20 +0200 | kristjansson | (sid126207@id-126207.tinside.irccloud.com) |
2022-04-21 03:02:22 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-04-21 03:04:14 +0200 | dmenz | (~dmenz@2804:14d:5cd4:8125:9e31:dbe9:5043:1a2e) |
2022-04-21 03:04:33 +0200 | <abastro[m]> | Oh, Haskell build tool is still not ideal |
2022-04-21 03:04:50 +0200 | jerry99 | (~339ea102@cerf.good1.com) (Quit: CGI:IRC) |
2022-04-21 03:05:09 +0200 | jerry99 | (~339ea102@cerf.good1.com) |
2022-04-21 03:05:20 +0200 | <abastro[m]> | Btw can I maintain a cabal store independent of user? |
2022-04-21 03:05:41 +0200 | <abastro[m]> | So that I would have other users capable of accessing it |
2022-04-21 03:06:05 +0200 | <monochrom> | cabal assumes write permissions fundamentally. |
2022-04-21 03:06:38 +0200 | <abastro[m]> | Ouch |
2022-04-21 03:07:08 +0200 | <monochrom> | Hell, cabal assumes single user fundamentally. |
2022-04-21 03:07:33 +0200 | <abastro[m]> | Why is cabal so bas |
2022-04-21 03:07:36 +0200 | cesar- | (~cesar@2600:1700:9490:79f0::f) |
2022-04-21 03:07:39 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 03:07:40 +0200 | <abastro[m]> | s/bas/bad |
2022-04-21 03:08:05 +0200 | <abastro[m]> | It somewhat wastes disk spaces |
2022-04-21 03:08:23 +0200 | <jackdk> | Because package management is a hard problem |
2022-04-21 03:08:45 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 03:08:59 +0200 | <abastro[m]> | At least ability to link the built packages would be great.. |
2022-04-21 03:09:22 +0200 | <sclv> | a read only store is perfectly reasonable |
2022-04-21 03:09:34 +0200 | <sclv> | there’s just some manual plumbing involved |
2022-04-21 03:10:14 +0200 | <abastro[m]> | Wish "Read only stores linked from personal store" was easier |
2022-04-21 03:10:26 +0200 | dmenz | (~dmenz@2804:14d:5cd4:8125:9e31:dbe9:5043:1a2e) (Quit: Leaving) |
2022-04-21 03:11:23 +0200 | vysn | (~vysn@user/vysn) |
2022-04-21 03:11:28 +0200 | <abastro[m]> | If haskell had more manpower, cabal would not be in such a state, right? |
2022-04-21 03:11:36 +0200 | <abastro[m]> | I heard of how great rust package manager is |
2022-04-21 03:12:12 +0200 | <sclv> | there’s virtually no demand for the thing you’re asking for |
2022-04-21 03:12:18 +0200 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2022-04-21 03:12:59 +0200 | <sclv> | academic labs are a very strange and particular case. it would be good to support them better, but its not a normal development workfloe |
2022-04-21 03:13:23 +0200 | <abastro[m]> | Well, I mean, even I want to limit disk space usage |
2022-04-21 03:13:33 +0200 | <monochrom> | 01-index.tar is the fundamental bottleneck. (Build products are dwarved by that.) I don't know that cargo or pip or gem... are really doing better there. |
2022-04-21 03:13:54 +0200 | <sclv> | but what you are asking for is unrelated to single user disk usage |
2022-04-21 03:13:55 +0200 | <abastro[m]> | Oh? |
2022-04-21 03:13:59 +0200 | <abastro[m]> | How big is 01-index.tar |
2022-04-21 03:14:30 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 276 seconds) |
2022-04-21 03:14:36 +0200 | <abastro[m]> | I thought built packages take the most of the space |
2022-04-21 03:14:40 +0200 | <abastro[m]> | But index file? |
2022-04-21 03:14:44 +0200 | <sclv> | a fixed shared store is about one computer with Many users |
2022-04-21 03:14:47 +0200 | neurocyte8614492 | (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
2022-04-21 03:15:20 +0200 | <abastro[m]> | Yep |
2022-04-21 03:15:31 +0200 | <sclv> | no modern compiled language goes easy on disk afaik. |
2022-04-21 03:15:49 +0200 | <abastro[m]> | I mean |
2022-04-21 03:15:54 +0200 | <davean> | abastro[m]: Why do you think this isn't how all the other ones work? |
2022-04-21 03:15:56 +0200 | <sclv> | and arguably even noncompiled languages get nutty with large dep trees |
2022-04-21 03:16:06 +0200 | <abastro[m]> | One could perhaps have one for each computer |
2022-04-21 03:16:42 +0200 | <sclv> | one what? one store? if you have a single user on each computer, you Do |
2022-04-21 03:16:54 +0200 | <abastro[m]> | And then one computer for many users shared |
2022-04-21 03:17:05 +0200 | <sclv> | *facepalm* |
2022-04-21 03:17:20 +0200 | <abastro[m]> | I mean, why would disk quotas be small here |
2022-04-21 03:17:51 +0200 | <abastro[m]> | Isn't it because each computer is shared by lots of users? |
2022-04-21 03:18:25 +0200 | <sclv> | Yes. and as i said a teaching lab is a unique case, not common to any standard modern development env |
2022-04-21 03:18:58 +0200 | <abastro[m]> | Sorry but could you explain more about teaching lab? |
2022-04-21 03:19:12 +0200 | andrey | (~andrey@p200300dbcf0d4c00ca7da127e9eab0e0.dip0.t-ipconnect.de) |
2022-04-21 03:19:45 +0200 | <abastro[m]> | I thought of a typical cloud environment running on server where each computers are shared by many users |
2022-04-21 03:19:56 +0200 | <abastro[m]> | Guess this case is a bit different? |
2022-04-21 03:20:09 +0200 | <sclv> | a typical cloud env is nothing like that |
2022-04-21 03:20:29 +0200 | <abastro[m]> | Eh? |
2022-04-21 03:20:49 +0200 | <abastro[m]> | I mean, it's not like one user is assigned entire computer |
2022-04-21 03:21:10 +0200 | <sclv> | the “cloud” usually gives individual users/orgs an entire virtual computer that secretly is running on shared hardware |
2022-04-21 03:21:28 +0200 | andrey_ | (~andrey@p200300dbcf0690007a1a8916775a33e5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-04-21 03:21:30 +0200 | <sclv> | you don’t have a linux install with 100+ accounts able to login |
2022-04-21 03:21:43 +0200 | <abastro[m]> | Yea |
2022-04-21 03:21:44 +0200 | <abastro[m]> | Yep.. oh wait |
2022-04-21 03:21:44 +0200 | <abastro[m]> | Isn't it the same situation? |
2022-04-21 03:21:46 +0200 | <abastro[m]> | Oh right |
2022-04-21 03:21:49 +0200 | <abastro[m]> | Wait |
2022-04-21 03:22:08 +0200 | <abastro[m]> | Isn't virtualization exactly for this thing |
2022-04-21 03:23:17 +0200 | <abastro[m]> | Virtual computer giving illusion of owning the computer when it doesn't, actually. |
2022-04-21 03:23:59 +0200 | <monochrom> | Here is the real difference between cloud and school student account: |
2022-04-21 03:24:56 +0200 | <monochrom> | The cloud gives you 100GB disk space and charges you I don't know a hundred dollars per year maybe. |
2022-04-21 03:25:04 +0200 | <abastro[m]> | Now I realized what you mean, so in the academic lab, one computer OS comes with many users... whhhh |
2022-04-21 03:25:24 +0200 | <monochrom> | The schoold gives you 100MB disk space and charges you I don't know ten thousand dollars per year maybe. >_< |
2022-04-21 03:25:32 +0200 | <sclv> | lmao |
2022-04-21 03:25:58 +0200 | <abastro[m]> | Wat |
2022-04-21 03:25:59 +0200 | <abastro[m]> | Ten thousands lul |
2022-04-21 03:26:15 +0200 | <abastro[m]> | "We don't have that money, it needs to go into constructing buildings" |
2022-04-21 03:26:24 +0200 | <abastro[m]> | Tho I think lots of startups begin with free version which doesn't give much disk space |
2022-04-21 03:26:39 +0200 | <monochrom> | I think it's 7000 cdn$ in Canadian universities. And the US is strictly more expensive. |
2022-04-21 03:26:42 +0200 | <abastro[m]> | Also free versions does provide like 10GB at least |
2022-04-21 03:26:55 +0200 | <abastro[m]> | Or was ir 100GB |
2022-04-21 03:26:59 +0200 | <abastro[m]> | Now I guess I see |
2022-04-21 03:27:16 +0200 | <abastro[m]> | Disk spaces are cheap but uni cannot somehow afford it. Wow? |
2022-04-21 03:27:56 +0200 | <abastro[m]> | (I thought my uni was more conventional, it often gives us 10GB disk space at least as well. Enough to run small haskell project) |
2022-04-21 03:28:00 +0200 | <sclv> | Willing to bet that cloud providers somehow have fewer middle manager administrators than campuses these days |
2022-04-21 03:28:23 +0200 | <monochrom> | Anyway it's somewhat below $10k in Canada and somewhat above $10k in US so let's say the "average" is $10k heh. (yay ballparks.) |
2022-04-21 03:29:00 +0200 | <monochrom> | To be fair, $10k at a university also buys you courses, not just a computer account. |
2022-04-21 03:29:17 +0200 | <monochrom> | Right? I want to make money too! |
2022-04-21 03:29:36 +0200 | <monochrom> | And my TAs want to make money too. |
2022-04-21 03:29:42 +0200 | <monochrom> | It all adds up quickly. |
2022-04-21 03:30:04 +0200 | <monochrom> | But I just like the comedy of comparing cloud with school accounts >:) |
2022-04-21 03:32:55 +0200 | xkuru | (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
2022-04-21 03:33:19 +0200 | vysn | (~vysn@user/vysn) (Ping timeout: 240 seconds) |
2022-04-21 03:35:13 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 246 seconds) |
2022-04-21 03:35:53 +0200 | Me-me | (~me-me@v.working.name) (Quit: Disconnecting on purpose.) |
2022-04-21 03:35:57 +0200 | AlexNoo_ | (~AlexNoo@178.34.161.31) |
2022-04-21 03:36:22 +0200 | Me-me | (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) |
2022-04-21 03:37:07 +0200 | AlexNoo | (~AlexNoo@178.34.161.31) (Read error: Connection reset by peer) |
2022-04-21 03:37:25 +0200 | <abastro[m]> | Well you do need to state the problematic side |
2022-04-21 03:37:32 +0200 | <abastro[m]> | BUILDINGS!! |
2022-04-21 03:37:39 +0200 | <abastro[m]> | More Buildings!!! |
2022-04-21 03:37:47 +0200 | abastro[m] | sigh |
2022-04-21 03:37:54 +0200 | Me-me | (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host) |
2022-04-21 03:37:54 +0200 | Me-me | (~me-me@user/me-me) |
2022-04-21 03:38:16 +0200 | <abastro[m]> | Once heard 40~50% of uni budget goes into buildings |
2022-04-21 03:39:33 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-04-21 03:43:18 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-04-21 03:45:46 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) |
2022-04-21 03:45:56 +0200 | vicfred | (~vicfred@user/vicfred) (Quit: Leaving) |
2022-04-21 03:51:25 +0200 | TonyStone | (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Remote host closed the connection) |
2022-04-21 03:54:51 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 03:56:25 +0200 | TonyStone | (~TonyStone@2603-7080-8607-c36a-e10b-aeba-a8b3-e9aa.res6.spectrum.com) |
2022-04-21 03:57:39 +0200 | abastro | (~abab9579@220.75.216.63) |
2022-04-21 03:59:01 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds) |
2022-04-21 03:59:21 +0200 | oxide | (~lambda@user/oxide) (Ping timeout: 276 seconds) |
2022-04-21 04:00:35 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
2022-04-21 04:01:01 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:01:36 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
2022-04-21 04:01:52 +0200 | EvanR | (~EvanR@user/evanr) (Quit: Leaving) |
2022-04-21 04:03:48 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 04:06:23 +0200 | Guest91 | (~Guest91@caliga.eecs.tufts.edu) (Quit: Client closed) |
2022-04-21 04:12:35 +0200 | <janus> | abastro[m]: doesn't seem like that is true for iowa: https://fmb.fo.uiowa.edu/university-wide-budgeted-expenditures-fy2020 |
2022-04-21 04:12:47 +0200 | earthy | (~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0) (Ping timeout: 260 seconds) |
2022-04-21 04:13:10 +0200 | [Leary] | (~Leary]@122-58-90-96-vdsl.sparkbb.co.nz) |
2022-04-21 04:13:21 +0200 | <janus> | BLDG RENEWAL is part of the red 2.5% at the bottom |
2022-04-21 04:13:21 +0200 | <abastro> | Oh, TIL that was regional one. |
2022-04-21 04:13:38 +0200 | <abastro> | Interesting that how salaries are of huge portion there |
2022-04-21 04:14:03 +0200 | <abastro> | Perhaps higher salary standard affecting? |
2022-04-21 04:14:11 +0200 | JordiGH | (~jordi@user/jordigh) (Ping timeout: 260 seconds) |
2022-04-21 04:17:30 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 04:17:54 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:18:12 +0200 | jinsun__ | (~jinsun@user/jinsun) (Ping timeout: 276 seconds) |
2022-04-21 04:18:47 +0200 | frost | (~frost@user/frost) |
2022-04-21 04:18:59 +0200 | aman_ | (~aman@user/aman) |
2022-04-21 04:20:10 +0200 | JordiGH | (~jordi@user/jordigh) |
2022-04-21 04:22:12 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-04-21 04:25:17 +0200 | <Axman6> | Universities literally exist to emply people to do research, so it's no surprise their major expenditure is salaries |
2022-04-21 04:25:36 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-04-21 04:25:36 +0200 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-04-21 04:25:36 +0200 | finn_elija | FinnElija |
2022-04-21 04:26:20 +0200 | lifter | (~lifter@2600:1702:37d0:4310:10d9:2213:a793:979a) |
2022-04-21 04:26:22 +0200 | earthy | (~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net) |
2022-04-21 04:28:35 +0200 | <lifter> | Am I correct that there really isn't a practical application of the "fix" function given that there is nothing you can do with "fix" that you cannot accomplish by some other, more idiomatic means? |
2022-04-21 04:28:38 +0200 | Hash | (~Hash@hey.howstoned.ru) (Read error: Connection reset by peer) |
2022-04-21 04:30:18 +0200 | Hash | (~Hash@hey.howstoned.ru) |
2022-04-21 04:30:48 +0200 | <Axman6> | it's just a convenience function, it's Haskell equivalent of the Y-combinator |
2022-04-21 04:31:23 +0200 | <Axman6> | sometimes you don't want to name a function to make a recursive function, and that's exactly what fix allows you to do |
2022-04-21 04:31:51 +0200 | <lifter> | Ah OK I can see that I think. |
2022-04-21 04:31:51 +0200 | <Axman6> | let f x = ... f ... === fix (\f x -> ...f ...) |
2022-04-21 04:33:12 +0200 | <lifter> | Well you've still named your recursive function "f", right? |
2022-04-21 04:33:46 +0200 | <Axman6> | only within the lambda - f is not a name that is useable by any other code |
2022-04-21 04:34:33 +0200 | <dolio> | > fix ?? 5 $ \fac n -> if n == 0 then 1 else n * fac (n-1) |
2022-04-21 04:34:35 +0200 | <lambdabot> | 120 |
2022-04-21 04:35:08 +0200 | <Axman6> | > fix ('a':) -- recursion without having to use any names at all |
2022-04-21 04:35:10 +0200 | <lambdabot> | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
2022-04-21 04:35:22 +0200 | tcard | (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving) |
2022-04-21 04:35:28 +0200 | <lifter> | I'm aware of those examples. Just searching for a practical application.3 |
2022-04-21 04:35:51 +0200 | <dolio> | That is a practical example. |
2022-04-21 04:35:56 +0200 | Sgeo_ | (~Sgeo@user/sgeo) |
2022-04-21 04:36:01 +0200 | <dolio> | They define macros in Scheme for that. |
2022-04-21 04:36:26 +0200 | <Axman6> | but like many functions in the prelude, fix is just a convenience for those times when it makes sense to use, just like flip, const, ap, id (hmmm, I wonder of those are turing complete...) |
2022-04-21 04:36:37 +0200 | <lifter> | I mean you could just do `['a','a'..]` |
2022-04-21 04:36:40 +0200 | JordiGH | (~jordi@user/jordigh) (Ping timeout: 248 seconds) |
2022-04-21 04:36:46 +0200 | <dibblego> | why use map f instead of foldr ((:) . f) []? Just searching for a practical application of map |
2022-04-21 04:36:56 +0200 | <Axman6> | that actually produces a different value in memory |
2022-04-21 04:36:57 +0200 | <zzz> | dolio: what's the `??` ? |
2022-04-21 04:37:06 +0200 | <dolio> | It's infix flip. |
2022-04-21 04:37:30 +0200 | <Axman6> | the fix version is a self recursive list, whereas the ['a','a'..] version will build up a larger and larger list as more of it is avaluated |
2022-04-21 04:37:55 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 04:38:14 +0200 | <Axman6> | so, while those values are Eq equivalent, they do actually behave differently |
2022-04-21 04:38:43 +0200 | <lifter> | Hmm I don't quite understand the distinctino. |
2022-04-21 04:38:45 +0200 | <Axman6> | > let as = 'a':as in as -- the tail of the list literally points to itself |
2022-04-21 04:38:46 +0200 | <lambdabot> | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
2022-04-21 04:38:52 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:39:00 +0200 | Sgeo | (~Sgeo@user/sgeo) (Ping timeout: 276 seconds) |
2022-04-21 04:39:26 +0200 | <Axman6> | in ['a','a'..], each cons cell is distinct, they are not the same location in memory |
2022-04-21 04:39:47 +0200 | <lifter> | Well OK I can see that what's happening under the hood is different. Wow that's pretty wild. |
2022-04-21 04:40:09 +0200 | <Axman6> | @src repeat |
2022-04-21 04:40:09 +0200 | <lambdabot> | repeat x = xs where xs = x : xs |
2022-04-21 04:40:29 +0200 | <Axman6> | if you had used repeat the result is identical to the fix version |
2022-04-21 04:40:39 +0200 | <Axman6> | repeat x = fix (x:) |
2022-04-21 04:41:00 +0200 | <lifter> | OK that's interesting. |
2022-04-21 04:41:49 +0200 | <Axman6> | if you think about it in terms of C, it's like having a linked list struct which points to itself |
2022-04-21 04:43:45 +0200 | <Sgeo_> | Is there a name for the concept that s -> a is the same as (a->r)->s->r? Something with continuations or continuation passing style? |
2022-04-21 04:44:28 +0200 | <dolio> | The Yoneda lemma. |
2022-04-21 04:44:49 +0200 | <Axman6> | yoneda a bigger lemma |
2022-04-21 04:45:31 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 04:46:01 +0200 | <Sgeo_> | Thank you |
2022-04-21 04:46:50 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 04:47:10 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:48:02 +0200 | oxide | (~lambda@user/oxide) (Client Quit) |
2022-04-21 04:48:47 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:50:03 +0200 | oxide | (~lambda@user/oxide) (Client Quit) |
2022-04-21 04:50:32 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 04:51:06 +0200 | aman_ | aman |
2022-04-21 04:56:54 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 04:57:40 +0200 | <jackdk> | I use `fix` often in monadic code like `fix $ \loop -> do ...`, in things like socket handlers |
2022-04-21 05:01:40 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 05:02:11 +0200 | JordiGH | (~jordi@user/jordigh) |
2022-04-21 05:05:03 +0200 | oxide | (~lambda@user/oxide) (Client Quit) |
2022-04-21 05:05:29 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 05:08:35 +0200 | <lifter> | jackdk: Yeah that's a neat example, thanks! |
2022-04-21 05:09:43 +0200 | <jackdk> | lifter: yw. I sometimes find it nicer than the combinators in `monad-loops`, as you let control fall out the bottom of the function when you're done |
2022-04-21 05:23:56 +0200 | <Axman6> | I wonder how hard it would be to write something which gives you the same semantics for looping as continue, break etc. in other languages; loop \continue break -> do ... when done break; when shouldSkip continue; ... |
2022-04-21 05:24:13 +0200 | <Axman6> | feels doable using Cont(T) |
2022-04-21 05:26:09 +0200 | <Axman6> | https://hackage.haskell.org/package/loops-0.2.0.2/docs/Control-Monad-Loop.html |
2022-04-21 05:27:27 +0200 | JordiGH | (~jordi@user/jordigh) (Ping timeout: 260 seconds) |
2022-04-21 05:27:52 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-04-21 05:30:46 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 05:31:44 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 05:32:38 +0200 | cesar- | (~cesar@2600:1700:9490:79f0::f) (Ping timeout: 250 seconds) |
2022-04-21 05:33:30 +0200 | tcard | (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) |
2022-04-21 05:35:58 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
2022-04-21 05:50:05 +0200 | wyrd | (~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving) |
2022-04-21 05:58:29 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 05:58:56 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 06:00:50 +0200 | CodeKiwi | DigitalKiwi |
2022-04-21 06:01:01 +0200 | <albet70> | how you pronounce >=>? |
2022-04-21 06:01:13 +0200 | <dolio> | That's a fish. |
2022-04-21 06:01:20 +0200 | <dibblego> | "are you gonna go my way?" |
2022-04-21 06:02:12 +0200 | <albet70> | so f >=> g is f fish g? |
2022-04-21 06:02:42 +0200 | <dibblego> | are you, f, gonna go my, g, way? |
2022-04-21 06:02:57 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2022-04-21 06:04:10 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2022-04-21 06:04:33 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 06:08:19 +0200 | abastro | (~abab9579@220.75.216.63) (Ping timeout: 240 seconds) |
2022-04-21 06:08:57 +0200 | <albet70> | >=> is Kleisli arrow? |
2022-04-21 06:09:05 +0200 | <dibblego> | kleisli composition |
2022-04-21 06:12:01 +0200 | <albet70> | which scenario would use Kleisli composition? I barely used it ever |
2022-04-21 06:12:38 +0200 | <dibblego> | every time you need a function of type Monad m => (a -> m b) -> (b -> m c) -> a -> m |
2022-04-21 06:13:51 +0200 | <albet70> | fish = \g, f -> \x, y -> f (g x y) y |
2022-04-21 06:14:55 +0200 | <dibblego> | fish f g = \a -> f a >>= g |
2022-04-21 06:15:41 +0200 | <albet70> | without (), it's easy to misunderstand |
2022-04-21 06:16:35 +0200 | <albet70> | \a->(f a >>= g) or (\a -> f a) >>= g |
2022-04-21 06:16:55 +0200 | <dibblego> | fish f g = (\a -> ((f a) >>= g)) |
2022-04-21 06:16:58 +0200 | <zzz> | albet70: one of the most.familiar cases might be the composition of functions of the type a -> Either b a |
2022-04-21 06:22:01 +0200 | cdman | (~dcm@27.2.217.159) |
2022-04-21 06:22:01 +0200 | cdman | (~dcm@27.2.217.159) (Changing host) |
2022-04-21 06:22:01 +0200 | cdman | (~dcm@user/dmc/x-4369397) |
2022-04-21 06:23:07 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 06:25:58 +0200 | lifter | (~lifter@2600:1702:37d0:4310:10d9:2213:a793:979a) () |
2022-04-21 06:30:27 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 06:31:13 +0200 | pilyn | (~pilyn@user/pilyn) |
2022-04-21 06:42:44 +0200 | jerry99 | (~339ea102@cerf.good1.com) (Quit: CGI:IRC (EOF)) |
2022-04-21 06:43:12 +0200 | pilyn | (~pilyn@user/pilyn) (Remote host closed the connection) |
2022-04-21 06:43:50 +0200 | pilyn | (~pilyn@user/pilyn) |
2022-04-21 06:45:56 +0200 | vysn | (~vysn@user/vysn) |
2022-04-21 06:47:17 +0200 | bahamas | (~lucian@84.232.140.158) |
2022-04-21 06:51:15 +0200 | EvanR | (~EvanR@user/evanr) |
2022-04-21 06:55:39 +0200 | renzhi | (~xp@2607:fa49:6500:b100::229c) (Ping timeout: 240 seconds) |
2022-04-21 06:57:32 +0200 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-04-21 06:58:57 +0200 | img | (~img@user/img) |
2022-04-21 07:03:07 +0200 | <zzz> | is there any reason why we have to surround operators in parens when asking ghci for their type? |
2022-04-21 07:04:15 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 07:04:22 +0200 | <zzz> | @type $ |
2022-04-21 07:04:23 +0200 | <lambdabot> | error: |
2022-04-21 07:04:23 +0200 | <lambdabot> | parse error on input ‘$’ |
2022-04-21 07:04:23 +0200 | <lambdabot> | Perhaps you intended to use TemplateHaskell |
2022-04-21 07:05:28 +0200 | son0p | (~ff@181.136.122.143) (Ping timeout: 248 seconds) |
2022-04-21 07:05:46 +0200 | <zzz> | :info $ works just fine |
2022-04-21 07:06:22 +0200 | <zzz> | i guess :type demands an expression |
2022-04-21 07:06:53 +0200 | pilyn | (~pilyn@user/pilyn) (Quit: Leaving) |
2022-04-21 07:09:04 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
2022-04-21 07:09:16 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 07:13:23 +0200 | <abastro[m]> | :t $ |
2022-04-21 07:13:25 +0200 | <lambdabot> | error: |
2022-04-21 07:13:25 +0200 | <lambdabot> | parse error on input ‘$’ |
2022-04-21 07:13:25 +0200 | <lambdabot> | Perhaps you intended to use TemplateHaskell |
2022-04-21 07:13:27 +0200 | earthy | (~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net) (Ping timeout: 240 seconds) |
2022-04-21 07:13:29 +0200 | <abastro[m]> | Oh |
2022-04-21 07:14:20 +0200 | <jackdk> | zzz: I think asking `:t` for the type of anything but an expression is an ill-posed question |
2022-04-21 07:14:24 +0200 | earthy | (~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net) |
2022-04-21 07:14:39 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-04-21 07:14:50 +0200 | <dsal> | :t ($) |
2022-04-21 07:14:51 +0200 | <lambdabot> | (a -> b) -> a -> b |
2022-04-21 07:15:04 +0200 | <jackdk> | % :info id |
2022-04-21 07:15:05 +0200 | <yahb> | jackdk: id :: a -> a -- Defined in `GHC.Base' |
2022-04-21 07:15:14 +0200 | <jackdk> | % :info $ |
2022-04-21 07:15:15 +0200 | <yahb> | jackdk: ($) :: (a -> b) -> a -> b -- Defined in `GHC.Base'; infixr 0 $ |
2022-04-21 07:15:27 +0200 | <jackdk> | % infixr 0 id |
2022-04-21 07:15:27 +0200 | <yahb> | jackdk: ; <interactive>:124:10: error: parse error on input `id' |
2022-04-21 07:15:34 +0200 | <jackdk> | % infixr 0 `id` |
2022-04-21 07:15:35 +0200 | <yahb> | jackdk: ; <interactive>:125:10: error:; The fixity signature for `id' lacks an accompanying binding; (The fixity signature must be given where `id' is declared) |
2022-04-21 07:15:39 +0200 | <jackdk> | darn |
2022-04-21 07:16:59 +0200 | jbarot | (~jbarot@180.190.247.113) |
2022-04-21 07:17:47 +0200 | jbarot | pawikan_ |
2022-04-21 07:18:00 +0200 | <pawikan_> | Hi. I'm learning haskell. |
2022-04-21 07:18:36 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 07:18:46 +0200 | <dragestil> | Are there any modern successors of haskell-indexer or haskell-code-explorer? both seem unmaintained now. And haskell-language-server does not support cross-library find-definition either. |
2022-04-21 07:19:24 +0200 | Neon | (~Neon@2001:18c0:aa0:8200:cd5c:6a4f:dbd9:2404) |
2022-04-21 07:19:48 +0200 | pawikan_ | (~jbarot@180.190.247.113) (Client Quit) |
2022-04-21 07:24:39 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 07:25:39 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 07:29:23 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 07:32:29 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2022-04-21 07:33:55 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 256 seconds) |
2022-04-21 07:35:18 +0200 | aman | (~aman@user/aman) (Remote host closed the connection) |
2022-04-21 07:35:58 +0200 | aman | (~aman@user/aman) |
2022-04-21 07:37:49 +0200 | xkuru | (~xkuru@user/xkuru) |
2022-04-21 07:39:53 +0200 | jakalx | (~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection) |
2022-04-21 07:39:54 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-04-21 07:53:22 +0200 | Midjak | (~Midjak@82.66.147.146) |
2022-04-21 07:54:53 +0200 | bahamas | (~lucian@84.232.140.158) (Ping timeout: 256 seconds) |
2022-04-21 07:54:59 +0200 | inversed | (~inversed@94.13.111.159) (Read error: Connection reset by peer) |
2022-04-21 07:55:06 +0200 | michalz | (~michalz@185.246.204.43) |
2022-04-21 07:57:46 +0200 | zmt01 | (~zmt00@user/zmt00) (Quit: Leaving) |
2022-04-21 07:57:50 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 07:58:01 +0200 | <maerwald[m]> | dragestil: there's a trick to allor cross-library find definition |
2022-04-21 07:58:19 +0200 | <maerwald[m]> | You "vendor" all dependencies (add them as packages in cabal.project) |
2022-04-21 07:58:31 +0200 | <maerwald[m]> | Local packages work in HLS |
2022-04-21 07:59:52 +0200 | <maerwald[m]> | https://cabal.readthedocs.io/en/stable/cabal-project.html?highlight=optional-packages#cfg-field-op… |
2022-04-21 08:00:13 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 08:00:20 +0200 | zmt00 | (~zmt00@user/zmt00) |
2022-04-21 08:01:13 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 08:01:33 +0200 | <dragestil> | maerwald[m]: ok, but can I point to hls packages already in the local filesystem this way? |
2022-04-21 08:02:15 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 08:02:29 +0200 | <dragestil> | or do I have to get an extra copy of the package I want to find definitions through cabal? |
2022-04-21 08:03:08 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 08:03:59 +0200 | <dragestil> | say I have two projects A and B, both depending on module C. Will I have to download C twice, if I want to find definitions in both projects, of symbols defined in C? |
2022-04-21 08:05:39 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 240 seconds) |
2022-04-21 08:05:53 +0200 | gpncarl | (~gpncarl@222.249.231.3) |
2022-04-21 08:06:13 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-04-21 08:07:19 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 08:08:05 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 08:08:35 +0200 | gpncarl | (~gpncarl@222.249.231.3) (Quit: WeeChat 3.4.1) |
2022-04-21 08:14:41 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 08:17:39 +0200 | slac71531 | (~slack1256@191.125.99.203) (Ping timeout: 240 seconds) |
2022-04-21 08:19:04 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 08:19:36 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 08:20:08 +0200 | <albet70> | % :t (>=>) @[] |
2022-04-21 08:20:08 +0200 | <yahb> | albet70: (a -> [b]) -> (b -> [c]) -> a -> [c] |
2022-04-21 08:21:53 +0200 | <albet70> | >=> = \g, f -> \a -> join (f <$> (g a))? |
2022-04-21 08:22:39 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 08:22:57 +0200 | <albet70> | f :: b -> [c], but g a:: [b] |
2022-04-21 08:23:30 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 08:23:48 +0200 | <albet70> | so fmap f (g a) would get [[c]] |
2022-04-21 08:23:55 +0200 | <albet70> | is that right? |
2022-04-21 08:24:50 +0200 | pagnol | (~user@014198154145.ctinets.com) |
2022-04-21 08:25:27 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Remote host closed the connection) |
2022-04-21 08:25:52 +0200 | coot | (~coot@213.134.190.95) |
2022-04-21 08:27:20 +0200 | <hololeap> | your syntax is a little weird, but you're essentially correct |
2022-04-21 08:27:39 +0200 | acidjnk | (~acidjnk@p200300d0c722df6114cdc3ce0552b93f.dip0.t-ipconnect.de) |
2022-04-21 08:27:57 +0200 | <albet70> | what's your syntax? |
2022-04-21 08:28:37 +0200 | <dragestil> | OK, reading the docs I added optional package pointing to a local ghc repo in a project, restarting the language server it still cannot find reference to some symbols defined in ghc |
2022-04-21 08:28:37 +0200 | <hololeap> | I was referring to this: >=> = \g, f -> \a -> join (f <$> (g a))? |
2022-04-21 08:28:47 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-04-21 08:29:53 +0200 | <albet70> | >=> = \g, f-> \a -> (g a) >>= f? |
2022-04-21 08:30:40 +0200 | <hololeap> | (>=>) = \f g -> join . fmap g . f |
2022-04-21 08:31:00 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 08:31:01 +0200 | <hololeap> | or, f >=> g = join . fmap g . f |
2022-04-21 08:31:20 +0200 | Ram-Z | (Ram-Z@2a01:7e01::f03c:91ff:fe57:d2df) (Ping timeout: 260 seconds) |
2022-04-21 08:32:04 +0200 | abastro | (~abab9579@220.75.216.63) |
2022-04-21 08:32:31 +0200 | <hololeap> | or this, which is what I think you were going for: (>=>) = \f g -> \a -> join (g <$> f a) |
2022-04-21 08:32:56 +0200 | <hololeap> | it was really just the comma that made it "weird" |
2022-04-21 08:33:34 +0200 | <hololeap> | and also if you define an infix function like that, you need to wrap it in parens |
2022-04-21 08:34:17 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-04-21 08:34:41 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-04-21 08:34:58 +0200 | jbarot | (~jbarot@180.190.247.113) |
2022-04-21 08:35:07 +0200 | jbarot | pawikan_ |
2022-04-21 08:35:10 +0200 | <pawikan_> | hello everyone |
2022-04-21 08:35:36 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 08:35:49 +0200 | <hololeap> | yo |
2022-04-21 08:35:58 +0200 | <pawikan_> | how long are you using haskell? |
2022-04-21 08:36:25 +0200 | <hololeap> | I dunno, I think I first tried it out around 2016 or so |
2022-04-21 08:36:27 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-04-21 08:37:07 +0200 | <pagnol> | I've returned to writing some Haskell after a long break and what I'm struggling to get used to is the absence of 'proper' records |
2022-04-21 08:37:22 +0200 | <pawikan_> | Good for you @hololeap |
2022-04-21 08:37:26 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-04-21 08:37:34 +0200 | <pawikan_> | I'm just starting learning haskell. |
2022-04-21 08:37:45 +0200 | <albet70> | "hololeap :it was really just the comma that made it "weird"", is that , in lambda is available? |
2022-04-21 08:37:54 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-04-21 08:38:02 +0200 | <albet70> | \f g and \f, g |
2022-04-21 08:38:03 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer) |
2022-04-21 08:38:12 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-04-21 08:38:23 +0200 | <hololeap> | no, you can't put a comma in a lambda like that |
2022-04-21 08:38:32 +0200 | <albet70> | some languages use , to split parameter in lambda |
2022-04-21 08:38:43 +0200 | <albet70> | "hololeap :no, you can't put a comma in a lambda like that", ok |
2022-04-21 08:39:39 +0200 | <hololeap> | the only place commas are used are structures with separated values, like tuples and lists |
2022-04-21 08:39:56 +0200 | <hololeap> | that might not be 100% true, but more or less is |
2022-04-21 08:40:01 +0200 | <albet70> | why some people use \f g and some using \g f, is there a rule? |
2022-04-21 08:40:30 +0200 | <hololeap> | no, not really a rule, just convention, but it's mostly preference |
2022-04-21 08:41:35 +0200 | <albet70> | about fmap on list, use recursive to define and use list compression to define, are ok? |
2022-04-21 08:41:49 +0200 | <albet70> | list comprehension |
2022-04-21 08:42:37 +0200 | <hololeap> | define fmap on a list? like as an exercise? |
2022-04-21 08:42:46 +0200 | <albet70> | use iteration, not recursion |
2022-04-21 08:42:58 +0200 | <hololeap> | fmap's already defined for lists |
2022-04-21 08:43:41 +0200 | <albet70> | fmap f xs = [ f x |x <- xs ] |
2022-04-21 08:43:47 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-04-21 08:43:53 +0200 | <hololeap> | all you need to do is walk the list and convert each value using the given function, so recursion is fine for that |
2022-04-21 08:44:28 +0200 | <hololeap> | defining fmap for lists using list comprehensions seems silly, since list comprehensions rely on fmap being defined for lists :p |
2022-04-21 08:44:30 +0200 | <albet70> | "hololeap :all you need to do is walk the list and convert each value using the given function, so recursion is fine for that", but what if there is no tail call optimization |
2022-04-21 08:44:52 +0200 | <hololeap> | ghc figures that out for you |
2022-04-21 08:45:54 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer) |
2022-04-21 08:46:21 +0200 | <zzz> | list comprehensions are silly. fight me |
2022-04-21 08:47:41 +0200 | <hololeap> | you might have to add some eager evaluation in there to prevent a buildup of thunks on long lists, but other than that, ghc should figure it out for you |
2022-04-21 08:50:11 +0200 | <zzz> | id = \x -> [ a | a <- x ] |
2022-04-21 08:51:40 +0200 | <Axman6> | pawikan_: is there anything we can help you with? Please feel free to ask |
2022-04-21 08:52:06 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-04-21 08:53:03 +0200 | xkuru | (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
2022-04-21 08:57:22 +0200 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) |
2022-04-21 08:59:42 +0200 | phma | (~phma@2001:5b0:2143:fb58:37e7:bba5:12de:8897) (Read error: Connection reset by peer) |
2022-04-21 09:00:27 +0200 | phma | (~phma@host-67-44-209-28.hnremote.net) |
2022-04-21 09:03:24 +0200 | inversed | (~inversed@94.13.111.159) |
2022-04-21 09:03:41 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 09:08:25 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 09:09:50 +0200 | <abastro> | I also think list comprehension is silly |
2022-04-21 09:10:37 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 09:12:01 +0200 | <albet70> | using list comprehension can express prime in one line |
2022-04-21 09:13:54 +0200 | shriekingnoise | (~shrieking@201.231.16.156) (Quit: Quit) |
2022-04-21 09:14:54 +0200 | <albet70> | > p = s [2..] where s (x : xs) = s [i <- xs, mod i x /= 0] |
2022-04-21 09:14:56 +0200 | <lambdabot> | <hint>:1:3: error: parse error on input ‘=’ |
2022-04-21 09:15:17 +0200 | <albet70> | > s [2..] where s (x : xs) = s [i <- xs, mod i x /= 0] |
2022-04-21 09:15:19 +0200 | <lambdabot> | <hint>:1:9: error: parse error on input ‘where’ |
2022-04-21 09:17:13 +0200 | <tomsmeding> | > let p = s [2..] where s (x : xs) = s [i <- xs, mod i x /= 0] in p |
2022-04-21 09:17:15 +0200 | <lambdabot> | <hint>:1:41: error: |
2022-04-21 09:17:15 +0200 | <lambdabot> | parse error on input ‘<-’ |
2022-04-21 09:17:15 +0200 | <lambdabot> | Perhaps this statement should be within a 'do' block? |
2022-04-21 09:17:25 +0200 | <tomsmeding> | > let p = s [2..] where s (x : xs) = s [i | i <- xs, mod i x /= 0] in p |
2022-04-21 09:17:31 +0200 | <lambdabot> | mueval-core: Time limit exceeded |
2022-04-21 09:17:40 +0200 | <tomsmeding> | ¯\_(ツ)_/¯ |
2022-04-21 09:17:55 +0200 | fendor | (~fendor@178.115.48.2.wireless.dyn.drei.com) |
2022-04-21 09:18:56 +0200 | son0p | (~ff@181.136.122.143) |
2022-04-21 09:18:58 +0200 | <janus> | @src catMaybes |
2022-04-21 09:18:58 +0200 | <lambdabot> | catMaybes ls = [x | Just x <- ls] |
2022-04-21 09:19:39 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 09:19:39 +0200 | <janus> | zzz: how would you prefer to express catMaybes? with do-notation? |
2022-04-21 09:19:50 +0200 | Neon | (~Neon@2001:18c0:aa0:8200:cd5c:6a4f:dbd9:2404) (Quit: Leaving) |
2022-04-21 09:20:09 +0200 | Major_Biscuit | (~MajorBisc@c-001-009-046.client.tudelft.eduvpn.nl) |
2022-04-21 09:20:50 +0200 | <tomsmeding> | base defines catMaybes using 'mapMaybe id', and mapMaybe using recursion |
2022-04-21 09:21:44 +0200 | <janus> | but it is unclear what base optimizes for, i don't think it is readability ;) |
2022-04-21 09:21:49 +0200 | <tomsmeding> | indeed :p |
2022-04-21 09:21:51 +0200 | Pickchea | (~private@user/pickchea) |
2022-04-21 09:22:23 +0200 | zeenk | (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) |
2022-04-21 09:24:04 +0200 | jinsun | (~jinsun@user/jinsun) |
2022-04-21 09:24:21 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 09:24:57 +0200 | chele | (~chele@user/chele) |
2022-04-21 09:27:22 +0200 | gurkenglas | (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) |
2022-04-21 09:29:34 +0200 | <abastro> | Hm, isn't it that hard with do notation? |
2022-04-21 09:30:06 +0200 | <abastro> | I mean |
2022-04-21 09:30:21 +0200 | <abastro> | Is primes that hard to achieve with do notation |
2022-04-21 09:30:30 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:8b3f:8bd5:3852:70b0) |
2022-04-21 09:30:41 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
2022-04-21 09:30:44 +0200 | <abastro> | I dislike how there are two somewhat competing syntaxes for lists |
2022-04-21 09:30:54 +0200 | gehmehgeh | (~user@user/gehmehgeh) |
2022-04-21 09:31:02 +0200 | pretty_d1 | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 09:31:45 +0200 | pretty_d1 | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
2022-04-21 09:31:47 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 256 seconds) |
2022-04-21 09:33:52 +0200 | `2jt | (~jtomas@175.red-83-36-129.dynamicip.rima-tde.net) |
2022-04-21 09:35:20 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 09:36:45 +0200 | pawikan_ | (~jbarot@180.190.247.113) (Quit: Leaving) |
2022-04-21 09:38:56 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-04-21 09:39:17 +0200 | <tdammers> | list comprehensions combine several common operations on lists into a single, compact syntax: cartesian product, filtering (including via pattern matching), and mapping. |
2022-04-21 09:40:07 +0200 | <tdammers> | and they're not "competing syntaxes", really; you can write the same stuff in different ways, but each has different tradeoffs when it comes to readability and signalling intent |
2022-04-21 09:40:47 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer) |
2022-04-21 09:43:46 +0200 | Ram-Z | (~Ram-Z@li1814-254.members.linode.com) |
2022-04-21 09:45:23 +0200 | mmhat | (~mmh@55d4dd86.access.ecotel.net) |
2022-04-21 09:45:34 +0200 | <tomsmeding> | abastro: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/monad_comprehensions.html#ext… |
2022-04-21 09:46:23 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-04-21 09:48:35 +0200 | machinedgod | (~machinedg@24.105.81.50) |
2022-04-21 09:49:01 +0200 | zyklotomic | (~ethan@res380d-128-61-86-145.res.gatech.edu) (Ping timeout: 246 seconds) |
2022-04-21 09:50:17 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) |
2022-04-21 09:51:00 +0200 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-04-21 09:51:01 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 09:51:03 +0200 | zyklotomic | (~ethan@res380d-128-61-87-175.res.gatech.edu) |
2022-04-21 09:54:23 +0200 | acidjnk | (~acidjnk@p200300d0c722df6114cdc3ce0552b93f.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2022-04-21 09:55:35 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 09:57:50 +0200 | <abastro> | Existence of monad comprehension is the proof of the competition ime |
2022-04-21 09:58:37 +0200 | <abastro> | You could say it is not competing syntax, yeah, but then haskell got tons of syntax sugars which is hard to learn for beginners |
2022-04-21 10:01:56 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-04-21 10:01:56 +0200 | <tomsmeding> | abastro: haskell has lots of places where there are multiple ways to do the same thing |
2022-04-21 10:02:05 +0200 | CiaoSen | (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-04-21 10:02:21 +0200 | <tomsmeding> | function argument patterns / case expressions / pattern guards |
2022-04-21 10:02:52 +0200 | <tomsmeding> | MultiParamTypeClasses + FunctionalDependencies / TypeFamilies |
2022-04-21 10:02:58 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 10:04:09 +0200 | <tomsmeding> | [1..10] / enumFromTo 1 10 |
2022-04-21 10:04:16 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-04-21 10:04:22 +0200 | <tomsmeding> | maybe/either / pattern matching |
2022-04-21 10:04:43 +0200 | hololeap | (~hololeap@user/hololeap) (Excess Flood) |
2022-04-21 10:04:46 +0200 | <tomsmeding> | f (g x) / f $ g x |
2022-04-21 10:04:53 +0200 | <tomsmeding> | $ / & |
2022-04-21 10:04:56 +0200 | <tomsmeding> | :') |
2022-04-21 10:06:00 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-04-21 10:06:05 +0200 | <zzz> | janus: i don't have a specially favorite way, but there are no shortage of alternatives like `catMaybes = map fromJust . filter isJust` |
2022-04-21 10:06:45 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-04-21 10:10:14 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 10:14:47 +0200 | anomal | (~anomal@87.227.196.109) |
2022-04-21 10:17:48 +0200 | <abastro> | Multiple ways to do the same thing, tbh I don't like some of that |
2022-04-21 10:18:14 +0200 | <abastro> | Particularly because it is hard to say what is idiomatic. |
2022-04-21 10:19:04 +0200 | <abastro> | FunDeps vs TypeFamilies are one problem I think. (Btw I recall using '&' was discouraged) |
2022-04-21 10:20:30 +0200 | <abastro> | Eww pattern guards.. |
2022-04-21 10:20:57 +0200 | ccntrq | (~Thunderbi@2a01:e34:eccb:b060:b69c:53df:cf2c:87d1) |
2022-04-21 10:21:21 +0200 | <zzz> | some convenient sugar is good but in haskell there's a lot of bloat. if ... else ... then is completely unnecessary for example |
2022-04-21 10:21:57 +0200 | <abastro> | Yep, that as well |
2022-04-21 10:22:11 +0200 | <zzz> | pattern guards i like though |
2022-04-21 10:22:27 +0200 | <abastro> | If blockarguments were a thing, `bool` can replace if-then-else |
2022-04-21 10:22:45 +0200 | <abastro> | The problem with pattern guards as I see is how they add to the possible syntax |
2022-04-21 10:23:24 +0200 | <abastro> | Actually yea, maybe pattern guards are not that problematic |
2022-04-21 10:23:32 +0200 | <abastro> | ..hm |
2022-04-21 10:23:41 +0200 | <abastro> | How is pattern guards distinct from viewpatterns? |
2022-04-21 10:23:55 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 10:24:00 +0200 | abastro | (~abab9579@220.75.216.63) (Remote host closed the connection) |
2022-04-21 10:24:32 +0200 | abastro | (~abab9579@220.75.216.63) |
2022-04-21 10:24:39 +0200 | <merijn> | Well, one requires an extension, one does not... |
2022-04-21 10:25:14 +0200 | <abastro> | I mean ofc other than that |
2022-04-21 10:25:14 +0200 | chenqisu1 | (~chenqisu1@183.217.200.38) (Quit: Leaving) |
2022-04-21 10:25:15 +0200 | <merijn> | One is implicit function application voodoo, then other is explicit syntax |
2022-04-21 10:26:21 +0200 | <abastro> | Implicit function application voodoo? |
2022-04-21 10:26:56 +0200 | <abastro> | (I now think maybe pattern guard is fine? But then, it still adds to existing pile of syntax) |
2022-04-21 10:26:58 +0200 | michalz | (~michalz@185.246.204.43) (Read error: Connection reset by peer) |
2022-04-21 10:28:44 +0200 | <zzz> | i use pattern guards instead of matching + testing if True/False, so in my approach i effectively reduce syntactic complexity |
2022-04-21 10:30:58 +0200 | <abastro> | How do you achieve that? |
2022-04-21 10:31:02 +0200 | <abastro> | Could you show an example? |
2022-04-21 10:31:16 +0200 | <[Leary]> | Pattern guards are important when your scrutinee is of unknown type, e.g. casting from an existential into several possible types. Case-of would require a bunch of pointless nesting. |
2022-04-21 10:31:29 +0200 | <zzz> | i will write https://paste.jrvieira.com/1650529874386 |
2022-04-21 10:31:51 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 10:33:03 +0200 | michalz | (~michalz@185.246.204.58) |
2022-04-21 10:35:34 +0200 | <zzz> | or *i would* write, in a perfect world where `if` was not a reserved word |
2022-04-21 10:36:17 +0200 | <merijn> | zzz: eh...that's is a bad example, since it's needlessly complex :p |
2022-04-21 10:36:38 +0200 | <merijn> | zzz: https://paste.tomsmeding.com/ziG9PMWq |
2022-04-21 10:36:55 +0200 | <abastro> | There is also `bool t f p` |
2022-04-21 10:37:46 +0200 | <zzz> | merijn: it's only needlessy complex because there is alternative syntax. my point is to reduce syntax |
2022-04-21 10:37:51 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 10:38:10 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 10:38:15 +0200 | <zzz> | i don't like that guards test for True/False |
2022-04-21 10:38:30 +0200 | <abastro> | I mean, you could use `bool` |
2022-04-21 10:38:38 +0200 | <abastro> | Or hypothetically, make `if` function |
2022-04-21 10:38:44 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 10:38:47 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2022-04-21 10:38:59 +0200 | xff0x_ | (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 240 seconds) |
2022-04-21 10:39:01 +0200 | <zzz> | yes |
2022-04-21 10:39:14 +0200 | <zzz> | but at some point we are just writing lisp |
2022-04-21 10:39:37 +0200 | <zzz> | and noone wants that also :p |
2022-04-21 10:42:17 +0200 | <abastro> | Could useBlockArguments |
2022-04-21 10:42:28 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 10:43:37 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
2022-04-21 10:44:11 +0200 | <zzz> | the hell with do notation! |
2022-04-21 10:44:23 +0200 | <abastro> | https://paste.tomsmeding.com/I1gXsBMs |
2022-04-21 10:44:25 +0200 | <merijn> | Hot take: BlockArguments is terrible extension |
2022-04-21 10:44:54 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-04-21 10:45:06 +0200 | <abastro> | Well I like how parens could be avoided with BlockArguments |
2022-04-21 10:45:50 +0200 | <zzz> | merijn: i tend to agree. what makes it terrible in your opinion? |
2022-04-21 10:46:22 +0200 | <abastro> | Perhaps if-then-else also encourages proliferation of "Bool", so it deserves to be lengthy |
2022-04-21 10:46:46 +0200 | rembo10 | (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-04-21 10:47:32 +0200 | <zzz> | Bool should not benefit from special treatment |
2022-04-21 10:47:40 +0200 | rembo10 | (~rembo10@main.remulis.com) |
2022-04-21 10:47:52 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2022-04-21 10:47:53 +0200 | <zzz> | nor should lists |
2022-04-21 10:48:01 +0200 | <abastro> | True |
2022-04-21 10:48:12 +0200 | <zzz> | :) |
2022-04-21 10:49:59 +0200 | infinity0 | (~infinity0@185.112.146.113) (Ping timeout: 240 seconds) |
2022-04-21 10:52:46 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
2022-04-21 10:54:22 +0200 | tatsumaru | (~tatsumaru@87.227.200.124) |
2022-04-21 10:54:23 +0200 | chomwitt | (~chomwitt@2a02:587:dc1b:da00:e2f9:e987:da5c:6097) |
2022-04-21 10:57:19 +0200 | aman | (~aman@user/aman) (Ping timeout: 240 seconds) |
2022-04-21 10:57:44 +0200 | aman | (~aman@user/aman) |
2022-04-21 10:57:58 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 246 seconds) |
2022-04-21 10:59:45 +0200 | tatsumaru | (~tatsumaru@87.227.200.124) () |
2022-04-21 11:01:51 +0200 | ubert1 | (~Thunderbi@2a02:8109:9880:303c:8727:84d3:4f94:88b2) |
2022-04-21 11:02:33 +0200 | byorgey | (~byorgey@155.138.238.211) (Quit: leaving) |
2022-04-21 11:06:12 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2022-04-21 11:07:05 +0200 | <tdammers> | I have all sorts of complaints about lisp, but "too many parenthesizes" is not one of htem |
2022-04-21 11:10:17 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 11:10:18 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 276 seconds) |
2022-04-21 11:12:16 +0200 | DNH | (~DNH@2a02:8109:b740:2c4:11d5:718e:c7c6:4a90) |
2022-04-21 11:12:28 +0200 | <kuribas> | tdammers: +1 |
2022-04-21 11:12:42 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 11:14:27 +0200 | fef | (~thedawn@user/thedawn) |
2022-04-21 11:14:32 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 11:16:00 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 11:17:05 +0200 | <kuribas> | lisps offer a great deal of flexibility, but it's easy for code to become only readable by the author. |
2022-04-21 11:17:37 +0200 | <kuribas> | types reduce the expressivity, but make code more readable by other programmers. |
2022-04-21 11:19:33 +0200 | <abastro> | I saw ppl finding typical Haskell code quite unreadable though |
2022-04-21 11:21:22 +0200 | <merijn> | abastro: Sure, if you don't bother to learn the syntax |
2022-04-21 11:25:23 +0200 | <kuribas> | abastro: you can make unreadable, complicated code in any language. |
2022-04-21 11:25:44 +0200 | <kuribas> | IMO most unreadable haskell snippets use the (->) monad or functor. |
2022-04-21 11:25:56 +0200 | <kuribas> | That or use unnecessary abstractions. |
2022-04-21 11:26:21 +0200 | <zzz> | can you write unreadable code in APL? |
2022-04-21 11:27:19 +0200 | __monty__ | (~toonn@user/toonn) |
2022-04-21 11:27:20 +0200 | <kuribas> | "can you write readable code in APL" FTFY |
2022-04-21 11:27:23 +0200 | abastro | (~abab9579@220.75.216.63) (Ping timeout: 256 seconds) |
2022-04-21 11:28:07 +0200 | <zzz> | prespective |
2022-04-21 11:28:36 +0200 | <merijn> | kuribas: No :D |
2022-04-21 11:31:17 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 11:34:51 +0200 | <kuribas> | hmm, dynamic types are just dependent pairs... |
2022-04-21 11:35:45 +0200 | <kuribas> | And partial functions over those pairs. |
2022-04-21 11:37:49 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 11:38:23 +0200 | aman | (~aman@user/aman) |
2022-04-21 11:39:13 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 11:39:53 +0200 | <lortabac> | kuribas: 'Dynamic' in Haskell is a dependent pair, but I don't think it makes sense to generalize this specific representation to a universal definition of dynamic types |
2022-04-21 11:42:16 +0200 | CiaoSen | (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-04-21 11:42:22 +0200 | <tdammers> | when people say "unreadable", they usually mean "I am not familiar with this language and its idioms" |
2022-04-21 11:44:57 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 11:46:35 +0200 | <kuribas> | tdammers: yeah, "(+) <$> [1, 2] <$> [3, 4]" would be weird to an outsider. |
2022-04-21 11:46:56 +0200 | <kuribas> | erm "(+) <$> [1, 2] <*> [3, 4]" |
2022-04-21 11:47:49 +0200 | <kuribas> | lortabac: dynamic types are most of the time implemented by a tag + value. |
2022-04-21 11:48:02 +0200 | <kuribas> | lortabac: then they pattern match on the tag internally. |
2022-04-21 11:48:10 +0200 | <kuribas> | lortabac: which is just a dependent pair. |
2022-04-21 11:49:43 +0200 | <kuribas> | dyn : (t : Type ** t) |
2022-04-21 11:49:46 +0200 | <lortabac> | kuribas: are you sure? To me "dependent" means that the dependency between the tag and the type is somehow formalized |
2022-04-21 11:50:07 +0200 | <lortabac> | if it's all unsafe casts can we really call it dependent? |
2022-04-21 11:50:18 +0200 | <kuribas> | lortabac: that's the partial part :) |
2022-04-21 11:50:29 +0200 | <kuribas> | partial operations over dependent pairs. |
2022-04-21 11:50:50 +0200 | <lortabac> | I see |
2022-04-21 11:51:24 +0200 | <lortabac> | maybe we should say "morally dependent pairs" or something like that |
2022-04-21 11:51:44 +0200 | <lortabac> | but now I see your point |
2022-04-21 11:51:52 +0200 | oxide | (~lambda@user/oxide) (Ping timeout: 246 seconds) |
2022-04-21 11:52:00 +0200 | <kuribas> | lortabac: I am just thinking about how dynamic programmers claim types restrict you. |
2022-04-21 11:52:25 +0200 | <abastro[m]> | tdammers: Well but ppl say e.g. Go is highly readable |
2022-04-21 11:52:37 +0200 | <kuribas> | but you can implement dynamic in a static language using a dependent pair + unsafe cast. |
2022-04-21 11:53:03 +0200 | <lortabac> | kuribas: to be honest I kind of agree with them on this point |
2022-04-21 11:53:24 +0200 | <__monty__> | You don't even need those though? A simple ADT is also morally equivalent. |
2022-04-21 11:54:15 +0200 | <lortabac> | some of the things that you would do in Clojure are hard to do in Haskell |
2022-04-21 11:54:31 +0200 | zebrag | (~chris@user/zebrag) |
2022-04-21 11:54:39 +0200 | <__monty__> | And vice versa : ) |
2022-04-21 11:55:00 +0200 | oxide | (~lambda@user/oxide) |
2022-04-21 11:55:03 +0200 | <tdammers> | abastro[m]: so? Go looks very similar to languages people are already familiar with, so that's no surprise. |
2022-04-21 11:55:08 +0200 | <kuribas> | lortabac: I really disagree. |
2022-04-21 11:55:21 +0200 | <kuribas> | lortabac: They are easy to do in haskell, but we don't like the solution because it is partial. |
2022-04-21 11:55:41 +0200 | <kuribas> | lortabac: or involves passing a Aeson Value everywhere. |
2022-04-21 11:56:00 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 11:56:00 +0200 | <abastro[m]> | Indeed |
2022-04-21 11:56:29 +0200 | <kuribas> | You could make a static language with an "Any" type, which will have an implicit unsafe cast wherever used. |
2022-04-21 11:56:29 +0200 | <abastro[m]> | Also imperative style is similar to how ppl perform commands themselves |
2022-04-21 11:57:26 +0200 | <abastro[m]> | E.g. loop statement could be intuitive to even beginners |
2022-04-21 11:58:08 +0200 | <tdammers> | kuribas: not all those things are necessarily partial. In some cases, the problem is rather that Haskell largely uses nominal types rather than structural; conceptually, any value inhabits exactly one type. An example of an architecture where this matters is Ring middlewares. For example, you can make a middleware that augments a JSON request with a parsed body; any middlewares that don't care |
2022-04-21 11:58:10 +0200 | <tdammers> | about the parsed payload can just pass it through, but those that do care about it can match on it and use it. |
2022-04-21 11:58:28 +0200 | <lortabac> | kuribas: you would need a whole ecosystem of dynamically-typed Haskell in order to make it really usable |
2022-04-21 11:58:28 +0200 | <lortabac> | and also some syntactic sugar |
2022-04-21 11:58:31 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 11:58:56 +0200 | <tdammers> | if we want to do this in Haskell, things get awkward; we need to define separate types for "request without parsed payload" and "request with parsed payload" |
2022-04-21 11:59:25 +0200 | <tdammers> | a structural type system could, in principle, make this more ergonomic, without sacrificing type safety |
2022-04-21 12:00:09 +0200 | acidjnk | (~acidjnk@p200300d0c722df61048d478b5774cff4.dip0.t-ipconnect.de) |
2022-04-21 12:00:20 +0200 | <abastro[m]> | Structural type system is also unwieldy in other ways iirc |
2022-04-21 12:00:37 +0200 | <abastro[m]> | How do you do Typeclasses in structural types |
2022-04-21 12:01:30 +0200 | <kuribas> | tdammers: I think higher kinded extensible records are a great solution for this. |
2022-04-21 12:01:40 +0200 | pagnol | (~user@014198154145.ctinets.com) (Ping timeout: 246 seconds) |
2022-04-21 12:02:44 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 12:02:56 +0200 | <kuribas> | lortabac: yeah, I am thinking about a language that mixes static with dynamic. |
2022-04-21 12:03:28 +0200 | <lortabac> | btw GHC already has Any |
2022-04-21 12:03:44 +0200 | <abastro[m]> | :i Any |
2022-04-21 12:03:49 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 12:03:50 +0200 | <lortabac> | but you have to unsafeCoerce explicitly in order to use it |
2022-04-21 12:04:09 +0200 | <abastro[m]> | Eh that does not work.. |
2022-04-21 12:06:22 +0200 | fendor | (~fendor@178.115.48.2.wireless.dyn.drei.com) (Remote host closed the connection) |
2022-04-21 12:08:59 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 12:09:52 +0200 | infinity0 | (~infinity0@185.112.146.113) |
2022-04-21 12:10:30 +0200 | dextaa | (~dextaa@user/dextaa) |
2022-04-21 12:10:50 +0200 | <kuribas> | > 2 :: Any |
2022-04-21 12:10:52 +0200 | <lambdabot> | error: |
2022-04-21 12:10:52 +0200 | <lambdabot> | • No instance for (Num Any) arising from the literal ‘2’ |
2022-04-21 12:10:52 +0200 | <lambdabot> | • In the expression: 2 :: Any |
2022-04-21 12:10:59 +0200 | <kuribas> | > (2 :: Int) :: Any |
2022-04-21 12:11:01 +0200 | <lambdabot> | error: |
2022-04-21 12:11:01 +0200 | <lambdabot> | • Couldn't match expected type ‘Any’ with actual type ‘Int’ |
2022-04-21 12:11:01 +0200 | <lambdabot> | • In the expression: (2 :: Int) :: Any |
2022-04-21 12:11:21 +0200 | <kuribas> | > (undefined :: Any) + 2 |
2022-04-21 12:11:23 +0200 | <lambdabot> | error: |
2022-04-21 12:11:23 +0200 | <lambdabot> | • No instance for (Num Any) arising from a use of ‘+’ |
2022-04-21 12:11:23 +0200 | <lambdabot> | • In the expression: (undefined :: Any) + 2 |
2022-04-21 12:11:34 +0200 | <kuribas> | lortabac: yeah. |
2022-04-21 12:11:39 +0200 | <lortabac> | this is another Any |
2022-04-21 12:12:22 +0200 | DNH | (~DNH@2a02:8109:b740:2c4:11d5:718e:c7c6:4a90) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-04-21 12:12:54 +0200 | <lortabac> | I'm talking about GHC.Exts.Any |
2022-04-21 12:13:43 +0200 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-04-21 12:17:05 +0200 | zebrag | (~chris@user/zebrag) |
2022-04-21 12:17:51 +0200 | Aseel | (~Aseel@175.142.127.212) |
2022-04-21 12:18:04 +0200 | zeenk | (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) (Quit: Konversation terminated!) |
2022-04-21 12:18:06 +0200 | pagnol | (~user@014198154145.ctinets.com) |
2022-04-21 12:18:34 +0200 | krappix | (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) |
2022-04-21 12:20:29 +0200 | <kuribas> | lortabac: how is it different? |
2022-04-21 12:21:27 +0200 | <krappix> | Hello all, how can I convert a string datetime to dataTime data: for example `"2022-04-21T10:13:31Z"` become `{day = 2022-04-21, time = 10:13:31}` |
2022-04-21 12:21:44 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
2022-04-21 12:22:16 +0200 | acidjnk | (~acidjnk@p200300d0c722df61048d478b5774cff4.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-04-21 12:22:51 +0200 | akegalj | (~akegalj@93-136-71-186.adsl.net.t-com.hr) |
2022-04-21 12:23:10 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 12:23:53 +0200 | <merijn> | there's a parse function in the time package |
2022-04-21 12:23:56 +0200 | <merijn> | @hackage time |
2022-04-21 12:23:56 +0200 | <lambdabot> | https://hackage.haskell.org/package/time |
2022-04-21 12:24:28 +0200 | <merijn> | Specifically parseTimeM |
2022-04-21 12:24:30 +0200 | <merijn> | https://hackage.haskell.org/package/time-1.12.1/docs/Data-Time-Format.html#v:parseTimeM |
2022-04-21 12:25:53 +0200 | jinsun | (~jinsun@user/jinsun) (Read error: Connection reset by peer) |
2022-04-21 12:26:08 +0200 | jinsun | (~jinsun@user/jinsun) |
2022-04-21 12:28:09 +0200 | zzz | (~z@user/zero) (Ping timeout: 248 seconds) |
2022-04-21 12:28:18 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 276 seconds) |
2022-04-21 12:28:53 +0200 | <krappix> | merijn: thank you |
2022-04-21 12:28:56 +0200 | acidjnk | (~acidjnk@p200300d0c722df612d209b48ee4192e4.dip0.t-ipconnect.de) |
2022-04-21 12:32:27 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 12:32:32 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-04-21 12:33:30 +0200 | mmhat | (~mmh@55d4dd86.access.ecotel.net) (Ping timeout: 276 seconds) |
2022-04-21 12:33:55 +0200 | mmhat | (~mmh@55d4dd86.access.ecotel.net) |
2022-04-21 12:36:39 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
2022-04-21 12:37:01 +0200 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2022-04-21 12:37:21 +0200 | mcglk | (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
2022-04-21 12:38:42 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 276 seconds) |
2022-04-21 12:39:02 +0200 | mcglk | (~mcglk@131.191.49.120) |
2022-04-21 12:39:03 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 12:39:42 +0200 | dextaa9 | (~dextaa@user/dextaa) |
2022-04-21 12:39:45 +0200 | Lord_of_Life_ | Lord_of_Life |
2022-04-21 12:41:57 +0200 | dextaa | (~dextaa@user/dextaa) (Ping timeout: 276 seconds) |
2022-04-21 12:41:57 +0200 | dextaa9 | dextaa |
2022-04-21 12:42:11 +0200 | jinsun | (~jinsun@user/jinsun) (Ping timeout: 256 seconds) |
2022-04-21 12:42:13 +0200 | jinsun__ | (~jinsun@user/jinsun) |
2022-04-21 12:43:10 +0200 | krappix | (~krappix@nat-eduroam-76-gw-01-lne.lille.inria.fr) (Ping timeout: 250 seconds) |
2022-04-21 12:43:54 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 12:44:50 +0200 | <dminuoso> | Are there any well maintained haskell libraries that also expose a flake? |
2022-04-21 12:44:59 +0200 | DNH | (~DNH@2a02:8109:b740:2c4:11d5:718e:c7c6:4a90) |
2022-04-21 12:45:07 +0200 | <dminuoso> | Trying to get a gist of how haskell packages usually write their flakes |
2022-04-21 12:53:29 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 12:54:39 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 240 seconds) |
2022-04-21 12:55:52 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 248 seconds) |
2022-04-21 13:01:53 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 13:02:40 +0200 | CiaoSen | (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-04-21 13:02:41 +0200 | fef | (~thedawn@user/thedawn) (Quit: Leaving) |
2022-04-21 13:05:33 +0200 | <lortabac> | kuribas: the Any in lambdabot is the bool monoid (true if at least one element is true) |
2022-04-21 13:06:33 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-04-21 13:11:59 +0200 | acidjnk | (~acidjnk@p200300d0c722df612d209b48ee4192e4.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2022-04-21 13:12:38 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 13:13:57 +0200 | aman | (~aman@user/aman) |
2022-04-21 13:16:24 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds) |
2022-04-21 13:16:33 +0200 | <dminuoso> | Unrelatedly, if I bump cabal-version from >=1.10 to 3.0, does this warrant a major version bump? |
2022-04-21 13:16:55 +0200 | akegalj | (~akegalj@93-136-71-186.adsl.net.t-com.hr) (Quit: leaving) |
2022-04-21 13:16:59 +0200 | fendor | (~fendor@178.115.48.2.wireless.dyn.drei.com) |
2022-04-21 13:17:07 +0200 | <dminuoso> | If I take PVP literally, it seems not |
2022-04-21 13:17:26 +0200 | <dminuoso> | Dunno |
2022-04-21 13:17:28 +0200 | <dminuoso> | "Note that modifying imports or depending on a newer version of another package may cause extra orphan instances to be exported and thus force a major version change. |
2022-04-21 13:17:43 +0200 | <dminuoso> | Is cabal itself "a package you depend upon"? |
2022-04-21 13:19:57 +0200 | <__monty__> | Doesn't cabal-install discard package versions with incompatible cabal-version constraints? |
2022-04-21 13:20:50 +0200 | <dminuoso> | I guess if it did, it doesnt matter |
2022-04-21 13:22:54 +0200 | anomal | (~anomal@87.227.196.109) (Remote host closed the connection) |
2022-04-21 13:28:37 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 13:29:02 +0200 | Pickchea | (~private@user/pickchea) |
2022-04-21 13:30:07 +0200 | Unicorn_Princess | (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
2022-04-21 13:39:40 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 246 seconds) |
2022-04-21 13:42:36 +0200 | <kuribas> | tdammers: why would a middleware want to pass a parsed request? |
2022-04-21 13:44:39 +0200 | <kuribas> | tdammers: you mean like parse bytestring into JSON, to avoid every middleware having to do that? |
2022-04-21 13:46:11 +0200 | <kuribas> | tdammers: you could use "vault" for that. |
2022-04-21 13:46:27 +0200 | <kuribas> | Create a key for JSON body, and put it in the vault. |
2022-04-21 13:46:41 +0200 | pagnol | (~user@014198154145.ctinets.com) (Remote host closed the connection) |
2022-04-21 13:46:45 +0200 | <kuribas> | tdammers: I don't see how this needs dynamic types. |
2022-04-21 13:50:42 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 13:51:15 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
2022-04-21 13:56:25 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-04-21 13:57:56 +0200 | <abastro[m]> | What is "vault"? |
2022-04-21 13:58:59 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 240 seconds) |
2022-04-21 14:00:34 +0200 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2022-04-21 14:05:37 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
2022-04-21 14:12:05 +0200 | <kuribas> | abastro[m]: https://hackage.haskell.org/package/wai-3.2.3/docs/Network-Wai.html#v:vault |
2022-04-21 14:12:44 +0200 | <abastro[m]> | Oh, so an invisible store |
2022-04-21 14:14:29 +0200 | <kuribas> | more like a store that allows you to put any type in it. |
2022-04-21 14:14:39 +0200 | qwedfg | (~qwedfg@user/qwedfg) (Ping timeout: 240 seconds) |
2022-04-21 14:14:44 +0200 | <tdammers> | kuribas: it doesn't, that's the thing. The middleware is essentially (Request -> Response) -> (RequestWithMaybeJSONPayload -> Response) or sth like that. Which would work, except that now Request and RequestWithMaybeJSONPayload are no longer the same type, even for non-JSON requests |
2022-04-21 14:15:21 +0200 | <kuribas> | tdammers: put JSON in the vault? |
2022-04-21 14:15:45 +0200 | <tdammers> | that removes the JSON parsing aspect from the type entirely |
2022-04-21 14:16:06 +0200 | JordiGH | (~jordi@user/jordigh) |
2022-04-21 14:16:32 +0200 | <kuribas> | so just like the dynamic solution, right? |
2022-04-21 14:16:50 +0200 | <tdammers> | well, vault is kind of out-of-band |
2022-04-21 14:17:00 +0200 | dcoutts__ | (~duncan@host213-122-143-81.range213-122.btcentralplus.com) |
2022-04-21 14:17:10 +0200 | <tdammers> | the way Ring does it, you just extend the request object with an additional field |
2022-04-21 14:17:15 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) |
2022-04-21 14:17:26 +0200 | <tdammers> | I guess you could use some sort of extensible-records solution for that in Haskell |
2022-04-21 14:19:07 +0200 | dcoutts_ | (~duncan@host213-122-143-81.range213-122.btcentralplus.com) (Ping timeout: 240 seconds) |
2022-04-21 14:22:58 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 14:26:27 +0200 | JordiGH | (~jordi@user/jordigh) (Ping timeout: 260 seconds) |
2022-04-21 14:27:26 +0200 | Aseel | (~Aseel@175.142.127.212) (Remote host closed the connection) |
2022-04-21 14:35:34 +0200 | <abastro[m]> | Static types are often problematic like in this case, I gusss |
2022-04-21 14:35:49 +0200 | <abastro[m]> | I should have said nominal type duh |
2022-04-21 14:38:18 +0200 | `2jt | (~jtomas@175.red-83-36-129.dynamicip.rima-tde.net) (Ping timeout: 276 seconds) |
2022-04-21 14:38:45 +0200 | <abastro[m]> | (Hmm I wonder how structural typing could be done well) |
2022-04-21 14:41:00 +0200 | <tdammers> | I've been thinking about that myself (the "structural typing done well" thing) |
2022-04-21 14:44:11 +0200 | <abastro[m]> | Oh, could you give the gist of results? |
2022-04-21 14:44:59 +0200 | <kuribas> | tdammers: but "Application -> Application" doesn't change the type. |
2022-04-21 14:45:08 +0200 | <kuribas> | I don't see how anything other than vault can help here... |
2022-04-21 14:45:58 +0200 | <kuribas> | higher kinded extensible-records are nice since you can have variations of the same kind of data, and also apply generic methods over them. |
2022-04-21 14:46:07 +0200 | <tdammers> | abastro[m]: currently, the results I have are "I will have to make a little toy language to try out a bunch of things", and "I will likely have to sacrifice type inference to a large extent" |
2022-04-21 14:46:11 +0200 | <kuribas> | I am experimenting in idris with them. |
2022-04-21 14:46:27 +0200 | <abastro[m]> | Oh no. Losing type inference.. |
2022-04-21 14:46:38 +0200 | <kuribas> | So you can do folds over fields, mapping fields, zipping records, etc... |
2022-04-21 14:46:40 +0200 | <tdammers> | kuribas: obviously the Middleware type would have to change |
2022-04-21 14:46:50 +0200 | <abastro[m]> | It was not fun in Scala with less and unreliable type inference |
2022-04-21 14:46:54 +0200 | <kuribas> | tdammers: so it wouldn't be middleware anymore. |
2022-04-21 14:47:16 +0200 | <kuribas> | Middleware is something transparent between. |
2022-04-21 14:47:27 +0200 | <abastro[m]> | Kuribas, interesting that you could avoid doing lots of proofs |
2022-04-21 14:47:42 +0200 | <kuribas> | abastro[m]: which proofs? |
2022-04-21 14:48:10 +0200 | <tdammers> | oh, if that's your definition, then the clojure one doesn't qualify either, because it's not transparent either |
2022-04-21 14:48:28 +0200 | <tdammers> | idk., call it a "filter" or a "combinator" then |
2022-04-21 14:48:32 +0200 | <kuribas> | yeah, I guess not |
2022-04-21 14:49:27 +0200 | <kuribas> | abastro[m]: the type of map: mapRecord : ({a : k} -> f a -> g a) -> Record f l -> Record g l |
2022-04-21 14:49:31 +0200 | <abastro[m]> | Proofs that the records could be folded, zipped with types matching |
2022-04-21 14:49:31 +0200 | <abastro[m]> | That and extension as well |
2022-04-21 14:50:02 +0200 | <kuribas> | abastro[m]: I have: data RecordList : (k -> Type) -> List (String, k) -> Type |
2022-04-21 14:50:09 +0200 | <kuribas> | abastro[m]: Record is just a wrapper. |
2022-04-21 14:51:05 +0200 | <kuribas> | abastro[m]: "get" involves a "proof" that the field exists. |
2022-04-21 14:51:19 +0200 | <abastro[m]> | Yea, those ones |
2022-04-21 14:51:20 +0200 | <kuribas> | abastro[m]: which interestingly resolves to an integer (the index in the list). |
2022-04-21 14:51:32 +0200 | <abastro[m]> | I wonder if one of the proofs could be problematic |
2022-04-21 14:51:46 +0200 | <kuribas> | abastro[m]: nah, the proof is a simple induction. |
2022-04-21 14:52:46 +0200 | <kuribas> | abastro[m]: and the proof is done automatically by idris. |
2022-04-21 14:52:51 +0200 | <kuribas> | using proof search. |
2022-04-21 14:53:04 +0200 | <tdammers> | so, red herring - my point is, if I want to use the design of that Ring middleware in a nominally typed language, it gets ugly, but that's not because the language is typed, it's because the types are nominal |
2022-04-21 14:53:42 +0200 | <kuribas> | abastro[m]: so idris will just search all constructors for the right type. If found it is then converted to an integer (the index in the list). |
2022-04-21 14:54:18 +0200 | <abastro[m]> | Interesting, so that deptypes could be useful for certain usecases like this |
2022-04-21 14:54:56 +0200 | <abastro[m]> | Sometimes structural types feel like dynamic to me |
2022-04-21 14:55:05 +0200 | <kuribas> | IMO subtypes are problematic. |
2022-04-21 14:55:16 +0200 | <kuribas> | It's better to have polymorphism. |
2022-04-21 14:55:24 +0200 | <kuribas> | with constraints. |
2022-04-21 14:55:34 +0200 | <kuribas> | TypeWithFeature t => t -> ... |
2022-04-21 14:55:52 +0200 | <kuribas> | the constraint can be any proof in fact. |
2022-04-21 14:56:12 +0200 | AlexNoo_ | AlexNoo |
2022-04-21 14:56:45 +0200 | <tdammers> | kuribas: in general I agree; however, if you're going to do the "incremental enrichment" style processing that clojure people love so much, then this still means you have to introduce a lot of types, with the potential for a combinatorial explosion |
2022-04-21 14:56:46 +0200 | <kuribas> | For example {0 t:String} -> TableInSchema (s:Schema) t => t -> ... |
2022-04-21 14:57:33 +0200 | <abastro[m]> | Extensible records? |
2022-04-21 14:57:45 +0200 | <abastro[m]> | Oh right |
2022-04-21 14:58:11 +0200 | <abastro[m]> | Those records are subtyping-capable ones |
2022-04-21 14:59:58 +0200 | <abastro[m]> | <del>In the end, OOP wins in practical world I guess</del> |
2022-04-21 15:00:07 +0200 | <kuribas> | tdammers: I think it's easier to use a HKD record with Maybe. |
2022-04-21 15:01:42 +0200 | <tdammers> | kuribas: but now you have to tell everyone in the chain about the JSON value you may or may not be adding somewhere along the way, even all the parts of the chain that will do absolutely nothing with it other than pass it along unchanged |
2022-04-21 15:02:49 +0200 | <abastro[m]> | Time to use duck typing? |
2022-04-21 15:03:01 +0200 | <tdammers> | that is exactly what I want to avoid |
2022-04-21 15:03:16 +0200 | <abastro[m]> | What is wrong with duck typing tho |
2022-04-21 15:03:33 +0200 | <tdammers> | in a nutshell: jesus.save() and file.save() aren't the same thing |
2022-04-21 15:03:41 +0200 | <abastro[m]> | It is basis of incredible amount of SW infrastructure |
2022-04-21 15:04:10 +0200 | <abastro[m]> | Yea but some tradeoff is inevitable |
2022-04-21 15:07:01 +0200 | <abastro[m]> | In which way is dynamic typing different? |
2022-04-21 15:07:13 +0200 | acidjnk | (~acidjnk@p200300d0c722df617c5129eda301b2dd.dip0.t-ipconnect.de) |
2022-04-21 15:07:26 +0200 | <abastro[m]> | I guess I wrongly equated dynamic typing with duck typing |
2022-04-21 15:09:56 +0200 | <tdammers> | "dynamic typing" means you don't perform type checks; if there are any type errors in your program, it will crash at runtime. |
2022-04-21 15:10:38 +0200 | <abastro[m]> | How about duck typing? |
2022-04-21 15:10:55 +0200 | <kuribas> | tdammers: then use vault? |
2022-04-21 15:11:09 +0200 | <kuribas> | tdammers: either it's in the type, or not, there is nothing between :) |
2022-04-21 15:11:19 +0200 | <tdammers> | duck typing basically means that instead of asking an object "are you a duck", you ask it to quack; if it can quack, then you treat it as a duck |
2022-04-21 15:11:49 +0200 | <tdammers> | kuribas: it should be in the type, yes, but, hmm, let me see if I can come up with a boiled-down example |
2022-04-21 15:12:30 +0200 | <kuribas> | tdammers: make the "extra fields" type polymorphic. |
2022-04-21 15:12:42 +0200 | <kuribas> | tdammers: and then a constraint on that field when you require it to have something. |
2022-04-21 15:13:11 +0200 | boxscape_ | (~boxscape_@p4ff0b7be.dip0.t-ipconnect.de) |
2022-04-21 15:14:10 +0200 | <abastro[m]> | Oh, so dynamic typing may crash if the type is wrong, before seeing its behavior |
2022-04-21 15:14:16 +0200 | <boxscape_> | It looks like if define a symbol and import a symbol with the same name, and then use it, GHC will prefer the symbol defined in that module, and not say anything about ambiguity. Is that generally true? |
2022-04-21 15:14:17 +0200 | <boxscape_> | for some reason I fully expected an error, but I'd much prefer to rely on the former behavior for a plugin I'm writing |
2022-04-21 15:15:15 +0200 | lottaquestions | (~nick@2607:fa49:5041:a200:5fb5:5ae2:e3c1:daee) (Quit: Konversation terminated!) |
2022-04-21 15:15:25 +0200 | <abastro[m]> | Confused because considerable portion of dynamic typing world is consisted of duck typing. I think there should be a good reason why it is so widespread. |
2022-04-21 15:17:34 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) |
2022-04-21 15:18:41 +0200 | <boxscape_> | duck typing seems like a strange mixture of nominal and structural typing. You're asking whether a value has the right structure by checking if it has a method with the right name |
2022-04-21 15:18:45 +0200 | <tdammers> | duck typing is popular in dynamic languages, because nominal type checks ("is-a") don't really buy you anything |
2022-04-21 15:18:47 +0200 | acidjnk | (~acidjnk@p200300d0c722df617c5129eda301b2dd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2022-04-21 15:18:58 +0200 | <tdammers> | either way, things crash at runtime |
2022-04-21 15:19:14 +0200 | <tdammers> | "this thing isn't declared to be a duck" vs. "this thing cannot quack" - but in both cases, it crashes |
2022-04-21 15:19:18 +0200 | pavonia | (~user@user/siracusa) |
2022-04-21 15:20:01 +0200 | <tdammers> | nominal checks however require more ceremony - you have to declare the type and its inheritance chain, and you have to add those type checks before accessing the quack() method |
2022-04-21 15:20:14 +0200 | <abastro[m]> | Yep, it is good enough for dynamic typing |
2022-04-21 15:20:33 +0200 | <tdammers> | it's more that Java-style type checks don't buy you anything in a dynamic language |
2022-04-21 15:20:40 +0200 | <boxscape_> | (actually I guess my previous statement applies to regular structural typing, too, since you check whether record fields have the right names) |
2022-04-21 15:20:57 +0200 | <tdammers> | PHP did cargo-cult Java's class model, including the is-a checks, but in practice, they're pretty much worthless |
2022-04-21 15:21:37 +0200 | <abastro[m]> | Java style type checks lol |
2022-04-21 15:21:50 +0200 | <dminuoso> | tdammers: I guess duck-typing is just an awkward phrasing of protocols/interfaces. |
2022-04-21 15:22:06 +0200 | <dminuoso> | Particularly for languages that lack the formalism to talk about protocols. |
2022-04-21 15:22:07 +0200 | <abastro[m]> | (Imho Java itself is lol. Got a good time at 2000 IT boom) |
2022-04-21 15:22:34 +0200 | <tdammers> | boxscape_: in principle, yes, but 1) the checks are done statically, so they still buy you a lot compared to dynamic duck typing, and 2) you can design the "names" system such that names are actually unique, so "jesus.save" and "file.save" would reference *different* 'save' labels |
2022-04-21 15:22:41 +0200 | <abastro[m]> | I heard protocols are not alike interfaces |
2022-04-21 15:22:51 +0200 | <abastro[m]> | But to my eyes it is closer to interfaces than typeclasses |
2022-04-21 15:22:56 +0200 | <boxscape_> | tdammers right, good point |
2022-04-21 15:23:27 +0200 | <tdammers> | dminuoso: I'd say duck typing is "protocols/interfaces, but implicit, and only checked at runtime" |
2022-04-21 15:23:32 +0200 | <dminuoso> | Yeah. |
2022-04-21 15:23:41 +0200 | <dminuoso> | Sounds about right |
2022-04-21 15:24:33 +0200 | <dminuoso> | Perhaps one important aspect about duck typing that is rarely mentioned, is that duck typing in particular makes sense for languages with monkey patching or meta programming abilities |
2022-04-21 15:24:47 +0200 | <abastro[m]> | Dynamic protocols sound quite good tbh |
2022-04-21 15:24:48 +0200 | <dminuoso> | Say Ruby's method_missing, which you can drive as dynamic as you want |
2022-04-21 15:24:56 +0200 | n3t | (n3t@s45.mydevil.net) |
2022-04-21 15:25:53 +0200 | <dminuoso> | Someone else might amend your thing with new methods/capabilities after the fact, allowing to satisfy some particular interface |
2022-04-21 15:26:20 +0200 | <abastro[m]> | OOP at its finest |
2022-04-21 15:26:35 +0200 | <tdammers> | yeah, so if you're going to miss out on static assertions anyway, at least make maximum use of the freedom that gives you |
2022-04-21 15:26:45 +0200 | <dminuoso> | Well, in some sense this is *actual* OOP in the original sense of smalltalk |
2022-04-21 15:26:51 +0200 | <tdammers> | yep |
2022-04-21 15:26:58 +0200 | <abastro[m]> | Oh |
2022-04-21 15:27:49 +0200 | <abastro[m]> | Python is rightful successor of smalltalk then? |
2022-04-21 15:27:58 +0200 | <dminuoso> | Hardly |
2022-04-21 15:28:11 +0200 | <abastro[m]> | Hmm |
2022-04-21 15:28:19 +0200 | <dminuoso> | Quite a many languages offer the capabilities, but it's not widely used and certainly doesnt influence design choices by authors. |
2022-04-21 15:28:29 +0200 | <dminuoso> | The core theme of OOP is that you have these objects that interact by exchanging "messages", they talk to each other. |
2022-04-21 15:28:46 +0200 | <dminuoso> | While objects can have internal state |
2022-04-21 15:29:05 +0200 | <dminuoso> | The only somewhat common example of this pattern Ive seen is in the Erlang world |
2022-04-21 15:29:32 +0200 | <abastro[m]> | Oh, so duck typing is only part of it |
2022-04-21 15:30:04 +0200 | <abastro[m]> | Funny that I saw some ppl consider Erlang as functional (along with oop ofc) |
2022-04-21 15:30:47 +0200 | <boxscape_> | this looks like a good explanation of Alan Kay's original view of OOP https://ovid.github.io/articles/alan-kay-and-oo-programming.html |
2022-04-21 15:33:42 +0200 | <abastro[m]> | Enterprise OOP got bigger though, because ppl love blunt classification |
2022-04-21 15:34:56 +0200 | Major_Biscuit | (~MajorBisc@c-001-009-046.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4) |
2022-04-21 15:35:30 +0200 | <abastro[m]> | E.g. "A bat is a bird, it can fly and has similar behaviors" |
2022-04-21 15:37:35 +0200 | <geekosaur> | which is still slightly better than "a bat is a mouse with wings" |
2022-04-21 15:38:23 +0200 | <exarkun> | https://stackoverflow.com/questions/13737458/cycle-in-type-synonym-declarations why is the type in the question not allowed but the newtype in the answer is allowed |
2022-04-21 15:39:00 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-04-21 15:39:00 +0200 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-04-21 15:39:00 +0200 | wroathe | (~wroathe@user/wroathe) |
2022-04-21 15:39:00 +0200 | <merijn> | exarkun: type synonyms are effectively just textual aliases |
2022-04-21 15:39:00 +0200 | <boxscape_> | ah, hm, looks like what I said above about ambiguous names is actually only true in ghci, in ghc you do get an error :/ |
2022-04-21 15:39:21 +0200 | <merijn> | exarkun: so a cyclic/recursive definition would expand to infinite size during type checking |
2022-04-21 15:39:32 +0200 | abastro[m] | sent a hs code block: https://libera.ems.host/_matrix/media/r0/download/libera.chat/483e85e0656278159253d51df5df0abb2ad7… |
2022-04-21 15:39:33 +0200 | <merijn> | exarkun: A newtype creates a new *opaque* type |
2022-04-21 15:39:56 +0200 | <merijn> | exarkun: Which means the expansion only happens when you "unpack" the newtype, which happens one finite step at a time |
2022-04-21 15:40:01 +0200 | <geekosaur> | boxscape_, yes, in ghci every line shadows every preceding line and creates a new local declaration |
2022-04-21 15:40:13 +0200 | <merijn> | (very handwavy explanation, but that's the gist) |
2022-04-21 15:40:55 +0200 | <boxscape_> | geekosaur and right, makes sense that it would work if it's being treated as a local declaration |
2022-04-21 15:40:59 +0200 | <boxscape_> | s/and/ah |
2022-04-21 15:41:28 +0200 | frost | (~frost@user/frost) (*.net *.split) |
2022-04-21 15:41:28 +0200 | hololeap | (~hololeap@user/hololeap) (*.net *.split) |
2022-04-21 15:41:28 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (*.net *.split) |
2022-04-21 15:41:28 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (*.net *.split) |
2022-04-21 15:41:28 +0200 | gehmehgeh | (~user@user/gehmehgeh) (*.net *.split) |
2022-04-21 15:41:28 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (*.net *.split) |
2022-04-21 15:41:28 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (*.net *.split) |
2022-04-21 15:41:28 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (*.net *.split) |
2022-04-21 15:41:28 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (*.net *.split) |
2022-04-21 15:41:28 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (*.net *.split) |
2022-04-21 15:41:28 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (*.net *.split) |
2022-04-21 15:41:28 +0200 | califax | (~califax@user/califx) (*.net *.split) |
2022-04-21 15:41:28 +0200 | stiell_ | (~stiell@gateway/tor-sasl/stiell) (*.net *.split) |
2022-04-21 15:41:35 +0200 | <merijn> | exarkun: In essence, the type synonym is an infinitely big (and thus irrepresentible in the type checker) term, whereas the newtype is a finite (but recursive) one |
2022-04-21 15:41:38 +0200 | <geekosaur> | ghci is just a bit weird, but it'd be even weirder if it behaved like an actual file |
2022-04-21 15:41:54 +0200 | <boxscape_> | so ghci kind of has local type declarations |
2022-04-21 15:42:08 +0200 | <exarkun> | merijn: Should I be concerned with why this difference exists, or is it just because? |
2022-04-21 15:42:09 +0200 | akegalj | (~akegalj@141-136-168-234.dsl.iskon.hr) |
2022-04-21 15:43:10 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 15:43:19 +0200 | JordiGH | (~jordi@user/jordigh) |
2022-04-21 15:43:24 +0200 | <merijn> | exarkun: I'd say it's due to a bit of a misnomer of type (which kinda implies it's defining a new (ha!) type, but is really defining a synonym/textual alias, whereas newtype defines a, well, new type ;) |
2022-04-21 15:43:37 +0200 | <geekosaur> | ghci makes a little moresense if you treat it as the inside of a `do` (which was the original intent) |
2022-04-21 15:43:49 +0200 | <abastro[m]> | I think newtypes are effectively datatypes, but they are optimized so that the conversion takes no cost in runtine. |
2022-04-21 15:44:07 +0200 | <merijn> | exarkun: So when you write "type Foo = Int" you can use Foo and Int interchangably. If you write "newtype Foo = Foo Int" you need to explicitly wrap/unwrap Foo to get an Int |
2022-04-21 15:44:10 +0200 | <boxscape_> | geekosaur right, do + the ability to declare types |
2022-04-21 15:44:35 +0200 | <boxscape_> | (which also shadow imports |
2022-04-21 15:44:37 +0200 | <boxscape_> | ) |
2022-04-21 15:44:45 +0200 | <exarkun> | merijn: okay, I might understand that. thanks. |
2022-04-21 15:44:54 +0200 | <abastro[m]> | exarkun I'd say `type` is like macros |
2022-04-21 15:45:08 +0200 | <abastro[m]> | Tho I'd be quite wrong with this |
2022-04-21 15:45:23 +0200 | <abastro[m]> | They do behave somewhat alike typedef in C |
2022-04-21 15:45:56 +0200 | <geekosaur> | it creates an alias in the typechecker |
2022-04-21 15:46:21 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 15:47:47 +0200 | zer0bitz | (~zer0bitz@2001:2003:f444:8f00:7182:b1bf:175f:4221) |
2022-04-21 15:47:59 +0200 | Pickchea | (~private@user/pickchea) |
2022-04-21 15:49:25 +0200 | <abastro[m]> | Type alias, yea that should be better and correct term |
2022-04-21 15:49:55 +0200 | abastro | (~abab9579@220.75.216.63) |
2022-04-21 15:51:18 +0200 | xff0x_ | (~xff0x@om126194210237.10.openmobile.ne.jp) |
2022-04-21 15:52:05 +0200 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2022-04-21 15:52:16 +0200 | <dminuoso> | Maybe we should have named `type` `alias`, and `newtype` just `type`. :) |
2022-04-21 15:52:30 +0200 | <dminuoso> | But alas, hysterical raisins. |
2022-04-21 15:52:35 +0200 | <abastro> | Great naming! |
2022-04-21 15:52:44 +0200 | <abastro> | Btw what does alias does, exactly? |
2022-04-21 15:52:54 +0200 | <geekosaur> | all three are kinda misnamed, but it's far too late now |
2022-04-21 15:53:16 +0200 | <abastro> | Idris do took `data` IIRC |
2022-04-21 15:53:20 +0200 | <abastro> | Or perhaps I misremembered |
2022-04-21 15:53:36 +0200 | <boxscape_> | Idris took most of the Haskell98 syntax |
2022-04-21 15:53:48 +0200 | <dminuoso> | It's just a bit sad because while it doesn't really have a meaningful impact on advanced users of Haskell, it does present one other hurdle for newcomers. |
2022-04-21 15:53:54 +0200 | <abastro> | `type A = B` does not literally replace all occurrences of A with B, right? |
2022-04-21 15:54:02 +0200 | <dminuoso> | abastro: correct |
2022-04-21 15:54:20 +0200 | <dminuoso> | abastro: once you have type aliases you get a whole lot of fun in GHC in facft. |
2022-04-21 15:54:21 +0200 | <abastro> | Yep, as it does not literally replace, what does it do? |
2022-04-21 15:54:31 +0200 | <dminuoso> | Sometimes GHC will show you the aliased name, sometimes not.. |
2022-04-21 15:54:35 +0200 | <Alex_test> | [quote=Falcon post_id=437033 time=1650547944 user_id=7] |
2022-04-21 15:54:35 +0200 | <Alex_test> | ����� ��� � ������������� ������ "�������� ��������"! *��������* |
2022-04-21 15:54:35 +0200 | <Alex_test> | [/quote] |
2022-04-21 15:54:35 +0200 | <Alex_test> | �������?!?! |
2022-04-21 15:54:35 +0200 | <Alex_test> | ������� ������� �.�. �., ������... *������* |
2022-04-21 15:54:51 +0200 | <dminuoso> | Heck, you sometimes have something like Expected `[Unaliased]` but got `Aliased` |
2022-04-21 15:54:56 +0200 | <dminuoso> | Real fun this way |
2022-04-21 15:55:13 +0200 | <Alex_test> | ��. |
2022-04-21 15:55:35 +0200 | <dminuoso> | abastro: its just a statement of equality . `type T = Int` is just saying these two things are the same thing. |
2022-04-21 15:55:45 +0200 | <abastro> | I see |
2022-04-21 15:55:45 +0200 | <dminuoso> | That means you can substitute one for the other anywhere |
2022-04-21 15:55:50 +0200 | <abastro> | So implementation dependent it is |
2022-04-21 15:55:54 +0200 | <dminuoso> | No, not at all |
2022-04-21 15:55:56 +0200 | <dminuoso> | That's the point |
2022-04-21 15:55:58 +0200 | <abastro> | I mean |
2022-04-21 15:56:27 +0200 | <abastro> | Whether GHC would replace occurrences of `T` to `Int` for `type T = Int` |
2022-04-21 15:57:27 +0200 | <dminuoso> | If you specify -fprint-expanded-synonyms it will always expand all mentions to the expanded type |
2022-04-21 15:57:33 +0200 | <dminuoso> | If not, it's largely implementation dependent |
2022-04-21 15:58:14 +0200 | <dminuoso> | Now before you imagine -fprint-expanded-synonyms to be something you would always want |
2022-04-21 15:58:41 +0200 | cdman | (~dcm@user/dmc/x-4369397) (Quit: Leaving) |
2022-04-21 15:58:48 +0200 | <boxscape_> | abastro there are some things that wouldn't be true if it would just replace it, like e.g. in Haskell98 you can't use type synonyms in instances, though with -XTypeSynonymInstances you can |
2022-04-21 15:58:52 +0200 | <abastro> | How does GHC even manage to print with all these? |
2022-04-21 15:59:02 +0200 | <dminuoso> | age :: Lens T Int |
2022-04-21 15:59:04 +0200 | <dminuoso> | looks nice |
2022-04-21 15:59:12 +0200 | <abastro> | Oh I mean |
2022-04-21 15:59:27 +0200 | <abastro> | How does GHC manage to type check with all the type aliases/ |
2022-04-21 15:59:31 +0200 | <abastro> | It must be "fun" |
2022-04-21 16:00:20 +0200 | <dminuoso> | I dont think this is a particular challenge |
2022-04-21 16:00:56 +0200 | <abastro> | Why? |
2022-04-21 16:00:57 +0200 | califax | (~califax@user/califx) |
2022-04-21 16:01:03 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-04-21 16:01:11 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-04-21 16:01:15 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-04-21 16:01:18 +0200 | <dminuoso> | As long as you know T is a type synonym, you could either always normalize, or just rig an type equality check to normalize whenever the other thing is not a type alias? |
2022-04-21 16:01:19 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-04-21 16:01:41 +0200 | <abastro> | I see, interesting |
2022-04-21 16:01:54 +0200 | gehmehgeh | (~user@user/gehmehgeh) |
2022-04-21 16:01:56 +0200 | <dminuoso> | The former is a bit simpler, but a bit more annoying on diagnostics |
2022-04-21 16:02:00 +0200 | <dminuoso> | Given my above example: |
2022-04-21 16:02:03 +0200 | <dminuoso> | age :: Lens T Int |
2022-04-21 16:02:14 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-04-21 16:02:15 +0200 | <geekosaur> | the only "fun" part about it is trying to remember when an alias was used so the error messages better match the source |
2022-04-21 16:02:15 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-04-21 16:02:18 +0200 | <dminuoso> | type Lens s t a b = forall f . Functor f => (a -> f b) -> s -> f t |
2022-04-21 16:02:41 +0200 | <dminuoso> | The left hand side is nice to look at, the right hand side is not. |
2022-04-21 16:03:03 +0200 | <abastro> | I see. Btw... <del>value alias in haskell when</del> |
2022-04-21 16:03:05 +0200 | slack1256 | (~slack1256@191.126.99.203) |
2022-04-21 16:03:06 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-04-21 16:03:15 +0200 | <geekosaur> | let-in |
2022-04-21 16:03:21 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 16:05:11 +0200 | <abastro> | `let` enables sharing, no? |
2022-04-21 16:05:37 +0200 | <abastro> | I heard `type` does not enable sharing of the involved types |
2022-04-21 16:06:25 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 16:06:32 +0200 | <dminuoso> | type-level evaluation works almost, but not quite, entirely different from value-level evaluation |
2022-04-21 16:06:37 +0200 | <dminuoso> | Not sure what "sharing" would even mean at the type level |
2022-04-21 16:06:41 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-04-21 16:07:54 +0200 | <abastro> | Now I wonder how dependent typing would even be possible |
2022-04-21 16:08:00 +0200 | <abastro> | With such distinctions |
2022-04-21 16:08:40 +0200 | stiell_ | (~stiell@gateway/tor-sasl/stiell) |
2022-04-21 16:09:09 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 16:10:32 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 16:12:30 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-04-21 16:12:39 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
2022-04-21 16:12:45 +0200 | nehsou^ | (~nehsou@50-192-56-193-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
2022-04-21 16:13:19 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 16:13:24 +0200 | <geekosaur> | let *may* enable sharing, it's up to the compiler |
2022-04-21 16:13:34 +0200 | <geekosaur> | types, it's not clear that "sharing" is a concept |
2022-04-21 16:13:54 +0200 | <abastro> | Oh noo.. I thought it was enforced. |
2022-04-21 16:13:58 +0200 | <geekosaur> | in a language like Omega it would |
2022-04-21 16:14:06 +0200 | <geekosaur> | I believe ghc takes it as a hint |
2022-04-21 16:14:25 +0200 | <abastro> | I again reveals that my haskell is not properly learned |
2022-04-21 16:15:09 +0200 | <boxscape_> | dminuoso presumably sharing would mean that if you have `type Sum = 3 + 5`, 3 + 5 is only computed once, regardless of how often you use the type Sum |
2022-04-21 16:15:34 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-04-21 16:15:55 +0200 | Guest97 | (~Guest97@2804:4d98:3001:15:db7c:f54a:d2b3:85db) |
2022-04-21 16:16:12 +0200 | <dminuoso> | boxscape_: Oh boy, now I want TypeTrace! |
2022-04-21 16:16:14 +0200 | Katarushisu | (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (Quit: The Lounge - https://thelounge.chat) |
2022-04-21 16:16:21 +0200 | <boxscape_> | oh yeah, that would be nice |
2022-04-21 16:16:30 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-04-21 16:16:34 +0200 | Katarushisu | (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) |
2022-04-21 16:16:56 +0200 | <boxscape_> | maybe you can implement it with custom type warnings https://github.com/ghc-proposals/ghc-proposals/pull/454 |
2022-04-21 16:17:02 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 16:17:13 +0200 | <dminuoso> | boxscape_: but anyway, I dont have any real type theory expertise to presume to know whether sharing at the type level even makes sense. |
2022-04-21 16:17:25 +0200 | <dminuoso> | In the presence of type inference and all |
2022-04-21 16:17:35 +0200 | <boxscape_> | fair, same here I suppose |
2022-04-21 16:17:42 +0200 | marquis_andras | (~marquis_a@14-201-230-116.tpgi.com.au) (Ping timeout: 260 seconds) |
2022-04-21 16:18:23 +0200 | <abastro> | TypeTrace XD |
2022-04-21 16:18:39 +0200 | gurkenglas | (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2022-04-21 16:19:35 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-04-21 16:19:46 +0200 | Guest97 | (~Guest97@2804:4d98:3001:15:db7c:f54a:d2b3:85db) (Client Quit) |
2022-04-21 16:20:33 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-04-21 16:21:56 +0200 | pie_ | (~pie_bnc@user/pie/x-2818909) (Quit: pie_) |
2022-04-21 16:23:21 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-04-21 16:26:06 +0200 | sammelweis_ | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Remote host closed the connection) |
2022-04-21 16:26:23 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 16:28:32 +0200 | vicfred | (~vicfred@user/vicfred) |
2022-04-21 16:28:36 +0200 | <abastro> | https://paste.tomsmeding.com/8AqrxpWX |
2022-04-21 16:28:59 +0200 | <abastro> | I guess I like having fun with useless abstractions |
2022-04-21 16:29:31 +0200 | marquis_andras | (~marquis_a@110-175-153-86.static.tpgi.com.au) |
2022-04-21 16:30:52 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 250 seconds) |
2022-04-21 16:31:34 +0200 | <dminuoso> | abastro: Lookup TOCTOU |
2022-04-21 16:31:43 +0200 | MajorBiscuit | (~MajorBisc@c-001-009-046.client.tudelft.eduvpn.nl) |
2022-04-21 16:31:47 +0200 | <dminuoso> | On a multi-user system that code has TOCTOU races |
2022-04-21 16:32:21 +0200 | pie_ | (~pie_bnc@user/pie/x-2818909) |
2022-04-21 16:32:28 +0200 | pie_ | (~pie_bnc@user/pie/x-2818909) (Client Quit) |
2022-04-21 16:32:40 +0200 | <abastro> | You got why I said "useless" |
2022-04-21 16:33:38 +0200 | <abastro> | But if my executable is working on a directory not intended for user access and user accessed anyway, is it my fault? |
2022-04-21 16:33:41 +0200 | pie_ | (~pie_bnc@user/pie/x-2818909) |
2022-04-21 16:35:12 +0200 | benin | (~benin@183.82.204.110) (Quit: The Lounge - https://thelounge.chat) |
2022-04-21 16:36:04 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 246 seconds) |
2022-04-21 16:41:39 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 240 seconds) |
2022-04-21 16:42:52 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 16:43:27 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 16:43:48 +0200 | <maerwald_> | that's why I dislike the 'path' package |
2022-04-21 16:43:55 +0200 | <maerwald_> | It makes that distinction as well |
2022-04-21 16:44:27 +0200 | michalz | (~michalz@185.246.204.58) (Remote host closed the connection) |
2022-04-21 16:45:51 +0200 | shriekingnoise | (~shrieking@201.231.16.156) |
2022-04-21 16:47:53 +0200 | <abastro> | Oh, path package existed |
2022-04-21 16:48:06 +0200 | <abastro> | Apparently it depends on heavyweight aeson |
2022-04-21 16:48:19 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
2022-04-21 16:48:20 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2022-04-21 16:49:10 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 16:49:16 +0200 | <abastro> | Is it really bad if I assume no one should interfere with certain directories in my program? |
2022-04-21 16:49:34 +0200 | <maerwald_> | yes |
2022-04-21 16:49:41 +0200 | <maerwald_> | the filesystem is mutable |
2022-04-21 16:50:19 +0200 | <abastro> | Then how do I manage the directories |
2022-04-21 16:52:20 +0200 | <maerwald_> | you handle failure when you operate on the file, so filesystem code usually has a lot of try/catch |
2022-04-21 16:52:36 +0200 | <maerwald_> | and you try to avoid checking the file type explicitly |
2022-04-21 16:52:57 +0200 | emad | (~emad@102.47.204.93) |
2022-04-21 16:53:24 +0200 | emad | (~emad@102.47.204.93) (Remote host closed the connection) |
2022-04-21 16:53:57 +0200 | <abastro> | I mean, isn't throwing IO exception equal to "We would not care about this specific case" |
2022-04-21 16:54:07 +0200 | <abastro> | oh you mean handling every possible exceptions |
2022-04-21 16:54:46 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2022-04-21 16:54:47 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2022-04-21 16:54:48 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 276 seconds) |
2022-04-21 16:56:28 +0200 | <abastro> | But that's not always practical |
2022-04-21 16:56:29 +0200 | <geekosaur> | you don't have to catch every possible exception, but for example if you expect a file and it's a directory then openFile will throw (except with a local directory on *bsd) |
2022-04-21 16:57:50 +0200 | <abastro> | Yep, I think in some cases, one just want to throw the error as "unexpected" |
2022-04-21 16:58:17 +0200 | <abastro> | Because it is likely a user error or hardware fault |
2022-04-21 16:58:49 +0200 | akegalj | (~akegalj@141-136-168-234.dsl.iskon.hr) (Ping timeout: 246 seconds) |
2022-04-21 16:59:02 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 16:59:21 +0200 | <abastro> | I think for small scripts, if I created a directory for my executable's usage, and someone modified it, then it is okay to throw error |
2022-04-21 16:59:45 +0200 | elkcl | (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Read error: Connection reset by peer) |
2022-04-21 16:59:58 +0200 | elkcl | (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
2022-04-21 17:01:05 +0200 | dextaa | (~dextaa@user/dextaa) (Remote host closed the connection) |
2022-04-21 17:02:15 +0200 | dextaa | (~dextaa@user/dextaa) |
2022-04-21 17:02:31 +0200 | <abastro[m]> | But yeah, "this directory better exists so I can avoid creating it by mistake" is dumb |
2022-04-21 17:03:00 +0200 | dextaa | (~dextaa@user/dextaa) (Remote host closed the connection) |
2022-04-21 17:03:03 +0200 | <abastro[m]> | Still think Executable part is worth remaining tho |
2022-04-21 17:03:43 +0200 | abastro | (~abab9579@220.75.216.63) (Ping timeout: 260 seconds) |
2022-04-21 17:03:50 +0200 | <abastro[m]> | As I dislike when suddenly `/usr/bin/sudo` disappears |
2022-04-21 17:04:11 +0200 | <abastro[m]> | (Could happen regularly I guess) |
2022-04-21 17:05:34 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:8b3f:8bd5:3852:70b0) (Quit: WeeChat 2.8) |
2022-04-21 17:05:48 +0200 | dextaa | (~dextaa@user/dextaa) |
2022-04-21 17:05:50 +0200 | <abastro[m]> | If filesystem is mutable, how do you manage cleaning up files? |
2022-04-21 17:07:09 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 17:07:34 +0200 | dextaa | (~dextaa@user/dextaa) (Remote host closed the connection) |
2022-04-21 17:07:35 +0200 | xff0x_ | (~xff0x@om126194210237.10.openmobile.ne.jp) (Read error: Connection reset by peer) |
2022-04-21 17:09:01 +0200 | dextaa | (~dextaa@user/dextaa) |
2022-04-21 17:11:14 +0200 | <abastro[m]> | Is "trying to remove files" enough? |
2022-04-21 17:14:35 +0200 | dextaa | (~dextaa@user/dextaa) (Remote host closed the connection) |
2022-04-21 17:14:59 +0200 | <c_wraith> | there are hierarchies of how much to care. Is the file in a user-owned application-specific space? Then if something else the user does interferes with it, that's their fault. |
2022-04-21 17:15:07 +0200 | maerwald_ | (~maerwald@mail.hasufell.de) (Changing host) |
2022-04-21 17:15:07 +0200 | maerwald_ | (~maerwald@user/maerwald) |
2022-04-21 17:15:15 +0200 | maerwald_ | maerwald |
2022-04-21 17:15:17 +0200 | <c_wraith> | Is the file in the shared temporary space? Best not to expect anything of it |
2022-04-21 17:15:37 +0200 | <c_wraith> | and there's a spectrum in between |
2022-04-21 17:15:44 +0200 | dextaa | (~dextaa@user/dextaa) |
2022-04-21 17:15:52 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 17:16:07 +0200 | <maerwald> | abastro[m]: removePathForcibly |
2022-04-21 17:16:17 +0200 | <maerwald> | and on windows, you also need retry strategies due to file locking |
2022-04-21 17:17:23 +0200 | <c_wraith> | The most dangerous cases are when you're writing a long-running program that will run with elevated privileges that creates temporary files in /tmp. |
2022-04-21 17:17:48 +0200 | <abastro[m]> | c_wraith: yea, I assume it is in user-owned app-specific space. So I think it's okay to crash while doing restartable tasks |
2022-04-21 17:18:18 +0200 | <abastro[m]> | maerwald: Surely `removePathForcibly` can fail |
2022-04-21 17:18:24 +0200 | <maerwald> | sure |
2022-04-21 17:18:32 +0200 | <maerwald> | you just `try` it an ignore errors then |
2022-04-21 17:18:50 +0200 | <abastro[m]> | c_wraith: oh no, elevated privilege |
2022-04-21 17:19:11 +0200 | <abastro[m]> | Yea, in the end, there is a scope in which you ignore vs consider |
2022-04-21 17:19:16 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 17:20:30 +0200 | <maerwald> | hideError errs = handleIO (\e -> if ioeGetErrorType e `elem` errs then pure () else liftIO . ioError $ e) |
2022-04-21 17:21:33 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 256 seconds) |
2022-04-21 17:23:53 +0200 | <abastro[m]> | Accumulating errors to log might be good hmm |
2022-04-21 17:24:09 +0200 | kenran | (~kenran@200116b82be0c90001725bbb0612ecd3.dip.versatel-1u1.de) |
2022-04-21 17:24:14 +0200 | <abastro[m]> | Wait I could just `stderr` |
2022-04-21 17:25:19 +0200 | <geekosaur> | until you have multiple threads and they interleave |
2022-04-21 17:25:59 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
2022-04-21 17:30:20 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
2022-04-21 17:32:53 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 256 seconds) |
2022-04-21 17:33:22 +0200 | pagnol | (~user@014198154145.ctinets.com) |
2022-04-21 17:34:52 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
2022-04-21 17:35:10 +0200 | <abastro[m]> | Hehe |
2022-04-21 17:35:11 +0200 | <abastro[m]> | Wait that could be messup |
2022-04-21 17:36:01 +0200 | <abastro[m]> | "Error: Foo"... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/16cd4b824228d3f7911017caf66cb8acc933…) |
2022-04-21 17:36:48 +0200 | <geekosaur> | it gets pretty bad, yep |
2022-04-21 17:37:09 +0200 | <geekosaur> | especially since buffering doesn't work the same way in Haskell as in C |
2022-04-21 17:39:34 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
2022-04-21 17:39:49 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) |
2022-04-21 17:42:26 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 17:43:09 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-04-21 17:44:56 +0200 | <abastro[m]> | Is it different in C? |
2022-04-21 17:45:18 +0200 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-04-21 17:45:59 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 240 seconds) |
2022-04-21 17:46:23 +0200 | zaquest | (~notzaques@5.130.79.72) |
2022-04-21 17:46:54 +0200 | <geekosaur> | C's string output will write to the buffer as a chunk. Haskell's putStr is literally mapM_ putChar, so another thread can interleave at the character level |
2022-04-21 17:46:59 +0200 | akegalj | (~akegalj@141-136-168-234.dsl.iskon.hr) |
2022-04-21 17:48:06 +0200 | <c_wraith> | yeah, you discover that very quickly if you're doing output from multiple threads. |
2022-04-21 17:48:07 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
2022-04-21 17:48:19 +0200 | <abastro[m]> | Now that is another gripe of String |
2022-04-21 17:48:31 +0200 | <pagnol> | does this correspond to anything in Haskell or cat theory? https://ramdajs.com/docs/#applySpec |
2022-04-21 17:48:41 +0200 | <pagnol> | (minus the recursion) |
2022-04-21 17:49:19 +0200 | <c_wraith> | that looks a lot like a catamorphism |
2022-04-21 17:49:34 +0200 | <c_wraith> | which is a fancy word for a specific kind of fold |
2022-04-21 17:49:48 +0200 | <pagnol> | means nothing to me but I'll look into it, thanks |
2022-04-21 17:50:07 +0200 | pagnol | (~user@014198154145.ctinets.com) (Remote host closed the connection) |
2022-04-21 17:51:13 +0200 | <c_wraith> | oh, I misread. too bad they didn't stick around for a correction. |
2022-04-21 17:51:48 +0200 | pagnol | (~user@014198154145.ctinets.com) |
2022-04-21 17:52:10 +0200 | <c_wraith> | pagnol: I misread. that's not it at all |
2022-04-21 17:52:20 +0200 | <pagnol> | c_wraith: my battery died, did you write anything more in response to my question? |
2022-04-21 17:52:28 +0200 | <abastro[m]> | Weird mix of record |
2022-04-21 17:52:48 +0200 | carl | (~carl@120.244.220.166) |
2022-04-21 17:52:54 +0200 | <c_wraith> | yeah, I wrote "I misread, it's not a catamorphism at all" |
2022-04-21 17:53:03 +0200 | <abastro[m]> | The API looks like weird mix of records to me* |
2022-04-21 17:54:19 +0200 | <pagnol> | If we disregard the recursion/nesting, then it's somewhat like A -> Map String (A -> ... whatever ) |
2022-04-21 17:54:23 +0200 | <c_wraith> | I don't think that's anything especially interesting theoretically. maybe you could claim there's something interesting about the preservation of shape, but mostly it's a convenient shorthand for constructing a flavor of function |
2022-04-21 17:54:36 +0200 | <hololeap> | kinda looks like: Map k (a -> v) -> a -> Map k v |
2022-04-21 17:55:45 +0200 | <pagnol> | ah yes |
2022-04-21 17:55:52 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-04-21 17:56:26 +0200 | coot | (~coot@213.134.190.95) |
2022-04-21 17:56:39 +0200 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-04-21 17:57:07 +0200 | <pagnol> | maybe in Haskell it's a bit awkward due to the lack of a proper record type, but I find myself reaching for this pattern in other languages quite often |
2022-04-21 17:58:17 +0200 | <c_wraith> | > sequence (M.fromList [("foo", (+1))]) 1 |
2022-04-21 17:58:18 +0200 | <lambdabot> | fromList [("foo",2)] |
2022-04-21 17:58:28 +0200 | <abastro[m]> | For the specified example there, one can use Monoid |
2022-04-21 17:58:39 +0200 | <c_wraith> | or just sequence. |
2022-04-21 17:59:12 +0200 | <abastro[m]> | > foldMap (\a -> (Sum a, Product a)) [1..5] |
2022-04-21 17:59:12 +0200 | <pagnol> | well usually one would like to use the type system to make sure that exactly certain keys are present |
2022-04-21 17:59:14 +0200 | <lambdabot> | (Sum {getSum = 15},Product {getProduct = 120}) |
2022-04-21 18:00:03 +0200 | <abastro[m]> | Instead of a tuple, one could create record datatype which implements Monoid |
2022-04-21 18:00:29 +0200 | <c_wraith> | if you have a data type, just make it Traversable |
2022-04-21 18:01:12 +0200 | <c_wraith> | that gets you basically the functionality there. |
2022-04-21 18:02:20 +0200 | <c_wraith> | of course, you typically wouldn't require that all your fields be the same type in Haskell. that's where things get more complex. |
2022-04-21 18:02:32 +0200 | <pagnol> | right |
2022-04-21 18:03:38 +0200 | lbseale | (~ep1ctetus@user/ep1ctetus) |
2022-04-21 18:04:37 +0200 | <abastro[m]> | I don't think we would get this kind of pattern that often in nominally typed languages |
2022-04-21 18:05:12 +0200 | <abastro[m]> | Could be useful for js |
2022-04-21 18:05:48 +0200 | <c_wraith> | we certainly have "build a record from an input" |
2022-04-21 18:06:14 +0200 | <c_wraith> | it just tends to get abstracted in a totally different direction |
2022-04-21 18:06:15 +0200 | <abastro[m]> | Oh, from single input? |
2022-04-21 18:06:57 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 18:06:59 +0200 | <abastro[m]> | Right. |
2022-04-21 18:07:11 +0200 | <c_wraith> | like, parser combinators for instance |
2022-04-21 18:07:24 +0200 | <pagnol> | alright, that's been an enlightening discussion thank you everybody for your responses |
2022-04-21 18:08:10 +0200 | <abastro[m]> | Actually I don't see the `applySpec` saving much keystrokes |
2022-04-21 18:08:46 +0200 | <abastro[m]> | Could use lambdas and apply parameter to each |
2022-04-21 18:08:57 +0200 | boxscape_ | (~boxscape_@p4ff0b7be.dip0.t-ipconnect.de) (Quit: Connection closed) |
2022-04-21 18:09:05 +0200 | <abastro[m]> | I could be mistaken though, like perhaps the records are large |
2022-04-21 18:10:22 +0200 | <c_wraith> | well, if you use it consistently, it gives you a kind of reuse. |
2022-04-21 18:10:35 +0200 | <c_wraith> | with how it supports nested records |
2022-04-21 18:11:12 +0200 | carl | (~carl@120.244.220.166) (Quit: WeeChat 3.5) |
2022-04-21 18:11:34 +0200 | kenran | (~kenran@200116b82be0c90001725bbb0612ecd3.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
2022-04-21 18:12:01 +0200 | <pagnol> | I find it useful in TypeScript because you can define a new type based an existing one and also supply a mapping in a type-safe manner |
2022-04-21 18:12:07 +0200 | vysn | (~vysn@user/vysn) (Ping timeout: 240 seconds) |
2022-04-21 18:12:12 +0200 | <c_wraith> | that's what made me think of parser combinators - the way they can be nested simply |
2022-04-21 18:12:56 +0200 | kenran | (~kenran@200116b82be0c9005f346492206b34b5.dip.versatel-1u1.de) |
2022-04-21 18:13:10 +0200 | kenran | (~kenran@200116b82be0c9005f346492206b34b5.dip.versatel-1u1.de) (Client Quit) |
2022-04-21 18:13:23 +0200 | kenran | (~kenran@200116b82be0c9005f346492206b34b5.dip.versatel-1u1.de) |
2022-04-21 18:14:44 +0200 | ubert1 | (~Thunderbi@2a02:8109:9880:303c:8727:84d3:4f94:88b2) (Remote host closed the connection) |
2022-04-21 18:15:01 +0200 | <pagnol> | I thought conceptually perhaps there is a connection to lenses somewhere |
2022-04-21 18:17:30 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 18:18:41 +0200 | <c_wraith> | I thought about that a bit, when I was connecting it up with Traversable, as lenses are sort of a generalization of Traversable. but you quickly get into incredibly ad-hoc things that work like `each' if you try to go that way |
2022-04-21 18:19:17 +0200 | <c_wraith> | > (1, 2) & each +~ 6 |
2022-04-21 18:19:18 +0200 | <lambdabot> | (7,8) |
2022-04-21 18:19:47 +0200 | <c_wraith> | handy, but so hard to predict |
2022-04-21 18:19:49 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-04-21 18:20:29 +0200 | vicfred | (~vicfred@user/vicfred) (Quit: Leaving) |
2022-04-21 18:23:19 +0200 | zyklotomic | (~ethan@res380d-128-61-87-175.res.gatech.edu) (Ping timeout: 240 seconds) |
2022-04-21 18:23:22 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-04-21 18:24:30 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) (Ping timeout: 276 seconds) |
2022-04-21 18:24:42 +0200 | <c_wraith> | or more directly... |
2022-04-21 18:24:44 +0200 | <c_wraith> | > sequenceOf each ((+2), (*3)) 5 |
2022-04-21 18:24:46 +0200 | <lambdabot> | (7,15) |
2022-04-21 18:25:02 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-04-21 18:25:23 +0200 | zyklotomic | (~ethan@r4-128-61-95-197.res.gatech.edu) |
2022-04-21 18:25:41 +0200 | <c_wraith> | ultimately, anything working like that in Haskell has the restriction that the functions must all have the same output type as well as the same input type |
2022-04-21 18:26:26 +0200 | jinsun__ | (~jinsun@user/jinsun) () |
2022-04-21 18:27:14 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
2022-04-21 18:27:55 +0200 | <c_wraith> | however, I've just realized... you can do a combinator interface without anything special at all |
2022-04-21 18:28:38 +0200 | jinsun | (~jinsun@user/jinsun) |
2022-04-21 18:29:02 +0200 | <c_wraith> | > (pure (,) <*> show <*> (* 3)) 2 |
2022-04-21 18:29:03 +0200 | <lambdabot> | ("2",6) |
2022-04-21 18:29:27 +0200 | <c_wraith> | the function instance for Applicative does everything already |
2022-04-21 18:30:10 +0200 | <c_wraith> | that's probably the most Haskellish interpretation of the purpose of that function |
2022-04-21 18:32:57 +0200 | <c_wraith> | at least when you look at applying it to records rather than the way TS uses dictionaries |
2022-04-21 18:35:23 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-04-21 18:36:11 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
2022-04-21 18:36:30 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-04-21 18:38:20 +0200 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2022-04-21 18:38:54 +0200 | <bitmapper> | is snap still ok to use or has development been slow for so long that it is no longer up to date |
2022-04-21 18:39:45 +0200 | ccntrq | (~Thunderbi@2a01:e34:eccb:b060:b69c:53df:cf2c:87d1) (Remote host closed the connection) |
2022-04-21 18:41:56 +0200 | heichro | (~user@p5495e117.dip0.t-ipconnect.de) |
2022-04-21 18:43:30 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 18:43:49 +0200 | <hololeap> | bitmapper: I haven't done any extensive testing with it, but we still package it for gentoo-haskell by loosening a bunch of upper bounds of dependencies in the cabal file |
2022-04-21 18:43:55 +0200 | <hololeap> | https://github.com/gentoo-haskell/gentoo-haskell/blob/master/dev-haskell/snap/snap-1.1.3.1-r5.ebui… |
2022-04-21 18:44:44 +0200 | <bitmapper> | it's just i really don't like Yesod and would greatly prefer to use Snap |
2022-04-21 18:45:40 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 18:46:22 +0200 | <hololeap> | anyway it compiles with ghc-9.0.2 and aeson-1.5.6.0 if you just edit the cabal file a bit |
2022-04-21 18:52:08 +0200 | econo | (uid147250@user/econo) |
2022-04-21 18:52:48 +0200 | <bitmapper> | it's pretty annoying needing to use GHC 9.2.2 |
2022-04-21 18:53:15 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) (Remote host closed the connection) |
2022-04-21 18:54:12 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 18:56:44 +0200 | <janus> | bitmapper: if you annoy mightybite on discord he seems to respond |
2022-04-21 18:57:04 +0200 | <janus> | bitmapper: i just had the a text-2 revision updated for snap-core like that |
2022-04-21 18:57:31 +0200 | <janus> | my strategy is to annoy no more than once every month, so i'd recommend making a schedule such that you don't forget to annoy him when it seems socially acceptable |
2022-04-21 18:58:04 +0200 | <janus> | *mightybyte |
2022-04-21 18:58:29 +0200 | ralu1 | (~ralu@static.211.245.203.116.clients.your-server.de) |
2022-04-21 18:58:57 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 276 seconds) |
2022-04-21 18:59:08 +0200 | <janus> | i also really deemphasize the urgency of it every time, to make it seem like i am a super cool relaxed person that doesn't really care about version bounds |
2022-04-21 19:00:39 +0200 | MajorBiscuit | (~MajorBisc@c-001-009-046.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4) |
2022-04-21 19:01:37 +0200 | merijn | (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-04-21 19:12:04 +0200 | thaumavorio | (~thaumavor@thaumavor.io) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-04-21 19:12:54 +0200 | thaumavorio | (~thaumavor@thaumavor.io) |
2022-04-21 19:12:58 +0200 | <janus> | > [1 | True] |
2022-04-21 19:12:59 +0200 | <lambdabot> | [1] |
2022-04-21 19:13:04 +0200 | <janus> | > [1 | False] |
2022-04-21 19:13:06 +0200 | <lambdabot> | [] |
2022-04-21 19:13:11 +0200 | <janus> | never saw this syntax before :O |
2022-04-21 19:13:17 +0200 | qwedfg | (~qwedfg@user/qwedfg) |
2022-04-21 19:13:45 +0200 | <geekosaur> | it's just a minimized list comprehension |
2022-04-21 19:14:08 +0200 | <geekosaur> | @undo [ 1 | False ] |
2022-04-21 19:14:08 +0200 | <lambdabot> | if False then [1] else [] |
2022-04-21 19:14:21 +0200 | kenran | (~kenran@200116b82be0c9005f346492206b34b5.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
2022-04-21 19:19:52 +0200 | <dminuoso> | > [ 1 | otherwise ] |
2022-04-21 19:19:55 +0200 | <lambdabot> | [1] |
2022-04-21 19:20:08 +0200 | <dminuoso> | I can see this being useful for random obfuscation tricks. |
2022-04-21 19:20:27 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 260 seconds) |
2022-04-21 19:20:31 +0200 | <dminuoso> | singleton x = [ x | otherwise ] |
2022-04-21 19:20:36 +0200 | <dminuoso> | Just put this into your code for good measure. |
2022-04-21 19:20:57 +0200 | <dminuoso> | Keeps your coworkers on their toes. |
2022-04-21 19:23:00 +0200 | dut | (~dut@user/dut) (Ping timeout: 276 seconds) |
2022-04-21 19:25:26 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2022-04-21 19:31:21 +0200 | <opqdonut> | dminuoso: lovely |
2022-04-21 19:32:38 +0200 | vicfred | (~vicfred@user/vicfred) |
2022-04-21 19:32:55 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2022-04-21 19:35:52 +0200 | <hololeap> | even better if you have MonadComprehensions on |
2022-04-21 19:37:57 +0200 | pagnol | (~user@014198154145.ctinets.com) (Ping timeout: 276 seconds) |
2022-04-21 19:38:11 +0200 | <dminuoso> | Okay, now with yahb in the mix, I've created a monster! |
2022-04-21 19:38:14 +0200 | <dminuoso> | % sing = flip (const id) [ x | otherwise ] [ undefined ] |
2022-04-21 19:38:14 +0200 | <yahb> | dminuoso: |
2022-04-21 19:38:18 +0200 | <dminuoso> | % sing |
2022-04-21 19:38:19 +0200 | <yahb> | dminuoso: [[<<Integer>>,<<[Char]>>,<<Char>>]] |
2022-04-21 19:38:35 +0200 | incertia_ | (~incertia@d47-69-133-171.try.wideopenwest.com) |
2022-04-21 19:38:44 +0200 | <dminuoso> | Spot this one! :) |
2022-04-21 19:39:20 +0200 | <dminuoso> | I should maintain a file with all these cute tricks. |
2022-04-21 19:39:24 +0200 | incertia | (~incertia@207.98.163.88) (Ping timeout: 240 seconds) |
2022-04-21 19:39:24 +0200 | incertia_ | incertia |
2022-04-21 19:42:30 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 19:43:32 +0200 | <opqdonut> | dminuoso: was there a previous definition of x just lying around or is that a useful definition like the lambdabot Expr stuff? |
2022-04-21 19:43:34 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
2022-04-21 19:43:43 +0200 | <dminuoso> | The latter. :) |
2022-04-21 19:44:01 +0200 | <geekosaur> | % :t x |
2022-04-21 19:44:01 +0200 | <yahb> | geekosaur: [Dynamic] |
2022-04-21 19:44:15 +0200 | <opqdonut> | % x+1 |
2022-04-21 19:44:15 +0200 | <yahb> | opqdonut: ; <interactive>:150:2: error:; * No instance for (Num [Dynamic]) arising from a use of `+'; * In the expression: x + 1; In an equation for `it': it = x + 1 |
2022-04-21 19:44:49 +0200 | p_____ | (~dyeplexer@user/dyeplexer) |
2022-04-21 19:44:58 +0200 | p_____ | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2022-04-21 19:46:31 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 19:47:57 +0200 | machinedgod | (~machinedg@24.105.81.50) |
2022-04-21 19:48:22 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2022-04-21 19:49:13 +0200 | neceve | (~quassel@2.29.116.221) |
2022-04-21 19:50:10 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-04-21 19:56:20 +0200 | aman | (~aman@user/aman) |
2022-04-21 20:01:00 +0200 | stackdroid18 | (14094@user/stackdroid) |
2022-04-21 20:03:11 +0200 | jakalx | (~jakalx@base.jakalx.net) () |
2022-04-21 20:03:18 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 20:04:00 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 20:04:59 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 20:05:34 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
2022-04-21 20:05:52 +0200 | `2jt | (~jtomas@175.red-83-36-129.dynamicip.rima-tde.net) |
2022-04-21 20:05:52 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Client Quit) |
2022-04-21 20:06:55 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Quit: mikoto-chan) |
2022-04-21 20:07:44 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 20:08:59 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 20:09:30 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-04-21 20:09:57 +0200 | acidjnk | (~acidjnk@p200300d0c722df612442a13791a64f70.dip0.t-ipconnect.de) |
2022-04-21 20:13:12 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Quit: ec) |
2022-04-21 20:16:40 +0200 | akegalj | (~akegalj@141-136-168-234.dsl.iskon.hr) (Quit: leaving) |
2022-04-21 20:17:04 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
2022-04-21 20:18:04 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
2022-04-21 20:19:40 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 20:19:57 +0200 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-04-21 20:20:08 +0200 | CiaoSen | (~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-04-21 20:22:40 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 20:23:02 +0200 | tromp | (~textual@77.249.230.40) |
2022-04-21 20:24:50 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 20:25:08 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 20:25:57 +0200 | `2jt | (~jtomas@175.red-83-36-129.dynamicip.rima-tde.net) (Remote host closed the connection) |
2022-04-21 20:25:58 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2022-04-21 20:26:35 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 20:29:38 +0200 | coot | (~coot@213.134.190.95) |
2022-04-21 20:31:15 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 20:32:24 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 20:32:28 +0200 | xkuru | (~xkuru@user/xkuru) |
2022-04-21 20:33:50 +0200 | jerry99 | (~330f3999@cerf.good1.com) |
2022-04-21 20:34:04 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
2022-04-21 20:37:05 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-04-21 20:37:12 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 20:39:37 +0200 | aman | (~aman@user/aman) |
2022-04-21 20:45:16 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 20:46:07 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 20:48:23 +0200 | <Hecate> | dminuoso: you messed up powerdns' description markup :) |
2022-04-21 20:50:08 +0200 | <dminuoso> | huh what? |
2022-04-21 20:50:53 +0200 | <Hecate> | https://hackage.haskell.org/package/powerdns-0.4.1 |
2022-04-21 20:50:55 +0200 | <dminuoso> | Mmm. This is surprising, I guess something changed between cabal 1.10 and 3.0 |
2022-04-21 20:50:57 +0200 | <dminuoso> | This is curious |
2022-04-21 20:51:09 +0200 | <Hecate> | dminuoso: you mean, between three major, breaking releases? |
2022-04-21 20:51:15 +0200 | <Hecate> | yeah something's bound to change :-P |
2022-04-21 20:52:54 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 20:52:58 +0200 | jhagborg | (~jhagborg@068-187-237-099.res.spectrum.com) |
2022-04-21 20:54:24 +0200 | <dminuoso> | Hecate: This is one is curious. I dont quite understand why this would be the case. |
2022-04-21 20:54:49 +0200 | mrosenbe | (~mrosenbe@4.7.173.100) (Remote host closed the connection) |
2022-04-21 20:55:29 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 20:55:48 +0200 | bahamas | (~lucian@93.122.251.130) |
2022-04-21 20:56:24 +0200 | <dminuoso> | Let me run haddock on this locally |
2022-04-21 20:58:28 +0200 | <dminuoso> | Could this possibly be a haddock bug? |
2022-04-21 20:59:21 +0200 | <dminuoso> | The description field hasnt changed, its freeform. It's haddock that interprets this as markup, but apparently not for when the cabal-version is 3.0 |
2022-04-21 20:59:59 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 21:04:10 +0200 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.5) |
2022-04-21 21:05:49 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 21:12:44 +0200 | jgeerds | (~jgeerds@d53604b0.access.ecotel.net) |
2022-04-21 21:12:51 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-04-21 21:19:00 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 21:23:54 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 21:24:30 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 21:27:42 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590:768c:7129:aa80:96d9) |
2022-04-21 21:29:38 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 272 seconds) |
2022-04-21 21:32:02 +0200 | bahamas | (~lucian@93.122.251.130) (Read error: Connection reset by peer) |
2022-04-21 21:32:10 +0200 | <dminuoso> | Hecate: Im beginning to suspect this could be a cabal-install bug. |
2022-04-21 21:32:25 +0200 | <dminuoso> | Presumably hackage ends up invoking `cabal haddock` right? |
2022-04-21 21:34:21 +0200 | tromp | (~textual@77.249.230.40) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 21:36:20 +0200 | MajorBiscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) |
2022-04-21 21:40:21 +0200 | stackdroid18 | (14094@user/stackdroid) (Quit: hasta la vista... tchau!) |
2022-04-21 21:40:45 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 21:40:59 +0200 | stackdroid18 | (14094@user/stackdroid) |
2022-04-21 21:41:16 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-04-21 21:45:21 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 21:48:31 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) |
2022-04-21 21:51:01 +0200 | tv | (~tv@user/tv) (Ping timeout: 240 seconds) |
2022-04-21 21:53:38 +0200 | anomal | (~anomal@87.227.196.109) |
2022-04-21 21:58:04 +0200 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 246 seconds) |
2022-04-21 21:58:25 +0200 | <dminuoso> | Hecate: Okay I have a testcase now. Im almost entirely convinced this is a cabal-install bug. |
2022-04-21 21:58:35 +0200 | <dminuoso> | Phew! |
2022-04-21 21:58:57 +0200 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
2022-04-21 22:00:40 +0200 | yauhsien | (~yauhsien@61-231-27-3.dynamic-ip.hinet.net) |
2022-04-21 22:01:00 +0200 | <sclv> | the description field isn't rendered by cabal-install or by haddock -- its rendered by hackage |
2022-04-21 22:01:47 +0200 | <dminuoso> | Mmm. I think I understand the reason now. In cabal-version 3.0 it was changed that empty lines are preserved and dots get processed as input now. |
2022-04-21 22:01:52 +0200 | <dminuoso> | That screwed up the haddock markdown. |
2022-04-21 22:02:43 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 22:03:49 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) |
2022-04-21 22:06:12 +0200 | <dminuoso> | Hecate: Okay, luckily I can simply use a revision here. Thanks for the headsup and sorry for the noise. |
2022-04-21 22:06:15 +0200 | jerry99 | (~330f3999@cerf.good1.com) (Quit: CGI:IRC (Ping timeout)) |
2022-04-21 22:08:17 +0200 | jhagborg | (~jhagborg@068-187-237-099.res.spectrum.com) (Ping timeout: 256 seconds) |
2022-04-21 22:08:59 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 22:10:49 +0200 | tv | (~tv@user/tv) |
2022-04-21 22:11:36 +0200 | heichro | (~user@p5495e117.dip0.t-ipconnect.de) (Quit: ERC (IRC client for Emacs 27.2)) |
2022-04-21 22:19:16 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 22:21:10 +0200 | fendor_ | (~fendor@178.165.175.241.wireless.dyn.drei.com) |
2022-04-21 22:22:16 +0200 | jhagborg | (~jhagborg@068-187-237-099.res.spectrum.com) |
2022-04-21 22:23:35 +0200 | fendor | (~fendor@178.115.48.2.wireless.dyn.drei.com) (Ping timeout: 256 seconds) |
2022-04-21 22:23:37 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 22:25:23 +0200 | stackdroid18 | (14094@user/stackdroid) (Quit: hasta la vista... tchau!) |
2022-04-21 22:26:58 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 22:31:19 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 22:32:21 +0200 | off^ | (~off@50-192-56-193-static.hfc.comcastbusiness.net) |
2022-04-21 22:36:19 +0200 | neurocyte8614492 | (~neurocyte@IP-046243080005.dynamic.medianet-world.de) |
2022-04-21 22:36:19 +0200 | neurocyte8614492 | (~neurocyte@IP-046243080005.dynamic.medianet-world.de) (Changing host) |
2022-04-21 22:36:19 +0200 | neurocyte8614492 | (~neurocyte@user/neurocyte) |
2022-04-21 22:36:55 +0200 | slack1256 | (~slack1256@191.126.99.203) (Ping timeout: 246 seconds) |
2022-04-21 22:40:50 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 22:40:56 +0200 | Guest91 | (~Guest91@caliga.eecs.tufts.edu) |
2022-04-21 22:41:11 +0200 | cross_ | (~cross@spitfire.i.gajendra.net) (Remote host closed the connection) |
2022-04-21 22:41:14 +0200 | <Guest91> | Guest91: Well, I've managed to get 8.6.5 to build for me. Took some doing, and two separate edits to the same part of a single conf.py file to fix two different problems with it. I'll see if that set of bugs persists into 9.2.2 before reporting it. (Problems are both with LaTeX config in a .py file. Python's Unicode handling hates the |
2022-04-21 22:41:15 +0200 | <Guest91> | single \ that LaTeX uses, but changing those to \\ seems to fix it. And LaTeX bugs out on the font specifications in the same config having spaces in them.) |
2022-04-21 22:44:58 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 22:46:35 +0200 | <EvanR> | are you sure you're in the right room |
2022-04-21 22:46:57 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) |
2022-04-21 22:48:08 +0200 | <Guest91> | For Haskell 8.6.5? Yup. Got some help here yesterday for a custom central build of GHC and several Haskell packages, figured I'd report back on progress in case anyone cared. |
2022-04-21 22:48:33 +0200 | <Guest91> | Step 1, still in progress, getting 9.2.2 built when all I have to work with initially is 8.2.2. |
2022-04-21 22:48:50 +0200 | littlebobeep | (~alMalsamo@gateway/tor-sasl/almalsamo) |
2022-04-21 22:49:17 +0200 | <EvanR> | oh ok |
2022-04-21 22:49:54 +0200 | <Guest91> | I was surprised to see .py files in the GHC source tree, but there they were. |
2022-04-21 22:50:07 +0200 | <Rembane> | Python 2 or 3? |
2022-04-21 22:51:03 +0200 | <EvanR> | build system stone soup |
2022-04-21 22:51:14 +0200 | <Guest91> | Dunno! They're conf.py files without a shebang at the top. Let me see what the configurator found. |
2022-04-21 22:51:48 +0200 | <geekosaur> | the test environment is in python |
2022-04-21 22:52:01 +0200 | <geekosaur> | s/environment/harness/ |
2022-04-21 22:52:08 +0200 | <Guest91> | Configurator log doesn't say. Given that, it's probably using the first thing that answers 'python' in my PATH, which is Python 3. |
2022-04-21 22:52:10 +0200 | <geekosaur> | dunno about anything else |
2022-04-21 22:52:18 +0200 | <Rembane> | Guest91: Sounds good. |
2022-04-21 22:52:39 +0200 | neceve | (~quassel@2.29.116.221) (Ping timeout: 240 seconds) |
2022-04-21 22:52:40 +0200 | <Rembane> | I guess Python is nicer to build a test harness in than bash |
2022-04-21 22:53:29 +0200 | <Guest91> | geekosaur: this particular conf.py file looks to be part of the documentation build. |
2022-04-21 22:56:13 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 22:57:40 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2022-04-21 22:57:40 +0200 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2022-04-21 22:57:43 +0200 | allbery_b | geekosaur |
2022-04-21 22:57:55 +0200 | <monochrom> | If you go back 10 years, you would find a perl script, too. >:) |
2022-04-21 22:58:07 +0200 | <Guest91> | I can go look in the tarballs I have stashed away! |
2022-04-21 22:58:11 +0200 | <geekosaur> | I gather it's still there, for LLVM |
2022-04-21 22:58:15 +0200 | <Guest91> | I may even have one that old. |
2022-04-21 22:58:17 +0200 | <monochrom> | Oh haha |
2022-04-21 22:59:28 +0200 | Guest27 | (~Guest27@2601:281:d47f:1590:768c:7129:aa80:96d9) (Quit: Client closed) |
2022-04-21 23:00:20 +0200 | <Guest91> | Hm, nope. I do have an elderly Haskell Platform build from 2011 -- for RHEL 5 -- but apparently wasn't saving tarballs at the time. Probably should just delete that; we have no RHEL 5 hosts left. |
2022-04-21 23:02:42 +0200 | MajorBiscuit | (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 276 seconds) |
2022-04-21 23:04:38 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 272 seconds) |
2022-04-21 23:05:28 +0200 | zer0bitz | (~zer0bitz@2001:2003:f444:8f00:7182:b1bf:175f:4221) (Ping timeout: 248 seconds) |
2022-04-21 23:06:33 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 23:06:59 +0200 | jhagborg | (~jhagborg@068-187-237-099.res.spectrum.com) (Ping timeout: 240 seconds) |
2022-04-21 23:07:59 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-04-21 23:08:09 +0200 | wootehfoot | (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
2022-04-21 23:08:21 +0200 | cheategg | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2022-04-21 23:08:50 +0200 | <geekosaur> | imagine being able to remove old platforms |
2022-04-21 23:09:28 +0200 | <Rembane> | In a few thousand years it should be possible. |
2022-04-21 23:09:31 +0200 | <geekosaur> | I couldn't even remove the pmax_ul4 stuff in 2010, when we'd desupported them in 2000 because the y2k patch didn't come out until late |
2022-04-21 23:10:14 +0200 | <Guest91> | Hah. I'm not as confident as I'd like to be that nobody's using this, so I'll have to dig to make sure. But at a guess, nobody wants Haskell Platform 2011.2.0.1 for anything anymore. |
2022-04-21 23:10:19 +0200 | <geekosaur> | at least I didn't have to try to build stuff for them any more |
2022-04-21 23:10:46 +0200 | <EvanR> | if you remove enough platforms is it really the original ship of ghthecius |
2022-04-21 23:10:52 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 23:11:21 +0200 | <EvanR> | I don't envy the job of software archeologist |
2022-04-21 23:12:23 +0200 | tromp | (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-04-21 23:12:35 +0200 | geekosaur | is *almost* tempted to install AFS just to poke and see if pmax support is *still* in the depot tree |
2022-04-21 23:12:44 +0200 | zeenk | (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) |
2022-04-21 23:13:00 +0200 | cosimone` | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection) |
2022-04-21 23:13:04 +0200 | <Guest91> | If you do, make sure to have a good bottle of scotch to hand. |
2022-04-21 23:13:12 +0200 | <Guest91> | You'll probably need it. |
2022-04-21 23:13:15 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-04-21 23:13:32 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 23:15:12 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2022-04-21 23:16:00 +0200 | fendor_ | (~fendor@178.165.175.241.wireless.dyn.drei.com) (Remote host closed the connection) |
2022-04-21 23:16:08 +0200 | aman | (~aman@user/aman) |
2022-04-21 23:17:49 +0200 | cheategg | (~Username@user/cheater) |
2022-04-21 23:17:52 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 23:19:02 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 23:22:03 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2022-04-21 23:26:04 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 240 seconds) |
2022-04-21 23:26:08 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2022-04-21 23:26:53 +0200 | abrantesasf | (~abrantesa@177.79.126.131) |
2022-04-21 23:27:40 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 246 seconds) |
2022-04-21 23:28:45 +0200 | boxscape_ | (~boxscape_@p4ff0b7be.dip0.t-ipconnect.de) |
2022-04-21 23:29:04 +0200 | abrantesasf | (~abrantesa@177.79.126.131) (Remote host closed the connection) |
2022-04-21 23:29:36 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Remote host closed the connection) |
2022-04-21 23:30:23 +0200 | hololeap | (~hololeap@user/hololeap) |
2022-04-21 23:30:42 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2022-04-21 23:31:01 +0200 | abrantesasf | (~abrantesa@177.79.126.131) |
2022-04-21 23:31:17 +0200 | abrantesasf | (~abrantesa@177.79.126.131) (Remote host closed the connection) |
2022-04-21 23:32:57 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 23:33:58 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 246 seconds) |
2022-04-21 23:35:18 +0200 | tvandinther | (~tvandinth@2406:e002:6815:1801:eda7:b44d:2b93:da27) |
2022-04-21 23:36:01 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-04-21 23:37:13 +0200 | <tvandinther> | Hi again. I recently got started with Haskell and I'm using VS Code with the language server installed through ghcup. I just started using modules and now the language server doesn't work with the project anymore. It also comes up with an error when I restart the language server: "Multi Cradle: No prefixes matched" I am not sure what the easiest |
2022-04-21 23:37:14 +0200 | <tvandinther> | solution is and why this happens. Appreciate any pointers :) |
2022-04-21 23:37:48 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 276 seconds) |
2022-04-21 23:40:16 +0200 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2022-04-21 23:41:47 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-04-21 23:42:58 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-04-21 23:43:13 +0200 | <sm> | #haskell-language-server:libera.chat knows most tvandinther |
2022-04-21 23:43:47 +0200 | <boxscape_> | (that's #haskell-language-server if you're not using matrix) |
2022-04-21 23:44:11 +0200 | <sm> | thanks |
2022-04-21 23:46:40 +0200 | tvandinther | (~tvandinth@2406:e002:6815:1801:eda7:b44d:2b93:da27) (Quit: Client closed) |
2022-04-21 23:46:55 +0200 | tvandinther | (~tvandinth@2406:e002:6815:1801:eda7:b44d:2b93:da27) |
2022-04-21 23:47:00 +0200 | <tvandinther> | thanks |
2022-04-21 23:47:58 +0200 | deadmarshal_ | (~deadmarsh@95.38.229.55) (Ping timeout: 246 seconds) |
2022-04-21 23:48:59 +0200 | redb | (~nmh@136.49.49.211) |
2022-04-21 23:52:59 +0200 | redb | (~nmh@136.49.49.211) (Ping timeout: 240 seconds) |
2022-04-21 23:53:41 +0200 | joo-_ | (~joo-_@fsf/member/joo--) (Ping timeout: 256 seconds) |
2022-04-21 23:53:43 +0200 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-04-21 23:54:17 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-04-21 23:54:36 +0200 | califax | (~califax@user/califx) |
2022-04-21 23:55:05 +0200 | zeenk | (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) (Quit: Konversation terminated!) |
2022-04-21 23:55:18 +0200 | joo-_ | (~joo-_@87-49-147-113-mobile.dk.customer.tdc.net) |
2022-04-21 23:55:19 +0200 | joo-_ | (~joo-_@87-49-147-113-mobile.dk.customer.tdc.net) (Changing host) |
2022-04-21 23:55:19 +0200 | joo-_ | (~joo-_@fsf/member/joo--) |
2022-04-21 23:58:28 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-04-21 23:59:30 +0200 | boxscape_ | (~boxscape_@p4ff0b7be.dip0.t-ipconnect.de) (Quit: Connection closed) |
2022-04-21 23:59:32 +0200 | DNH | (~DNH@2a02:8109:b740:2c4:11d5:718e:c7c6:4a90) (Quit: Textual IRC Client: www.textualapp.com) |